wlan: reset scan offload state after a subsystem restart
Reset the scan offload state after a subsystem restart so
that the firmware can be re-programmed to offload neighbor
scans immediately after the wireless subsystem is brought out
of reset.
Change-Id: I05c2937d8adbe588c4055a61574796e93be5a0c2
CRs-Fixed: 557549
diff --git a/CORE/HDD/src/wlan_hdd_early_suspend.c b/CORE/HDD/src/wlan_hdd_early_suspend.c
index 8a9720e..8e0651f 100644
--- a/CORE/HDD/src/wlan_hdd_early_suspend.c
+++ b/CORE/HDD/src/wlan_hdd_early_suspend.c
@@ -1527,7 +1527,7 @@
/* Stop SME - Cannot invoke vos_stop as vos_stop relies
* on threads being running to process the SYS Stop
*/
- vosStatus = sme_Stop(pHddCtx->hHal, TRUE);
+ vosStatus = sme_Stop(pHddCtx->hHal, HAL_STOP_TYPE_SYS_RESET);
VOS_ASSERT(VOS_IS_STATUS_SUCCESS(vosStatus));
hddLog(VOS_TRACE_LEVEL_FATAL, "%s: Doing MAC STOP",__func__);
diff --git a/CORE/MAC/inc/aniGlobal.h b/CORE/MAC/inc/aniGlobal.h
index 1423654..fc12fa1 100644
--- a/CORE/MAC/inc/aniGlobal.h
+++ b/CORE/MAC/inc/aniGlobal.h
@@ -987,13 +987,6 @@
tDriverType driverType;
} tMacOpenParameters;
-typedef enum
-{
- HAL_STOP_TYPE_SYS_RESET,
- HAL_STOP_TYPE_SYS_DEEP_SLEEP,
- HAL_STOP_TYPE_RF_KILL
-}tHalStopType;
-
typedef struct sHalMacStartParameters
{
// parametes for the Firmware
diff --git a/CORE/SME/inc/csrInternal.h b/CORE/SME/inc/csrInternal.h
index b20f111..7d26222 100644
--- a/CORE/SME/inc/csrInternal.h
+++ b/CORE/SME/inc/csrInternal.h
@@ -1313,7 +1313,7 @@
\brief To stop CSR. CSR still keeps its current setting.
\return eHalStatus
-------------------------------------------------------------------------------*/
-eHalStatus csrStop(tpAniSirGlobal pMac);
+eHalStatus csrStop(tpAniSirGlobal pMac, tHalStopType stopType);
/* ---------------------------------------------------------------------------
\fn csrReady
\brief To let CSR is ready to operate
diff --git a/CORE/SME/inc/sme_Api.h b/CORE/SME/inc/sme_Api.h
index cd9b1db..02226f5 100644
--- a/CORE/SME/inc/sme_Api.h
+++ b/CORE/SME/inc/sme_Api.h
@@ -202,7 +202,7 @@
\param hHal - The handle returned by macOpen.
- \param pmcFlag - The flag tells SME if we want to stop PMC or not
+ \param tHalStopType - reason for stopping
\return eHAL_STATUS_SUCCESS - SME is stopped.
@@ -211,7 +211,7 @@
\sa
--------------------------------------------------------------------------*/
-eHalStatus sme_Stop(tHalHandle hHal, tANI_BOOLEAN pmcFlag);
+eHalStatus sme_Stop(tHalHandle hHal, tHalStopType stopType);
/*--------------------------------------------------------------------------
diff --git a/CORE/SME/src/csr/csrApiRoam.c b/CORE/SME/src/csr/csrApiRoam.c
index 25324f2..92ef797 100644
--- a/CORE/SME/src/csr/csrApiRoam.c
+++ b/CORE/SME/src/csr/csrApiRoam.c
@@ -532,7 +532,7 @@
return (status);
}
-eHalStatus csrStop(tpAniSirGlobal pMac)
+eHalStatus csrStop(tpAniSirGlobal pMac, tHalStopType stopType)
{
tANI_U32 sessionId;
tANI_U32 i;
@@ -563,6 +563,18 @@
pMac->roam.curSubState[i] = eCSR_ROAM_SUBSTATE_NONE;
}
+#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
+ /* When HAL resets all the context information
+ * in HAL is lost, so we might need to send the
+ * scan offload request again when it comes
+ * out of reset for scan offload to be functional
+ */
+ if (HAL_STOP_TYPE_SYS_RESET == stopType)
+ {
+ bRoamScanOffloadStarted = VOS_FALSE;
+ }
+#endif
+
return (eHAL_STATUS_SUCCESS);
}
diff --git a/CORE/SME/src/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c
index 375b4ef..7fe9071 100644
--- a/CORE/SME/src/sme_common/sme_Api.c
+++ b/CORE/SME/src/sme_common/sme_Api.c
@@ -2221,6 +2221,7 @@
This is a synchronous call
\param hHal - The handle returned by macOpen
+ \param tHalStopType - reason for stopping
\return eHAL_STATUS_SUCCESS - SME is stopped.
@@ -2229,7 +2230,7 @@
\sa
--------------------------------------------------------------------------*/
-eHalStatus sme_Stop(tHalHandle hHal, tANI_BOOLEAN pmcFlag)
+eHalStatus sme_Stop(tHalHandle hHal, tHalStopType stopType)
{
eHalStatus status = eHAL_STATUS_FAILURE;
eHalStatus fail_status = eHAL_STATUS_SUCCESS;
@@ -2244,17 +2245,14 @@
p2pStop(hHal);
- if(pmcFlag)
- {
- status = pmcStop(hHal);
- if ( ! HAL_STATUS_SUCCESS( status ) ) {
- smsLog( pMac, LOGE, "pmcStop failed during smeStop with status=%d",
- status );
- fail_status = status;
- }
+ status = pmcStop(hHal);
+ if ( ! HAL_STATUS_SUCCESS( status ) ) {
+ smsLog( pMac, LOGE, "pmcStop failed during smeStop with status=%d",
+ status );
+ fail_status = status;
}
- status = csrStop(pMac);
+ status = csrStop(pMac, stopType);
if ( ! HAL_STATUS_SUCCESS( status ) ) {
smsLog( pMac, LOGE, "csrStop failed during smeStop with status=%d",
status );
diff --git a/CORE/SYS/common/src/wlan_qct_sys.c b/CORE/SYS/common/src/wlan_qct_sys.c
index 3bff38b..9197bee 100644
--- a/CORE/SYS/common/src/wlan_qct_sys.c
+++ b/CORE/SYS/common/src/wlan_qct_sys.c
@@ -373,7 +373,7 @@
}
else
{
- vosStatus = sme_Stop( hHal, TRUE );
+ vosStatus = sme_Stop( hHal, HAL_STOP_TYPE_SYS_DEEP_SLEEP);
VOS_ASSERT( VOS_IS_STATUS_SUCCESS( vosStatus ) );
vosStatus = macStop( hHal, HAL_STOP_TYPE_SYS_DEEP_SLEEP );
diff --git a/CORE/VOSS/src/vos_api.c b/CORE/VOSS/src/vos_api.c
index 59b9c7f..df9f359 100644
--- a/CORE/VOSS/src/vos_api.c
+++ b/CORE/VOSS/src/vos_api.c
@@ -736,7 +736,7 @@
err_sme_stop:
- sme_Stop(pVosContext->pMACContext, TRUE);
+ sme_Stop(pVosContext->pMACContext, HAL_STOP_TYPE_SYS_RESET);
err_mac_stop:
macStop( pVosContext->pMACContext, HAL_STOP_TYPE_SYS_RESET );
diff --git a/CORE/WDA/inc/legacy/halTypes.h b/CORE/WDA/inc/legacy/halTypes.h
index 2e72956..65260fe 100644
--- a/CORE/WDA/inc/legacy/halTypes.h
+++ b/CORE/WDA/inc/legacy/halTypes.h
@@ -240,6 +240,12 @@
} eHalStatus;
+typedef enum
+{
+ HAL_STOP_TYPE_SYS_RESET,
+ HAL_STOP_TYPE_SYS_DEEP_SLEEP,
+ HAL_STOP_TYPE_RF_KILL,
+}tHalStopType;
// macro to check for SUCCESS value of the halStatus
#define HAL_STATUS_SUCCESS( variable ) ( eHAL_STATUS_SUCCESS == ( variable ) )