2026-02-19 18:54:48 +00:00
|
|
|
#include <kernel/machine/cpu.h>
|
|
|
|
|
#include <kernel/printk.h>
|
|
|
|
|
#include <kernel/syscall.h>
|
2026-02-08 13:12:24 +00:00
|
|
|
|
|
|
|
|
#define SYSCALL_TABLE_ENTRY(id, p) [SYS_##id] = (virt_addr_t)(sys_##p)
|
|
|
|
|
|
|
|
|
|
static const virt_addr_t syscall_table[] = {
|
2026-02-19 19:21:50 +00:00
|
|
|
SYSCALL_TABLE_ENTRY(TASK_EXIT, task_exit),
|
2026-02-23 18:43:49 +00:00
|
|
|
SYSCALL_TABLE_ENTRY(TASK_SELF, task_self),
|
2026-02-19 19:21:50 +00:00
|
|
|
SYSCALL_TABLE_ENTRY(TASK_CREATE, task_create),
|
|
|
|
|
SYSCALL_TABLE_ENTRY(TASK_CREATE_THREAD, task_create_thread),
|
2026-02-23 18:43:49 +00:00
|
|
|
SYSCALL_TABLE_ENTRY(TASK_GET_ADDRESS_SPACE, task_get_address_space),
|
2026-02-19 19:21:50 +00:00
|
|
|
SYSCALL_TABLE_ENTRY(THREAD_START, thread_start),
|
2026-02-08 13:12:24 +00:00
|
|
|
SYSCALL_TABLE_ENTRY(VM_OBJECT_CREATE, vm_object_create),
|
2026-02-19 19:21:50 +00:00
|
|
|
SYSCALL_TABLE_ENTRY(VM_OBJECT_READ, vm_object_read),
|
|
|
|
|
SYSCALL_TABLE_ENTRY(VM_OBJECT_WRITE, vm_object_write),
|
|
|
|
|
SYSCALL_TABLE_ENTRY(VM_OBJECT_COPY, vm_object_copy),
|
|
|
|
|
SYSCALL_TABLE_ENTRY(VM_REGION_CREATE, vm_region_create),
|
2026-02-23 18:43:49 +00:00
|
|
|
SYSCALL_TABLE_ENTRY(VM_REGION_KILL, vm_region_kill),
|
2026-02-19 19:21:50 +00:00
|
|
|
SYSCALL_TABLE_ENTRY(VM_REGION_READ, vm_region_read),
|
|
|
|
|
SYSCALL_TABLE_ENTRY(VM_REGION_WRITE, vm_region_write),
|
|
|
|
|
SYSCALL_TABLE_ENTRY(VM_REGION_MAP_ABSOLUTE, vm_region_map_absolute),
|
|
|
|
|
SYSCALL_TABLE_ENTRY(VM_REGION_MAP_RELATIVE, vm_region_map_relative),
|
|
|
|
|
SYSCALL_TABLE_ENTRY(VM_REGION_UNMAP_ABSOLUTE, vm_region_unmap_absolute),
|
|
|
|
|
SYSCALL_TABLE_ENTRY(VM_REGION_UNMAP_RELATIVE, vm_region_unmap_relative),
|
|
|
|
|
SYSCALL_TABLE_ENTRY(KERN_LOG, kern_log),
|
|
|
|
|
SYSCALL_TABLE_ENTRY(KERN_HANDLE_CLOSE, kern_handle_close),
|
|
|
|
|
SYSCALL_TABLE_ENTRY(KERN_CONFIG_GET, kern_config_get),
|
|
|
|
|
SYSCALL_TABLE_ENTRY(KERN_CONFIG_SET, kern_config_set),
|
|
|
|
|
SYSCALL_TABLE_ENTRY(CHANNEL_CREATE, channel_create),
|
|
|
|
|
SYSCALL_TABLE_ENTRY(PORT_CREATE, port_create),
|
|
|
|
|
SYSCALL_TABLE_ENTRY(PORT_CONNECT, port_connect),
|
|
|
|
|
SYSCALL_TABLE_ENTRY(PORT_DISCONNECT, port_disconnect),
|
|
|
|
|
SYSCALL_TABLE_ENTRY(MSG_SEND, msg_send),
|
|
|
|
|
SYSCALL_TABLE_ENTRY(MSG_RECV, msg_recv),
|
|
|
|
|
SYSCALL_TABLE_ENTRY(MSG_REPLY, msg_reply),
|
|
|
|
|
SYSCALL_TABLE_ENTRY(MSG_READ, msg_read),
|
|
|
|
|
SYSCALL_TABLE_ENTRY(MSG_WRITE, msg_write),
|
2026-02-08 13:12:24 +00:00
|
|
|
};
|
|
|
|
|
static const size_t syscall_table_count
|
|
|
|
|
= sizeof syscall_table / sizeof syscall_table[0];
|
|
|
|
|
|
2026-02-08 16:17:11 +00:00
|
|
|
virt_addr_t syscall_get_function(unsigned int sysid)
|
2026-02-08 13:12:24 +00:00
|
|
|
{
|
|
|
|
|
if (sysid >= syscall_table_count) {
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return syscall_table[sysid];
|
|
|
|
|
}
|