Deleted Added
full compact
libpmc.c (331722) libpmc.c (339767)
1/*-
2 * Copyright (c) 2003-2008 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

--- 11 unchanged lines hidden (view full) ---

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
27#include <sys/cdefs.h>
1/*-
2 * Copyright (c) 2003-2008 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

--- 11 unchanged lines hidden (view full) ---

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
27#include <sys/cdefs.h>
28__FBSDID("$FreeBSD: stable/11/lib/libpmc/libpmc.c 331722 2018-03-29 02:50:57Z eadler $");
28__FBSDID("$FreeBSD: stable/11/lib/libpmc/libpmc.c 339767 2018-10-26 05:12:56Z mmacy $");
29
30#include <sys/types.h>
31#include <sys/param.h>
32#include <sys/module.h>
33#include <sys/pmc.h>
34#include <sys/syscall.h>
35
36#include <ctype.h>

--- 19 unchanged lines hidden (view full) ---

56static int iap_allocate_pmc(enum pmc_event _pe, char *_ctrspec,
57 struct pmc_op_pmcallocate *_pmc_config);
58static int ucf_allocate_pmc(enum pmc_event _pe, char *_ctrspec,
59 struct pmc_op_pmcallocate *_pmc_config);
60static int ucp_allocate_pmc(enum pmc_event _pe, char *_ctrspec,
61 struct pmc_op_pmcallocate *_pmc_config);
62static int k8_allocate_pmc(enum pmc_event _pe, char *_ctrspec,
63 struct pmc_op_pmcallocate *_pmc_config);
29
30#include <sys/types.h>
31#include <sys/param.h>
32#include <sys/module.h>
33#include <sys/pmc.h>
34#include <sys/syscall.h>
35
36#include <ctype.h>

--- 19 unchanged lines hidden (view full) ---

56static int iap_allocate_pmc(enum pmc_event _pe, char *_ctrspec,
57 struct pmc_op_pmcallocate *_pmc_config);
58static int ucf_allocate_pmc(enum pmc_event _pe, char *_ctrspec,
59 struct pmc_op_pmcallocate *_pmc_config);
60static int ucp_allocate_pmc(enum pmc_event _pe, char *_ctrspec,
61 struct pmc_op_pmcallocate *_pmc_config);
62static int k8_allocate_pmc(enum pmc_event _pe, char *_ctrspec,
63 struct pmc_op_pmcallocate *_pmc_config);
64static int f17h_allocate_pmc(enum pmc_event _pe, char *_ctrspec,
65 struct pmc_op_pmcallocate *_pmc_config);
64static int p4_allocate_pmc(enum pmc_event _pe, char *_ctrspec,
65 struct pmc_op_pmcallocate *_pmc_config);
66#endif
67#if defined(__i386__)
68static int p5_allocate_pmc(enum pmc_event _pe, char *_ctrspec,
69 struct pmc_op_pmcallocate *_pmc_config);
70static int p6_allocate_pmc(enum pmc_event _pe, char *_ctrspec,
71 struct pmc_op_pmcallocate *_pmc_config);

--- 80 unchanged lines hidden (view full) ---

152 static const struct pmc_event_descr N##_event_table[] = \
153 { \
154 __PMC_EV_##C() \
155 }
156
157PMC_CLASSDEP_TABLE(iaf, IAF);
158PMC_CLASSDEP_TABLE(k7, K7);
159PMC_CLASSDEP_TABLE(k8, K8);
66static int p4_allocate_pmc(enum pmc_event _pe, char *_ctrspec,
67 struct pmc_op_pmcallocate *_pmc_config);
68#endif
69#if defined(__i386__)
70static int p5_allocate_pmc(enum pmc_event _pe, char *_ctrspec,
71 struct pmc_op_pmcallocate *_pmc_config);
72static int p6_allocate_pmc(enum pmc_event _pe, char *_ctrspec,
73 struct pmc_op_pmcallocate *_pmc_config);

--- 80 unchanged lines hidden (view full) ---

154 static const struct pmc_event_descr N##_event_table[] = \
155 { \
156 __PMC_EV_##C() \
157 }
158
159PMC_CLASSDEP_TABLE(iaf, IAF);
160PMC_CLASSDEP_TABLE(k7, K7);
161PMC_CLASSDEP_TABLE(k8, K8);
162PMC_CLASSDEP_TABLE(f17h, F17H);
160PMC_CLASSDEP_TABLE(p4, P4);
161PMC_CLASSDEP_TABLE(p5, P5);
162PMC_CLASSDEP_TABLE(p6, P6);
163PMC_CLASSDEP_TABLE(xscale, XSCALE);
164PMC_CLASSDEP_TABLE(armv7, ARMV7);
165PMC_CLASSDEP_TABLE(armv8, ARMV8);
166PMC_CLASSDEP_TABLE(mips24k, MIPS24K);
167PMC_CLASSDEP_TABLE(mips74k, MIPS74K);

--- 169 unchanged lines hidden (view full) ---

337PMC_MDEP_TABLE(ivybridge, IAP, PMC_CLASS_SOFT, PMC_CLASS_IAF, PMC_CLASS_TSC);
338PMC_MDEP_TABLE(ivybridge_xeon, IAP, PMC_CLASS_SOFT, PMC_CLASS_IAF, PMC_CLASS_TSC);
339PMC_MDEP_TABLE(sandybridge, IAP, PMC_CLASS_SOFT, PMC_CLASS_IAF, PMC_CLASS_TSC, PMC_CLASS_UCF, PMC_CLASS_UCP);
340PMC_MDEP_TABLE(sandybridge_xeon, IAP, PMC_CLASS_SOFT, PMC_CLASS_IAF, PMC_CLASS_TSC);
341PMC_MDEP_TABLE(westmere, IAP, PMC_CLASS_SOFT, PMC_CLASS_IAF, PMC_CLASS_TSC, PMC_CLASS_UCF, PMC_CLASS_UCP);
342PMC_MDEP_TABLE(westmere_ex, IAP, PMC_CLASS_SOFT, PMC_CLASS_IAF, PMC_CLASS_TSC);
343PMC_MDEP_TABLE(k7, K7, PMC_CLASS_SOFT, PMC_CLASS_TSC);
344PMC_MDEP_TABLE(k8, K8, PMC_CLASS_SOFT, PMC_CLASS_TSC);
163PMC_CLASSDEP_TABLE(p4, P4);
164PMC_CLASSDEP_TABLE(p5, P5);
165PMC_CLASSDEP_TABLE(p6, P6);
166PMC_CLASSDEP_TABLE(xscale, XSCALE);
167PMC_CLASSDEP_TABLE(armv7, ARMV7);
168PMC_CLASSDEP_TABLE(armv8, ARMV8);
169PMC_CLASSDEP_TABLE(mips24k, MIPS24K);
170PMC_CLASSDEP_TABLE(mips74k, MIPS74K);

--- 169 unchanged lines hidden (view full) ---

340PMC_MDEP_TABLE(ivybridge, IAP, PMC_CLASS_SOFT, PMC_CLASS_IAF, PMC_CLASS_TSC);
341PMC_MDEP_TABLE(ivybridge_xeon, IAP, PMC_CLASS_SOFT, PMC_CLASS_IAF, PMC_CLASS_TSC);
342PMC_MDEP_TABLE(sandybridge, IAP, PMC_CLASS_SOFT, PMC_CLASS_IAF, PMC_CLASS_TSC, PMC_CLASS_UCF, PMC_CLASS_UCP);
343PMC_MDEP_TABLE(sandybridge_xeon, IAP, PMC_CLASS_SOFT, PMC_CLASS_IAF, PMC_CLASS_TSC);
344PMC_MDEP_TABLE(westmere, IAP, PMC_CLASS_SOFT, PMC_CLASS_IAF, PMC_CLASS_TSC, PMC_CLASS_UCF, PMC_CLASS_UCP);
345PMC_MDEP_TABLE(westmere_ex, IAP, PMC_CLASS_SOFT, PMC_CLASS_IAF, PMC_CLASS_TSC);
346PMC_MDEP_TABLE(k7, K7, PMC_CLASS_SOFT, PMC_CLASS_TSC);
347PMC_MDEP_TABLE(k8, K8, PMC_CLASS_SOFT, PMC_CLASS_TSC);
348PMC_MDEP_TABLE(f17h, F17H, PMC_CLASS_SOFT, PMC_CLASS_TSC);
345PMC_MDEP_TABLE(p4, P4, PMC_CLASS_SOFT, PMC_CLASS_TSC);
346PMC_MDEP_TABLE(p5, P5, PMC_CLASS_SOFT, PMC_CLASS_TSC);
347PMC_MDEP_TABLE(p6, P6, PMC_CLASS_SOFT, PMC_CLASS_TSC);
348PMC_MDEP_TABLE(xscale, XSCALE, PMC_CLASS_SOFT, PMC_CLASS_XSCALE);
349PMC_MDEP_TABLE(cortex_a8, ARMV7, PMC_CLASS_SOFT, PMC_CLASS_ARMV7);
350PMC_MDEP_TABLE(cortex_a9, ARMV7, PMC_CLASS_SOFT, PMC_CLASS_ARMV7);
351PMC_MDEP_TABLE(cortex_a53, ARMV8, PMC_CLASS_SOFT, PMC_CLASS_ARMV8);
352PMC_MDEP_TABLE(cortex_a57, ARMV8, PMC_CLASS_SOFT, PMC_CLASS_ARMV8);

--- 50 unchanged lines hidden (view full) ---

403PMC_CLASS_TABLE_DESC(sandybridgeuc, UCP, sandybridgeuc, ucp);
404PMC_CLASS_TABLE_DESC(westmereuc, UCP, westmereuc, ucp);
405#endif
406#if defined(__i386__)
407PMC_CLASS_TABLE_DESC(k7, K7, k7, k7);
408#endif
409#if defined(__i386__) || defined(__amd64__)
410PMC_CLASS_TABLE_DESC(k8, K8, k8, k8);
349PMC_MDEP_TABLE(p4, P4, PMC_CLASS_SOFT, PMC_CLASS_TSC);
350PMC_MDEP_TABLE(p5, P5, PMC_CLASS_SOFT, PMC_CLASS_TSC);
351PMC_MDEP_TABLE(p6, P6, PMC_CLASS_SOFT, PMC_CLASS_TSC);
352PMC_MDEP_TABLE(xscale, XSCALE, PMC_CLASS_SOFT, PMC_CLASS_XSCALE);
353PMC_MDEP_TABLE(cortex_a8, ARMV7, PMC_CLASS_SOFT, PMC_CLASS_ARMV7);
354PMC_MDEP_TABLE(cortex_a9, ARMV7, PMC_CLASS_SOFT, PMC_CLASS_ARMV7);
355PMC_MDEP_TABLE(cortex_a53, ARMV8, PMC_CLASS_SOFT, PMC_CLASS_ARMV8);
356PMC_MDEP_TABLE(cortex_a57, ARMV8, PMC_CLASS_SOFT, PMC_CLASS_ARMV8);

--- 50 unchanged lines hidden (view full) ---

407PMC_CLASS_TABLE_DESC(sandybridgeuc, UCP, sandybridgeuc, ucp);
408PMC_CLASS_TABLE_DESC(westmereuc, UCP, westmereuc, ucp);
409#endif
410#if defined(__i386__)
411PMC_CLASS_TABLE_DESC(k7, K7, k7, k7);
412#endif
413#if defined(__i386__) || defined(__amd64__)
414PMC_CLASS_TABLE_DESC(k8, K8, k8, k8);
415PMC_CLASS_TABLE_DESC(f17h, F17H, f17h, f17h);
411PMC_CLASS_TABLE_DESC(p4, P4, p4, p4);
412#endif
413#if defined(__i386__)
414PMC_CLASS_TABLE_DESC(p5, P5, p5, p5);
415PMC_CLASS_TABLE_DESC(p6, P6, p6, p6);
416#endif
417#if defined(__i386__) || defined(__amd64__)
418PMC_CLASS_TABLE_DESC(tsc, TSC, tsc, tsc);

--- 734 unchanged lines hidden (view full) ---

1153 return (-1);
1154
1155 if (n < 0) /* Parsing failed. */
1156 return (-1);
1157 }
1158
1159 return (0);
1160}
416PMC_CLASS_TABLE_DESC(p4, P4, p4, p4);
417#endif
418#if defined(__i386__)
419PMC_CLASS_TABLE_DESC(p5, P5, p5, p5);
420PMC_CLASS_TABLE_DESC(p6, P6, p6, p6);
421#endif
422#if defined(__i386__) || defined(__amd64__)
423PMC_CLASS_TABLE_DESC(tsc, TSC, tsc, tsc);

--- 734 unchanged lines hidden (view full) ---

1158 return (-1);
1159
1160 if (n < 0) /* Parsing failed. */
1161 return (-1);
1162 }
1163
1164 return (0);
1165}
1166/* AMD Fam17H PMCs */
1167static struct pmc_event_alias f17h_aliases[] = {
1168 EV_ALIAS("branches", "ex_ret_brn_tkn"),
1169 EV_ALIAS("branch-mispredicts",
1170 "ex_ret_brn_tkn_misp"),
1171 EV_ALIAS("cycles", "tsc"),
1172 EV_ALIAS("dc-access", "ls_dc_access"),
1173 EV_ALIAS("ic-misses", "ic_fw32_miss"),
1174 EV_ALIAS("instructions", "ex_ret_inst"),
1175 EV_ALIAS("unhalted-cycles", "ls_not_halted_cycle"),
1176 EV_ALIAS(NULL, NULL)
1177};
1178#define __F17HMASK(N, V) PMCMASK(N, (1 << (V)))
1179static const struct pmc_masks f17h_mask_FPU_PIPEASSIGMENT[] = {
1180 __F17HMASK(FPU_PIPEASSIGMENT_uOP_P0, 0),
1181 __F17HMASK(FPU_PIPEASSIGMENT_uOP_P1, 1),
1182 __F17HMASK(FPU_PIPEASSIGMENT_uOP_P2, 2),
1183 __F17HMASK(FPU_PIPEASSIGMENT_uOP_P3, 3),
1184 __F17HMASK(FPU_PIPEASSIGMENT_MultiuOP_P0, 4),
1185 __F17HMASK(FPU_PIPEASSIGMENT_MultiuOP_P1, 5),
1186 __F17HMASK(FPU_PIPEASSIGMENT_MultiuOP_P2, 6),
1187 __F17HMASK(FPU_PIPEASSIGMENT_MultiuOP_P3, 7),
1188 NULLMASK
1189};
1190static const struct pmc_masks f17h_mask_FP_SCHED_EMPTY[] = {
1191 __F17HMASK(FP_SCHED_EMPTY, 0x0),
1192 NULLMASK
1193};
1194static const struct pmc_masks f17h_mask_FP_RET_X87_FPOPS[] = {
1195 __F17HMASK(FP_RET_X87_ADDSUBOPS, 0),
1196 __F17HMASK(FP_RET_X87_MULOPS, 1),
1197 __F17HMASK(FP_RET_X87_DIVSQRTOPS, 2),
1198 NULLMASK
1199};
1200static const struct pmc_masks f17h_mask_FP_RET_SSEAVX_OPS[] = {
1201 __F17HMASK(FP_RET_SSEAVX_SPADDSUBOPS, 0),
1202 __F17HMASK(FP_RET_SSEAVX_SPMULOPS, 1),
1203 __F17HMASK(FP_RET_SSEAVX_SPDIVOPS, 2),
1204 __F17HMASK(FP_RET_SSEAVX_SPMULADDOPS, 3),
1205 __F17HMASK(FP_RET_SSEAVX_DPADDSUBOPS, 4),
1206 __F17HMASK(FP_RET_SSEAVX_DPMULOPS, 5),
1207 __F17HMASK(FP_RET_SSEAVX_DPDIVOPS, 6),
1208 __F17HMASK(FP_RET_SSEAVX_DPMULADDOPS, 7),
1209 NULLMASK
1210};
1211static const struct pmc_masks f17h_mask_FP_NUM_MOVELIM_SCAL_OPT[] = {
1212 __F17HMASK(FP_NUM_SSEMOV_OPS, 0),
1213 __F17HMASK(FP_NUM_SSEMOV_ELIM, 1),
1214 __F17HMASK(FP_NUM_OPS_OPTPOT, 2),
1215 __F17HMASK(FP_NUM_OPS_OPT, 3),
1216 NULLMASK
1217};
1218static const struct pmc_masks f17h_mask_FP_RET_SEROPS[] = {
1219 __F17HMASK(FP_RET_SSE_BOTEXEC, 0),
1220 __F17HMASK(FP_RET_SSE_CTRL, 1),
1221 __F17HMASK(FP_RET_BOTEXEC, 2),
1222 __F17HMASK(FP_RET_X87_CTRL, 3),
1223 NULLMASK
1224};
1225static const struct pmc_masks f17h_mask_LS_BAD_STATUS2[] = {
1226 __F17HMASK(LS_BAD_STATUS2_STLI_NOSTATE, 0),
1227 __F17HMASK(LS_BAD_STATUS2_STLI_OTHER, 1),
1228 __F17HMASK(LS_BAD_STATUS2_STLF_NODATA, 2),
1229 NULLMASK
1230};
1231static const struct pmc_masks f17h_mask_LS_LOCKS[] = {
1232 __F17HMASK(LS_LOCKS_BUSLOCKS, 0),
1233 __F17HMASK(LS_LOCKS_NONSPECLOCK, 1),
1234 __F17HMASK(LS_SPECLOCK, 2),
1235 __F17HMASK(LS_SPECLCOK_MAPCOMMIT, 3),
1236 NULLMASK
1237};
1238static const struct pmc_masks f17h_mask_LS_RET_CLFLUSH_INST[] = {
1239 __F17HMASK(LS_RET_CLFLUSH_INST, 0x0),
1240 NULLMASK
1241};
1242static const struct pmc_masks f17h_mask_LS_RET_CPUID_INST[] = {
1243 __F17HMASK(LS_RET_CPUID_INST, 0x0),
1244 NULLMASK
1245};
1246static const struct pmc_masks f17h_mask_LS_DISPATCH[] = {
1247 __F17HMASK(LS_DISPATCH_LD, 0),
1248 __F17HMASK(LS_DISPATCH_STR, 1),
1249 __F17HMASK(LS_DISPATCH_LDSTR, 2),
1250 NULLMASK
1251};
1252static const struct pmc_masks f17h_mask_LS_SMI_RX[] = {
1253 __F17HMASK(LS_SMI_RX, 0x0),
1254 NULLMASK
1255};
1256static const struct pmc_masks f17h_mask_LS_STLF[] = {
1257 __F17HMASK(LS_STLF, 0x0),
1258 NULLMASK
1259};
1260static const struct pmc_masks f17h_mask_LS_STLF_COMMITCANCEL[] = {
1261 __F17HMASK(LS_STLF_COMMITCANCEL, 0x0),
1262 NULLMASK
1263};
1264static const struct pmc_masks f17h_mask_LS_DC_ACCESS[] = {
1265 __F17HMASK(LS_DC_ACCESS, 0x0),
1266 NULLMASK
1267};
1268static const struct pmc_masks f17h_mask_LS_MAB_ALLOCPIPE[] = {
1269 __F17HMASK(LS_MAB_ALLOCPIPE_DATAPIPE, 0),
1270 __F17HMASK(LS_MAB_ALLOCPIPE_STPIPE, 1),
1271 __F17HMASK(LS_MAB_ALLOCPIPE_TLBPIPELATE, 2),
1272 __F17HMASK(LS_MAB_ALLOCPIPE_HWPF, 3),
1273 __F17HMASK(LS_MAB_ALLOCPIPE_TLPPIPEEARLY, 4),
1274 NULLMASK
1275};
1276static const struct pmc_masks f17h_mask_LS_REFFILS_FROM_SYS[] = {
1277 __F17HMASK(LS_MABRESP_LCL_L2, 0),
1278 __F17HMASK(LS_MABRESP_LCL_CACHE, 1),
1279 __F17HMASK(LS_MABRESP_LCL_DRAM, 3),
1280 __F17HMASK(LS_MABRESP_LCL_RMT_CACHE, 4),
1281 __F17HMASK(LS_MABRESP_LCL_RMT_DRAM, 6),
1282 NULLMASK
1283};
1284static const struct pmc_masks f17h_mask_LS_L1_DTLBMISS[] = {
1285 __F17HMASK(LS_TLBRELOAD_4KL2HIT, 0),
1286 __F17HMASK(LS_TLBRELOAD_32KL2HIT, 1),
1287 __F17HMASK(LS_TLBRELOAD_2ML2HIT, 2),
1288 __F17HMASK(LS_TLBRELOAD_1GL2HIT, 3),
1289 __F17HMASK(LS_TLBRELOAD_4KL2MISS, 4),
1290 __F17HMASK(LS_TLBRELOAD_32KML2MISS, 5),
1291 __F17HMASK(LS_TLBRELOAD_2ML2MISS, 6),
1292 __F17HMASK(LS_TLBRELOAD_1GL2MISS, 7),
1293 NULLMASK
1294};
1295static const struct pmc_masks f17h_mask_LS_TABLEWALKER[] = {
1296 __F17HMASK(LS_PERFMON_TW_ALLOCDSIDE0, 0),
1297 __F17HMASK(LS_PERFMON_TW_ALLOCDSIDE1, 1),
1298 __F17HMASK(LS_PERFMON_TW_ALLOCISIDE0, 2),
1299 __F17HMASK(LS_PERFMON_TW_ALLOCISIDE1, 3),
1300 NULLMASK
1301};
1302static const struct pmc_masks f17h_mask_LS_MISAL_ACCESS[] = {
1303 __F17HMASK(LS_MISAL_ACCESS, 0x0),
1304 NULLMASK
1305};
1306static const struct pmc_masks f17h_mask_LS_PREF_INST_DISPATCH[] = {
1307 __F17HMASK(LS_LOAD_PREF_W, 0),
1308 __F17HMASK(LS_STORE_PREF_W, 1),
1309 __F17HMASK(LS_PREF_PREFETCH_NTA, 2),
1310 NULLMASK
1311};
1312static const struct pmc_masks f17h_mask_LS_HWPF_ALLOCATED[] = {
1313 __F17HMASK(LS_ALLOC_STREAM_PF, 0),
1314 __F17HMASK(LS_ALLOC_STRIDE_PF, 1),
1315 NULLMASK
1316};
1317static const struct pmc_masks f17h_mask_LS_HWPF_HIT[] = {
1318 __F17HMASK(LS_HIT_STREAM_PF, 0),
1319 __F17HMASK(LS_HIT_STRIDE_PF, 1),
1320 NULLMASK
1321};
1322static const struct pmc_masks f17h_mask_LS_TW_INPROG_DSIDE[] = {
1323 __F17HMASK(LS_TW_INPROG_DSIDE0, 0),
1324 __F17HMASK(LS_TW_INPROG_ISIDE0, 1),
1325 __F17HMASK(LS_TW_INPROG_DSIDE1, 2),
1326 __F17HMASK(LS_TW_INPROG_ISIDE1, 3),
1327 NULLMASK
1328};
1329static const struct pmc_masks f17h_mask_LS_INEF_SW_PREF[] = {
1330 __F17HMASK(LS_INEF_SW_PREF_DATAPIPE_SW_PF_DCHIT, 0),
1331 __F17HMASK(LS_INEF_SW_PREF_MAB_MCH_CNT, 1),
1332 NULLMASK
1333};
1334static const struct pmc_masks f17h_mask_LS_MAB_MCH_CNT[] = {
1335 __F17HMASK(LS_MAB_MCH_CNT, 0x0),
1336 NULLMASK
1337};
1338static const struct pmc_masks f17h_mask_LS_HW_PF_MABALLOC[] = {
1339 __F17HMASK(LS_MABALLOC_HW_PFSTREAM, 0),
1340 __F17HMASK(LS_MABALLOC_HW_PFSTRIDE, 1),
1341 __F17HMASK(LS_MABALLOC_PFREGION, 2),
1342 NULLMASK
1343};
1344static const struct pmc_masks f17h_mask_LS_HW_PF_MATCH[] = {
1345 __F17HMASK(LS_MATCH_HW_PFSTREAM, 0),
1346 __F17HMASK(LS_MATCH_HW_PFSTRIDE, 1),
1347 __F17HMASK(LS_MATCH_HW_PFREGION, 2),
1348 NULLMASK
1349};
1350static const struct pmc_masks f17h_mask_LS_SW_PF_DCFILLS[] = {
1351 __F17HMASK(LS_SW_PF_MABRESP_LCL_L2, 0),
1352 __F17HMASK(LS_SW_PF_MABRESP_LCL_L2_CACHE, 1),
1353 __F17HMASK(LS_SW_PF_MABRESP_LCL_DRM, 3),
1354 __F17HMASK(LS_SW_PF_MABRESP_RMT_CACHE, 4),
1355 __F17HMASK(LS_SW_PF_MABRESP_RMT_DRAM, 6),
1356 NULLMASK
1357};
1358static const struct pmc_masks f17h_mask_LS_HW_PF_DCFILLS[] = {
1359 __F17HMASK(LS_HW_PF_MABRESP_LCL_L2, 0),
1360 __F17HMASK(LS_HW_PF_MABRESP_LCL_CACHE, 1),
1361 __F17HMASK(LS_HW_PF_MABRESP_LCL_DRAM, 3),
1362 __F17HMASK(LS_HW_PF_MABRESP_RMT_CACHE, 4),
1363 __F17HMASK(LS_HW_PF_MABRESP_RMT_DRAM, 6),
1364 NULLMASK
1365};
1366static const struct pmc_masks f17h_mask_LS_TW_DCFILLS[] = {
1367 __F17HMASK(LS_TW_MABRESP_LCL_L2, 0),
1368 __F17HMASK(LS_TW_MABRESP_LCL_CACHE, 1),
1369 __F17HMASK(LS_TW_MABRESP_LCL_DRAM, 3),
1370 __F17HMASK(LS_TW_MABRESP_RMT_CACHE, 4),
1371 __F17HMASK(LS_TW_MABRESP_RMT_DRAM, 6),
1372 NULLMASK
1373};
1161
1374
1375static const struct pmc_masks f17h_mask_LS_ALLOC_MAB_COUNT[] = {
1376 __F17HMASK(LS_ALLOC_MAB_COUNT, 0x0),
1377 NULLMASK
1378};
1379static const struct pmc_masks f17h_mask_LS_TW_INITLEVEL[] = {
1380 __F17HMASK(LS_TW_INITLGH_NATIVE_PDPT, 0),
1381 __F17HMASK(LS_TW_INITLGH_NATIVE_PDT, 1),
1382 __F17HMASK(LS_TW_INITLGH_NATIVE_PFT, 2),
1383 __F17HMASK(LS_TW_INITLGH_NATIVE_PG, 3),
1384 __F17HMASK(LS_TW_INITL_NESTED_PDPT, 4),
1385 __F17HMASK(LS_TW_INITL_NESTED_PDT, 5),
1386 __F17HMASK(LS_TW_INITL_NESTED_PFT, 6),
1387 __F17HMASK(LS_TW_INITL_NESTED_PG, 7),
1388 NULLMASK
1389};
1390static const struct pmc_masks f17h_mask_LS_NOT_HALTED_CYCLE[] = {
1391 __F17HMASK(LS_NOT_HALTED_CYCLE, 0x00),
1392 NULLMASK
1393};
1394static const struct pmc_masks f17h_mask_LS_TW_RETURN_TYPES[] = {
1395 __F17HMASK(LS_TWC_RET_TYPE_SPEC_VALID, 0),
1396 __F17HMASK(LS_TWC_RET_TYPE_SPEC_FAULT_NAB, 2),
1397 __F17HMASK(LS_TWC_RET_TYPE_SPEC_FAULT_AB, 3),
1398 __F17HMASK(LS_TWC_RET_TYPE_NONSPEC_VALID, 6),
1399 __F17HMASK(LS_TWC_RET_TYPE_NONSPEC_FAULT, 7),
1400 NULLMASK
1401};
1402static const struct pmc_masks f17h_mask_IC_FW32[] = {
1403 __F17HMASK(IC_FW32, 0x0),
1404 NULLMASK
1405};
1406static const struct pmc_masks f17h_mask_IC_FW32_MISS[] = {
1407 __F17HMASK(IC_FW32_MISS, 0x0),
1408 NULLMASK
1409};
1410static const struct pmc_masks f17h_mask_IC_CACHEFILL_L2[] = {
1411 __F17HMASK(IC_CACHEFILL_L2, 0x0),
1412 NULLMASK
1413};
1414static const struct pmc_masks f17h_mask_IC_CACHEFILL_SYS[] = {
1415 __F17HMASK(IC_CACHEFILL_SYS, 0x0),
1416 NULLMASK
1417};
1418static const struct pmc_masks f17h_mask_BP_L1TLBMISS_L2HIT[] = {
1419 __F17HMASK(BP_L1TLBMISS_L2HIT, 0x0),
1420 NULLMASK
1421};
1422static const struct pmc_masks f17h_mask_BP_L1TLBMISS_L2MISS[] = {
1423 __F17HMASK(BP_L1TLBMISS_L2MISS, 0x0),
1424 NULLMASK
1425};
1426static const struct pmc_masks f17h_mask_IC_FETCHSTALL[] = {
1427 __F17HMASK(IC_FETCHSTALL_BACKPRESSURE, 0),
1428 __F17HMASK(IC_FETCHSTALL_DQEMPTY, 1),
1429 __F17HMASK(IC_FETCHSTALL_ANY, 2),
1430 NULLMASK
1431};
1432static const struct pmc_masks f17h_mask_BP_L1_BTBCORRECT[] = {
1433 __F17HMASK(BP_L1_BTBCORRECT, 0x0),
1434 NULLMASK
1435};
1436static const struct pmc_masks f17h_mask_BP_L2_BTBCORRECT[] = {
1437 __F17HMASK(BP_L2_BTBCORRECT, 0x0),
1438 NULLMASK
1439};
1440static const struct pmc_masks f17h_mask_IC_CACHEINVAL[] = {
1441 __F17HMASK(IC_CACHEINVAL_FILLINV, 0),
1442 __F17HMASK(IC_CACHEINVAL_L2_INV_PROVBE, 1),
1443 NULLMASK
1444};
1445static const struct pmc_masks f17h_mask_BP_TLB_REL[] = {
1446 __F17HMASK(BP_TLB_REL, 0x0),
1447 NULLMASK
1448};
1449static const struct pmc_masks f17h_mask_ICOC_MODE_SWITCH[] = {
1450 __F17HMASK(IC2OC_MODE_SWITCH, 0),
1451 __F17HMASK(OC2IC_MODE_SWITCH, 1),
1452 NULLMASK
1453};
1454static const struct pmc_masks f17h_mask_DE_DISPATCH_TOKEN_STALLS[] = {
1455 __F17HMASK(DE_ALSQ1_TOKEN_STALL, 0),
1456 __F17HMASK(DE_ALSQ2_TOKEN_STALL, 1),
1457 __F17HMASK(DE_ALSQ3_TOKEN_STALL, 2),
1458 __F17HMASK(DE_ALSQ3_0_TOKEN_STALL, 3),
1459 __F17HMASK(DE_ALU_TOKEN_STALL, 4),
1460 __F17HMASK(DE_AGSQ_TOKEN_STALL, 5),
1461 __F17HMASK(DE_RETIRE_TOKEN_STALLS, 6),
1462 NULLMASK
1463};
1464static const struct pmc_masks f17h_mask_EX_RET_INST[] = {
1465 __F17HMASK(EX_RET_INST, 0x0),
1466 NULLMASK
1467};
1468static const struct pmc_masks f17h_mask_EX_RET_COPS[] = {
1469 __F17HMASK(EX_RET_COPS, 0x0),
1470 NULLMASK
1471};
1472static const struct pmc_masks f17h_mask_EX_RET_BRN[] = {
1473 __F17HMASK(EX_RET_BRN, 0x0),
1474 NULLMASK
1475};
1476static const struct pmc_masks f17h_mask_EX_RET_BRN_MISP[] = {
1477 __F17HMASK(EX_RET_BRN_MISP, 0x0),
1478 NULLMASK
1479};
1480static const struct pmc_masks f17h_mask_EX_RET_BRN_TKN[] = {
1481 __F17HMASK(EX_RET_BRN_TKN, 0x0),
1482 NULLMASK
1483};
1484static const struct pmc_masks f17h_mask_EX_RET_BRN_TKN_MISP[] = {
1485 __F17HMASK(EX_RET_BRN_TKN_MISP, 0x0),
1486 NULLMASK
1487};
1488static const struct pmc_masks f17h_mask_EX_RET_BRN_FAR[] = {
1489 __F17HMASK(EX_RET_BRN_FAR, 0x0),
1490 NULLMASK
1491};
1492static const struct pmc_masks f17h_mask_EX_RET_BRN_RESYNC[] = {
1493 __F17HMASK(EX_RET_BRN_RESYNC, 0x0),
1494 NULLMASK
1495};
1496static const struct pmc_masks f17h_mask_EX_RET_BRN_NEAR_RET[] = {
1497 __F17HMASK(EX_RET_BRN_NEAR_RET, 0x0),
1498 NULLMASK
1499};
1500static const struct pmc_masks f17h_mask_EX_RET_BRN_NEAR_RET_MISPRED[] = {
1501 __F17HMASK(EX_RET_BRN_NEAR_RET_MISPRED, 0x0),
1502 NULLMASK
1503};
1504static const struct pmc_masks f17h_mask_EX_RET_BRN_IND_MISP[] = {
1505 __F17HMASK(EX_RET_BRN_IND_MISP, 0x0),
1506 NULLMASK
1507};
1508static const struct pmc_masks f17h_mask_EX_RET_MMX_FP_INSTR[] = {
1509 __F17HMASK(EX_RET_MMX_X87_INST, 0),
1510 __F17HMASK(EX_RET_MMX_INSTR, 1),
1511 __F17HMASK(EX_RET_MMX_SSE_INSTR, 2),
1512 NULLMASK
1513};
1514static const struct pmc_masks f17h_mask_EX_RET_COND_BRN[] = {
1515 __F17HMASK(EX_RET_COND_BRN, 0x0),
1516 NULLMASK
1517};
1518static const struct pmc_masks f17h_mask_EX_DIV_BUSY[] = {
1519 __F17HMASK(EX_DIV_BUSY, 0x0),
1520 NULLMASK
1521};
1522static const struct pmc_masks f17h_mask_EX_DIV_COUNT[] = {
1523 __F17HMASK(EX_DIV_COUNT, 0x0),
1524 NULLMASK
1525};
1526static const struct pmc_masks f17h_mask_L2_REQUEST_G1[] = {
1527 __F17HMASK(L2_REQUEST_G1_OTHERREQ, 0),
1528 __F17HMASK(L2_REQUEST_G1_HWPF, 1),
1529 __F17HMASK(L2_REQUEST_G1_PREFETCHL2, 2),
1530 __F17HMASK(L2_REQUEST_G1_CHANGETOX, 3),
1531 __F17HMASK(L2_REQUEST_G1_CACHEABLEICRD, 4),
1532 __F17HMASK(L2_REQUEST_G1_LSRDBLKC, 5),
1533 __F17HMASK(L2_REQUEST_G1_RDBLKX, 6),
1534 __F17HMASK(L2_REQUEST_G1_RDBLKL, 7),
1535 NULLMASK
1536};
1537static const struct pmc_masks f17h_mask_L2_REQUEST_G2[] = {
1538 __F17HMASK(L2_REQUEST_G2_BUSLOCKRESP, 0),
1539 __F17HMASK(L2_REQUEST_G2_BUSLOCKORIG, 1),
1540 __F17HMASK(L2_REQUEST_G2_SMCINV, 2),
1541 __F17HMASK(L2_REQUEST_G2_ICRDSIZENC, 3),
1542 __F17HMASK(L2_REQUEST_G2_ICRDSIZE, 4),
1543 __F17HMASK(L2_REQUEST_G2_LSRDSIZENC, 5),
1544 __F17HMASK(L2_REQUEST_G2_LSRDSIZE, 6),
1545 __F17HMASK(L2_REQUEST_G2_GROUP1, 7),
1546 NULLMASK
1547};
1548static const struct pmc_masks f17h_mask_L2_LATENCY[] = {
1549 __F17HMASK(L2_LATENCY_CYC_WAITINGONFILLS, 0x0),
1550 NULLMASK
1551};
1552static const struct pmc_masks f17h_mask_L2_WBCREQ[] = {
1553 __F17HMASK(L2_WBCREQ_CLZERO, 0),
1554 __F17HMASK(L2_WBCREQ_LOCALICCLR, 1),
1555 __F17HMASK(L2_WBCREQ_ZEROBYTESTORE, 2),
1556 __F17HMASK(L2_WBCREQ_ILINEFLUSH, 3),
1557 __F17HMASK(L2_WBCREQ_CACHELINEFLUSH, 4),
1558 __F17HMASK(L2_WBCREQ_WBCCLOSE, 5),
1559 __F17HMASK(L2_WBCREQ_WCBWRITE, 6),
1560 NULLMASK
1561};
1562static const struct pmc_masks f17h_mask_L2_CACHEREQSTAT[] = {
1563 __F17HMASK(L2_CACHEREQSTAT_ICFILLMISS, 0),
1564 __F17HMASK(L2_CACHEREQSTAT_ICFILLHITS, 1),
1565 __F17HMASK(L2_CACHEREQSTAT_ICFILLHITX, 2),
1566 __F17HMASK(L2_CACHEREQSTAT_LSRDBLKC, 3),
1567 __F17HMASK(L2_CACHEREQSTAT_LSRDBLKX, 4),
1568 __F17HMASK(L2_CACHEREQSTAT_LSRDBLKLHITS, 5),
1569 __F17HMASK(L2_CACHEREQSTAT_LSRDBLKLHITX, 6),
1570 __F17HMASK(L2_CACHEREQSTAT_LSRDBLKCS, 7),
1571 NULLMASK
1572};
1573static const struct pmc_masks f17h_mask_L2_SMCEVENTS[] = {
1574 __F17HMASK(L2_SMCEVENTS_ICFILLSTQCAMMATOT, 0),
1575 __F17HMASK(L2_SMCEVENTS_ICFILLSTQCAMMATTT, 1),
1576 __F17HMASK(L2_SMCEVENTS_LSRDBLKLSXCHGTOX, 2),
1577 __F17HMASK(L2_SMCEVENTS_RDBLKXCHGTOX, 3),
1578 __F17HMASK(L2_SMCEVENTS_LSRDBLKLSCHITL2ICVAL, 4),
1579 __F17HMASK(L2_SMCEVENTS_ICFETCHHITL2, 5),
1580 __F17HMASK(L2_SMCEVENTS_ICFETCHHITL2DCVAL, 6),
1581 NULLMASK
1582};
1583static const struct pmc_masks f17h_mask_L2_FILLPENDING[] = {
1584 __F17HMASK(L2_FILLPENDING_L2FILLBUSY, 0),
1585 NULLMASK
1586};
1587static const struct pmc_masks f17h_mask_EX_TAGGED_IBSOPS[] = {
1588 __F17HMASK(EX_TAGGED_IBSOPS, 0x0),
1589 __F17HMASK(EX_TAGGED_IBSOPS_RET, 0x1),
1590 __F17HMASK(EX_TAGGED_IBSOPS_CNT_RLOVER, 0x2),
1591 NULLMASK
1592};
1593static const struct pmc_masks f17h_mask_EX_RET_FUSED_BRNCH_INST[] = {
1594 __F17HMASK(EX_RET_FUSED_BRNCH_INST, 0x0),
1595 NULLMASK
1596};
1597
1598#define F17H_KW_COUNT "count"
1599#define F17H_KW_EDGE "edge"
1600#define F17H_KW_INV "inv"
1601#define F17H_KW_MASK "mask"
1602#define F17H_KW_OS "os"
1603#define F17H_KW_USR "usr"
1604
1605static int
1606f17h_allocate_pmc(enum pmc_event pe, char *ctrspec,
1607 struct pmc_op_pmcallocate *pmc_config)
1608{
1609 char *e, *p, *q;
1610 int n;
1611 uint32_t count;
1612 const struct pmc_masks *pmask;
1613 uint64_t evmask = 0;
1614 (void)ctrspec;
1615
1616 pmc_config->pm_caps |= (PMC_CAP_READ | PMC_CAP_WRITE);
1617 pmc_config->pm_md.pm_amd.pm_amd_config = 0;
1618
1619
1620#define __F17HSETMASK(M) pmask = f17h_mask_##M
1621 switch (pe) {
1622 case PMC_EV_F17H_FPU_PIPEASSIGMENT:
1623 __F17HSETMASK(FPU_PIPEASSIGMENT);
1624 break;
1625 case PMC_EV_F17H_FP_SCHED_EMPTY:
1626 __F17HSETMASK(FP_SCHED_EMPTY);
1627 break;
1628 case PMC_EV_F17H_FP_RET_X87_FPOPS:
1629 __F17HSETMASK(FP_RET_X87_FPOPS);
1630 break;
1631 case PMC_EV_F17H_FP_RET_SSEAVX_OPS:
1632 __F17HSETMASK(FP_RET_SSEAVX_OPS);
1633 break;
1634 case PMC_EV_F17H_FP_NUM_MOVELIM_SCAL_OPT:
1635 __F17HSETMASK(FP_NUM_MOVELIM_SCAL_OPT);
1636 break;
1637 case PMC_EV_F17H_FP_RET_SEROPS:
1638 __F17HSETMASK(FP_RET_SEROPS);
1639 break;
1640 case PMC_EV_F17H_LS_BAD_STATUS2:
1641 __F17HSETMASK(LS_BAD_STATUS2);
1642 break;
1643 case PMC_EV_F17H_LS_LOCKS:
1644 __F17HSETMASK(LS_LOCKS);
1645 break;
1646 case PMC_EV_F17H_LS_RET_CLFLUSH_INST:
1647 __F17HSETMASK(LS_RET_CLFLUSH_INST);
1648 break;
1649 case PMC_EV_F17H_LS_RET_CPUID_INST:
1650 __F17HSETMASK(LS_RET_CPUID_INST);
1651 break;
1652 case PMC_EV_F17H_LS_DISPATCH:
1653 __F17HSETMASK(LS_DISPATCH);
1654 break;
1655 case PMC_EV_F17H_LS_SMI_RX:
1656 __F17HSETMASK(LS_SMI_RX);
1657 break;
1658 case PMC_EV_F17H_LS_STLF:
1659 __F17HSETMASK(LS_STLF);
1660 break;
1661 case PMC_EV_F17H_LS_STLF_COMMITCANCEL:
1662 __F17HSETMASK(LS_STLF_COMMITCANCEL);
1663 break;
1664 case PMC_EV_F17H_LS_DC_ACCESS:
1665 __F17HSETMASK(LS_DC_ACCESS);
1666 break;
1667 case PMC_EV_F17H_LS_MAB_ALLOCPIPE:
1668 __F17HSETMASK(LS_MAB_ALLOCPIPE);
1669 break;
1670 case PMC_EV_F17H_LS_REFFILS_FROM_SYS:
1671 __F17HSETMASK(LS_REFFILS_FROM_SYS);
1672 break;
1673 case PMC_EV_F17H_LS_L1_DTLBMISS:
1674 __F17HSETMASK(LS_L1_DTLBMISS);
1675 break;
1676 case PMC_EV_F17H_LS_TABLEWALKER:
1677 __F17HSETMASK(LS_TABLEWALKER);
1678 break;
1679 case PMC_EV_F17H_LS_MISAL_ACCESS:
1680 __F17HSETMASK(LS_MISAL_ACCESS);
1681 break;
1682 case PMC_EV_F17H_LS_PREF_INST_DISPATCH:
1683 __F17HSETMASK(LS_PREF_INST_DISPATCH);
1684 break;
1685 case PMC_EV_F17H_LS_HWPF_ALLOCATED:
1686 __F17HSETMASK(LS_HWPF_ALLOCATED);
1687 break;
1688 case PMC_EV_F17H_LS_HWPF_HIT:
1689 __F17HSETMASK(LS_HWPF_HIT);
1690 break;
1691 case PMC_EV_F17H_LS_TW_INPROG_DSIDE:
1692 __F17HSETMASK(LS_TW_INPROG_DSIDE);
1693 break;
1694 case PMC_EV_F17H_LS_INEF_SW_PREF:
1695 __F17HSETMASK(LS_INEF_SW_PREF);
1696 break;
1697 case PMC_EV_F17H_LS_MAB_MCH_CNT:
1698 __F17HSETMASK(LS_MAB_MCH_CNT);
1699 break;
1700 case PMC_EV_F17H_LS_HW_PF_MABALLOC:
1701 __F17HSETMASK(LS_HW_PF_MABALLOC);
1702 break;
1703 case PMC_EV_F17H_LS_HW_PF_MATCH:
1704 __F17HSETMASK(LS_HW_PF_MATCH);
1705 break;
1706 case PMC_EV_F17H_LS_SW_PF_DCFILLS:
1707 __F17HSETMASK(LS_SW_PF_DCFILLS);
1708 break;
1709 case PMC_EV_F17H_LS_HW_PF_DCFILLS:
1710 __F17HSETMASK(LS_HW_PF_DCFILLS);
1711 break;
1712 case PMC_EV_F17H_LS_TW_DCFILLS:
1713 __F17HSETMASK(LS_TW_DCFILLS);
1714 break;
1715 case PMC_EV_F17H_LS_ALLOC_MAB_COUNT:
1716 __F17HSETMASK(LS_ALLOC_MAB_COUNT);
1717 break;
1718 case PMC_EV_F17H_LS_TW_INITLEVEL:
1719 __F17HSETMASK(LS_TW_INITLEVEL);
1720 break;
1721 case PMC_EV_F17H_LS_NOT_HALTED_CYCLE:
1722 __F17HSETMASK(LS_NOT_HALTED_CYCLE);
1723 break;
1724 case PMC_EV_F17H_LS_TW_RETURN_TYPES:
1725 __F17HSETMASK(LS_TW_RETURN_TYPES);
1726 break;
1727 case PMC_EV_F17H_IC_FW32:
1728 __F17HSETMASK(IC_FW32);
1729 break;
1730 case PMC_EV_F17H_IC_FW32_MISS:
1731 __F17HSETMASK(IC_FW32_MISS);
1732 break;
1733 case PMC_EV_F17H_IC_CACHEFILL_L2:
1734 __F17HSETMASK(IC_CACHEFILL_L2);
1735 break;
1736 case PMC_EV_F17H_IC_CACHEFILL_SYS:
1737 __F17HSETMASK(IC_CACHEFILL_SYS);
1738 break;
1739 case PMC_EV_F17H_BP_L1TLBMISS_L2HIT:
1740 __F17HSETMASK(BP_L1TLBMISS_L2HIT);
1741 break;
1742 case PMC_EV_F17H_BP_L1TLBMISS_L2MISS:
1743 __F17HSETMASK(BP_L1TLBMISS_L2MISS);
1744 break;
1745 case PMC_EV_F17H_IC_FETCHSTALL:
1746 __F17HSETMASK(IC_FETCHSTALL);
1747 break;
1748 case PMC_EV_F17H_BP_L1_BTBCORRECT:
1749 __F17HSETMASK(BP_L1_BTBCORRECT);
1750 break;
1751 case PMC_EV_F17H_BP_L2_BTBCORRECT:
1752 __F17HSETMASK(BP_L2_BTBCORRECT);
1753 break;
1754 case PMC_EV_F17H_IC_CACHEINVAL:
1755 __F17HSETMASK(IC_CACHEINVAL);
1756 break;
1757 case PMC_EV_F17H_BP_TLB_REL:
1758 __F17HSETMASK(BP_TLB_REL);
1759 break;
1760 case PMC_EV_F17H_ICOC_MODE_SWITCH:
1761 __F17HSETMASK(ICOC_MODE_SWITCH);
1762 break;
1763 case PMC_EV_F17H_DE_DISPATCH_TOKEN_STALLS:
1764 __F17HSETMASK(DE_DISPATCH_TOKEN_STALLS);
1765 break;
1766 case PMC_EV_F17H_EX_RET_INST:
1767 __F17HSETMASK(EX_RET_INST);
1768 break;
1769 case PMC_EV_F17H_EX_RET_COPS:
1770 __F17HSETMASK(EX_RET_COPS);
1771 break;
1772 case PMC_EV_F17H_EX_RET_BRN:
1773 __F17HSETMASK(EX_RET_BRN);
1774 break;
1775 case PMC_EV_F17H_EX_RET_BRN_MISP:
1776 __F17HSETMASK(EX_RET_BRN_MISP);
1777 break;
1778 case PMC_EV_F17H_EX_RET_BRN_TKN:
1779 __F17HSETMASK(EX_RET_BRN_TKN);
1780 break;
1781 case PMC_EV_F17H_EX_RET_BRN_TKN_MISP:
1782 __F17HSETMASK(EX_RET_BRN_TKN_MISP);
1783 break;
1784 case PMC_EV_F17H_EX_RET_BRN_FAR:
1785 __F17HSETMASK(EX_RET_BRN_FAR);
1786 break;
1787 case PMC_EV_F17H_EX_RET_BRN_RESYNC:
1788 __F17HSETMASK(EX_RET_BRN_RESYNC);
1789 break;
1790 case PMC_EV_F17H_EX_RET_BRN_NEAR_RET:
1791 __F17HSETMASK(EX_RET_BRN_NEAR_RET);
1792 break;
1793 case PMC_EV_F17H_EX_RET_BRN_NEAR_RET_MISPRED:
1794 __F17HSETMASK(EX_RET_BRN_NEAR_RET_MISPRED);
1795 break;
1796 case PMC_EV_F17H_EX_RET_BRN_IND_MISP:
1797 __F17HSETMASK(EX_RET_BRN_IND_MISP);
1798 break;
1799 case PMC_EV_F17H_EX_RET_MMX_FP_INSTR:
1800 __F17HSETMASK(EX_RET_MMX_FP_INSTR);
1801 break;
1802 case PMC_EV_F17H_EX_RET_COND_BRN:
1803 __F17HSETMASK(EX_RET_COND_BRN);
1804 break;
1805 case PMC_EV_F17H_EX_DIV_BUSY:
1806 __F17HSETMASK(EX_DIV_BUSY);
1807 break;
1808 case PMC_EV_F17H_EX_DIV_COUNT:
1809 __F17HSETMASK(EX_DIV_COUNT);
1810 break;
1811 case PMC_EV_F17H_L2_REQUEST_G1:
1812 __F17HSETMASK(L2_REQUEST_G1);
1813 break;
1814 case PMC_EV_F17H_L2_REQUEST_G2:
1815 __F17HSETMASK(L2_REQUEST_G2);
1816 break;
1817 case PMC_EV_F17H_L2_LATENCY:
1818 __F17HSETMASK(L2_LATENCY);
1819 break;
1820 case PMC_EV_F17H_L2_WBCREQ:
1821 __F17HSETMASK(L2_WBCREQ);
1822 break;
1823 case PMC_EV_F17H_L2_CACHEREQSTAT:
1824 __F17HSETMASK(L2_CACHEREQSTAT);
1825 break;
1826 case PMC_EV_F17H_L2_SMCEVENTS:
1827 __F17HSETMASK(L2_SMCEVENTS);
1828 break;
1829 case PMC_EV_F17H_L2_FILLPENDING:
1830 __F17HSETMASK(L2_FILLPENDING);
1831 break;
1832 case PMC_EV_F17H_EX_TAGGED_IBSOPS:
1833 __F17HSETMASK(EX_TAGGED_IBSOPS);
1834 break;
1835 case PMC_EV_F17H_EX_RET_FUSED_BRNCH_INST:
1836 __F17HSETMASK(EX_RET_FUSED_BRNCH_INST);
1837 break;
1838 default:
1839 printf(" %s failed, event not supported\n", __FUNCTION__);
1840 return -1;
1841 }
1842 while ((p = strsep(&ctrspec, ",")) != NULL) {
1843 if (KWPREFIXMATCH(p, F17H_KW_COUNT "=")) {
1844 q = strchr(p, '=');
1845 if (*++q == '\0') /* skip '=' */
1846 return (-1);
1847
1848 count = strtol(q, &e, 0);
1849 if (e == q || *e != '\0')
1850 return (-1);
1851
1852 pmc_config->pm_caps |= PMC_CAP_THRESHOLD;
1853 pmc_config->pm_md.pm_amd.pm_amd_config |=
1854 AMD_PMC_TO_COUNTER(count);
1855
1856 } else if (KWMATCH(p, F17H_KW_EDGE)) {
1857 pmc_config->pm_caps |= PMC_CAP_EDGE;
1858 } else if (KWMATCH(p, F17H_KW_INV)) {
1859 pmc_config->pm_caps |= PMC_CAP_INVERT;
1860 } else if (KWPREFIXMATCH(p, F17H_KW_MASK "=")) {
1861 if ((n = pmc_parse_mask(pmask, p, &evmask)) < 0)
1862 return (-1);
1863 pmc_config->pm_caps |= PMC_CAP_QUALIFIER;
1864 } else if (KWMATCH(p, F17H_KW_OS)) {
1865 pmc_config->pm_caps |= PMC_CAP_SYSTEM;
1866 } else if (KWMATCH(p, F17H_KW_USR)) {
1867 pmc_config->pm_caps |= PMC_CAP_USER;
1868 } else
1869 return (-1);
1870}
1871 if (pmc_config->pm_caps & PMC_CAP_QUALIFIER) {
1872 pmc_config->pm_md.pm_amd.pm_amd_config =
1873 AMD_PMC_TO_UNITMASK(evmask);
1874 }
1875 return 0;
1876}
1162/*
1163 * AMD K8 PMCs.
1164 *
1165 * These are very similar to AMD K7 PMCs, but support more kinds of
1166 * events.
1167 */
1168
1169static struct pmc_event_alias k8_aliases[] = {

--- 1917 unchanged lines hidden (view full) ---

3087 case PMC_CLASS_K7:
3088 ev = k7_event_table;
3089 count = PMC_EVENT_TABLE_SIZE(k7);
3090 break;
3091 case PMC_CLASS_K8:
3092 ev = k8_event_table;
3093 count = PMC_EVENT_TABLE_SIZE(k8);
3094 break;
1877/*
1878 * AMD K8 PMCs.
1879 *
1880 * These are very similar to AMD K7 PMCs, but support more kinds of
1881 * events.
1882 */
1883
1884static struct pmc_event_alias k8_aliases[] = {

--- 1917 unchanged lines hidden (view full) ---

3802 case PMC_CLASS_K7:
3803 ev = k7_event_table;
3804 count = PMC_EVENT_TABLE_SIZE(k7);
3805 break;
3806 case PMC_CLASS_K8:
3807 ev = k8_event_table;
3808 count = PMC_EVENT_TABLE_SIZE(k8);
3809 break;
3810 case PMC_CLASS_F17H:
3811 ev = f17h_event_table;
3812 count = PMC_EVENT_TABLE_SIZE(f17h);
3813 break;
3095 case PMC_CLASS_P4:
3096 ev = p4_event_table;
3097 count = PMC_EVENT_TABLE_SIZE(p4);
3098 break;
3099 case PMC_CLASS_P5:
3100 ev = p5_event_table;
3101 count = PMC_EVENT_TABLE_SIZE(p5);
3102 break;

--- 252 unchanged lines hidden (view full) ---

3355 pmc_class_table[n] = &p6_class_table_descr;
3356 break;
3357#endif
3358#if defined(__amd64__) || defined(__i386__)
3359 case PMC_CPU_AMD_K8:
3360 PMC_MDEP_INIT(k8);
3361 pmc_class_table[n] = &k8_class_table_descr;
3362 break;
3814 case PMC_CLASS_P4:
3815 ev = p4_event_table;
3816 count = PMC_EVENT_TABLE_SIZE(p4);
3817 break;
3818 case PMC_CLASS_P5:
3819 ev = p5_event_table;
3820 count = PMC_EVENT_TABLE_SIZE(p5);
3821 break;

--- 252 unchanged lines hidden (view full) ---

4074 pmc_class_table[n] = &p6_class_table_descr;
4075 break;
4076#endif
4077#if defined(__amd64__) || defined(__i386__)
4078 case PMC_CPU_AMD_K8:
4079 PMC_MDEP_INIT(k8);
4080 pmc_class_table[n] = &k8_class_table_descr;
4081 break;
4082 case PMC_CPU_AMD_F17H:
4083 PMC_MDEP_INIT(f17h);
4084 pmc_class_table[n] = &f17h_class_table_descr;
4085 break;
3363 case PMC_CPU_INTEL_ATOM:
3364 PMC_MDEP_INIT_INTEL_V2(atom);
3365 break;
3366 case PMC_CPU_INTEL_ATOM_SILVERMONT:
3367 PMC_MDEP_INIT_INTEL_V2(atom_silvermont);
3368 break;
3369 case PMC_CPU_INTEL_CORE:
3370 PMC_MDEP_INIT(core);

--- 299 unchanged lines hidden (view full) ---

3670 break;
3671 }
3672 } else if (pe >= PMC_EV_K7_FIRST && pe <= PMC_EV_K7_LAST) {
3673 ev = k7_event_table;
3674 evfence = k7_event_table + PMC_EVENT_TABLE_SIZE(k7);
3675 } else if (pe >= PMC_EV_K8_FIRST && pe <= PMC_EV_K8_LAST) {
3676 ev = k8_event_table;
3677 evfence = k8_event_table + PMC_EVENT_TABLE_SIZE(k8);
4086 case PMC_CPU_INTEL_ATOM:
4087 PMC_MDEP_INIT_INTEL_V2(atom);
4088 break;
4089 case PMC_CPU_INTEL_ATOM_SILVERMONT:
4090 PMC_MDEP_INIT_INTEL_V2(atom_silvermont);
4091 break;
4092 case PMC_CPU_INTEL_CORE:
4093 PMC_MDEP_INIT(core);

--- 299 unchanged lines hidden (view full) ---

4393 break;
4394 }
4395 } else if (pe >= PMC_EV_K7_FIRST && pe <= PMC_EV_K7_LAST) {
4396 ev = k7_event_table;
4397 evfence = k7_event_table + PMC_EVENT_TABLE_SIZE(k7);
4398 } else if (pe >= PMC_EV_K8_FIRST && pe <= PMC_EV_K8_LAST) {
4399 ev = k8_event_table;
4400 evfence = k8_event_table + PMC_EVENT_TABLE_SIZE(k8);
4401 } else if ((int)pe >= PMC_EV_F17H_FIRST &&
4402 (int)pe <= PMC_EV_F17H_LAST) {
4403 ev = f17h_event_table;
4404 evfence = f17h_event_table + PMC_EVENT_TABLE_SIZE(f17h);
3678 } else if (pe >= PMC_EV_P4_FIRST && pe <= PMC_EV_P4_LAST) {
3679 ev = p4_event_table;
3680 evfence = p4_event_table + PMC_EVENT_TABLE_SIZE(p4);
3681 } else if (pe >= PMC_EV_P5_FIRST && pe <= PMC_EV_P5_LAST) {
3682 ev = p5_event_table;
3683 evfence = p5_event_table + PMC_EVENT_TABLE_SIZE(p5);
3684 } else if (pe >= PMC_EV_P6_FIRST && pe <= PMC_EV_P6_LAST) {
3685 ev = p6_event_table;

--- 258 unchanged lines hidden ---
4405 } else if (pe >= PMC_EV_P4_FIRST && pe <= PMC_EV_P4_LAST) {
4406 ev = p4_event_table;
4407 evfence = p4_event_table + PMC_EVENT_TABLE_SIZE(p4);
4408 } else if (pe >= PMC_EV_P5_FIRST && pe <= PMC_EV_P5_LAST) {
4409 ev = p5_event_table;
4410 evfence = p5_event_table + PMC_EVENT_TABLE_SIZE(p5);
4411 } else if (pe >= PMC_EV_P6_FIRST && pe <= PMC_EV_P6_LAST) {
4412 ev = p6_event_table;

--- 258 unchanged lines hidden ---