diff options
author | Johannes Berg | 2022-07-12 11:33:57 +0200 |
---|---|---|
committer | Johannes Berg | 2022-07-15 11:43:22 +0200 |
commit | 4a21a8ae7964278f6ed8168a4391eaa88c4ab452 (patch) | |
tree | f92483a0b71a174a7153235257e0c75af4515636 /net | |
parent | 61513162aa2d6c17c37d25de2d0e5020cd9b37ec (diff) |
wifi: mac80211: mlme: change flags in ieee80211_determine_chantype()
For MLO we'll need to read flags not directly from the link as
it may not even exist yet if we're just setting up flags for
a secondary link before sending the association request, so
pass the incoming conn_flags separately. Also, while at it,
pass the sdata/link separately as for non-tracking now the
link may be NULL.
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net')
-rw-r--r-- | net/mac80211/mlme.c | 28 |
1 files changed, 16 insertions, 12 deletions
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c index 43b64ec6e9df..5d8813fec850 100644 --- a/net/mac80211/mlme.c +++ b/net/mac80211/mlme.c @@ -143,7 +143,9 @@ static int ecw2cw(int ecw) } static ieee80211_conn_flags_t -ieee80211_determine_chantype(struct ieee80211_link_data *link, +ieee80211_determine_chantype(struct ieee80211_sub_if_data *sdata, + struct ieee80211_link_data *link, + ieee80211_conn_flags_t conn_flags, struct ieee80211_supported_band *sband, struct ieee80211_channel *channel, u32 vht_cap_info, @@ -154,7 +156,6 @@ ieee80211_determine_chantype(struct ieee80211_link_data *link, const struct ieee80211_s1g_oper_ie *s1g_oper, struct cfg80211_chan_def *chandef, bool tracking) { - struct ieee80211_sub_if_data *sdata = link->sdata; struct cfg80211_chan_def vht_chandef; struct ieee80211_sta_ht_cap sta_ht_cap; ieee80211_conn_flags_t ret; @@ -249,7 +250,7 @@ ieee80211_determine_chantype(struct ieee80211_link_data *link, } vht_chandef = *chandef; - if (!(link->u.mgd.conn_flags & IEEE80211_CONN_DISABLE_HE) && + if (!(conn_flags & IEEE80211_CONN_DISABLE_HE) && he_oper && (le32_to_cpu(he_oper->he_oper_params) & IEEE80211_HE_OPERATION_VHT_OPER_INFO)) { @@ -265,7 +266,7 @@ ieee80211_determine_chantype(struct ieee80211_link_data *link, if (!ieee80211_chandef_vht_oper(&sdata->local->hw, vht_cap_info, &he_oper_vht_cap, ht_oper, &vht_chandef)) { - if (!(link->u.mgd.conn_flags & IEEE80211_CONN_DISABLE_HE)) + if (!(conn_flags & IEEE80211_CONN_DISABLE_HE)) sdata_info(sdata, "HE AP VHT information is invalid, disabling HE\n"); ret = IEEE80211_CONN_DISABLE_HE | IEEE80211_CONN_DISABLE_EHT; @@ -275,7 +276,7 @@ ieee80211_determine_chantype(struct ieee80211_link_data *link, vht_cap_info, vht_oper, ht_oper, &vht_chandef)) { - if (!(link->u.mgd.conn_flags & IEEE80211_CONN_DISABLE_VHT)) + if (!(conn_flags & IEEE80211_CONN_DISABLE_VHT)) sdata_info(sdata, "AP VHT information is invalid, disabling VHT\n"); ret = IEEE80211_CONN_DISABLE_VHT; @@ -283,7 +284,7 @@ ieee80211_determine_chantype(struct ieee80211_link_data *link, } if (!cfg80211_chandef_valid(&vht_chandef)) { - if (!(link->u.mgd.conn_flags & IEEE80211_CONN_DISABLE_VHT)) + if (!(conn_flags & IEEE80211_CONN_DISABLE_VHT)) sdata_info(sdata, "AP VHT information is invalid, disabling VHT\n"); ret = IEEE80211_CONN_DISABLE_VHT; @@ -296,7 +297,7 @@ ieee80211_determine_chantype(struct ieee80211_link_data *link, } if (!cfg80211_chandef_compatible(chandef, &vht_chandef)) { - if (!(link->u.mgd.conn_flags & IEEE80211_CONN_DISABLE_VHT)) + if (!(conn_flags & IEEE80211_CONN_DISABLE_VHT)) sdata_info(sdata, "AP VHT information doesn't match HT, disabling VHT\n"); ret = IEEE80211_CONN_DISABLE_VHT; @@ -319,7 +320,7 @@ ieee80211_determine_chantype(struct ieee80211_link_data *link, false, &eht_chandef); if (!cfg80211_chandef_valid(&eht_chandef)) { - if (!(link->u.mgd.conn_flags & IEEE80211_CONN_DISABLE_EHT)) + if (!(conn_flags & IEEE80211_CONN_DISABLE_EHT)) sdata_info(sdata, "AP EHT information is invalid, disabling EHT\n"); ret = IEEE80211_CONN_DISABLE_EHT; @@ -327,7 +328,7 @@ ieee80211_determine_chantype(struct ieee80211_link_data *link, } if (!cfg80211_chandef_compatible(chandef, &eht_chandef)) { - if (!(link->u.mgd.conn_flags & IEEE80211_CONN_DISABLE_EHT)) + if (!(conn_flags & IEEE80211_CONN_DISABLE_EHT)) sdata_info(sdata, "AP EHT information is incompatible, disabling EHT\n"); ret = IEEE80211_CONN_DISABLE_EHT; @@ -462,7 +463,9 @@ static int ieee80211_config_bw(struct ieee80211_link_data *link, vht_cap_info = le32_to_cpu(vht_cap->vht_cap_info); /* calculate new channel (type) based on HT/VHT/HE operation IEs */ - flags = ieee80211_determine_chantype(link, sband, chan, vht_cap_info, + flags = ieee80211_determine_chantype(sdata, link, + link->u.mgd.conn_flags, + sband, chan, vht_cap_info, ht_oper, vht_oper, he_oper, eht_oper, s1g_oper, &chandef, true); @@ -4006,8 +4009,9 @@ static int ieee80211_prep_channel(struct ieee80211_sub_if_data *sdata, } link->u.mgd.conn_flags |= - ieee80211_determine_chantype(link, sband, - cbss->channel, + ieee80211_determine_chantype(sdata, link, + link->u.mgd.conn_flags, + sband, cbss->channel, bss->vht_cap_info, ht_oper, vht_oper, he_oper, eht_oper, |