diff options
author | Johannes Berg <johannes.berg@intel.com> | 2014-11-24 10:51:33 -0500 |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2014-11-24 10:55:28 -0500 |
commit | 575f05302e6c75fcea8802a779359f8c927b516e (patch) | |
tree | 256a3dcda5d9bce4a7706e57bbeb34e4aae24602 | |
parent | e392ba814367797e5676e3a84652877a42cc8b0c (diff) |
mac80211: disable 80+80/160 in VHT correctly
The supported bandwidth field is a two-bit field, not a bitmap,
so treat it accordingly when disabling 80+80 or 160 MHz.
Note that we can only advertise "80+80 and 160" or "160", not
"80+80" by itself, so disabling 160 also disables 80+80.
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
-rw-r--r-- | net/mac80211/mlme.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c index d29589a09065..36e39ed4dfd9 100644 --- a/net/mac80211/mlme.c +++ b/net/mac80211/mlme.c | |||
@@ -552,13 +552,17 @@ static void ieee80211_add_vht_ie(struct ieee80211_sub_if_data *sdata, | |||
552 | cap = vht_cap.cap; | 552 | cap = vht_cap.cap; |
553 | 553 | ||
554 | if (sdata->u.mgd.flags & IEEE80211_STA_DISABLE_80P80MHZ) { | 554 | if (sdata->u.mgd.flags & IEEE80211_STA_DISABLE_80P80MHZ) { |
555 | cap &= ~IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160_80PLUS80MHZ; | 555 | u32 bw = cap & IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_MASK; |
556 | cap |= IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160MHZ; | 556 | |
557 | cap &= ~IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_MASK; | ||
558 | if (bw == IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160MHZ || | ||
559 | bw == IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160_80PLUS80MHZ) | ||
560 | cap |= IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160MHZ; | ||
557 | } | 561 | } |
558 | 562 | ||
559 | if (sdata->u.mgd.flags & IEEE80211_STA_DISABLE_160MHZ) { | 563 | if (sdata->u.mgd.flags & IEEE80211_STA_DISABLE_160MHZ) { |
560 | cap &= ~IEEE80211_VHT_CAP_SHORT_GI_160; | 564 | cap &= ~IEEE80211_VHT_CAP_SHORT_GI_160; |
561 | cap &= ~IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160MHZ; | 565 | cap &= ~IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_MASK; |
562 | } | 566 | } |
563 | 567 | ||
564 | /* | 568 | /* |