[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[dmidecode] [PATCH] dmidecode: Decode system slot base bus width and pee
From: |
Jean Delvare |
Subject: |
[dmidecode] [PATCH] dmidecode: Decode system slot base bus width and peers |
Date: |
Thu, 17 Oct 2019 16:17:21 +0200 |
SMBIOS version 3.2.0 added extra fields are the end of structure type
9. Decode these extra fields (base data bus width and peers) when
present.
Signed-off-by: Jean Delvare <address@hidden>
---
The only system I have seen which includes these fields has them
filled with 0s, so not exactly useful.
dmidecode.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)
--- dmidecode.orig/dmidecode.c 2019-10-16 15:35:57.901685017 +0200
+++ dmidecode/dmidecode.c 2019-10-17 16:07:44.054060675 +0200
@@ -2033,6 +2033,16 @@ static void dmi_slot_segment_bus_func(u1
prefix, code1, code2, code3 >> 3, code3 & 0x7);
}
+static void dmi_slot_peers(u8 n, const u8 *data, const char *prefix)
+{
+ int i;
+
+ for (i = 1; i <= n; i++, data += 5)
+ printf("%sPeer Device %d: %04x:%02x:%02x.%x (Width %u)\n",
+ prefix, i, WORD(data), data[2], data[3] >> 3,
+ data[3] & 0x07, data[4]);
+}
+
/*
* 7.11 On Board Devices Information (Type 10)
*/
@@ -4213,6 +4223,11 @@ static void dmi_decode(const struct dmi_
dmi_slot_characteristics(data[0x0B],
data[0x0C], "\t\t");
if (h->length < 0x11) break;
dmi_slot_segment_bus_func(WORD(data + 0x0D),
data[0x0F], data[0x10], "\t");
+ if (h->length < 0x13) break;
+ printf("\tData Bus Width: %u\n", data[0x11]);
+ printf("\tPeer Devices: %u\n", data[0x12]);
+ if (h->length - 0x13 >= data[0x12] * 5)
+ dmi_slot_peers(data[0x12], data + 0x13, "\t");
break;
case 10: /* 7.11 On Board Devices Information */
--
Jean Delvare
SUSE L3 Support
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [dmidecode] [PATCH] dmidecode: Decode system slot base bus width and peers,
Jean Delvare <=