summaryrefslogtreecommitdiff
path: root/core/sme/src/csr/csr_api_roam.c
diff options
context:
space:
mode:
authorAshish Kumar Dhanotiya <adhanoti@codeaurora.org>2017-10-13 12:41:19 +0530
committersnandini <snandini@codeaurora.org>2017-10-24 11:15:05 -0700
commitfddd32c0f9f13d7790bbe6ccb12fbacea8cf8f60 (patch)
treef537dc5ecd8bdf9cab9db2d34008ef267a5d94b1 /core/sme/src/csr/csr_api_roam.c
parent87dfcde2adc14032b80bc312758ab1612917d0bf (diff)
downloadqcacld-fddd32c0f9f13d7790bbe6ccb12fbacea8cf8f60.tar.gz
qcacld-3.0: Cache deleted station's information in case of SAP
During disconnection process, cache disconnecting STA information so that the same information is updated to upper-layer on receiving GET_STATION vendor command, after disconnection. Change-Id: I2e5a0be42d81b86e6f4490de1bdf9d7e0797506d CRs-Fixed: 2126182
Diffstat (limited to 'core/sme/src/csr/csr_api_roam.c')
-rw-r--r--core/sme/src/csr/csr_api_roam.c71
1 files changed, 47 insertions, 24 deletions
diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c
index fc6a9ab47d..708be02d11 100644
--- a/core/sme/src/csr/csr_api_roam.c
+++ b/core/sme/src/csr/csr_api_roam.c
@@ -3794,6 +3794,11 @@ QDF_STATUS csr_roam_call_callback(tpAniSirGlobal pMac, uint32_t sessionId,
pSession->connectedProfile.operationChannel =
pRoamInfo->channelChangeRespEvent->newChannelNumber;
+ if (eCSR_ROAM_RESULT_LOSTLINK == u2 ||
+ eCSR_ROAM_LOSTLINK_DETECTED == u1) {
+ sme_debug("eCSR_ROAM_RESULT_LOSTLINK ");
+ }
+
if (NULL != pSession->callback) {
if (pRoamInfo) {
pRoamInfo->sessionId = (uint8_t) sessionId;
@@ -10299,6 +10304,10 @@ void csr_roam_joined_state_msg_processor(tpAniSirGlobal pMac, void *pMsgBuf)
pRoamInfo->max_mcs_idx = pUpperLayerAssocCnf->max_mcs_idx;
pRoamInfo->rx_mcs_map = pUpperLayerAssocCnf->rx_mcs_map;
pRoamInfo->tx_mcs_map = pUpperLayerAssocCnf->tx_mcs_map;
+ if (pUpperLayerAssocCnf->HTCaps.present)
+ pRoamInfo->ht_caps = pUpperLayerAssocCnf->HTCaps;
+ if (pUpperLayerAssocCnf->VHTCaps.present)
+ pRoamInfo->vht_caps = pUpperLayerAssocCnf->VHTCaps;
if (CSR_IS_INFRA_AP(pRoamInfo->u.pConnectedProfile)) {
pMac->roam.roamSession[sessionId].connectState =
eCSR_ASSOC_STATE_TYPE_INFRA_CONNECTED;
@@ -11172,17 +11181,26 @@ csr_roam_chk_lnk_assoc_ind(tpAniSirGlobal mac_ctx, tSirSmeRsp *msg_ptr)
roam_info_ptr->addIELen = (uint8_t) pAssocInd->addIE.length;
roam_info_ptr->paddIE = pAssocInd->addIE.addIEdata;
qdf_mem_copy(roam_info_ptr->peerMac.bytes,
- pAssocInd->peerMacAddr,
- sizeof(tSirMacAddr));
+ pAssocInd->peerMacAddr, sizeof(tSirMacAddr));
qdf_mem_copy(roam_info_ptr->bssid.bytes,
- pAssocInd->bssId,
- sizeof(struct qdf_mac_addr));
+ pAssocInd->bssId,
+ sizeof(struct qdf_mac_addr));
roam_info_ptr->wmmEnabledSta = pAssocInd->wmmEnabledSta;
roam_info_ptr->timingMeasCap = pAssocInd->timingMeasCap;
roam_info_ptr->ecsa_capable = pAssocInd->ecsa_capable;
qdf_mem_copy(&roam_info_ptr->chan_info,
&pAssocInd->chan_info,
sizeof(tSirSmeChanInfo));
+
+ if (pAssocInd->HTCaps.present)
+ qdf_mem_copy(&roam_info_ptr->ht_caps,
+ &pAssocInd->HTCaps,
+ sizeof(tDot11fIEHTCaps));
+ if (pAssocInd->VHTCaps.present)
+ qdf_mem_copy(&roam_info_ptr->vht_caps,
+ &pAssocInd->VHTCaps,
+ sizeof(tDot11fIEVHTCaps));
+
if (CSR_IS_INFRA_AP(roam_info_ptr->u.pConnectedProfile)) {
if (session->pCurRoamProfile &&
CSR_IS_ENC_TYPE_STATIC(
@@ -12640,6 +12658,9 @@ QDF_STATUS csr_roam_lost_link(tpAniSirGlobal pMac, uint32_t sessionId,
sme_err("session: %d not found", sessionId);
return QDF_STATUS_E_FAILURE;
}
+
+ qdf_mem_set(&roamInfo, sizeof(tCsrRoamInfo), 0);
+
pSession->fCancelRoaming = false;
if (eWNI_SME_DISASSOC_IND == type) {
result = eCSR_ROAM_RESULT_DISASSOC_IND;
@@ -12647,20 +12668,35 @@ QDF_STATUS csr_roam_lost_link(tpAniSirGlobal pMac, uint32_t sessionId,
pSession->roamingStatusCode = pDisassocIndMsg->statusCode;
pSession->joinFailStatusCode.reasonCode =
pDisassocIndMsg->reasonCode;
+
+ qdf_copy_macaddr(&roamInfo.peerMac,
+ &pDisassocIndMsg->peer_macaddr);
+ roamInfo.staId = (uint8_t)pDisassocIndMsg->staId;
} else if (eWNI_SME_DEAUTH_IND == type) {
result = eCSR_ROAM_RESULT_DEAUTH_IND;
pDeauthIndMsg = (tSirSmeDeauthInd *) pSirMsg;
pSession->roamingStatusCode = pDeauthIndMsg->statusCode;
pSession->joinFailStatusCode.reasonCode =
pDeauthIndMsg->reasonCode;
+
+ qdf_copy_macaddr(&roamInfo.peerMac,
+ &pDeauthIndMsg->peer_macaddr);
+ roamInfo.staId = (uint8_t)pDeauthIndMsg->staId;
+ roamInfo.rxRssi = pDeauthIndMsg->rssi;
} else {
sme_warn("gets an unknown type (%d)", type);
result = eCSR_ROAM_RESULT_NONE;
pSession->joinFailStatusCode.reasonCode = 1;
}
+ roamInfo.statusCode = (tSirResultCodes) pSession->roamingStatusCode;
+ roamInfo.reasonCode = pSession->joinFailStatusCode.reasonCode;
+
+ sme_debug("RC: %d", roamInfo.reasonCode);
- /* call profile lost link routine here */
- if (!CSR_IS_INFRA_AP(&pSession->connectedProfile))
+ if (type == eWNI_SME_DISASSOC_IND || type == eWNI_SME_DEAUTH_IND)
+ csr_roam_call_callback(pMac, sessionId, &roamInfo, 0,
+ eCSR_ROAM_LOSTLINK_DETECTED, result);
+ else
csr_roam_call_callback(pMac, sessionId, NULL, 0,
eCSR_ROAM_LOSTLINK_DETECTED, result);
@@ -12669,24 +12705,6 @@ QDF_STATUS csr_roam_lost_link(tpAniSirGlobal pMac, uint32_t sessionId,
else if (eWNI_SME_DEAUTH_IND == type)
status = csr_send_mb_deauth_cnf_msg(pMac, pDeauthIndMsg);
- /* prepare to tell HDD to disconnect */
- qdf_mem_set(&roamInfo, sizeof(tCsrRoamInfo), 0);
- roamInfo.statusCode = (tSirResultCodes) pSession->roamingStatusCode;
- roamInfo.reasonCode = pSession->joinFailStatusCode.reasonCode;
- if (eWNI_SME_DISASSOC_IND == type) {
- /* staMacAddr */
- qdf_copy_macaddr(&roamInfo.peerMac,
- &pDisassocIndMsg->peer_macaddr);
- roamInfo.staId = (uint8_t) pDisassocIndMsg->staId;
- roamInfo.reasonCode = pDisassocIndMsg->reasonCode;
- } else if (eWNI_SME_DEAUTH_IND == type) {
- /* staMacAddr */
- qdf_copy_macaddr(&roamInfo.peerMac,
- &pDeauthIndMsg->peer_macaddr);
- roamInfo.staId = (uint8_t) pDeauthIndMsg->staId;
- roamInfo.reasonCode = pDeauthIndMsg->reasonCode;
- roamInfo.rxRssi = pDeauthIndMsg->rssi;
- }
sme_debug("roamInfo.staId: %d", roamInfo.staId);
return status;
@@ -16051,6 +16069,11 @@ QDF_STATUS csr_send_assoc_ind_to_upper_layer_cnf_msg(tpAniSirGlobal pMac,
pBuf = (uint8_t *)&pMsg->tx_mcs_map;
*pBuf = pAssocInd->tx_mcs_map;
+ if (pAssocInd->HTCaps.present)
+ pMsg->HTCaps = pAssocInd->HTCaps;
+ if (pAssocInd->VHTCaps.present)
+ pMsg->VHTCaps = pAssocInd->VHTCaps;
+
msgQ.type = eWNI_SME_UPPER_LAYER_ASSOC_CNF;
msgQ.bodyptr = pMsg;
msgQ.bodyval = 0;