Furquan Shaikh has uploaded this change for review.

View Change

drivers/intel/wifi: Change to PCI driver only

Currently, drivers/intel/wifi is a PCI driver (provides `struct
pci_driver`) as well as a chip driver (provids `struct
chip_operations`). However, there is no need for a separate chip driver
for the WiFi device since drivers/wifi/generic already provides one.

Having two separate chip drivers makes it difficult to multi-source
WiFi devices and share the same firmware target without having to add
a probe property for each of these devices. This is unnecessary since
the WiFi driver in coreboot is primarily responsible for:
1. PCI resource allocation
2. ACPI SSDT node generation to expose wake property and SAR tables
3. SMBIOS table generation

For the most part, coreboot can perform the above operations without
really caring about the specifics of which WiFi device is being used
by the mainboard. Thus, this change drops the chip driver from
drivers/intel/wifi and retains only the PCI driver. The PCI driver is
retained for backward compatibility with boards that never utilized
the chip driver to support Intel WiFi device. For these devices, the
PCI driver helps perform the same operations as above (except exposing
the wake property) by utilizing the same `wifi_generic_ops` exposed by
drivers/wifi/generic.

BUG=b:169802515
BRANCH=zork

Change-Id: I780a7d1a87f387d5e01e6b35aac7cca31a2033ac
Signed-off-by: Furquan Shaikh <furquan@google.com>
---
M src/drivers/intel/wifi/Kconfig
D src/drivers/intel/wifi/chip.h
M src/drivers/intel/wifi/wifi.c
M src/drivers/wifi/generic/generic.c
4 files changed, 5 insertions(+), 95 deletions(-)

git pull ssh://review.coreboot.org:29418/coreboot refs/changes/36/46036/1
diff --git a/src/drivers/intel/wifi/Kconfig b/src/drivers/intel/wifi/Kconfig
index 83df822..5454e97 100644
--- a/src/drivers/intel/wifi/Kconfig
+++ b/src/drivers/intel/wifi/Kconfig
@@ -2,7 +2,7 @@
bool "Support Intel PCI-e WiFi adapters"
depends on PCI
default y if PCIEXP_PLUGIN_SUPPORT
- select DRIVERS_WIFI_GENERIC if HAVE_ACPI_TABLES
+ select DRIVERS_WIFI_GENERIC
help
When enabled, add identifiers in ACPI and SMBIOS tables to
make OS drivers work with certain Intel PCI-e WiFi chipsets.
diff --git a/src/drivers/intel/wifi/chip.h b/src/drivers/intel/wifi/chip.h
deleted file mode 100644
index 966573f..0000000
--- a/src/drivers/intel/wifi/chip.h
+++ /dev/null
@@ -1,10 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-
-#ifndef _INTEL_WIFI_CHIP_H_
-#define _INTEL_WIFI_CHIP_H_
-
-struct drivers_intel_wifi_config {
- unsigned int wake; /* Wake pin for ACPI _PRW */
-};
-
-#endif /* _INTEL_WIFI_CHIP_H_ */
diff --git a/src/drivers/intel/wifi/wifi.c b/src/drivers/intel/wifi/wifi.c
index 6010673..9674130 100644
--- a/src/drivers/intel/wifi/wifi.c
+++ b/src/drivers/intel/wifi/wifi.c
@@ -1,80 +1,7 @@
/* SPDX-License-Identifier: GPL-2.0-only */

-#include <device/device.h>
#include <device/pci.h>
-#include <device/pci_ops.h>
#include <device/pci_ids.h>
-#include <elog.h>
-#include <smbios.h>
-#include <string.h>
-#include "chip.h"
-#include "drivers/wifi/generic/chip.h"
-
-#if CONFIG(GENERATE_SMBIOS_TABLES)
-static int smbios_write_wifi(struct device *dev, int *handle,
- unsigned long *current)
-{
- struct smbios_type_intel_wifi {
- u8 type;
- u8 length;
- u16 handle;
- u8 str;
- u8 eos[2];
- } __packed;
-
- struct smbios_type_intel_wifi *t =
- (struct smbios_type_intel_wifi *)*current;
- int len = sizeof(struct smbios_type_intel_wifi);
-
- memset(t, 0, sizeof(struct smbios_type_intel_wifi));
- t->type = 0x85;
- t->length = len - 2;
- t->handle = *handle;
- /*
- * Intel wifi driver expects this string to be in the table 0x85
- * with PCI IDs enumerated below.
- */
- t->str = smbios_add_string(t->eos, "KHOIHGIUCCHHII");
-
- len = t->length + smbios_string_table_len(t->eos);
- *current += len;
- *handle += 1;
- return len;
-}
-#endif
-
-#if CONFIG(HAVE_ACPI_TABLES)
-static void intel_wifi_fill_ssdt(const struct device *dev)
-{
- struct drivers_intel_wifi_config *config = dev->chip_info;
- struct drivers_wifi_generic_config generic_config;
-
- if (config)
- generic_config.wake = config->wake;
-
- wifi_generic_fill_ssdt(dev, config ? &generic_config : NULL);
-}
-#endif
-
-static void wifi_pci_dev_init(struct device *dev)
-{
- pci_dev_log_wake(dev, ELOG_WAKE_SOURCE_PME_WIFI, 0);
-}
-
-struct device_operations device_ops = {
- .read_resources = pci_dev_read_resources,
- .set_resources = pci_dev_set_resources,
- .enable_resources = pci_dev_enable_resources,
- .init = wifi_pci_dev_init,
-#if CONFIG(GENERATE_SMBIOS_TABLES)
- .get_smbios_data = smbios_write_wifi,
-#endif
- .ops_pci = &pci_dev_ops_pci,
-#if CONFIG(HAVE_ACPI_TABLES)
- .acpi_name = wifi_generic_acpi_name,
- .acpi_fill_ssdt = intel_wifi_fill_ssdt,
-#endif
-};

static const unsigned short pci_device_ids[] = {
PCI_DEVICE_ID_1000_SERIES_WIFI,
@@ -128,18 +55,10 @@
0
};

+extern struct device_operations wifi_generic_ops;
+
static const struct pci_driver pch_intel_wifi __pci_driver = {
- .ops = &device_ops,
+ .ops = &wifi_generic_ops,
.vendor = PCI_VENDOR_ID_INTEL,
.devices = pci_device_ids,
};
-
-static void intel_wifi_enable(struct device *dev)
-{
- dev->ops = &device_ops;
-}
-
-struct chip_operations drivers_intel_wifi_ops = {
- CHIP_NAME("Intel WiFi")
- .enable_dev = intel_wifi_enable
-};
diff --git a/src/drivers/wifi/generic/generic.c b/src/drivers/wifi/generic/generic.c
index 0fb4dc5..b515f3c 100644
--- a/src/drivers/wifi/generic/generic.c
+++ b/src/drivers/wifi/generic/generic.c
@@ -6,6 +6,7 @@
#include <device/device.h>
#include <device/pci.h>
#include <device/pci_def.h>
+#include <device/pci_ids.h>
#include <elog.h>
#include <sar.h>
#include <smbios.h>

To view, visit change 46036. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-Change-Id: I780a7d1a87f387d5e01e6b35aac7cca31a2033ac
Gerrit-Change-Number: 46036
Gerrit-PatchSet: 1
Gerrit-Owner: Furquan Shaikh <furquan@google.com>
Gerrit-Reviewer: Patrick Rudolph <siro@das-labor.org>
Gerrit-MessageType: newchange