Commit b4bd7d59 authored by Wim Van Sebroeck's avatar Wim Van Sebroeck Committed by Linus Torvalds

SMBIOS/DMI: add type 41 = Onboard Devices Extended Information

From version 2.6 of the SMBIOS standard, type 10 (On Board Devices
Information) becomes obsolete.  The reason for this is that no further
fields can be added to this structure without adversely affecting existing
software's ability to properly parse the data.

Therefore type 41 (Onboard Devices Extended Information) was added.
The structure is as follows:

struct smbios_type_41 {
	u8 type;
	u8 length;
	u16 handle;
	u8 reference_designation_string;
	u8 device_type;		/* same device type as in type 10 */
	u8 device_type_instance;
	u16 segment_group_number;
	u8 bus_number;
	u8 device_function_number;
};

For more info: http://www.dmtf.org/standards/smbiosSigned-off-by: default avatarWim Van Sebroeck <wim@iguana.be>
Cc: Jean Delvare <khali@linux-fr.org>
Cc: Len Brown <lenb@kernel.org>
Cc: Jeff Garzik <jeff@garzik.org>
Cc: Tejun Heo <htejun@gmail.com>
Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 13050d89
...@@ -250,6 +250,28 @@ static void __init dmi_save_ipmi_device(const struct dmi_header *dm) ...@@ -250,6 +250,28 @@ static void __init dmi_save_ipmi_device(const struct dmi_header *dm)
list_add(&dev->list, &dmi_devices); list_add(&dev->list, &dmi_devices);
} }
static void __init dmi_save_extended_devices(const struct dmi_header *dm)
{
const u8 *d = (u8*) dm + 5;
struct dmi_device *dev;
/* Skip disabled device */
if ((*d & 0x80) == 0)
return;
dev = dmi_alloc(sizeof(*dev));
if (!dev) {
printk(KERN_ERR "dmi_save_extended_devices: out of memory.\n");
return;
}
dev->type = *d-- & 0x7f;
dev->name = dmi_string(dm, *d);
dev->device_data = NULL;
list_add(&dev->list, &dmi_devices);
}
/* /*
* Process a DMI table entry. Right now all we care about are the BIOS * Process a DMI table entry. Right now all we care about are the BIOS
* and machine entries. For 2.5 we should pull the smbus controller info * and machine entries. For 2.5 we should pull the smbus controller info
...@@ -292,6 +314,9 @@ static void __init dmi_decode(const struct dmi_header *dm) ...@@ -292,6 +314,9 @@ static void __init dmi_decode(const struct dmi_header *dm)
break; break;
case 38: /* IPMI Device Information */ case 38: /* IPMI Device Information */
dmi_save_ipmi_device(dm); dmi_save_ipmi_device(dm);
break;
case 41: /* Onboard Devices Extended Information */
dmi_save_extended_devices(dm);
} }
} }
......
...@@ -35,8 +35,11 @@ enum dmi_device_type { ...@@ -35,8 +35,11 @@ enum dmi_device_type {
DMI_DEV_TYPE_ETHERNET, DMI_DEV_TYPE_ETHERNET,
DMI_DEV_TYPE_TOKENRING, DMI_DEV_TYPE_TOKENRING,
DMI_DEV_TYPE_SOUND, DMI_DEV_TYPE_SOUND,
DMI_DEV_TYPE_PATA,
DMI_DEV_TYPE_SATA,
DMI_DEV_TYPE_SAS,
DMI_DEV_TYPE_IPMI = -1, DMI_DEV_TYPE_IPMI = -1,
DMI_DEV_TYPE_OEM_STRING = -2 DMI_DEV_TYPE_OEM_STRING = -2,
}; };
struct dmi_header { struct dmi_header {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment