wifi: brcmfmac: add support for Cypress firmware api
Cypress uses the brcmfmac driver and releases firmware which will likely diverge over time (or already has). So adding support for handling that. 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-5-arend.vanspriel@broadcom.com
This commit is contained in:
parent
d6a5c56221
commit
f74f1ec22d
@ -51,6 +51,8 @@ brcmfmac-$(CONFIG_DMI) += \
|
||||
|
||||
ifeq ($(CONFIG_BRCMFMAC),m)
|
||||
obj-m += wcc/
|
||||
obj-m += cyw/
|
||||
else
|
||||
brcmfmac-$(CONFIG_BRCMFMAC) += wcc/core.o
|
||||
brcmfmac-$(CONFIG_BRCMFMAC) += cyw/core.o
|
||||
endif
|
||||
|
@ -959,36 +959,36 @@ out:
|
||||
return ret;
|
||||
}
|
||||
|
||||
#define BRCMF_SDIO_DEVICE(dev_id) \
|
||||
#define BRCMF_SDIO_DEVICE(dev_id, fw_vend) \
|
||||
{ \
|
||||
SDIO_DEVICE(SDIO_VENDOR_ID_BROADCOM, dev_id), \
|
||||
.driver_data = BRCMF_FWVENDOR_WCC \
|
||||
.driver_data = BRCMF_FWVENDOR_ ## fw_vend \
|
||||
}
|
||||
|
||||
/* devices we support, null terminated */
|
||||
static const struct sdio_device_id brcmf_sdmmc_ids[] = {
|
||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43143),
|
||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43241),
|
||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4329),
|
||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4330),
|
||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4334),
|
||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43340),
|
||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43341),
|
||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43362),
|
||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43364),
|
||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4335_4339),
|
||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4339),
|
||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43430),
|
||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4345),
|
||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43455),
|
||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4354),
|
||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4356),
|
||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4359),
|
||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_CYPRESS_4373),
|
||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_CYPRESS_43012),
|
||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_CYPRESS_43439),
|
||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_CYPRESS_43752),
|
||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_CYPRESS_89359),
|
||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43143, WCC),
|
||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43241, WCC),
|
||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4329, WCC),
|
||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4330, WCC),
|
||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4334, WCC),
|
||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43340, WCC),
|
||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43341, WCC),
|
||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43362, WCC),
|
||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43364, WCC),
|
||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4335_4339, WCC),
|
||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4339, WCC),
|
||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43430, WCC),
|
||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4345, WCC),
|
||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43455, WCC),
|
||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4354, WCC),
|
||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4356, WCC),
|
||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4359, WCC),
|
||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_CYPRESS_4373, CYW),
|
||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_CYPRESS_43012, CYW),
|
||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_CYPRESS_43439, CYW),
|
||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_CYPRESS_43752, CYW),
|
||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_CYPRESS_89359, CYW),
|
||||
{ /* end: all zeroes */ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(sdio, brcmf_sdmmc_ids);
|
||||
|
@ -33,6 +33,7 @@
|
||||
|
||||
enum brcmf_fwvendor {
|
||||
BRCMF_FWVENDOR_WCC,
|
||||
BRCMF_FWVENDOR_CYW,
|
||||
/* keep last */
|
||||
BRCMF_FWVENDOR_NUM,
|
||||
BRCMF_FWVENDOR_INVALID
|
||||
|
@ -0,0 +1,12 @@
|
||||
# SPDX-License-Identifier: ISC
|
||||
#
|
||||
# Copyright (c) 2022 Broadcom Corporation
|
||||
|
||||
ccflags-y += \
|
||||
-I $(srctree)/$(src) \
|
||||
-I $(srctree)/$(src)/.. \
|
||||
-I $(srctree)/$(src)/../../include
|
||||
|
||||
obj-m += brcmfmac-cyw.o
|
||||
brcmfmac-cyw-objs += \
|
||||
core.o module.o
|
27
drivers/net/wireless/broadcom/brcm80211/brcmfmac/cyw/core.c
Normal file
27
drivers/net/wireless/broadcom/brcm80211/brcmfmac/cyw/core.c
Normal file
@ -0,0 +1,27 @@
|
||||
// SPDX-License-Identifier: ISC
|
||||
/*
|
||||
* Copyright (c) 2022 Broadcom Corporation
|
||||
*/
|
||||
#include <linux/errno.h>
|
||||
#include <linux/types.h>
|
||||
#include <core.h>
|
||||
#include <bus.h>
|
||||
#include <fwvid.h>
|
||||
|
||||
#include "vops.h"
|
||||
|
||||
static int brcmf_cyw_attach(struct brcmf_pub *drvr)
|
||||
{
|
||||
pr_err("%s: executing\n", __func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void brcmf_cyw_detach(struct brcmf_pub *drvr)
|
||||
{
|
||||
pr_err("%s: executing\n", __func__);
|
||||
}
|
||||
|
||||
const struct brcmf_fwvid_ops brcmf_cyw_ops = {
|
||||
.attach = brcmf_cyw_attach,
|
||||
.detach = brcmf_cyw_detach,
|
||||
};
|
@ -0,0 +1,26 @@
|
||||
// SPDX-License-Identifier: ISC
|
||||
/*
|
||||
* Copyright (c) 2022 Broadcom Corporation
|
||||
*/
|
||||
#include <linux/module.h>
|
||||
#include <bus.h>
|
||||
#include <core.h>
|
||||
#include <fwvid.h>
|
||||
|
||||
#include "vops.h"
|
||||
|
||||
static int __init brcmf_cyw_init(void)
|
||||
{
|
||||
return brcmf_fwvid_register_vendor(BRCMF_FWVENDOR_CYW, THIS_MODULE,
|
||||
&brcmf_cyw_ops);
|
||||
}
|
||||
|
||||
static void __exit brcmf_cyw_exit(void)
|
||||
{
|
||||
brcmf_fwvid_unregister_vendor(BRCMF_FWVENDOR_CYW, THIS_MODULE);
|
||||
}
|
||||
|
||||
MODULE_LICENSE("Dual BSD/GPL");
|
||||
|
||||
module_init(brcmf_cyw_init);
|
||||
module_exit(brcmf_cyw_exit);
|
11
drivers/net/wireless/broadcom/brcm80211/brcmfmac/cyw/vops.h
Normal file
11
drivers/net/wireless/broadcom/brcm80211/brcmfmac/cyw/vops.h
Normal file
@ -0,0 +1,11 @@
|
||||
/* SPDX-License-Identifier: ISC */
|
||||
/*
|
||||
* Copyright (c) 2022 Broadcom Corporation
|
||||
*/
|
||||
#ifndef _BRCMFMAC_CYW_VOPS_H
|
||||
#define _BRCMFMAC_CYW_VOPS_H
|
||||
|
||||
extern const struct brcmf_fwvid_ops brcmf_cyw_ops;
|
||||
#define CYW_VOPS (&brcmf_cyw_ops)
|
||||
|
||||
#endif /* _BRCMFMAC_CYW_VOPS_H */
|
@ -19,6 +19,7 @@
|
||||
#include "fwvid.h"
|
||||
|
||||
#include "wcc/vops.h"
|
||||
#include "cyw/vops.h"
|
||||
|
||||
struct brcmf_fwvid_entry {
|
||||
const char *name;
|
||||
@ -50,6 +51,7 @@ static DEFINE_MUTEX(fwvid_list_lock);
|
||||
|
||||
static struct brcmf_fwvid_entry fwvid_list[BRCMF_FWVENDOR_NUM] = {
|
||||
FWVID_ENTRY_INIT(WCC, wcc),
|
||||
FWVID_ENTRY_INIT(CYW, cyw),
|
||||
};
|
||||
|
||||
#if IS_MODULE(CONFIG_BRCMFMAC)
|
||||
|
Loading…
Reference in New Issue
Block a user