diff options
-rw-r--r-- | CMakeLists.txt | 1 | ||||
-rw-r--r-- | includes/arm/processor-platform.h | 8 | ||||
-rw-r--r-- | includes/cpu_util.h | 48 | ||||
-rw-r--r-- | includes/ppc/processor-platform.h | 9 | ||||
-rw-r--r-- | includes/x86/processor-platform.h | 8 | ||||
-rw-r--r-- | modules/devices/arm/processor.c | 106 | ||||
-rw-r--r-- | modules/devices/cpu_util.c | 162 | ||||
-rw-r--r-- | modules/devices/ppc/processor.c | 94 | ||||
-rw-r--r-- | modules/devices/x86/processor.c | 107 |
9 files changed, 250 insertions, 293 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 8291b967..52ad5d57 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -114,6 +114,7 @@ set(MODULE_computer_SOURCES ) set(MODULE_devices_SOURCES modules/devices.c + modules/devices/cpu_util.c modules/devices/${HARDINFO_ARCH}/processor.c modules/devices/battery.c modules/devices/devmemory.c diff --git a/includes/arm/processor-platform.h b/includes/arm/processor-platform.h index 9f4296d3..00ebf6b7 100644 --- a/includes/arm/processor-platform.h +++ b/includes/arm/processor-platform.h @@ -19,6 +19,8 @@ #ifndef __PROCESSOR_PLATFORM_H__ #define __PROCESSOR_PLATFORM_H__ +#include "cpu_util.h" + struct _Processor { gchar *model_name; gchar *decoded_name; @@ -26,11 +28,9 @@ struct _Processor { gfloat bogomips; gint id; - gchar *package_id, *core_id; gfloat cpu_mhz; /* for devices.c, identical to cpukhz_max/1000 */ - gint cpukhz_max, cpukhz_min, cpukhz_cur; /* for arm/processor.c */ - gchar *scaling_driver, *scaling_governor; - gint transition_latency; + cpu_topology_data *cputopo; + cpufreq_data *cpufreq; gchar *cpu_implementer; gchar *cpu_architecture; diff --git a/includes/cpu_util.h b/includes/cpu_util.h new file mode 100644 index 00000000..656a402c --- /dev/null +++ b/includes/cpu_util.h @@ -0,0 +1,48 @@ +#ifndef __CPU_UTIL_H__ +#define __CPU_UTIL_H__ + +#include "hardinfo.h" + +#ifndef PROC_CPUINFO +#define PROC_CPUINFO "/proc/cpuinfo" +#endif + +/* needs a local Processor *processor */ +#define STRIFNULL(f,cs) if (processor->f == NULL) processor->f = g_strdup(cs); +#define UNKIFNULL(f) STRIFNULL(f, _("(Unknown)") ) +#define EMPIFNULL(f) STRIFNULL(f, "") + +gchar *byte_order_str(void); + +/* from /sys/devices/system/cpu/cpu%d/%s */ +gchar* get_cpu_str(const gchar* file, gint cpuid); +gint get_cpu_int(const char* item, int cpuid); + +/* space delimted list of flags, finds flag */ +int processor_has_flag(gchar * strflags, gchar * strflag); + +typedef struct { + gint id; + gint cpukhz_max, cpukhz_min, cpukhz_cur; + gchar *scaling_driver, *scaling_governor; + gint transition_latency; +} cpufreq_data; + +typedef struct { + gint id; /* thread */ + gint socket_id; + gint core_id; +} cpu_topology_data; + +cpufreq_data *cpufreq_new(gint id); +void cpufreq_update(cpufreq_data *cpufd, int cur_only); +void cpufreq_free(cpufreq_data *cpufd); + +gchar *cpufreq_section_str(cpufreq_data *cpufd); + +cpu_topology_data *cputopo_new(gint id); +void cputopo_free(cpu_topology_data *cputd); + +gchar *cputopo_section_str(cpu_topology_data *cputd); + +#endif diff --git a/includes/ppc/processor-platform.h b/includes/ppc/processor-platform.h index 9410f599..d3d1a568 100644 --- a/includes/ppc/processor-platform.h +++ b/includes/ppc/processor-platform.h @@ -19,14 +19,13 @@ #ifndef __PROCESSOR_PLATFORM_H__ #define __PROCESSOR_PLATFORM_H__ +#include "cpu_util.h" + struct _Processor { gint id; - gchar *package_id, *core_id; - gfloat cpu_mhz; /* for devices.c, identical to cpukhz_max/1000 */ - gint cpukhz_max, cpukhz_min, cpukhz_cur; /* for ppc/processor.c */ - gchar *scaling_driver, *scaling_governor; - gint transition_latency; + cpu_topology_data *cputopo; + cpufreq_data *cpufreq; gchar *model_name; gchar *revision; diff --git a/includes/x86/processor-platform.h b/includes/x86/processor-platform.h index 3dc4944f..97d864cb 100644 --- a/includes/x86/processor-platform.h +++ b/includes/x86/processor-platform.h @@ -19,6 +19,8 @@ #ifndef __PROCESSOR_PLATFORM_H__ #define __PROCESSOR_PLATFORM_H__ +#include "cpu_util.h" + typedef struct _ProcessorCache ProcessorCache; struct _ProcessorCache { @@ -40,11 +42,9 @@ struct _Processor { gfloat bogomips; gint id; - gchar *package_id, *core_id; gfloat cpu_mhz; /* for devices.c, identical to cpukhz_max/1000 */ - gint cpukhz_max, cpukhz_min, cpukhz_cur; /* for x86/processor.c */ - gchar *scaling_driver, *scaling_governor; - gint transition_latency; + cpu_topology_data *cputopo; + cpufreq_data *cpufreq; gchar *has_fpu; gchar *bug_fdiv, *bug_hlt, *bug_f00f, *bug_coma; 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 */ diff --git a/modules/devices/cpu_util.c b/modules/devices/cpu_util.c new file mode 100644 index 00000000..bf03c0ac --- /dev/null +++ b/modules/devices/cpu_util.c @@ -0,0 +1,162 @@ +/* + * HardInfo - Displays System Information + * Copyright (C) 2003-2006 Leandro A. F. Pereira <leandro@hardinfo.org> + * This file by Burt P. <pburt0@gmail.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 2. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include <string.h> +#include "hardinfo.h" +#include "cpu_util.h" + +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; +} + +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; +} + +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; +} + +cpufreq_data *cpufreq_new(gint id) +{ + cpufreq_data *cpufd; + cpufd = malloc(sizeof(cpufreq_data)); + if (cpufd) { + memset(cpufd, 0, sizeof(cpufreq_data)); + cpufd->id = id; + cpufreq_update(cpufd, 0); + } + return cpufd; +} + +void cpufreq_update(cpufreq_data *cpufd, int cur_only) +{ + if (cpufd) { + cpufd->cpukhz_cur = get_cpu_int("cpufreq/scaling_cur_freq", cpufd->id); + if (cur_only) return; + cpufd->scaling_driver = get_cpu_str("cpufreq/scaling_driver", cpufd->id); + cpufd->scaling_governor = get_cpu_str("cpufreq/scaling_governor", cpufd->id); + cpufd->transition_latency = get_cpu_int("cpufreq/cpuinfo_transition_latency", cpufd->id); + cpufd->cpukhz_min = get_cpu_int("cpufreq/scaling_min_freq", cpufd->id); + cpufd->cpukhz_max = get_cpu_int("cpufreq/scaling_max_freq", cpufd->id); + } +} + +void cpufreq_free(cpufreq_data *cpufd) +{ + if (cpufd) { + g_free(cpufd->scaling_driver); + g_free(cpufd->scaling_governor); + } + g_free(cpufd); +} + +cpu_topology_data *cputopo_new(gint id) +{ + cpu_topology_data *cputd; + cputd = malloc(sizeof(cpu_topology_data)); + if (cputd) { + memset(cputd, 0, sizeof(cpu_topology_data)); + cputd->id = id; + cputd->socket_id = get_cpu_int("topology/physical_package_id", id); + cputd->core_id = get_cpu_int("topology/core_id", id); + } + return cputd; + +} + +void cputopo_free(cpu_topology_data *cputd) +{ + g_free(cputd); +} + + +gchar *cpufreq_section_str(cpufreq_data *cpufd) +{ + if (cpufd == NULL) + return g_strdup(""); + + if (cpufd->cpukhz_min || cpufd->cpukhz_max || cpufd->cpukhz_cur) { + return 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"), cpufd->cpukhz_min, _("kHz"), + _("Maximum"), cpufd->cpukhz_max, _("kHz"), + _("Current"), cpufd->cpukhz_cur, _("kHz"), + _("Transition Latency"), cpufd->transition_latency, _("ns"), + _("Governor"), cpufd->scaling_governor, + _("Driver"), cpufd->scaling_driver); + } else { + return g_strdup_printf( + "[%s]\n" + "%s=%s\n", + _("Frequency Scaling"), + _("Driver"), cpufd->scaling_driver); + } +} + +gchar *cputopo_section_str(cpu_topology_data *cputd) +{ + if (cputd == NULL) + return g_strdup(""); + + return g_strdup_printf( + "[%s]\n" + "%s=%d\n" + "%s=%d\n" + "%s=%d\n", + _("Topology"), + _("ID"), cputd->id, + _("Socket"), cputd->socket_id, + _("Core"), cputd->core_id); +} diff --git a/modules/devices/ppc/processor.c b/modules/devices/ppc/processor.c index 59ebab01..4d25c8f8 100644 --- a/modules/devices/ppc/processor.c +++ b/modules/devices/ppc/processor.c @@ -18,38 +18,7 @@ #include "hardinfo.h" #include "devices.h" - -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 -} - -#ifndef PROC_CPUINFO -#define PROC_CPUINFO "/proc/cpuinfo" -#endif +#include "cpu_util.h" GSList * processor_scan(void) @@ -146,29 +115,15 @@ 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, _("POWER Processor") ); UNKIFNULL(revision); - /* 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; } @@ -181,39 +136,8 @@ processor_get_detailed_info(Processor *processor) { gchar *tmp_cpufreq, *tmp_topology, *ret; - 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" /* model */ diff --git a/modules/devices/x86/processor.c b/modules/devices/x86/processor.c index 2ca40136..1a904216 100644 --- a/modules/devices/x86/processor.c +++ b/modules/devices/x86/processor.c @@ -18,6 +18,7 @@ #include "hardinfo.h" #include "devices.h" +#include "cpu_util.h" /* * This function is partly based on x86cpucaps @@ -214,50 +215,6 @@ fail: g_free(endpoint); } -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; -} - -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 -} - -#ifndef PROC_CPUINFO -#define PROC_CPUINFO "/proc/cpuinfo" -#endif - GSList *processor_scan(void) { GSList *procs = NULL, *l = NULL; @@ -354,27 +311,12 @@ 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); - 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; } fclose(cpuinfo); @@ -771,39 +713,8 @@ gchar *processor_get_detailed_info(Processor * processor) tmp_pm = processor_get_capabilities_from_flags(processor->pm); cache_info = __cache_get_info_as_string(processor); - 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" |