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;