wlan: Exit BMPS when host sends DEL_STA msg to firmware
As firmware cannot handle DEL_SELF_STA msg in BMPS state
host will do exit bmps and then will send DEL_STA msg.
Change-Id: I7d70ab3df475084383779503066c9316ca10b0ef
CRs-Fixed: 498124
diff --git a/CORE/HDD/src/wlan_hdd_wext.c b/CORE/HDD/src/wlan_hdd_wext.c
index 9ae360c..736c4f9 100644
--- a/CORE/HDD/src/wlan_hdd_wext.c
+++ b/CORE/HDD/src/wlan_hdd_wext.c
@@ -110,6 +110,7 @@
#include "wlan_hdd_dev_pwr.h"
#include "qc_sap_ioctl.h"
+#include "sme_Api.h"
#ifdef CONFIG_HAS_EARLYSUSPEND
extern void hdd_suspend_wlan(struct early_suspend *wlan_suspend);
@@ -4385,6 +4386,12 @@
pr_info("Stopping AP mode\n");
+ if (TRUE == sme_IsPmcBmps(WLAN_HDD_GET_HAL_CTX(pAdapter)))
+ {
+ /* EXIT BMPS as fw cannot handle DEL_STA when its in BMPS */
+ wlan_hdd_enter_bmps(pAdapter, DRIVER_POWER_MODE_ACTIVE);
+ }
+
/*Make sure that pAdapter cleaned properly*/
hdd_stop_adapter( pHddCtx, pAdapter_to_stop );
hdd_deinit_adapter( pHddCtx, pAdapter_to_stop );
@@ -4394,6 +4401,12 @@
pAdapter_to_stop->macAddressCurrent.bytes);
hdd_close_adapter(WLAN_HDD_GET_CTX(pAdapter), pAdapter_to_stop,
TRUE);
+
+ if (FALSE == sme_IsPmcBmps(WLAN_HDD_GET_HAL_CTX(pAdapter)))
+ {
+ /* put the device back into BMPS */
+ wlan_hdd_enter_bmps(pAdapter, DRIVER_POWER_MODE_AUTO);
+ }
}
else
{
diff --git a/CORE/SME/inc/sme_Api.h b/CORE/SME/inc/sme_Api.h
index 439752a..3834b4f 100644
--- a/CORE/SME/inc/sme_Api.h
+++ b/CORE/SME/inc/sme_Api.h
@@ -2787,13 +2787,6 @@
-------------------------------------------------------------------------*/
VOS_STATUS sme_DeleteTdlsPeerSta(tHalHandle hHal, tANI_U8 sessionId, tSirMacAddr peerMac);
/* ---------------------------------------------------------------------------
- \fn sme_IsPmcBmps
- \brief API to Check if PMC state is BMPS.
-
- \- return v_BOOL_t
- -------------------------------------------------------------------------*/
-v_BOOL_t sme_IsPmcBmps(tHalHandle hHal);
-/* ---------------------------------------------------------------------------
\fn sme_SetTdlsPowerSaveProhibited
\API to set/reset the isTdlsPowerSaveProhibited.
@@ -2801,6 +2794,14 @@
-------------------------------------------------------------------------*/
void sme_SetTdlsPowerSaveProhibited(tHalHandle hHal, v_BOOL_t val);
#endif
+/* ---------------------------------------------------------------------------
+ \fn sme_IsPmcBmps
+ \brief API to Check if PMC state is BMPS.
+
+ \- return v_BOOL_t
+ -------------------------------------------------------------------------*/
+v_BOOL_t sme_IsPmcBmps(tHalHandle hHal);
+
#ifdef FEATURE_WLAN_TDLS_INTERNAL
typedef struct smeTdlsDisResult
{
diff --git a/CORE/SME/src/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c
index 41910e5..fcaa918 100644
--- a/CORE/SME/src/sme_common/sme_Api.c
+++ b/CORE/SME/src/sme_common/sme_Api.c
@@ -8284,16 +8284,6 @@
}
/* ---------------------------------------------------------------------------
- \fn sme_IsPmcBmps
- \API to Check if PMC state is BMPS.
-
- \- return v_BOOL_t
- -------------------------------------------------------------------------*/
-v_BOOL_t sme_IsPmcBmps(tHalHandle hHal)
-{
- return (BMPS == pmcGetPmcState(hHal));
-}
-/* ---------------------------------------------------------------------------
\fn sme_SetTdlsPowerSaveProhibited
\API to set/reset the isTdlsPowerSaveProhibited.
@@ -8307,6 +8297,17 @@
return;
}
#endif
+/* ---------------------------------------------------------------------------
+ \fn sme_IsPmcBmps
+ \API to Check if PMC state is BMPS.
+
+ \- return v_BOOL_t
+ -------------------------------------------------------------------------*/
+v_BOOL_t sme_IsPmcBmps(tHalHandle hHal)
+{
+ return (BMPS == pmcGetPmcState(hHal));
+}
+
#ifdef FEATURE_WLAN_TDLS_INTERNAL
/*
* SME API to start TDLS discovery Procedure