wlan: Long initial scan time.
Initial Scan after driver load takes long time.As a part of fix
scan all non-dfs channels actively in the 1st scan.
Add new ini parameter, gInitialScanSkipDFSCh, to enable this feature.
By default this feature this enabled.
Change-Id: I3406bdb98bc835b0b04b623922e501ebdade1312
CRs-Fixed: 589316
diff --git a/CORE/SME/inc/csrApi.h b/CORE/SME/inc/csrApi.h
index fb22ee6..7f83a79 100644
--- a/CORE/SME/inc/csrApi.h
+++ b/CORE/SME/inc/csrApi.h
@@ -1137,6 +1137,7 @@
tANI_U8 isCoalesingInIBSSAllowed;
tANI_U8 allowDFSChannelRoam;
+ tANI_BOOLEAN initialScanSkipDFSCh;
}tCsrConfigParam;
diff --git a/CORE/SME/inc/csrInternal.h b/CORE/SME/inc/csrInternal.h
index a5f3bd3..ea3b13d 100644
--- a/CORE/SME/inc/csrInternal.h
+++ b/CORE/SME/inc/csrInternal.h
@@ -664,6 +664,7 @@
tANI_U8 nSelect5GHzMargin;
tANI_U8 isCoalesingInIBSSAllowed;
tANI_U8 allowDFSChannelRoam;
+ tANI_BOOLEAN initialScanSkipDFSCh;
}tCsrConfig;
typedef struct tagCsrChannelPowerInfo
diff --git a/CORE/SME/src/csr/csrApiRoam.c b/CORE/SME/src/csr/csrApiRoam.c
index fb557da..b41d9ad 100644
--- a/CORE/SME/src/csr/csrApiRoam.c
+++ b/CORE/SME/src/csr/csrApiRoam.c
@@ -1694,7 +1694,12 @@
{
pMac->roam.configParam.scanAgeTimeCPS = pParam->scanAgeTimeCPS;
}
-
+ if (pParam->initialScanSkipDFSCh)
+ {
+ pMac->roam.configParam.initialScanSkipDFSCh =
+ pParam->initialScanSkipDFSCh;
+ }
+
csrAssignRssiForCategory(pMac, CSR_BEST_RSSI_VALUE, pParam->bCatRssiOffset);
pMac->roam.configParam.nRoamingTime = pParam->nRoamingTime;
pMac->roam.configParam.fEnforce11dChannels = pParam->fEnforce11dChannels;
diff --git a/CORE/SME/src/csr/csrApiScan.c b/CORE/SME/src/csr/csrApiScan.c
index 2b9b1a1..300cd19 100644
--- a/CORE/SME/src/csr/csrApiScan.c
+++ b/CORE/SME/src/csr/csrApiScan.c
@@ -787,7 +787,7 @@
p11dScanCmd->command = eSmeCommandScan;
p11dScanCmd->u.scanCmd.callback = pMac->scan.callback11dScanDone;
p11dScanCmd->u.scanCmd.pContext = NULL;
- p11dScanCmd->u.scanCmd.scanID = pMac->scan.nextScanID++;
+ p11dScanCmd->u.scanCmd.scanID = pMac->scan.nextScanID;
scanReq.BSSType = eCSR_BSS_TYPE_ANY;
if ( csrIs11dSupported(pMac) )
@@ -6091,7 +6091,42 @@
{
new_index = 0;
pMac->roam.numValidChannels = len;
- for ( index = 0; index < pSrcReq->ChannelInfo.numOfChannels ; index++ )
+
+ /* Since in CsrScanRequest,value of pMac->scan.nextScanID
+ * is incremented before calling CsrScanCopyRequest, as a
+ * result pMac->scan.nextScanID is equal to ONE for the
+ * first scan.
+ */
+ if (pMac->roam.configParam.initialScanSkipDFSCh &&
+ 1 == pMac->scan.nextScanID )
+ {
+ smsLog(pMac, LOG1,
+ FL("Initial scan, scan only non-DFS channels"));
+
+ for (index = 0; index < pSrcReq->ChannelInfo.
+ numOfChannels ; index++ )
+ {
+ if((csrRoamIsValidChannel(pMac, pSrcReq->ChannelInfo.
+ ChannelList[index])))
+ {
+ /*Skiipping DFS Channels for 1st scan */
+ if(NV_CHANNEL_DFS ==
+ vos_nv_getChannelEnabledState(pSrcReq->ChannelInfo.
+ ChannelList[index]))
+ continue ;
+
+ pDstReq->ChannelInfo.ChannelList[new_index] =
+ pSrcReq->ChannelInfo.ChannelList[index];
+ new_index++;
+
+ }
+ }
+ pMac->roam.configParam.initialScanSkipDFSCh = 0;
+ }
+ else
+ {
+ for ( index = 0; index < pSrcReq->ChannelInfo.
+ numOfChannels ; index++ )
{
/* Allow scan on valid channels only.
* If it is p2p scan and valid channel list doesnt contain
@@ -6136,6 +6171,7 @@
new_index++;
}
}
+ }
pDstReq->ChannelInfo.numOfChannels = new_index;
#ifdef FEATURE_WLAN_LFR
if ((eCSR_SCAN_HO_BG_SCAN == pSrcReq->requestType) &&