Vhex-kernel/src/kernel/syscall/handler.c

59 lines
1.1 KiB
C
Raw Normal View History

2019-12-29 16:39:30 +01:00
#include <kernel/syscall.h>
2020-01-01 14:19:18 +01:00
#include <kernel/util.h>
2019-12-29 16:39:30 +01:00
2020-01-01 14:19:18 +01:00
static void sys_test(uint32_t a, uint32_t b, uint32_t c, uint32_t d)
{
kvram_clear();
printk(0, 0, "a = %#x", a);
printk(0, 1, "b = %#x", b);
printk(0, 2, "c = %#x", c);
printk(0, 3, "d = %#x", d);
kvram_display();
DBG_WAIT;
}
static const void *sys_handler[15] = {
// Kernel Test
2020-01-01 14:19:18 +01:00
sys_test, //restart
// Process
2019-12-29 16:39:30 +01:00
NULL, //exit
sys_waitpid, //waitpid
NULL, //exec
// VFS
sys_read, //read
sys_write, //write
sys_open, //open
sys_close, //close
sys_lseek, //lseek
2020-01-01 14:19:18 +01:00
// Display
2020-01-01 14:19:18 +01:00
kvram_display, //kvram_display
kvram_clear, //kvram_clear
kvram_print, //kvram_print
kvram_ascii, //kvram_ascii
kvram_reverse, //kvram_reverse
kvram_scroll //kvram_scroll
2019-12-29 16:39:30 +01:00
};
void *sys_get_handler(int sysno)
{
2020-01-01 14:19:18 +01:00
// Check sysno validity
if (sysno < 0 || sysno >= 14)
return (0);
// DEBUG
/*kvram_clear();
2020-01-10 17:21:44 +01:00
printk(0, 0, "TRAPA ABI pre_handler !");
printk(0, 1, "sysno = %d", sysno);
printk(0, 2, "handler = %p", sys_handler[sysno]);
2020-01-01 14:19:18 +01:00
kvram_display();
DBG_WAIT;
2020-01-10 17:21:44 +01:00
DBG_WAIT;
DBG_WAIT;*/
2020-01-10 17:21:44 +01:00
2020-01-01 14:19:18 +01:00
// Return syscall
2019-12-29 16:39:30 +01:00
return ((void *)sys_handler[sysno]);
}