| From 2c23c9467212ea3bc8ead44d0ed10b70b2cdeeb4 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Wed, 3 Jan 2024 10:57:02 +0100 |
| Subject: wifi: brcmfmac: add per-vendor feature detection callback |
| |
| From: Arend van Spriel <arend.vanspriel@broadcom.com> |
| |
| [ Upstream commit 14e1391b71027948cdbacdbea4bf8858c2068eb7 ] |
| |
| Adding a .feat_attach() callback allowing per-vendor overrides |
| of the driver feature flags. In this patch the callback is only |
| provided by BCA vendor to disable SAE feature as it has not been |
| confirmed yet. BCA chips generally do not have the in-driver |
| supplicant (idsup) feature so they rely on NL80211_CMD_EXTERNAL_AUTH |
| to trigger user-space authentication. |
| |
| Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com> |
| Signed-off-by: Kalle Valo <kvalo@kernel.org> |
| Link: https://msgid.link/20240103095704.135651-3-arend.vanspriel@broadcom.com |
| Stable-dep-of: 85da8f71aaa7 ("wifi: brcmfmac: Demote vendor-specific attach/detach messages to info") |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| .../wireless/broadcom/brcm80211/brcmfmac/bca/core.c | 8 ++++++++ |
| .../wireless/broadcom/brcm80211/brcmfmac/feature.c | 3 +++ |
| .../net/wireless/broadcom/brcm80211/brcmfmac/fwvid.h | 12 ++++++++++++ |
| 3 files changed, 23 insertions(+) |
| |
| diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bca/core.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bca/core.c |
| index ac3a36fa3640c..a5d9ac5e67638 100644 |
| --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bca/core.c |
| +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bca/core.c |
| @@ -7,6 +7,7 @@ |
| #include <core.h> |
| #include <bus.h> |
| #include <fwvid.h> |
| +#include <feature.h> |
| |
| #include "vops.h" |
| |
| @@ -21,7 +22,14 @@ static void brcmf_bca_detach(struct brcmf_pub *drvr) |
| pr_err("%s: executing\n", __func__); |
| } |
| |
| +static void brcmf_bca_feat_attach(struct brcmf_if *ifp) |
| +{ |
| + /* SAE support not confirmed so disabling for now */ |
| + ifp->drvr->feat_flags &= ~BIT(BRCMF_FEAT_SAE); |
| +} |
| + |
| const struct brcmf_fwvid_ops brcmf_bca_ops = { |
| .attach = brcmf_bca_attach, |
| .detach = brcmf_bca_detach, |
| + .feat_attach = brcmf_bca_feat_attach, |
| }; |
| diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.c |
| index 6d10c9efbe93d..909a34a1ab503 100644 |
| --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.c |
| +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.c |
| @@ -13,6 +13,7 @@ |
| #include "debug.h" |
| #include "fwil.h" |
| #include "fwil_types.h" |
| +#include "fwvid.h" |
| #include "feature.h" |
| #include "common.h" |
| |
| @@ -339,6 +340,8 @@ void brcmf_feat_attach(struct brcmf_pub *drvr) |
| brcmf_feat_iovar_int_get(ifp, BRCMF_FEAT_FWSUP, "sup_wpa"); |
| brcmf_feat_iovar_int_get(ifp, BRCMF_FEAT_SCAN_V2, "scan_ver"); |
| |
| + brcmf_fwvid_feat_attach(ifp); |
| + |
| if (drvr->settings->feature_disable) { |
| brcmf_dbg(INFO, "Features: 0x%02x, disable: 0x%02x\n", |
| ifp->drvr->feat_flags, |
| diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.h |
| index 43df58bb70ad3..17fbdbb76f51b 100644 |
| --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.h |
| +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.h |
| @@ -8,10 +8,12 @@ |
| #include "firmware.h" |
| |
| struct brcmf_pub; |
| +struct brcmf_if; |
| |
| struct brcmf_fwvid_ops { |
| int (*attach)(struct brcmf_pub *drvr); |
| void (*detach)(struct brcmf_pub *drvr); |
| + void (*feat_attach)(struct brcmf_if *ifp); |
| }; |
| |
| /* exported functions */ |
| @@ -44,4 +46,14 @@ static inline void brcmf_fwvid_detach(struct brcmf_pub *drvr) |
| brcmf_fwvid_detach_ops(drvr); |
| } |
| |
| +static inline void brcmf_fwvid_feat_attach(struct brcmf_if *ifp) |
| +{ |
| + const struct brcmf_fwvid_ops *vops = ifp->drvr->vops; |
| + |
| + if (!vops->feat_attach) |
| + return; |
| + |
| + vops->feat_attach(ifp); |
| +} |
| + |
| #endif /* FWVID_H_ */ |
| -- |
| 2.43.0 |
| |