aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGanapathi Bhat <gbhat@marvell.com>2018-03-09 13:15:25 -0500
committerKalle Valo <kvalo@codeaurora.org>2018-03-13 12:53:46 -0400
commit77423fa739274a4c7b0e7ad90ca52ef22bdbe84e (patch)
tree0a3a1fbcd6d4325a8bddfaa88cf35f0bbb2ce816
parent53a7094204b7f2b9016648b5c4b5ece8e810a461 (diff)
mwifiex: fix incorrect ht capability problem
IEEE80211_CHAN_NO_HT40PLUS and IEEE80211_CHAN_NO_HT40PLUS channel flags tell if HT40 operation is allowed on a channel or not. This patch ensures ht_capability information is modified accordingly so that we don't end up creating a HT40 connection when it's not allowed for current regulatory domain. Signed-off-by: Cathy Luo <cluo@marvell.com> Signed-off-by: Ganapathi Bhat <gbhat@marvell.com> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
-rw-r--r--drivers/net/wireless/marvell/mwifiex/11n.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/drivers/net/wireless/marvell/mwifiex/11n.c b/drivers/net/wireless/marvell/mwifiex/11n.c
index 8772e3949327..feebfdcf025a 100644
--- a/drivers/net/wireless/marvell/mwifiex/11n.c
+++ b/drivers/net/wireless/marvell/mwifiex/11n.c
@@ -341,6 +341,36 @@ mwifiex_cmd_append_11n_tlv(struct mwifiex_private *priv,
341 le16_to_cpu(ht_cap->header.len)); 341 le16_to_cpu(ht_cap->header.len));
342 342
343 mwifiex_fill_cap_info(priv, radio_type, &ht_cap->ht_cap); 343 mwifiex_fill_cap_info(priv, radio_type, &ht_cap->ht_cap);
344 /* Update HT40 capability from current channel information */
345 if (bss_desc->bcn_ht_oper) {
346 u8 ht_param = bss_desc->bcn_ht_oper->ht_param;
347 u8 radio =
348 mwifiex_band_to_radio_type(bss_desc->bss_band);
349 int freq =
350 ieee80211_channel_to_frequency(bss_desc->channel,
351 radio);
352 struct ieee80211_channel *chan =
353 ieee80211_get_channel(priv->adapter->wiphy, freq);
354
355 switch (ht_param & IEEE80211_HT_PARAM_CHA_SEC_OFFSET) {
356 case IEEE80211_HT_PARAM_CHA_SEC_ABOVE:
357 if (chan->flags & IEEE80211_CHAN_NO_HT40PLUS) {
358 ht_cap->ht_cap.cap_info &=
359 ~IEEE80211_HT_CAP_SUP_WIDTH_20_40;
360 ht_cap->ht_cap.cap_info &=
361 ~IEEE80211_HT_CAP_SGI_40;
362 }
363 break;
364 case IEEE80211_HT_PARAM_CHA_SEC_BELOW:
365 if (chan->flags & IEEE80211_CHAN_NO_HT40MINUS) {
366 ht_cap->ht_cap.cap_info &=
367 ~IEEE80211_HT_CAP_SUP_WIDTH_20_40;
368 ht_cap->ht_cap.cap_info &=
369 ~IEEE80211_HT_CAP_SGI_40;
370 }
371 break;
372 }
373 }
344 374
345 *buffer += sizeof(struct mwifiex_ie_types_htcap); 375 *buffer += sizeof(struct mwifiex_ie_types_htcap);
346 ret_len += sizeof(struct mwifiex_ie_types_htcap); 376 ret_len += sizeof(struct mwifiex_ie_types_htcap);