mirror of
https://github.com/Telecominfraproject/wlan-ap.git
synced 2025-12-24 21:02:35 +00:00
42 lines
1.6 KiB
Diff
42 lines
1.6 KiB
Diff
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
|
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
|
@@ -1628,6 +1628,7 @@ static void ath11k_peer_assoc_h_he(struc
|
|
enum nl80211_band band;
|
|
const u16 *he_mcs_mask;
|
|
u8 max_nss, he_mcs;
|
|
+ u8 ampdu_factor;
|
|
__le16 he_tx_mcs = 0, v = 0;
|
|
int i;
|
|
|
|
@@ -1654,6 +1655,30 @@ static void ath11k_peer_assoc_h_he(struc
|
|
/* the top most byte is used to indicate BSS color info */
|
|
arg->peer_he_ops &= 0xffffff;
|
|
|
|
+ /* As per section 26.6.1 11ax Draft4.0, if the Max AMPDU Exponent Extension
|
|
+ * in HE cap is zero, use the arg->peer_max_mpdu as calculated while parsing
|
|
+ * VHT caps(if VHT caps is present) or HT caps (if VHT caps is not present).
|
|
+ *
|
|
+ * For non-zero value of Max AMPDU Extponent Extension in HE MAC caps,
|
|
+ * if a HE STA sends VHT cap and HE cap IE in assoc request then, use
|
|
+ * MAX_AMPDU_LEN_FACTOR as 20 to calculate max_ampdu length.
|
|
+ * If a HE STA that does not send VHT cap, but HE and HT cap in assoc
|
|
+ * request, then use MAX_AMPDU_LEN_FACTOR as 16 to calculate max_ampdu
|
|
+ * length.
|
|
+ */
|
|
+ ampdu_factor = (he_cap->he_cap_elem.mac_cap_info[3] &
|
|
+ IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_MASK) >>
|
|
+ IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_SHIFT;
|
|
+
|
|
+ if (ampdu_factor) {
|
|
+ if (sta->vht_cap.vht_supported)
|
|
+ arg->peer_max_mpdu = (1 << (IEEE80211_HE_VHT_MAX_AMPDU_FACTOR +
|
|
+ ampdu_factor)) - 1;
|
|
+ else if (sta->ht_cap.ht_supported)
|
|
+ arg->peer_max_mpdu = (1 << (IEEE80211_HE_HT_MAX_AMPDU_FACTOR +
|
|
+ ampdu_factor)) - 1;
|
|
+ }
|
|
+
|
|
if (he_cap->he_cap_elem.phy_cap_info[6] &
|
|
IEEE80211_HE_PHY_CAP6_PPE_THRESHOLD_PRESENT) {
|
|
int bit = 7;
|