diff options
-rw-r--r-- | src/drivers/wifi/generic/acpi.c | 18 | ||||
-rw-r--r-- | src/drivers/wifi/generic/generic.c | 26 | ||||
-rw-r--r-- | src/drivers/wifi/generic/smbios.c | 7 | ||||
-rw-r--r-- | src/drivers/wifi/generic/wifi_private.h | 9 |
4 files changed, 48 insertions, 12 deletions
diff --git a/src/drivers/wifi/generic/acpi.c b/src/drivers/wifi/generic/acpi.c index 2afd99e485..33862d9526 100644 --- a/src/drivers/wifi/generic/acpi.c +++ b/src/drivers/wifi/generic/acpi.c @@ -218,7 +218,7 @@ static void wifi_ssdt_write_properties(const struct device *dev, const char *sco dev_path(dev)); } -void wifi_generic_fill_ssdt(const struct device *dev) +void wifi_pcie_fill_ssdt(const struct device *dev) { const char *path; @@ -233,7 +233,7 @@ void wifi_generic_fill_ssdt(const struct device *dev) wifi_ssdt_write_properties(dev, path); } -const char *wifi_generic_acpi_name(const struct device *dev) +const char *wifi_pcie_acpi_name(const struct device *dev) { static char wifi_acpi_name[WIFI_ACPI_NAME_MAX_LEN]; @@ -242,3 +242,17 @@ const char *wifi_generic_acpi_name(const struct device *dev) (dev_path_encode(dev) & 0xff)); return wifi_acpi_name; } + +void wifi_cnvi_fill_ssdt(const struct device *dev) +{ + const char *path; + + if (!dev->enabled) + return; + + path = acpi_device_path(dev->bus->dev); + if (!path) + return; + + wifi_ssdt_write_properties(dev, path); +} diff --git a/src/drivers/wifi/generic/generic.c b/src/drivers/wifi/generic/generic.c index fcb7294ac8..809238e92c 100644 --- a/src/drivers/wifi/generic/generic.c +++ b/src/drivers/wifi/generic/generic.c @@ -15,18 +15,29 @@ static void wifi_pci_dev_init(struct device *dev) elog_add_event_wake(ELOG_WAKE_SOURCE_PME_WIFI, 0); } -struct device_operations wifi_generic_ops = { +struct device_operations wifi_pcie_ops = { .read_resources = pci_dev_read_resources, .set_resources = pci_dev_set_resources, .enable_resources = pci_dev_enable_resources, .init = wifi_pci_dev_init, .ops_pci = &pci_dev_ops_pci, #if CONFIG(HAVE_ACPI_TABLES) - .acpi_name = wifi_generic_acpi_name, - .acpi_fill_ssdt = wifi_generic_fill_ssdt, + .acpi_name = wifi_pcie_acpi_name, + .acpi_fill_ssdt = wifi_pcie_fill_ssdt, #endif #if CONFIG(GENERATE_SMBIOS_TABLES) - .get_smbios_data = smbios_write_wifi, + .get_smbios_data = smbios_write_wifi_pcie, +#endif +}; + +struct device_operations wifi_cnvi_ops = { + .read_resources = noop_read_resources, + .set_resources = noop_set_resources, +#if CONFIG(HAVE_ACPI_TABLES) + .acpi_fill_ssdt = wifi_cnvi_fill_ssdt, +#endif +#if CONFIG(GENERATE_SMBIOS_TABLES) + .get_smbios_data = smbios_write_wifi_cnvi, #endif }; @@ -37,7 +48,10 @@ static void wifi_generic_enable(struct device *dev) if (!config) return; - dev->ops = &wifi_generic_ops; + if (dev->path.type == DEVICE_PATH_PCI) + dev->ops = &wifi_pcie_ops; + else + dev->ops = &wifi_cnvi_ops; } struct chip_operations drivers_wifi_generic_ops = { @@ -104,7 +118,7 @@ static const unsigned short intel_pci_device_ids[] = { * `wifi_generic_ops`. */ static const struct pci_driver intel_wifi_pci_driver __pci_driver = { - .ops = &wifi_generic_ops, + .ops = &wifi_pcie_ops, .vendor = PCI_VENDOR_ID_INTEL, .devices = intel_pci_device_ids, }; diff --git a/src/drivers/wifi/generic/smbios.c b/src/drivers/wifi/generic/smbios.c index 0c1b976f00..a1a8e4f204 100644 --- a/src/drivers/wifi/generic/smbios.c +++ b/src/drivers/wifi/generic/smbios.c @@ -33,10 +33,15 @@ static int smbios_write_intel_wifi(struct device *dev, int *handle, unsigned lon return len; } -int smbios_write_wifi(struct device *dev, int *handle, unsigned long *current) +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 smbios_write_wifi_cnvi(struct device *dev, int *handle, unsigned long *current) +{ + return smbios_write_wifi_pcie(dev->bus->dev, handle, current); +} diff --git a/src/drivers/wifi/generic/wifi_private.h b/src/drivers/wifi/generic/wifi_private.h index 39cdfedf7c..4a2045db8d 100644 --- a/src/drivers/wifi/generic/wifi_private.h +++ b/src/drivers/wifi/generic/wifi_private.h @@ -3,9 +3,12 @@ #ifndef _WIFI_GENERIC_PRIVATE_H_ #define _WIFI_GENERIC_PRIVATE_H_ -int smbios_write_wifi(struct device *dev, int *handle, unsigned long *current); +int smbios_write_wifi_pcie(struct device *dev, int *handle, unsigned long *current); +int smbios_write_wifi_cnvi(struct device *dev, int *handle, unsigned long *current); -const char *wifi_generic_acpi_name(const struct device *dev); -void wifi_generic_fill_ssdt(const struct device *dev); +const char *wifi_pcie_acpi_name(const struct device *dev); +void wifi_pcie_fill_ssdt(const struct device *dev); + +void wifi_cnvi_fill_ssdt(const struct device *dev); #endif |