diff options
Diffstat (limited to 'drivers/firmware/dmi_scan.c')
-rw-r--r-- | drivers/firmware/dmi_scan.c | 25 |
1 files changed, 25 insertions, 0 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 | ||
253 | static 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 | ||