From 9493c72d73bd339b7d45f1d59bbd1ce672c6d2af Mon Sep 17 00:00:00 2001 From: Kiran Kumar Lokere Date: Wed, 13 Dec 2017 14:42:59 -0800 Subject: [PATCH] qcacld-3.0: Fix the IOT issue with TxBF CSN value Advertise the min of self TxBF CSN and APs TxBF CSN value to fix the IOT issue with the AP. Change-Id: Ifa2872ef62925f99bf49ef504ade4a4bb431672b CRs-Fixed: 2158667 --- core/sme/src/csr/csr_api_roam.c | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index 3602184bb0d9..122bdb7503bc 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/core/sme/src/csr/csr_api_roam.c @@ -14810,6 +14810,7 @@ QDF_STATUS csr_send_join_req_msg(tpAniSirGlobal pMac, uint32_t sessionId, tpCsrNeighborRoamControlInfo neigh_roam_info; uint32_t value = 0, value1 = 0; QDF_STATUS packetdump_timer_status; + tDot11fIEVHTCaps *vht_caps = NULL; if (!pSession) { sme_err("session %d not found", sessionId); @@ -15313,8 +15314,12 @@ QDF_STATUS csr_send_join_req_msg(tpAniSirGlobal pMac, uint32_t sessionId, csr_join_req->vht_config.su_beam_formee = value; + if (pIes->VHTCaps.present) + vht_caps = &pIes->VHTCaps; + else if (pIes->vendor_vht_ie.VHTCaps.present) + vht_caps = &pIes->vendor_vht_ie.VHTCaps; /* Set BF CSN value only if SU Bformee is enabled */ - if (csr_join_req->vht_config.su_beam_formee) { + if (vht_caps && csr_join_req->vht_config.su_beam_formee) { txBFCsnValue = (uint8_t)value1; /* * Certain commercial AP display a bad behavior when @@ -15324,18 +15329,11 @@ QDF_STATUS csr_send_join_req_msg(tpAniSirGlobal pMac, uint32_t sessionId, * CSN cap of less than 4. To avoid such issues, take a * min of self and peer CSN while sending ASSOC request. */ - if (txBFCsnValue < 4) { - if (IS_BSS_VHT_CAPABLE(pIes->VHTCaps) && - pIes->VHTCaps.csnofBeamformerAntSup) + if (pIes->Vendor1IE.present && + vht_caps->csnofBeamformerAntSup < 4) { + if (vht_caps->csnofBeamformerAntSup) txBFCsnValue = QDF_MIN(txBFCsnValue, - pIes->VHTCaps.csnofBeamformerAntSup); - else if (IS_BSS_VHT_CAPABLE( - pIes->vendor_vht_ie.VHTCaps) - && pIes->vendor_vht_ie.VHTCaps. - csnofBeamformerAntSup) - txBFCsnValue = QDF_MIN(txBFCsnValue, - pIes->vendor_vht_ie. - VHTCaps.csnofBeamformerAntSup); + vht_caps->csnofBeamformerAntSup); } } csr_join_req->vht_config.csnof_beamformer_antSup = txBFCsnValue;