wlan:Handle assertion raised during LFR roaming.
When roaming get fail, csrRoamRoamingStateDisassocRspProcessor will
post SME_QOS_CSR_HANDOFF_ASSOC_REQ to SME QoS Module which will
raised an assert into the sme_QosProcessHandoffAssocReqEv due to Qos
Current state mismatch. So Ideally SME QOS current state should be set
to init state before posting SME_QOS_CSR_HANDOFF_ASSOC_REQ msg.
Hence csr is setting HandoffRequested to False for that session
which will assist in resetting qos current state to init state during
handling of SME_QOS_CSR_DISCONNECT_IND (sme_QosProcessDisconnectEv).
Change-Id: Ie8be41317422682e607714d32499bfa6c0ab15ec
CRs-Fixed: 590508
diff --git a/CORE/SME/inc/sme_QosApi.h b/CORE/SME/inc/sme_QosApi.h
index c5bf8ad..b858253 100644
--- a/CORE/SME/inc/sme_QosApi.h
+++ b/CORE/SME/inc/sme_QosApi.h
@@ -381,4 +381,17 @@
sme_QosWmmTspecInfo * pQoSInfo,
v_U8_t sessionId);
+
+/*--------------------------------------------------------------------------
+ \brief sme_QosUpdateHandOff() - Function which can be called to update
+ Hand-off state of SME QoS Session
+ \param sessionId - session id
+ \param updateHandOff - value True/False to update the handoff flag
+
+ \sa
+
+-------------------------------------------------------------------------*/
+void sme_QosUpdateHandOff(v_U8_t sessionId,
+ v_BOOL_t updateHandOff);
+
#endif //#if !defined( __SME_QOSAPI_H )
diff --git a/CORE/SME/src/QoS/sme_Qos.c b/CORE/SME/src/QoS/sme_Qos.c
index 3761a66..10bd442 100644
--- a/CORE/SME/src/QoS/sme_Qos.c
+++ b/CORE/SME/src/QoS/sme_Qos.c
@@ -7167,6 +7167,30 @@
}
return status;
}
+
+/*--------------------------------------------------------------------------
+ \brief sme_QosUpdateHandOff() - Function which can be called to update
+ Hand-off state of SME QoS Session
+ \param sessionId - session id
+ \param updateHandOff - value True/False to update the handoff flag
+
+ \sa
+
+-------------------------------------------------------------------------*/
+void sme_QosUpdateHandOff(v_U8_t sessionId,
+ v_BOOL_t updateHandOff)
+{
+ sme_QosSessionInfo *pSession;
+ pSession = &sme_QosCb.sessionInfo[sessionId];
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO_MED,
+ "%s: %d: handoffRequested %d updateHandOff %d",
+ __func__, __LINE__,pSession->handoffRequested,
+ updateHandOff);
+
+ pSession->handoffRequested = updateHandOff;
+
+}
+
/*--------------------------------------------------------------------------
\brief sme_QosIsUapsdActive() - Function which can be called to determine
if any sessions require PMC to be in U-APSD mode.
diff --git a/CORE/SME/src/csr/csrApiRoam.c b/CORE/SME/src/csr/csrApiRoam.c
index 02b7baa..1249eb8 100644
--- a/CORE/SME/src/csr/csrApiRoam.c
+++ b/CORE/SME/src/csr/csrApiRoam.c
@@ -5752,6 +5752,7 @@
}
smsLog(pMac, LOG1, FL(" roam(reason %d) failed"), pCommand->u.roamCmd.roamReason);
#ifndef WLAN_MDM_CODE_REDUCTION_OPT
+ sme_QosUpdateHandOff((tANI_U8)sessionId, VOS_FALSE);
sme_QosCsrEventInd(pMac, (tANI_U8)sessionId, SME_QOS_CSR_DISCONNECT_IND, NULL);
#endif
csrRoamCompletion(pMac, sessionId, NULL, pCommand, eCSR_ROAM_RESULT_FAILURE, eANI_BOOLEAN_FALSE);