Commit ba323e29 authored by Johannes Berg's avatar Johannes Berg

wifi: mac80211: separate out connection downgrade flags

Separate out the connection downgrade flags from the ifmgd->flags
and put them into the link information instead. While at it, make
them a separate sparse type so we don't get confused about where
they belong and have static checking on correct handling.
Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent 062e8e02
...@@ -770,20 +770,21 @@ ieee80211_ibss_process_chanswitch(struct ieee80211_sub_if_data *sdata, ...@@ -770,20 +770,21 @@ ieee80211_ibss_process_chanswitch(struct ieee80211_sub_if_data *sdata,
struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; struct ieee80211_if_ibss *ifibss = &sdata->u.ibss;
enum nl80211_channel_type ch_type; enum nl80211_channel_type ch_type;
int err; int err;
u32 sta_flags; ieee80211_conn_flags_t conn_flags;
u32 vht_cap_info = 0; u32 vht_cap_info = 0;
sdata_assert_lock(sdata); sdata_assert_lock(sdata);
sta_flags = IEEE80211_STA_DISABLE_VHT; conn_flags = IEEE80211_CONN_DISABLE_VHT;
switch (ifibss->chandef.width) { switch (ifibss->chandef.width) {
case NL80211_CHAN_WIDTH_5: case NL80211_CHAN_WIDTH_5:
case NL80211_CHAN_WIDTH_10: case NL80211_CHAN_WIDTH_10:
case NL80211_CHAN_WIDTH_20_NOHT: case NL80211_CHAN_WIDTH_20_NOHT:
sta_flags |= IEEE80211_STA_DISABLE_HT; conn_flags |= IEEE80211_CONN_DISABLE_HT;
fallthrough; fallthrough;
case NL80211_CHAN_WIDTH_20: case NL80211_CHAN_WIDTH_20:
sta_flags |= IEEE80211_STA_DISABLE_40MHZ; conn_flags |= IEEE80211_CONN_DISABLE_40MHZ;
break; break;
default: default:
break; break;
...@@ -796,7 +797,7 @@ ieee80211_ibss_process_chanswitch(struct ieee80211_sub_if_data *sdata, ...@@ -796,7 +797,7 @@ ieee80211_ibss_process_chanswitch(struct ieee80211_sub_if_data *sdata,
err = ieee80211_parse_ch_switch_ie(sdata, elems, err = ieee80211_parse_ch_switch_ie(sdata, elems,
ifibss->chandef.chan->band, ifibss->chandef.chan->band,
vht_cap_info, vht_cap_info,
sta_flags, ifibss->bssid, &csa_ie); conn_flags, ifibss->bssid, &csa_ie);
/* can't switch to destination channel, fail */ /* can't switch to destination channel, fail */
if (err < 0) if (err < 0)
goto disconnect; goto disconnect;
...@@ -839,7 +840,7 @@ ieee80211_ibss_process_chanswitch(struct ieee80211_sub_if_data *sdata, ...@@ -839,7 +840,7 @@ ieee80211_ibss_process_chanswitch(struct ieee80211_sub_if_data *sdata,
} }
break; break;
default: default:
/* should not happen, sta_flags should prevent VHT modes. */ /* should not happen, conn_flags should prevent VHT modes. */
WARN_ON(1); WARN_ON(1);
goto disconnect; goto disconnect;
} }
......
...@@ -358,20 +358,25 @@ struct ieee80211_roc_work { ...@@ -358,20 +358,25 @@ struct ieee80211_roc_work {
enum ieee80211_sta_flags { enum ieee80211_sta_flags {
IEEE80211_STA_CONNECTION_POLL = BIT(1), IEEE80211_STA_CONNECTION_POLL = BIT(1),
IEEE80211_STA_CONTROL_PORT = BIT(2), IEEE80211_STA_CONTROL_PORT = BIT(2),
IEEE80211_STA_DISABLE_HT = BIT(4),
IEEE80211_STA_MFP_ENABLED = BIT(6), IEEE80211_STA_MFP_ENABLED = BIT(6),
IEEE80211_STA_UAPSD_ENABLED = BIT(7), IEEE80211_STA_UAPSD_ENABLED = BIT(7),
IEEE80211_STA_NULLFUNC_ACKED = BIT(8), IEEE80211_STA_NULLFUNC_ACKED = BIT(8),
IEEE80211_STA_RESET_SIGNAL_AVE = BIT(9), IEEE80211_STA_RESET_SIGNAL_AVE = BIT(9),
IEEE80211_STA_DISABLE_40MHZ = BIT(10),
IEEE80211_STA_DISABLE_VHT = BIT(11),
IEEE80211_STA_DISABLE_80P80MHZ = BIT(12),
IEEE80211_STA_DISABLE_160MHZ = BIT(13),
IEEE80211_STA_DISABLE_WMM = BIT(14), IEEE80211_STA_DISABLE_WMM = BIT(14),
IEEE80211_STA_ENABLE_RRM = BIT(15), IEEE80211_STA_ENABLE_RRM = BIT(15),
IEEE80211_STA_DISABLE_HE = BIT(16), };
IEEE80211_STA_DISABLE_EHT = BIT(17),
IEEE80211_STA_DISABLE_320MHZ = BIT(18), typedef u32 __bitwise ieee80211_conn_flags_t;
enum ieee80211_conn_flags {
IEEE80211_CONN_DISABLE_HT = (__force ieee80211_conn_flags_t)BIT(0),
IEEE80211_CONN_DISABLE_40MHZ = (__force ieee80211_conn_flags_t)BIT(1),
IEEE80211_CONN_DISABLE_VHT = (__force ieee80211_conn_flags_t)BIT(2),
IEEE80211_CONN_DISABLE_80P80MHZ = (__force ieee80211_conn_flags_t)BIT(3),
IEEE80211_CONN_DISABLE_160MHZ = (__force ieee80211_conn_flags_t)BIT(4),
IEEE80211_CONN_DISABLE_HE = (__force ieee80211_conn_flags_t)BIT(5),
IEEE80211_CONN_DISABLE_EHT = (__force ieee80211_conn_flags_t)BIT(6),
IEEE80211_CONN_DISABLE_320MHZ = (__force ieee80211_conn_flags_t)BIT(7),
}; };
struct ieee80211_mgd_auth_data { struct ieee80211_mgd_auth_data {
...@@ -875,6 +880,8 @@ struct ieee80211_link_data_managed { ...@@ -875,6 +880,8 @@ struct ieee80211_link_data_managed {
enum ieee80211_smps_mode req_smps, /* requested smps mode */ enum ieee80211_smps_mode req_smps, /* requested smps mode */
driver_smps_mode; /* smps mode request */ driver_smps_mode; /* smps mode request */
ieee80211_conn_flags_t conn_flags;
s16 p2p_noa_index; s16 p2p_noa_index;
bool have_beacon; bool have_beacon;
...@@ -2051,12 +2058,9 @@ void ieee80211_process_measurement_req(struct ieee80211_sub_if_data *sdata, ...@@ -2051,12 +2058,9 @@ void ieee80211_process_measurement_req(struct ieee80211_sub_if_data *sdata,
* @elems: parsed 802.11 elements received with the frame * @elems: parsed 802.11 elements received with the frame
* @current_band: indicates the current band * @current_band: indicates the current band
* @vht_cap_info: VHT capabilities of the transmitter * @vht_cap_info: VHT capabilities of the transmitter
* @sta_flags: contains information about own capabilities and restrictions * @conn_flags: contains information about own capabilities and restrictions
* to decide which channel switch announcements can be accepted. Only the * to decide which channel switch announcements can be accepted, using
* following subset of &enum ieee80211_sta_flags are evaluated: * flags from &enum ieee80211_conn_flags.
* %IEEE80211_STA_DISABLE_HT, %IEEE80211_STA_DISABLE_VHT,
* %IEEE80211_STA_DISABLE_40MHZ, %IEEE80211_STA_DISABLE_80P80MHZ,
* %IEEE80211_STA_DISABLE_160MHZ.
* @bssid: the currently connected bssid (for reporting) * @bssid: the currently connected bssid (for reporting)
* @csa_ie: parsed 802.11 csa elements on count, mode, chandef and mesh ttl. * @csa_ie: parsed 802.11 csa elements on count, mode, chandef and mesh ttl.
All of them will be filled with if success only. All of them will be filled with if success only.
...@@ -2066,7 +2070,7 @@ int ieee80211_parse_ch_switch_ie(struct ieee80211_sub_if_data *sdata, ...@@ -2066,7 +2070,7 @@ int ieee80211_parse_ch_switch_ie(struct ieee80211_sub_if_data *sdata,
struct ieee802_11_elems *elems, struct ieee802_11_elems *elems,
enum nl80211_band current_band, enum nl80211_band current_band,
u32 vht_cap_info, u32 vht_cap_info,
u32 sta_flags, u8 *bssid, ieee80211_conn_flags_t conn_flags, u8 *bssid,
struct ieee80211_csa_ie *csa_ie); struct ieee80211_csa_ie *csa_ie);
/* Suspend/resume and hw reconfiguration */ /* Suspend/resume and hw reconfiguration */
...@@ -2297,7 +2301,7 @@ u8 *ieee80211_ie_build_vht_cap(u8 *pos, struct ieee80211_sta_vht_cap *vht_cap, ...@@ -2297,7 +2301,7 @@ u8 *ieee80211_ie_build_vht_cap(u8 *pos, struct ieee80211_sta_vht_cap *vht_cap,
u8 *ieee80211_ie_build_vht_oper(u8 *pos, struct ieee80211_sta_vht_cap *vht_cap, u8 *ieee80211_ie_build_vht_oper(u8 *pos, struct ieee80211_sta_vht_cap *vht_cap,
const struct cfg80211_chan_def *chandef); const struct cfg80211_chan_def *chandef);
u8 ieee80211_ie_len_he_cap(struct ieee80211_sub_if_data *sdata, u8 iftype); u8 ieee80211_ie_len_he_cap(struct ieee80211_sub_if_data *sdata, u8 iftype);
u8 *ieee80211_ie_build_he_cap(u32 disable_flags, u8 *pos, 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,
...@@ -2336,7 +2340,7 @@ bool ieee80211_chandef_he_6ghz_oper(struct ieee80211_sub_if_data *sdata, ...@@ -2336,7 +2340,7 @@ bool ieee80211_chandef_he_6ghz_oper(struct ieee80211_sub_if_data *sdata,
struct cfg80211_chan_def *chandef); struct cfg80211_chan_def *chandef);
bool ieee80211_chandef_s1g_oper(const struct ieee80211_s1g_oper_ie *oper, bool ieee80211_chandef_s1g_oper(const struct ieee80211_s1g_oper_ie *oper,
struct cfg80211_chan_def *chandef); struct cfg80211_chan_def *chandef);
u32 ieee80211_chandef_downgrade(struct cfg80211_chan_def *c); ieee80211_conn_flags_t ieee80211_chandef_downgrade(struct cfg80211_chan_def *c);
int __must_check int __must_check
ieee80211_link_use_channel(struct ieee80211_link_data *link, ieee80211_link_use_channel(struct ieee80211_link_data *link,
......
...@@ -1129,7 +1129,8 @@ ieee80211_mesh_process_chnswitch(struct ieee80211_sub_if_data *sdata, ...@@ -1129,7 +1129,8 @@ ieee80211_mesh_process_chnswitch(struct ieee80211_sub_if_data *sdata,
struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh;
struct ieee80211_supported_band *sband; struct ieee80211_supported_band *sband;
int err; int err;
u32 sta_flags, vht_cap_info = 0; ieee80211_conn_flags_t conn_flags = 0;
u32 vht_cap_info = 0;
sdata_assert_lock(sdata); sdata_assert_lock(sdata);
...@@ -1137,16 +1138,15 @@ ieee80211_mesh_process_chnswitch(struct ieee80211_sub_if_data *sdata, ...@@ -1137,16 +1138,15 @@ ieee80211_mesh_process_chnswitch(struct ieee80211_sub_if_data *sdata,
if (!sband) if (!sband)
return false; return false;
sta_flags = 0;
switch (sdata->vif.bss_conf.chandef.width) { switch (sdata->vif.bss_conf.chandef.width) {
case NL80211_CHAN_WIDTH_20_NOHT: case NL80211_CHAN_WIDTH_20_NOHT:
sta_flags |= IEEE80211_STA_DISABLE_HT; conn_flags |= IEEE80211_CONN_DISABLE_HT;
fallthrough; fallthrough;
case NL80211_CHAN_WIDTH_20: case NL80211_CHAN_WIDTH_20:
sta_flags |= IEEE80211_STA_DISABLE_40MHZ; conn_flags |= IEEE80211_CONN_DISABLE_40MHZ;
fallthrough; fallthrough;
case NL80211_CHAN_WIDTH_40: case NL80211_CHAN_WIDTH_40:
sta_flags |= IEEE80211_STA_DISABLE_VHT; conn_flags |= IEEE80211_CONN_DISABLE_VHT;
break; break;
default: default:
break; break;
...@@ -1159,7 +1159,7 @@ ieee80211_mesh_process_chnswitch(struct ieee80211_sub_if_data *sdata, ...@@ -1159,7 +1159,7 @@ ieee80211_mesh_process_chnswitch(struct ieee80211_sub_if_data *sdata,
memset(&params, 0, sizeof(params)); memset(&params, 0, sizeof(params));
err = ieee80211_parse_ch_switch_ie(sdata, elems, sband->band, err = ieee80211_parse_ch_switch_ie(sdata, elems, sband->band,
vht_cap_info, vht_cap_info,
sta_flags, sdata->vif.addr, conn_flags, sdata->vif.addr,
&csa_ie); &csa_ie);
if (err < 0) if (err < 0)
return false; return false;
......
This diff is collapsed.
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
* Copyright 2007, Michael Wu <flamingice@sourmilk.net> * Copyright 2007, Michael Wu <flamingice@sourmilk.net>
* Copyright 2007-2008, Intel Corporation * Copyright 2007-2008, Intel Corporation
* Copyright 2008, Johannes Berg <johannes@sipsolutions.net> * Copyright 2008, Johannes Berg <johannes@sipsolutions.net>
* Copyright (C) 2018, 2020 Intel Corporation * Copyright (C) 2018, 2020, 2022 Intel Corporation
*/ */
#include <linux/ieee80211.h> #include <linux/ieee80211.h>
...@@ -23,7 +23,7 @@ int ieee80211_parse_ch_switch_ie(struct ieee80211_sub_if_data *sdata, ...@@ -23,7 +23,7 @@ int ieee80211_parse_ch_switch_ie(struct ieee80211_sub_if_data *sdata,
struct ieee802_11_elems *elems, struct ieee802_11_elems *elems,
enum nl80211_band current_band, enum nl80211_band current_band,
u32 vht_cap_info, u32 vht_cap_info,
u32 sta_flags, u8 *bssid, ieee80211_conn_flags_t conn_flags, u8 *bssid,
struct ieee80211_csa_ie *csa_ie) struct ieee80211_csa_ie *csa_ie)
{ {
enum nl80211_band new_band = current_band; enum nl80211_band new_band = current_band;
...@@ -40,13 +40,13 @@ int ieee80211_parse_ch_switch_ie(struct ieee80211_sub_if_data *sdata, ...@@ -40,13 +40,13 @@ int ieee80211_parse_ch_switch_ie(struct ieee80211_sub_if_data *sdata,
sec_chan_offs = elems->sec_chan_offs; sec_chan_offs = elems->sec_chan_offs;
wide_bw_chansw_ie = elems->wide_bw_chansw_ie; wide_bw_chansw_ie = elems->wide_bw_chansw_ie;
if (sta_flags & (IEEE80211_STA_DISABLE_HT | if (conn_flags & (IEEE80211_CONN_DISABLE_HT |
IEEE80211_STA_DISABLE_40MHZ)) { IEEE80211_CONN_DISABLE_40MHZ)) {
sec_chan_offs = NULL; sec_chan_offs = NULL;
wide_bw_chansw_ie = NULL; wide_bw_chansw_ie = NULL;
} }
if (sta_flags & IEEE80211_STA_DISABLE_VHT) if (conn_flags & IEEE80211_CONN_DISABLE_VHT)
wide_bw_chansw_ie = NULL; wide_bw_chansw_ie = NULL;
if (elems->ext_chansw_ie) { if (elems->ext_chansw_ie) {
...@@ -93,7 +93,7 @@ int ieee80211_parse_ch_switch_ie(struct ieee80211_sub_if_data *sdata, ...@@ -93,7 +93,7 @@ int ieee80211_parse_ch_switch_ie(struct ieee80211_sub_if_data *sdata,
if (sec_chan_offs) { if (sec_chan_offs) {
secondary_channel_offset = sec_chan_offs->sec_chan_offs; secondary_channel_offset = sec_chan_offs->sec_chan_offs;
} else if (!(sta_flags & IEEE80211_STA_DISABLE_HT)) { } else if (!(conn_flags & IEEE80211_CONN_DISABLE_HT)) {
/* If the secondary channel offset IE is not present, /* If the secondary channel offset IE is not present,
* we can't know what's the post-CSA offset, so the * we can't know what's the post-CSA offset, so the
* best we can do is use 20MHz. * best we can do is use 20MHz.
...@@ -160,10 +160,10 @@ int ieee80211_parse_ch_switch_ie(struct ieee80211_sub_if_data *sdata, ...@@ -160,10 +160,10 @@ int ieee80211_parse_ch_switch_ie(struct ieee80211_sub_if_data *sdata,
&new_vht_chandef)) &new_vht_chandef))
new_vht_chandef.chan = NULL; new_vht_chandef.chan = NULL;
if (sta_flags & IEEE80211_STA_DISABLE_80P80MHZ && if (conn_flags & IEEE80211_CONN_DISABLE_80P80MHZ &&
new_vht_chandef.width == NL80211_CHAN_WIDTH_80P80) new_vht_chandef.width == NL80211_CHAN_WIDTH_80P80)
ieee80211_chandef_downgrade(&new_vht_chandef); ieee80211_chandef_downgrade(&new_vht_chandef);
if (sta_flags & IEEE80211_STA_DISABLE_160MHZ && if (conn_flags & IEEE80211_CONN_DISABLE_160MHZ &&
new_vht_chandef.width == NL80211_CHAN_WIDTH_160) new_vht_chandef.width == NL80211_CHAN_WIDTH_160)
ieee80211_chandef_downgrade(&new_vht_chandef); ieee80211_chandef_downgrade(&new_vht_chandef);
} }
......
...@@ -1311,7 +1311,6 @@ static void ...@@ -1311,7 +1311,6 @@ static void
iee80211_tdls_recalc_ht_protection(struct ieee80211_sub_if_data *sdata, iee80211_tdls_recalc_ht_protection(struct ieee80211_sub_if_data *sdata,
struct sta_info *sta) struct sta_info *sta)
{ {
struct ieee80211_if_managed *ifmgd = &sdata->u.mgd;
bool tdls_ht; bool tdls_ht;
u16 protection = IEEE80211_HT_OP_MODE_PROTECTION_NONHT_MIXED | u16 protection = IEEE80211_HT_OP_MODE_PROTECTION_NONHT_MIXED |
IEEE80211_HT_OP_MODE_NON_GF_STA_PRSNT | IEEE80211_HT_OP_MODE_NON_GF_STA_PRSNT |
...@@ -1319,7 +1318,7 @@ iee80211_tdls_recalc_ht_protection(struct ieee80211_sub_if_data *sdata, ...@@ -1319,7 +1318,7 @@ iee80211_tdls_recalc_ht_protection(struct ieee80211_sub_if_data *sdata,
u16 opmode; u16 opmode;
/* Nothing to do if the BSS connection uses HT */ /* Nothing to do if the BSS connection uses HT */
if (!(ifmgd->flags & IEEE80211_STA_DISABLE_HT)) if (!(sdata->deflink.u.mgd.conn_flags & IEEE80211_CONN_DISABLE_HT))
return; return;
tdls_ht = (sta && sta->sta.deflink.ht_cap.ht_supported) || tdls_ht = (sta && sta->sta.deflink.ht_cap.ht_supported) ||
......
...@@ -2948,7 +2948,7 @@ u8 ieee80211_ie_len_he_cap(struct ieee80211_sub_if_data *sdata, u8 iftype) ...@@ -2948,7 +2948,7 @@ u8 ieee80211_ie_len_he_cap(struct ieee80211_sub_if_data *sdata, u8 iftype)
he_cap->he_cap_elem.phy_cap_info); he_cap->he_cap_elem.phy_cap_info);
} }
u8 *ieee80211_ie_build_he_cap(u32 disable_flags, u8 *pos, 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)
{ {
...@@ -2968,16 +2968,16 @@ u8 *ieee80211_ie_build_he_cap(u32 disable_flags, u8 *pos, ...@@ -2968,16 +2968,16 @@ u8 *ieee80211_ie_build_he_cap(u32 disable_flags, u8 *pos,
/* modify on stack first to calculate 'n' and 'ie_len' correctly */ /* modify on stack first to calculate 'n' and 'ie_len' correctly */
elem = he_cap->he_cap_elem; elem = he_cap->he_cap_elem;
if (disable_flags & IEEE80211_STA_DISABLE_40MHZ) if (disable_flags & IEEE80211_CONN_DISABLE_40MHZ)
elem.phy_cap_info[0] &= elem.phy_cap_info[0] &=
~(IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_40MHZ_80MHZ_IN_5G | ~(IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_40MHZ_80MHZ_IN_5G |
IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_40MHZ_IN_2G); IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_40MHZ_IN_2G);
if (disable_flags & IEEE80211_STA_DISABLE_160MHZ) if (disable_flags & IEEE80211_CONN_DISABLE_160MHZ)
elem.phy_cap_info[0] &= elem.phy_cap_info[0] &=
~IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_160MHZ_IN_5G; ~IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_160MHZ_IN_5G;
if (disable_flags & IEEE80211_STA_DISABLE_80P80MHZ) if (disable_flags & IEEE80211_CONN_DISABLE_80P80MHZ)
elem.phy_cap_info[0] &= elem.phy_cap_info[0] &=
~IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_80PLUS80_MHZ_IN_5G; ~IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_80PLUS80_MHZ_IN_5G;
...@@ -4066,21 +4066,21 @@ void ieee80211_radar_detected(struct ieee80211_hw *hw) ...@@ -4066,21 +4066,21 @@ void ieee80211_radar_detected(struct ieee80211_hw *hw)
} }
EXPORT_SYMBOL(ieee80211_radar_detected); EXPORT_SYMBOL(ieee80211_radar_detected);
u32 ieee80211_chandef_downgrade(struct cfg80211_chan_def *c) ieee80211_conn_flags_t ieee80211_chandef_downgrade(struct cfg80211_chan_def *c)
{ {
u32 ret; ieee80211_conn_flags_t ret;
int tmp; int tmp;
switch (c->width) { switch (c->width) {
case NL80211_CHAN_WIDTH_20: case NL80211_CHAN_WIDTH_20:
c->width = NL80211_CHAN_WIDTH_20_NOHT; c->width = NL80211_CHAN_WIDTH_20_NOHT;
ret = IEEE80211_STA_DISABLE_HT | IEEE80211_STA_DISABLE_VHT; ret = IEEE80211_CONN_DISABLE_HT | IEEE80211_CONN_DISABLE_VHT;
break; break;
case NL80211_CHAN_WIDTH_40: case NL80211_CHAN_WIDTH_40:
c->width = NL80211_CHAN_WIDTH_20; c->width = NL80211_CHAN_WIDTH_20;
c->center_freq1 = c->chan->center_freq; c->center_freq1 = c->chan->center_freq;
ret = IEEE80211_STA_DISABLE_40MHZ | ret = IEEE80211_CONN_DISABLE_40MHZ |
IEEE80211_STA_DISABLE_VHT; IEEE80211_CONN_DISABLE_VHT;
break; break;
case NL80211_CHAN_WIDTH_80: case NL80211_CHAN_WIDTH_80:
tmp = (30 + c->chan->center_freq - c->center_freq1)/20; tmp = (30 + c->chan->center_freq - c->center_freq1)/20;
...@@ -4089,13 +4089,13 @@ u32 ieee80211_chandef_downgrade(struct cfg80211_chan_def *c) ...@@ -4089,13 +4089,13 @@ u32 ieee80211_chandef_downgrade(struct cfg80211_chan_def *c)
/* freq_P40 */ /* freq_P40 */
c->center_freq1 = c->center_freq1 - 20 + 40 * tmp; c->center_freq1 = c->center_freq1 - 20 + 40 * tmp;
c->width = NL80211_CHAN_WIDTH_40; c->width = NL80211_CHAN_WIDTH_40;
ret = IEEE80211_STA_DISABLE_VHT; ret = IEEE80211_CONN_DISABLE_VHT;
break; break;
case NL80211_CHAN_WIDTH_80P80: case NL80211_CHAN_WIDTH_80P80:
c->center_freq2 = 0; c->center_freq2 = 0;
c->width = NL80211_CHAN_WIDTH_80; c->width = NL80211_CHAN_WIDTH_80;
ret = IEEE80211_STA_DISABLE_80P80MHZ | ret = IEEE80211_CONN_DISABLE_80P80MHZ |
IEEE80211_STA_DISABLE_160MHZ; IEEE80211_CONN_DISABLE_160MHZ;
break; break;
case NL80211_CHAN_WIDTH_160: case NL80211_CHAN_WIDTH_160:
/* n_P20 */ /* n_P20 */
...@@ -4104,8 +4104,8 @@ u32 ieee80211_chandef_downgrade(struct cfg80211_chan_def *c) ...@@ -4104,8 +4104,8 @@ u32 ieee80211_chandef_downgrade(struct cfg80211_chan_def *c)
tmp /= 4; tmp /= 4;
c->center_freq1 = c->center_freq1 - 40 + 80 * tmp; c->center_freq1 = c->center_freq1 - 40 + 80 * tmp;
c->width = NL80211_CHAN_WIDTH_80; c->width = NL80211_CHAN_WIDTH_80;
ret = IEEE80211_STA_DISABLE_80P80MHZ | ret = IEEE80211_CONN_DISABLE_80P80MHZ |
IEEE80211_STA_DISABLE_160MHZ; IEEE80211_CONN_DISABLE_160MHZ;
break; break;
case NL80211_CHAN_WIDTH_320: case NL80211_CHAN_WIDTH_320:
/* n_P20 */ /* n_P20 */
...@@ -4114,13 +4114,13 @@ u32 ieee80211_chandef_downgrade(struct cfg80211_chan_def *c) ...@@ -4114,13 +4114,13 @@ u32 ieee80211_chandef_downgrade(struct cfg80211_chan_def *c)
tmp /= 8; tmp /= 8;
c->center_freq1 = c->center_freq1 - 80 + 160 * tmp; c->center_freq1 = c->center_freq1 - 80 + 160 * tmp;
c->width = NL80211_CHAN_WIDTH_160; c->width = NL80211_CHAN_WIDTH_160;
ret = IEEE80211_STA_DISABLE_320MHZ; ret = IEEE80211_CONN_DISABLE_320MHZ;
break; break;
default: default:
case NL80211_CHAN_WIDTH_20_NOHT: case NL80211_CHAN_WIDTH_20_NOHT:
WARN_ON_ONCE(1); WARN_ON_ONCE(1);
c->width = NL80211_CHAN_WIDTH_20_NOHT; c->width = NL80211_CHAN_WIDTH_20_NOHT;
ret = IEEE80211_STA_DISABLE_HT | IEEE80211_STA_DISABLE_VHT; ret = IEEE80211_CONN_DISABLE_HT | IEEE80211_CONN_DISABLE_VHT;
break; break;
case NL80211_CHAN_WIDTH_1: case NL80211_CHAN_WIDTH_1:
case NL80211_CHAN_WIDTH_2: case NL80211_CHAN_WIDTH_2:
...@@ -4131,7 +4131,7 @@ u32 ieee80211_chandef_downgrade(struct cfg80211_chan_def *c) ...@@ -4131,7 +4131,7 @@ u32 ieee80211_chandef_downgrade(struct cfg80211_chan_def *c)
case NL80211_CHAN_WIDTH_10: case NL80211_CHAN_WIDTH_10:
WARN_ON_ONCE(1); WARN_ON_ONCE(1);
/* keep c->width */ /* keep c->width */
ret = IEEE80211_STA_DISABLE_HT | IEEE80211_STA_DISABLE_VHT; ret = IEEE80211_CONN_DISABLE_HT | IEEE80211_CONN_DISABLE_VHT;
break; break;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment