summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2024-05-06 21:54:50 +0200
committerJohannes Berg <johannes.berg@intel.com>2024-05-23 11:28:54 +0200
commitf81747a9ad2e773ee72d881717e859a9f7a01c76 (patch)
tree33d95c3a1b49d3457ddd1735f3c2f6f732279c7c
parent344d18cec23142b3921e068a90f58e8fc5f7637a (diff)
wifi: mac80211: handle wider bandwidth OFDMA during CSA
During channel switch, track the AP configuration in the chanreq, so that wider bandwidth OFDMA is taken into account correctly, since multiple channel contexts may be needed due to sharing not being possible due to wider bandwidth OFDMA. Reviewed-by: Miriam Rachel Korenblit <miriam.rachel.korenblit@intel.com> Link: https://msgid.link/20240506215543.b2c5a72dac1b.I69f65cb2e75d4a49a174b1aede68bf8ff0a3cab3@changeid Signed-off-by: Johannes Berg <johannes.berg@intel.com>
-rw-r--r--net/mac80211/mlme.c8
-rw-r--r--net/mac80211/spectmgmt.c5
2 files changed, 10 insertions, 3 deletions
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
index 75d53257dd97..1d0b414619a4 100644
--- a/net/mac80211/mlme.c
+++ b/net/mac80211/mlme.c
@@ -2517,8 +2517,13 @@ ieee80211_sta_process_chanswitch(struct ieee80211_link_data *link,
goto drop_connection;
}
+ link->csa.chanreq = csa_ie.chanreq;
+ if (link->u.mgd.conn.mode < IEEE80211_CONN_MODE_EHT ||
+ sdata->vif.driver_flags & IEEE80211_VIF_IGNORE_OFDMA_WIDER_BW)
+ link->csa.chanreq.ap.chan = NULL;
+
if (chanctx) {
- res = ieee80211_link_reserve_chanctx(link, &csa_ie.chanreq,
+ res = ieee80211_link_reserve_chanctx(link, &link->csa.chanreq,
chanctx->mode, false);
if (res) {
link_info(link,
@@ -2529,7 +2534,6 @@ ieee80211_sta_process_chanswitch(struct ieee80211_link_data *link,
}
link->conf->csa_active = true;
- link->csa.chanreq = csa_ie.chanreq;
link->u.mgd.csa.ignored_same_chan = false;
link->u.mgd.beacon_crc_valid = false;
link->u.mgd.csa.blocked_tx = csa_ie.mode;
diff --git a/net/mac80211/spectmgmt.c b/net/mac80211/spectmgmt.c
index b2de4c6fb808..df96d3db1c0e 100644
--- a/net/mac80211/spectmgmt.c
+++ b/net/mac80211/spectmgmt.c
@@ -9,7 +9,7 @@
* Copyright 2007, Michael Wu <flamingice@sourmilk.net>
* Copyright 2007-2008, Intel Corporation
* Copyright 2008, Johannes Berg <johannes@sipsolutions.net>
- * Copyright (C) 2018, 2020, 2022-2023 Intel Corporation
+ * Copyright (C) 2018, 2020, 2022-2024 Intel Corporation
*/
#include <linux/ieee80211.h>
@@ -366,6 +366,9 @@ int ieee80211_parse_ch_switch_ie(struct ieee80211_sub_if_data *sdata,
validate_chandef_by_ht_vht_oper(sdata, conn, vht_cap_info,
&new_chandef);
+ /* capture the AP chandef before (potential) downgrading */
+ csa_ie->chanreq.ap = new_chandef;
+
/* if data is there validate the bandwidth & use it */
if (new_chandef.chan) {
if (conn->bw_limit < IEEE80211_CONN_BW_LIMIT_320 &&