1*32c3d3b6SJohn Baldwin /*- 2*32c3d3b6SJohn Baldwin * Copyright (c) 1996, by Peter Wemm and Steve Passe 3*32c3d3b6SJohn Baldwin * All rights reserved. 4*32c3d3b6SJohn Baldwin * 5*32c3d3b6SJohn Baldwin * Redistribution and use in source and binary forms, with or without 6*32c3d3b6SJohn Baldwin * modification, are permitted provided that the following conditions 7*32c3d3b6SJohn Baldwin * are met: 8*32c3d3b6SJohn Baldwin * 1. Redistributions of source code must retain the above copyright 9*32c3d3b6SJohn Baldwin * notice, this list of conditions and the following disclaimer. 10*32c3d3b6SJohn Baldwin * 2. The name of the developer may NOT be used to endorse or promote products 11*32c3d3b6SJohn Baldwin * derived from this software without specific prior written permission. 12*32c3d3b6SJohn Baldwin * 13*32c3d3b6SJohn Baldwin * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 14*32c3d3b6SJohn Baldwin * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15*32c3d3b6SJohn Baldwin * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 16*32c3d3b6SJohn Baldwin * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 17*32c3d3b6SJohn Baldwin * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 18*32c3d3b6SJohn Baldwin * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 19*32c3d3b6SJohn Baldwin * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 20*32c3d3b6SJohn Baldwin * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 21*32c3d3b6SJohn Baldwin * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 22*32c3d3b6SJohn Baldwin * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 23*32c3d3b6SJohn Baldwin * SUCH DAMAGE. 24*32c3d3b6SJohn Baldwin * 25*32c3d3b6SJohn Baldwin * $FreeBSD$ 26*32c3d3b6SJohn Baldwin */ 27*32c3d3b6SJohn Baldwin 28*32c3d3b6SJohn Baldwin #ifndef _X86_APICREG_H_ 29*32c3d3b6SJohn Baldwin #define _X86_APICREG_H_ 30*32c3d3b6SJohn Baldwin 31*32c3d3b6SJohn Baldwin /* 32*32c3d3b6SJohn Baldwin * Local && I/O APIC definitions. 33*32c3d3b6SJohn Baldwin */ 34*32c3d3b6SJohn Baldwin 35*32c3d3b6SJohn Baldwin /* 36*32c3d3b6SJohn Baldwin * Pentium P54C+ Built-in APIC 37*32c3d3b6SJohn Baldwin * (Advanced programmable Interrupt Controller) 38*32c3d3b6SJohn Baldwin * 39*32c3d3b6SJohn Baldwin * Base Address of Built-in APIC in memory location 40*32c3d3b6SJohn Baldwin * is 0xfee00000. 41*32c3d3b6SJohn Baldwin * 42*32c3d3b6SJohn Baldwin * Map of APIC Registers: 43*32c3d3b6SJohn Baldwin * 44*32c3d3b6SJohn Baldwin * Offset (hex) Description Read/Write state 45*32c3d3b6SJohn Baldwin * 000 Reserved 46*32c3d3b6SJohn Baldwin * 010 Reserved 47*32c3d3b6SJohn Baldwin * 020 ID Local APIC ID R/W 48*32c3d3b6SJohn Baldwin * 030 VER Local APIC Version R 49*32c3d3b6SJohn Baldwin * 040 Reserved 50*32c3d3b6SJohn Baldwin * 050 Reserved 51*32c3d3b6SJohn Baldwin * 060 Reserved 52*32c3d3b6SJohn Baldwin * 070 Reserved 53*32c3d3b6SJohn Baldwin * 080 Task Priority Register R/W 54*32c3d3b6SJohn Baldwin * 090 Arbitration Priority Register R 55*32c3d3b6SJohn Baldwin * 0A0 Processor Priority Register R 56*32c3d3b6SJohn Baldwin * 0B0 EOI Register W 57*32c3d3b6SJohn Baldwin * 0C0 RRR Remote read R 58*32c3d3b6SJohn Baldwin * 0D0 Logical Destination R/W 59*32c3d3b6SJohn Baldwin * 0E0 Destination Format Register 0..27 R; 28..31 R/W 60*32c3d3b6SJohn Baldwin * 0F0 SVR Spurious Interrupt Vector Reg. 0..3 R; 4..9 R/W 61*32c3d3b6SJohn Baldwin * 100 ISR 000-031 R 62*32c3d3b6SJohn Baldwin * 110 ISR 032-063 R 63*32c3d3b6SJohn Baldwin * 120 ISR 064-095 R 64*32c3d3b6SJohn Baldwin * 130 ISR 095-128 R 65*32c3d3b6SJohn Baldwin * 140 ISR 128-159 R 66*32c3d3b6SJohn Baldwin * 150 ISR 160-191 R 67*32c3d3b6SJohn Baldwin * 160 ISR 192-223 R 68*32c3d3b6SJohn Baldwin * 170 ISR 224-255 R 69*32c3d3b6SJohn Baldwin * 180 TMR 000-031 R 70*32c3d3b6SJohn Baldwin * 190 TMR 032-063 R 71*32c3d3b6SJohn Baldwin * 1A0 TMR 064-095 R 72*32c3d3b6SJohn Baldwin * 1B0 TMR 095-128 R 73*32c3d3b6SJohn Baldwin * 1C0 TMR 128-159 R 74*32c3d3b6SJohn Baldwin * 1D0 TMR 160-191 R 75*32c3d3b6SJohn Baldwin * 1E0 TMR 192-223 R 76*32c3d3b6SJohn Baldwin * 1F0 TMR 224-255 R 77*32c3d3b6SJohn Baldwin * 200 IRR 000-031 R 78*32c3d3b6SJohn Baldwin * 210 IRR 032-063 R 79*32c3d3b6SJohn Baldwin * 220 IRR 064-095 R 80*32c3d3b6SJohn Baldwin * 230 IRR 095-128 R 81*32c3d3b6SJohn Baldwin * 240 IRR 128-159 R 82*32c3d3b6SJohn Baldwin * 250 IRR 160-191 R 83*32c3d3b6SJohn Baldwin * 260 IRR 192-223 R 84*32c3d3b6SJohn Baldwin * 270 IRR 224-255 R 85*32c3d3b6SJohn Baldwin * 280 Error Status Register R 86*32c3d3b6SJohn Baldwin * 290 Reserved 87*32c3d3b6SJohn Baldwin * 2A0 Reserved 88*32c3d3b6SJohn Baldwin * 2B0 Reserved 89*32c3d3b6SJohn Baldwin * 2C0 Reserved 90*32c3d3b6SJohn Baldwin * 2D0 Reserved 91*32c3d3b6SJohn Baldwin * 2E0 Reserved 92*32c3d3b6SJohn Baldwin * 2F0 Local Vector Table (CMCI) R/W 93*32c3d3b6SJohn Baldwin * 300 ICR_LOW Interrupt Command Reg. (0-31) R/W 94*32c3d3b6SJohn Baldwin * 310 ICR_HI Interrupt Command Reg. (32-63) R/W 95*32c3d3b6SJohn Baldwin * 320 Local Vector Table (Timer) R/W 96*32c3d3b6SJohn Baldwin * 330 Local Vector Table (Thermal) R/W (PIV+) 97*32c3d3b6SJohn Baldwin * 340 Local Vector Table (Performance) R/W (P6+) 98*32c3d3b6SJohn Baldwin * 350 LVT1 Local Vector Table (LINT0) R/W 99*32c3d3b6SJohn Baldwin * 360 LVT2 Local Vector Table (LINT1) R/W 100*32c3d3b6SJohn Baldwin * 370 LVT3 Local Vector Table (ERROR) R/W 101*32c3d3b6SJohn Baldwin * 380 Initial Count Reg. for Timer R/W 102*32c3d3b6SJohn Baldwin * 390 Current Count of Timer R 103*32c3d3b6SJohn Baldwin * 3A0 Reserved 104*32c3d3b6SJohn Baldwin * 3B0 Reserved 105*32c3d3b6SJohn Baldwin * 3C0 Reserved 106*32c3d3b6SJohn Baldwin * 3D0 Reserved 107*32c3d3b6SJohn Baldwin * 3E0 Timer Divide Configuration Reg. R/W 108*32c3d3b6SJohn Baldwin * 3F0 Reserved 109*32c3d3b6SJohn Baldwin */ 110*32c3d3b6SJohn Baldwin 111*32c3d3b6SJohn Baldwin 112*32c3d3b6SJohn Baldwin /****************************************************************************** 113*32c3d3b6SJohn Baldwin * global defines, etc. 114*32c3d3b6SJohn Baldwin */ 115*32c3d3b6SJohn Baldwin 116*32c3d3b6SJohn Baldwin 117*32c3d3b6SJohn Baldwin /****************************************************************************** 118*32c3d3b6SJohn Baldwin * LOCAL APIC structure 119*32c3d3b6SJohn Baldwin */ 120*32c3d3b6SJohn Baldwin 121*32c3d3b6SJohn Baldwin #ifndef LOCORE 122*32c3d3b6SJohn Baldwin #include <sys/types.h> 123*32c3d3b6SJohn Baldwin 124*32c3d3b6SJohn Baldwin #define PAD3 int : 32; int : 32; int : 32 125*32c3d3b6SJohn Baldwin #define PAD4 int : 32; int : 32; int : 32; int : 32 126*32c3d3b6SJohn Baldwin 127*32c3d3b6SJohn Baldwin struct LAPIC { 128*32c3d3b6SJohn Baldwin /* reserved */ PAD4; 129*32c3d3b6SJohn Baldwin /* reserved */ PAD4; 130*32c3d3b6SJohn Baldwin u_int32_t id; PAD3; 131*32c3d3b6SJohn Baldwin u_int32_t version; PAD3; 132*32c3d3b6SJohn Baldwin /* reserved */ PAD4; 133*32c3d3b6SJohn Baldwin /* reserved */ PAD4; 134*32c3d3b6SJohn Baldwin /* reserved */ PAD4; 135*32c3d3b6SJohn Baldwin /* reserved */ PAD4; 136*32c3d3b6SJohn Baldwin u_int32_t tpr; PAD3; 137*32c3d3b6SJohn Baldwin u_int32_t apr; PAD3; 138*32c3d3b6SJohn Baldwin u_int32_t ppr; PAD3; 139*32c3d3b6SJohn Baldwin u_int32_t eoi; PAD3; 140*32c3d3b6SJohn Baldwin /* reserved */ PAD4; 141*32c3d3b6SJohn Baldwin u_int32_t ldr; PAD3; 142*32c3d3b6SJohn Baldwin u_int32_t dfr; PAD3; 143*32c3d3b6SJohn Baldwin u_int32_t svr; PAD3; 144*32c3d3b6SJohn Baldwin u_int32_t isr0; PAD3; 145*32c3d3b6SJohn Baldwin u_int32_t isr1; PAD3; 146*32c3d3b6SJohn Baldwin u_int32_t isr2; PAD3; 147*32c3d3b6SJohn Baldwin u_int32_t isr3; PAD3; 148*32c3d3b6SJohn Baldwin u_int32_t isr4; PAD3; 149*32c3d3b6SJohn Baldwin u_int32_t isr5; PAD3; 150*32c3d3b6SJohn Baldwin u_int32_t isr6; PAD3; 151*32c3d3b6SJohn Baldwin u_int32_t isr7; PAD3; 152*32c3d3b6SJohn Baldwin u_int32_t tmr0; PAD3; 153*32c3d3b6SJohn Baldwin u_int32_t tmr1; PAD3; 154*32c3d3b6SJohn Baldwin u_int32_t tmr2; PAD3; 155*32c3d3b6SJohn Baldwin u_int32_t tmr3; PAD3; 156*32c3d3b6SJohn Baldwin u_int32_t tmr4; PAD3; 157*32c3d3b6SJohn Baldwin u_int32_t tmr5; PAD3; 158*32c3d3b6SJohn Baldwin u_int32_t tmr6; PAD3; 159*32c3d3b6SJohn Baldwin u_int32_t tmr7; PAD3; 160*32c3d3b6SJohn Baldwin u_int32_t irr0; PAD3; 161*32c3d3b6SJohn Baldwin u_int32_t irr1; PAD3; 162*32c3d3b6SJohn Baldwin u_int32_t irr2; PAD3; 163*32c3d3b6SJohn Baldwin u_int32_t irr3; PAD3; 164*32c3d3b6SJohn Baldwin u_int32_t irr4; PAD3; 165*32c3d3b6SJohn Baldwin u_int32_t irr5; PAD3; 166*32c3d3b6SJohn Baldwin u_int32_t irr6; PAD3; 167*32c3d3b6SJohn Baldwin u_int32_t irr7; PAD3; 168*32c3d3b6SJohn Baldwin u_int32_t esr; PAD3; 169*32c3d3b6SJohn Baldwin /* reserved */ PAD4; 170*32c3d3b6SJohn Baldwin /* reserved */ PAD4; 171*32c3d3b6SJohn Baldwin /* reserved */ PAD4; 172*32c3d3b6SJohn Baldwin /* reserved */ PAD4; 173*32c3d3b6SJohn Baldwin /* reserved */ PAD4; 174*32c3d3b6SJohn Baldwin /* reserved */ PAD4; 175*32c3d3b6SJohn Baldwin u_int32_t lvt_cmci; PAD3; 176*32c3d3b6SJohn Baldwin u_int32_t icr_lo; PAD3; 177*32c3d3b6SJohn Baldwin u_int32_t icr_hi; PAD3; 178*32c3d3b6SJohn Baldwin u_int32_t lvt_timer; PAD3; 179*32c3d3b6SJohn Baldwin u_int32_t lvt_thermal; PAD3; 180*32c3d3b6SJohn Baldwin u_int32_t lvt_pcint; PAD3; 181*32c3d3b6SJohn Baldwin u_int32_t lvt_lint0; PAD3; 182*32c3d3b6SJohn Baldwin u_int32_t lvt_lint1; PAD3; 183*32c3d3b6SJohn Baldwin u_int32_t lvt_error; PAD3; 184*32c3d3b6SJohn Baldwin u_int32_t icr_timer; PAD3; 185*32c3d3b6SJohn Baldwin u_int32_t ccr_timer; PAD3; 186*32c3d3b6SJohn Baldwin /* reserved */ PAD4; 187*32c3d3b6SJohn Baldwin /* reserved */ PAD4; 188*32c3d3b6SJohn Baldwin /* reserved */ PAD4; 189*32c3d3b6SJohn Baldwin /* reserved */ PAD4; 190*32c3d3b6SJohn Baldwin u_int32_t dcr_timer; PAD3; 191*32c3d3b6SJohn Baldwin /* reserved */ PAD4; 192*32c3d3b6SJohn Baldwin }; 193*32c3d3b6SJohn Baldwin 194*32c3d3b6SJohn Baldwin typedef struct LAPIC lapic_t; 195*32c3d3b6SJohn Baldwin 196*32c3d3b6SJohn Baldwin /****************************************************************************** 197*32c3d3b6SJohn Baldwin * I/O APIC structure 198*32c3d3b6SJohn Baldwin */ 199*32c3d3b6SJohn Baldwin 200*32c3d3b6SJohn Baldwin struct IOAPIC { 201*32c3d3b6SJohn Baldwin u_int32_t ioregsel; PAD3; 202*32c3d3b6SJohn Baldwin u_int32_t iowin; PAD3; 203*32c3d3b6SJohn Baldwin }; 204*32c3d3b6SJohn Baldwin 205*32c3d3b6SJohn Baldwin typedef struct IOAPIC ioapic_t; 206*32c3d3b6SJohn Baldwin 207*32c3d3b6SJohn Baldwin #undef PAD4 208*32c3d3b6SJohn Baldwin #undef PAD3 209*32c3d3b6SJohn Baldwin 210*32c3d3b6SJohn Baldwin #endif /* !LOCORE */ 211*32c3d3b6SJohn Baldwin 212*32c3d3b6SJohn Baldwin 213*32c3d3b6SJohn Baldwin /****************************************************************************** 214*32c3d3b6SJohn Baldwin * various code 'logical' values 215*32c3d3b6SJohn Baldwin */ 216*32c3d3b6SJohn Baldwin 217*32c3d3b6SJohn Baldwin /****************************************************************************** 218*32c3d3b6SJohn Baldwin * LOCAL APIC defines 219*32c3d3b6SJohn Baldwin */ 220*32c3d3b6SJohn Baldwin 221*32c3d3b6SJohn Baldwin /* default physical locations of LOCAL (CPU) APICs */ 222*32c3d3b6SJohn Baldwin #define DEFAULT_APIC_BASE 0xfee00000 223*32c3d3b6SJohn Baldwin 224*32c3d3b6SJohn Baldwin /* constants relating to APIC ID registers */ 225*32c3d3b6SJohn Baldwin #define APIC_ID_MASK 0xff000000 226*32c3d3b6SJohn Baldwin #define APIC_ID_SHIFT 24 227*32c3d3b6SJohn Baldwin #define APIC_ID_CLUSTER 0xf0 228*32c3d3b6SJohn Baldwin #define APIC_ID_CLUSTER_ID 0x0f 229*32c3d3b6SJohn Baldwin #define APIC_MAX_CLUSTER 0xe 230*32c3d3b6SJohn Baldwin #define APIC_MAX_INTRACLUSTER_ID 3 231*32c3d3b6SJohn Baldwin #define APIC_ID_CLUSTER_SHIFT 4 232*32c3d3b6SJohn Baldwin 233*32c3d3b6SJohn Baldwin /* fields in VER */ 234*32c3d3b6SJohn Baldwin #define APIC_VER_VERSION 0x000000ff 235*32c3d3b6SJohn Baldwin #define APIC_VER_MAXLVT 0x00ff0000 236*32c3d3b6SJohn Baldwin #define MAXLVTSHIFT 16 237*32c3d3b6SJohn Baldwin #define APIC_VER_EOI_SUPPRESSION 0x01000000 238*32c3d3b6SJohn Baldwin 239*32c3d3b6SJohn Baldwin /* fields in LDR */ 240*32c3d3b6SJohn Baldwin #define APIC_LDR_RESERVED 0x00ffffff 241*32c3d3b6SJohn Baldwin 242*32c3d3b6SJohn Baldwin /* fields in DFR */ 243*32c3d3b6SJohn Baldwin #define APIC_DFR_RESERVED 0x0fffffff 244*32c3d3b6SJohn Baldwin #define APIC_DFR_MODEL_MASK 0xf0000000 245*32c3d3b6SJohn Baldwin #define APIC_DFR_MODEL_FLAT 0xf0000000 246*32c3d3b6SJohn Baldwin #define APIC_DFR_MODEL_CLUSTER 0x00000000 247*32c3d3b6SJohn Baldwin 248*32c3d3b6SJohn Baldwin /* fields in SVR */ 249*32c3d3b6SJohn Baldwin #define APIC_SVR_VECTOR 0x000000ff 250*32c3d3b6SJohn Baldwin #define APIC_SVR_VEC_PROG 0x000000f0 251*32c3d3b6SJohn Baldwin #define APIC_SVR_VEC_FIX 0x0000000f 252*32c3d3b6SJohn Baldwin #define APIC_SVR_ENABLE 0x00000100 253*32c3d3b6SJohn Baldwin # define APIC_SVR_SWDIS 0x00000000 254*32c3d3b6SJohn Baldwin # define APIC_SVR_SWEN 0x00000100 255*32c3d3b6SJohn Baldwin #define APIC_SVR_FOCUS 0x00000200 256*32c3d3b6SJohn Baldwin # define APIC_SVR_FEN 0x00000000 257*32c3d3b6SJohn Baldwin # define APIC_SVR_FDIS 0x00000200 258*32c3d3b6SJohn Baldwin #define APIC_SVR_EOI_SUPPRESSION 0x00001000 259*32c3d3b6SJohn Baldwin 260*32c3d3b6SJohn Baldwin /* fields in TPR */ 261*32c3d3b6SJohn Baldwin #define APIC_TPR_PRIO 0x000000ff 262*32c3d3b6SJohn Baldwin # define APIC_TPR_INT 0x000000f0 263*32c3d3b6SJohn Baldwin # define APIC_TPR_SUB 0x0000000f 264*32c3d3b6SJohn Baldwin 265*32c3d3b6SJohn Baldwin /* fields in ESR */ 266*32c3d3b6SJohn Baldwin #define APIC_ESR_SEND_CS_ERROR 0x00000001 267*32c3d3b6SJohn Baldwin #define APIC_ESR_RECEIVE_CS_ERROR 0x00000002 268*32c3d3b6SJohn Baldwin #define APIC_ESR_SEND_ACCEPT 0x00000004 269*32c3d3b6SJohn Baldwin #define APIC_ESR_RECEIVE_ACCEPT 0x00000008 270*32c3d3b6SJohn Baldwin #define APIC_ESR_SEND_ILLEGAL_VECTOR 0x00000020 271*32c3d3b6SJohn Baldwin #define APIC_ESR_RECEIVE_ILLEGAL_VECTOR 0x00000040 272*32c3d3b6SJohn Baldwin #define APIC_ESR_ILLEGAL_REGISTER 0x00000080 273*32c3d3b6SJohn Baldwin 274*32c3d3b6SJohn Baldwin /* fields in ICR_LOW */ 275*32c3d3b6SJohn Baldwin #define APIC_VECTOR_MASK 0x000000ff 276*32c3d3b6SJohn Baldwin 277*32c3d3b6SJohn Baldwin #define APIC_DELMODE_MASK 0x00000700 278*32c3d3b6SJohn Baldwin # define APIC_DELMODE_FIXED 0x00000000 279*32c3d3b6SJohn Baldwin # define APIC_DELMODE_LOWPRIO 0x00000100 280*32c3d3b6SJohn Baldwin # define APIC_DELMODE_SMI 0x00000200 281*32c3d3b6SJohn Baldwin # define APIC_DELMODE_RR 0x00000300 282*32c3d3b6SJohn Baldwin # define APIC_DELMODE_NMI 0x00000400 283*32c3d3b6SJohn Baldwin # define APIC_DELMODE_INIT 0x00000500 284*32c3d3b6SJohn Baldwin # define APIC_DELMODE_STARTUP 0x00000600 285*32c3d3b6SJohn Baldwin # define APIC_DELMODE_RESV 0x00000700 286*32c3d3b6SJohn Baldwin 287*32c3d3b6SJohn Baldwin #define APIC_DESTMODE_MASK 0x00000800 288*32c3d3b6SJohn Baldwin # define APIC_DESTMODE_PHY 0x00000000 289*32c3d3b6SJohn Baldwin # define APIC_DESTMODE_LOG 0x00000800 290*32c3d3b6SJohn Baldwin 291*32c3d3b6SJohn Baldwin #define APIC_DELSTAT_MASK 0x00001000 292*32c3d3b6SJohn Baldwin # define APIC_DELSTAT_IDLE 0x00000000 293*32c3d3b6SJohn Baldwin # define APIC_DELSTAT_PEND 0x00001000 294*32c3d3b6SJohn Baldwin 295*32c3d3b6SJohn Baldwin #define APIC_RESV1_MASK 0x00002000 296*32c3d3b6SJohn Baldwin 297*32c3d3b6SJohn Baldwin #define APIC_LEVEL_MASK 0x00004000 298*32c3d3b6SJohn Baldwin # define APIC_LEVEL_DEASSERT 0x00000000 299*32c3d3b6SJohn Baldwin # define APIC_LEVEL_ASSERT 0x00004000 300*32c3d3b6SJohn Baldwin 301*32c3d3b6SJohn Baldwin #define APIC_TRIGMOD_MASK 0x00008000 302*32c3d3b6SJohn Baldwin # define APIC_TRIGMOD_EDGE 0x00000000 303*32c3d3b6SJohn Baldwin # define APIC_TRIGMOD_LEVEL 0x00008000 304*32c3d3b6SJohn Baldwin 305*32c3d3b6SJohn Baldwin #define APIC_RRSTAT_MASK 0x00030000 306*32c3d3b6SJohn Baldwin # define APIC_RRSTAT_INVALID 0x00000000 307*32c3d3b6SJohn Baldwin # define APIC_RRSTAT_INPROG 0x00010000 308*32c3d3b6SJohn Baldwin # define APIC_RRSTAT_VALID 0x00020000 309*32c3d3b6SJohn Baldwin # define APIC_RRSTAT_RESV 0x00030000 310*32c3d3b6SJohn Baldwin 311*32c3d3b6SJohn Baldwin #define APIC_DEST_MASK 0x000c0000 312*32c3d3b6SJohn Baldwin # define APIC_DEST_DESTFLD 0x00000000 313*32c3d3b6SJohn Baldwin # define APIC_DEST_SELF 0x00040000 314*32c3d3b6SJohn Baldwin # define APIC_DEST_ALLISELF 0x00080000 315*32c3d3b6SJohn Baldwin # define APIC_DEST_ALLESELF 0x000c0000 316*32c3d3b6SJohn Baldwin 317*32c3d3b6SJohn Baldwin #define APIC_RESV2_MASK 0xfff00000 318*32c3d3b6SJohn Baldwin 319*32c3d3b6SJohn Baldwin #define APIC_ICRLO_RESV_MASK (APIC_RESV1_MASK | APIC_RESV2_MASK) 320*32c3d3b6SJohn Baldwin 321*32c3d3b6SJohn Baldwin /* fields in LVT1/2 */ 322*32c3d3b6SJohn Baldwin #define APIC_LVT_VECTOR 0x000000ff 323*32c3d3b6SJohn Baldwin #define APIC_LVT_DM 0x00000700 324*32c3d3b6SJohn Baldwin # define APIC_LVT_DM_FIXED 0x00000000 325*32c3d3b6SJohn Baldwin # define APIC_LVT_DM_SMI 0x00000200 326*32c3d3b6SJohn Baldwin # define APIC_LVT_DM_NMI 0x00000400 327*32c3d3b6SJohn Baldwin # define APIC_LVT_DM_INIT 0x00000500 328*32c3d3b6SJohn Baldwin # define APIC_LVT_DM_EXTINT 0x00000700 329*32c3d3b6SJohn Baldwin #define APIC_LVT_DS 0x00001000 330*32c3d3b6SJohn Baldwin #define APIC_LVT_IIPP 0x00002000 331*32c3d3b6SJohn Baldwin #define APIC_LVT_IIPP_INTALO 0x00002000 332*32c3d3b6SJohn Baldwin #define APIC_LVT_IIPP_INTAHI 0x00000000 333*32c3d3b6SJohn Baldwin #define APIC_LVT_RIRR 0x00004000 334*32c3d3b6SJohn Baldwin #define APIC_LVT_TM 0x00008000 335*32c3d3b6SJohn Baldwin #define APIC_LVT_M 0x00010000 336*32c3d3b6SJohn Baldwin 337*32c3d3b6SJohn Baldwin 338*32c3d3b6SJohn Baldwin /* fields in LVT Timer */ 339*32c3d3b6SJohn Baldwin #define APIC_LVTT_VECTOR 0x000000ff 340*32c3d3b6SJohn Baldwin #define APIC_LVTT_DS 0x00001000 341*32c3d3b6SJohn Baldwin #define APIC_LVTT_M 0x00010000 342*32c3d3b6SJohn Baldwin #define APIC_LVTT_TM 0x00020000 343*32c3d3b6SJohn Baldwin # define APIC_LVTT_TM_ONE_SHOT 0x00000000 344*32c3d3b6SJohn Baldwin # define APIC_LVTT_TM_PERIODIC 0x00020000 345*32c3d3b6SJohn Baldwin 346*32c3d3b6SJohn Baldwin 347*32c3d3b6SJohn Baldwin /* APIC timer current count */ 348*32c3d3b6SJohn Baldwin #define APIC_TIMER_MAX_COUNT 0xffffffff 349*32c3d3b6SJohn Baldwin 350*32c3d3b6SJohn Baldwin /* fields in TDCR */ 351*32c3d3b6SJohn Baldwin #define APIC_TDCR_2 0x00 352*32c3d3b6SJohn Baldwin #define APIC_TDCR_4 0x01 353*32c3d3b6SJohn Baldwin #define APIC_TDCR_8 0x02 354*32c3d3b6SJohn Baldwin #define APIC_TDCR_16 0x03 355*32c3d3b6SJohn Baldwin #define APIC_TDCR_32 0x08 356*32c3d3b6SJohn Baldwin #define APIC_TDCR_64 0x09 357*32c3d3b6SJohn Baldwin #define APIC_TDCR_128 0x0a 358*32c3d3b6SJohn Baldwin #define APIC_TDCR_1 0x0b 359*32c3d3b6SJohn Baldwin 360*32c3d3b6SJohn Baldwin /****************************************************************************** 361*32c3d3b6SJohn Baldwin * I/O APIC defines 362*32c3d3b6SJohn Baldwin */ 363*32c3d3b6SJohn Baldwin 364*32c3d3b6SJohn Baldwin /* default physical locations of an IO APIC */ 365*32c3d3b6SJohn Baldwin #define DEFAULT_IO_APIC_BASE 0xfec00000 366*32c3d3b6SJohn Baldwin 367*32c3d3b6SJohn Baldwin /* window register offset */ 368*32c3d3b6SJohn Baldwin #define IOAPIC_WINDOW 0x10 369*32c3d3b6SJohn Baldwin #define IOAPIC_EOIR 0x40 370*32c3d3b6SJohn Baldwin 371*32c3d3b6SJohn Baldwin /* indexes into IO APIC */ 372*32c3d3b6SJohn Baldwin #define IOAPIC_ID 0x00 373*32c3d3b6SJohn Baldwin #define IOAPIC_VER 0x01 374*32c3d3b6SJohn Baldwin #define IOAPIC_ARB 0x02 375*32c3d3b6SJohn Baldwin #define IOAPIC_REDTBL 0x10 376*32c3d3b6SJohn Baldwin #define IOAPIC_REDTBL0 IOAPIC_REDTBL 377*32c3d3b6SJohn Baldwin #define IOAPIC_REDTBL1 (IOAPIC_REDTBL+0x02) 378*32c3d3b6SJohn Baldwin #define IOAPIC_REDTBL2 (IOAPIC_REDTBL+0x04) 379*32c3d3b6SJohn Baldwin #define IOAPIC_REDTBL3 (IOAPIC_REDTBL+0x06) 380*32c3d3b6SJohn Baldwin #define IOAPIC_REDTBL4 (IOAPIC_REDTBL+0x08) 381*32c3d3b6SJohn Baldwin #define IOAPIC_REDTBL5 (IOAPIC_REDTBL+0x0a) 382*32c3d3b6SJohn Baldwin #define IOAPIC_REDTBL6 (IOAPIC_REDTBL+0x0c) 383*32c3d3b6SJohn Baldwin #define IOAPIC_REDTBL7 (IOAPIC_REDTBL+0x0e) 384*32c3d3b6SJohn Baldwin #define IOAPIC_REDTBL8 (IOAPIC_REDTBL+0x10) 385*32c3d3b6SJohn Baldwin #define IOAPIC_REDTBL9 (IOAPIC_REDTBL+0x12) 386*32c3d3b6SJohn Baldwin #define IOAPIC_REDTBL10 (IOAPIC_REDTBL+0x14) 387*32c3d3b6SJohn Baldwin #define IOAPIC_REDTBL11 (IOAPIC_REDTBL+0x16) 388*32c3d3b6SJohn Baldwin #define IOAPIC_REDTBL12 (IOAPIC_REDTBL+0x18) 389*32c3d3b6SJohn Baldwin #define IOAPIC_REDTBL13 (IOAPIC_REDTBL+0x1a) 390*32c3d3b6SJohn Baldwin #define IOAPIC_REDTBL14 (IOAPIC_REDTBL+0x1c) 391*32c3d3b6SJohn Baldwin #define IOAPIC_REDTBL15 (IOAPIC_REDTBL+0x1e) 392*32c3d3b6SJohn Baldwin #define IOAPIC_REDTBL16 (IOAPIC_REDTBL+0x20) 393*32c3d3b6SJohn Baldwin #define IOAPIC_REDTBL17 (IOAPIC_REDTBL+0x22) 394*32c3d3b6SJohn Baldwin #define IOAPIC_REDTBL18 (IOAPIC_REDTBL+0x24) 395*32c3d3b6SJohn Baldwin #define IOAPIC_REDTBL19 (IOAPIC_REDTBL+0x26) 396*32c3d3b6SJohn Baldwin #define IOAPIC_REDTBL20 (IOAPIC_REDTBL+0x28) 397*32c3d3b6SJohn Baldwin #define IOAPIC_REDTBL21 (IOAPIC_REDTBL+0x2a) 398*32c3d3b6SJohn Baldwin #define IOAPIC_REDTBL22 (IOAPIC_REDTBL+0x2c) 399*32c3d3b6SJohn Baldwin #define IOAPIC_REDTBL23 (IOAPIC_REDTBL+0x2e) 400*32c3d3b6SJohn Baldwin 401*32c3d3b6SJohn Baldwin /* fields in VER */ 402*32c3d3b6SJohn Baldwin #define IOART_VER_VERSION 0x000000ff 403*32c3d3b6SJohn Baldwin #define IOART_VER_MAXREDIR 0x00ff0000 404*32c3d3b6SJohn Baldwin #define MAXREDIRSHIFT 16 405*32c3d3b6SJohn Baldwin 406*32c3d3b6SJohn Baldwin /* 407*32c3d3b6SJohn Baldwin * fields in the IO APIC's redirection table entries 408*32c3d3b6SJohn Baldwin */ 409*32c3d3b6SJohn Baldwin #define IOART_DEST APIC_ID_MASK /* broadcast addr: all APICs */ 410*32c3d3b6SJohn Baldwin 411*32c3d3b6SJohn Baldwin #define IOART_RESV 0x00fe0000 /* reserved */ 412*32c3d3b6SJohn Baldwin 413*32c3d3b6SJohn Baldwin #define IOART_INTMASK 0x00010000 /* R/W: INTerrupt mask */ 414*32c3d3b6SJohn Baldwin # define IOART_INTMCLR 0x00000000 /* clear, allow INTs */ 415*32c3d3b6SJohn Baldwin # define IOART_INTMSET 0x00010000 /* set, inhibit INTs */ 416*32c3d3b6SJohn Baldwin 417*32c3d3b6SJohn Baldwin #define IOART_TRGRMOD 0x00008000 /* R/W: trigger mode */ 418*32c3d3b6SJohn Baldwin # define IOART_TRGREDG 0x00000000 /* edge */ 419*32c3d3b6SJohn Baldwin # define IOART_TRGRLVL 0x00008000 /* level */ 420*32c3d3b6SJohn Baldwin 421*32c3d3b6SJohn Baldwin #define IOART_REM_IRR 0x00004000 /* RO: remote IRR */ 422*32c3d3b6SJohn Baldwin 423*32c3d3b6SJohn Baldwin #define IOART_INTPOL 0x00002000 /* R/W: INT input pin polarity */ 424*32c3d3b6SJohn Baldwin # define IOART_INTAHI 0x00000000 /* active high */ 425*32c3d3b6SJohn Baldwin # define IOART_INTALO 0x00002000 /* active low */ 426*32c3d3b6SJohn Baldwin 427*32c3d3b6SJohn Baldwin #define IOART_DELIVS 0x00001000 /* RO: delivery status */ 428*32c3d3b6SJohn Baldwin 429*32c3d3b6SJohn Baldwin #define IOART_DESTMOD 0x00000800 /* R/W: destination mode */ 430*32c3d3b6SJohn Baldwin # define IOART_DESTPHY 0x00000000 /* physical */ 431*32c3d3b6SJohn Baldwin # define IOART_DESTLOG 0x00000800 /* logical */ 432*32c3d3b6SJohn Baldwin 433*32c3d3b6SJohn Baldwin #define IOART_DELMOD 0x00000700 /* R/W: delivery mode */ 434*32c3d3b6SJohn Baldwin # define IOART_DELFIXED 0x00000000 /* fixed */ 435*32c3d3b6SJohn Baldwin # define IOART_DELLOPRI 0x00000100 /* lowest priority */ 436*32c3d3b6SJohn Baldwin # define IOART_DELSMI 0x00000200 /* System Management INT */ 437*32c3d3b6SJohn Baldwin # define IOART_DELRSV1 0x00000300 /* reserved */ 438*32c3d3b6SJohn Baldwin # define IOART_DELNMI 0x00000400 /* NMI signal */ 439*32c3d3b6SJohn Baldwin # define IOART_DELINIT 0x00000500 /* INIT signal */ 440*32c3d3b6SJohn Baldwin # define IOART_DELRSV2 0x00000600 /* reserved */ 441*32c3d3b6SJohn Baldwin # define IOART_DELEXINT 0x00000700 /* External INTerrupt */ 442*32c3d3b6SJohn Baldwin 443*32c3d3b6SJohn Baldwin #define IOART_INTVEC 0x000000ff /* R/W: INTerrupt vector field */ 444*32c3d3b6SJohn Baldwin 445*32c3d3b6SJohn Baldwin #endif /* _X86_APICREG_H_ */ 446