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