summaryrefslogtreecommitdiff
path: root/includes
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 /includes
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 'includes')
-rw-r--r--includes/arm/processor-platform.h8
-rw-r--r--includes/cpu_util.h48
-rw-r--r--includes/ppc/processor-platform.h9
-rw-r--r--includes/x86/processor-platform.h8
4 files changed, 60 insertions, 13 deletions
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;