wlan-ap-Telecominfraproject/feeds/wifi-ax/mac80211/patches/qca/110-ath11k-fix-setting-range-of-mcs-rates-in-he.patch
John Crispin 8cd26b4b50 ipq807x: update to 11.4-CS
Signed-off-by: John Crispin <john@phrozen.org>
2021-09-14 09:16:23 +02:00

81 lines
2.8 KiB
Diff

--- a/drivers/net/wireless/ath/ath11k/mac.c
+++ b/drivers/net/wireless/ath/ath11k/mac.c
@@ -1740,6 +1740,16 @@ static void ath11k_peer_assoc_h_he(struc
he_tx_mcs = v;
break;
}
+
+ if ((he_mcs_mask[0] == 0 || he_mcs_mask[1] == 0) &&
+ (he_cap->he_cap_elem.phy_cap_info[HECAP_PHYDWORD_4] &
+ IEEE80211_HE_PHY_CAP4_SU_BEAMFORMEE)) {
+ arg->peer_vht_caps &= ~IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE;
+ arg->peer_he_cap_macinfo_internal |=
+ IEEE80211_HE_DL_MU_SUPPORT_DISABLE <<
+ IEEE80211_HE_DL_MUMIMO_SUPP_S;
+ }
+
/* Calculate peer NSS capability from HE capabilities if STA
* supports HE.
*/
@@ -6761,7 +6771,7 @@ ath11k_mac_op_set_bitrate_mask(struct ie
* RATEMASK CMD
*/
ath11k_warn(ar->ab,
- "Setting more than one MCS Value in bitrate mask not supported\n");
+ "Setting VHT MCS range other than 0-7, 0-8 and 0-9 in bitrate mask not supported\n");
return -EINVAL;
}
@@ -6771,7 +6781,7 @@ ath11k_mac_op_set_bitrate_mask(struct ie
if (!ath11k_mac_he_mcs_range_present(ar, band, mask) &&
num_rates > 1) {
ath11k_warn(ar->ab,
- "Setting more than one HE MCS Value in bitrate mask not supported\n");
+ "Setting HE MCS range other than 0-7, 0-9 and 0-11 in bitrate mask not supported\n");
return -EINVAL;
}
--- a/drivers/net/wireless/ath/ath11k/wmi.c
+++ b/drivers/net/wireless/ath/ath11k/wmi.c
@@ -2006,8 +2006,8 @@ int ath11k_wmi_send_peer_assoc_cmd(struc
FIELD_PREP(WMI_TLV_LEN,
sizeof(*he_mcs) - TLV_HDR_SIZE);
- he_mcs->rx_mcs_set = param->peer_he_rx_mcs_set[i];
- he_mcs->tx_mcs_set = param->peer_he_tx_mcs_set[i];
+ he_mcs->rx_mcs_set = param->peer_he_tx_mcs_set[i];
+ he_mcs->tx_mcs_set = param->peer_he_rx_mcs_set[i];
ptr += sizeof(*he_mcs);
}
--- a/drivers/net/wireless/ath/ath11k/wmi.h
+++ b/drivers/net/wireless/ath/ath11k/wmi.h
@@ -3956,8 +3956,8 @@ struct wmi_vht_rate_set {
struct wmi_he_rate_set {
u32 tlv_header;
- u32 rx_mcs_set;
- u32 tx_mcs_set;
+ u32 rx_mcs_set; /* MCS at which the peer can receive */
+ u32 tx_mcs_set; /* MCS at which the peer can transmit */
} __packed;
#define MAX_REG_RULES 10
--- a/drivers/net/wireless/ath/ath11k/mac.h
+++ b/drivers/net/wireless/ath/ath11k/mac.h
@@ -122,6 +122,14 @@ struct ath11k_generic_iter {
#define ATH11K_OBSS_PD_SRG_EN BIT(30)
#define ATH11K_OBSS_PD_NON_SRG_EN BIT(31)
+/* HECAP info internal bits */
+#define IEEE80211_HE_DL_MUMIMO_SUPP_S 5
+
+#define IEEE80211_HE_DL_MU_SUPPORT_DEFAULT 0
+#define IEEE80211_HE_DL_MU_SUPPORT_DISABLE 1
+#define IEEE80211_HE_DL_MU_SUPPORT_ENABLE 2
+#define IEEE80211_HE_DL_MU_SUPPORT_INVALID 3
+
extern const struct htt_rx_ring_tlv_filter ath11k_mac_mon_status_filter_default;
int ath11k_mac_ap_ps_recalc(struct ath11k *ar);