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
This commit is contained in:
Kapil Gupta 2017-02-13 15:47:04 +05:30 • committed by qcabuildsw
commit 957827b875
3 changed files with 63 additions and 2 deletions

View file

@ -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)
/*
* <ini>
* 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
*
* </ini>
*/
#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)
/*
* <ini>
* 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))

View file

@ -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;
}
/**

View file

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