diff options
author | Anton Kling <anton@kling.gg> | 2024-02-09 14:08:28 +0100 |
---|---|---|
committer | Anton Kling <anton@kling.gg> | 2024-02-09 14:08:28 +0100 |
commit | a8ffc46136eb16adc87fb520c724467d1295a854 (patch) | |
tree | 2d1758a4e3c5b6ef8430c5a6b1aca7249ef7a56d /kernel/drivers | |
parent | 581ac7e072633f68deed5c5d343603c053895907 (diff) |
Kernel/Interrupts: Restructure how interrupts are handeled in the kernel
Now all interrupts go through a common stub which will make certain
signal handlers easier to implement
Diffstat (limited to 'kernel/drivers')
-rw-r--r-- | kernel/drivers/keyboard.c | 5 | ||||
-rw-r--r-- | kernel/drivers/mouse.c | 6 | ||||
-rw-r--r-- | kernel/drivers/pit.c | 10 | ||||
-rw-r--r-- | kernel/drivers/rtl8139.c | 2 |
4 files changed, 8 insertions, 15 deletions
diff --git a/kernel/drivers/keyboard.c b/kernel/drivers/keyboard.c index 0e3edf8..f59e6a8 100644 --- a/kernel/drivers/keyboard.c +++ b/kernel/drivers/keyboard.c @@ -1,4 +1,5 @@ #include <assert.h> +#include <cpu/idt.h> #include <drivers/keyboard.h> #include <errno.h> #include <fs/devfs.h> @@ -107,8 +108,8 @@ struct KEY_EVENT { }; extern process_t *ready_queue; -__attribute__((interrupt)) void -int_keyboard(__attribute__((unused)) struct interrupt_frame *frame) { + +void int_keyboard(reg_t *frame) { outb(0x20, 0x20); u16 c; c = inb(PS2_REG_DATA); diff --git a/kernel/drivers/mouse.c b/kernel/drivers/mouse.c index 884b024..067f335 100644 --- a/kernel/drivers/mouse.c +++ b/kernel/drivers/mouse.c @@ -3,8 +3,8 @@ #include <fs/devfs.h> #include <fs/fifo.h> #include <fs/vfs.h> -#include <typedefs.h> #include <interrupts.h> +#include <typedefs.h> u8 mouse_cycle = 0; // unsigned char u8 mouse_u8[3]; // signed char @@ -45,11 +45,11 @@ void add_mouse(void) { get_current_task()->file_descriptors[fd] = NULL; } -__attribute__((interrupt)) void what(registers_t *r) { +void what(registers_t *r) { EOI(0xe); } -__attribute__((interrupt)) void int_mouse(registers_t *r) { +void int_mouse(reg_t *r) { (void)r; EOI(12); switch (mouse_cycle) { diff --git a/kernel/drivers/pit.c b/kernel/drivers/pit.c index 8f9c35c..509f3f5 100644 --- a/kernel/drivers/pit.c +++ b/kernel/drivers/pit.c @@ -41,15 +41,7 @@ void set_pit_count(u16 hertz) { outb(PIT_IO_CHANNEL_0, (divisor & 0xFF00) >> 8); } -__attribute__((interrupt)) void int_clock(registers_t *regs) { - process_t *p = get_current_task(); - if (p) { - // FIXME: For some reason eflags is the esp? I have read the - // manual multilpe times and still can't figure out why. - if (regs->eflags <= 0x90000000 && regs->eflags) { - p->useresp = regs->eflags; - } - } +void int_clock(reg_t regs) { outb(0x20, 0x20); pit_counter++; if (pit_counter >= hertz / 1000) { diff --git a/kernel/drivers/rtl8139.c b/kernel/drivers/rtl8139.c index b07ccef..6e738db 100644 --- a/kernel/drivers/rtl8139.c +++ b/kernel/drivers/rtl8139.c @@ -90,7 +90,7 @@ void handle_packet(void) { } } -__attribute__((interrupt)) void rtl8139_handler(void *regs) { +void rtl8139_handler(void *regs) { (void)regs; u16 status = inw(rtl8139.gen.base_mem_io + 0x3e); |