summaryrefslogtreecommitdiff
path: root/dmidecode.c
diff options
context:
space:
mode:
authorJean Delvare <jdelvare@suse.de>2020-10-21 15:24:31 +0200
committerJean Delvare <jdelvare@suse.de>2020-10-21 15:24:31 +0200
commit231f84a902b371a042578b93caa96b8106a04371 (patch)
tree38389809bdce539c7eac854757f5fdb6106c9abd /dmidecode.c
parent4304d3aca801534ae0e4ebab5e4b4cef0c866315 (diff)
downloaddmidecode-git-231f84a902b371a042578b93caa96b8106a04371.tar.gz
dmidecode: Handle memory module extended speed fields
These fields were added by SMBIOS version 3.3.0. and although there is no hardware fast enough to need them yet, we can support them already. I missed them before because their addition is not mentioned in the specification change log. Signed-off-by: Jean Delvare <jdelvare@suse.de>
Diffstat (limited to 'dmidecode.c')
-rw-r--r--dmidecode.c26
1 files changed, 20 insertions, 6 deletions
diff --git a/dmidecode.c b/dmidecode.c
index 1b7db4b..a860711 100644
--- a/dmidecode.c
+++ b/dmidecode.c
@@ -2691,12 +2691,22 @@ static void dmi_memory_device_type_detail(u16 code)
}
}
-static void dmi_memory_device_speed(const char *attr, u16 code)
+static void dmi_memory_device_speed(const char *attr, u16 code1, u32 code2)
{
- if (code == 0)
- pr_attr(attr, "Unknown");
+ if (code1 == 0xFFFF)
+ {
+ if (code2 == 0)
+ pr_attr(attr, "Unknown");
+ else
+ pr_attr(attr, "%lu MT/s", code2);
+ }
else
- pr_attr(attr, "%u MT/s", code);
+ {
+ if (code1 == 0)
+ pr_attr(attr, "Unknown");
+ else
+ pr_attr(attr, "%u MT/s", code1);
+ }
}
static void dmi_memory_technology(u8 code)
@@ -4458,7 +4468,9 @@ static void dmi_decode(const struct dmi_header *h, u16 ver)
dmi_memory_device_type(data[0x12]));
dmi_memory_device_type_detail(WORD(data + 0x13));
if (h->length < 0x17) break;
- dmi_memory_device_speed("Speed", WORD(data + 0x15));
+ dmi_memory_device_speed("Speed", WORD(data + 0x15),
+ h->length >= 0x5C ?
+ DWORD(data + 0x54) : 0);
if (h->length < 0x1B) break;
pr_attr("Manufacturer", "%s",
dmi_string(h, data[0x17]));
@@ -4475,7 +4487,9 @@ static void dmi_decode(const struct dmi_header *h, u16 ver)
pr_attr("Rank", "%u", data[0x1B] & 0x0F);
if (h->length < 0x22) break;
dmi_memory_device_speed("Configured Memory Speed",
- WORD(data + 0x20));
+ WORD(data + 0x20),
+ h->length >= 0x5C ?
+ DWORD(data + 0x58) : 0);
if (h->length < 0x28) break;
dmi_memory_voltage_value("Minimum Voltage",
WORD(data + 0x22));