xref: /kvmtool/x86/include/asm/apicdef.h (revision 23323929011bbb2027c2a5341ab43e9befd75876)
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