summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAbhishek Singh <absingh@codeaurora.org>2017-04-11 11:54:54 +0530
committerSandeep Puligilla <spuligil@codeaurora.org>2017-04-11 22:31:49 -0700
commit42eba0b802c8fe593d5e15a56ba1f93ed49c2580 (patch)
tree82b5bff95992b8bbcababca8ddd4769b7b8a13e4
parent74c8eb0807ba7a478aa0a8ff16d6279766d6c2c0 (diff)
qcacld-3.0: Set SU bformer capability only if AP is SU bformee
If SU beamformer is set in assoc req when AP is not SU beamformee low throughput is seen with specific AP. To fix this, set SU bformer capability only if AP is SU bformee and set SU bformee capability only if AP is SU bformer Change-Id: I9093352d48722eb79db7b1992ac873bd8cf13e66 CRs-Fixed: 2025399
-rw-r--r--core/sme/src/csr/csr_api_roam.c55
1 files changed, 49 insertions, 6 deletions
diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c
index 676f1698272a..3bbf8521d2e9 100644
--- a/core/sme/src/csr/csr_api_roam.c
+++ b/core/sme/src/csr/csr_api_roam.c
@@ -14551,8 +14551,22 @@ QDF_STATUS csr_send_join_req_msg(tpAniSirGlobal pMac, uint32_t sessionId,
QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_ERROR,
("Failed to get CSN beamformee capability"));
+ /*
+ * Set SU Bformee only if SU Bformee is enabled in INI
+ * and AP is SU Bformer capable
+ */
+ if (value && !((IS_BSS_VHT_CAPABLE(pIes->VHTCaps) &&
+ pIes->VHTCaps.suBeamFormerCap) ||
+ (IS_BSS_VHT_CAPABLE(
+ pIes->vendor_vht_ie.VHTCaps)
+ && pIes->vendor_vht_ie.VHTCaps.
+ suBeamFormerCap)))
+ value = 0;
+
csr_join_req->vht_config.su_beam_formee = value;
- if (value) {
+
+ /* Set BF CSN value only if SU Bformee is enabled */
+ if (csr_join_req->vht_config.su_beam_formee) {
txBFCsnValue = (uint8_t)value1;
if (IS_BSS_VHT_CAPABLE(pIes->VHTCaps) &&
pIes->VHTCaps.csnofBeamformerAntSup)
@@ -14569,11 +14583,40 @@ QDF_STATUS csr_send_join_req_msg(tpAniSirGlobal pMac, uint32_t sessionId,
csr_join_req->vht_config.csnof_beamformer_antSup = txBFCsnValue;
if (wlan_cfg_get_int(pMac,
- WNI_CFG_VHT_MU_BEAMFORMEE_CAP, &value)
- != eSIR_SUCCESS)
- QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_ERROR,
- ("Failed to get CSN beamformee capability"));
- csr_join_req->vht_config.mu_beam_formee = (uint8_t) value;
+ WNI_CFG_VHT_SU_BEAMFORMER_CAP, &value)
+ != eSIR_SUCCESS)
+ sme_err("Failed to get SU beamformer capability");
+
+ /*
+ * Set SU Bformer only if SU Bformer is enabled in INI
+ * and AP is SU Bformee capable
+ */
+ if (value && !((IS_BSS_VHT_CAPABLE(pIes->VHTCaps) &&
+ pIes->VHTCaps.suBeamformeeCap) ||
+ (IS_BSS_VHT_CAPABLE(
+ pIes->vendor_vht_ie.VHTCaps)
+ && pIes->vendor_vht_ie.VHTCaps.
+ suBeamformeeCap)))
+ value = 0;
+
+ csr_join_req->vht_config.su_beam_former = value;
+
+ /* Set num soundingdim value to 0 if SU Bformer is disabled */
+ if (!csr_join_req->vht_config.su_beam_former)
+ csr_join_req->vht_config.num_soundingdim = 0;
+
+ if (wlan_cfg_get_int(pMac,
+ WNI_CFG_VHT_MU_BEAMFORMEE_CAP, &value)
+ != eSIR_SUCCESS)
+ sme_err("Failed to get CSN beamformee capability");
+ /*
+ * Set MU Bformee only if SU Bformee is enabled and
+ * MU Bformee is enabled in INI
+ */
+ if (value && csr_join_req->vht_config.su_beam_formee)
+ csr_join_req->vht_config.mu_beam_formee = 1;
+ else
+ csr_join_req->vht_config.mu_beam_formee = 0;
csr_join_req->enableVhtpAid =
(uint8_t) pMac->roam.configParam.enableVhtpAid;