diff options
author | Johannes Berg <johannes.berg@intel.com> | 2015-12-18 09:08:34 -0500 |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2016-02-24 03:04:21 -0500 |
commit | 8ac3c70419176b0fbc4aeae30de661f690b2e3ae (patch) | |
tree | d4581a3b2301e9d60b7424a922fc61aa26244db0 /net/mac80211/mlme.c | |
parent | de3bb771f471ba7c745a913b95eee70d5fb199b1 (diff) |
mac80211: refactor HT/VHT to chandef code
The station MLME and IBSS/mesh ones use entirely different
code for interpreting HT and VHT operation elements. Change
the code that interprets them a bit - it now modifies an
existing chandef - and use it also in the MLME code.
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net/mac80211/mlme.c')
-rw-r--r-- | net/mac80211/mlme.c | 41 |
1 files changed, 4 insertions, 37 deletions
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c index 4af9b2bcc020..e6d198b981ab 100644 --- a/net/mac80211/mlme.c +++ b/net/mac80211/mlme.c | |||
@@ -196,16 +196,7 @@ ieee80211_determine_chantype(struct ieee80211_sub_if_data *sdata, | |||
196 | 196 | ||
197 | /* check 40 MHz support, if we have it */ | 197 | /* check 40 MHz support, if we have it */ |
198 | if (sta_ht_cap.cap & IEEE80211_HT_CAP_SUP_WIDTH_20_40) { | 198 | if (sta_ht_cap.cap & IEEE80211_HT_CAP_SUP_WIDTH_20_40) { |
199 | switch (ht_oper->ht_param & IEEE80211_HT_PARAM_CHA_SEC_OFFSET) { | 199 | ieee80211_chandef_ht_oper(ht_oper, chandef); |
200 | case IEEE80211_HT_PARAM_CHA_SEC_ABOVE: | ||
201 | chandef->width = NL80211_CHAN_WIDTH_40; | ||
202 | chandef->center_freq1 += 10; | ||
203 | break; | ||
204 | case IEEE80211_HT_PARAM_CHA_SEC_BELOW: | ||
205 | chandef->width = NL80211_CHAN_WIDTH_40; | ||
206 | chandef->center_freq1 -= 10; | ||
207 | break; | ||
208 | } | ||
209 | } else { | 200 | } else { |
210 | /* 40 MHz (and 80 MHz) must be supported for VHT */ | 201 | /* 40 MHz (and 80 MHz) must be supported for VHT */ |
211 | ret = IEEE80211_STA_DISABLE_VHT; | 202 | ret = IEEE80211_STA_DISABLE_VHT; |
@@ -219,35 +210,11 @@ ieee80211_determine_chantype(struct ieee80211_sub_if_data *sdata, | |||
219 | goto out; | 210 | goto out; |
220 | } | 211 | } |
221 | 212 | ||
222 | vht_chandef.chan = channel; | 213 | vht_chandef = *chandef; |
223 | vht_chandef.center_freq1 = | 214 | if (!ieee80211_chandef_vht_oper(vht_oper, &vht_chandef)) { |
224 | ieee80211_channel_to_frequency(vht_oper->center_freq_seg1_idx, | ||
225 | channel->band); | ||
226 | vht_chandef.center_freq2 = 0; | ||
227 | |||
228 | switch (vht_oper->chan_width) { | ||
229 | case IEEE80211_VHT_CHANWIDTH_USE_HT: | ||
230 | vht_chandef.width = chandef->width; | ||
231 | vht_chandef.center_freq1 = chandef->center_freq1; | ||
232 | break; | ||
233 | case IEEE80211_VHT_CHANWIDTH_80MHZ: | ||
234 | vht_chandef.width = NL80211_CHAN_WIDTH_80; | ||
235 | break; | ||
236 | case IEEE80211_VHT_CHANWIDTH_160MHZ: | ||
237 | vht_chandef.width = NL80211_CHAN_WIDTH_160; | ||
238 | break; | ||
239 | case IEEE80211_VHT_CHANWIDTH_80P80MHZ: | ||
240 | vht_chandef.width = NL80211_CHAN_WIDTH_80P80; | ||
241 | vht_chandef.center_freq2 = | ||
242 | ieee80211_channel_to_frequency( | ||
243 | vht_oper->center_freq_seg2_idx, | ||
244 | channel->band); | ||
245 | break; | ||
246 | default: | ||
247 | if (!(ifmgd->flags & IEEE80211_STA_DISABLE_VHT)) | 215 | if (!(ifmgd->flags & IEEE80211_STA_DISABLE_VHT)) |
248 | sdata_info(sdata, | 216 | sdata_info(sdata, |
249 | "AP VHT operation IE has invalid channel width (%d), disable VHT\n", | 217 | "AP VHT information is invalid, disable VHT\n"); |
250 | vht_oper->chan_width); | ||
251 | ret = IEEE80211_STA_DISABLE_VHT; | 218 | ret = IEEE80211_STA_DISABLE_VHT; |
252 | goto out; | 219 | goto out; |
253 | } | 220 | } |