#include "syscall.h" #include "keyboard.h" #include "klibc.h" #include "stdarg.h" #include "thread.h" int syscallExecute(int syscallId, const struct cpu_state *userCtx) { int ret = 0; switch (syscallId) { case SYSCALL_ID_EXIT: { uint status; ret = syscallGet1arg(userCtx, &status); if (ret != 0) break; threadExit(); assert(0); break; } case SYSCALL_ID_YOLO: ret = printf("YOLO FROM USERSPACE\n"); break; case SYSCALL_ID_PUTC: { unsigned int c; ret = syscallGet1arg(userCtx, &c); putc(c); break; } case SYSCALL_ID_READ: ret = keyboardRead(); break; case SYSCALL_ID_TEST: { unsigned int arg1, arg2, arg3, arg4, arg5; ret = syscallGet5args(userCtx, &arg1, &arg2, &arg3, &arg4, &arg5); printf("Got 5args from userspace %d %d %d %d %d\n", arg1, arg2, arg3, arg4, arg5); break; } default: printf("Unknon syscall id %d\n", syscallId); ret = -ENOENT; } return ret; }