libpmc.c (283120) | libpmc.c (284218) |
---|---|
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 283120 2015-05-19 18:58:18Z jhb $"); | 28__FBSDID("$FreeBSD: head/lib/libpmc/libpmc.c 284218 2015-06-10 12:42:30Z br $"); |
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> --- 226 unchanged lines hidden (view full) --- 263 __PMC_EV_ALIAS_SANDYBRIDGEUC() 264}; 265 266static const struct pmc_event_descr westmereuc_event_table[] = 267{ 268 __PMC_EV_ALIAS_WESTMEREUC() 269}; 270 | 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> --- 226 unchanged lines hidden (view full) --- 263 __PMC_EV_ALIAS_SANDYBRIDGEUC() 264}; 265 266static const struct pmc_event_descr westmereuc_event_table[] = 267{ 268 __PMC_EV_ALIAS_WESTMEREUC() 269}; 270 |
271static const struct pmc_event_descr cortex_a8_event_table[] = 272{ 273 __PMC_EV_ALIAS_ARMV7_CORTEX_A8() 274}; 275 276static const struct pmc_event_descr cortex_a9_event_table[] = 277{ 278 __PMC_EV_ALIAS_ARMV7_CORTEX_A9() 279}; 280 |
|
271static const struct pmc_event_descr cortex_a53_event_table[] = 272{ 273 __PMC_EV_ALIAS_ARMV8_CORTEX_A53() 274}; 275 276static const struct pmc_event_descr cortex_a57_event_table[] = 277{ 278 __PMC_EV_ALIAS_ARMV8_CORTEX_A57() --- 24 unchanged lines hidden (view full) --- 303PMC_MDEP_TABLE(westmere, IAP, PMC_CLASS_SOFT, PMC_CLASS_IAF, PMC_CLASS_TSC, PMC_CLASS_UCF, PMC_CLASS_UCP); 304PMC_MDEP_TABLE(westmere_ex, IAP, PMC_CLASS_SOFT, PMC_CLASS_IAF, PMC_CLASS_TSC); 305PMC_MDEP_TABLE(k7, K7, PMC_CLASS_SOFT, PMC_CLASS_TSC); 306PMC_MDEP_TABLE(k8, K8, PMC_CLASS_SOFT, PMC_CLASS_TSC); 307PMC_MDEP_TABLE(p4, P4, PMC_CLASS_SOFT, PMC_CLASS_TSC); 308PMC_MDEP_TABLE(p5, P5, PMC_CLASS_SOFT, PMC_CLASS_TSC); 309PMC_MDEP_TABLE(p6, P6, PMC_CLASS_SOFT, PMC_CLASS_TSC); 310PMC_MDEP_TABLE(xscale, XSCALE, PMC_CLASS_SOFT, PMC_CLASS_XSCALE); | 281static const struct pmc_event_descr cortex_a53_event_table[] = 282{ 283 __PMC_EV_ALIAS_ARMV8_CORTEX_A53() 284}; 285 286static const struct pmc_event_descr cortex_a57_event_table[] = 287{ 288 __PMC_EV_ALIAS_ARMV8_CORTEX_A57() --- 24 unchanged lines hidden (view full) --- 313PMC_MDEP_TABLE(westmere, IAP, PMC_CLASS_SOFT, PMC_CLASS_IAF, PMC_CLASS_TSC, PMC_CLASS_UCF, PMC_CLASS_UCP); 314PMC_MDEP_TABLE(westmere_ex, IAP, PMC_CLASS_SOFT, PMC_CLASS_IAF, PMC_CLASS_TSC); 315PMC_MDEP_TABLE(k7, K7, PMC_CLASS_SOFT, PMC_CLASS_TSC); 316PMC_MDEP_TABLE(k8, K8, PMC_CLASS_SOFT, PMC_CLASS_TSC); 317PMC_MDEP_TABLE(p4, P4, PMC_CLASS_SOFT, PMC_CLASS_TSC); 318PMC_MDEP_TABLE(p5, P5, PMC_CLASS_SOFT, PMC_CLASS_TSC); 319PMC_MDEP_TABLE(p6, P6, PMC_CLASS_SOFT, PMC_CLASS_TSC); 320PMC_MDEP_TABLE(xscale, XSCALE, PMC_CLASS_SOFT, PMC_CLASS_XSCALE); |
311PMC_MDEP_TABLE(armv7, ARMV7, PMC_CLASS_SOFT, PMC_CLASS_ARMV7); | 321PMC_MDEP_TABLE(cortex_a8, ARMV7, PMC_CLASS_SOFT, PMC_CLASS_ARMV7); 322PMC_MDEP_TABLE(cortex_a9, ARMV7, PMC_CLASS_SOFT, PMC_CLASS_ARMV7); |
312PMC_MDEP_TABLE(cortex_a53, ARMV8, PMC_CLASS_SOFT, PMC_CLASS_ARMV8); 313PMC_MDEP_TABLE(cortex_a57, ARMV8, PMC_CLASS_SOFT, PMC_CLASS_ARMV8); 314PMC_MDEP_TABLE(mips24k, MIPS24K, PMC_CLASS_SOFT, PMC_CLASS_MIPS24K); 315PMC_MDEP_TABLE(mips74k, MIPS74K, PMC_CLASS_SOFT, PMC_CLASS_MIPS74K); 316PMC_MDEP_TABLE(octeon, OCTEON, PMC_CLASS_SOFT, PMC_CLASS_OCTEON); 317PMC_MDEP_TABLE(ppc7450, PPC7450, PMC_CLASS_SOFT, PMC_CLASS_PPC7450, PMC_CLASS_TSC); 318PMC_MDEP_TABLE(ppc970, PPC970, PMC_CLASS_SOFT, PMC_CLASS_PPC970, PMC_CLASS_TSC); 319PMC_MDEP_TABLE(e500, E500, PMC_CLASS_SOFT, PMC_CLASS_E500, PMC_CLASS_TSC); --- 52 unchanged lines hidden (view full) --- 372#endif 373#if defined(__i386__) || defined(__amd64__) 374PMC_CLASS_TABLE_DESC(tsc, TSC, tsc, tsc); 375#endif 376#if defined(__arm__) 377#if defined(__XSCALE__) 378PMC_CLASS_TABLE_DESC(xscale, XSCALE, xscale, xscale); 379#endif | 323PMC_MDEP_TABLE(cortex_a53, ARMV8, PMC_CLASS_SOFT, PMC_CLASS_ARMV8); 324PMC_MDEP_TABLE(cortex_a57, ARMV8, PMC_CLASS_SOFT, PMC_CLASS_ARMV8); 325PMC_MDEP_TABLE(mips24k, MIPS24K, PMC_CLASS_SOFT, PMC_CLASS_MIPS24K); 326PMC_MDEP_TABLE(mips74k, MIPS74K, PMC_CLASS_SOFT, PMC_CLASS_MIPS74K); 327PMC_MDEP_TABLE(octeon, OCTEON, PMC_CLASS_SOFT, PMC_CLASS_OCTEON); 328PMC_MDEP_TABLE(ppc7450, PPC7450, PMC_CLASS_SOFT, PMC_CLASS_PPC7450, PMC_CLASS_TSC); 329PMC_MDEP_TABLE(ppc970, PPC970, PMC_CLASS_SOFT, PMC_CLASS_PPC970, PMC_CLASS_TSC); 330PMC_MDEP_TABLE(e500, E500, PMC_CLASS_SOFT, PMC_CLASS_E500, PMC_CLASS_TSC); --- 52 unchanged lines hidden (view full) --- 383#endif 384#if defined(__i386__) || defined(__amd64__) 385PMC_CLASS_TABLE_DESC(tsc, TSC, tsc, tsc); 386#endif 387#if defined(__arm__) 388#if defined(__XSCALE__) 389PMC_CLASS_TABLE_DESC(xscale, XSCALE, xscale, xscale); 390#endif |
380PMC_CLASS_TABLE_DESC(armv7, ARMV7, armv7, armv7); | 391PMC_CLASS_TABLE_DESC(cortex_a8, ARMV7, cortex_a9, armv7); 392PMC_CLASS_TABLE_DESC(cortex_a9, ARMV7, cortex_a9, armv7); |
381#endif 382#if defined(__aarch64__) 383PMC_CLASS_TABLE_DESC(cortex_a53, ARMV8, cortex_a53, arm64); 384PMC_CLASS_TABLE_DESC(cortex_a57, ARMV8, cortex_a57, arm64); 385#endif 386#if defined(__mips__) 387PMC_CLASS_TABLE_DESC(mips24k, MIPS24K, mips24k, mips); 388PMC_CLASS_TABLE_DESC(mips74k, MIPS74K, mips74k, mips); --- 2042 unchanged lines hidden (view full) --- 2431 default: 2432 break; 2433 } 2434 2435 return (0); 2436} 2437#endif 2438 | 393#endif 394#if defined(__aarch64__) 395PMC_CLASS_TABLE_DESC(cortex_a53, ARMV8, cortex_a53, arm64); 396PMC_CLASS_TABLE_DESC(cortex_a57, ARMV8, cortex_a57, arm64); 397#endif 398#if defined(__mips__) 399PMC_CLASS_TABLE_DESC(mips24k, MIPS24K, mips24k, mips); 400PMC_CLASS_TABLE_DESC(mips74k, MIPS74K, mips74k, mips); --- 2042 unchanged lines hidden (view full) --- 2443 default: 2444 break; 2445 } 2446 2447 return (0); 2448} 2449#endif 2450 |
2439static struct pmc_event_alias armv7_aliases[] = { | 2451static struct pmc_event_alias cortex_a8_aliases[] = { |
2440 EV_ALIAS("dc-misses", "L1_DCACHE_REFILL"), 2441 EV_ALIAS("ic-misses", "L1_ICACHE_REFILL"), 2442 EV_ALIAS("instructions", "INSTR_EXECUTED"), 2443 EV_ALIAS(NULL, NULL) 2444}; | 2452 EV_ALIAS("dc-misses", "L1_DCACHE_REFILL"), 2453 EV_ALIAS("ic-misses", "L1_ICACHE_REFILL"), 2454 EV_ALIAS("instructions", "INSTR_EXECUTED"), 2455 EV_ALIAS(NULL, NULL) 2456}; |
2457 2458static struct pmc_event_alias cortex_a9_aliases[] = { 2459 EV_ALIAS("dc-misses", "L1_DCACHE_REFILL"), 2460 EV_ALIAS("ic-misses", "L1_ICACHE_REFILL"), 2461 EV_ALIAS("instructions", "INSTR_EXECUTED"), 2462 EV_ALIAS(NULL, NULL) 2463}; 2464 |
|
2445static int 2446armv7_allocate_pmc(enum pmc_event pe, char *ctrspec __unused, 2447 struct pmc_op_pmcallocate *pmc_config __unused) 2448{ 2449 switch (pe) { 2450 default: 2451 break; 2452 } --- 523 unchanged lines hidden (view full) --- 2976 ev = p6_event_table; 2977 count = PMC_EVENT_TABLE_SIZE(p6); 2978 break; 2979 case PMC_CLASS_XSCALE: 2980 ev = xscale_event_table; 2981 count = PMC_EVENT_TABLE_SIZE(xscale); 2982 break; 2983 case PMC_CLASS_ARMV7: | 2465static int 2466armv7_allocate_pmc(enum pmc_event pe, char *ctrspec __unused, 2467 struct pmc_op_pmcallocate *pmc_config __unused) 2468{ 2469 switch (pe) { 2470 default: 2471 break; 2472 } --- 523 unchanged lines hidden (view full) --- 2996 ev = p6_event_table; 2997 count = PMC_EVENT_TABLE_SIZE(p6); 2998 break; 2999 case PMC_CLASS_XSCALE: 3000 ev = xscale_event_table; 3001 count = PMC_EVENT_TABLE_SIZE(xscale); 3002 break; 3003 case PMC_CLASS_ARMV7: |
2984 ev = armv7_event_table; 2985 count = PMC_EVENT_TABLE_SIZE(armv7); | 3004 switch (cpu_info.pm_cputype) { 3005 default: 3006 case PMC_CPU_ARMV7_CORTEX_A8: 3007 ev = cortex_a8_event_table; 3008 count = PMC_EVENT_TABLE_SIZE(cortex_a8); 3009 break; 3010 case PMC_CPU_ARMV7_CORTEX_A9: 3011 ev = cortex_a9_event_table; 3012 count = PMC_EVENT_TABLE_SIZE(cortex_a9); 3013 break; 3014 } |
2986 break; 2987 case PMC_CLASS_ARMV8: 2988 switch (cpu_info.pm_cputype) { 2989 default: 2990 case PMC_CPU_ARMV8_CORTEX_A53: 2991 ev = cortex_a53_event_table; 2992 count = PMC_EVENT_TABLE_SIZE(cortex_a53); 2993 break; --- 290 unchanged lines hidden (view full) --- 3284 break; 3285#if defined(__arm__) 3286#if defined(__XSCALE__) 3287 case PMC_CPU_INTEL_XSCALE: 3288 PMC_MDEP_INIT(xscale); 3289 pmc_class_table[n] = &xscale_class_table_descr; 3290 break; 3291#endif | 3015 break; 3016 case PMC_CLASS_ARMV8: 3017 switch (cpu_info.pm_cputype) { 3018 default: 3019 case PMC_CPU_ARMV8_CORTEX_A53: 3020 ev = cortex_a53_event_table; 3021 count = PMC_EVENT_TABLE_SIZE(cortex_a53); 3022 break; --- 290 unchanged lines hidden (view full) --- 3313 break; 3314#if defined(__arm__) 3315#if defined(__XSCALE__) 3316 case PMC_CPU_INTEL_XSCALE: 3317 PMC_MDEP_INIT(xscale); 3318 pmc_class_table[n] = &xscale_class_table_descr; 3319 break; 3320#endif |
3292 case PMC_CPU_ARMV7: 3293 PMC_MDEP_INIT(armv7); 3294 pmc_class_table[n] = &armv7_class_table_descr; | 3321 case PMC_CPU_ARMV7_CORTEX_A8: 3322 PMC_MDEP_INIT(cortex_a8); 3323 pmc_class_table[n] = &cortex_a8_class_table_descr; |
3295 break; | 3324 break; |
3325 case PMC_CPU_ARMV7_CORTEX_A9: 3326 PMC_MDEP_INIT(cortex_a9); 3327 pmc_class_table[n] = &cortex_a9_class_table_descr; 3328 break; |
|
3296#endif 3297#if defined(__aarch64__) 3298 case PMC_CPU_ARMV8_CORTEX_A53: 3299 PMC_MDEP_INIT(cortex_a53); 3300 pmc_class_table[n] = &cortex_a53_class_table_descr; 3301 break; 3302 case PMC_CPU_ARMV8_CORTEX_A57: 3303 PMC_MDEP_INIT(cortex_a57); --- 206 unchanged lines hidden (view full) --- 3510 evfence = p5_event_table + PMC_EVENT_TABLE_SIZE(p5); 3511 } else if (pe >= PMC_EV_P6_FIRST && pe <= PMC_EV_P6_LAST) { 3512 ev = p6_event_table; 3513 evfence = p6_event_table + PMC_EVENT_TABLE_SIZE(p6); 3514 } else if (pe >= PMC_EV_XSCALE_FIRST && pe <= PMC_EV_XSCALE_LAST) { 3515 ev = xscale_event_table; 3516 evfence = xscale_event_table + PMC_EVENT_TABLE_SIZE(xscale); 3517 } else if (pe >= PMC_EV_ARMV7_FIRST && pe <= PMC_EV_ARMV7_LAST) { | 3329#endif 3330#if defined(__aarch64__) 3331 case PMC_CPU_ARMV8_CORTEX_A53: 3332 PMC_MDEP_INIT(cortex_a53); 3333 pmc_class_table[n] = &cortex_a53_class_table_descr; 3334 break; 3335 case PMC_CPU_ARMV8_CORTEX_A57: 3336 PMC_MDEP_INIT(cortex_a57); --- 206 unchanged lines hidden (view full) --- 3543 evfence = p5_event_table + PMC_EVENT_TABLE_SIZE(p5); 3544 } else if (pe >= PMC_EV_P6_FIRST && pe <= PMC_EV_P6_LAST) { 3545 ev = p6_event_table; 3546 evfence = p6_event_table + PMC_EVENT_TABLE_SIZE(p6); 3547 } else if (pe >= PMC_EV_XSCALE_FIRST && pe <= PMC_EV_XSCALE_LAST) { 3548 ev = xscale_event_table; 3549 evfence = xscale_event_table + PMC_EVENT_TABLE_SIZE(xscale); 3550 } else if (pe >= PMC_EV_ARMV7_FIRST && pe <= PMC_EV_ARMV7_LAST) { |
3518 ev = armv7_event_table; 3519 evfence = armv7_event_table + PMC_EVENT_TABLE_SIZE(armv7); | 3551 switch (cpu) { 3552 case PMC_CPU_ARMV7_CORTEX_A8: 3553 ev = cortex_a8_event_table; 3554 evfence = cortex_a8_event_table + PMC_EVENT_TABLE_SIZE(cortex_a8); 3555 break; 3556 case PMC_CPU_ARMV7_CORTEX_A9: 3557 ev = cortex_a9_event_table; 3558 evfence = cortex_a9_event_table + PMC_EVENT_TABLE_SIZE(cortex_a9); 3559 break; 3560 default: /* Unknown CPU type. */ 3561 break; 3562 } |
3520 } else if (pe >= PMC_EV_ARMV8_FIRST && pe <= PMC_EV_ARMV8_LAST) { 3521 switch (cpu) { 3522 case PMC_CPU_ARMV8_CORTEX_A53: 3523 ev = cortex_a53_event_table; 3524 evfence = cortex_a53_event_table + PMC_EVENT_TABLE_SIZE(cortex_a53); 3525 break; 3526 case PMC_CPU_ARMV8_CORTEX_A57: 3527 ev = cortex_a57_event_table; --- 233 unchanged lines hidden --- | 3563 } else if (pe >= PMC_EV_ARMV8_FIRST && pe <= PMC_EV_ARMV8_LAST) { 3564 switch (cpu) { 3565 case PMC_CPU_ARMV8_CORTEX_A53: 3566 ev = cortex_a53_event_table; 3567 evfence = cortex_a53_event_table + PMC_EVENT_TABLE_SIZE(cortex_a53); 3568 break; 3569 case PMC_CPU_ARMV8_CORTEX_A57: 3570 ev = cortex_a57_event_table; --- 233 unchanged lines hidden --- |