From 3922adcdec5bd003b4106ffce79c28553bc40c15 Mon Sep 17 00:00:00 2001 From: Anton Kling Date: Wed, 14 Feb 2024 17:40:06 +0100 Subject: Kernel: Update signal handling and IPC --- kernel/syscalls/install_irq.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 kernel/syscalls/install_irq.c (limited to 'kernel/syscalls/install_irq.c') diff --git a/kernel/syscalls/install_irq.c b/kernel/syscalls/install_irq.c new file mode 100644 index 0000000..c50c6e0 --- /dev/null +++ b/kernel/syscalls/install_irq.c @@ -0,0 +1,26 @@ +#include +#include + +process_t *tmp; +void *handler; + +void jump_signal_handler(void *func, u32 esp); + +void test_handler(reg_t *regs) { + kprintf("IRQ FIRED\n"); + kprintf("handler: %x\n", handler); + tmp->interrupt_handler = handler; + signal_t sig; + sig.handler_ip = (uintptr_t)handler; + process_push_signal(tmp, sig); + return; +} + +int syscall_install_irq(void (*irq_handler)(), u8 irq) { + // TODO: This should be able to fail if the handler is already set + tmp = get_current_task(); + handler = irq_handler; + kprintf("IRQ INSTALLED\n"); + install_handler(test_handler, INT_32_INTERRUPT_GATE(0x0), 0x20 + irq); + return 1; +} -- cgit v1.2.3