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
+}