1*433d6423SLionel Sambuc #ifndef __HW_INTR_X86_H__ 2*433d6423SLionel Sambuc #define __HW_INTR_X86_H__ 3*433d6423SLionel Sambuc 4*433d6423SLionel Sambuc #include "kernel/kernel.h" 5*433d6423SLionel Sambuc void irq_8259_unmask(int irq); 6*433d6423SLionel Sambuc void irq_8259_mask(int irq); 7*433d6423SLionel Sambuc void irq_8259_eoi(int irq); 8*433d6423SLionel Sambuc void irq_handle(int irq); 9*433d6423SLionel Sambuc void i8259_disable(void); 10*433d6423SLionel Sambuc void eoi_8259_master(void); 11*433d6423SLionel Sambuc void eoi_8259_slave(void); 12*433d6423SLionel Sambuc 13*433d6423SLionel Sambuc /* 14*433d6423SLionel Sambuc * we don't use IO APIC if not configured for SMP as we cannot read any info 15*433d6423SLionel Sambuc * about it unless we use MPS which is not present on all single CPU 16*433d6423SLionel Sambuc * configurations. ACPI would be another option, however we don't support it 17*433d6423SLionel Sambuc * either 18*433d6423SLionel Sambuc */ 19*433d6423SLionel Sambuc #if defined(USE_APIC) 20*433d6423SLionel Sambuc #include "kernel/arch/i386/apic.h" 21*433d6423SLionel Sambuc 22*433d6423SLionel Sambuc #define hw_intr_mask(irq) ioapic_mask_irq(irq) 23*433d6423SLionel Sambuc #define hw_intr_unmask(irq) ioapic_unmask_irq(irq) 24*433d6423SLionel Sambuc #define hw_intr_ack(irq) ioapic_eoi(irq) 25*433d6423SLionel Sambuc #define hw_intr_used(irq) do { \ 26*433d6423SLionel Sambuc if (ioapic_enabled) \ 27*433d6423SLionel Sambuc ioapic_set_irq(irq); \ 28*433d6423SLionel Sambuc } while (0) 29*433d6423SLionel Sambuc #define hw_intr_not_used(irq) do { \ 30*433d6423SLionel Sambuc if (ioapic_enabled) \ 31*433d6423SLionel Sambuc ioapic_unset_irq(irq); \ 32*433d6423SLionel Sambuc } while (0) 33*433d6423SLionel Sambuc #define hw_intr_disable_all() do { \ 34*433d6423SLionel Sambuc ioapic_disable_all(); \ 35*433d6423SLionel Sambuc ioapic_reset_pic(); \ 36*433d6423SLionel Sambuc lapic_disable(); \ 37*433d6423SLionel Sambuc } while (0) 38*433d6423SLionel Sambuc #ifdef CONFIG_SMP 39*433d6423SLionel Sambuc #define ipi_ack apic_eoi 40*433d6423SLionel Sambuc #endif 41*433d6423SLionel Sambuc 42*433d6423SLionel Sambuc #else 43*433d6423SLionel Sambuc /* legacy PIC */ 44*433d6423SLionel Sambuc 45*433d6423SLionel Sambuc #define hw_intr_mask(irq) irq_8259_mask(irq) 46*433d6423SLionel Sambuc #define hw_intr_unmask(irq) irq_8259_unmask(irq) 47*433d6423SLionel Sambuc #define hw_intr_ack(irq) irq_8259_eoi(irq) 48*433d6423SLionel Sambuc #define hw_intr_used(irq) 49*433d6423SLionel Sambuc #define hw_intr_not_used(irq) 50*433d6423SLionel Sambuc #define hw_intr_disable_all() 51*433d6423SLionel Sambuc 52*433d6423SLionel Sambuc #endif 53*433d6423SLionel Sambuc 54*433d6423SLionel Sambuc #endif /* __HW_INTR_X86_H__ */ 55