pmc_events.h revision 183535
1/*-
2 * Copyright (c) 2005  Joseph Koshy
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 *    notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 *    notice, this list of conditions and the following disclaimer in the
12 *    documentation and/or other materials provided with the distribution.
13 *
14 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 * SUCH DAMAGE.
25 *
26 * $FreeBSD: head/sys/dev/hwpmc/pmc_events.h 183535 2008-10-02 06:18:09Z jkoshy $
27 */
28
29#ifndef _DEV_HWPMC_PMC_EVENTS_H_
30#define	_DEV_HWPMC_PMC_EVENTS_H_
31
32/*
33 * PMC event codes.
34 *
35 * __PMC_EV(CLASS, SYMBOLIC-NAME, VALUE, READABLE-NAME)
36 *
37 */
38
39/*
40 * AMD K7 Events, from "The AMD Athlon(tm) Processor x86 Code
41 * Optimization Guide" [Doc#22007K, Feb 2002]
42 */
43
44#define	__PMC_EV_K7()							\
45__PMC_EV(K7, DC_ACCESSES,		k7-dc-accesses)			\
46__PMC_EV(K7, DC_MISSES,			k7-dc-misses)			\
47__PMC_EV(K7, DC_REFILLS_FROM_L2,	k7-dc-refills-from-l2)		\
48__PMC_EV(K7, DC_REFILLS_FROM_SYSTEM,	k7-dc-refills-from-system)	\
49__PMC_EV(K7, DC_WRITEBACKS,		k7-dc-writebacks)		\
50__PMC_EV(K7, L1_DTLB_MISS_AND_L2_DTLB_HITS,				\
51			k7-l1-dtlb-miss-and-l2-dtlb-hits)		\
52__PMC_EV(K7, L1_AND_L2_DTLB_MISSES,	k7-l1-and-l2-dtlb-misses)	\
53__PMC_EV(K7, MISALIGNED_REFERENCES,	k7-misaligned-references)	\
54__PMC_EV(K7, IC_FETCHES,		k7-ic-fetches)			\
55__PMC_EV(K7, IC_MISSES,			k7-ic-misses)			\
56__PMC_EV(K7, L1_ITLB_MISSES,		k7-l1-itlb-misses)		\
57__PMC_EV(K7, L1_L2_ITLB_MISSES,		k7-l1-l2-itlb-misses)		\
58__PMC_EV(K7, RETIRED_INSTRUCTIONS,	k7-retired-instructions)	\
59__PMC_EV(K7, RETIRED_OPS,		k7-retired-ops)			\
60__PMC_EV(K7, RETIRED_BRANCHES,		k7-retired-branches)		\
61__PMC_EV(K7, RETIRED_BRANCHES_MISPREDICTED,				\
62			k7-retired-branches-mispredicted)		\
63__PMC_EV(K7, RETIRED_TAKEN_BRANCHES,	k7-retired-taken-branches)	\
64__PMC_EV(K7, RETIRED_TAKEN_BRANCHES_MISPREDICTED,			\
65			k7-retired-taken-branches-mispredicted)		\
66__PMC_EV(K7, RETIRED_FAR_CONTROL_TRANSFERS,				\
67			k7-retired-far-control-transfers)		\
68__PMC_EV(K7, RETIRED_RESYNC_BRANCHES, k7-retired-resync-branches)	\
69__PMC_EV(K7, INTERRUPTS_MASKED_CYCLES, k7-interrupts-masked-cycles)	\
70__PMC_EV(K7, INTERRUPTS_MASKED_WHILE_PENDING_CYCLES,			\
71			k7-interrupts-masked-while-pending-cycles)	\
72__PMC_EV(K7, HARDWARE_INTERRUPTS,	k7-hardware-interrupts)
73
74#define	PMC_EV_K7_FIRST	PMC_EV_K7_DC_ACCESSES
75#define	PMC_EV_K7_LAST	PMC_EV_K7_HARDWARE_INTERRUPTS
76
77/*
78 * Intel P4 Events, from "IA-32 Intel(r) Architecture Software
79 * Developer's Manual, Volume 3: System Programming Guide" [245472-012]
80 */
81
82#define	__PMC_EV_P4()							\
83__PMC_EV(P4, TC_DELIVER_MODE,		p4-tc-deliver-mode)		\
84__PMC_EV(P4, BPU_FETCH_REQUEST,		p4-bpu-fetch-request)		\
85__PMC_EV(P4, ITLB_REFERENCE,		p4-itlb-reference)		\
86__PMC_EV(P4, MEMORY_CANCEL,		p4-memory-cancel)		\
87__PMC_EV(P4, MEMORY_COMPLETE,		p4-memory-complete)		\
88__PMC_EV(P4, LOAD_PORT_REPLAY,		p4-load-port-replay)		\
89__PMC_EV(P4, STORE_PORT_REPLAY,		p4-store-port-replay)		\
90__PMC_EV(P4, MOB_LOAD_REPLAY,		p4-mob-load-replay)		\
91__PMC_EV(P4, PAGE_WALK_TYPE,		p4-page-walk-type)		\
92__PMC_EV(P4, BSQ_CACHE_REFERENCE,	p4-bsq-cache-reference)		\
93__PMC_EV(P4, IOQ_ALLOCATION,		p4-ioq-allocation)		\
94__PMC_EV(P4, IOQ_ACTIVE_ENTRIES,	p4-ioq-active-entries)		\
95__PMC_EV(P4, FSB_DATA_ACTIVITY,		p4-fsb-data-activity)		\
96__PMC_EV(P4, BSQ_ALLOCATION,		p4-bsq-allocation)		\
97__PMC_EV(P4, BSQ_ACTIVE_ENTRIES,	p4-bsq-active-entries)		\
98__PMC_EV(P4, SSE_INPUT_ASSIST,		p4-sse-input-assist)		\
99__PMC_EV(P4, PACKED_SP_UOP,		p4-packed-sp-uop)		\
100__PMC_EV(P4, PACKED_DP_UOP,		p4-packed-dp-uop)		\
101__PMC_EV(P4, SCALAR_SP_UOP,		p4-scalar-sp-uop)		\
102__PMC_EV(P4, SCALAR_DP_UOP,		p4-scalar-dp-uop)		\
103__PMC_EV(P4, 64BIT_MMX_UOP,		p4-64bit-mmx-uop)		\
104__PMC_EV(P4, 128BIT_MMX_UOP,		p4-128bit-mmx-uop)		\
105__PMC_EV(P4, X87_FP_UOP,		p4-x87-fp-uop)			\
106__PMC_EV(P4, X87_SIMD_MOVES_UOP,	p4-x87-simd-moves-uop)		\
107__PMC_EV(P4, GLOBAL_POWER_EVENTS,	p4-global-power-events)		\
108__PMC_EV(P4, TC_MS_XFER,		p4-tc-ms-xfer)			\
109__PMC_EV(P4, UOP_QUEUE_WRITES,		p4-uop-queue-writes)		\
110__PMC_EV(P4, RETIRED_MISPRED_BRANCH_TYPE,				\
111			    p4-retired-mispred-branch-type)		\
112__PMC_EV(P4, RETIRED_BRANCH_TYPE,	p4-retired-branch-type)		\
113__PMC_EV(P4, RESOURCE_STALL,		p4-resource-stall)		\
114__PMC_EV(P4, WC_BUFFER,			p4-wc-buffer)			\
115__PMC_EV(P4, B2B_CYCLES,		p4-b2b-cycles)			\
116__PMC_EV(P4, BNR,			p4-bnr)				\
117__PMC_EV(P4, SNOOP,			p4-snoop)			\
118__PMC_EV(P4, RESPONSE,			p4-response)			\
119__PMC_EV(P4, FRONT_END_EVENT,		p4-front-end-event)		\
120__PMC_EV(P4, EXECUTION_EVENT,		p4-execution-event)		\
121__PMC_EV(P4, REPLAY_EVENT,		p4-replay-event)		\
122__PMC_EV(P4, INSTR_RETIRED,		p4-instr-retired)		\
123__PMC_EV(P4, UOPS_RETIRED,		p4-uops-retired)		\
124__PMC_EV(P4, UOP_TYPE,			p4-uop-type)			\
125__PMC_EV(P4, BRANCH_RETIRED,		p4-branch-retired)		\
126__PMC_EV(P4, MISPRED_BRANCH_RETIRED,	p4-mispred-branch-retired)	\
127__PMC_EV(P4, X87_ASSIST,		p4-x87-assist)			\
128__PMC_EV(P4, MACHINE_CLEAR,		p4-machine-clear)
129
130#define	PMC_EV_P4_FIRST PMC_EV_P4_TC_DELIVER_MODE
131#define	PMC_EV_P4_LAST	PMC_EV_P4_MACHINE_CLEAR
132
133/* Intel Pentium Pro, P-II, P-III and Pentium-M style events */
134
135#define	__PMC_EV_P6()							\
136__PMC_EV(P6, DATA_MEM_REFS,		p6-data-mem-refs)		\
137__PMC_EV(P6, DCU_LINES_IN,		p6-dcu-lines-in)		\
138__PMC_EV(P6, DCU_M_LINES_IN,		p6-dcu-m-lines-in)		\
139__PMC_EV(P6, DCU_M_LINES_OUT,		p6-dcu-m-lines-out)		\
140__PMC_EV(P6, DCU_MISS_OUTSTANDING,	p6-dcu-miss-outstanding)	\
141__PMC_EV(P6, IFU_FETCH,			p6-ifu-ifetch)			\
142__PMC_EV(P6, IFU_FETCH_MISS,		p6-ifu-ifetch-miss)		\
143__PMC_EV(P6, ITLB_MISS,			p6-itlb-miss)			\
144__PMC_EV(P6, IFU_MEM_STALL,		p6-ifu-mem-stall)		\
145__PMC_EV(P6, ILD_STALL,			p6-ild-stall)			\
146__PMC_EV(P6, L2_IFETCH,			p6-l2-ifetch)			\
147__PMC_EV(P6, L2_LD,			p6-l2-ld)			\
148__PMC_EV(P6, L2_ST,			p6-l2-st)			\
149__PMC_EV(P6, L2_LINES_IN,		p6-l2-lines-in)			\
150__PMC_EV(P6, L2_LINES_OUT,		p6-l2-lines-out)		\
151__PMC_EV(P6, L2_M_LINES_INM,		p6-l2-m-lines-inm)		\
152__PMC_EV(P6, L2_M_LINES_OUTM,		p6-l2-m-lines-outm)		\
153__PMC_EV(P6, L2_RQSTS,			p6-l2-rqsts)			\
154__PMC_EV(P6, L2_ADS,			p6-l2-ads)			\
155__PMC_EV(P6, L2_DBUS_BUSY,		p6-l2-dbus-busy)		\
156__PMC_EV(P6, L2_DBUS_BUSY_RD,		p6-l2-dbus-busy-rd)		\
157__PMC_EV(P6, BUS_DRDY_CLOCKS,		p6-bus-drdy-clocks)		\
158__PMC_EV(P6, BUS_LOCK_CLOCKS,		p6-bus-lock-clocks)		\
159__PMC_EV(P6, BUS_REQ_OUTSTANDING,	p6-bus-req-outstanding)		\
160__PMC_EV(P6, BUS_TRAN_BRD,		p6-bus-tran-brd)		\
161__PMC_EV(P6, BUS_TRAN_RFO,		p6-bus-tran-rfo)		\
162__PMC_EV(P6, BUS_TRANS_WB,		p6-bus-trans-wb)		\
163__PMC_EV(P6, BUS_TRAN_IFETCH,		p6-bus-tran-ifetch)		\
164__PMC_EV(P6, BUS_TRAN_INVAL,		p6-bus-tran-inval)		\
165__PMC_EV(P6, BUS_TRAN_PWR,		p6-bus-tran-pwr)		\
166__PMC_EV(P6, BUS_TRANS_P,		p6-bus-trans-p)			\
167__PMC_EV(P6, BUS_TRANS_IO,		p6-bus-trans-io)		\
168__PMC_EV(P6, BUS_TRAN_DEF,		p6-bus-tran-def)		\
169__PMC_EV(P6, BUS_TRAN_BURST,		p6-bus-tran-burst)		\
170__PMC_EV(P6, BUS_TRAN_ANY,		p6-bus-tran-any)		\
171__PMC_EV(P6, BUS_TRAN_MEM,		p6-bus-tran-mem)		\
172__PMC_EV(P6, BUS_DATA_RCV,		p6-bus-data-rcv)		\
173__PMC_EV(P6, BUS_BNR_DRV,		p6-bus-bnr-drv)			\
174__PMC_EV(P6, BUS_HIT_DRV,		p6-bus-hit-drv)			\
175__PMC_EV(P6, BUS_HITM_DRV,		p6-bus-hitm-drv)		\
176__PMC_EV(P6, BUS_SNOOP_STALL,		p6-bus-snoop-stall)		\
177__PMC_EV(P6, FLOPS,			p6-flops)			\
178__PMC_EV(P6, FP_COMPS_OPS_EXE,		p6-fp-comps-ops-exe)		\
179__PMC_EV(P6, FP_ASSIST,			p6-fp-assist)			\
180__PMC_EV(P6, MUL,			p6-mul)				\
181__PMC_EV(P6, DIV,			p6-div)				\
182__PMC_EV(P6, CYCLES_DIV_BUSY,		p6-cycles-div-busy)		\
183__PMC_EV(P6, LD_BLOCKS,			p6-ld-blocks)			\
184__PMC_EV(P6, SB_DRAINS,			p6-sb-drains)			\
185__PMC_EV(P6, MISALIGN_MEM_REF,		p6-misalign-mem-ref)		\
186__PMC_EV(P6, EMON_KNI_PREF_DISPATCHED,	p6-emon-kni-pref-dispatched)	\
187__PMC_EV(P6, EMON_KNI_PREF_MISS,	p6-emon-kni-pref-miss)		\
188__PMC_EV(P6, INST_RETIRED,		p6-inst-retired)		\
189__PMC_EV(P6, UOPS_RETIRED,		p6-uops-retired)		\
190__PMC_EV(P6, INST_DECODED,		p6-inst-decoded)		\
191__PMC_EV(P6, EMON_KNI_INST_RETIRED,	p6-emon-kni-inst-retired)	\
192__PMC_EV(P6, EMON_KNI_COMP_INST_RET,	p6-emon-kni-comp-inst-ret)	\
193__PMC_EV(P6, HW_INT_RX,			p6-hw-int-rx)			\
194__PMC_EV(P6, CYCLES_INT_MASKED,		p6-cycles-int-masked)		\
195__PMC_EV(P6, CYCLES_INT_PENDING_AND_MASKED,				\
196			    p6-cycles-in-pending-and-masked)		\
197__PMC_EV(P6, BR_INST_RETIRED,		p6-br-inst-retired)		\
198__PMC_EV(P6, BR_MISS_PRED_RETIRED,	p6-br-miss-pred-retired)	\
199__PMC_EV(P6, BR_TAKEN_RETIRED,		p6-br-taken-retired)		\
200__PMC_EV(P6, BR_MISS_PRED_TAKEN_RET,	p6-br-miss-pred-taken-ret)	\
201__PMC_EV(P6, BR_INST_DECODED,		p6-br-inst-decoded)		\
202__PMC_EV(P6, BTB_MISSES,		p6-btb-misses)			\
203__PMC_EV(P6, BR_BOGUS,			p6-br-bogus)			\
204__PMC_EV(P6, BACLEARS,			p6-baclears)			\
205__PMC_EV(P6, RESOURCE_STALLS,		p6-resource-stalls)		\
206__PMC_EV(P6, PARTIAL_RAT_STALLS,	p6-partial-rat-stalls)		\
207__PMC_EV(P6, SEGMENT_REG_LOADS,		p6-segment-reg-loads)		\
208__PMC_EV(P6, CPU_CLK_UNHALTED,		p6-cpu-clk-unhalted)		\
209__PMC_EV(P6, MMX_INSTR_EXEC,		p6-mmx-instr-exec)		\
210__PMC_EV(P6, MMX_SAT_INSTR_EXEC,	p6-mmx-sat-instr-exec)		\
211__PMC_EV(P6, MMX_UOPS_EXEC,		p6-mmx-uops-exec)		\
212__PMC_EV(P6, MMX_INSTR_TYPE_EXEC,	p6-mmx-instr-type-exec)		\
213__PMC_EV(P6, FP_MMX_TRANS,		p6-fp-mmx-trans)		\
214__PMC_EV(P6, MMX_ASSIST,		p6-mmx-assist)			\
215__PMC_EV(P6, MMX_INSTR_RET,		p6-mmx-instr-ret)		\
216__PMC_EV(P6, SEG_RENAME_STALLS,		p6-seg-rename-stalls)		\
217__PMC_EV(P6, SEG_REG_RENAMES,		p6-seg-reg-renames)		\
218__PMC_EV(P6, RET_SEG_RENAMES,		p6-ret-seg-renames)		\
219__PMC_EV(P6, EMON_EST_TRANS,		p6-emon-est-trans)		\
220__PMC_EV(P6, EMON_THERMAL_TRIP,		p6-emon-thermal-trip)		\
221__PMC_EV(P6, BR_INST_EXEC,		p6-br-inst-exec)		\
222__PMC_EV(P6, BR_MISSP_EXEC,		p6-br-missp-exec)		\
223__PMC_EV(P6, BR_BAC_MISSP_EXEC,		p6-br-bac-missp-exec)		\
224__PMC_EV(P6, BR_CND_EXEC,		p6-br-cnd-exec)			\
225__PMC_EV(P6, BR_CND_MISSP_EXEC,		p6-br-cnd-missp-exec)		\
226__PMC_EV(P6, BR_IND_EXEC,		p6-br-ind-exec)			\
227__PMC_EV(P6, BR_IND_MISSP_EXEC,		p6-br-ind-missp-exec)		\
228__PMC_EV(P6, BR_RET_EXEC,		p6-br-ret-exec)			\
229__PMC_EV(P6, BR_RET_MISSP_EXEC,		p6-br-ret-missp-exec)		\
230__PMC_EV(P6, BR_RET_BAC_MISSP_EXEC,	p6-br-ret-bac-missp-exec)	\
231__PMC_EV(P6, BR_CALL_EXEC,		p6-br-call-exec)		\
232__PMC_EV(P6, BR_CALL_MISSP_EXEC,	p6-br-call-missp-exec)		\
233__PMC_EV(P6, BR_IND_CALL_EXEC,		p6-br-ind-call-exec)		\
234__PMC_EV(P6, EMON_SIMD_INSTR_RETIRED,	p6-emon-simd-instr-retired)	\
235__PMC_EV(P6, EMON_SYNCH_UOPS,		p6-emon-synch-uops)		\
236__PMC_EV(P6, EMON_ESP_UOPS,		p6-emon-esp-uops)		\
237__PMC_EV(P6, EMON_FUSED_UOPS_RET,	p6-emon-fused-uops-ret)		\
238__PMC_EV(P6, EMON_UNFUSION,		p6-emon-unfusion)		\
239__PMC_EV(P6, EMON_PREF_RQSTS_UP,	p6-emon-pref-rqsts-up)		\
240__PMC_EV(P6, EMON_PREF_RQSTS_DN,	p6-emon-pref-rqsts-dn)		\
241__PMC_EV(P6, EMON_SSE_SSE2_INST_RETIRED,				\
242				p6-emon-sse-sse2-inst-retired)		\
243__PMC_EV(P6, EMON_SSE_SSE2_COMP_INST_RETIRED,				\
244				p6-emon-sse-sse2-comp-inst-retired)
245
246
247#define	PMC_EV_P6_FIRST	PMC_EV_P6_DATA_MEM_REFS
248#define	PMC_EV_P6_LAST	PMC_EV_P6_EMON_SSE_SSE2_COMP_INST_RETIRED
249
250/* AMD K8 PMCs */
251
252#define	__PMC_EV_K8()							\
253__PMC_EV(K8, FP_DISPATCHED_FPU_OPS,	k8-fp-dispatched-fpu-ops)	\
254__PMC_EV(K8, FP_CYCLES_WITH_NO_FPU_OPS_RETIRED,				\
255		k8-fp-cycles-with-no-fpu-ops-retired)			\
256__PMC_EV(K8, FP_DISPATCHED_FPU_FAST_FLAG_OPS,				\
257		k8-fp-dispatched-fpu-fast-flag-ops)			\
258__PMC_EV(K8, LS_SEGMENT_REGISTER_LOAD,	k8-ls-segment-register-load)	\
259__PMC_EV(K8, LS_MICROARCHITECTURAL_RESYNC_BY_SELF_MODIFYING_CODE,	\
260		k8-ls-microarchitectural-resync-by-self-modifying-code)	\
261__PMC_EV(K8, LS_MICROARCHITECTURAL_RESYNC_BY_SNOOP,			\
262		k8-ls-microarchitectural-resync-by-snoop)		\
263__PMC_EV(K8, LS_BUFFER2_FULL,		k8-ls-buffer2-full)		\
264__PMC_EV(K8, LS_LOCKED_OPERATION,	k8-ls-locked-operation)		\
265__PMC_EV(K8, LS_MICROARCHITECTURAL_LATE_CANCEL,				\
266		k8-ls-microarchitectural-late-cancel)			\
267__PMC_EV(K8, LS_RETIRED_CFLUSH_INSTRUCTIONS,				\
268		k8-ls-retired-cflush-instructions)			\
269__PMC_EV(K8, LS_RETIRED_CPUID_INSTRUCTIONS,				\
270		k8-ls-retired-cpuid-instructions)			\
271__PMC_EV(K8, DC_ACCESS,			k8-dc-access)			\
272__PMC_EV(K8, DC_MISS,			k8-dc-miss)			\
273__PMC_EV(K8, DC_REFILL_FROM_L2,		k8-dc-refill-from-l2)		\
274__PMC_EV(K8, DC_REFILL_FROM_SYSTEM,	k8-dc-refill-from-system)	\
275__PMC_EV(K8, DC_COPYBACK,		k8-dc-copyback)			\
276__PMC_EV(K8, DC_L1_DTLB_MISS_AND_L2_DTLB_HIT,				\
277		k8-dc-l1-dtlb-miss-and-l2-dtlb-hit)			\
278__PMC_EV(K8, DC_L1_DTLB_MISS_AND_L2_DTLB_MISS,				\
279		k8-dc-l1-dtlb-miss-and-l2-dtlb-miss)			\
280__PMC_EV(K8, DC_MISALIGNED_DATA_REFERENCE,				\
281		k8-dc-misaligned-data-reference)			\
282__PMC_EV(K8, DC_MICROARCHITECTURAL_LATE_CANCEL,				\
283		k8-dc-microarchitectural-late-cancel-of-an-access)	\
284__PMC_EV(K8, DC_MICROARCHITECTURAL_EARLY_CANCEL,			\
285		k8-dc-microarchitectural-early-cancel-of-an-access)	\
286__PMC_EV(K8, DC_ONE_BIT_ECC_ERROR,	k8-dc-one-bit-ecc-error)	\
287__PMC_EV(K8, DC_DISPATCHED_PREFETCH_INSTRUCTIONS,			\
288		k8-dc-dispatched-prefetch-instructions)			\
289__PMC_EV(K8, DC_DCACHE_ACCESSES_BY_LOCKS,				\
290		k8-dc-dcache-accesses-by-locks)				\
291__PMC_EV(K8, BU_CPU_CLK_UNHALTED,	k8-bu-cpu-clk-unhalted)		\
292__PMC_EV(K8, BU_INTERNAL_L2_REQUEST,	k8-bu-internal-l2-request)	\
293__PMC_EV(K8, BU_FILL_REQUEST_L2_MISS,	k8-bu-fill-request-l2-miss)	\
294__PMC_EV(K8, BU_FILL_INTO_L2,		k8-bu-fill-into-l2)		\
295__PMC_EV(K8, IC_FETCH,			k8-ic-fetch)			\
296__PMC_EV(K8, IC_MISS,			k8-ic-miss)			\
297__PMC_EV(K8, IC_REFILL_FROM_L2,		k8-ic-refill-from-l2)		\
298__PMC_EV(K8, IC_REFILL_FROM_SYSTEM,	k8-ic-refill-from-system)	\
299__PMC_EV(K8, IC_L1_ITLB_MISS_AND_L2_ITLB_HIT,				\
300		k8-ic-l1-itlb-miss-and-l2-itlb-hit)			\
301__PMC_EV(K8, IC_L1_ITLB_MISS_AND_L2_ITLB_MISS,				\
302		k8-ic-l1-itlb-miss-and-l2-itlb-miss)			\
303__PMC_EV(K8, IC_MICROARCHITECTURAL_RESYNC_BY_SNOOP,			\
304		k8-ic-microarchitectural-resync-by-snoop)		\
305__PMC_EV(K8, IC_INSTRUCTION_FETCH_STALL,				\
306		k8-ic-instruction-fetch-stall)				\
307__PMC_EV(K8, IC_RETURN_STACK_HIT,	k8-ic-return-stack-hit)		\
308__PMC_EV(K8, IC_RETURN_STACK_OVERFLOW,	k8-ic-return-stack-overflow)	\
309__PMC_EV(K8, FR_RETIRED_X86_INSTRUCTIONS,				\
310		k8-fr-retired-x86-instructions)				\
311__PMC_EV(K8, FR_RETIRED_UOPS,		k8-fr-retired-uops)		\
312__PMC_EV(K8, FR_RETIRED_BRANCHES,	k8-fr-retired-branches)		\
313__PMC_EV(K8, FR_RETIRED_BRANCHES_MISPREDICTED,				\
314		k8-fr-retired-branches-mispredicted)			\
315__PMC_EV(K8, FR_RETIRED_TAKEN_BRANCHES,					\
316		k8-fr-retired-taken-branches)				\
317__PMC_EV(K8, FR_RETIRED_TAKEN_BRANCHES_MISPREDICTED,			\
318		k8-fr-retired-taken-branches-mispredicted)		\
319__PMC_EV(K8, FR_RETIRED_FAR_CONTROL_TRANSFERS,				\
320		k8-fr-retired-far-control-transfers)			\
321__PMC_EV(K8, FR_RETIRED_RESYNCS,	k8-fr-retired-resyncs)		\
322__PMC_EV(K8, FR_RETIRED_NEAR_RETURNS,	k8-fr-retired-near-returns)	\
323__PMC_EV(K8, FR_RETIRED_NEAR_RETURNS_MISPREDICTED,			\
324		k8-fr-retired-near-returns-mispredicted)		\
325__PMC_EV(K8,								\
326	FR_RETIRED_TAKEN_BRANCHES_MISPREDICTED_BY_ADDR_MISCOMPARE,	\
327	k8-fr-retired-taken-branches-mispredicted-by-addr-miscompare)	\
328__PMC_EV(K8, FR_RETIRED_FPU_INSTRUCTIONS,				\
329		k8-fr-retired-fpu-instructions)				\
330__PMC_EV(K8, FR_RETIRED_FASTPATH_DOUBLE_OP_INSTRUCTIONS,		\
331		k8-fr-retired-fastpath-double-op-instructions)		\
332__PMC_EV(K8, FR_INTERRUPTS_MASKED_CYCLES,				\
333		k8-fr-interrupts-masked-cycles)				\
334__PMC_EV(K8, FR_INTERRUPTS_MASKED_WHILE_PENDING_CYCLES,			\
335		k8-fr-interrupts-masked-while-pending-cycles)		\
336__PMC_EV(K8, FR_TAKEN_HARDWARE_INTERRUPTS,				\
337		k8-fr-taken-hardware-interrupts)			\
338__PMC_EV(K8, FR_DECODER_EMPTY,		k8-fr-decoder-empty)		\
339__PMC_EV(K8, FR_DISPATCH_STALLS,	k8-fr-dispatch-stalls)		\
340__PMC_EV(K8, FR_DISPATCH_STALL_FROM_BRANCH_ABORT_TO_RETIRE,		\
341		k8-fr-dispatch-stall-from-branch-abort-to-retire)	\
342__PMC_EV(K8, FR_DISPATCH_STALL_FOR_SERIALIZATION,			\
343		k8-fr-dispatch-stall-for-serialization)			\
344__PMC_EV(K8, FR_DISPATCH_STALL_FOR_SEGMENT_LOAD,			\
345		k8-fr-dispatch-stall-for-segment-load)			\
346__PMC_EV(K8, FR_DISPATCH_STALL_WHEN_REORDER_BUFFER_IS_FULL,		\
347		k8-fr-dispatch-stall-when-reorder-buffer-is-full)	\
348__PMC_EV(K8,								\
349	FR_DISPATCH_STALL_WHEN_RESERVATION_STATIONS_ARE_FULL,		\
350	k8-fr-dispatch-stall-when-reservation-stations-are-full)	\
351__PMC_EV(K8, FR_DISPATCH_STALL_WHEN_FPU_IS_FULL,			\
352		k8-fr-dispatch-stall-when-fpu-is-full)			\
353__PMC_EV(K8, FR_DISPATCH_STALL_WHEN_LS_IS_FULL,				\
354		k8-fr-dispatch-stall-when-ls-is-full)			\
355__PMC_EV(K8, FR_DISPATCH_STALL_WHEN_WAITING_FOR_ALL_TO_BE_QUIET,	\
356		k8-fr-dispatch-stall-when-waiting-for-all-to-be-quiet)	\
357__PMC_EV(K8,								\
358	FR_DISPATCH_STALL_WHEN_FAR_XFER_OR_RESYNC_BRANCH_PENDING,	\
359	k8-fr-dispatch-stall-when-far-xfer-or-resync-branch-pending)	\
360__PMC_EV(K8, FR_FPU_EXCEPTIONS,		k8-fr-fpu-exceptions)		\
361__PMC_EV(K8, FR_NUMBER_OF_BREAKPOINTS_FOR_DR0,				\
362		k8-fr-number-of-breakpoints-for-dr0)			\
363__PMC_EV(K8, FR_NUMBER_OF_BREAKPOINTS_FOR_DR1,				\
364		k8-fr-number-of-breakpoints-for-dr1)			\
365__PMC_EV(K8, FR_NUMBER_OF_BREAKPOINTS_FOR_DR2,				\
366		k8-fr-number-of-breakpoints-for-dr2)			\
367__PMC_EV(K8, FR_NUMBER_OF_BREAKPOINTS_FOR_DR3,				\
368		k8-fr-number-of-breakpoints-for-dr3)			\
369__PMC_EV(K8, NB_MEMORY_CONTROLLER_PAGE_ACCESS_EVENT,			\
370		k8-nb-memory-controller-page-access-event)		\
371__PMC_EV(K8, NB_MEMORY_CONTROLLER_PAGE_TABLE_OVERFLOW,			\
372		k8-nb-memory-controller-page-table-overflow)		\
373__PMC_EV(K8, NB_MEMORY_CONTROLLER_DRAM_COMMAND_SLOTS_MISSED,		\
374		k8-nb-memory-controller-dram-slots-missed)		\
375__PMC_EV(K8, NB_MEMORY_CONTROLLER_TURNAROUND,				\
376		k8-nb-memory-controller-turnaround)			\
377__PMC_EV(K8, NB_MEMORY_CONTROLLER_BYPASS_SATURATION,			\
378		k8-nb-memory-controller-bypass-saturation)		\
379__PMC_EV(K8, NB_SIZED_COMMANDS,		k8-nb-sized-commands)		\
380__PMC_EV(K8, NB_PROBE_RESULT,		k8-nb-probe-result)		\
381__PMC_EV(K8, NB_HT_BUS0_BANDWIDTH,	k8-nb-ht-bus0-bandwidth)	\
382__PMC_EV(K8, NB_HT_BUS1_BANDWIDTH,	k8-nb-ht-bus1-bandwidth)	\
383__PMC_EV(K8, NB_HT_BUS2_BANDWIDTH,	k8-nb-ht-bus2-bandwidth)
384
385#define	PMC_EV_K8_FIRST		PMC_EV_K8_FP_DISPATCHED_FPU_OPS
386#define	PMC_EV_K8_LAST		PMC_EV_K8_NB_HT_BUS2_BANDWIDTH
387
388
389/*
390 * Intel Pentium and Pentium MMX Events, from the "Intel 64 and IA-32
391 * Intel(R) Architectures Software Developer's Manual, Volume 3B:
392 * System Programming Guide, Part 2, August 2007".
393 */
394#define	__PMC_EV_P5()							\
395__PMC_EV(P5, DATA_READ, p5-data-read)					\
396__PMC_EV(P5, DATA_WRITE, p5-data-write)					\
397__PMC_EV(P5, DATA_TLB_MISS, p5-data-tlb-miss)				\
398__PMC_EV(P5, DATA_READ_MISS, p5-data-read-miss)				\
399__PMC_EV(P5, DATA_WRITE_MISS, p5-data-write-miss)			\
400__PMC_EV(P5, WRITE_HIT_TO_M_OR_E_STATE_LINES,				\
401    p5-write-hit-to-m-or-e-state-lines)					\
402__PMC_EV(P5, DATA_CACHE_LINES_WRITTEN_BACK,				\
403    p5-data-cache-lines-written-back)					\
404__PMC_EV(P5, EXTERNAL_SNOOPS, p5-external-snoops)			\
405__PMC_EV(P5, EXTERNAL_DATA_CACHE_SNOOP_HITS,				\
406    p5-external-data-cache-snoop-hits)					\
407__PMC_EV(P5, MEMORY_ACCESSES_IN_BOTH_PIPES,				\
408    p5-memory-accesses-in-both-pipes)					\
409__PMC_EV(P5, BANK_CONFLICTS, p5-bank-conflicts)				\
410__PMC_EV(P5, MISALIGNED_DATA_OR_IO_REFERENCES,				\
411    p5-misaligned-data-or-io-references)				\
412__PMC_EV(P5, CODE_READ, p5-code-read)					\
413__PMC_EV(P5, CODE_TLB_MISS, p5-code-tlb-miss)				\
414__PMC_EV(P5, CODE_CACHE_MISS, p5-code-cache-miss)			\
415__PMC_EV(P5, ANY_SEGMENT_REGISTER_LOADED,				\
416    p5-any-segment-register-loaded)					\
417__PMC_EV(P5, BRANCHES, p5-branches)					\
418__PMC_EV(P5, BTB_HITS, p5-btb-hits)					\
419__PMC_EV(P5, TAKEN_BRANCH_OR_BTB_HIT,					\
420    p5-taken-branch-or-btb-hit)						\
421__PMC_EV(P5, PIPELINE_FLUSHES, p5-pipeline-flushes)			\
422__PMC_EV(P5, INSTRUCTIONS_EXECUTED, p5-instructions-executed)		\
423__PMC_EV(P5, INSTRUCTIONS_EXECUTED_V_PIPE,				\
424    p5-instructions-executed-v-pipe)					\
425__PMC_EV(P5, BUS_CYCLE_DURATION, p5-bus-cycle-duration)			\
426__PMC_EV(P5, WRITE_BUFFER_FULL_STALL_DURATION,				\
427    p5-write-buffer-full-stall-duration)				\
428__PMC_EV(P5, WAITING_FOR_DATA_MEMORY_READ_STALL_DURATION,		\
429    p5-waiting-for-data-memory-read-stall-duration)			\
430__PMC_EV(P5, STALL_ON_WRITE_TO_AN_E_OR_M_STATE_LINE,			\
431    p5-stall-on-write-to-an-e-or-m-state-line)				\
432__PMC_EV(P5, LOCKED_BUS_CYCLE, p5-locked-bus-cycle)			\
433__PMC_EV(P5, IO_READ_OR_WRITE_CYCLE, p5-io-read-or-write-cycle)		\
434__PMC_EV(P5, NONCACHEABLE_MEMORY_READS,					\
435    p5-noncacheable-memory-reads)					\
436__PMC_EV(P5, PIPELINE_AGI_STALLS, p5-pipeline-agi-stalls)		\
437__PMC_EV(P5, FLOPS, p5-flops)						\
438__PMC_EV(P5, BREAKPOINT_MATCH_ON_DR0_REGISTER,				\
439    p5-breakpoint-match-on-dr0-register)				\
440__PMC_EV(P5, BREAKPOINT_MATCH_ON_DR1_REGISTER,				\
441    p5-breakpoint-match-on-dr1-register)				\
442__PMC_EV(P5, BREAKPOINT_MATCH_ON_DR2_REGISTER,				\
443    p5-breakpoint-match-on-dr2-register)				\
444__PMC_EV(P5, BREAKPOINT_MATCH_ON_DR3_REGISTER,				\
445    p5-breakpoint-match-on-dr3-register)				\
446__PMC_EV(P5, HARDWARE_INTERRUPTS, p5-hardware-interrupts)		\
447__PMC_EV(P5, DATA_READ_OR_WRITE, p5-data-read-or-write)			\
448__PMC_EV(P5, DATA_READ_MISS_OR_WRITE_MISS,				\
449    p5-data-read-miss-or-write-miss)					\
450__PMC_EV(P5, BUS_OWNERSHIP_LATENCY, p5-bus-ownership-latency)		\
451__PMC_EV(P5, BUS_OWNERSHIP_TRANSFERS, p5-bus-ownership-transfers)	\
452__PMC_EV(P5, MMX_INSTRUCTIONS_EXECUTED_U_PIPE,				\
453    p5-mmx-instructions-executed-u-pipe)				\
454__PMC_EV(P5, MMX_INSTRUCTIONS_EXECUTED_V_PIPE,				\
455    p5-mmx-instructions-executed-v-pipe)				\
456__PMC_EV(P5, CACHE_M_LINE_SHARING, p5-cache-m-line-sharing)		\
457__PMC_EV(P5, CACHE_LINE_SHARING, p5-cache-line-sharing)			\
458__PMC_EV(P5, EMMS_INSTRUCTIONS_EXECUTED,				\
459    p5-emms-instructions-executed)					\
460__PMC_EV(P5, TRANSITIONS_BETWEEN_MMX_AND_FP_INSTRUCTIONS,		\
461    p5-transitions-between-mmx-and-fp-instructions)			\
462__PMC_EV(P5, BUS_UTILIZATION_DUE_TO_PROCESSOR_ACTIVITY,			\
463    p5-bus-utilization-due-to-processor-activity)			\
464__PMC_EV(P5, WRITES_TO_NONCACHEABLE_MEMORY,				\
465    p5-writes-to-noncacheable-memory)					\
466__PMC_EV(P5, SATURATING_MMX_INSTRUCTIONS_EXECUTED,			\
467    p5-saturating-mmx-instructions-executed)				\
468__PMC_EV(P5, SATURATIONS_PERFORMED, p5-saturations-performed)		\
469__PMC_EV(P5, NUMBER_OF_CYCLES_NOT_IN_HALT_STATE,			\
470    p5-number-of-cycles-not-in-halt-state)				\
471__PMC_EV(P5, DATA_CACHE_TLB_MISS_STALL_DURATION,			\
472    p5-data-cache-tlb-miss-stall-duration)				\
473__PMC_EV(P5, MMX_INSTRUCTION_DATA_READS,				\
474    p5-mmx-instruction-data-reads)					\
475__PMC_EV(P5, MMX_INSTRUCTION_DATA_READ_MISSES,				\
476    p5-mmx-instruction-data-read-misses)				\
477__PMC_EV(P5, FLOATING_POINT_STALLS_DURATION,				\
478    p5-floating-point-stalls-duration)					\
479__PMC_EV(P5, TAKEN_BRANCHES, p5-taken-branches)				\
480__PMC_EV(P5, D1_STARVATION_AND_FIFO_IS_EMPTY,				\
481    p5-d1-starvation-and-fifo-is-empty)					\
482__PMC_EV(P5, D1_STARVATION_AND_ONLY_ONE_INSTRUCTION_IN_FIFO,		\
483    p5-d1-starvation-and-only-instruction-in-fifo)			\
484__PMC_EV(P5, MMX_INSTRUCTION_DATA_WRITES,				\
485    p5-mmx-instruction-data-writes)					\
486__PMC_EV(P5, MMX_INSTRUCTION_DATA_WRITE_MISSES,				\
487    p5-mmx-instruction-data-write-misses)				\
488__PMC_EV(P5, PIPELINE_FLUSHES_DUE_TO_WRONG_BRANCH_PREDICTIONS,		\
489    p5-pipeline-flushes-due-to-wrong-branch-predictions)		\
490__PMC_EV(P5,								\
491    PIPELINE_FLUSHES_DUE_TO_WRONG_BRANCH_PREDICTIONS_RESOLVED_IN_WB_STAGE, \
492    p5-pipeline-flushes-due-to-wrong-branch-predictions-resolved-in-wb-stage) \
493__PMC_EV(P5, MISALIGNED_DATA_MEMORY_REFERENCE_ON_MMX_INSTRUCTIONS,	\
494    p5-misaligned-data-memory-reference-on-mmx-instructions)		\
495__PMC_EV(P5, PIPELINE_STALL_FOR_MMX_INSTRUCTION_DATA_MEMORY_READS,	\
496    p5-pipeline-stall-for-mmx-instruction-data-memory-reads)		\
497__PMC_EV(P5, MISPREDICTED_OR_UNPREDICTED_RETURNS,			\
498    p5-mispredicted-or-unpredicted-returns)				\
499__PMC_EV(P5, PREDICTED_RETURNS, p5-predicted-returns)			\
500__PMC_EV(P5, MMX_MULTIPLY_UNIT_INTERLOCK,				\
501    p5-mmx-multiply-unit-interlock)					\
502__PMC_EV(P5, MOVD_MOVQ_STORE_STALL_DUE_TO_PREVIOUS_MMX_OPERATION,	\
503    p5-movd-movq-store-stall-due-to-previous-mmx-operation)		\
504__PMC_EV(P5, RETURNS, p5-returns)					\
505__PMC_EV(P5, BTB_FALSE_ENTRIES, p5-btb-false-entries)			\
506__PMC_EV(P5, BTB_MISS_PREDICTION_ON_NOT_TAKEN_BRANCH,			\
507    p5-btb-miss-prediction-on-not-taken-branch)				\
508__PMC_EV(P5,								\
509    FULL_WRITE_BUFFER_STALL_DURATION_WHILE_EXECUTING_MMX_INSTRUCTIONS,	\
510    p5-full-write-buffer-stall-duration-while-executing-mmx-instructions) \
511__PMC_EV(P5, STALL_ON_MMX_INSTRUCTION_WRITE_TO_E_OR_M_STATE_LINE,	\
512    p5-stall-on-mmx-instruction-write-to-e-o-m-state-line)
513
514#define	PMC_EV_P5_FIRST		PMC_EV_P5_DATA_READ
515#define	PMC_EV_P5_LAST	        \
516	PMC_EV_P5_STALL_ON_MMX_INSTRUCTION_WRITE_TO_E_OR_M_STATE_LINE
517
518/* timestamp counters. */
519#define	__PMC_EV_TSC()							\
520	__PMC_EV(TSC, TSC, tsc)
521
522/* All known PMC events */
523#define	__PMC_EVENTS()							\
524	__PMC_EV_TSC()							\
525	__PMC_EV_K7()							\
526	__PMC_EV_P6()							\
527	__PMC_EV_P4()							\
528	__PMC_EV_K8()							\
529	__PMC_EV_P5()							\
530
531#define	PMC_EVENT_FIRST	PMC_EV_TSC_TSC
532#define	PMC_EVENT_LAST	PMC_EV_P5_LAST
533
534#endif /* _DEV_HWPMC_PMC_EVENTS_H_ */
535