diff options
| author | Manjeet Singh <manjee@codeaurora.org> | 2016-11-03 17:58:46 +0530 |
|---|---|---|
| committer | Anjaneedevi Kapparapu <akappa@codeaurora.org> | 2016-11-11 19:57:27 +0530 |
| commit | 222ee96b924cb208c3751297250df54dcd7934a6 (patch) | |
| tree | aa5475d5ffbdda4a56883d441888eada9b39f0b9 | |
| parent | 45441debcbdbcecee6364aac824984a3b59c14c9 (diff) | |
qcacld-2.0: Add support for band specific preference
Add support for 5Ghz network RSSI boost/penalty preference
based on ini values.
Change-Id: Ia3ae5dcc35b9a85fde5a609f8f27ff8b4bc35cec
CRs-fixed: 1085554
| -rw-r--r-- | CORE/HDD/inc/wlan_hdd_cfg.h | 59 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_cfg.c | 48 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_main.c | 17 | ||||
| -rw-r--r-- | CORE/SME/inc/sme_Api.h | 21 | ||||
| -rw-r--r-- | CORE/SME/src/sme_common/sme_Api.c | 42 |
5 files changed, 187 insertions, 0 deletions
diff --git a/CORE/HDD/inc/wlan_hdd_cfg.h b/CORE/HDD/inc/wlan_hdd_cfg.h index cb33d4662484..6207a1510830 100644 --- a/CORE/HDD/inc/wlan_hdd_cfg.h +++ b/CORE/HDD/inc/wlan_hdd_cfg.h @@ -4156,6 +4156,56 @@ FG_BTC_BT_INTERVAL_PAGE_P2P_STA_DEFAULT #define CFG_MAX_SCHED_SCAN_PLAN_ITRNS_MAX (100) #define CFG_MAX_SCHED_SCAN_PLAN_ITRNS_DEFAULT (10) +/* + * 5G preference parameters for boosting RSSI + * enable_band_specific_pref: Enable preference for 5G from INI. + * raise_rssi_thresh_5g: A_band_boost_threshold above which 5 GHz is favored. + * raise_factor_5g : Factor by which 5GHz RSSI is boosted. + * max_raise_rssi_5g: Maximum boost that can be applied to 5GHz RSSI. + */ + +#define CFG_ENABLE_5G_BAND_PREF_NAME "enable_5g_band_pref" +#define CFG_ENABLE_5G_BAND_PREF_MIN (0) +#define CFG_ENABLE_5G_BAND_PREF_MAX (1) +#define CFG_ENABLE_5G_BAND_PREF_DEFAULT (0) + +#define CFG_5G_RSSI_BOOST_THRESHOLD_NAME "5g_rssi_boost_threshold" +#define CFG_5G_RSSI_BOOST_THRESHOLD_MIN (-55) +#define CFG_5G_RSSI_BOOST_THRESHOLD_MAX (-70) +#define CFG_5G_RSSI_BOOST_THRESHOLD_DEFAULT (-60) + +#define CFG_5G_RSSI_BOOST_FACTOR_NAME "5g_rssi_boost_factor" +#define CFG_5G_RSSI_BOOST_FACTOR_MIN (0) +#define CFG_5G_RSSI_BOOST_FACTOR_MAX (2) +#define CFG_5G_RSSI_BOOST_FACTOR_DEFAULT (1) + +#define CFG_5G_MAX_RSSI_BOOST_NAME "5g_max_rssi_boost" +#define CFG_5G_MAX_RSSI_BOOST_MIN (0) +#define CFG_5G_MAX_RSSI_BOOST_MAX (20) +#define CFG_5G_MAX_RSSI_BOOST_DEFAULT (10) + +/* + * 5G preference parameters for penalizing RSSI + * drop_rssi_thresh_5g: threshold below which 5 GHz is not favored. + * drop_factor_5g : Factor by which a weak 5GHz RSSI is penalized. + * max_drop_rssi_5g: Maximum penalty that can be applied to 5GHz RSSI. + */ + +#define CFG_5G_RSSI_PENALIZE_THRESHOLD_NAME "5g_rssi_penalize_threshold" +#define CFG_5G_RSSI_PENALIZE_THRESHOLD_MIN (-65) +#define CFG_5G_RSSI_PENALIZE_THRESHOLD_MAX (-80) +#define CFG_5G_RSSI_PENALIZE_THRESHOLD_DEFAULT (-70) + +#define CFG_5G_RSSI_PENALIZE_FACTOR_NAME "5g_rssi_penalize_factor" +#define CFG_5G_RSSI_PENALIZE_FACTOR_MIN (0) +#define CFG_5G_RSSI_PENALIZE_FACTOR_MAX (2) +#define CFG_5G_RSSI_PENALIZE_FACTOR_DEFAULT (1) + +#define CFG_5G_MAX_RSSI_PENALIZE_NAME "5g_max_rssi_penalize" +#define CFG_5G_MAX_RSSI_PENALIZE_MIN (0) +#define CFG_5G_MAX_RSSI_PENALIZE_MAX (20) +#define CFG_5G_MAX_RSSI_PENALIZE_DEFAULT (10) + /*--------------------------------------------------------------------------- Type declarations -------------------------------------------------------------------------*/ @@ -4961,6 +5011,15 @@ struct hdd_config { uint32_t target_wakeup_type; uint32_t max_sched_scan_plan_interval; uint32_t max_sched_scan_plan_iterations; + /* 5G preference parameters for boosting RSSI */ + bool enable_5g_band_pref; + int8_t rssi_boost_threshold_5g; + uint8_t rssi_boost_factor_5g; + uint8_t max_rssi_boost_5g; + /* 5G preference parameters for dropping RSSI*/ + int8_t rssi_penalize_threshold_5g; + uint8_t rssi_penalize_factor_5g; + uint8_t max_rssi_penalize_5g; }; typedef struct hdd_config hdd_config_t; diff --git a/CORE/HDD/src/wlan_hdd_cfg.c b/CORE/HDD/src/wlan_hdd_cfg.c index 9d7b69453d2f..c00ade76c7cf 100644 --- a/CORE/HDD/src/wlan_hdd_cfg.c +++ b/CORE/HDD/src/wlan_hdd_cfg.c @@ -4787,6 +4787,54 @@ REG_TABLE_ENTRY g_registry_table[] = CFG_MAX_SCHED_SCAN_PLAN_ITRNS_MIN, CFG_MAX_SCHED_SCAN_PLAN_ITRNS_MAX), + REG_VARIABLE(CFG_ENABLE_5G_BAND_PREF_NAME, WLAN_PARAM_Integer, + hdd_config_t, enable_5g_band_pref, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_ENABLE_5G_BAND_PREF_DEFAULT, + CFG_ENABLE_5G_BAND_PREF_MIN, + CFG_ENABLE_5G_BAND_PREF_MAX), + + REG_VARIABLE(CFG_5G_RSSI_BOOST_THRESHOLD_NAME, WLAN_PARAM_Integer, + hdd_config_t, rssi_boost_threshold_5g, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_5G_RSSI_BOOST_THRESHOLD_DEFAULT, + CFG_5G_RSSI_BOOST_THRESHOLD_MIN, + CFG_5G_RSSI_BOOST_THRESHOLD_MAX), + + REG_VARIABLE(CFG_5G_RSSI_BOOST_FACTOR_NAME, WLAN_PARAM_Integer, + hdd_config_t, rssi_boost_factor_5g, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_5G_RSSI_BOOST_FACTOR_DEFAULT, + CFG_5G_RSSI_BOOST_FACTOR_MIN, + CFG_5G_RSSI_BOOST_FACTOR_MAX), + + REG_VARIABLE(CFG_5G_MAX_RSSI_BOOST_NAME, WLAN_PARAM_Integer, + hdd_config_t, max_rssi_boost_5g, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_5G_MAX_RSSI_BOOST_DEFAULT, + CFG_5G_MAX_RSSI_BOOST_MIN, + CFG_5G_MAX_RSSI_BOOST_MAX), + + REG_VARIABLE(CFG_5G_RSSI_PENALIZE_THRESHOLD_NAME, WLAN_PARAM_Integer, + hdd_config_t, rssi_penalize_threshold_5g, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_5G_RSSI_PENALIZE_THRESHOLD_DEFAULT, + CFG_5G_RSSI_PENALIZE_THRESHOLD_MIN, + CFG_5G_RSSI_PENALIZE_THRESHOLD_MAX), + + REG_VARIABLE(CFG_5G_RSSI_PENALIZE_FACTOR_NAME, WLAN_PARAM_Integer, + hdd_config_t, rssi_penalize_factor_5g, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_5G_RSSI_PENALIZE_FACTOR_DEFAULT, + CFG_5G_RSSI_PENALIZE_FACTOR_MIN, + CFG_5G_RSSI_PENALIZE_FACTOR_MAX), + + REG_VARIABLE(CFG_5G_MAX_RSSI_PENALIZE_NAME, WLAN_PARAM_Integer, + hdd_config_t, max_rssi_penalize_5g, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_5G_MAX_RSSI_PENALIZE_DEFAULT, + CFG_5G_MAX_RSSI_PENALIZE_MIN, + CFG_5G_MAX_RSSI_PENALIZE_MAX), }; diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c index 1658d3993216..1e58d4978011 100644 --- a/CORE/HDD/src/wlan_hdd_main.c +++ b/CORE/HDD/src/wlan_hdd_main.c @@ -14804,6 +14804,7 @@ int hdd_wlan_startup(struct device *dev, v_VOID_t *hif_sc) adf_os_device_t adf_ctx; #endif int set_value; + struct sme_5g_band_pref_params band_pref_params; ENTER(); @@ -15815,6 +15816,22 @@ int hdd_wlan_startup(struct device *dev, v_VOID_t *hif_sc) if (eHAL_STATUS_SUCCESS != hal_status) hddLog(LOGE, FL("Failed to disable Chan Avoidance Indcation")); } + if (pHddCtx->cfg_ini->enable_5g_band_pref) { + band_pref_params.rssi_boost_threshold_5g = + pHddCtx->cfg_ini->rssi_boost_threshold_5g; + band_pref_params.rssi_boost_factor_5g = + pHddCtx->cfg_ini->rssi_boost_factor_5g; + band_pref_params.max_rssi_boost_5g = + pHddCtx->cfg_ini->max_rssi_boost_5g; + band_pref_params.rssi_penalize_threshold_5g = + pHddCtx->cfg_ini->rssi_penalize_threshold_5g; + band_pref_params.rssi_penalize_factor_5g = + pHddCtx->cfg_ini->rssi_penalize_factor_5g; + band_pref_params.max_rssi_penalize_5g = + pHddCtx->cfg_ini->max_rssi_penalize_5g; + sme_set_5g_band_pref(pHddCtx->hHal, &band_pref_params); + } + if (pHddCtx->cfg_ini->sifs_burst_duration) { set_value = (SIFS_BURST_DUR_MULTIPLIER) * diff --git a/CORE/SME/inc/sme_Api.h b/CORE/SME/inc/sme_Api.h index 0c9576dce46c..a6bba573bac5 100644 --- a/CORE/SME/inc/sme_Api.h +++ b/CORE/SME/inc/sme_Api.h @@ -266,6 +266,24 @@ struct sme_oem_capability { uint32_t reserved2; }; +/* + * struct sme_5g_pref_params : 5G preference params to be read from ini + * @rssi_boost_threshold_5g: RSSI threshold above which 5 GHz is favored + * @rssi_boost_factor_5g: Factor by which 5GHz RSSI is boosted + * @max_rssi_boost_5g: Maximum boost that can be applied to 5GHz RSSI + * @rssi_penalize_threshold_5g: RSSI threshold below which 5G is not favored + * @rssi_penalize_factor_5g: Factor by which 5GHz RSSI is penalized + * @max_rssi_penalize_5g: Maximum penalty that can be applied to 5G RSSI + */ +struct sme_5g_band_pref_params { + int8_t rssi_boost_threshold_5g; + uint8_t rssi_boost_factor_5g; + uint8_t max_rssi_boost_5g; + int8_t rssi_penalize_threshold_5g; + uint8_t rssi_penalize_factor_5g; + uint8_t max_rssi_penalize_5g; +}; + /*------------------------------------------------------------------------- Function declarations and documentation ------------------------------------------------------------------------*/ @@ -4698,4 +4716,7 @@ tANI_BOOLEAN sme_create_sap_session_info( void sme_set_chan_info_callback(tHalHandle hal_handle, void (*callback)(struct scan_chan_info *chan_info)); +void sme_set_5g_band_pref(tHalHandle hal_handle, + struct sme_5g_band_pref_params *pref_params); + #endif //#if !defined( __SME_API_H ) diff --git a/CORE/SME/src/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c index 339c2f8f7cef..0380a64ab8a8 100644 --- a/CORE/SME/src/sme_common/sme_Api.c +++ b/CORE/SME/src/sme_common/sme_Api.c @@ -19836,3 +19836,45 @@ void sme_set_chan_info_callback(tHalHandle hal_handle, mac->chan_info_cb = callback; } + +/* + * sme_set_band_specific_pref(): If 5G preference is enabled,set boost/drop + * params from ini. + * @hal_handle: Handle returned by mac_open + * @5g_pref_params: pref params from ini. + */ +void sme_set_5g_band_pref(tHalHandle hal_handle, + struct sme_5g_band_pref_params *pref_params) { + + tpAniSirGlobal mac_ctx = PMAC_STRUCT(hal_handle); + struct roam_ext_params *roam_params; + eHalStatus status = eHAL_STATUS_SUCCESS; + + if (!pref_params) { + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, + "Invalid 5G pref params!"); + return; + } + status = sme_AcquireGlobalLock( &mac_ctx->sme ); + if (HAL_STATUS_SUCCESS(status)) { + roam_params = &mac_ctx->roam.configParam.roam_params; + roam_params->raise_rssi_thresh_5g = + pref_params->rssi_boost_threshold_5g; + roam_params->raise_factor_5g = + pref_params->rssi_boost_factor_5g; + roam_params->max_raise_rssi_5g = + pref_params->max_rssi_boost_5g; + roam_params->drop_rssi_thresh_5g = + pref_params->rssi_penalize_threshold_5g; + roam_params->drop_factor_5g = + pref_params->rssi_penalize_factor_5g; + roam_params->max_drop_rssi_5g = + pref_params->max_rssi_penalize_5g; + + sme_ReleaseGlobalLock(&mac_ctx->sme); + } + else + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, + "Unable to acquire global sme lock"); + +} |
