Message ID | 20100528120644.GB24114@littleblue.us.dell.com |
---|---|
State | Not Applicable, archived |
Delegated to: | David Miller |
Headers | show |
* K, Narendra <Narendra_K@dell.com>: > > This patch from Alex Chiang exports onboard device information > as defined by SMBIOS type 209 for HP Proliants systems. Hi, Not sure if it really matters, but I'm no longer at HP and thus my email address below is dead. > From: Alex Chiang <achiang@hp.com> > > Some legacy platforms provide onboard device information in an > SMBIOS OEM- defined field, notably HP Proliants. [snip] > Signed-off-by: Alex Chiang <achiang@hp.com> I wrote this code when I was still at HP, so I suppose they should get the git commit "credit" for it, unless there's already a well-known convention of what to do when an email address changes. Thanks, /ac -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/firmware/dmi_scan.c b/drivers/firmware/dmi_scan.c index 7d8439b..291b876 100644 --- a/drivers/firmware/dmi_scan.c +++ b/drivers/firmware/dmi_scan.c @@ -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; } }