forked from Minki/linux
wifi: mac80211: correct SMPS mode in HE 6 GHz capability
If we add 6 GHz capability in MLO, we cannot use the SMPS mode from the deflink. Pass it separately instead since on a second link we don't even have a link data struct yet. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
b8c9024e0e
commit
abd27d063c
@ -2386,6 +2386,7 @@ u8 *ieee80211_ie_build_he_cap(ieee80211_conn_flags_t disable_flags, u8 *pos,
|
|||||||
const struct ieee80211_sta_he_cap *he_cap,
|
const struct ieee80211_sta_he_cap *he_cap,
|
||||||
u8 *end);
|
u8 *end);
|
||||||
void ieee80211_ie_build_he_6ghz_cap(struct ieee80211_sub_if_data *sdata,
|
void ieee80211_ie_build_he_6ghz_cap(struct ieee80211_sub_if_data *sdata,
|
||||||
|
enum ieee80211_smps_mode smps_mode,
|
||||||
struct sk_buff *skb);
|
struct sk_buff *skb);
|
||||||
u8 *ieee80211_ie_build_he_oper(u8 *pos, struct cfg80211_chan_def *chandef);
|
u8 *ieee80211_ie_build_he_oper(u8 *pos, struct cfg80211_chan_def *chandef);
|
||||||
int ieee80211_parse_bitrates(enum nl80211_chan_width width,
|
int ieee80211_parse_bitrates(enum nl80211_chan_width width,
|
||||||
|
@ -634,7 +634,7 @@ int mesh_add_he_6ghz_cap_ie(struct ieee80211_sub_if_data *sdata,
|
|||||||
if (!iftd)
|
if (!iftd)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
ieee80211_ie_build_he_6ghz_cap(sdata, skb);
|
ieee80211_ie_build_he_6ghz_cap(sdata, sdata->deflink.smps_mode, skb);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -695,6 +695,7 @@ static bool ieee80211_add_vht_ie(struct ieee80211_sub_if_data *sdata,
|
|||||||
static void ieee80211_add_he_ie(struct ieee80211_sub_if_data *sdata,
|
static void ieee80211_add_he_ie(struct ieee80211_sub_if_data *sdata,
|
||||||
struct sk_buff *skb,
|
struct sk_buff *skb,
|
||||||
struct ieee80211_supported_band *sband,
|
struct ieee80211_supported_band *sband,
|
||||||
|
enum ieee80211_smps_mode smps_mode,
|
||||||
ieee80211_conn_flags_t conn_flags)
|
ieee80211_conn_flags_t conn_flags)
|
||||||
{
|
{
|
||||||
u8 *pos, *pre_he_pos;
|
u8 *pos, *pre_he_pos;
|
||||||
@ -719,7 +720,7 @@ static void ieee80211_add_he_ie(struct ieee80211_sub_if_data *sdata,
|
|||||||
/* trim excess if any */
|
/* trim excess if any */
|
||||||
skb_trim(skb, skb->len - (pre_he_pos + he_cap_size - pos));
|
skb_trim(skb, skb->len - (pre_he_pos + he_cap_size - pos));
|
||||||
|
|
||||||
ieee80211_ie_build_he_6ghz_cap(sdata, skb);
|
ieee80211_ie_build_he_6ghz_cap(sdata, smps_mode, skb);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ieee80211_add_eht_ie(struct ieee80211_sub_if_data *sdata,
|
static void ieee80211_add_eht_ie(struct ieee80211_sub_if_data *sdata,
|
||||||
@ -1100,7 +1101,7 @@ static size_t ieee80211_assoc_link_elems(struct ieee80211_sub_if_data *sdata,
|
|||||||
offset);
|
offset);
|
||||||
|
|
||||||
if (!(assoc_data->link[link_id].conn_flags & IEEE80211_CONN_DISABLE_HE)) {
|
if (!(assoc_data->link[link_id].conn_flags & IEEE80211_CONN_DISABLE_HE)) {
|
||||||
ieee80211_add_he_ie(sdata, skb, sband,
|
ieee80211_add_he_ie(sdata, skb, sband, smps_mode,
|
||||||
assoc_data->link[link_id].conn_flags);
|
assoc_data->link[link_id].conn_flags);
|
||||||
ADD_PRESENT_EXT_ELEM(WLAN_EID_EXT_HE_CAPABILITY);
|
ADD_PRESENT_EXT_ELEM(WLAN_EID_EXT_HE_CAPABILITY);
|
||||||
}
|
}
|
||||||
|
@ -3084,6 +3084,7 @@ end:
|
|||||||
}
|
}
|
||||||
|
|
||||||
void ieee80211_ie_build_he_6ghz_cap(struct ieee80211_sub_if_data *sdata,
|
void ieee80211_ie_build_he_6ghz_cap(struct ieee80211_sub_if_data *sdata,
|
||||||
|
enum ieee80211_smps_mode smps_mode,
|
||||||
struct sk_buff *skb)
|
struct sk_buff *skb)
|
||||||
{
|
{
|
||||||
struct ieee80211_supported_band *sband;
|
struct ieee80211_supported_band *sband;
|
||||||
@ -3110,7 +3111,7 @@ void ieee80211_ie_build_he_6ghz_cap(struct ieee80211_sub_if_data *sdata,
|
|||||||
cap = le16_to_cpu(iftd->he_6ghz_capa.capa);
|
cap = le16_to_cpu(iftd->he_6ghz_capa.capa);
|
||||||
cap &= ~IEEE80211_HE_6GHZ_CAP_SM_PS;
|
cap &= ~IEEE80211_HE_6GHZ_CAP_SM_PS;
|
||||||
|
|
||||||
switch (sdata->deflink.smps_mode) {
|
switch (smps_mode) {
|
||||||
case IEEE80211_SMPS_AUTOMATIC:
|
case IEEE80211_SMPS_AUTOMATIC:
|
||||||
case IEEE80211_SMPS_NUM_MODES:
|
case IEEE80211_SMPS_NUM_MODES:
|
||||||
WARN_ON(1);
|
WARN_ON(1);
|
||||||
|
Loading…
Reference in New Issue
Block a user