source: bootcd/isolinux/syslinux-6.03/gpxe/src/arch/i386/include/pic8259.h

Last change on this file was e16e8f2, checked in by Edwin Eefting <edwin@datux.nl>, 3 years ago

bootstuff

  • Property mode set to 100644
File size: 1.8 KB
Line 
1/*
2 * Basic support for controlling the 8259 Programmable Interrupt Controllers.
3 *
4 * Initially written by Michael Brown (mcb30).
5 */
6
7FILE_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 */
69void send_eoi ( unsigned int irq );
70
71#endif /* PIC8259_H */
Note: See TracBrowser for help on using the repository browser.