use super::{exception_handlers, gdt, interrupt_handlers, Interrupts}; use lazy_static::lazy_static; use x86_64::structures::idt::InterruptDescriptorTable; lazy_static! { static ref IDT: InterruptDescriptorTable = { let mut idt = InterruptDescriptorTable::new(); idt.breakpoint .set_handler_fn(exception_handlers::breakpoint_handler); idt.segment_not_present .set_handler_fn(exception_handlers::segment_not_present_handler); idt.general_protection_fault .set_handler_fn(exception_handlers::general_protection_fault_handler); unsafe { idt.double_fault .set_handler_fn(exception_handlers::double_fault_handler) .set_stack_index(gdt::DOUBLE_FAULT_IST_INDEX); idt.page_fault .set_handler_fn(exception_handlers::page_fault_handler) .set_stack_index(gdt::PAGE_FAULT_IST_INDEX); } idt[Interrupts::Timer.as_usize()].set_handler_fn(interrupt_handlers::timer_handler); idt }; } pub fn init() { IDT.load() }