#include "interrupts/Install.h" #include "interrupts/IDT.h" #include "log/Log.h" extern "C" { void unused(); void isr0(); void isr1(); void isr2(); void isr3(); void isr4(); void isr5(); void isr6(); void isr7(); void isr8(); void isr10(); void isr11(); void isr12(); void isr13(); void isr14(); void isr16(); void isr17(); void isr18(); void isr19(); void isr20(); void isr21(); void isr28(); void isr29(); void isr30(); void isr31(); void isr32(); void isr33(); void isr34(); void isr35(); void isr36(); void isr37(); void isr38(); void isr39(); void isr40(); void isr41(); void isr42(); void isr43(); void isr44(); void isr45(); void isr46(); void isr47(); void isr66(); } #define INSTALL_TRAP(x) IDT::add_handler(x, (void*)&isr##x, IDT_TA_TrapGate) #define INSTALL_UNUSED(x) IDT::add_handler(x, (void*)&unused, IDT_TA_InterruptGate) #define INSTALL_ISR(x) IDT::add_handler(x, (void*)&isr##x, IDT_TA_InterruptGate) #define INSTALL_USER_ISR(x) IDT::add_handler(x, (void*)&isr##x, IDT_TA_InterruptGateUser) void Interrupts::install() { kdbgln("Installing handler stubs for exceptions (ISRs 0-31)"); INSTALL_TRAP(0); INSTALL_TRAP(1); INSTALL_TRAP(2); INSTALL_TRAP(3); INSTALL_TRAP(4); INSTALL_TRAP(5); INSTALL_TRAP(6); INSTALL_TRAP(7); INSTALL_TRAP(8); INSTALL_UNUSED(9); INSTALL_TRAP(10); INSTALL_TRAP(11); INSTALL_TRAP(12); INSTALL_TRAP(13); INSTALL_TRAP(14); INSTALL_UNUSED(15); INSTALL_TRAP(16); INSTALL_TRAP(17); INSTALL_TRAP(18); INSTALL_TRAP(19); INSTALL_TRAP(20); INSTALL_TRAP(21); INSTALL_UNUSED(22); INSTALL_UNUSED(23); INSTALL_UNUSED(24); INSTALL_UNUSED(25); INSTALL_UNUSED(26); INSTALL_UNUSED(27); INSTALL_TRAP(28); INSTALL_TRAP(29); INSTALL_TRAP(30); INSTALL_UNUSED(31); kdbgln("Installing handler stubs for IRQs (ISRs 32-47)"); INSTALL_ISR(32); INSTALL_ISR(33); INSTALL_ISR(34); INSTALL_ISR(35); INSTALL_ISR(36); INSTALL_ISR(37); INSTALL_ISR(38); INSTALL_ISR(39); INSTALL_ISR(40); INSTALL_ISR(41); INSTALL_ISR(42); INSTALL_ISR(43); INSTALL_ISR(44); INSTALL_ISR(45); INSTALL_ISR(46); INSTALL_ISR(47); kdbgln("Installing unused handler stubs for the rest of the IDT"); for (short i = 48; i < 256; i++) { INSTALL_UNUSED(i); } kdbgln("Installing syscall handler stub"); INSTALL_USER_ISR(66); }