* [PATCH] wifi: brcmfmac: Set extsae_pwe parameter to Infineon firmware in SAP mode
@ 2026-08-31 6:12 GirishBukkasagara.Rudrappa
2026-09-14 20:03 ` Arend van Spriel
2026-09-17 17:37 ` [PATCH v2] " GirishBukkasagara.Rudrappa
0 siblings, 2 replies; 6+ messages in thread
From: GirishBukkasagara.Rudrappa @ 2026-08-31 6:12 UTC (permalink / raw)
To: linux-wireless
Cc: arend.vanspriel, johannes.berg, brcm80211, wlan-kernel-dev-list,
bogdan.nicolae, Girish Rudrappa
From: Girish Rudrappa <girishbukkasagara.rudrappa@infineon.com>
Parse and configure the extsae_pwe according to the information from the
supported rate/extended support rate and RSNX IE
Parse the beacon IEs on start_ap() and set the extsae_pwe iovar.
Set sae_pwe to 2 when the RSNX IE advertises H2E, 1 when an H2E-only
membership selector is present, 0 otherwise.
The changes are tested with FW Version 7.45.286
Signed-off-by: Girish Rudrappa <girishbukkasagara.rudrappa@infineon.com>
---
.../broadcom/brcm80211/brcmfmac/cfg80211.c | 77 +++++++++++++++++++
.../broadcom/brcm80211/brcmfmac/cyw/core.c | 6 ++
.../broadcom/brcm80211/brcmfmac/fwvid.h | 11 +++
3 files changed, 94 insertions(+)
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
index 872c48806d09..192ea19b216b 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
@@ -5099,6 +5099,79 @@ brcmf_config_ap_mgmt_ie(struct brcmf_cfg80211_vif *vif,
return err;
}
+static s32
+brcmf_parse_configure_sae_pwe(struct brcmf_if *ifp,
+ struct cfg80211_ap_settings *settings)
+{
+ const struct brcmf_tlv *rsnx_ie;
+ const struct brcmf_tlv *ext_rate_ie;
+ const struct brcmf_tlv *supp_rate_ie;
+ u8 ie_len, i;
+ u32 wpa_auth = 0;
+ u32 sae_pwe = 0; /* 0 = Hunting-and-Pecking only, 1 = H2E only, 2 = both */
+ s32 err = 0;
+
+ if (!brcmf_feat_is_enabled(ifp, BRCMF_FEAT_SAE_EXT))
+ return 0;
+
+ err = brcmf_fil_bsscfg_int_get(ifp, "wpa_auth", &wpa_auth);
+ if (err || (wpa_auth & WPA3_AUTH_SAE_PSK) == 0) {
+ brcmf_dbg(INFO, "wpa_auth is not SAE:0x%x\n", wpa_auth);
+ return 0;
+ }
+
+ rsnx_ie = brcmf_parse_tlvs((u8 *)settings->beacon.tail,
+ settings->beacon.tail_len, WLAN_EID_RSNX);
+
+ if (rsnx_ie && rsnx_ie->len &&
+ (rsnx_ie->data[0] & WLAN_RSNX_CAPA_SAE_H2E))
+ sae_pwe = 2;
+
+ /* Found rsnx_ie with SAE_H2E, check the bss selector to know if it is
+ * a H2E only.
+ */
+
+ if (sae_pwe == 2) {
+ supp_rate_ie = brcmf_parse_tlvs((u8 *)settings->beacon.head,
+ settings->beacon.head_len,
+ WLAN_EID_SUPP_RATES);
+ ext_rate_ie = brcmf_parse_tlvs((u8 *)settings->beacon.tail,
+ settings->beacon.tail_len,
+ WLAN_EID_EXT_SUPP_RATES);
+ if (ext_rate_ie) {
+ ie_len = ext_rate_ie->len;
+ for (i = 0; i < ie_len; i++) {
+ if ((ext_rate_ie->data[i] & 0x7f) ==
+ BSS_MEMBERSHIP_SELECTOR_SAE_H2E) {
+ sae_pwe = 1;
+ break;
+ }
+ }
+ }
+
+ /* If we cannot found H2E only selector in ext_supp_rate IE,
+ * traversal supp_rate IE to make sure it really doesn't exist
+ */
+ if (sae_pwe == 2 && supp_rate_ie) {
+ ie_len = supp_rate_ie->len;
+ for (i = 0; i < ie_len; i++) {
+ if ((supp_rate_ie->data[i] & 0x7f) ==
+ BSS_MEMBERSHIP_SELECTOR_SAE_H2E) {
+ sae_pwe = 1;
+ break;
+ }
+ }
+ }
+ }
+
+ err = brcmf_fwvid_configure_sae_pwe(ifp, sae_pwe);
+ if (err == -EOPNOTSUPP)
+ return 0;
+
+ brcmf_dbg(TRACE, "extsae_pwe=%u\n", sae_pwe);
+ return err;
+}
+
static s32
brcmf_parse_configure_security(struct brcmf_if *ifp,
struct cfg80211_ap_settings *settings,
@@ -5132,6 +5205,10 @@ brcmf_parse_configure_security(struct brcmf_if *ifp,
err = brcmf_configure_wpaie(ifp, tmp_ie, true);
if (err < 0)
return err;
+
+ err = brcmf_parse_configure_sae_pwe(ifp, settings);
+ if (err < 0)
+ return err;
}
} else {
brcmf_dbg(TRACE, "No WPA(2) IEs found\n");
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cyw/core.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cyw/core.c
index 545eb9aae966..0443207dfe00 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cyw/core.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cyw/core.c
@@ -367,10 +367,16 @@ static void brcmf_cyw_register_event_handlers(struct brcmf_pub *drvr)
brcmf_notify_mgmt_tx_status);
}
+static int brcmf_cyw_configure_sae_pwe(struct brcmf_if *ifp, u32 sae_pwe)
+{
+ return brcmf_fil_iovar_int_set(ifp, "extsae_pwe", sae_pwe);
+}
+
const struct brcmf_fwvid_ops brcmf_cyw_ops = {
.set_sae_password = brcmf_cyw_set_sae_pwd,
.alloc_fweh_info = brcmf_cyw_alloc_fweh_info,
.activate_events = brcmf_cyw_activate_events,
.get_cfg80211_ops = brcmf_cyw_get_cfg80211_ops,
.register_event_handlers = brcmf_cyw_register_event_handlers,
+ .configure_sae_pwe = brcmf_cyw_configure_sae_pwe,
};
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.h
index f3e011d090f2..56d341a75a53 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.h
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.h
@@ -18,6 +18,7 @@ struct brcmf_fwvid_ops {
int (*activate_events)(struct brcmf_if *ifp);
void (*get_cfg80211_ops)(struct brcmf_pub *drvr);
void (*register_event_handlers)(struct brcmf_pub *drvr);
+ int (*configure_sae_pwe)(struct brcmf_if *ifp, u32 sae_pwe);
};
/* exported functions */
@@ -40,6 +41,16 @@ static inline void brcmf_fwvid_feat_attach(struct brcmf_if *ifp)
vops->feat_attach(ifp);
}
+static inline int brcmf_fwvid_configure_sae_pwe(struct brcmf_if *ifp, u32 sae_pwe)
+{
+ const struct brcmf_fwvid_ops *vops = ifp->drvr->vops;
+
+ if (!vops || !vops->configure_sae_pwe)
+ return -EOPNOTSUPP;
+
+ return vops->configure_sae_pwe(ifp, sae_pwe);
+}
+
static inline int brcmf_fwvid_set_sae_password(struct brcmf_if *ifp,
struct cfg80211_crypto_settings *crypto)
{
--
2.53.0
^ permalink raw reply related [flat|nested] 6+ messages in thread* Re: [PATCH] wifi: brcmfmac: Set extsae_pwe parameter to Infineon firmware in SAP mode
2026-08-31 6:12 [PATCH] wifi: brcmfmac: Set extsae_pwe parameter to Infineon firmware in SAP mode GirishBukkasagara.Rudrappa
@ 2026-09-14 20:03 ` Arend van Spriel
2026-09-15 16:40 ` Johannes Berg
2026-09-17 17:37 ` [PATCH v2] " GirishBukkasagara.Rudrappa
1 sibling, 1 reply; 6+ messages in thread
From: Arend van Spriel @ 2026-09-14 20:03 UTC (permalink / raw)
To: Girish Rudrappa
Cc: linux-wireless, johannes.berg, brcm80211, wlan-kernel-dev-list,
bogdan.nicolae, Arend van Spriel
On Mon, 31 Aug 2026 06:12:13 +0000, Girish Rudrappa wrote:
> Parse and configure the extsae_pwe according to the information from the
> supported rate/extended support rate and RSNX IE
>
> Parse the beacon IEs on start_ap() and set the extsae_pwe iovar.
> Set sae_pwe to 2 when the RSNX IE advertises H2E, 1 when an H2E-only
> membership selector is present, 0 otherwise.
>
> The changes are tested with FW Version 7.45.286
Acked-by: Arend van Spriel <arend.vanspriel@broadcom.com>
Regards,
Arend
> Signed-off-by: Girish Rudrappa <girishbukkasagara.rudrappa@infineon.com>
> ---
> drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 77 +++++++++++++++++++
> drivers/net/wireless/broadcom/brcm80211/brcmfmac/cyw/core.c | 6 ++
> drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.h | 11 +++
> 3 files changed, 94 insertions(+)
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] wifi: brcmfmac: Set extsae_pwe parameter to Infineon firmware in SAP mode
2026-09-14 20:03 ` Arend van Spriel
@ 2026-09-15 16:40 ` Johannes Berg
0 siblings, 0 replies; 6+ messages in thread
From: Johannes Berg @ 2026-09-15 16:40 UTC (permalink / raw)
To: Arend van Spriel, Girish Rudrappa
Cc: linux-wireless, brcm80211, wlan-kernel-dev-list, bogdan.nicolae
On Mon, 2026-09-14 at 22:03 +0200, Arend van Spriel wrote:
> On Mon, 31 Aug 2026 06:12:13 +0000, Girish Rudrappa wrote:
> > Parse and configure the extsae_pwe according to the information from the
> > supported rate/extended support rate and RSNX IE
> >
> > Parse the beacon IEs on start_ap() and set the extsae_pwe iovar.
> > Set sae_pwe to 2 when the RSNX IE advertises H2E, 1 when an H2E-only
> > membership selector is present, 0 otherwise.
> >
> > The changes are tested with FW Version 7.45.286
>
> Acked-by: Arend van Spriel <arend.vanspriel@broadcom.com>
>
This is one of the patches the bot couldn't pick up (per my earlier
mail) - please resend.
johannes
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v2] wifi: brcmfmac: Set extsae_pwe parameter to Infineon firmware in SAP mode
2026-08-31 6:12 [PATCH] wifi: brcmfmac: Set extsae_pwe parameter to Infineon firmware in SAP mode GirishBukkasagara.Rudrappa
2026-09-14 20:03 ` Arend van Spriel
@ 2026-09-17 17:37 ` GirishBukkasagara.Rudrappa
2026-09-22 6:24 ` [PATCH RESEND wireless-next " GirishBukkasagara.Rudrappa
1 sibling, 1 reply; 6+ messages in thread
From: GirishBukkasagara.Rudrappa @ 2026-09-17 17:37 UTC (permalink / raw)
To: linux-wireless
Cc: arend.vanspriel, johannes.berg, brcm80211, wlan-kernel-dev-list,
bogdan.nicolae, Girish Rudrappa
From: Girish Rudrappa <girishbukkasagara.rudrappa@infineon.com>
Parse and configure the extsae_pwe according to the information from the
supported rate/extended support rate and RSNX IE
Parse the beacon IEs on start_ap() and set the extsae_pwe iovar.
Set sae_pwe to 2 when the RSNX IE advertises H2E, 1 when an H2E-only
membership selector is present, 0 otherwise.
The changes are tested with FW Version 7.45.286
Signed-off-by: Girish Rudrappa <girishbukkasagara.rudrappa@infineon.com>
---
.../broadcom/brcm80211/brcmfmac/cfg80211.c | 77 +++++++++++++++++++
.../broadcom/brcm80211/brcmfmac/cyw/core.c | 6 ++
.../broadcom/brcm80211/brcmfmac/fwvid.h | 11 +++
3 files changed, 94 insertions(+)
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
index 9d8ce7bb046e..a9e5ab5ea292 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
@@ -5131,6 +5131,79 @@ brcmf_config_ap_mgmt_ie(struct brcmf_cfg80211_vif *vif,
return err;
}
+static s32
+brcmf_parse_configure_sae_pwe(struct brcmf_if *ifp,
+ struct cfg80211_ap_settings *settings)
+{
+ const struct brcmf_tlv *rsnx_ie;
+ const struct brcmf_tlv *ext_rate_ie;
+ const struct brcmf_tlv *supp_rate_ie;
+ u8 ie_len, i;
+ u32 wpa_auth = 0;
+ u32 sae_pwe = 0; /* 0 = Hunting-and-Pecking only, 1 = H2E only, 2 = both */
+ s32 err = 0;
+
+ if (!brcmf_feat_is_enabled(ifp, BRCMF_FEAT_SAE_EXT))
+ return 0;
+
+ err = brcmf_fil_bsscfg_int_get(ifp, "wpa_auth", &wpa_auth);
+ if (err || (wpa_auth & WPA3_AUTH_SAE_PSK) == 0) {
+ brcmf_dbg(INFO, "wpa_auth is not SAE:0x%x\n", wpa_auth);
+ return 0;
+ }
+
+ rsnx_ie = brcmf_parse_tlvs((u8 *)settings->beacon.tail,
+ settings->beacon.tail_len, WLAN_EID_RSNX);
+
+ if (rsnx_ie && rsnx_ie->len &&
+ (rsnx_ie->data[0] & WLAN_RSNX_CAPA_SAE_H2E))
+ sae_pwe = 2;
+
+ /* Found rsnx_ie with SAE_H2E, check the bss selector to know if it is
+ * a H2E only.
+ */
+
+ if (sae_pwe == 2) {
+ supp_rate_ie = brcmf_parse_tlvs((u8 *)settings->beacon.head,
+ settings->beacon.head_len,
+ WLAN_EID_SUPP_RATES);
+ ext_rate_ie = brcmf_parse_tlvs((u8 *)settings->beacon.tail,
+ settings->beacon.tail_len,
+ WLAN_EID_EXT_SUPP_RATES);
+ if (ext_rate_ie) {
+ ie_len = ext_rate_ie->len;
+ for (i = 0; i < ie_len; i++) {
+ if ((ext_rate_ie->data[i] & 0x7f) ==
+ BSS_MEMBERSHIP_SELECTOR_SAE_H2E) {
+ sae_pwe = 1;
+ break;
+ }
+ }
+ }
+
+ /* If we cannot found H2E only selector in ext_supp_rate IE,
+ * traversal supp_rate IE to make sure it really doesn't exist
+ */
+ if (sae_pwe == 2 && supp_rate_ie) {
+ ie_len = supp_rate_ie->len;
+ for (i = 0; i < ie_len; i++) {
+ if ((supp_rate_ie->data[i] & 0x7f) ==
+ BSS_MEMBERSHIP_SELECTOR_SAE_H2E) {
+ sae_pwe = 1;
+ break;
+ }
+ }
+ }
+ }
+
+ err = brcmf_fwvid_configure_sae_pwe(ifp, sae_pwe);
+ if (err == -EOPNOTSUPP)
+ return 0;
+
+ brcmf_dbg(TRACE, "extsae_pwe=%u\n", sae_pwe);
+ return err;
+}
+
static s32
brcmf_parse_configure_security(struct brcmf_if *ifp,
struct cfg80211_ap_settings *settings,
@@ -5164,6 +5237,10 @@ brcmf_parse_configure_security(struct brcmf_if *ifp,
err = brcmf_configure_wpaie(ifp, tmp_ie, true);
if (err < 0)
return err;
+
+ err = brcmf_parse_configure_sae_pwe(ifp, settings);
+ if (err < 0)
+ return err;
}
} else {
brcmf_dbg(TRACE, "No WPA(2) IEs found\n");
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cyw/core.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cyw/core.c
index 545eb9aae966..0443207dfe00 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cyw/core.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cyw/core.c
@@ -367,10 +367,16 @@ static void brcmf_cyw_register_event_handlers(struct brcmf_pub *drvr)
brcmf_notify_mgmt_tx_status);
}
+static int brcmf_cyw_configure_sae_pwe(struct brcmf_if *ifp, u32 sae_pwe)
+{
+ return brcmf_fil_iovar_int_set(ifp, "extsae_pwe", sae_pwe);
+}
+
const struct brcmf_fwvid_ops brcmf_cyw_ops = {
.set_sae_password = brcmf_cyw_set_sae_pwd,
.alloc_fweh_info = brcmf_cyw_alloc_fweh_info,
.activate_events = brcmf_cyw_activate_events,
.get_cfg80211_ops = brcmf_cyw_get_cfg80211_ops,
.register_event_handlers = brcmf_cyw_register_event_handlers,
+ .configure_sae_pwe = brcmf_cyw_configure_sae_pwe,
};
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.h
index f3e011d090f2..56d341a75a53 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.h
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.h
@@ -18,6 +18,7 @@ struct brcmf_fwvid_ops {
int (*activate_events)(struct brcmf_if *ifp);
void (*get_cfg80211_ops)(struct brcmf_pub *drvr);
void (*register_event_handlers)(struct brcmf_pub *drvr);
+ int (*configure_sae_pwe)(struct brcmf_if *ifp, u32 sae_pwe);
};
/* exported functions */
@@ -40,6 +41,16 @@ static inline void brcmf_fwvid_feat_attach(struct brcmf_if *ifp)
vops->feat_attach(ifp);
}
+static inline int brcmf_fwvid_configure_sae_pwe(struct brcmf_if *ifp, u32 sae_pwe)
+{
+ const struct brcmf_fwvid_ops *vops = ifp->drvr->vops;
+
+ if (!vops || !vops->configure_sae_pwe)
+ return -EOPNOTSUPP;
+
+ return vops->configure_sae_pwe(ifp, sae_pwe);
+}
+
static inline int brcmf_fwvid_set_sae_password(struct brcmf_if *ifp,
struct cfg80211_crypto_settings *crypto)
{
--
2.53.0
^ permalink raw reply related [flat|nested] 6+ messages in thread* [PATCH RESEND wireless-next v2] wifi: brcmfmac: Set extsae_pwe parameter to Infineon firmware in SAP mode
2026-09-17 17:37 ` [PATCH v2] " GirishBukkasagara.Rudrappa
@ 2026-09-22 6:24 ` GirishBukkasagara.Rudrappa
2026-10-04 9:45 ` Arend van Spriel
0 siblings, 1 reply; 6+ messages in thread
From: GirishBukkasagara.Rudrappa @ 2026-09-22 6:24 UTC (permalink / raw)
To: linux-wireless
Cc: arend.vanspriel, johannes.berg, brcm80211, wlan-kernel-dev-list,
bogdan.nicolae, Girish Rudrappa
From: Girish Rudrappa <girishbukkasagara.rudrappa@infineon.com>
Parse and configure the extsae_pwe according to the information from the
supported rate/extended support rate and RSNX IE
Parse the beacon IEs on start_ap() and set the extsae_pwe iovar.
Set sae_pwe to 2 when the RSNX IE advertises H2E, 1 when an H2E-only
membership selector is present, 0 otherwise.
The changes are tested with FW Version 7.45.286
Signed-off-by: Girish Rudrappa <girishbukkasagara.rudrappa@infineon.com>
---
Resending v2 after updating subject prefix with target tree name
Changes in v2:
Rebased the code. No functionality changes
.../broadcom/brcm80211/brcmfmac/cfg80211.c | 77 +++++++++++++++++++
.../broadcom/brcm80211/brcmfmac/cyw/core.c | 6 ++
.../broadcom/brcm80211/brcmfmac/fwvid.h | 11 +++
3 files changed, 94 insertions(+)
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
index 9d8ce7bb046e..a9e5ab5ea292 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
@@ -5131,6 +5131,79 @@ brcmf_config_ap_mgmt_ie(struct brcmf_cfg80211_vif *vif,
return err;
}
+static s32
+brcmf_parse_configure_sae_pwe(struct brcmf_if *ifp,
+ struct cfg80211_ap_settings *settings)
+{
+ const struct brcmf_tlv *rsnx_ie;
+ const struct brcmf_tlv *ext_rate_ie;
+ const struct brcmf_tlv *supp_rate_ie;
+ u8 ie_len, i;
+ u32 wpa_auth = 0;
+ u32 sae_pwe = 0; /* 0 = Hunting-and-Pecking only, 1 = H2E only, 2 = both */
+ s32 err = 0;
+
+ if (!brcmf_feat_is_enabled(ifp, BRCMF_FEAT_SAE_EXT))
+ return 0;
+
+ err = brcmf_fil_bsscfg_int_get(ifp, "wpa_auth", &wpa_auth);
+ if (err || (wpa_auth & WPA3_AUTH_SAE_PSK) == 0) {
+ brcmf_dbg(INFO, "wpa_auth is not SAE:0x%x\n", wpa_auth);
+ return 0;
+ }
+
+ rsnx_ie = brcmf_parse_tlvs((u8 *)settings->beacon.tail,
+ settings->beacon.tail_len, WLAN_EID_RSNX);
+
+ if (rsnx_ie && rsnx_ie->len &&
+ (rsnx_ie->data[0] & WLAN_RSNX_CAPA_SAE_H2E))
+ sae_pwe = 2;
+
+ /* Found rsnx_ie with SAE_H2E, check the bss selector to know if it is
+ * a H2E only.
+ */
+
+ if (sae_pwe == 2) {
+ supp_rate_ie = brcmf_parse_tlvs((u8 *)settings->beacon.head,
+ settings->beacon.head_len,
+ WLAN_EID_SUPP_RATES);
+ ext_rate_ie = brcmf_parse_tlvs((u8 *)settings->beacon.tail,
+ settings->beacon.tail_len,
+ WLAN_EID_EXT_SUPP_RATES);
+ if (ext_rate_ie) {
+ ie_len = ext_rate_ie->len;
+ for (i = 0; i < ie_len; i++) {
+ if ((ext_rate_ie->data[i] & 0x7f) ==
+ BSS_MEMBERSHIP_SELECTOR_SAE_H2E) {
+ sae_pwe = 1;
+ break;
+ }
+ }
+ }
+
+ /* If we cannot found H2E only selector in ext_supp_rate IE,
+ * traversal supp_rate IE to make sure it really doesn't exist
+ */
+ if (sae_pwe == 2 && supp_rate_ie) {
+ ie_len = supp_rate_ie->len;
+ for (i = 0; i < ie_len; i++) {
+ if ((supp_rate_ie->data[i] & 0x7f) ==
+ BSS_MEMBERSHIP_SELECTOR_SAE_H2E) {
+ sae_pwe = 1;
+ break;
+ }
+ }
+ }
+ }
+
+ err = brcmf_fwvid_configure_sae_pwe(ifp, sae_pwe);
+ if (err == -EOPNOTSUPP)
+ return 0;
+
+ brcmf_dbg(TRACE, "extsae_pwe=%u\n", sae_pwe);
+ return err;
+}
+
static s32
brcmf_parse_configure_security(struct brcmf_if *ifp,
struct cfg80211_ap_settings *settings,
@@ -5164,6 +5237,10 @@ brcmf_parse_configure_security(struct brcmf_if *ifp,
err = brcmf_configure_wpaie(ifp, tmp_ie, true);
if (err < 0)
return err;
+
+ err = brcmf_parse_configure_sae_pwe(ifp, settings);
+ if (err < 0)
+ return err;
}
} else {
brcmf_dbg(TRACE, "No WPA(2) IEs found\n");
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cyw/core.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cyw/core.c
index 545eb9aae966..0443207dfe00 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cyw/core.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cyw/core.c
@@ -367,10 +367,16 @@ static void brcmf_cyw_register_event_handlers(struct brcmf_pub *drvr)
brcmf_notify_mgmt_tx_status);
}
+static int brcmf_cyw_configure_sae_pwe(struct brcmf_if *ifp, u32 sae_pwe)
+{
+ return brcmf_fil_iovar_int_set(ifp, "extsae_pwe", sae_pwe);
+}
+
const struct brcmf_fwvid_ops brcmf_cyw_ops = {
.set_sae_password = brcmf_cyw_set_sae_pwd,
.alloc_fweh_info = brcmf_cyw_alloc_fweh_info,
.activate_events = brcmf_cyw_activate_events,
.get_cfg80211_ops = brcmf_cyw_get_cfg80211_ops,
.register_event_handlers = brcmf_cyw_register_event_handlers,
+ .configure_sae_pwe = brcmf_cyw_configure_sae_pwe,
};
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.h
index f3e011d090f2..56d341a75a53 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.h
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.h
@@ -18,6 +18,7 @@ struct brcmf_fwvid_ops {
int (*activate_events)(struct brcmf_if *ifp);
void (*get_cfg80211_ops)(struct brcmf_pub *drvr);
void (*register_event_handlers)(struct brcmf_pub *drvr);
+ int (*configure_sae_pwe)(struct brcmf_if *ifp, u32 sae_pwe);
};
/* exported functions */
@@ -40,6 +41,16 @@ static inline void brcmf_fwvid_feat_attach(struct brcmf_if *ifp)
vops->feat_attach(ifp);
}
+static inline int brcmf_fwvid_configure_sae_pwe(struct brcmf_if *ifp, u32 sae_pwe)
+{
+ const struct brcmf_fwvid_ops *vops = ifp->drvr->vops;
+
+ if (!vops || !vops->configure_sae_pwe)
+ return -EOPNOTSUPP;
+
+ return vops->configure_sae_pwe(ifp, sae_pwe);
+}
+
static inline int brcmf_fwvid_set_sae_password(struct brcmf_if *ifp,
struct cfg80211_crypto_settings *crypto)
{
base-commit: 6c0b7357e3c7f365ec51dd8d2b626130ee983ce1
--
2.53.0
^ permalink raw reply related [flat|nested] 6+ messages in thread* Re: [PATCH RESEND wireless-next v2] wifi: brcmfmac: Set extsae_pwe parameter to Infineon firmware in SAP mode
2026-09-22 6:24 ` [PATCH RESEND wireless-next " GirishBukkasagara.Rudrappa
@ 2026-10-04 9:45 ` Arend van Spriel
0 siblings, 0 replies; 6+ messages in thread
From: Arend van Spriel @ 2026-10-04 9:45 UTC (permalink / raw)
To: Girish Rudrappa
Cc: Johannes Berg, linux-wireless, brcm80211, wlan-kernel-dev-list,
Bogdan Nicolae, Arend van Spriel
On Tue, 22 Sep 2026 06:24:58 +0000, Girish Rudrappa wrote:
> Parse and configure the extsae_pwe according to the information from the
> supported rate/extended support rate and RSNX IE
>
> Parse the beacon IEs on start_ap() and set the extsae_pwe iovar.
> Set sae_pwe to 2 when the RSNX IE advertises H2E, 1 when an H2E-only
> membership selector is present, 0 otherwise.
>
> The changes are tested with FW Version 7.45.286
Just a nit about mentioning firmware versions. I doubt if it is very
useful. Anyway, here is my ...
Acked-by: Arend van Spriel <arend.vanspriel@broadcom.com>
> Signed-off-by: Girish Rudrappa <girishbukkasagara.rudrappa@infineon.com>
> ---
> .../broadcom/brcm80211/brcmfmac/cfg80211.c | 77 +++++++++++++++++++
> .../broadcom/brcm80211/brcmfmac/cyw/core.c | 6 ++
> .../broadcom/brcm80211/brcmfmac/fwvid.h | 11 +++
> 3 files changed, 94 insertions(+)
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2026-10-04 9:45 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-31 6:12 [PATCH] wifi: brcmfmac: Set extsae_pwe parameter to Infineon firmware in SAP mode GirishBukkasagara.Rudrappa
2026-09-14 20:03 ` Arend van Spriel
2026-09-15 16:40 ` Johannes Berg
2026-09-17 17:37 ` [PATCH v2] " GirishBukkasagara.Rudrappa
2026-09-22 6:24 ` [PATCH RESEND wireless-next " GirishBukkasagara.Rudrappa
2026-10-04 9:45 ` Arend van Spriel
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox