diff options
| author | Aleksa Vuckovic <aleksa@vuckovic.cc> | 2023-02-26 06:54:25 +0100 |
|---|---|---|
| committer | Aleksa Vuckovic <aleksa@vuckovic.cc> | 2023-02-26 06:54:25 +0100 |
| commit | 40eecaecc552945f72a2b90f4122bf929960671c (patch) | |
| tree | f8b500c024eda02672bb66ccde7a6124a2abfa40 /kernel/src/cpu/irq.c | |
| parent | b2f41efabf95f85dd6d24e460cf15f8c9ac17978 (diff) | |
using one isr_stub for everything
Diffstat (limited to 'kernel/src/cpu/irq.c')
| -rw-r--r-- | kernel/src/cpu/irq.c | 27 |
1 files changed, 18 insertions, 9 deletions
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); + } } |
