2 meinOS - A unix-like x86 microkernel operating system
3 Copyright (C) 2008 Janosch Gräf <janosch.graef@gmx.net>
5 This program is free software: you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation, either version 3 of the License, or
8 (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
19 #include <sys/types.h>
26 #include <interrupt.h>
30 * Initializes Syscall Management
31 * @return 0=Success; -1=Failure
34 memset(&syscalls
,0,SYSCALL_MAXNUM
*sizeof(struct syscall
));
40 * @param params Pointer to parameter list
42 void syscall_handler(uint32_t *stack
) {
43 proc_t
*proc_call
= proc_current
;
45 interrupt_save_stack(stack
,NULL
);
46 int cmd
= ((int*)*interrupt_curregs
.esp
)[0];
47 int *params
= ((void**)*interrupt_curregs
.esp
)[1];
49 if (cmd
<=SYSCALL_MAXNUM
) {
50 if (syscalls
[cmd
].func
!=NULL
) res
= dyn_call(syscalls
[cmd
].func
,params
,syscalls
[cmd
].numparams
);
51 else kill(proc_current
,SIGSYS
);
54 if (proc_current
==proc_call
) *interrupt_curregs
.eax
= res
;
59 * @param cmd Syscall number
60 * @param func Pointer to function
61 * @param numparams Number of parameters
62 * @return 0=Success; -1=Failure
64 int syscall_create(int cmd
,void *func
,int numparams
) {
65 if (cmd
>SYSCALL_MAXNUM
|| syscalls
[cmd
].func
!=NULL
) return -1;
66 syscalls
[cmd
].func
= func
;
67 syscalls
[cmd
].numparams
= numparams
;
72 * Unregisters a syscall
73 * @param cmd Syscall number
75 void syscall_destroy(int cmd
) {
76 if (cmd
<SYSCALL_MAXNUM
) syscalls
[cmd
].func
= NULL
;