From 957827b875ce3db70ea26765affdce9318cbfdbd Mon Sep 17 00:00:00 2001 From: Kapil Gupta Date: Mon, 13 Feb 2017 15:47:04 +0530 Subject: [PATCH] qcacld-3.0: Add monitor time for PER based roam Curretly FW considers minimum time of hysteresis for PER based roam as constant value which is 25 seconds. Add changes to make this configurable using ini. Change-Id: I1a985594d515f42d1aaca8e4ef174fb29b51586a CRs-Fixed: 2005849 --- core/hdd/inc/wlan_hdd_cfg.h | 32 ++++++++++++++++++++++++++++++++ core/hdd/src/wlan_hdd_cfg.c | 16 ++++++++++++++++ core/sme/src/csr/csr_api_roam.c | 17 +++++++++++++++-- 3 files changed, 63 insertions(+), 2 deletions(-) diff --git a/core/hdd/inc/wlan_hdd_cfg.h b/core/hdd/inc/wlan_hdd_cfg.h index 32dcf43ab93f..d8f0b11cecea 100644 --- a/core/hdd/inc/wlan_hdd_cfg.h +++ b/core/hdd/inc/wlan_hdd_cfg.h @@ -8345,6 +8345,37 @@ enum hdd_wext_control { #define CFG_PRIVATE_WEXT_CONTROL_MAX (hdd_wext_enabled) #define CFG_PRIVATE_WEXT_CONTROL_DEFAULT (hdd_wext_deprecated) +/* + * + * gper_roam_mon_time - Minimum time required in seconds to + * be considered as valid scenario for PER based roam + * @Min: 5 + * @Max: 25 + * @Default: 25 + * + * This ini is used to define minimum time in seconds for which DUT has + * collected the PER stats before it can consider the stats hysteresis to be + * valid for PER based scan. + * DUT collects following information during this period: + * 1. % of packets below gper_roam_low_rate_th + * 2. # packets above gper_roam_high_rate_th + * if DUT gets (1) greater than gper_roam_th_percent and (2) is zero during + * this period, it triggers PER based roam scan. + * + * Related: gper_roam_enabled, gper_roam_high_rate_th, gper_roam_low_rate_th, + * gper_roam_th_percent, gper_roam_rest_time + * + * Supported Feature: LFR-3.0 + * + * Usage: Internal + * + * + */ +#define CFG_PER_ROAM_MONITOR_TIME "gper_roam_mon_time" +#define CFG_PER_ROAM_MONITOR_TIME_MIN (5) +#define CFG_PER_ROAM_MONITOR_TIME_MAX (25) +#define CFG_PER_ROAM_MONTIOR_TIME_DEFAULT (25) + /* * * gPowerUsage - Preferred Power Usage @@ -9731,6 +9762,7 @@ struct hdd_config { uint32_t per_roam_low_rate_threshold; uint32_t per_roam_th_percent; uint32_t per_roam_rest_time; + uint32_t per_roam_mon_time; }; #define VAR_OFFSET(_Struct, _Var) (offsetof(_Struct, _Var)) diff --git a/core/hdd/src/wlan_hdd_cfg.c b/core/hdd/src/wlan_hdd_cfg.c index b211f40f44e6..6e56d8c619d0 100644 --- a/core/hdd/src/wlan_hdd_cfg.c +++ b/core/hdd/src/wlan_hdd_cfg.c @@ -4243,6 +4243,14 @@ REG_TABLE_ENTRY g_registry_table[] = { CFG_PER_ROAM_REST_TIME_DEFAULT, CFG_PER_ROAM_REST_TIME_MIN, CFG_PER_ROAM_REST_TIME_MAX), + + REG_VARIABLE(CFG_PER_ROAM_MONITOR_TIME, WLAN_PARAM_Integer, + struct hdd_config, per_roam_mon_time, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_PER_ROAM_MONTIOR_TIME_DEFAULT, + CFG_PER_ROAM_MONITOR_TIME_MIN, + CFG_PER_ROAM_MONITOR_TIME_MAX), + }; /** @@ -5040,6 +5048,10 @@ static void hdd_per_roam_print_ini_config(hdd_context_t *hdd_ctx) hdd_info("Name = [%s] Value = [%u]", CFG_PER_ROAM_REST_TIME_NAME, hdd_ctx->config->per_roam_rest_time); + hdd_info("Name = [%s] Value = [%u]", + CFG_PER_ROAM_MONITOR_TIME, + hdd_ctx->config->per_roam_mon_time); + } /** @@ -6908,6 +6920,10 @@ static void hdd_update_per_config_to_sme(hdd_context_t *hdd_ctx, sme_config->csrConfig.per_roam_config.per_rest_time = hdd_ctx->config->per_roam_rest_time; + sme_config->csrConfig.per_roam_config.tx_per_mon_time = + hdd_ctx->config->per_roam_mon_time; + sme_config->csrConfig.per_roam_config.rx_per_mon_time = + hdd_ctx->config->per_roam_mon_time; } /** diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index c8b0c727320d..7629f26a0603 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/core/sme/src/csr/csr_api_roam.c @@ -2532,6 +2532,10 @@ QDF_STATUS csr_change_default_config_param(tpAniSirGlobal pMac, pParam->per_roam_config.rx_rate_thresh_percnt; pMac->roam.configParam.per_roam_config.per_rest_time = pParam->per_roam_config.per_rest_time; + pMac->roam.configParam.per_roam_config.tx_per_mon_time = + pParam->per_roam_config.tx_per_mon_time; + pMac->roam.configParam.per_roam_config.rx_per_mon_time = + pParam->per_roam_config.rx_per_mon_time; /* update p2p offload status */ pMac->pnoOffload = pParam->pnoOffload; @@ -2755,6 +2759,10 @@ QDF_STATUS csr_get_config_param(tpAniSirGlobal pMac, tCsrConfigParam *pParam) cfg_params->per_roam_config.rx_rate_thresh_percnt; pParam->per_roam_config.per_rest_time = cfg_params->per_roam_config.per_rest_time; + pParam->per_roam_config.tx_per_mon_time = + cfg_params->per_roam_config.tx_per_mon_time; + pParam->per_roam_config.rx_per_mon_time = + cfg_params->per_roam_config.rx_per_mon_time; pParam->conc_custom_rule1 = cfg_params->conc_custom_rule1; pParam->conc_custom_rule2 = cfg_params->conc_custom_rule2; @@ -17615,18 +17623,23 @@ csr_create_per_roam_request(tpAniSirGlobal mac_ctx, uint8_t session_id) mac_ctx->roam.configParam.per_roam_config.rx_low_rate_thresh; req_buf->per_config.per_rest_time = mac_ctx->roam.configParam.per_roam_config.per_rest_time; + req_buf->per_config.tx_per_mon_time = + mac_ctx->roam.configParam.per_roam_config.tx_per_mon_time; + req_buf->per_config.rx_per_mon_time = + mac_ctx->roam.configParam.per_roam_config.rx_per_mon_time; req_buf->per_config.tx_rate_thresh_percnt = mac_ctx->roam.configParam.per_roam_config.tx_rate_thresh_percnt; req_buf->per_config.rx_rate_thresh_percnt = mac_ctx->roam.configParam.per_roam_config.rx_rate_thresh_percnt; QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_DEBUG, - FL("PER based roaming configuaration enable=%d vdev=%d high_rate_thresh=%d low_rate_thresh=%d rate_thresh_percnt=%d per_rest_time=%d"), + FL("PER based roaming configuaration enable=%d vdev=%d high_rate_thresh=%d low_rate_thresh=%d rate_thresh_percnt=%d per_rest_time=%d monitor_time=%d"), req_buf->per_config.enable, session_id, req_buf->per_config.tx_high_rate_thresh, req_buf->per_config.tx_low_rate_thresh, req_buf->per_config.tx_rate_thresh_percnt, - req_buf->per_config.per_rest_time); + req_buf->per_config.per_rest_time, + req_buf->per_config.tx_per_mon_time); return req_buf; }