@@ -13,6 +13,7 @@ use x86_64::structures::idt::InterruptDescriptorTable;
1313pub use x86_64:: structures:: idt:: InterruptStackFrame as ExceptionStackFrame ;
1414
1515use crate :: arch:: x86_64:: kernel:: core_local:: { core_scheduler, increment_irq_counter} ;
16+ use crate :: arch:: x86_64:: kernel:: pic:: PIC1_OFFSET ;
1617use crate :: arch:: x86_64:: kernel:: { apic, processor} ;
1718use crate :: arch:: x86_64:: mm:: paging:: { BasePageSize , PageSize , page_fault_handler} ;
1819use crate :: arch:: x86_64:: swapgs;
@@ -21,7 +22,6 @@ use crate::drivers::InterruptHandlerQueue;
2122use crate :: drivers:: mmio:: get_interrupt_handlers;
2223#[ cfg( feature = "pci" ) ]
2324use crate :: drivers:: pci:: get_interrupt_handlers;
24- use crate :: kernel:: pic:: PIC1_INTERRUPT_OFFSET ;
2525use crate :: scheduler:: { self , CoreId } ;
2626
2727static IRQ_HANDLERS : OnceCell < HashMap < u8 , InterruptHandlerQueue , RandomState > > = OnceCell :: new ( ) ;
@@ -30,7 +30,6 @@ static IRQ_NAMES: InterruptTicketMutex<HashMap<u8, &'static str, RandomState>> =
3030
3131pub ( crate ) const IST_ENTRIES : usize = 4 ;
3232pub ( crate ) const IST_SIZE : usize = 8 * BasePageSize :: SIZE as usize ;
33- pub ( crate ) const IDT_EXTERNAL_INTERRUPT_OFFSET : u8 = 32 ; // Interrupts 0..32 are fixed or reserved, external interrupts start at 32
3433
3534pub ( crate ) static IDT : InterruptSpinMutex < InterruptDescriptorTable > =
3635 InterruptSpinMutex :: new ( InterruptDescriptorTable :: new ( ) ) ;
@@ -93,11 +92,11 @@ pub(crate) fn enable_and_wait() {
9392pub ( crate ) fn install ( ) {
9493 let mut idt = IDT . lock ( ) ;
9594
96- set_general_handler ! ( & mut * idt, abort, 0 ..IDT_EXTERNAL_INTERRUPT_OFFSET ) ;
97- set_general_handler ! ( & mut * idt, handle_interrupt, IDT_EXTERNAL_INTERRUPT_OFFSET ..) ;
95+ set_general_handler ! ( & mut * idt, abort, 0 ..32 ) ;
96+ set_general_handler ! ( & mut * idt, handle_interrupt, 32 ..) ;
9897
9998 unsafe {
100- for i in IDT_EXTERNAL_INTERRUPT_OFFSET ..=255 {
99+ for i in 32 ..=255 {
101100 let addr = idt[ i] . handler_addr ( ) ;
102101 idt[ i] . set_handler_addr ( addr) . set_stack_index ( 0 ) ;
103102 }
@@ -177,7 +176,7 @@ fn handle_interrupt(stack_frame: ExceptionStackFrame, index: u8, _error_code: Op
177176 use crate :: scheduler:: PerCoreSchedulerExt ;
178177
179178 if let Some ( handlers) = IRQ_HANDLERS . get ( )
180- && let Some ( map) = handlers. get ( & ( index - IDT_EXTERNAL_INTERRUPT_OFFSET ) )
179+ && let Some ( map) = handlers. get ( & ( index - PIC1_OFFSET ) )
181180 {
182181 for handler in map. iter ( ) {
183182 handler ( ) ;
@@ -338,9 +337,7 @@ extern "x86-interrupt" fn virtualization_exception(stack_frame: ExceptionStackFr
338337
339338pub ( crate ) fn add_irq_name ( irq_number : u8 , name : & ' static str ) {
340339 debug ! ( "Register name \" {name}\" for interrupt {irq_number}" ) ;
341- IRQ_NAMES
342- . lock ( )
343- . insert ( PIC1_INTERRUPT_OFFSET + irq_number, name) ;
340+ IRQ_NAMES . lock ( ) . insert ( PIC1_OFFSET + irq_number, name) ;
344341}
345342
346343fn get_irq_name ( irq_number : u8 ) -> Option < & ' static str > {
0 commit comments