Skip to content

Commit

Permalink
wifi: brcmfmac: add per-vendor feature detection callback
Browse files Browse the repository at this point in the history
[ Upstream commit 14e1391 ]

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: 85da8f7 ("wifi: brcmfmac: Demote vendor-specific attach/detach messages to info")
Signed-off-by: Sasha Levin <sashal@kernel.org>
  • Loading branch information
Arend van Spriel authored and gregkh committed Apr 3, 2024
1 parent 7ea5de1 commit 1e4838c
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 0 deletions.
8 changes: 8 additions & 0 deletions drivers/net/wireless/broadcom/brcm80211/brcmfmac/bca/core.c
Expand Up @@ -7,6 +7,7 @@
#include <core.h>
#include <bus.h>
#include <fwvid.h>
#include <feature.h>

#include "vops.h"

Expand All @@ -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,
};
3 changes: 3 additions & 0 deletions drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.c
Expand Up @@ -13,6 +13,7 @@
#include "debug.h"
#include "fwil.h"
#include "fwil_types.h"
#include "fwvid.h"
#include "feature.h"
#include "common.h"

Expand Down Expand Up @@ -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,
Expand Down
12 changes: 12 additions & 0 deletions drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.h
Expand Up @@ -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 */
Expand Down Expand Up @@ -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_ */

0 comments on commit 1e4838c

Please sign in to comment.