aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/firmware/dmi_scan.c25
-rw-r--r--include/linux/dmi.h5
2 files changed, 29 insertions, 1 deletions
diff --git a/drivers/firmware/dmi_scan.c b/drivers/firmware/dmi_scan.c
index 1412d7bcdbd1..653265a40b7f 100644
--- a/drivers/firmware/dmi_scan.c
+++ b/drivers/firmware/dmi_scan.c
@@ -250,6 +250,28 @@ static void __init dmi_save_ipmi_device(const struct dmi_header *dm)
250 list_add(&dev->list, &dmi_devices); 250 list_add(&dev->list, &dmi_devices);
251} 251}
252 252
253static void __init dmi_save_extended_devices(const struct dmi_header *dm)
254{
255 const u8 *d = (u8*) dm + 5;
256 struct dmi_device *dev;
257
258 /* Skip disabled device */
259 if ((*d & 0x80) == 0)
260 return;
261
262 dev = dmi_alloc(sizeof(*dev));
263 if (!dev) {
264 printk(KERN_ERR "dmi_save_extended_devices: out of memory.\n");
265 return;
266 }
267
268 dev->type = *d-- & 0x7f;
269 dev->name = dmi_string(dm, *d);
270 dev->device_data = NULL;
271
272 list_add(&dev->list, &dmi_devices);
273}
274
253/* 275/*
254 * Process a DMI table entry. Right now all we care about are the BIOS 276 * Process a DMI table entry. Right now all we care about are the BIOS
255 * and machine entries. For 2.5 we should pull the smbus controller info 277 * 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 break; 314 break;
293 case 38: /* IPMI Device Information */ 315 case 38: /* IPMI Device Information */
294 dmi_save_ipmi_device(dm); 316 dmi_save_ipmi_device(dm);
317 break;
318 case 41: /* Onboard Devices Extended Information */
319 dmi_save_extended_devices(dm);
295 } 320 }
296} 321}
297 322
diff --git a/include/linux/dmi.h b/include/linux/dmi.h
index bbc9992ec374..325acdf5c462 100644
--- a/include/linux/dmi.h
+++ b/include/linux/dmi.h
@@ -35,8 +35,11 @@ enum dmi_device_type {
35 DMI_DEV_TYPE_ETHERNET, 35 DMI_DEV_TYPE_ETHERNET,
36 DMI_DEV_TYPE_TOKENRING, 36 DMI_DEV_TYPE_TOKENRING,
37 DMI_DEV_TYPE_SOUND, 37 DMI_DEV_TYPE_SOUND,
38 DMI_DEV_TYPE_PATA,
39 DMI_DEV_TYPE_SATA,
40 DMI_DEV_TYPE_SAS,
38 DMI_DEV_TYPE_IPMI = -1, 41 DMI_DEV_TYPE_IPMI = -1,
39 DMI_DEV_TYPE_OEM_STRING = -2 42 DMI_DEV_TYPE_OEM_STRING = -2,
40}; 43};
41 44
42struct dmi_header { 45struct dmi_header {