summaryrefslogtreecommitdiff
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.c88
1 files changed, 26 insertions, 62 deletions
diff --git a/modules/devices/arm/processor.c b/modules/devices/arm/processor.c
index ad29f09e..a18f6374 100644
--- a/modules/devices/arm/processor.c
+++ b/modules/devices/arm/processor.c
@@ -19,6 +19,9 @@
#include "hardinfo.h"
#include "devices.h"
+#include "arm_data.h"
+#include "arm_data.c"
+
enum {
ARM_A32 = 0,
ARM_A64 = 1,
@@ -31,68 +34,21 @@ static const gchar *arm_mode_str[] = {
"A32 on A64",
};
-/* sources:
- * https://unix.stackexchange.com/a/43563
- * git:linux/arch/arm/kernel/setup.c
- * git:linux/arch/arm64/kernel/cpuinfo.c
- */
-static struct {
- char *name, *meaning;
-} flag_meaning[] = {
- /* arm/hw_cap */
- { "swp", "SWP instruction (atomic read-modify-write)" },
- { "half", "Half-word loads and stores" },
- { "thumb", "Thumb (16-bit instruction set)" },
- { "26bit", "26-Bit Model (Processor status register folded into program counter)" },
- { "fastmult", "32x32->64-bit multiplication" },
- { "fpa", "Floating point accelerator" },
- { "vfp", "VFP (early SIMD vector floating point instructions)" },
- { "edsp", "DSP extensions (the 'e' variant of the ARM9 CPUs, and all others above)" },
- { "java", "Jazelle (Java bytecode accelerator)" },
- { "iwmmxt", "SIMD instructions similar to Intel MMX" },
- { "crunch", "MaverickCrunch coprocessor (if kernel support enabled)" },
- { "thumbee", "ThumbEE" },
- { "neon", "Advanced SIMD/NEON on AArch32" },
- { "evtstrm", "kernel event stream using generic architected timer" },
- { "vfpv3", "VFP version 3" },
- { "vfpv3d16", "VFP version 3 with 16 D-registers" },
- { "vfpv4", "VFP version 4 with fast context switching" },
- { "vfpd32", "VFP with 32 D-registers" },
- { "tls", "TLS register" },
- { "idiva", "SDIV and UDIV hardware division in ARM mode" },
- { "idivt", "SDIV and UDIV hardware division in Thumb mode" },
- { "lpae", "40-bit Large Physical Address Extension" },
- /* arm/hw_cap2 */
- { "pmull", "64x64->128-bit F2m multiplication (arch>8)" },
- { "aes", "Crypto:AES (arch>8)" },
- { "sha1", "Crypto:SHA1 (arch>8)" },
- { "sha2", "Crypto:SHA2 (arch>8)" },
- { "crc32", "CRC32 checksum instructions (arch>8)" },
- /* arm64/hw_cap */
- { "fp", "" },
- { "asimd", "Advanced SIMD/NEON on AArch64 (arch>8)" },
- { "atomics", "" },
- { "fphp", "" },
- { "asimdhp", "" },
- { "cpuid", "" },
- { "asimdrdm", "" },
- { "jscvt", "" },
- { "fcma", "" },
- { "lrcpc", "" },
-
- { NULL, NULL},
-};
-
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);
- for (i = 0; flag_meaning[i].name != NULL; i++) {
- g_hash_table_insert(cpu_flags, flag_meaning[i].name,
- flag_meaning[i].meaning);
+ 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++;
}
}
@@ -231,6 +187,11 @@ processor_scan(void)
UNKIFNULL(cpu_part);
UNKIFNULL(cpu_revision);
+ processor->decoded_name = arm_decoded_name(
+ processor->cpu_implementer, processor->cpu_part,
+ processor->cpu_variant, processor->cpu_revision,
+ processor->cpu_architecture, processor->model_name);
+
/* freq */
processor->cpukhz_cur = get_cpu_int("cpufreq/scaling_cur_freq", processor->id);
processor->cpukhz_min = get_cpu_int("cpufreq/scaling_min_freq", processor->id);
@@ -287,11 +248,13 @@ gchar *processor_get_capabilities_from_flags(gchar * strflags)
gchar *
processor_get_detailed_info(Processor *processor)
{
- gchar *tmp_flags, *ret;
+ gchar *tmp_flags, *tmp_imp, *tmp_part, *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);
ret = g_strdup_printf("[Processor]\n"
- "Name=%s\n"
+ "Linux Name=%s\n"
+ "Decoded Name=%s\n"
"Mode=%s\n"
"BogoMips=%.2f\n"
"Endianesss="
@@ -306,24 +269,25 @@ processor_get_detailed_info(Processor *processor)
"Max=%d kHz\n"
"Cur=%d kHz\n"
"[ARM]\n"
- "Implementer=%s\n"
+ "Implementer=[%s] %s\n"
+ "Part=[%s] %s\n"
"Architecture=%s\n"
"Variant=%s\n"
- "Part=%s\n"
"Revision=%s\n"
"[Capabilities]\n"
"%s"
"%s",
processor->model_name,
+ processor->decoded_name,
arm_mode_str[processor->mode],
processor->bogomips,
processor->cpukhz_min,
processor->cpukhz_max,
processor->cpukhz_cur,
- processor->cpu_implementer,
+ processor->cpu_implementer, (tmp_imp) ? tmp_imp : "",
+ processor->cpu_part, (tmp_part) ? tmp_part : "",
processor->cpu_architecture,
processor->cpu_variant,
- processor->cpu_part,
processor->cpu_revision,
tmp_flags,
"");