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/HDD/inc/wlan_hdd_cfg.h b/CORE/HDD/inc/wlan_hdd_cfg.h
index 8dbd9cb..d8c1e7e 100644
--- a/CORE/HDD/inc/wlan_hdd_cfg.h
+++ b/CORE/HDD/inc/wlan_hdd_cfg.h
@@ -2147,6 +2147,10 @@
#define CFG_INITIAL_DWELL_TIME_MIN (0)
#define CFG_INITIAL_DWELL_TIME_MAX (100)
+#define CFG_INITIAL_SCAN_SKIP_DFS_CH_NAME "gInitialScanSkipDFSCh"
+#define CFG_INITIAL_SCAN_SKIP_DFS_CH_DEFAULT (1)
+#define CFG_INITIAL_SCAN_SKIP_DFS_CH_MIN (0)
+#define CFG_INITIAL_SCAN_SKIP_DFS_CH_MAX (1)
/*---------------------------------------------------------------------------
Type declarations
@@ -2593,6 +2597,7 @@
v_U32_t wlanLoggingNumBuf;
#endif
+ v_BOOL_t initialScanSkipDFSCh;
} hdd_config_t;
/*---------------------------------------------------------------------------
Function declarations and documenation
diff --git a/CORE/HDD/src/wlan_hdd_cfg.c b/CORE/HDD/src/wlan_hdd_cfg.c
index 6edbc69..649d3c1 100644
--- a/CORE/HDD/src/wlan_hdd_cfg.c
+++ b/CORE/HDD/src/wlan_hdd_cfg.c
@@ -2980,6 +2980,13 @@
CFG_INITIAL_DWELL_TIME_DEFAULT,
CFG_INITIAL_DWELL_TIME_MIN,
CFG_INITIAL_DWELL_TIME_MAX ),
+
+ REG_VARIABLE(CFG_INITIAL_SCAN_SKIP_DFS_CH_NAME, WLAN_PARAM_Integer,
+ hdd_config_t, initialScanSkipDFSCh,
+ VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_INITIAL_SCAN_SKIP_DFS_CH_DEFAULT,
+ CFG_INITIAL_SCAN_SKIP_DFS_CH_MIN,
+ CFG_INITIAL_SCAN_SKIP_DFS_CH_MAX),
};
/*
@@ -4899,6 +4906,7 @@
smeConfig.csrConfig.isAmsduSupportInAMPDU = pConfig->isAmsduSupportInAMPDU;
smeConfig.csrConfig.nSelect5GHzMargin = pConfig->nSelect5GHzMargin;
+ smeConfig.csrConfig.initialScanSkipDFSCh = pConfig->initialScanSkipDFSCh;
smeConfig.csrConfig.isCoalesingInIBSSAllowed =
pHddCtx->cfg_ini->isCoalesingInIBSSAllowed;
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) &&