Blame 0018-dmidecode-Decode-system-slot-base-bus-width-and-peer.patch

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