initial commit
[pfinal.git] / Routix / src / syscalls / syscalls.c
blob42bd32592adb90a2c58b7c78364e8cbfc36ed956
1 /*! \addtogroup Syscalls
2 \page syscalls.c
3 Core de las llamadas al sistema (junto con syscalls.asm).
4 */
7 #include "routix/system.h"
8 #include "routix/paging.h"
9 #include "routix/segm.h"
10 #include "routix/debug.h"
11 #include "sys/syscalls.h"
12 #include "routix/syscalls.h"
13 #include "routix/elf.h"
14 #include "routix/file.h"
15 #include "error.h"
16 #include "routix/timer.h"
17 #include <routix/kstdio.h>
18 #ifndef __TASK
19 #include "routix/task.h"
20 #endif
23 //Nuevas
24 extern int sys_process (void);
25 extern int sys_console (void);
26 extern int sys_signals (void);
27 extern int sys_timer (void);
28 extern int sys_mem (void);
29 extern int sys_misc (void); //Grupo de llamadas al sistema provisorias (cualquier fruta... va acá).
31 extern task_struct_t *actual;
34 //! Vector de grupos de llamadas al sistema
35 int (*syscall_group_vector[MAX_SYSCALLS]) (void) = {
36 (int (*) (void)) sys_process,
37 (int (*) (void)) sys_console,
38 (int (*) (void)) sys_signals,
39 (int (*) (void)) sys_timer,
40 (int (*) (void)) sys_mem,
41 (int (*) (void)) sys_misc
44 /*! \brief Definen la cantidad máxima de llamadas al sistema por grupo
45 * Son pasadas a una variable para poder levantar su valor desde syscalls.asm
47 unsigned int syscall_group_max[MAX_SYSCALLS] = {
48 SYS_PROCESS_MAX,
49 SYS_CONSOLE_MAX,
50 SYS_SIGNALS_MAX,
51 SYS_TIMER_MAX,
52 SYS_MEM_MAX,
53 SYS_MISC_MAX
56 /*! \brief Se ejecuta cuando se hace una llama a una syscall inexistente
57 * \todo Verificar que dice POSIX respecto a realizar llamadas erroneas (probablemente se genera alguna señal)
59 int sys_no_existe (dword numero)
61 kprintf("SysCall Inexistente: Grupo %d\tLlamada %d\n", numero>>16 , (word)numero);
62 actual->err_no = ENOSYS;
63 return -1;