#include "lib/print.h" #include extern void send_eoi_master(void); extern void send_eoi_slave(void); extern uint8_t read_isr_master(void); extern uint8_t read_isr_slave(void); extern uint8_t ps2_read_data(); struct registers { uint32_t edi, esi, ebp, esp_dummy, ebx, edx, ecx, eax; uint32_t int_no; uint32_t error_code; uint32_t eip, cs, eflags, useresp, ss; }; const char* err_messages[32] = { [0] = "Divide by 0", [1] = "", [8] = "", [13] = "General Protection Fault", [14] = "Page Fault", }; void common_interrupt_handler(struct registers *args) { switch (args->int_no) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 11: case 12: case 13: case 14: case 15: case 16: kprintf("CPU Error: %s", err_messages[args->int_no]); break; case 32: // wake the PIT timer driver send_eoi_master(); break; case 33: { uint8_t data = ps2_read_data(); send_eoi_master(); break; } default: kprintf("Received unhandled interrupt: %d\n", args->int_no); return; } }