matos/core/syscall.c

46 lines
1.2 KiB
C

#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;
}