|
@@ -129,42 +129,31 @@ int ieee80211_parse_ch_switch_ie(struct ieee80211_sub_if_data *sdata,
|
|
|
}
|
|
|
|
|
|
if (wide_bw_chansw_ie) {
|
|
|
- new_vht_chandef.chan = new_chan;
|
|
|
- new_vht_chandef.center_freq1 =
|
|
|
- ieee80211_channel_to_frequency(
|
|
|
+ struct ieee80211_vht_operation vht_oper = {
|
|
|
+ .chan_width =
|
|
|
+ wide_bw_chansw_ie->new_channel_width,
|
|
|
+ .center_freq_seg1_idx =
|
|
|
wide_bw_chansw_ie->new_center_freq_seg0,
|
|
|
- new_band);
|
|
|
-
|
|
|
- switch (wide_bw_chansw_ie->new_channel_width) {
|
|
|
- default:
|
|
|
- /* hmmm, ignore VHT and use HT if present */
|
|
|
- case IEEE80211_VHT_CHANWIDTH_USE_HT:
|
|
|
+ .center_freq_seg2_idx =
|
|
|
+ wide_bw_chansw_ie->new_center_freq_seg1,
|
|
|
+ /* .basic_mcs_set doesn't matter */
|
|
|
+ };
|
|
|
+
|
|
|
+ /* default, for the case of IEEE80211_VHT_CHANWIDTH_USE_HT,
|
|
|
+ * to the previously parsed chandef
|
|
|
+ */
|
|
|
+ new_vht_chandef = csa_ie->chandef;
|
|
|
+
|
|
|
+ /* ignore if parsing fails */
|
|
|
+ if (!ieee80211_chandef_vht_oper(&vht_oper, &new_vht_chandef))
|
|
|
new_vht_chandef.chan = NULL;
|
|
|
- break;
|
|
|
- case IEEE80211_VHT_CHANWIDTH_80MHZ:
|
|
|
- new_vht_chandef.width = NL80211_CHAN_WIDTH_80;
|
|
|
- break;
|
|
|
- case IEEE80211_VHT_CHANWIDTH_160MHZ:
|
|
|
- new_vht_chandef.width = NL80211_CHAN_WIDTH_160;
|
|
|
- break;
|
|
|
- case IEEE80211_VHT_CHANWIDTH_80P80MHZ:
|
|
|
- /* field is otherwise reserved */
|
|
|
- new_vht_chandef.center_freq2 =
|
|
|
- ieee80211_channel_to_frequency(
|
|
|
- wide_bw_chansw_ie->new_center_freq_seg1,
|
|
|
- new_band);
|
|
|
- new_vht_chandef.width = NL80211_CHAN_WIDTH_80P80;
|
|
|
- break;
|
|
|
- }
|
|
|
+
|
|
|
if (sta_flags & IEEE80211_STA_DISABLE_80P80MHZ &&
|
|
|
new_vht_chandef.width == NL80211_CHAN_WIDTH_80P80)
|
|
|
ieee80211_chandef_downgrade(&new_vht_chandef);
|
|
|
if (sta_flags & IEEE80211_STA_DISABLE_160MHZ &&
|
|
|
new_vht_chandef.width == NL80211_CHAN_WIDTH_160)
|
|
|
ieee80211_chandef_downgrade(&new_vht_chandef);
|
|
|
- if (sta_flags & IEEE80211_STA_DISABLE_40MHZ &&
|
|
|
- new_vht_chandef.width > NL80211_CHAN_WIDTH_20)
|
|
|
- ieee80211_chandef_downgrade(&new_vht_chandef);
|
|
|
}
|
|
|
|
|
|
/* if VHT data is there validate & use it */
|