aboutsummaryrefslogtreecommitdiff
path: root/modules/devices/arm/processor.c
diff options
context:
space:
mode:
Diffstat (limited to 'modules/devices/arm/processor.c')
-rw-r--r--modules/devices/arm/processor.c42
1 files changed, 13 insertions, 29 deletions
diff --git a/modules/devices/arm/processor.c b/modules/devices/arm/processor.c
index c94f41e5..ad7adf7f 100644
--- a/modules/devices/arm/processor.c
+++ b/modules/devices/arm/processor.c
@@ -34,24 +34,6 @@ static const gchar *arm_mode_str[] = {
"A32 on A64",
};
-GHashTable *cpu_flags = NULL; /* FIXME: when is it freed? */
-
-static void
-populate_cpu_flags_list_internal()
-{
- int i;
- gchar **afl, *fm;
-
- cpu_flags = g_hash_table_new(g_str_hash, g_str_equal);
- afl = g_strsplit(arm_flag_list(), " ", 0);
- while(afl[i] != NULL) {
- fm = (char *)arm_flag_meaning(afl[i]);
- if (g_strcmp0(afl[i], "") != 0)
- g_hash_table_insert(cpu_flags, afl[i], (fm) ? fm : "");
- i++;
- }
-}
-
static gint get_cpu_int(const gchar* file, gint cpuid) {
gchar *tmp0 = NULL;
gchar *tmp1 = NULL;
@@ -184,9 +166,10 @@ processor_scan(void)
processor = (Processor *) pi->data;
/* strings can't be null or segfault later */
-#define UNKIFNULL(f) if (processor->f == NULL) processor->f = g_strdup("(Unknown)");
-#define EMPIFNULL(f) if (processor->f == NULL) processor->f = g_strdup("");
- UNKIFNULL(model_name);
+#define STRIFNULL(f,cs) if (processor->f == NULL) processor->f = g_strdup(cs);
+#define UNKIFNULL(f) STRIFNULL(f, "(Unknown)")
+#define EMPIFNULL(f) STRIFNULL(f, "")
+ STRIFNULL(model_name, "ARM Processor");
EMPIFNULL(flags);
UNKIFNULL(cpu_implementer);
UNKIFNULL(cpu_architecture);
@@ -198,6 +181,7 @@ processor_scan(void)
processor->cpu_implementer, processor->cpu_part,
processor->cpu_variant, processor->cpu_revision,
processor->cpu_architecture, processor->model_name);
+ UNKIFNULL(decoded_name);
/* freq */
processor->cpukhz_cur = get_cpu_int("cpufreq/scaling_cur_freq", processor->id);
@@ -229,14 +213,11 @@ gchar *processor_get_capabilities_from_flags(gchar * strflags)
gchar *tmp = NULL;
gint j = 0;
- if (!cpu_flags)
- populate_cpu_flags_list_internal();
-
flags = g_strsplit(strflags, " ", 0);
old = flags;
while (flags[j]) {
- gchar *meaning = g_hash_table_lookup(cpu_flags, flags[j]);
+ const gchar *meaning = arm_flag_meaning( flags[j] );
if (meaning) {
tmp = h_strdup_cprintf("%s=%s\n", tmp, flags[j], meaning);
@@ -255,10 +236,12 @@ gchar *processor_get_capabilities_from_flags(gchar * strflags)
gchar *
processor_get_detailed_info(Processor *processor)
{
- gchar *tmp_flags, *tmp_imp, *tmp_part, *ret;
+ gchar *tmp_flags, *tmp_imp, *tmp_part, *tmp_arch, *ret;
tmp_flags = processor_get_capabilities_from_flags(processor->flags);
tmp_imp = (char*)arm_implementer(processor->cpu_implementer);
- tmp_part = (char *)arm_part(processor->cpu_implementer, processor->cpu_part);
+ tmp_part = (char*)arm_part(processor->cpu_implementer, processor->cpu_part);
+ tmp_arch = (char*)arm_arch_more(processor->cpu_architecture);
+
ret = g_strdup_printf("[Processor]\n"
"Linux Name=%s\n"
"Decoded Name=%s\n"
@@ -278,7 +261,7 @@ processor_get_detailed_info(Processor *processor)
"[ARM]\n"
"Implementer=[%s] %s\n"
"Part=[%s] %s\n"
- "Architecture=%s\n"
+ "Architecture=[%s] %s\n"
"Variant=%s\n"
"Revision=%s\n"
"[Capabilities]\n"
@@ -293,12 +276,13 @@ processor_get_detailed_info(Processor *processor)
processor->cpukhz_cur,
processor->cpu_implementer, (tmp_imp) ? tmp_imp : "",
processor->cpu_part, (tmp_part) ? tmp_part : "",
- processor->cpu_architecture,
+ processor->cpu_architecture, (tmp_arch) ? tmp_arch : "",
processor->cpu_variant,
processor->cpu_revision,
tmp_flags,
"");
g_free(tmp_flags);
+
return ret;
}