qcacld-3.0: Fix STA sending SMPS force mode when connected to 1x1 AP

qcacld-2.0 to qcacld-3.0 propagation

Peer supported NSS should be updated based on the presence of HT
and VHT capabilities in the beacon/probe response IE from the AP.
Also, update session supported NSS during reassociation. Otherwise,
station will end up sending SMPS action frames to AP which only
supports 1x1 mode.

CRs-Fixed: 979545
Change-Id: Ie2dbfbb577f08c5090101e1330184e72a9f6cd46
This commit is contained in:
Archana Ramachandran 2016-03-29 17:09:22 -07:00 • committed by Vishwajith Upendra
commit 5482d6a4d0
4 changed files with 34 additions and 7 deletions

View file

@ -1399,7 +1399,7 @@ tSirRetStatus lim_populate_vht_mcs_set(tpAniSirGlobal mac_ctx,
}
rates->vhtTxHighestDataRate = (uint16_t) val;
if (peer_vht_caps == NULL)
if ((peer_vht_caps == NULL) || (!peer_vht_caps->present))
return eSIR_SUCCESS;
rates->vhtTxHighestDataRate =

View file

@ -686,9 +686,19 @@ void lim_fill_ft_session(tpAniSirGlobal pMac,
pftSessionEntry->enableHtSmps = psessionEntry->enableHtSmps;
pftSessionEntry->smpsMode = psessionEntry->smpsMode;
lim_log(pMac, LOG1, FL("FT session enable smps: %d mode: %d"),
/*
* By default supported NSS 1x1 is set to true
* and later on updated while determining session
* supported rates which is the intersection of
* self and peer rates
*/
pftSessionEntry->supported_nss_1x1 = true;
lim_log(pMac, LOG1,
FL("FT enable smps: %d mode: %d supported nss 1x1: %d"),
pftSessionEntry->enableHtSmps,
pftSessionEntry->smpsMode);
pftSessionEntry->smpsMode,
pftSessionEntry->supported_nss_1x1);
qdf_mem_free(pBeaconStruct);
}

View file

@ -1729,11 +1729,19 @@ __lim_process_sme_join_req(tpAniSirGlobal mac_ctx, uint32_t *msg_buf)
session->htSmpsvalue = sme_join_req->htSmps;
session->send_smps_action =
sme_join_req->send_smps_action;
/*
* By default supported NSS 1x1 is set to true
* and later on updated while determining session
* supported rates which is the intersection of
* self and peer rates
*/
session->supported_nss_1x1 = true;
lim_log(mac_ctx, LOG1,
FL("enable Smps: %d mode: %d send action: %d"),
FL("enable Smps: %d mode: %d send action: %d supported nss 1x1: %d"),
session->enableHtSmps,
session->htSmpsvalue,
session->send_smps_action);
session->send_smps_action,
session->supported_nss_1x1);
/*Store Persona */
session->pePersona = sme_join_req->staPersona;
@ -2154,10 +2162,11 @@ static void __lim_process_sme_reassoc_req(tpAniSirGlobal mac_ctx,
session_entry->send_smps_action =
reassoc_req->send_smps_action;
lim_log(mac_ctx, LOG1,
FL("enableHtSmps: %d htSmps: %d send action: %d"),
FL("enableHtSmps: %d htSmps: %d send action: %d supported nss 1x1: %d"),
session_entry->enableHtSmps,
session_entry->htSmpsvalue,
session_entry->send_smps_action);
session_entry->send_smps_action,
session_entry->supported_nss_1x1);
/*
* Reassociate request is expected
* in link established state only.

View file

@ -8638,11 +8638,19 @@ static void csr_roam_roaming_state_reassoc_rsp_processor(tpAniSirGlobal pMac,
&pMac->roam.neighborRoamInfo[pSmeJoinRsp->sessionId];
tCsrRoamInfo roamInfo;
uint32_t roamId = 0;
tCsrRoamSession *csr_session;
if (eSIR_SME_SUCCESS == pSmeJoinRsp->statusCode) {
QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_DEBUG,
FL("CSR SmeReassocReq Successful"));
result = eCsrReassocSuccess;
csr_session = CSR_GET_SESSION(pMac, pSmeJoinRsp->sessionId);
if (NULL != csr_session) {
csr_session->supported_nss_1x1 =
pSmeJoinRsp->supported_nss_1x1;
sms_log(pMac, LOG1, FL("SME session supported nss: %d"),
csr_session->supported_nss_1x1);
}
/*
* Since the neighbor roam algorithm uses reassoc req for
* handoff instead of join, we need the response contents while