vmm: Fix use-after-free in load_elf()
[akaros.git] / user / perfmon / events / amd64_events_k8.h
1 /*
2  * Copyright (c) 2011 Google, Inc
3  * Contributed by Stephane Eranian <eranian@gmail.com>
4  *
5  * Regenerated from previous version by:
6  *
7  * Copyright (c) 2006, 2007 Advanced Micro Devices, Inc.
8  * Contributed by Ray Bryant <raybry@mpdtxmail.amd.com> 
9  * Contributed by Robert Richter <robert.richter@amd.com>
10  *
11  * Permission is hereby granted, free of charge, to any person obtaining a copy
12  * of this software and associated documentation files (the "Software"), to deal
13  * in the Software without restriction, including without limitation the rights
14  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
15  * of the Software, and to permit persons to whom the Software is furnished to do so,
16  * subject to the following conditions:
17  *
18  * The above copyright notice and this permission notice shall be included in all
19  * copies or substantial portions of the Software.
20  *
21  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
22  * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
23  * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
24  * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
25  * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
26  * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27  *
28  * This file is part of libpfm, a performance monitoring support library for
29  * applications on Linux.
30  *
31  * This file has been automatically generated.
32  *
33  * PMU: amd64_k8 (AMD64 K8)
34  */
35
36 /* History
37  *
38  * Feb 10 2006 -- Ray Bryant, raybry@mpdtxmail.amd.com
39  *
40  * Brought event table up-to-date with the 3.85 (October 2005) version of the
41  * "BIOS and Kernel Developer's Guide for the AMD Athlon[tm] 64 and
42  * AMD Opteron[tm] Processors," AMD Publication # 26094.
43  * 
44  * Dec 12 2007 -- Robert Richter, robert.richter@amd.com
45  *
46  * Updated to: BIOS and Kernel Developer's Guide for AMD NPT Family
47  * 0Fh Processors, Publication # 32559, Revision: 3.08, Issue Date:
48  * July 2007
49  * 
50  * Feb 26 2009 -- Robert Richter, robert.richter@amd.com
51  *
52  * Updates and fixes of some revision flags and descriptions according
53  * to these documents:
54  * BIOS and Kernel Developer's Guide, #26094, Revision: 3.30
55  * BIOS and Kernel Developer's Guide, #32559, Revision: 3.12
56  */
57
58 static const amd64_umask_t amd64_k8_dispatched_fpu[]={
59    { .uname  = "OPS_ADD",
60      .udesc  = "Add pipe ops",
61      .ucode = 0x1,
62    },
63    { .uname  = "OPS_MULTIPLY",
64      .udesc  = "Multiply pipe ops",
65      .ucode = 0x2,
66    },
67    { .uname  = "OPS_STORE",
68      .udesc  = "Store pipe ops",
69      .ucode = 0x4,
70    },
71    { .uname  = "OPS_ADD_PIPE_LOAD_OPS",
72      .udesc  = "Add pipe load ops",
73      .ucode = 0x8,
74    },
75    { .uname  = "OPS_MULTIPLY_PIPE_LOAD_OPS",
76      .udesc  = "Multiply pipe load ops",
77      .ucode = 0x10,
78    },
79    { .uname  = "OPS_STORE_PIPE_LOAD_OPS",
80      .udesc  = "Store pipe load ops",
81      .ucode = 0x20,
82    },
83    { .uname  = "ALL",
84      .udesc  = "All sub-events selected",
85      .ucode = 0x3f,
86      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
87    },
88 };
89
90 static const amd64_umask_t amd64_k8_segment_register_loads[]={
91    { .uname  = "ES",
92      .udesc  = "ES",
93      .ucode = 0x1,
94    },
95    { .uname  = "CS",
96      .udesc  = "CS",
97      .ucode = 0x2,
98    },
99    { .uname  = "SS",
100      .udesc  = "SS",
101      .ucode = 0x4,
102    },
103    { .uname  = "DS",
104      .udesc  = "DS",
105      .ucode = 0x8,
106    },
107    { .uname  = "FS",
108      .udesc  = "FS",
109      .ucode = 0x10,
110    },
111    { .uname  = "GS",
112      .udesc  = "GS",
113      .ucode = 0x20,
114    },
115    { .uname  = "HS",
116      .udesc  = "HS",
117      .ucode = 0x40,
118    },
119    { .uname  = "ALL",
120      .udesc  = "All segments",
121      .ucode = 0x7f,
122      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
123    },
124 };
125
126 static const amd64_umask_t amd64_k8_locked_ops[]={
127    { .uname  = "EXECUTED",
128      .udesc  = "The number of locked instructions executed",
129      .ucode = 0x1,
130    },
131    { .uname  = "CYCLES_SPECULATIVE_PHASE",
132      .udesc  = "The number of cycles spent in speculative phase",
133      .ucode = 0x2,
134    },
135    { .uname  = "CYCLES_NON_SPECULATIVE_PHASE",
136      .udesc  = "The number of cycles spent in non-speculative phase (including cache miss penalty)",
137      .ucode = 0x4,
138    },
139    { .uname  = "ALL",
140      .udesc  = "All sub-events selected",
141      .ucode = 0x7,
142      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
143    },
144 };
145
146 static const amd64_umask_t amd64_k8_memory_requests[]={
147    { .uname  = "NON_CACHEABLE",
148      .udesc  = "Requests to non-cacheable (UC) memory",
149      .ucode = 0x1,
150    },
151    { .uname  = "WRITE_COMBINING",
152      .udesc  = "Requests to write-combining (WC) memory or WC buffer flushes to WB memory",
153      .ucode = 0x2,
154    },
155    { .uname  = "STREAMING_STORE",
156      .udesc  = "Streaming store (SS) requests",
157      .ucode = 0x80,
158    },
159    { .uname  = "ALL",
160      .udesc  = "All sub-events selected",
161      .ucode = 0x83,
162      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
163    },
164 };
165
166 static const amd64_umask_t amd64_k8_data_cache_refills[]={
167    { .uname  = "SYSTEM",
168      .udesc  = "Refill from System",
169      .ucode = 0x1,
170    },
171    { .uname  = "L2_SHARED",
172      .udesc  = "Shared-state line from L2",
173      .ucode = 0x2,
174    },
175    { .uname  = "L2_EXCLUSIVE",
176      .udesc  = "Exclusive-state line from L2",
177      .ucode = 0x4,
178    },
179    { .uname  = "L2_OWNED",
180      .udesc  = "Owned-state line from L2",
181      .ucode = 0x8,
182    },
183    { .uname  = "L2_MODIFIED",
184      .udesc  = "Modified-state line from L2",
185      .ucode = 0x10,
186    },
187    { .uname  = "ALL",
188      .udesc  = "Shared, Exclusive, Owned, Modified State Refills",
189      .ucode = 0x1f,
190      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
191    },
192 };
193
194 static const amd64_umask_t amd64_k8_data_cache_refills_from_system[]={
195    { .uname  = "INVALID",
196      .udesc  = "Invalid",
197      .ucode = 0x1,
198    },
199    { .uname  = "SHARED",
200      .udesc  = "Shared",
201      .ucode = 0x2,
202    },
203    { .uname  = "EXCLUSIVE",
204      .udesc  = "Exclusive",
205      .ucode = 0x4,
206    },
207    { .uname  = "OWNED",
208      .udesc  = "Owned",
209      .ucode = 0x8,
210    },
211    { .uname  = "MODIFIED",
212      .udesc  = "Modified",
213      .ucode = 0x10,
214    },
215    { .uname  = "ALL",
216      .udesc  = "Invalid, Shared, Exclusive, Owned, Modified",
217      .ucode = 0x1f,
218      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
219    },
220 };
221
222 static const amd64_umask_t amd64_k8_scrubber_single_bit_ecc_errors[]={
223    { .uname  = "SCRUBBER_ERROR",
224      .udesc  = "Scrubber error",
225      .ucode = 0x1,
226    },
227    { .uname  = "PIGGYBACK_ERROR",
228      .udesc  = "Piggyback scrubber errors",
229      .ucode = 0x2,
230    },
231    { .uname  = "ALL",
232      .udesc  = "All sub-events selected",
233      .ucode = 0x3,
234      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
235    },
236 };
237
238 static const amd64_umask_t amd64_k8_prefetch_instructions_dispatched[]={
239    { .uname  = "LOAD",
240      .udesc  = "Load (Prefetch, PrefetchT0/T1/T2)",
241      .ucode = 0x1,
242    },
243    { .uname  = "STORE",
244      .udesc  = "Store (PrefetchW)",
245      .ucode = 0x2,
246    },
247    { .uname  = "NTA",
248      .udesc  = "NTA (PrefetchNTA)",
249      .ucode = 0x4,
250    },
251    { .uname  = "ALL",
252      .udesc  = "All sub-events selected",
253      .ucode = 0x7,
254      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
255    },
256 };
257
258 static const amd64_umask_t amd64_k8_dcache_misses_by_locked_instructions[]={
259    { .uname  = "DATA_CACHE_MISSES_BY_LOCKED_INSTRUCTIONS",
260      .udesc  = "Data cache misses by locked instructions",
261      .ucode = 0x2,
262    },
263    { .uname  = "ALL",
264      .udesc  = "All sub-events selected",
265      .ucode = 0x2,
266      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
267    },
268 };
269
270 static const amd64_umask_t amd64_k8_data_prefetches[]={
271    { .uname  = "CANCELLED",
272      .udesc  = "Cancelled prefetches",
273      .ucode = 0x1,
274    },
275    { .uname  = "ATTEMPTED",
276      .udesc  = "Prefetch attempts",
277      .ucode = 0x2,
278    },
279    { .uname  = "ALL",
280      .udesc  = "All sub-events selected",
281      .ucode = 0x3,
282      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
283    },
284 };
285
286 static const amd64_umask_t amd64_k8_system_read_responses[]={
287    { .uname  = "EXCLUSIVE",
288      .udesc  = "Exclusive",
289      .ucode = 0x1,
290    },
291    { .uname  = "MODIFIED",
292      .udesc  = "Modified",
293      .ucode = 0x2,
294    },
295    { .uname  = "SHARED",
296      .udesc  = "Shared",
297      .ucode = 0x4,
298    },
299    { .uname  = "ALL",
300      .udesc  = "Exclusive, Modified, Shared",
301      .ucode = 0x7,
302      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
303    },
304 };
305
306 static const amd64_umask_t amd64_k8_quadwords_written_to_system[]={
307    { .uname  = "QUADWORD_WRITE_TRANSFER",
308      .udesc  = "Quadword write transfer",
309      .ucode = 0x1,
310    },
311    { .uname  = "ALL",
312      .udesc  = "All sub-events selected",
313      .ucode = 0x1,
314      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
315    },
316 };
317
318 static const amd64_umask_t amd64_k8_requests_to_l2[]={
319    { .uname  = "INSTRUCTIONS",
320      .udesc  = "IC fill",
321      .ucode = 0x1,
322    },
323    { .uname  = "DATA",
324      .udesc  = "DC fill",
325      .ucode = 0x2,
326    },
327    { .uname  = "TLB_WALK",
328      .udesc  = "TLB fill (page table walks)",
329      .ucode = 0x4,
330    },
331    { .uname  = "SNOOP",
332      .udesc  = "Tag snoop request",
333      .ucode = 0x8,
334    },
335    { .uname  = "CANCELLED",
336      .udesc  = "Cancelled request",
337      .ucode = 0x10,
338    },
339    { .uname  = "ALL",
340      .udesc  = "All non-cancelled requests",
341      .ucode = 0x1f,
342      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
343    },
344 };
345
346 static const amd64_umask_t amd64_k8_l2_cache_miss[]={
347    { .uname  = "INSTRUCTIONS",
348      .udesc  = "IC fill",
349      .ucode = 0x1,
350    },
351    { .uname  = "DATA",
352      .udesc  = "DC fill (includes possible replays, whereas event 41h does not)",
353      .ucode = 0x2,
354    },
355    { .uname  = "TLB_WALK",
356      .udesc  = "TLB page table walk",
357      .ucode = 0x4,
358    },
359    { .uname  = "ALL",
360      .udesc  = "Instructions, Data, TLB walk",
361      .ucode = 0x7,
362      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
363    },
364 };
365
366 static const amd64_umask_t amd64_k8_l2_fill_writeback[]={
367    { .uname  = "L2_FILLS",
368      .udesc  = "L2 fills (victims from L1 caches, TLB page table walks and data prefetches)",
369      .ucode = 0x1,
370    },
371    { .uname  = "ALL",
372      .udesc  = "All sub-events selected",
373      .ucode = 0x1,
374      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL | AMD64_FL_TILL_K8_REV_E,
375    },
376    { .uname  = "L2_WRITEBACKS",
377      .udesc  = "L2 Writebacks to system.",
378      .ucode = 0x2,
379      .uflags= AMD64_FL_K8_REV_F,
380    },
381    { .uname  = "ALL",
382      .udesc  = "All sub-events selected",
383      .ucode = 0x3,
384      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL | AMD64_FL_K8_REV_F,
385    },
386 };
387
388 static const amd64_umask_t amd64_k8_retired_mmx_and_fp_instructions[]={
389    { .uname  = "X87",
390      .udesc  = "X87 instructions",
391      .ucode = 0x1,
392    },
393    { .uname  = "MMX_AND_3DNOW",
394      .udesc  = "MMX and 3DNow! instructions",
395      .ucode = 0x2,
396    },
397    { .uname  = "PACKED_SSE_AND_SSE2",
398      .udesc  = "Packed SSE and SSE2 instructions",
399      .ucode = 0x4,
400    },
401    { .uname  = "SCALAR_SSE_AND_SSE2",
402      .udesc  = "Scalar SSE and SSE2 instructions",
403      .ucode = 0x8,
404    },
405    { .uname  = "ALL",
406      .udesc  = "X87, MMX(TM), 3DNow!(TM), Scalar and Packed SSE and SSE2 instructions",
407      .ucode = 0xf,
408      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
409    },
410 };
411
412 static const amd64_umask_t amd64_k8_retired_fastpath_double_op_instructions[]={
413    { .uname  = "POSITION_0",
414      .udesc  = "With low op in position 0",
415      .ucode = 0x1,
416    },
417    { .uname  = "POSITION_1",
418      .udesc  = "With low op in position 1",
419      .ucode = 0x2,
420    },
421    { .uname  = "POSITION_2",
422      .udesc  = "With low op in position 2",
423      .ucode = 0x4,
424    },
425    { .uname  = "ALL",
426      .udesc  = "With low op in position 0, 1, or 2",
427      .ucode = 0x7,
428      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
429    },
430 };
431
432 static const amd64_umask_t amd64_k8_fpu_exceptions[]={
433    { .uname  = "X87_RECLASS_MICROFAULTS",
434      .udesc  = "X87 reclass microfaults",
435      .ucode = 0x1,
436    },
437    { .uname  = "SSE_RETYPE_MICROFAULTS",
438      .udesc  = "SSE retype microfaults",
439      .ucode = 0x2,
440    },
441    { .uname  = "SSE_RECLASS_MICROFAULTS",
442      .udesc  = "SSE reclass microfaults",
443      .ucode = 0x4,
444    },
445    { .uname  = "SSE_AND_X87_MICROTRAPS",
446      .udesc  = "SSE and x87 microtraps",
447      .ucode = 0x8,
448    },
449    { .uname  = "ALL",
450      .udesc  = "All sub-events selected",
451      .ucode = 0xf,
452      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
453    },
454 };
455
456 static const amd64_umask_t amd64_k8_dram_accesses_page[]={
457    { .uname  = "HIT",
458      .udesc  = "Page hit",
459      .ucode = 0x1,
460    },
461    { .uname  = "MISS",
462      .udesc  = "Page Miss",
463      .ucode = 0x2,
464    },
465    { .uname  = "CONFLICT",
466      .udesc  = "Page Conflict",
467      .ucode = 0x4,
468    },
469    { .uname  = "ALL",
470      .udesc  = "Page Hit, Miss, or Conflict",
471      .ucode = 0x7,
472      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
473    },
474 };
475
476 static const amd64_umask_t amd64_k8_memory_controller_turnarounds[]={
477    { .uname  = "CHIP_SELECT",
478      .udesc  = "DIMM (chip select) turnaround",
479      .ucode = 0x1,
480    },
481    { .uname  = "READ_TO_WRITE",
482      .udesc  = "Read to write turnaround",
483      .ucode = 0x2,
484    },
485    { .uname  = "WRITE_TO_READ",
486      .udesc  = "Write to read turnaround",
487      .ucode = 0x4,
488    },
489    { .uname  = "ALL",
490      .udesc  = "All Memory Controller Turnarounds",
491      .ucode = 0x7,
492      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
493    },
494 };
495
496 static const amd64_umask_t amd64_k8_memory_controller_bypass[]={
497    { .uname  = "HIGH_PRIORITY",
498      .udesc  = "Memory controller high priority bypass",
499      .ucode = 0x1,
500    },
501    { .uname  = "LOW_PRIORITY",
502      .udesc  = "Memory controller low priority bypass",
503      .ucode = 0x2,
504    },
505    { .uname  = "DRAM_INTERFACE",
506      .udesc  = "DRAM controller interface bypass",
507      .ucode = 0x4,
508    },
509    { .uname  = "DRAM_QUEUE",
510      .udesc  = "DRAM controller queue bypass",
511      .ucode = 0x8,
512    },
513    { .uname  = "ALL",
514      .udesc  = "All sub-events selected",
515      .ucode = 0xf,
516      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
517    },
518 };
519
520 static const amd64_umask_t amd64_k8_sized_blocks[]={
521    { .uname  = "32_BYTE_WRITES",
522      .udesc  = "32-byte Sized Writes",
523      .ucode = 0x4,
524    },
525    { .uname  = "64_BYTE_WRITES",
526      .udesc  = "64-byte Sized Writes",
527      .ucode = 0x8,
528    },
529    { .uname  = "32_BYTE_READS",
530      .udesc  = "32-byte Sized Reads",
531      .ucode = 0x10,
532    },
533    { .uname  = "64_BYTE_READS",
534      .udesc  = "64-byte Sized Reads",
535      .ucode = 0x20,
536    },
537    { .uname  = "ALL",
538      .udesc  = "All sub-events selected",
539      .ucode = 0x3c,
540      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
541    },
542 };
543
544 static const amd64_umask_t amd64_k8_thermal_status_and_ecc_errors[]={
545    { .uname  = "CLKS_CPU_ACTIVE",
546      .udesc  = "Number of clocks CPU is active when HTC is active",
547      .ucode = 0x1,
548      .uflags= AMD64_FL_K8_REV_F,
549    },
550    { .uname  = "CLKS_CPU_INACTIVE",
551      .udesc  = "Number of clocks CPU clock is inactive when HTC is active",
552      .ucode = 0x2,
553      .uflags= AMD64_FL_K8_REV_F,
554    },
555    { .uname  = "CLKS_DIE_TEMP_TOO_HIGH",
556      .udesc  = "Number of clocks when die temperature is higher than the software high temperature threshold",
557      .ucode = 0x4,
558      .uflags= AMD64_FL_K8_REV_F,
559    },
560    { .uname  = "CLKS_TEMP_THRESHOLD_EXCEEDED",
561      .udesc  = "Number of clocks when high temperature threshold was exceeded",
562      .ucode = 0x8,
563      .uflags= AMD64_FL_K8_REV_F,
564    },
565    { .uname  = "DRAM_ECC_ERRORS",
566      .udesc  = "Number of correctable and Uncorrectable DRAM ECC errors",
567      .ucode = 0x80,
568    },
569    { .uname  = "ALL",
570      .udesc  = "All sub-events selected",
571      .ucode = 0x80,
572      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL | AMD64_FL_TILL_K8_REV_E,
573    },
574    { .uname  = "ALL",
575      .udesc  = "All sub-events selected",
576      .ucode = 0x8f,
577      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL | AMD64_FL_K8_REV_F,
578    },
579 };
580
581 static const amd64_umask_t amd64_k8_cpu_io_requests_to_memory_io[]={
582    { .uname  = "I_O_TO_I_O",
583      .udesc  = "I/O to I/O",
584      .ucode = 0x1,
585    },
586    { .uname  = "I_O_TO_MEM",
587      .udesc  = "I/O to Mem",
588      .ucode = 0x2,
589    },
590    { .uname  = "CPU_TO_I_O",
591      .udesc  = "CPU to I/O",
592      .ucode = 0x4,
593    },
594    { .uname  = "CPU_TO_MEM",
595      .udesc  = "CPU to Mem",
596      .ucode = 0x8,
597    },
598    { .uname  = "TO_REMOTE_NODE",
599      .udesc  = "To remote node",
600      .ucode = 0x10,
601    },
602    { .uname  = "TO_LOCAL_NODE",
603      .udesc  = "To local node",
604      .ucode = 0x20,
605    },
606    { .uname  = "FROM_REMOTE_NODE",
607      .udesc  = "From remote node",
608      .ucode = 0x40,
609    },
610    { .uname  = "FROM_LOCAL_NODE",
611      .udesc  = "From local node",
612      .ucode = 0x80,
613    },
614    { .uname  = "ALL",
615      .udesc  = "All sub-events selected",
616      .ucode = 0xff,
617      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
618    },
619 };
620
621 static const amd64_umask_t amd64_k8_cache_block[]={
622    { .uname  = "VICTIM_WRITEBACK",
623      .udesc  = "Victim Block (Writeback)",
624      .ucode = 0x1,
625    },
626    { .uname  = "DCACHE_LOAD_MISS",
627      .udesc  = "Read Block (Dcache load miss refill)",
628      .ucode = 0x4,
629    },
630    { .uname  = "SHARED_ICACHE_REFILL",
631      .udesc  = "Read Block Shared (Icache refill)",
632      .ucode = 0x8,
633    },
634    { .uname  = "READ_BLOCK_MODIFIED",
635      .udesc  = "Read Block Modified (Dcache store miss refill)",
636      .ucode = 0x10,
637    },
638    { .uname  = "READ_TO_DIRTY",
639      .udesc  = "Change to Dirty (first store to clean block already in cache)",
640      .ucode = 0x20,
641    },
642    { .uname  = "ALL",
643      .udesc  = "All sub-events selected",
644      .ucode = 0x3d,
645      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
646    },
647 };
648
649 static const amd64_umask_t amd64_k8_sized_commands[]={
650    { .uname  = "NON_POSTED_WRITE_BYTE",
651      .udesc  = "NonPosted SzWr Byte (1-32 bytes) Legacy or mapped I/O, typically 1-4 bytes",
652      .ucode = 0x1,
653    },
654    { .uname  = "NON_POSTED_WRITE_DWORD",
655      .udesc  = "NonPosted SzWr Dword (1-16 dwords) Legacy or mapped I/O, typically 1 dword",
656      .ucode = 0x2,
657    },
658    { .uname  = "POSTED_WRITE_BYTE",
659      .udesc  = "Posted SzWr Byte (1-32 bytes) Sub-cache-line DMA writes, size varies; also flushes of partially-filled Write Combining buffer",
660      .ucode = 0x4,
661    },
662    { .uname  = "POSTED_WRITE_DWORD",
663      .udesc  = "Posted SzWr Dword (1-16 dwords) Block-oriented DMA writes, often cache-line sized; also processor Write Combining buffer flushes",
664      .ucode = 0x8,
665    },
666    { .uname  = "READ_BYTE_4_BYTES",
667      .udesc  = "SzRd Byte (4 bytes) Legacy or mapped I/O",
668      .ucode = 0x10,
669    },
670    { .uname  = "READ_DWORD_1_16_DWORDS",
671      .udesc  = "SzRd Dword (1-16 dwords) Block-oriented DMA reads, typically cache-line size",
672      .ucode = 0x20,
673    },
674    { .uname  = "READ_MODIFY_WRITE",
675      .udesc  = "RdModWr",
676      .ucode = 0x40,
677    },
678    { .uname  = "ALL",
679      .udesc  = "All sub-events selected",
680      .ucode = 0x7f,
681      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
682    },
683 };
684
685 static const amd64_umask_t amd64_k8_probe[]={
686    { .uname  = "MISS",
687      .udesc  = "Probe miss",
688      .ucode = 0x1,
689    },
690    { .uname  = "HIT_CLEAN",
691      .udesc  = "Probe hit clean",
692      .ucode = 0x2,
693    },
694    { .uname  = "HIT_DIRTY_NO_MEMORY_CANCEL",
695      .udesc  = "Probe hit dirty without memory cancel (probed by Sized Write or Change2Dirty)",
696      .ucode = 0x4,
697    },
698    { .uname  = "HIT_DIRTY_WITH_MEMORY_CANCEL",
699      .udesc  = "Probe hit dirty with memory cancel (probed by DMA read or cache refill request)",
700      .ucode = 0x8,
701    },
702    { .uname  = "UPSTREAM_DISPLAY_REFRESH_READS",
703      .udesc  = "Upstream display refresh reads",
704      .ucode = 0x10,
705    },
706    { .uname  = "UPSTREAM_NON_DISPLAY_REFRESH_READS",
707      .udesc  = "Upstream non-display refresh reads",
708      .ucode = 0x20,
709    },
710    { .uname  = "ALL",
711      .udesc  = "All sub-events selected",
712      .ucode = 0x3f,
713      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL | AMD64_FL_TILL_K8_REV_C,
714    },
715    { .uname  = "UPSTREAM_WRITES",
716      .udesc  = "Upstream writes",
717      .ucode = 0x40,
718      .uflags= AMD64_FL_K8_REV_D,
719    },
720    { .uname  = "ALL",
721      .udesc  = "All sub-events selected",
722      .ucode = 0x7f,
723      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL | AMD64_FL_K8_REV_D,
724    },
725 };
726
727 static const amd64_umask_t amd64_k8_gart[]={
728    { .uname  = "APERTURE_HIT_FROM_CPU",
729      .udesc  = "GART aperture hit on access from CPU",
730      .ucode = 0x1,
731    },
732    { .uname  = "APERTURE_HIT_FROM_IO",
733      .udesc  = "GART aperture hit on access from I/O",
734      .ucode = 0x2,
735    },
736    { .uname  = "MISS",
737      .udesc  = "GART miss",
738      .ucode = 0x4,
739    },
740    { .uname  = "ALL",
741      .udesc  = "All sub-events selected",
742      .ucode = 0x7,
743      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
744    },
745 };
746
747 static const amd64_umask_t amd64_k8_hypertransport_link0[]={
748    { .uname  = "COMMAND_DWORD_SENT",
749      .udesc  = "Command dword sent",
750      .ucode = 0x1,
751    },
752    { .uname  = "DATA_DWORD_SENT",
753      .udesc  = "Data dword sent",
754      .ucode = 0x2,
755    },
756    { .uname  = "BUFFER_RELEASE_DWORD_SENT",
757      .udesc  = "Buffer release dword sent",
758      .ucode = 0x4,
759    },
760    { .uname  = "NOP_DWORD_SENT",
761      .udesc  = "Nop dword sent (idle)",
762      .ucode = 0x8,
763    },
764    { .uname  = "ALL",
765      .udesc  = "All sub-events selected",
766      .ucode = 0xf,
767      .uflags= AMD64_FL_NCOMBO | AMD64_FL_DFL,
768    },
769 };
770
771 static const amd64_entry_t amd64_k8_pe[]={
772 { .name    = "DISPATCHED_FPU",
773   .desc    = "Dispatched FPU Operations",
774   .modmsk  = AMD64_BASIC_ATTRS,
775   .code    = 0x0,
776   .numasks = LIBPFM_ARRAY_SIZE(amd64_k8_dispatched_fpu),
777   .ngrp    = 1,
778   .umasks  = amd64_k8_dispatched_fpu,
779 },
780 { .name    = "CYCLES_NO_FPU_OPS_RETIRED",
781   .desc    = "Cycles with no FPU Ops Retired",
782   .modmsk  = AMD64_BASIC_ATTRS,
783   .code    = 0x1,
784 },
785 { .name    = "DISPATCHED_FPU_OPS_FAST_FLAG",
786   .desc    = "Dispatched Fast Flag FPU Operations",
787   .modmsk  = AMD64_BASIC_ATTRS,
788   .code    = 0x2,
789 },
790 { .name    = "SEGMENT_REGISTER_LOADS",
791   .desc    = "Segment Register Loads",
792   .modmsk  = AMD64_BASIC_ATTRS,
793   .code    = 0x20,
794   .numasks = LIBPFM_ARRAY_SIZE(amd64_k8_segment_register_loads),
795   .ngrp    = 1,
796   .umasks  = amd64_k8_segment_register_loads,
797 },
798 { .name    = "PIPELINE_RESTART_DUE_TO_SELF_MODIFYING_CODE",
799   .desc    = "Pipeline restart due to self-modifying code",
800   .modmsk  = AMD64_BASIC_ATTRS,
801   .code    = 0x21,
802 },
803 { .name    = "PIPELINE_RESTART_DUE_TO_PROBE_HIT",
804   .desc    = "Pipeline restart due to probe hit",
805   .modmsk  = AMD64_BASIC_ATTRS,
806   .code    = 0x22,
807 },
808 { .name    = "LS_BUFFER_2_FULL_CYCLES",
809   .desc    = "LS Buffer 2 Full",
810   .modmsk  = AMD64_BASIC_ATTRS,
811   .code    = 0x23,
812 },
813 { .name    = "LOCKED_OPS",
814   .desc    = "Locked Operations",
815   .modmsk  = AMD64_BASIC_ATTRS,
816   .code    = 0x24,
817   .numasks = LIBPFM_ARRAY_SIZE(amd64_k8_locked_ops),
818   .ngrp    = 1,
819   .umasks  = amd64_k8_locked_ops,
820 },
821 { .name    = "MEMORY_REQUESTS",
822   .desc    = "Memory Requests by Type",
823   .modmsk  = AMD64_BASIC_ATTRS,
824   .code    = 0x65,
825   .numasks = LIBPFM_ARRAY_SIZE(amd64_k8_memory_requests),
826   .ngrp    = 1,
827   .umasks  = amd64_k8_memory_requests,
828 },
829 { .name    = "DATA_CACHE_ACCESSES",
830   .desc    = "Data Cache Accesses",
831   .modmsk  = AMD64_BASIC_ATTRS,
832   .code    = 0x40,
833 },
834 { .name    = "DATA_CACHE_MISSES",
835   .desc    = "Data Cache Misses",
836   .modmsk  = AMD64_BASIC_ATTRS,
837   .code    = 0x41,
838 },
839 { .name    = "DATA_CACHE_REFILLS",
840   .desc    = "Data Cache Refills from L2 or System",
841   .modmsk  = AMD64_BASIC_ATTRS,
842   .code    = 0x42,
843   .numasks = LIBPFM_ARRAY_SIZE(amd64_k8_data_cache_refills),
844   .ngrp    = 1,
845   .umasks  = amd64_k8_data_cache_refills,
846 },
847 { .name    = "DATA_CACHE_REFILLS_FROM_SYSTEM",
848   .desc    = "Data Cache Refills from System",
849   .modmsk  = AMD64_BASIC_ATTRS,
850   .code    = 0x43,
851   .numasks = LIBPFM_ARRAY_SIZE(amd64_k8_data_cache_refills_from_system),
852   .ngrp    = 1,
853   .umasks  = amd64_k8_data_cache_refills_from_system,
854 },
855 { .name    = "DATA_CACHE_LINES_EVICTED",
856   .desc    = "Data Cache Lines Evicted",
857   .modmsk  = AMD64_BASIC_ATTRS,
858   .code    = 0x44,
859   .numasks = LIBPFM_ARRAY_SIZE(amd64_k8_data_cache_refills_from_system),
860   .ngrp    = 1,
861   .umasks  = amd64_k8_data_cache_refills_from_system, /* identical to actual umasks list for this event */
862 },
863 { .name    = "L1_DTLB_MISS_AND_L2_DTLB_HIT",
864   .desc    = "L1 DTLB Miss and L2 DTLB Hit",
865   .modmsk  = AMD64_BASIC_ATTRS,
866   .code    = 0x45,
867 },
868 { .name    = "L1_DTLB_AND_L2_DTLB_MISS",
869   .desc    = "L1 DTLB and L2 DTLB Miss",
870   .modmsk  = AMD64_BASIC_ATTRS,
871   .code    = 0x46,
872 },
873 { .name    = "MISALIGNED_ACCESSES",
874   .desc    = "Misaligned Accesses",
875   .modmsk  = AMD64_BASIC_ATTRS,
876   .code    = 0x47,
877 },
878 { .name    = "MICROARCHITECTURAL_LATE_CANCEL_OF_AN_ACCESS",
879   .desc    = "Microarchitectural Late Cancel of an Access",
880   .modmsk  = AMD64_BASIC_ATTRS,
881   .code    = 0x48,
882 },
883 { .name    = "MICROARCHITECTURAL_EARLY_CANCEL_OF_AN_ACCESS",
884   .desc    = "Microarchitectural Early Cancel of an Access",
885   .modmsk  = AMD64_BASIC_ATTRS,
886   .code    = 0x49,
887 },
888 { .name    = "SCRUBBER_SINGLE_BIT_ECC_ERRORS",
889   .desc    = "Single-bit ECC Errors Recorded by Scrubber",
890   .modmsk  = AMD64_BASIC_ATTRS,
891   .code    = 0x4a,
892   .numasks = LIBPFM_ARRAY_SIZE(amd64_k8_scrubber_single_bit_ecc_errors),
893   .ngrp    = 1,
894   .umasks  = amd64_k8_scrubber_single_bit_ecc_errors,
895 },
896 { .name    = "PREFETCH_INSTRUCTIONS_DISPATCHED",
897   .desc    = "Prefetch Instructions Dispatched",
898   .modmsk  = AMD64_BASIC_ATTRS,
899   .code    = 0x4b,
900   .numasks = LIBPFM_ARRAY_SIZE(amd64_k8_prefetch_instructions_dispatched),
901   .ngrp    = 1,
902   .umasks  = amd64_k8_prefetch_instructions_dispatched,
903 },
904 { .name    = "DCACHE_MISSES_BY_LOCKED_INSTRUCTIONS",
905   .desc    = "DCACHE Misses by Locked Instructions",
906   .modmsk  = AMD64_BASIC_ATTRS,
907   .code    = 0x4c,
908   .numasks = LIBPFM_ARRAY_SIZE(amd64_k8_dcache_misses_by_locked_instructions),
909   .ngrp    = 1,
910   .umasks  = amd64_k8_dcache_misses_by_locked_instructions,
911 },
912 { .name    = "DATA_PREFETCHES",
913   .desc    = "Data Prefetcher",
914   .modmsk  = AMD64_BASIC_ATTRS,
915   .code    = 0x67,
916   .numasks = LIBPFM_ARRAY_SIZE(amd64_k8_data_prefetches),
917   .ngrp    = 1,
918   .umasks  = amd64_k8_data_prefetches,
919 },
920 { .name    = "SYSTEM_READ_RESPONSES",
921   .desc    = "System Read Responses by Coherency State",
922   .modmsk  = AMD64_BASIC_ATTRS,
923   .code    = 0x6c,
924   .numasks = LIBPFM_ARRAY_SIZE(amd64_k8_system_read_responses),
925   .ngrp    = 1,
926   .umasks  = amd64_k8_system_read_responses,
927 },
928 { .name    = "QUADWORDS_WRITTEN_TO_SYSTEM",
929   .desc    = "Quadwords Written to System",
930   .modmsk  = AMD64_BASIC_ATTRS,
931   .code    = 0x6d,
932   .numasks = LIBPFM_ARRAY_SIZE(amd64_k8_quadwords_written_to_system),
933   .ngrp    = 1,
934   .umasks  = amd64_k8_quadwords_written_to_system,
935 },
936 { .name    = "REQUESTS_TO_L2",
937   .desc    = "Requests to L2 Cache",
938   .modmsk  = AMD64_BASIC_ATTRS,
939   .code    = 0x7d,
940   .numasks = LIBPFM_ARRAY_SIZE(amd64_k8_requests_to_l2),
941   .ngrp    = 1,
942   .umasks  = amd64_k8_requests_to_l2,
943 },
944 { .name    = "L2_CACHE_MISS",
945   .desc    = "L2 Cache Misses",
946   .modmsk  = AMD64_BASIC_ATTRS,
947   .code    = 0x7e,
948   .numasks = LIBPFM_ARRAY_SIZE(amd64_k8_l2_cache_miss),
949   .ngrp    = 1,
950   .umasks  = amd64_k8_l2_cache_miss,
951 },
952 { .name    = "L2_FILL_WRITEBACK",
953   .desc    = "L2 Fill/Writeback",
954   .modmsk  = AMD64_BASIC_ATTRS,
955   .code    = 0x7f,
956   .numasks = LIBPFM_ARRAY_SIZE(amd64_k8_l2_fill_writeback),
957   .ngrp    = 1,
958   .umasks  = amd64_k8_l2_fill_writeback,
959 },
960 { .name    = "INSTRUCTION_CACHE_FETCHES",
961   .desc    = "Instruction Cache Fetches",
962   .modmsk  = AMD64_BASIC_ATTRS,
963   .code    = 0x80,
964 },
965 { .name    = "INSTRUCTION_CACHE_MISSES",
966   .desc    = "Instruction Cache Misses",
967   .modmsk  = AMD64_BASIC_ATTRS,
968   .code    = 0x81,
969 },
970 { .name    = "INSTRUCTION_CACHE_REFILLS_FROM_L2",
971   .desc    = "Instruction Cache Refills from L2",
972   .modmsk  = AMD64_BASIC_ATTRS,
973   .code    = 0x82,
974 },
975 { .name    = "INSTRUCTION_CACHE_REFILLS_FROM_SYSTEM",
976   .desc    = "Instruction Cache Refills from System",
977   .modmsk  = AMD64_BASIC_ATTRS,
978   .code    = 0x83,
979 },
980 { .name    = "L1_ITLB_MISS_AND_L2_ITLB_HIT",
981   .desc    = "L1 ITLB Miss and L2 ITLB Hit",
982   .modmsk  = AMD64_BASIC_ATTRS,
983   .code    = 0x84,
984 },
985 { .name    = "L1_ITLB_MISS_AND_L2_ITLB_MISS",
986   .desc    = "L1 ITLB Miss and L2 ITLB Miss",
987   .modmsk  = AMD64_BASIC_ATTRS,
988   .code    = 0x85,
989 },
990 { .name    = "PIPELINE_RESTART_DUE_TO_INSTRUCTION_STREAM_PROBE",
991   .desc    = "Pipeline Restart Due to Instruction Stream Probe",
992   .modmsk  = AMD64_BASIC_ATTRS,
993   .code    = 0x86,
994 },
995 { .name    = "INSTRUCTION_FETCH_STALL",
996   .desc    = "Instruction Fetch Stall",
997   .modmsk  = AMD64_BASIC_ATTRS,
998   .code    = 0x87,
999 },
1000 { .name    = "RETURN_STACK_HITS",
1001   .desc    = "Return Stack Hits",
1002   .modmsk  = AMD64_BASIC_ATTRS,
1003   .code    = 0x88,
1004 },
1005 { .name    = "RETURN_STACK_OVERFLOWS",
1006   .desc    = "Return Stack Overflows",
1007   .modmsk  = AMD64_BASIC_ATTRS,
1008   .code    = 0x89,
1009 },
1010 { .name    = "RETIRED_CLFLUSH_INSTRUCTIONS",
1011   .desc    = "Retired CLFLUSH Instructions",
1012   .modmsk  = AMD64_BASIC_ATTRS,
1013   .code    = 0x26,
1014 },
1015 { .name    = "RETIRED_CPUID_INSTRUCTIONS",
1016   .desc    = "Retired CPUID Instructions",
1017   .modmsk  = AMD64_BASIC_ATTRS,
1018   .code    = 0x27,
1019 },
1020 { .name    = "CPU_CLK_UNHALTED",
1021   .desc    = "CPU Clocks not Halted",
1022   .modmsk  = AMD64_BASIC_ATTRS,
1023   .code    = 0x76,
1024 },
1025 { .name    = "RETIRED_INSTRUCTIONS",
1026   .desc    = "Retired Instructions",
1027   .modmsk  = AMD64_BASIC_ATTRS,
1028   .code    = 0xc0,
1029 },
1030 { .name    = "RETIRED_UOPS",
1031   .desc    = "Retired uops",
1032   .modmsk  = AMD64_BASIC_ATTRS,
1033   .code    = 0xc1,
1034 },
1035 { .name    = "RETIRED_BRANCH_INSTRUCTIONS",
1036   .desc    = "Retired Branch Instructions",
1037   .modmsk  = AMD64_BASIC_ATTRS,
1038   .code    = 0xc2,
1039 },
1040 { .name    = "RETIRED_MISPREDICTED_BRANCH_INSTRUCTIONS",
1041   .desc    = "Retired Mispredicted Branch Instructions",
1042   .modmsk  = AMD64_BASIC_ATTRS,
1043   .code    = 0xc3,
1044 },
1045 { .name    = "RETIRED_TAKEN_BRANCH_INSTRUCTIONS",
1046   .desc    = "Retired Taken Branch Instructions",
1047   .modmsk  = AMD64_BASIC_ATTRS,
1048   .code    = 0xc4,
1049 },
1050 { .name    = "RETIRED_TAKEN_BRANCH_INSTRUCTIONS_MISPREDICTED",
1051   .desc    = "Retired Taken Branch Instructions Mispredicted",
1052   .modmsk  = AMD64_BASIC_ATTRS,
1053   .code    = 0xc5,
1054 },
1055 { .name    = "RETIRED_FAR_CONTROL_TRANSFERS",
1056   .desc    = "Retired Far Control Transfers",
1057   .modmsk  = AMD64_BASIC_ATTRS,
1058   .code    = 0xc6,
1059 },
1060 { .name    = "RETIRED_BRANCH_RESYNCS",
1061   .desc    = "Retired Branch Resyncs",
1062   .modmsk  = AMD64_BASIC_ATTRS,
1063   .code    = 0xc7,
1064 },
1065 { .name    = "RETIRED_NEAR_RETURNS",
1066   .desc    = "Retired Near Returns",
1067   .modmsk  = AMD64_BASIC_ATTRS,
1068   .code    = 0xc8,
1069 },
1070 { .name    = "RETIRED_NEAR_RETURNS_MISPREDICTED",
1071   .desc    = "Retired Near Returns Mispredicted",
1072   .modmsk  = AMD64_BASIC_ATTRS,
1073   .code    = 0xc9,
1074 },
1075 { .name    = "RETIRED_INDIRECT_BRANCHES_MISPREDICTED",
1076   .desc    = "Retired Indirect Branches Mispredicted",
1077   .modmsk  = AMD64_BASIC_ATTRS,
1078   .code    = 0xca,
1079 },
1080 { .name    = "RETIRED_MMX_AND_FP_INSTRUCTIONS",
1081   .desc    = "Retired MMX/FP Instructions",
1082   .modmsk  = AMD64_BASIC_ATTRS,
1083   .code    = 0xcb,
1084   .numasks = LIBPFM_ARRAY_SIZE(amd64_k8_retired_mmx_and_fp_instructions),
1085   .ngrp    = 1,
1086   .umasks  = amd64_k8_retired_mmx_and_fp_instructions,
1087 },
1088 { .name    = "RETIRED_FASTPATH_DOUBLE_OP_INSTRUCTIONS",
1089   .desc    = "Retired Fastpath Double Op Instructions",
1090   .modmsk  = AMD64_BASIC_ATTRS,
1091   .code    = 0xcc,
1092   .numasks = LIBPFM_ARRAY_SIZE(amd64_k8_retired_fastpath_double_op_instructions),
1093   .ngrp    = 1,
1094   .umasks  = amd64_k8_retired_fastpath_double_op_instructions,
1095 },
1096 { .name    = "INTERRUPTS_MASKED_CYCLES",
1097   .desc    = "Interrupts-Masked Cycles",
1098   .modmsk  = AMD64_BASIC_ATTRS,
1099   .code    = 0xcd,
1100 },
1101 { .name    = "INTERRUPTS_MASKED_CYCLES_WITH_INTERRUPT_PENDING",
1102   .desc    = "Interrupts-Masked Cycles with Interrupt Pending",
1103   .modmsk  = AMD64_BASIC_ATTRS,
1104   .code    = 0xce,
1105 },
1106 { .name    = "INTERRUPTS_TAKEN",
1107   .desc    = "Interrupts Taken",
1108   .modmsk  = AMD64_BASIC_ATTRS,
1109   .code    = 0xcf,
1110 },
1111 { .name    = "DECODER_EMPTY",
1112   .desc    = "Decoder Empty",
1113   .modmsk  = AMD64_BASIC_ATTRS,
1114   .code    = 0xd0,
1115 },
1116 { .name    = "DISPATCH_STALLS",
1117   .desc    = "Dispatch Stalls",
1118   .modmsk  = AMD64_BASIC_ATTRS,
1119   .code    = 0xd1,
1120 },
1121 { .name    = "DISPATCH_STALL_FOR_BRANCH_ABORT",
1122   .desc    = "Dispatch Stall for Branch Abort to Retire",
1123   .modmsk  = AMD64_BASIC_ATTRS,
1124   .code    = 0xd2,
1125 },
1126 { .name    = "DISPATCH_STALL_FOR_SERIALIZATION",
1127   .desc    = "Dispatch Stall for Serialization",
1128   .modmsk  = AMD64_BASIC_ATTRS,
1129   .code    = 0xd3,
1130 },
1131 { .name    = "DISPATCH_STALL_FOR_SEGMENT_LOAD",
1132   .desc    = "Dispatch Stall for Segment Load",
1133   .modmsk  = AMD64_BASIC_ATTRS,
1134   .code    = 0xd4,
1135 },
1136 { .name    = "DISPATCH_STALL_FOR_REORDER_BUFFER_FULL",
1137   .desc    = "Dispatch Stall for Reorder Buffer Full",
1138   .modmsk  = AMD64_BASIC_ATTRS,
1139   .code    = 0xd5,
1140 },
1141 { .name    = "DISPATCH_STALL_FOR_RESERVATION_STATION_FULL",
1142   .desc    = "Dispatch Stall for Reservation Station Full",
1143   .modmsk  = AMD64_BASIC_ATTRS,
1144   .code    = 0xd6,
1145 },
1146 { .name    = "DISPATCH_STALL_FOR_FPU_FULL",
1147   .desc    = "Dispatch Stall for FPU Full",
1148   .modmsk  = AMD64_BASIC_ATTRS,
1149   .code    = 0xd7,
1150 },
1151 { .name    = "DISPATCH_STALL_FOR_LS_FULL",
1152   .desc    = "Dispatch Stall for LS Full",
1153   .modmsk  = AMD64_BASIC_ATTRS,
1154   .code    = 0xd8,
1155 },
1156 { .name    = "DISPATCH_STALL_WAITING_FOR_ALL_QUIET",
1157   .desc    = "Dispatch Stall Waiting for All Quiet",
1158   .modmsk  = AMD64_BASIC_ATTRS,
1159   .code    = 0xd9,
1160 },
1161 { .name    = "DISPATCH_STALL_FOR_FAR_TRANSFER_OR_RSYNC",
1162   .desc    = "Dispatch Stall for Far Transfer or Resync to Retire",
1163   .modmsk  = AMD64_BASIC_ATTRS,
1164   .code    = 0xda,
1165 },
1166 { .name    = "FPU_EXCEPTIONS",
1167   .desc    = "FPU Exceptions",
1168   .modmsk  = AMD64_BASIC_ATTRS,
1169   .code    = 0xdb,
1170   .numasks = LIBPFM_ARRAY_SIZE(amd64_k8_fpu_exceptions),
1171   .ngrp    = 1,
1172   .umasks  = amd64_k8_fpu_exceptions,
1173 },
1174 { .name    = "DR0_BREAKPOINT_MATCHES",
1175   .desc    = "DR0 Breakpoint Matches",
1176   .modmsk  = AMD64_BASIC_ATTRS,
1177   .code    = 0xdc,
1178 },
1179 { .name    = "DR1_BREAKPOINT_MATCHES",
1180   .desc    = "DR1 Breakpoint Matches",
1181   .modmsk  = AMD64_BASIC_ATTRS,
1182   .code    = 0xdd,
1183 },
1184 { .name    = "DR2_BREAKPOINT_MATCHES",
1185   .desc    = "DR2 Breakpoint Matches",
1186   .modmsk  = AMD64_BASIC_ATTRS,
1187   .code    = 0xde,
1188 },
1189 { .name    = "DR3_BREAKPOINT_MATCHES",
1190   .desc    = "DR3 Breakpoint Matches",
1191   .modmsk  = AMD64_BASIC_ATTRS,
1192   .code    = 0xdf,
1193 },
1194 { .name    = "DRAM_ACCESSES_PAGE",
1195   .desc    = "DRAM Accesses",
1196   .modmsk  = AMD64_BASIC_ATTRS,
1197   .code    = 0xe0,
1198   .numasks = LIBPFM_ARRAY_SIZE(amd64_k8_dram_accesses_page),
1199   .ngrp    = 1,
1200   .umasks  = amd64_k8_dram_accesses_page,
1201 },
1202 { .name    = "MEMORY_CONTROLLER_PAGE_TABLE_OVERFLOWS",
1203   .desc    = "Memory Controller Page Table Overflows",
1204   .modmsk  = AMD64_BASIC_ATTRS,
1205   .code    = 0xe1,
1206 },
1207 { .name    = "MEMORY_CONTROLLER_TURNAROUNDS",
1208   .desc    = "Memory Controller Turnarounds",
1209   .modmsk  = AMD64_BASIC_ATTRS,
1210   .code    = 0xe3,
1211   .numasks = LIBPFM_ARRAY_SIZE(amd64_k8_memory_controller_turnarounds),
1212   .ngrp    = 1,
1213   .umasks  = amd64_k8_memory_controller_turnarounds,
1214 },
1215 { .name    = "MEMORY_CONTROLLER_BYPASS",
1216   .desc    = "Memory Controller Bypass Counter Saturation",
1217   .modmsk  = AMD64_BASIC_ATTRS,
1218   .code    = 0xe4,
1219   .numasks = LIBPFM_ARRAY_SIZE(amd64_k8_memory_controller_bypass),
1220   .ngrp    = 1,
1221   .umasks  = amd64_k8_memory_controller_bypass,
1222 },
1223 { .name    = "SIZED_BLOCKS",
1224   .desc    = "Sized Blocks",
1225   .modmsk  = AMD64_BASIC_ATTRS,
1226   .code    = 0xe5,
1227   .flags   = AMD64_FL_K8_REV_D,
1228   .numasks = LIBPFM_ARRAY_SIZE(amd64_k8_sized_blocks),
1229   .ngrp    = 1,
1230   .umasks  = amd64_k8_sized_blocks,
1231 },
1232 { .name    = "THERMAL_STATUS_AND_ECC_ERRORS",
1233   .desc    = "Thermal Status and ECC Errors",
1234   .modmsk  = AMD64_BASIC_ATTRS,
1235   .code    = 0xe8,
1236   .flags   = AMD64_FL_K8_REV_E,
1237   .numasks = LIBPFM_ARRAY_SIZE(amd64_k8_thermal_status_and_ecc_errors),
1238   .ngrp    = 1,
1239   .umasks  = amd64_k8_thermal_status_and_ecc_errors,
1240 },
1241 { .name    = "CPU_IO_REQUESTS_TO_MEMORY_IO",
1242   .desc    = "CPU/IO Requests to Memory/IO",
1243   .modmsk  = AMD64_BASIC_ATTRS,
1244   .code    = 0xe9,
1245   .flags   = AMD64_FL_K8_REV_E,
1246   .numasks = LIBPFM_ARRAY_SIZE(amd64_k8_cpu_io_requests_to_memory_io),
1247   .ngrp    = 1,
1248   .umasks  = amd64_k8_cpu_io_requests_to_memory_io,
1249 },
1250 { .name    = "CACHE_BLOCK",
1251   .desc    = "Cache Block Commands",
1252   .modmsk  = AMD64_BASIC_ATTRS,
1253   .code    = 0xea,
1254   .flags   = AMD64_FL_K8_REV_E,
1255   .numasks = LIBPFM_ARRAY_SIZE(amd64_k8_cache_block),
1256   .ngrp    = 1,
1257   .umasks  = amd64_k8_cache_block,
1258 },
1259 { .name    = "SIZED_COMMANDS",
1260   .desc    = "Sized Commands",
1261   .modmsk  = AMD64_BASIC_ATTRS,
1262   .code    = 0xeb,
1263   .numasks = LIBPFM_ARRAY_SIZE(amd64_k8_sized_commands),
1264   .ngrp    = 1,
1265   .umasks  = amd64_k8_sized_commands,
1266 },
1267 { .name    = "PROBE",
1268   .desc    = "Probe Responses and Upstream Requests",
1269   .modmsk  = AMD64_BASIC_ATTRS,
1270   .code    = 0xec,
1271   .numasks = LIBPFM_ARRAY_SIZE(amd64_k8_probe),
1272   .ngrp    = 1,
1273   .umasks  = amd64_k8_probe,
1274 },
1275 { .name    = "GART",
1276   .desc    = "GART Events",
1277   .modmsk  = AMD64_BASIC_ATTRS,
1278   .code    = 0xee,
1279   .numasks = LIBPFM_ARRAY_SIZE(amd64_k8_gart),
1280   .ngrp    = 1,
1281   .umasks  = amd64_k8_gart,
1282 },
1283 { .name    = "HYPERTRANSPORT_LINK0",
1284   .desc    = "HyperTransport Link 0 Transmit Bandwidth",
1285   .modmsk  = AMD64_BASIC_ATTRS,
1286   .code    = 0xf6,
1287   .numasks = LIBPFM_ARRAY_SIZE(amd64_k8_hypertransport_link0),
1288   .ngrp    = 1,
1289   .umasks  = amd64_k8_hypertransport_link0,
1290 },
1291 { .name    = "HYPERTRANSPORT_LINK1",
1292   .desc    = "HyperTransport Link 1 Transmit Bandwidth",
1293   .modmsk  = AMD64_BASIC_ATTRS,
1294   .code    = 0xf7,
1295   .numasks = LIBPFM_ARRAY_SIZE(amd64_k8_hypertransport_link0),
1296   .ngrp    = 1,
1297   .umasks  = amd64_k8_hypertransport_link0, /* identical to actual umasks list for this event */
1298 },
1299 { .name    = "HYPERTRANSPORT_LINK2",
1300   .desc    = "HyperTransport Link 2 Transmit Bandwidth",
1301   .modmsk  = AMD64_BASIC_ATTRS,
1302   .code    = 0xf8,
1303   .numasks = LIBPFM_ARRAY_SIZE(amd64_k8_hypertransport_link0),
1304   .ngrp    = 1,
1305   .umasks  = amd64_k8_hypertransport_link0, /* identical to actual umasks list for this event */
1306 },
1307 };