1*23323929SAndre Przywara #ifndef _ASM_X86_APICDEF_H 2*23323929SAndre Przywara #define _ASM_X86_APICDEF_H 3*23323929SAndre Przywara 4*23323929SAndre Przywara /* 5*23323929SAndre Przywara * Constants for various Intel APICs. (local APIC, IOAPIC, etc.) 6*23323929SAndre Przywara * 7*23323929SAndre Przywara * Alan Cox <Alan.Cox@linux.org>, 1995. 8*23323929SAndre Przywara * Ingo Molnar <mingo@redhat.com>, 1999, 2000 9*23323929SAndre Przywara */ 10*23323929SAndre Przywara 11*23323929SAndre Przywara #define IO_APIC_DEFAULT_PHYS_BASE 0xfec00000 12*23323929SAndre Przywara #define APIC_DEFAULT_PHYS_BASE 0xfee00000 13*23323929SAndre Przywara 14*23323929SAndre Przywara /* 15*23323929SAndre Przywara * This is the IO-APIC register space as specified 16*23323929SAndre Przywara * by Intel docs: 17*23323929SAndre Przywara */ 18*23323929SAndre Przywara #define IO_APIC_SLOT_SIZE 1024 19*23323929SAndre Przywara 20*23323929SAndre Przywara #define APIC_ID 0x20 21*23323929SAndre Przywara 22*23323929SAndre Przywara #define APIC_LVR 0x30 23*23323929SAndre Przywara #define APIC_LVR_MASK 0xFF00FF 24*23323929SAndre Przywara #define APIC_LVR_DIRECTED_EOI (1 << 24) 25*23323929SAndre Przywara #define GET_APIC_VERSION(x) ((x) & 0xFFu) 26*23323929SAndre Przywara #define GET_APIC_MAXLVT(x) (((x) >> 16) & 0xFFu) 27*23323929SAndre Przywara #ifdef CONFIG_X86_32 28*23323929SAndre Przywara # define APIC_INTEGRATED(x) ((x) & 0xF0u) 29*23323929SAndre Przywara #else 30*23323929SAndre Przywara # define APIC_INTEGRATED(x) (1) 31*23323929SAndre Przywara #endif 32*23323929SAndre Przywara #define APIC_XAPIC(x) ((x) >= 0x14) 33*23323929SAndre Przywara #define APIC_EXT_SPACE(x) ((x) & 0x80000000) 34*23323929SAndre Przywara #define APIC_TASKPRI 0x80 35*23323929SAndre Przywara #define APIC_TPRI_MASK 0xFFu 36*23323929SAndre Przywara #define APIC_ARBPRI 0x90 37*23323929SAndre Przywara #define APIC_ARBPRI_MASK 0xFFu 38*23323929SAndre Przywara #define APIC_PROCPRI 0xA0 39*23323929SAndre Przywara #define APIC_EOI 0xB0 40*23323929SAndre Przywara #define APIC_EOI_ACK 0x0 /* Docs say 0 for future compat. */ 41*23323929SAndre Przywara #define APIC_RRR 0xC0 42*23323929SAndre Przywara #define APIC_LDR 0xD0 43*23323929SAndre Przywara #define APIC_LDR_MASK (0xFFu << 24) 44*23323929SAndre Przywara #define GET_APIC_LOGICAL_ID(x) (((x) >> 24) & 0xFFu) 45*23323929SAndre Przywara #define SET_APIC_LOGICAL_ID(x) (((x) << 24)) 46*23323929SAndre Przywara #define APIC_ALL_CPUS 0xFFu 47*23323929SAndre Przywara #define APIC_DFR 0xE0 48*23323929SAndre Przywara #define APIC_DFR_CLUSTER 0x0FFFFFFFul 49*23323929SAndre Przywara #define APIC_DFR_FLAT 0xFFFFFFFFul 50*23323929SAndre Przywara #define APIC_SPIV 0xF0 51*23323929SAndre Przywara #define APIC_SPIV_DIRECTED_EOI (1 << 12) 52*23323929SAndre Przywara #define APIC_SPIV_FOCUS_DISABLED (1 << 9) 53*23323929SAndre Przywara #define APIC_SPIV_APIC_ENABLED (1 << 8) 54*23323929SAndre Przywara #define APIC_ISR 0x100 55*23323929SAndre Przywara #define APIC_ISR_NR 0x8 /* Number of 32 bit ISR registers. */ 56*23323929SAndre Przywara #define APIC_TMR 0x180 57*23323929SAndre Przywara #define APIC_IRR 0x200 58*23323929SAndre Przywara #define APIC_ESR 0x280 59*23323929SAndre Przywara #define APIC_ESR_SEND_CS 0x00001 60*23323929SAndre Przywara #define APIC_ESR_RECV_CS 0x00002 61*23323929SAndre Przywara #define APIC_ESR_SEND_ACC 0x00004 62*23323929SAndre Przywara #define APIC_ESR_RECV_ACC 0x00008 63*23323929SAndre Przywara #define APIC_ESR_SENDILL 0x00020 64*23323929SAndre Przywara #define APIC_ESR_RECVILL 0x00040 65*23323929SAndre Przywara #define APIC_ESR_ILLREGA 0x00080 66*23323929SAndre Przywara #define APIC_LVTCMCI 0x2f0 67*23323929SAndre Przywara #define APIC_ICR 0x300 68*23323929SAndre Przywara #define APIC_DEST_SELF 0x40000 69*23323929SAndre Przywara #define APIC_DEST_ALLINC 0x80000 70*23323929SAndre Przywara #define APIC_DEST_ALLBUT 0xC0000 71*23323929SAndre Przywara #define APIC_ICR_RR_MASK 0x30000 72*23323929SAndre Przywara #define APIC_ICR_RR_INVALID 0x00000 73*23323929SAndre Przywara #define APIC_ICR_RR_INPROG 0x10000 74*23323929SAndre Przywara #define APIC_ICR_RR_VALID 0x20000 75*23323929SAndre Przywara #define APIC_INT_LEVELTRIG 0x08000 76*23323929SAndre Przywara #define APIC_INT_ASSERT 0x04000 77*23323929SAndre Przywara #define APIC_ICR_BUSY 0x01000 78*23323929SAndre Przywara #define APIC_DEST_LOGICAL 0x00800 79*23323929SAndre Przywara #define APIC_DEST_PHYSICAL 0x00000 80*23323929SAndre Przywara #define APIC_DM_FIXED 0x00000 81*23323929SAndre Przywara #define APIC_DM_FIXED_MASK 0x00700 82*23323929SAndre Przywara #define APIC_DM_LOWEST 0x00100 83*23323929SAndre Przywara #define APIC_DM_SMI 0x00200 84*23323929SAndre Przywara #define APIC_DM_REMRD 0x00300 85*23323929SAndre Przywara #define APIC_DM_NMI 0x00400 86*23323929SAndre Przywara #define APIC_DM_INIT 0x00500 87*23323929SAndre Przywara #define APIC_DM_STARTUP 0x00600 88*23323929SAndre Przywara #define APIC_DM_EXTINT 0x00700 89*23323929SAndre Przywara #define APIC_VECTOR_MASK 0x000FF 90*23323929SAndre Przywara #define APIC_ICR2 0x310 91*23323929SAndre Przywara #define GET_APIC_DEST_FIELD(x) (((x) >> 24) & 0xFF) 92*23323929SAndre Przywara #define SET_APIC_DEST_FIELD(x) ((x) << 24) 93*23323929SAndre Przywara #define APIC_LVTT 0x320 94*23323929SAndre Przywara #define APIC_LVTTHMR 0x330 95*23323929SAndre Przywara #define APIC_LVTPC 0x340 96*23323929SAndre Przywara #define APIC_LVT0 0x350 97*23323929SAndre Przywara #define APIC_LVT_TIMER_BASE_MASK (0x3 << 18) 98*23323929SAndre Przywara #define GET_APIC_TIMER_BASE(x) (((x) >> 18) & 0x3) 99*23323929SAndre Przywara #define SET_APIC_TIMER_BASE(x) (((x) << 18)) 100*23323929SAndre Przywara #define APIC_TIMER_BASE_CLKIN 0x0 101*23323929SAndre Przywara #define APIC_TIMER_BASE_TMBASE 0x1 102*23323929SAndre Przywara #define APIC_TIMER_BASE_DIV 0x2 103*23323929SAndre Przywara #define APIC_LVT_TIMER_ONESHOT (0 << 17) 104*23323929SAndre Przywara #define APIC_LVT_TIMER_PERIODIC (1 << 17) 105*23323929SAndre Przywara #define APIC_LVT_TIMER_TSCDEADLINE (2 << 17) 106*23323929SAndre Przywara #define APIC_LVT_MASKED (1 << 16) 107*23323929SAndre Przywara #define APIC_LVT_LEVEL_TRIGGER (1 << 15) 108*23323929SAndre Przywara #define APIC_LVT_REMOTE_IRR (1 << 14) 109*23323929SAndre Przywara #define APIC_INPUT_POLARITY (1 << 13) 110*23323929SAndre Przywara #define APIC_SEND_PENDING (1 << 12) 111*23323929SAndre Przywara #define APIC_MODE_MASK 0x700 112*23323929SAndre Przywara #define GET_APIC_DELIVERY_MODE(x) (((x) >> 8) & 0x7) 113*23323929SAndre Przywara #define SET_APIC_DELIVERY_MODE(x, y) (((x) & ~0x700) | ((y) << 8)) 114*23323929SAndre Przywara #define APIC_MODE_FIXED 0x0 115*23323929SAndre Przywara #define APIC_MODE_NMI 0x4 116*23323929SAndre Przywara #define APIC_MODE_EXTINT 0x7 117*23323929SAndre Przywara #define APIC_LVT1 0x360 118*23323929SAndre Przywara #define APIC_LVTERR 0x370 119*23323929SAndre Przywara #define APIC_TMICT 0x380 120*23323929SAndre Przywara #define APIC_TMCCT 0x390 121*23323929SAndre Przywara #define APIC_TDCR 0x3E0 122*23323929SAndre Przywara #define APIC_SELF_IPI 0x3F0 123*23323929SAndre Przywara #define APIC_TDR_DIV_TMBASE (1 << 2) 124*23323929SAndre Przywara #define APIC_TDR_DIV_1 0xB 125*23323929SAndre Przywara #define APIC_TDR_DIV_2 0x0 126*23323929SAndre Przywara #define APIC_TDR_DIV_4 0x1 127*23323929SAndre Przywara #define APIC_TDR_DIV_8 0x2 128*23323929SAndre Przywara #define APIC_TDR_DIV_16 0x3 129*23323929SAndre Przywara #define APIC_TDR_DIV_32 0x8 130*23323929SAndre Przywara #define APIC_TDR_DIV_64 0x9 131*23323929SAndre Przywara #define APIC_TDR_DIV_128 0xA 132*23323929SAndre Przywara #define APIC_EFEAT 0x400 133*23323929SAndre Przywara #define APIC_ECTRL 0x410 134*23323929SAndre Przywara #define APIC_EILVTn(n) (0x500 + 0x10 * n) 135*23323929SAndre Przywara #define APIC_EILVT_NR_AMD_K8 1 /* # of extended interrupts */ 136*23323929SAndre Przywara #define APIC_EILVT_NR_AMD_10H 4 137*23323929SAndre Przywara #define APIC_EILVT_NR_MAX APIC_EILVT_NR_AMD_10H 138*23323929SAndre Przywara #define APIC_EILVT_LVTOFF(x) (((x) >> 4) & 0xF) 139*23323929SAndre Przywara #define APIC_EILVT_MSG_FIX 0x0 140*23323929SAndre Przywara #define APIC_EILVT_MSG_SMI 0x2 141*23323929SAndre Przywara #define APIC_EILVT_MSG_NMI 0x4 142*23323929SAndre Przywara #define APIC_EILVT_MSG_EXT 0x7 143*23323929SAndre Przywara #define APIC_EILVT_MASKED (1 << 16) 144*23323929SAndre Przywara 145*23323929SAndre Przywara #define APIC_BASE (fix_to_virt(FIX_APIC_BASE)) 146*23323929SAndre Przywara #define APIC_BASE_MSR 0x800 147*23323929SAndre Przywara #define XAPIC_ENABLE (1UL << 11) 148*23323929SAndre Przywara #define X2APIC_ENABLE (1UL << 10) 149*23323929SAndre Przywara 150*23323929SAndre Przywara #ifdef CONFIG_X86_32 151*23323929SAndre Przywara # define MAX_IO_APICS 64 152*23323929SAndre Przywara # define MAX_LOCAL_APIC 256 153*23323929SAndre Przywara #else 154*23323929SAndre Przywara # define MAX_IO_APICS 128 155*23323929SAndre Przywara # define MAX_LOCAL_APIC 32768 156*23323929SAndre Przywara #endif 157*23323929SAndre Przywara 158*23323929SAndre Przywara /* 159*23323929SAndre Przywara * All x86-64 systems are xAPIC compatible. 160*23323929SAndre Przywara * In the following, "apicid" is a physical APIC ID. 161*23323929SAndre Przywara */ 162*23323929SAndre Przywara #define XAPIC_DEST_CPUS_SHIFT 4 163*23323929SAndre Przywara #define XAPIC_DEST_CPUS_MASK ((1u << XAPIC_DEST_CPUS_SHIFT) - 1) 164*23323929SAndre Przywara #define XAPIC_DEST_CLUSTER_MASK (XAPIC_DEST_CPUS_MASK << XAPIC_DEST_CPUS_SHIFT) 165*23323929SAndre Przywara #define APIC_CLUSTER(apicid) ((apicid) & XAPIC_DEST_CLUSTER_MASK) 166*23323929SAndre Przywara #define APIC_CLUSTERID(apicid) (APIC_CLUSTER(apicid) >> XAPIC_DEST_CPUS_SHIFT) 167*23323929SAndre Przywara #define APIC_CPUID(apicid) ((apicid) & XAPIC_DEST_CPUS_MASK) 168*23323929SAndre Przywara #define NUM_APIC_CLUSTERS ((BAD_APICID + 1) >> XAPIC_DEST_CPUS_SHIFT) 169*23323929SAndre Przywara 170*23323929SAndre Przywara /* 171*23323929SAndre Przywara * the local APIC register structure, memory mapped. Not terribly well 172*23323929SAndre Przywara * tested, but we might eventually use this one in the future - the 173*23323929SAndre Przywara * problem why we cannot use it right now is the P5 APIC, it has an 174*23323929SAndre Przywara * errata which cannot take 8-bit reads and writes, only 32-bit ones ... 175*23323929SAndre Przywara */ 176*23323929SAndre Przywara #define u32 unsigned int 177*23323929SAndre Przywara 178*23323929SAndre Przywara struct local_apic { 179*23323929SAndre Przywara 180*23323929SAndre Przywara /*000*/ struct { u32 __reserved[4]; } __reserved_01; 181*23323929SAndre Przywara 182*23323929SAndre Przywara /*010*/ struct { u32 __reserved[4]; } __reserved_02; 183*23323929SAndre Przywara 184*23323929SAndre Przywara /*020*/ struct { /* APIC ID Register */ 185*23323929SAndre Przywara u32 __reserved_1 : 24, 186*23323929SAndre Przywara phys_apic_id : 4, 187*23323929SAndre Przywara __reserved_2 : 4; 188*23323929SAndre Przywara u32 __reserved[3]; 189*23323929SAndre Przywara } id; 190*23323929SAndre Przywara 191*23323929SAndre Przywara /*030*/ const 192*23323929SAndre Przywara struct { /* APIC Version Register */ 193*23323929SAndre Przywara u32 version : 8, 194*23323929SAndre Przywara __reserved_1 : 8, 195*23323929SAndre Przywara max_lvt : 8, 196*23323929SAndre Przywara __reserved_2 : 8; 197*23323929SAndre Przywara u32 __reserved[3]; 198*23323929SAndre Przywara } version; 199*23323929SAndre Przywara 200*23323929SAndre Przywara /*040*/ struct { u32 __reserved[4]; } __reserved_03; 201*23323929SAndre Przywara 202*23323929SAndre Przywara /*050*/ struct { u32 __reserved[4]; } __reserved_04; 203*23323929SAndre Przywara 204*23323929SAndre Przywara /*060*/ struct { u32 __reserved[4]; } __reserved_05; 205*23323929SAndre Przywara 206*23323929SAndre Przywara /*070*/ struct { u32 __reserved[4]; } __reserved_06; 207*23323929SAndre Przywara 208*23323929SAndre Przywara /*080*/ struct { /* Task Priority Register */ 209*23323929SAndre Przywara u32 priority : 8, 210*23323929SAndre Przywara __reserved_1 : 24; 211*23323929SAndre Przywara u32 __reserved_2[3]; 212*23323929SAndre Przywara } tpr; 213*23323929SAndre Przywara 214*23323929SAndre Przywara /*090*/ const 215*23323929SAndre Przywara struct { /* Arbitration Priority Register */ 216*23323929SAndre Przywara u32 priority : 8, 217*23323929SAndre Przywara __reserved_1 : 24; 218*23323929SAndre Przywara u32 __reserved_2[3]; 219*23323929SAndre Przywara } apr; 220*23323929SAndre Przywara 221*23323929SAndre Przywara /*0A0*/ const 222*23323929SAndre Przywara struct { /* Processor Priority Register */ 223*23323929SAndre Przywara u32 priority : 8, 224*23323929SAndre Przywara __reserved_1 : 24; 225*23323929SAndre Przywara u32 __reserved_2[3]; 226*23323929SAndre Przywara } ppr; 227*23323929SAndre Przywara 228*23323929SAndre Przywara /*0B0*/ struct { /* End Of Interrupt Register */ 229*23323929SAndre Przywara u32 eoi; 230*23323929SAndre Przywara u32 __reserved[3]; 231*23323929SAndre Przywara } eoi; 232*23323929SAndre Przywara 233*23323929SAndre Przywara /*0C0*/ struct { u32 __reserved[4]; } __reserved_07; 234*23323929SAndre Przywara 235*23323929SAndre Przywara /*0D0*/ struct { /* Logical Destination Register */ 236*23323929SAndre Przywara u32 __reserved_1 : 24, 237*23323929SAndre Przywara logical_dest : 8; 238*23323929SAndre Przywara u32 __reserved_2[3]; 239*23323929SAndre Przywara } ldr; 240*23323929SAndre Przywara 241*23323929SAndre Przywara /*0E0*/ struct { /* Destination Format Register */ 242*23323929SAndre Przywara u32 __reserved_1 : 28, 243*23323929SAndre Przywara model : 4; 244*23323929SAndre Przywara u32 __reserved_2[3]; 245*23323929SAndre Przywara } dfr; 246*23323929SAndre Przywara 247*23323929SAndre Przywara /*0F0*/ struct { /* Spurious Interrupt Vector Register */ 248*23323929SAndre Przywara u32 spurious_vector : 8, 249*23323929SAndre Przywara apic_enabled : 1, 250*23323929SAndre Przywara focus_cpu : 1, 251*23323929SAndre Przywara __reserved_2 : 22; 252*23323929SAndre Przywara u32 __reserved_3[3]; 253*23323929SAndre Przywara } svr; 254*23323929SAndre Przywara 255*23323929SAndre Przywara /*100*/ struct { /* In Service Register */ 256*23323929SAndre Przywara /*170*/ u32 bitfield; 257*23323929SAndre Przywara u32 __reserved[3]; 258*23323929SAndre Przywara } isr [8]; 259*23323929SAndre Przywara 260*23323929SAndre Przywara /*180*/ struct { /* Trigger Mode Register */ 261*23323929SAndre Przywara /*1F0*/ u32 bitfield; 262*23323929SAndre Przywara u32 __reserved[3]; 263*23323929SAndre Przywara } tmr [8]; 264*23323929SAndre Przywara 265*23323929SAndre Przywara /*200*/ struct { /* Interrupt Request Register */ 266*23323929SAndre Przywara /*270*/ u32 bitfield; 267*23323929SAndre Przywara u32 __reserved[3]; 268*23323929SAndre Przywara } irr [8]; 269*23323929SAndre Przywara 270*23323929SAndre Przywara /*280*/ union { /* Error Status Register */ 271*23323929SAndre Przywara struct { 272*23323929SAndre Przywara u32 send_cs_error : 1, 273*23323929SAndre Przywara receive_cs_error : 1, 274*23323929SAndre Przywara send_accept_error : 1, 275*23323929SAndre Przywara receive_accept_error : 1, 276*23323929SAndre Przywara __reserved_1 : 1, 277*23323929SAndre Przywara send_illegal_vector : 1, 278*23323929SAndre Przywara receive_illegal_vector : 1, 279*23323929SAndre Przywara illegal_register_address : 1, 280*23323929SAndre Przywara __reserved_2 : 24; 281*23323929SAndre Przywara u32 __reserved_3[3]; 282*23323929SAndre Przywara } error_bits; 283*23323929SAndre Przywara struct { 284*23323929SAndre Przywara u32 errors; 285*23323929SAndre Przywara u32 __reserved_3[3]; 286*23323929SAndre Przywara } all_errors; 287*23323929SAndre Przywara } esr; 288*23323929SAndre Przywara 289*23323929SAndre Przywara /*290*/ struct { u32 __reserved[4]; } __reserved_08; 290*23323929SAndre Przywara 291*23323929SAndre Przywara /*2A0*/ struct { u32 __reserved[4]; } __reserved_09; 292*23323929SAndre Przywara 293*23323929SAndre Przywara /*2B0*/ struct { u32 __reserved[4]; } __reserved_10; 294*23323929SAndre Przywara 295*23323929SAndre Przywara /*2C0*/ struct { u32 __reserved[4]; } __reserved_11; 296*23323929SAndre Przywara 297*23323929SAndre Przywara /*2D0*/ struct { u32 __reserved[4]; } __reserved_12; 298*23323929SAndre Przywara 299*23323929SAndre Przywara /*2E0*/ struct { u32 __reserved[4]; } __reserved_13; 300*23323929SAndre Przywara 301*23323929SAndre Przywara /*2F0*/ struct { u32 __reserved[4]; } __reserved_14; 302*23323929SAndre Przywara 303*23323929SAndre Przywara /*300*/ struct { /* Interrupt Command Register 1 */ 304*23323929SAndre Przywara u32 vector : 8, 305*23323929SAndre Przywara delivery_mode : 3, 306*23323929SAndre Przywara destination_mode : 1, 307*23323929SAndre Przywara delivery_status : 1, 308*23323929SAndre Przywara __reserved_1 : 1, 309*23323929SAndre Przywara level : 1, 310*23323929SAndre Przywara trigger : 1, 311*23323929SAndre Przywara __reserved_2 : 2, 312*23323929SAndre Przywara shorthand : 2, 313*23323929SAndre Przywara __reserved_3 : 12; 314*23323929SAndre Przywara u32 __reserved_4[3]; 315*23323929SAndre Przywara } icr1; 316*23323929SAndre Przywara 317*23323929SAndre Przywara /*310*/ struct { /* Interrupt Command Register 2 */ 318*23323929SAndre Przywara union { 319*23323929SAndre Przywara u32 __reserved_1 : 24, 320*23323929SAndre Przywara phys_dest : 4, 321*23323929SAndre Przywara __reserved_2 : 4; 322*23323929SAndre Przywara u32 __reserved_3 : 24, 323*23323929SAndre Przywara logical_dest : 8; 324*23323929SAndre Przywara } dest; 325*23323929SAndre Przywara u32 __reserved_4[3]; 326*23323929SAndre Przywara } icr2; 327*23323929SAndre Przywara 328*23323929SAndre Przywara /*320*/ struct { /* LVT - Timer */ 329*23323929SAndre Przywara u32 vector : 8, 330*23323929SAndre Przywara __reserved_1 : 4, 331*23323929SAndre Przywara delivery_status : 1, 332*23323929SAndre Przywara __reserved_2 : 3, 333*23323929SAndre Przywara mask : 1, 334*23323929SAndre Przywara timer_mode : 1, 335*23323929SAndre Przywara __reserved_3 : 14; 336*23323929SAndre Przywara u32 __reserved_4[3]; 337*23323929SAndre Przywara } lvt_timer; 338*23323929SAndre Przywara 339*23323929SAndre Przywara /*330*/ struct { /* LVT - Thermal Sensor */ 340*23323929SAndre Przywara u32 vector : 8, 341*23323929SAndre Przywara delivery_mode : 3, 342*23323929SAndre Przywara __reserved_1 : 1, 343*23323929SAndre Przywara delivery_status : 1, 344*23323929SAndre Przywara __reserved_2 : 3, 345*23323929SAndre Przywara mask : 1, 346*23323929SAndre Przywara __reserved_3 : 15; 347*23323929SAndre Przywara u32 __reserved_4[3]; 348*23323929SAndre Przywara } lvt_thermal; 349*23323929SAndre Przywara 350*23323929SAndre Przywara /*340*/ struct { /* LVT - Performance Counter */ 351*23323929SAndre Przywara u32 vector : 8, 352*23323929SAndre Przywara delivery_mode : 3, 353*23323929SAndre Przywara __reserved_1 : 1, 354*23323929SAndre Przywara delivery_status : 1, 355*23323929SAndre Przywara __reserved_2 : 3, 356*23323929SAndre Przywara mask : 1, 357*23323929SAndre Przywara __reserved_3 : 15; 358*23323929SAndre Przywara u32 __reserved_4[3]; 359*23323929SAndre Przywara } lvt_pc; 360*23323929SAndre Przywara 361*23323929SAndre Przywara /*350*/ struct { /* LVT - LINT0 */ 362*23323929SAndre Przywara u32 vector : 8, 363*23323929SAndre Przywara delivery_mode : 3, 364*23323929SAndre Przywara __reserved_1 : 1, 365*23323929SAndre Przywara delivery_status : 1, 366*23323929SAndre Przywara polarity : 1, 367*23323929SAndre Przywara remote_irr : 1, 368*23323929SAndre Przywara trigger : 1, 369*23323929SAndre Przywara mask : 1, 370*23323929SAndre Przywara __reserved_2 : 15; 371*23323929SAndre Przywara u32 __reserved_3[3]; 372*23323929SAndre Przywara } lvt_lint0; 373*23323929SAndre Przywara 374*23323929SAndre Przywara /*360*/ struct { /* LVT - LINT1 */ 375*23323929SAndre Przywara u32 vector : 8, 376*23323929SAndre Przywara delivery_mode : 3, 377*23323929SAndre Przywara __reserved_1 : 1, 378*23323929SAndre Przywara delivery_status : 1, 379*23323929SAndre Przywara polarity : 1, 380*23323929SAndre Przywara remote_irr : 1, 381*23323929SAndre Przywara trigger : 1, 382*23323929SAndre Przywara mask : 1, 383*23323929SAndre Przywara __reserved_2 : 15; 384*23323929SAndre Przywara u32 __reserved_3[3]; 385*23323929SAndre Przywara } lvt_lint1; 386*23323929SAndre Przywara 387*23323929SAndre Przywara /*370*/ struct { /* LVT - Error */ 388*23323929SAndre Przywara u32 vector : 8, 389*23323929SAndre Przywara __reserved_1 : 4, 390*23323929SAndre Przywara delivery_status : 1, 391*23323929SAndre Przywara __reserved_2 : 3, 392*23323929SAndre Przywara mask : 1, 393*23323929SAndre Przywara __reserved_3 : 15; 394*23323929SAndre Przywara u32 __reserved_4[3]; 395*23323929SAndre Przywara } lvt_error; 396*23323929SAndre Przywara 397*23323929SAndre Przywara /*380*/ struct { /* Timer Initial Count Register */ 398*23323929SAndre Przywara u32 initial_count; 399*23323929SAndre Przywara u32 __reserved_2[3]; 400*23323929SAndre Przywara } timer_icr; 401*23323929SAndre Przywara 402*23323929SAndre Przywara /*390*/ const 403*23323929SAndre Przywara struct { /* Timer Current Count Register */ 404*23323929SAndre Przywara u32 curr_count; 405*23323929SAndre Przywara u32 __reserved_2[3]; 406*23323929SAndre Przywara } timer_ccr; 407*23323929SAndre Przywara 408*23323929SAndre Przywara /*3A0*/ struct { u32 __reserved[4]; } __reserved_16; 409*23323929SAndre Przywara 410*23323929SAndre Przywara /*3B0*/ struct { u32 __reserved[4]; } __reserved_17; 411*23323929SAndre Przywara 412*23323929SAndre Przywara /*3C0*/ struct { u32 __reserved[4]; } __reserved_18; 413*23323929SAndre Przywara 414*23323929SAndre Przywara /*3D0*/ struct { u32 __reserved[4]; } __reserved_19; 415*23323929SAndre Przywara 416*23323929SAndre Przywara /*3E0*/ struct { /* Timer Divide Configuration Register */ 417*23323929SAndre Przywara u32 divisor : 4, 418*23323929SAndre Przywara __reserved_1 : 28; 419*23323929SAndre Przywara u32 __reserved_2[3]; 420*23323929SAndre Przywara } timer_dcr; 421*23323929SAndre Przywara 422*23323929SAndre Przywara /*3F0*/ struct { u32 __reserved[4]; } __reserved_20; 423*23323929SAndre Przywara 424*23323929SAndre Przywara } __attribute__ ((packed)); 425*23323929SAndre Przywara 426*23323929SAndre Przywara #undef u32 427*23323929SAndre Przywara 428*23323929SAndre Przywara #ifdef CONFIG_X86_32 429*23323929SAndre Przywara #define BAD_APICID 0xFFu 430*23323929SAndre Przywara #else 431*23323929SAndre Przywara #define BAD_APICID 0xFFFFu 432*23323929SAndre Przywara #endif 433*23323929SAndre Przywara 434*23323929SAndre Przywara enum ioapic_irq_destination_types { 435*23323929SAndre Przywara dest_Fixed = 0, 436*23323929SAndre Przywara dest_LowestPrio = 1, 437*23323929SAndre Przywara dest_SMI = 2, 438*23323929SAndre Przywara dest__reserved_1 = 3, 439*23323929SAndre Przywara dest_NMI = 4, 440*23323929SAndre Przywara dest_INIT = 5, 441*23323929SAndre Przywara dest__reserved_2 = 6, 442*23323929SAndre Przywara dest_ExtINT = 7 443*23323929SAndre Przywara }; 444*23323929SAndre Przywara 445*23323929SAndre Przywara #endif /* _ASM_X86_APICDEF_H */ 446