aboutsummaryrefslogtreecommitdiff
path: root/modules/devices/x86/processor.c
diff options
context:
space:
mode:
Diffstat (limited to 'modules/devices/x86/processor.c')
-rw-r--r--modules/devices/x86/processor.c123
1 files changed, 78 insertions, 45 deletions
diff --git a/modules/devices/x86/processor.c b/modules/devices/x86/processor.c
index 25dc6c4a..35ad9fcb 100644
--- a/modules/devices/x86/processor.c
+++ b/modules/devices/x86/processor.c
@@ -226,18 +226,23 @@ int processor_has_flag(gchar * strflags, gchar * strflag)
return ret;
}
-static gint get_cpu_int(const gchar* file, gint cpuid) {
+static gchar* get_cpu_str(const gchar* file, gint cpuid) {
gchar *tmp0 = NULL;
gchar *tmp1 = NULL;
- gint ret = 0;
-
tmp0 = g_strdup_printf("/sys/devices/system/cpu/cpu%d/%s", cpuid, file);
g_file_get_contents(tmp0, &tmp1, NULL, NULL);
- if (tmp1)
- ret = atol(tmp1);
-
g_free(tmp0);
- g_free(tmp1);
+ 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;
}
@@ -337,7 +342,22 @@ GSList *processor_scan(void)
g_strchug(processor->pm);
}
+#define STRIFNULL(f,cs) if (processor->f == NULL) processor->f = g_strdup(cs);
+#define UNKIFNULL(f) STRIFNULL(f, "(Unknown)")
+#define EMPIFNULL(f) STRIFNULL(f, "")
+
+ /* 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);
@@ -640,47 +660,60 @@ gchar *processor_get_detailed_info(Processor * processor)
cache_info = __cache_get_info_as_string(processor);
ret = g_strdup_printf(_("[Processor]\n"
- "Name=%s\n"
- "Family, model, stepping=%d, %d, %d (%s)\n"
- "Vendor=%s\n"
- "[Configuration]\n"
- "Cache Size=%dkb\n"
- "Frequency=%.2fMHz\n"
- "BogoMIPS=%.2f\n"
- "Byte Order=%s\n"
- "[Frequency Scaling]\n"
- "Minimum=%d kHz\n"
- "Maximum=%d kHz\n"
- "Current=%d kHz\n"
- "[Features]\n"
- "Has FPU=%s\n"
- "[Cache]\n"
- "%s\n"
- "[Power Management]\n"
- "%s"
- "[Bugs]\n"
- "%s"
- "[Capabilities]\n"
- "%s"),
- processor->model_name,
- processor->family,
- processor->model,
- processor->stepping,
- processor->strmodel,
- vendor_get_name(processor->vendor_id),
- processor->cache_size,
- processor->cpu_mhz, processor->bogomips,
+ "Name=%s\n"
+ "Family, model, stepping=%d, %d, %d (%s)\n"
+ "Vendor=%s\n"
+ "[Configuration]\n"
+ "Cache Size=%dkb\n"
+ "Frequency=%.2fMHz\n"
+ "BogoMIPS=%.2f\n"
+ "Byte Order=%s\n"
+ "[Topology]\n"
+ "ID=%d\n"
+ "Socket=%s\n"
+ "Core=%s\n"
+ "[Frequency Scaling]\n"
+ "Minimum=%d kHz\n"
+ "Maximum=%d kHz\n"
+ "Current=%d kHz\n"
+ "Transition Latency=%d ns\n"
+ "Governor=%s\n"
+ "Driver=%s\n"
+ "[Features]\n"
+ "Has FPU=%s\n"
+ "[Cache]\n"
+ "%s\n"
+ "[Power Management]\n"
+ "%s"
+ "[Bugs]\n"
+ "%s"
+ "[Capabilities]\n"
+ "%s"),
+ processor->model_name,
+ processor->family,
+ processor->model,
+ processor->stepping,
+ processor->strmodel,
+ vendor_get_name(processor->vendor_id),
+ processor->cache_size,
+ processor->cpu_mhz, processor->bogomips,
#if G_BYTE_ORDER == G_LITTLE_ENDIAN
- "Little Endian",
+ "Little Endian",
#else
- "Big Endian",
+ "Big Endian",
#endif
- processor->cpukhz_min,
- processor->cpukhz_max,
- processor->cpukhz_cur,
- processor->has_fpu ? processor->has_fpu : "no",
- cache_info,
- tmp_pm, tmp_bugs, tmp_flags);
+ processor->id,
+ processor->package_id,
+ processor->core_id,
+ processor->cpukhz_min,
+ processor->cpukhz_max,
+ processor->cpukhz_cur,
+ processor->transition_latency,
+ processor->scaling_governor,
+ processor->scaling_driver,
+ processor->has_fpu ? processor->has_fpu : "no",
+ cache_info,
+ tmp_pm, tmp_bugs, tmp_flags);
g_free(tmp_flags);
g_free(tmp_bugs);
g_free(tmp_pm);