Message ID | 20190904091211.26868-5-john@phrozen.org (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Kalle Valo |
Headers | show |
Series | ath11k: add HE support | expand |
On Wednesday, 4 September 2019 11:12:11 CEST John Crispin wrote: > From: Sven Eckelmann <seckelmann@datto.com> > > The capabilities for the HE mesh are generated from the capabilities > reported by the fw. But the firmware only reports the overall capabilities > and not the one which are specific for mesh. Some of them (TWT, MU UL/DL, > TB PPDU, ...) require an infrastructure setup with a main STA (AP) > controlling the operations. This is not the case for mesh and thus these > capabilities are removed from the list of capabilities. > > Signed-off-by: Sven Eckelmann <seckelmann@datto.com> > > Forwarded: https://patchwork.kernel.org/patch/11029297/ > --- > drivers/net/wireless/ath/ath11k/mac.c | 56 +++++++++++++++++++++++++++ > 1 file changed, 56 insertions(+) This is the incorrect patch. The correct version can be found at https://patchwork.kernel.org/project/ath11k/list/?series=159083 > diff --git a/drivers/net/wireless/ath/ath11k/mac.c b/drivers/net/wireless/ ath/ath11k/mac.c > index b1964385b206..4d40c9635a4a 100644 > --- a/drivers/net/wireless/ath/ath11k/mac.c > +++ b/drivers/net/wireless/ath/ath11k/mac.c > @@ -3297,6 +3297,7 @@ static int ath11k_mac_copy_he_cap(struct ath11k *ar, > switch (i) { > case NL80211_IFTYPE_STATION: > case NL80211_IFTYPE_AP: > + case NL80211_IFTYPE_MESH_POINT: > break; > > default: > @@ -3337,6 +3338,61 @@ static int ath11k_mac_copy_he_cap(struct ath11k *ar, > he_cap_elem->phy_cap_info[9] |= > IEEE80211_HE_PHY_CAP9_TX_1024_QAM_LESS_THAN_242_TONE_RU; > break; > + case NL80211_IFTYPE_MESH_POINT: > + he_cap_elem->mac_cap_info[0] &= > + ~(IEEE80211_HE_MAC_CAP0_TWT_RES | > + IEEE80211_HE_MAC_CAP0_TWT_REQ); > + he_cap_elem->mac_cap_info[2] &= > + ~(IEEE80211_HE_MAC_CAP2_TRS | > + IEEE80211_HE_MAC_CAP2_BCAST_TWT | > + IEEE80211_HE_MAC_CAP2_MU_CASCADING); > + he_cap_elem->mac_cap_info[3] &= > + ~(IEEE80211_HE_MAC_CAP3_FLEX_TWT_SCHED | > + IEEE80211_HE_MAC_CAP2_BCAST_TWT | > + IEEE80211_HE_MAC_CAP2_MU_CASCADING); > + he_cap_elem->mac_cap_info[4] &= > + ~(IEEE80211_HE_MAC_CAP4_BSRP_BQRP_A_MPDU_AGG | > + IEEE80211_HE_MAC_CAP4_BQR); > + he_cap_elem->mac_cap_info[5] &= > + ~(IEEE80211_HE_MAC_CAP5_SUBCHAN_SELECVITE_TRANSMISSION | > + IEEE80211_HE_MAC_CAP5_UL_2x996_TONE_RU | > + IEEE80211_HE_MAC_CAP5_PUNCTURED_SOUNDING | > + IEEE80211_HE_MAC_CAP5_HT_VHT_TRIG_FRAME_RX); > + > + he_cap_elem->phy_cap_info[2] &= > + ~(IEEE80211_HE_PHY_CAP2_UL_MU_FULL_MU_MIMO | > + IEEE80211_HE_PHY_CAP2_UL_MU_PARTIAL_MU_MIMO); > + he_cap_elem->phy_cap_info[3] &= > + ~(IEEE80211_HE_PHY_CAP3_RX_HE_MU_PPDU_FROM_NON_AP_STA | > + IEEE80211_HE_PHY_CAP3_DCM_MAX_CONST_TX_MASK | > + IEEE80211_HE_PHY_CAP3_DCM_MAX_CONST_RX_MASK); > + he_cap_elem->phy_cap_info[4] &= > + ~IEEE80211_HE_PHY_CAP4_MU_BEAMFORMER; > + he_cap_elem->phy_cap_info[5] &= > + ~IEEE80211_HE_PHY_CAP5_NG16_MU_FEEDBACK; > + he_cap_elem->phy_cap_info[6] &= > + ~(IEEE80211_HE_PHY_CAP6_CODEBOOK_SIZE_75_MU | > + IEEE80211_HE_PHY_CAP6_TRIG_MU_BEAMFORMER_FB | > + IEEE80211_HE_PHY_CAP6_TRIG_CQI_FB | > + IEEE80211_HE_PHY_CAP6_PARTIAL_BANDWIDTH_DL_MUMIMO); > + he_cap_elem->phy_cap_info[7] &= > + ~(IEEE80211_HE_PHY_CAP7_SRP_BASED_SR | > + IEEE80211_HE_PHY_CAP7_POWER_BOOST_FACTOR_AR | > + IEEE80211_HE_PHY_CAP7_STBC_TX_ABOVE_80MHZ | > + IEEE80211_HE_PHY_CAP7_STBC_RX_ABOVE_80MHZ); > + he_cap_elem->phy_cap_info[8] &= > + ~(IEEE80211_HE_PHY_CAP8_HE_ER_SU_PPDU_4XLTF_AND_08_US_GI | > + IEEE80211_HE_PHY_CAP8_20MHZ_IN_40MHZ_HE_PPDU_IN_2G | > + IEEE80211_HE_PHY_CAP8_20MHZ_IN_160MHZ_HE_PPDU | > + IEEE80211_HE_PHY_CAP8_80MHZ_IN_160MHZ_HE_PPDU); > + he_cap_elem->phy_cap_info[9] &= > + ~(IEEE80211_HE_PHY_CAP9_LONGER_THAN_16_SIGB_OFDM_SYM | > + IEEE80211_HE_PHY_CAP9_NON_TRIGGERED_CQI_FEEDBACK | > + IEEE80211_HE_PHY_CAP9_RX_1024_QAM_LESS_THAN_242_TONE_RU | > + IEEE80211_HE_PHY_CAP9_TX_1024_QAM_LESS_THAN_242_TONE_RU | > + IEEE80211_HE_PHY_CAP9_RX_FULL_BW_SU_USING_MU_WITH_COMP_SIGB | > + IEEE80211_HE_PHY_CAP9_RX_FULL_BW_SU_USING_MU_WITH_NON_COMP_SIGB); > + break; > } > > he_cap->he_mcs_nss_supp.rx_mcs_80 = >
diff --git a/drivers/net/wireless/ath/ath11k/mac.c b/drivers/net/wireless/ath/ath11k/mac.c index b1964385b206..4d40c9635a4a 100644 --- a/drivers/net/wireless/ath/ath11k/mac.c +++ b/drivers/net/wireless/ath/ath11k/mac.c @@ -3297,6 +3297,7 @@ static int ath11k_mac_copy_he_cap(struct ath11k *ar, switch (i) { case NL80211_IFTYPE_STATION: case NL80211_IFTYPE_AP: + case NL80211_IFTYPE_MESH_POINT: break; default: @@ -3337,6 +3338,61 @@ static int ath11k_mac_copy_he_cap(struct ath11k *ar, he_cap_elem->phy_cap_info[9] |= IEEE80211_HE_PHY_CAP9_TX_1024_QAM_LESS_THAN_242_TONE_RU; break; + case NL80211_IFTYPE_MESH_POINT: + he_cap_elem->mac_cap_info[0] &= + ~(IEEE80211_HE_MAC_CAP0_TWT_RES | + IEEE80211_HE_MAC_CAP0_TWT_REQ); + he_cap_elem->mac_cap_info[2] &= + ~(IEEE80211_HE_MAC_CAP2_TRS | + IEEE80211_HE_MAC_CAP2_BCAST_TWT | + IEEE80211_HE_MAC_CAP2_MU_CASCADING); + he_cap_elem->mac_cap_info[3] &= + ~(IEEE80211_HE_MAC_CAP3_FLEX_TWT_SCHED | + IEEE80211_HE_MAC_CAP2_BCAST_TWT | + IEEE80211_HE_MAC_CAP2_MU_CASCADING); + he_cap_elem->mac_cap_info[4] &= + ~(IEEE80211_HE_MAC_CAP4_BSRP_BQRP_A_MPDU_AGG | + IEEE80211_HE_MAC_CAP4_BQR); + he_cap_elem->mac_cap_info[5] &= + ~(IEEE80211_HE_MAC_CAP5_SUBCHAN_SELECVITE_TRANSMISSION | + IEEE80211_HE_MAC_CAP5_UL_2x996_TONE_RU | + IEEE80211_HE_MAC_CAP5_PUNCTURED_SOUNDING | + IEEE80211_HE_MAC_CAP5_HT_VHT_TRIG_FRAME_RX); + + he_cap_elem->phy_cap_info[2] &= + ~(IEEE80211_HE_PHY_CAP2_UL_MU_FULL_MU_MIMO | + IEEE80211_HE_PHY_CAP2_UL_MU_PARTIAL_MU_MIMO); + he_cap_elem->phy_cap_info[3] &= + ~(IEEE80211_HE_PHY_CAP3_RX_HE_MU_PPDU_FROM_NON_AP_STA | + IEEE80211_HE_PHY_CAP3_DCM_MAX_CONST_TX_MASK | + IEEE80211_HE_PHY_CAP3_DCM_MAX_CONST_RX_MASK); + he_cap_elem->phy_cap_info[4] &= + ~IEEE80211_HE_PHY_CAP4_MU_BEAMFORMER; + he_cap_elem->phy_cap_info[5] &= + ~IEEE80211_HE_PHY_CAP5_NG16_MU_FEEDBACK; + he_cap_elem->phy_cap_info[6] &= + ~(IEEE80211_HE_PHY_CAP6_CODEBOOK_SIZE_75_MU | + IEEE80211_HE_PHY_CAP6_TRIG_MU_BEAMFORMER_FB | + IEEE80211_HE_PHY_CAP6_TRIG_CQI_FB | + IEEE80211_HE_PHY_CAP6_PARTIAL_BANDWIDTH_DL_MUMIMO); + he_cap_elem->phy_cap_info[7] &= + ~(IEEE80211_HE_PHY_CAP7_SRP_BASED_SR | + IEEE80211_HE_PHY_CAP7_POWER_BOOST_FACTOR_AR | + IEEE80211_HE_PHY_CAP7_STBC_TX_ABOVE_80MHZ | + IEEE80211_HE_PHY_CAP7_STBC_RX_ABOVE_80MHZ); + he_cap_elem->phy_cap_info[8] &= + ~(IEEE80211_HE_PHY_CAP8_HE_ER_SU_PPDU_4XLTF_AND_08_US_GI | + IEEE80211_HE_PHY_CAP8_20MHZ_IN_40MHZ_HE_PPDU_IN_2G | + IEEE80211_HE_PHY_CAP8_20MHZ_IN_160MHZ_HE_PPDU | + IEEE80211_HE_PHY_CAP8_80MHZ_IN_160MHZ_HE_PPDU); + he_cap_elem->phy_cap_info[9] &= + ~(IEEE80211_HE_PHY_CAP9_LONGER_THAN_16_SIGB_OFDM_SYM | + IEEE80211_HE_PHY_CAP9_NON_TRIGGERED_CQI_FEEDBACK | + IEEE80211_HE_PHY_CAP9_RX_1024_QAM_LESS_THAN_242_TONE_RU | + IEEE80211_HE_PHY_CAP9_TX_1024_QAM_LESS_THAN_242_TONE_RU | + IEEE80211_HE_PHY_CAP9_RX_FULL_BW_SU_USING_MU_WITH_COMP_SIGB | + IEEE80211_HE_PHY_CAP9_RX_FULL_BW_SU_USING_MU_WITH_NON_COMP_SIGB); + break; } he_cap->he_mcs_nss_supp.rx_mcs_80 =