vmm: Fix use-after-free in load_elf()
[akaros.git] / user / perfmon / events / amd64_events_fam15h_nb.h
1 /*
2  * Copyright (c) 2013 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_nb_nb (AMD64 Fam15h Interlagos NorthBridge)
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  * Nov 30 2013 -- Stephane Eranian , eranian@gmail.com:
35  * Split core and Northbridge events as PMU is distinct
36  *
37  * Apr 29 2011 -- Robert Richter, robert.richter@amd.com:
38  * Source: BKDG for AMD Family 15h Models 00h-0Fh Processors,
39  * 42301, Rev 1.15, April 18, 2011
40  *
41  * Dec 09 2010 -- Robert Richter, robert.richter@amd.com:
42  * Source: BIOS and Kernel Developer's Guide for the AMD Family 15h
43  * Processors, Rev 0.90, May 18, 2010
44  */
45
46 #define CORE_SELECT(b) \
47    { .uname  = "CORE_0",\
48      .udesc  = "Measure on Core0",\
49      .ucode = 0 << 4,\
50      .grpid = b,\
51      .uflags= AMD64_FL_NCOMBO,\
52    },\
53    { .uname  = "CORE_1",\
54      .udesc  = "Measure on Core1",\
55      .ucode = 1 << 4,\
56      .grpid = b,\
57      .uflags= AMD64_FL_NCOMBO,\
58    },\
59    { .uname  = "CORE_2",\
60      .udesc  = "Measure on Core2",\
61      .ucode = 2 << 4,\
62      .grpid = b,\
63      .uflags= AMD64_FL_NCOMBO,\
64    },\
65    { .uname  = "CORE_3",\
66      .udesc  = "Measure on Core3",\
67      .ucode = 3 << 4,\
68      .grpid = b,\
69      .uflags= AMD64_FL_NCOMBO,\
70    },\
71    { .uname  = "CORE_4",\
72      .udesc  = "Measure on Core4",\
73      .ucode = 4 << 4,\
74      .grpid = b,\
75      .uflags= AMD64_FL_NCOMBO,\
76    },\
77    { .uname  = "CORE_5",\
78      .udesc  = "Measure on Core5",\
79      .ucode = 5 << 4,\
80      .grpid = b,\
81      .uflags= AMD64_FL_NCOMBO,\
82    },\
83    { .uname  = "CORE_6",\
84      .udesc  = "Measure on Core6",\
85      .ucode = 6 << 4,\
86      .grpid = b,\
87      .uflags= AMD64_FL_NCOMBO,\
88    },\
89    { .uname  = "CORE_7",\
90      .udesc  = "Measure on Core7",\
91      .ucode = 7 << 4,\
92      .grpid = b,\
93      .uflags= AMD64_FL_NCOMBO,\
94    },\
95    { .uname  = "ANY_CORE",\
96      .udesc  = "Measure on any core",\
97      .ucode = 0xf << 4,\
98      .grpid = b,\
99      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,\
100    }
101
102 static const amd64_umask_t amd64_fam15h_nb_dispatched_fpu_ops[]={
103    { .uname  = "OPS_PIPE0",
104      .udesc  = "Total number uops assigned to Pipe 0",
105      .ucode = 0x1,
106    },
107    { .uname  = "OPS_PIPE1",
108      .udesc  = "Total number uops assigned to Pipe 1",
109      .ucode = 0x2,
110    },
111    { .uname  = "OPS_PIPE2",
112      .udesc  = "Total number uops assigned to Pipe 2",
113      .ucode = 0x4,
114    },
115    { .uname  = "OPS_PIPE3",
116      .udesc  = "Total number uops assigned to Pipe 3",
117      .ucode = 0x8,
118    },
119    { .uname  = "OPS_DUAL_PIPE0",
120      .udesc  = "Total number dual-pipe uops assigned to Pipe 0",
121      .ucode = 0x10,
122    },
123    { .uname  = "OPS_DUAL_PIPE1",
124      .udesc  = "Total number dual-pipe uops assigned to Pipe 1",
125      .ucode = 0x20,
126    },
127    { .uname  = "OPS_DUAL_PIPE2",
128      .udesc  = "Total number dual-pipe uops assigned to Pipe 2",
129      .ucode = 0x40,
130    },
131    { .uname  = "OPS_DUAL_PIPE3",
132      .udesc  = "Total number dual-pipe uops assigned to Pipe 3",
133      .ucode = 0x80,
134    },
135    { .uname  = "ALL",
136      .udesc  = "All sub-events selected",
137      .ucode = 0xff,
138      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
139    },
140 };
141
142 static const amd64_umask_t amd64_fam15h_nb_retired_sse_ops[]={
143    { .uname  = "SINGLE_ADD_SUB_OPS",
144      .udesc  = "Single-precision add/subtract FLOPS",
145      .ucode = 0x1,
146    },
147    { .uname  = "SINGLE_MUL_OPS",
148      .udesc  = "Single-precision multiply FLOPS",
149      .ucode = 0x2,
150    },
151    { .uname  = "SINGLE_DIV_OPS",
152      .udesc  = "Single-precision divide/square root FLOPS",
153      .ucode = 0x4,
154    },
155    { .uname  = "SINGLE_MUL_ADD_OPS",
156      .udesc  = "Single precision multiply-add FLOPS. Multiply-add counts as 2 FLOPS",
157      .ucode = 0x8,
158    },
159    { .uname  = "DOUBLE_ADD_SUB_OPS",
160      .udesc  = "Double precision add/subtract FLOPS",
161      .ucode = 0x10,
162    },
163    { .uname  = "DOUBLE_MUL_OPS",
164      .udesc  = "Double precision multiply FLOPS",
165      .ucode = 0x20,
166    },
167    { .uname  = "DOUBLE_DIV_OPS",
168      .udesc  = "Double precision divide/square root FLOPS",
169      .ucode = 0x40,
170    },
171    { .uname  = "DOUBLE_MUL_ADD_OPS",
172      .udesc  = "Double precision multiply-add FLOPS. Multiply-add counts as 2 FLOPS",
173      .ucode = 0x80,
174    },
175    { .uname  = "ALL",
176      .udesc  = "All sub-events selected",
177      .ucode = 0xff,
178      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
179    },
180 };
181
182 static const amd64_umask_t amd64_fam15h_nb_move_scalar_optimization[]={
183    { .uname  = "SSE_MOVE_OPS",
184      .udesc  = "Number of SSE Move Ops",
185      .ucode = 0x1,
186    },
187    { .uname  = "SSE_MOVE_OPS_ELIM",
188      .udesc  = "Number of SSE Move Ops eliminated",
189      .ucode = 0x2,
190    },
191    { .uname  = "OPT_CAND",
192      .udesc  = "Number of Ops that are candidates for optimization (Z-bit set or pass)",
193      .ucode = 0x4,
194    },
195    { .uname  = "SCALAR_OPS_OPTIMIZED",
196      .udesc  = "Number of Scalar ops optimized",
197      .ucode = 0x8,
198    },
199    { .uname  = "ALL",
200      .udesc  = "All sub-events selected",
201      .ucode = 0xf,
202      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
203    },
204 };
205
206 static const amd64_umask_t amd64_fam15h_nb_retired_serializing_ops[]={
207    { .uname  = "SSE_RETIRED",
208      .udesc  = "SSE bottom-executing uops retired",
209      .ucode = 0x1,
210    },
211    { .uname  = "SSE_MISPREDICTED",
212      .udesc  = "SSE control word mispredict traps due to mispredictions",
213      .ucode = 0x2,
214    },
215    { .uname  = "X87_RETIRED",
216      .udesc  = "X87 bottom-executing uops retired",
217      .ucode = 0x4,
218    },
219    { .uname  = "X87_MISPREDICTED",
220      .udesc  = "X87 control word mispredict traps due to mispredictions",
221      .ucode = 0x8,
222    },
223    { .uname  = "ALL",
224      .udesc  = "All sub-events selected",
225      .ucode = 0xf,
226      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
227    },
228 };
229
230 static const amd64_umask_t amd64_fam15h_nb_segment_register_loads[]={
231    { .uname  = "ES",
232      .udesc  = "ES",
233      .ucode = 0x1,
234    },
235    { .uname  = "CS",
236      .udesc  = "CS",
237      .ucode = 0x2,
238    },
239    { .uname  = "SS",
240      .udesc  = "SS",
241      .ucode = 0x4,
242    },
243    { .uname  = "DS",
244      .udesc  = "DS",
245      .ucode = 0x8,
246    },
247    { .uname  = "FS",
248      .udesc  = "FS",
249      .ucode = 0x10,
250    },
251    { .uname  = "GS",
252      .udesc  = "GS",
253      .ucode = 0x20,
254    },
255    { .uname  = "HS",
256      .udesc  = "HS",
257      .ucode = 0x40,
258    },
259    { .uname  = "ALL",
260      .udesc  = "All sub-events selected",
261      .ucode = 0x7f,
262      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
263    },
264 };
265
266 static const amd64_umask_t amd64_fam15h_nb_load_q_store_q_full[]={
267    { .uname  = "LOAD_QUEUE",
268      .udesc  = "The number of cycles that the load buffer is full",
269      .ucode = 0x1,
270    },
271    { .uname  = "STORE_QUEUE",
272      .udesc  = "The number of cycles that the store buffer is full",
273      .ucode = 0x2,
274    },
275    { .uname  = "ALL",
276      .udesc  = "All sub-events selected",
277      .ucode = 0x3,
278      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
279    },
280 };
281
282 static const amd64_umask_t amd64_fam15h_nb_locked_ops[]={
283    { .uname  = "EXECUTED",
284      .udesc  = "Number of locked instructions executed",
285      .ucode = 0x1,
286    },
287    { .uname  = "CYCLES_NON_SPECULATIVE_PHASE",
288      .udesc  = "Number of cycles spent in non-speculative phase, excluding cache miss penalty",
289      .ucode = 0x4,
290    },
291    { .uname  = "CYCLES_WAITING",
292      .udesc  = "Number of cycles spent in non-speculative phase, including the cache miss penalty",
293      .ucode = 0x8,
294    },
295    { .uname  = "ALL",
296      .udesc  = "All sub-events selected",
297      .ucode = 0xd,
298      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
299    },
300 };
301
302 static const amd64_umask_t amd64_fam15h_nb_cancelled_store_to_load[]={
303    { .uname  = "SIZE_ADDRESS_MISMATCHES",
304      .udesc  = "Store is smaller than load or different starting byte but partial overlap",
305      .ucode = 0x1,
306    },
307    { .uname  = "ALL",
308      .udesc  = "All sub-events selected",
309      .ucode = 0x1,
310      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
311    },
312 };
313
314 static const amd64_umask_t amd64_fam15h_nb_data_cache_misses[]={
315    { .uname  = "DC_MISS_STREAMING_STORE",
316      .udesc  = "First data cache miss or streaming store to a 64B cache line",
317      .ucode = 0x1,
318    },
319    { .uname  = "STREAMING_STORE",
320      .udesc  = "First streaming store to a 64B cache line",
321      .ucode = 0x2,
322    },
323    { .uname  = "ALL",
324      .udesc  = "All sub-events selected",
325      .ucode = 0x3,
326      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
327    },
328 };
329
330 static const amd64_umask_t amd64_fam15h_nb_data_cache_refills_from_l2_or_northbridge[]={
331    { .uname  = "GOOD",
332      .udesc  = "Fill with good data. (Final valid status is valid)",
333      .ucode = 0x1,
334    },
335    { .uname  = "INVALID",
336      .udesc  = "Early valid status turned out to be invalid",
337      .ucode = 0x2,
338    },
339    { .uname  = "POISON",
340      .udesc  = "Fill with poison data",
341      .ucode = 0x4,
342    },
343    { .uname  = "READ_ERROR",
344      .udesc  = "Fill with read data error",
345      .ucode = 0x8,
346    },
347    { .uname  = "ALL",
348      .udesc  = "All sub-events selected",
349      .ucode = 0xf,
350      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
351    },
352 };
353
354 static const amd64_umask_t amd64_fam15h_nb_unified_tlb_hit[]={
355    { .uname  = "4K_DATA",
356      .udesc  = "4 KB unified TLB hit for data",
357      .ucode = 0x1,
358    },
359    { .uname  = "2M_DATA",
360      .udesc  = "2 MB unified TLB hit for data",
361      .ucode = 0x2,
362    },
363    { .uname  = "1G_DATA",
364      .udesc  = "1 GB unified TLB hit for data",
365      .ucode = 0x4,
366    },
367    { .uname  = "4K_INST",
368      .udesc  = "4 KB unified TLB hit for instruction",
369      .ucode = 0x10,
370    },
371    { .uname  = "2M_INST",
372      .udesc  = "2 MB unified TLB hit for instruction",
373      .ucode = 0x20,
374    },
375    { .uname  = "1G_INST",
376      .udesc  = "1 GB unified TLB hit for instruction",
377      .ucode = 0x40,
378    },
379    { .uname  = "ALL",
380      .udesc  = "All sub-events selected",
381      .ucode = 0x77,
382      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
383    },
384 };
385
386 static const amd64_umask_t amd64_fam15h_nb_unified_tlb_miss[]={
387    { .uname  = "4K_DATA",
388      .udesc  = "4 KB unified TLB miss for data",
389      .ucode = 0x1,
390    },
391    { .uname  = "2M_DATA",
392      .udesc  = "2 MB unified TLB miss for data",
393      .ucode = 0x2,
394    },
395    { .uname  = "1GB_DATA",
396      .udesc  = "1 GB unified TLB miss for data",
397      .ucode = 0x4,
398    },
399    { .uname  = "4K_INST",
400      .udesc  = "4 KB unified TLB miss for instruction",
401      .ucode = 0x10,
402    },
403    { .uname  = "2M_INST",
404      .udesc  = "2 MB unified TLB miss for instruction",
405      .ucode = 0x20,
406    },
407    { .uname  = "1G_INST",
408      .udesc  = "1 GB unified TLB miss for instruction",
409      .ucode = 0x40,
410    },
411    { .uname  = "ALL",
412      .udesc  = "All sub-events selected",
413      .ucode = 0x77,
414      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
415    },
416 };
417
418 static const amd64_umask_t amd64_fam15h_nb_prefetch_instructions_dispatched[]={
419    { .uname  = "LOAD",
420      .udesc  = "Load (Prefetch, PrefetchT0/T1/T2)",
421      .ucode = 0x1,
422    },
423    { .uname  = "STORE",
424      .udesc  = "Store (PrefetchW)",
425      .ucode = 0x2,
426    },
427    { .uname  = "NTA",
428      .udesc  = "NTA (PrefetchNTA)",
429      .ucode = 0x4,
430    },
431    { .uname  = "ALL",
432      .udesc  = "All sub-events selected",
433      .ucode = 0x7,
434      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
435    },
436 };
437
438 static const amd64_umask_t amd64_fam15h_nb_ineffective_sw_prefetches[]={
439    { .uname  = "SW_PREFETCH_HIT_IN_L1",
440      .udesc  = "Software prefetch hit in the L1",
441      .ucode = 0x1,
442    },
443    { .uname  = "SW_PREFETCH_HIT_IN_L2",
444      .udesc  = "Software prefetch hit in the L2",
445      .ucode = 0x8,
446    },
447    { .uname  = "ALL",
448      .udesc  = "All sub-events selected",
449      .ucode = 0x9,
450      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
451    },
452 };
453
454 static const amd64_umask_t amd64_fam15h_nb_memory_requests[]={
455    { .uname  = "NON_CACHEABLE",
456      .udesc  = "Requests to non-cacheable (UC) memory",
457      .ucode = 0x1,
458    },
459    { .uname  = "WRITE_COMBINING",
460      .udesc  = "Requests to non-cacheable (WC, but not WC+/SS) memory",
461      .ucode = 0x2,
462    },
463    { .uname  = "STREAMING_STORE",
464      .udesc  = "Requests to non-cacheable (WC+/SS, but not WC) memory",
465      .ucode = 0x80,
466    },
467    { .uname  = "ALL",
468      .udesc  = "All sub-events selected",
469      .ucode = 0x83,
470      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
471    },
472 };
473
474 static const amd64_umask_t amd64_fam15h_nb_data_prefetcher[]={
475    { .uname  = "ATTEMPTED",
476      .udesc  = "Prefetch attempts",
477      .ucode = 0x2,
478    },
479    { .uname  = "ALL",
480      .udesc  = "All sub-events selected",
481      .ucode = 0x2,
482      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
483    },
484 };
485
486 static const amd64_umask_t amd64_fam15h_nb_mab_reqs[]={
487    { .uname  = "BUFFER_BIT_0",
488      .udesc  = "Buffer entry index bit 0",
489      .ucode = 0x1,
490    },
491    { .uname  = "BUFFER_BIT_1",
492      .udesc  = "Buffer entry index bit 1",
493      .ucode = 0x2,
494    },
495    { .uname  = "BUFFER_BIT_2",
496      .udesc  = "Buffer entry index bit 2",
497      .ucode = 0x4,
498    },
499    { .uname  = "BUFFER_BIT_3",
500      .udesc  = "Buffer entry index bit 3",
501      .ucode = 0x8,
502    },
503    { .uname  = "BUFFER_BIT_4",
504      .udesc  = "Buffer entry index bit 4",
505      .ucode = 0x10,
506    },
507    { .uname  = "BUFFER_BIT_5",
508      .udesc  = "Buffer entry index bit 5",
509      .ucode = 0x20,
510    },
511    { .uname  = "BUFFER_BIT_6",
512      .udesc  = "Buffer entry index bit 6",
513      .ucode = 0x40,
514    },
515    { .uname  = "BUFFER_BIT_7",
516      .udesc  = "Buffer entry index bit 7",
517      .ucode = 0x80,
518    },
519    { .uname  = "ALL",
520      .udesc  = "All sub-events selected",
521      .ucode = 0xff,
522      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
523    },
524 };
525
526 static const amd64_umask_t amd64_fam15h_nb_system_read_responses[]={
527    { .uname  = "EXCLUSIVE",
528      .udesc  = "Exclusive",
529      .ucode = 0x1,
530    },
531    { .uname  = "MODIFIED",
532      .udesc  = "Modified (D18F0x68[ATMModeEn]==0), Modified written (D18F0x68[ATMModeEn]==1)",
533      .ucode = 0x2,
534    },
535    { .uname  = "SHARED",
536      .udesc  = "Shared",
537      .ucode = 0x4,
538    },
539    { .uname  = "OWNED",
540      .udesc  = "Owned",
541      .ucode = 0x8,
542    },
543    { .uname  = "DATA_ERROR",
544      .udesc  = "Data Error",
545      .ucode = 0x10,
546    },
547    { .uname  = "MODIFIED_UNWRITTEN",
548      .udesc  = "Modified unwritten",
549      .ucode = 0x20,
550    },
551    { .uname  = "ALL",
552      .udesc  = "All sub-events selected",
553      .ucode = 0x3f,
554      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
555    },
556 };
557
558 static const amd64_umask_t amd64_fam15h_nb_octword_write_transfers[]={
559    { .uname  = "OCTWORD_WRITE_TRANSFER",
560      .udesc  = "OW write transfer",
561      .ucode = 0x1,
562    },
563    { .uname  = "ALL",
564      .udesc  = "All sub-events selected",
565      .ucode = 0x1,
566      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
567    },
568 };
569
570 static const amd64_umask_t amd64_fam15h_nb_requests_to_l2[]={
571    { .uname  = "INSTRUCTIONS",
572      .udesc  = "IC fill",
573      .ucode = 0x1,
574    },
575    { .uname  = "DATA",
576      .udesc  = "DC fill",
577      .ucode = 0x2,
578    },
579    { .uname  = "TLB_WALK",
580      .udesc  = "TLB fill (page table walks)",
581      .ucode = 0x4,
582    },
583    { .uname  = "SNOOP",
584      .udesc  = "NB probe request",
585      .ucode = 0x8,
586    },
587    { .uname  = "CANCELLED",
588      .udesc  = "Canceled request",
589      .ucode = 0x10,
590    },
591    { .uname  = "PREFETCHER",
592      .udesc  = "L2 cache prefetcher request",
593      .ucode = 0x40,
594    },
595    { .uname  = "ALL",
596      .udesc  = "All sub-events selected",
597      .ucode = 0x5f,
598      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
599    },
600 };
601
602 static const amd64_umask_t amd64_fam15h_nb_l2_cache_miss[]={
603    { .uname  = "INSTRUCTIONS",
604      .udesc  = "IC fill",
605      .ucode = 0x1,
606    },
607    { .uname  = "DATA",
608      .udesc  = "DC fill (includes possible replays, whereas PMCx041 does not)",
609      .ucode = 0x2,
610    },
611    { .uname  = "TLB_WALK",
612      .udesc  = "TLB page table walk",
613      .ucode = 0x4,
614    },
615    { .uname  = "PREFETCHER",
616      .udesc  = "L2 Cache Prefetcher request",
617      .ucode = 0x10,
618    },
619    { .uname  = "ALL",
620      .udesc  = "All sub-events selected",
621      .ucode = 0x17,
622      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
623    },
624 };
625
626 static const amd64_umask_t amd64_fam15h_nb_l2_cache_fill_writeback[]={
627    { .uname  = "L2_FILLS",
628      .udesc  = "L2 fills from system",
629      .ucode = 0x1,
630    },
631    { .uname  = "L2_WRITEBACKS",
632      .udesc  = "L2 Writebacks to system (Clean and Dirty)",
633      .ucode = 0x2,
634    },
635    { .uname  = "L2_WRITEBACKS_CLEAN",
636      .udesc  = "L2 Clean Writebacks to system",
637      .ucode = 0x4,
638    },
639    { .uname  = "ALL",
640      .udesc  = "All sub-events selected",
641      .ucode = 0x7,
642      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
643    },
644 };
645
646 static const amd64_umask_t amd64_fam15h_nb_page_splintering[]={
647    { .uname  = "GUEST_LARGER",
648      .udesc  = "Guest page size is larger than host page size when nested paging is enabled",
649      .ucode = 0x1,
650    },
651    { .uname  = "MTRR_MISMATCH",
652      .udesc  = "Splintering due to MTRRs, IORRs, APIC, TOMs or other special address region",
653      .ucode = 0x2,
654    },
655    { .uname  = "HOST_LARGER",
656      .udesc  = "Host page size is larger than the guest page size",
657      .ucode = 0x4,
658    },
659    { .uname  = "ALL",
660      .udesc  = "All sub-events selected",
661      .ucode = 0x7,
662      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
663    },
664 };
665
666 static const amd64_umask_t amd64_fam15h_nb_l1_itlb_miss_and_l2_itlb_miss[]={
667    { .uname  = "4K_PAGE_FETCHES",
668      .udesc  = "Instruction fetches to a 4 KB page",
669      .ucode = 0x1,
670    },
671    { .uname  = "2M_PAGE_FETCHES",
672      .udesc  = "Instruction fetches to a 2 MB page",
673      .ucode = 0x2,
674    },
675    { .uname  = "1G_PAGE_FETCHES",
676      .udesc  = "Instruction fetches to a 1 GB page",
677      .ucode = 0x4,
678    },
679    { .uname  = "ALL",
680      .udesc  = "All sub-events selected",
681      .ucode = 0x7,
682      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
683    },
684 };
685
686 static const amd64_umask_t amd64_fam15h_nb_instruction_cache_invalidated[]={
687    { .uname  = "NON_SMC_PROBE_MISS",
688      .udesc  = "Non-SMC invalidating probe that missed on in-flight instructions",
689      .ucode = 0x1,
690    },
691    { .uname  = "NON_SMC_PROBE_HIT",
692      .udesc  = "Non-SMC invalidating probe that hit on in-flight instructions",
693      .ucode = 0x2,
694    },
695    { .uname  = "SMC_PROBE_MISS",
696      .udesc  = "SMC invalidating probe that missed on in-flight instructions",
697      .ucode = 0x4,
698    },
699    { .uname  = "SMC_PROBE_HIT",
700      .udesc  = "SMC invalidating probe that hit on in-flight instructions",
701      .ucode = 0x8,
702    },
703    { .uname  = "ALL",
704      .udesc  = "All sub-events selected",
705      .ucode = 0xf,
706      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
707    },
708 };
709
710 static const amd64_umask_t amd64_fam15h_nb_retired_mmx_fp_instructions[]={
711    { .uname  = "X87",
712      .udesc  = "X87 instructions",
713      .ucode = 0x1,
714    },
715    { .uname  = "MMX",
716      .udesc  = "MMX(tm) instructions",
717      .ucode = 0x2,
718    },
719    { .uname  = "SSE",
720      .udesc  = "SSE instructions (SSE,SSE2,SSE3,SSSE3,SSE4A,SSE4.1,SSE4.2,AVX,XOP,FMA4)",
721      .ucode = 0x4,
722    },
723    { .uname  = "ALL",
724      .udesc  = "All sub-events selected",
725      .ucode = 0x7,
726      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
727    },
728 };
729
730 static const amd64_umask_t amd64_fam15h_nb_fpu_exceptions[]={
731    { .uname  = "TOTAL_FAULTS",
732      .udesc  = "Total microfaults",
733      .ucode = 0x1,
734    },
735    { .uname  = "TOTAL_TRAPS",
736      .udesc  = "Total microtraps",
737      .ucode = 0x2,
738    },
739    { .uname  = "INT2EXT_FAULTS",
740      .udesc  = "Int2Ext faults",
741      .ucode = 0x4,
742    },
743    { .uname  = "EXT2INT_FAULTS",
744      .udesc  = "Ext2Int faults",
745      .ucode = 0x8,
746    },
747    { .uname  = "BYPASS_FAULTS",
748      .udesc  = "Bypass faults",
749      .ucode = 0x10,
750    },
751    { .uname  = "ALL",
752      .udesc  = "All sub-events selected",
753      .ucode = 0x1f,
754      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
755    },
756 };
757
758 static const amd64_umask_t amd64_fam15h_nb_ibs_ops_tagged[]={
759    { .uname  = "TAGGED",
760      .udesc  = "Number of ops tagged by IBS",
761      .ucode = 0x1,
762    },
763    { .uname  = "RETIRED",
764      .udesc  = "Number of ops tagged by IBS that retired",
765      .ucode = 0x2,
766    },
767    { .uname  = "IGNORED",
768      .udesc  = "Number of times an op could not be tagged by IBS because of a previous tagged op that has not retired",
769      .ucode = 0x4,
770    },
771    { .uname  = "ALL",
772      .udesc  = "All sub-events selected",
773      .ucode = 0x7,
774      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
775    },
776 };
777
778 static const amd64_umask_t amd64_fam15h_nb_ls_dispatch[]={
779    { .uname  = "LOADS",
780      .udesc  = "Loads",
781      .ucode = 0x1,
782    },
783    { .uname  = "STORES",
784      .udesc  = "Stores",
785      .ucode = 0x2,
786    },
787    { .uname  = "LOAD_OP_STORES",
788      .udesc  = "Load-op-Stores",
789      .ucode = 0x4,
790    },
791    { .uname  = "ALL",
792      .udesc  = "All sub-events selected",
793      .ucode = 0x7,
794      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
795    },
796 };
797
798 static const amd64_umask_t amd64_fam15h_nb_l2_prefetcher_trigger_events[]={
799    { .uname  = "LOAD_L1_MISS_SEEN_BY_PREFETCHER",
800      .udesc  = "Load L1 miss seen by prefetcher",
801      .ucode = 0x1,
802    },
803    { .uname  = "STORE_L1_MISS_SEEN_BY_PREFETCHER",
804      .udesc  = "Store L1 miss seen by prefetcher",
805      .ucode = 0x2,
806    },
807    { .uname  = "ALL",
808      .udesc  = "All sub-events selected",
809      .ucode = 0x3,
810      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
811    },
812 };
813
814 static const amd64_umask_t amd64_fam15h_nb_dram_accesses[]={
815    { .uname = "DCT0_PAGE_HIT",
816      .udesc = "DCT0 Page hit",
817      .ucode = 0x1,
818    },
819    { .uname = "DCT0_PAGE_MISS",
820      .udesc = "DCT0 Page Miss",
821      .ucode = 0x2,
822    },
823    { .uname = "DCT0_PAGE_CONFLICT",
824      .udesc = "DCT0 Page Conflict",
825      .ucode = 0x4,
826    },
827    { .uname = "DCT1_PAGE_HIT",
828      .udesc = "DCT1 Page hit",
829      .ucode = 0x8,
830    },
831    { .uname = "DCT1_PAGE_MISS",
832      .udesc = "DCT1 Page Miss",
833      .ucode = 0x10,
834    },
835    { .uname = "DCT1_PAGE_CONFLICT",
836      .udesc = "DCT1 Page Conflict",
837      .ucode = 0x20,
838    },
839    { .uname  = "ALL",
840      .udesc  = "All sub-events selected",
841      .ucode = 0x3f,
842      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
843    },
844 };
845
846 static const amd64_umask_t amd64_fam15h_nb_dram_controller_page_table_overflows[]={
847    { .uname = "DCT0_PAGE_TABLE_OVERFLOW",
848      .udesc = "DCT0 Page Table Overflow",
849      .ucode = 0x1,
850    },
851    { .uname = "DCT1_PAGE_TABLE_OVERFLOW",
852      .udesc = "DCT1 Page Table Overflow",
853      .ucode = 0x2,
854    },
855    { .uname  = "ALL",
856      .udesc  = "All sub-events selected",
857      .ucode  = 0x3,
858      .uflags = AMD64_FL_NCOMBO | AMD64_FL_DFL,
859    },
860 };
861
862 static const amd64_umask_t amd64_fam15h_nb_memory_controller_dram_command_slots_missed[]={
863    { .uname = "DCT0_COMMAND_SLOTS_MISSED",
864      .udesc = "DCT0 Command Slots Missed (in MemClks)",
865      .ucode = 0x1,
866    },
867    { .uname = "DCT1_COMMAND_SLOTS_MISSED",
868      .udesc = "DCT1 Command Slots Missed (in MemClks)",
869      .ucode = 0x2,
870    },
871    { .uname  = "ALL",
872      .udesc  = "All sub-events selected",
873      .ucode  = 0x3,
874      .uflags = AMD64_FL_NCOMBO | AMD64_FL_DFL,
875    },
876 };
877
878 static const amd64_umask_t amd64_fam15h_nb_memory_controller_turnarounds[]={
879    { .uname = "DCT0_DIMM_TURNAROUND",
880      .udesc = "DCT0 DIMM (chip select) turnaround",
881      .ucode = 0x1,
882    },
883    { .uname = "DCT0_READ_WRITE_TURNAROUND",
884      .udesc = "DCT0 Read to write turnaround",
885      .ucode = 0x2,
886    },
887    { .uname = "DCT0_WRITE_READ_TURNAROUND",
888      .udesc = "DCT0 Write to read turnaround",
889      .ucode = 0x4,
890    },
891    { .uname = "DCT1_DIMM_TURNAROUND",
892      .udesc = "DCT1 DIMM (chip select) turnaround",
893      .ucode = 0x8,
894    },
895    { .uname = "DCT1_READ_WRITE_TURNAROUND",
896      .udesc = "DCT1 Read to write turnaround",
897      .ucode = 0x10,
898    },
899    { .uname = "DCT1_WRITE_READ_TURNAROUND",
900      .udesc = "DCT1 Write to read turnaround",
901      .ucode = 0x20,
902    },
903    { .uname  = "ALL",
904      .udesc  = "All sub-events selected",
905      .ucode  = 0x3f,
906      .uflags = AMD64_FL_NCOMBO | AMD64_FL_DFL,
907    },
908 };
909
910 static const amd64_umask_t amd64_fam15h_nb_memory_controller_bypass_counter_saturation[]={
911    { .uname = "MEMORY_CONTROLLER_HIGH_PRIORITY_BYPASS",
912      .udesc = "Memory controller high priority bypass",
913      .ucode = 0x1,
914    },
915    { .uname = "MEMORY_CONTROLLER_MEDIUM_PRIORITY_BYPASS",
916      .udesc = "Memory controller medium priority bypass",
917      .ucode = 0x2,
918    },
919    { .uname = "DCT0_DCQ_BYPASS",
920      .udesc = "DCT0 DCQ bypass",
921      .ucode = 0x4,
922    },
923    { .uname = "DCT1_DCQ_BYPASS",
924      .udesc = "DCT1 DCQ bypass",
925      .ucode = 0x8,
926    },
927    { .uname  = "ALL",
928      .udesc  = "All sub-events selected",
929      .ucode  = 0xf,
930      .uflags = AMD64_FL_NCOMBO | AMD64_FL_DFL,
931    },
932 };
933
934 static const amd64_umask_t amd64_fam15h_nb_thermal_status[]={
935    { .uname = "NUM_HTC_TRIP_POINT_CROSSED",
936      .udesc = "Number of times the HTC trip point is crossed",
937      .ucode = 0x4,
938    },
939    { .uname = "NUM_CLOCKS_HTC_PSTATE_INACTIVE",
940      .udesc = "Number of clocks HTC P-state is inactive",
941      .ucode = 0x20,
942    },
943    { .uname = "NUM_CLOCKS_HTC_PSTATE_ACTIVE",
944      .udesc = "Number of clocks HTC P-state is active",
945      .ucode = 0x40,
946    },
947    { .uname  = "ALL",
948      .udesc  = "All sub-events selected",
949      .ucode = 0x64,
950      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
951    },
952 };
953
954 static const amd64_umask_t amd64_fam15h_nb_cpu_io_requests_to_memory_io[]={
955    { .uname = "REMOTE_IO_TO_LOCAL_IO",
956      .udesc = "Remote IO to Local IO",
957      .ucode = 0x61,
958      .uflags= AMD64_FL_NCOMBO,
959    },
960    { .uname = "REMOTE_CPU_TO_LOCAL_IO",
961      .udesc = "Remote CPU to Local IO",
962      .ucode = 0x64,
963      .uflags= AMD64_FL_NCOMBO,
964    },
965    { .uname = "LOCAL_IO_TO_REMOTE_IO",
966      .udesc = "Local IO to Remote IO",
967      .ucode = 0x91,
968      .uflags= AMD64_FL_NCOMBO,
969    },
970    { .uname = "LOCAL_IO_TO_REMOTE_MEM",
971      .udesc = "Local IO to Remote Mem",
972      .ucode = 0x92,
973      .uflags= AMD64_FL_NCOMBO,
974    },
975    { .uname = "LOCAL_CPU_TO_REMOTE_IO",
976      .udesc = "Local CPU to Remote IO",
977      .ucode = 0x94,
978      .uflags= AMD64_FL_NCOMBO,
979    },
980    { .uname = "LOCAL_CPU_TO_REMOTE_MEM",
981      .udesc = "Local CPU to Remote Mem",
982      .ucode = 0x98,
983      .uflags= AMD64_FL_NCOMBO,
984    },
985    { .uname = "LOCAL_IO_TO_LOCAL_IO",
986      .udesc = "Local IO to Local IO",
987      .ucode = 0xa1,
988      .uflags= AMD64_FL_NCOMBO,
989    },
990    { .uname = "LOCAL_IO_TO_LOCAL_MEM",
991      .udesc = "Local IO to Local Mem",
992      .ucode = 0xa2,
993      .uflags= AMD64_FL_NCOMBO,
994    },
995    { .uname = "LOCAL_CPU_TO_LOCAL_IO",
996      .udesc = "Local CPU to Local IO",
997      .ucode = 0xa4,
998      .uflags= AMD64_FL_NCOMBO,
999    },
1000    { .uname = "LOCAL_CPU_TO_LOCAL_MEM",
1001      .udesc = "Local CPU to Local Mem",
1002      .ucode = 0xa8,
1003      .uflags= AMD64_FL_NCOMBO,
1004    },
1005 };
1006
1007 static const amd64_umask_t amd64_fam15h_nb_cache_block_commands[]={
1008    { .uname = "VICTIM_BLOCK",
1009      .udesc = "Victim Block (Writeback)",
1010      .ucode = 0x1,
1011    },
1012    { .uname = "READ_BLOCK",
1013      .udesc = "Read Block (Dcache load miss refill)",
1014      .ucode = 0x4,
1015    },
1016    { .uname = "READ_BLOCK_SHARED",
1017      .udesc = "Read Block Shared (Icache refill)",
1018      .ucode = 0x8,
1019    },
1020    { .uname = "READ_BLOCK_MODIFIED",
1021      .udesc = "Read Block Modified (Dcache store miss refill)",
1022      .ucode = 0x10,
1023    },
1024    { .uname = "CHANGE_TO_DIRTY",
1025      .udesc = "Change-to-Dirty (first store to clean block already in cache)",
1026      .ucode = 0x20,
1027    },
1028    { .uname  = "ALL",
1029      .udesc  = "All sub-events selected",
1030      .ucode  = 0x3d,
1031      .uflags = AMD64_FL_NCOMBO | AMD64_FL_DFL,
1032    },
1033 };
1034
1035 static const amd64_umask_t amd64_fam15h_nb_sized_commands[]={
1036    { .uname = "NON-POSTED_SZWR_BYTE",
1037      .udesc = "Non-Posted SzWr Byte (1-32 bytes). Typical Usage: Legacy or mapped IO, typically 1-4 bytes.",
1038      .ucode = 0x1,
1039    },
1040    { .uname = "NON-POSTED_SZWR_DW",
1041      .udesc = "Non-Posted SzWr DW (1-16 dwords). Typical Usage: Legacy or mapped IO, typically 1",
1042      .ucode = 0x2,
1043    },
1044    { .uname = "POSTED_SZWR_BYTE",
1045      .udesc = "Posted SzWr Byte (1-32 bytes). Typical Usage: Subcache-line DMA writes, size varies; also",
1046      .ucode = 0x4,
1047    },
1048    { .uname = "POSTED_SZWR_DW",
1049      .udesc = "Posted SzWr DW (1-16 dwords). Typical Usage: Block-oriented DMA writes, often cache-line",
1050      .ucode = 0x8,
1051    },
1052    { .uname = "SZRD_BYTE",
1053      .udesc = "SzRd Byte (4 bytes). Typical Usage: Legacy or mapped IO.",
1054      .ucode = 0x10,
1055    },
1056    { .uname = "SZRD_DW",
1057      .udesc = "SzRd DW (1-16 dwords). Typical Usage: Block-oriented DMA reads, typically cache-line size.",
1058      .ucode = 0x20,
1059    },
1060    { .uname  = "ALL",
1061      .udesc  = "All sub-events selected",
1062      .ucode = 0x3f,
1063      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
1064    },
1065 };
1066
1067 static const amd64_umask_t amd64_fam15h_nb_probe_responses_and_upstream_requests[]={
1068    { .uname = "PROBE_MISS",
1069      .udesc = "Probe miss",
1070      .ucode = 0x1,
1071    },
1072    { .uname = "PROBE_HIT_CLEAN",
1073      .udesc = "Probe hit clean",
1074      .ucode = 0x2,
1075    },
1076    { .uname = "PROBE_HIT_DIRTY_WITHOUT_MEMORY_CANCEL",
1077      .udesc = "Probe hit dirty without memory cancel (probed by Sized Write or Change2Dirty)",
1078      .ucode = 0x4,
1079    },
1080    { .uname = "PROBE_HIT_DIRTY_WITH_MEMORY_CANCEL",
1081      .udesc = "Probe hit dirty with memory cancel (probed by DMA read or cache refill request)",
1082      .ucode = 0x8,
1083    },
1084    { .uname = "UPSTREAM_DISPLAY_REFRESH_ISOC_READS",
1085      .udesc = "Upstream display refresh/ISOC reads",
1086      .ucode = 0x10,
1087    },
1088    { .uname = "UPSTREAM_NON-DISPLAY_REFRESH_READS",
1089      .udesc = "Upstream non-display refresh reads",
1090      .ucode = 0x20,
1091    },
1092    { .uname = "UPSTREAM_ISOC_WRITES",
1093      .udesc = "Upstream ISOC writes",
1094      .ucode = 0x40,
1095    },
1096    { .uname = "UPSTREAM_NON-ISOC_WRITES",
1097      .udesc = "Upstream non-ISOC writes",
1098      .ucode = 0x80,
1099    },
1100    { .uname  = "ALL",
1101      .udesc  = "All sub-events selected",
1102      .ucode = 0xff,
1103      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
1104    },
1105 };
1106
1107 static const amd64_umask_t amd64_fam15h_nb_gart_events[]={
1108    { .uname = "GART_APERTURE_HIT_ON_ACCESS_FROM_CPU",
1109      .udesc = "GART aperture hit on access from CPU",
1110      .ucode = 0x1,
1111    },
1112    { .uname = "GART_APERTURE_HIT_ON_ACCESS_FROM_IO",
1113      .udesc = "GART aperture hit on access from IO",
1114      .ucode = 0x2,
1115    },
1116    { .uname = "GART_MISS",
1117      .udesc = "GART miss",
1118      .ucode = 0x4,
1119    },
1120    { .uname = "GART_REQUEST_HIT_TABLE_WALK_IN_PROGRESS",
1121      .udesc = "GART Request hit table walk in progress",
1122      .ucode = 0x8,
1123    },
1124    { .uname = "GART_MULTIPLE_TABLE_WALK_IN_PROGRESS",
1125      .udesc = "GART multiple table walk in progress",
1126      .ucode = 0x80,
1127    },
1128    { .uname  = "ALL",
1129      .udesc  = "All sub-events selected",
1130      .ucode = 0x8f,
1131      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
1132    },
1133 };
1134
1135 static const amd64_umask_t amd64_fam15h_nb_link_transmit_bandwidth[]={
1136    { .uname = "COMMAND_DW_SENT",
1137      .udesc = "Command DW sent",
1138      .ucode = 0x1,
1139      .grpid = 0,
1140    },
1141    { .uname = "DATA_DW_SENT",
1142      .udesc = "Data DW sent",
1143      .ucode = 0x2,
1144      .grpid = 0,
1145    },
1146    { .uname = "BUFFER_RELEASE_DW_SENT",
1147      .udesc = "Buffer release DW sent",
1148      .ucode = 0x4,
1149      .grpid = 0,
1150    },
1151    { .uname = "NOP_DW_SENT",
1152      .udesc = "NOP DW sent (idle)",
1153      .ucode = 0x8,
1154      .grpid = 0,
1155    },
1156    { .uname = "ADDRESS_DW_SENT",
1157      .udesc = "Address (including extensions) DW sent",
1158      .ucode = 0x10,
1159      .grpid = 0,
1160    },
1161    { .uname = "PER_PACKET_CRC_SENT",
1162      .udesc = "Per packet CRC sent",
1163      .ucode = 0x20,
1164      .grpid = 0,
1165    },
1166    { .uname  = "ALL",
1167      .udesc  = "All sub-events selected",
1168      .ucode = 0x3f,
1169      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
1170      .grpid = 0,
1171    },
1172    { .uname = "SUBLINK_1",
1173      .udesc = "When links are unganged, enable this umask to select sublink 1",
1174      .ucode = 0x80,
1175      .grpid = 1,
1176      .uflags= AMD64_FL_NCOMBO,
1177    },
1178    { .uname = "SUBLINK_0",
1179      .udesc = "When links are unganged, enable this umask to select sublink 0 (default when links ganged)",
1180      .ucode = 0x00,
1181      .grpid = 1,
1182      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
1183    },
1184
1185
1186 };
1187
1188 static const amd64_umask_t amd64_fam15h_nb_cpu_to_dram_requests_to_target_node[]={
1189    { .uname = "LOCAL_TO_NODE_0",
1190      .udesc = "From Local node to Node 0",
1191      .ucode = 0x1,
1192    },
1193    { .uname = "LOCAL_TO_NODE_1",
1194      .udesc = "From Local node to Node 1",
1195      .ucode = 0x2,
1196    },
1197    { .uname = "LOCAL_TO_NODE_2",
1198      .udesc = "From Local node to Node 2",
1199      .ucode = 0x4,
1200    },
1201    { .uname = "LOCAL_TO_NODE_3",
1202      .udesc = "From Local node to Node 3",
1203      .ucode = 0x8,
1204    },
1205    { .uname = "LOCAL_TO_NODE_4",
1206      .udesc = "From Local node to Node 4",
1207      .ucode = 0x10,
1208    },
1209    { .uname = "LOCAL_TO_NODE_5",
1210      .udesc = "From Local node to Node 5",
1211      .ucode = 0x20,
1212    },
1213    { .uname = "LOCAL_TO_NODE_6",
1214      .udesc = "From Local node to Node 6",
1215      .ucode = 0x40,
1216    },
1217    { .uname = "LOCAL_TO_NODE_7",
1218      .udesc = "From Local node to Node 7",
1219      .ucode = 0x80,
1220    },
1221    { .uname  = "ALL",
1222      .udesc  = "All sub-events selected",
1223      .ucode = 0xff,
1224      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
1225    },
1226 };
1227
1228 static const amd64_umask_t amd64_fam15h_nb_io_to_dram_requests_to_target_node[]={
1229    { .uname = "LOCAL_TO_NODE_0",
1230      .udesc = "From Local node to Node 0",
1231      .ucode = 0x1,
1232    },
1233    { .uname = "LOCAL_TO_NODE_1",
1234      .udesc = "From Local node to Node 1",
1235      .ucode = 0x2,
1236    },
1237    { .uname = "LOCAL_TO_NODE_2",
1238      .udesc = "From Local node to Node 2",
1239      .ucode = 0x4,
1240    },
1241    { .uname = "LOCAL_TO_NODE_3",
1242      .udesc = "From Local node to Node 3",
1243      .ucode = 0x8,
1244    },
1245    { .uname = "LOCAL_TO_NODE_4",
1246      .udesc = "From Local node to Node 4",
1247      .ucode = 0x10,
1248    },
1249    { .uname = "LOCAL_TO_NODE_5",
1250      .udesc = "From Local node to Node 5",
1251      .ucode = 0x20,
1252    },
1253    { .uname = "LOCAL_TO_NODE_6",
1254      .udesc = "From Local node to Node 6",
1255      .ucode = 0x40,
1256    },
1257    { .uname = "LOCAL_TO_NODE_7",
1258      .udesc = "From Local node to Node 7",
1259      .ucode = 0x80,
1260    },
1261    { .uname  = "ALL",
1262      .udesc  = "All sub-events selected",
1263      .ucode = 0xff,
1264      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
1265    },
1266 };
1267
1268 static const amd64_umask_t amd64_fam15h_nb_cpu_read_command_requests_to_target_node_0_3[]={
1269    { .uname = "READ_BLOCK_LOCAL_TO_NODE_0",
1270      .udesc = "Read block From Local node to Node 0",
1271      .ucode = 0x11,
1272      .uflags= AMD64_FL_NCOMBO,
1273    },
1274    { .uname = "READ_BLOCK_SHARED_LOCAL_TO_NODE_0",
1275      .udesc = "Read block shared From Local node to Node 0",
1276      .ucode = 0x12,
1277      .uflags= AMD64_FL_NCOMBO,
1278    },
1279    { .uname = "READ_BLOCK_MODIFIED_LOCAL_TO_NODE_0",
1280      .udesc = "Read block modified From Local node to Node 0",
1281      .ucode = 0x14,
1282      .uflags= AMD64_FL_NCOMBO,
1283    },
1284    { .uname = "CHANGE_TO_DIRTY_LOCAL_TO_NODE_0",
1285      .udesc = "Change-to-Dirty From Local node to Node 0",
1286      .ucode = 0x18,
1287      .uflags= AMD64_FL_NCOMBO,
1288    },
1289    { .uname = "READ_BLOCK_LOCAL_TO_NODE_1",
1290      .udesc = "Read block From Local node to Node 1",
1291      .ucode = 0x21,
1292      .uflags= AMD64_FL_NCOMBO,
1293    },
1294    { .uname = "READ_BLOCK_SHARED_LOCAL_TO_NODE_1",
1295      .udesc = "Read block shared From Local node to Node 1",
1296      .ucode = 0x22,
1297      .uflags= AMD64_FL_NCOMBO,
1298    },
1299    { .uname = "READ_BLOCK_MODIFIED_LOCAL_TO_NODE_1",
1300      .udesc = "Read block modified From Local node to Node 1",
1301      .ucode = 0x24,
1302      .uflags= AMD64_FL_NCOMBO,
1303    },
1304    { .uname = "CHANGE_TO_DIRTY_LOCAL_TO_NODE_1",
1305      .udesc = "Change-to-Dirty From Local node to Node 1",
1306      .ucode = 0x28,
1307      .uflags= AMD64_FL_NCOMBO,
1308    },
1309    { .uname = "READ_BLOCK_LOCAL_TO_NODE_2",
1310      .udesc = "Read block From Local node to Node 2",
1311      .ucode = 0x41,
1312      .uflags= AMD64_FL_NCOMBO,
1313    },
1314    { .uname = "READ_BLOCK_SHARED_LOCAL_TO_NODE_2",
1315      .udesc = "Read block shared From Local node to Node 2",
1316      .ucode = 0x42,
1317      .uflags= AMD64_FL_NCOMBO,
1318    },
1319    { .uname = "READ_BLOCK_MODIFIED_LOCAL_TO_NODE_2",
1320      .udesc = "Read block modified From Local node to Node 2",
1321      .ucode = 0x44,
1322      .uflags= AMD64_FL_NCOMBO,
1323    },
1324    { .uname = "CHANGE_TO_DIRTY_LOCAL_TO_NODE_2",
1325      .udesc = "Change-to-Dirty From Local node to Node 2",
1326      .ucode = 0x48,
1327      .uflags= AMD64_FL_NCOMBO,
1328    },
1329    { .uname = "READ_BLOCK_LOCAL_TO_NODE_3",
1330      .udesc = "Read block From Local node to Node 3",
1331      .ucode = 0x81,
1332      .uflags= AMD64_FL_NCOMBO,
1333    },
1334    { .uname = "READ_BLOCK_SHARED_LOCAL_TO_NODE_3",
1335      .udesc = "Read block shared From Local node to Node 3",
1336      .ucode = 0x82,
1337      .uflags= AMD64_FL_NCOMBO,
1338    },
1339    { .uname = "READ_BLOCK_MODIFIED_LOCAL_TO_NODE_3",
1340      .udesc = "Read block modified From Local node to Node 3",
1341      .ucode = 0x84,
1342      .uflags= AMD64_FL_NCOMBO,
1343    },
1344    { .uname = "CHANGE_TO_DIRTY_LOCAL_TO_NODE_3",
1345      .udesc = "Change-to-Dirty From Local node to Node 3",
1346      .ucode = 0x88,
1347      .uflags= AMD64_FL_NCOMBO,
1348    },
1349    { .uname  = "ALL",
1350      .udesc  = "All sub-events selected",
1351      .ucode = 0xff,
1352      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
1353    },
1354 };
1355
1356 static const amd64_umask_t amd64_fam15h_nb_cpu_read_command_requests_to_target_node_4_7[]={
1357    { .uname = "READ_BLOCK_LOCAL_TO_NODE_4",
1358      .udesc = "Read block From Local node to Node 4",
1359      .ucode = 0x11,
1360      .uflags= AMD64_FL_NCOMBO,
1361    },
1362    { .uname = "READ_BLOCK_SHARED_LOCAL_TO_NODE_4",
1363      .udesc = "Read block shared From Local node to Node 4",
1364      .ucode = 0x12,
1365      .uflags= AMD64_FL_NCOMBO,
1366    },
1367    { .uname = "READ_BLOCK_MODIFIED_LOCAL_TO_NODE_4",
1368      .udesc = "Read block modified From Local node to Node 4",
1369      .ucode = 0x14,
1370      .uflags= AMD64_FL_NCOMBO,
1371    },
1372    { .uname = "CHANGE_TO_DIRTY_LOCAL_TO_NODE_4",
1373      .udesc = "Change-to-Dirty From Local node to Node 4",
1374      .ucode = 0x18,
1375      .uflags= AMD64_FL_NCOMBO,
1376    },
1377    { .uname = "READ_BLOCK_LOCAL_TO_NODE_5",
1378      .udesc = "Read block From Local node to Node 5",
1379      .ucode = 0x21,
1380      .uflags= AMD64_FL_NCOMBO,
1381    },
1382    { .uname = "READ_BLOCK_SHARED_LOCAL_TO_NODE_5",
1383      .udesc = "Read block shared From Local node to Node 5",
1384      .ucode = 0x22,
1385      .uflags= AMD64_FL_NCOMBO,
1386    },
1387    { .uname = "READ_BLOCK_MODIFIED_LOCAL_TO_NODE_5",
1388      .udesc = "Read block modified From Local node to Node 5",
1389      .ucode = 0x24,
1390      .uflags= AMD64_FL_NCOMBO,
1391    },
1392    { .uname = "CHANGE_TO_DIRTY_LOCAL_TO_NODE_5",
1393      .udesc = "Change-to-Dirty From Local node to Node 5",
1394      .ucode = 0x28,
1395      .uflags= AMD64_FL_NCOMBO,
1396    },
1397    { .uname = "READ_BLOCK_LOCAL_TO_NODE_6",
1398      .udesc = "Read block From Local node to Node 6",
1399      .ucode = 0x41,
1400      .uflags= AMD64_FL_NCOMBO,
1401    },
1402    { .uname = "READ_BLOCK_SHARED_LOCAL_TO_NODE_6",
1403      .udesc = "Read block shared From Local node to Node 6",
1404      .ucode = 0x42,
1405      .uflags= AMD64_FL_NCOMBO,
1406    },
1407    { .uname = "READ_BLOCK_MODIFIED_LOCAL_TO_NODE_6",
1408      .udesc = "Read block modified From Local node to Node 6",
1409      .ucode = 0x44,
1410      .uflags= AMD64_FL_NCOMBO,
1411    },
1412    { .uname = "CHANGE_TO_DIRTY_LOCAL_TO_NODE_6",
1413      .udesc = "Change-to-Dirty From Local node to Node 6",
1414      .ucode = 0x48,
1415      .uflags= AMD64_FL_NCOMBO,
1416    },
1417    { .uname = "READ_BLOCK_LOCAL_TO_NODE_7",
1418      .udesc = "Read block From Local node to Node 7",
1419      .ucode = 0x81,
1420      .uflags= AMD64_FL_NCOMBO,
1421    },
1422    { .uname = "READ_BLOCK_SHARED_LOCAL_TO_NODE_7",
1423      .udesc = "Read block shared From Local node to Node 7",
1424      .ucode = 0x82,
1425      .uflags= AMD64_FL_NCOMBO,
1426    },
1427    { .uname = "READ_BLOCK_MODIFIED_LOCAL_TO_NODE_7",
1428      .udesc = "Read block modified From Local node to Node 7",
1429      .ucode = 0x84,
1430      .uflags= AMD64_FL_NCOMBO,
1431    },
1432    { .uname = "CHANGE_TO_DIRTY_LOCAL_TO_NODE_7",
1433      .udesc = "Change-to-Dirty From Local node to Node 7",
1434      .ucode = 0x88,
1435      .uflags= AMD64_FL_NCOMBO,
1436    },
1437    { .uname  = "ALL",
1438      .udesc  = "All sub-events selected",
1439      .ucode = 0xff,
1440      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
1441    },
1442 };
1443
1444 static const amd64_umask_t amd64_fam15h_nb_cpu_command_requests_to_target_node[]={
1445    { .uname = "READ_SIZED_LOCAL_TO_NODE_0",
1446      .udesc = "Read Sized From Local node to Node 0",
1447      .ucode = 0x11,
1448      .uflags= AMD64_FL_NCOMBO,
1449    },
1450    { .uname = "WRITE_SIZED_LOCAL_TO_NODE_0",
1451      .udesc = "Write Sized From Local node to Node 0",
1452      .ucode = 0x12,
1453      .uflags= AMD64_FL_NCOMBO,
1454    },
1455    { .uname = "VICTIM_BLOCK_LOCAL_TO_NODE_0",
1456      .udesc = "Victim Block From Local node to Node 0",
1457      .ucode = 0x14,
1458      .uflags= AMD64_FL_NCOMBO,
1459    },
1460    { .uname = "READ_SIZED_LOCAL_TO_NODE_1",
1461      .udesc = "Read Sized From Local node to Node 1",
1462      .ucode = 0x21,
1463      .uflags= AMD64_FL_NCOMBO,
1464    },
1465    { .uname = "WRITE_SIZED_LOCAL_TO_NODE_1",
1466      .udesc = "Write Sized From Local node to Node 1",
1467      .ucode = 0x22,
1468      .uflags= AMD64_FL_NCOMBO,
1469    },
1470    { .uname = "VICTIM_BLOCK_LOCAL_TO_NODE_1",
1471      .udesc = "Victim Block From Local node to Node 1",
1472      .ucode = 0x24,
1473      .uflags= AMD64_FL_NCOMBO,
1474    },
1475    { .uname = "READ_SIZED_LOCAL_TO_NODE_2",
1476      .udesc = "Read Sized From Local node to Node 2",
1477      .ucode = 0x41,
1478      .uflags= AMD64_FL_NCOMBO,
1479    },
1480    { .uname = "WRITE_SIZED_LOCAL_TO_NODE_2",
1481      .udesc = "Write Sized From Local node to Node 2",
1482      .ucode = 0x42,
1483      .uflags= AMD64_FL_NCOMBO,
1484    },
1485    { .uname = "VICTIM_BLOCK_LOCAL_TO_NODE_2",
1486      .udesc = "Victim Block From Local node to Node 2",
1487      .ucode = 0x44,
1488      .uflags= AMD64_FL_NCOMBO,
1489    },
1490    { .uname = "READ_SIZED_LOCAL_TO_NODE_3",
1491      .udesc = "Read Sized From Local node to Node 3",
1492      .ucode = 0x81,
1493      .uflags= AMD64_FL_NCOMBO,
1494    },
1495    { .uname = "WRITE_SIZED_LOCAL_TO_NODE_3",
1496      .udesc = "Write Sized From Local node to Node 3",
1497      .ucode = 0x82,
1498      .uflags= AMD64_FL_NCOMBO,
1499    },
1500    { .uname = "VICTIM_BLOCK_LOCAL_TO_NODE_3",
1501      .udesc = "Victim Block From Local node to Node 3",
1502      .ucode = 0x84,
1503      .uflags= AMD64_FL_NCOMBO,
1504    },
1505    { .uname = "READ_SIZED_LOCAL_TO_NODE_4",
1506      .udesc = "Read Sized From Local node to Node 4",
1507      .ucode = 0x19,
1508      .uflags= AMD64_FL_NCOMBO,
1509    },
1510    { .uname = "WRITE_SIZED_LOCAL_TO_NODE_4",
1511      .udesc = "Write Sized From Local node to Node 4",
1512      .ucode = 0x1a,
1513      .uflags= AMD64_FL_NCOMBO,
1514    },
1515    { .uname = "VICTIM_BLOCK_LOCAL_TO_NODE_4",
1516      .udesc = "Victim Block From Local node to Node 4",
1517      .ucode = 0x1c,
1518      .uflags= AMD64_FL_NCOMBO,
1519    },
1520    { .uname = "READ_SIZED_LOCAL_TO_NODE_5",
1521      .udesc = "Read Sized From Local node to Node 5",
1522      .ucode = 0x29,
1523      .uflags= AMD64_FL_NCOMBO,
1524    },
1525    { .uname = "WRITE_SIZED_LOCAL_TO_NODE_5",
1526      .udesc = "Write Sized From Local node to Node 5",
1527      .ucode = 0x2a,
1528      .uflags= AMD64_FL_NCOMBO,
1529    },
1530    { .uname = "VICTIM_BLOCK_LOCAL_TO_NODE_5",
1531      .udesc = "Victim Block From Local node to Node 5",
1532      .ucode = 0x2c,
1533      .uflags= AMD64_FL_NCOMBO,
1534    },
1535    { .uname = "READ_SIZED_LOCAL_TO_NODE_6",
1536      .udesc = "Read Sized From Local node to Node 6",
1537      .ucode = 0x49,
1538      .uflags= AMD64_FL_NCOMBO,
1539    },
1540    { .uname = "WRITE_SIZED_LOCAL_TO_NODE_6",
1541      .udesc = "Write Sized From Local node to Node 6",
1542      .ucode = 0x4a,
1543      .uflags= AMD64_FL_NCOMBO,
1544    },
1545    { .uname = "VICTIM_BLOCK_LOCAL_TO_NODE_6",
1546      .udesc = "Victim Block From Local node to Node 6",
1547      .ucode = 0x4c,
1548      .uflags= AMD64_FL_NCOMBO,
1549    },
1550    { .uname = "READ_SIZED_LOCAL_TO_NODE_7",
1551      .udesc = "Read Sized From Local node to Node 7",
1552      .ucode = 0x89,
1553      .uflags= AMD64_FL_NCOMBO,
1554    },
1555    { .uname = "WRITE_SIZED_LOCAL_TO_NODE_7",
1556      .udesc = "Write Sized From Local node to Node 7",
1557      .ucode = 0x8a,
1558      .uflags= AMD64_FL_NCOMBO,
1559    },
1560    { .uname = "VICTIM_BLOCK_LOCAL_TO_NODE_7",
1561      .udesc = "Victim Block From Local node to Node 7",
1562      .ucode = 0x8c,
1563      .uflags= AMD64_FL_NCOMBO,
1564    },
1565    { .uname  = "ALL_LOCAL_TO_NODE_0_3",
1566      .udesc  = "All From Local node to Node 0-3",
1567      .ucode = 0xf7,
1568      .uflags= AMD64_FL_NCOMBO,
1569    },
1570    { .uname  = "ALL_LOCAL_TO_NODE_4_7",
1571      .udesc  = "All From Local node to Node 4-7",
1572      .ucode = 0xff,
1573      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
1574    },
1575 };
1576
1577 static const amd64_umask_t amd64_fam15h_nb_request_cache_status_0[]={
1578    { .uname = "PROBE_HIT_S",
1579      .udesc = "Probe Hit S",
1580      .ucode = 0x1,
1581    },
1582    { .uname = "PROBE_HIT_E",
1583      .udesc = "Probe Hit E",
1584      .ucode = 0x2,
1585    },
1586    { .uname = "PROBE_HIT_MUW_OR_O",
1587      .udesc = "Probe Hit MuW or O",
1588      .ucode = 0x4,
1589    },
1590    { .uname = "PROBE_HIT_M",
1591      .udesc = "Probe Hit M",
1592      .ucode = 0x8,
1593    },
1594    { .uname = "PROBE_MISS",
1595      .udesc = "Probe Miss",
1596      .ucode = 0x10,
1597    },
1598    { .uname = "DIRECTED_PROBE",
1599      .udesc = "Directed Probe",
1600      .ucode = 0x20,
1601    },
1602    { .uname = "TRACK_CACHE_STAT_FOR_RDBLK",
1603      .udesc = "Track Cache Stat for RdBlk",
1604      .ucode = 0x40,
1605    },
1606    { .uname = "TRACK_CACHE_STAT_FOR_RDBLKS",
1607      .udesc = "Track Cache Stat for RdBlkS",
1608      .ucode = 0x80,
1609    },
1610    { .uname  = "ALL",
1611      .udesc  = "All sub-events selected",
1612      .ucode = 0xff,
1613      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
1614    },
1615 };
1616
1617 static const amd64_umask_t amd64_fam15h_nb_request_cache_status_1[]={
1618    { .uname = "PROBE_HIT_S",
1619      .udesc = "Probe Hit S",
1620      .ucode = 0x1,
1621    },
1622    { .uname = "PROBE_HIT_E",
1623      .udesc = "Probe Hit E",
1624      .ucode = 0x2,
1625    },
1626    { .uname = "PROBE_HIT_MUW_OR_O",
1627      .udesc = "Probe Hit MuW or O",
1628      .ucode = 0x4,
1629    },
1630    { .uname = "PROBE_HIT_M",
1631      .udesc = "Probe Hit M",
1632      .ucode = 0x8,
1633    },
1634    { .uname = "PROBE_MISS",
1635      .udesc = "Probe Miss",
1636      .ucode = 0x10,
1637    },
1638    { .uname = "DIRECTED_PROBE",
1639      .udesc = "Directed Probe",
1640      .ucode = 0x20,
1641    },
1642    { .uname = "TRACK_CACHE_STAT_FOR_CHGTODIRTY",
1643      .udesc = "Track Cache Stat for ChgToDirty",
1644      .ucode = 0x40,
1645    },
1646    { .uname = "TRACK_CACHE_STAT_FOR_RDBLKM",
1647      .udesc = "Track Cache Stat for RdBlkM",
1648      .ucode = 0x80,
1649    },
1650    { .uname  = "ALL",
1651      .udesc  = "All sub-events selected",
1652      .ucode = 0xff,
1653      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
1654    },
1655 };
1656
1657 static const amd64_umask_t amd64_fam15h_nb_memory_controller_requests[]={
1658    { .uname = "WRITE_REQUESTS_TO_DCT",
1659      .udesc = "Write requests sent to the DCT",
1660      .ucode = 0x1,
1661    },
1662    { .uname = "READ_REQUESTS_TO_DCT",
1663      .udesc = "Read requests (including prefetch requests) sent to the DCT",
1664      .ucode = 0x2,
1665    },
1666    { .uname = "PREFETCH_REQUESTS_TO_DCT",
1667      .udesc = "Prefetch requests sent to the DCT",
1668      .ucode = 0x4,
1669    },
1670    { .uname = "32_BYTES_SIZED_WRITES",
1671      .udesc = "32 Bytes Sized Writes",
1672      .ucode = 0x8,
1673    },
1674    { .uname = "64_BYTES_SIZED_WRITES",
1675      .udesc = "64 Bytes Sized Writes",
1676      .ucode = 0x10,
1677    },
1678    { .uname = "32_BYTES_SIZED_READS",
1679      .udesc = "32 Bytes Sized Reads",
1680      .ucode = 0x20,
1681    },
1682    { .uname = "64_BYTE_SIZED_READS",
1683      .udesc = "64 Byte Sized Reads",
1684      .ucode = 0x40,
1685    },
1686    { .uname = "READ_REQUESTS_TO_DCT_WHILE_WRITES_PENDING",
1687      .udesc = "Read requests sent to the DCT while writes requests are pending in the DCT",
1688      .ucode = 0x80,
1689    },
1690    { .uname  = "ALL",
1691      .udesc  = "All sub-events selected",
1692      .ucode = 0xff,
1693      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
1694    },
1695 };
1696
1697 static const amd64_umask_t amd64_fam15h_nb_read_request_to_l3_cache[]={
1698    { .uname = "READ_BLOCK_EXCLUSIVE",
1699      .udesc = "Read Block Exclusive (Data cache read)",
1700      .ucode = 0x1,
1701      .grpid = 0,
1702    },
1703    { .uname = "READ_BLOCK_SHARED",
1704      .udesc = "Read Block Shared (Instruction cache read)",
1705      .ucode = 0x2,
1706      .grpid = 0,
1707    },
1708    { .uname = "READ_BLOCK_MODIFY",
1709      .udesc = "Read Block Modify",
1710      .ucode = 0x4,
1711      .grpid = 0,
1712    },
1713    { .uname = "PREFETCH",
1714      .udesc = "Count prefetches only",
1715      .ucode = 0x8,
1716      .grpid = 0,
1717    },
1718    { .uname  = "READ_BLOCK_ANY",
1719      .udesc  = "Count any read request",
1720      .ucode = 0x7,
1721      .grpid = 0,
1722      .uflags= AMD64_FL_DFL | AMD64_FL_NCOMBO,
1723    },
1724   CORE_SELECT(1),
1725 };
1726
1727 static const amd64_umask_t amd64_fam15h_nb_l3_fills_caused_by_l2_evictions[]={
1728    { .uname = "SHARED",
1729      .udesc = "Shared",
1730      .ucode = 0x1,
1731      .grpid = 0,
1732    },
1733    { .uname = "EXCLUSIVE",
1734      .udesc = "Exclusive",
1735      .ucode = 0x2,
1736      .grpid = 0,
1737    },
1738    { .uname = "OWNED",
1739      .udesc = "Owned",
1740      .ucode = 0x4,
1741      .grpid = 0,
1742    },
1743    { .uname = "MODIFIED",
1744      .udesc = "Modified",
1745      .ucode = 0x8,
1746      .grpid = 0,
1747    },
1748   { .uname  = "ALL",
1749      .udesc  = "All sub-events selected",
1750      .ucode = 0xff,
1751      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
1752      .grpid = 0,
1753    },
1754    CORE_SELECT(1),
1755  };
1756
1757 static const amd64_umask_t amd64_fam15h_nb_l3_evictions[]={
1758    { .uname = "SHARED",
1759      .udesc = "Shared",
1760      .ucode = 0x1,
1761    },
1762    { .uname = "EXCLUSIVE",
1763      .udesc = "Exclusive",
1764      .ucode = 0x2,
1765    },
1766    { .uname = "OWNED",
1767      .udesc = "Owned",
1768      .ucode = 0x4,
1769    },
1770    { .uname = "MODIFIED",
1771      .udesc = "Modified",
1772      .ucode = 0x8,
1773    },
1774    { .uname  = "ALL",
1775      .udesc  = "All sub-events selected",
1776      .ucode = 0xf,
1777      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
1778    },
1779 };
1780
1781 static const amd64_umask_t amd64_fam15h_nb_l3_latency[]={
1782    { .uname = "L3_REQUEST_CYCLE",
1783      .udesc = "L3 Request cycle count.",
1784      .ucode = 0x1,
1785    },
1786    { .uname = "L3_REQUEST",
1787      .udesc = "L3 request count.",
1788      .ucode = 0x2,
1789    },
1790    { .uname  = "ALL",
1791      .udesc  = "All sub-events selected",
1792      .ucode = 0x3,
1793      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
1794    },
1795 };
1796
1797 static const amd64_entry_t amd64_fam15h_nb_pe[]={
1798 { .name    = "DRAM_ACCESSES",
1799   .desc    = "DRAM Accesses",
1800   .code    = 0xe0,
1801   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_nb_dram_accesses),
1802   .ngrp    = 1,
1803   .umasks  = amd64_fam15h_nb_dram_accesses,
1804 },
1805 { .name    = "DRAM_CONTROLLER_PAGE_TABLE_OVERFLOWS",
1806   .desc    = "DRAM Controller Page Table Overflows",
1807   .code    = 0xe1,
1808   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_nb_dram_controller_page_table_overflows),
1809   .ngrp    = 1,
1810   .umasks  = amd64_fam15h_nb_dram_controller_page_table_overflows,
1811 },
1812 { .name    = "MEMORY_CONTROLLER_DRAM_COMMAND_SLOTS_MISSED",
1813   .desc    = "Memory Controller DRAM Command Slots Missed",
1814   .code    = 0xe2,
1815   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_nb_memory_controller_dram_command_slots_missed),
1816   .ngrp    = 1,
1817   .umasks  = amd64_fam15h_nb_memory_controller_dram_command_slots_missed,
1818 },
1819 { .name    = "MEMORY_CONTROLLER_TURNAROUNDS",
1820   .desc    = "Memory Controller Turnarounds",
1821   .code    = 0xe3,
1822   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_nb_memory_controller_turnarounds),
1823   .ngrp    = 1,
1824   .umasks  = amd64_fam15h_nb_memory_controller_turnarounds,
1825 },
1826 { .name    = "MEMORY_CONTROLLER_BYPASS_COUNTER_SATURATION",
1827   .desc    = "Memory Controller Bypass Counter Saturation",
1828   .code    = 0xe4,
1829   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_nb_memory_controller_bypass_counter_saturation),
1830   .ngrp    = 1,
1831   .umasks  = amd64_fam15h_nb_memory_controller_bypass_counter_saturation,
1832 },
1833 { .name    = "THERMAL_STATUS",
1834   .desc    = "Thermal Status",
1835   .code    = 0xe8,
1836   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_nb_thermal_status),
1837   .ngrp    = 1,
1838   .umasks  = amd64_fam15h_nb_thermal_status,
1839 },
1840 { .name    = "CPU_IO_REQUESTS_TO_MEMORY_IO",
1841   .desc    = "CPU/IO Requests to Memory/IO",
1842   .code    = 0xe9,
1843   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_nb_cpu_io_requests_to_memory_io),
1844   .ngrp    = 1,
1845   .umasks  = amd64_fam15h_nb_cpu_io_requests_to_memory_io,
1846 },
1847 { .name    = "CACHE_BLOCK_COMMANDS",
1848   .desc    = "Cache Block Commands",
1849   .code    = 0xea,
1850   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_nb_cache_block_commands),
1851   .ngrp    = 1,
1852   .umasks  = amd64_fam15h_nb_cache_block_commands,
1853 },
1854 { .name    = "SIZED_COMMANDS",
1855   .desc    = "Sized Commands",
1856   .code    = 0xeb,
1857   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_nb_sized_commands),
1858   .ngrp    = 1,
1859   .umasks  = amd64_fam15h_nb_sized_commands,
1860 },
1861 { .name    = "PROBE_RESPONSES_AND_UPSTREAM_REQUESTS",
1862   .desc    = "Probe Responses and Upstream Requests",
1863   .code    = 0xec,
1864   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_nb_probe_responses_and_upstream_requests),
1865   .ngrp    = 1,
1866   .umasks  = amd64_fam15h_nb_probe_responses_and_upstream_requests,
1867 },
1868 { .name    = "GART_EVENTS",
1869   .desc    = "GART Events",
1870   .code    = 0xee,
1871   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_nb_gart_events),
1872   .ngrp    = 1,
1873   .umasks  = amd64_fam15h_nb_gart_events,
1874 },
1875 { .name    = "LINK_TRANSMIT_BANDWIDTH_LINK_0",
1876   .desc    = "Link Transmit Bandwidth Link 0",
1877   .code    = 0xf6,
1878   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_nb_link_transmit_bandwidth),
1879   .ngrp    = 2,
1880   .umasks  = amd64_fam15h_nb_link_transmit_bandwidth,
1881 },
1882 { .name    = "LINK_TRANSMIT_BANDWIDTH_LINK_1",
1883   .desc    = "Link Transmit Bandwidth Link 1",
1884   .code    = 0xf7,
1885   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_nb_link_transmit_bandwidth),
1886   .ngrp    = 2,
1887   .umasks  = amd64_fam15h_nb_link_transmit_bandwidth,
1888 },
1889 { .name    = "LINK_TRANSMIT_BANDWIDTH_LINK_2",
1890   .desc    = "Link Transmit Bandwidth Link 2",
1891   .code    = 0xf8,
1892   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_nb_link_transmit_bandwidth),
1893   .ngrp    = 2,
1894   .umasks  = amd64_fam15h_nb_link_transmit_bandwidth,
1895 },
1896 { .name    = "LINK_TRANSMIT_BANDWIDTH_LINK_3",
1897   .desc    = "Link Transmit Bandwidth Link 3",
1898   .code    = 0x1f9,
1899   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_nb_link_transmit_bandwidth),
1900   .ngrp    = 2,
1901   .umasks  = amd64_fam15h_nb_link_transmit_bandwidth,
1902 },
1903 { .name    = "CPU_TO_DRAM_REQUESTS_TO_TARGET_NODE",
1904   .desc    = "CPU to DRAM Requests to Target Node",
1905   .code    = 0x1e0,
1906   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_nb_cpu_to_dram_requests_to_target_node),
1907   .ngrp    = 1,
1908   .umasks  = amd64_fam15h_nb_cpu_to_dram_requests_to_target_node,
1909 },
1910 { .name    = "IO_TO_DRAM_REQUESTS_TO_TARGET_NODE",
1911   .desc    = "IO to DRAM Requests to Target Node",
1912   .code    = 0x1e1,
1913   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_nb_io_to_dram_requests_to_target_node),
1914   .ngrp    = 1,
1915   .umasks  = amd64_fam15h_nb_io_to_dram_requests_to_target_node,
1916 },
1917 { .name    = "CPU_READ_COMMAND_LATENCY_TO_TARGET_NODE_0_3",
1918   .desc    = "CPU Read Command Latency to Target Node 0-3",
1919   .code    = 0x1e2,
1920   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_nb_cpu_read_command_requests_to_target_node_0_3),
1921   .ngrp    = 1,
1922   .umasks  = amd64_fam15h_nb_cpu_read_command_requests_to_target_node_0_3,
1923 },
1924 { .name    = "CPU_READ_COMMAND_REQUESTS_TO_TARGET_NODE_0_3",
1925   .desc    = "CPU Read Command Requests to Target Node 0-3",
1926   .code    = 0x1e3,
1927   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_nb_cpu_read_command_requests_to_target_node_0_3),
1928   .ngrp    = 1,
1929   .umasks  = amd64_fam15h_nb_cpu_read_command_requests_to_target_node_0_3,
1930 },
1931 { .name    = "CPU_READ_COMMAND_LATENCY_TO_TARGET_NODE_4_7",
1932   .desc    = "CPU Read Command Latency to Target Node 4-7",
1933   .code    = 0x1e4,
1934   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_nb_cpu_read_command_requests_to_target_node_4_7),
1935   .ngrp    = 1,
1936   .umasks  = amd64_fam15h_nb_cpu_read_command_requests_to_target_node_4_7,
1937 },
1938 { .name    = "CPU_READ_COMMAND_REQUESTS_TO_TARGET_NODE_4_7",
1939   .desc    = "CPU Read Command Requests to Target Node 4-7",
1940   .code    = 0x1e5,
1941   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_nb_cpu_read_command_requests_to_target_node_4_7),
1942   .ngrp    = 1,
1943   .umasks  = amd64_fam15h_nb_cpu_read_command_requests_to_target_node_4_7,
1944 },
1945 { .name    = "CPU_COMMAND_LATENCY_TO_TARGET_NODE",
1946   .desc    = "CPU Command Latency to Target Node",
1947   .code    = 0x1e6,
1948   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_nb_cpu_command_requests_to_target_node),
1949   .ngrp    = 1,
1950   .umasks  = amd64_fam15h_nb_cpu_command_requests_to_target_node,
1951 },
1952 { .name    = "CPU_REQUESTS_TO_TARGET_NODE",
1953   .desc    = "CPU Requests to Target Node",
1954   .code    = 0x1e7,
1955   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_nb_cpu_command_requests_to_target_node),
1956   .ngrp    = 1,
1957   .umasks  = amd64_fam15h_nb_cpu_command_requests_to_target_node,
1958 },
1959 { .name    = "REQUEST_CACHE_STATUS_0",
1960   .desc    = "Request Cache Status 0",
1961   .code    = 0x1ea,
1962   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_nb_request_cache_status_0),
1963   .ngrp    = 1,
1964   .umasks  = amd64_fam15h_nb_request_cache_status_0,
1965 },
1966 { .name    = "REQUEST_CACHE_STATUS_1",
1967   .desc    = "Request Cache Status 1",
1968   .code    = 0x1eb,
1969   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_nb_request_cache_status_1),
1970   .ngrp    = 1,
1971   .umasks  = amd64_fam15h_nb_request_cache_status_1,
1972 },
1973 { .name    = "MEMORY_CONTROLLER_REQUESTS",
1974   .desc    = "Memory Controller Requests",
1975   .code    = 0x1f0,
1976   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_nb_memory_controller_requests),
1977   .ngrp    = 1,
1978   .umasks  = amd64_fam15h_nb_memory_controller_requests,
1979 },
1980 { .name    = "READ_REQUEST_TO_L3_CACHE",
1981   .desc    = "Read Request to L3 Cache",
1982   .code    = 0x4e0,
1983   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_nb_read_request_to_l3_cache),
1984   .ngrp    = 2,
1985   .umasks  = amd64_fam15h_nb_read_request_to_l3_cache,
1986 },
1987 { .name    = "L3_CACHE_MISSES",
1988   .desc    = "L3 Cache Misses",
1989   .code    = 0x4e1,
1990   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_nb_read_request_to_l3_cache),
1991   .ngrp    = 2,
1992   .umasks  = amd64_fam15h_nb_read_request_to_l3_cache,
1993 },
1994 { .name    = "L3_FILLS_CAUSED_BY_L2_EVICTIONS",
1995   .desc    = "L3 Fills caused by L2 Evictions",
1996   .code    = 0x4e2,
1997   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_nb_l3_fills_caused_by_l2_evictions),
1998   .ngrp    = 2,
1999   .umasks  = amd64_fam15h_nb_l3_fills_caused_by_l2_evictions,
2000 },
2001 { .name    = "L3_EVICTIONS",
2002   .desc    = "L3 Evictions",
2003   .code    = 0x4e3,
2004   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_nb_l3_evictions),
2005   .ngrp    = 1,
2006   .umasks  = amd64_fam15h_nb_l3_evictions,
2007 },
2008 { .name    = "NON_CANCELED_L3_READ_REQUESTS",
2009   .desc    = "Non-canceled L3 Read Requests",
2010   .code    = 0x4ed,
2011   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_nb_read_request_to_l3_cache),
2012   .ngrp    = 2,
2013   .umasks  = amd64_fam15h_nb_read_request_to_l3_cache,
2014 },
2015 { .name    = "L3_LATENCY",
2016   .desc    = "L3 Latency",
2017   .code    = 0x4ef,
2018   .numasks = LIBPFM_ARRAY_SIZE(amd64_fam15h_nb_l3_latency),
2019   .ngrp    = 1,
2020   .umasks  = amd64_fam15h_nb_l3_latency,
2021 },
2022 };