wlan: Changes to handle gracefully init scan failure in romaing case
Change-Id: I76c39340280e7f3df88e15fa040f29cfca34ff86
CR-Fixed: 405480
diff --git a/CORE/MAC/inc/sirApi.h b/CORE/MAC/inc/sirApi.h
index 7b665dd..67b9ed8 100644
--- a/CORE/MAC/inc/sirApi.h
+++ b/CORE/MAC/inc/sirApi.h
@@ -938,14 +938,16 @@
typedef enum eSirBackgroundScanMode
{
eSIR_AGGRESSIVE_BACKGROUND_SCAN = 0,
- eSIR_NORMAL_BACKGROUND_SCAN = 1
+ eSIR_NORMAL_BACKGROUND_SCAN = 1,
+ eSIR_ROAMING_SCAN = 2,
} tSirBackgroundScanMode;
/// Two types of traffic check
typedef enum eSirLinkTrafficCheck
{
eSIR_DONT_CHECK_LINK_TRAFFIC_BEFORE_SCAN = 0,
- eSIR_CHECK_LINK_TRAFFIC_BEFORE_SCAN = 1
+ eSIR_CHECK_LINK_TRAFFIC_BEFORE_SCAN = 1,
+ eSIR_CHECK_ROAMING_SCAN = 2,
} tSirLinkTrafficCheck;
#define SIR_BG_SCAN_RETURN_CACHED_RESULTS 0x0
diff --git a/CORE/MAC/src/pe/lim/limFT.c b/CORE/MAC/src/pe/lim/limFT.c
index 8b8a1eb..50d1444 100644
--- a/CORE/MAC/src/pe/lim/limFT.c
+++ b/CORE/MAC/src/pe/lim/limFT.c
@@ -266,7 +266,7 @@
if (psessionEntry->currentOperChannel != pMac->ft.ftPEContext.pFTPreAuthReq->preAuthchannelNum)
{
// Need to suspend link only if the channels are different
- limSuspendLink(pMac, eSIR_CHECK_LINK_TRAFFIC_BEFORE_SCAN, FTPreAuthSuspendLinkHandler,
+ limSuspendLink(pMac, eSIR_CHECK_ROAMING_SCAN, FTPreAuthSuspendLinkHandler,
(tANI_U32 *)psessionEntry);
}
else
diff --git a/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c b/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c
index 57b9057..0ea95c6 100644
--- a/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c
+++ b/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c
@@ -89,7 +89,7 @@
void
limSetChannel(tpAniSirGlobal pMac, tANI_U8 channel, tANI_U8 secChannelOffset, tPowerdBm maxTxPower, tANI_U8 peSessionId);
#define IS_MLM_SCAN_REQ_BACKGROUND_SCAN_AGGRESSIVE(pMac) (pMac->lim.gpLimMlmScanReq->backgroundScanMode == eSIR_AGGRESSIVE_BACKGROUND_SCAN)
-
+#define IS_MLM_SCAN_REQ_BACKGROUND_SCAN_NORMAL(pMac) (pMac->lim.gpLimMlmScanReq->backgroundScanMode == eSIR_NORMAL_BACKGROUND_SCAN)
/**
* limProcessMlmReqMessages()
@@ -188,16 +188,28 @@
#ifdef ANI_PRODUCT_TYPE_CLIENT
if ( IS_MLM_SCAN_REQ_BACKGROUND_SCAN_AGGRESSIVE(pMac) )
+ {
checkTraffic = eSIR_DONT_CHECK_LINK_TRAFFIC_BEFORE_SCAN;
- else
+ }
+ else if (IS_MLM_SCAN_REQ_BACKGROUND_SCAN_NORMAL(pMac))
+ {
checkTraffic = eSIR_CHECK_LINK_TRAFFIC_BEFORE_SCAN;
+ }
+ else
+ checkTraffic = eSIR_CHECK_ROAMING_SCAN;
#else
/* Currently checking the traffic before scan for Linux station. This is because MLM
* scan request is not filled as scan is received via Measurement req in Linux. This
* should be made as common code for Windows/Linux station once the scan requests are
* enabled in Linux
* TODO */
+ if ( IS_MLM_SCAN_REQ_BACKGROUND_SCAN_AGGRESSIVE(pMac) ||
+ IS_MLM_SCAN_REQ_BACKGROUND_SCAN_NORMAL(pMac))
+ {
checkTraffic = eSIR_CHECK_LINK_TRAFFIC_BEFORE_SCAN;
+ }
+ else
+ checkTraffic = eSIR_CHECK_ROAMING_SCAN;
#endif
PELOG1(limLog(pMac, LOG1, FL("Calling limSendHalInitScanReq\n"));)
@@ -704,7 +716,14 @@
{
pInitScanParam->notifyBss = TRUE;
pInitScanParam->notifyHost = FALSE;
- pInitScanParam->scanMode = eHAL_SYS_MODE_LEARN;
+ if (eSIR_CHECK_ROAMING_SCAN == trafficCheck)
+ {
+ pInitScanParam->scanMode = eHAL_SYS_MODE_ROAM_SCAN;
+ }
+ else
+ {
+ pInitScanParam->scanMode = eHAL_SYS_MODE_LEARN;
+ }
pInitScanParam->frameType = SIR_MAC_CTRL_CTS;
__limCreateInitScanRawFrame(pMac, pInitScanParam);
@@ -714,7 +733,15 @@
{
if(nextState == eLIM_HAL_SUSPEND_LINK_WAIT_STATE)
{
- pInitScanParam->scanMode = eHAL_SYS_MODE_SUSPEND_LINK;
+ if (eSIR_CHECK_ROAMING_SCAN == trafficCheck)
+ {
+ pInitScanParam->scanMode = eHAL_SYS_MODE_ROAM_SUSPEND_LINK;
+ }
+ else
+ {
+ pInitScanParam->scanMode = eHAL_SYS_MODE_SUSPEND_LINK;
+ }
+
}
else
{
diff --git a/CORE/SME/src/csr/csrApiScan.c b/CORE/SME/src/csr/csrApiScan.c
index 1520b5d..6130b94 100644
--- a/CORE/SME/src/csr/csrApiScan.c
+++ b/CORE/SME/src/csr/csrApiScan.c
@@ -4713,6 +4713,11 @@
pMsg->skipDfsChnlInP2pSearch = pScanReq->skipDfsChnlInP2pSearch;
#endif
+ if (pScanReq->requestType == eCSR_SCAN_HO_BG_SCAN)
+ {
+ pMsg->backgroundScanMode = eSIR_ROAMING_SCAN;
+ }
+
}while(0);
if(HAL_STATUS_SUCCESS(status))
{
diff --git a/CORE/WDA/inc/legacy/halTypes.h b/CORE/WDA/inc/legacy/halTypes.h
index aa4496e..1e13272 100644
--- a/CORE/WDA/inc/legacy/halTypes.h
+++ b/CORE/WDA/inc/legacy/halTypes.h
@@ -290,7 +290,9 @@
eHAL_SYS_MODE_LEARN,
eHAL_SYS_MODE_SCAN,
eHAL_SYS_MODE_PROMISC,
- eHAL_SYS_MODE_SUSPEND_LINK
+ eHAL_SYS_MODE_SUSPEND_LINK,
+ eHAL_SYS_MODE_ROAM_SCAN,
+ eHAL_SYS_MODE_ROAM_SUSPEND_LINK,
} eHalSysMode;
diff --git a/CORE/WDI/CP/inc/wlan_qct_wdi.h b/CORE/WDI/CP/inc/wlan_qct_wdi.h
index 51be705..7b5600e 100644
--- a/CORE/WDI/CP/inc/wlan_qct_wdi.h
+++ b/CORE/WDI/CP/inc/wlan_qct_wdi.h
@@ -762,7 +762,10 @@
WDI_SCAN_MODE_LEARN,
WDI_SCAN_MODE_SCAN,
WDI_SCAN_MODE_PROMISC,
- WDI_SCAN_MODE_SUSPEND_LINK
+ WDI_SCAN_MODE_SUSPEND_LINK,
+ WDI_SCAN_MODE_ROAM_SCAN,
+ WDI_SCAN_MODE_ROAM_SUSPEND_LINK,
+
} WDI_ScanMode;
/*---------------------------------------------------------------------------
diff --git a/CORE/WDI/CP/src/wlan_qct_wdi.c b/CORE/WDI/CP/src/wlan_qct_wdi.c
index 41b6d6a..0c03bf9 100644
--- a/CORE/WDI/CP/src/wlan_qct_wdi.c
+++ b/CORE/WDI/CP/src/wlan_qct_wdi.c
@@ -21073,6 +21073,10 @@
return eHAL_SYS_MODE_PROMISC;
case WDI_SCAN_MODE_SUSPEND_LINK:
return eHAL_SYS_MODE_SUSPEND_LINK;
+ case WDI_SCAN_MODE_ROAM_SCAN:
+ return eHAL_SYS_MODE_ROAM_SCAN;
+ case WDI_SCAN_MODE_ROAM_SUSPEND_LINK:
+ return eHAL_SYS_MODE_ROAM_SUSPEND_LINK;
}
return eHAL_SYS_MODE_MAX;