1 /* $NetBSD: pmc_i386.c,v 1.3 2002/08/09 10:13:07 wiz Exp $ */
4 * Copyright (c) 2001, 2002 Wasabi Systems, Inc.
7 * Written by Frank van der Linden and Jason R. Thorpe for
10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions
13 * 1. Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer.
15 * 2. Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in the
17 * documentation and/or other materials provided with the distribution.
18 * 3. All advertising materials mentioning features or use of this software
19 * must display the following acknowledgement:
20 * This product includes software developed for the NetBSD Project by
21 * Wasabi Systems, Inc.
22 * 4. The name of Wasabi Systems, Inc. may not be used to endorse
23 * or promote products derived from this software without specific prior
26 * THIS SOFTWARE IS PROVIDED BY WASABI SYSTEMS, INC. ``AS IS'' AND
27 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
28 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
29 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL WASABI SYSTEMS, INC
30 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
31 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
32 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
33 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
34 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
35 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36 * POSSIBILITY OF SUCH DAMAGE.
39 #include <sys/cdefs.h>
42 #include <sys/param.h>
45 #include <machine/specialreg.h>
47 #include "pmc_private.h"
49 static const struct pmc_event i586_pmc_evids
[] = {
50 { "tlb-data-miss", PMC5_DATA_TLB_MISS
},
51 { "tlb-ins-miss", PMC5_INST_TLB_MISS
},
52 { "l1cache-ins-miss", PMC5_INST_CACHE_MISS
},
53 { "l1cache-data-miss", PMC5_DATA_RW_MISS
},
54 { "l1cache-data-miss-read", PMC5_DATA_READ_MISS
},
55 { "l1cache-data-miss-write", PMC5_DATA_WRITE_MISS
},
56 { "l1cache-writeback", PMC5_DATA_LINES_WBACK
},
57 { "l1cache-writeback-hit", PMC5_WRITE_M_E
},
58 { "l2cache-data-snoop", PMC5_DATA_CACHE_SNOOP
},
59 { "l2cache-data-snoop-hit", PMC5_DATA_CACHE_SNOOP_HIT
},
60 { "mem-read", PMC5_DATA_READ
},
61 { "mem-write", PMC5_DATA_WRITE
},
62 { "mem-access", PMC5_DATA_RW
},
63 { "mem-access-both-pipes", PMC5_MEM_ACCESS_BOTH_PIPES
},
64 { "mem-bank-conflicts", PMC5_BANK_CONFLICTS
},
65 { "mem-misalign-ref", PMC5_MISALIGNED_DATA
},
66 { "mem-uncached-read", PMC5_NONCACHE_MEM_READ
},
67 { "seg-load-any", PMC5_SEGMENT_REG_LOAD
},
68 { "branch", PMC5_BRANCHES
},
69 { "branch-btb-hit", PMC5_BTB_HITS
},
70 { "branch-taken", PMC5_BRANCH_TAKEN
},
71 { "ins-read", PMC5_INST_READ
},
72 { "ins-pipeline-flush", PMC5_PIPELINE_FLUSH
},
73 { "ins-executed", PMC5_INST_EXECUTED
},
74 { "ins-executed-vpipe", PMC5_INST_EXECUTED_V_PIPE
},
75 { "ins-stall-agi", PMC5_AGI_STALL
},
76 { "ins-stall-write", PMC5_WRITE_BACKUP_STALL
},
77 { "ins-stall-data", PMC5_DATA_READ_STALL
},
78 { "ins-stall-writeline", PMC5_WRITE_E_M_STALL
},
79 { "bus-utilization", PMC5_BUS_UTILIZATION
},
80 { "bus-locked", PMC5_LOCKED_BUS
},
81 { "bus-io-cycle", PMC5_IO_CYCLE
},
82 { "fpu-flops", PMC5_FLOPS
},
83 { "int-hw", PMC5_HARDWARE_INTR
},
84 { "break-match0", PMC5_BP0_MATCH
},
85 { "break-match1", PMC5_BP1_MATCH
},
86 { "break-match2", PMC5_BP2_MATCH
},
87 { "break-match3", PMC5_BP3_MATCH
},
92 static const struct pmc_event i686_pmc_evids
[] = {
93 { "mem-refs", PMC6_DATA_MEM_REFS
},
94 { "l1cache-lines", PMC6_DCU_LINES_IN
},
95 { "l1cache-mlines", PMC6_DCU_M_LINES_IN
},
96 { "l1cache-mlines-evict", PMC6_DCU_M_LINES_OUT
},
97 { "l1cache-miss-wait", PMC6_DCU_MISS_OUTSTANDING
},
98 { "ins-fetch", PMC6_IFU_IFETCH
},
99 { "ins-fetch-misses", PMC6_IFU_IFETCH_MISS
},
100 { "itlb-misses", PMC6_IFU_IFETCH_MISS
},
101 { "insfetch-mem-stall", PMC6_IFU_MEM_STALL
},
102 { "insfetch-decode-stall", PMC6_ILD_STALL
},
103 { "l2cache-insfetch",
104 PMC6_L2_IFETCH
| __PMC_UNIT(0x0f) },
105 { "l2cache-data-loads",
106 PMC6_L2_LD
| __PMC_UNIT(0x0f) },
107 { "l2cache-data-stores",
108 PMC6_L2_ST
| __PMC_UNIT(0x0f) },
109 { "l2cache-lines", PMC6_L2_LINES_IN
},
110 { "l2cache-lines-evict", PMC6_L2_LINES_OUT
},
111 { "l2cache-mlines", PMC6_L2_M_LINES_INM
},
112 { "l2cache-mlines-evict",
113 PMC6_L2_M_LINES_OUTM
| __PMC_UNIT(0x0f) },
114 { "l2cache-reqs", PMC6_L2_RQSTS
},
115 { "l2cache-addr-strobes", PMC6_L2_ADS
},
116 { "l2cache-data-busy", PMC6_L2_DBUS_BUSY
},
117 { "l2cache-data-busy-read", PMC6_L2_DBUS_BUSY_RD
},
118 { "bus-drdy-clocks-self", PMC6_BUS_DRDY_CLOCKS
},
119 { "bus-drdy-clocks-any",
120 PMC6_BUS_DRDY_CLOCKS
| __PMC_UNIT(0x20) },
121 { "bus-lock-clocks-self", PMC6_BUS_LOCK_CLOCKS
},
122 { "bus-lock-clocks-any",
123 PMC6_BUS_LOCK_CLOCKS
| __PMC_UNIT(0x20) },
124 { "bus-req-outstanding-self", PMC6_BUS_REQ_OUTSTANDING
},
125 { "bus-req-outstanding-any",
126 PMC6_BUS_REQ_OUTSTANDING
| __PMC_UNIT(0x20) },
127 { "bus-burst-reads-self", PMC6_BUS_TRAN_BRD
},
128 { "bus-burst-reads-any",
129 PMC6_BUS_TRAN_BRD
| __PMC_UNIT(0x20) },
130 { "bus-read-for-ownership-self",PMC6_BUS_TRAN_RFO
},
131 { "bus-read-for-ownership-any",
132 PMC6_BUS_TRAN_RFO
| __PMC_UNIT(0x20) },
133 { "bus-write-back-self", PMC6_BUS_TRANS_WB
},
134 { "bus-write-back-any",
135 PMC6_BUS_TRANS_WB
| __PMC_UNIT(0x20) },
136 { "bus-ins-fetches-self", PMC6_BUS_TRAN_IFETCH
},
137 { "bus-ins-fetches-any",
138 PMC6_BUS_TRAN_IFETCH
| __PMC_UNIT(0x20) },
139 { "bus-invalidates-self", PMC6_BUS_TRAN_INVAL
},
140 { "bus-invalidates-any",
141 PMC6_BUS_TRAN_INVAL
| __PMC_UNIT(0x20) },
142 { "bus-partial-writes-self", PMC6_BUS_TRAN_PWR
},
143 { "bus-partial-writes-any",
144 PMC6_BUS_TRAN_PWR
| __PMC_UNIT(0x20) },
145 { "bus-partial-trans-self", PMC6_BUS_TRANS_P
},
146 { "bus-partial-trans-any",
147 PMC6_BUS_TRANS_P
| __PMC_UNIT(0x20) },
148 { "bus-io-trans-self", PMC6_BUS_TRANS_IO
},
149 { "bus-io-trans-any",
150 PMC6_BUS_TRANS_IO
| __PMC_UNIT(0x20) },
151 { "bus-deferred-trans-self", PMC6_BUS_TRAN_DEF
},
152 { "bus-deferred-trans-any",
153 PMC6_BUS_TRAN_DEF
| __PMC_UNIT(0x20) },
154 { "bus-burst-trans-self", PMC6_BUS_TRAN_BURST
},
155 { "bus-burst-trans-any",
156 PMC6_BUS_TRAN_BURST
| __PMC_UNIT(0x20) },
157 { "bus-total-trans-self", PMC6_BUS_TRAN_ANY
},
158 { "bus-total-trans-any",
159 PMC6_BUS_TRAN_ANY
| __PMC_UNIT(0x20) },
160 { "bus-mem-trans-self", PMC6_BUS_TRAN_MEM
},
161 { "bus-mem-trans-any",
162 PMC6_BUS_TRAN_MEM
| __PMC_UNIT(0x20) },
163 { "bus-recv-cycles", PMC6_BUS_DATA_RCV
},
164 { "bus-bnr-cycles", PMC6_BUS_BNR_DRV
},
165 { "bus-hit-cycles", PMC6_BUS_HIT_DRV
},
166 { "bus-hitm-cycles", PMC6_BUS_HITM_DRDV
},
167 { "bus-snoop-stall", PMC6_BUS_SNOOP_STALL
},
168 { "fpu-flops", PMC6_FLOPS
},
169 { "fpu-comp-ops", PMC6_FP_COMP_OPS_EXE
},
170 { "fpu-except-assist", PMC6_FP_ASSIST
},
171 { "fpu-mul", PMC6_MUL
},
172 { "fpu-div", PMC6_DIV
},
173 { "fpu-div-busy", PMC6_CYCLES_DIV_BUSY
},
174 { "mem-sb-blocks", PMC6_LD_BLOCKS
},
175 { "mem-sb-drains", PMC6_SB_DRAINS
},
176 { "mem-misalign-ref", PMC6_MISALIGN_MEM_REF
},
177 { "ins-pref-dispatch-nta",
178 PMC6_EMON_KNI_PREF_DISPATCHED
| __PMC_UNIT(0x01) },
179 { "ins-pref-dispatch-t1",
180 PMC6_EMON_KNI_PREF_DISPATCHED
| __PMC_UNIT(0x01) },
181 { "ins-pref-dispatch-t2",
182 PMC6_EMON_KNI_PREF_DISPATCHED
| __PMC_UNIT(0x02) },
183 { "ins-pref-dispatch-weak",
184 PMC6_EMON_KNI_PREF_DISPATCHED
| __PMC_UNIT(0x03) },
185 { "ins-pref-miss-nta",
186 PMC6_EMON_KNI_PREF_MISS
| __PMC_UNIT(0x01) },
187 { "ins-pref-miss-t1",
188 PMC6_EMON_KNI_PREF_MISS
| __PMC_UNIT(0x01) },
189 { "ins-pref-miss-t2",
190 PMC6_EMON_KNI_PREF_MISS
| __PMC_UNIT(0x02) },
191 { "ins-pref-miss-weak",
192 PMC6_EMON_KNI_PREF_MISS
| __PMC_UNIT(0x03) },
193 { "ins-retired", PMC6_INST_RETIRED
},
194 { "uops-retired", PMC6_UOPS_RETIRED
},
195 { "ins-decoded", PMC6_INST_DECODED
},
196 { "ins-stream-retired-packed-scalar",
197 PMC6_EMON_KNI_INST_RETIRED
},
198 { "ins-stream-retired-scalar",
199 PMC6_EMON_KNI_INST_RETIRED
| __PMC_UNIT(0x01) },
200 { "ins-stream-comp-retired-packed-scalar",
201 PMC6_EMON_KNI_COMP_INST_RET
},
202 { "ins-stream-comp-retired-scalar",
203 PMC6_EMON_KNI_COMP_INST_RET
| __PMC_UNIT(0x01) },
204 { "int-hw", PMC6_HW_INT_RX
},
205 { "int-cycles-masked", PMC6_CYCLES_INT_MASKED
},
206 { "int-cycles-masked-pending",
207 PMC6_CYCLES_INT_PENDING_AND_MASKED
},
208 { "branch-retired", PMC6_BR_INST_RETIRED
},
209 { "branch-miss-retired", PMC6_BR_MISS_PRED_RETIRED
},
210 { "branch-taken-retired", PMC6_BR_TAKEN_RETIRED
},
211 { "branch-taken-mispred-retired", PMC6_BR_MISS_PRED_TAKEN_RET
},
212 { "branch-decoded", PMC6_BR_INST_DECODED
},
213 { "branch-btb-miss", PMC6_BTB_MISSES
},
214 { "branch-bogus", PMC6_BR_BOGUS
},
215 { "branch-baclear", PMC6_BACLEARS
},
216 { "stall-resource", PMC6_RESOURCE_STALLS
},
217 { "stall-partial", PMC6_PARTIAL_RAT_STALLS
},
218 { "seg-loads", PMC6_SEGMENT_REG_LOADS
},
219 { "unhalted-cycles", PMC6_CPU_CLK_UNHALTED
},
220 { "mmx-exec", PMC6_MMX_INSTR_EXEC
},
221 { "mmx-sat-exec", PMC6_MMX_SAT_INSTR_EXEC
},
223 PMC6_MMX_UOPS_EXEC
| __PMC_UNIT(0x0f) },
224 { "mmx-exec-packed-mul",
225 PMC6_MMX_INSTR_TYPE_EXEC
| __PMC_UNIT(0x01) },
226 { "mmx-exec-packed-shift",
227 PMC6_MMX_INSTR_TYPE_EXEC
| __PMC_UNIT(0x02) },
228 { "mmx-exec-pack-ops",
229 PMC6_MMX_INSTR_TYPE_EXEC
| __PMC_UNIT(0x04) },
230 { "mmx-exec-unpack-ops",
231 PMC6_MMX_INSTR_TYPE_EXEC
| __PMC_UNIT(0x08) },
232 { "mmx-exec-packed-logical",
233 PMC6_MMX_INSTR_TYPE_EXEC
| __PMC_UNIT(0x10) },
234 { "mmx-exec-packed-arith",
235 PMC6_MMX_INSTR_TYPE_EXEC
| __PMC_UNIT(0x20) },
236 { "mmx-trans-mmx-float", PMC6_FP_MMX_TRANS
},
237 { "mmx-trans-float-mmx",
238 PMC6_FP_MMX_TRANS
| __PMC_UNIT(0x01) },
239 { "mmx-assist", PMC6_MMX_ASSIST
},
240 { "mmx-retire", PMC6_MMX_INSTR_RET
},
241 { "seg-rename-stalls-es",
242 PMC6_SEG_RENAME_STALLS
| __PMC_UNIT(0x01) },
243 { "seg-rename-stalls-ds",
244 PMC6_SEG_RENAME_STALLS
| __PMC_UNIT(0x02) },
245 { "seg-rename-stalls-fs",
246 PMC6_SEG_RENAME_STALLS
| __PMC_UNIT(0x04) },
247 { "seg-rename-stalls-gs",
248 PMC6_SEG_RENAME_STALLS
| __PMC_UNIT(0x08) },
249 { "seg-rename-stalls-all",
250 PMC6_SEG_RENAME_STALLS
| __PMC_UNIT(0x0f) },
252 PMC6_SEG_REG_RENAMES
| __PMC_UNIT(0x01) },
254 PMC6_SEG_REG_RENAMES
| __PMC_UNIT(0x02) },
256 PMC6_SEG_REG_RENAMES
| __PMC_UNIT(0x04) },
258 PMC6_SEG_REG_RENAMES
| __PMC_UNIT(0x08) },
260 PMC6_SEG_REG_RENAMES
| __PMC_UNIT(0x0f) },
261 { "seg-rename-retire", PMC6_RET_SEG_RENAMES
},
266 static const struct pmc_event k7_pmc_evids
[] = {
268 K7_SEGMENT_REG_LOADS
| __PMC_UNIT(0x7f) },
270 K7_SEGMENT_REG_LOADS
| __PMC_UNIT(0x01) },
272 K7_SEGMENT_REG_LOADS
| __PMC_UNIT(0x02) },
274 K7_SEGMENT_REG_LOADS
| __PMC_UNIT(0x04) },
276 K7_SEGMENT_REG_LOADS
| __PMC_UNIT(0x08) },
278 K7_SEGMENT_REG_LOADS
| __PMC_UNIT(0x10) },
280 K7_SEGMENT_REG_LOADS
| __PMC_UNIT(0x20) },
282 K7_SEGMENT_REG_LOADS
| __PMC_UNIT(0x40) },
283 { "seg-load-stall", K7_SEGMENT_LOAD_STALL
},
284 { "l1cache-access", K7_DATA_CACHE_ACCESS
},
285 { "l1cache-miss", K7_DATA_CACHE_MISS
},
287 K7_DATA_CACHE_REFILL
| __PMC_UNIT(0x1f) },
288 { "l1cache-refill-invalid",
289 K7_DATA_CACHE_REFILL
| __PMC_UNIT(0x01) },
290 { "l1cache-refill-shared",
291 K7_DATA_CACHE_REFILL
| __PMC_UNIT(0x02) },
292 { "l1cache-refill-exclusive",
293 K7_DATA_CACHE_REFILL
| __PMC_UNIT(0x04) },
294 { "l1cache-refill-owner",
295 K7_DATA_CACHE_REFILL
| __PMC_UNIT(0x08) },
296 { "l1cache-refill-modified",
297 K7_DATA_CACHE_REFILL
| __PMC_UNIT(0x10) },
299 K7_DATA_CACHE_REFILL_SYSTEM
| __PMC_UNIT(0x1f) },
300 { "l1cache-load-invalid",
301 K7_DATA_CACHE_REFILL_SYSTEM
| __PMC_UNIT(0x01) },
302 { "l1cache-load-shared",
303 K7_DATA_CACHE_REFILL_SYSTEM
| __PMC_UNIT(0x02) },
304 { "l1cache-load-exclusive",
305 K7_DATA_CACHE_REFILL_SYSTEM
| __PMC_UNIT(0x04) },
306 { "l1cache-load-owner",
307 K7_DATA_CACHE_REFILL_SYSTEM
| __PMC_UNIT(0x08) },
308 { "l1cache-load-modified",
309 K7_DATA_CACHE_REFILL_SYSTEM
| __PMC_UNIT(0x10) },
310 { "l1cache-writeback",
311 K7_DATA_CACHE_WBACK
| __PMC_UNIT(0x1f) },
312 { "l1cache-writeback-invalid",
313 K7_DATA_CACHE_WBACK
| __PMC_UNIT(0x01) },
314 { "l1cache-writeback-shared",
315 K7_DATA_CACHE_WBACK
| __PMC_UNIT(0x02) },
316 { "l1cache-writeback-exclusive",
317 K7_DATA_CACHE_WBACK
| __PMC_UNIT(0x04) },
318 { "l1cache-writeback-owner",
319 K7_DATA_CACHE_WBACK
| __PMC_UNIT(0x08) },
320 { "l1cache-writeback-modified",
321 K7_DATA_CACHE_WBACK
| __PMC_UNIT(0x10) },
323 K7_L2_REQUEST
| __PMC_UNIT(0xff) },
324 { "l2cache-tag-read",
325 K7_L2_REQUEST
| __PMC_UNIT(0x01) },
326 { "l2cache-tag-write",
327 K7_L2_REQUEST
| __PMC_UNIT(0x02) },
328 { "l2cache-inst-read",
329 K7_L2_REQUEST
| __PMC_UNIT(0x04) },
330 { "l2cache-inst-load",
331 K7_L2_REQUEST
| __PMC_UNIT(0x08) },
332 { "l2cache-data-store",
333 K7_L2_REQUEST
| __PMC_UNIT(0x10) },
334 { "l2cache-data-loadmem",
335 K7_L2_REQUEST
| __PMC_UNIT(0x20) },
336 { "l2cache-data-write",
337 K7_L2_REQUEST
| __PMC_UNIT(0x40) },
338 { "l2cache-data-move",
339 K7_L2_REQUEST
| __PMC_UNIT(0x80) },
340 { "l2cache-access-busy", K7_L2_REQUEST_BUSY
},
341 { "l2cache-hit", K7_L2_DTLB_HIT
},
342 { "l2cache-miss", K7_L2_DTLB_MISS
},
343 { "mem-misalign-ref", K7_MISALIGNED_DATA_REF
},
344 { "mem-access", K7_SYSTEM_REQUEST
},
346 K7_SYSTEM_REQUEST_TYPE
| __PMC_UNIT(0x01) },
348 K7_SYSTEM_REQUEST_TYPE
| __PMC_UNIT(0x04) },
350 K7_SYSTEM_REQUEST_TYPE
| __PMC_UNIT(0x10) },
352 K7_SYSTEM_REQUEST_TYPE
| __PMC_UNIT(0x20) },
354 K7_SYSTEM_REQUEST_TYPE
| __PMC_UNIT(0x40) },
355 { "ins-fetch", K7_IFU_IFETCH
},
356 { "ins-fetch-miss", K7_IFU_IFETCH_MISS
},
357 { "ins-refill-l2", K7_IFU_REFILL_FROM_L2
},
358 { "ins-refill-mem", K7_IFU_REFILL_FROM_SYSTEM
},
359 { "ins-fetch-stall", K7_IFU_STALL
},
360 { "ins-retired", K7_RETIRED_INST
},
361 { "ins-empty", K7_INSTRUCTION_DECODER_EMPTY
},
362 { "itlb-miss-l1", K7_ITLB_L1_MISS
},
363 { "itlb-miss-l2", K7_ITLB_L2_MISS
},
364 { "ops-retired", K7_RETIRED_OPS
},
365 { "branch-retired", K7_RETIRED_BRANCHES
},
366 { "branch-miss-retired", K7_RETIRED_BRANCH_MISPREDICTED
},
367 { "branch-taken-retired", K7_RETIRED_TAKEN_BRANCH
},
368 { "branch-taken-miss-retired",
369 K7_RETIRED_TAKEN_BRANCH_MISPREDICTED
},
370 { "branch-far-retired",
371 K7_RETIRED_FAR_CONTROL_TRANSFER
},
372 { "branch-resync-retired", K7_RETIRED_RESYNC_BRANCH
},
373 { "branch-near-retired", K7_RETIRED_NEAR_RETURNS
},
374 { "branch-near-miss-retired",
375 K7_RETIRED_NEAR_RETURNS_MISPREDICTED
},
376 { "branch-indirect-miss-retired",
377 K7_RETIRED_INDIRECT_MISPREDICTED
},
378 { "int-hw", K7_HW_INTR_RECV
},
379 { "int-cycles-masked", K7_CYCLES_INT_MASKED
},
380 { "int-cycles-masked-pending",
381 K7_CYCLES_INT_PENDING_AND_MASKED
},
382 { "break-match0", K7_BP0_MATCH
},
383 { "break-match1", K7_BP1_MATCH
},
384 { "break-match2", K7_BP2_MATCH
},
385 { "break-match3", K7_BP3_MATCH
},
390 static const struct pmc_class2evid i386_pmc_classes
[] = {
391 { PMC_CLASS_I586
, "i586",
393 { PMC_TYPE_I586_TSC
, "i586 cycle counter",
395 { PMC_TYPE_I586_PMCx
, "i586 performance counter",
398 { PMC_CLASS_I686
, "i686",
400 { PMC_TYPE_I686_TSC
, "i686 cycle counter",
402 { PMC_TYPE_I686_PMCx
, "i686 performance counter",
405 { PMC_CLASS_K7
, "K7",
407 { PMC_TYPE_K7_TSC
, "K7 cycle counter",
409 { PMC_TYPE_K7_PMCx
, "K7 performance counter",
416 const struct pmc_class2evid
*_pmc_md_classes
= i386_pmc_classes
;