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 <jdelv...@suse.de> --- 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 _______________________________________________ https://lists.nongnu.org/mailman/listinfo/dmidecode-devel