libpmc.c (281098) | libpmc.c (281713) |
---|---|
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: head/lib/libpmc/libpmc.c 281098 2015-04-05 02:57:02Z adrian $"); | 28__FBSDID("$FreeBSD: head/lib/libpmc/libpmc.c 281713 2015-04-18 21:39:17Z jhibbits $"); |
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> --- 122 unchanged lines hidden (view full) --- 159PMC_CLASSDEP_TABLE(xscale, XSCALE); 160PMC_CLASSDEP_TABLE(armv7, ARMV7); 161PMC_CLASSDEP_TABLE(mips24k, MIPS24K); 162PMC_CLASSDEP_TABLE(mips74k, MIPS74K); 163PMC_CLASSDEP_TABLE(octeon, OCTEON); 164PMC_CLASSDEP_TABLE(ucf, UCF); 165PMC_CLASSDEP_TABLE(ppc7450, PPC7450); 166PMC_CLASSDEP_TABLE(ppc970, PPC970); | 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> --- 122 unchanged lines hidden (view full) --- 159PMC_CLASSDEP_TABLE(xscale, XSCALE); 160PMC_CLASSDEP_TABLE(armv7, ARMV7); 161PMC_CLASSDEP_TABLE(mips24k, MIPS24K); 162PMC_CLASSDEP_TABLE(mips74k, MIPS74K); 163PMC_CLASSDEP_TABLE(octeon, OCTEON); 164PMC_CLASSDEP_TABLE(ucf, UCF); 165PMC_CLASSDEP_TABLE(ppc7450, PPC7450); 166PMC_CLASSDEP_TABLE(ppc970, PPC970); |
167PMC_CLASSDEP_TABLE(e500, E500); |
|
167 168static struct pmc_event_descr soft_event_table[PMC_EV_DYN_COUNT]; 169 170#undef __PMC_EV_ALIAS 171#define __PMC_EV_ALIAS(N,CODE) { N, PMC_EV_##CODE }, 172 173static const struct pmc_event_descr atom_event_table[] = 174{ --- 116 unchanged lines hidden (view full) --- 291PMC_MDEP_TABLE(p4, P4, PMC_CLASS_SOFT, PMC_CLASS_TSC); 292PMC_MDEP_TABLE(p5, P5, PMC_CLASS_SOFT, PMC_CLASS_TSC); 293PMC_MDEP_TABLE(p6, P6, PMC_CLASS_SOFT, PMC_CLASS_TSC); 294PMC_MDEP_TABLE(xscale, XSCALE, PMC_CLASS_SOFT, PMC_CLASS_XSCALE); 295PMC_MDEP_TABLE(armv7, ARMV7, PMC_CLASS_SOFT, PMC_CLASS_ARMV7); 296PMC_MDEP_TABLE(mips24k, MIPS24K, PMC_CLASS_SOFT, PMC_CLASS_MIPS24K); 297PMC_MDEP_TABLE(mips74k, MIPS74K, PMC_CLASS_SOFT, PMC_CLASS_MIPS74K); 298PMC_MDEP_TABLE(octeon, OCTEON, PMC_CLASS_SOFT, PMC_CLASS_OCTEON); | 168 169static struct pmc_event_descr soft_event_table[PMC_EV_DYN_COUNT]; 170 171#undef __PMC_EV_ALIAS 172#define __PMC_EV_ALIAS(N,CODE) { N, PMC_EV_##CODE }, 173 174static const struct pmc_event_descr atom_event_table[] = 175{ --- 116 unchanged lines hidden (view full) --- 292PMC_MDEP_TABLE(p4, P4, PMC_CLASS_SOFT, PMC_CLASS_TSC); 293PMC_MDEP_TABLE(p5, P5, PMC_CLASS_SOFT, PMC_CLASS_TSC); 294PMC_MDEP_TABLE(p6, P6, PMC_CLASS_SOFT, PMC_CLASS_TSC); 295PMC_MDEP_TABLE(xscale, XSCALE, PMC_CLASS_SOFT, PMC_CLASS_XSCALE); 296PMC_MDEP_TABLE(armv7, ARMV7, PMC_CLASS_SOFT, PMC_CLASS_ARMV7); 297PMC_MDEP_TABLE(mips24k, MIPS24K, PMC_CLASS_SOFT, PMC_CLASS_MIPS24K); 298PMC_MDEP_TABLE(mips74k, MIPS74K, PMC_CLASS_SOFT, PMC_CLASS_MIPS74K); 299PMC_MDEP_TABLE(octeon, OCTEON, PMC_CLASS_SOFT, PMC_CLASS_OCTEON); |
299PMC_MDEP_TABLE(ppc7450, PPC7450, PMC_CLASS_SOFT, PMC_CLASS_PPC7450); 300PMC_MDEP_TABLE(ppc970, PPC970, PMC_CLASS_SOFT, PMC_CLASS_PPC970); | 300PMC_MDEP_TABLE(ppc7450, PPC7450, PMC_CLASS_SOFT, PMC_CLASS_PPC7450, PMC_CLASS_TSC); 301PMC_MDEP_TABLE(ppc970, PPC970, PMC_CLASS_SOFT, PMC_CLASS_PPC970, PMC_CLASS_TSC); 302PMC_MDEP_TABLE(e500, E500, PMC_CLASS_SOFT, PMC_CLASS_E500, PMC_CLASS_TSC); |
301PMC_MDEP_TABLE(generic, SOFT, PMC_CLASS_SOFT); 302 303static const struct pmc_event_descr tsc_event_table[] = 304{ 305 __PMC_EV_TSC() 306}; 307 308#undef PMC_CLASS_TABLE_DESC --- 54 unchanged lines hidden (view full) --- 363#if defined(__mips__) 364PMC_CLASS_TABLE_DESC(mips24k, MIPS24K, mips24k, mips); 365PMC_CLASS_TABLE_DESC(mips74k, MIPS74K, mips74k, mips); 366PMC_CLASS_TABLE_DESC(octeon, OCTEON, octeon, mips); 367#endif /* __mips__ */ 368#if defined(__powerpc__) 369PMC_CLASS_TABLE_DESC(ppc7450, PPC7450, ppc7450, powerpc); 370PMC_CLASS_TABLE_DESC(ppc970, PPC970, ppc970, powerpc); | 303PMC_MDEP_TABLE(generic, SOFT, PMC_CLASS_SOFT); 304 305static const struct pmc_event_descr tsc_event_table[] = 306{ 307 __PMC_EV_TSC() 308}; 309 310#undef PMC_CLASS_TABLE_DESC --- 54 unchanged lines hidden (view full) --- 365#if defined(__mips__) 366PMC_CLASS_TABLE_DESC(mips24k, MIPS24K, mips24k, mips); 367PMC_CLASS_TABLE_DESC(mips74k, MIPS74K, mips74k, mips); 368PMC_CLASS_TABLE_DESC(octeon, OCTEON, octeon, mips); 369#endif /* __mips__ */ 370#if defined(__powerpc__) 371PMC_CLASS_TABLE_DESC(ppc7450, PPC7450, ppc7450, powerpc); 372PMC_CLASS_TABLE_DESC(ppc970, PPC970, ppc970, powerpc); |
373PMC_CLASS_TABLE_DESC(e500, E500, e500, powerpc); |
|
371#endif 372 373static struct pmc_class_descr soft_class_table_descr = 374{ 375 .pm_evc_name = "SOFT-", 376 .pm_evc_name_size = sizeof("SOFT-") - 1, 377 .pm_evc_class = PMC_CLASS_SOFT, 378 .pm_evc_event_table = NULL, --- 2110 unchanged lines hidden (view full) --- 2489}; 2490 2491static struct pmc_event_alias ppc970_aliases[] = { 2492 EV_ALIAS("instructions", "INSTR_COMPLETED"), 2493 EV_ALIAS("cycles", "CYCLES"), 2494 EV_ALIAS(NULL, NULL) 2495}; 2496 | 374#endif 375 376static struct pmc_class_descr soft_class_table_descr = 377{ 378 .pm_evc_name = "SOFT-", 379 .pm_evc_name_size = sizeof("SOFT-") - 1, 380 .pm_evc_class = PMC_CLASS_SOFT, 381 .pm_evc_event_table = NULL, --- 2110 unchanged lines hidden (view full) --- 2492}; 2493 2494static struct pmc_event_alias ppc970_aliases[] = { 2495 EV_ALIAS("instructions", "INSTR_COMPLETED"), 2496 EV_ALIAS("cycles", "CYCLES"), 2497 EV_ALIAS(NULL, NULL) 2498}; 2499 |
2500static struct pmc_event_alias e500_aliases[] = { 2501 EV_ALIAS("instructions", "INSTR_COMPLETED"), 2502 EV_ALIAS("cycles", "CYCLES"), 2503 EV_ALIAS(NULL, NULL) 2504}; 2505 |
|
2497#define POWERPC_KW_OS "os" 2498#define POWERPC_KW_USR "usr" 2499#define POWERPC_KW_ANYTHREAD "anythread" 2500 2501static int 2502powerpc_allocate_pmc(enum pmc_event pe, char *ctrspec __unused, 2503 struct pmc_op_pmcallocate *pmc_config __unused) 2504{ --- 439 unchanged lines hidden (view full) --- 2944 case PMC_CLASS_PPC7450: 2945 ev = ppc7450_event_table; 2946 count = PMC_EVENT_TABLE_SIZE(ppc7450); 2947 break; 2948 case PMC_CLASS_PPC970: 2949 ev = ppc970_event_table; 2950 count = PMC_EVENT_TABLE_SIZE(ppc970); 2951 break; | 2506#define POWERPC_KW_OS "os" 2507#define POWERPC_KW_USR "usr" 2508#define POWERPC_KW_ANYTHREAD "anythread" 2509 2510static int 2511powerpc_allocate_pmc(enum pmc_event pe, char *ctrspec __unused, 2512 struct pmc_op_pmcallocate *pmc_config __unused) 2513{ --- 439 unchanged lines hidden (view full) --- 2953 case PMC_CLASS_PPC7450: 2954 ev = ppc7450_event_table; 2955 count = PMC_EVENT_TABLE_SIZE(ppc7450); 2956 break; 2957 case PMC_CLASS_PPC970: 2958 ev = ppc970_event_table; 2959 count = PMC_EVENT_TABLE_SIZE(ppc970); 2960 break; |
2961 case PMC_CLASS_E500: 2962 ev = e500_event_table; 2963 count = PMC_EVENT_TABLE_SIZE(e500); 2964 break; |
|
2952 case PMC_CLASS_SOFT: 2953 ev = soft_event_table; 2954 count = soft_event_info.pm_nevent; 2955 break; 2956 default: 2957 errno = EINVAL; 2958 return (-1); 2959 } --- 280 unchanged lines hidden (view full) --- 3240 case PMC_CPU_PPC_7450: 3241 PMC_MDEP_INIT(ppc7450); 3242 pmc_class_table[n] = &ppc7450_class_table_descr; 3243 break; 3244 case PMC_CPU_PPC_970: 3245 PMC_MDEP_INIT(ppc970); 3246 pmc_class_table[n] = &ppc970_class_table_descr; 3247 break; | 2965 case PMC_CLASS_SOFT: 2966 ev = soft_event_table; 2967 count = soft_event_info.pm_nevent; 2968 break; 2969 default: 2970 errno = EINVAL; 2971 return (-1); 2972 } --- 280 unchanged lines hidden (view full) --- 3253 case PMC_CPU_PPC_7450: 3254 PMC_MDEP_INIT(ppc7450); 3255 pmc_class_table[n] = &ppc7450_class_table_descr; 3256 break; 3257 case PMC_CPU_PPC_970: 3258 PMC_MDEP_INIT(ppc970); 3259 pmc_class_table[n] = &ppc970_class_table_descr; 3260 break; |
3261 case PMC_CPU_PPC_E500: 3262 PMC_MDEP_INIT(e500); 3263 pmc_class_table[n] = &e500_class_table_descr; 3264 break; |
|
3248#endif 3249 default: 3250 /* 3251 * Some kind of CPU this version of the library knows nothing 3252 * about. This shouldn't happen since the abi version check 3253 * should have caught this. 3254 */ 3255 errno = ENXIO; --- 183 unchanged lines hidden (view full) --- 3439 ev = octeon_event_table; 3440 evfence = octeon_event_table + PMC_EVENT_TABLE_SIZE(octeon); 3441 } else if (pe >= PMC_EV_PPC7450_FIRST && pe <= PMC_EV_PPC7450_LAST) { 3442 ev = ppc7450_event_table; 3443 evfence = ppc7450_event_table + PMC_EVENT_TABLE_SIZE(ppc7450); 3444 } else if (pe >= PMC_EV_PPC970_FIRST && pe <= PMC_EV_PPC970_LAST) { 3445 ev = ppc970_event_table; 3446 evfence = ppc970_event_table + PMC_EVENT_TABLE_SIZE(ppc970); | 3265#endif 3266 default: 3267 /* 3268 * Some kind of CPU this version of the library knows nothing 3269 * about. This shouldn't happen since the abi version check 3270 * should have caught this. 3271 */ 3272 errno = ENXIO; --- 183 unchanged lines hidden (view full) --- 3456 ev = octeon_event_table; 3457 evfence = octeon_event_table + PMC_EVENT_TABLE_SIZE(octeon); 3458 } else if (pe >= PMC_EV_PPC7450_FIRST && pe <= PMC_EV_PPC7450_LAST) { 3459 ev = ppc7450_event_table; 3460 evfence = ppc7450_event_table + PMC_EVENT_TABLE_SIZE(ppc7450); 3461 } else if (pe >= PMC_EV_PPC970_FIRST && pe <= PMC_EV_PPC970_LAST) { 3462 ev = ppc970_event_table; 3463 evfence = ppc970_event_table + PMC_EVENT_TABLE_SIZE(ppc970); |
3464 } else if (pe >= PMC_EV_E500_FIRST && pe <= PMC_EV_E500_LAST) { 3465 ev = e500_event_table; 3466 evfence = e500_event_table + PMC_EVENT_TABLE_SIZE(e500); |
|
3447 } else if (pe == PMC_EV_TSC_TSC) { 3448 ev = tsc_event_table; 3449 evfence = tsc_event_table + PMC_EVENT_TABLE_SIZE(tsc); 3450 } else if ((int)pe >= PMC_EV_SOFT_FIRST && (int)pe <= PMC_EV_SOFT_LAST) { 3451 ev = soft_event_table; 3452 evfence = soft_event_table + soft_event_info.pm_nevent; 3453 } 3454 --- 202 unchanged lines hidden --- | 3467 } else if (pe == PMC_EV_TSC_TSC) { 3468 ev = tsc_event_table; 3469 evfence = tsc_event_table + PMC_EVENT_TABLE_SIZE(tsc); 3470 } else if ((int)pe >= PMC_EV_SOFT_FIRST && (int)pe <= PMC_EV_SOFT_LAST) { 3471 ev = soft_event_table; 3472 evfence = soft_event_table + soft_event_info.pm_nevent; 3473 } 3474 --- 202 unchanged lines hidden --- |