mac80211: backport a few trivial patches
authorFelix Fietkau <nbd@nbd.name>
Tue, 19 Oct 2021 09:19:26 +0000 (11:19 +0200)
committerFelix Fietkau <nbd@nbd.name>
Tue, 23 Nov 2021 17:30:04 +0000 (18:30 +0100)
No functional changes, just some renames to make it easier to keep mt76 in
sync with upstream

Signed-off-by: Felix Fietkau <nbd@nbd.name>
(cherry-picked from commit e62c5504701c7a665c9cf89ddbcb062f5ade6e37)
(cherry-picked from commit a889dcd3f21e50dc3e7f827ff0e486020562a6f8)

package/kernel/mac80211/patches/subsys/391-wireless-align-some-HE-capabilities-with-the-spec.patch [new file with mode: 0644]
package/kernel/mac80211/patches/subsys/392-wireless-fix-spelling-of-A-MSDU-in-HE-capabilities.patch [new file with mode: 0644]
package/kernel/mac80211/patches/subsys/393-wireless-align-HE-capabilities-A-MPDU-Length-Exponen.patch [new file with mode: 0644]
package/kernel/mt76/patches/100-wireless-fix-spelling-of-A-MSDU-in-HE-capabilities.patch [new file with mode: 0644]
package/kernel/mt76/patches/101-wireless-align-some-HE-capabilities-with-the-spec.patch [new file with mode: 0644]
package/kernel/mt76/patches/102-wireless-align-HE-capabilities-A-MPDU-Length-Exponen.patch [new file with mode: 0644]

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 (file)
index 0000000..eb32c49
--- /dev/null
@@ -0,0 +1,196 @@
+From: Johannes Berg <johannes.berg@intel.com>
+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 <luciano.coelho@intel.com>
+Link: https://lore.kernel.org/r/iwlwifi.20210409123755.b1e5fbab0d8c.I3eb6076cb0714ec6aec6b8f9dee613ce4a05d825@changeid
+Signed-off-by: Johannes Berg <johannes.berg@intel.com>
+---
+
+--- 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 (file)
index 0000000..0bd0112
--- /dev/null
@@ -0,0 +1,113 @@
+From: Johannes Berg <johannes.berg@intel.com>
+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 <luciano.coelho@intel.com>
+Link: https://lore.kernel.org/r/iwlwifi.20210409123755.9e6ff1af1181.If6868bc6902ccd9a95c74c78f716c4b41473ef14@changeid
+Signed-off-by: Johannes Berg <johannes.berg@intel.com>
+---
+
+--- 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 (file)
index 0000000..42b71df
--- /dev/null
@@ -0,0 +1,148 @@
+From: Johannes Berg <johannes.berg@intel.com>
+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 <luciano.coelho@intel.com>
+Link: https://lore.kernel.org/r/iwlwifi.20210409123755.c2a257d3e2df.I3455245d388c52c61dace7e7958dbed7e807cfb6@changeid
+Signed-off-by: Johannes Berg <johannes.berg@intel.com>
+---
+
+--- 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 (file)
index 0000000..b540b77
--- /dev/null
@@ -0,0 +1,55 @@
+From: Johannes Berg <johannes.berg@intel.com>
+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 <luciano.coelho@intel.com>
+Link: https://lore.kernel.org/r/iwlwifi.20210409123755.9e6ff1af1181.If6868bc6902ccd9a95c74c78f716c4b41473ef14@changeid
+Signed-off-by: Johannes Berg <johannes.berg@intel.com>
+---
+
+--- 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 (file)
index 0000000..52a5225
--- /dev/null
@@ -0,0 +1,70 @@
+From: Johannes Berg <johannes.berg@intel.com>
+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 <luciano.coelho@intel.com>
+Link: https://lore.kernel.org/r/iwlwifi.20210409123755.b1e5fbab0d8c.I3eb6076cb0714ec6aec6b8f9dee613ce4a05d825@changeid
+Signed-off-by: Johannes Berg <johannes.berg@intel.com>
+---
+
+--- 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 (file)
index 0000000..b86f6fb
--- /dev/null
@@ -0,0 +1,35 @@
+From: Johannes Berg <johannes.berg@intel.com>
+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 <luciano.coelho@intel.com>
+Link: https://lore.kernel.org/r/iwlwifi.20210409123755.c2a257d3e2df.I3455245d388c52c61dace7e7958dbed7e807cfb6@changeid
+Signed-off-by: Johannes Berg <johannes.berg@intel.com>
+---
+
+--- 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;