ARM: 7448/1: perf: remove arm_perf_pmu_ids global enumeration
[linux-2.6-microblaze.git] / arch / arm / oprofile / common.c
index 4e0a371..99c63d4 100644 (file)
 #include <asm/ptrace.h>
 
 #ifdef CONFIG_HW_PERF_EVENTS
+
+/*
+ * OProfile has a curious naming scheme for the ARM PMUs, but they are
+ * part of the user ABI so we need to map from the perf PMU name for
+ * supported PMUs.
+ */
+static struct op_perf_name {
+       char *perf_name;
+       char *op_name;
+} op_perf_name_map[] = {
+       { "xscale1",            "arm/xscale1"   },
+       { "xscale1",            "arm/xscale2"   },
+       { "v6",                 "arm/armv6"     },
+       { "v6mpcore",           "arm/mpcore"    },
+       { "ARMv7 Cortex-A8",    "arm/armv7"     },
+       { "ARMv7 Cortex-A9",    "arm/armv7-ca9" },
+};
+
 char *op_name_from_perf_id(void)
 {
-       enum arm_perf_pmu_ids id = armpmu_get_pmu_id();
-
-       switch (id) {
-       case ARM_PERF_PMU_ID_XSCALE1:
-               return "arm/xscale1";
-       case ARM_PERF_PMU_ID_XSCALE2:
-               return "arm/xscale2";
-       case ARM_PERF_PMU_ID_V6:
-               return "arm/armv6";
-       case ARM_PERF_PMU_ID_V6MP:
-               return "arm/mpcore";
-       case ARM_PERF_PMU_ID_CA8:
-               return "arm/armv7";
-       case ARM_PERF_PMU_ID_CA9:
-               return "arm/armv7-ca9";
-       default:
-               return NULL;
+       int i;
+       struct op_perf_name names;
+       const char *perf_name = perf_pmu_name();
+
+       for (i = 0; i < ARRAY_SIZE(op_perf_name_map); ++i) {
+               names = op_perf_name_map[i];
+               if (!strcmp(names.perf_name, perf_name))
+                       return names.op_name;
        }
+
+       return NULL;
 }
 #endif