diff options
author | Danny Holman <dholman@gymli.org> | 2022-01-15 16:24:08 -0600 |
---|---|---|
committer | Danny Holman <dholman@gymli.org> | 2022-01-15 16:25:41 -0600 |
commit | 06121c7075e91056820c674f192be460ef5eb656 (patch) | |
tree | 2d49c1ebfc0255877bf613d53dfd2723e48d8383 /arch/i386/boot/syscall.c | |
parent | acc73186bc3de78ceb0a54cbf2605dff1b9a6d62 (diff) |
arch: i386: add support for IRQs and system calls
Add support for rudementary system calls and IRQ interrupts.
Signed-off-by: Danny Holman <dholman@gymli.org>
Diffstat (limited to 'arch/i386/boot/syscall.c')
-rw-r--r-- | arch/i386/boot/syscall.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/arch/i386/boot/syscall.c b/arch/i386/boot/syscall.c new file mode 100644 index 0000000..fb613b3 --- /dev/null +++ b/arch/i386/boot/syscall.c @@ -0,0 +1,21 @@ +#include "syscall.h" +#include <kernel/io.h> +#include <stddef.h> + +void *(*syscall_handlers[30])(struct isr_frame *frame); + +void syscall_dispatch(struct isr_frame *frame) { + if (syscall_handlers[frame->eax] != NULL) + syscall_handlers[frame->eax](frame); + else + kprintf("Error: Invalid system call number: %d\n", frame->eax); + __asm__ volatile("cli;hlt"); +} + +void register_syscall(void *handler(struct isr_frame*), int num) { + syscall_handlers[num] = handler; +} + +void print_hello(struct isr_frame *frame) { + kprintf("Hello syscall\n"); +} |