Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 77423fa7 authored by Ganapathi Bhat's avatar Ganapathi Bhat Committed by Kalle Valo
Browse files

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: default avatarCathy Luo <cluo@marvell.com>
Signed-off-by: default avatarGanapathi Bhat <gbhat@marvell.com>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
parent 53a70942
Loading
Loading
Loading
Loading
+30 −0
Original line number Diff line number Diff line
@@ -341,6 +341,36 @@ mwifiex_cmd_append_11n_tlv(struct mwifiex_private *priv,
		       le16_to_cpu(ht_cap->header.len));

		mwifiex_fill_cap_info(priv, radio_type, &ht_cap->ht_cap);
		/* Update HT40 capability from current channel information */
		if (bss_desc->bcn_ht_oper) {
			u8 ht_param = bss_desc->bcn_ht_oper->ht_param;
			u8 radio =
			mwifiex_band_to_radio_type(bss_desc->bss_band);
			int freq =
			ieee80211_channel_to_frequency(bss_desc->channel,
						       radio);
			struct ieee80211_channel *chan =
			ieee80211_get_channel(priv->adapter->wiphy, freq);

			switch (ht_param & IEEE80211_HT_PARAM_CHA_SEC_OFFSET) {
			case IEEE80211_HT_PARAM_CHA_SEC_ABOVE:
				if (chan->flags & IEEE80211_CHAN_NO_HT40PLUS) {
					ht_cap->ht_cap.cap_info &=
					~IEEE80211_HT_CAP_SUP_WIDTH_20_40;
					ht_cap->ht_cap.cap_info &=
					~IEEE80211_HT_CAP_SGI_40;
				}
				break;
			case IEEE80211_HT_PARAM_CHA_SEC_BELOW:
				if (chan->flags & IEEE80211_CHAN_NO_HT40MINUS) {
					ht_cap->ht_cap.cap_info &=
					~IEEE80211_HT_CAP_SUP_WIDTH_20_40;
					ht_cap->ht_cap.cap_info &=
					~IEEE80211_HT_CAP_SGI_40;
				}
				break;
			}
		}

		*buffer += sizeof(struct mwifiex_ie_types_htcap);
		ret_len += sizeof(struct mwifiex_ie_types_htcap);