diff --git a/components/mlme/core/src/wlan_mlme_main.c b/components/mlme/core/src/wlan_mlme_main.c index de4244dbebc6..9000b578d2f8 100644 --- a/components/mlme/core/src/wlan_mlme_main.c +++ b/components/mlme/core/src/wlan_mlme_main.c @@ -1642,6 +1642,10 @@ static void mlme_init_scoring_cfg(struct wlan_objmgr_psoc *psoc, 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)); + + scoring_cfg->roam_trigger_bitmap = + cfg_get(psoc, CFG_ROAM_TRIGGER_BITMAP); + scoring_cfg->roam_score_delta = cfg_get(psoc, CFG_ROAM_SCORE_DELTA); } static void mlme_init_oce_cfg(struct wlan_objmgr_psoc *psoc, diff --git a/components/mlme/dispatcher/inc/cfg_mlme_scoring.h b/components/mlme/dispatcher/inc/cfg_mlme_scoring.h index 7af2d3600383..4191e8d08def 100644 --- a/components/mlme/dispatcher/inc/cfg_mlme_scoring.h +++ b/components/mlme/dispatcher/inc/cfg_mlme_scoring.h @@ -961,6 +961,78 @@ CFG_VALUE_OR_DEFAULT, \ "OCE WAN Score Index 15 to 12") +/* + * + * roam_score_delta_bitmap - bitmap to enable roam triggers on + * which roam score delta is to be applied during roam candidate + * selection + * @Min: 0 + * @Max: 0xffffffff + * @Default: 0xffffffff + * + * Bitmap value of the following roam triggers: + * ROAM_TRIGGER_REASON_NONE - B0, + * ROAM_TRIGGER_REASON_PER - B1, + * ROAM_TRIGGER_REASON_BMISS - B2, + * ROAM_TRIGGER_REASON_LOW_RSSI - B3, + * ROAM_TRIGGER_REASON_HIGH_RSSI - B4, + * ROAM_TRIGGER_REASON_PERIODIC - B5, + * ROAM_TRIGGER_REASON_MAWC - B6, + * ROAM_TRIGGER_REASON_DENSE - B7, + * ROAM_TRIGGER_REASON_BACKGROUND - B8, + * ROAM_TRIGGER_REASON_FORCED - B9, + * ROAM_TRIGGER_REASON_BTM - B10, + * ROAM_TRIGGER_REASON_UNIT_TEST - B11, + * ROAM_TRIGGER_REASON_BSS_LOAD - B12 + * + * When the bit corresponding to a particular roam trigger reason + * is set, the value of "roam_score_delta" is expected over the + * roam score of the current connected AP, for that triggered roam + * + * Related: None + * + * Supported Feature: Roaming + * + * Usage: External + * + * + */ +#define CFG_ROAM_TRIGGER_BITMAP CFG_INI_UINT( \ + "roam_score_delta_bitmap", \ + 0, \ + 0xFFFFFFFF, \ + 0xFFFFFFFF, \ + CFG_VALUE_OR_DEFAULT, \ + "Bitmap for various roam triggers") + +/* + * + * roam_score_delta - Percentage increment in roam score value + * that is expected from a roaming candidate AP. + * @Min: 0 + * @Max: 100 + * @Default: 0 + * + * This ini is used to provide the percentage increment value over roam + * score for the candidate APs so that they can be preferred over current + * AP for roaming. + * + * Related: None + * + * Supported Feature: Roaming + * + * Usage: External + * + * + */ +#define CFG_ROAM_SCORE_DELTA CFG_INI_UINT( \ + "roam_score_delta", \ + 0, \ + 100, \ + 0, \ + CFG_VALUE_OR_DEFAULT, \ + "candidate AP's percentage roam score delta") + /* * * enable_scoring_for_roam - enable/disable scoring logic in FW for candidate @@ -1018,6 +1090,8 @@ CFG(CFG_SCORING_OCE_WAN_SCORE_IDX_7_TO_4) \ CFG(CFG_SCORING_OCE_WAN_SCORE_IDX_11_TO_8) \ CFG(CFG_SCORING_OCE_WAN_SCORE_IDX_15_TO_12) \ + CFG(CFG_ROAM_TRIGGER_BITMAP) \ + CFG(CFG_ROAM_SCORE_DELTA) \ CFG(CFG_ENABLE_SCORING_FOR_ROAM) #endif /* __CFG_MLME_SCORING_H */ diff --git a/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h b/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h index 5e8860ee4470..63a9556da776 100644 --- a/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h +++ b/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h @@ -1576,6 +1576,8 @@ struct wlan_mlme_per_slot_scoring { * @bandwidth_weight_per_index: Bandwidth weight per index for scoring logic * @nss_weight_per_index: NSS weight per index for scoring logic * @band_weight_per_index: Band weight per index for scoring logic + * @roam_trigger_bitmap: bitmap for various roam triggers + * @roam_score_delta: percentage delta in roam score */ struct wlan_mlme_scoring_cfg { bool enable_scoring_for_roam; @@ -1586,6 +1588,8 @@ struct wlan_mlme_scoring_cfg { uint32_t bandwidth_weight_per_index; uint32_t nss_weight_per_index; uint32_t band_weight_per_index; + uint32_t roam_trigger_bitmap; + uint32_t roam_score_delta; }; /* struct wlan_mlme_threshold - Threshold related config items diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index 5bd581a47e35..93afda7351dd 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/core/sme/src/csr/csr_api_roam.c @@ -18602,6 +18602,10 @@ static void csr_update_score_params(struct mac_context *mac_ctx, req_score_params->nss_index_score = bss_score_params->nss_weight_per_index; + req_score_params->roam_score_delta = bss_score_params->roam_score_delta; + req_score_params->roam_trigger_bitmap = + bss_score_params->roam_trigger_bitmap; + req_rssi_score->best_rssi_threshold = rssi_score->best_rssi_threshold; req_rssi_score->good_rssi_threshold = rssi_score->good_rssi_threshold; req_rssi_score->bad_rssi_threshold = rssi_score->bad_rssi_threshold;