Blame SOURCES/0002-dmidecode-Decode-system-slot-base-bus-width-and-peer.patch

65c10b
From 62bce59fed14c1cf57ce6cb7b208a9fccda3f4a5 Mon Sep 17 00:00:00 2001
65c10b
From: Jean Delvare <jdelvare@suse.de>
65c10b
Date: Wed, 23 Oct 2019 12:44:20 +0200
65c10b
Subject: [PATCH 2/2] dmidecode: Decode system slot base bus width and peers
65c10b
65c10b
SMBIOS version 3.2.0 added extra fields are the end of structure type
65c10b
9. Decode these extra fields (base data bus width and peers) when
65c10b
present.
65c10b
65c10b
Signed-off-by: Jean Delvare <jdelvare@suse.de>
65c10b
Signed-off-by: Lianbo Jiang <lijiang@redhat.com>
65c10b
---
65c10b
 dmidecode.c | 15 +++++++++++++++
65c10b
 1 file changed, 15 insertions(+)
65c10b
65c10b
diff --git a/dmidecode.c b/dmidecode.c
65c10b
index 8e535356de71..8ebd8626d6ea 100644
65c10b
--- a/dmidecode.c
65c10b
+++ b/dmidecode.c
65c10b
@@ -2033,6 +2033,16 @@ static void dmi_slot_segment_bus_func(u16 code1, u8 code2, u8 code3, const char
65c10b
 		       prefix, code1, code2, code3 >> 3, code3 & 0x7);
65c10b
 }
65c10b
 
65c10b
+static void dmi_slot_peers(u8 n, const u8 *data, const char *prefix)
65c10b
+{
65c10b
+	int i;
65c10b
+
65c10b
+	for (i = 1; i <= n; i++, data += 5)
65c10b
+		printf("%sPeer Device %d: %04x:%02x:%02x.%x (Width %u)\n",
65c10b
+		       prefix, i, WORD(data), data[2], data[3] >> 3,
65c10b
+		       data[3] & 0x07, data[4]);
65c10b
+}
65c10b
+
65c10b
 /*
65c10b
  * 7.11 On Board Devices Information (Type 10)
65c10b
  */
65c10b
@@ -4213,6 +4223,11 @@ static void dmi_decode(const struct dmi_header *h, u16 ver)
65c10b
 				dmi_slot_characteristics(data[0x0B], data[0x0C], "\t\t");
65c10b
 			if (h->length < 0x11) break;
65c10b
 			dmi_slot_segment_bus_func(WORD(data + 0x0D), data[0x0F], data[0x10], "\t");
65c10b
+			if (h->length < 0x13) break;
65c10b
+			printf("\tData Bus Width: %u\n", data[0x11]);
65c10b
+			printf("\tPeer Devices: %u\n", data[0x12]);
65c10b
+			if (h->length - 0x13 >= data[0x12] * 5)
65c10b
+				dmi_slot_peers(data[0x12], data + 0x13, "\t");
65c10b
 			break;
65c10b
 
65c10b
 		case 10: /* 7.11 On Board Devices Information */
65c10b
-- 
65c10b
2.17.1
65c10b