xref: /minix3/minix/kernel/arch/i386/include/hw_intr.h (revision 433d6423c39e34ec4b79c950597bb2d236f886be)
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