drivers/wifi/generic: Add support for CNVi dummy device ops
This change reorganizes drivers/wifi/generic to add a new device_operations structure for dummy CNVi device. This is done to make the organization of CNVi PCI device in devicetree consistent with all the other internal PCI devices of the SoC i.e. without a chip around the PCI device. Thus, with this change, CNVi entry in devicetree can be changed from: ``` chip drivers/wifi/generic register "wake" = "xxyyzz" device pci xx.y on end # CNVi PCI device end ``` to: ``` device pci xx.y on chip drivers/wifi/generic register "wake" = "xxyyzz" device generic 0 on end # Dummy CNVi device end end # CNVi PCI device ``` The helper functions for ACPI/SMBIOS generation are also accordingly updated to include _pcie_ and _cnvi_ in the function name. Change-Id: Ib3cb9ed9b81ff8d6ac85a9aaf57b641caaa2f907 Signed-off-by: Furquan Shaikh <furquan@google.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/46862 Reviewed-by: Duncan Laurie <dlaurie@chromium.org> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
parent
6017abbc2c
commit
d4367505f1
src/drivers/wifi/generic
|
@ -218,7 +218,7 @@ static void wifi_ssdt_write_properties(const struct device *dev, const char *sco
|
||||||
dev_path(dev));
|
dev_path(dev));
|
||||||
}
|
}
|
||||||
|
|
||||||
void wifi_generic_fill_ssdt(const struct device *dev)
|
void wifi_pcie_fill_ssdt(const struct device *dev)
|
||||||
{
|
{
|
||||||
const char *path;
|
const char *path;
|
||||||
|
|
||||||
|
@ -233,7 +233,7 @@ void wifi_generic_fill_ssdt(const struct device *dev)
|
||||||
wifi_ssdt_write_properties(dev, path);
|
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];
|
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));
|
(dev_path_encode(dev) & 0xff));
|
||||||
return wifi_acpi_name;
|
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);
|
||||||
|
}
|
||||||
|
|
|
@ -15,18 +15,29 @@ static void wifi_pci_dev_init(struct device *dev)
|
||||||
elog_add_event_wake(ELOG_WAKE_SOURCE_PME_WIFI, 0);
|
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,
|
.read_resources = pci_dev_read_resources,
|
||||||
.set_resources = pci_dev_set_resources,
|
.set_resources = pci_dev_set_resources,
|
||||||
.enable_resources = pci_dev_enable_resources,
|
.enable_resources = pci_dev_enable_resources,
|
||||||
.init = wifi_pci_dev_init,
|
.init = wifi_pci_dev_init,
|
||||||
.ops_pci = &pci_dev_ops_pci,
|
.ops_pci = &pci_dev_ops_pci,
|
||||||
#if CONFIG(HAVE_ACPI_TABLES)
|
#if CONFIG(HAVE_ACPI_TABLES)
|
||||||
.acpi_name = wifi_generic_acpi_name,
|
.acpi_name = wifi_pcie_acpi_name,
|
||||||
.acpi_fill_ssdt = wifi_generic_fill_ssdt,
|
.acpi_fill_ssdt = wifi_pcie_fill_ssdt,
|
||||||
#endif
|
#endif
|
||||||
#if CONFIG(GENERATE_SMBIOS_TABLES)
|
#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
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -37,7 +48,10 @@ static void wifi_generic_enable(struct device *dev)
|
||||||
if (!config)
|
if (!config)
|
||||||
return;
|
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 = {
|
struct chip_operations drivers_wifi_generic_ops = {
|
||||||
|
@ -104,7 +118,7 @@ static const unsigned short intel_pci_device_ids[] = {
|
||||||
* `wifi_generic_ops`.
|
* `wifi_generic_ops`.
|
||||||
*/
|
*/
|
||||||
static const struct pci_driver intel_wifi_pci_driver __pci_driver = {
|
static const struct pci_driver intel_wifi_pci_driver __pci_driver = {
|
||||||
.ops = &wifi_generic_ops,
|
.ops = &wifi_pcie_ops,
|
||||||
.vendor = PCI_VENDOR_ID_INTEL,
|
.vendor = PCI_VENDOR_ID_INTEL,
|
||||||
.devices = intel_pci_device_ids,
|
.devices = intel_pci_device_ids,
|
||||||
};
|
};
|
||||||
|
|
|
@ -33,10 +33,15 @@ static int smbios_write_intel_wifi(struct device *dev, int *handle, unsigned lon
|
||||||
return len;
|
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)
|
if (dev->vendor == PCI_VENDOR_ID_INTEL)
|
||||||
return smbios_write_intel_wifi(dev, handle, current);
|
return smbios_write_intel_wifi(dev, handle, current);
|
||||||
|
|
||||||
return 0;
|
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);
|
||||||
|
}
|
||||||
|
|
|
@ -3,9 +3,12 @@
|
||||||
#ifndef _WIFI_GENERIC_PRIVATE_H_
|
#ifndef _WIFI_GENERIC_PRIVATE_H_
|
||||||
#define _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);
|
const char *wifi_pcie_acpi_name(const struct device *dev);
|
||||||
void wifi_generic_fill_ssdt(const struct device *dev);
|
void wifi_pcie_fill_ssdt(const struct device *dev);
|
||||||
|
|
||||||
|
void wifi_cnvi_fill_ssdt(const struct device *dev);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue