2019-07-24 17:06:16

by Sven Eckelmann

[permalink] [raw]
Subject: [PATCH v5 0/4] mac80211/ath11k: HE mesh support

Hi,

Some features of 802.11ax without central organizing (AP) STA can also be
used in mesh mode. The main goal is to get HE mesh working with ath11k.
For persons without ath11k compatible hw, hwsim can be used in the as basis
for further development of these features.

* v5

- rebased patches
- moved ath11k meshpoint HE capabilities filter to avoid lines over 80
characters
- add patch to disable HE SU phy capabilities to work around problems
with WLAN.HK.2.1.0.1-00629-QCAHKSWPL_SILICONZ-1 firmware

* v4

- switch order of the mac80211 HE mesh support and mac80211_hwsim support
- drop ie_len variable from ieee80211_ie_len_he_cap and
ieee80211_ie_build_he_oper
- switch to function ieee80211_get_he_iftype_cap instead of implementing new
function ieee80211_get_he_mesh_cap
- allow ieee80211_ie_len_he_cap to calculate length for non-mesh HE cap
- dropped he_support workaround in ath11k because now all phy_modes are
HE phy modes

* v3

- force ath11k PHY mode for meshpoint vif to HE mode to avoid hang of
firmware when HE (or VHT on 2.4GHz) device tries to connect

* v2:

- add of ath11k patch

* v1:

- initial RFC

Sven Eckelmann (4):
mac80211: implement HE support for mesh
mac80211_hwsim: Register support for HE meshpoint
ath11k: register HE mesh capabilities
ath11k: Disable SU support in meshpoint mode

drivers/net/wireless/ath/ath11k/mac.c | 84 ++++++++
drivers/net/wireless/mac80211_hwsim.c | 283 +++++++++++++++++---------
net/mac80211/ieee80211_i.h | 2 +
net/mac80211/mesh.c | 62 ++++++
net/mac80211/mesh.h | 4 +
net/mac80211/mesh_plink.c | 12 +-
net/mac80211/util.c | 49 +++++
7 files changed, 401 insertions(+), 95 deletions(-)

--
2.20.1


2019-07-24 17:06:28

by Sven Eckelmann

[permalink] [raw]
Subject: [PATCH v5 4/4] ath11k: Disable SU support in meshpoint mode

From: Sven Eckelmann <[email protected]>

The firmware WLAN.HK.2.1.0.1-00629-QCAHKSWPL_SILICONZ-1 often stops sending
data on 5GHz when SU support is advertised. A simple throughput benchmark
will end up at only a couple hundred kilobytes per second (when finishing
at all).

Disabling SU related flags works around this problem and allowed a maximum
throughput of ~450 MBit/s in a simple test setup with an HK01 over air.

Signed-off-by: Sven Eckelmann <[email protected]>
---
drivers/net/wireless/ath/ath11k/mac.c | 15 ++++++++++++---
1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/drivers/net/wireless/ath/ath11k/mac.c b/drivers/net/wireless/ath/ath11k/mac.c
index 4317608ff822..29964185b0a1 100644
--- a/drivers/net/wireless/ath/ath11k/mac.c
+++ b/drivers/net/wireless/ath/ath11k/mac.c
@@ -3290,16 +3290,24 @@ ath11k_mac_filter_he_cap_mesh(struct ieee80211_he_cap_elem *he_cap_elem)

m = 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;
+ IEEE80211_HE_PHY_CAP3_DCM_MAX_CONST_RX_MASK |
+ IEEE80211_HE_PHY_CAP3_SU_BEAMFORMER;
he_cap_elem->phy_cap_info[3] &= ~m;

- m = IEEE80211_HE_PHY_CAP4_MU_BEAMFORMER;
+ m = IEEE80211_HE_PHY_CAP4_SU_BEAMFORMEE |
+ IEEE80211_HE_PHY_CAP4_MU_BEAMFORMER |
+ IEEE80211_HE_PHY_CAP4_BEAMFORMEE_MAX_STS_UNDER_80MHZ_MASK |
+ IEEE80211_HE_PHY_CAP4_BEAMFORMEE_MAX_STS_ABOVE_80MHZ_MASK;
he_cap_elem->phy_cap_info[4] &= ~m;

- m = IEEE80211_HE_PHY_CAP5_NG16_MU_FEEDBACK;
+ m = IEEE80211_HE_PHY_CAP5_BEAMFORMEE_NUM_SND_DIM_UNDER_80MHZ_MASK |
+ IEEE80211_HE_PHY_CAP5_BEAMFORMEE_NUM_SND_DIM_ABOVE_80MHZ_MASK |
+ IEEE80211_HE_PHY_CAP5_NG16_SU_FEEDBACK |
+ IEEE80211_HE_PHY_CAP5_NG16_MU_FEEDBACK;
he_cap_elem->phy_cap_info[5] &= ~m;

m = IEEE80211_HE_PHY_CAP6_CODEBOOK_SIZE_75_MU |
+ IEEE80211_HE_PHY_CAP6_TRIG_SU_BEAMFORMER_FB |
IEEE80211_HE_PHY_CAP6_TRIG_MU_BEAMFORMER_FB |
IEEE80211_HE_PHY_CAP6_TRIG_CQI_FB |
IEEE80211_HE_PHY_CAP6_PARTIAL_BANDWIDTH_DL_MUMIMO;
@@ -3307,6 +3315,7 @@ ath11k_mac_filter_he_cap_mesh(struct ieee80211_he_cap_elem *he_cap_elem)

m = IEEE80211_HE_PHY_CAP7_SRP_BASED_SR |
IEEE80211_HE_PHY_CAP7_POWER_BOOST_FACTOR_AR |
+ IEEE80211_HE_PHY_CAP7_HE_SU_MU_PPDU_4XLTF_AND_08_US_GI |
IEEE80211_HE_PHY_CAP7_STBC_TX_ABOVE_80MHZ |
IEEE80211_HE_PHY_CAP7_STBC_RX_ABOVE_80MHZ;
he_cap_elem->phy_cap_info[7] &= ~m;
--
2.20.1