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.compull/520/merge
parent
d6a5c56221
commit
f74f1ec22d
|
|
@ -51,6 +51,8 @@ brcmfmac-$(CONFIG_DMI) += \
|
||||||
|
|
||||||
ifeq ($(CONFIG_BRCMFMAC),m)
|
ifeq ($(CONFIG_BRCMFMAC),m)
|
||||||
obj-m += wcc/
|
obj-m += wcc/
|
||||||
|
obj-m += cyw/
|
||||||
else
|
else
|
||||||
brcmfmac-$(CONFIG_BRCMFMAC) += wcc/core.o
|
brcmfmac-$(CONFIG_BRCMFMAC) += wcc/core.o
|
||||||
|
brcmfmac-$(CONFIG_BRCMFMAC) += cyw/core.o
|
||||||
endif
|
endif
|
||||||
|
|
|
||||||
|
|
@ -959,36 +959,36 @@ out:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define BRCMF_SDIO_DEVICE(dev_id) \
|
#define BRCMF_SDIO_DEVICE(dev_id, fw_vend) \
|
||||||
{ \
|
{ \
|
||||||
SDIO_DEVICE(SDIO_VENDOR_ID_BROADCOM, dev_id), \
|
SDIO_DEVICE(SDIO_VENDOR_ID_BROADCOM, dev_id), \
|
||||||
.driver_data = BRCMF_FWVENDOR_WCC \
|
.driver_data = BRCMF_FWVENDOR_ ## fw_vend \
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 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[] = {
|
||||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43143),
|
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43143, WCC),
|
||||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43241),
|
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43241, WCC),
|
||||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4329),
|
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4329, WCC),
|
||||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4330),
|
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4330, WCC),
|
||||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4334),
|
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4334, WCC),
|
||||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43340),
|
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43340, WCC),
|
||||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43341),
|
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43341, WCC),
|
||||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43362),
|
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43362, WCC),
|
||||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43364),
|
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43364, WCC),
|
||||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4335_4339),
|
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4335_4339, WCC),
|
||||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4339),
|
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4339, WCC),
|
||||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43430),
|
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43430, WCC),
|
||||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4345),
|
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4345, WCC),
|
||||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43455),
|
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43455, WCC),
|
||||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4354),
|
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4354, WCC),
|
||||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4356),
|
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4356, WCC),
|
||||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4359),
|
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4359, WCC),
|
||||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_CYPRESS_4373),
|
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_CYPRESS_4373, CYW),
|
||||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_CYPRESS_43012),
|
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_CYPRESS_43012, CYW),
|
||||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_CYPRESS_43439),
|
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_CYPRESS_43439, CYW),
|
||||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_CYPRESS_43752),
|
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_CYPRESS_43752, CYW),
|
||||||
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_CYPRESS_89359),
|
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_CYPRESS_89359, CYW),
|
||||||
{ /* end: all zeroes */ }
|
{ /* end: all zeroes */ }
|
||||||
};
|
};
|
||||||
MODULE_DEVICE_TABLE(sdio, brcmf_sdmmc_ids);
|
MODULE_DEVICE_TABLE(sdio, brcmf_sdmmc_ids);
|
||||||
|
|
|
||||||
|
|
@ -33,6 +33,7 @@
|
||||||
|
|
||||||
enum brcmf_fwvendor {
|
enum brcmf_fwvendor {
|
||||||
BRCMF_FWVENDOR_WCC,
|
BRCMF_FWVENDOR_WCC,
|
||||||
|
BRCMF_FWVENDOR_CYW,
|
||||||
/* keep last */
|
/* keep last */
|
||||||
BRCMF_FWVENDOR_NUM,
|
BRCMF_FWVENDOR_NUM,
|
||||||
BRCMF_FWVENDOR_INVALID
|
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
|
||||||
|
|
@ -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);
|
||||||
|
|
@ -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 "fwvid.h"
|
||||||
|
|
||||||
#include "wcc/vops.h"
|
#include "wcc/vops.h"
|
||||||
|
#include "cyw/vops.h"
|
||||||
|
|
||||||
struct brcmf_fwvid_entry {
|
struct brcmf_fwvid_entry {
|
||||||
const char *name;
|
const char *name;
|
||||||
|
|
@ -50,6 +51,7 @@ static DEFINE_MUTEX(fwvid_list_lock);
|
||||||
|
|
||||||
static struct brcmf_fwvid_entry fwvid_list[BRCMF_FWVENDOR_NUM] = {
|
static struct brcmf_fwvid_entry fwvid_list[BRCMF_FWVENDOR_NUM] = {
|
||||||
FWVID_ENTRY_INIT(WCC, wcc),
|
FWVID_ENTRY_INIT(WCC, wcc),
|
||||||
|
FWVID_ENTRY_INIT(CYW, cyw),
|
||||||
};
|
};
|
||||||
|
|
||||||
#if IS_MODULE(CONFIG_BRCMFMAC)
|
#if IS_MODULE(CONFIG_BRCMFMAC)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue