BXE: min->MIN, plus an spatch
[akaros.git] / kern / arch / x86 / ioapic.h
1 /* 
2  * This file is part of the UCB release of Plan 9. It is subject to the license
3  * terms in the LICENSE file found in the top-level directory of this
4  * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No
5  * part of the UCB release of Plan 9, including this file, may be copied,
6  * modified, propagated, or distributed except according to the terms contained
7  * in the LICENSE file.
8  */
9
10 #ifndef ROS_KERN_IOAPIC_H
11 #define ROS_KERN_IOAPIC_H
12
13 #include <atomic.h>
14 #include <arch/apic.h>
15
16 enum {
17         MaxAPICNO       = 254,          /* 255 is physical broadcast */
18 };
19
20 enum {                                  /* I/O APIC registers */
21         IoapicID        = 0x00,         /* ID */
22         IoapicVER       = 0x01,         /* version */
23         IoapicARB       = 0x02,         /* arbitration ID */
24         IoapicRDT       = 0x10,         /* redirection table */
25 };
26
27 /*
28  * Common bits for
29  *      I/O APIC Redirection Table Entry;
30  *      Local APIC Local Interrupt Vector Table;
31  *      Local APIC Inter-Processor Interrupt;
32  *      Local APIC Timer Vector Table.
33  */
34 enum {
35         ApicFIXED       = 0x00000000,   /* [10:8] Delivery Mode */
36         ApicLOWEST      = 0x00000100,   /* Lowest priority */
37         ApicSMI         = 0x00000200,   /* System Management Interrupt */
38         ApicRR          = 0x00000300,   /* Remote Read */
39         ApicNMI         = 0x00000400,
40         ApicINIT        = 0x00000500,   /* INIT/RESET */
41         ApicSTARTUP     = 0x00000600,   /* Startup IPI */
42         ApicExtINT      = 0x00000700,
43
44         ApicPHYSICAL    = 0x00000000,   /* [11] Destination Mode (RW) */
45         ApicLOGICAL     = 0x00000800,
46
47         ApicDELIVS      = 0x00001000,   /* [12] Delivery Status (RO) */
48         ApicHIGH        = 0x00000000,   /* [13] Interrupt Input Pin Polarity (RW) */
49         ApicLOW         = 0x00002000,
50         ApicRemoteIRR   = 0x00004000,   /* [14] Remote IRR (RO) */
51         ApicEDGE        = 0x00000000,   /* [15] Trigger Mode (RW) */
52         ApicLEVEL       = 0x00008000,
53         ApicIMASK       = 0x00010000,   /* [16] Interrupt Mask */
54         IOAPIC_PBASE    = 0xfec00000, /* default *physical* address */
55 };
56
57 extern int mpisabusno;
58
59 void ioapicintrinit(int busno, int apicno, int intin, int devno, int lo);
60 void ioapiconline(void);
61 void ioapicinit(int id, int ibase, uintptr_t pa);
62 void ioapicrdtr(struct apic*, int unused_int, int*, int*);
63 void ioapicrdtw(struct apic*, int unused_int, int, int);
64 char *ioapicdump(char *start, char *end);
65
66 #endif /* ROS_KERN_IOAPIC_H */