matos/core/syscall.c

40 lines
913 B
C
Raw Normal View History

2021-11-08 22:31:57 +01:00
#include "syscall.h"
2021-11-06 00:13:40 +01:00
#include "keyboard.h"
2021-11-02 21:57:57 +01:00
#include "klibc.h"
#include "stdarg.h"
#include "thread.h"
2021-11-08 22:31:57 +01:00
int syscallExecute(int syscallId, const struct cpu_state *userCtx)
{
2021-11-02 21:57:57 +01:00
int ret;
switch (syscallId) {
2021-11-08 22:31:57 +01:00
case SYSCALL_ID_EXIT: {
2021-11-02 21:57:57 +01:00
uint status;
2021-11-05 23:02:23 +01:00
ret = syscallGet1arg(userCtx, &status);
2021-11-08 22:31:57 +01:00
if (ret != 0)
2021-11-02 21:57:57 +01:00
break;
threadExit();
assert(0);
break;
2021-11-08 22:31:57 +01:00
}
2021-11-05 23:02:23 +01:00
case SYSCALL_ID_YOLO:
2021-11-02 21:57:57 +01:00
ret = printf("YOLO FROM USERSPACE\n");
break;
2021-11-08 22:31:57 +01:00
case SYSCALL_ID_PUTC: {
2021-11-05 23:02:23 +01:00
unsigned int c;
ret = syscallGet1arg(userCtx, &c);
putc(c);
break;
2021-11-08 22:31:57 +01:00
}
2021-11-06 00:13:40 +01:00
case SYSCALL_ID_READ:
ret = keyboardRead();
break;
2021-11-02 21:57:57 +01:00
default:
2021-11-08 22:31:57 +01:00
printf("Unknon syscall id %d\n", syscallId);
ret = -ENOENT;
2021-11-02 21:57:57 +01:00
}
return ret;
}