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; }