Skip to content

Commit f74f1ec

Browse files
Arend van SprielKalle Valo
authored andcommitted
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
1 parent d6a5c56 commit f74f1ec

File tree

8 files changed

+105
-24
lines changed

8 files changed

+105
-24
lines changed

drivers/net/wireless/broadcom/brcm80211/brcmfmac/Makefile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ brcmfmac-$(CONFIG_DMI) += \
5151

5252
ifeq ($(CONFIG_BRCMFMAC),m)
5353
obj-m += wcc/
54+
obj-m += cyw/
5455
else
5556
brcmfmac-$(CONFIG_BRCMFMAC) += wcc/core.o
57+
brcmfmac-$(CONFIG_BRCMFMAC) += cyw/core.o
5658
endif

drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -959,36 +959,36 @@ int brcmf_sdiod_probe(struct brcmf_sdio_dev *sdiodev)
959959
return ret;
960960
}
961961

962-
#define BRCMF_SDIO_DEVICE(dev_id) \
962+
#define BRCMF_SDIO_DEVICE(dev_id, fw_vend) \
963963
{ \
964964
SDIO_DEVICE(SDIO_VENDOR_ID_BROADCOM, dev_id), \
965-
.driver_data = BRCMF_FWVENDOR_WCC \
965+
.driver_data = BRCMF_FWVENDOR_ ## fw_vend \
966966
}
967967

968968
/* devices we support, null terminated */
969969
static const struct sdio_device_id brcmf_sdmmc_ids[] = {
970-
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43143),
971-
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43241),
972-
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4329),
973-
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4330),
974-
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4334),
975-
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43340),
976-
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43341),
977-
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43362),
978-
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43364),
979-
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4335_4339),
980-
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4339),
981-
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43430),
982-
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4345),
983-
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43455),
984-
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4354),
985-
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4356),
986-
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4359),
987-
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_CYPRESS_4373),
988-
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_CYPRESS_43012),
989-
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_CYPRESS_43439),
990-
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_CYPRESS_43752),
991-
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_CYPRESS_89359),
970+
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43143, WCC),
971+
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43241, WCC),
972+
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4329, WCC),
973+
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4330, WCC),
974+
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4334, WCC),
975+
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43340, WCC),
976+
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43341, WCC),
977+
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43362, WCC),
978+
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43364, WCC),
979+
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4335_4339, WCC),
980+
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4339, WCC),
981+
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43430, WCC),
982+
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4345, WCC),
983+
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_43455, WCC),
984+
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4354, WCC),
985+
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4356, WCC),
986+
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4359, WCC),
987+
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_CYPRESS_4373, CYW),
988+
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_CYPRESS_43012, CYW),
989+
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_CYPRESS_43439, CYW),
990+
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_CYPRESS_43752, CYW),
991+
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_CYPRESS_89359, CYW),
992992
{ /* end: all zeroes */ }
993993
};
994994
MODULE_DEVICE_TABLE(sdio, brcmf_sdmmc_ids);

drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333

3434
enum brcmf_fwvendor {
3535
BRCMF_FWVENDOR_WCC,
36+
BRCMF_FWVENDOR_CYW,
3637
/* keep last */
3738
BRCMF_FWVENDOR_NUM,
3839
BRCMF_FWVENDOR_INVALID
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# SPDX-License-Identifier: ISC
2+
#
3+
# Copyright (c) 2022 Broadcom Corporation
4+
5+
ccflags-y += \
6+
-I $(srctree)/$(src) \
7+
-I $(srctree)/$(src)/.. \
8+
-I $(srctree)/$(src)/../../include
9+
10+
obj-m += brcmfmac-cyw.o
11+
brcmfmac-cyw-objs += \
12+
core.o module.o
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
// SPDX-License-Identifier: ISC
2+
/*
3+
* Copyright (c) 2022 Broadcom Corporation
4+
*/
5+
#include <linux/errno.h>
6+
#include <linux/types.h>
7+
#include <core.h>
8+
#include <bus.h>
9+
#include <fwvid.h>
10+
11+
#include "vops.h"
12+
13+
static int brcmf_cyw_attach(struct brcmf_pub *drvr)
14+
{
15+
pr_err("%s: executing\n", __func__);
16+
return 0;
17+
}
18+
19+
static void brcmf_cyw_detach(struct brcmf_pub *drvr)
20+
{
21+
pr_err("%s: executing\n", __func__);
22+
}
23+
24+
const struct brcmf_fwvid_ops brcmf_cyw_ops = {
25+
.attach = brcmf_cyw_attach,
26+
.detach = brcmf_cyw_detach,
27+
};
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// SPDX-License-Identifier: ISC
2+
/*
3+
* Copyright (c) 2022 Broadcom Corporation
4+
*/
5+
#include <linux/module.h>
6+
#include <bus.h>
7+
#include <core.h>
8+
#include <fwvid.h>
9+
10+
#include "vops.h"
11+
12+
static int __init brcmf_cyw_init(void)
13+
{
14+
return brcmf_fwvid_register_vendor(BRCMF_FWVENDOR_CYW, THIS_MODULE,
15+
&brcmf_cyw_ops);
16+
}
17+
18+
static void __exit brcmf_cyw_exit(void)
19+
{
20+
brcmf_fwvid_unregister_vendor(BRCMF_FWVENDOR_CYW, THIS_MODULE);
21+
}
22+
23+
MODULE_LICENSE("Dual BSD/GPL");
24+
25+
module_init(brcmf_cyw_init);
26+
module_exit(brcmf_cyw_exit);
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
/* SPDX-License-Identifier: ISC */
2+
/*
3+
* Copyright (c) 2022 Broadcom Corporation
4+
*/
5+
#ifndef _BRCMFMAC_CYW_VOPS_H
6+
#define _BRCMFMAC_CYW_VOPS_H
7+
8+
extern const struct brcmf_fwvid_ops brcmf_cyw_ops;
9+
#define CYW_VOPS (&brcmf_cyw_ops)
10+
11+
#endif /* _BRCMFMAC_CYW_VOPS_H */

drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include "fwvid.h"
2020

2121
#include "wcc/vops.h"
22+
#include "cyw/vops.h"
2223

2324
struct brcmf_fwvid_entry {
2425
const char *name;
@@ -50,6 +51,7 @@ static DEFINE_MUTEX(fwvid_list_lock);
5051

5152
static struct brcmf_fwvid_entry fwvid_list[BRCMF_FWVENDOR_NUM] = {
5253
FWVID_ENTRY_INIT(WCC, wcc),
54+
FWVID_ENTRY_INIT(CYW, cyw),
5355
};
5456

5557
#if IS_MODULE(CONFIG_BRCMFMAC)

0 commit comments

Comments
 (0)