diff options
-rw-r--r-- | src/arch/x86/smbios.c | 14 | ||||
-rw-r--r-- | src/drivers/ipmi/ipmi_kcs_ops.c | 2 | ||||
-rw-r--r-- | src/drivers/wifi/generic/smbios.c | 10 | ||||
-rw-r--r-- | src/include/smbios.h | 3 |
4 files changed, 23 insertions, 6 deletions
diff --git a/src/arch/x86/smbios.c b/src/arch/x86/smbios.c index eebfd72079..967883a61e 100644 --- a/src/arch/x86/smbios.c +++ b/src/arch/x86/smbios.c @@ -1213,6 +1213,16 @@ static int smbios_generate_type9_from_devtree(struct device *dev, int *handle, dev->path.pci.devfn); } +int get_smbios_data(struct device *dev, int *handle, unsigned long *current) +{ + int len = 0; + + len += smbios_generate_type9_from_devtree(dev, handle, current); + len += smbios_generate_type41_from_devtree(dev, handle, current); + + return len; +} + static int smbios_walk_device_tree(struct device *tree, int *handle, unsigned long *current) { struct device *dev; @@ -1222,9 +1232,9 @@ static int smbios_walk_device_tree(struct device *tree, int *handle, unsigned lo if (dev->enabled && dev->ops && dev->ops->get_smbios_data) { printk(BIOS_INFO, "%s (%s)\n", dev_path(dev), dev_name(dev)); len += dev->ops->get_smbios_data(dev, handle, current); + } else { + len += get_smbios_data(dev, handle, current); } - len += smbios_generate_type9_from_devtree(dev, handle, current); - len += smbios_generate_type41_from_devtree(dev, handle, current); } return len; } diff --git a/src/drivers/ipmi/ipmi_kcs_ops.c b/src/drivers/ipmi/ipmi_kcs_ops.c index 9d1cac8715..ff187663c9 100644 --- a/src/drivers/ipmi/ipmi_kcs_ops.c +++ b/src/drivers/ipmi/ipmi_kcs_ops.c @@ -386,6 +386,8 @@ static int ipmi_smbios_data(struct device *dev, int *handle, register_spacing, 0); // no IRQ + len += get_smbios_data(dev, handle, current); + return len; } #endif diff --git a/src/drivers/wifi/generic/smbios.c b/src/drivers/wifi/generic/smbios.c index 793349dad0..db22de9793 100644 --- a/src/drivers/wifi/generic/smbios.c +++ b/src/drivers/wifi/generic/smbios.c @@ -9,6 +9,9 @@ static int smbios_write_intel_wifi(struct device *dev, int *handle, unsigned long *current) { + if (dev->vendor != PCI_VENDOR_ID_INTEL) + return 0; + struct smbios_type_intel_wifi { struct smbios_header header; u8 str; @@ -29,10 +32,9 @@ static int smbios_write_intel_wifi(struct device *dev, int *handle, unsigned lon int smbios_write_wifi_pcie(struct device *dev, int *handle, unsigned long *current) { - if (dev->vendor == PCI_VENDOR_ID_INTEL) - return smbios_write_intel_wifi(dev, handle, current); - - return 0; + int len = smbios_write_intel_wifi(dev, handle, current); + len += get_smbios_data(dev, handle, current); + return len; } int smbios_write_wifi_cnvi(struct device *dev, int *handle, unsigned long *current) diff --git a/src/include/smbios.h b/src/include/smbios.h index 0f1386a963..0b24c15413 100644 --- a/src/include/smbios.h +++ b/src/include/smbios.h @@ -35,6 +35,9 @@ int smbios_write_type41(unsigned long *current, int *handle, const char *name, u8 instance, u16 segment, u8 bus, u8 device, u8 function, u8 device_type); +struct device; +int get_smbios_data(struct device *dev, int *handle, unsigned long *current); + const char *smbios_system_manufacturer(void); const char *smbios_system_product_name(void); const char *smbios_system_serial_number(void); |