Ripped out everything except the ability to send EOI to the PIC.
[people/xl0/gpxe.git] / src / arch / i386 / include / pic8259.h
index d3f9b87..0c501a9 100644 (file)
 /* For segoff_t */
 #include "realmode.h"
 
-#define IRQ_PIC_CUTOFF (8)
+#define IRQ_PIC_CUTOFF 8
 
 /* 8259 register locations */
-#define PIC1_ICW1 (0x20)
-#define PIC1_OCW2 (0x20)
-#define PIC1_OCW3 (0x20)
-#define PIC1_ICR (0x20)
-#define PIC1_IRR (0x20)
-#define PIC1_ISR (0x20)
-#define PIC1_ICW2 (0x21)
-#define PIC1_ICW3 (0x21)
-#define PIC1_ICW4 (0x21)
-#define PIC1_IMR (0x21)
-#define PIC2_ICW1 (0xa0)
-#define PIC2_OCW2 (0xa0)
-#define PIC2_OCW3 (0xa0)
-#define PIC2_ICR (0xa0)
-#define PIC2_IRR (0xa0)
-#define PIC2_ISR (0xa0)
-#define PIC2_ICW2 (0xa1)
-#define PIC2_ICW3 (0xa1)
-#define PIC2_ICW4 (0xa1)
-#define PIC2_IMR (0xa1)
+#define PIC1_ICW1 0x20
+#define PIC1_OCW2 0x20
+#define PIC1_OCW3 0x20
+#define PIC1_ICR 0x20
+#define PIC1_IRR 0x20
+#define PIC1_ISR 0x20
+#define PIC1_ICW2 0x21
+#define PIC1_ICW3 0x21
+#define PIC1_ICW4 0x21
+#define PIC1_IMR 0x21
+#define PIC2_ICW1 0xa0
+#define PIC2_OCW2 0xa0
+#define PIC2_OCW3 0xa0
+#define PIC2_ICR 0xa0
+#define PIC2_IRR 0xa0
+#define PIC2_ISR 0xa0
+#define PIC2_ICW2 0xa1
+#define PIC2_ICW3 0xa1
+#define PIC2_ICW4 0xa1
+#define PIC2_IMR 0xa1
 
 /* Register command values */
-#define OCW3_ID (0x08)
-#define OCW3_READ_IRR (0x03)
-#define OCW3_READ_ISR (0x02)
-#define ICR_EOI_NON_SPECIFIC (0x20)
-#define ICR_EOI_NOP (0x40)
-#define ICR_EOI_SPECIFIC (0x60)
-#define ICR_EOI_SET_PRIORITY (0xc0)
+#define OCW3_ID 0x08
+#define OCW3_READ_IRR 0x03
+#define OCW3_READ_ISR 0x02
+#define ICR_EOI_NON_SPECIFIC 0x20
+#define ICR_EOI_NOP 0x40
+#define ICR_EOI_SPECIFIC 0x60
+#define ICR_EOI_SET_PRIORITY 0xc0
 
 /* Macros to enable/disable IRQs */
 #define IMR_REG(x) ( (x) < IRQ_PIC_CUTOFF ? PIC1_IMR : PIC2_IMR )
 #define disable_irq(x) outb ( inb( IMR_REG(x) ) | IMR_BIT(x), IMR_REG(x) )
 
 /* Macros for acknowledging IRQs */
-#define ICR_REG(x) ( (x) < IRQ_PIC_CUTOFF ? PIC1_ICR : PIC2_ICR )
-#define ICR_VALUE(x) ( (x) % IRQ_PIC_CUTOFF )
+#define ICR_REG( irq ) ( (irq) < IRQ_PIC_CUTOFF ? PIC1_ICR : PIC2_ICR )
+#define ICR_VALUE( irq ) ( (irq) % IRQ_PIC_CUTOFF )
 #define CHAINED_IRQ 2
 
 /* Utility macros to convert IRQ numbers to INT numbers and INT vectors  */
-#define IRQ_INT(x) ( (x)<IRQ_PIC_CUTOFF ? (x)+0x08 : (x)-IRQ_PIC_CUTOFF+0x70 )
-#define INT_VECTOR(x) ( (segoff_t*) phys_to_virt( 4 * (x) ) )
-#define IRQ_VECTOR(x) ( INT_VECTOR ( IRQ_INT(x) ) )
+#define IRQ_INT( irq ) ( ( ( (irq) - IRQ_PIC_CUTOFF ) ^ 0x70 ) & 0x7f )
 
 /* Other constants */
-typedef uint8_t irq_t;
-#define IRQ_MAX (15)
-#define IRQ_NONE (0xff)
+#define IRQ_MAX 15
+#define IRQ_NONE -1U
 
 /* Function prototypes
  */
-int install_irq_handler ( irq_t irq, segoff_t *handler,
-                         uint8_t *previously_enabled,
-                         segoff_t *previous_handler );
-int remove_irq_handler ( irq_t irq, segoff_t *handler,
-                        uint8_t *previously_enabled,
-                        segoff_t *previous_handler );
-int install_trivial_irq_handler ( irq_t irq );
-int remove_trivial_irq_handler ( irq_t irq );
-int trivial_irq_triggered ( irq_t irq );
-int copy_trivial_irq_handler ( void *target, size_t target_size );
-void send_non_specific_eoi ( irq_t irq );
-void send_specific_eoi ( irq_t irq );
-void fake_irq ( irq_t irq );
-#ifdef DEBUG_IRQ
-void dump_irq_status ( void );
-#else
-#define dump_irq_status()
-#endif
-
-/* Other code (e.g. undi.c) needs to know the size of the trivial IRQ
- * handler code, so we put prototypes and the size macro here.
- */
-extern void _trivial_irq_handler ( void );
-extern char _trivial_irq_handler_size[];
-#define TRIVIAL_IRQ_HANDLER_SIZE FRAGMENT_SIZE(_trivial_irq_handler)
+void send_eoi ( unsigned int irq );
 
 #endif /* PIC8259_H */