Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
[deliverable/linux.git] / drivers / firmware / dmi_scan.c
index d46467271349d79adbabd04a76bb55a7b7cff19f..b3d22d6599901756a694d8eac124cf0326eba399 100644 (file)
@@ -277,6 +277,29 @@ static void __init dmi_save_ipmi_device(const struct dmi_header *dm)
        list_add_tail(&dev->list, &dmi_devices);
 }
 
+static void __init dmi_save_dev_onboard(int instance, int segment, int bus,
+                                       int devfn, const char *name)
+{
+       struct dmi_dev_onboard *onboard_dev;
+
+       onboard_dev = dmi_alloc(sizeof(*onboard_dev) + strlen(name) + 1);
+       if (!onboard_dev) {
+               printk(KERN_ERR "dmi_save_dev_onboard: out of memory.\n");
+               return;
+       }
+       onboard_dev->instance = instance;
+       onboard_dev->segment = segment;
+       onboard_dev->bus = bus;
+       onboard_dev->devfn = devfn;
+
+       strcpy((char *)&onboard_dev[1], name);
+       onboard_dev->dev.type = DMI_DEV_TYPE_DEV_ONBOARD;
+       onboard_dev->dev.name = (char *)&onboard_dev[1];
+       onboard_dev->dev.device_data = onboard_dev;
+
+       list_add(&onboard_dev->dev.list, &dmi_devices);
+}
+
 static void __init dmi_save_extended_devices(const struct dmi_header *dm)
 {
        const u8 *d = (u8*) dm + 5;
@@ -285,6 +308,8 @@ static void __init dmi_save_extended_devices(const struct dmi_header *dm)
        if ((*d & 0x80) == 0)
                return;
 
+       dmi_save_dev_onboard(*(d+1), *(u16 *)(d+2), *(d+4), *(d+5),
+                            dmi_string_nosave(dm, *(d-1)));
        dmi_save_one_device(*d & 0x7f, dmi_string_nosave(dm, *(d - 1)));
 }
 
This page took 0.023851 seconds and 5 git commands to generate.