From 40eecaecc552945f72a2b90f4122bf929960671c Mon Sep 17 00:00:00 2001 From: Aleksa Vuckovic Date: Sun, 26 Feb 2023 06:54:25 +0100 Subject: using one isr_stub for everything --- kernel/src/cpu/irq.c | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) (limited to 'kernel/src/cpu/irq.c') diff --git a/kernel/src/cpu/irq.c b/kernel/src/cpu/irq.c index 5eadd39..a7288c0 100644 --- a/kernel/src/cpu/irq.c +++ b/kernel/src/cpu/irq.c @@ -47,10 +47,9 @@ const char *const exception_name[] = { "Reserved", }; -void isr_def_handler(uint64_t number, uint64_t error) -{ +void exception(uint64_t number, uint64_t error) { switch (number) { - case 14: + case 0xe: printf("%s, error: 0x%x\n", exception_name[14], error); page_fault(error); break; @@ -62,9 +61,9 @@ void isr_def_handler(uint64_t number, uint64_t error) void eoi(uint64_t number) { if (PIT) { - if (number < 8) { + if (number < 0x28) { outb(PIC1_COMMAND, PIC_EOI); - } else if (number < 16) { + } else if (number < 0x30) { outb(PIC1_COMMAND, PIC_EOI); outb(PIC2_COMMAND, PIC_EOI); } @@ -73,18 +72,28 @@ void eoi(uint64_t number) } } -void irq_def_handler(uint64_t number) +void interrupt(uint64_t number) { switch (number) { - case 0: + case 0x20: timer_handler(); + eoi(number); break; - case 1: + case 0x21: keyboard_handler(); + eoi(number); break; default: printf("spurious interrupt\n"); break; } - eoi(number); +} + +void isr_def_handler(uint64_t number, uint64_t error) +{ + if (number < 0x20) { + exception(number, error); + } else { + interrupt(number); + } } -- cgit v1.2.3