1/**
2 * @file op_msr.h
3 * x86-specific MSR stuff
4 *
5 * @remark Copyright 2002 OProfile authors
6 * @remark Read the file COPYING
7 *
8 * @author John Levon
9 * @author Philippe Elie
10 */
11
12#ifndef OP_MSR_H
13#define OP_MSR_H
14
15/* work-around compiler bug in gcc 2.91.66, just mark all input register as
16 * magically cloberred by wrmsr */
17#if __GNUC__ == 2 && __GNUC_MINOR__ == 91
18	#undef wrmsr
19	#define wrmsr(msr, val1, val2)				\
20		__asm__ __volatile__("wrmsr"			\
21			/* no outputs */			\
22			:					\
23			: "c" (msr), "a" (val1), "d" (val2)	\
24			: "ecx", "eax", "edx")
25#endif
26
27#ifndef MSR_IA32_MISC_ENABLE
28#define MSR_IA32_MISC_ENABLE 0x1a0
29#endif
30
31/* MSRs */
32#ifndef MSR_P6_PERFCTR0
33#define MSR_P6_PERFCTR0 0xc1
34#endif
35#ifndef MSR_P6_PERFCTR1
36#define MSR_P6_PERFCTR1 0xc2
37#endif
38#ifndef MSR_P6_EVNTSEL0
39#define MSR_P6_EVNTSEL0 0x186
40#endif
41#ifndef MSR_P6_EVNTSEL1
42#define MSR_P6_EVNTSEL1 0x187
43#endif
44#ifndef MSR_K7_EVNTSEL0
45#define MSR_K7_EVNTSEL0 0xc0010000
46#endif
47#ifndef MSR_K7_EVNTSEL1
48#define MSR_K7_EVNTSEL1 0xc0010001
49#endif
50#ifndef MSR_K7_EVNTSEL2
51#define MSR_K7_EVNTSEL2 0xc0010002
52#endif
53#ifndef MSR_K7_EVNTSEL3
54#define MSR_K7_EVNTSEL3 0xc0010003
55#endif
56#ifndef MSR_K7_PERFCTR0
57#define MSR_K7_PERFCTR0 0xc0010004
58#endif
59#ifndef MSR_K7_PERFCTR1
60#define MSR_K7_PERFCTR1 0xc0010005
61#endif
62#ifndef MSR_K7_PERFCTR2
63#define MSR_K7_PERFCTR2 0xc0010006
64#endif
65#ifndef MSR_K7_PERFCTR3
66#define MSR_K7_PERFCTR3 0xc0010007
67#endif
68
69/* There are *82* pentium 4 MSRs:
70
71   - 1 misc register
72
73   - 18 counters (PERFCTRs)
74
75   - 18 counter configuration control registers (CCCRs)
76
77   - 45 event selection control registers (ESCRs). */
78
79
80#ifndef MSR_P4_BPU_PERFCTR0
81#define MSR_P4_BPU_PERFCTR0 0x300
82#endif
83#ifndef MSR_P4_BPU_PERFCTR1
84#define MSR_P4_BPU_PERFCTR1 0x301
85#endif
86#ifndef MSR_P4_BPU_PERFCTR2
87#define MSR_P4_BPU_PERFCTR2 0x302
88#endif
89#ifndef MSR_P4_BPU_PERFCTR3
90#define MSR_P4_BPU_PERFCTR3 0x303
91#endif
92#ifndef MSR_P4_MS_PERFCTR0
93#define MSR_P4_MS_PERFCTR0 0x304
94#endif
95#ifndef MSR_P4_MS_PERFCTR1
96#define MSR_P4_MS_PERFCTR1 0x305
97#endif
98#ifndef MSR_P4_MS_PERFCTR2
99#define MSR_P4_MS_PERFCTR2 0x306
100#endif
101#ifndef MSR_P4_MS_PERFCTR3
102#define MSR_P4_MS_PERFCTR3 0x307
103#endif
104#ifndef MSR_P4_FLAME_PERFCTR0
105#define MSR_P4_FLAME_PERFCTR0 0x308
106#endif
107#ifndef MSR_P4_FLAME_PERFCTR1
108#define MSR_P4_FLAME_PERFCTR1 0x309
109#endif
110#ifndef MSR_P4_FLAME_PERFCTR2
111#define MSR_P4_FLAME_PERFCTR2 0x30a
112#endif
113#ifndef MSR_P4_FLAME_PERFCTR3
114#define MSR_P4_FLAME_PERFCTR3 0x30b
115#endif
116#ifndef MSR_P4_IQ_PERFCTR0
117#define MSR_P4_IQ_PERFCTR0 0x30c
118#endif
119#ifndef MSR_P4_IQ_PERFCTR1
120#define MSR_P4_IQ_PERFCTR1 0x30d
121#endif
122#ifndef MSR_P4_IQ_PERFCTR2
123#define MSR_P4_IQ_PERFCTR2 0x30e
124#endif
125#ifndef MSR_P4_IQ_PERFCTR3
126#define MSR_P4_IQ_PERFCTR3 0x30f
127#endif
128#ifndef MSR_P4_IQ_PERFCTR4
129#define MSR_P4_IQ_PERFCTR4 0x310
130#endif
131#ifndef MSR_P4_IQ_PERFCTR5
132#define MSR_P4_IQ_PERFCTR5 0x311
133#endif
134
135
136#ifndef MSR_P4_BPU_CCCR0
137#define MSR_P4_BPU_CCCR0 0x360
138#endif
139#ifndef MSR_P4_BPU_CCCR1
140#define MSR_P4_BPU_CCCR1 0x361
141#endif
142#ifndef MSR_P4_BPU_CCCR2
143#define MSR_P4_BPU_CCCR2 0x362
144#endif
145#ifndef MSR_P4_BPU_CCCR3
146#define MSR_P4_BPU_CCCR3 0x363
147#endif
148#ifndef MSR_P4_MS_CCCR0
149#define MSR_P4_MS_CCCR0 0x364
150#endif
151#ifndef MSR_P4_MS_CCCR1
152#define MSR_P4_MS_CCCR1 0x365
153#endif
154#ifndef MSR_P4_MS_CCCR2
155#define MSR_P4_MS_CCCR2 0x366
156#endif
157#ifndef MSR_P4_MS_CCCR3
158#define MSR_P4_MS_CCCR3 0x367
159#endif
160#ifndef MSR_P4_FLAME_CCCR0
161#define MSR_P4_FLAME_CCCR0 0x368
162#endif
163#ifndef MSR_P4_FLAME_CCCR1
164#define MSR_P4_FLAME_CCCR1 0x369
165#endif
166#ifndef MSR_P4_FLAME_CCCR2
167#define MSR_P4_FLAME_CCCR2 0x36a
168#endif
169#ifndef MSR_P4_FLAME_CCCR3
170#define MSR_P4_FLAME_CCCR3 0x36b
171#endif
172#ifndef MSR_P4_IQ_CCCR0
173#define MSR_P4_IQ_CCCR0 0x36c
174#endif
175#ifndef MSR_P4_IQ_CCCR1
176#define MSR_P4_IQ_CCCR1 0x36d
177#endif
178#ifndef MSR_P4_IQ_CCCR2
179#define MSR_P4_IQ_CCCR2 0x36e
180#endif
181#ifndef MSR_P4_IQ_CCCR3
182#define MSR_P4_IQ_CCCR3 0x36f
183#endif
184#ifndef MSR_P4_IQ_CCCR4
185#define MSR_P4_IQ_CCCR4 0x370
186#endif
187#ifndef MSR_P4_IQ_CCCR5
188#define MSR_P4_IQ_CCCR5 0x371
189#endif
190
191
192#ifndef MSR_P4_ALF_ESCR0
193#define MSR_P4_ALF_ESCR0 0x3ca
194#endif
195#ifndef MSR_P4_ALF_ESCR1
196#define MSR_P4_ALF_ESCR1 0x3cb
197#endif
198#ifndef MSR_P4_BPU_ESCR0
199#define MSR_P4_BPU_ESCR0 0x3b2
200#endif
201#ifndef MSR_P4_BPU_ESCR1
202#define MSR_P4_BPU_ESCR1 0x3b3
203#endif
204#ifndef MSR_P4_BSU_ESCR0
205#define MSR_P4_BSU_ESCR0 0x3a0
206#endif
207#ifndef MSR_P4_BSU_ESCR1
208#define MSR_P4_BSU_ESCR1 0x3a1
209#endif
210#ifndef MSR_P4_CRU_ESCR0
211#define MSR_P4_CRU_ESCR0 0x3b8
212#endif
213#ifndef MSR_P4_CRU_ESCR1
214#define MSR_P4_CRU_ESCR1 0x3b9
215#endif
216#ifndef MSR_P4_CRU_ESCR2
217#define MSR_P4_CRU_ESCR2 0x3cc
218#endif
219#ifndef MSR_P4_CRU_ESCR3
220#define MSR_P4_CRU_ESCR3 0x3cd
221#endif
222#ifndef MSR_P4_CRU_ESCR4
223#define MSR_P4_CRU_ESCR4 0x3e0
224#endif
225#ifndef MSR_P4_CRU_ESCR5
226#define MSR_P4_CRU_ESCR5 0x3e1
227#endif
228#ifndef MSR_P4_DAC_ESCR0
229#define MSR_P4_DAC_ESCR0 0x3a8
230#endif
231#ifndef MSR_P4_DAC_ESCR1
232#define MSR_P4_DAC_ESCR1 0x3a9
233#endif
234#ifndef MSR_P4_FIRM_ESCR0
235#define MSR_P4_FIRM_ESCR0 0x3a4
236#endif
237#ifndef MSR_P4_FIRM_ESCR1
238#define MSR_P4_FIRM_ESCR1 0x3a5
239#endif
240#ifndef MSR_P4_FLAME_ESCR0
241#define MSR_P4_FLAME_ESCR0 0x3a6
242#endif
243#ifndef MSR_P4_FLAME_ESCR1
244#define MSR_P4_FLAME_ESCR1 0x3a7
245#endif
246#ifndef MSR_P4_FSB_ESCR0
247#define MSR_P4_FSB_ESCR0 0x3a2
248#endif
249#ifndef MSR_P4_FSB_ESCR1
250#define MSR_P4_FSB_ESCR1 0x3a3
251#endif
252#ifndef MSR_P4_IQ_ESCR0
253#define MSR_P4_IQ_ESCR0 0x3ba
254#endif
255#ifndef MSR_P4_IQ_ESCR1
256#define MSR_P4_IQ_ESCR1 0x3bb
257#endif
258#ifndef MSR_P4_IS_ESCR0
259#define MSR_P4_IS_ESCR0 0x3b4
260#endif
261#ifndef MSR_P4_IS_ESCR1
262#define MSR_P4_IS_ESCR1 0x3b5
263#endif
264#ifndef MSR_P4_ITLB_ESCR0
265#define MSR_P4_ITLB_ESCR0 0x3b6
266#endif
267#ifndef MSR_P4_ITLB_ESCR1
268#define MSR_P4_ITLB_ESCR1 0x3b7
269#endif
270#ifndef MSR_P4_IX_ESCR0
271#define MSR_P4_IX_ESCR0 0x3c8
272#endif
273#ifndef MSR_P4_IX_ESCR1
274#define MSR_P4_IX_ESCR1 0x3c9
275#endif
276#ifndef MSR_P4_MOB_ESCR0
277#define MSR_P4_MOB_ESCR0 0x3aa
278#endif
279#ifndef MSR_P4_MOB_ESCR1
280#define MSR_P4_MOB_ESCR1 0x3ab
281#endif
282#ifndef MSR_P4_MS_ESCR0
283#define MSR_P4_MS_ESCR0 0x3c0
284#endif
285#ifndef MSR_P4_MS_ESCR1
286#define MSR_P4_MS_ESCR1 0x3c1
287#endif
288#ifndef MSR_P4_PMH_ESCR0
289#define MSR_P4_PMH_ESCR0 0x3ac
290#endif
291#ifndef MSR_P4_PMH_ESCR1
292#define MSR_P4_PMH_ESCR1 0x3ad
293#endif
294#ifndef MSR_P4_RAT_ESCR0
295#define MSR_P4_RAT_ESCR0 0x3bc
296#endif
297#ifndef MSR_P4_RAT_ESCR1
298#define MSR_P4_RAT_ESCR1 0x3bd
299#endif
300#ifndef MSR_P4_SAAT_ESCR0
301#define MSR_P4_SAAT_ESCR0 0x3ae
302#endif
303#ifndef MSR_P4_SAAT_ESCR1
304#define MSR_P4_SAAT_ESCR1 0x3af
305#endif
306#ifndef MSR_P4_SSU_ESCR0
307#define MSR_P4_SSU_ESCR0 0x3be
308#endif
309/* guess: not defined in manual */
310#ifndef MSR_P4_SSU_ESCR1
311#define MSR_P4_SSU_ESCR1 0x3bf
312#endif
313#ifndef MSR_P4_TBPU_ESCR0
314#define MSR_P4_TBPU_ESCR0 0x3c2
315#endif
316#ifndef MSR_P4_TBPU_ESCR1
317#define MSR_P4_TBPU_ESCR1 0x3c3
318#endif
319#ifndef MSR_P4_TC_ESCR0
320#define MSR_P4_TC_ESCR0 0x3c4
321#endif
322#ifndef MSR_P4_TC_ESCR1
323#define MSR_P4_TC_ESCR1 0x3c5
324#endif
325#ifndef MSR_P4_U2L_ESCR0
326#define MSR_P4_U2L_ESCR0 0x3b0
327#endif
328#ifndef MSR_P4_U2L_ESCR1
329#define MSR_P4_U2L_ESCR1 0x3b1
330#endif
331
332/* Hyper-Threading */
333#ifndef X86_FEATURE_HT
334#define X86_FEATURE_HT		(0*32+28)
335#endif
336
337#endif /* OP_MSR_H */
338