From fb98c8a610e8ec0e3b51fa1859284220bc49b524 Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Tue, 19 Oct 2021 11:19:26 +0200 Subject: [PATCH] mac80211: backport a few trivial patches No functional changes, just some renames to make it easier to keep mt76 in sync with upstream Signed-off-by: Felix Fietkau (cherry-picked from commit e62c5504701c7a665c9cf89ddbcb062f5ade6e37) (cherry-picked from commit a889dcd3f21e50dc3e7f827ff0e486020562a6f8) --- ...n-some-HE-capabilities-with-the-spec.patch | 196 ++++++++++++++++++ ...pelling-of-A-MSDU-in-HE-capabilities.patch | 113 ++++++++++ ...E-capabilities-A-MPDU-Length-Exponen.patch | 148 +++++++++++++ ...pelling-of-A-MSDU-in-HE-capabilities.patch | 55 +++++ ...n-some-HE-capabilities-with-the-spec.patch | 70 +++++++ ...E-capabilities-A-MPDU-Length-Exponen.patch | 35 ++++ 6 files changed, 617 insertions(+) create mode 100644 package/kernel/mac80211/patches/subsys/391-wireless-align-some-HE-capabilities-with-the-spec.patch create mode 100644 package/kernel/mac80211/patches/subsys/392-wireless-fix-spelling-of-A-MSDU-in-HE-capabilities.patch create mode 100644 package/kernel/mac80211/patches/subsys/393-wireless-align-HE-capabilities-A-MPDU-Length-Exponen.patch create mode 100644 package/kernel/mt76/patches/100-wireless-fix-spelling-of-A-MSDU-in-HE-capabilities.patch create mode 100644 package/kernel/mt76/patches/101-wireless-align-some-HE-capabilities-with-the-spec.patch create mode 100644 package/kernel/mt76/patches/102-wireless-align-HE-capabilities-A-MPDU-Length-Exponen.patch diff --git a/package/kernel/mac80211/patches/subsys/391-wireless-align-some-HE-capabilities-with-the-spec.patch b/package/kernel/mac80211/patches/subsys/391-wireless-align-some-HE-capabilities-with-the-spec.patch new file mode 100644 index 0000000000..eb32c49890 --- /dev/null +++ b/package/kernel/mac80211/patches/subsys/391-wireless-align-some-HE-capabilities-with-the-spec.patch @@ -0,0 +1,196 @@ +From: Johannes Berg +Date: Fri, 9 Apr 2021 12:40:17 +0300 +Subject: [PATCH] wireless: align some HE capabilities with the spec + +Some names were changed, align that with the spec as of +802.11ax-D6.1. + +Signed-off-by: Luca Coelho +Link: https://lore.kernel.org/r/iwlwifi.20210409123755.b1e5fbab0d8c.I3eb6076cb0714ec6aec6b8f9dee613ce4a05d825@changeid +Signed-off-by: Johannes Berg +--- + +--- a/drivers/net/wireless/ath/ath11k/mac.c ++++ b/drivers/net/wireless/ath/ath11k/mac.c +@@ -3627,7 +3627,7 @@ ath11k_mac_filter_he_cap_mesh(struct iee + IEEE80211_HE_MAC_CAP4_BQR; + he_cap_elem->mac_cap_info[4] &= ~m; + +- m = IEEE80211_HE_MAC_CAP5_SUBCHAN_SELECVITE_TRANSMISSION | ++ m = IEEE80211_HE_MAC_CAP5_SUBCHAN_SELECTIVE_TRANSMISSION | + IEEE80211_HE_MAC_CAP5_UL_2x996_TONE_RU | + IEEE80211_HE_MAC_CAP5_PUNCTURED_SOUNDING | + IEEE80211_HE_MAC_CAP5_HT_VHT_TRIG_FRAME_RX; +@@ -3637,7 +3637,7 @@ ath11k_mac_filter_he_cap_mesh(struct iee + IEEE80211_HE_PHY_CAP2_UL_MU_PARTIAL_MU_MIMO; + he_cap_elem->phy_cap_info[2] &= ~m; + +- m = IEEE80211_HE_PHY_CAP3_RX_HE_MU_PPDU_FROM_NON_AP_STA | ++ m = IEEE80211_HE_PHY_CAP3_RX_PARTIAL_BW_SU_IN_20MHZ_MU | + IEEE80211_HE_PHY_CAP3_DCM_MAX_CONST_TX_MASK | + IEEE80211_HE_PHY_CAP3_DCM_MAX_CONST_RX_MASK; + he_cap_elem->phy_cap_info[3] &= ~m; +@@ -3649,13 +3649,13 @@ ath11k_mac_filter_he_cap_mesh(struct iee + he_cap_elem->phy_cap_info[5] &= ~m; + + m = IEEE80211_HE_PHY_CAP6_CODEBOOK_SIZE_75_MU | +- IEEE80211_HE_PHY_CAP6_TRIG_MU_BEAMFORMER_FB | ++ IEEE80211_HE_PHY_CAP6_TRIG_MU_BEAMFORMING_PARTIAL_BW_FB | + IEEE80211_HE_PHY_CAP6_TRIG_CQI_FB | + IEEE80211_HE_PHY_CAP6_PARTIAL_BANDWIDTH_DL_MUMIMO; + he_cap_elem->phy_cap_info[6] &= ~m; + +- m = IEEE80211_HE_PHY_CAP7_SRP_BASED_SR | +- IEEE80211_HE_PHY_CAP7_POWER_BOOST_FACTOR_AR | ++ m = IEEE80211_HE_PHY_CAP7_PSR_BASED_SR | ++ IEEE80211_HE_PHY_CAP7_POWER_BOOST_FACTOR_SUPP | + IEEE80211_HE_PHY_CAP7_STBC_TX_ABOVE_80MHZ | + IEEE80211_HE_PHY_CAP7_STBC_RX_ABOVE_80MHZ; + he_cap_elem->phy_cap_info[7] &= ~m; +--- a/drivers/net/wireless/mediatek/mt76/mt7915/init.c ++++ b/drivers/net/wireless/mediatek/mt76/mt7915/init.c +@@ -307,8 +307,8 @@ mt7915_set_stream_he_txbf_caps(struct ie + IEEE80211_HE_PHY_CAP5_BEAMFORMEE_NUM_SND_DIM_ABOVE_80MHZ_MASK; + elem->phy_cap_info[5] &= ~c; + +- c = IEEE80211_HE_PHY_CAP6_TRIG_SU_BEAMFORMER_FB | +- IEEE80211_HE_PHY_CAP6_TRIG_MU_BEAMFORMER_FB; ++ c = IEEE80211_HE_PHY_CAP6_TRIG_SU_BEAMFORMING_FB | ++ IEEE80211_HE_PHY_CAP6_TRIG_MU_BEAMFORMING_PARTIAL_BW_FB; + elem->phy_cap_info[6] &= ~c; + + elem->phy_cap_info[7] &= ~IEEE80211_HE_PHY_CAP7_MAX_NC_MASK; +@@ -348,8 +348,8 @@ mt7915_set_stream_he_txbf_caps(struct ie + c = (nss - 1) | (max_t(int, mcs->tx_mcs_160, 1) << 3); + elem->phy_cap_info[5] |= c; + +- c = IEEE80211_HE_PHY_CAP6_TRIG_SU_BEAMFORMER_FB | +- IEEE80211_HE_PHY_CAP6_TRIG_MU_BEAMFORMER_FB; ++ c = IEEE80211_HE_PHY_CAP6_TRIG_SU_BEAMFORMING_FB | ++ IEEE80211_HE_PHY_CAP6_TRIG_MU_BEAMFORMING_PARTIAL_BW_FB; + elem->phy_cap_info[6] |= c; + } + +@@ -484,7 +484,7 @@ mt7915_init_he_caps(struct mt7915_phy *p + IEEE80211_HE_PHY_CAP6_PARTIAL_BW_EXT_RANGE | + IEEE80211_HE_PHY_CAP6_PPE_THRESHOLD_PRESENT; + he_cap_elem->phy_cap_info[7] |= +- IEEE80211_HE_PHY_CAP7_POWER_BOOST_FACTOR_AR | ++ IEEE80211_HE_PHY_CAP7_POWER_BOOST_FACTOR_SUPP | + IEEE80211_HE_PHY_CAP7_HE_SU_MU_PPDU_4XLTF_AND_08_US_GI; + he_cap_elem->phy_cap_info[8] |= + IEEE80211_HE_PHY_CAP8_20MHZ_IN_40MHZ_HE_PPDU_IN_2G | +--- a/include/linux/ieee80211.h ++++ b/include/linux/ieee80211.h +@@ -2065,7 +2065,7 @@ int ieee80211_get_vht_max_nss(struct iee + #define IEEE80211_HE_MAC_CAP4_BSRP_BQRP_A_MPDU_AGG 0x01 + #define IEEE80211_HE_MAC_CAP4_QTP 0x02 + #define IEEE80211_HE_MAC_CAP4_BQR 0x04 +-#define IEEE80211_HE_MAC_CAP4_SRP_RESP 0x08 ++#define IEEE80211_HE_MAC_CAP4_PSR_RESP 0x08 + #define IEEE80211_HE_MAC_CAP4_NDP_FB_REP 0x10 + #define IEEE80211_HE_MAC_CAP4_OPS 0x20 + #define IEEE80211_HE_MAC_CAP4_AMDSU_IN_AMPDU 0x40 +@@ -2076,7 +2076,7 @@ int ieee80211_get_vht_max_nss(struct iee + + #define IEEE80211_HE_MAC_CAP5_MULTI_TID_AGG_TX_QOS_B40 0x01 + #define IEEE80211_HE_MAC_CAP5_MULTI_TID_AGG_TX_QOS_B41 0x02 +-#define IEEE80211_HE_MAC_CAP5_SUBCHAN_SELECVITE_TRANSMISSION 0x04 ++#define IEEE80211_HE_MAC_CAP5_SUBCHAN_SELECTIVE_TRANSMISSION 0x04 + #define IEEE80211_HE_MAC_CAP5_UL_2x996_TONE_RU 0x08 + #define IEEE80211_HE_MAC_CAP5_OM_CTRL_UL_MU_DATA_DIS_RX 0x10 + #define IEEE80211_HE_MAC_CAP5_HE_DYNAMIC_SM_PS 0x20 +@@ -2134,7 +2134,7 @@ int ieee80211_get_vht_max_nss(struct iee + #define IEEE80211_HE_PHY_CAP3_DCM_MAX_CONST_RX_MASK 0x18 + #define IEEE80211_HE_PHY_CAP3_DCM_MAX_RX_NSS_1 0x00 + #define IEEE80211_HE_PHY_CAP3_DCM_MAX_RX_NSS_2 0x20 +-#define IEEE80211_HE_PHY_CAP3_RX_HE_MU_PPDU_FROM_NON_AP_STA 0x40 ++#define IEEE80211_HE_PHY_CAP3_RX_PARTIAL_BW_SU_IN_20MHZ_MU 0x40 + #define IEEE80211_HE_PHY_CAP3_SU_BEAMFORMER 0x80 + + #define IEEE80211_HE_PHY_CAP4_SU_BEAMFORMEE 0x01 +@@ -2181,15 +2181,15 @@ int ieee80211_get_vht_max_nss(struct iee + + #define IEEE80211_HE_PHY_CAP6_CODEBOOK_SIZE_42_SU 0x01 + #define IEEE80211_HE_PHY_CAP6_CODEBOOK_SIZE_75_MU 0x02 +-#define IEEE80211_HE_PHY_CAP6_TRIG_SU_BEAMFORMER_FB 0x04 +-#define IEEE80211_HE_PHY_CAP6_TRIG_MU_BEAMFORMER_FB 0x08 ++#define IEEE80211_HE_PHY_CAP6_TRIG_SU_BEAMFORMING_FB 0x04 ++#define IEEE80211_HE_PHY_CAP6_TRIG_MU_BEAMFORMING_PARTIAL_BW_FB 0x08 + #define IEEE80211_HE_PHY_CAP6_TRIG_CQI_FB 0x10 + #define IEEE80211_HE_PHY_CAP6_PARTIAL_BW_EXT_RANGE 0x20 + #define IEEE80211_HE_PHY_CAP6_PARTIAL_BANDWIDTH_DL_MUMIMO 0x40 + #define IEEE80211_HE_PHY_CAP6_PPE_THRESHOLD_PRESENT 0x80 + +-#define IEEE80211_HE_PHY_CAP7_SRP_BASED_SR 0x01 +-#define IEEE80211_HE_PHY_CAP7_POWER_BOOST_FACTOR_AR 0x02 ++#define IEEE80211_HE_PHY_CAP7_PSR_BASED_SR 0x01 ++#define IEEE80211_HE_PHY_CAP7_POWER_BOOST_FACTOR_SUPP 0x02 + #define IEEE80211_HE_PHY_CAP7_HE_SU_MU_PPDU_4XLTF_AND_08_US_GI 0x04 + #define IEEE80211_HE_PHY_CAP7_MAX_NC_1 0x08 + #define IEEE80211_HE_PHY_CAP7_MAX_NC_2 0x10 +--- a/net/mac80211/debugfs_sta.c ++++ b/net/mac80211/debugfs_sta.c +@@ -732,15 +732,15 @@ static ssize_t sta_he_capa_read(struct f + PFLAG(MAC, 4, BSRP_BQRP_A_MPDU_AGG, "BSRP-BQRP-A-MPDU-AGG"); + PFLAG(MAC, 4, QTP, "QTP"); + PFLAG(MAC, 4, BQR, "BQR"); +- PFLAG(MAC, 4, SRP_RESP, "SRP-RESP"); ++ PFLAG(MAC, 4, PSR_RESP, "PSR-RESP"); + PFLAG(MAC, 4, NDP_FB_REP, "NDP-FB-REP"); + PFLAG(MAC, 4, OPS, "OPS"); + PFLAG(MAC, 4, AMDSU_IN_AMPDU, "AMSDU-IN-AMPDU"); + + PRINT("MULTI-TID-AGG-TX-QOS-%d", ((cap[5] << 1) | (cap[4] >> 7)) & 0x7); + +- PFLAG(MAC, 5, SUBCHAN_SELECVITE_TRANSMISSION, +- "SUBCHAN-SELECVITE-TRANSMISSION"); ++ PFLAG(MAC, 5, SUBCHAN_SELECTIVE_TRANSMISSION, ++ "SUBCHAN-SELECTIVE-TRANSMISSION"); + PFLAG(MAC, 5, UL_2x996_TONE_RU, "UL-2x996-TONE-RU"); + PFLAG(MAC, 5, OM_CTRL_UL_MU_DATA_DIS_RX, "OM-CTRL-UL-MU-DATA-DIS-RX"); + PFLAG(MAC, 5, HE_DYNAMIC_SM_PS, "HE-DYNAMIC-SM-PS"); +@@ -832,8 +832,8 @@ static ssize_t sta_he_capa_read(struct f + + PFLAG(PHY, 3, DCM_MAX_RX_NSS_1, "DCM-MAX-RX-NSS-1"); + PFLAG(PHY, 3, DCM_MAX_RX_NSS_2, "DCM-MAX-RX-NSS-2"); +- PFLAG(PHY, 3, RX_HE_MU_PPDU_FROM_NON_AP_STA, +- "RX-HE-MU-PPDU-FROM-NON-AP-STA"); ++ PFLAG(PHY, 3, RX_PARTIAL_BW_SU_IN_20MHZ_MU, ++ "RX-PARTIAL-BW-SU-IN-20MHZ-MU"); + PFLAG(PHY, 3, SU_BEAMFORMER, "SU-BEAMFORMER"); + + PFLAG(PHY, 4, SU_BEAMFORMEE, "SU-BEAMFORMEE"); +@@ -853,16 +853,17 @@ static ssize_t sta_he_capa_read(struct f + + PFLAG(PHY, 6, CODEBOOK_SIZE_42_SU, "CODEBOOK-SIZE-42-SU"); + PFLAG(PHY, 6, CODEBOOK_SIZE_75_MU, "CODEBOOK-SIZE-75-MU"); +- PFLAG(PHY, 6, TRIG_SU_BEAMFORMER_FB, "TRIG-SU-BEAMFORMER-FB"); +- PFLAG(PHY, 6, TRIG_MU_BEAMFORMER_FB, "TRIG-MU-BEAMFORMER-FB"); ++ PFLAG(PHY, 6, TRIG_SU_BEAMFORMING_FB, "TRIG-SU-BEAMFORMING-FB"); ++ PFLAG(PHY, 6, TRIG_MU_BEAMFORMING_PARTIAL_BW_FB, ++ "MU-BEAMFORMING-PARTIAL-BW-FB"); + PFLAG(PHY, 6, TRIG_CQI_FB, "TRIG-CQI-FB"); + PFLAG(PHY, 6, PARTIAL_BW_EXT_RANGE, "PARTIAL-BW-EXT-RANGE"); + PFLAG(PHY, 6, PARTIAL_BANDWIDTH_DL_MUMIMO, + "PARTIAL-BANDWIDTH-DL-MUMIMO"); + PFLAG(PHY, 6, PPE_THRESHOLD_PRESENT, "PPE-THRESHOLD-PRESENT"); + +- PFLAG(PHY, 7, SRP_BASED_SR, "SRP-BASED-SR"); +- PFLAG(PHY, 7, POWER_BOOST_FACTOR_AR, "POWER-BOOST-FACTOR-AR"); ++ PFLAG(PHY, 7, PSR_BASED_SR, "PSR-BASED-SR"); ++ PFLAG(PHY, 7, POWER_BOOST_FACTOR_SUPP, "POWER-BOOST-FACTOR-SUPP"); + PFLAG(PHY, 7, HE_SU_MU_PPDU_4XLTF_AND_08_US_GI, + "HE-SU-MU-PPDU-4XLTF-AND-08-US-GI"); + PFLAG_RANGE(PHY, 7, MAX_NC, 0, 1, 1, "MAX-NC-%d"); +--- a/drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c ++++ b/drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c +@@ -631,7 +631,7 @@ static struct ieee80211_sband_iftype_dat + .phy_cap_info[6] = + IEEE80211_HE_PHY_CAP6_PPE_THRESHOLD_PRESENT, + .phy_cap_info[7] = +- IEEE80211_HE_PHY_CAP7_POWER_BOOST_FACTOR_AR | ++ IEEE80211_HE_PHY_CAP7_POWER_BOOST_FACTOR_SUPP | + IEEE80211_HE_PHY_CAP7_HE_SU_MU_PPDU_4XLTF_AND_08_US_GI | + IEEE80211_HE_PHY_CAP7_MAX_NC_1, + .phy_cap_info[8] = diff --git a/package/kernel/mac80211/patches/subsys/392-wireless-fix-spelling-of-A-MSDU-in-HE-capabilities.patch b/package/kernel/mac80211/patches/subsys/392-wireless-fix-spelling-of-A-MSDU-in-HE-capabilities.patch new file mode 100644 index 0000000000..0bd01126f7 --- /dev/null +++ b/package/kernel/mac80211/patches/subsys/392-wireless-fix-spelling-of-A-MSDU-in-HE-capabilities.patch @@ -0,0 +1,113 @@ +From: Johannes Berg +Date: Fri, 9 Apr 2021 12:40:24 +0300 +Subject: [PATCH] wireless: fix spelling of A-MSDU in HE capabilities + +In the HE capabilities, spell A-MSDU correctly, not "A-MDSU". + +Signed-off-by: Luca Coelho +Link: https://lore.kernel.org/r/iwlwifi.20210409123755.9e6ff1af1181.If6868bc6902ccd9a95c74c78f716c4b41473ef14@changeid +Signed-off-by: Johannes Berg +--- + +--- a/drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c ++++ b/drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c +@@ -598,7 +598,7 @@ static struct ieee80211_sband_iftype_dat + IEEE80211_HE_MAC_CAP3_OMI_CONTROL | + IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_VHT_2, + .mac_cap_info[4] = +- IEEE80211_HE_MAC_CAP4_AMDSU_IN_AMPDU | ++ IEEE80211_HE_MAC_CAP4_AMSDU_IN_AMPDU | + IEEE80211_HE_MAC_CAP4_MULTI_TID_AGG_TX_QOS_B39, + .mac_cap_info[5] = + IEEE80211_HE_MAC_CAP5_MULTI_TID_AGG_TX_QOS_B40 | +@@ -682,7 +682,7 @@ static struct ieee80211_sband_iftype_dat + IEEE80211_HE_MAC_CAP3_OMI_CONTROL | + IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_VHT_2, + .mac_cap_info[4] = +- IEEE80211_HE_MAC_CAP4_AMDSU_IN_AMPDU, ++ IEEE80211_HE_MAC_CAP4_AMSDU_IN_AMPDU, + .mac_cap_info[5] = + IEEE80211_HE_MAC_CAP5_UL_2x996_TONE_RU, + .phy_cap_info[0] = +--- a/drivers/net/wireless/mediatek/mt76/mt7915/init.c ++++ b/drivers/net/wireless/mediatek/mt76/mt7915/init.c +@@ -427,7 +427,7 @@ mt7915_init_he_caps(struct mt7915_phy *p + IEEE80211_HE_MAC_CAP3_OMI_CONTROL | + IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_RESERVED; + he_cap_elem->mac_cap_info[4] = +- IEEE80211_HE_MAC_CAP4_AMDSU_IN_AMPDU; ++ IEEE80211_HE_MAC_CAP4_AMSDU_IN_AMPDU; + + if (band == NL80211_BAND_2GHZ) + he_cap_elem->phy_cap_info[0] = +--- a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c ++++ b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c +@@ -1353,7 +1353,7 @@ mt7915_mcu_sta_he_tlv(struct sk_buff *sk + if (elem->mac_cap_info[3] & IEEE80211_HE_MAC_CAP3_OMI_CONTROL) + cap |= STA_REC_HE_CAP_OM; + +- if (elem->mac_cap_info[4] & IEEE80211_HE_MAC_CAP4_AMDSU_IN_AMPDU) ++ if (elem->mac_cap_info[4] & IEEE80211_HE_MAC_CAP4_AMSDU_IN_AMPDU) + cap |= STA_REC_HE_CAP_AMSDU_IN_AMPDU; + + if (elem->mac_cap_info[4] & IEEE80211_HE_MAC_CAP4_BQR) +--- a/include/linux/ieee80211.h ++++ b/include/linux/ieee80211.h +@@ -2068,7 +2068,7 @@ int ieee80211_get_vht_max_nss(struct iee + #define IEEE80211_HE_MAC_CAP4_PSR_RESP 0x08 + #define IEEE80211_HE_MAC_CAP4_NDP_FB_REP 0x10 + #define IEEE80211_HE_MAC_CAP4_OPS 0x20 +-#define IEEE80211_HE_MAC_CAP4_AMDSU_IN_AMPDU 0x40 ++#define IEEE80211_HE_MAC_CAP4_AMSDU_IN_AMPDU 0x40 + /* Multi TID agg TX is split between byte #4 and #5 + * The value is a combination of B39,B40,B41 + */ +--- a/net/mac80211/debugfs_sta.c ++++ b/net/mac80211/debugfs_sta.c +@@ -735,7 +735,7 @@ static ssize_t sta_he_capa_read(struct f + PFLAG(MAC, 4, PSR_RESP, "PSR-RESP"); + PFLAG(MAC, 4, NDP_FB_REP, "NDP-FB-REP"); + PFLAG(MAC, 4, OPS, "OPS"); +- PFLAG(MAC, 4, AMDSU_IN_AMPDU, "AMSDU-IN-AMPDU"); ++ PFLAG(MAC, 4, AMSDU_IN_AMPDU, "AMSDU-IN-AMPDU"); + + PRINT("MULTI-TID-AGG-TX-QOS-%d", ((cap[5] << 1) | (cap[4] >> 7)) & 0x7); + +--- a/drivers/net/wireless/mac80211_hwsim.c ++++ b/drivers/net/wireless/mac80211_hwsim.c +@@ -2748,7 +2748,7 @@ static const struct ieee80211_sband_ifty + .mac_cap_info[3] = + IEEE80211_HE_MAC_CAP3_OMI_CONTROL | + IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_VHT_2, +- .mac_cap_info[4] = IEEE80211_HE_MAC_CAP4_AMDSU_IN_AMPDU, ++ .mac_cap_info[4] = IEEE80211_HE_MAC_CAP4_AMSDU_IN_AMPDU, + .phy_cap_info[1] = + IEEE80211_HE_PHY_CAP1_PREAMBLE_PUNC_RX_MASK | + IEEE80211_HE_PHY_CAP1_DEVICE_CLASS_A | +@@ -2792,7 +2792,7 @@ static const struct ieee80211_sband_ifty + .mac_cap_info[3] = + IEEE80211_HE_MAC_CAP3_OMI_CONTROL | + IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_VHT_2, +- .mac_cap_info[4] = IEEE80211_HE_MAC_CAP4_AMDSU_IN_AMPDU, ++ .mac_cap_info[4] = IEEE80211_HE_MAC_CAP4_AMSDU_IN_AMPDU, + .phy_cap_info[1] = + IEEE80211_HE_PHY_CAP1_PREAMBLE_PUNC_RX_MASK | + IEEE80211_HE_PHY_CAP1_DEVICE_CLASS_A | +@@ -2838,7 +2838,7 @@ static const struct ieee80211_sband_ifty + .mac_cap_info[3] = + IEEE80211_HE_MAC_CAP3_OMI_CONTROL | + IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_VHT_2, +- .mac_cap_info[4] = IEEE80211_HE_MAC_CAP4_AMDSU_IN_AMPDU, ++ .mac_cap_info[4] = IEEE80211_HE_MAC_CAP4_AMSDU_IN_AMPDU, + .phy_cap_info[0] = + IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_40MHZ_80MHZ_IN_5G | + IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_160MHZ_IN_5G | +@@ -2886,7 +2886,7 @@ static const struct ieee80211_sband_ifty + .mac_cap_info[3] = + IEEE80211_HE_MAC_CAP3_OMI_CONTROL | + IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_VHT_2, +- .mac_cap_info[4] = IEEE80211_HE_MAC_CAP4_AMDSU_IN_AMPDU, ++ .mac_cap_info[4] = IEEE80211_HE_MAC_CAP4_AMSDU_IN_AMPDU, + .phy_cap_info[0] = + IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_40MHZ_80MHZ_IN_5G | + IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_160MHZ_IN_5G | diff --git a/package/kernel/mac80211/patches/subsys/393-wireless-align-HE-capabilities-A-MPDU-Length-Exponen.patch b/package/kernel/mac80211/patches/subsys/393-wireless-align-HE-capabilities-A-MPDU-Length-Exponen.patch new file mode 100644 index 0000000000..42b71df9d1 --- /dev/null +++ b/package/kernel/mac80211/patches/subsys/393-wireless-align-HE-capabilities-A-MPDU-Length-Exponen.patch @@ -0,0 +1,148 @@ +From: Johannes Berg +Date: Fri, 9 Apr 2021 12:40:20 +0300 +Subject: [PATCH] wireless: align HE capabilities A-MPDU Length Exponent + Extension + +The A-MPDU length exponent extension is defined differently in +802.11ax D6.1, align with that. + +Signed-off-by: Luca Coelho +Link: https://lore.kernel.org/r/iwlwifi.20210409123755.c2a257d3e2df.I3455245d388c52c61dace7e7958dbed7e807cfb6@changeid +Signed-off-by: Johannes Berg +--- + +--- a/drivers/net/wireless/ath/ath11k/mac.c ++++ b/drivers/net/wireless/ath/ath11k/mac.c +@@ -1290,9 +1290,8 @@ static void ath11k_peer_assoc_h_he(struc + * 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; ++ ampdu_factor = u8_get_bits(he_cap->he_cap_elem.mac_cap_info[3], ++ IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_MASK); + + if (ampdu_factor) { + if (sta->vht_cap.vht_supported) +--- a/drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c ++++ b/drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c +@@ -596,7 +596,7 @@ static struct ieee80211_sband_iftype_dat + IEEE80211_HE_MAC_CAP2_32BIT_BA_BITMAP, + .mac_cap_info[3] = + IEEE80211_HE_MAC_CAP3_OMI_CONTROL | +- IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_VHT_2, ++ IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_EXT_2, + .mac_cap_info[4] = + IEEE80211_HE_MAC_CAP4_AMSDU_IN_AMPDU | + IEEE80211_HE_MAC_CAP4_MULTI_TID_AGG_TX_QOS_B39, +@@ -680,7 +680,7 @@ static struct ieee80211_sband_iftype_dat + IEEE80211_HE_MAC_CAP2_BSR, + .mac_cap_info[3] = + IEEE80211_HE_MAC_CAP3_OMI_CONTROL | +- IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_VHT_2, ++ IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_EXT_2, + .mac_cap_info[4] = + IEEE80211_HE_MAC_CAP4_AMSDU_IN_AMPDU, + .mac_cap_info[5] = +--- a/drivers/net/wireless/mac80211_hwsim.c ++++ b/drivers/net/wireless/mac80211_hwsim.c +@@ -2747,7 +2747,7 @@ static const struct ieee80211_sband_ifty + IEEE80211_HE_MAC_CAP2_ACK_EN, + .mac_cap_info[3] = + IEEE80211_HE_MAC_CAP3_OMI_CONTROL | +- IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_VHT_2, ++ IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_EXT_3, + .mac_cap_info[4] = IEEE80211_HE_MAC_CAP4_AMSDU_IN_AMPDU, + .phy_cap_info[1] = + IEEE80211_HE_PHY_CAP1_PREAMBLE_PUNC_RX_MASK | +@@ -2791,7 +2791,7 @@ static const struct ieee80211_sband_ifty + IEEE80211_HE_MAC_CAP2_ACK_EN, + .mac_cap_info[3] = + IEEE80211_HE_MAC_CAP3_OMI_CONTROL | +- IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_VHT_2, ++ IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_EXT_3, + .mac_cap_info[4] = IEEE80211_HE_MAC_CAP4_AMSDU_IN_AMPDU, + .phy_cap_info[1] = + IEEE80211_HE_PHY_CAP1_PREAMBLE_PUNC_RX_MASK | +@@ -2837,7 +2837,7 @@ static const struct ieee80211_sband_ifty + IEEE80211_HE_MAC_CAP2_ACK_EN, + .mac_cap_info[3] = + IEEE80211_HE_MAC_CAP3_OMI_CONTROL | +- IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_VHT_2, ++ IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_EXT_3, + .mac_cap_info[4] = IEEE80211_HE_MAC_CAP4_AMSDU_IN_AMPDU, + .phy_cap_info[0] = + IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_40MHZ_80MHZ_IN_5G | +@@ -2885,7 +2885,7 @@ static const struct ieee80211_sband_ifty + IEEE80211_HE_MAC_CAP2_ACK_EN, + .mac_cap_info[3] = + IEEE80211_HE_MAC_CAP3_OMI_CONTROL | +- IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_VHT_2, ++ IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_EXT_3, + .mac_cap_info[4] = IEEE80211_HE_MAC_CAP4_AMSDU_IN_AMPDU, + .phy_cap_info[0] = + IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_40MHZ_80MHZ_IN_5G | +--- a/drivers/net/wireless/mediatek/mt76/mt7915/init.c ++++ b/drivers/net/wireless/mediatek/mt76/mt7915/init.c +@@ -425,7 +425,7 @@ mt7915_init_he_caps(struct mt7915_phy *p + IEEE80211_HE_MAC_CAP0_HTC_HE; + he_cap_elem->mac_cap_info[3] = + IEEE80211_HE_MAC_CAP3_OMI_CONTROL | +- IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_RESERVED; ++ IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_EXT_3; + he_cap_elem->mac_cap_info[4] = + IEEE80211_HE_MAC_CAP4_AMSDU_IN_AMPDU; + +--- a/include/linux/ieee80211.h ++++ b/include/linux/ieee80211.h +@@ -2051,17 +2051,15 @@ int ieee80211_get_vht_max_nss(struct iee + * A-MDPU Length Exponent field in the HT capabilities, VHT capabilities and the + * same field in the HE capabilities. + */ +-#define IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_USE_VHT 0x00 +-#define IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_VHT_1 0x08 +-#define IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_VHT_2 0x10 +-#define IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_RESERVED 0x18 ++#define IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_EXT_0 0x00 ++#define IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_EXT_1 0x08 ++#define IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_EXT_2 0x10 ++#define IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_EXT_3 0x18 + #define IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_MASK 0x18 + #define IEEE80211_HE_MAC_CAP3_AMSDU_FRAG 0x20 + #define IEEE80211_HE_MAC_CAP3_FLEX_TWT_SCHED 0x40 + #define IEEE80211_HE_MAC_CAP3_RX_CTRL_FRAME_TO_MULTIBSS 0x80 + +-#define IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_SHIFT 3 +- + #define IEEE80211_HE_MAC_CAP4_BSRP_BQRP_A_MPDU_AGG 0x01 + #define IEEE80211_HE_MAC_CAP4_QTP 0x02 + #define IEEE80211_HE_MAC_CAP4_BQR 0x04 +--- a/net/mac80211/debugfs_sta.c ++++ b/net/mac80211/debugfs_sta.c +@@ -711,17 +711,17 @@ static ssize_t sta_he_capa_read(struct f + PFLAG(MAC, 3, OFDMA_RA, "OFDMA-RA"); + + switch (cap[3] & IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_MASK) { +- case IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_USE_VHT: +- PRINT("MAX-AMPDU-LEN-EXP-USE-VHT"); ++ case IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_EXT_0: ++ PRINT("MAX-AMPDU-LEN-EXP-USE-EXT-0"); + break; +- case IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_VHT_1: +- PRINT("MAX-AMPDU-LEN-EXP-VHT-1"); ++ case IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_EXT_1: ++ PRINT("MAX-AMPDU-LEN-EXP-VHT-EXT-1"); + break; +- case IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_VHT_2: +- PRINT("MAX-AMPDU-LEN-EXP-VHT-2"); ++ case IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_EXT_2: ++ PRINT("MAX-AMPDU-LEN-EXP-VHT-EXT-2"); + break; +- case IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_RESERVED: +- PRINT("MAX-AMPDU-LEN-EXP-RESERVED"); ++ case IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_EXT_3: ++ PRINT("MAX-AMPDU-LEN-EXP-VHT-EXT-3"); + break; + } + diff --git a/package/kernel/mt76/patches/100-wireless-fix-spelling-of-A-MSDU-in-HE-capabilities.patch b/package/kernel/mt76/patches/100-wireless-fix-spelling-of-A-MSDU-in-HE-capabilities.patch new file mode 100644 index 0000000000..b540b77057 --- /dev/null +++ b/package/kernel/mt76/patches/100-wireless-fix-spelling-of-A-MSDU-in-HE-capabilities.patch @@ -0,0 +1,55 @@ +From: Johannes Berg +Date: Fri, 9 Apr 2021 12:40:24 +0300 +Subject: [PATCH] wireless: fix spelling of A-MSDU in HE capabilities + +In the HE capabilities, spell A-MSDU correctly, not "A-MDSU". + +Signed-off-by: Luca Coelho +Link: https://lore.kernel.org/r/iwlwifi.20210409123755.9e6ff1af1181.If6868bc6902ccd9a95c74c78f716c4b41473ef14@changeid +Signed-off-by: Johannes Berg +--- + +--- a/mt76_connac_mcu.c ++++ b/mt76_connac_mcu.c +@@ -567,7 +567,7 @@ mt76_connac_mcu_sta_he_tlv(struct sk_buf + if (elem->mac_cap_info[3] & IEEE80211_HE_MAC_CAP3_OMI_CONTROL) + cap |= STA_REC_HE_CAP_OM; + +- if (elem->mac_cap_info[4] & IEEE80211_HE_MAC_CAP4_AMDSU_IN_AMPDU) ++ if (elem->mac_cap_info[4] & IEEE80211_HE_MAC_CAP4_AMSDU_IN_AMPDU) + cap |= STA_REC_HE_CAP_AMSDU_IN_AMPDU; + + if (elem->mac_cap_info[4] & IEEE80211_HE_MAC_CAP4_BQR) +--- a/mt7915/init.c ++++ b/mt7915/init.c +@@ -761,7 +761,7 @@ mt7915_init_he_caps(struct mt7915_phy *p + IEEE80211_HE_MAC_CAP3_OMI_CONTROL | + IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_RESERVED; + he_cap_elem->mac_cap_info[4] = +- IEEE80211_HE_MAC_CAP4_AMDSU_IN_AMPDU; ++ IEEE80211_HE_MAC_CAP4_AMSDU_IN_AMPDU; + + if (band == NL80211_BAND_2GHZ) + he_cap_elem->phy_cap_info[0] = +--- a/mt7915/mcu.c ++++ b/mt7915/mcu.c +@@ -1361,7 +1361,7 @@ mt7915_mcu_sta_he_tlv(struct sk_buff *sk + if (elem->mac_cap_info[3] & IEEE80211_HE_MAC_CAP3_OMI_CONTROL) + cap |= STA_REC_HE_CAP_OM; + +- if (elem->mac_cap_info[4] & IEEE80211_HE_MAC_CAP4_AMDSU_IN_AMPDU) ++ if (elem->mac_cap_info[4] & IEEE80211_HE_MAC_CAP4_AMSDU_IN_AMPDU) + cap |= STA_REC_HE_CAP_AMSDU_IN_AMPDU; + + if (elem->mac_cap_info[4] & IEEE80211_HE_MAC_CAP4_BQR) +--- a/mt7921/main.c ++++ b/mt7921/main.c +@@ -67,7 +67,7 @@ mt7921_init_he_caps(struct mt7921_phy *p + IEEE80211_HE_MAC_CAP3_OMI_CONTROL | + IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_RESERVED; + he_cap_elem->mac_cap_info[4] = +- IEEE80211_HE_MAC_CAP4_AMDSU_IN_AMPDU; ++ IEEE80211_HE_MAC_CAP4_AMSDU_IN_AMPDU; + + if (band == NL80211_BAND_2GHZ) + he_cap_elem->phy_cap_info[0] = diff --git a/package/kernel/mt76/patches/101-wireless-align-some-HE-capabilities-with-the-spec.patch b/package/kernel/mt76/patches/101-wireless-align-some-HE-capabilities-with-the-spec.patch new file mode 100644 index 0000000000..52a5225eaa --- /dev/null +++ b/package/kernel/mt76/patches/101-wireless-align-some-HE-capabilities-with-the-spec.patch @@ -0,0 +1,70 @@ +From: Johannes Berg +Date: Fri, 9 Apr 2021 12:40:17 +0300 +Subject: [PATCH] wireless: align some HE capabilities with the spec + +Some names were changed, align that with the spec as of +802.11ax-D6.1. + +Signed-off-by: Luca Coelho +Link: https://lore.kernel.org/r/iwlwifi.20210409123755.b1e5fbab0d8c.I3eb6076cb0714ec6aec6b8f9dee613ce4a05d825@changeid +Signed-off-by: Johannes Berg +--- + +--- a/mt7915/init.c ++++ b/mt7915/init.c +@@ -646,8 +646,8 @@ mt7915_set_stream_he_txbf_caps(struct ie + IEEE80211_HE_PHY_CAP5_BEAMFORMEE_NUM_SND_DIM_ABOVE_80MHZ_MASK; + elem->phy_cap_info[5] &= ~c; + +- c = IEEE80211_HE_PHY_CAP6_TRIG_SU_BEAMFORMER_FB | +- IEEE80211_HE_PHY_CAP6_TRIG_MU_BEAMFORMER_FB; ++ c = IEEE80211_HE_PHY_CAP6_TRIG_SU_BEAMFORMING_FB | ++ IEEE80211_HE_PHY_CAP6_TRIG_MU_BEAMFORMING_PARTIAL_BW_FB; + elem->phy_cap_info[6] &= ~c; + + elem->phy_cap_info[7] &= ~IEEE80211_HE_PHY_CAP7_MAX_NC_MASK; +@@ -687,8 +687,8 @@ mt7915_set_stream_he_txbf_caps(struct ie + c = (nss - 1) | (max_t(int, le16_to_cpu(mcs->tx_mcs_160), 1) << 3); + elem->phy_cap_info[5] |= c; + +- c = IEEE80211_HE_PHY_CAP6_TRIG_SU_BEAMFORMER_FB | +- IEEE80211_HE_PHY_CAP6_TRIG_MU_BEAMFORMER_FB; ++ c = IEEE80211_HE_PHY_CAP6_TRIG_SU_BEAMFORMING_FB | ++ IEEE80211_HE_PHY_CAP6_TRIG_MU_BEAMFORMING_PARTIAL_BW_FB; + elem->phy_cap_info[6] |= c; + } + +@@ -816,7 +816,7 @@ mt7915_init_he_caps(struct mt7915_phy *p + IEEE80211_HE_PHY_CAP6_PARTIAL_BW_EXT_RANGE | + IEEE80211_HE_PHY_CAP6_PPE_THRESHOLD_PRESENT; + he_cap_elem->phy_cap_info[7] |= +- IEEE80211_HE_PHY_CAP7_POWER_BOOST_FACTOR_AR | ++ IEEE80211_HE_PHY_CAP7_POWER_BOOST_FACTOR_SUPP | + IEEE80211_HE_PHY_CAP7_HE_SU_MU_PPDU_4XLTF_AND_08_US_GI; + he_cap_elem->phy_cap_info[8] |= + IEEE80211_HE_PHY_CAP8_20MHZ_IN_40MHZ_HE_PPDU_IN_2G | +--- a/mt7915/mcu.c ++++ b/mt7915/mcu.c +@@ -1842,9 +1842,9 @@ mt7915_mcu_sta_bfer_he(struct ieee80211_ + + bf->tx_mode = MT_PHY_TYPE_HE_SU; + mt7915_mcu_sta_sounding_rate(bf); +- bf->trigger_su = HE_PHY(CAP6_TRIG_SU_BEAMFORMER_FB, ++ bf->trigger_su = HE_PHY(CAP6_TRIG_SU_BEAMFORMING_FB, + pe->phy_cap_info[6]); +- bf->trigger_mu = HE_PHY(CAP6_TRIG_MU_BEAMFORMER_FB, ++ bf->trigger_mu = HE_PHY(CAP6_TRIG_MU_BEAMFORMING_PARTIAL_BW_FB, + pe->phy_cap_info[6]); + bfer_nr = HE_PHY(CAP5_BEAMFORMEE_NUM_SND_DIM_UNDER_80MHZ_MASK, + ve->phy_cap_info[5]); +--- a/mt7921/main.c ++++ b/mt7921/main.c +@@ -116,7 +116,7 @@ mt7921_init_he_caps(struct mt7921_phy *p + IEEE80211_HE_PHY_CAP6_PARTIAL_BW_EXT_RANGE | + IEEE80211_HE_PHY_CAP6_PPE_THRESHOLD_PRESENT; + he_cap_elem->phy_cap_info[7] |= +- IEEE80211_HE_PHY_CAP7_POWER_BOOST_FACTOR_AR | ++ IEEE80211_HE_PHY_CAP7_POWER_BOOST_FACTOR_SUPP | + IEEE80211_HE_PHY_CAP7_HE_SU_MU_PPDU_4XLTF_AND_08_US_GI; + he_cap_elem->phy_cap_info[8] |= + IEEE80211_HE_PHY_CAP8_20MHZ_IN_40MHZ_HE_PPDU_IN_2G | diff --git a/package/kernel/mt76/patches/102-wireless-align-HE-capabilities-A-MPDU-Length-Exponen.patch b/package/kernel/mt76/patches/102-wireless-align-HE-capabilities-A-MPDU-Length-Exponen.patch new file mode 100644 index 0000000000..b86f6fbb83 --- /dev/null +++ b/package/kernel/mt76/patches/102-wireless-align-HE-capabilities-A-MPDU-Length-Exponen.patch @@ -0,0 +1,35 @@ +From: Johannes Berg +Date: Fri, 9 Apr 2021 12:40:20 +0300 +Subject: [PATCH] wireless: align HE capabilities A-MPDU Length Exponent + Extension + +The A-MPDU length exponent extension is defined differently in +802.11ax D6.1, align with that. + +Signed-off-by: Luca Coelho +Link: https://lore.kernel.org/r/iwlwifi.20210409123755.c2a257d3e2df.I3455245d388c52c61dace7e7958dbed7e807cfb6@changeid +Signed-off-by: Johannes Berg +--- + +--- a/mt7915/init.c ++++ b/mt7915/init.c +@@ -759,7 +759,7 @@ mt7915_init_he_caps(struct mt7915_phy *p + IEEE80211_HE_MAC_CAP0_HTC_HE; + he_cap_elem->mac_cap_info[3] = + IEEE80211_HE_MAC_CAP3_OMI_CONTROL | +- IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_RESERVED; ++ IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_EXT_3; + he_cap_elem->mac_cap_info[4] = + IEEE80211_HE_MAC_CAP4_AMSDU_IN_AMPDU; + +--- a/mt7921/main.c ++++ b/mt7921/main.c +@@ -65,7 +65,7 @@ mt7921_init_he_caps(struct mt7921_phy *p + IEEE80211_HE_MAC_CAP0_HTC_HE; + he_cap_elem->mac_cap_info[3] = + IEEE80211_HE_MAC_CAP3_OMI_CONTROL | +- IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_RESERVED; ++ IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_EXT_3; + he_cap_elem->mac_cap_info[4] = + IEEE80211_HE_MAC_CAP4_AMSDU_IN_AMPDU; + -- 2.30.2