Merge "qcacld-3.0: Add new ini param for min rest time during roaming scan" into wlan-cld3.driver.lnx.2.0-dev
diff --git a/core/hdd/inc/wlan_hdd_cfg.h b/core/hdd/inc/wlan_hdd_cfg.h
index 7c512b9..c394acf 100644
--- a/core/hdd/inc/wlan_hdd_cfg.h
+++ b/core/hdd/inc/wlan_hdd_cfg.h
@@ -414,6 +414,31 @@
/*
* <ini>
+ * gRoamRestTimeMin - Set min neighbor scan timer period
+ * @Min: 3
+ * @Max: 300
+ * @Default: 200
+ *
+ * This is the min rest time after which firmware will check for traffic
+ * and if there no traffic it will move to a new channel to scan
+ * else it will stay on the home channel till gNeighborScanTimerPeriod time
+ * and then will move to a new channel to scan.
+ *
+ * Related: None
+ *
+ * Supported Feature: LFR Scan
+ *
+ * Usage: External
+ *
+ * </ini>
+ */
+#define CFG_NEIGHBOR_SCAN_MIN_TIMER_PERIOD_NAME "gRoamRestTimeMin"
+#define CFG_NEIGHBOR_SCAN_MIN_TIMER_PERIOD_MIN (3)
+#define CFG_NEIGHBOR_SCAN_MIN_TIMER_PERIOD_MAX (300)
+#define CFG_NEIGHBOR_SCAN_MIN_TIMER_PERIOD_DEFAULT (200)
+
+/*
+ * <ini>
* gOpportunisticThresholdDiff - Set oppurtunistic threshold diff
* @Min: 0
* @Max: 127
@@ -10611,6 +10636,7 @@
bool fFTResourceReqSupported;
uint16_t nNeighborScanPeriod;
+ uint16_t neighbor_scan_min_period;
uint8_t nNeighborLookupRssiThreshold;
uint8_t delay_before_vdev_stop;
uint8_t nOpportunisticThresholdDiff;
diff --git a/core/hdd/src/wlan_hdd_cfg.c b/core/hdd/src/wlan_hdd_cfg.c
index ff87115..ff5431a 100644
--- a/core/hdd/src/wlan_hdd_cfg.c
+++ b/core/hdd/src/wlan_hdd_cfg.c
@@ -175,6 +175,25 @@
pHddCtx->config->nNeighborScanPeriod);
}
+/*
+ * cb_notify_set_neighbor_scan_min_period() - configure min rest
+ * time during roaming scan
+ *
+ * @hdd_ctx: HDD context data structure
+ * @notify_id: Identifies 1 of the 4 parameters to be modified
+ *
+ * Picks up the value from hdd configuration and passes it to SME.
+ * Return: void
+ */
+static void
+cb_notify_set_neighbor_scan_min_period(hdd_context_t *pHddCtx,
+ unsigned long notifyId)
+{
+ sme_set_neighbor_scan_min_period(pHddCtx->hHal, 0,
+ pHddCtx->config->
+ neighbor_scan_min_period);
+}
+
static void
cb_notify_set_neighbor_results_refresh_period(hdd_context_t *pHddCtx,
unsigned long notifyId)
@@ -1275,6 +1294,16 @@
CFG_NEIGHBOR_SCAN_TIMER_PERIOD_MAX,
cb_notify_set_neighbor_scan_period, 0),
+ REG_DYNAMIC_VARIABLE(CFG_NEIGHBOR_SCAN_MIN_TIMER_PERIOD_NAME,
+ WLAN_PARAM_Integer,
+ struct hdd_config, neighbor_scan_min_period,
+ VAR_FLAGS_OPTIONAL |
+ VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_NEIGHBOR_SCAN_MIN_TIMER_PERIOD_DEFAULT,
+ CFG_NEIGHBOR_SCAN_MIN_TIMER_PERIOD_MIN,
+ CFG_NEIGHBOR_SCAN_MIN_TIMER_PERIOD_MAX,
+ cb_notify_set_neighbor_scan_min_period, 0),
+
REG_DYNAMIC_VARIABLE(CFG_NEIGHBOR_LOOKUP_RSSI_THRESHOLD_NAME,
WLAN_PARAM_Integer,
struct hdd_config, nNeighborLookupRssiThreshold,
@@ -5522,6 +5551,8 @@
pHddCtx->config->nMaxNeighborReqTries);
hdd_info("Name = [nNeighborScanPeriod] Value = [%u] ",
pHddCtx->config->nNeighborScanPeriod);
+ hdd_info("Name = [n_neighbor_scan_min_period] Value = [%u] ",
+ pHddCtx->config->neighbor_scan_min_period);
hdd_info("Name = [nNeighborScanResultsRefreshPeriod] Value = [%u] ",
pHddCtx->config->nNeighborResultsRefreshPeriod);
hdd_info("Name = [nEmptyScanRefreshPeriod] Value = [%u] ",
@@ -7484,6 +7515,9 @@
pConfig->nNeighborScanMinChanTime;
smeConfig->csrConfig.neighborRoamConfig.nNeighborScanTimerPeriod =
pConfig->nNeighborScanPeriod;
+ smeConfig->csrConfig.neighborRoamConfig.
+ neighbor_scan_min_timer_period =
+ pConfig->neighbor_scan_min_period;
smeConfig->csrConfig.neighborRoamConfig.nMaxNeighborRetries =
pConfig->nMaxNeighborReqTries;
smeConfig->csrConfig.neighborRoamConfig.nNeighborResultsRefreshPeriod =
diff --git a/core/mac/inc/sir_api.h b/core/mac/inc/sir_api.h
index e30acfd..048db4e 100644
--- a/core/mac/inc/sir_api.h
+++ b/core/mac/inc/sir_api.h
@@ -3028,6 +3028,7 @@
uint8_t Command;
uint8_t reason;
uint16_t NeighborScanTimerPeriod;
+ uint16_t neighbor_scan_min_timer_period;
uint16_t NeighborRoamScanRefreshPeriod;
uint16_t NeighborScanChannelMinTime;
uint16_t NeighborScanChannelMaxTime;
diff --git a/core/sme/inc/csr_api.h b/core/sme/inc/csr_api.h
index cec91f0..02bf47c 100644
--- a/core/sme/inc/csr_api.h
+++ b/core/sme/inc/csr_api.h
@@ -1058,6 +1058,7 @@
typedef struct tagCsrNeighborRoamConfigParams {
uint32_t nNeighborScanTimerPeriod;
+ uint32_t neighbor_scan_min_timer_period;
uint8_t nNeighborLookupRssiThreshold;
uint16_t nNeighborScanMinChanTime;
uint16_t nNeighborScanMaxChanTime;
diff --git a/core/sme/inc/csr_internal.h b/core/sme/inc/csr_internal.h
index f0edfd7..e4e06ba 100644
--- a/core/sme/inc/csr_internal.h
+++ b/core/sme/inc/csr_internal.h
@@ -429,6 +429,7 @@
typedef struct tagCsrNeighborRoamConfig {
uint32_t nNeighborScanTimerPeriod;
+ uint32_t neighbor_scan_min_timer_period;
uint8_t nNeighborLookupRssiThreshold;
uint16_t nNeighborScanMinChanTime;
uint16_t nNeighborScanMaxChanTime;
diff --git a/core/sme/inc/csr_neighbor_roam.h b/core/sme/inc/csr_neighbor_roam.h
index dff1bd9..056b46f 100644
--- a/core/sme/inc/csr_neighbor_roam.h
+++ b/core/sme/inc/csr_neighbor_roam.h
@@ -54,6 +54,7 @@
typedef struct sCsrNeighborRoamCfgParams {
uint8_t maxNeighborRetries;
uint32_t neighborScanPeriod;
+ uint32_t neighbor_scan_min_period;
tCsrChannelInfo channelInfo;
uint8_t neighborLookupThreshold;
uint8_t neighborReassocThreshold;
diff --git a/core/sme/inc/sme_api.h b/core/sme/inc/sme_api.h
index fece2e1..7430373 100644
--- a/core/sme/inc/sme_api.h
+++ b/core/sme/inc/sme_api.h
@@ -640,6 +640,8 @@
QDF_STATUS sme_set_neighbor_scan_period(tHalHandle hHal, uint8_t sessionId,
const uint16_t nNeighborScanPeriod);
uint16_t sme_get_neighbor_scan_period(tHalHandle hHal, uint8_t sessionId);
+QDF_STATUS sme_set_neighbor_scan_min_period(tHalHandle h_hal,
+ uint8_t session_id, const uint16_t neighbor_scan_min_period);
QDF_STATUS sme_set_roam_bmiss_first_bcnt(tHalHandle hHal,
uint8_t sessionId, const uint8_t nRoamBmissFirstBcnt);
uint8_t sme_get_roam_bmiss_first_bcnt(tHalHandle hHal);
diff --git a/core/sme/src/common/sme_api.c b/core/sme/src/common/sme_api.c
index 617e8a6..926d84f 100644
--- a/core/sme/src/common/sme_api.c
+++ b/core/sme/src/common/sme_api.c
@@ -8957,7 +8957,55 @@
neighborScanPeriod;
}
+/**
+ * sme_set_neighbor_scan_min_period() - Update neighbor_scan_min_period
+ * This function is called through dynamic setConfig callback function
+ * to configure neighbor_scan_min_period
+ *
+ * @hal - HAL handle for device
+ * @session_id - Session Identifier
+ * @neighbor_scan_min_period - neighbor scan min period
+ *
+ * Return - QDF_STATUS
+ */
+QDF_STATUS sme_set_neighbor_scan_min_period(tHalHandle hal,
+ uint8_t session_id,
+ const uint16_t
+ neighbor_scan_min_period)
+{
+ tpAniSirGlobal pmac = PMAC_STRUCT(hal);
+ QDF_STATUS status = QDF_STATUS_SUCCESS;
+ tCsrNeighborRoamConfig *p_neighbor_roam_config = NULL;
+ tpCsrNeighborRoamControlInfo p_neighbor_roam_info = NULL;
+ if (session_id >= CSR_ROAM_SESSION_MAX) {
+ sme_err("Invalid sme session id: %d", session_id);
+ return QDF_STATUS_E_INVAL;
+ }
+
+ status = sme_acquire_global_lock(&pmac->sme);
+ if (QDF_IS_STATUS_SUCCESS(status)) {
+ p_neighbor_roam_config =
+ &pmac->roam.configParam.neighborRoamConfig;
+ p_neighbor_roam_info = &pmac->
+ roam.neighborRoamInfo[session_id];
+ sme_debug("LFR:set neighbor scan min period, old:%d, "
+ "new: %d, state: %s",
+ pmac->roam.configParam.neighborRoamConfig.
+ neighbor_scan_min_timer_period,
+ neighbor_scan_min_period,
+ mac_trace_get_neighbour_roam_state(pmac->roam.
+ neighborRoamInfo[session_id].
+ neighborRoamState));
+ p_neighbor_roam_config->neighbor_scan_min_timer_period =
+ neighbor_scan_min_period;
+ p_neighbor_roam_info->cfgParams.neighbor_scan_min_period =
+ neighbor_scan_min_period;
+ sme_release_global_lock(&pmac->sme);
+ }
+
+ return status;
+}
/*--------------------------------------------------------------------------
\brief sme_get_roam_rssi_diff() - get Roam rssi diff
diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c
index 8820dc6..18bfcfa 100644
--- a/core/sme/src/csr/csr_api_roam.c
+++ b/core/sme/src/csr/csr_api_roam.c
@@ -1428,6 +1428,8 @@
pMac->roam.configParam.neighborRoamConfig.nNeighborScanMaxChanTime = 40;
pMac->roam.configParam.neighborRoamConfig.nNeighborScanTimerPeriod =
200;
+ pMac->roam.configParam.neighborRoamConfig.
+ neighbor_scan_min_timer_period = 200;
pMac->roam.configParam.neighborRoamConfig.neighborScanChanList.
numChannels = 3;
pMac->roam.configParam.neighborRoamConfig.neighborScanChanList.
@@ -2558,6 +2560,9 @@
sme_debug("nNeighborScanTimerPerioid: %d",
pMac->roam.configParam.neighborRoamConfig.
nNeighborScanTimerPeriod);
+ sme_debug("neighbor_scan_min_timer_period: %d",
+ pMac->roam.configParam.neighborRoamConfig.
+ neighbor_scan_min_timer_period);
sme_debug("nNeighborLookupRssiThreshold: %d",
pMac->roam.configParam.neighborRoamConfig.
nNeighborLookupRssiThreshold);
@@ -17146,6 +17151,8 @@
req_buf->reason = reason;
req_buf->NeighborScanTimerPeriod =
roam_info->cfgParams.neighborScanPeriod;
+ req_buf->neighbor_scan_min_timer_period =
+ roam_info->cfgParams.neighbor_scan_min_period;
req_buf->NeighborRoamScanRefreshPeriod =
roam_info->cfgParams.neighborResultsRefreshPeriod;
req_buf->NeighborScanChannelMinTime =
diff --git a/core/sme/src/csr/csr_neighbor_roam.c b/core/sme/src/csr/csr_neighbor_roam.c
index 15b94e3..f51f80b 100644
--- a/core/sme/src/csr/csr_neighbor_roam.c
+++ b/core/sme/src/csr/csr_neighbor_roam.c
@@ -1264,6 +1264,9 @@
pNeighborRoamInfo->cfgParams.neighborScanPeriod =
pMac->roam.configParam.neighborRoamConfig.
nNeighborScanTimerPeriod;
+ pNeighborRoamInfo->cfgParams.neighbor_scan_min_period =
+ pMac->roam.configParam.neighborRoamConfig.
+ neighbor_scan_min_timer_period;
pNeighborRoamInfo->cfgParams.neighborResultsRefreshPeriod =
pMac->roam.configParam.neighborRoamConfig.
nNeighborResultsRefreshPeriod;
diff --git a/core/wma/src/wma_scan_roam.c b/core/wma/src/wma_scan_roam.c
index 93104bd..24b72d3 100644
--- a/core/wma/src/wma_scan_roam.c
+++ b/core/wma/src/wma_scan_roam.c
@@ -1398,9 +1398,12 @@
__func__,
roam_req->NeighborScanChannelMinTime,
roam_req->NeighborScanChannelMaxTime);
- WMA_LOGD("%s: NeighborScanTimerPeriod: %d HomeAwayTime: %d nProbes: %d",
+ WMA_LOGD("%s: NeighborScanTimerPeriod: %d "
+ "neighbor_scan_min_timer_period %d "
+ "HomeAwayTime: %d nProbes: %d",
__func__,
roam_req->NeighborScanTimerPeriod,
+ roam_req->neighbor_scan_min_timer_period,
roam_req->HomeAwayTime, roam_req->nProbes);
/*
@@ -1476,7 +1479,8 @@
QDF_MAX(scan_params->burst_duration,
scan_params->dwell_time_passive);
}
- scan_params->min_rest_time = roam_req->NeighborScanTimerPeriod;
+ scan_params->min_rest_time =
+ roam_req->neighbor_scan_min_timer_period;
scan_params->max_rest_time = roam_req->NeighborScanTimerPeriod;
scan_params->repeat_probe_time = (roam_req->nProbes > 0) ?
QDF_MAX(scan_params->dwell_time_active /