wlan: No Scan Interference During HandOff
When a Handoff is in progress,during preauth or report scan or reassoc
states, a scan request will be denied with a busy signal
Change-Id: I1fd4dd36d3239400f9488efc7c9d18761c38f7da
CR-FIxed: NA
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c
index 6b5f51b..63de8bd 100644
--- a/CORE/HDD/src/wlan_hdd_cfg80211.c
+++ b/CORE/HDD/src/wlan_hdd_cfg80211.c
@@ -3885,7 +3885,14 @@
hddLog(VOS_TRACE_LEVEL_ERROR,
"%s: sme_ScanRequest returned error %d", __func__, status);
complete(&pScanInfo->scan_req_completion_event);
- status = -EIO;
+ if(eHAL_STATUS_RESOURCES == status)
+ {
+ hddLog(VOS_TRACE_LEVEL_INFO, "%s: HO is in progress.So defer
+ the scan by informing busy",__func__);
+ status = -EBUSY;
+ } else {
+ status = -EIO;
+ }
hdd_allow_suspend();
goto free_mem;
}
diff --git a/CORE/SME/src/csr/csrNeighborRoam.c b/CORE/SME/src/csr/csrNeighborRoam.c
index f861277..64c7314 100644
--- a/CORE/SME/src/csr/csrNeighborRoam.c
+++ b/CORE/SME/src/csr/csrNeighborRoam.c
@@ -790,13 +790,6 @@
}
// We can receive it in these 2 states.
- if (!((pNeighborRoamInfo->neighborRoamState == eCSR_NEIGHBOR_ROAM_STATE_PREAUTHENTICATING) ||
- (pNeighborRoamInfo->neighborRoamState == eCSR_NEIGHBOR_ROAM_STATE_REPORT_SCAN)))
- {
- smsLog(pMac, LOGE, FL("Preauth response received in wrong state = %d\n"),
- pNeighborRoamInfo->neighborRoamState);
- }
-
if ((pNeighborRoamInfo->neighborRoamState != eCSR_NEIGHBOR_ROAM_STATE_PREAUTHENTICATING) &&
(pNeighborRoamInfo->neighborRoamState != eCSR_NEIGHBOR_ROAM_STATE_REPORT_SCAN))
{
@@ -871,7 +864,6 @@
if (eHAL_STATUS_SUCCESS != status)
{
smsLog(pMac, LOGE, FL("Neighbor results refresh timer start failed with status %d\n"), status);
- return;
}
}
diff --git a/CORE/SME/src/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c
index 20f8ee5..e55273e 100644
--- a/CORE/SME/src/sme_common/sme_Api.c
+++ b/CORE/SME/src/sme_common/sme_Api.c
@@ -101,6 +101,10 @@
eHalStatus sme_HandlePostChannelSwitchInd(tHalHandle hHal);
+#ifdef FEATURE_WLAN_LFR
+tANI_BOOLEAN csrIsScanAllowed(tpAniSirGlobal pMac);
+#endif
+
//Internal SME APIs
eHalStatus sme_AcquireGlobalLock( tSmeStruct *psSme)
{
@@ -1873,7 +1877,20 @@
return status;
}
-
+#ifdef FEATURE_WLAN_LFR
+tANI_BOOLEAN csrIsScanAllowed(tpAniSirGlobal pMac)
+{
+ switch(pMac->roam.neighborRoamInfo.neighborRoamState) {
+ case eCSR_NEIGHBOR_ROAM_STATE_REPORT_SCAN:
+ case eCSR_NEIGHBOR_ROAM_STATE_PREAUTHENTICATING:
+ case eCSR_NEIGHBOR_ROAM_STATE_PREAUTH_DONE:
+ case eCSR_NEIGHBOR_ROAM_STATE_REASSOCIATING:
+ return eANI_BOOLEAN_FALSE;
+ default:
+ return eANI_BOOLEAN_TRUE;
+ }
+}
+#endif
/* ---------------------------------------------------------------------------
\fn sme_ScanRequest
\brief a wrapper function to Request a 11d or full scan from CSR.
@@ -1900,8 +1917,17 @@
if ( HAL_STATUS_SUCCESS( status ) )
{
{
- status = csrScanRequest( hHal, sessionId, pscanReq,
- pScanRequestID, callback, pContext );
+#ifdef FEATURE_WLAN_LFR
+ if(csrIsScanAllowed) {
+#endif
+ status = csrScanRequest( hHal, sessionId, pscanReq,
+ pScanRequestID, callback, pContext );
+#ifdef FEATURE_WLAN_LFR
+ } else {
+ /*HandOff is in progress. So schedule this scan later*/
+ status = eHAL_STATUS_RESOURCES;
+ }
+#endif
}
sme_ReleaseGlobalLock( &pMac->sme );
@@ -6647,4 +6673,4 @@
)
{
WDA_TransportChannelDebug(NULL, displaySnapshot, toggleStallDetect, VOS_TRUE);
-}
\ No newline at end of file
+}