summaryrefslogtreecommitdiff
path: root/modules/devices
diff options
context:
space:
mode:
authorBurt P <pburt0@gmail.com>2019-06-21 10:36:50 -0500
committerLeandro A. F. Pereira <leandro@hardinfo.org>2019-06-22 08:45:43 -0700
commitc12d2d4b64548a0f5301f154d6eec1981cb66c9b (patch)
tree70a5d18a0954ac16285e0e6e9a95327e7a37f541 /modules/devices
parent6c3f27c5b435bccaab111d8dd32dc28473251f10 (diff)
DMI socket/module information moved from Processor to Memory DMI
As discussed in https://github.com/lpereira/hardinfo/issues/345 Signed-off-by: Burt P <pburt0@gmail.com>
Diffstat (limited to 'modules/devices')
-rw-r--r--modules/devices/dmi_memory.c138
-rw-r--r--modules/devices/x86/processor.c85
2 files changed, 139 insertions, 84 deletions
diff --git a/modules/devices/dmi_memory.c b/modules/devices/dmi_memory.c
new file mode 100644
index 00000000..d6891573
--- /dev/null
+++ b/modules/devices/dmi_memory.c
@@ -0,0 +1,138 @@
+/*
+ * HardInfo - Displays System Information
+ * Copyright (C) 2003-2019 Leandro A. F. Pereira <leandro@hardinfo.org>
+ * Copyright (C) 2019 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 "hardinfo.h"
+#include "devices.h"
+
+gboolean no_handles = FALSE;
+
+gchar *dmi_mem_socket_info() {
+ static const char empty_mem_str[] = "No Module Installed";
+ gchar *ret = strdup("");
+ unsigned long dtm = 17, i;
+ dmi_handle_list *hlm = dmidecode_handles(&dtm);
+ if (!hlm) {
+ no_handles = TRUE;
+ ret = g_strdup_printf("[%s]\n%s=%s\n",
+ _("Socket Information"), _("Result"),
+ (getuid() == 0)
+ ? _("(Not available)")
+ : _("(Not available; Perhaps try running HardInfo as root.)") );
+ } else {
+ no_handles = FALSE;
+ if (hlm) {
+ for(i = 0; i < hlm->count; i++) {
+ unsigned long h = hlm->handles[i];
+ gchar *locator = dmidecode_match("Locator", &dtm, &h);
+ gchar *size_str = dmidecode_match("Size", &dtm, &h);
+
+ if (strcmp(size_str, empty_mem_str) == 0) {
+ ret = h_strdup_cprintf("[%s (%lu) %s]\n"
+ "%s=0x%x\n"
+ "%s=%s\n",
+ ret,
+ _("Memory Socket"), i, locator,
+ _("DMI Handle"), h,
+ _("Size"), _("(Empty)") );
+ } else {
+ gchar *form_factor = dmidecode_match("Form Factor", &dtm, &h);
+ gchar *type = dmidecode_match("Type", &dtm, &h);
+ gchar *type_detail = dmidecode_match("Type Detail", &dtm, &h);
+ gchar *speed_str = dmidecode_match("Speed", &dtm, &h);
+ gchar *configured_clock_str = dmidecode_match("Configured Clock Speed", &dtm, &h);
+ gchar *voltage_min_str = dmidecode_match("Minimum Voltage", &dtm, &h);
+ gchar *voltage_max_str = dmidecode_match("Maximum Voltage", &dtm, &h);
+ gchar *voltage_conf_str = dmidecode_match("Configured Voltage", &dtm, &h);
+ gchar *mfgr = dmidecode_match("Manufacturer", &dtm, &h);
+ gchar *partno = dmidecode_match("Part Number", &dtm, &h);
+
+ gchar *vendor_str = NULL;
+ if (mfgr) {
+ const gchar *v_url = vendor_get_url(mfgr);
+ if (v_url)
+ vendor_str = g_strdup_printf(" (%s, %s)",
+ vendor_get_name(mfgr), v_url );
+ else
+ vendor_str = g_strdup("");
+ }
+
+#define UNKIFNULL2(f) ((f) ? f : _("(Unknown)"))
+
+ ret = h_strdup_cprintf("[%s (%lu) %s]\n"
+ "%s=0x%x\n"
+ "%s=%s\n"
+ "%s=%s%s\n"
+ "%s=%s\n"
+ "%s=%s / %s\n"
+ "%s=%s\n"
+ "%s=%s\n"
+ "%s=%s\n"
+ "%s=%s\n"
+ "%s=%s\n"
+ "%s=%s\n",
+ ret,
+ _("Memory Socket"), i, locator,
+ _("DMI Handle"), h,
+ _("Form Factor"), UNKIFNULL2(form_factor),
+ _("Manufacturer"), UNKIFNULL2(mfgr), vendor_str,
+ _("Part Number"), UNKIFNULL2(partno),
+ _("Type"), UNKIFNULL2(type), UNKIFNULL2(type_detail),
+ _("Size"), UNKIFNULL2(size_str),
+ _("Speed"), UNKIFNULL2(speed_str),
+ _("Configured Clock Frequency"), UNKIFNULL2(configured_clock_str),
+ _("Minimum Voltage"), UNKIFNULL2(voltage_min_str),
+ _("Maximum Voltage"), UNKIFNULL2(voltage_max_str),
+ _("Configured Voltage"), UNKIFNULL2(voltage_conf_str)
+ );
+ g_free(type);
+ g_free(form_factor);
+ g_free(speed_str);
+ g_free(configured_clock_str);
+ g_free(voltage_min_str);
+ g_free(voltage_max_str);
+ g_free(voltage_conf_str);
+ g_free(mfgr);
+ g_free(partno);
+ g_free(vendor_str);
+ }
+ g_free(size_str);
+ g_free(locator);
+ }
+ dmi_handle_list_free(hlm);
+ }
+ }
+
+ return ret;
+}
+
+gboolean dmi_mem_show_hinote(const char **msg) {
+ if (no_handles) {
+ if (getuid() == 0) {
+ *msg = g_strdup(
+ _("To view DMI memory information the <b><i>dmidecode</i></b> utility must be\n"
+ "available."));
+ } else {
+ *msg = g_strdup(
+ _("To view DMI memory information the <b><i>dmidecode</i></b> utility must be\n"
+ "available, and HardInfo must be run with superuser privileges."));
+ }
+ return TRUE;
+ }
+ return FALSE;
+}
diff --git a/modules/devices/x86/processor.c b/modules/devices/x86/processor.c
index 180545ce..4e36b817 100644
--- a/modules/devices/x86/processor.c
+++ b/modules/devices/x86/processor.c
@@ -679,11 +679,9 @@ gchar *processor_describe(GSList * processors) {
}
gchar *dmi_socket_info() {
- static const char empty_mem_str[] = "No Module Installed";
gchar *ret = strdup("");
- unsigned long dt = 4, dtm = 17, i;
+ unsigned long dt = 4, i;
dmi_handle_list *hl = dmidecode_handles(&dt);
- dmi_handle_list *hlm = dmidecode_handles(&dtm);
if (!hl) {
ret = g_strdup_printf("[%s]\n%s=%s\n",
_("Socket Information"), _("Result"),
@@ -721,87 +719,6 @@ gchar *dmi_socket_info() {
}
dmi_handle_list_free(hl);
-
- if (hlm) {
- for(i = 0; i < hlm->count; i++) {
- unsigned long h = hlm->handles[i];
- gchar *locator = dmidecode_match("Locator", &dtm, &h);
- gchar *size_str = dmidecode_match("Size", &dtm, &h);
-
- if (strcmp(size_str, empty_mem_str) == 0) {
- ret = h_strdup_cprintf("[%s (%lu) %s]\n"
- "%s=0x%x\n"
- "%s=%s\n",
- ret,
- _("Memory Socket"), i, locator,
- _("DMI Handle"), h,
- _("Size"), _("(Empty)") );
- } else {
- gchar *form_factor = dmidecode_match("Form Factor", &dtm, &h);
- gchar *type = dmidecode_match("Type", &dtm, &h);
- gchar *type_detail = dmidecode_match("Type Detail", &dtm, &h);
- gchar *speed_str = dmidecode_match("Speed", &dtm, &h);
- gchar *configured_clock_str = dmidecode_match("Configured Clock Speed", &dtm, &h);
- gchar *voltage_min_str = dmidecode_match("Minimum Voltage", &dtm, &h);
- gchar *voltage_max_str = dmidecode_match("Maximum Voltage", &dtm, &h);
- gchar *voltage_conf_str = dmidecode_match("Configured Voltage", &dtm, &h);
- gchar *mfgr = dmidecode_match("Manufacturer", &dtm, &h);
- gchar *partno = dmidecode_match("Part Number", &dtm, &h);
-
- gchar *vendor_str = NULL;
- if (mfgr) {
- const gchar *v_url = vendor_get_url(mfgr);
- if (v_url)
- vendor_str = g_strdup_printf(" (%s, %s)",
- vendor_get_name(mfgr), v_url );
- else
- vendor_str = g_strdup("");
- }
-
-#define UNKIFNULL2(f) ((f) ? f : _("(Unknown)"))
-
- ret = h_strdup_cprintf("[%s (%lu) %s]\n"
- "%s=0x%x\n"
- "%s=%s\n"
- "%s=%s%s\n"
- "%s=%s\n"
- "%s=%s / %s\n"
- "%s=%s\n"
- "%s=%s\n"
- "%s=%s\n"
- "%s=%s\n"
- "%s=%s\n"
- "%s=%s\n",
- ret,
- _("Memory Socket"), i, locator,
- _("DMI Handle"), h,
- _("Form Factor"), UNKIFNULL2(form_factor),
- _("Manufacturer"), UNKIFNULL2(mfgr), vendor_str,
- _("Part Number"), UNKIFNULL2(partno),
- _("Type"), UNKIFNULL2(type), UNKIFNULL2(type_detail),
- _("Size"), UNKIFNULL2(size_str),
- _("Speed"), UNKIFNULL2(speed_str),
- _("Configured Clock Frequency"), UNKIFNULL2(configured_clock_str),
- _("Minimum Voltage"), UNKIFNULL2(voltage_min_str),
- _("Maximum Voltage"), UNKIFNULL2(voltage_max_str),
- _("Configured Voltage"), UNKIFNULL2(voltage_conf_str)
- );
- g_free(type);
- g_free(form_factor);
- g_free(speed_str);
- g_free(configured_clock_str);
- g_free(voltage_min_str);
- g_free(voltage_max_str);
- g_free(voltage_conf_str);
- g_free(mfgr);
- g_free(partno);
- g_free(vendor_str);
- }
- g_free(size_str);
- g_free(locator);
- }
- dmi_handle_list_free(hlm);
- }
}
return ret;