wifi: brcmfmac: add firmware vendor info in driver info
In order to determine the vendor that released a firmware image for a specific device, the device table now sets the vendor identifier in driver info and it is stored in struct brcmf_bus::fwvid during probe. Reviewed-by: Hante Meuleman <hante.meuleman@broadcom.com> Reviewed-by: Pieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com> Reviewed-by: Franky Lin <franky.lin@broadcom.com> Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com> Signed-off-by: Kalle Valo <kvalo@kernel.org> Link: https://lore.kernel.org/r/20221129135446.151065-3-arend.vanspriel@broadcom.com
This commit is contained in:
parent
76821aad49
commit
da6d9c8ecd
@ -960,7 +960,10 @@ out:
|
||||
}
|
||||
|
||||
#define BRCMF_SDIO_DEVICE(dev_id) \
|
||||
{SDIO_DEVICE(SDIO_VENDOR_ID_BROADCOM, dev_id)}
|
||||
{ \
|
||||
SDIO_DEVICE(SDIO_VENDOR_ID_BROADCOM, dev_id), \
|
||||
.driver_data = BRCMF_FWVENDOR_WCC \
|
||||
}
|
||||
|
||||
/* devices we support, null terminated */
|
||||
static const struct sdio_device_id brcmf_sdmmc_ids[] = {
|
||||
@ -1051,6 +1054,7 @@ static int brcmf_ops_sdio_probe(struct sdio_func *func,
|
||||
sdiodev->bus_if = bus_if;
|
||||
bus_if->bus_priv.sdio = sdiodev;
|
||||
bus_if->proto_type = BRCMF_PROTO_BCDC;
|
||||
bus_if->fwvid = id->driver_data;
|
||||
dev_set_drvdata(&func->dev, bus_if);
|
||||
dev_set_drvdata(&sdiodev->func1->dev, bus_if);
|
||||
sdiodev->dev = &sdiodev->func1->dev;
|
||||
|
@ -31,6 +31,13 @@
|
||||
/* The maximum console interval value (5 mins) */
|
||||
#define MAX_CONSOLE_INTERVAL (5 * 60)
|
||||
|
||||
enum brcmf_fwvendor {
|
||||
BRCMF_FWVENDOR_WCC,
|
||||
/* keep last */
|
||||
BRCMF_FWVENDOR_NUM,
|
||||
BRCMF_FWVENDOR_INVALID
|
||||
};
|
||||
|
||||
/* The level of bus communication with the dongle */
|
||||
enum brcmf_bus_state {
|
||||
BRCMF_BUS_DOWN, /* Not ready for frame transfers */
|
||||
@ -144,9 +151,10 @@ struct brcmf_bus_stats {
|
||||
* @stats: statistics shared between common and bus layer.
|
||||
* @maxctl: maximum size for rxctl request message.
|
||||
* @chip: device identifier of the dongle chip.
|
||||
* @chiprev: revision of the dongle chip.
|
||||
* @fwvid: firmware vendor-support identifier of the device.
|
||||
* @always_use_fws_queue: bus wants use queue also when fwsignal is inactive.
|
||||
* @wowl_supported: is wowl supported by bus driver.
|
||||
* @chiprev: revision of the dongle chip.
|
||||
* @msgbuf: msgbuf protocol parameters provided by bus layer.
|
||||
*/
|
||||
struct brcmf_bus {
|
||||
@ -163,6 +171,7 @@ struct brcmf_bus {
|
||||
uint maxctl;
|
||||
u32 chip;
|
||||
u32 chiprev;
|
||||
enum brcmf_fwvendor fwvid;
|
||||
bool always_use_fws_queue;
|
||||
bool wowl_supported;
|
||||
|
||||
|
@ -2389,6 +2389,7 @@ brcmf_pcie_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||
bus->bus_priv.pcie = pcie_bus_dev;
|
||||
bus->ops = &brcmf_pcie_bus_ops;
|
||||
bus->proto_type = BRCMF_PROTO_MSGBUF;
|
||||
bus->fwvid = id->driver_data;
|
||||
bus->chip = devinfo->coreid;
|
||||
bus->wowl_supported = pci_pme_capable(pdev, PCI_D3hot);
|
||||
dev_set_drvdata(&pdev->dev, bus);
|
||||
@ -2570,11 +2571,20 @@ static const struct dev_pm_ops brcmf_pciedrvr_pm = {
|
||||
#endif /* CONFIG_PM */
|
||||
|
||||
|
||||
#define BRCMF_PCIE_DEVICE(dev_id) { BRCM_PCIE_VENDOR_ID_BROADCOM, dev_id,\
|
||||
PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_NETWORK_OTHER << 8, 0xffff00, 0 }
|
||||
#define BRCMF_PCIE_DEVICE_SUB(dev_id, subvend, subdev) { \
|
||||
BRCM_PCIE_VENDOR_ID_BROADCOM, dev_id,\
|
||||
subvend, subdev, PCI_CLASS_NETWORK_OTHER << 8, 0xffff00, 0 }
|
||||
#define BRCMF_PCIE_DEVICE(dev_id) \
|
||||
{ \
|
||||
BRCM_PCIE_VENDOR_ID_BROADCOM, (dev_id), \
|
||||
PCI_ANY_ID, PCI_ANY_ID, \
|
||||
PCI_CLASS_NETWORK_OTHER << 8, 0xffff00, \
|
||||
BRCMF_FWVENDOR_WCC \
|
||||
}
|
||||
#define BRCMF_PCIE_DEVICE_SUB(dev_id, subvend, subdev) \
|
||||
{ \
|
||||
BRCM_PCIE_VENDOR_ID_BROADCOM, (dev_id), \
|
||||
(subvend), (subdev), \
|
||||
PCI_CLASS_NETWORK_OTHER << 8, 0xffff00, \
|
||||
BRCMF_FWVENDOR_WCC \
|
||||
}
|
||||
|
||||
static const struct pci_device_id brcmf_pcie_devid_table[] = {
|
||||
BRCMF_PCIE_DEVICE(BRCM_PCIE_4350_DEVICE_ID),
|
||||
|
@ -1240,7 +1240,8 @@ brcmf_usb_prepare_fw_request(struct brcmf_usbdev_info *devinfo)
|
||||
return fwreq;
|
||||
}
|
||||
|
||||
static int brcmf_usb_probe_cb(struct brcmf_usbdev_info *devinfo)
|
||||
static int brcmf_usb_probe_cb(struct brcmf_usbdev_info *devinfo,
|
||||
enum brcmf_fwvendor fwvid)
|
||||
{
|
||||
struct brcmf_bus *bus = NULL;
|
||||
struct brcmf_usbdev *bus_pub = NULL;
|
||||
@ -1265,6 +1266,7 @@ static int brcmf_usb_probe_cb(struct brcmf_usbdev_info *devinfo)
|
||||
dev_set_drvdata(dev, bus);
|
||||
bus->ops = &brcmf_usb_bus_ops;
|
||||
bus->proto_type = BRCMF_PROTO_BCDC;
|
||||
bus->fwvid = fwvid;
|
||||
bus->always_use_fws_queue = true;
|
||||
#ifdef CONFIG_PM
|
||||
bus->wowl_supported = true;
|
||||
@ -1423,7 +1425,7 @@ brcmf_usb_probe(struct usb_interface *intf, const struct usb_device_id *id)
|
||||
else
|
||||
brcmf_dbg(USB, "Broadcom full speed USB WLAN interface detected\n");
|
||||
|
||||
ret = brcmf_usb_probe_cb(devinfo);
|
||||
ret = brcmf_usb_probe_cb(devinfo, id->driver_info);
|
||||
if (ret)
|
||||
goto fail;
|
||||
|
||||
@ -1511,14 +1513,23 @@ static int brcmf_usb_reset_resume(struct usb_interface *intf)
|
||||
return ret;
|
||||
}
|
||||
|
||||
#define BRCMF_USB_DEVICE(dev_id) \
|
||||
{ USB_DEVICE(BRCM_USB_VENDOR_ID_BROADCOM, dev_id) }
|
||||
#define BRCMF_USB_DEVICE(dev_id) \
|
||||
{ \
|
||||
USB_DEVICE(BRCM_USB_VENDOR_ID_BROADCOM, dev_id), \
|
||||
.driver_info = BRCMF_FWVENDOR_WCC \
|
||||
}
|
||||
|
||||
#define LINKSYS_USB_DEVICE(dev_id) \
|
||||
{ USB_DEVICE(BRCM_USB_VENDOR_ID_LINKSYS, dev_id) }
|
||||
#define LINKSYS_USB_DEVICE(dev_id) \
|
||||
{ \
|
||||
USB_DEVICE(BRCM_USB_VENDOR_ID_LINKSYS, dev_id), \
|
||||
.driver_info = BRCMF_FWVENDOR_WCC \
|
||||
}
|
||||
|
||||
#define CYPRESS_USB_DEVICE(dev_id) \
|
||||
{ USB_DEVICE(CY_USB_VENDOR_ID_CYPRESS, dev_id) }
|
||||
#define CYPRESS_USB_DEVICE(dev_id) \
|
||||
{ \
|
||||
USB_DEVICE(CY_USB_VENDOR_ID_CYPRESS, dev_id), \
|
||||
.driver_info = BRCMF_FWVENDOR_WCC \
|
||||
}
|
||||
|
||||
static const struct usb_device_id brcmf_usb_devid_table[] = {
|
||||
BRCMF_USB_DEVICE(BRCM_USB_43143_DEVICE_ID),
|
||||
|
Loading…
Reference in New Issue
Block a user