summaryrefslogtreecommitdiff
path: root/modules/devices/arm
diff options
context:
space:
mode:
authorBurt P <pburt0@gmail.com>2017-07-10 00:12:35 -0500
committerLeandro Pereira <leandro@hardinfo.org>2017-07-12 19:38:41 -0700
commitd42ee4cb296043ee763ea93afe16ea534b0d70d0 (patch)
treee12404b02615a7f67bc6469e1944681b169a574c /modules/devices/arm
parentfceafb0ba92b1f8075fe9254db6d2997f18ad8ad (diff)
Move common processor stuff into cpu_util.{h,c}
* PROC_CPUINFO define used in testing * STRIFNULL(), UNKIFNULL() EMPIFNULL() macros used in reading cpuinfo * byte order, topology, and cpufreq data structures and functions that are platform independent * processor_has_flag() helper Signed-off-by: Burt P <pburt0@gmail.com>
Diffstat (limited to 'modules/devices/arm')
-rw-r--r--modules/devices/arm/processor.c106
1 files changed, 9 insertions, 97 deletions
diff --git a/modules/devices/arm/processor.c b/modules/devices/arm/processor.c
index d83be9ec..b1923a74 100644
--- a/modules/devices/arm/processor.c
+++ b/modules/devices/arm/processor.c
@@ -18,6 +18,7 @@
#include "hardinfo.h"
#include "devices.h"
+#include "cpu_util.h"
#include "arm_data.h"
#include "arm_data.c"
@@ -34,50 +35,6 @@ static const gchar *arm_mode_str[] = {
"A32 on A64",
};
-static gchar* get_cpu_str(const gchar* file, gint cpuid) {
- gchar *tmp0 = NULL;
- gchar *tmp1 = NULL;
- tmp0 = g_strdup_printf("/sys/devices/system/cpu/cpu%d/%s", cpuid, file);
- g_file_get_contents(tmp0, &tmp1, NULL, NULL);
- g_free(tmp0);
- return tmp1;
-}
-
-static gint get_cpu_int(const char* item, int cpuid) {
- gchar *fc = NULL;
- int ret = 0;
- fc = get_cpu_str(item, cpuid);
- if (fc) {
- ret = atol(fc);
- g_free(fc);
- }
- return ret;
-}
-
-gchar *byte_order_str() {
-#if G_BYTE_ORDER == G_LITTLE_ENDIAN
- return _("Little Endian");
-#else
- return _("Big Endian");
-#endif
-}
-
-int processor_has_flag(gchar * strflags, gchar * strflag)
-{
- gchar **flags;
- gint ret = 0;
- if (strflags == NULL || strflag == NULL)
- return 0;
- flags = g_strsplit(strflags, " ", 0);
- ret = g_strv_contains((const gchar * const *)flags, strflag);
- g_strfreev(flags);
- return ret;
-}
-
-#ifndef PROC_CPUINFO
-#define PROC_CPUINFO "/proc/cpuinfo"
-#endif
-
GSList *
processor_scan(void)
{
@@ -182,9 +139,6 @@ processor_scan(void)
processor = (Processor *) pi->data;
/* strings can't be null or segfault later */
-#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);
@@ -199,23 +153,12 @@ processor_scan(void)
processor->cpu_architecture, processor->model_name);
UNKIFNULL(decoded_name);
- /* topo */
- processor->package_id = get_cpu_str("topology/physical_package_id", processor->id);
- processor->core_id = get_cpu_str("topology/core_id", processor->id);
- UNKIFNULL(package_id);
- UNKIFNULL(core_id);
-
- /* freq */
- processor->scaling_driver = get_cpu_str("cpufreq/scaling_driver", processor->id);
- processor->scaling_governor = get_cpu_str("cpufreq/scaling_governor", processor->id);
- UNKIFNULL(scaling_driver);
- UNKIFNULL(scaling_governor);
- processor->transition_latency = get_cpu_int("cpufreq/cpuinfo_transition_latency", processor->id);
- processor->cpukhz_cur = get_cpu_int("cpufreq/scaling_cur_freq", processor->id);
- processor->cpukhz_min = get_cpu_int("cpufreq/scaling_min_freq", processor->id);
- processor->cpukhz_max = get_cpu_int("cpufreq/scaling_max_freq", processor->id);
- if (processor->cpukhz_max)
- processor->cpu_mhz = processor->cpukhz_max / 1000;
+ /* topo & freq */
+ processor->cpufreq = cpufreq_new(processor->id);
+ processor->cputopo = cputopo_new(processor->id);
+
+ if (processor->cpufreq->cpukhz_max)
+ processor->cpu_mhz = processor->cpufreq->cpukhz_max / 1000;
else
processor->cpu_mhz = 0.0f;
@@ -269,39 +212,8 @@ processor_get_detailed_info(Processor *processor)
tmp_part = (char*)arm_part(processor->cpu_implementer, processor->cpu_part);
tmp_arch = (char*)arm_arch_more(processor->cpu_architecture);
- tmp_topology = g_strdup_printf(
- "[%s]\n"
- "%s=%d\n"
- "%s=%s\n"
- "%s=%s\n",
- _("Topology"),
- _("ID"), processor->id,
- _("Socket"), processor->package_id,
- _("Core"), processor->core_id);
-
- if (processor->cpukhz_min || processor->cpukhz_max || processor->cpukhz_cur) {
- tmp_cpufreq = g_strdup_printf(
- "[%s]\n"
- "%s=%d %s\n"
- "%s=%d %s\n"
- "%s=%d %s\n"
- "%s=%d %s\n"
- "%s=%s\n"
- "%s=%s\n",
- _("Frequency Scaling"),
- _("Minimum"), processor->cpukhz_min, _("kHz"),
- _("Maximum"), processor->cpukhz_max, _("kHz"),
- _("Current"), processor->cpukhz_cur, _("kHz"),
- _("Transition Latency"), processor->transition_latency, _("ns"),
- _("Governor"), processor->scaling_governor,
- _("Driver"), processor->scaling_driver);
- } else {
- tmp_cpufreq = g_strdup_printf(
- "[%s]\n"
- "%s=%s\n",
- _("Frequency Scaling"),
- _("Driver"), processor->scaling_driver);
- }
+ tmp_topology = cputopo_section_str(processor->cputopo);
+ tmp_cpufreq = cpufreq_section_str(processor->cpufreq);
ret = g_strdup_printf("[%s]\n"
"%s=%s\n" /* linux name */