110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project/** 210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @file op_cpu_type.c 310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * CPU type determination 410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * 510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @remark Copyright 2002 OProfile authors 610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @remark Read the file COPYING 710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * 810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @author John Levon 910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @author Philippe Elie 1010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project */ 1110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 1210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#include <stdio.h> 1310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#include <stdlib.h> 1410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#include <string.h> 1510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 1610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#include "op_cpu_type.h" 175a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng#include "op_hw_specific.h" 1810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 1910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectstruct cpu_descr { 2010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project char const * pretty; 2110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project char const * name; 2210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project op_cpu cpu; 2310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project unsigned int nr_counters; 2410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project}; 2510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 2610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectstatic struct cpu_descr const cpu_descrs[MAX_CPU_TYPE] = { 2710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project { "Pentium Pro", "i386/ppro", CPU_PPRO, 2 }, 2810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project { "PII", "i386/pii", CPU_PII, 2 }, 2910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project { "PIII", "i386/piii", CPU_PIII, 2 }, 3010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project { "Athlon", "i386/athlon", CPU_ATHLON, 4 }, 3110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project { "CPU with timer interrupt", "timer", CPU_TIMER_INT, 1 }, 3210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project { "CPU with RTC device", "rtc", CPU_RTC, 1 }, 3310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project { "P4 / Xeon", "i386/p4", CPU_P4, 8 }, 3410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project { "IA64", "ia64/ia64", CPU_IA64, 4 }, 3510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project { "Itanium", "ia64/itanium", CPU_IA64_1, 4 }, 3610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project { "Itanium 2", "ia64/itanium2", CPU_IA64_2, 4 }, 3710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project { "AMD64 processors", "x86-64/hammer", CPU_HAMMER, 4 }, 3810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project { "P4 / Xeon with 2 hyper-threads", "i386/p4-ht", CPU_P4_HT2, 4 }, 3910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project { "Alpha EV4", "alpha/ev4", CPU_AXP_EV4, 2 }, 4010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project { "Alpha EV5", "alpha/ev5", CPU_AXP_EV5, 3 }, 4110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project { "Alpha PCA56", "alpha/pca56", CPU_AXP_PCA56, 3 }, 4210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project { "Alpha EV6", "alpha/ev6", CPU_AXP_EV6, 2 }, 4310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project { "Alpha EV67", "alpha/ev67", CPU_AXP_EV67, 20 }, 4410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project { "Pentium M (P6 core)", "i386/p6_mobile", CPU_P6_MOBILE, 2 }, 4510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project { "ARM/XScale PMU1", "arm/xscale1", CPU_ARM_XSCALE1, 3 }, 4610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project { "ARM/XScale PMU2", "arm/xscale2", CPU_ARM_XSCALE2, 5 }, 4710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project { "ppc64 POWER4", "ppc64/power4", CPU_PPC64_POWER4, 8 }, 4810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project { "ppc64 POWER5", "ppc64/power5", CPU_PPC64_POWER5, 6 }, 4910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project { "ppc64 POWER5+", "ppc64/power5+", CPU_PPC64_POWER5p, 6 }, 5010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project { "ppc64 970", "ppc64/970", CPU_PPC64_970, 8 }, 5110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project { "MIPS 20K", "mips/20K", CPU_MIPS_20K, 1}, 5210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project { "MIPS 24K", "mips/24K", CPU_MIPS_24K, 2}, 5310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project { "MIPS 25K", "mips/25K", CPU_MIPS_25K, 2}, 545bbbe460405564a1aed8a67a13c43e9356ffc656Ben Cheng { "MIPS 34K", "mips/34K", CPU_MIPS_34K, 2}, 5510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project { "MIPS 5K", "mips/5K", CPU_MIPS_5K, 2}, 5610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project { "MIPS R10000", "mips/r10000", CPU_MIPS_R10000, 2 }, 5710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project { "MIPS R12000", "mips/r12000", CPU_MIPS_R12000, 4 }, 5810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project { "QED RM7000", "mips/rm7000", CPU_MIPS_RM7000, 1 }, 5910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project { "PMC-Sierra RM9000", "mips/rm9000", CPU_MIPS_RM9000, 2 }, 6010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project { "Sibyte SB1", "mips/sb1", CPU_MIPS_SB1, 4 }, 6110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project { "NEC VR5432", "mips/vr5432", CPU_MIPS_VR5432, 2 }, 6210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project { "NEC VR5500", "mips/vr5500", CPU_MIPS_VR5500, 2 }, 6310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project { "e500", "ppc/e500", CPU_PPC_E500, 4 }, 6410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project { "e500v2", "ppc/e500v2", CPU_PPC_E500_2, 4 }, 6510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project { "Core Solo / Duo", "i386/core", CPU_CORE, 2 }, 6610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project { "PowerPC G4", "ppc/7450", CPU_PPC_7450, 6 }, 6710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project { "Core 2", "i386/core_2", CPU_CORE_2, 2 }, 6810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project { "ppc64 POWER6", "ppc64/power6", CPU_PPC64_POWER6, 4 }, 6910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project { "ppc64 970MP", "ppc64/970MP", CPU_PPC64_970MP, 8 }, 7010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project { "ppc64 Cell Broadband Engine", "ppc64/cell-be", CPU_PPC64_CELL, 8 }, 7110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project { "AMD64 family10", "x86-64/family10", CPU_FAMILY10, 4 }, 7210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project { "ppc64 PA6T", "ppc64/pa6t", CPU_PPC64_PA6T, 6 }, 735bbbe460405564a1aed8a67a13c43e9356ffc656Ben Cheng { "ARM 11MPCore", "arm/mpcore", CPU_ARM_MPCORE, 2 }, 7410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project { "ARM V6 PMU", "arm/armv6", CPU_ARM_V6, 3 }, 7510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project { "ppc64 POWER5++", "ppc64/power5++", CPU_PPC64_POWER5pp, 6 }, 7610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project { "e300", "ppc/e300", CPU_PPC_E300, 4 }, 7710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project { "AVR32", "avr32", CPU_AVR32, 3 }, 785bbbe460405564a1aed8a67a13c43e9356ffc656Ben Cheng { "ARM Cortex-A8", "arm/armv7", CPU_ARM_V7, 5 }, 795a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng { "Intel Architectural Perfmon", "i386/arch_perfmon", CPU_ARCH_PERFMON, 0}, 805a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng { "AMD64 family11h", "x86-64/family11h", CPU_FAMILY11H, 4 }, 815a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng { "ppc64 POWER7", "ppc64/power7", CPU_PPC64_POWER7, 6 }, 825a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng { "ppc64 compat version 1", "ppc64/ibm-compat-v1", CPU_PPC64_IBM_COMPAT_V1, 4 }, 835a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng { "Intel Core/i7", "i386/core_i7", CPU_CORE_I7, 4 }, 845a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng { "Intel Atom", "i386/atom", CPU_ATOM, 2 }, 855bbbe460405564a1aed8a67a13c43e9356ffc656Ben Cheng { "Loongson2", "mips/loongson2", CPU_MIPS_LOONGSON2, 2 }, 865bbbe460405564a1aed8a67a13c43e9356ffc656Ben Cheng { "Intel Nehalem microarchitecture", "i386/nehalem", CPU_NEHALEM, 4 }, 875bbbe460405564a1aed8a67a13c43e9356ffc656Ben Cheng { "ARM Cortex-A9", "arm/armv7-ca9", CPU_ARM_V7_CA9, 7 }, 885bbbe460405564a1aed8a67a13c43e9356ffc656Ben Cheng { "MIPS 74K", "mips/74K", CPU_MIPS_74K, 4}, 895bbbe460405564a1aed8a67a13c43e9356ffc656Ben Cheng { "MIPS 1004K", "mips/1004K", CPU_MIPS_1004K, 2}, 907a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown { "AMD64 family12h", "x86-64/family12h", CPU_FAMILY12H, 4 }, 917a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown { "AMD64 family14h", "x86-64/family14h", CPU_FAMILY14H, 4 }, 927a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown { "AMD64 family15h", "x86-64/family15h", CPU_FAMILY15H, 6 }, 937a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown { "Intel Westmere microarchitecture", "i386/westmere", CPU_WESTMERE, 4 }, 9410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project}; 9510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 9610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectstatic size_t const nr_cpu_descrs = sizeof(cpu_descrs) / sizeof(struct cpu_descr); 9710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 987a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brownint op_cpu_variations(op_cpu cpu_type) 997a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown{ 1007a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown switch (cpu_type) { 1017a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown case CPU_ARCH_PERFMON: 1027a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown return 1; 1037a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown default: 1047a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown return 0; 1057a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 1067a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown} 1077a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 1087a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 1097a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brownop_cpu op_cpu_base_type(op_cpu cpu_type) 1107a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown{ 1117a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown /* All the processors that support CPU_ARCH_PERFMON */ 1127a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown switch (cpu_type) { 1137a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown case CPU_CORE_2: 1147a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown case CPU_CORE_I7: 1157a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown case CPU_ATOM: 1167a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown case CPU_NEHALEM: 1177a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown case CPU_WESTMERE: 1187a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown return CPU_ARCH_PERFMON; 1197a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown default: 1207a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown /* assume processor in a class by itself */ 1217a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown return cpu_type; 1227a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 1237a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown} 1247a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 12510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectop_cpu op_get_cpu_type(void) 12610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project{ 12710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project int cpu_type = CPU_NO_GOOD; 12810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project char str[100]; 12910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project FILE * fp; 13010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 13110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project fp = fopen("/proc/sys/dev/oprofile/cpu_type", "r"); 13210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project if (!fp) { 13310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project /* Try 2.6's oprofilefs one instead. */ 13410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project fp = fopen("/dev/oprofile/cpu_type", "r"); 13510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project if (!fp) { 13610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project fprintf(stderr, "Unable to open cpu_type file for reading\n"); 13710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project fprintf(stderr, "Make sure you have done opcontrol --init\n"); 13810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project return cpu_type; 13910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project } 14010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project } 14110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 14210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project if (!fgets(str, 99, fp)) { 14310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project fprintf(stderr, "Could not read cpu type.\n"); 14410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project return CPU_NO_GOOD; 14510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project } 14610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 14710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project cpu_type = op_get_cpu_number(str); 14810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 1497a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (op_cpu_variations(cpu_type)) 1507a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown cpu_type = op_cpu_specific_type(cpu_type); 1517a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 15210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project fclose(fp); 15310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 15410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project return cpu_type; 15510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project} 15610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 15710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 15810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectop_cpu op_get_cpu_number(char const * cpu_string) 15910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project{ 16010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project int cpu_type = CPU_NO_GOOD; 16110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project size_t i; 16210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 16310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project for (i = 0; i < nr_cpu_descrs; ++i) { 16410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project if (!strcmp(cpu_descrs[i].name, cpu_string)) { 16510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project cpu_type = cpu_descrs[i].cpu; 16610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project break; 16710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project } 16810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project } 16910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 17010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project /* Attempt to convert into a number */ 17110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project if (cpu_type == CPU_NO_GOOD) 17210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project sscanf(cpu_string, "%d\n", &cpu_type); 17310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 17410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project if (cpu_type <= CPU_NO_GOOD || cpu_type >= MAX_CPU_TYPE) 17510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project cpu_type = CPU_NO_GOOD; 17610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 17710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project return cpu_type; 17810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project} 17910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 18010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 18110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectchar const * op_get_cpu_type_str(op_cpu cpu_type) 18210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project{ 18310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project if (cpu_type <= CPU_NO_GOOD || cpu_type >= MAX_CPU_TYPE) 18410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project return "invalid cpu type"; 18510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 18610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project return cpu_descrs[cpu_type].pretty; 18710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project} 18810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 18910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 19010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectchar const * op_get_cpu_name(op_cpu cpu_type) 19110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project{ 19210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project if (cpu_type <= CPU_NO_GOOD || cpu_type >= MAX_CPU_TYPE) 19310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project return "invalid cpu type"; 19410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 19510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project return cpu_descrs[cpu_type].name; 19610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project} 19710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 19810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 19910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectint op_get_nr_counters(op_cpu cpu_type) 20010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project{ 2015a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng int cnt; 2025a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 20310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project if (cpu_type <= CPU_NO_GOOD || cpu_type >= MAX_CPU_TYPE) 20410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project return 0; 20510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 2065a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng cnt = arch_num_counters(cpu_type); 2075a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (cnt >= 0) 2085a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng return cnt; 2095a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 21010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project return cpu_descrs[cpu_type].nr_counters; 21110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project} 212