summaryrefslogtreecommitdiff
path: root/kernel/syscalls.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/syscalls.c')
-rw-r--r--kernel/syscalls.c63
1 files changed, 60 insertions, 3 deletions
diff --git a/kernel/syscalls.c b/kernel/syscalls.c
index 714acde..56c4ae8 100644
--- a/kernel/syscalls.c
+++ b/kernel/syscalls.c
@@ -11,6 +11,7 @@
#include <sys/time.h>
#include <stdbool.h>
#include <stddef.h>
+#include "syscalls.h"
// TODO: use includes!!!
uint64_t timer_get_ms();
@@ -26,9 +27,6 @@ term_out screen;
terminal_tty tty1;
-/// there also is task_fork, task_wait, task_exit.. which is in scheduler.c
-////////////////////////////////////////
-
int syscall_unhandled(int nr)
{
char msg[256];
@@ -334,3 +332,62 @@ int syscall_stat(const char *path, struct stat *st,int none)
st->st_mode = S_IFCHR;
return 0;
}
+
+/// there also is task_fork, task_wait, task_exit.. which is in scheduler.c
+////////////////////////////////////////
+
+uint32_t syscall_generic(uint32_t nr,uint32_t p1, uint32_t p2, uint32_t p3)
+{
+
+ switch(nr){
+ case SYSCALL_EXIT :
+ return task_exit(p1,p2,p3);
+ case SYSCALL_CLOSE :
+ return syscall_close(p1,p2,p3);
+ case SYSCALL_EXECVE :
+ return syscall_execve(p1,p2,p3);
+ case SYSCALL_FORK :
+ return task_fork(p1,p2,p3);
+ case SYSCALL_GETPID :
+// return syscall_getpid(p1,p2,p3);
+ return -1;
+ case SYSCALL_ISATTY :
+ return syscall_isatty(p1,p2,p3);
+ case SYSCALL_LINK :
+// return syscall_link(p1,p2,p3);
+ return -1;
+ case SYSCALL_LSEEK :
+ return syscall_lseek(p1,p2,p3);
+ case SYSCALL_OPEN :
+ return syscall_open(p1,p2,p3);
+ case SYSCALL_READ :
+ return syscall_read(p1,p2,p3);
+ case SYSCALL_SBRK :
+ return syscall_sbrk(p1,p2,p3);
+ case SYSCALL_STAT :
+ return syscall_stat(p1,p2,p3);
+ case SYSCALL_FSTAT :
+ return syscall_stat(p1,p2,p3);
+ case SYSCALL_LSTAT :
+ return syscall_stat(p1,p2,p3);
+ case SYSCALL_TIMES :
+// return syscall_times(p1,p2,p3);
+ return -1;
+ case SYSCALL_UNLINK :
+// return syscall_unlink(p1,p2,p3);
+ return -1;
+ case SYSCALL_WAIT :
+ return task_wait(p1,p2,p3);
+ case SYSCALL_WRITE :
+ return syscall_write(p1,p2,p3);
+ case SYSCALL_GETTIMEOFDAY:
+ return syscall_gettimeofday(p1,p2);
+ case SYSCALL_READDIR :
+ return syscall_readdir(p1,p2,p3);
+ case SYSCALL_KILL :
+// return task_kill(p1,p2,p3);
+ return -1;
+ case SYSCALL_POLL :
+ return syscall_poll(p1);
+ }
+}