|
@@ -190,6 +190,12 @@ static u32 chandef_downgrade(struct cfg80211_chan_def *c)
|
|
|
c->width = NL80211_CHAN_WIDTH_20_NOHT;
|
|
|
ret = IEEE80211_STA_DISABLE_HT | IEEE80211_STA_DISABLE_VHT;
|
|
|
break;
|
|
|
+ case NL80211_CHAN_WIDTH_5:
|
|
|
+ case NL80211_CHAN_WIDTH_10:
|
|
|
+ WARN_ON_ONCE(1);
|
|
|
+ /* keep c->width */
|
|
|
+ ret = IEEE80211_STA_DISABLE_HT | IEEE80211_STA_DISABLE_VHT;
|
|
|
+ break;
|
|
|
}
|
|
|
|
|
|
WARN_ON_ONCE(!cfg80211_chandef_valid(c));
|
|
@@ -3771,6 +3777,12 @@ static int ieee80211_prep_channel(struct ieee80211_sub_if_data *sdata,
|
|
|
*/
|
|
|
ret = ieee80211_vif_use_channel(sdata, &chandef,
|
|
|
IEEE80211_CHANCTX_SHARED);
|
|
|
+
|
|
|
+ /* don't downgrade for 5 and 10 MHz channels, though. */
|
|
|
+ if (chandef.width == NL80211_CHAN_WIDTH_5 ||
|
|
|
+ chandef.width == NL80211_CHAN_WIDTH_10)
|
|
|
+ return ret;
|
|
|
+
|
|
|
while (ret && chandef.width != NL80211_CHAN_WIDTH_20_NOHT) {
|
|
|
ifmgd->flags |= chandef_downgrade(&chandef);
|
|
|
ret = ieee80211_vif_use_channel(sdata, &chandef,
|