SCAN-OFFLOAD: Changes required for aborting the scan
When abort scan is issued, only the scan requests with a
particular session id needs to removed from the pending
queue and current ongoing scan should be abroted.
Change-Id: I02a45a3f18919d91bdeb050719d473681f6979e7
CRs-fixed: 500914
diff --git a/CORE/HDD/inc/wlan_hdd_main.h b/CORE/HDD/inc/wlan_hdd_main.h
index 106c9ac..ef48491 100644
--- a/CORE/HDD/inc/wlan_hdd_main.h
+++ b/CORE/HDD/inc/wlan_hdd_main.h
@@ -1119,7 +1119,7 @@
void wlan_hdd_enable_deepsleep(v_VOID_t * pVosContext);
v_BOOL_t hdd_is_apps_power_collapse_allowed(hdd_context_t* pHddCtx);
v_BOOL_t hdd_is_suspend_notify_allowed(hdd_context_t* pHddCtx);
-void hdd_abort_mac_scan(hdd_context_t *pHddCtx);
+void hdd_abort_mac_scan(hdd_context_t *pHddCtx, tANI_U8 sessionId);
void wlan_hdd_set_monitor_tx_adapter( hdd_context_t *pHddCtx, hdd_adapter_t *pAdapter );
void hdd_cleanup_actionframe( hdd_context_t *pHddCtx, hdd_adapter_t *pAdapter );
v_BOOL_t is_crda_regulatory_entry_valid(void);
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c
index 2dff132..f78c756 100644
--- a/CORE/HDD/src/wlan_hdd_cfg80211.c
+++ b/CORE/HDD/src/wlan_hdd_cfg80211.c
@@ -2280,7 +2280,7 @@
if ((pScanInfo != NULL) && pScanInfo->mScanPending)
{
INIT_COMPLETION(pScanInfo->abortscan_event_var);
- hdd_abort_mac_scan(staAdapter->pHddCtx);
+ hdd_abort_mac_scan(staAdapter->pHddCtx, pAdapter->sessionId);
status = wait_for_completion_interruptible_timeout(
&pScanInfo->abortscan_event_var,
msecs_to_jiffies(WLAN_WAIT_TIME_ABORTSCAN));
@@ -5904,7 +5904,7 @@
{
hddLog(VOS_TRACE_LEVEL_INFO, "Disconnect is in progress, "
"Aborting Scan");
- hdd_abort_mac_scan(pHddCtx);
+ hdd_abort_mac_scan(pHddCtx, pAdapter->sessionId);
}
#ifdef FEATURE_WLAN_TDLS
diff --git a/CORE/HDD/src/wlan_hdd_hostapd.c b/CORE/HDD/src/wlan_hdd_hostapd.c
index c9e98fa..b1593d6 100644
--- a/CORE/HDD/src/wlan_hdd_hostapd.c
+++ b/CORE/HDD/src/wlan_hdd_hostapd.c
@@ -1190,7 +1190,7 @@
// Lets do abort scan to ensure smooth authentication for client
if ((pScanInfo != NULL) && pScanInfo->mScanPending)
{
- hdd_abort_mac_scan(pHddCtx);
+ hdd_abort_mac_scan(pHddCtx, pHostapdAdapter->sessionId);
}
break;
diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c
index df81f9b..5ec5a67 100644
--- a/CORE/HDD/src/wlan_hdd_main.c
+++ b/CORE/HDD/src/wlan_hdd_main.c
@@ -273,7 +273,7 @@
{
int result;
INIT_COMPLETION(pHddCtx->scan_info.abortscan_event_var);
- hdd_abort_mac_scan(pAdapter->pHddCtx);
+ hdd_abort_mac_scan(pAdapter->pHddCtx, pAdapter->sessionId);
result = wait_for_completion_interruptible_timeout(
&pHddCtx->scan_info.abortscan_event_var,
msecs_to_jiffies(WLAN_WAIT_TIME_ABORTSCAN));
@@ -3989,7 +3989,7 @@
}
else
{
- hdd_abort_mac_scan(pHddCtx);
+ hdd_abort_mac_scan(pHddCtx, pAdapter->sessionId);
}
if (test_bit(SME_SESSION_OPENED, &pAdapter->event_flags))
@@ -4893,7 +4893,7 @@
// we are about to Request Full Power, and since that is synchronized,
// the expectation is that by the time Request Full Power has completed,
// all scans will be cancelled.
- hdd_abort_mac_scan( pHddCtx );
+ hdd_abort_mac_scan( pHddCtx, pAdapter->sessionId);
//Stop the timer if already running
if (VOS_TIMER_STATE_RUNNING ==
diff --git a/CORE/HDD/src/wlan_hdd_scan.c b/CORE/HDD/src/wlan_hdd_scan.c
index 3f5fbd3..dae352d 100644
--- a/CORE/HDD/src/wlan_hdd_scan.c
+++ b/CORE/HDD/src/wlan_hdd_scan.c
@@ -1173,8 +1173,8 @@
}
/* Abort any MAC scan if in progress */
-void hdd_abort_mac_scan(hdd_context_t* pHddCtx)
+void hdd_abort_mac_scan(hdd_context_t* pHddCtx, tANI_U8 sessionId)
{
- sme_AbortMacScan(pHddCtx->hHal);
+ sme_AbortMacScan(pHddCtx->hHal, sessionId);
}
diff --git a/CORE/HDD/src/wlan_hdd_wext.c b/CORE/HDD/src/wlan_hdd_wext.c
index df93be8..46820df 100644
--- a/CORE/HDD/src/wlan_hdd_wext.c
+++ b/CORE/HDD/src/wlan_hdd_wext.c
@@ -6785,7 +6785,7 @@
}
}
- hdd_abort_mac_scan(pHddCtx);
+ hdd_abort_mac_scan(pHddCtx, pAdapter->sessionId);
sme_ScanFlushResult(hHal, pAdapter->sessionId);
#if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR)
sme_UpdateBgScanConfigIniChannelList(hHal, (eCsrBand) band);
diff --git a/CORE/MAC/inc/sirApi.h b/CORE/MAC/inc/sirApi.h
index 0dd3e66..bd1634b 100644
--- a/CORE/MAC/inc/sirApi.h
+++ b/CORE/MAC/inc/sirApi.h
@@ -889,6 +889,13 @@
-----------------------------*/
} tSirSmeScanReq, *tpSirSmeScanReq;
+typedef struct sSirSmeScanAbortReq
+{
+ tANI_U16 type;
+ tANI_U16 msgLen;
+ tANI_U8 sessionId;
+} tSirSmeScanAbortReq, *tpSirSmeScanAbortReq;
+
typedef struct sSirSmeScanChanReq
{
tANI_U16 type;
diff --git a/CORE/MAC/src/pe/lim/limProcessMessageQueue.c b/CORE/MAC/src/pe/lim/limProcessMessageQueue.c
index b93cd26..ed05aa7 100644
--- a/CORE/MAC/src/pe/lim/limProcessMessageQueue.c
+++ b/CORE/MAC/src/pe/lim/limProcessMessageQueue.c
@@ -842,13 +842,23 @@
* @param pMac Pointer to Global MAC structure
* @return eHAL_STATUS_SUCCESS or eHAL_STATUS_FAILURE
*/
-eHalStatus limSendStopScanOffloadReq(tpAniSirGlobal pMac)
+eHalStatus limSendStopScanOffloadReq(tpAniSirGlobal pMac, tANI_U8 SessionId)
{
tSirMsgQ msg;
tSirRetStatus rc = eSIR_SUCCESS;
+ tAbortScanParams *pAbortScanParams;
+ if (eHAL_STATUS_SUCCESS != palAllocateMemory(pMac->hHdd,
+ (void**) &pAbortScanParams,
+ sizeof(tAbortScanParams)))
+ {
+ limLog(pMac, LOGP, FL("Memory allocation failed for AbortScanParams"));
+ return eHAL_STATUS_FAILURE;
+ }
+
+ pAbortScanParams->SessionId = SessionId;
msg.type = WDA_STOP_SCAN_OFFLOAD_REQ;
- msg.bodyptr = NULL;
+ msg.bodyptr = pAbortScanParams;
msg.bodyval = 0;
rc = wdaPostCtrlMsg(pMac, &msg);
@@ -856,6 +866,7 @@
{
limLog(pMac, LOGE, FL("wdaPostCtrlMsg() return failure"),
pMac);
+ palFreeMemory(pMac->hHdd, (tANI_U8 *)pAbortScanParams);
return eHAL_STATUS_FAILURE;
}
@@ -877,7 +888,7 @@
* @return None
*/
void
-limProcessAbortScanInd(tpAniSirGlobal pMac)
+limProcessAbortScanInd(tpAniSirGlobal pMac, tANI_U8 SessionId)
{
#ifdef FEATURE_WLAN_DIAG_SUPPORT_LIM //FEATURE_WLAN_DIAG_SUPPORT
limDiagEventReport(pMac, WLAN_PE_DIAG_SCAN_ABORT_IND_EVENT, NULL, 0, 0);
@@ -894,7 +905,7 @@
if (pMac->fScanOffload)
{
/* send stop scan cmd to fw if scan offload is enabled. */
- limSendStopScanOffloadReq(pMac);
+ limSendStopScanOffloadReq(pMac, SessionId);
}
else
{
@@ -1236,11 +1247,13 @@
break;
case eWNI_SME_SCAN_ABORT_IND:
+ {
+ tANI_U8 *pSessionId = (tANI_U8 *)limMsg->bodyptr;
+ limProcessAbortScanInd(pMac, *pSessionId);
vos_mem_free((v_VOID_t *)limMsg->bodyptr);
limMsg->bodyptr = NULL;
- limProcessAbortScanInd(pMac);
break;
-
+ }
case eWNI_SME_START_REQ:
case eWNI_SME_SYS_READY_IND:
#ifndef WNI_ASKEY_NON_SUPPORT_FEATURE
diff --git a/CORE/SME/inc/sme_Api.h b/CORE/SME/inc/sme_Api.h
index f604be3..71942e8 100644
--- a/CORE/SME/inc/sme_Api.h
+++ b/CORE/SME/inc/sme_Api.h
@@ -1771,17 +1771,6 @@
eHalStatus sme_SetKeepAlive (tHalHandle hHal, tANI_U8 sessionId,
tpSirKeepAliveReq pRequest);
-
-/* ---------------------------------------------------------------------------
- \fn sme_AbortMacScan
- \brief API to cancel MAC scan.
- \param hHal - The handle returned by macOpen.
- \return VOS_STATUS
- VOS_STATUS_E_FAILURE - failure
- VOS_STATUS_SUCCESS success
- ---------------------------------------------------------------------------*/
-eHalStatus sme_AbortMacScan(tHalHandle hHal);
-
/* ----------------------------------------------------------------------------
\fn sme_GetOperationChannel
\brief API to get current channel on which STA is parked
@@ -1962,11 +1951,12 @@
\fn sme_AbortMacScan
\brief API to cancel MAC scan.
\param hHal - The handle returned by macOpen.
+ \param sessionId - sessionId for interface
\return VOS_STATUS
VOS_STATUS_E_FAILURE - failure
VOS_STATUS_SUCCESS success
---------------------------------------------------------------------------*/
-eHalStatus sme_AbortMacScan(tHalHandle hHal);
+eHalStatus sme_AbortMacScan(tHalHandle hHal, tANI_U8 sessionId);
/* ---------------------------------------------------------------------------
\fn sme_GetCfgValidChannels
diff --git a/CORE/SME/src/csr/csrApiRoam.c b/CORE/SME/src/csr/csrApiRoam.c
index a037ba4..2894bb2 100644
--- a/CORE/SME/src/csr/csrApiRoam.c
+++ b/CORE/SME/src/csr/csrApiRoam.c
@@ -5978,7 +5978,7 @@
if( fClearScan )
{
csrScanCancelIdleScan(pMac);
- csrScanAbortMacScanNotForConnect(pMac);
+ csrScanAbortMacScanNotForConnect(pMac, sessionId);
}
pCommand->u.roamCmd.fReleaseProfile = eANI_BOOLEAN_FALSE;
if(NULL == pProfile)
@@ -6038,7 +6038,7 @@
else
{
csrScanCancelIdleScan(pMac);
- csrScanAbortMacScanNotForConnect(pMac);
+ csrScanAbortMacScanNotForConnect(pMac, sessionId);
if(pProfile)
{
//This is likely trying to reassoc to different profile
@@ -6197,7 +6197,7 @@
csrScanRemoveFreshScanCommand(pMac, sessionId);
csrScanCancelIdleScan(pMac);
//Only abort the scan if it is not used for other roam/connect purpose
- csrScanAbortMacScan(pMac);
+ csrScanAbortMacScan(pMac, sessionId);
if (!vos_concurrent_sessions_running() && (VOS_STA_SAP_MODE == pProfile->csrPersona))//In case of AP mode we do not want idle mode scan
{
csrScanDisable(pMac);
@@ -6363,7 +6363,7 @@
csrRoamCancelRoaming(pMac, sessionId);
csrScanRemoveFreshScanCommand(pMac, sessionId);
csrScanCancelIdleScan(pMac);
- csrScanAbortMacScanNotForConnect(pMac);
+ csrScanAbortMacScanNotForConnect(pMac, sessionId);
csrRoamRemoveDuplicateCommand(pMac, sessionId, NULL, eCsrHddIssuedReassocToSameAP);
if(csrIsConnStateConnected(pMac, sessionId))
{
@@ -6433,7 +6433,7 @@
if(pSession->pCurRoamProfile)
{
csrScanCancelIdleScan(pMac);
- csrScanAbortMacScanNotForConnect(pMac);
+ csrScanAbortMacScanNotForConnect(pMac, sessionId);
//We have to make a copy of pCurRoamProfile because it will be free inside csrRoamIssueConnect
status = palAllocateMemory(pMac->hHdd, (void **)&pProfile, sizeof(tCsrRoamProfile));
if(!HAL_STATUS_SUCCESS(status))
@@ -9736,7 +9736,7 @@
//Roaming is stopped after here
csrRoamCompleteRoaming(pMac, sessionId, eANI_BOOLEAN_TRUE, roamResult);
//Since CSR may be in lostlink roaming situation, abort all roaming related activities
- csrScanAbortMacScan(pMac);
+ csrScanAbortMacScan(pMac, sessionId);
csrRoamStopRoamingTimer(pMac, sessionId);
}
}
diff --git a/CORE/SME/src/csr/csrApiScan.c b/CORE/SME/src/csr/csrApiScan.c
index be49909..48ea388 100644
--- a/CORE/SME/src/csr/csrApiScan.c
+++ b/CORE/SME/src/csr/csrApiScan.c
@@ -5100,7 +5100,17 @@
pMsg->messageType = pal_cpu_to_be16((tANI_U16)eWNI_SME_SCAN_REQ);
pMsg->length = pal_cpu_to_be16(msgLen);
//ToDO: Fill in session info when we need to do scan base on session.
- pMsg->sessionId = 0;
+ if ((pMac->fScanOffload) && (sessionId != CSR_SESSION_ID_INVALID))
+ {
+ pMsg->sessionId = sessionId;
+ }
+ else
+ {
+ /* if sessionId == CSR_SESSION_ID_INVALID, then send the scan
+ request on first available session */
+ pMsg->sessionId = 0;
+ }
+
pMsg->transactionId = 0;
pMsg->dot11mode = (tANI_U8) csrTranslateToWNICfgDot11Mode(pMac, csrFindBestPhyMode( pMac, pMac->roam.configParam.phyMode ));
pMsg->bssType = pal_cpu_to_be32(csrTranslateBsstypeToMacType(pScanReq->BSSType));
@@ -7361,49 +7371,123 @@
}
-eHalStatus csrScanAbortMacScan(tpAniSirGlobal pMac)
+eHalStatus csrScanAbortMacScan(tpAniSirGlobal pMac, tANI_U8 sessionId)
{
- eHalStatus status = eHAL_STATUS_SUCCESS;
- tSirMbMsg *pMsg;
+ eHalStatus status = eHAL_STATUS_FAILURE;
+ tSirSmeScanAbortReq *pMsg;
tANI_U16 msgLen;
tListElem *pEntry;
tSmeCmd *pCommand;
-#ifdef WLAN_AP_STA_CONCURRENCY
- csrLLLock(&pMac->scan.scanCmdPendingList);
- while( NULL != ( pEntry = csrLLRemoveHead( &pMac->scan.scanCmdPendingList, LL_ACCESS_NOLOCK) ) )
+ if (!pMac->fScanOffload)
{
+#ifdef WLAN_AP_STA_CONCURRENCY
+ csrLLLock(&pMac->scan.scanCmdPendingList);
+ while(NULL !=
+ (pEntry = csrLLRemoveHead(&pMac->scan.scanCmdPendingList,
+ LL_ACCESS_NOLOCK)))
+ {
- pCommand = GET_BASE_ADDR( pEntry, tSmeCmd, Link );
- csrAbortCommand( pMac, pCommand, eANI_BOOLEAN_FALSE);
- }
- csrLLUnlock(&pMac->scan.scanCmdPendingList);
+ pCommand = GET_BASE_ADDR( pEntry, tSmeCmd, Link );
+ csrAbortCommand( pMac, pCommand, eANI_BOOLEAN_FALSE);
+ }
+ csrLLUnlock(&pMac->scan.scanCmdPendingList);
#endif
- pMac->scan.fDropScanCmd = eANI_BOOLEAN_TRUE;
- csrRemoveCmdFromPendingList( pMac, &pMac->roam.roamCmdPendingList, eSmeCommandScan);
- csrRemoveCmdFromPendingList( pMac, &pMac->sme.smeCmdPendingList, eSmeCommandScan);
- pMac->scan.fDropScanCmd = eANI_BOOLEAN_FALSE;
+ pMac->scan.fDropScanCmd = eANI_BOOLEAN_TRUE;
+ csrRemoveCmdFromPendingList( pMac, &pMac->roam.roamCmdPendingList, eSmeCommandScan);
+ csrRemoveCmdFromPendingList( pMac, &pMac->sme.smeCmdPendingList, eSmeCommandScan);
+ pMac->scan.fDropScanCmd = eANI_BOOLEAN_FALSE;
+
+ pEntry = csrLLPeekHead(&pMac->sme.smeCmdActiveList, LL_ACCESS_LOCK);
+ }
+ else
+ {
+ pMac->scan.fDropScanCmd = eANI_BOOLEAN_TRUE;
+ csrRemoveCmdWithSessionIdFromPendingList(pMac,
+ sessionId,
+ &pMac->sme.smeScanCmdPendingList,
+ eSmeCommandScan);
+ pMac->scan.fDropScanCmd = eANI_BOOLEAN_FALSE;
+
+ pEntry = csrLLPeekHead(&pMac->sme.smeScanCmdActiveList, LL_ACCESS_LOCK);
+ }
//We need to abort scan only if we are scanning
- if(NULL != (pEntry = csrLLPeekHead(&pMac->sme.smeCmdActiveList, LL_ACCESS_LOCK)))
+ if(NULL != pEntry)
{
pCommand = GET_BASE_ADDR( pEntry, tSmeCmd, Link );
- if(eSmeCommandScan == pCommand->command)
+ if(eSmeCommandScan == pCommand->command &&
+ pCommand->sessionId == sessionId)
{
- msgLen = (tANI_U16)(sizeof( tSirMbMsg ));
+ msgLen = (tANI_U16)(sizeof(tSirSmeScanAbortReq));
status = palAllocateMemory(pMac->hHdd, (void **)&pMsg, msgLen);
if(HAL_STATUS_SUCCESS(status))
{
palZeroMemory(pMac->hHdd, (void *)pMsg, msgLen);
pMsg->type = pal_cpu_to_be16((tANI_U16)eWNI_SME_SCAN_ABORT_IND);
pMsg->msgLen = pal_cpu_to_be16(msgLen);
+ pMsg->sessionId = sessionId;
status = palSendMBMessage(pMac->hHdd, pMsg);
}
+ else
+ smsLog(pMac, LOGE, FL("Failed to allocate memory for"
+ " SmeScanAbortReq"));
}
}
- return( status );
+ return(status);
+}
+
+void csrRemoveCmdWithSessionIdFromPendingList(tpAniSirGlobal pMac,
+ tANI_U8 sessionId,
+ tDblLinkList *pList,
+ eSmeCommandType commandType)
+{
+ tDblLinkList localList;
+ tListElem *pEntry;
+ tSmeCmd *pCommand;
+ tListElem *pEntryToRemove;
+
+ vos_mem_zero(&localList, sizeof(tDblLinkList));
+ if(!HAL_STATUS_SUCCESS(csrLLOpen(pMac->hHdd, &localList)))
+ {
+ smsLog(pMac, LOGE, FL(" failed to open list"));
+ return;
+ }
+
+ csrLLLock(pList);
+ if ((pEntry = csrLLPeekHead( pList, LL_ACCESS_NOLOCK)))
+ {
+
+ /* Have to make sure we don't loop back to the head of the list,
+ * which will happen if the entry is NOT on the list */
+ while (pEntry)
+ {
+ pEntryToRemove = pEntry;
+ pEntry = csrLLNext(pList, pEntry, LL_ACCESS_NOLOCK);
+ pCommand = GET_BASE_ADDR( pEntryToRemove, tSmeCmd, Link );
+ if ((pCommand->command == commandType) &&
+ (pCommand->sessionId == sessionId))
+ {
+ /* Remove that entry only */
+ if (csrLLRemoveEntry( pList, pEntryToRemove, LL_ACCESS_NOLOCK))
+ {
+ csrLLInsertTail(&localList, pEntryToRemove,
+ LL_ACCESS_NOLOCK);
+ }
+ }
+ }
+ }
+ csrLLUnlock(pList);
+
+ while ((pEntry = csrLLRemoveHead(&localList, LL_ACCESS_NOLOCK)))
+ {
+ pCommand = GET_BASE_ADDR(pEntry, tSmeCmd, Link);
+ csrAbortCommand(pMac, pCommand, eANI_BOOLEAN_FALSE);
+ }
+
+ csrLLClose(&localList);
}
void csrRemoveCmdFromPendingList(tpAniSirGlobal pMac, tDblLinkList *pList,
@@ -7457,14 +7541,15 @@
}
-eHalStatus csrScanAbortMacScanNotForConnect(tpAniSirGlobal pMac)
+eHalStatus csrScanAbortMacScanNotForConnect(tpAniSirGlobal pMac,
+ tANI_U8 sessionId)
{
eHalStatus status = eHAL_STATUS_SUCCESS;
if( !csrIsScanForRoamCommandActive( pMac ) )
{
//Only abort the scan if it is not used for other roam/connect purpose
- status = csrScanAbortMacScan(pMac);
+ status = csrScanAbortMacScan(pMac, sessionId);
}
return (status);
diff --git a/CORE/SME/src/csr/csrInsideApi.h b/CORE/SME/src/csr/csrInsideApi.h
index d15a02f..3f5a99b 100644
--- a/CORE/SME/src/csr/csrInsideApi.h
+++ b/CORE/SME/src/csr/csrInsideApi.h
@@ -281,10 +281,15 @@
tANI_BOOLEAN csrScanRemoveNotRoamingScanCommand(tpAniSirGlobal pMac);
//To remove fresh scan commands from the pending queue
tANI_BOOLEAN csrScanRemoveFreshScanCommand(tpAniSirGlobal pMac, tANI_U8 sessionId);
-eHalStatus csrScanAbortMacScan(tpAniSirGlobal pMac);
+eHalStatus csrScanAbortMacScan(tpAniSirGlobal pMac, tANI_U8 sessionId);
void csrRemoveCmdFromPendingList(tpAniSirGlobal pMac, tDblLinkList *pList,
eSmeCommandType commandType );
-eHalStatus csrScanAbortMacScanNotForConnect(tpAniSirGlobal pMac);
+void csrRemoveCmdWithSessionIdFromPendingList(tpAniSirGlobal pMac,
+ tANI_U8 sessionId,
+ tDblLinkList *pList,
+ eSmeCommandType commandType);
+eHalStatus csrScanAbortMacScanNotForConnect(tpAniSirGlobal pMac,
+ tANI_U8 sessionId);
eHalStatus csrScanGetScanChannelInfo(tpAniSirGlobal pMac, tANI_U8 sessionId);
//To age out scan results base. tSmeGetScanChnRsp is a pointer returned by LIM that
//has the information regarding scanned channels.
diff --git a/CORE/SME/src/csr/csrNeighborRoam.c b/CORE/SME/src/csr/csrNeighborRoam.c
index 82fe3cf..e9217aa 100644
--- a/CORE/SME/src/csr/csrNeighborRoam.c
+++ b/CORE/SME/src/csr/csrNeighborRoam.c
@@ -620,7 +620,7 @@
/* Abort any ongoing scan */
if (eANI_BOOLEAN_TRUE == pNeighborRoamInfo->scanRspPending)
{
- csrScanAbortMacScan(pMac);
+ csrScanAbortMacScan(pMac, pNeighborRoamInfo->csrSessionId);
}
pNeighborRoamInfo->scanRspPending = eANI_BOOLEAN_FALSE;
diff --git a/CORE/SME/src/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c
index a3a19fd..8ed85c6 100644
--- a/CORE/SME/src/sme_common/sme_Api.c
+++ b/CORE/SME/src/sme_common/sme_Api.c
@@ -5839,11 +5839,12 @@
\fn sme_AbortMacScan
\brief API to cancel MAC scan.
\param hHal - The handle returned by macOpen.
+ \param sessionId - sessionId on which we need to abort scan.
\return VOS_STATUS
VOS_STATUS_E_FAILURE - failure
VOS_STATUS_SUCCESS success
---------------------------------------------------------------------------*/
-eHalStatus sme_AbortMacScan(tHalHandle hHal)
+eHalStatus sme_AbortMacScan(tHalHandle hHal, tANI_U8 sessionId)
{
eHalStatus status;
tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
@@ -5851,7 +5852,7 @@
status = sme_AcquireGlobalLock( &pMac->sme );
if ( HAL_STATUS_SUCCESS( status ) )
{
- status = csrScanAbortMacScan(pMac);
+ status = csrScanAbortMacScan(pMac, sessionId);
sme_ReleaseGlobalLock( &pMac->sme );
}
diff --git a/CORE/VOSS/inc/vos_api.h b/CORE/VOSS/inc/vos_api.h
index 80d941d..8b8d597 100644
--- a/CORE/VOSS/inc/vos_api.h
+++ b/CORE/VOSS/inc/vos_api.h
@@ -266,7 +266,7 @@
v_VOID_t *pModuleContext );
v_BOOL_t vos_is_apps_power_collapse_allowed(void* pHddCtx);
-void vos_abort_mac_scan(void);
+void vos_abort_mac_scan(tANI_U8 sessionId);
/**
@brief vos_wlanShutdown() - This API will shutdown WLAN driver
diff --git a/CORE/VOSS/src/vos_api.c b/CORE/VOSS/src/vos_api.c
index 1931805..11808e6 100644
--- a/CORE/VOSS/src/vos_api.c
+++ b/CORE/VOSS/src/vos_api.c
@@ -1877,7 +1877,7 @@
return hdd_is_apps_power_collapse_allowed((hdd_context_t*) pHddCtx);
}
-void vos_abort_mac_scan(void)
+void vos_abort_mac_scan(v_U8_t sessionId)
{
hdd_context_t *pHddCtx = NULL;
v_CONTEXT_t pVosContext = NULL;
@@ -1896,10 +1896,9 @@
return;
}
- hdd_abort_mac_scan(pHddCtx);
+ hdd_abort_mac_scan(pHddCtx, sessionId);
return;
}
-
/*---------------------------------------------------------------------------
\brief vos_shutdown() - shutdown VOS
diff --git a/CORE/WDA/inc/legacy/halMsgApi.h b/CORE/WDA/inc/legacy/halMsgApi.h
index f613021..d010bf8 100644
--- a/CORE/WDA/inc/legacy/halMsgApi.h
+++ b/CORE/WDA/inc/legacy/halMsgApi.h
@@ -1309,6 +1309,11 @@
tANI_U32 status;
}tAddStaSelfParams, *tpAddStaSelfParams;
+typedef struct sAbortScanParams
+{
+ tANI_U8 SessionId;
+}tAbortScanParams, *tpAbortScanParams;
+
typedef struct sDelStaSelfParams
{
tSirMacAddr selfMacAddr;