vmm: Fix use-after-free in load_elf()
[akaros.git] / user / perfmon / events / amd64_events_fam15h.h
1 /*
2  * Copyright (c) 2011 Google, Inc
3  * Contributed by Stephane Eranian <eranian@gmail.com>
4  *
5  * Permission is hereby granted, free of charge, to any person obtaining a copy
6  * of this software and associated documentation files (the "Software"), to deal
7  * in the Software without restriction, including without limitation the rights
8  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
9  * of the Software, and to permit persons to whom the Software is furnished to do so,
10  * subject to the following conditions:
11  *
12  * The above copyright notice and this permission notice shall be included in all
13  * copies or substantial portions of the Software.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
16  * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
17  * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
18  * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
19  * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
20  * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21  *
22  * This file is part of libpfm, a performance monitoring support library for
23  * applications on Linux.
24  *
25  * This file has been automatically generated.
26  *
27  * PMU: amd64_fam15h (AMD64 Fam15h Interlagos)
28  *
29  * Based on libpfm patch by Robert Richter <robert.richter@amd.com>:
30  * Family 15h Microarchitecture performance monitor events
31  *
32  * History:
33  *
34  * Apr 29 2011 -- Robert Richter, robert.richter@amd.com:
35  * Source: BKDG for AMD Family 15h Models 00h-0Fh Processors,
36  * 42301, Rev 1.15, April 18, 2011
37  *
38  * Dec 09 2010 -- Robert Richter, robert.richter@amd.com:
39  * Source: BIOS and Kernel Developer's Guide for the AMD Family 15h
40  * Processors, Rev 0.90, May 18, 2010
41  */
42
43 #define CORE_SELECT(b) \
44    { .uname  = "CORE_0",\
45      .udesc  = "Measure on Core0",\
46      .ucode = 0 << 4,\
47      .grpid = b,\
48      .uflags= AMD64_FL_NCOMBO,\
49    },\
50    { .uname  = "CORE_1",\
51      .udesc  = "Measure on Core1",\
52      .ucode = 1 << 4,\
53      .grpid = b,\
54      .uflags= AMD64_FL_NCOMBO,\
55    },\
56    { .uname  = "CORE_2",\
57      .udesc  = "Measure on Core2",\
58      .ucode = 2 << 4,\
59      .grpid = b,\
60      .uflags= AMD64_FL_NCOMBO,\
61    },\
62    { .uname  = "CORE_3",\
63      .udesc  = "Measure on Core3",\
64      .ucode = 3 << 4,\
65      .grpid = b,\
66      .uflags= AMD64_FL_NCOMBO,\
67    },\
68    { .uname  = "CORE_4",\
69      .udesc  = "Measure on Core4",\
70      .ucode = 4 << 4,\
71      .grpid = b,\
72      .uflags= AMD64_FL_NCOMBO,\
73    },\
74    { .uname  = "CORE_5",\
75      .udesc  = "Measure on Core5",\
76      .ucode = 5 << 4,\
77      .grpid = b,\
78      .uflags= AMD64_FL_NCOMBO,\
79    },\
80    { .uname  = "CORE_6",\
81      .udesc  = "Measure on Core6",\
82      .ucode = 6 << 4,\
83      .grpid = b,\
84      .uflags= AMD64_FL_NCOMBO,\
85    },\
86    { .uname  = "CORE_7",\
87      .udesc  = "Measure on Core7",\
88      .ucode = 7 << 4,\
89      .grpid = b,\
90      .uflags= AMD64_FL_NCOMBO,\
91    },\
92    { .uname  = "ANY_CORE",\
93      .udesc  = "Measure on any core",\
94      .ucode = 0xf << 4,\
95      .grpid = b,\
96      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,\
97    }
98
99 static const amd64_umask_t amd64_fam15h_dispatched_fpu_ops[]={
100    { .uname  = "OPS_PIPE0",
101      .udesc  = "Total number uops assigned to Pipe 0",
102      .ucode = 0x1,
103    },
104    { .uname  = "OPS_PIPE1",
105      .udesc  = "Total number uops assigned to Pipe 1",
106      .ucode = 0x2,
107    },
108    { .uname  = "OPS_PIPE2",
109      .udesc  = "Total number uops assigned to Pipe 2",
110      .ucode = 0x4,
111    },
112    { .uname  = "OPS_PIPE3",
113      .udesc  = "Total number uops assigned to Pipe 3",
114      .ucode = 0x8,
115    },
116    { .uname  = "OPS_DUAL_PIPE0",
117      .udesc  = "Total number dual-pipe uops assigned to Pipe 0",
118      .ucode = 0x10,
119    },
120    { .uname  = "OPS_DUAL_PIPE1",
121      .udesc  = "Total number dual-pipe uops assigned to Pipe 1",
122      .ucode = 0x20,
123    },
124    { .uname  = "OPS_DUAL_PIPE2",
125      .udesc  = "Total number dual-pipe uops assigned to Pipe 2",
126      .ucode = 0x40,
127    },
128    { .uname  = "OPS_DUAL_PIPE3",
129      .udesc  = "Total number dual-pipe uops assigned to Pipe 3",
130      .ucode = 0x80,
131    },
132    { .uname  = "ALL",
133      .udesc  = "All sub-events selected",
134      .ucode = 0xff,
135      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
136    },
137 };
138
139 static const amd64_umask_t amd64_fam15h_retired_sse_ops[]={
140    { .uname  = "SINGLE_ADD_SUB_OPS",
141      .udesc  = "Single-precision add/subtract FLOPS",
142      .ucode = 0x1,
143    },
144    { .uname  = "SINGLE_MUL_OPS",
145      .udesc  = "Single-precision multiply FLOPS",
146      .ucode = 0x2,
147    },
148    { .uname  = "SINGLE_DIV_OPS",
149      .udesc  = "Single-precision divide/square root FLOPS",
150      .ucode = 0x4,
151    },
152    { .uname  = "SINGLE_MUL_ADD_OPS",
153      .udesc  = "Single precision multiply-add FLOPS. Multiply-add counts as 2 FLOPS",
154      .ucode = 0x8,
155    },
156    { .uname  = "DOUBLE_ADD_SUB_OPS",
157      .udesc  = "Double precision add/subtract FLOPS",
158      .ucode = 0x10,
159    },
160    { .uname  = "DOUBLE_MUL_OPS",
161      .udesc  = "Double precision multiply FLOPS",
162      .ucode = 0x20,
163    },
164    { .uname  = "DOUBLE_DIV_OPS",
165      .udesc  = "Double precision divide/square root FLOPS",
166      .ucode = 0x40,
167    },
168    { .uname  = "DOUBLE_MUL_ADD_OPS",
169      .udesc  = "Double precision multiply-add FLOPS. Multiply-add counts as 2 FLOPS",
170      .ucode = 0x80,
171    },
172    { .uname  = "ALL",
173      .udesc  = "All sub-events selected",
174      .ucode = 0xff,
175      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
176    },
177 };
178
179 static const amd64_umask_t amd64_fam15h_move_scalar_optimization[]={
180    { .uname  = "SSE_MOVE_OPS",
181      .udesc  = "Number of SSE Move Ops",
182      .ucode = 0x1,
183    },
184    { .uname  = "SSE_MOVE_OPS_ELIM",
185      .udesc  = "Number of SSE Move Ops eliminated",
186      .ucode = 0x2,
187    },
188    { .uname  = "OPT_CAND",
189      .udesc  = "Number of Ops that are candidates for optimization (Z-bit set or pass)",
190      .ucode = 0x4,
191    },
192    { .uname  = "SCALAR_OPS_OPTIMIZED",
193      .udesc  = "Number of Scalar ops optimized",
194      .ucode = 0x8,
195    },
196    { .uname  = "ALL",
197      .udesc  = "All sub-events selected",
198      .ucode = 0xf,
199      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
200    },
201 };
202
203 static const amd64_umask_t amd64_fam15h_retired_serializing_ops[]={
204    { .uname  = "SSE_RETIRED",
205      .udesc  = "SSE bottom-executing uops retired",
206      .ucode = 0x1,
207    },
208    { .uname  = "SSE_MISPREDICTED",
209      .udesc  = "SSE control word mispredict traps due to mispredictions",
210      .ucode = 0x2,
211    },
212    { .uname  = "X87_RETIRED",
213      .udesc  = "X87 bottom-executing uops retired",
214      .ucode = 0x4,
215    },
216    { .uname  = "X87_MISPREDICTED",
217      .udesc  = "X87 control word mispredict traps due to mispredictions",
218      .ucode = 0x8,
219    },
220    { .uname  = "ALL",
221      .udesc  = "All sub-events selected",
222      .ucode = 0xf,
223      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
224    },
225 };
226
227 static const amd64_umask_t amd64_fam15h_segment_register_loads[]={
228    { .uname  = "ES",
229      .udesc  = "ES",
230      .ucode = 0x1,
231    },
232    { .uname  = "CS",
233      .udesc  = "CS",
234      .ucode = 0x2,
235    },
236    { .uname  = "SS",
237      .udesc  = "SS",
238      .ucode = 0x4,
239    },
240    { .uname  = "DS",
241      .udesc  = "DS",
242      .ucode = 0x8,
243    },
244    { .uname  = "FS",
245      .udesc  = "FS",
246      .ucode = 0x10,
247    },
248    { .uname  = "GS",
249      .udesc  = "GS",
250      .ucode = 0x20,
251    },
252    { .uname  = "HS",
253      .udesc  = "HS",
254      .ucode = 0x40,
255    },
256    { .uname  = "ALL",
257      .udesc  = "All sub-events selected",
258      .ucode = 0x7f,
259      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
260    },
261 };
262
263 static const amd64_umask_t amd64_fam15h_load_q_store_q_full[]={
264    { .uname  = "LOAD_QUEUE",
265      .udesc  = "The number of cycles that the load buffer is full",
266      .ucode = 0x1,
267    },
268    { .uname  = "STORE_QUEUE",
269      .udesc  = "The number of cycles that the store buffer is full",
270      .ucode = 0x2,
271    },
272    { .uname  = "ALL",
273      .udesc  = "All sub-events selected",
274      .ucode = 0x3,
275      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
276    },
277 };
278
279 static const amd64_umask_t amd64_fam15h_locked_ops[]={
280    { .uname  = "EXECUTED",
281      .udesc  = "Number of locked instructions executed",
282      .ucode = 0x1,
283    },
284    { .uname  = "CYCLES_NON_SPECULATIVE_PHASE",
285      .udesc  = "Number of cycles spent in non-speculative phase, excluding cache miss penalty",
286      .ucode = 0x4,
287    },
288    { .uname  = "CYCLES_WAITING",
289      .udesc  = "Number of cycles spent in non-speculative phase, including the cache miss penalty",
290      .ucode = 0x8,
291    },
292    { .uname  = "ALL",
293      .udesc  = "All sub-events selected",
294      .ucode = 0xd,
295      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
296    },
297 };
298
299 static const amd64_umask_t amd64_fam15h_cancelled_store_to_load[]={
300    { .uname  = "SIZE_ADDRESS_MISMATCHES",
301      .udesc  = "Store is smaller than load or different starting byte but partial overlap",
302      .ucode = 0x1,
303    },
304    { .uname  = "ALL",
305      .udesc  = "All sub-events selected",
306      .ucode = 0x1,
307      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
308    },
309 };
310
311 static const amd64_umask_t amd64_fam15h_data_cache_misses[]={
312    { .uname  = "DC_MISS_STREAMING_STORE",
313      .udesc  = "First data cache miss or streaming store to a 64B cache line",
314      .ucode = 0x1,
315    },
316    { .uname  = "STREAMING_STORE",
317      .udesc  = "First streaming store to a 64B cache line",
318      .ucode = 0x2,
319    },
320    { .uname  = "ALL",
321      .udesc  = "All sub-events selected",
322      .ucode = 0x3,
323      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
324    },
325 };
326
327 static const amd64_umask_t amd64_fam15h_data_cache_refills_from_l2_or_northbridge[]={
328    { .uname  = "GOOD",
329      .udesc  = "Fill with good data. (Final valid status is valid)",
330      .ucode = 0x1,
331    },
332    { .uname  = "INVALID",
333      .udesc  = "Early valid status turned out to be invalid",
334      .ucode = 0x2,
335    },
336    { .uname  = "POISON",
337      .udesc  = "Fill with poison data",
338      .ucode = 0x4,
339    },
340    { .uname  = "READ_ERROR",
341      .udesc  = "Fill with read data error",
342      .ucode = 0x8,
343    },
344    { .uname  = "ALL",
345      .udesc  = "All sub-events selected",
346      .ucode = 0xf,
347      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
348    },
349 };
350
351 static const amd64_umask_t amd64_fam15h_unified_tlb_hit[]={
352    { .uname  = "4K_DATA",
353      .udesc  = "4 KB unified TLB hit for data",
354      .ucode = 0x1,
355    },
356    { .uname  = "2M_DATA",
357      .udesc  = "2 MB unified TLB hit for data",
358      .ucode = 0x2,
359    },
360    { .uname  = "1G_DATA",
361      .udesc  = "1 GB unified TLB hit for data",
362      .ucode = 0x4,
363    },
364    { .uname  = "4K_INST",
365      .udesc  = "4 KB unified TLB hit for instruction",
366      .ucode = 0x10,
367    },
368    { .uname  = "2M_INST",
369      .udesc  = "2 MB unified TLB hit for instruction",
370      .ucode = 0x20,
371    },
372    { .uname  = "1G_INST",
373      .udesc  = "1 GB unified TLB hit for instruction",
374      .ucode = 0x40,
375    },
376    { .uname  = "ALL",
377      .udesc  = "All sub-events selected",
378      .ucode = 0x77,
379      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
380    },
381 };
382
383 static const amd64_umask_t amd64_fam15h_unified_tlb_miss[]={
384    { .uname  = "4K_DATA",
385      .udesc  = "4 KB unified TLB miss for data",
386      .ucode = 0x1,
387    },
388    { .uname  = "2M_DATA",
389      .udesc  = "2 MB unified TLB miss for data",
390      .ucode = 0x2,
391    },
392    { .uname  = "1GB_DATA",
393      .udesc  = "1 GB unified TLB miss for data",
394      .ucode = 0x4,
395    },
396    { .uname  = "4K_INST",
397      .udesc  = "4 KB unified TLB miss for instruction",
398      .ucode = 0x10,
399    },
400    { .uname  = "2M_INST",
401      .udesc  = "2 MB unified TLB miss for instruction",
402      .ucode = 0x20,
403    },
404    { .uname  = "1G_INST",
405      .udesc  = "1 GB unified TLB miss for instruction",
406      .ucode = 0x40,
407    },
408    { .uname  = "ALL",
409      .udesc  = "All sub-events selected",
410      .ucode = 0x77,
411      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
412    },
413 };
414
415 static const amd64_umask_t amd64_fam15h_prefetch_instructions_dispatched[]={
416    { .uname  = "LOAD",
417      .udesc  = "Load (Prefetch, PrefetchT0/T1/T2)",
418      .ucode = 0x1,
419    },
420    { .uname  = "STORE",
421      .udesc  = "Store (PrefetchW)",
422      .ucode = 0x2,
423    },
424    { .uname  = "NTA",
425      .udesc  = "NTA (PrefetchNTA)",
426      .ucode = 0x4,
427    },
428    { .uname  = "ALL",
429      .udesc  = "All sub-events selected",
430      .ucode = 0x7,
431      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
432    },
433 };
434
435 static const amd64_umask_t amd64_fam15h_ineffective_sw_prefetches[]={
436    { .uname  = "SW_PREFETCH_HIT_IN_L1",
437      .udesc  = "Software prefetch hit in the L1",
438      .ucode = 0x1,
439    },
440    { .uname  = "SW_PREFETCH_HIT_IN_L2",
441      .udesc  = "Software prefetch hit in the L2",
442      .ucode = 0x8,
443    },
444    { .uname  = "ALL",
445      .udesc  = "All sub-events selected",
446      .ucode = 0x9,
447      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
448    },
449 };
450
451 static const amd64_umask_t amd64_fam15h_memory_requests[]={
452    { .uname  = "NON_CACHEABLE",
453      .udesc  = "Requests to non-cacheable (UC) memory",
454      .ucode = 0x1,
455    },
456    { .uname  = "WRITE_COMBINING",
457      .udesc  = "Requests to non-cacheable (WC, but not WC+/SS) memory",
458      .ucode = 0x2,
459    },
460    { .uname  = "STREAMING_STORE",
461      .udesc  = "Requests to non-cacheable (WC+/SS, but not WC) memory",
462      .ucode = 0x80,
463    },
464    { .uname  = "ALL",
465      .udesc  = "All sub-events selected",
466      .ucode = 0x83,
467      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
468    },
469 };
470
471 static const amd64_umask_t amd64_fam15h_data_prefetcher[]={
472    { .uname  = "ATTEMPTED",
473      .udesc  = "Prefetch attempts",
474      .ucode = 0x2,
475    },
476    { .uname  = "ALL",
477      .udesc  = "All sub-events selected",
478      .ucode = 0x2,
479      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
480    },
481 };
482
483 static const amd64_umask_t amd64_fam15h_mab_reqs[]={
484    { .uname  = "BUFFER_BIT_0",
485      .udesc  = "Buffer entry index bit 0",
486      .ucode = 0x1,
487    },
488    { .uname  = "BUFFER_BIT_1",
489      .udesc  = "Buffer entry index bit 1",
490      .ucode = 0x2,
491    },
492    { .uname  = "BUFFER_BIT_2",
493      .udesc  = "Buffer entry index bit 2",
494      .ucode = 0x4,
495    },
496    { .uname  = "BUFFER_BIT_3",
497      .udesc  = "Buffer entry index bit 3",
498      .ucode = 0x8,
499    },
500    { .uname  = "BUFFER_BIT_4",
501      .udesc  = "Buffer entry index bit 4",
502      .ucode = 0x10,
503    },
504    { .uname  = "BUFFER_BIT_5",
505      .udesc  = "Buffer entry index bit 5",
506      .ucode = 0x20,
507    },
508    { .uname  = "BUFFER_BIT_6",
509      .udesc  = "Buffer entry index bit 6",
510      .ucode = 0x40,
511    },
512    { .uname  = "BUFFER_BIT_7",
513      .udesc  = "Buffer entry index bit 7",
514      .ucode = 0x80,
515    },
516    { .uname  = "ALL",
517      .udesc  = "All sub-events selected",
518      .ucode = 0xff,
519      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
520    },
521 };
522
523 static const amd64_umask_t amd64_fam15h_system_read_responses[]={
524    { .uname  = "EXCLUSIVE",
525      .udesc  = "Exclusive",
526      .ucode = 0x1,
527    },
528    { .uname  = "MODIFIED",
529      .udesc  = "Modified (D18F0x68[ATMModeEn]==0), Modified written (D18F0x68[ATMModeEn]==1)",
530      .ucode = 0x2,
531    },
532    { .uname  = "SHARED",
533      .udesc  = "Shared",
534      .ucode = 0x4,
535    },
536    { .uname  = "OWNED",
537      .udesc  = "Owned",
538      .ucode = 0x8,
539    },
540    { .uname  = "DATA_ERROR",
541      .udesc  = "Data Error",
542      .ucode = 0x10,
543    },
544    { .uname  = "MODIFIED_UNWRITTEN",
545      .udesc  = "Modified unwritten",
546      .ucode = 0x20,
547    },
548    { .uname  = "ALL",
549      .udesc  = "All sub-events selected",
550      .ucode = 0x3f,
551      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
552    },
553 };
554
555 static const amd64_umask_t amd64_fam15h_octword_write_transfers[]={
556    { .uname  = "OCTWORD_WRITE_TRANSFER",
557      .udesc  = "OW write transfer",
558      .ucode = 0x1,
559    },
560    { .uname  = "ALL",
561      .udesc  = "All sub-events selected",
562      .ucode = 0x1,
563      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
564    },
565 };
566
567 static const amd64_umask_t amd64_fam15h_requests_to_l2[]={
568    { .uname  = "INSTRUCTIONS",
569      .udesc  = "IC fill",
570      .ucode = 0x1,
571    },
572    { .uname  = "DATA",
573      .udesc  = "DC fill",
574      .ucode = 0x2,
575    },
576    { .uname  = "TLB_WALK",
577      .udesc  = "TLB fill (page table walks)",
578      .ucode = 0x4,
579    },
580    { .uname  = "SNOOP",
581      .udesc  = "NB probe request",
582      .ucode = 0x8,
583    },
584    { .uname  = "CANCELLED",
585      .udesc  = "Canceled request",
586      .ucode = 0x10,
587    },
588    { .uname  = "PREFETCHER",
589      .udesc  = "L2 cache prefetcher request",
590      .ucode = 0x40,
591    },
592    { .uname  = "ALL",
593      .udesc  = "All sub-events selected",
594      .ucode = 0x5f,
595      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
596    },
597 };
598
599 static const amd64_umask_t amd64_fam15h_l2_cache_miss[]={
600    { .uname  = "INSTRUCTIONS",
601      .udesc  = "IC fill",
602      .ucode = 0x1,
603    },
604    { .uname  = "DATA",
605      .udesc  = "DC fill (includes possible replays, whereas PMCx041 does not)",
606      .ucode = 0x2,
607    },
608    { .uname  = "TLB_WALK",
609      .udesc  = "TLB page table walk",
610      .ucode = 0x4,
611    },
612    { .uname  = "PREFETCHER",
613      .udesc  = "L2 Cache Prefetcher request",
614      .ucode = 0x10,
615    },
616    { .uname  = "ALL",
617      .udesc  = "All sub-events selected",
618      .ucode = 0x17,
619      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
620    },
621 };
622
623 static const amd64_umask_t amd64_fam15h_l2_cache_fill_writeback[]={
624    { .uname  = "L2_FILLS",
625      .udesc  = "L2 fills from system",
626      .ucode = 0x1,
627    },
628    { .uname  = "L2_WRITEBACKS",
629      .udesc  = "L2 Writebacks to system (Clean and Dirty)",
630      .ucode = 0x2,
631    },
632    { .uname  = "L2_WRITEBACKS_CLEAN",
633      .udesc  = "L2 Clean Writebacks to system",
634      .ucode = 0x4,
635    },
636    { .uname  = "ALL",
637      .udesc  = "All sub-events selected",
638      .ucode = 0x7,
639      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
640    },
641 };
642
643 static const amd64_umask_t amd64_fam15h_page_splintering[]={
644    { .uname  = "GUEST_LARGER",
645      .udesc  = "Guest page size is larger than host page size when nested paging is enabled",
646      .ucode = 0x1,
647    },
648    { .uname  = "MTRR_MISMATCH",
649      .udesc  = "Splintering due to MTRRs, IORRs, APIC, TOMs or other special address region",
650      .ucode = 0x2,
651    },
652    { .uname  = "HOST_LARGER",
653      .udesc  = "Host page size is larger than the guest page size",
654      .ucode = 0x4,
655    },
656    { .uname  = "ALL",
657      .udesc  = "All sub-events selected",
658      .ucode = 0x7,
659      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
660    },
661 };
662
663 static const amd64_umask_t amd64_fam15h_l1_itlb_miss_and_l2_itlb_miss[]={
664    { .uname  = "4K_PAGE_FETCHES",
665      .udesc  = "Instruction fetches to a 4 KB page",
666      .ucode = 0x1,
667    },
668    { .uname  = "2M_PAGE_FETCHES",
669      .udesc  = "Instruction fetches to a 2 MB page",
670      .ucode = 0x2,
671    },
672    { .uname  = "1G_PAGE_FETCHES",
673      .udesc  = "Instruction fetches to a 1 GB page",
674      .ucode = 0x4,
675    },
676    { .uname  = "ALL",
677      .udesc  = "All sub-events selected",
678      .ucode = 0x7,
679      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
680    },
681 };
682
683 static const amd64_umask_t amd64_fam15h_instruction_cache_invalidated[]={
684    { .uname  = "NON_SMC_PROBE_MISS",
685      .udesc  = "Non-SMC invalidating probe that missed on in-flight instructions",
686      .ucode = 0x1,
687    },
688    { .uname  = "NON_SMC_PROBE_HIT",
689      .udesc  = "Non-SMC invalidating probe that hit on in-flight instructions",
690      .ucode = 0x2,
691    },
692    { .uname  = "SMC_PROBE_MISS",
693      .udesc  = "SMC invalidating probe that missed on in-flight instructions",
694      .ucode = 0x4,
695    },
696    { .uname  = "SMC_PROBE_HIT",
697      .udesc  = "SMC invalidating probe that hit on in-flight instructions",
698      .ucode = 0x8,
699    },
700    { .uname  = "ALL",
701      .udesc  = "All sub-events selected",
702      .ucode = 0xf,
703      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
704    },
705 };
706
707 static const amd64_umask_t amd64_fam15h_retired_mmx_fp_instructions[]={
708    { .uname  = "X87",
709      .udesc  = "X87 instructions",
710      .ucode = 0x1,
711    },
712    { .uname  = "MMX",
713      .udesc  = "MMX(tm) instructions",
714      .ucode = 0x2,
715    },
716    { .uname  = "SSE",
717      .udesc  = "SSE instructions (SSE,SSE2,SSE3,SSSE3,SSE4A,SSE4.1,SSE4.2,AVX,XOP,FMA4)",
718      .ucode = 0x4,
719    },
720    { .uname  = "ALL",
721      .udesc  = "All sub-events selected",
722      .ucode = 0x7,
723      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
724    },
725 };
726
727 static const amd64_umask_t amd64_fam15h_fpu_exceptions[]={
728    { .uname  = "TOTAL_FAULTS",
729      .udesc  = "Total microfaults",
730      .ucode = 0x1,
731    },
732    { .uname  = "TOTAL_TRAPS",
733      .udesc  = "Total microtraps",
734      .ucode = 0x2,
735    },
736    { .uname  = "INT2EXT_FAULTS",
737      .udesc  = "Int2Ext faults",
738      .ucode = 0x4,
739    },
740    { .uname  = "EXT2INT_FAULTS",
741      .udesc  = "Ext2Int faults",
742      .ucode = 0x8,
743    },
744    { .uname  = "BYPASS_FAULTS",
745      .udesc  = "Bypass faults",
746      .ucode = 0x10,
747    },
748    { .uname  = "ALL",
749      .udesc  = "All sub-events selected",
750      .ucode = 0x1f,
751      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
752    },
753 };
754
755 static const amd64_umask_t amd64_fam15h_ibs_ops_tagged[]={
756    { .uname  = "TAGGED",
757      .udesc  = "Number of ops tagged by IBS",
758      .ucode = 0x1,
759    },
760    { .uname  = "RETIRED",
761      .udesc  = "Number of ops tagged by IBS that retired",
762      .ucode = 0x2,
763    },
764    { .uname  = "IGNORED",
765      .udesc  = "Number of times an op could not be tagged by IBS because of a previous tagged op that has not retired",
766      .ucode = 0x4,
767    },
768    { .uname  = "ALL",
769      .udesc  = "All sub-events selected",
770      .ucode = 0x7,
771      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
772    },
773 };
774
775 static const amd64_umask_t amd64_fam15h_ls_dispatch[]={
776    { .uname  = "LOADS",
777      .udesc  = "Loads",
778      .ucode = 0x1,
779    },
780    { .uname  = "STORES",
781      .udesc  = "Stores",
782      .ucode = 0x2,
783    },
784    { .uname  = "LOAD_OP_STORES",
785      .udesc  = "Load-op-Stores",
786      .ucode = 0x4,
787    },
788    { .uname  = "ALL",
789      .udesc  = "All sub-events selected",
790      .ucode = 0x7,
791      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
792    },
793 };
794
795 static const amd64_umask_t amd64_fam15h_l2_prefetcher_trigger_events[]={
796    { .uname  = "LOAD_L1_MISS_SEEN_BY_PREFETCHER",
797      .udesc  = "Load L1 miss seen by prefetcher",
798      .ucode = 0x1,
799    },
800    { .uname  = "STORE_L1_MISS_SEEN_BY_PREFETCHER",
801      .udesc  = "Store L1 miss seen by prefetcher",
802      .ucode = 0x2,
803    },
804    { .uname  = "ALL",
805      .udesc  = "All sub-events selected",
806      .ucode = 0x3,
807      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
808    },
809 };
810
811 static const amd64_umask_t amd64_fam15h_dram_accesses[]={
812    { .uname = "DCT0_PAGE_HIT",
813      .udesc = "DCT0 Page hit",
814      .ucode = 0x1,
815    },
816    { .uname = "DCT0_PAGE_MISS",
817      .udesc = "DCT0 Page Miss",
818      .ucode = 0x2,
819    },
820    { .uname = "DCT0_PAGE_CONFLICT",
821      .udesc = "DCT0 Page Conflict",
822      .ucode = 0x4,
823    },
824    { .uname = "DCT1_PAGE_HIT",
825      .udesc = "DCT1 Page hit",
826      .ucode = 0x8,
827    },
828    { .uname = "DCT1_PAGE_MISS",
829      .udesc = "DCT1 Page Miss",
830      .ucode = 0x10,
831    },
832    { .uname = "DCT1_PAGE_CONFLICT",
833      .udesc = "DCT1 Page Conflict",
834      .ucode = 0x20,
835    },
836    { .uname  = "ALL",
837      .udesc  = "All sub-events selected",
838      .ucode = 0x3f,
839      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
840    },
841 };
842
843 static const amd64_umask_t amd64_fam15h_dram_controller_page_table_overflows[]={
844    { .uname = "DCT0_PAGE_TABLE_OVERFLOW",
845      .udesc = "DCT0 Page Table Overflow",
846      .ucode = 0x1,
847    },
848    { .uname = "DCT1_PAGE_TABLE_OVERFLOW",
849      .udesc = "DCT1 Page Table Overflow",
850      .ucode = 0x2,
851    },
852    { .uname  = "ALL",
853      .udesc  = "All sub-events selected",
854      .ucode  = 0x3,
855      .uflags = AMD64_FL_NCOMBO | AMD64_FL_DFL,
856    },
857 };
858
859 static const amd64_umask_t amd64_fam15h_memory_controller_dram_command_slots_missed[]={
860    { .uname = "DCT0_COMMAND_SLOTS_MISSED",
861      .udesc = "DCT0 Command Slots Missed (in MemClks)",
862      .ucode = 0x1,
863    },
864    { .uname = "DCT1_COMMAND_SLOTS_MISSED",
865      .udesc = "DCT1 Command Slots Missed (in MemClks)",
866      .ucode = 0x2,
867    },
868    { .uname  = "ALL",
869      .udesc  = "All sub-events selected",
870      .ucode  = 0x3,
871      .uflags = AMD64_FL_NCOMBO | AMD64_FL_DFL,
872    },
873 };
874
875 static const amd64_umask_t amd64_fam15h_memory_controller_turnarounds[]={
876    { .uname = "DCT0_DIMM_TURNAROUND",
877      .udesc = "DCT0 DIMM (chip select) turnaround",
878      .ucode = 0x1,
879    },
880    { .uname = "DCT0_READ_WRITE_TURNAROUND",
881      .udesc = "DCT0 Read to write turnaround",
882      .ucode = 0x2,
883    },
884    { .uname = "DCT0_WRITE_READ_TURNAROUND",
885      .udesc = "DCT0 Write to read turnaround",
886      .ucode = 0x4,
887    },
888    { .uname = "DCT1_DIMM_TURNAROUND",
889      .udesc = "DCT1 DIMM (chip select) turnaround",
890      .ucode = 0x8,
891    },
892    { .uname = "DCT1_READ_WRITE_TURNAROUND",
893      .udesc = "DCT1 Read to write turnaround",
894      .ucode = 0x10,
895    },
896    { .uname = "DCT1_WRITE_READ_TURNAROUND",
897      .udesc = "DCT1 Write to read turnaround",
898      .ucode = 0x20,
899    },
900    { .uname  = "ALL",
901      .udesc  = "All sub-events selected",
902      .ucode  = 0x3f,
903      .uflags = AMD64_FL_NCOMBO | AMD64_FL_DFL,
904    },
905 };
906
907 static const amd64_umask_t amd64_fam15h_memory_controller_bypass_counter_saturation[]={
908    { .uname = "MEMORY_CONTROLLER_HIGH_PRIORITY_BYPASS",
909      .udesc = "Memory controller high priority bypass",
910      .ucode = 0x1,
911    },
912    { .uname = "MEMORY_CONTROLLER_MEDIUM_PRIORITY_BYPASS",
913      .udesc = "Memory controller medium priority bypass",
914      .ucode = 0x2,
915    },
916    { .uname = "DCT0_DCQ_BYPASS",
917      .udesc = "DCT0 DCQ bypass",
918      .ucode = 0x4,
919    },
920    { .uname = "DCT1_DCQ_BYPASS",
921      .udesc = "DCT1 DCQ bypass",
922      .ucode = 0x8,
923    },
924    { .uname  = "ALL",
925      .udesc  = "All sub-events selected",
926      .ucode  = 0xf,
927      .uflags = AMD64_FL_NCOMBO | AMD64_FL_DFL,
928    },
929 };
930
931 static const amd64_umask_t amd64_fam15h_thermal_status[]={
932    { .uname = "NUM_HTC_TRIP_POINT_CROSSED",
933      .udesc = "Number of times the HTC trip point is crossed",
934      .ucode = 0x4,
935    },
936    { .uname = "NUM_CLOCKS_HTC_PSTATE_INACTIVE",
937      .udesc = "Number of clocks HTC P-state is inactive",
938      .ucode = 0x20,
939    },
940    { .uname = "NUM_CLOCKS_HTC_PSTATE_ACTIVE",
941      .udesc = "Number of clocks HTC P-state is active",
942      .ucode = 0x40,
943    },
944    { .uname  = "ALL",
945      .udesc  = "All sub-events selected",
946      .ucode = 0x64,
947      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
948    },
949 };
950
951 static const amd64_umask_t amd64_fam15h_cpu_io_requests_to_memory_io[]={
952    { .uname = "REMOTE_IO_TO_LOCAL_IO",
953      .udesc = "Remote IO to Local IO",
954      .ucode = 0x61,
955      .uflags= AMD64_FL_NCOMBO,
956    },
957    { .uname = "REMOTE_CPU_TO_LOCAL_IO",
958      .udesc = "Remote CPU to Local IO",
959      .ucode = 0x64,
960      .uflags= AMD64_FL_NCOMBO,
961    },
962    { .uname = "LOCAL_IO_TO_REMOTE_IO",
963      .udesc = "Local IO to Remote IO",
964      .ucode = 0x91,
965      .uflags= AMD64_FL_NCOMBO,
966    },
967    { .uname = "LOCAL_IO_TO_REMOTE_MEM",
968      .udesc = "Local IO to Remote Mem",
969      .ucode = 0x92,
970      .uflags= AMD64_FL_NCOMBO,
971    },
972    { .uname = "LOCAL_CPU_TO_REMOTE_IO",
973      .udesc = "Local CPU to Remote IO",
974      .ucode = 0x94,
975      .uflags= AMD64_FL_NCOMBO,
976    },
977    { .uname = "LOCAL_CPU_TO_REMOTE_MEM",
978      .udesc = "Local CPU to Remote Mem",
979      .ucode = 0x98,
980      .uflags= AMD64_FL_NCOMBO,
981    },
982    { .uname = "LOCAL_IO_TO_LOCAL_IO",
983      .udesc = "Local IO to Local IO",
984      .ucode = 0xa1,
985      .uflags= AMD64_FL_NCOMBO,
986    },
987    { .uname = "LOCAL_IO_TO_LOCAL_MEM",
988      .udesc = "Local IO to Local Mem",
989      .ucode = 0xa2,
990      .uflags= AMD64_FL_NCOMBO,
991    },
992    { .uname = "LOCAL_CPU_TO_LOCAL_IO",
993      .udesc = "Local CPU to Local IO",
994      .ucode = 0xa4,
995      .uflags= AMD64_FL_NCOMBO,
996    },
997    { .uname = "LOCAL_CPU_TO_LOCAL_MEM",
998      .udesc = "Local CPU to Local Mem",
999      .ucode = 0xa8,
1000      .uflags= AMD64_FL_NCOMBO,
1001    },
1002 };
1003
1004 static const amd64_umask_t amd64_fam15h_cache_block_commands[]={
1005    { .uname = "VICTIM_BLOCK",
1006      .udesc = "Victim Block (Writeback)",
1007      .ucode = 0x1,
1008    },
1009    { .uname = "READ_BLOCK",
1010      .udesc = "Read Block (Dcache load miss refill)",
1011      .ucode = 0x4,
1012    },
1013    { .uname = "READ_BLOCK_SHARED",
1014      .udesc = "Read Block Shared (Icache refill)",
1015      .ucode = 0x8,
1016    },
1017    { .uname = "READ_BLOCK_MODIFIED",
1018      .udesc = "Read Block Modified (Dcache store miss refill)",
1019      .ucode = 0x10,
1020    },
1021    { .uname = "CHANGE_TO_DIRTY",
1022      .udesc = "Change-to-Dirty (first store to clean block already in cache)",
1023      .ucode = 0x20,
1024    },
1025    { .uname  = "ALL",
1026      .udesc  = "All sub-events selected",
1027      .ucode  = 0x3d,
1028      .uflags = AMD64_FL_NCOMBO | AMD64_FL_DFL,
1029    },
1030 };
1031
1032 static const amd64_umask_t amd64_fam15h_sized_commands[]={
1033    { .uname = "NON-POSTED_SZWR_BYTE",
1034      .udesc = "Non-Posted SzWr Byte (1-32 bytes). Typical Usage: Legacy or mapped IO, typically 1-4 bytes.",
1035      .ucode = 0x1,
1036    },
1037    { .uname = "NON-POSTED_SZWR_DW",
1038      .udesc = "Non-Posted SzWr DW (1-16 dwords). Typical Usage: Legacy or mapped IO, typically 1",
1039      .ucode = 0x2,
1040    },
1041    { .uname = "POSTED_SZWR_BYTE",
1042      .udesc = "Posted SzWr Byte (1-32 bytes). Typical Usage: Subcache-line DMA writes, size varies; also",
1043      .ucode = 0x4,
1044    },
1045    { .uname = "POSTED_SZWR_DW",
1046      .udesc = "Posted SzWr DW (1-16 dwords). Typical Usage: Block-oriented DMA writes, often cache-line",
1047      .ucode = 0x8,
1048    },
1049    { .uname = "SZRD_BYTE",
1050      .udesc = "SzRd Byte (4 bytes). Typical Usage: Legacy or mapped IO.",
1051      .ucode = 0x10,
1052    },
1053    { .uname = "SZRD_DW",
1054      .udesc = "SzRd DW (1-16 dwords). Typical Usage: Block-oriented DMA reads, typically cache-line size.",
1055      .ucode = 0x20,
1056    },
1057    { .uname  = "ALL",
1058      .udesc  = "All sub-events selected",
1059      .ucode = 0x3f,
1060      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
1061    },
1062 };
1063
1064 static const amd64_umask_t amd64_fam15h_probe_responses_and_upstream_requests[]={
1065    { .uname = "PROBE_MISS",
1066      .udesc = "Probe miss",
1067      .ucode = 0x1,
1068    },
1069    { .uname = "PROBE_HIT_CLEAN",
1070      .udesc = "Probe hit clean",
1071      .ucode = 0x2,
1072    },
1073    { .uname = "PROBE_HIT_DIRTY_WITHOUT_MEMORY_CANCEL",
1074      .udesc = "Probe hit dirty without memory cancel (probed by Sized Write or Change2Dirty)",
1075      .ucode = 0x4,
1076    },
1077    { .uname = "PROBE_HIT_DIRTY_WITH_MEMORY_CANCEL",
1078      .udesc = "Probe hit dirty with memory cancel (probed by DMA read or cache refill request)",
1079      .ucode = 0x8,
1080    },
1081    { .uname = "UPSTREAM_DISPLAY_REFRESH_ISOC_READS",
1082      .udesc = "Upstream display refresh/ISOC reads",
1083      .ucode = 0x10,
1084    },
1085    { .uname = "UPSTREAM_NON-DISPLAY_REFRESH_READS",
1086      .udesc = "Upstream non-display refresh reads",
1087      .ucode = 0x20,
1088    },
1089    { .uname = "UPSTREAM_ISOC_WRITES",
1090      .udesc = "Upstream ISOC writes",
1091      .ucode = 0x40,
1092    },
1093    { .uname = "UPSTREAM_NON-ISOC_WRITES",
1094      .udesc = "Upstream non-ISOC writes",
1095      .ucode = 0x80,
1096    },
1097    { .uname  = "ALL",
1098      .udesc  = "All sub-events selected",
1099      .ucode = 0xff,
1100      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
1101    },
1102 };
1103
1104 static const amd64_umask_t amd64_fam15h_gart_events[]={
1105    { .uname = "GART_APERTURE_HIT_ON_ACCESS_FROM_CPU",
1106      .udesc = "GART aperture hit on access from CPU",
1107      .ucode = 0x1,
1108    },
1109    { .uname = "GART_APERTURE_HIT_ON_ACCESS_FROM_IO",
1110      .udesc = "GART aperture hit on access from IO",
1111      .ucode = 0x2,
1112    },
1113    { .uname = "GART_MISS",
1114      .udesc = "GART miss",
1115      .ucode = 0x4,
1116    },
1117    { .uname = "GART_REQUEST_HIT_TABLE_WALK_IN_PROGRESS",
1118      .udesc = "GART Request hit table walk in progress",
1119      .ucode = 0x8,
1120    },
1121    { .uname = "GART_MULTIPLE_TABLE_WALK_IN_PROGRESS",
1122      .udesc = "GART multiple table walk in progress",
1123      .ucode = 0x80,
1124    },
1125    { .uname  = "ALL",
1126      .udesc  = "All sub-events selected",
1127      .ucode = 0x8f,
1128      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
1129    },
1130 };
1131
1132 static const amd64_umask_t amd64_fam15h_link_transmit_bandwidth[]={
1133    { .uname = "COMMAND_DW_SENT",
1134      .udesc = "Command DW sent",
1135      .ucode = 0x1,
1136      .grpid = 0,
1137    },
1138    { .uname = "DATA_DW_SENT",
1139      .udesc = "Data DW sent",
1140      .ucode = 0x2,
1141      .grpid = 0,
1142    },
1143    { .uname = "BUFFER_RELEASE_DW_SENT",
1144      .udesc = "Buffer release DW sent",
1145      .ucode = 0x4,
1146      .grpid = 0,
1147    },
1148    { .uname = "NOP_DW_SENT",
1149      .udesc = "NOP DW sent (idle)",
1150      .ucode = 0x8,
1151      .grpid = 0,
1152    },
1153    { .uname = "ADDRESS_DW_SENT",
1154      .udesc = "Address (including extensions) DW sent",
1155      .ucode = 0x10,
1156      .grpid = 0,
1157    },
1158    { .uname = "PER_PACKET_CRC_SENT",
1159      .udesc = "Per packet CRC sent",
1160      .ucode = 0x20,
1161      .grpid = 0,
1162    },
1163    { .uname  = "ALL",
1164      .udesc  = "All sub-events selected",
1165      .ucode = 0x3f,
1166      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
1167      .grpid = 0,
1168    },
1169    { .uname = "SUBLINK_1",
1170      .udesc = "When links are unganged, enable this umask to select sublink 1",
1171      .ucode = 0x80,
1172      .grpid = 1,
1173      .uflags= AMD64_FL_NCOMBO,
1174    },
1175    { .uname = "SUBLINK_0",
1176      .udesc = "When links are unganged, enable this umask to select sublink 0 (default when links ganged)",
1177      .ucode = 0x00,
1178      .grpid = 1,
1179      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
1180    },
1181
1182
1183 };
1184
1185 static const amd64_umask_t amd64_fam15h_cpu_to_dram_requests_to_target_node[]={
1186    { .uname = "LOCAL_TO_NODE_0",
1187      .udesc = "From Local node to Node 0",
1188      .ucode = 0x1,
1189    },
1190    { .uname = "LOCAL_TO_NODE_1",
1191      .udesc = "From Local node to Node 1",
1192      .ucode = 0x2,
1193    },
1194    { .uname = "LOCAL_TO_NODE_2",
1195      .udesc = "From Local node to Node 2",
1196      .ucode = 0x4,
1197    },
1198    { .uname = "LOCAL_TO_NODE_3",
1199      .udesc = "From Local node to Node 3",
1200      .ucode = 0x8,
1201    },
1202    { .uname = "LOCAL_TO_NODE_4",
1203      .udesc = "From Local node to Node 4",
1204      .ucode = 0x10,
1205    },
1206    { .uname = "LOCAL_TO_NODE_5",
1207      .udesc = "From Local node to Node 5",
1208      .ucode = 0x20,
1209    },
1210    { .uname = "LOCAL_TO_NODE_6",
1211      .udesc = "From Local node to Node 6",
1212      .ucode = 0x40,
1213    },
1214    { .uname = "LOCAL_TO_NODE_7",
1215      .udesc = "From Local node to Node 7",
1216      .ucode = 0x80,
1217    },
1218    { .uname  = "ALL",
1219      .udesc  = "All sub-events selected",
1220      .ucode = 0xff,
1221      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
1222    },
1223 };
1224
1225 static const amd64_umask_t amd64_fam15h_io_to_dram_requests_to_target_node[]={
1226    { .uname = "LOCAL_TO_NODE_0",
1227      .udesc = "From Local node to Node 0",
1228      .ucode = 0x1,
1229    },
1230    { .uname = "LOCAL_TO_NODE_1",
1231      .udesc = "From Local node to Node 1",
1232      .ucode = 0x2,
1233    },
1234    { .uname = "LOCAL_TO_NODE_2",
1235      .udesc = "From Local node to Node 2",
1236      .ucode = 0x4,
1237    },
1238    { .uname = "LOCAL_TO_NODE_3",
1239      .udesc = "From Local node to Node 3",
1240      .ucode = 0x8,
1241    },
1242    { .uname = "LOCAL_TO_NODE_4",
1243      .udesc = "From Local node to Node 4",
1244      .ucode = 0x10,
1245    },
1246    { .uname = "LOCAL_TO_NODE_5",
1247      .udesc = "From Local node to Node 5",
1248      .ucode = 0x20,
1249    },
1250    { .uname = "LOCAL_TO_NODE_6",
1251      .udesc = "From Local node to Node 6",
1252      .ucode = 0x40,
1253    },
1254    { .uname = "LOCAL_TO_NODE_7",
1255      .udesc = "From Local node to Node 7",
1256      .ucode = 0x80,
1257    },
1258    { .uname  = "ALL",
1259      .udesc  = "All sub-events selected",
1260      .ucode = 0xff,
1261      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
1262    },
1263 };
1264
1265 static const amd64_umask_t amd64_fam15h_cpu_read_command_requests_to_target_node_0_3[]={
1266    { .uname = "READ_BLOCK_LOCAL_TO_NODE_0",
1267      .udesc = "Read block From Local node to Node 0",
1268      .ucode = 0x11,
1269      .uflags= AMD64_FL_NCOMBO,
1270    },
1271    { .uname = "READ_BLOCK_SHARED_LOCAL_TO_NODE_0",
1272      .udesc = "Read block shared From Local node to Node 0",
1273      .ucode = 0x12,
1274      .uflags= AMD64_FL_NCOMBO,
1275    },
1276    { .uname = "READ_BLOCK_MODIFIED_LOCAL_TO_NODE_0",
1277      .udesc = "Read block modified From Local node to Node 0",
1278      .ucode = 0x14,
1279      .uflags= AMD64_FL_NCOMBO,
1280    },
1281    { .uname = "CHANGE_TO_DIRTY_LOCAL_TO_NODE_0",
1282      .udesc = "Change-to-Dirty From Local node to Node 0",
1283      .ucode = 0x18,
1284      .uflags= AMD64_FL_NCOMBO,
1285    },
1286    { .uname = "READ_BLOCK_LOCAL_TO_NODE_1",
1287      .udesc = "Read block From Local node to Node 1",
1288      .ucode = 0x21,
1289      .uflags= AMD64_FL_NCOMBO,
1290    },
1291    { .uname = "READ_BLOCK_SHARED_LOCAL_TO_NODE_1",
1292      .udesc = "Read block shared From Local node to Node 1",
1293      .ucode = 0x22,
1294      .uflags= AMD64_FL_NCOMBO,
1295    },
1296    { .uname = "READ_BLOCK_MODIFIED_LOCAL_TO_NODE_1",
1297      .udesc = "Read block modified From Local node to Node 1",
1298      .ucode = 0x24,
1299      .uflags= AMD64_FL_NCOMBO,
1300    },
1301    { .uname = "CHANGE_TO_DIRTY_LOCAL_TO_NODE_1",
1302      .udesc = "Change-to-Dirty From Local node to Node 1",
1303      .ucode = 0x28,
1304      .uflags= AMD64_FL_NCOMBO,
1305    },
1306    { .uname = "READ_BLOCK_LOCAL_TO_NODE_2",
1307      .udesc = "Read block From Local node to Node 2",
1308      .ucode = 0x41,
1309      .uflags= AMD64_FL_NCOMBO,
1310    },
1311    { .uname = "READ_BLOCK_SHARED_LOCAL_TO_NODE_2",
1312      .udesc = "Read block shared From Local node to Node 2",
1313      .ucode = 0x42,
1314      .uflags= AMD64_FL_NCOMBO,
1315    },
1316    { .uname = "READ_BLOCK_MODIFIED_LOCAL_TO_NODE_2",
1317      .udesc = "Read block modified From Local node to Node 2",
1318      .ucode = 0x44,
1319      .uflags= AMD64_FL_NCOMBO,
1320    },
1321    { .uname = "CHANGE_TO_DIRTY_LOCAL_TO_NODE_2",
1322      .udesc = "Change-to-Dirty From Local node to Node 2",
1323      .ucode = 0x48,
1324      .uflags= AMD64_FL_NCOMBO,
1325    },
1326    { .uname = "READ_BLOCK_LOCAL_TO_NODE_3",
1327      .udesc = "Read block From Local node to Node 3",
1328      .ucode = 0x81,
1329      .uflags= AMD64_FL_NCOMBO,
1330    },
1331    { .uname = "READ_BLOCK_SHARED_LOCAL_TO_NODE_3",
1332      .udesc = "Read block shared From Local node to Node 3",
1333      .ucode = 0x82,
1334      .uflags= AMD64_FL_NCOMBO,
1335    },
1336    { .uname = "READ_BLOCK_MODIFIED_LOCAL_TO_NODE_3",
1337      .udesc = "Read block modified From Local node to Node 3",
1338      .ucode = 0x84,
1339      .uflags= AMD64_FL_NCOMBO,
1340    },
1341    { .uname = "CHANGE_TO_DIRTY_LOCAL_TO_NODE_3",
1342      .udesc = "Change-to-Dirty From Local node to Node 3",
1343      .ucode = 0x88,
1344      .uflags= AMD64_FL_NCOMBO,
1345    },
1346    { .uname  = "ALL",
1347      .udesc  = "All sub-events selected",
1348      .ucode = 0xff,
1349      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
1350    },
1351 };
1352
1353 static const amd64_umask_t amd64_fam15h_cpu_read_command_requests_to_target_node_4_7[]={
1354    { .uname = "READ_BLOCK_LOCAL_TO_NODE_4",
1355      .udesc = "Read block From Local node to Node 4",
1356      .ucode = 0x11,
1357      .uflags= AMD64_FL_NCOMBO,
1358    },
1359    { .uname = "READ_BLOCK_SHARED_LOCAL_TO_NODE_4",
1360      .udesc = "Read block shared From Local node to Node 4",
1361      .ucode = 0x12,
1362      .uflags= AMD64_FL_NCOMBO,
1363    },
1364    { .uname = "READ_BLOCK_MODIFIED_LOCAL_TO_NODE_4",
1365      .udesc = "Read block modified From Local node to Node 4",
1366      .ucode = 0x14,
1367      .uflags= AMD64_FL_NCOMBO,
1368    },
1369    { .uname = "CHANGE_TO_DIRTY_LOCAL_TO_NODE_4",
1370      .udesc = "Change-to-Dirty From Local node to Node 4",
1371      .ucode = 0x18,
1372      .uflags= AMD64_FL_NCOMBO,
1373    },
1374    { .uname = "READ_BLOCK_LOCAL_TO_NODE_5",
1375      .udesc = "Read block From Local node to Node 5",
1376      .ucode = 0x21,
1377      .uflags= AMD64_FL_NCOMBO,
1378    },
1379    { .uname = "READ_BLOCK_SHARED_LOCAL_TO_NODE_5",
1380      .udesc = "Read block shared From Local node to Node 5",
1381      .ucode = 0x22,
1382      .uflags= AMD64_FL_NCOMBO,
1383    },
1384    { .uname = "READ_BLOCK_MODIFIED_LOCAL_TO_NODE_5",
1385      .udesc = "Read block modified From Local node to Node 5",
1386      .ucode = 0x24,
1387      .uflags= AMD64_FL_NCOMBO,
1388    },
1389    { .uname = "CHANGE_TO_DIRTY_LOCAL_TO_NODE_5",
1390      .udesc = "Change-to-Dirty From Local node to Node 5",
1391      .ucode = 0x28,
1392      .uflags= AMD64_FL_NCOMBO,
1393    },
1394    { .uname = "READ_BLOCK_LOCAL_TO_NODE_6",
1395      .udesc = "Read block From Local node to Node 6",
1396      .ucode = 0x41,
1397      .uflags= AMD64_FL_NCOMBO,
1398    },
1399    { .uname = "READ_BLOCK_SHARED_LOCAL_TO_NODE_6",
1400      .udesc = "Read block shared From Local node to Node 6",
1401      .ucode = 0x42,
1402      .uflags= AMD64_FL_NCOMBO,
1403    },
1404    { .uname = "READ_BLOCK_MODIFIED_LOCAL_TO_NODE_6",
1405      .udesc = "Read block modified From Local node to Node 6",
1406      .ucode = 0x44,
1407      .uflags= AMD64_FL_NCOMBO,
1408    },
1409    { .uname = "CHANGE_TO_DIRTY_LOCAL_TO_NODE_6",
1410      .udesc = "Change-to-Dirty From Local node to Node 6",
1411      .ucode = 0x48,
1412      .uflags= AMD64_FL_NCOMBO,
1413    },
1414    { .uname = "READ_BLOCK_LOCAL_TO_NODE_7",
1415      .udesc = "Read block From Local node to Node 7",
1416      .ucode = 0x81,
1417      .uflags= AMD64_FL_NCOMBO,
1418    },
1419    { .uname = "READ_BLOCK_SHARED_LOCAL_TO_NODE_7",
1420      .udesc = "Read block shared From Local node to Node 7",
1421      .ucode = 0x82,
1422      .uflags= AMD64_FL_NCOMBO,
1423    },
1424    { .uname = "READ_BLOCK_MODIFIED_LOCAL_TO_NODE_7",
1425      .udesc = "Read block modified From Local node to Node 7",
1426      .ucode = 0x84,
1427      .uflags= AMD64_FL_NCOMBO,
1428    },
1429    { .uname = "CHANGE_TO_DIRTY_LOCAL_TO_NODE_7",
1430      .udesc = "Change-to-Dirty From Local node to Node 7",
1431      .ucode = 0x88,
1432      .uflags= AMD64_FL_NCOMBO,
1433    },
1434    { .uname  = "ALL",
1435      .udesc  = "All sub-events selected",
1436      .ucode = 0xff,
1437      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
1438    },
1439 };
1440
1441 static const amd64_umask_t amd64_fam15h_cpu_command_requests_to_target_node[]={
1442    { .uname = "READ_SIZED_LOCAL_TO_NODE_0",
1443      .udesc = "Read Sized From Local node to Node 0",
1444      .ucode = 0x11,
1445      .uflags= AMD64_FL_NCOMBO,
1446    },
1447    { .uname = "WRITE_SIZED_LOCAL_TO_NODE_0",
1448      .udesc = "Write Sized From Local node to Node 0",
1449      .ucode = 0x12,
1450      .uflags= AMD64_FL_NCOMBO,
1451    },
1452    { .uname = "VICTIM_BLOCK_LOCAL_TO_NODE_0",
1453      .udesc = "Victim Block From Local node to Node 0",
1454      .ucode = 0x14,
1455      .uflags= AMD64_FL_NCOMBO,
1456    },
1457    { .uname = "READ_SIZED_LOCAL_TO_NODE_1",
1458      .udesc = "Read Sized From Local node to Node 1",
1459      .ucode = 0x21,
1460      .uflags= AMD64_FL_NCOMBO,
1461    },
1462    { .uname = "WRITE_SIZED_LOCAL_TO_NODE_1",
1463      .udesc = "Write Sized From Local node to Node 1",
1464      .ucode = 0x22,
1465      .uflags= AMD64_FL_NCOMBO,
1466    },
1467    { .uname = "VICTIM_BLOCK_LOCAL_TO_NODE_1",
1468      .udesc = "Victim Block From Local node to Node 1",
1469      .ucode = 0x24,
1470      .uflags= AMD64_FL_NCOMBO,
1471    },
1472    { .uname = "READ_SIZED_LOCAL_TO_NODE_2",
1473      .udesc = "Read Sized From Local node to Node 2",
1474      .ucode = 0x41,
1475      .uflags= AMD64_FL_NCOMBO,
1476    },
1477    { .uname = "WRITE_SIZED_LOCAL_TO_NODE_2",
1478      .udesc = "Write Sized From Local node to Node 2",
1479      .ucode = 0x42,
1480      .uflags= AMD64_FL_NCOMBO,
1481    },
1482    { .uname = "VICTIM_BLOCK_LOCAL_TO_NODE_2",
1483      .udesc = "Victim Block From Local node to Node 2",
1484      .ucode = 0x44,
1485      .uflags= AMD64_FL_NCOMBO,
1486    },
1487    { .uname = "READ_SIZED_LOCAL_TO_NODE_3",
1488      .udesc = "Read Sized From Local node to Node 3",
1489      .ucode = 0x81,
1490      .uflags= AMD64_FL_NCOMBO,
1491    },
1492    { .uname = "WRITE_SIZED_LOCAL_TO_NODE_3",
1493      .udesc = "Write Sized From Local node to Node 3",
1494      .ucode = 0x82,
1495      .uflags= AMD64_FL_NCOMBO,
1496    },
1497    { .uname = "VICTIM_BLOCK_LOCAL_TO_NODE_3",
1498      .udesc = "Victim Block From Local node to Node 3",
1499      .ucode = 0x84,
1500      .uflags= AMD64_FL_NCOMBO,
1501    },
1502    { .uname = "READ_SIZED_LOCAL_TO_NODE_4",
1503      .udesc = "Read Sized From Local node to Node 4",
1504      .ucode = 0x19,
1505      .uflags= AMD64_FL_NCOMBO,
1506    },
1507    { .uname = "WRITE_SIZED_LOCAL_TO_NODE_4",
1508      .udesc = "Write Sized From Local node to Node 4",
1509      .ucode = 0x1a,
1510      .uflags= AMD64_FL_NCOMBO,
1511    },
1512    { .uname = "VICTIM_BLOCK_LOCAL_TO_NODE_4",
1513      .udesc = "Victim Block From Local node to Node 4",
1514      .ucode = 0x1c,
1515      .uflags= AMD64_FL_NCOMBO,
1516    },
1517    { .uname = "READ_SIZED_LOCAL_TO_NODE_5",
1518      .udesc = "Read Sized From Local node to Node 5",
1519      .ucode = 0x29,
1520      .uflags= AMD64_FL_NCOMBO,
1521    },
1522    { .uname = "WRITE_SIZED_LOCAL_TO_NODE_5",
1523      .udesc = "Write Sized From Local node to Node 5",
1524      .ucode = 0x2a,
1525      .uflags= AMD64_FL_NCOMBO,
1526    },
1527    { .uname = "VICTIM_BLOCK_LOCAL_TO_NODE_5",
1528      .udesc = "Victim Block From Local node to Node 5",
1529      .ucode = 0x2c,
1530      .uflags= AMD64_FL_NCOMBO,
1531    },
1532    { .uname = "READ_SIZED_LOCAL_TO_NODE_6",
1533      .udesc = "Read Sized From Local node to Node 6",
1534      .ucode = 0x49,
1535      .uflags= AMD64_FL_NCOMBO,
1536    },
1537    { .uname = "WRITE_SIZED_LOCAL_TO_NODE_6",
1538      .udesc = "Write Sized From Local node to Node 6",
1539      .ucode = 0x4a,
1540      .uflags= AMD64_FL_NCOMBO,
1541    },
1542    { .uname = "VICTIM_BLOCK_LOCAL_TO_NODE_6",
1543      .udesc = "Victim Block From Local node to Node 6",
1544      .ucode = 0x4c,
1545      .uflags= AMD64_FL_NCOMBO,
1546    },
1547    { .uname = "READ_SIZED_LOCAL_TO_NODE_7",
1548      .udesc = "Read Sized From Local node to Node 7",
1549      .ucode = 0x89,
1550      .uflags= AMD64_FL_NCOMBO,
1551    },
1552    { .uname = "WRITE_SIZED_LOCAL_TO_NODE_7",
1553      .udesc = "Write Sized From Local node to Node 7",
1554      .ucode = 0x8a,
1555      .uflags= AMD64_FL_NCOMBO,
1556    },
1557    { .uname = "VICTIM_BLOCK_LOCAL_TO_NODE_7",
1558      .udesc = "Victim Block From Local node to Node 7",
1559      .ucode = 0x8c,
1560      .uflags= AMD64_FL_NCOMBO,
1561    },
1562    { .uname  = "ALL_LOCAL_TO_NODE_0_3",
1563      .udesc  = "All From Local node to Node 0-3",
1564      .ucode = 0xf7,
1565      .uflags= AMD64_FL_NCOMBO,
1566    },
1567    { .uname  = "ALL_LOCAL_TO_NODE_4_7",
1568      .udesc  = "All From Local node to Node 4-7",
1569      .ucode = 0xff,
1570      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
1571    },
1572 };
1573
1574 static const amd64_umask_t amd64_fam15h_request_cache_status_0[]={
1575    { .uname = "PROBE_HIT_S",
1576      .udesc = "Probe Hit S",
1577      .ucode = 0x1,
1578    },
1579    { .uname = "PROBE_HIT_E",
1580      .udesc = "Probe Hit E",
1581      .ucode = 0x2,
1582    },
1583    { .uname = "PROBE_HIT_MUW_OR_O",
1584      .udesc = "Probe Hit MuW or O",
1585      .ucode = 0x4,
1586    },
1587    { .uname = "PROBE_HIT_M",
1588      .udesc = "Probe Hit M",
1589      .ucode = 0x8,
1590    },
1591    { .uname = "PROBE_MISS",
1592      .udesc = "Probe Miss",
1593      .ucode = 0x10,
1594    },
1595    { .uname = "DIRECTED_PROBE",
1596      .udesc = "Directed Probe",
1597      .ucode = 0x20,
1598    },
1599    { .uname = "TRACK_CACHE_STAT_FOR_RDBLK",
1600      .udesc = "Track Cache Stat for RdBlk",
1601      .ucode = 0x40,
1602    },
1603    { .uname = "TRACK_CACHE_STAT_FOR_RDBLKS",
1604      .udesc = "Track Cache Stat for RdBlkS",
1605      .ucode = 0x80,
1606    },
1607    { .uname  = "ALL",
1608      .udesc  = "All sub-events selected",
1609      .ucode = 0xff,
1610      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
1611    },
1612 };
1613
1614 static const amd64_umask_t amd64_fam15h_request_cache_status_1[]={
1615    { .uname = "PROBE_HIT_S",
1616      .udesc = "Probe Hit S",
1617      .ucode = 0x1,
1618    },
1619    { .uname = "PROBE_HIT_E",
1620      .udesc = "Probe Hit E",
1621      .ucode = 0x2,
1622    },
1623    { .uname = "PROBE_HIT_MUW_OR_O",
1624      .udesc = "Probe Hit MuW or O",
1625      .ucode = 0x4,
1626    },
1627    { .uname = "PROBE_HIT_M",
1628      .udesc = "Probe Hit M",
1629      .ucode = 0x8,
1630    },
1631    { .uname = "PROBE_MISS",
1632      .udesc = "Probe Miss",
1633      .ucode = 0x10,
1634    },
1635    { .uname = "DIRECTED_PROBE",
1636      .udesc = "Directed Probe",
1637      .ucode = 0x20,
1638    },
1639    { .uname = "TRACK_CACHE_STAT_FOR_CHGTODIRTY",
1640      .udesc = "Track Cache Stat for ChgToDirty",
1641      .ucode = 0x40,
1642    },
1643    { .uname = "TRACK_CACHE_STAT_FOR_RDBLKM",
1644      .udesc = "Track Cache Stat for RdBlkM",
1645      .ucode = 0x80,
1646    },
1647    { .uname  = "ALL",
1648      .udesc  = "All sub-events selected",
1649      .ucode = 0xff,
1650      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
1651    },
1652 };
1653
1654 static const amd64_umask_t amd64_fam15h_memory_controller_requests[]={
1655    { .uname = "WRITE_REQUESTS_TO_DCT",
1656      .udesc = "Write requests sent to the DCT",
1657      .ucode = 0x1,
1658    },
1659    { .uname = "READ_REQUESTS_TO_DCT",
1660      .udesc = "Read requests (including prefetch requests) sent to the DCT",
1661      .ucode = 0x2,
1662    },
1663    { .uname = "PREFETCH_REQUESTS_TO_DCT",
1664      .udesc = "Prefetch requests sent to the DCT",
1665      .ucode = 0x4,
1666    },
1667    { .uname = "32_BYTES_SIZED_WRITES",
1668      .udesc = "32 Bytes Sized Writes",
1669      .ucode = 0x8,
1670    },
1671    { .uname = "64_BYTES_SIZED_WRITES",
1672      .udesc = "64 Bytes Sized Writes",
1673      .ucode = 0x10,
1674    },
1675    { .uname = "32_BYTES_SIZED_READS",
1676      .udesc = "32 Bytes Sized Reads",
1677      .ucode = 0x20,
1678    },
1679    { .uname = "64_BYTE_SIZED_READS",
1680      .udesc = "64 Byte Sized Reads",
1681      .ucode = 0x40,
1682    },
1683    { .uname = "READ_REQUESTS_TO_DCT_WHILE_WRITES_PENDING",
1684      .udesc = "Read requests sent to the DCT while writes requests are pending in the DCT",
1685      .ucode = 0x80,
1686    },
1687    { .uname  = "ALL",
1688      .udesc  = "All sub-events selected",
1689      .ucode = 0xff,
1690      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
1691    },
1692 };
1693
1694 static const amd64_umask_t amd64_fam15h_read_request_to_l3_cache[]={
1695    { .uname = "READ_BLOCK_EXCLUSIVE",
1696      .udesc = "Read Block Exclusive (Data cache read)",
1697      .ucode = 0x1,
1698      .grpid = 0,
1699    },
1700    { .uname = "READ_BLOCK_SHARED",
1701      .udesc = "Read Block Shared (Instruction cache read)",
1702      .ucode = 0x2,
1703      .grpid = 0,
1704    },
1705    { .uname = "READ_BLOCK_MODIFY",
1706      .udesc = "Read Block Modify",
1707      .ucode = 0x4,
1708      .grpid = 0,
1709    },
1710    { .uname = "PREFETCH",
1711      .udesc = "Count prefetches only",
1712      .ucode = 0x8,
1713      .grpid = 0,
1714    },
1715    { .uname  = "READ_BLOCK_ANY",
1716      .udesc  = "Count any read request",
1717      .ucode = 0x7,
1718      .grpid = 0,
1719      .uflags= AMD64_FL_DFL | AMD64_FL_NCOMBO,
1720    },
1721   CORE_SELECT(1),
1722 };
1723
1724 static const amd64_umask_t amd64_fam15h_l3_fills_caused_by_l2_evictions[]={
1725    { .uname = "SHARED",
1726      .udesc = "Shared",
1727      .ucode = 0x1,
1728      .grpid = 0,
1729    },
1730    { .uname = "EXCLUSIVE",
1731      .udesc = "Exclusive",
1732      .ucode = 0x2,
1733      .grpid = 0,
1734    },
1735    { .uname = "OWNED",
1736      .udesc = "Owned",
1737      .ucode = 0x4,
1738      .grpid = 0,
1739    },
1740    { .uname = "MODIFIED",
1741      .udesc = "Modified",
1742      .ucode = 0x8,
1743      .grpid = 0,
1744    },
1745   { .uname  = "ALL",
1746      .udesc  = "All sub-events selected",
1747      .ucode = 0xff,
1748      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
1749      .grpid = 0,
1750    },
1751    CORE_SELECT(1),
1752  };
1753
1754 static const amd64_umask_t amd64_fam15h_l3_evictions[]={
1755    { .uname = "SHARED",
1756      .udesc = "Shared",
1757      .ucode = 0x1,
1758    },
1759    { .uname = "EXCLUSIVE",
1760      .udesc = "Exclusive",
1761      .ucode = 0x2,
1762    },
1763    { .uname = "OWNED",
1764      .udesc = "Owned",
1765      .ucode = 0x4,
1766    },
1767    { .uname = "MODIFIED",
1768      .udesc = "Modified",
1769      .ucode = 0x8,
1770    },
1771    { .uname  = "ALL",
1772      .udesc  = "All sub-events selected",
1773      .ucode = 0xf,
1774      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
1775    },
1776 };
1777
1778 static const amd64_umask_t amd64_fam15h_l3_latency[]={
1779    { .uname = "L3_REQUEST_CYCLE",
1780      .udesc = "L3 Request cycle count.",
1781      .ucode = 0x1,
1782    },
1783    { .uname = "L3_REQUEST",
1784      .udesc = "L3 request count.",
1785      .ucode = 0x2,
1786    },
1787    { .uname  = "ALL",
1788      .udesc  = "All sub-events selected",
1789      .ucode = 0x3,
1790      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
1791    },
1792 };
1793
1794 static const amd64_entry_t amd64_fam15h_pe[]={
1795 { .name    = "DISPATCHED_FPU_OPS",
1796   .desc    = "FPU Pipe Assignment",
1797   .modmsk  = AMD64_FAM15H_ATTRS,
1798   .code    = 0x0,
1799   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_dispatched_fpu_ops),
1800   .ngrp    = 1,
1801   .umasks  = amd64_fam15h_dispatched_fpu_ops,
1802 },
1803 { .name    = "CYCLES_FPU_EMPTY",
1804   .desc    = "FP Scheduler Empty",
1805   .modmsk  = AMD64_FAM15H_ATTRS,
1806   .code    = 0x1,
1807 },
1808 { .name    = "RETIRED_SSE_OPS",
1809   .desc    = "Retired SSE/BNI Ops",
1810   .modmsk  = AMD64_FAM15H_ATTRS,
1811   .code    = 0x3,
1812   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_retired_sse_ops),
1813   .ngrp    = 1,
1814   .umasks  = amd64_fam15h_retired_sse_ops,
1815 },
1816 { .name    = "MOVE_SCALAR_OPTIMIZATION",
1817   .desc    = "Number of Move Elimination and Scalar Op Optimization",
1818   .modmsk  = AMD64_FAM15H_ATTRS,
1819   .code    = 0x4,
1820   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_move_scalar_optimization),
1821   .ngrp    = 1,
1822   .umasks  = amd64_fam15h_move_scalar_optimization,
1823 },
1824 { .name    = "RETIRED_SERIALIZING_OPS",
1825   .desc    = "Retired Serializing Ops",
1826   .modmsk  = AMD64_FAM15H_ATTRS,
1827   .code    = 0x5,
1828   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_retired_serializing_ops),
1829   .ngrp    = 1,
1830   .umasks  = amd64_fam15h_retired_serializing_ops,
1831 },
1832 { .name    = "BOTTOM_EXECUTE_OP",
1833   .desc    = "Number of Cycles that a Bottom-Execute uop is in the FP Scheduler",
1834   .modmsk  = AMD64_FAM15H_ATTRS,
1835   .code    = 0x6,
1836 },
1837 { .name    = "SEGMENT_REGISTER_LOADS",
1838   .desc    = "Segment Register Loads",
1839   .modmsk  = AMD64_FAM15H_ATTRS,
1840   .code    = 0x20,
1841   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_segment_register_loads),
1842   .ngrp    = 1,
1843   .umasks  = amd64_fam15h_segment_register_loads,
1844 },
1845 { .name    = "PIPELINE_RESTART_DUE_TO_SELF_MODIFYING_CODE",
1846   .desc    = "Pipeline Restart Due to Self-Modifying Code",
1847   .modmsk  = AMD64_FAM15H_ATTRS,
1848   .code    = 0x21,
1849 },
1850 { .name    = "PIPELINE_RESTART_DUE_TO_PROBE_HIT",
1851   .desc    = "Pipeline Restart Due to Probe Hit",
1852   .modmsk  = AMD64_FAM15H_ATTRS,
1853   .code    = 0x22,
1854 },
1855 { .name    = "LOAD_Q_STORE_Q_FULL",
1856   .desc    = "Load Queue/Store Queue Full",
1857   .modmsk  = AMD64_FAM15H_ATTRS,
1858   .code    = 0x23,
1859   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_load_q_store_q_full),
1860   .ngrp    = 1,
1861   .umasks  = amd64_fam15h_load_q_store_q_full,
1862 },
1863 { .name    = "LOCKED_OPS",
1864   .desc    = "Locked Operations",
1865   .modmsk  = AMD64_FAM15H_ATTRS,
1866   .code    = 0x24,
1867   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_locked_ops),
1868   .ngrp    = 1,
1869   .umasks  = amd64_fam15h_locked_ops,
1870 },
1871 { .name    = "RETIRED_CLFLUSH_INSTRUCTIONS",
1872   .desc    = "Retired CLFLUSH Instructions",
1873   .modmsk  = AMD64_FAM15H_ATTRS,
1874   .code    = 0x26,
1875 },
1876 { .name    = "RETIRED_CPUID_INSTRUCTIONS",
1877   .desc    = "Retired CPUID Instructions",
1878   .modmsk  = AMD64_FAM15H_ATTRS,
1879   .code    = 0x27,
1880 },
1881 { .name    = "CANCELLED_STORE_TO_LOAD",
1882   .desc    = "Canceled Store to Load Forward Operations",
1883   .modmsk  = AMD64_FAM15H_ATTRS,
1884   .code    = 0x2a,
1885   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_cancelled_store_to_load),
1886   .ngrp    = 1,
1887   .umasks  = amd64_fam15h_cancelled_store_to_load,
1888 },
1889 { .name    = "SMIS_RECEIVED",
1890   .desc    = "SMIs Received",
1891   .modmsk  = AMD64_FAM15H_ATTRS,
1892   .code    = 0x2b,
1893 },
1894 { .name    = "DATA_CACHE_ACCESSES",
1895   .desc    = "Data Cache Accesses",
1896   .modmsk  = AMD64_FAM15H_ATTRS,
1897   .code    = 0x40,
1898 },
1899 { .name    = "DATA_CACHE_MISSES",
1900   .desc    = "Data Cache Misses",
1901   .modmsk  = AMD64_FAM15H_ATTRS,
1902   .code    = 0x41,
1903   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_data_cache_misses),
1904   .ngrp    = 1,
1905   .umasks  = amd64_fam15h_data_cache_misses,
1906 },
1907 { .name    = "DATA_CACHE_REFILLS_FROM_L2_OR_NORTHBRIDGE",
1908   .desc    = "Data Cache Refills from L2 or System",
1909   .modmsk  = AMD64_FAM15H_ATTRS,
1910   .code    = 0x42,
1911   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_data_cache_refills_from_l2_or_northbridge),
1912   .ngrp    = 1,
1913   .umasks  = amd64_fam15h_data_cache_refills_from_l2_or_northbridge,
1914 },
1915 { .name    = "DATA_CACHE_REFILLS_FROM_NORTHBRIDGE",
1916   .desc    = "Data Cache Refills from System",
1917   .modmsk  = AMD64_FAM15H_ATTRS,
1918   .code    = 0x43,
1919 },
1920 { .name    = "UNIFIED_TLB_HIT",
1921   .desc    = "Unified TLB Hit",
1922   .modmsk  = AMD64_FAM15H_ATTRS,
1923   .code    = 0x45,
1924   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_unified_tlb_hit),
1925   .ngrp    = 1,
1926   .umasks  = amd64_fam15h_unified_tlb_hit,
1927 },
1928 { .name    = "UNIFIED_TLB_MISS",
1929   .desc    = "Unified TLB Miss",
1930   .modmsk  = AMD64_FAM15H_ATTRS,
1931   .code    = 0x46,
1932   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_unified_tlb_miss),
1933   .ngrp    = 1,
1934   .umasks  = amd64_fam15h_unified_tlb_miss,
1935 },
1936 { .name    = "MISALIGNED_ACCESSES",
1937   .desc    = "Misaligned Accesses",
1938   .modmsk  = AMD64_FAM15H_ATTRS,
1939   .code    = 0x47,
1940 },
1941 { .name    = "PREFETCH_INSTRUCTIONS_DISPATCHED",
1942   .desc    = "Prefetch Instructions Dispatched",
1943   .modmsk  = AMD64_FAM15H_ATTRS,
1944   .code    = 0x4b,
1945   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_prefetch_instructions_dispatched),
1946   .ngrp    = 1,
1947   .umasks  = amd64_fam15h_prefetch_instructions_dispatched,
1948 },
1949 { .name    = "INEFFECTIVE_SW_PREFETCHES",
1950   .desc    = "Ineffective Software Prefetches",
1951   .modmsk  = AMD64_FAM15H_ATTRS,
1952   .code    = 0x52,
1953   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_ineffective_sw_prefetches),
1954   .ngrp    = 1,
1955   .umasks  = amd64_fam15h_ineffective_sw_prefetches,
1956 },
1957 { .name    = "MEMORY_REQUESTS",
1958   .desc    = "Memory Requests by Type",
1959   .modmsk  = AMD64_FAM15H_ATTRS,
1960   .code    = 0x65,
1961   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_memory_requests),
1962   .ngrp    = 1,
1963   .umasks  = amd64_fam15h_memory_requests,
1964 },
1965 { .name    = "DATA_PREFETCHER",
1966   .desc    = "Data Prefetcher",
1967   .modmsk  = AMD64_FAM15H_ATTRS,
1968   .code    = 0x67,
1969   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_data_prefetcher),
1970   .ngrp    = 1,
1971   .umasks  = amd64_fam15h_data_prefetcher,
1972 },
1973 { .name    = "MAB_REQS",
1974   .desc    = "MAB Requests",
1975   .modmsk  = AMD64_FAM15H_ATTRS,
1976   .code    = 0x68,
1977   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_mab_reqs),
1978   .ngrp    = 1,
1979   .umasks  = amd64_fam15h_mab_reqs,
1980 },
1981 { .name    = "MAB_WAIT",
1982   .desc    = "MAB Wait Cycles",
1983   .modmsk  = AMD64_FAM15H_ATTRS,
1984   .code    = 0x69,
1985   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_mab_reqs),
1986   .ngrp    = 1,
1987   .umasks  = amd64_fam15h_mab_reqs, /* identical to actual umasks list for this event */
1988 },
1989 { .name    = "SYSTEM_READ_RESPONSES",
1990   .desc    = "Response From System on Cache Refills",
1991   .modmsk  = AMD64_FAM15H_ATTRS,
1992   .code    = 0x6c,
1993   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_system_read_responses),
1994   .ngrp    = 1,
1995   .umasks  = amd64_fam15h_system_read_responses,
1996 },
1997 { .name    = "OCTWORD_WRITE_TRANSFERS",
1998   .desc    = "Octwords Written to System",
1999   .modmsk  = AMD64_FAM15H_ATTRS,
2000   .code    = 0x6d,
2001   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_octword_write_transfers),
2002   .ngrp    = 1,
2003   .umasks  = amd64_fam15h_octword_write_transfers,
2004 },
2005 { .name    = "CPU_CLK_UNHALTED",
2006   .desc    = "CPU Clocks not Halted",
2007   .modmsk  = AMD64_FAM15H_ATTRS,
2008   .code    = 0x76,
2009 },
2010 { .name    = "REQUESTS_TO_L2",
2011   .desc    = "Requests to L2 Cache",
2012   .modmsk  = AMD64_FAM15H_ATTRS,
2013   .code    = 0x7d,
2014   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_requests_to_l2),
2015   .ngrp    = 1,
2016   .umasks  = amd64_fam15h_requests_to_l2,
2017 },
2018 { .name    = "L2_CACHE_MISS",
2019   .desc    = "L2 Cache Misses",
2020   .modmsk  = AMD64_FAM15H_ATTRS,
2021   .code    = 0x7e,
2022   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_l2_cache_miss),
2023   .ngrp    = 1,
2024   .umasks  = amd64_fam15h_l2_cache_miss,
2025 },
2026 { .name    = "L2_CACHE_FILL_WRITEBACK",
2027   .desc    = "L2 Fill/Writeback",
2028   .modmsk  = AMD64_FAM15H_ATTRS,
2029   .code    = 0x7f,
2030   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_l2_cache_fill_writeback),
2031   .ngrp    = 1,
2032   .umasks  = amd64_fam15h_l2_cache_fill_writeback,
2033 },
2034 { .name    = "PAGE_SPLINTERING",
2035   .desc    = "Page Splintering",
2036   .modmsk  = AMD64_FAM15H_ATTRS,
2037   .code    = 0x165,
2038   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_page_splintering),
2039   .ngrp    = 1,
2040   .umasks  = amd64_fam15h_page_splintering,
2041 },
2042 { .name    = "INSTRUCTION_CACHE_FETCHES",
2043   .desc    = "Instruction Cache Fetches",
2044   .modmsk  = AMD64_FAM15H_ATTRS,
2045   .code    = 0x80,
2046 },
2047 { .name    = "INSTRUCTION_CACHE_MISSES",
2048   .desc    = "Instruction Cache Misses",
2049   .modmsk  = AMD64_FAM15H_ATTRS,
2050   .code    = 0x81,
2051 },
2052 { .name    = "INSTRUCTION_CACHE_REFILLS_FROM_L2",
2053   .desc    = "Instruction Cache Refills from L2",
2054   .modmsk  = AMD64_FAM15H_ATTRS,
2055   .code    = 0x82,
2056 },
2057 { .name    = "INSTRUCTION_CACHE_REFILLS_FROM_SYSTEM",
2058   .desc    = "Instruction Cache Refills from System",
2059   .modmsk  = AMD64_FAM15H_ATTRS,
2060   .code    = 0x83,
2061 },
2062 { .name    = "L1_ITLB_MISS_AND_L2_ITLB_HIT",
2063   .desc    = "L1 ITLB Miss, L2 ITLB Hit",
2064   .modmsk  = AMD64_FAM15H_ATTRS,
2065   .code    = 0x84,
2066 },
2067 { .name    = "L1_ITLB_MISS_AND_L2_ITLB_MISS",
2068   .desc    = "L1 ITLB Miss, L2 ITLB Miss",
2069   .modmsk  = AMD64_FAM15H_ATTRS,
2070   .code    = 0x85,
2071   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_l1_itlb_miss_and_l2_itlb_miss),
2072   .ngrp    = 1,
2073   .umasks  = amd64_fam15h_l1_itlb_miss_and_l2_itlb_miss,
2074 },
2075 { .name    = "PIPELINE_RESTART_DUE_TO_INSTRUCTION_STREAM_PROBE",
2076   .desc    = "Pipeline Restart Due to Instruction Stream Probe",
2077   .modmsk  = AMD64_FAM15H_ATTRS,
2078   .code    = 0x86,
2079 },
2080 { .name    = "INSTRUCTION_FETCH_STALL",
2081   .desc    = "Instruction Fetch Stall",
2082   .modmsk  = AMD64_FAM15H_ATTRS,
2083   .code    = 0x87,
2084 },
2085 { .name    = "RETURN_STACK_HITS",
2086   .desc    = "Return Stack Hits",
2087   .modmsk  = AMD64_FAM15H_ATTRS,
2088   .code    = 0x88,
2089 },
2090 { .name    = "RETURN_STACK_OVERFLOWS",
2091   .desc    = "Return Stack Overflows",
2092   .modmsk  = AMD64_FAM15H_ATTRS,
2093   .code    = 0x89,
2094 },
2095 { .name    = "INSTRUCTION_CACHE_VICTIMS",
2096   .desc    = "Instruction Cache Victims",
2097   .modmsk  = AMD64_FAM15H_ATTRS,
2098   .code    = 0x8b,
2099 },
2100 { .name    = "INSTRUCTION_CACHE_INVALIDATED",
2101   .desc    = "Instruction Cache Lines Invalidated",
2102   .modmsk  = AMD64_FAM15H_ATTRS,
2103   .code    = 0x8c,
2104   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_instruction_cache_invalidated),
2105   .ngrp    = 1,
2106   .umasks  = amd64_fam15h_instruction_cache_invalidated,
2107 },
2108 { .name    = "ITLB_RELOADS",
2109   .desc    = "ITLB Reloads",
2110   .modmsk  = AMD64_FAM15H_ATTRS,
2111   .code    = 0x99,
2112 },
2113 { .name    = "ITLB_RELOADS_ABORTED",
2114   .desc    = "ITLB Reloads Aborted",
2115   .modmsk  = AMD64_FAM15H_ATTRS,
2116   .code    = 0x9a,
2117 },
2118 { .name    = "RETIRED_INSTRUCTIONS",
2119   .desc    = "Retired Instructions",
2120   .modmsk  = AMD64_FAM15H_ATTRS,
2121   .code    = 0xc0,
2122 },
2123 { .name    = "RETIRED_UOPS",
2124   .desc    = "Retired uops",
2125   .modmsk  = AMD64_FAM15H_ATTRS,
2126   .code    = 0xc1,
2127 },
2128 { .name    = "RETIRED_BRANCH_INSTRUCTIONS",
2129   .desc    = "Retired Branch Instructions",
2130   .modmsk  = AMD64_FAM15H_ATTRS,
2131   .code    = 0xc2,
2132 },
2133 { .name    = "RETIRED_MISPREDICTED_BRANCH_INSTRUCTIONS",
2134   .desc    = "Retired Mispredicted Branch Instructions",
2135   .modmsk  = AMD64_FAM15H_ATTRS,
2136   .code    = 0xc3,
2137 },
2138 { .name    = "RETIRED_TAKEN_BRANCH_INSTRUCTIONS",
2139   .desc    = "Retired Taken Branch Instructions",
2140   .modmsk  = AMD64_FAM15H_ATTRS,
2141   .code    = 0xc4,
2142 },
2143 { .name    = "RETIRED_TAKEN_BRANCH_INSTRUCTIONS_MISPREDICTED",
2144   .desc    = "Retired Taken Branch Instructions Mispredicted",
2145   .modmsk  = AMD64_FAM15H_ATTRS,
2146   .code    = 0xc5,
2147 },
2148 { .name    = "RETIRED_FAR_CONTROL_TRANSFERS",
2149   .desc    = "Retired Far Control Transfers",
2150   .modmsk  = AMD64_FAM15H_ATTRS,
2151   .code    = 0xc6,
2152 },
2153 { .name    = "RETIRED_BRANCH_RESYNCS",
2154   .desc    = "Retired Branch Resyncs",
2155   .modmsk  = AMD64_FAM15H_ATTRS,
2156   .code    = 0xc7,
2157 },
2158 { .name    = "RETIRED_NEAR_RETURNS",
2159   .desc    = "Retired Near Returns",
2160   .modmsk  = AMD64_FAM15H_ATTRS,
2161   .code    = 0xc8,
2162 },
2163 { .name    = "RETIRED_NEAR_RETURNS_MISPREDICTED",
2164   .desc    = "Retired Near Returns Mispredicted",
2165   .modmsk  = AMD64_FAM15H_ATTRS,
2166   .code    = 0xc9,
2167 },
2168 { .name    = "RETIRED_INDIRECT_BRANCHES_MISPREDICTED",
2169   .desc    = "Retired Indirect Branches Mispredicted",
2170   .modmsk  = AMD64_FAM15H_ATTRS,
2171   .code    = 0xca,
2172 },
2173 { .name    = "RETIRED_MMX_FP_INSTRUCTIONS",
2174   .desc    = "Retired MMX/FP Instructions",
2175   .modmsk  = AMD64_FAM15H_ATTRS,
2176   .code    = 0xcb,
2177   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_retired_mmx_fp_instructions),
2178   .ngrp    = 1,
2179   .umasks  = amd64_fam15h_retired_mmx_fp_instructions,
2180 },
2181 { .name    = "INTERRUPTS_MASKED_CYCLES",
2182   .desc    = "Interrupts-Masked Cycles",
2183   .modmsk  = AMD64_FAM15H_ATTRS,
2184   .code    = 0xcd,
2185 },
2186 { .name    = "INTERRUPTS_MASKED_CYCLES_WITH_INTERRUPT_PENDING",
2187   .desc    = "Interrupts-Masked Cycles with Interrupt Pending",
2188   .modmsk  = AMD64_FAM15H_ATTRS,
2189   .code    = 0xce,
2190 },
2191 { .name    = "INTERRUPTS_TAKEN",
2192   .desc    = "Interrupts Taken",
2193   .modmsk  = AMD64_FAM15H_ATTRS,
2194   .code    = 0xcf,
2195 },
2196 { .name    = "DECODER_EMPTY",
2197   .desc    = "Decoder Empty",
2198   .modmsk  = AMD64_FAM15H_ATTRS,
2199   .code    = 0xd0,
2200 },
2201 { .name    = "DISPATCH_STALLS",
2202   .desc    = "Dispatch Stalls",
2203   .modmsk  = AMD64_FAM15H_ATTRS,
2204   .code    = 0xd1,
2205 },
2206 { .name    = "DISPATCH_STALL_FOR_SERIALIZATION",
2207   .desc    = "Microsequencer Stall due to Serialization",
2208   .modmsk  = AMD64_FAM15H_ATTRS,
2209   .code    = 0xd3,
2210 },
2211 { .name    = "DISPATCH_STALL_FOR_RETIRE_QUEUE_FULL",
2212   .desc    = "Dispatch Stall for Instruction Retire Q Full",
2213   .modmsk  = AMD64_FAM15H_ATTRS,
2214   .code    = 0xd5,
2215 },
2216 { .name    = "DISPATCH_STALL_FOR_INT_SCHED_QUEUE_FULL",
2217   .desc    = "Dispatch Stall for Integer Scheduler Queue Full",
2218   .modmsk  = AMD64_FAM15H_ATTRS,
2219   .code    = 0xd6,
2220 },
2221 { .name    = "DISPATCH_STALL_FOR_FPU_FULL",
2222   .desc    = "Dispatch Stall for FP Scheduler Queue Full",
2223   .modmsk  = AMD64_FAM15H_ATTRS,
2224   .code    = 0xd7,
2225 },
2226 { .name    = "DISPATCH_STALL_FOR_LDQ_FULL",
2227   .desc    = "Dispatch Stall for LDQ Full",
2228   .modmsk  = AMD64_FAM15H_ATTRS,
2229   .code    = 0xd8,
2230 },
2231 { .name    = "MICROSEQ_STALL_WAITING_FOR_ALL_QUIET",
2232   .desc    = "Microsequencer Stall Waiting for All Quiet",
2233   .modmsk  = AMD64_FAM15H_ATTRS,
2234   .code    = 0xd9,
2235 },
2236 { .name    = "FPU_EXCEPTIONS",
2237   .desc    = "FPU Exceptions",
2238   .modmsk  = AMD64_FAM15H_ATTRS,
2239   .code    = 0xdb,
2240   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_fpu_exceptions),
2241   .ngrp    = 1,
2242   .umasks  = amd64_fam15h_fpu_exceptions,
2243 },
2244 { .name    = "DR0_BREAKPOINTS",
2245   .desc    = "DR0 Breakpoint Match",
2246   .modmsk  = AMD64_FAM15H_ATTRS,
2247   .code    = 0xdc,
2248 },
2249 { .name    = "DR1_BREAKPOINTS",
2250   .desc    = "DR1 Breakpoint Match",
2251   .modmsk  = AMD64_FAM15H_ATTRS,
2252   .code    = 0xdd,
2253 },
2254 { .name    = "DR2_BREAKPOINTS",
2255   .desc    = "DR2 Breakpoint Match",
2256   .modmsk  = AMD64_FAM15H_ATTRS,
2257   .code    = 0xde,
2258 },
2259 { .name    = "DR3_BREAKPOINTS",
2260   .desc    = "DR3 Breakpoint Match",
2261   .modmsk  = AMD64_FAM15H_ATTRS,
2262   .code    = 0xdf,
2263 },
2264 { .name    = "IBS_OPS_TAGGED",
2265   .desc    = "Tagged IBS Ops",
2266   .modmsk  = AMD64_FAM15H_ATTRS,
2267   .code    = 0x1cf,
2268   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_ibs_ops_tagged),
2269   .ngrp    = 1,
2270   .umasks  = amd64_fam15h_ibs_ops_tagged,
2271 },
2272 { .name    = "LS_DISPATCH",
2273   .desc    = "LS Dispatch",
2274   .modmsk  = AMD64_FAM15H_ATTRS,
2275   .code    = 0x29,
2276   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_ls_dispatch),
2277   .ngrp    = 1,
2278   .umasks  = amd64_fam15h_ls_dispatch,
2279 },
2280 { .name    = "EXECUTED_CLFLUSH_INSTRUCTIONS",
2281   .desc    = "Executed CLFLUSH Instructions",
2282   .modmsk  = AMD64_FAM15H_ATTRS,
2283   .code    = 0x30,
2284 },
2285 { .name    = "L2_PREFETCHER_TRIGGER_EVENTS",
2286   .desc    = "L2 Prefetcher Trigger Events",
2287   .modmsk  = AMD64_FAM15H_ATTRS,
2288   .code    = 0x16c,
2289   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_l2_prefetcher_trigger_events),
2290   .ngrp    = 1,
2291   .umasks  = amd64_fam15h_l2_prefetcher_trigger_events,
2292 },
2293 { .name    = "DISPATCH_STALL_FOR_STQ_FULL",
2294   .desc    = "Dispatch Stall for STQ Full",
2295   .modmsk  = AMD64_FAM15H_ATTRS,
2296   .code    = 0x1d8,
2297 },
2298 };