SOURCES: linux-dmi-decode-and-save-oem-string-information.patch (N...

adamg adamg at pld-linux.org
Wed Aug 16 11:44:22 CEST 2006


Author: adamg                        Date: Wed Aug 16 09:44:22 2006 GMT
Module: SOURCES                       Tag: HEAD
---- Log message:
- new

---- Files affected:
SOURCES:
   linux-dmi-decode-and-save-oem-string-information.patch (NONE -> 1.1)  (NEW)

---- Diffs:

================================================================
Index: SOURCES/linux-dmi-decode-and-save-oem-string-information.patch
diff -u /dev/null SOURCES/linux-dmi-decode-and-save-oem-string-information.patch:1.1
--- /dev/null	Wed Aug 16 11:44:22 2006
+++ SOURCES/linux-dmi-decode-and-save-oem-string-information.patch	Wed Aug 16 11:44:17 2006
@@ -0,0 +1,77 @@
+Subject: DMI: Decode and save OEM String information
+From: "Shem Multinymous" <multinymous at gmail.com>
+
+This teaches dmi_decode() how to decode and save OEM Strings (type 11) DMI
+information, which is currently discarded silently.  Existing code using
+DMI is not affected.  Follows the "System Management BIOS (SMBIOS)
+Specification" (http://www.dmtf.org/standards/smbios), and also the
+userspace dmidecode.c code.
+
+OEM Strings are the only safe way to identify some hardware, e.g., the
+ThinkPad embedded controller used by the soon-to-be-submitted tp_smapi
+driver.  This will also let us eliminate the long whitelist in the mainline
+hdaps driver (in a future patch).
+
+Signed-off-by: Shem Multinymous <multinymous at gmail.com>
+Cc: Bjorn Helgaas <bjorn.helgaas at hp.com>
+Signed-off-by: Andrew Morton <akpm at osdl.org>
+---
+
+ drivers/firmware/dmi_scan.c |   23 +++++++++++++++++++++++
+ include/linux/dmi.h         |    3 ++-
+ 2 files changed, 25 insertions(+), 1 deletion(-)
+
+diff -puN drivers/firmware/dmi_scan.c~dmi-decode-and-save-oem-string-information drivers/firmware/dmi_scan.c
+--- a/drivers/firmware/dmi_scan.c~dmi-decode-and-save-oem-string-information
++++ a/drivers/firmware/dmi_scan.c
+@@ -123,6 +123,26 @@ static void __init dmi_save_devices(stru
+ 		dev->type = *d++ & 0x7f;
+ 		dev->name = dmi_string(dm, *d);
+ 		dev->device_data = NULL;
++		list_add(&dev->list, &dmi_devices);
++	}
++}
++
++static void __init dmi_save_oem_strings_devices(struct dmi_header *dm)
++{
++	int i, count = *(u8 *)(dm + 1);
++	struct dmi_device *dev;
++
++	for (i = 1; i <= count; i++) {
++		dev = dmi_alloc(sizeof(*dev));
++		if (!dev) {
++			printk(KERN_ERR
++			   "dmi_save_oem_strings_devices: out of memory.\n");
++			break;
++		}
++
++		dev->type = DMI_DEV_TYPE_OEM_STRING;
++		dev->name = dmi_string(dm, i);
++		dev->device_data = NULL;
+ 
+ 		list_add(&dev->list, &dmi_devices);
+ 	}
+@@ -181,6 +201,9 @@ static void __init dmi_decode(struct dmi
+ 	case 10:	/* Onboard Devices Information */
+ 		dmi_save_devices(dm);
+ 		break;
++	case 11:	/* OEM Strings */
++		dmi_save_oem_strings_devices(dm);
++		break;
+ 	case 38:	/* IPMI Device Information */
+ 		dmi_save_ipmi_device(dm);
+ 	}
+diff -puN include/linux/dmi.h~dmi-decode-and-save-oem-string-information include/linux/dmi.h
+--- a/include/linux/dmi.h~dmi-decode-and-save-oem-string-information
++++ a/include/linux/dmi.h
+@@ -27,7 +27,8 @@ enum dmi_device_type {
+ 	DMI_DEV_TYPE_ETHERNET,
+ 	DMI_DEV_TYPE_TOKENRING,
+ 	DMI_DEV_TYPE_SOUND,
+-	DMI_DEV_TYPE_IPMI = -1
++	DMI_DEV_TYPE_IPMI = -1,
++	DMI_DEV_TYPE_OEM_STRING = -2
+ };
+ 
+ struct dmi_header {
+_
================================================================


More information about the pld-cvs-commit mailing list