Commit f04d2c24 authored by Johannes Berg's avatar Johannes Berg
Browse files

wifi: mac80211: disallow drivers with HT wider than HE



To simplify the code in the next patch, disallow drivers
supporting 40 MHz in HT but not HE, since we'd otherwise
have to track local maximum bandwidth per mode there.

Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
Reviewed-by: default avatarGregory Greenman <gregory.greenman@intel.com>
Signed-off-by: default avatarMiri Korenblit <miriam.rachel.korenblit@intel.com>
Link: https://msgid.link/20240111181514.da15fe3214d2.I4df51ad2f4c844615c168bf9bdb498925b3c77d4@changeid


Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent 6593c7ae
Loading
Loading
Loading
Loading
+18 −0
Original line number Diff line number Diff line
@@ -1119,8 +1119,26 @@ int ieee80211_register_hw(struct ieee80211_hw *hw)
		supp_vht = supp_vht || sband->vht_cap.vht_supported;

		for_each_sband_iftype_data(sband, i, iftd) {
			u8 he_40_mhz_cap;

			supp_he = supp_he || iftd->he_cap.has_he;
			supp_eht = supp_eht || iftd->eht_cap.has_eht;

			if (sband->band == NL80211_BAND_2GHZ)
				he_40_mhz_cap =
					IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_40MHZ_IN_2G;
			else
				he_40_mhz_cap =
					IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_40MHZ_80MHZ_IN_5G;

			/* currently no support for HE client where HT has 40 MHz but not HT */
			if (iftd->he_cap.has_he &&
			    iftd->types_mask & (BIT(NL80211_IFTYPE_STATION) |
						BIT(NL80211_IFTYPE_P2P_CLIENT)) &&
			    sband->ht_cap.ht_supported &&
			    sband->ht_cap.cap & IEEE80211_HT_CAP_SUP_WIDTH_20_40 &&
			    !(iftd->he_cap.he_cap_elem.phy_cap_info[0] & he_40_mhz_cap))
				return -EINVAL;
		}

		/* HT, VHT, HE require QoS, thus >= 4 queues */