The Android Open Source Project | 10e23ee | 2009-03-03 19:30:30 -0800 | [diff] [blame] | 1 | /** |
| 2 | * @file op_cpu_type.h |
| 3 | * CPU type determination |
| 4 | * |
| 5 | * @remark Copyright 2002 OProfile authors |
| 6 | * @remark Read the file COPYING |
| 7 | * |
| 8 | * @author John Levon |
| 9 | * @author Philippe Elie |
| 10 | */ |
| 11 | |
| 12 | #ifndef OP_CPU_TYPE_H |
| 13 | #define OP_CPU_TYPE_H |
| 14 | |
| 15 | #ifdef __cplusplus |
| 16 | extern "C" { |
| 17 | #endif |
| 18 | |
| 19 | /** |
| 20 | * Supported cpu type. Always add new CPU types at the very end. |
| 21 | */ |
| 22 | typedef enum { |
| 23 | CPU_NO_GOOD = -1, /**< unsupported CPU type */ |
| 24 | CPU_PPRO, /**< Pentium Pro */ |
| 25 | CPU_PII, /**< Pentium II series */ |
| 26 | CPU_PIII, /**< Pentium III series */ |
| 27 | CPU_ATHLON, /**< AMD P6 series */ |
| 28 | CPU_TIMER_INT, /**< CPU using the timer interrupt */ |
| 29 | CPU_RTC, /**< other CPU to use the RTC */ |
| 30 | CPU_P4, /**< Pentium 4 / Xeon series */ |
| 31 | CPU_IA64, /**< Generic IA64 */ |
| 32 | CPU_IA64_1, /**< IA64 Merced */ |
| 33 | CPU_IA64_2, /**< IA64 McKinley */ |
| 34 | CPU_HAMMER, /**< AMD Hammer family */ |
| 35 | CPU_P4_HT2, /**< Pentium 4 / Xeon series with 2 hyper-threads */ |
| 36 | CPU_AXP_EV4, /**< Alpha EV4 family */ |
| 37 | CPU_AXP_EV5, /**< Alpha EV5 family */ |
| 38 | CPU_AXP_PCA56, /**< Alpha PCA56 family */ |
| 39 | CPU_AXP_EV6, /**< Alpha EV6 family */ |
| 40 | CPU_AXP_EV67, /**< Alpha EV67 family */ |
| 41 | CPU_P6_MOBILE, /**< Pentium M series */ |
| 42 | CPU_ARM_XSCALE1, /**< ARM XScale 1 */ |
| 43 | CPU_ARM_XSCALE2, /**< ARM XScale 2 */ |
| 44 | CPU_PPC64_POWER4, /**< ppc64 POWER4 family */ |
| 45 | CPU_PPC64_POWER5, /**< ppc64 POWER5 family */ |
| 46 | CPU_PPC64_POWER5p, /**< ppc64 Power5+ family */ |
| 47 | CPU_PPC64_970, /**< ppc64 970 family */ |
| 48 | CPU_MIPS_20K, /**< MIPS 20K */ |
| 49 | CPU_MIPS_24K, /**< MIPS 24K */ |
| 50 | CPU_MIPS_25K, /**< MIPS 25K */ |
| 51 | CPU_MIPS_34K, /**< MIPS 34K */ |
| 52 | CPU_MIPS_5K, /**< MIPS 5K */ |
| 53 | CPU_MIPS_R10000, /**< MIPS R10000 */ |
| 54 | CPU_MIPS_R12000, /**< MIPS R12000 */ |
| 55 | CPU_MIPS_RM7000, /**< QED RM7000 */ |
| 56 | CPU_MIPS_RM9000, /**< PMC-Sierra RM9000 */ |
| 57 | CPU_MIPS_SB1, /**< Broadcom SB1 */ |
| 58 | CPU_MIPS_VR5432, /**< NEC VR5432 */ |
| 59 | CPU_MIPS_VR5500, /**< MIPS VR5500, VR5532 and VR7701 */ |
| 60 | CPU_PPC_E500, /**< e500 */ |
| 61 | CPU_PPC_E500_2, /**< e500v2 */ |
| 62 | CPU_CORE, /**< Core Solo / Duo series */ |
| 63 | CPU_PPC_7450, /**< PowerPC G4 */ |
| 64 | CPU_CORE_2, /**< Intel Core 2 */ |
| 65 | CPU_PPC64_POWER6, /**< ppc64 POWER6 family */ |
| 66 | CPU_PPC64_970MP, /**< ppc64 970MP */ |
| 67 | CPU_PPC64_CELL, /**< ppc64 Cell Broadband Engine*/ |
| 68 | CPU_FAMILY10, /**< AMD family 10 */ |
| 69 | CPU_PPC64_PA6T, /**< ppc64 PA6T */ |
| 70 | CPU_ARM_MPCORE, /**< ARM MPCore */ |
| 71 | CPU_ARM_V6, /**< ARM V6 */ |
| 72 | CPU_PPC64_POWER5pp, /**< ppc64 Power5++ family */ |
| 73 | CPU_PPC_E300, /**< e300 */ |
| 74 | CPU_AVR32, /**< AVR32 */ |
Ben Cheng | 5bbbe46 | 2010-09-02 21:48:01 -0700 | [diff] [blame] | 75 | CPU_ARM_V7, /**< ARM Cortex-A8 */ |
Ben Cheng | 5a4eb4e | 2009-09-14 16:00:41 -0700 | [diff] [blame] | 76 | CPU_ARCH_PERFMON, /**< Intel architectural perfmon */ |
| 77 | CPU_FAMILY11H, /**< AMD family 11h */ |
| 78 | CPU_PPC64_POWER7, /**< ppc64 POWER7 family */ |
| 79 | CPU_PPC64_IBM_COMPAT_V1, /**< IBM PPC64 processor compat mode version 1 */ |
| 80 | CPU_CORE_I7, /* Intel Core i7, Nehalem */ |
| 81 | CPU_ATOM, /* First generation Intel Atom */ |
Ben Cheng | 5bbbe46 | 2010-09-02 21:48:01 -0700 | [diff] [blame] | 82 | CPU_MIPS_LOONGSON2, /* < loongson2 family */ |
| 83 | CPU_NEHALEM, /* Intel Nehalem microarchitecture */ |
| 84 | CPU_ARM_V7_CA9, /**< ARM Cortex-A9 */ |
| 85 | CPU_MIPS_74K, /**< MIPS 74K */ |
| 86 | CPU_MIPS_1004K, /**< MIPS 1004K */ |
Jeff Brown | 7a33c86 | 2011-02-02 14:00:44 -0800 | [diff] [blame^] | 87 | CPU_FAMILY12H, /**< AMD family 12h */ |
| 88 | CPU_FAMILY14H, /**< AMD family 14h */ |
| 89 | CPU_FAMILY15H, /**< AMD family 15h */ |
| 90 | CPU_WESTMERE, /* Intel Westmere microarchitecture */ |
The Android Open Source Project | 10e23ee | 2009-03-03 19:30:30 -0800 | [diff] [blame] | 91 | MAX_CPU_TYPE |
| 92 | } op_cpu; |
| 93 | |
| 94 | /** |
Jeff Brown | 7a33c86 | 2011-02-02 14:00:44 -0800 | [diff] [blame^] | 95 | * the CPU lowest common denominator |
| 96 | * |
| 97 | * returns 1 if there are variations for the base cpu type; |
| 98 | */ |
| 99 | int op_cpu_variations(op_cpu cpu_type); |
| 100 | |
| 101 | /** |
| 102 | * get the CPU lowest common denominator |
| 103 | * |
| 104 | * returns cpu_type if cpu_type does not have a lowest common denominator. |
| 105 | */ |
| 106 | op_cpu op_cpu_base_type(op_cpu cpu_type); |
| 107 | |
| 108 | /** |
The Android Open Source Project | 10e23ee | 2009-03-03 19:30:30 -0800 | [diff] [blame] | 109 | * get the CPU type from the kernel |
| 110 | * |
| 111 | * returns CPU_NO_GOOD if the CPU could not be identified. |
| 112 | * This function can not work if the module is not loaded |
| 113 | */ |
| 114 | op_cpu op_get_cpu_type(void); |
| 115 | |
| 116 | /** |
| 117 | * get the cpu number based on string |
| 118 | * @param cpu_string with either the cpu type identifier or cpu type number |
| 119 | * |
| 120 | * The function returns CPU_NO_GOOD if no matching string was found. |
| 121 | */ |
| 122 | op_cpu op_get_cpu_number(char const * cpu_string); |
| 123 | |
| 124 | /** |
| 125 | * get the cpu string. |
| 126 | * @param cpu_type the cpu type identifier |
| 127 | * |
| 128 | * The function always return a valid char const * the core cpu denomination |
| 129 | * or "invalid cpu type" if cpu_type is not valid. |
| 130 | */ |
| 131 | char const * op_get_cpu_type_str(op_cpu cpu_type); |
| 132 | |
| 133 | /** |
| 134 | * op_get_cpu_name - get the cpu name |
| 135 | * @param cpu_type the cpu identifier name |
| 136 | * |
| 137 | * The function always return a valid char const * |
| 138 | * Return the OProfile CPU name, e.g. "i386/pii" |
| 139 | */ |
| 140 | char const * op_get_cpu_name(op_cpu cpu_type); |
| 141 | |
| 142 | /** |
| 143 | * compute the number of counters available |
| 144 | * @param cpu_type numeric processor type |
| 145 | * |
| 146 | * returns 0 if the CPU could not be identified |
| 147 | */ |
| 148 | int op_get_nr_counters(op_cpu cpu_type); |
| 149 | |
| 150 | typedef enum { |
| 151 | OP_INTERFACE_NO_GOOD = -1, |
| 152 | OP_INTERFACE_24, |
| 153 | OP_INTERFACE_26 |
| 154 | } op_interface; |
| 155 | |
| 156 | /** |
| 157 | * get the INTERFACE used to communicate between daemon and the kernel |
| 158 | * |
| 159 | * returns OP_INTERFACE_NO_GOOD if the INTERFACE could not be identified. |
| 160 | * This function will identify the interface as OP_INTERFACE_NO_GOOD if |
| 161 | * the module is not loaded. |
| 162 | */ |
| 163 | op_interface op_get_interface(void); |
| 164 | |
| 165 | #ifdef __cplusplus |
| 166 | } |
| 167 | #endif |
| 168 | |
| 169 | #endif /* OP_CPU_TYPE_H */ |