Annotation of qemu/roms/ipxe/src/arch/i386/include/pic8259.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Basic support for controlling the 8259 Programmable Interrupt Controllers.
                      3:  *
                      4:  * Initially written by Michael Brown (mcb30).
                      5:  */
                      6: 
                      7: FILE_LICENCE ( GPL2_OR_LATER );
                      8: 
                      9: #ifndef PIC8259_H
                     10: #define PIC8259_H
                     11: 
                     12: /* For segoff_t */
                     13: #include "realmode.h"
                     14: 
                     15: #define IRQ_PIC_CUTOFF 8
                     16: 
                     17: /* 8259 register locations */
                     18: #define PIC1_ICW1 0x20
                     19: #define PIC1_OCW2 0x20
                     20: #define PIC1_OCW3 0x20
                     21: #define PIC1_ICR 0x20
                     22: #define PIC1_IRR 0x20
                     23: #define PIC1_ISR 0x20
                     24: #define PIC1_ICW2 0x21
                     25: #define PIC1_ICW3 0x21
                     26: #define PIC1_ICW4 0x21
                     27: #define PIC1_IMR 0x21
                     28: #define PIC2_ICW1 0xa0
                     29: #define PIC2_OCW2 0xa0
                     30: #define PIC2_OCW3 0xa0
                     31: #define PIC2_ICR 0xa0
                     32: #define PIC2_IRR 0xa0
                     33: #define PIC2_ISR 0xa0
                     34: #define PIC2_ICW2 0xa1
                     35: #define PIC2_ICW3 0xa1
                     36: #define PIC2_ICW4 0xa1
                     37: #define PIC2_IMR 0xa1
                     38: 
                     39: /* Register command values */
                     40: #define OCW3_ID 0x08
                     41: #define OCW3_READ_IRR 0x03
                     42: #define OCW3_READ_ISR 0x02
                     43: #define ICR_EOI_NON_SPECIFIC 0x20
                     44: #define ICR_EOI_NOP 0x40
                     45: #define ICR_EOI_SPECIFIC 0x60
                     46: #define ICR_EOI_SET_PRIORITY 0xc0
                     47: 
                     48: /* Macros to enable/disable IRQs */
                     49: #define IMR_REG(x) ( (x) < IRQ_PIC_CUTOFF ? PIC1_IMR : PIC2_IMR )
                     50: #define IMR_BIT(x) ( 1 << ( (x) % IRQ_PIC_CUTOFF ) )
                     51: #define irq_enabled(x) ( ( inb ( IMR_REG(x) ) & IMR_BIT(x) ) == 0 )
                     52: #define enable_irq(x) outb ( inb( IMR_REG(x) ) & ~IMR_BIT(x), IMR_REG(x) )
                     53: #define disable_irq(x) outb ( inb( IMR_REG(x) ) | IMR_BIT(x), IMR_REG(x) )
                     54: 
                     55: /* Macros for acknowledging IRQs */
                     56: #define ICR_REG( irq ) ( (irq) < IRQ_PIC_CUTOFF ? PIC1_ICR : PIC2_ICR )
                     57: #define ICR_VALUE( irq ) ( (irq) % IRQ_PIC_CUTOFF )
                     58: #define CHAINED_IRQ 2
                     59: 
                     60: /* Utility macros to convert IRQ numbers to INT numbers and INT vectors  */
                     61: #define IRQ_INT( irq ) ( ( ( (irq) - IRQ_PIC_CUTOFF ) ^ 0x70 ) & 0x7f )
                     62: 
                     63: /* Other constants */
                     64: #define IRQ_MAX 15
                     65: #define IRQ_NONE -1U
                     66: 
                     67: /* Function prototypes
                     68:  */
                     69: void send_eoi ( unsigned int irq );
                     70: 
                     71: #endif /* PIC8259_H */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.