wlan: Avoid DEL_STA_SELF when Disconnecting SAP
At the time of START AP driver sends ADD_STA_SELF
followed with ADD BSS.
After that driver do DEL_BSS followed with DEL_STA_SELF.
In case of SAP, firmware add self address as BSS address.
In sapFsm, sme_CloseSession will call limProcessSmeDelStaSelfReq to
do DEL_STA_SELF. Firmware returns failure for DEL_STA_SELF as this
was already deleted as part of DEL_BSS.
Fix is to not send DEL_STA_SELF for SAP scenario
Instead of this driver will do only csrCleanupSession and will post
eSAP_STOP_BSS_EVENT to HDD to STOP BSS.
Change-Id: Icf25f68a65c28c6795c3dc9410519d28dd72f395
CRs-Fixed: 984269
diff --git a/CORE/BAP/src/bapModule.c b/CORE/BAP/src/bapModule.c
index ee72d8c..5cda7f5 100644
--- a/CORE/BAP/src/bapModule.c
+++ b/CORE/BAP/src/bapModule.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012-2013 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2013, 2016 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -580,7 +580,7 @@
if( btampContext->isBapSessionOpen == TRUE )
{
halStatus = sme_CloseSession(halHandle,
- btampContext->sessionId, VOS_TRUE, NULL, NULL);
+ btampContext->sessionId, FALSE, VOS_TRUE, NULL, NULL);
if(eHAL_STATUS_SUCCESS == halStatus)
{
btampContext->isBapSessionOpen = FALSE;
diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c
index a829d47..b406b41 100755
--- a/CORE/HDD/src/wlan_hdd_main.c
+++ b/CORE/HDD/src/wlan_hdd_main.c
@@ -6516,7 +6516,7 @@
{
INIT_COMPLETION(pAdapter->session_close_comp_var);
if (eHAL_STATUS_SUCCESS == sme_CloseSession(pHddCtx->hHal,
- pAdapter->sessionId, VOS_TRUE,
+ pAdapter->sessionId, FALSE, VOS_TRUE,
hdd_smeCloseSessionCallback, pAdapter))
{
unsigned long rc;
@@ -7486,8 +7486,8 @@
{
INIT_COMPLETION(pAdapter->session_close_comp_var);
if (eHAL_STATUS_SUCCESS ==
- sme_CloseSession(pHddCtx->hHal, pAdapter->sessionId, VOS_FALSE,
- hdd_smeCloseSessionCallback, pAdapter))
+ sme_CloseSession(pHddCtx->hHal, pAdapter->sessionId, FALSE,
+ VOS_FALSE, hdd_smeCloseSessionCallback, pAdapter))
{
unsigned long ret;
diff --git a/CORE/SAP/src/sapFsm.c b/CORE/SAP/src/sapFsm.c
index 4e19702..01a5f11 100644
--- a/CORE/SAP/src/sapFsm.c
+++ b/CORE/SAP/src/sapFsm.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012-2013 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2013, 2016 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -1141,7 +1141,8 @@
}
else if (eHAL_STATUS_SUCCESS ==
sme_CloseSession(hHal,
- sapContext->sessionId, VOS_TRUE, NULL, NULL))
+ sapContext->sessionId, FALSE,
+ VOS_TRUE, NULL, NULL))
{
sapContext->isSapSessionOpen = eSAP_FALSE;
}
@@ -1221,15 +1222,13 @@
else
{
sapContext->isSapSessionOpen = eSAP_FALSE;
- if (!HAL_STATUS_SUCCESS(
- sme_CloseSession(hHal,
- sapContext->sessionId, VOS_TRUE,
- sapRoamSessionCloseCallback, sapContext)))
- {
- vosStatus = sapSignalHDDevent(sapContext, NULL,
- eSAP_STOP_BSS_EVENT,
- (v_PVOID_t) eSAP_STATUS_SUCCESS);
- }
+ sme_CloseSession(hHal,
+ sapContext->sessionId, TRUE, VOS_TRUE,
+ NULL, sapContext);
+
+ vosStatus = sapSignalHDDevent(sapContext, NULL,
+ eSAP_STOP_BSS_EVENT,
+ (v_PVOID_t) eSAP_STATUS_SUCCESS);
}
}
}
diff --git a/CORE/SME/inc/sme_Api.h b/CORE/SME/inc/sme_Api.h
index d0f8341..68e7e2f 100644
--- a/CORE/SME/inc/sme_Api.h
+++ b/CORE/SME/inc/sme_Api.h
@@ -469,6 +469,7 @@
--------------------------------------------------------------------------*/
eHalStatus sme_CloseSession(tHalHandle hHal, tANI_U8 sessionId,
+ tANI_BOOLEAN fSync,
tANI_U8 bPurgeSmeCmdList,
csrRoamSessionCloseCallback callback,
void *pContext);
diff --git a/CORE/SME/src/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c
index e7b78c9..e3dcfbe 100644
--- a/CORE/SME/src/sme_common/sme_Api.c
+++ b/CORE/SME/src/sme_common/sme_Api.c
@@ -6909,6 +6909,7 @@
--------------------------------------------------------------------------*/
eHalStatus sme_CloseSession(tHalHandle hHal, tANI_U8 sessionId,
+ tANI_BOOLEAN fSync,
tANI_U8 bPurgeSmeCmdList,
csrRoamSessionCloseCallback callback,
void *pContext)
@@ -6918,11 +6919,11 @@
MTRACE(vos_trace(VOS_MODULE_ID_SME,
TRACE_CODE_SME_RX_HDD_CLOSE_SESSION, sessionId, 0));
- status = sme_AcquireGlobalLock( &pMac->sme );
- if ( HAL_STATUS_SUCCESS( status ) )
+ status = sme_AcquireGlobalLock(&pMac->sme);
+ if (HAL_STATUS_SUCCESS(status))
{
- status = csrRoamCloseSession( pMac, sessionId, FALSE, bPurgeSmeCmdList,
- callback, pContext );
+ status = csrRoamCloseSession(pMac, sessionId, fSync, bPurgeSmeCmdList,
+ callback, pContext);
sme_ReleaseGlobalLock( &pMac->sme );
}