|
@@ -10459,10 +10459,8 @@ csr_roam_chk_lnk_disassoc_ind(tpAniSirGlobal mac_ctx, tSirSmeRsp *msg_ptr)
|
|
|
tCsrRoamSession *session;
|
|
|
uint32_t sessionId = CSR_SESSION_ID_INVALID;
|
|
|
QDF_STATUS status;
|
|
|
- tCsrRoamInfo *roam_info_ptr = NULL;
|
|
|
tSirSmeDisassocInd *pDisassocInd;
|
|
|
tSmeCmd *cmd;
|
|
|
- tCsrRoamInfo roam_info;
|
|
|
|
|
|
cmd = qdf_mem_malloc(sizeof(*cmd));
|
|
|
if (NULL == cmd) {
|
|
@@ -10530,19 +10528,6 @@ csr_roam_chk_lnk_disassoc_ind(tpAniSirGlobal mac_ctx, tSirSmeRsp *msg_ptr)
|
|
|
csr_roam_issue_wm_status_change(mac_ctx, sessionId,
|
|
|
eCsrDisassociated, msg_ptr);
|
|
|
if (CSR_IS_INFRA_AP(&session->connectedProfile)) {
|
|
|
- roam_info_ptr = &roam_info;
|
|
|
- roam_info_ptr->statusCode = pDisassocInd->statusCode;
|
|
|
- roam_info_ptr->reasonCode = pDisassocInd->reasonCode;
|
|
|
- roam_info_ptr->u.pConnectedProfile = &session->connectedProfile;
|
|
|
- roam_info_ptr->staId = (uint8_t) pDisassocInd->staId;
|
|
|
- qdf_copy_macaddr(&roam_info_ptr->peerMac,
|
|
|
- &pDisassocInd->peer_macaddr);
|
|
|
- qdf_copy_macaddr(&roam_info_ptr->bssid,
|
|
|
- &pDisassocInd->bssid);
|
|
|
- status = csr_roam_call_callback(mac_ctx, sessionId,
|
|
|
- roam_info_ptr, 0,
|
|
|
- eCSR_ROAM_INFRA_IND,
|
|
|
- eCSR_ROAM_RESULT_DISASSOC_IND);
|
|
|
/*
|
|
|
* STA/P2P client got disassociated so remove any pending
|
|
|
* deauth commands in sme pending list
|
|
@@ -10559,13 +10544,54 @@ csr_roam_chk_lnk_disassoc_ind(tpAniSirGlobal mac_ctx, tSirSmeRsp *msg_ptr)
|
|
|
qdf_mem_free(cmd);
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * csr_roam_send_disconnect_done_indication() - Send disconnect ind to HDD.
|
|
|
+ *
|
|
|
+ * @mac_ctx: mac global context
|
|
|
+ * @msg_ptr: incoming message
|
|
|
+ *
|
|
|
+ * This function gives final disconnect event to HDD after all cleanup in
|
|
|
+ * lower layers is done.
|
|
|
+ *
|
|
|
+ * Return: None
|
|
|
+ */
|
|
|
+static void
|
|
|
+csr_roam_send_disconnect_done_indication(tpAniSirGlobal mac_ctx, tSirSmeRsp
|
|
|
+ *msg_ptr)
|
|
|
+{
|
|
|
+ struct sir_sme_discon_done_ind *discon_ind =
|
|
|
+ (struct sir_sme_discon_done_ind *)(msg_ptr);
|
|
|
+ tCsrRoamInfo roam_info;
|
|
|
+ tCsrRoamSession *session;
|
|
|
+
|
|
|
+ sms_log(mac_ctx, LOG1, FL("eWNI_SME_DISCONNECT_DONE_IND RC:%d"),
|
|
|
+ discon_ind->reason_code);
|
|
|
+
|
|
|
+ if (CSR_IS_SESSION_VALID(mac_ctx, discon_ind->session_id)) {
|
|
|
+ roam_info.reasonCode = discon_ind->reason_code;
|
|
|
+ roam_info.statusCode = eSIR_SME_STA_NOT_ASSOCIATED;
|
|
|
+ qdf_mem_copy(roam_info.peerMac.bytes, discon_ind->peer_mac,
|
|
|
+ ETH_ALEN);
|
|
|
+ csr_roam_call_callback(mac_ctx, discon_ind->session_id,
|
|
|
+ &roam_info, 0, eCSR_ROAM_LOSTLINK,
|
|
|
+ eCSR_ROAM_RESULT_DISASSOC_IND);
|
|
|
+ session = CSR_GET_SESSION(mac_ctx, discon_ind->session_id);
|
|
|
+ if (session &&
|
|
|
+ !CSR_IS_INFRA_AP(&session->connectedProfile))
|
|
|
+ csr_roam_state_change(mac_ctx, eCSR_ROAMING_STATE_IDLE,
|
|
|
+ discon_ind->session_id);
|
|
|
+
|
|
|
+ } else
|
|
|
+ sms_log(mac_ctx, LOGE, FL("Inactive session %d"),
|
|
|
+ discon_ind->session_id);
|
|
|
+}
|
|
|
+
|
|
|
static void
|
|
|
csr_roam_chk_lnk_deauth_ind(tpAniSirGlobal mac_ctx, tSirSmeRsp *msg_ptr)
|
|
|
{
|
|
|
tCsrRoamSession *session;
|
|
|
uint32_t sessionId = CSR_SESSION_ID_INVALID;
|
|
|
QDF_STATUS status;
|
|
|
- tCsrRoamInfo *roam_info_ptr = NULL;
|
|
|
tSirSmeDeauthInd *pDeauthInd;
|
|
|
tCsrRoamInfo roam_info;
|
|
|
|
|
@@ -10612,21 +10638,6 @@ csr_roam_chk_lnk_deauth_ind(tpAniSirGlobal mac_ctx, tSirSmeRsp *msg_ptr)
|
|
|
csr_roam_issue_wm_status_change(mac_ctx, sessionId,
|
|
|
eCsrDeauthenticated,
|
|
|
msg_ptr);
|
|
|
- if (CSR_IS_INFRA_AP(&session->connectedProfile)) {
|
|
|
- roam_info_ptr = &roam_info;
|
|
|
- roam_info_ptr->statusCode = pDeauthInd->statusCode;
|
|
|
- roam_info_ptr->reasonCode = pDeauthInd->reasonCode;
|
|
|
- roam_info_ptr->u.pConnectedProfile = &session->connectedProfile;
|
|
|
- roam_info_ptr->staId = (uint8_t) pDeauthInd->staId;
|
|
|
- qdf_copy_macaddr(&roam_info_ptr->peerMac,
|
|
|
- &pDeauthInd->peer_macaddr);
|
|
|
- qdf_copy_macaddr(&roam_info_ptr->bssid,
|
|
|
- &pDeauthInd->bssid);
|
|
|
- status = csr_roam_call_callback(mac_ctx, sessionId,
|
|
|
- roam_info_ptr, 0,
|
|
|
- eCSR_ROAM_INFRA_IND,
|
|
|
- eCSR_ROAM_RESULT_DEAUTH_IND);
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
static void
|
|
@@ -11353,6 +11364,9 @@ void csr_roam_check_for_link_status_change(tpAniSirGlobal pMac, tSirSmeRsp *pSir
|
|
|
case eWNI_SME_DISASSOC_IND:
|
|
|
csr_roam_chk_lnk_disassoc_ind(pMac, pSirMsg);
|
|
|
break;
|
|
|
+ case eWNI_SME_DISCONNECT_DONE_IND:
|
|
|
+ csr_roam_send_disconnect_done_indication(pMac, pSirMsg);
|
|
|
+ break;
|
|
|
case eWNI_SME_DEAUTH_IND:
|
|
|
csr_roam_chk_lnk_deauth_ind(pMac, pSirMsg);
|
|
|
break;
|
|
@@ -11792,9 +11806,6 @@ QDF_STATUS csr_roam_lost_link(tpAniSirGlobal pMac, uint32_t sessionId,
|
|
|
if (!CSR_IS_INFRA_AP(&pSession->connectedProfile)) {
|
|
|
csr_roam_call_callback(pMac, sessionId, NULL, 0,
|
|
|
eCSR_ROAM_LOSTLINK_DETECTED, result);
|
|
|
- /*Move the state to Idle after disconnection */
|
|
|
- csr_roam_state_change(pMac, eCSR_ROAMING_STATE_IDLE, sessionId);
|
|
|
-
|
|
|
}
|
|
|
|
|
|
if (eWNI_SME_DISASSOC_IND == type) {
|
|
@@ -11839,17 +11850,6 @@ QDF_STATUS csr_roam_lost_link(tpAniSirGlobal pMac, uint32_t sessionId,
|
|
|
(eWNI_SME_DEAUTH_IND == type) ?
|
|
|
eCsrLostlinkRoamingDeauth :
|
|
|
eCsrLostlinkRoamingDisassoc);
|
|
|
-
|
|
|
- /* Tell HDD about the lost link */
|
|
|
- if (!CSR_IS_INFRA_AP(&pSession->connectedProfile)) {
|
|
|
- /* Don't call csr_roam_call_callback for GO/SoftAp case as this indication
|
|
|
- * was already given as part of eWNI_SME_DISASSOC_IND msg handling in
|
|
|
- * csr_roam_check_for_link_status_change API.
|
|
|
- */
|
|
|
- csr_roam_call_callback(pMac, sessionId, &roamInfo, 0,
|
|
|
- eCSR_ROAM_LOSTLINK, result);
|
|
|
- }
|
|
|
-
|
|
|
}
|
|
|
|
|
|
return status;
|