aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/drivers/wifi/generic/acpi.c18
-rw-r--r--src/drivers/wifi/generic/generic.c26
-rw-r--r--src/drivers/wifi/generic/smbios.c7
-rw-r--r--src/drivers/wifi/generic/wifi_private.h9
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