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
4 changed files with 49 additions and 15 deletions
|
@ -960,7 +960,10 @@ out:
|
||||||
}
|
}
|
||||||
|
|
||||||
#define BRCMF_SDIO_DEVICE(dev_id) \
|
#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 */
|
/* devices we support, null terminated */
|
||||||
static const struct sdio_device_id brcmf_sdmmc_ids[] = {
|
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;
|
sdiodev->bus_if = bus_if;
|
||||||
bus_if->bus_priv.sdio = sdiodev;
|
bus_if->bus_priv.sdio = sdiodev;
|
||||||
bus_if->proto_type = BRCMF_PROTO_BCDC;
|
bus_if->proto_type = BRCMF_PROTO_BCDC;
|
||||||
|
bus_if->fwvid = id->driver_data;
|
||||||
dev_set_drvdata(&func->dev, bus_if);
|
dev_set_drvdata(&func->dev, bus_if);
|
||||||
dev_set_drvdata(&sdiodev->func1->dev, bus_if);
|
dev_set_drvdata(&sdiodev->func1->dev, bus_if);
|
||||||
sdiodev->dev = &sdiodev->func1->dev;
|
sdiodev->dev = &sdiodev->func1->dev;
|
||||||
|
|
|
@ -31,6 +31,13 @@
|
||||||
/* The maximum console interval value (5 mins) */
|
/* The maximum console interval value (5 mins) */
|
||||||
#define MAX_CONSOLE_INTERVAL (5 * 60)
|
#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 */
|
/* The level of bus communication with the dongle */
|
||||||
enum brcmf_bus_state {
|
enum brcmf_bus_state {
|
||||||
BRCMF_BUS_DOWN, /* Not ready for frame transfers */
|
BRCMF_BUS_DOWN, /* Not ready for frame transfers */
|
||||||
|
@ -144,9 +151,10 @@ struct brcmf_bus_stats {
|
||||||
* @stats: statistics shared between common and bus layer.
|
* @stats: statistics shared between common and bus layer.
|
||||||
* @maxctl: maximum size for rxctl request message.
|
* @maxctl: maximum size for rxctl request message.
|
||||||
* @chip: device identifier of the dongle chip.
|
* @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.
|
* @always_use_fws_queue: bus wants use queue also when fwsignal is inactive.
|
||||||
* @wowl_supported: is wowl supported by bus driver.
|
* @wowl_supported: is wowl supported by bus driver.
|
||||||
* @chiprev: revision of the dongle chip.
|
|
||||||
* @msgbuf: msgbuf protocol parameters provided by bus layer.
|
* @msgbuf: msgbuf protocol parameters provided by bus layer.
|
||||||
*/
|
*/
|
||||||
struct brcmf_bus {
|
struct brcmf_bus {
|
||||||
|
@ -163,6 +171,7 @@ struct brcmf_bus {
|
||||||
uint maxctl;
|
uint maxctl;
|
||||||
u32 chip;
|
u32 chip;
|
||||||
u32 chiprev;
|
u32 chiprev;
|
||||||
|
enum brcmf_fwvendor fwvid;
|
||||||
bool always_use_fws_queue;
|
bool always_use_fws_queue;
|
||||||
bool wowl_supported;
|
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->bus_priv.pcie = pcie_bus_dev;
|
||||||
bus->ops = &brcmf_pcie_bus_ops;
|
bus->ops = &brcmf_pcie_bus_ops;
|
||||||
bus->proto_type = BRCMF_PROTO_MSGBUF;
|
bus->proto_type = BRCMF_PROTO_MSGBUF;
|
||||||
|
bus->fwvid = id->driver_data;
|
||||||
bus->chip = devinfo->coreid;
|
bus->chip = devinfo->coreid;
|
||||||
bus->wowl_supported = pci_pme_capable(pdev, PCI_D3hot);
|
bus->wowl_supported = pci_pme_capable(pdev, PCI_D3hot);
|
||||||
dev_set_drvdata(&pdev->dev, bus);
|
dev_set_drvdata(&pdev->dev, bus);
|
||||||
|
@ -2570,11 +2571,20 @@ static const struct dev_pm_ops brcmf_pciedrvr_pm = {
|
||||||
#endif /* CONFIG_PM */
|
#endif /* CONFIG_PM */
|
||||||
|
|
||||||
|
|
||||||
#define BRCMF_PCIE_DEVICE(dev_id) { BRCM_PCIE_VENDOR_ID_BROADCOM, dev_id,\
|
#define BRCMF_PCIE_DEVICE(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), \
|
||||||
BRCM_PCIE_VENDOR_ID_BROADCOM, dev_id,\
|
PCI_ANY_ID, PCI_ANY_ID, \
|
||||||
subvend, subdev, PCI_CLASS_NETWORK_OTHER << 8, 0xffff00, 0 }
|
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[] = {
|
static const struct pci_device_id brcmf_pcie_devid_table[] = {
|
||||||
BRCMF_PCIE_DEVICE(BRCM_PCIE_4350_DEVICE_ID),
|
BRCMF_PCIE_DEVICE(BRCM_PCIE_4350_DEVICE_ID),
|
||||||
|
|
|
@ -1240,7 +1240,8 @@ brcmf_usb_prepare_fw_request(struct brcmf_usbdev_info *devinfo)
|
||||||
return fwreq;
|
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_bus *bus = NULL;
|
||||||
struct brcmf_usbdev *bus_pub = 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);
|
dev_set_drvdata(dev, bus);
|
||||||
bus->ops = &brcmf_usb_bus_ops;
|
bus->ops = &brcmf_usb_bus_ops;
|
||||||
bus->proto_type = BRCMF_PROTO_BCDC;
|
bus->proto_type = BRCMF_PROTO_BCDC;
|
||||||
|
bus->fwvid = fwvid;
|
||||||
bus->always_use_fws_queue = true;
|
bus->always_use_fws_queue = true;
|
||||||
#ifdef CONFIG_PM
|
#ifdef CONFIG_PM
|
||||||
bus->wowl_supported = true;
|
bus->wowl_supported = true;
|
||||||
|
@ -1423,7 +1425,7 @@ brcmf_usb_probe(struct usb_interface *intf, const struct usb_device_id *id)
|
||||||
else
|
else
|
||||||
brcmf_dbg(USB, "Broadcom full speed USB WLAN interface detected\n");
|
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)
|
if (ret)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
|
@ -1511,14 +1513,23 @@ static int brcmf_usb_reset_resume(struct usb_interface *intf)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define BRCMF_USB_DEVICE(dev_id) \
|
#define BRCMF_USB_DEVICE(dev_id) \
|
||||||
{ USB_DEVICE(BRCM_USB_VENDOR_ID_BROADCOM, dev_id) }
|
{ \
|
||||||
|
USB_DEVICE(BRCM_USB_VENDOR_ID_BROADCOM, dev_id), \
|
||||||
|
.driver_info = BRCMF_FWVENDOR_WCC \
|
||||||
|
}
|
||||||
|
|
||||||
#define LINKSYS_USB_DEVICE(dev_id) \
|
#define LINKSYS_USB_DEVICE(dev_id) \
|
||||||
{ USB_DEVICE(BRCM_USB_VENDOR_ID_LINKSYS, dev_id) }
|
{ \
|
||||||
|
USB_DEVICE(BRCM_USB_VENDOR_ID_LINKSYS, dev_id), \
|
||||||
|
.driver_info = BRCMF_FWVENDOR_WCC \
|
||||||
|
}
|
||||||
|
|
||||||
#define CYPRESS_USB_DEVICE(dev_id) \
|
#define CYPRESS_USB_DEVICE(dev_id) \
|
||||||
{ USB_DEVICE(CY_USB_VENDOR_ID_CYPRESS, 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[] = {
|
static const struct usb_device_id brcmf_usb_devid_table[] = {
|
||||||
BRCMF_USB_DEVICE(BRCM_USB_43143_DEVICE_ID),
|
BRCMF_USB_DEVICE(BRCM_USB_43143_DEVICE_ID),
|
||||||
|
|
Loading…
Add table
Reference in a new issue