From 987f0bba097d75e6c74cc937eafbe2bfa07d4b98 Mon Sep 17 00:00:00 2001 From: Vignesh Viswanathan Date: Mon, 17 Sep 2018 17:00:29 +0530 Subject: [PATCH] qcacld-3.0: Use MLME CFG for BSS Scoring Items Implement the usage of MLME CFG infra for BSS Scoring related INI Items and remove the older INI definitions from HDD. Change-Id: I0db69138f0439131916a38176b5b21b706ff3671 CRs-Fixed: 2318320 --- components/mlme/core/src/wlan_mlme_main.c | 147 ++++ components/mlme/dispatcher/inc/cfg_mlme.h | 4 +- core/hdd/inc/wlan_hdd_cfg.h | 903 ---------------------- core/hdd/src/wlan_hdd_cfg.c | 352 --------- core/hdd/src/wlan_hdd_main.c | 127 +-- core/mac/inc/sir_api.h | 87 --- core/sme/inc/csr_api.h | 1 - core/sme/inc/csr_internal.h | 1 - core/sme/inc/sme_api.h | 9 + core/sme/src/common/sme_api.c | 78 ++ core/sme/src/csr/csr_api_roam.c | 35 +- 11 files changed, 260 insertions(+), 1484 deletions(-) diff --git a/components/mlme/core/src/wlan_mlme_main.c b/components/mlme/core/src/wlan_mlme_main.c index 8ebae5956d49..fab5ba4673f2 100644 --- a/components/mlme/core/src/wlan_mlme_main.c +++ b/components/mlme/core/src/wlan_mlme_main.c @@ -21,6 +21,7 @@ #include "wlan_mlme_main.h" #include "cfg_ucfg_api.h" +#include "wlan_scan_public_structs.h" struct wlan_mlme_psoc_obj *mlme_get_psoc_obj(struct wlan_objmgr_psoc *psoc) { @@ -375,6 +376,151 @@ static void wlan_mlme_init_lfr_cfg(struct wlan_objmgr_psoc *psoc, cfg_default(CFG_LFR_MAX_NUM_PRE_AUTH); } +static uint32_t +mlme_limit_max_per_index_score(uint32_t per_index_score) +{ + uint8_t i, score; + + for (i = 0; i < MAX_INDEX_PER_INI; i++) { + score = WLAN_GET_SCORE_PERCENTAGE(per_index_score, i); + if (score > MAX_INDEX_SCORE) + WLAN_SET_SCORE_PERCENTAGE(per_index_score, + MAX_INDEX_SCORE, i); + } + + return per_index_score; +} + +static void mlme_init_scoring_cfg(struct wlan_objmgr_psoc *psoc, + struct wlan_mlme_scoring_cfg *scoring_cfg) +{ + uint32_t total_weight; + + scoring_cfg->enable_scoring_for_roam = + cfg_get(psoc, CFG_ENABLE_SCORING_FOR_ROAM); + scoring_cfg->weight_cfg.rssi_weightage = + cfg_get(psoc, CFG_SCORING_RSSI_WEIGHTAGE); + scoring_cfg->weight_cfg.ht_caps_weightage = + cfg_get(psoc, CFG_SCORING_HT_CAPS_WEIGHTAGE); + scoring_cfg->weight_cfg.vht_caps_weightage = + cfg_get(psoc, CFG_SCORING_VHT_CAPS_WEIGHTAGE); + scoring_cfg->weight_cfg.he_caps_weightage = + cfg_get(psoc, CFG_SCORING_HE_CAPS_WEIGHTAGE); + scoring_cfg->weight_cfg.chan_width_weightage = + cfg_get(psoc, CFG_SCORING_CHAN_WIDTH_WEIGHTAGE); + scoring_cfg->weight_cfg.chan_band_weightage = + cfg_get(psoc, CFG_SCORING_CHAN_BAND_WEIGHTAGE); + scoring_cfg->weight_cfg.nss_weightage = + cfg_get(psoc, CFG_SCORING_NSS_WEIGHTAGE); + scoring_cfg->weight_cfg.beamforming_cap_weightage = + cfg_get(psoc, CFG_SCORING_BEAMFORM_CAP_WEIGHTAGE); + scoring_cfg->weight_cfg.pcl_weightage = + cfg_get(psoc, CFG_SCORING_PCL_WEIGHTAGE); + scoring_cfg->weight_cfg.channel_congestion_weightage = + cfg_get(psoc, CFG_SCORING_CHAN_CONGESTION_WEIGHTAGE); + scoring_cfg->weight_cfg.oce_wan_weightage = + cfg_get(psoc, CFG_SCORING_OCE_WAN_WEIGHTAGE); + + total_weight = scoring_cfg->enable_scoring_for_roam + + scoring_cfg->weight_cfg.rssi_weightage + + scoring_cfg->weight_cfg.ht_caps_weightage + + scoring_cfg->weight_cfg.vht_caps_weightage + + scoring_cfg->weight_cfg.he_caps_weightage + + scoring_cfg->weight_cfg.chan_width_weightage + + scoring_cfg->weight_cfg.chan_band_weightage + + scoring_cfg->weight_cfg.nss_weightage + + scoring_cfg->weight_cfg.beamforming_cap_weightage + + scoring_cfg->weight_cfg.pcl_weightage + + scoring_cfg->weight_cfg.channel_congestion_weightage + + scoring_cfg->weight_cfg.oce_wan_weightage; + + /* + * If configured weights are greater than max weight, + * fallback to default weights + */ + if (total_weight > BEST_CANDIDATE_MAX_WEIGHT) { + mlme_err("Total weight greater than %d, using default weights", + BEST_CANDIDATE_MAX_WEIGHT); + scoring_cfg->weight_cfg.rssi_weightage = RSSI_WEIGHTAGE; + scoring_cfg->weight_cfg.ht_caps_weightage = + HT_CAPABILITY_WEIGHTAGE; + scoring_cfg->weight_cfg.vht_caps_weightage = + VHT_CAP_WEIGHTAGE; + scoring_cfg->weight_cfg.he_caps_weightage = HE_CAP_WEIGHTAGE; + scoring_cfg->weight_cfg.chan_width_weightage = + CHAN_WIDTH_WEIGHTAGE; + scoring_cfg->weight_cfg.chan_band_weightage = + CHAN_BAND_WEIGHTAGE; + scoring_cfg->weight_cfg.nss_weightage = NSS_WEIGHTAGE; + scoring_cfg->weight_cfg.beamforming_cap_weightage = + BEAMFORMING_CAP_WEIGHTAGE; + scoring_cfg->weight_cfg.pcl_weightage = PCL_WEIGHT; + scoring_cfg->weight_cfg.channel_congestion_weightage = + CHANNEL_CONGESTION_WEIGHTAGE; + scoring_cfg->weight_cfg.oce_wan_weightage = OCE_WAN_WEIGHTAGE; + } + + scoring_cfg->rssi_score.best_rssi_threshold = + cfg_get(psoc, CFG_SCORING_BEST_RSSI_THRESHOLD); + scoring_cfg->rssi_score.good_rssi_threshold = + cfg_get(psoc, CFG_SCORING_GOOD_RSSI_THRESHOLD); + scoring_cfg->rssi_score.bad_rssi_threshold = + cfg_get(psoc, CFG_SCORING_BAD_RSSI_THRESHOLD); + + scoring_cfg->rssi_score.good_rssi_pcnt = + cfg_get(psoc, CFG_SCORING_GOOD_RSSI_PERCENT); + scoring_cfg->rssi_score.bad_rssi_pcnt = + cfg_get(psoc, CFG_SCORING_BAD_RSSI_PERCENT); + + scoring_cfg->rssi_score.good_rssi_bucket_size = + cfg_get(psoc, CFG_SCORING_GOOD_RSSI_BUCKET_SIZE); + scoring_cfg->rssi_score.bad_rssi_bucket_size = + cfg_get(psoc, CFG_SCORING_BAD_RSSI_BUCKET_SIZE); + + scoring_cfg->rssi_score.rssi_pref_5g_rssi_thresh = + cfg_get(psoc, CFG_SCORING_RSSI_PREF_5G_THRESHOLD); + + scoring_cfg->bandwidth_weight_per_index = + mlme_limit_max_per_index_score( + cfg_get(psoc, CFG_SCORING_BW_WEIGHT_PER_IDX)); + scoring_cfg->nss_weight_per_index = + mlme_limit_max_per_index_score( + cfg_get(psoc, CFG_SCORING_NSS_WEIGHT_PER_IDX)); + scoring_cfg->band_weight_per_index = + mlme_limit_max_per_index_score( + cfg_get(psoc, CFG_SCORING_BAND_WEIGHT_PER_IDX)); + + scoring_cfg->esp_qbss_scoring.num_slot = + cfg_get(psoc, CFG_SCORING_NUM_ESP_QBSS_SLOTS); + scoring_cfg->esp_qbss_scoring.score_pcnt3_to_0 = + mlme_limit_max_per_index_score( + cfg_get(psoc, CFG_SCORING_ESP_QBSS_SCORE_IDX_3_TO_0)); + scoring_cfg->esp_qbss_scoring.score_pcnt7_to_4 = + mlme_limit_max_per_index_score( + cfg_get(psoc, CFG_SCORING_ESP_QBSS_SCORE_IDX_7_TO_4)); + scoring_cfg->esp_qbss_scoring.score_pcnt11_to_8 = + mlme_limit_max_per_index_score( + cfg_get(psoc, CFG_SCORING_ESP_QBSS_SCORE_IDX_11_TO_8)); + scoring_cfg->esp_qbss_scoring.score_pcnt15_to_12 = + mlme_limit_max_per_index_score( + cfg_get(psoc, CFG_SCORING_ESP_QBSS_SCORE_IDX_15_TO_12)); + + scoring_cfg->oce_wan_scoring.num_slot = + cfg_get(psoc, CFG_SCORING_NUM_OCE_WAN_SLOTS); + scoring_cfg->oce_wan_scoring.score_pcnt3_to_0 = + mlme_limit_max_per_index_score( + cfg_get(psoc, CFG_SCORING_OCE_WAN_SCORE_IDX_3_TO_0)); + scoring_cfg->oce_wan_scoring.score_pcnt7_to_4 = + mlme_limit_max_per_index_score( + cfg_get(psoc, CFG_SCORING_OCE_WAN_SCORE_IDX_7_TO_4)); + scoring_cfg->oce_wan_scoring.score_pcnt11_to_8 = + mlme_limit_max_per_index_score( + cfg_get(psoc, CFG_SCORING_OCE_WAN_SCORE_IDX_11_TO_8)); + scoring_cfg->oce_wan_scoring.score_pcnt15_to_12 = + mlme_limit_max_per_index_score( + cfg_get(psoc, CFG_SCORING_OCE_WAN_SCORE_IDX_15_TO_12)); +} + QDF_STATUS mlme_cfg_on_psoc_enable(struct wlan_objmgr_psoc *psoc) { struct wlan_mlme_psoc_obj *mlme_obj; @@ -398,6 +544,7 @@ QDF_STATUS mlme_cfg_on_psoc_enable(struct wlan_objmgr_psoc *psoc) mlme_init_obss_ht40_cfg(psoc, &mlme_cfg->obss_ht40); mlme_init_sta_cfg(psoc, &mlme_cfg->sta); wlan_mlme_init_lfr_cfg(psoc, &mlme_cfg->lfr); + mlme_init_scoring_cfg(psoc, &mlme_cfg->scoring); return status; } diff --git a/components/mlme/dispatcher/inc/cfg_mlme.h b/components/mlme/dispatcher/inc/cfg_mlme.h index e034cee5a57c..f99f384e09cd 100644 --- a/components/mlme/dispatcher/inc/cfg_mlme.h +++ b/components/mlme/dispatcher/inc/cfg_mlme.h @@ -34,6 +34,7 @@ #include "cfg_mlme_sta.h" #include "cfg_sap_protection.h" #include "cfg_mlme_sap.h" +#include "cfg_mlme_scoring.h" #define CFG_MLME_ALL \ CFG_CHAINMASK_ALL \ @@ -46,6 +47,7 @@ CFG_RATES_ALL \ CFG_SAP_PROTECTION_ALL \ CFG_SAP_ALL \ - CFG_STA_ALL + CFG_STA_ALL \ + CFG_SCORING_ALL #endif /* __CFG_MLME_H */ diff --git a/core/hdd/inc/wlan_hdd_cfg.h b/core/hdd/inc/wlan_hdd_cfg.h index 9511358620f4..7a2e83f30cb4 100644 --- a/core/hdd/inc/wlan_hdd_cfg.h +++ b/core/hdd/inc/wlan_hdd_cfg.h @@ -10091,143 +10091,6 @@ enum hdd_external_acs_policy { #define CFG_IS_BSSID_HINT_PRIORITY_MAX (1) /* - * - * rssi_weightage - RSSI Weightage to calculate best candidate - * @Min: 0 - * @Max: 100 - * @Default: 20 - * - * This ini is used to increase/decrease RSSI weightage in best candidate - * selection. AP with better RSSI will get more weightage. - * - * Related: None - * - * Supported Feature: STA Candidate selection - * - * Usage: External - * - * - */ -#define CFG_RSSI_WEIGHTAGE_NAME "rssi_weightage" -#define CFG_RSSI_WEIGHTAGE_DEFAULT (20) -#define CFG_RSSI_WEIGHTAGE_MIN (0) -#define CFG_RSSI_WEIGHTAGE_MAX (100) - -/* - * - * ht_caps_weightage - HT caps weightage to calculate best candidate - * @Min: 0 - * @Max: 100 - * @Default: 2 - * - * This ini is used to increase/decrease HT caps weightage in best candidate - * selection. If AP supports HT caps, AP will get additional Weightage with - * this param. Weightage will be given only if dot11mode is HT capable. - * - * Related: None - * - * Supported Feature: STA Candidate selection - * - * Usage: External - * - * - */ -#define CFG_HT_CAPABILITY_WEIGHTAGE_NAME "ht_caps_weightage" -#define CFG_HT_CAPABILITY_WEIGHTAGE_DEFAULT (2) -#define CFG_HT_CAPABILITY_WEIGHTAGE_MIN (0) -#define CFG_HT_CAPABILITY_WEIGHTAGE_MAX (100) - -/* - * - * vht_caps_weightage - VHT caps Weightage to calculate best candidate - * @Min: 0 - * @Max: 100 - * @Default: 1 - * - * This ini is used to increase/decrease VHT caps weightage in best candidate - * selection. If AP supports VHT caps, AP will get additional weightage with - * this param. Weightage will be given only if dot11mode is VHT capable. - * - * Related: None - * - * Supported Feature: STA Candidate selection - * - * Usage: External - * - * - */ -#define CFG_VHT_CAPABILITY_WEIGHTAGE_NAME "vht_caps_weightage" -#define CFG_VHT_CAPABILITY_WEIGHTAGE_DEFAULT (1) -#define CFG_VHT_CAPABILITY_WEIGHTAGE_MIN (0) -#define CFG_VHT_CAPABILITY_WEIGHTAGE_MAX (100) - -/* - * - * he_caps_weightage - HE caps Weightage to calculate best candidate - * @Min: 0 - * @Max: 100 - * @Default: 1 - * - * This ini is used to increase/decrease HE caps weightage in best candidate - * selection. If AP supports HE caps, AP will get additional weightage with - * this param. Weightage will be given only if dot11mode is HE capable. - * - * Related: None - * - * Supported Feature: STA Candidate selection - * - * Usage: External - * - * - */ -#define CFG_HE_CAPABILITY_WEIGHTAGE_NAME "he_caps_weightage" -#define CFG_HE_CAPABILITY_WEIGHTAGE_DEFAULT (2) -#define CFG_HE_CAPABILITY_WEIGHTAGE_MIN (0) -#define CFG_HE_CAPABILITY_WEIGHTAGE_MAX (100) - -/* - * - * chan_width_weightage - Channel Width Weightage to calculate best candidate - * @Min: 0 - * @Max: 100 - * @Default: 17 - * - * This ini is used to increase/decrease Channel Width weightage in best - * candidate selection. AP with Higher channel width will get higher weightage - * - * Related: bandwidth_weight_per_index - * - * Supported Feature: STA Candidate selection - * - * Usage: External - * - * - */ -#define CFG_CHAN_WIDTH_WEIGHTAGE_NAME "chan_width_weightage" -#define CFG_CHAN_WIDTH_WEIGHTAGE_DEFAULT (17) -#define CFG_CHAN_WIDTH_WEIGHTAGE_MIN (0) -#define CFG_CHAN_WIDTH_WEIGHTAGE_MAX (100) - -/* - * - * chan_band_weightage - Channel Band perferance to 5GHZ to - * calculate best candidate - * @Min: 0 - * @Max: 100 - * @Default: 2 - * - * This ini is used to increase/decrease Channel Band Preference weightage - * in best candidate selection. 5GHZ AP get this additional boost compare to - * 2GHZ AP before rssi_pref_5g_rssi_thresh and 2.4Ghz get weightage after - * rssi_pref_5g_rssi_thresh. - * - * Related: rssi_pref_5g_rssi_thresh, band_weight_per_index - * - * Supported Feature: STA Candidate selection - * - * Usage: External - * - * * gEnableFastPwrTransition - Configuration for fast power transition * @Min: 0 * @Max: 2 @@ -10270,739 +10133,6 @@ enum hdd_external_acs_policy { #define CFG_IS_SAE_ENABLED_MIN (0) #define CFG_IS_SAE_ENABLED_MAX (1) -/* - * Type declarations - */ -#define CFG_CHAN_BAND_WEIGHTAGE_NAME "chan_band_weightage" -#define CFG_CHAN_BAND_WEIGHTAGE_DEFAULT (2) -#define CFG_CHAN_BAND_WEIGHTAGE_MIN (0) -#define CFG_CHAN_BAND_WEIGHTAGE_MAX (100) - -/* - * - * nss_weightage - NSS Weightage to calculate best candidate - * @Min: 0 - * @Max: 100 - * @Default: 16 - * - * This ini is used to increase/decrease NSS weightage in best candidate - * selection. If there are two AP, one AP supports 2x2 and another one supports - * 1x1 and station supports 2X2, first A will get this additional weightage - * depending on self-capability. - * - * Related: nss_weight_per_index - * - * Supported Feature: STA Candidate selection - * - * Usage: External - * - * - */ -#define CFG_NSS_WEIGHTAGE_NAME "nss_weightage" -#define CFG_NSS_WEIGHTAGE_DEFAULT (16) -#define CFG_NSS_WEIGHTAGE_MIN (0) -#define CFG_NSS_WEIGHTAGE_MAX (100) - -/* - * - * beamforming_cap_weightage - Beam Forming Weightage to - * calculate best candidate - * @Min: 0 - * @Max: 100 - * @Default: 2 - * - * This ini is used to increase/decrease Beam forming Weightage if some AP - * support Beam forming or not. If AP supports Beam forming, that AP will get - * additional boost of this weightage. - * - * Related: None - * - * Supported Feature: STA Candidate selection - * - * Usage: External - * - * - */ -#define CFG_BEAMFORMING_CAP_WEIGHTAGE_NAME "beamforming_cap_weightage" -#define CFG_BEAMFORMING_CAP_WEIGHTAGE_DEFAULT (2) -#define CFG_BEAMFORMING_CAP_WEIGHTAGE_MIN (0) -#define CFG_BEAMFORMING_CAP_WEIGHTAGE_MAX (100) - -/* - * - * pcl_weightage - PCL Weightage to calculate best candidate - * @Min: 0 - * @Max: 100 - * @Default: 10 - * - * This ini is used to increase/decrease PCL weightage in best candidate - * selection. If some APs are in PCL list, those AP will get addition - * weightage. - * - * Related: None - * - * Supported Feature: STA Candidate selection - * - * Usage: External - * - * - */ -#define CFG_PCL_WEIGHT_WEIGHTAGE_NAME "pcl_weightage" -#define CFG_PCL_WEIGHT_DEFAULT (10) -#define CFG_PCL_WEIGHT_MIN (0) -#define CFG_PCL_WEIGHT_MAX (100) - -/* - * - * channel_congestion_weightage - channel Congestion Weightage to - * calculate best candidate - * @Min: 0 - * @Max: 100 - * @Default: 5 - * - * This ini is used to increase/decrease channel congestion weightage in - * candidate selection. Congestion is measured with the help of ESP/QBSS load. - * - * Related: num_esp_qbss_slots - * - * Supported Feature: STA Candidate selection - * - * Usage: External - * - * - */ -#define CFG_CHANNEL_CONGESTION_WEIGHTAGE_NAME "channel_congestion_weightage" -#define CFG_CHANNEL_CONGESTION_WEIGHTAGE_DEFAULT (5) -#define CFG_CHANNEL_CONGESTION_WEIGHTAGE_MIN (0) -#define CFG_CHANNEL_CONGESTION_WEIGHTAGE_MAX (100) - -/* - * - * oce_wan_weightage - OCE WAN DL capacity Weightage to calculate best candidate - * @Min: 0 - * @Max: 100 - * @Default: 2 - * - * This ini is used to increase/decrease OCE WAN caps weightage in best - * candidate selection. If AP have OCE WAN information, give weightage depending - * on the downaload available capacity. - * - * Related: num_oce_wan_slots - * - * Supported Feature: STA Candidate selection - * - * Usage: External - * - * - */ -#define CFG_OCE_WAN_WEIGHTAGE_NAME "oce_wan_weightage" -#define CFG_OCE_WAN_WEIGHTAGE_DEFAULT (2) -#define CFG_OCE_WAN_WEIGHTAGE_MIN (0) -#define CFG_OCE_WAN_WEIGHTAGE_MAX (100) - -/* - * - * best_rssi_threshold - Best Rssi for score calculation - * @Min: 0 - * @Max: 96 - * @Default: 55 - * - * This ini tells limit for best RSSI. RSSI better than this limit are - * considered as best RSSI. The best RSSI is given full rssi_weightage. - * - * Related: rssi_weightage - * - * Supported Feature: STA Candidate selection - * - * Usage: External - * - * - */ -#define CFG_BEST_RSSI_THRESHOLD_NAME "best_rssi_threshold" -#define CFG_BEST_RSSI_THRESHOLD_DEFAULT (55) -#define CFG_BEST_RSSI_THRESHOLD_MIN (0) -#define CFG_BEST_RSSI_THRESHOLD_MAX (96) - -/* - * - * good_rssi_threshold - Good Rssi for score calculation - * @Min: 0 - * @Max: 96 - * @Default: 70 - * - * This ini tells limit for good RSSI. RSSI better than this limit and less - * than best_rssi_threshold is considered as good RSSI. - * - * Related: rssi_weightage, best_rssi_threshold - * - * Supported Feature: STA Candidate selection - * - * Usage: External - * - * - */ -#define CFG_GOOD_RSSI_THRESHOLD_NAME "good_rssi_threshold" -#define CFG_GOOD_RSSI_THRESHOLD_DEFAULT (70) -#define CFG_GOOD_RSSI_THRESHOLD_MIN (0) -#define CFG_GOOD_RSSI_THRESHOLD_MAX (96) - -/* - * - * bad_rssi_threshold - Bad Rssi for score calculation - * @Min: 0 - * @Max: 96 - * @Default: 80 - * - * This ini tells limit for Bad RSSI. RSSI greater then bad_rssi_threshold - * is considered as bad RSSI. - * - * Related: rssi_weightage, good_rssi_threshold - * - * Supported Feature: STA Candidate selection - * - * Usage: External - * - * - */ -#define CFG_BAD_RSSI_THRESHOLD_NAME "bad_rssi_threshold" -#define CFG_BAD_RSSI_THRESHOLD_DEFAULT (80) -#define CFG_BAD_RSSI_THRESHOLD_MIN (0) -#define CFG_BAD_RSSI_THRESHOLD_MAX (96) - -/* - * - * good_rssi_pcnt - Percent Score to Good RSSI out of total RSSI score. - * @Min: 0 - * @Max: 100 - * @Default: 80 - * - * This ini tells about how much percent should be given to good RSSI(RSSI - * between best_rssi_threshold and good_rssi_threshold) out of RSSI weightage. - * - * Related: rssi_weightage, best_rssi_threshold, good_rssi_threshold - * - * Supported Feature: STA Candidate selection - * - * Usage: External - * - * - */ -#define CFG_GOOD_RSSI_PCNT_NAME "good_rssi_pcnt" -#define CFG_GOOD_RSSI_PCNT_DEFAULT (80) -#define CFG_GOOD_RSSI_PCNT_MIN (0) -#define CFG_GOOD_RSSI_PCNT_MAX (100) - -/* - * - * bad_rssi_pcnt - Percent Score to BAD RSSI out of total RSSI score. - * @Min: 0 - * @Max: 100 - * @Default: 25 - * - * This ini tells about how much percent should be given to bad RSSI (RSSI - * between good_rssi_threshold and bad_rssi_threshold) out of RSSI weightage. - * - * Related: rssi_weightage, good_rssi_threshold, bad_rssi_threshold - * - * Supported Feature: STA Candidate selection - * - * Usage: External - * - * - */ -#define CFG_BAD_RSSI_PCNT_NAME "bad_rssi_pcnt" -#define CFG_BAD_RSSI_PCNT_DEFAULT (25) -#define CFG_BAD_RSSI_PCNT_MIN (0) -#define CFG_BAD_RSSI_PCNT_MAX (100) - -/* - * - * good_rssi_bucket_size - Bucket size between best and good RSSI to score. - * @Min: 1 - * @Max: 10 - * @Default: 5 - * - * This ini tells about bucket size for scoring between best and good RSSI. - * Below Best RSSI, 100% score will be given. Between best and good RSSI, RSSI - * is divided in buckets and score will be assigned bucket wise starting from - * good_rssi_pcnt. - * - * Related: rssi_weightage, good_rssi_pcnt - * - * Supported Feature: STA Candidate selection - * - * Usage: External - * - * - */ -#define CFG_GOOD_RSSI_BUCKET_SIZE_NAME "good_rssi_bucket_size" -#define CFG_GOOD_RSSI_BUCKET_SIZE_DEFAULT (5) -#define CFG_GOOD_RSSI_BUCKET_SIZE_MIN (1) -#define CFG_GOOD_RSSI_BUCKET_SIZE_MAX (10) - -/* - * - * bad_rssi_bucket_size - Bucket size between good and bad RSSI to score. - * @Min: 1 - * @Max: 10 - * @Default: 5 - * - * This ini tells about bucket size for scoring between good and bad RSSI. - * Between good and bad RSSI, RSSI is divided in buckets and score will be - * assigned bucket wise starting from bad_rssi_pcnt. - * - * Related: rssi_weightage, bad_rssi_pcnt - * - * Supported Feature: STA Candidate selection - * - * Usage: External - * - * - */ -#define CFG_BAD_RSSI_BUCKET_SIZE_NAME "bad_rssi_bucket_size" -#define CFG_BAD_RSSI_BUCKET_SIZE_DEFAULT (5) -#define CFG_BAD_RSSI_BUCKET_SIZE_MIN (1) -#define CFG_BAD_RSSI_BUCKET_SIZE_MAX (10) - -/* - * - * rssi_pref_5g_rssi_thresh - A RSSI threshold above which 5 GHz is not favored - * @Min: 0 - * @Max: 96 - * @Default: 76 - * - * 5G AP are given chan_band_weightage. This ini tells about RSSI threshold - * above which 5GHZ is not favored. - * - * Related: chan_band_weightage - * - * Supported Feature: STA Candidate selection - * - * Usage: External - * - * - */ -#define CFG_RSSI_PERF_5G_THRESHOLD_NAME "rssi_pref_5g_rssi_thresh" -#define CFG_RSSI_PERF_5G_THRESHOLD_DEFAULT (76) -#define CFG_RSSI_PERF_5G_THRESHOLD_MIN (0) -#define CFG_RSSI_PERF_5G_THRESHOLD_MAX (96) - -/* - * - * bandwidth_weight_per_index - percentage as per bandwidth - * @Min: 0x00000000 - * @Max: 0x64646464 - * @Default: 0x6432190C - * - * This INI give percentage value of chan_width_weightage to be used as per - * peer bandwidth. Self BW is also considered while calculating score. Eg if - * self BW is 20 MHZ 10% will be given for all AP irrespective of the AP - * capability. - * - * Indexes are defined in this way. - * 0 Index (BITS 0-7): 20 MHz - Def 12% - * 1 Index (BITS 8-15): 40 MHz - Def 25% - * 2 Index (BITS 16-23): 80 MHz - Def 50% - * 3 Index (BITS 24-31): 160 MHz - Def 100% - * These percentage values are stored in HEX. For any index max value, can be 64 - * - * Related: chan_width_weightage - * - * Supported Feature: STA Candidate selection - * - * Usage: External - * - * - */ -#define CFG_BAND_WIDTH_WEIGHT_PER_INDEX_NAME "bandwidth_weight_per_index" -#define CFG_BAND_WIDTH_WEIGHT_PER_INDEX_DEFAULT (0x6432190C) -#define CFG_BAND_WIDTH_WEIGHT_PER_INDEX_MIN (0x00000000) -#define CFG_BAND_WIDTH_WEIGHT_PER_INDEX_MAX (0x64646464) - -/* - * - * nss_weight_per_index - percentage as per NSS - * @Min: 0x00000000 - * @Max: 0x64646464 - * @Default: 0x6432190C - * - * This INI give percentage value of nss_weightage to be used as per peer NSS. - * Self NSS capability is also considered. Eg if self NSS is 1x1 10% will be - * given for all AP irrespective of the AP capability. - * - * Indexes are defined in this way. - * 0 Index (BITS 0-7): 1X1- Def 12% - * 1 Index (BITS 8-15): 2X2- Def 25% - * 2 Index (BITS 16-23): 3X3- Def 50% - * 3 Index (BITS 24-31): 4X4- Def 100% - * These percentage values are stored in HEX. For any index max value, can be 64 - * - * Related: nss_weightage - * - * Supported Feature: STA Candidate selection - * - * Usage: External - * - * - */ -#define CFG_NSS_WEIGHT_PER_INDEX_NAME "nss_weight_per_index" -#define CFG_NSS_WEIGHT_PER_INDEX_DEFAULT (0x6432190C) -#define CFG_NSS_WEIGHT_PER_INDEX_MIN (0x00000000) -#define CFG_NSS_WEIGHT_PER_INDEX_MAX (0x64646464) - -/* - * - * band_weight_per_index - percentage as per band - * @Min: 0x00000000 - * @Max: 0x64646464 - * @Default: 0x0000644B - * - * This INI give percentage value of chan_band_weightage to be used as per band. - * If RSSI is greater than rssi_pref_5g_rssi_thresh preference is given for 5Ghz - * else, it's given for 2.4Ghz. - * - * Indexes are defined in this way. - * 0 Index (BITS 0-7): 2.4GHz - Def 10% - * 1 Index (BITS 8-15): 5GHz - Def 20% - * 2 Index (BITS 16-23): Reserved - * 3 Index (BITS 24-31): Reserved - * These percentage values are stored in HEX. For any index max value, can be 64 - * - * Related: chan_band_weightage, rssi_pref_5g_rssi_thresh - * - * Supported Feature: STA Candidate selection - * - * Usage: External - * - * - */ -#define CFG_BAND_WEIGHT_PER_INDEX_NAME "band_weight_per_index" -#define CFG_BAND_WEIGHT_PER_INDEX_DEFAULT (0x0000644B) -#define CFG_BAND_WEIGHT_PER_INDEX_MIN (0x00000000) -#define CFG_BAND_WEIGHT_PER_INDEX_MAX (0x64646464) - -/* - * - * num_esp_qbss_slots - number of slots in which the esp/qbss load will - * be divided - * - * @Min: 1 - * @Max: 15 - * @Default: 4 - * - * Number of slots in which the esp/qbss load will be divided. Max 15. index 0 - * is used for 'not_present. Num_slot will equally divide 100. e.g, if - * num_slot = 4 slot 1 = 0-25% load, slot 2 = 26-50% load, slot 3 = 51-75% load, - * slot 4 = 76-100% load. Remaining unused index can be 0. - * - * Usage: External - * - * - */ -#define CFG_ESP_QBSS_SLOTS_NAME "num_esp_qbss_slots" -#define CFG_ESP_QBSS_SLOTS_DEFAULT (4) -#define CFG_ESP_QBSS_SLOTS_MIN (1) -#define CFG_ESP_QBSS_SLOTS_MAX (15) - -/* - * - * esp_qbss_score_idx3_to_0 - percentage for esp/qbss load for slots 0-3 - * @Min: 0x00000000 - * @Max: 0x64646464 - * @Default: 0x19326432 - * - * This INI give percentage value of channel_congestion_weightage to be used as - * index in which the load value falls. Index 0 is for percentage when ESP/QBSS - * is not present. - * - * Indexes are defined in this way. - * 0 Index (BITS 0-7): when ESP/QBSS is not present - * 1 Index (BITS 8-15): SLOT_1 - * 2 Index (BITS 16-23): SLOT_2 - * 3 Index (BITS 24-31): SLOT_3 - * These percentage values are stored in HEX. For any index max value, can be 64 - * - * Related: channel_congestion_weightage, num_esp_qbss_slots - * - * Supported Feature: STA Candidate selection - * - * Usage: External - * - * - */ -#define CFG_ESP_QBSS_SCORE_IDX3_TO_0_NAME "esp_qbss_score_idx3_to_0" -#define CFG_ESP_QBSS_SCORE_IDX3_TO_0_DEFAULT (0x19326432) -#define CFG_ESP_QBSS_SCORE_IDX3_TO_0_MIN (0x00000000) -#define CFG_ESP_QBSS_SCORE_IDX3_TO_0_MAX (0x64646464) - -/* - * - * esp_qbss_score_idx7_to_4 - percentage for esp/qbss load for slots 4-7 - * @Min: 0x00000000 - * @Max: 0x64646464 - * @Default: 0x0000000A - * - * This INI give percentage value of channel_congestion_weightage to be used as - * index in which the load value falls. Used only if num_esp_qbss_slots is - * greater than 3. - * - * Indexes are defined in this way. - * 0 Index (BITS 0-7): SLOT_4 - * 1 Index (BITS 8-15): SLOT_5 - * 2 Index (BITS 16-23): SLOT_6 - * 3 Index (BITS 24-31): SLOT_7 - * These percentage values are stored in HEX. For any index max value, can be 64 - * - * Related: channel_congestion_weightage, num_esp_qbss_slots - * - * Supported Feature: STA Candidate selection - * - * Usage: External - * - * - */ -#define CFG_ESP_QBSS_SCORE_IDX7_TO_4_NAME "esp_qbss_score_idx7_to_4" -#define CFG_ESP_QBSS_SCORE_IDX7_TO_4_DEFAULT (0x0000000A) -#define CFG_ESP_QBSS_SCORE_IDX7_TO_4_MIN (0x00000000) -#define CFG_ESP_QBSS_SCORE_IDX7_TO_4_MAX (0x64646464) - - -/* - * - * esp_qbss_score_idx11_to_8 - percentage for esp/qbss load for slots 8-11 - * @Min: 0x00000000 - * @Max: 0x64646464 - * @Default: 0x00000000 - * - * This INI give percentage value of channel_congestion_weightage to be used as - * index in which the load value falls. Used only if num_esp_qbss_slots is - * greater than 7. - * - * Indexes are defined in this way. - * 0 Index (BITS 0-7): SLOT_8 - * 1 Index (BITS 8-15): SLOT_9 - * 2 Index (BITS 16-23): SLOT_10 - * 3 Index (BITS 24-31): SLOT_11 - * These percentage values are stored in HEX. For any index max value, can be 64 - * - * Related: channel_congestion_weightage, num_esp_qbss_slots - * - * Supported Feature: STA Candidate selection - * - * Usage: External - * - * - */ -#define CFG_ESP_QBSS_SCORE_IDX11_TO_8_NAME "esp_qbss_score_idx11_to_8" -#define CFG_ESP_QBSS_SCORE_IDX11_TO_8_DEFAULT (0x00000000) -#define CFG_ESP_QBSS_SCORE_IDX11_TO_8_MIN (0x00000000) -#define CFG_ESP_QBSS_SCORE_IDX11_TO_8_MAX (0x64646464) - - -/* - * - * esp_qbss_score_idx15_to_12 - percentage for esp/qbss load for slots 12-15 - * @Min: 0x00000000 - * @Max: 0x64646464 - * @Default: 0x00000000 - * - * This INI give percentage value of channel_congestion_weightage to be used as - * index in which the load value falls. Used only if num_esp_qbss_slots is - * greater than 11. - * - * Indexes are defined in this way. - * 0 Index (BITS 0-7): SLOT_12 - * 1 Index (BITS 8-15): SLOT_13 - * 2 Index (BITS 16-23): SLOT_14 - * 3 Index (BITS 24-31): SLOT_15 - * These percentage values are stored in HEX. For any index max value, can be 64 - * - * Related: channel_congestion_weightage, num_esp_qbss_slots - * - * Supported Feature: STA Candidate selection - * - * Usage: External - * - * - */ -#define CFG_ESP_QBSS_SCORE_IDX15_TO_12_NAME "esp_qbss_score_idx15_to_12" -#define CFG_ESP_QBSS_SCORE_IDX15_TO_12_DEFAULT (0x00000000) -#define CFG_ESP_QBSS_SCORE_IDX15_TO_12_MIN (0x00000000) -#define CFG_ESP_QBSS_SCORE_IDX15_TO_12_MAX (0x64646464) - -/* - * - * num_oce_wan_slots - number of slots in which the oce wan metrics will - * be divided - * - * @Min: 1 - * @Max: 15 - * @Default: 8 - * - * Number of slots in which the oce wan metrics will be divided. Max 15. index 0 - * is used for not_present. Num_slot will equally divide 100. e.g, if - * num_slot = 4 slot 1 = 0-3 DL CAP, slot 2 = 4-7 DL CAP, slot 3 = 8-11 DL CAP, - * slot 4 = 12-15 DL CAP. Remaining unused index can be 0. - * - * Related: oce_wan_weightage - * - * Usage: External - * - * - */ -#define CFG_OCE_WAN_SLOTS_NAME "num_oce_wan_slots" -#define CFG_OCE_WAN_SLOTS_DEFAULT (15) -#define CFG_OCE_WAN_SLOTS_MIN (1) -#define CFG_OCE_WAN_SLOTS_MAX (15) - -/* - * - * oce_wan_score_idx3_to_0 - percentage for OCE WAN metrics score for slots 0-3 - * @Min: 0x00000000 - * @Max: 0x64646464 - * @Default: 0x00000032 - * - * This INI give percentage value of OCE WAN metrics DL CAP, to be used as - * index in which the DL CAP value falls. Index 0 is for percentage when - * OCE WAN metrics DL CAP is not present. - * - * Indexes are defined in this way. - * 0 Index (BITS 0-7): when OCE WAN metrics DL CAP is not present - * 1 Index (BITS 8-15): SLOT_1 - * 2 Index (BITS 16-23): SLOT_2 - * 3 Index (BITS 24-31): SLOT_3 - * These percentage values are stored in HEX. For any index max value, can be 64 - * - * Related: num_oce_wan_slots, oce_wan_weightage - * - * Supported Feature: STA Candidate selection - * - * Usage: External - * - * - */ -#define CFG_OCE_WAN_SCORE_IDX3_TO_0_NAME "oce_wan_score_idx3_to_0" -#define CFG_OCE_WAN_SCORE_IDX3_TO_0_DEFAULT (0x00000032) -#define CFG_OCE_WAN_SCORE_IDX3_TO_0_MIN (0x00000000) -#define CFG_OCE_WAN_SCORE_IDX3_TO_0_MAX (0x64646464) - -/* - * - * oce_wan_score_idx7_to_4 - percentage for OCE WAN metrics score for slots 4-7 - * @Min: 0x00000000 - * @Max: 0x64646464 - * @Default: 0x00000000 - * - * This INI give percentage value of OCE WAN metrics DL CAP, to be used as - * index in which the DL CAP value falls. Used only if num_oce_wan_slots is - * greater than 3. - * - * Indexes are defined in this way. - * 0 Index (BITS 0-7): SLOT_4 - * 1 Index (BITS 8-15): SLOT_5 - * 2 Index (BITS 16-23): SLOT_6 - * 3 Index (BITS 24-31): SLOT_7 - * These percentage values are stored in HEX. For any index max value, can be 64 - * - * Related: num_oce_wan_slots, oce_wan_weightage - * - * Supported Feature: STA Candidate selection - * - * Usage: External - * - * - */ -#define CFG_OCE_WAN_SCORE_IDX7_TO_4_NAME "oce_wan_score_idx7_to_4" -#define CFG_OCE_WAN_SCORE_IDX7_TO_4_DEFAULT (0x00000000) -#define CFG_OCE_WAN_SCORE_IDX7_TO_4_MIN (0x00000000) -#define CFG_OCE_WAN_SCORE_IDX7_TO_4_MAX (0x64646464) - -/* - * - * oce_wan_score_idx11_to_8 - percentage for OCE WAN metrics score for slot 8-11 - * @Min: 0x00000000 - * @Max: 0x64646464 - * @Default: 0x06030000 - * - * This INI give percentage value of OCE WAN metrics DL CAP, to be used as - * index in which the DL CAP value falls. Used only if num_oce_wan_slots is - * greater than 7. - * - * Indexes are defined in this way. - * 0 Index (BITS 0-7): SLOT_8 - * 1 Index (BITS 8-15): SLOT_9 - * 2 Index (BITS 16-23): SLOT_10 - * 3 Index (BITS 24-31): SLOT_11 - * These percentage values are stored in HEX. For any index max value, can be 64 - * - * Related: num_oce_wan_slots, oce_wan_weightage - * - * Supported Feature: STA Candidate selection - * - * Usage: External - * - * - */ -#define CFG_OCE_WAN_SCORE_IDX11_TO_8_NAME "oce_wan_score_idx11_to_8" -#define CFG_OCE_WAN_SCORE_IDX11_TO_8_DEFAULT (0x06030000) -#define CFG_OCE_WAN_SCORE_IDX11_TO_8_MIN (0x00000000) -#define CFG_OCE_WAN_SCORE_IDX11_TO_8_MAX (0x64646464) - -/* - * - * oce_wan_score_idx15_to_12 - % for OCE WAN metrics score for slot 12-15 - * @Min: 0x00000000 - * @Max: 0x64646464 - * @Default: 0x6432190C - * - * This INI give percentage value of OCE WAN metrics DL CAP, to be used as - * index in which the DL CAP value falls. Used only if num_oce_wan_slots is - * greater than 11. - * - * Indexes are defined in this way. - * 0 Index (BITS 0-7): SLOT_12 - * 1 Index (BITS 8-15): SLOT_13 - * 2 Index (BITS 16-23): SLOT_14 - * 3 Index (BITS 24-31): SLOT_15 - * These percentage values are stored in HEX. For any index max value, can be 64 - * - * Related: num_oce_wan_slots, oce_wan_weightage - * - * Supported Feature: STA Candidate selection - * - * Usage: External - * - * - */ -#define CFG_OCE_WAN_SCORE_IDX15_TO_12_NAME "oce_wan_score_idx15_to_12" -#define CFG_OCE_WAN_SCORE_IDX15_TO_12_DEFAULT (0x6432190C) -#define CFG_OCE_WAN_SCORE_IDX15_TO_12_MIN (0x00000000) -#define CFG_OCE_WAN_SCORE_IDX15_TO_12_MAX (0x64646464) - -/* - * - * enable_scoring_for_roam - enable/disable scoring logic in FW for candidate - * selection during roaming - * - * @Min: 0 - * @Max: 1 - * @Default: 1 - * - * This ini is used to enable/disable scoring logic in FW for candidate - * selection during roaming. - * - * Supported Feature: STA Candidate selection by FW during roaming based on - * scoring logic. - * - * Usage: External - * - * - */ -#define CFG_ENABLE_SCORING_FOR_ROAM_NAME "enable_scoring_for_roam" -#define CFG_ENABLE_SCORING_FOR_ROAM_DEFAULT (1) -#define CFG_ENABLE_SCORING_FOR_ROAM_MIN (0) -#define CFG_ENABLE_SCORING_FOR_ROAM_MAX (1) - /* * * gChanSwitchHostapdRateEnabled - Enable/disable hostapd rate when doing SAP @@ -12848,39 +11978,6 @@ struct hdd_config { uint32_t scan_11d_interval; bool chan_switch_hostapd_rate_enabled; bool is_bssid_hint_priority; - uint8_t rssi_weightage; - uint8_t ht_caps_weightage; - uint8_t vht_caps_weightage; - uint8_t he_caps_weightage; - uint8_t chan_width_weightage; - uint8_t chan_band_weightage; - uint8_t nss_weightage; - uint8_t beamforming_cap_weightage; - uint8_t pcl_weightage; - uint8_t channel_congestion_weightage; - uint8_t oce_wan_weightage; - uint32_t bandwidth_weight_per_index; - uint32_t nss_weight_per_index; - uint32_t band_weight_per_index; - uint32_t best_rssi_threshold; - uint32_t good_rssi_threshold; - uint32_t bad_rssi_threshold; - uint32_t good_rssi_pcnt; - uint32_t bad_rssi_pcnt; - uint32_t good_rssi_bucket_size; - uint32_t bad_rssi_bucket_size; - uint32_t rssi_pref_5g_rssi_thresh; - uint8_t num_esp_qbss_slots; - uint32_t esp_qbss_score_slots3_to_0; - uint32_t esp_qbss_score_slots7_to_4; - uint32_t esp_qbss_score_slots11_to_8; - uint32_t esp_qbss_score_slots15_to_12; - uint8_t num_oce_wan_slots; - uint32_t oce_wan_score_slots3_to_0; - uint32_t oce_wan_score_slots7_to_4; - uint32_t oce_wan_score_slots11_to_8; - uint32_t oce_wan_score_slots15_to_12; - bool enable_scoring_for_roam; bool is_fils_enabled; uint16_t wlm_latency_enable; uint16_t wlm_latency_level; diff --git a/core/hdd/src/wlan_hdd_cfg.c b/core/hdd/src/wlan_hdd_cfg.c index 3e733313fcb3..f007d77c1e4a 100644 --- a/core/hdd/src/wlan_hdd_cfg.c +++ b/core/hdd/src/wlan_hdd_cfg.c @@ -4141,237 +4141,6 @@ struct reg_table_entry g_registry_table[] = { CFG_LATENCY_FLAGS_ULTRALOW_MIN, CFG_LATENCY_FLAGS_ULTRALOW_MAX), - REG_VARIABLE(CFG_RSSI_WEIGHTAGE_NAME, WLAN_PARAM_Integer, - struct hdd_config, rssi_weightage, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_RSSI_WEIGHTAGE_DEFAULT, - CFG_RSSI_WEIGHTAGE_MIN, - CFG_RSSI_WEIGHTAGE_MAX), - - REG_VARIABLE(CFG_HT_CAPABILITY_WEIGHTAGE_NAME, WLAN_PARAM_Integer, - struct hdd_config, ht_caps_weightage, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_HT_CAPABILITY_WEIGHTAGE_DEFAULT, - CFG_HT_CAPABILITY_WEIGHTAGE_MIN, - CFG_HT_CAPABILITY_WEIGHTAGE_MAX), - - REG_VARIABLE(CFG_VHT_CAPABILITY_WEIGHTAGE_NAME, WLAN_PARAM_Integer, - struct hdd_config, vht_caps_weightage, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_VHT_CAPABILITY_WEIGHTAGE_DEFAULT, - CFG_VHT_CAPABILITY_WEIGHTAGE_MIN, - CFG_VHT_CAPABILITY_WEIGHTAGE_MAX), - - REG_VARIABLE(CFG_HE_CAPABILITY_WEIGHTAGE_NAME, WLAN_PARAM_Integer, - struct hdd_config, he_caps_weightage, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_HE_CAPABILITY_WEIGHTAGE_DEFAULT, - CFG_HE_CAPABILITY_WEIGHTAGE_MIN, - CFG_HE_CAPABILITY_WEIGHTAGE_MAX), - - REG_VARIABLE(CFG_CHAN_WIDTH_WEIGHTAGE_NAME, WLAN_PARAM_Integer, - struct hdd_config, chan_width_weightage, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_CHAN_WIDTH_WEIGHTAGE_DEFAULT, - CFG_CHAN_WIDTH_WEIGHTAGE_MIN, - CFG_CHAN_WIDTH_WEIGHTAGE_MAX), - - REG_VARIABLE(CFG_CHAN_BAND_WEIGHTAGE_NAME, WLAN_PARAM_Integer, - struct hdd_config, chan_band_weightage, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_CHAN_BAND_WEIGHTAGE_DEFAULT, - CFG_CHAN_BAND_WEIGHTAGE_MIN, - CFG_CHAN_BAND_WEIGHTAGE_MAX), - - REG_VARIABLE(CFG_NSS_WEIGHTAGE_NAME, WLAN_PARAM_Integer, - struct hdd_config, nss_weightage, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_NSS_WEIGHTAGE_DEFAULT, - CFG_NSS_WEIGHTAGE_MIN, - CFG_NSS_WEIGHTAGE_MAX), - - REG_VARIABLE(CFG_BEAMFORMING_CAP_WEIGHTAGE_NAME, WLAN_PARAM_Integer, - struct hdd_config, beamforming_cap_weightage, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_BEAMFORMING_CAP_WEIGHTAGE_DEFAULT, - CFG_BEAMFORMING_CAP_WEIGHTAGE_MIN, - CFG_BEAMFORMING_CAP_WEIGHTAGE_MAX), - - REG_VARIABLE(CFG_PCL_WEIGHT_WEIGHTAGE_NAME, WLAN_PARAM_Integer, - struct hdd_config, pcl_weightage, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_PCL_WEIGHT_DEFAULT, - CFG_PCL_WEIGHT_MIN, - CFG_PCL_WEIGHT_MAX), - - REG_VARIABLE(CFG_CHANNEL_CONGESTION_WEIGHTAGE_NAME, WLAN_PARAM_Integer, - struct hdd_config, channel_congestion_weightage, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_CHANNEL_CONGESTION_WEIGHTAGE_DEFAULT, - CFG_CHANNEL_CONGESTION_WEIGHTAGE_MIN, - CFG_CHANNEL_CONGESTION_WEIGHTAGE_MAX), - - REG_VARIABLE(CFG_OCE_WAN_WEIGHTAGE_NAME, WLAN_PARAM_Integer, - struct hdd_config, oce_wan_weightage, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_OCE_WAN_WEIGHTAGE_DEFAULT, - CFG_OCE_WAN_WEIGHTAGE_MIN, - CFG_OCE_WAN_WEIGHTAGE_MAX), - - REG_VARIABLE(CFG_BEST_RSSI_THRESHOLD_NAME, WLAN_PARAM_Integer, - struct hdd_config, best_rssi_threshold, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_BEST_RSSI_THRESHOLD_DEFAULT, - CFG_BEST_RSSI_THRESHOLD_MIN, - CFG_BEST_RSSI_THRESHOLD_MAX), - - REG_VARIABLE(CFG_GOOD_RSSI_THRESHOLD_NAME, WLAN_PARAM_Integer, - struct hdd_config, good_rssi_threshold, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_GOOD_RSSI_THRESHOLD_DEFAULT, - CFG_GOOD_RSSI_THRESHOLD_MIN, - CFG_GOOD_RSSI_THRESHOLD_MAX), - - REG_VARIABLE(CFG_BAD_RSSI_THRESHOLD_NAME, WLAN_PARAM_Integer, - struct hdd_config, bad_rssi_threshold, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_BAD_RSSI_THRESHOLD_DEFAULT, - CFG_BAD_RSSI_THRESHOLD_MIN, - CFG_BAD_RSSI_THRESHOLD_MAX), - - REG_VARIABLE(CFG_GOOD_RSSI_PCNT_NAME, WLAN_PARAM_Integer, - struct hdd_config, good_rssi_pcnt, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_GOOD_RSSI_PCNT_DEFAULT, - CFG_GOOD_RSSI_PCNT_MIN, - CFG_GOOD_RSSI_PCNT_MAX), - - REG_VARIABLE(CFG_BAD_RSSI_PCNT_NAME, WLAN_PARAM_Integer, - struct hdd_config, bad_rssi_pcnt, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_BAD_RSSI_PCNT_DEFAULT, - CFG_BAD_RSSI_PCNT_MIN, - CFG_BAD_RSSI_PCNT_MAX), - - REG_VARIABLE(CFG_GOOD_RSSI_BUCKET_SIZE_NAME, WLAN_PARAM_Integer, - struct hdd_config, good_rssi_bucket_size, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_GOOD_RSSI_BUCKET_SIZE_DEFAULT, - CFG_GOOD_RSSI_BUCKET_SIZE_MIN, - CFG_GOOD_RSSI_BUCKET_SIZE_MAX), - - REG_VARIABLE(CFG_BAD_RSSI_BUCKET_SIZE_NAME, WLAN_PARAM_Integer, - struct hdd_config, bad_rssi_bucket_size, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_BAD_RSSI_BUCKET_SIZE_DEFAULT, - CFG_BAD_RSSI_BUCKET_SIZE_MIN, - CFG_BAD_RSSI_BUCKET_SIZE_MAX), - - REG_VARIABLE(CFG_RSSI_PERF_5G_THRESHOLD_NAME, WLAN_PARAM_Integer, - struct hdd_config, rssi_pref_5g_rssi_thresh, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_RSSI_PERF_5G_THRESHOLD_DEFAULT, - CFG_RSSI_PERF_5G_THRESHOLD_MIN, - CFG_RSSI_PERF_5G_THRESHOLD_MAX), - - REG_VARIABLE(CFG_BAND_WIDTH_WEIGHT_PER_INDEX_NAME, - WLAN_PARAM_HexInteger, - struct hdd_config, bandwidth_weight_per_index, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_BAND_WIDTH_WEIGHT_PER_INDEX_DEFAULT, - CFG_BAND_WIDTH_WEIGHT_PER_INDEX_MIN, - CFG_BAND_WIDTH_WEIGHT_PER_INDEX_MAX), - - REG_VARIABLE(CFG_NSS_WEIGHT_PER_INDEX_NAME, WLAN_PARAM_HexInteger, - struct hdd_config, nss_weight_per_index, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_NSS_WEIGHT_PER_INDEX_DEFAULT, - CFG_NSS_WEIGHT_PER_INDEX_MIN, - CFG_NSS_WEIGHT_PER_INDEX_MAX), - - REG_VARIABLE(CFG_BAND_WEIGHT_PER_INDEX_NAME, WLAN_PARAM_HexInteger, - struct hdd_config, band_weight_per_index, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_BAND_WEIGHT_PER_INDEX_DEFAULT, - CFG_BAND_WEIGHT_PER_INDEX_MIN, - CFG_BAND_WEIGHT_PER_INDEX_MAX), - - REG_VARIABLE(CFG_ESP_QBSS_SLOTS_NAME, WLAN_PARAM_Integer, - struct hdd_config, num_esp_qbss_slots, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_ESP_QBSS_SLOTS_DEFAULT, - CFG_ESP_QBSS_SLOTS_MIN, - CFG_ESP_QBSS_SLOTS_MAX), - - REG_VARIABLE(CFG_ESP_QBSS_SCORE_IDX3_TO_0_NAME, WLAN_PARAM_HexInteger, - struct hdd_config, esp_qbss_score_slots3_to_0, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_ESP_QBSS_SCORE_IDX3_TO_0_DEFAULT, - CFG_ESP_QBSS_SCORE_IDX3_TO_0_MIN, - CFG_ESP_QBSS_SCORE_IDX3_TO_0_MAX), - - REG_VARIABLE(CFG_ESP_QBSS_SCORE_IDX7_TO_4_NAME, WLAN_PARAM_HexInteger, - struct hdd_config, esp_qbss_score_slots7_to_4, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_ESP_QBSS_SCORE_IDX7_TO_4_DEFAULT, - CFG_ESP_QBSS_SCORE_IDX7_TO_4_MIN, - CFG_ESP_QBSS_SCORE_IDX7_TO_4_MAX), - - REG_VARIABLE(CFG_ESP_QBSS_SCORE_IDX11_TO_8_NAME, WLAN_PARAM_HexInteger, - struct hdd_config, esp_qbss_score_slots11_to_8, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_ESP_QBSS_SCORE_IDX11_TO_8_DEFAULT, - CFG_ESP_QBSS_SCORE_IDX11_TO_8_MIN, - CFG_ESP_QBSS_SCORE_IDX11_TO_8_MAX), - - REG_VARIABLE(CFG_ESP_QBSS_SCORE_IDX15_TO_12_NAME, WLAN_PARAM_HexInteger, - struct hdd_config, esp_qbss_score_slots15_to_12, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_ESP_QBSS_SCORE_IDX15_TO_12_DEFAULT, - CFG_ESP_QBSS_SCORE_IDX15_TO_12_MIN, - CFG_ESP_QBSS_SCORE_IDX15_TO_12_MAX), - - REG_VARIABLE(CFG_OCE_WAN_SLOTS_NAME, WLAN_PARAM_Integer, - struct hdd_config, num_oce_wan_slots, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_OCE_WAN_SLOTS_DEFAULT, - CFG_OCE_WAN_SLOTS_MIN, - CFG_OCE_WAN_SLOTS_MAX), - - REG_VARIABLE(CFG_OCE_WAN_SCORE_IDX3_TO_0_NAME, WLAN_PARAM_HexInteger, - struct hdd_config, oce_wan_score_slots3_to_0, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_OCE_WAN_SCORE_IDX3_TO_0_DEFAULT, - CFG_OCE_WAN_SCORE_IDX3_TO_0_MIN, - CFG_OCE_WAN_SCORE_IDX3_TO_0_MAX), - - REG_VARIABLE(CFG_OCE_WAN_SCORE_IDX7_TO_4_NAME, WLAN_PARAM_HexInteger, - struct hdd_config, oce_wan_score_slots7_to_4, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_OCE_WAN_SCORE_IDX7_TO_4_DEFAULT, - CFG_OCE_WAN_SCORE_IDX7_TO_4_MIN, - CFG_OCE_WAN_SCORE_IDX7_TO_4_MAX), - - REG_VARIABLE(CFG_OCE_WAN_SCORE_IDX11_TO_8_NAME, WLAN_PARAM_HexInteger, - struct hdd_config, oce_wan_score_slots11_to_8, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_OCE_WAN_SCORE_IDX11_TO_8_DEFAULT, - CFG_OCE_WAN_SCORE_IDX11_TO_8_MIN, - CFG_OCE_WAN_SCORE_IDX11_TO_8_MAX), - - REG_VARIABLE(CFG_OCE_WAN_SCORE_IDX15_TO_12_NAME, WLAN_PARAM_HexInteger, - struct hdd_config, oce_wan_score_slots15_to_12, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_OCE_WAN_SCORE_IDX15_TO_12_DEFAULT, - CFG_OCE_WAN_SCORE_IDX15_TO_12_MIN, - CFG_OCE_WAN_SCORE_IDX15_TO_12_MAX), - - REG_VARIABLE(CFG_ENABLE_SCORING_FOR_ROAM_NAME, WLAN_PARAM_Integer, - struct hdd_config, enable_scoring_for_roam, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_ENABLE_SCORING_FOR_ROAM_DEFAULT, - CFG_ENABLE_SCORING_FOR_ROAM_MIN, - CFG_ENABLE_SCORING_FOR_ROAM_MAX), REG_VARIABLE(CFG_IS_FILS_ENABLED_NAME, WLAN_PARAM_Integer, struct hdd_config, is_fils_enabled, @@ -6351,125 +6120,6 @@ eCsrRoamWmmUserModeType hdd_to_csr_wmm_mode(enum hdd_wmm_user_mode mode) } } -/** - * hdd_update_score_params() -initializes the sme config for bss score params - * - * @config: pointer to config - * @score_params: bss score params - * - * Return: None - */ -static void hdd_update_bss_score_params(struct hdd_config *config, - struct sir_score_config *score_params) -{ - int total_weight; - - score_params->enable_scoring_for_roam = - config->enable_scoring_for_roam; - score_params->weight_cfg.rssi_weightage = config->rssi_weightage; - score_params->weight_cfg.ht_caps_weightage = config->ht_caps_weightage; - score_params->weight_cfg.vht_caps_weightage = - config->vht_caps_weightage; - score_params->weight_cfg.he_caps_weightage = - config->he_caps_weightage; - score_params->weight_cfg.chan_width_weightage = - config->chan_width_weightage; - score_params->weight_cfg.chan_band_weightage = - config->chan_band_weightage; - score_params->weight_cfg.nss_weightage = config->nss_weightage; - score_params->weight_cfg.beamforming_cap_weightage = - config->beamforming_cap_weightage; - score_params->weight_cfg.pcl_weightage = config->pcl_weightage; - score_params->weight_cfg.channel_congestion_weightage = - config->channel_congestion_weightage; - score_params->weight_cfg.oce_wan_weightage = config->oce_wan_weightage; - - total_weight = score_params->weight_cfg.rssi_weightage + - score_params->weight_cfg.ht_caps_weightage + - score_params->weight_cfg.vht_caps_weightage + - score_params->weight_cfg.he_caps_weightage + - score_params->weight_cfg.chan_width_weightage + - score_params->weight_cfg.chan_band_weightage + - score_params->weight_cfg.nss_weightage + - score_params->weight_cfg.beamforming_cap_weightage + - score_params->weight_cfg.pcl_weightage + - score_params->weight_cfg.channel_congestion_weightage + - score_params->weight_cfg.oce_wan_weightage; - - if (total_weight > BEST_CANDIDATE_MAX_WEIGHT) { - hdd_err("total weight is greater than %d fallback to default values", - BEST_CANDIDATE_MAX_WEIGHT); - - score_params->weight_cfg.rssi_weightage = RSSI_WEIGHTAGE; - score_params->weight_cfg.ht_caps_weightage = - HT_CAPABILITY_WEIGHTAGE; - score_params->weight_cfg.vht_caps_weightage = VHT_CAP_WEIGHTAGE; - score_params->weight_cfg.he_caps_weightage = HE_CAP_WEIGHTAGE; - score_params->weight_cfg.chan_width_weightage = - CHAN_WIDTH_WEIGHTAGE; - score_params->weight_cfg.chan_band_weightage = - CHAN_BAND_WEIGHTAGE; - score_params->weight_cfg.nss_weightage = NSS_WEIGHTAGE; - score_params->weight_cfg.beamforming_cap_weightage = - BEAMFORMING_CAP_WEIGHTAGE; - score_params->weight_cfg.pcl_weightage = PCL_WEIGHT; - score_params->weight_cfg.channel_congestion_weightage = - CHANNEL_CONGESTION_WEIGHTAGE; - score_params->weight_cfg.oce_wan_weightage = OCE_WAN_WEIGHTAGE; - } - - score_params->bandwidth_weight_per_index = - hdd_limit_max_per_index_score( - config->bandwidth_weight_per_index); - score_params->nss_weight_per_index = - hdd_limit_max_per_index_score(config->nss_weight_per_index); - score_params->band_weight_per_index = - hdd_limit_max_per_index_score(config->band_weight_per_index); - - score_params->rssi_score.best_rssi_threshold = - config->best_rssi_threshold; - score_params->rssi_score.good_rssi_threshold = - config->good_rssi_threshold; - score_params->rssi_score.bad_rssi_threshold = - config->bad_rssi_threshold; - score_params->rssi_score.good_rssi_pcnt = config->good_rssi_pcnt; - score_params->rssi_score.bad_rssi_pcnt = config->bad_rssi_pcnt; - score_params->rssi_score.good_rssi_bucket_size = - config->good_rssi_bucket_size; - score_params->rssi_score.bad_rssi_bucket_size = - config->bad_rssi_bucket_size; - score_params->rssi_score.rssi_pref_5g_rssi_thresh = - config->rssi_pref_5g_rssi_thresh; - - score_params->esp_qbss_scoring.num_slot = config->num_esp_qbss_slots; - score_params->esp_qbss_scoring.score_pcnt3_to_0 = - hdd_limit_max_per_index_score( - config->esp_qbss_score_slots3_to_0); - score_params->esp_qbss_scoring.score_pcnt7_to_4 = - hdd_limit_max_per_index_score( - config->esp_qbss_score_slots7_to_4); - score_params->esp_qbss_scoring.score_pcnt11_to_8 = - hdd_limit_max_per_index_score( - config->esp_qbss_score_slots11_to_8); - score_params->esp_qbss_scoring.score_pcnt15_to_12 = - hdd_limit_max_per_index_score( - config->esp_qbss_score_slots15_to_12); - - score_params->oce_wan_scoring.num_slot = config->num_oce_wan_slots; - score_params->oce_wan_scoring.score_pcnt3_to_0 = - hdd_limit_max_per_index_score( - config->oce_wan_score_slots3_to_0); - score_params->oce_wan_scoring.score_pcnt7_to_4 = - hdd_limit_max_per_index_score( - config->oce_wan_score_slots7_to_4); - score_params->oce_wan_scoring.score_pcnt11_to_8 = - hdd_limit_max_per_index_score( - config->oce_wan_score_slots11_to_8); - score_params->oce_wan_scoring.score_pcnt15_to_12 = - hdd_limit_max_per_index_score( - config->oce_wan_score_slots15_to_12); -} - /** * hdd_update_11k_offload_params() - initializes the 11k offload related params * @@ -6883,8 +6533,6 @@ QDF_STATUS hdd_set_sme_config(struct hdd_context *hdd_ctx) hdd_ctx->config->btm_max_attempt_cnt; smeConfig->csrConfig.btm_sticky_time = hdd_ctx->config->btm_sticky_time; - hdd_update_bss_score_params(hdd_ctx->config, - &smeConfig->csrConfig.bss_score_params); hdd_update_11k_offload_params(hdd_ctx->config, &smeConfig->csrConfig); diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c index 0fb8c55c090d..a9884c3835f9 100644 --- a/core/hdd/src/wlan_hdd_main.c +++ b/core/hdd/src/wlan_hdd_main.c @@ -2938,6 +2938,8 @@ int hdd_wlan_start_modules(struct hdd_context *hdd_ctx, bool reinit) goto hdd_psoc_close; } + hdd_ctx->mac_handle = cds_get_context(QDF_MODULE_ID_SME); + if (hdd_ctx->config->rx_thread_affinity_mask) cds_set_rx_thread_cpu_mask( hdd_ctx->config->rx_thread_affinity_mask); @@ -2964,8 +2966,6 @@ int hdd_wlan_start_modules(struct hdd_context *hdd_ctx, bool reinit) */ hdd_nan_register_callbacks(hdd_ctx); - hdd_ctx->mac_handle = cds_get_context(QDF_MODULE_ID_SME); - status = cds_pre_enable(); if (!QDF_IS_STATUS_SUCCESS(status)) { hdd_err("Failed to pre-enable CDS; status: %d", status); @@ -13665,116 +13665,21 @@ uint32_t hdd_limit_max_per_index_score(uint32_t per_index_score) * @score_config: score config to update * @cfg: config params * - * Return: 0 if success else err + * Return: QDF_STATUS */ -static void hdd_update_score_config( - struct scoring_config *score_config, struct hdd_config *cfg) +static QDF_STATUS +hdd_update_score_config(struct scoring_config *score_config, + struct hdd_config *cfg) { - int total_weight; + struct hdd_context *hdd_ctx; - score_config->weight_cfg.rssi_weightage = cfg->rssi_weightage; - score_config->weight_cfg.ht_caps_weightage = cfg->ht_caps_weightage; - score_config->weight_cfg.vht_caps_weightage = - cfg->vht_caps_weightage; - score_config->weight_cfg.he_caps_weightage = - cfg->he_caps_weightage; - score_config->weight_cfg.chan_width_weightage = - cfg->chan_width_weightage; - score_config->weight_cfg.chan_band_weightage = - cfg->chan_band_weightage; - score_config->weight_cfg.nss_weightage = cfg->nss_weightage; - score_config->weight_cfg.beamforming_cap_weightage = - cfg->beamforming_cap_weightage; - score_config->weight_cfg.pcl_weightage = cfg->pcl_weightage; - score_config->weight_cfg.channel_congestion_weightage = - cfg->channel_congestion_weightage; - score_config->weight_cfg.oce_wan_weightage = cfg->oce_wan_weightage; - - total_weight = score_config->weight_cfg.rssi_weightage + - score_config->weight_cfg.ht_caps_weightage + - score_config->weight_cfg.vht_caps_weightage + - score_config->weight_cfg.he_caps_weightage + - score_config->weight_cfg.chan_width_weightage + - score_config->weight_cfg.chan_band_weightage + - score_config->weight_cfg.nss_weightage + - score_config->weight_cfg.beamforming_cap_weightage + - score_config->weight_cfg.pcl_weightage + - score_config->weight_cfg.channel_congestion_weightage + - score_config->weight_cfg.oce_wan_weightage; - - if (total_weight > BEST_CANDIDATE_MAX_WEIGHT) { - hdd_err("total weight is greater than %d fallback to default values", - BEST_CANDIDATE_MAX_WEIGHT); - - score_config->weight_cfg.rssi_weightage = RSSI_WEIGHTAGE; - score_config->weight_cfg.ht_caps_weightage = - HT_CAPABILITY_WEIGHTAGE; - score_config->weight_cfg.vht_caps_weightage = VHT_CAP_WEIGHTAGE; - score_config->weight_cfg.he_caps_weightage = HE_CAP_WEIGHTAGE; - score_config->weight_cfg.chan_width_weightage = - CHAN_WIDTH_WEIGHTAGE; - score_config->weight_cfg.chan_band_weightage = - CHAN_BAND_WEIGHTAGE; - score_config->weight_cfg.nss_weightage = NSS_WEIGHTAGE; - score_config->weight_cfg.beamforming_cap_weightage = - BEAMFORMING_CAP_WEIGHTAGE; - score_config->weight_cfg.pcl_weightage = PCL_WEIGHT; - score_config->weight_cfg.channel_congestion_weightage = - CHANNEL_CONGESTION_WEIGHTAGE; - score_config->weight_cfg.oce_wan_weightage = OCE_WAN_WEIGHTAGE; + hdd_ctx = cds_get_context(QDF_MODULE_ID_HDD); + if (!hdd_ctx) { + hdd_err("HDD context is NULL"); + return QDF_STATUS_E_FAILURE; } - score_config->bandwidth_weight_per_index = - hdd_limit_max_per_index_score( - cfg->bandwidth_weight_per_index); - score_config->nss_weight_per_index = - hdd_limit_max_per_index_score(cfg->nss_weight_per_index); - score_config->band_weight_per_index = - hdd_limit_max_per_index_score(cfg->band_weight_per_index); - - score_config->rssi_score.best_rssi_threshold = - cfg->best_rssi_threshold; - score_config->rssi_score.good_rssi_threshold = - cfg->good_rssi_threshold; - score_config->rssi_score.bad_rssi_threshold = - cfg->bad_rssi_threshold; - score_config->rssi_score.good_rssi_pcnt = cfg->good_rssi_pcnt; - score_config->rssi_score.bad_rssi_pcnt = cfg->bad_rssi_pcnt; - score_config->rssi_score.good_rssi_bucket_size = - cfg->good_rssi_bucket_size; - score_config->rssi_score.bad_rssi_bucket_size = - cfg->bad_rssi_bucket_size; - score_config->rssi_score.rssi_pref_5g_rssi_thresh = - cfg->rssi_pref_5g_rssi_thresh; - - score_config->esp_qbss_scoring.num_slot = cfg->num_esp_qbss_slots; - score_config->esp_qbss_scoring.score_pcnt3_to_0 = - hdd_limit_max_per_index_score( - cfg->esp_qbss_score_slots3_to_0); - score_config->esp_qbss_scoring.score_pcnt7_to_4 = - hdd_limit_max_per_index_score( - cfg->esp_qbss_score_slots7_to_4); - score_config->esp_qbss_scoring.score_pcnt11_to_8 = - hdd_limit_max_per_index_score( - cfg->esp_qbss_score_slots11_to_8); - score_config->esp_qbss_scoring.score_pcnt15_to_12 = - hdd_limit_max_per_index_score( - cfg->esp_qbss_score_slots15_to_12); - - score_config->oce_wan_scoring.num_slot = cfg->num_oce_wan_slots; - score_config->oce_wan_scoring.score_pcnt3_to_0 = - hdd_limit_max_per_index_score( - cfg->oce_wan_score_slots3_to_0); - score_config->oce_wan_scoring.score_pcnt7_to_4 = - hdd_limit_max_per_index_score( - cfg->oce_wan_score_slots7_to_4); - score_config->oce_wan_scoring.score_pcnt11_to_8 = - hdd_limit_max_per_index_score( - cfg->oce_wan_score_slots11_to_8); - score_config->oce_wan_scoring.score_pcnt15_to_12 = - hdd_limit_max_per_index_score( - cfg->oce_wan_score_slots15_to_12); - + sme_update_score_config(hdd_ctx->mac_handle, score_config); score_config->cb_mode_24G = cfg->nChannelBondingMode24GHz; score_config->cb_mode_5G = cfg->nChannelBondingMode5GHz; @@ -13800,6 +13705,7 @@ static void hdd_update_score_config( if (cfg->enableTxBF) score_config->beamformee_cap = 1; + return QDF_STATUS_SUCCESS; } /** @@ -13865,7 +13771,12 @@ static int hdd_update_scan_config(struct hdd_context *hdd_ctx) cfg->sta_miracast_mcc_rest_time_val; hdd_update_pno_config(&scan_cfg.pno_cfg, cfg); hdd_update_ie_whitelist_attr(&scan_cfg.ie_whitelist, cfg); - hdd_update_score_config(&scan_cfg.score_config, cfg); + + status = hdd_update_score_config(&scan_cfg.score_config, cfg); + if (QDF_IS_STATUS_ERROR(status)) { + hdd_err("Failed to update scoring config"); + return -EINVAL; + } status = ucfg_scan_update_user_config(psoc, &scan_cfg); if (status != QDF_STATUS_SUCCESS) { diff --git a/core/mac/inc/sir_api.h b/core/mac/inc/sir_api.h index 7acc327651a9..09bf2c660543 100644 --- a/core/mac/inc/sir_api.h +++ b/core/mac/inc/sir_api.h @@ -2678,93 +2678,6 @@ struct roam_ext_params { uint32_t bg_scan_client_bitmap; }; -/** - * struct sir_weight_config - weight params to - * calculate best candidate - * @rssi_weightage: RSSI weightage - * @ht_caps_weightage: HT caps weightage - * @vht_caps_weightage: VHT caps weightage - * @he_caps_weightage: HE caps weightage - * @chan_width_weightage: Channel width weightage - * @chan_band_weightage: Channel band weightage - * @nss_weightage: NSS weightage - * @beamforming_cap_weightage: Beamforming caps weightage - * @pcl_weightage: PCL weightage - * @channel_congestion_weightage: channel congestion weightage - * @oce_wan_weightage: OCE WAN metrics weightage - */ -struct sir_weight_config { - uint8_t rssi_weightage; - uint8_t ht_caps_weightage; - uint8_t vht_caps_weightage; - uint8_t he_caps_weightage; - uint8_t chan_width_weightage; - uint8_t chan_band_weightage; - uint8_t nss_weightage; - uint8_t beamforming_cap_weightage; - uint8_t pcl_weightage; - uint8_t channel_congestion_weightage; - uint8_t oce_wan_weightage; -}; - -struct sir_rssi_cfg_score { - uint32_t best_rssi_threshold; - uint32_t good_rssi_threshold; - uint32_t bad_rssi_threshold; - uint32_t good_rssi_pcnt; - uint32_t bad_rssi_pcnt; - uint32_t good_rssi_bucket_size; - uint32_t bad_rssi_bucket_size; - uint32_t rssi_pref_5g_rssi_thresh; -}; - -/** - * struct sir_per_slot_scoring - define % score for differents slots for a - * scoring param. - * num_slot: number of slots in which the param will be divided. - * Max 15. index 0 is used for 'not_present. Num_slot will - * equally divide 100. e.g, if num_slot = 4 slot 0 = 0-25%, slot - * 1 = 26-50% slot 2 = 51-75%, slot 3 = 76-100% - * score_pcnt3_to_0: Conatins score percentage for slot 0-3 - * BITS 0-7 :- the scoring pcnt when not present - * BITS 8-15 :- SLOT_1 - * BITS 16-23 :- SLOT_2 - * BITS 24-31 :- SLOT_3 - * score_pcnt7_to_4: Conatins score percentage for slot 4-7 - * BITS 0-7 :- SLOT_4 - * BITS 8-15 :- SLOT_5 - * BITS 16-23 :- SLOT_6 - * BITS 24-31 :- SLOT_7 - * score_pcnt11_to_8: Conatins score percentage for slot 8-11 - * BITS 0-7 :- SLOT_8 - * BITS 8-15 :- SLOT_9 - * BITS 16-23 :- SLOT_10 - * BITS 24-31 :- SLOT_11 - * score_pcnt15_to_12: Conatins score percentage for slot 12-15 - * BITS 0-7 :- SLOT_12 - * BITS 8-15 :- SLOT_13 - * BITS 16-23 :- SLOT_14 - * BITS 24-31 :- SLOT_15 - */ -struct sir_per_slot_scoring { - uint32_t num_slot; - uint32_t score_pcnt3_to_0; - uint32_t score_pcnt7_to_4; - uint32_t score_pcnt11_to_8; - uint32_t score_pcnt15_to_12; -}; - -struct sir_score_config { - bool enable_scoring_for_roam; - struct sir_weight_config weight_cfg; - struct sir_rssi_cfg_score rssi_score; - struct sir_per_slot_scoring esp_qbss_scoring; - struct sir_per_slot_scoring oce_wan_scoring; - uint32_t bandwidth_weight_per_index; - uint32_t nss_weight_per_index; - uint32_t band_weight_per_index; -}; - /** * struct pmkid_mode_bits - Bit flags for PMKID usage in RSN IE * @fw_okc: Opportunistic key caching enable in firmware diff --git a/core/sme/inc/csr_api.h b/core/sme/inc/csr_api.h index 71422271db3d..84c934aaa3a6 100644 --- a/core/sme/inc/csr_api.h +++ b/core/sme/inc/csr_api.h @@ -1234,7 +1234,6 @@ typedef struct tagCsrConfigParam { uint32_t wlm_latency_flags[CSR_NUM_WLM_LATENCY_LEVEL]; uint16_t pkt_err_disconn_th; bool is_force_1x1; - struct sir_score_config bss_score_params; uint8_t oce_feature_bitmap; uint32_t btm_offload_config; uint32_t btm_solicited_timeout; diff --git a/core/sme/inc/csr_internal.h b/core/sme/inc/csr_internal.h index aaa87485ad19..fb30fad0333e 100644 --- a/core/sme/inc/csr_internal.h +++ b/core/sme/inc/csr_internal.h @@ -558,7 +558,6 @@ struct csr_config { uint16_t wlm_latency_enable; uint16_t wlm_latency_level; uint32_t wlm_latency_flags[CSR_NUM_WLM_LATENCY_LEVEL]; - struct sir_score_config bss_score_params; uint8_t oce_feature_bitmap; uint32_t btm_offload_config; uint32_t btm_solicited_timeout; diff --git a/core/sme/inc/sme_api.h b/core/sme/inc/sme_api.h index 2d5a22efbb3a..169c17ab62c3 100644 --- a/core/sme/inc/sme_api.h +++ b/core/sme/inc/sme_api.h @@ -2793,4 +2793,13 @@ QDF_STATUS sme_get_roam_scan_stats(tHalHandle hal, roam_scan_stats_cb cb, void *context, uint32_t vdev_id); +/** + * sme_update_score_config() - Update the Scoring Config from MLME + * @hal: Mac Handle + * @score_config: Pointer to the scoring config structure to be populated + * + * Return: None + */ +void sme_update_score_config(tHalHandle hal, + struct scoring_config *score_config); #endif /* #if !defined( __SME_API_H ) */ diff --git a/core/sme/src/common/sme_api.c b/core/sme/src/common/sme_api.c index bd85a1ab2820..fe9ac8753031 100644 --- a/core/sme/src/common/sme_api.c +++ b/core/sme/src/common/sme_api.c @@ -16284,3 +16284,81 @@ sme_get_roam_scan_stats(tHalHandle hal, roam_scan_stats_cb cb, void *context, return status; } + +void sme_update_score_config(tHalHandle hal, + struct scoring_config *score_config) +{ + tpAniSirGlobal mac_ctx = PMAC_STRUCT(hal); + struct wlan_mlme_scoring_cfg *mlme_scoring_cfg; + + mlme_scoring_cfg = &mac_ctx->mlme_cfg->scoring; + + score_config->weight_cfg.rssi_weightage = + mlme_scoring_cfg->weight_cfg.rssi_weightage; + score_config->weight_cfg.ht_caps_weightage = + mlme_scoring_cfg->weight_cfg.ht_caps_weightage; + score_config->weight_cfg.vht_caps_weightage = + mlme_scoring_cfg->weight_cfg.vht_caps_weightage; + score_config->weight_cfg.he_caps_weightage = + mlme_scoring_cfg->weight_cfg.he_caps_weightage; + score_config->weight_cfg.chan_width_weightage = + mlme_scoring_cfg->weight_cfg.chan_width_weightage; + score_config->weight_cfg.chan_band_weightage = + mlme_scoring_cfg->weight_cfg.chan_band_weightage; + score_config->weight_cfg.nss_weightage = + mlme_scoring_cfg->weight_cfg.nss_weightage; + score_config->weight_cfg.beamforming_cap_weightage = + mlme_scoring_cfg->weight_cfg.beamforming_cap_weightage; + score_config->weight_cfg.pcl_weightage = + mlme_scoring_cfg->weight_cfg.pcl_weightage; + score_config->weight_cfg.channel_congestion_weightage = + mlme_scoring_cfg->weight_cfg.channel_congestion_weightage; + score_config->weight_cfg.oce_wan_weightage = + mlme_scoring_cfg->weight_cfg.oce_wan_weightage; + + score_config->bandwidth_weight_per_index = + mlme_scoring_cfg->bandwidth_weight_per_index; + score_config->nss_weight_per_index = + mlme_scoring_cfg->nss_weight_per_index; + score_config->band_weight_per_index = + mlme_scoring_cfg->band_weight_per_index; + + score_config->rssi_score.best_rssi_threshold = + mlme_scoring_cfg->rssi_score.best_rssi_threshold; + score_config->rssi_score.good_rssi_threshold = + mlme_scoring_cfg->rssi_score.good_rssi_threshold; + score_config->rssi_score.bad_rssi_threshold = + mlme_scoring_cfg->rssi_score.bad_rssi_threshold; + score_config->rssi_score.good_rssi_pcnt = + mlme_scoring_cfg->rssi_score.good_rssi_pcnt; + score_config->rssi_score.bad_rssi_pcnt = + mlme_scoring_cfg->rssi_score.bad_rssi_pcnt; + score_config->rssi_score.good_rssi_bucket_size = + mlme_scoring_cfg->rssi_score.good_rssi_bucket_size; + score_config->rssi_score.bad_rssi_bucket_size = + mlme_scoring_cfg->rssi_score.bad_rssi_bucket_size; + score_config->rssi_score.rssi_pref_5g_rssi_thresh = + mlme_scoring_cfg->rssi_score.rssi_pref_5g_rssi_thresh; + + score_config->esp_qbss_scoring.num_slot = + mlme_scoring_cfg->esp_qbss_scoring.num_slot; + score_config->esp_qbss_scoring.score_pcnt3_to_0 = + mlme_scoring_cfg->esp_qbss_scoring.score_pcnt3_to_0; + score_config->esp_qbss_scoring.score_pcnt7_to_4 = + mlme_scoring_cfg->esp_qbss_scoring.score_pcnt7_to_4; + score_config->esp_qbss_scoring.score_pcnt11_to_8 = + mlme_scoring_cfg->esp_qbss_scoring.score_pcnt11_to_8; + score_config->esp_qbss_scoring.score_pcnt15_to_12 = + mlme_scoring_cfg->esp_qbss_scoring.score_pcnt15_to_12; + + score_config->oce_wan_scoring.num_slot = + mlme_scoring_cfg->oce_wan_scoring.num_slot; + score_config->oce_wan_scoring.score_pcnt3_to_0 = + mlme_scoring_cfg->oce_wan_scoring.score_pcnt3_to_0; + score_config->oce_wan_scoring.score_pcnt7_to_4 = + mlme_scoring_cfg->oce_wan_scoring.score_pcnt7_to_4; + score_config->oce_wan_scoring.score_pcnt11_to_8 = + mlme_scoring_cfg->oce_wan_scoring.score_pcnt11_to_8; + score_config->oce_wan_scoring.score_pcnt15_to_12 = + mlme_scoring_cfg->oce_wan_scoring.score_pcnt15_to_12; +} diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index 76889f30abb7..e0bd1998890e 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/core/sme/src/csr/csr_api_roam.c @@ -1747,27 +1747,6 @@ static void init_config_param(tpAniSirGlobal pMac) pMac->roam.configParam.nInitialDwellTime = 0; pMac->roam.configParam.initial_scan_no_dfs_chnl = 0; pMac->roam.configParam.csr_mawc_config.mawc_enabled = true; - - qdf_mem_zero(&pMac->roam.configParam.bss_score_params, - sizeof(struct sir_score_config)); - pMac->roam.configParam.bss_score_params.weight_cfg.rssi_weightage = - RSSI_WEIGHTAGE; - pMac->roam.configParam.bss_score_params.weight_cfg.ht_caps_weightage = - HT_CAPABILITY_WEIGHTAGE; - pMac->roam.configParam.bss_score_params.weight_cfg.vht_caps_weightage = - VHT_CAP_WEIGHTAGE; - pMac->roam.configParam.bss_score_params. - weight_cfg.chan_width_weightage = CHAN_WIDTH_WEIGHTAGE; - pMac->roam.configParam.bss_score_params. - weight_cfg.chan_band_weightage = CHAN_BAND_WEIGHTAGE; - pMac->roam.configParam.bss_score_params.weight_cfg.nss_weightage = - NSS_WEIGHTAGE; - pMac->roam.configParam.bss_score_params.weight_cfg. - beamforming_cap_weightage = BEAMFORMING_CAP_WEIGHTAGE; - pMac->roam.configParam.bss_score_params.weight_cfg.pcl_weightage = - PCL_WEIGHT; - pMac->roam.configParam.bss_score_params.weight_cfg. - channel_congestion_weightage = CHANNEL_CONGESTION_WEIGHTAGE; } enum band_info csr_get_current_band(tHalHandle hHal) @@ -3159,9 +3138,6 @@ QDF_STATUS csr_change_default_config_param(tpAniSirGlobal pMac, pMac->roam.configParam.roam_force_rssi_trigger = pParam->roam_force_rssi_trigger; - qdf_mem_copy(&pMac->roam.configParam.bss_score_params, - &pParam->bss_score_params, - sizeof(struct sir_score_config)); pMac->roam.configParam.btm_offload_config = pParam->btm_offload_config; pMac->roam.configParam.btm_solicited_timeout = @@ -3400,9 +3376,6 @@ QDF_STATUS csr_get_config_param(tpAniSirGlobal pMac, tCsrConfigParam *pParam) pParam->oce_feature_bitmap = pMac->roam.configParam.oce_feature_bitmap; pParam->roam_force_rssi_trigger = cfg_params->roam_force_rssi_trigger; - qdf_mem_copy(&pParam->bss_score_params, - &pMac->roam.configParam.bss_score_params, - sizeof(struct sir_score_config)); pParam->btm_offload_config = pMac->roam.configParam.btm_offload_config; pParam->btm_solicited_timeout = pMac->roam.configParam.btm_solicited_timeout; @@ -19631,14 +19604,14 @@ static void csr_update_score_params(tpAniSirGlobal mac_ctx, { struct scoring_param *req_score_params; struct rssi_scoring *req_rssi_score; - struct sir_score_config *bss_score_params; - struct sir_weight_config *weight_config; - struct sir_rssi_cfg_score *rssi_score; + struct wlan_mlme_scoring_cfg *bss_score_params; + struct wlan_mlme_weight_config *weight_config; + struct wlan_mlme_rssi_cfg_score *rssi_score; req_score_params = &req_buffer->score_params; req_rssi_score = &req_score_params->rssi_scoring; - bss_score_params = &mac_ctx->roam.configParam.bss_score_params; + bss_score_params = &mac_ctx->mlme_cfg->scoring; weight_config = &bss_score_params->weight_cfg; rssi_score = &bss_score_params->rssi_score;