diff options
| author | Burt P <pburt0@gmail.com> | 2017-04-08 21:39:30 -0500 | 
|---|---|---|
| committer | Leandro A. F. Pereira <leandro@hardinfo.org> | 2017-04-09 10:58:25 -0700 | 
| commit | 9963afdb30c71343cc5a22a854421919269b2c58 (patch) | |
| tree | 764dfd3103025b94d4726bec95e5dd8ac5a86ba5 | |
| parent | 36aac085acebbce134bd10c5edb17856ca6c1df2 (diff) | |
Add /proc/cpuinfo power management list handling
Show items and descriptions from the power management feature
list.
Signed-off-by: Burt P <pburt0@gmail.com>
| -rw-r--r-- | includes/x86/processor-platform.h | 1 | ||||
| -rw-r--r-- | modules/devices/x86/processor.c | 33 | 
2 files changed, 32 insertions, 2 deletions
| diff --git a/includes/x86/processor-platform.h b/includes/x86/processor-platform.h index 1dbb48e2..e93aaafe 100644 --- a/includes/x86/processor-platform.h +++ b/includes/x86/processor-platform.h @@ -35,6 +35,7 @@ struct _Processor {      gchar *vendor_id;      gchar *flags;      gchar *bugs; +    gchar *pm;             /* power management features */      gint cache_size;      gfloat bogomips, cpu_mhz; diff --git a/modules/devices/x86/processor.c b/modules/devices/x86/processor.c index 83fca7c9..0f28d03f 100644 --- a/modules/devices/x86/processor.c +++ b/modules/devices/x86/processor.c @@ -247,6 +247,7 @@ GSList *processor_scan(void)  	    get_str("vendor_id", processor->vendor_id);  	    get_str("flags", processor->flags);  	    get_str("bugs", processor->bugs); +	    get_str("power management", processor->pm);  	    get_int("cache size", processor->cache_size);  	    get_float("cpu MHz", processor->cpu_mhz);  	    get_float("bogomips", processor->bogomips); @@ -434,6 +435,26 @@ static struct {  	{ NULL,		NULL						},  }; +/* from arch/x86/kernel/cpu/powerflags.h */ +static struct { +    char *name, *meaning; +} pm_meaning[] = { +	{ "ts",            "temperature sensor"     }, +	{ "fid",           "frequency id control"   }, +	{ "vid",           "voltage id control"     }, +	{ "ttp",           "thermal trip"           }, +	{ "tm",            "hardware thermal control"   }, +	{ "stc",           "software thermal control"   }, +	{ "100mhzsteps",   "100 MHz multiplier control" }, +	{ "hwpstate",      "hardware P-state control"   }, +/*	{ "",              "tsc invariant mapped to constant_tsc" }, */ +	{ "cpb",           "core performance boost"     }, +	{ "eff_freq_ro",   "Readonly aperf/mperf"       }, +	{ "proc_feedback", "processor feedback interface" }, +	{ "acc_power",     "accumulated power mechanism"  }, +	{ NULL,		NULL						}, +}; +  GHashTable *cpu_flags = NULL;  static void @@ -451,6 +472,10 @@ populate_cpu_flags_list_internal(GHashTable *hash_table)          g_hash_table_insert(cpu_flags, bug_meaning[i].name,                              bug_meaning[i].meaning);      } +    for (i = 0; pm_meaning[i].name != NULL; i++) { +        g_hash_table_insert(cpu_flags, pm_meaning[i].name, +                            pm_meaning[i].meaning); +    }  }  void cpu_flags_init(void) @@ -533,10 +558,11 @@ gchar *processor_get_capabilities_from_flags(gchar * strflags)  gchar *processor_get_detailed_info(Processor * processor)  { -    gchar *tmp_flags, *tmp_bugs, *ret, *cache_info; +    gchar *tmp_flags, *tmp_bugs, *tmp_pm, *ret, *cache_info;      tmp_flags = processor_get_capabilities_from_flags(processor->flags);      tmp_bugs = processor_get_capabilities_from_flags(processor->bugs); +    tmp_pm = processor_get_capabilities_from_flags(processor->pm);      cache_info = __cache_get_info_as_string(processor);      ret = g_strdup_printf(_("[Processor]\n" @@ -559,6 +585,8 @@ gchar *processor_get_detailed_info(Processor * processor)  			  "[Capabilities]\n"  			  "%s"  			  "[Bugs]\n" +			  "%s" +			  "[Power Management]\n"  			  "%s"),  			  processor->model_name,  			  processor->family, @@ -579,9 +607,10 @@ gchar *processor_get_detailed_info(Processor * processor)  			  processor->bug_coma ? processor->bug_coma : "no",  			  processor->has_fpu  ? processor->has_fpu  : "no",  			  cache_info, -			  tmp_flags, tmp_bugs); +			  tmp_flags, tmp_bugs, tmp_pm);      g_free(tmp_flags);      g_free(tmp_bugs); +    g_free(tmp_pm);      g_free(cache_info);      return ret; | 
