3 /* PIC command and data ports */
9 /* PIC initialization command word 1 bits */
10 #define ICW1_ICW4_NEEDED (1 << 0)
11 #define ICW1_SINGLE (1 << 1)
12 #define ICW1_INTERVAL4 (1 << 2)
13 #define ICW1_LEVEL (1 << 3)
14 #define ICW1_INIT (1 << 4)
15 /* PIC initialization command word 4 bits */
16 #define ICW4_8086 (1 << 0)
17 #define ICW4_AUTO_EOI (1 << 1)
18 #define ICW4_BUF_SLAVE (1 << 3) /* 1000 */
19 #define ICW4_BUF_MASTER (3 << 2) /* 1100 */
20 #define ICW4_SPECIAL (1 << 4)
21 /* PIC operation command word 2 bits */
22 #define OCW2_EOI (1 << 5)
26 static intr_func_t intrfunc[MAX_INTR];
28 static void (*intr_unhandled)(struct intr_frame *frm);
30 void intr_entry_div();
31 void intr_entry_trap();
32 void intr_entry_nmi();
33 void intr_entry_break();
34 void intr_entry_ovf();
35 void intr_entry_bound();
36 void intr_entry_ill();
37 void intr_entry_irq0();
38 void intr_entry_irq1();
39 void intr_entry_irq2();
40 void intr_entry_irq3();
41 void intr_entry_irq4();
42 void intr_entry_irq5();
43 void intr_entry_irq6();
44 void intr_entry_irq7();
46 extern int _kern_start_seg;
47 #define KERN_CS ((uint16_t)(&_kern_start_seg))
54 for(i=0; i<MAX_INTR; i++) {
58 set_intr_vect(0, KERN_CS, (uint16_t)intr_entry_div);
61 void dispatch_intr(struct intr_frame frm)
63 intrfunc[frm.inum](&frm);
66 void set_intr_vect(int n, uint16_t seg, uint16_t offs)
74 void set_intr(int n, intr_func_t func)
91 mask = inp(port) | (1 << n);
95 void unmask_irq(int n)
107 mask = inp(port) & ~(1 << n);