| 1 | #ifndef __ASM_APIC_H | 
|---|
| 2 | #define __ASM_APIC_H | 
|---|
| 3 |  | 
|---|
| 4 | /* | 
|---|
| 5 | * Constants for various Intel APICs. (local APIC, IOAPIC, etc.) | 
|---|
| 6 | * | 
|---|
| 7 | * Alan Cox <Alan.Cox@linux.org>, 1995. | 
|---|
| 8 | */ | 
|---|
| 9 | #define         APIC_PHYS_BASE  0xfee00000 /* IA s/w dev Vol 3, Section 7.4 */ | 
|---|
| 10 |  | 
|---|
| 11 | #define         APIC_ID         0x20 | 
|---|
| 12 | #define                 GET_APIC_ID(x)          (((x)>>24)&0x0F) | 
|---|
| 13 | #define         APIC_LVR        0x30 | 
|---|
| 14 | #define                 GET_APIC_VERSION(x)     ((x)&0xFF) | 
|---|
| 15 | #define                 GET_APIC_MAXLVT(x)      (((x)>>16)&0x0F) | 
|---|
| 16 | #define                 APIC_INTEGRATED(x)      ((x)&0xF0) | 
|---|
| 17 | #define         APIC_TASKPRI    0x80 | 
|---|
| 18 | #define                 APIC_TPRI_MASK          0xFF | 
|---|
| 19 | #define         APIC_ARBPRI     0x90 | 
|---|
| 20 | #define                 APIC_ARBPRI_MASK        0xFF | 
|---|
| 21 | #define         APIC_PROCPRI    0xA0 | 
|---|
| 22 | #define         APIC_EOI        0xB0 | 
|---|
| 23 | #define                 APIC_EIO_ACK            0x0             /* Write this to the EOI register */ | 
|---|
| 24 | #define         APIC_RRR        0xC0 | 
|---|
| 25 | #define         APIC_LDR        0xD0 | 
|---|
| 26 | #define                 APIC_LDR_MASK           (0xFF<<24) | 
|---|
| 27 | #define                 GET_APIC_LOGICAL_ID(x)  (((x)>>24)&0xFF) | 
|---|
| 28 | #define                 SET_APIC_LOGICAL_ID(x)  (((x)<<24)) | 
|---|
| 29 | #define                 APIC_ALL_CPUS           0xFF | 
|---|
| 30 | #define         APIC_DFR        0xE0 | 
|---|
| 31 | #define                 GET_APIC_DFR(x)         (((x)>>28)&0x0F) | 
|---|
| 32 | #define                 SET_APIC_DFR(x)         ((x)<<28) | 
|---|
| 33 | #define         APIC_SPIV       0xF0 | 
|---|
| 34 | #define         APIC_ISR        0x100 | 
|---|
| 35 | #define         APIC_TMR        0x180 | 
|---|
| 36 | #define         APIC_IRR        0x200 | 
|---|
| 37 | #define         APIC_ESR        0x280 | 
|---|
| 38 | #define                 APIC_ESR_SEND_CS        0x00001 | 
|---|
| 39 | #define                 APIC_ESR_RECV_CS        0x00002 | 
|---|
| 40 | #define                 APIC_ESR_SEND_ACC       0x00004 | 
|---|
| 41 | #define                 APIC_ESR_RECV_ACC       0x00008 | 
|---|
| 42 | #define                 APIC_ESR_SENDILL        0x00020 | 
|---|
| 43 | #define                 APIC_ESR_RECVILL        0x00040 | 
|---|
| 44 | #define                 APIC_ESR_ILLREGA        0x00080 | 
|---|
| 45 | #define         APIC_ICR        0x300 | 
|---|
| 46 | #define                 APIC_DEST_SELF          0x40000 | 
|---|
| 47 | #define                 APIC_DEST_ALLINC        0x80000 | 
|---|
| 48 | #define                 APIC_DEST_ALLBUT        0xC0000 | 
|---|
| 49 | #define                 APIC_DEST_RR_MASK       0x30000 | 
|---|
| 50 | #define                 APIC_DEST_RR_INVALID    0x00000 | 
|---|
| 51 | #define                 APIC_DEST_RR_INPROG     0x10000 | 
|---|
| 52 | #define                 APIC_DEST_RR_VALID      0x20000 | 
|---|
| 53 | #define                 APIC_DEST_LEVELTRIG     0x08000 | 
|---|
| 54 | #define                 APIC_DEST_ASSERT        0x04000 | 
|---|
| 55 | #define                 APIC_DEST_BUSY          0x01000 | 
|---|
| 56 | #define                 APIC_DEST_LOGICAL       0x00800 | 
|---|
| 57 | #define                 APIC_DEST_DM_FIXED      0x00000 | 
|---|
| 58 | #define                 APIC_DEST_DM_LOWEST     0x00100 | 
|---|
| 59 | #define                 APIC_DEST_DM_SMI        0x00200 | 
|---|
| 60 | #define                 APIC_DEST_DM_REMRD      0x00300 | 
|---|
| 61 | #define                 APIC_DEST_DM_NMI        0x00400 | 
|---|
| 62 | #define                 APIC_DEST_DM_INIT       0x00500 | 
|---|
| 63 | #define                 APIC_DEST_DM_STARTUP    0x00600 | 
|---|
| 64 | #define                 APIC_DEST_VECTOR_MASK   0x000FF | 
|---|
| 65 | #define         APIC_ICR2       0x310 | 
|---|
| 66 | #define                 GET_APIC_DEST_FIELD(x)  (((x)>>24)&0xFF) | 
|---|
| 67 | #define                 SET_APIC_DEST_FIELD(x)  ((x)<<24) | 
|---|
| 68 | #define         APIC_LVTT       0x320 | 
|---|
| 69 | #define         APIC_LVTPC      0x340 | 
|---|
| 70 | #define         APIC_LVT0       0x350 | 
|---|
| 71 | #define                 APIC_LVT_TIMER_BASE_MASK        (0x3<<18) | 
|---|
| 72 | #define                 GET_APIC_TIMER_BASE(x)          (((x)>>18)&0x3) | 
|---|
| 73 | #define                 SET_APIC_TIMER_BASE(x)          (((x)<<18)) | 
|---|
| 74 | #define                 APIC_TIMER_BASE_CLKIN           0x0 | 
|---|
| 75 | #define                 APIC_TIMER_BASE_TMBASE          0x1 | 
|---|
| 76 | #define                 APIC_TIMER_BASE_DIV             0x2 | 
|---|
| 77 | #define                 APIC_LVT_TIMER_PERIODIC         (1<<17) | 
|---|
| 78 | #define                 APIC_LVT_MASKED                 (1<<16) | 
|---|
| 79 | #define                 APIC_LVT_LEVEL_TRIGGER          (1<<15) | 
|---|
| 80 | #define                 APIC_LVT_REMOTE_IRR             (1<<14) | 
|---|
| 81 | #define                 APIC_INPUT_POLARITY             (1<<13) | 
|---|
| 82 | #define                 APIC_SEND_PENDING               (1<<12) | 
|---|
| 83 | #define                 GET_APIC_DELIVERY_MODE(x)       (((x)>>8)&0x7) | 
|---|
| 84 | #define                 SET_APIC_DELIVERY_MODE(x,y)     (((x)&~0x700)|((y)<<8)) | 
|---|
| 85 | #define                         APIC_MODE_FIXED         0x0 | 
|---|
| 86 | #define                         APIC_MODE_NMI           0x4 | 
|---|
| 87 | #define                         APIC_MODE_EXINT         0x7 | 
|---|
| 88 | #define         APIC_LVT1       0x360 | 
|---|
| 89 | #define         APIC_LVTERR     0x370 | 
|---|
| 90 | #define         APIC_TMICT      0x380 | 
|---|
| 91 | #define         APIC_TMCCT      0x390 | 
|---|
| 92 | #define         APIC_TDCR       0x3E0 | 
|---|
| 93 | #define                 APIC_TDR_DIV_TMBASE     (1<<2) | 
|---|
| 94 | #define                 APIC_TDR_DIV_1          0xB | 
|---|
| 95 | #define                 APIC_TDR_DIV_2          0x0 | 
|---|
| 96 | #define                 APIC_TDR_DIV_4          0x1 | 
|---|
| 97 | #define                 APIC_TDR_DIV_8          0x2 | 
|---|
| 98 | #define                 APIC_TDR_DIV_16         0x3 | 
|---|
| 99 | #define                 APIC_TDR_DIV_32         0x8 | 
|---|
| 100 | #define                 APIC_TDR_DIV_64         0x9 | 
|---|
| 101 | #define                 APIC_TDR_DIV_128        0xA | 
|---|
| 102 |  | 
|---|
| 103 | #define APIC_BASE (fix_to_virt(FIX_APIC_BASE)) | 
|---|
| 104 |  | 
|---|
| 105 | #define MAX_IO_APICS 8 | 
|---|
| 106 |  | 
|---|
| 107 | /* | 
|---|
| 108 | * the local APIC register structure, memory mapped. Not terribly well | 
|---|
| 109 | * tested, but we might eventually use this one in the future - the | 
|---|
| 110 | * problem why we cannot use it right now is the P5 APIC, it has an | 
|---|
| 111 | * errata which cannot take 8-bit reads and writes, only 32-bit ones ... | 
|---|
| 112 | */ | 
|---|
| 113 |  | 
|---|
| 114 |  | 
|---|
| 115 |  | 
|---|
| 116 | #endif | 
|---|