@@ -311,6 +311,32 @@ static void __init dmi_save_extended_devices(const struct dmi_header *dm)
dmi_save_one_device(*d & 0x7f, dmi_string_nosave(dm, *(d - 1)));
}
+static void __init dmi_save_oem_devices(const struct dmi_header *dm) {
+ int bus, devfn, count;
+ const u8 *d = (u8 *)dm + 4;
+ char name[20];
+
+ /* Only handle HP extensions for now */
+ if (strcmp(dmi_ident[DMI_BIOS_VENDOR], "HP"))
+ return;
+
+ count = 1;
+ while ((d + 8) <= ((u8 *)dm + dm->length)) {
+ if ((*d == 0x00 && *(d + 1) == 0x00) ||
+ (*d == 0xff && *(d + 1) == 0xff))
+ goto next;
+
+ bus = *(d + 1);
+ devfn = *d;
+ sprintf(name, "Embedded NIC %d", count);
+ dmi_save_devslot(-1, 0, bus, devfn, name);
+
+next:
+ count++;
+ d += 8;
+ }
+}
+
/*
* 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
@@ -357,6 +383,9 @@ static void __init dmi_decode(const struct dmi_header *dm, void *dummy)
case 41: /* Onboard Devices Extended Information */
dmi_save_extended_devices(dm);
break;
+ case 209:
+ dmi_save_oem_devices(dm);
+ break;
}
}