summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
Diffstat (limited to 'modules')
-rw-r--r--modules/devices.c35
-rw-r--r--modules/devices/dmi_memory.c138
-rw-r--r--modules/devices/x86/processor.c85
3 files changed, 171 insertions, 87 deletions
diff --git a/modules/devices.c b/modules/devices.c
index 0056ea6e..e209ebe5 100644
--- a/modules/devices.c
+++ b/modules/devices.c
@@ -50,6 +50,7 @@ gchar *callback_storage();
gchar *callback_input();
gchar *callback_usb();
gchar *callback_dmi();
+gchar *callback_dmi_mem();
gchar *callback_spd();
gchar *callback_dtree();
gchar *callback_device_resources();
@@ -64,6 +65,7 @@ void scan_storage(gboolean reload);
void scan_input(gboolean reload);
void scan_usb(gboolean reload);
void scan_dmi(gboolean reload);
+void scan_dmi_mem(gboolean reload);
void scan_spd(gboolean reload);
void scan_dtree(gboolean reload);
void scan_device_resources(gboolean reload);
@@ -75,8 +77,11 @@ gchar *hi_more_info(gchar *entry);
enum {
ENTRY_DTREE,
+ ENTRY_DMI,
ENTRY_PROCESSOR,
ENTRY_GPU,
+ ENTRY_SPD,
+ ENTRY_DMI_MEM,
ENTRY_PCI,
ENTRY_USB,
ENTRY_PRINTERS,
@@ -84,8 +89,6 @@ enum {
ENTRY_SENSORS,
ENTRY_INPUT,
ENTRY_STORAGE,
- ENTRY_DMI,
- ENTRY_SPD,
ENTRY_RESOURCES
};
@@ -99,8 +102,9 @@ static ModuleEntry entries[] = {
[ENTRY_SENSORS] = {N_("Sensors"), "therm.png", callback_sensors, scan_sensors, MODULE_FLAG_NONE},
[ENTRY_INPUT] = {N_("Input Devices"), "inputdevices.png", callback_input, scan_input, MODULE_FLAG_NONE},
[ENTRY_STORAGE] = {N_("Storage"), "hdd.png", callback_storage, scan_storage, MODULE_FLAG_NONE},
- [ENTRY_DMI] = {N_("DMI"), "computer.png", callback_dmi, scan_dmi, MODULE_FLAG_NONE},
+ [ENTRY_DMI] = {N_("System DMI"), "computer.png", callback_dmi, scan_dmi, MODULE_FLAG_NONE},
[ENTRY_SPD] = {N_("Memory SPD"), "memory.png", callback_spd, scan_spd, MODULE_FLAG_NONE},
+ [ENTRY_DMI_MEM] = {N_("Memory DMI"), "memory.png", callback_dmi_mem, scan_dmi_mem, MODULE_FLAG_NONE},
#if defined(ARCH_x86) || defined(ARCH_x86_64)
[ENTRY_DTREE] = {"#"},
#else
@@ -120,6 +124,11 @@ gchar *storage_list = NULL;
gchar *battery_list = NULL;
gchar *lginterval = NULL;
+/* in dmi_memory.c */
+gchar *dmi_mem_socket_info();
+gboolean dmi_mem_show_hinote(const char **msg);
+gchar *dmi_mem_info = NULL;
+
#include <vendor.h>
extern gchar *gpu_summary;
@@ -524,6 +533,15 @@ void scan_dmi(gboolean reload)
SCAN_END();
}
+void scan_dmi_mem(gboolean reload)
+{
+ SCAN_START();
+ if (dmi_mem_info)
+ g_free(dmi_mem_info);
+ dmi_mem_info = dmi_mem_socket_info();
+ SCAN_END();
+}
+
void scan_spd(gboolean reload)
{
SCAN_START();
@@ -619,6 +637,11 @@ gchar *callback_dmi()
return g_strdup(dmi_info);
}
+gchar *callback_dmi_mem()
+{
+ return g_strdup(dmi_mem_info);
+}
+
gchar *callback_spd()
{
return g_strdup(spd_info);
@@ -796,5 +819,11 @@ const gchar *hi_note_func(gint entry)
return msg;
}
}
+ else if (entry == ENTRY_DMI_MEM){
+ const char *msg;
+ if (dmi_mem_show_hinote(&msg)) {
+ return msg;
+ }
+ }
return NULL;
}
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;