diff options
Diffstat (limited to 'arch/x86/include/asm/perf_event_p4.h')
-rw-r--r-- | arch/x86/include/asm/perf_event_p4.h | 794 |
1 files changed, 794 insertions, 0 deletions
diff --git a/arch/x86/include/asm/perf_event_p4.h b/arch/x86/include/asm/perf_event_p4.h new file mode 100644 index 00000000000..b05400a542f --- /dev/null +++ b/arch/x86/include/asm/perf_event_p4.h | |||
@@ -0,0 +1,794 @@ | |||
1 | /* | ||
2 | * Netburst Perfomance Events (P4, old Xeon) | ||
3 | */ | ||
4 | |||
5 | #ifndef PERF_EVENT_P4_H | ||
6 | #define PERF_EVENT_P4_H | ||
7 | |||
8 | #include <linux/cpu.h> | ||
9 | #include <linux/bitops.h> | ||
10 | |||
11 | /* | ||
12 | * NetBurst has perfomance MSRs shared between | ||
13 | * threads if HT is turned on, ie for both logical | ||
14 | * processors (mem: in turn in Atom with HT support | ||
15 | * perf-MSRs are not shared and every thread has its | ||
16 | * own perf-MSRs set) | ||
17 | */ | ||
18 | #define ARCH_P4_TOTAL_ESCR (46) | ||
19 | #define ARCH_P4_RESERVED_ESCR (2) /* IQ_ESCR(0,1) not always present */ | ||
20 | #define ARCH_P4_MAX_ESCR (ARCH_P4_TOTAL_ESCR - ARCH_P4_RESERVED_ESCR) | ||
21 | #define ARCH_P4_MAX_CCCR (18) | ||
22 | #define ARCH_P4_MAX_COUNTER (ARCH_P4_MAX_CCCR / 2) | ||
23 | |||
24 | #define P4_ESCR_EVENT_MASK 0x7e000000U | ||
25 | #define P4_ESCR_EVENT_SHIFT 25 | ||
26 | #define P4_ESCR_EVENTMASK_MASK 0x01fffe00U | ||
27 | #define P4_ESCR_EVENTMASK_SHIFT 9 | ||
28 | #define P4_ESCR_TAG_MASK 0x000001e0U | ||
29 | #define P4_ESCR_TAG_SHIFT 5 | ||
30 | #define P4_ESCR_TAG_ENABLE 0x00000010U | ||
31 | #define P4_ESCR_T0_OS 0x00000008U | ||
32 | #define P4_ESCR_T0_USR 0x00000004U | ||
33 | #define P4_ESCR_T1_OS 0x00000002U | ||
34 | #define P4_ESCR_T1_USR 0x00000001U | ||
35 | |||
36 | #define P4_ESCR_EVENT(v) ((v) << P4_ESCR_EVENT_SHIFT) | ||
37 | #define P4_ESCR_EMASK(v) ((v) << P4_ESCR_EVENTMASK_SHIFT) | ||
38 | #define P4_ESCR_TAG(v) ((v) << P4_ESCR_TAG_SHIFT) | ||
39 | |||
40 | /* Non HT mask */ | ||
41 | #define P4_ESCR_MASK \ | ||
42 | (P4_ESCR_EVENT_MASK | \ | ||
43 | P4_ESCR_EVENTMASK_MASK | \ | ||
44 | P4_ESCR_TAG_MASK | \ | ||
45 | P4_ESCR_TAG_ENABLE | \ | ||
46 | P4_ESCR_T0_OS | \ | ||
47 | P4_ESCR_T0_USR) | ||
48 | |||
49 | /* HT mask */ | ||
50 | #define P4_ESCR_MASK_HT \ | ||
51 | (P4_ESCR_MASK | P4_ESCR_T1_OS | P4_ESCR_T1_USR) | ||
52 | |||
53 | #define P4_CCCR_OVF 0x80000000U | ||
54 | #define P4_CCCR_CASCADE 0x40000000U | ||
55 | #define P4_CCCR_OVF_PMI_T0 0x04000000U | ||
56 | #define P4_CCCR_OVF_PMI_T1 0x08000000U | ||
57 | #define P4_CCCR_FORCE_OVF 0x02000000U | ||
58 | #define P4_CCCR_EDGE 0x01000000U | ||
59 | #define P4_CCCR_THRESHOLD_MASK 0x00f00000U | ||
60 | #define P4_CCCR_THRESHOLD_SHIFT 20 | ||
61 | #define P4_CCCR_COMPLEMENT 0x00080000U | ||
62 | #define P4_CCCR_COMPARE 0x00040000U | ||
63 | #define P4_CCCR_ESCR_SELECT_MASK 0x0000e000U | ||
64 | #define P4_CCCR_ESCR_SELECT_SHIFT 13 | ||
65 | #define P4_CCCR_ENABLE 0x00001000U | ||
66 | #define P4_CCCR_THREAD_SINGLE 0x00010000U | ||
67 | #define P4_CCCR_THREAD_BOTH 0x00020000U | ||
68 | #define P4_CCCR_THREAD_ANY 0x00030000U | ||
69 | #define P4_CCCR_RESERVED 0x00000fffU | ||
70 | |||
71 | #define P4_CCCR_THRESHOLD(v) ((v) << P4_CCCR_THRESHOLD_SHIFT) | ||
72 | #define P4_CCCR_ESEL(v) ((v) << P4_CCCR_ESCR_SELECT_SHIFT) | ||
73 | |||
74 | /* Custom bits in reerved CCCR area */ | ||
75 | #define P4_CCCR_CACHE_OPS_MASK 0x0000003fU | ||
76 | |||
77 | |||
78 | /* Non HT mask */ | ||
79 | #define P4_CCCR_MASK \ | ||
80 | (P4_CCCR_OVF | \ | ||
81 | P4_CCCR_CASCADE | \ | ||
82 | P4_CCCR_OVF_PMI_T0 | \ | ||
83 | P4_CCCR_FORCE_OVF | \ | ||
84 | P4_CCCR_EDGE | \ | ||
85 | P4_CCCR_THRESHOLD_MASK | \ | ||
86 | P4_CCCR_COMPLEMENT | \ | ||
87 | P4_CCCR_COMPARE | \ | ||
88 | P4_CCCR_ESCR_SELECT_MASK | \ | ||
89 | P4_CCCR_ENABLE) | ||
90 | |||
91 | /* HT mask */ | ||
92 | #define P4_CCCR_MASK_HT (P4_CCCR_MASK | P4_CCCR_THREAD_ANY) | ||
93 | |||
94 | #define P4_GEN_ESCR_EMASK(class, name, bit) \ | ||
95 | class##__##name = ((1 << bit) << P4_ESCR_EVENTMASK_SHIFT) | ||
96 | #define P4_ESCR_EMASK_BIT(class, name) class##__##name | ||
97 | |||
98 | /* | ||
99 | * config field is 64bit width and consists of | ||
100 | * HT << 63 | ESCR << 32 | CCCR | ||
101 | * where HT is HyperThreading bit (since ESCR | ||
102 | * has it reserved we may use it for own purpose) | ||
103 | * | ||
104 | * note that this is NOT the addresses of respective | ||
105 | * ESCR and CCCR but rather an only packed value should | ||
106 | * be unpacked and written to a proper addresses | ||
107 | * | ||
108 | * the base idea is to pack as much info as | ||
109 | * possible | ||
110 | */ | ||
111 | #define p4_config_pack_escr(v) (((u64)(v)) << 32) | ||
112 | #define p4_config_pack_cccr(v) (((u64)(v)) & 0xffffffffULL) | ||
113 | #define p4_config_unpack_escr(v) (((u64)(v)) >> 32) | ||
114 | #define p4_config_unpack_cccr(v) (((u64)(v)) & 0xffffffffULL) | ||
115 | |||
116 | #define p4_config_unpack_emask(v) \ | ||
117 | ({ \ | ||
118 | u32 t = p4_config_unpack_escr((v)); \ | ||
119 | t = t & P4_ESCR_EVENTMASK_MASK; \ | ||
120 | t = t >> P4_ESCR_EVENTMASK_SHIFT; \ | ||
121 | t; \ | ||
122 | }) | ||
123 | |||
124 | #define p4_config_unpack_event(v) \ | ||
125 | ({ \ | ||
126 | u32 t = p4_config_unpack_escr((v)); \ | ||
127 | t = t & P4_ESCR_EVENT_MASK; \ | ||
128 | t = t >> P4_ESCR_EVENT_SHIFT; \ | ||
129 | t; \ | ||
130 | }) | ||
131 | |||
132 | #define p4_config_unpack_cache_event(v) (((u64)(v)) & P4_CCCR_CACHE_OPS_MASK) | ||
133 | |||
134 | #define P4_CONFIG_HT_SHIFT 63 | ||
135 | #define P4_CONFIG_HT (1ULL << P4_CONFIG_HT_SHIFT) | ||
136 | |||
137 | static inline bool p4_is_event_cascaded(u64 config) | ||
138 | { | ||
139 | u32 cccr = p4_config_unpack_cccr(config); | ||
140 | return !!(cccr & P4_CCCR_CASCADE); | ||
141 | } | ||
142 | |||
143 | static inline int p4_ht_config_thread(u64 config) | ||
144 | { | ||
145 | return !!(config & P4_CONFIG_HT); | ||
146 | } | ||
147 | |||
148 | static inline u64 p4_set_ht_bit(u64 config) | ||
149 | { | ||
150 | return config | P4_CONFIG_HT; | ||
151 | } | ||
152 | |||
153 | static inline u64 p4_clear_ht_bit(u64 config) | ||
154 | { | ||
155 | return config & ~P4_CONFIG_HT; | ||
156 | } | ||
157 | |||
158 | static inline int p4_ht_active(void) | ||
159 | { | ||
160 | #ifdef CONFIG_SMP | ||
161 | return smp_num_siblings > 1; | ||
162 | #endif | ||
163 | return 0; | ||
164 | } | ||
165 | |||
166 | static inline int p4_ht_thread(int cpu) | ||
167 | { | ||
168 | #ifdef CONFIG_SMP | ||
169 | if (smp_num_siblings == 2) | ||
170 | return cpu != cpumask_first(__get_cpu_var(cpu_sibling_map)); | ||
171 | #endif | ||
172 | return 0; | ||
173 | } | ||
174 | |||
175 | static inline int p4_should_swap_ts(u64 config, int cpu) | ||
176 | { | ||
177 | return p4_ht_config_thread(config) ^ p4_ht_thread(cpu); | ||
178 | } | ||
179 | |||
180 | static inline u32 p4_default_cccr_conf(int cpu) | ||
181 | { | ||
182 | /* | ||
183 | * Note that P4_CCCR_THREAD_ANY is "required" on | ||
184 | * non-HT machines (on HT machines we count TS events | ||
185 | * regardless the state of second logical processor | ||
186 | */ | ||
187 | u32 cccr = P4_CCCR_THREAD_ANY; | ||
188 | |||
189 | if (!p4_ht_thread(cpu)) | ||
190 | cccr |= P4_CCCR_OVF_PMI_T0; | ||
191 | else | ||
192 | cccr |= P4_CCCR_OVF_PMI_T1; | ||
193 | |||
194 | return cccr; | ||
195 | } | ||
196 | |||
197 | static inline u32 p4_default_escr_conf(int cpu, int exclude_os, int exclude_usr) | ||
198 | { | ||
199 | u32 escr = 0; | ||
200 | |||
201 | if (!p4_ht_thread(cpu)) { | ||
202 | if (!exclude_os) | ||
203 | escr |= P4_ESCR_T0_OS; | ||
204 | if (!exclude_usr) | ||
205 | escr |= P4_ESCR_T0_USR; | ||
206 | } else { | ||
207 | if (!exclude_os) | ||
208 | escr |= P4_ESCR_T1_OS; | ||
209 | if (!exclude_usr) | ||
210 | escr |= P4_ESCR_T1_USR; | ||
211 | } | ||
212 | |||
213 | return escr; | ||
214 | } | ||
215 | |||
216 | enum P4_EVENTS { | ||
217 | P4_EVENT_TC_DELIVER_MODE, | ||
218 | P4_EVENT_BPU_FETCH_REQUEST, | ||
219 | P4_EVENT_ITLB_REFERENCE, | ||
220 | P4_EVENT_MEMORY_CANCEL, | ||
221 | P4_EVENT_MEMORY_COMPLETE, | ||
222 | P4_EVENT_LOAD_PORT_REPLAY, | ||
223 | P4_EVENT_STORE_PORT_REPLAY, | ||
224 | P4_EVENT_MOB_LOAD_REPLAY, | ||
225 | P4_EVENT_PAGE_WALK_TYPE, | ||
226 | P4_EVENT_BSQ_CACHE_REFERENCE, | ||
227 | P4_EVENT_IOQ_ALLOCATION, | ||
228 | P4_EVENT_IOQ_ACTIVE_ENTRIES, | ||
229 | P4_EVENT_FSB_DATA_ACTIVITY, | ||
230 | P4_EVENT_BSQ_ALLOCATION, | ||
231 | P4_EVENT_BSQ_ACTIVE_ENTRIES, | ||
232 | P4_EVENT_SSE_INPUT_ASSIST, | ||
233 | P4_EVENT_PACKED_SP_UOP, | ||
234 | P4_EVENT_PACKED_DP_UOP, | ||
235 | P4_EVENT_SCALAR_SP_UOP, | ||
236 | P4_EVENT_SCALAR_DP_UOP, | ||
237 | P4_EVENT_64BIT_MMX_UOP, | ||
238 | P4_EVENT_128BIT_MMX_UOP, | ||
239 | P4_EVENT_X87_FP_UOP, | ||
240 | P4_EVENT_TC_MISC, | ||
241 | P4_EVENT_GLOBAL_POWER_EVENTS, | ||
242 | P4_EVENT_TC_MS_XFER, | ||
243 | P4_EVENT_UOP_QUEUE_WRITES, | ||
244 | P4_EVENT_RETIRED_MISPRED_BRANCH_TYPE, | ||
245 | P4_EVENT_RETIRED_BRANCH_TYPE, | ||
246 | P4_EVENT_RESOURCE_STALL, | ||
247 | P4_EVENT_WC_BUFFER, | ||
248 | P4_EVENT_B2B_CYCLES, | ||
249 | P4_EVENT_BNR, | ||
250 | P4_EVENT_SNOOP, | ||
251 | P4_EVENT_RESPONSE, | ||
252 | P4_EVENT_FRONT_END_EVENT, | ||
253 | P4_EVENT_EXECUTION_EVENT, | ||
254 | P4_EVENT_REPLAY_EVENT, | ||
255 | P4_EVENT_INSTR_RETIRED, | ||
256 | P4_EVENT_UOPS_RETIRED, | ||
257 | P4_EVENT_UOP_TYPE, | ||
258 | P4_EVENT_BRANCH_RETIRED, | ||
259 | P4_EVENT_MISPRED_BRANCH_RETIRED, | ||
260 | P4_EVENT_X87_ASSIST, | ||
261 | P4_EVENT_MACHINE_CLEAR, | ||
262 | P4_EVENT_INSTR_COMPLETED, | ||
263 | }; | ||
264 | |||
265 | #define P4_OPCODE(event) event##_OPCODE | ||
266 | #define P4_OPCODE_ESEL(opcode) ((opcode & 0x00ff) >> 0) | ||
267 | #define P4_OPCODE_EVNT(opcode) ((opcode & 0xff00) >> 8) | ||
268 | #define P4_OPCODE_PACK(event, sel) (((event) << 8) | sel) | ||
269 | |||
270 | /* | ||
271 | * Comments below the event represent ESCR restriction | ||
272 | * for this event and counter index per ESCR | ||
273 | * | ||
274 | * MSR_P4_IQ_ESCR0 and MSR_P4_IQ_ESCR1 are available only on early | ||
275 | * processor builds (family 0FH, models 01H-02H). These MSRs | ||
276 | * are not available on later versions, so that we don't use | ||
277 | * them completely | ||
278 | * | ||
279 | * Also note that CCCR1 do not have P4_CCCR_ENABLE bit properly | ||
280 | * working so that we should not use this CCCR and respective | ||
281 | * counter as result | ||
282 | */ | ||
283 | enum P4_EVENT_OPCODES { | ||
284 | P4_OPCODE(P4_EVENT_TC_DELIVER_MODE) = P4_OPCODE_PACK(0x01, 0x01), | ||
285 | /* | ||
286 | * MSR_P4_TC_ESCR0: 4, 5 | ||
287 | * MSR_P4_TC_ESCR1: 6, 7 | ||
288 | */ | ||
289 | |||
290 | P4_OPCODE(P4_EVENT_BPU_FETCH_REQUEST) = P4_OPCODE_PACK(0x03, 0x00), | ||
291 | /* | ||
292 | * MSR_P4_BPU_ESCR0: 0, 1 | ||
293 | * MSR_P4_BPU_ESCR1: 2, 3 | ||
294 | */ | ||
295 | |||
296 | P4_OPCODE(P4_EVENT_ITLB_REFERENCE) = P4_OPCODE_PACK(0x18, 0x03), | ||
297 | /* | ||
298 | * MSR_P4_ITLB_ESCR0: 0, 1 | ||
299 | * MSR_P4_ITLB_ESCR1: 2, 3 | ||
300 | */ | ||
301 | |||
302 | P4_OPCODE(P4_EVENT_MEMORY_CANCEL) = P4_OPCODE_PACK(0x02, 0x05), | ||
303 | /* | ||
304 | * MSR_P4_DAC_ESCR0: 8, 9 | ||
305 | * MSR_P4_DAC_ESCR1: 10, 11 | ||
306 | */ | ||
307 | |||
308 | P4_OPCODE(P4_EVENT_MEMORY_COMPLETE) = P4_OPCODE_PACK(0x08, 0x02), | ||
309 | /* | ||
310 | * MSR_P4_SAAT_ESCR0: 8, 9 | ||
311 | * MSR_P4_SAAT_ESCR1: 10, 11 | ||
312 | */ | ||
313 | |||
314 | P4_OPCODE(P4_EVENT_LOAD_PORT_REPLAY) = P4_OPCODE_PACK(0x04, 0x02), | ||
315 | /* | ||
316 | * MSR_P4_SAAT_ESCR0: 8, 9 | ||
317 | * MSR_P4_SAAT_ESCR1: 10, 11 | ||
318 | */ | ||
319 | |||
320 | P4_OPCODE(P4_EVENT_STORE_PORT_REPLAY) = P4_OPCODE_PACK(0x05, 0x02), | ||
321 | /* | ||
322 | * MSR_P4_SAAT_ESCR0: 8, 9 | ||
323 | * MSR_P4_SAAT_ESCR1: 10, 11 | ||
324 | */ | ||
325 | |||
326 | P4_OPCODE(P4_EVENT_MOB_LOAD_REPLAY) = P4_OPCODE_PACK(0x03, 0x02), | ||
327 | /* | ||
328 | * MSR_P4_MOB_ESCR0: 0, 1 | ||
329 | * MSR_P4_MOB_ESCR1: 2, 3 | ||
330 | */ | ||
331 | |||
332 | P4_OPCODE(P4_EVENT_PAGE_WALK_TYPE) = P4_OPCODE_PACK(0x01, 0x04), | ||
333 | /* | ||
334 | * MSR_P4_PMH_ESCR0: 0, 1 | ||
335 | * MSR_P4_PMH_ESCR1: 2, 3 | ||
336 | */ | ||
337 | |||
338 | P4_OPCODE(P4_EVENT_BSQ_CACHE_REFERENCE) = P4_OPCODE_PACK(0x0c, 0x07), | ||
339 | /* | ||
340 | * MSR_P4_BSU_ESCR0: 0, 1 | ||
341 | * MSR_P4_BSU_ESCR1: 2, 3 | ||
342 | */ | ||
343 | |||
344 | P4_OPCODE(P4_EVENT_IOQ_ALLOCATION) = P4_OPCODE_PACK(0x03, 0x06), | ||
345 | /* | ||
346 | * MSR_P4_FSB_ESCR0: 0, 1 | ||
347 | * MSR_P4_FSB_ESCR1: 2, 3 | ||
348 | */ | ||
349 | |||
350 | P4_OPCODE(P4_EVENT_IOQ_ACTIVE_ENTRIES) = P4_OPCODE_PACK(0x1a, 0x06), | ||
351 | /* | ||
352 | * MSR_P4_FSB_ESCR1: 2, 3 | ||
353 | */ | ||
354 | |||
355 | P4_OPCODE(P4_EVENT_FSB_DATA_ACTIVITY) = P4_OPCODE_PACK(0x17, 0x06), | ||
356 | /* | ||
357 | * MSR_P4_FSB_ESCR0: 0, 1 | ||
358 | * MSR_P4_FSB_ESCR1: 2, 3 | ||
359 | */ | ||
360 | |||
361 | P4_OPCODE(P4_EVENT_BSQ_ALLOCATION) = P4_OPCODE_PACK(0x05, 0x07), | ||
362 | /* | ||
363 | * MSR_P4_BSU_ESCR0: 0, 1 | ||
364 | */ | ||
365 | |||
366 | P4_OPCODE(P4_EVENT_BSQ_ACTIVE_ENTRIES) = P4_OPCODE_PACK(0x06, 0x07), | ||
367 | /* | ||
368 | * NOTE: no ESCR name in docs, it's guessed | ||
369 | * MSR_P4_BSU_ESCR1: 2, 3 | ||
370 | */ | ||
371 | |||
372 | P4_OPCODE(P4_EVENT_SSE_INPUT_ASSIST) = P4_OPCODE_PACK(0x34, 0x01), | ||
373 | /* | ||
374 | * MSR_P4_FIRM_ESCR0: 8, 9 | ||
375 | * MSR_P4_FIRM_ESCR1: 10, 11 | ||
376 | */ | ||
377 | |||
378 | P4_OPCODE(P4_EVENT_PACKED_SP_UOP) = P4_OPCODE_PACK(0x08, 0x01), | ||
379 | /* | ||
380 | * MSR_P4_FIRM_ESCR0: 8, 9 | ||
381 | * MSR_P4_FIRM_ESCR1: 10, 11 | ||
382 | */ | ||
383 | |||
384 | P4_OPCODE(P4_EVENT_PACKED_DP_UOP) = P4_OPCODE_PACK(0x0c, 0x01), | ||
385 | /* | ||
386 | * MSR_P4_FIRM_ESCR0: 8, 9 | ||
387 | * MSR_P4_FIRM_ESCR1: 10, 11 | ||
388 | */ | ||
389 | |||
390 | P4_OPCODE(P4_EVENT_SCALAR_SP_UOP) = P4_OPCODE_PACK(0x0a, 0x01), | ||
391 | /* | ||
392 | * MSR_P4_FIRM_ESCR0: 8, 9 | ||
393 | * MSR_P4_FIRM_ESCR1: 10, 11 | ||
394 | */ | ||
395 | |||
396 | P4_OPCODE(P4_EVENT_SCALAR_DP_UOP) = P4_OPCODE_PACK(0x0e, 0x01), | ||
397 | /* | ||
398 | * MSR_P4_FIRM_ESCR0: 8, 9 | ||
399 | * MSR_P4_FIRM_ESCR1: 10, 11 | ||
400 | */ | ||
401 | |||
402 | P4_OPCODE(P4_EVENT_64BIT_MMX_UOP) = P4_OPCODE_PACK(0x02, 0x01), | ||
403 | /* | ||
404 | * MSR_P4_FIRM_ESCR0: 8, 9 | ||
405 | * MSR_P4_FIRM_ESCR1: 10, 11 | ||
406 | */ | ||
407 | |||
408 | P4_OPCODE(P4_EVENT_128BIT_MMX_UOP) = P4_OPCODE_PACK(0x1a, 0x01), | ||
409 | /* | ||
410 | * MSR_P4_FIRM_ESCR0: 8, 9 | ||
411 | * MSR_P4_FIRM_ESCR1: 10, 11 | ||
412 | */ | ||
413 | |||
414 | P4_OPCODE(P4_EVENT_X87_FP_UOP) = P4_OPCODE_PACK(0x04, 0x01), | ||
415 | /* | ||
416 | * MSR_P4_FIRM_ESCR0: 8, 9 | ||
417 | * MSR_P4_FIRM_ESCR1: 10, 11 | ||
418 | */ | ||
419 | |||
420 | P4_OPCODE(P4_EVENT_TC_MISC) = P4_OPCODE_PACK(0x06, 0x01), | ||
421 | /* | ||
422 | * MSR_P4_TC_ESCR0: 4, 5 | ||
423 | * MSR_P4_TC_ESCR1: 6, 7 | ||
424 | */ | ||
425 | |||
426 | P4_OPCODE(P4_EVENT_GLOBAL_POWER_EVENTS) = P4_OPCODE_PACK(0x13, 0x06), | ||
427 | /* | ||
428 | * MSR_P4_FSB_ESCR0: 0, 1 | ||
429 | * MSR_P4_FSB_ESCR1: 2, 3 | ||
430 | */ | ||
431 | |||
432 | P4_OPCODE(P4_EVENT_TC_MS_XFER) = P4_OPCODE_PACK(0x05, 0x00), | ||
433 | /* | ||
434 | * MSR_P4_MS_ESCR0: 4, 5 | ||
435 | * MSR_P4_MS_ESCR1: 6, 7 | ||
436 | */ | ||
437 | |||
438 | P4_OPCODE(P4_EVENT_UOP_QUEUE_WRITES) = P4_OPCODE_PACK(0x09, 0x00), | ||
439 | /* | ||
440 | * MSR_P4_MS_ESCR0: 4, 5 | ||
441 | * MSR_P4_MS_ESCR1: 6, 7 | ||
442 | */ | ||
443 | |||
444 | P4_OPCODE(P4_EVENT_RETIRED_MISPRED_BRANCH_TYPE) = P4_OPCODE_PACK(0x05, 0x02), | ||
445 | /* | ||
446 | * MSR_P4_TBPU_ESCR0: 4, 5 | ||
447 | * MSR_P4_TBPU_ESCR1: 6, 7 | ||
448 | */ | ||
449 | |||
450 | P4_OPCODE(P4_EVENT_RETIRED_BRANCH_TYPE) = P4_OPCODE_PACK(0x04, 0x02), | ||
451 | /* | ||
452 | * MSR_P4_TBPU_ESCR0: 4, 5 | ||
453 | * MSR_P4_TBPU_ESCR1: 6, 7 | ||
454 | */ | ||
455 | |||
456 | P4_OPCODE(P4_EVENT_RESOURCE_STALL) = P4_OPCODE_PACK(0x01, 0x01), | ||
457 | /* | ||
458 | * MSR_P4_ALF_ESCR0: 12, 13, 16 | ||
459 | * MSR_P4_ALF_ESCR1: 14, 15, 17 | ||
460 | */ | ||
461 | |||
462 | P4_OPCODE(P4_EVENT_WC_BUFFER) = P4_OPCODE_PACK(0x05, 0x05), | ||
463 | /* | ||
464 | * MSR_P4_DAC_ESCR0: 8, 9 | ||
465 | * MSR_P4_DAC_ESCR1: 10, 11 | ||
466 | */ | ||
467 | |||
468 | P4_OPCODE(P4_EVENT_B2B_CYCLES) = P4_OPCODE_PACK(0x16, 0x03), | ||
469 | /* | ||
470 | * MSR_P4_FSB_ESCR0: 0, 1 | ||
471 | * MSR_P4_FSB_ESCR1: 2, 3 | ||
472 | */ | ||
473 | |||
474 | P4_OPCODE(P4_EVENT_BNR) = P4_OPCODE_PACK(0x08, 0x03), | ||
475 | /* | ||
476 | * MSR_P4_FSB_ESCR0: 0, 1 | ||
477 | * MSR_P4_FSB_ESCR1: 2, 3 | ||
478 | */ | ||
479 | |||
480 | P4_OPCODE(P4_EVENT_SNOOP) = P4_OPCODE_PACK(0x06, 0x03), | ||
481 | /* | ||
482 | * MSR_P4_FSB_ESCR0: 0, 1 | ||
483 | * MSR_P4_FSB_ESCR1: 2, 3 | ||
484 | */ | ||
485 | |||
486 | P4_OPCODE(P4_EVENT_RESPONSE) = P4_OPCODE_PACK(0x04, 0x03), | ||
487 | /* | ||
488 | * MSR_P4_FSB_ESCR0: 0, 1 | ||
489 | * MSR_P4_FSB_ESCR1: 2, 3 | ||
490 | */ | ||
491 | |||
492 | P4_OPCODE(P4_EVENT_FRONT_END_EVENT) = P4_OPCODE_PACK(0x08, 0x05), | ||
493 | /* | ||
494 | * MSR_P4_CRU_ESCR2: 12, 13, 16 | ||
495 | * MSR_P4_CRU_ESCR3: 14, 15, 17 | ||
496 | */ | ||
497 | |||
498 | P4_OPCODE(P4_EVENT_EXECUTION_EVENT) = P4_OPCODE_PACK(0x0c, 0x05), | ||
499 | /* | ||
500 | * MSR_P4_CRU_ESCR2: 12, 13, 16 | ||
501 | * MSR_P4_CRU_ESCR3: 14, 15, 17 | ||
502 | */ | ||
503 | |||
504 | P4_OPCODE(P4_EVENT_REPLAY_EVENT) = P4_OPCODE_PACK(0x09, 0x05), | ||
505 | /* | ||
506 | * MSR_P4_CRU_ESCR2: 12, 13, 16 | ||
507 | * MSR_P4_CRU_ESCR3: 14, 15, 17 | ||
508 | */ | ||
509 | |||
510 | P4_OPCODE(P4_EVENT_INSTR_RETIRED) = P4_OPCODE_PACK(0x02, 0x04), | ||
511 | /* | ||
512 | * MSR_P4_CRU_ESCR0: 12, 13, 16 | ||
513 | * MSR_P4_CRU_ESCR1: 14, 15, 17 | ||
514 | */ | ||
515 | |||
516 | P4_OPCODE(P4_EVENT_UOPS_RETIRED) = P4_OPCODE_PACK(0x01, 0x04), | ||
517 | /* | ||
518 | * MSR_P4_CRU_ESCR0: 12, 13, 16 | ||
519 | * MSR_P4_CRU_ESCR1: 14, 15, 17 | ||
520 | */ | ||
521 | |||
522 | P4_OPCODE(P4_EVENT_UOP_TYPE) = P4_OPCODE_PACK(0x02, 0x02), | ||
523 | /* | ||
524 | * MSR_P4_RAT_ESCR0: 12, 13, 16 | ||
525 | * MSR_P4_RAT_ESCR1: 14, 15, 17 | ||
526 | */ | ||
527 | |||
528 | P4_OPCODE(P4_EVENT_BRANCH_RETIRED) = P4_OPCODE_PACK(0x06, 0x05), | ||
529 | /* | ||
530 | * MSR_P4_CRU_ESCR2: 12, 13, 16 | ||
531 | * MSR_P4_CRU_ESCR3: 14, 15, 17 | ||
532 | */ | ||
533 | |||
534 | P4_OPCODE(P4_EVENT_MISPRED_BRANCH_RETIRED) = P4_OPCODE_PACK(0x03, 0x04), | ||
535 | /* | ||
536 | * MSR_P4_CRU_ESCR0: 12, 13, 16 | ||
537 | * MSR_P4_CRU_ESCR1: 14, 15, 17 | ||
538 | */ | ||
539 | |||
540 | P4_OPCODE(P4_EVENT_X87_ASSIST) = P4_OPCODE_PACK(0x03, 0x05), | ||
541 | /* | ||
542 | * MSR_P4_CRU_ESCR2: 12, 13, 16 | ||
543 | * MSR_P4_CRU_ESCR3: 14, 15, 17 | ||
544 | */ | ||
545 | |||
546 | P4_OPCODE(P4_EVENT_MACHINE_CLEAR) = P4_OPCODE_PACK(0x02, 0x05), | ||
547 | /* | ||
548 | * MSR_P4_CRU_ESCR2: 12, 13, 16 | ||
549 | * MSR_P4_CRU_ESCR3: 14, 15, 17 | ||
550 | */ | ||
551 | |||
552 | P4_OPCODE(P4_EVENT_INSTR_COMPLETED) = P4_OPCODE_PACK(0x07, 0x04), | ||
553 | /* | ||
554 | * MSR_P4_CRU_ESCR0: 12, 13, 16 | ||
555 | * MSR_P4_CRU_ESCR1: 14, 15, 17 | ||
556 | */ | ||
557 | }; | ||
558 | |||
559 | /* | ||
560 | * a caller should use P4_ESCR_EMASK_NAME helper to | ||
561 | * pick the EventMask needed, for example | ||
562 | * | ||
563 | * P4_ESCR_EMASK_NAME(P4_EVENT_TC_DELIVER_MODE, DD) | ||
564 | */ | ||
565 | enum P4_ESCR_EMASKS { | ||
566 | P4_GEN_ESCR_EMASK(P4_EVENT_TC_DELIVER_MODE, DD, 0), | ||
567 | P4_GEN_ESCR_EMASK(P4_EVENT_TC_DELIVER_MODE, DB, 1), | ||
568 | P4_GEN_ESCR_EMASK(P4_EVENT_TC_DELIVER_MODE, DI, 2), | ||
569 | P4_GEN_ESCR_EMASK(P4_EVENT_TC_DELIVER_MODE, BD, 3), | ||
570 | P4_GEN_ESCR_EMASK(P4_EVENT_TC_DELIVER_MODE, BB, 4), | ||
571 | P4_GEN_ESCR_EMASK(P4_EVENT_TC_DELIVER_MODE, BI, 5), | ||
572 | P4_GEN_ESCR_EMASK(P4_EVENT_TC_DELIVER_MODE, ID, 6), | ||
573 | |||
574 | P4_GEN_ESCR_EMASK(P4_EVENT_BPU_FETCH_REQUEST, TCMISS, 0), | ||
575 | |||
576 | P4_GEN_ESCR_EMASK(P4_EVENT_ITLB_REFERENCE, HIT, 0), | ||
577 | P4_GEN_ESCR_EMASK(P4_EVENT_ITLB_REFERENCE, MISS, 1), | ||
578 | P4_GEN_ESCR_EMASK(P4_EVENT_ITLB_REFERENCE, HIT_UK, 2), | ||
579 | |||
580 | P4_GEN_ESCR_EMASK(P4_EVENT_MEMORY_CANCEL, ST_RB_FULL, 2), | ||
581 | P4_GEN_ESCR_EMASK(P4_EVENT_MEMORY_CANCEL, 64K_CONF, 3), | ||
582 | |||
583 | P4_GEN_ESCR_EMASK(P4_EVENT_MEMORY_COMPLETE, LSC, 0), | ||
584 | P4_GEN_ESCR_EMASK(P4_EVENT_MEMORY_COMPLETE, SSC, 1), | ||
585 | |||
586 | P4_GEN_ESCR_EMASK(P4_EVENT_LOAD_PORT_REPLAY, SPLIT_LD, 1), | ||
587 | |||
588 | P4_GEN_ESCR_EMASK(P4_EVENT_STORE_PORT_REPLAY, SPLIT_ST, 1), | ||
589 | |||
590 | P4_GEN_ESCR_EMASK(P4_EVENT_MOB_LOAD_REPLAY, NO_STA, 1), | ||
591 | P4_GEN_ESCR_EMASK(P4_EVENT_MOB_LOAD_REPLAY, NO_STD, 3), | ||
592 | P4_GEN_ESCR_EMASK(P4_EVENT_MOB_LOAD_REPLAY, PARTIAL_DATA, 4), | ||
593 | P4_GEN_ESCR_EMASK(P4_EVENT_MOB_LOAD_REPLAY, UNALGN_ADDR, 5), | ||
594 | |||
595 | P4_GEN_ESCR_EMASK(P4_EVENT_PAGE_WALK_TYPE, DTMISS, 0), | ||
596 | P4_GEN_ESCR_EMASK(P4_EVENT_PAGE_WALK_TYPE, ITMISS, 1), | ||
597 | |||
598 | P4_GEN_ESCR_EMASK(P4_EVENT_BSQ_CACHE_REFERENCE, RD_2ndL_HITS, 0), | ||
599 | P4_GEN_ESCR_EMASK(P4_EVENT_BSQ_CACHE_REFERENCE, RD_2ndL_HITE, 1), | ||
600 | P4_GEN_ESCR_EMASK(P4_EVENT_BSQ_CACHE_REFERENCE, RD_2ndL_HITM, 2), | ||
601 | P4_GEN_ESCR_EMASK(P4_EVENT_BSQ_CACHE_REFERENCE, RD_3rdL_HITS, 3), | ||
602 | P4_GEN_ESCR_EMASK(P4_EVENT_BSQ_CACHE_REFERENCE, RD_3rdL_HITE, 4), | ||
603 | P4_GEN_ESCR_EMASK(P4_EVENT_BSQ_CACHE_REFERENCE, RD_3rdL_HITM, 5), | ||
604 | P4_GEN_ESCR_EMASK(P4_EVENT_BSQ_CACHE_REFERENCE, RD_2ndL_MISS, 8), | ||
605 | P4_GEN_ESCR_EMASK(P4_EVENT_BSQ_CACHE_REFERENCE, RD_3rdL_MISS, 9), | ||
606 | P4_GEN_ESCR_EMASK(P4_EVENT_BSQ_CACHE_REFERENCE, WR_2ndL_MISS, 10), | ||
607 | |||
608 | P4_GEN_ESCR_EMASK(P4_EVENT_IOQ_ALLOCATION, DEFAULT, 0), | ||
609 | P4_GEN_ESCR_EMASK(P4_EVENT_IOQ_ALLOCATION, ALL_READ, 5), | ||
610 | P4_GEN_ESCR_EMASK(P4_EVENT_IOQ_ALLOCATION, ALL_WRITE, 6), | ||
611 | P4_GEN_ESCR_EMASK(P4_EVENT_IOQ_ALLOCATION, MEM_UC, 7), | ||
612 | P4_GEN_ESCR_EMASK(P4_EVENT_IOQ_ALLOCATION, MEM_WC, 8), | ||
613 | P4_GEN_ESCR_EMASK(P4_EVENT_IOQ_ALLOCATION, MEM_WT, 9), | ||
614 | P4_GEN_ESCR_EMASK(P4_EVENT_IOQ_ALLOCATION, MEM_WP, 10), | ||
615 | P4_GEN_ESCR_EMASK(P4_EVENT_IOQ_ALLOCATION, MEM_WB, 11), | ||
616 | P4_GEN_ESCR_EMASK(P4_EVENT_IOQ_ALLOCATION, OWN, 13), | ||
617 | P4_GEN_ESCR_EMASK(P4_EVENT_IOQ_ALLOCATION, OTHER, 14), | ||
618 | P4_GEN_ESCR_EMASK(P4_EVENT_IOQ_ALLOCATION, PREFETCH, 15), | ||
619 | |||
620 | P4_GEN_ESCR_EMASK(P4_EVENT_IOQ_ACTIVE_ENTRIES, DEFAULT, 0), | ||
621 | P4_GEN_ESCR_EMASK(P4_EVENT_IOQ_ACTIVE_ENTRIES, ALL_READ, 5), | ||
622 | P4_GEN_ESCR_EMASK(P4_EVENT_IOQ_ACTIVE_ENTRIES, ALL_WRITE, 6), | ||
623 | P4_GEN_ESCR_EMASK(P4_EVENT_IOQ_ACTIVE_ENTRIES, MEM_UC, 7), | ||
624 | P4_GEN_ESCR_EMASK(P4_EVENT_IOQ_ACTIVE_ENTRIES, MEM_WC, 8), | ||
625 | P4_GEN_ESCR_EMASK(P4_EVENT_IOQ_ACTIVE_ENTRIES, MEM_WT, 9), | ||
626 | P4_GEN_ESCR_EMASK(P4_EVENT_IOQ_ACTIVE_ENTRIES, MEM_WP, 10), | ||
627 | P4_GEN_ESCR_EMASK(P4_EVENT_IOQ_ACTIVE_ENTRIES, MEM_WB, 11), | ||
628 | P4_GEN_ESCR_EMASK(P4_EVENT_IOQ_ACTIVE_ENTRIES, OWN, 13), | ||
629 | P4_GEN_ESCR_EMASK(P4_EVENT_IOQ_ACTIVE_ENTRIES, OTHER, 14), | ||
630 | P4_GEN_ESCR_EMASK(P4_EVENT_IOQ_ACTIVE_ENTRIES, PREFETCH, 15), | ||
631 | |||
632 | P4_GEN_ESCR_EMASK(P4_EVENT_FSB_DATA_ACTIVITY, DRDY_DRV, 0), | ||
633 | P4_GEN_ESCR_EMASK(P4_EVENT_FSB_DATA_ACTIVITY, DRDY_OWN, 1), | ||
634 | P4_GEN_ESCR_EMASK(P4_EVENT_FSB_DATA_ACTIVITY, DRDY_OTHER, 2), | ||
635 | P4_GEN_ESCR_EMASK(P4_EVENT_FSB_DATA_ACTIVITY, DBSY_DRV, 3), | ||
636 | P4_GEN_ESCR_EMASK(P4_EVENT_FSB_DATA_ACTIVITY, DBSY_OWN, 4), | ||
637 | P4_GEN_ESCR_EMASK(P4_EVENT_FSB_DATA_ACTIVITY, DBSY_OTHER, 5), | ||
638 | |||
639 | P4_GEN_ESCR_EMASK(P4_EVENT_BSQ_ALLOCATION, REQ_TYPE0, 0), | ||
640 | P4_GEN_ESCR_EMASK(P4_EVENT_BSQ_ALLOCATION, REQ_TYPE1, 1), | ||
641 | P4_GEN_ESCR_EMASK(P4_EVENT_BSQ_ALLOCATION, REQ_LEN0, 2), | ||
642 | P4_GEN_ESCR_EMASK(P4_EVENT_BSQ_ALLOCATION, REQ_LEN1, 3), | ||
643 | P4_GEN_ESCR_EMASK(P4_EVENT_BSQ_ALLOCATION, REQ_IO_TYPE, 5), | ||
644 | P4_GEN_ESCR_EMASK(P4_EVENT_BSQ_ALLOCATION, REQ_LOCK_TYPE, 6), | ||
645 | P4_GEN_ESCR_EMASK(P4_EVENT_BSQ_ALLOCATION, REQ_CACHE_TYPE, 7), | ||
646 | P4_GEN_ESCR_EMASK(P4_EVENT_BSQ_ALLOCATION, REQ_SPLIT_TYPE, 8), | ||
647 | P4_GEN_ESCR_EMASK(P4_EVENT_BSQ_ALLOCATION, REQ_DEM_TYPE, 9), | ||
648 | P4_GEN_ESCR_EMASK(P4_EVENT_BSQ_ALLOCATION, REQ_ORD_TYPE, 10), | ||
649 | P4_GEN_ESCR_EMASK(P4_EVENT_BSQ_ALLOCATION, MEM_TYPE0, 11), | ||
650 | P4_GEN_ESCR_EMASK(P4_EVENT_BSQ_ALLOCATION, MEM_TYPE1, 12), | ||
651 | P4_GEN_ESCR_EMASK(P4_EVENT_BSQ_ALLOCATION, MEM_TYPE2, 13), | ||
652 | |||
653 | P4_GEN_ESCR_EMASK(P4_EVENT_BSQ_ACTIVE_ENTRIES, REQ_TYPE0, 0), | ||
654 | P4_GEN_ESCR_EMASK(P4_EVENT_BSQ_ACTIVE_ENTRIES, REQ_TYPE1, 1), | ||
655 | P4_GEN_ESCR_EMASK(P4_EVENT_BSQ_ACTIVE_ENTRIES, REQ_LEN0, 2), | ||
656 | P4_GEN_ESCR_EMASK(P4_EVENT_BSQ_ACTIVE_ENTRIES, REQ_LEN1, 3), | ||
657 | P4_GEN_ESCR_EMASK(P4_EVENT_BSQ_ACTIVE_ENTRIES, REQ_IO_TYPE, 5), | ||
658 | P4_GEN_ESCR_EMASK(P4_EVENT_BSQ_ACTIVE_ENTRIES, REQ_LOCK_TYPE, 6), | ||
659 | P4_GEN_ESCR_EMASK(P4_EVENT_BSQ_ACTIVE_ENTRIES, REQ_CACHE_TYPE, 7), | ||
660 | P4_GEN_ESCR_EMASK(P4_EVENT_BSQ_ACTIVE_ENTRIES, REQ_SPLIT_TYPE, 8), | ||
661 | P4_GEN_ESCR_EMASK(P4_EVENT_BSQ_ACTIVE_ENTRIES, REQ_DEM_TYPE, 9), | ||
662 | P4_GEN_ESCR_EMASK(P4_EVENT_BSQ_ACTIVE_ENTRIES, REQ_ORD_TYPE, 10), | ||
663 | P4_GEN_ESCR_EMASK(P4_EVENT_BSQ_ACTIVE_ENTRIES, MEM_TYPE0, 11), | ||
664 | P4_GEN_ESCR_EMASK(P4_EVENT_BSQ_ACTIVE_ENTRIES, MEM_TYPE1, 12), | ||
665 | P4_GEN_ESCR_EMASK(P4_EVENT_BSQ_ACTIVE_ENTRIES, MEM_TYPE2, 13), | ||
666 | |||
667 | P4_GEN_ESCR_EMASK(P4_EVENT_SSE_INPUT_ASSIST, ALL, 15), | ||
668 | |||
669 | P4_GEN_ESCR_EMASK(P4_EVENT_PACKED_SP_UOP, ALL, 15), | ||
670 | |||
671 | P4_GEN_ESCR_EMASK(P4_EVENT_PACKED_DP_UOP, ALL, 15), | ||
672 | |||
673 | P4_GEN_ESCR_EMASK(P4_EVENT_SCALAR_SP_UOP, ALL, 15), | ||
674 | |||
675 | P4_GEN_ESCR_EMASK(P4_EVENT_SCALAR_DP_UOP, ALL, 15), | ||
676 | |||
677 | P4_GEN_ESCR_EMASK(P4_EVENT_64BIT_MMX_UOP, ALL, 15), | ||
678 | |||
679 | P4_GEN_ESCR_EMASK(P4_EVENT_128BIT_MMX_UOP, ALL, 15), | ||
680 | |||
681 | P4_GEN_ESCR_EMASK(P4_EVENT_X87_FP_UOP, ALL, 15), | ||
682 | |||
683 | P4_GEN_ESCR_EMASK(P4_EVENT_TC_MISC, FLUSH, 4), | ||
684 | |||
685 | P4_GEN_ESCR_EMASK(P4_EVENT_GLOBAL_POWER_EVENTS, RUNNING, 0), | ||
686 | |||
687 | P4_GEN_ESCR_EMASK(P4_EVENT_TC_MS_XFER, CISC, 0), | ||
688 | |||
689 | P4_GEN_ESCR_EMASK(P4_EVENT_UOP_QUEUE_WRITES, FROM_TC_BUILD, 0), | ||
690 | P4_GEN_ESCR_EMASK(P4_EVENT_UOP_QUEUE_WRITES, FROM_TC_DELIVER, 1), | ||
691 | P4_GEN_ESCR_EMASK(P4_EVENT_UOP_QUEUE_WRITES, FROM_ROM, 2), | ||
692 | |||
693 | P4_GEN_ESCR_EMASK(P4_EVENT_RETIRED_MISPRED_BRANCH_TYPE, CONDITIONAL, 1), | ||
694 | P4_GEN_ESCR_EMASK(P4_EVENT_RETIRED_MISPRED_BRANCH_TYPE, CALL, 2), | ||
695 | P4_GEN_ESCR_EMASK(P4_EVENT_RETIRED_MISPRED_BRANCH_TYPE, RETURN, 3), | ||
696 | P4_GEN_ESCR_EMASK(P4_EVENT_RETIRED_MISPRED_BRANCH_TYPE, INDIRECT, 4), | ||
697 | |||
698 | P4_GEN_ESCR_EMASK(P4_EVENT_RETIRED_BRANCH_TYPE, CONDITIONAL, 1), | ||
699 | P4_GEN_ESCR_EMASK(P4_EVENT_RETIRED_BRANCH_TYPE, CALL, 2), | ||
700 | P4_GEN_ESCR_EMASK(P4_EVENT_RETIRED_BRANCH_TYPE, RETURN, 3), | ||
701 | P4_GEN_ESCR_EMASK(P4_EVENT_RETIRED_BRANCH_TYPE, INDIRECT, 4), | ||
702 | |||
703 | P4_GEN_ESCR_EMASK(P4_EVENT_RESOURCE_STALL, SBFULL, 5), | ||
704 | |||
705 | P4_GEN_ESCR_EMASK(P4_EVENT_WC_BUFFER, WCB_EVICTS, 0), | ||
706 | P4_GEN_ESCR_EMASK(P4_EVENT_WC_BUFFER, WCB_FULL_EVICTS, 1), | ||
707 | |||
708 | P4_GEN_ESCR_EMASK(P4_EVENT_FRONT_END_EVENT, NBOGUS, 0), | ||
709 | P4_GEN_ESCR_EMASK(P4_EVENT_FRONT_END_EVENT, BOGUS, 1), | ||
710 | |||
711 | P4_GEN_ESCR_EMASK(P4_EVENT_EXECUTION_EVENT, NBOGUS0, 0), | ||
712 | P4_GEN_ESCR_EMASK(P4_EVENT_EXECUTION_EVENT, NBOGUS1, 1), | ||
713 | P4_GEN_ESCR_EMASK(P4_EVENT_EXECUTION_EVENT, NBOGUS2, 2), | ||
714 | P4_GEN_ESCR_EMASK(P4_EVENT_EXECUTION_EVENT, NBOGUS3, 3), | ||
715 | P4_GEN_ESCR_EMASK(P4_EVENT_EXECUTION_EVENT, BOGUS0, 4), | ||
716 | P4_GEN_ESCR_EMASK(P4_EVENT_EXECUTION_EVENT, BOGUS1, 5), | ||
717 | P4_GEN_ESCR_EMASK(P4_EVENT_EXECUTION_EVENT, BOGUS2, 6), | ||
718 | P4_GEN_ESCR_EMASK(P4_EVENT_EXECUTION_EVENT, BOGUS3, 7), | ||
719 | |||
720 | P4_GEN_ESCR_EMASK(P4_EVENT_REPLAY_EVENT, NBOGUS, 0), | ||
721 | P4_GEN_ESCR_EMASK(P4_EVENT_REPLAY_EVENT, BOGUS, 1), | ||
722 | |||
723 | P4_GEN_ESCR_EMASK(P4_EVENT_INSTR_RETIRED, NBOGUSNTAG, 0), | ||
724 | P4_GEN_ESCR_EMASK(P4_EVENT_INSTR_RETIRED, NBOGUSTAG, 1), | ||
725 | P4_GEN_ESCR_EMASK(P4_EVENT_INSTR_RETIRED, BOGUSNTAG, 2), | ||
726 | P4_GEN_ESCR_EMASK(P4_EVENT_INSTR_RETIRED, BOGUSTAG, 3), | ||
727 | |||
728 | P4_GEN_ESCR_EMASK(P4_EVENT_UOPS_RETIRED, NBOGUS, 0), | ||
729 | P4_GEN_ESCR_EMASK(P4_EVENT_UOPS_RETIRED, BOGUS, 1), | ||
730 | |||
731 | P4_GEN_ESCR_EMASK(P4_EVENT_UOP_TYPE, TAGLOADS, 1), | ||
732 | P4_GEN_ESCR_EMASK(P4_EVENT_UOP_TYPE, TAGSTORES, 2), | ||
733 | |||
734 | P4_GEN_ESCR_EMASK(P4_EVENT_BRANCH_RETIRED, MMNP, 0), | ||
735 | P4_GEN_ESCR_EMASK(P4_EVENT_BRANCH_RETIRED, MMNM, 1), | ||
736 | P4_GEN_ESCR_EMASK(P4_EVENT_BRANCH_RETIRED, MMTP, 2), | ||
737 | P4_GEN_ESCR_EMASK(P4_EVENT_BRANCH_RETIRED, MMTM, 3), | ||
738 | |||
739 | P4_GEN_ESCR_EMASK(P4_EVENT_MISPRED_BRANCH_RETIRED, NBOGUS, 0), | ||
740 | |||
741 | P4_GEN_ESCR_EMASK(P4_EVENT_X87_ASSIST, FPSU, 0), | ||
742 | P4_GEN_ESCR_EMASK(P4_EVENT_X87_ASSIST, FPSO, 1), | ||
743 | P4_GEN_ESCR_EMASK(P4_EVENT_X87_ASSIST, POAO, 2), | ||
744 | P4_GEN_ESCR_EMASK(P4_EVENT_X87_ASSIST, POAU, 3), | ||
745 | P4_GEN_ESCR_EMASK(P4_EVENT_X87_ASSIST, PREA, 4), | ||
746 | |||
747 | P4_GEN_ESCR_EMASK(P4_EVENT_MACHINE_CLEAR, CLEAR, 0), | ||
748 | P4_GEN_ESCR_EMASK(P4_EVENT_MACHINE_CLEAR, MOCLEAR, 1), | ||
749 | P4_GEN_ESCR_EMASK(P4_EVENT_MACHINE_CLEAR, SMCLEAR, 2), | ||
750 | |||
751 | P4_GEN_ESCR_EMASK(P4_EVENT_INSTR_COMPLETED, NBOGUS, 0), | ||
752 | P4_GEN_ESCR_EMASK(P4_EVENT_INSTR_COMPLETED, BOGUS, 1), | ||
753 | }; | ||
754 | |||
755 | /* P4 PEBS: stale for a while */ | ||
756 | #define P4_PEBS_METRIC_MASK 0x00001fffU | ||
757 | #define P4_PEBS_UOB_TAG 0x01000000U | ||
758 | #define P4_PEBS_ENABLE 0x02000000U | ||
759 | |||
760 | /* Replay metrics for MSR_IA32_PEBS_ENABLE and MSR_P4_PEBS_MATRIX_VERT */ | ||
761 | #define P4_PEBS__1stl_cache_load_miss_retired 0x3000001 | ||
762 | #define P4_PEBS__2ndl_cache_load_miss_retired 0x3000002 | ||
763 | #define P4_PEBS__dtlb_load_miss_retired 0x3000004 | ||
764 | #define P4_PEBS__dtlb_store_miss_retired 0x3000004 | ||
765 | #define P4_PEBS__dtlb_all_miss_retired 0x3000004 | ||
766 | #define P4_PEBS__tagged_mispred_branch 0x3018000 | ||
767 | #define P4_PEBS__mob_load_replay_retired 0x3000200 | ||
768 | #define P4_PEBS__split_load_retired 0x3000400 | ||
769 | #define P4_PEBS__split_store_retired 0x3000400 | ||
770 | |||
771 | #define P4_VERT__1stl_cache_load_miss_retired 0x0000001 | ||
772 | #define P4_VERT__2ndl_cache_load_miss_retired 0x0000001 | ||
773 | #define P4_VERT__dtlb_load_miss_retired 0x0000001 | ||
774 | #define P4_VERT__dtlb_store_miss_retired 0x0000002 | ||
775 | #define P4_VERT__dtlb_all_miss_retired 0x0000003 | ||
776 | #define P4_VERT__tagged_mispred_branch 0x0000010 | ||
777 | #define P4_VERT__mob_load_replay_retired 0x0000001 | ||
778 | #define P4_VERT__split_load_retired 0x0000001 | ||
779 | #define P4_VERT__split_store_retired 0x0000002 | ||
780 | |||
781 | enum P4_CACHE_EVENTS { | ||
782 | P4_CACHE__NONE, | ||
783 | |||
784 | P4_CACHE__1stl_cache_load_miss_retired, | ||
785 | P4_CACHE__2ndl_cache_load_miss_retired, | ||
786 | P4_CACHE__dtlb_load_miss_retired, | ||
787 | P4_CACHE__dtlb_store_miss_retired, | ||
788 | P4_CACHE__itlb_reference_hit, | ||
789 | P4_CACHE__itlb_reference_miss, | ||
790 | |||
791 | P4_CACHE__MAX | ||
792 | }; | ||
793 | |||
794 | #endif /* PERF_EVENT_P4_H */ | ||