summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CORE/HDD/inc/wlan_hdd_cfg.h59
-rw-r--r--CORE/HDD/src/wlan_hdd_cfg.c48
-rw-r--r--CORE/HDD/src/wlan_hdd_main.c17
-rw-r--r--CORE/SME/inc/sme_Api.h21
-rw-r--r--CORE/SME/src/sme_common/sme_Api.c42
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");
+
+}