diff --git a/components/mlme/core/src/wlan_mlme_main.c b/components/mlme/core/src/wlan_mlme_main.c
index 99887aaa8a..fe078ffbf2 100644
--- a/components/mlme/core/src/wlan_mlme_main.c
+++ b/components/mlme/core/src/wlan_mlme_main.c
@@ -1516,6 +1516,10 @@ mlme_init_bss_load_trigger_params(struct wlan_objmgr_psoc *psoc,
cfg_get(psoc, CFG_ENABLE_BSS_LOAD_TRIGGERED_ROAM);
bss_load_trig->threshold = cfg_get(psoc, CFG_BSS_LOAD_THRESHOLD);
bss_load_trig->sample_time = cfg_get(psoc, CFG_BSS_LOAD_SAMPLE_TIME);
+ bss_load_trig->rssi_threshold_5ghz =
+ cfg_get(psoc, CFG_BSS_LOAD_TRIG_5G_RSSI_THRES);
+ bss_load_trig->rssi_threshold_24ghz =
+ cfg_get(psoc, CFG_BSS_LOAD_TRIG_2G_RSSI_THRES);
}
static void mlme_init_lfr_cfg(struct wlan_objmgr_psoc *psoc,
@@ -1676,6 +1680,13 @@ static void mlme_init_lfr_cfg(struct wlan_objmgr_psoc *psoc,
lfr->roaming_scan_policy =
cfg_get(psoc, CFG_ROAM_SCAN_SCAN_POLICY);
+ lfr->roam_scan_inactivity_time =
+ cfg_get(psoc, CFG_ROAM_SCAN_INACTIVITY_TIME);
+ lfr->roam_inactive_data_packet_count =
+ cfg_get(psoc, CFG_ROAM_INACTIVE_COUNT);
+ lfr->roam_scan_period_after_inactivity =
+ cfg_get(psoc, CFG_POST_INACTIVITY_ROAM_SCAN_PERIOD);
+
mlme_init_roam_offload_cfg(psoc, lfr);
mlme_init_ese_cfg(psoc, lfr);
mlme_init_bss_load_trigger_params(psoc, &lfr->bss_load_trig);
@@ -2129,7 +2140,36 @@ static void mlme_init_btm_cfg(struct wlan_objmgr_psoc *psoc,
btm->disassoc_timer_threshold =
cfg_get(psoc, CFG_BTM_DISASSOC_TIMER_THRESHOLD);
btm->btm_query_bitmask = cfg_get(psoc, CFG_BTM_QUERY_BITMASK);
+ btm->btm_trig_min_candidate_score =
+ cfg_get(psoc, CFG_MIN_BTM_CANDIDATE_SCORE);
+}
+static void
+mlme_init_roam_score_config(struct wlan_objmgr_psoc *psoc,
+ struct wlan_mlme_cfg *mlme_cfg)
+{
+ struct roam_trigger_score_delta *score_delta_param;
+ struct roam_trigger_min_rssi *min_rssi_param;
+
+ score_delta_param = &mlme_cfg->trig_score_delta[IDLE_ROAM_TRIGGER];
+ score_delta_param->roam_score_delta =
+ cfg_get(psoc, CFG_IDLE_ROAM_SCORE_DELTA);
+ score_delta_param->trigger_reason = ROAM_TRIGGER_REASON_IDLE;
+
+ score_delta_param = &mlme_cfg->trig_score_delta[BTM_ROAM_TRIGGER];
+ score_delta_param->roam_score_delta =
+ cfg_get(psoc, CFG_BTM_ROAM_SCORE_DELTA);
+ score_delta_param->trigger_reason = ROAM_TRIGGER_REASON_BTM;
+
+ min_rssi_param = &mlme_cfg->trig_min_rssi[DEAUTH_MIN_RSSI];
+ min_rssi_param->min_rssi =
+ cfg_get(psoc, CFG_DISCONNECT_ROAM_TRIGGER_MIN_RSSI);
+ min_rssi_param->trigger_reason = ROAM_TRIGGER_REASON_DEAUTH;
+
+ min_rssi_param = &mlme_cfg->trig_min_rssi[BMISS_MIN_RSSI];
+ min_rssi_param->min_rssi =
+ cfg_get(psoc, CFG_BMISS_ROAM_MIN_RSSI);
+ min_rssi_param->trigger_reason = ROAM_TRIGGER_REASON_BMISS;
}
/**
@@ -2286,6 +2326,7 @@ QDF_STATUS mlme_cfg_on_psoc_enable(struct wlan_objmgr_psoc *psoc)
mlme_init_mwc_cfg(psoc, &mlme_cfg->mwc);
mlme_init_reg_cfg(psoc, &mlme_cfg->reg);
mlme_init_btm_cfg(psoc, &mlme_cfg->btm);
+ mlme_init_roam_score_config(psoc, mlme_cfg);
return status;
}
diff --git a/components/mlme/dispatcher/inc/cfg_mlme_btm.h b/components/mlme/dispatcher/inc/cfg_mlme_btm.h
index 1da6604ef7..8e3446bd07 100644
--- a/components/mlme/dispatcher/inc/cfg_mlme_btm.h
+++ b/components/mlme/dispatcher/inc/cfg_mlme_btm.h
@@ -269,6 +269,33 @@
CFG_VALUE_OR_DEFAULT, \
"btm query with candidate list bitmask")
+/*
+ *
+ * minimum_btm_candidate_score - Consider the AP as roam candidate only if
+ * its score is greater than minimum_btm_candidate_score.
+ * @Min: 0
+ * @Max: 10000
+ * @Default: 1800
+ *
+ * This ini is applicable only for candidate selection during BTM roam trigger.
+ * For this roam_score_delta_bitmap bit 10 should be set to 1.
+ *
+ * Related: None
+ *
+ * Supported Feature: Roaming
+ *
+ * Usage: External
+ *
+ *
+ */
+#define CFG_MIN_BTM_CANDIDATE_SCORE CFG_INI_UINT( \
+ "minimum_btm_candidate_score", \
+ 0, \
+ 10000, \
+ 1800, \
+ CFG_VALUE_OR_DEFAULT, \
+ "Minimum BTM candidate score")
+
#define CFG_BTM_ALL \
CFG(CFG_PREFER_BTM_QUERY) \
CFG(CFG_ENABLE_BTM_ABRIDGE) \
@@ -278,6 +305,7 @@
CFG(CFG_BTM_STICKY_TIME) \
CFG(CFG_BTM_VALIDITY_TIMER) \
CFG(CFG_BTM_DISASSOC_TIMER_THRESHOLD) \
- CFG(CFG_BTM_QUERY_BITMASK)
+ CFG(CFG_BTM_QUERY_BITMASK) \
+ CFG(CFG_MIN_BTM_CANDIDATE_SCORE)
#endif /* CFG_MLME_BTM_H_ */
diff --git a/components/mlme/dispatcher/inc/cfg_mlme_lfr.h b/components/mlme/dispatcher/inc/cfg_mlme_lfr.h
index 0273168c1a..d18a42c956 100644
--- a/components/mlme/dispatcher/inc/cfg_mlme_lfr.h
+++ b/components/mlme/dispatcher/inc/cfg_mlme_lfr.h
@@ -1893,6 +1893,62 @@
CFG_VALUE_OR_DEFAULT, \
"bss load sampling time")
+/*
+ *
+ * bss_load_trigger_5g_rssi_threshold - Current AP minimum RSSI in dBm below
+ * which roaming can be triggered if BSS load exceeds bss_load_threshold.
+ * @Min: -120
+ * @Max: 0
+ * @Default: -70
+ *
+ * If connected AP is in 5Ghz, then consider bss load roam triggered only if
+ * load % > bss_load_threshold && connected AP rssi is worse than
+ * bss_load_trigger_5g_rssi_threshold
+ *
+ * Related: "bss_load_threshold"
+ *
+ * Supported Feature: Roaming
+ *
+ * Usage: Internal/External
+ *
+ *
+ */
+#define CFG_BSS_LOAD_TRIG_5G_RSSI_THRES CFG_INI_INT( \
+ "bss_load_trigger_5g_rssi_threshold", \
+ -120, \
+ 0, \
+ -70, \
+ CFG_VALUE_OR_DEFAULT, \
+ "Minimum RSSI of current AP in 5GHz band for BSS load roam trigger")
+
+/*
+ *
+ * bss_load_trigger_2g_rssi_threshold - Current AP minimum RSSI in dBm below
+ * which roaming can be triggered if BSS load exceeds bss_load_threshold.
+ * @Min: -120
+ * @Max: 0
+ * @Default: -60
+ *
+ * If connected AP is in 2Ghz, then consider bss load roam triggered only if
+ * load % > bss_load_threshold && connected AP rssi is worse than
+ * bss_load_trigger_2g_rssi_threshold.
+ *
+ * Related: "bss_load_threshold"
+ *
+ * Supported Feature: Roaming
+ *
+ * Usage: Internal/External
+ *
+ *
+ */
+#define CFG_BSS_LOAD_TRIG_2G_RSSI_THRES CFG_INI_INT( \
+ "bss_load_trigger_2g_rssi_threshold", \
+ -120, \
+ 0, \
+ -60, \
+ CFG_VALUE_OR_DEFAULT, \
+ "Minimum RSSI of current AP in 2.4GHz band for BSS load roam trigger")
+
/*
*
* ho_delay_for_rx - Delay hand-off (in msec) by this duration to receive
@@ -2353,6 +2409,103 @@
0, \
"Config roam scan policy")
+/*
+ *
+ * roam_scan_inactivity_time - Device inactivity monitoring time in
+ * milliseconds for which the device is considered to be inactive with data
+ * packets count is less than configured roam_inactive_data_count.
+ *
+ * @Min: 0
+ * @Max: 0xFFFFFFFF
+ * @Default: 0
+ *
+ * The below three ini values are used to control the roam scan after the
+ * firmware gets empty roam scan results during periodic roam scans.
+ * 1. roam_scan_inactivity_time
+ * 2. roam_inactive_data_count
+ * 3. roam_scan_period_after_inactivity
+ * The first two ini "roam_scan_inactivity_time" and "roam_inactive_data_count"
+ * is frames the criteria to detect if the DUT is inactive. If the device is
+ * identified to be inactive based on the above two ini, then the value,
+ * "roam_scan_period_after_inactivity" will be used as periodic roam scan
+ * duration.
+ *
+ * Related: roam_inactive_data_count
+ *
+ * Supported Feature: Roaming
+ *
+ * Usage: External
+ *
+ *
+ */
+#define CFG_ROAM_SCAN_INACTIVITY_TIME CFG_INI_UINT( \
+ "roam_scan_inactivity_time", \
+ 0, \
+ 0xFFFFFFFF, \
+ 0, \
+ CFG_VALUE_OR_DEFAULT, \
+ "Device inactivity monitoring time")
+
+/*
+ *
+ * roam_inactive_data_count - Maximum allowed data packets count during
+ * roam_scan_inactivity_time.
+ *
+ * @Min: 0
+ * @Max: 0xFFFFFFFF
+ * @Default: 10
+ *
+ * The DUT is said to be inactive only if the data packets count
+ * during this roam_scan_inactivity_time is less than the configured
+ * roam_inactive_data_count.
+ *
+ * Related: roam_scan_inactivity_time
+ *
+ * Supported Feature: Roaming
+ *
+ * Usage: External
+ *
+ *
+ */
+#define CFG_ROAM_INACTIVE_COUNT CFG_INI_UINT( \
+ "roam_inactive_data_count", \
+ 0, \
+ 0xFFFFFFFF, \
+ 10, \
+ CFG_VALUE_OR_DEFAULT, \
+ "Roam scan inactivity period data pkt count")
+
+/*
+ *
+ * roam_scan_period_after_inactivity - Roam scan duration in ms after device is
+ * out of inactivity state.
+ *
+ * @Min: 0
+ * @Max: 0xFFFFFFFF
+ * @Default: 120000
+ *
+ * If there is empty scan results during roam scan, firmware will move to
+ * roam scan inactive state if roam_scan_inactivity and
+ * roam_inactive_data_count criteria are met.
+ * This ini is used to configure the roam scan duration in ms once the
+ * inactivity is finished and roam scan can be started.
+ *
+ * Related: roam_scan_inactivity_time, roam_inactive_data_count
+ *
+ * Supported Feature: Roaming
+ *
+ * Usage: External
+ *
+ *
+ */
+#define CFG_POST_INACTIVITY_ROAM_SCAN_PERIOD CFG_INI_UINT( \
+ "roam_scan_period_after_inactivity", \
+ 0, \
+ 0xFFFFFFFF, \
+ 120000, \
+ CFG_VALUE_OR_DEFAULT, \
+ "Roam scan period post inactivity")
+
#define CFG_LFR_ALL \
CFG(CFG_LFR_MAWC_ROAM_ENABLED) \
CFG(CFG_LFR_MAWC_ROAM_TRAFFIC_THRESHOLD) \
@@ -2431,6 +2584,11 @@
CFG(CFG_LFR_ROAM_FT_OPEN_ENABLE) \
CFG(CFG_LFR_ROAM_FORCE_RSSI_TRIGGER) \
CFG(CFG_ROAM_SCAN_SCAN_POLICY) \
+ CFG(CFG_ROAM_SCAN_INACTIVITY_TIME) \
+ CFG(CFG_ROAM_INACTIVE_COUNT) \
+ CFG(CFG_POST_INACTIVITY_ROAM_SCAN_PERIOD) \
+ CFG(CFG_BSS_LOAD_TRIG_5G_RSSI_THRES) \
+ CFG(CFG_BSS_LOAD_TRIG_2G_RSSI_THRES) \
ROAM_OFFLOAD_ALL \
LFR_ESE_ALL \
LFR_SUBNET_DETECTION_ALL
diff --git a/components/mlme/dispatcher/inc/cfg_mlme_scoring.h b/components/mlme/dispatcher/inc/cfg_mlme_scoring.h
index bac6cba6db..65042193c2 100644
--- a/components/mlme/dispatcher/inc/cfg_mlme_scoring.h
+++ b/components/mlme/dispatcher/inc/cfg_mlme_scoring.h
@@ -1065,12 +1065,134 @@
* @Min: 0
* @Max: 1
* @Default: 0
+ *
+ * Supported Feature: Power save
+ *
+ * Usage: Internal
+ *
+ *
*/
#define CFG_APSD_ENABLED CFG_BOOL( \
"apsd_enabled", \
0, \
"Enable APSD")
+/*
+ *
+ * candidate_min_rssi_for_disconnect - Candidate AP minimum RSSI in
+ * idle roam trigger(in dBm).
+ * @Min: -120
+ * @Max: 0
+ * @Default: -70
+ *
+ * Minimum RSSI value of the candidate AP to consider it as candidate for
+ * roaming when roam trigger is Deauthentication/Disconnection from current
+ * AP. This value will be sent to firmware over the WMI_ROAM_AP_PROFILE
+ * wmi command in the roam_min_rssi_param_list tlv.
+ *
+ * Related: enable_idle_roam.
+ *
+ * Supported Feature: Roaming
+ *
+ * Usage: Internal/External
+ *
+ *
+ */
+#define CFG_DISCONNECT_ROAM_TRIGGER_MIN_RSSI CFG_INI_INT( \
+ "candidate_min_rssi_for_disconnect", \
+ -120, \
+ 0, \
+ -70, \
+ CFG_VALUE_OR_DEFAULT, \
+ "Minimum RSSI of candidate AP for Disconnect roam trigger")
+
+/*
+ *
+ * candidate_min_rssi_for_beacon_miss - Candidate AP minimum RSSI for beacon
+ * miss roam trigger (in dBm)
+ * @Min: -120
+ * @Max: 0
+ * @Default: -70
+ *
+ * Minimum RSSI value of the candidate AP to consider it as candidate for
+ * roaming when roam trigger is disconnection from current AP due to beacon
+ * miss. This value will be sent to firmware over the WMI_ROAM_AP_PROFILE
+ * wmi command in the roam_min_rssi_param_list tlv.
+ *
+ * Related: None
+ *
+ * Supported Feature: Roaming
+ *
+ * Usage: Internal/External
+ *
+ *
+ */
+#define CFG_BMISS_ROAM_MIN_RSSI CFG_INI_INT( \
+ "candidate_min_rssi_for_beacon_miss", \
+ -120, \
+ 0, \
+ -70, \
+ CFG_VALUE_OR_DEFAULT, \
+ "Minimum RSSI of candidate AP for Bmiss roam trigger")
+
+/*
+ *
+ * idle_roam_score_delta - Roam score delta value in percentage for idle roam.
+ * @Min: 0
+ * @Max: 100
+ * @Default: 10
+ *
+ * This ini is used to configure the minimum change in roam score
+ * value of the AP to consider it as candidate for
+ * roaming when roam trigger is due to idle state of sta.
+ * This value will be sent to firmware over the WMI_ROAM_AP_PROFILE wmi
+ * command in the roam_score_delta_param_list tlv.
+ * Related: None
+ *
+ * Supported Feature: Roaming
+ *
+ * Usage: External
+ *
+ *
+ */
+#define CFG_IDLE_ROAM_SCORE_DELTA CFG_INI_UINT( \
+ "idle_roam_score_delta", \
+ 0, \
+ 100, \
+ 10, \
+ CFG_VALUE_OR_DEFAULT, \
+ "Roam score delta for Idle roam trigger")
+
+/*
+ *
+ * btm_roam_score_delta - Roam score delta value in percentage for BTM triggered
+ * roaming.
+ * @Min: 0
+ * @Max: 100
+ * @Default: 10
+ *
+ * This ini is used to configure the minimum change in roam score
+ * value of the AP to consider it as candidate when the sta is disconnected
+ * from the current AP due to BTM kickout.
+ * This value will be sent to firmware over the WMI_ROAM_AP_PROFILE wmi
+ * command in the roam_score_delta_param_list tlv.
+ *
+ * Related: None
+ *
+ * Supported Feature: Roaming
+ *
+ * Usage: External
+ *
+ *
+ */
+#define CFG_BTM_ROAM_SCORE_DELTA CFG_INI_UINT( \
+ "btm_roam_score_delta", \
+ 0, \
+ 100, \
+ 10, \
+ CFG_VALUE_OR_DEFAULT, \
+ "Roam score delta for BTM roam trigger")
+
#define CFG_SCORING_ALL \
CFG(CFG_SCORING_RSSI_WEIGHTAGE) \
CFG(CFG_SCORING_HT_CAPS_WEIGHTAGE) \
@@ -1107,6 +1229,10 @@
CFG(CFG_ROAM_TRIGGER_BITMAP) \
CFG(CFG_ROAM_SCORE_DELTA) \
CFG(CFG_ENABLE_SCORING_FOR_ROAM) \
- CFG(CFG_APSD_ENABLED)
+ CFG(CFG_APSD_ENABLED) \
+ CFG(CFG_DISCONNECT_ROAM_TRIGGER_MIN_RSSI) \
+ CFG(CFG_BMISS_ROAM_MIN_RSSI) \
+ CFG(CFG_IDLE_ROAM_SCORE_DELTA) \
+ CFG(CFG_BTM_ROAM_SCORE_DELTA) \
#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 3f45089907..c4961e7991 100644
--- a/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h
+++ b/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h
@@ -1248,11 +1248,19 @@ enum roaming_dfs_channel_type {
* @threshold: Bss load threshold value above which roaming should start
* @sample_time: Time duration in milliseconds for which the bss load value
* should be monitored
+ * @rssi_threshold_5ghz: RSSI threshold of the current connected AP below which
+ * roam should be triggered if bss load threshold exceeds the configured value.
+ * This value is applicable only when we are connected in 5GHz band.
+ * @rssi_threshold_24ghz: RSSI threshold of the current connected AP below which
+ * roam should be triggered if bss load threshold exceeds the configured value.
+ * This value is applicable only when we are connected in 2.4 GHz band.
*/
struct bss_load_trigger {
bool enabled;
uint32_t threshold;
uint32_t sample_time;
+ int32_t rssi_threshold_5ghz;
+ int32_t rssi_threshold_24ghz;
};
/*
@@ -1344,6 +1352,12 @@ struct bss_load_trigger {
* @enable_ftopen: Enable/disable FT open feature
* @roam_force_rssi_trigger: Force RSSI trigger or not
* @roaming_scan_policy: Config roaming scan policy in fw
+ * @roam_scan_inactivity_time: Device inactivity monitoring time in
+ * milliseconds for which the device is considered to be inactive.
+ * @roam_inactive_data_packet_count: Maximum allowed data packets count
+ * during roam_scan_inactivity_time.
+ * @roam_scan_period_after_inactivity: Roam scan period after device was in
+ * inactive state
*/
struct wlan_mlme_lfr_cfg {
bool mawc_roam_enabled;
@@ -1438,6 +1452,9 @@ struct wlan_mlme_lfr_cfg {
bool roam_force_rssi_trigger;
struct bss_load_trigger bss_load_trig;
bool roaming_scan_policy;
+ uint32_t roam_scan_inactivity_time;
+ uint32_t roam_inactive_data_packet_count;
+ uint32_t roam_scan_period_after_inactivity;
};
/**
@@ -1883,6 +1900,8 @@ struct wlan_mlme_wifi_pos_cfg {
* not be triggered
* @btm_query_bitmask: Bitmask to send BTM query with candidate list on
* various roam
+ * @btm_trig_min_candidate_score: Minimum score to consider the AP as candidate
+ * when the roam trigger is BTM.
*/
struct wlan_mlme_btm {
bool prefer_btm_query;
@@ -1894,6 +1913,7 @@ struct wlan_mlme_btm {
uint32_t rct_validity_timer;
uint32_t disassoc_timer_threshold;
uint32_t btm_query_bitmask;
+ uint32_t btm_trig_min_candidate_score;
};
/**
@@ -2035,6 +2055,9 @@ struct wlan_mlme_ibss_cfg {
* @mwc: MWC related CFG items
* @dot11_mode: dot11 mode supported
* @reg: REG related CFG itmes
+ * @trig_score_delta: Roam score delta value for various roam triggers
+ * @trig_min_rssi: Expected minimum RSSI value of candidate AP for
+ * various roam triggers
*/
struct wlan_mlme_cfg {
struct wlan_mlme_chainmask chainmask_cfg;
@@ -2077,6 +2100,8 @@ struct wlan_mlme_cfg {
struct wlan_mlme_mwc mwc;
struct wlan_mlme_dot11_mode dot11_mode;
struct wlan_mlme_reg reg;
+ struct roam_trigger_score_delta trig_score_delta[NUM_OF_ROAM_TRIGGERS];
+ struct roam_trigger_min_rssi trig_min_rssi[NUM_OF_ROAM_TRIGGERS];
};
#endif
diff --git a/core/mac/inc/sir_api.h b/core/mac/inc/sir_api.h
index 2aa599b9a8..7ddd9a0f0f 100644
--- a/core/mac/inc/sir_api.h
+++ b/core/mac/inc/sir_api.h
@@ -2269,6 +2269,7 @@ struct roam_offload_scan_req {
uint32_t btm_sticky_time;
uint32_t rct_validity_timer;
uint32_t disassoc_timer_threshold;
+ uint32_t btm_trig_min_candidate_score;
struct wmi_11k_offload_params offload_11k_params;
uint32_t ho_delay_for_rx;
uint32_t roam_preauth_retry_count;
@@ -2280,7 +2281,12 @@ struct roam_offload_scan_req {
bool bss_load_trig_enabled;
struct wmi_bss_load_config bss_load_config;
bool roaming_scan_policy;
+ uint32_t roam_scan_inactivity_time;
+ uint32_t roam_inactive_data_packet_count;
+ uint32_t roam_scan_period_after_inactivity;
uint32_t btm_query_bitmask;
+ struct roam_trigger_min_rssi min_rssi_params[NUM_OF_ROAM_TRIGGERS];
+ struct roam_trigger_score_delta score_delta_param[NUM_OF_ROAM_TRIGGERS];
};
struct roam_offload_scan_rsp {
diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c
index a527b2f88a..8a5920ca40 100644
--- a/core/sme/src/csr/csr_api_roam.c
+++ b/core/sme/src/csr/csr_api_roam.c
@@ -17732,6 +17732,10 @@ csr_update_roam_scan_offload_request(struct mac_context *mac_ctx,
mac_ctx->mlme_cfg->lfr.bss_load_trig.threshold;
req_buf->bss_load_config.bss_load_sample_time =
mac_ctx->mlme_cfg->lfr.bss_load_trig.sample_time;
+ req_buf->bss_load_config.rssi_threshold_5ghz =
+ mac_ctx->mlme_cfg->lfr.bss_load_trig.rssi_threshold_5ghz;
+ req_buf->bss_load_config.rssi_threshold_24ghz =
+ mac_ctx->mlme_cfg->lfr.bss_load_trig.rssi_threshold_24ghz;
req_buf->bss_load_config.vdev_id = session->sessionId;
/*
@@ -18191,6 +18195,13 @@ csr_create_roam_scan_offload_request(struct mac_context *mac_ctx,
roam_info->cfgParams.maxChannelScanTime;
req_buf->EmptyRefreshScanPeriod =
roam_info->cfgParams.emptyScanRefreshPeriod;
+ req_buf->roam_scan_inactivity_time =
+ mac_ctx->mlme_cfg->lfr.roam_scan_inactivity_time;
+ req_buf->roam_inactive_data_packet_count =
+ mac_ctx->mlme_cfg->lfr.roam_inactive_data_packet_count;
+ req_buf->roam_scan_period_after_inactivity =
+ mac_ctx->mlme_cfg->lfr.roam_scan_period_after_inactivity;
+
req_buf->RoamBmissFirstBcnt =
roam_info->cfgParams.nRoamBmissFirstBcnt;
req_buf->RoamBmissFinalBcnt =
@@ -18205,6 +18216,16 @@ csr_create_roam_scan_offload_request(struct mac_context *mac_ctx,
req_buf->mawc_roam_params.mawc_roam_ap_rssi_threshold,
req_buf->mawc_roam_params.mawc_roam_rssi_high_adjust,
req_buf->mawc_roam_params.mawc_roam_rssi_low_adjust);
+
+ req_buf->min_rssi_params[DEAUTH_MIN_RSSI] =
+ mac_ctx->mlme_cfg->trig_min_rssi[DEAUTH_MIN_RSSI];
+ req_buf->min_rssi_params[BMISS_MIN_RSSI] =
+ mac_ctx->mlme_cfg->trig_min_rssi[BMISS_MIN_RSSI];
+ req_buf->score_delta_param[IDLE_ROAM_TRIGGER] =
+ mac_ctx->mlme_cfg->trig_score_delta[IDLE_ROAM_TRIGGER];
+ req_buf->score_delta_param[BTM_ROAM_TRIGGER] =
+ mac_ctx->mlme_cfg->trig_score_delta[BTM_ROAM_TRIGGER];
+
#ifdef FEATURE_WLAN_ESE
req_buf->IsESEAssoc =
csr_roam_is_ese_assoc(mac_ctx, session_id) &&
@@ -18355,6 +18376,8 @@ csr_create_roam_scan_offload_request(struct mac_context *mac_ctx,
mac_ctx->mlme_cfg->btm.disassoc_timer_threshold;
req_buf->btm_query_bitmask =
mac_ctx->mlme_cfg->btm.btm_query_bitmask;
+ req_buf->btm_trig_min_candidate_score =
+ mac_ctx->mlme_cfg->btm.btm_trig_min_candidate_score;
csr_update_roam_scan_offload_request(mac_ctx, req_buf, session);
diff --git a/core/wma/inc/wma_internal.h b/core/wma/inc/wma_internal.h
index 115b160048..5196055855 100644
--- a/core/wma/inc/wma_internal.h
+++ b/core/wma/inc/wma_internal.h
@@ -252,10 +252,9 @@ QDF_STATUS
wma_roam_scan_offload_rssi_thresh(tp_wma_handle wma_handle,
struct roam_offload_scan_req *roam_req);
-QDF_STATUS wma_roam_scan_offload_scan_period(tp_wma_handle wma_handle,
- uint32_t scan_period,
- uint32_t scan_age,
- uint32_t vdev_id);
+QDF_STATUS
+wma_roam_scan_offload_scan_period(tp_wma_handle wma_handle,
+ struct roam_offload_scan_req *roam_req);
QDF_STATUS wma_roam_scan_offload_rssi_change(tp_wma_handle wma_handle,
uint32_t vdev_id,
diff --git a/core/wma/src/wma_scan_roam.c b/core/wma/src/wma_scan_roam.c
index 9bb5ce2611..695ffa068f 100644
--- a/core/wma/src/wma_scan_roam.c
+++ b/core/wma/src/wma_scan_roam.c
@@ -587,27 +587,37 @@ wma_roam_scan_offload_rssi_thresh(tp_wma_handle wma_handle,
/**
* wma_roam_scan_offload_scan_period() - set roam offload scan period
* @wma_handle: wma handle
- * @scan_period: scan period
- * @scan_age: scan age
- * @vdev_id: vdev id
+ * @roam_req: Pointer to roam_offload_scan_req
*
* Send WMI_ROAM_SCAN_PERIOD parameters to fw.
*
* Return: QDF status
*/
-QDF_STATUS wma_roam_scan_offload_scan_period(tp_wma_handle wma_handle,
- uint32_t scan_period,
- uint32_t scan_age,
- uint32_t vdev_id)
+QDF_STATUS
+wma_roam_scan_offload_scan_period(tp_wma_handle wma_handle,
+ struct roam_offload_scan_req *roam_req)
{
+ uint8_t vdev_id;
+ struct roam_scan_period_params scan_period_params;
+
+ vdev_id = roam_req->sessionId;
if (!wma_is_vdev_valid(vdev_id)) {
WMA_LOGE("%s: Invalid vdev id:%d", __func__, vdev_id);
return QDF_STATUS_E_FAILURE;
}
+ scan_period_params.vdev_id = vdev_id;
+ scan_period_params.scan_period = roam_req->EmptyRefreshScanPeriod;
+ scan_period_params.scan_age = (3 * roam_req->EmptyRefreshScanPeriod);
+ scan_period_params.roam_scan_inactivity_time =
+ roam_req->roam_scan_inactivity_time;
+ scan_period_params.roam_inactive_data_packet_count =
+ roam_req->roam_inactive_data_packet_count;
+ scan_period_params.roam_scan_period_after_inactivity =
+ roam_req->roam_scan_period_after_inactivity;
+
return wmi_unified_roam_scan_offload_scan_period(wma_handle->wmi_handle,
- scan_period, scan_age,
- vdev_id);
+ &scan_period_params);
}
/**
@@ -1206,6 +1216,16 @@ static QDF_STATUS wma_roam_scan_offload_ap_profile(tp_wma_handle wma_handle,
WMA_NOISE_FLOOR_DBM_DEFAULT;
}
ap_profile.param = roam_req->score_params;
+ ap_profile.min_rssi_params[DEAUTH_MIN_RSSI] =
+ roam_req->min_rssi_params[DEAUTH_MIN_RSSI];
+ ap_profile.min_rssi_params[BMISS_MIN_RSSI] =
+ roam_req->min_rssi_params[BMISS_MIN_RSSI];
+
+ ap_profile.score_delta_param[IDLE_ROAM_TRIGGER] =
+ roam_req->score_delta_param[IDLE_ROAM_TRIGGER];
+ ap_profile.score_delta_param[BTM_ROAM_TRIGGER] =
+ roam_req->score_delta_param[BTM_ROAM_TRIGGER];
+
return wmi_unified_send_roam_scan_offload_ap_cmd(wma_handle->wmi_handle,
&ap_profile);
}
@@ -1428,15 +1448,16 @@ wma_roam_scan_btm_offload(tp_wma_handle wma_handle,
params->btm_sticky_time = roam_req->btm_sticky_time;
params->disassoc_timer_threshold = roam_req->disassoc_timer_threshold;
params->btm_query_bitmask = roam_req->btm_query_bitmask;
+ params->btm_candidate_min_score =
+ roam_req->btm_trig_min_candidate_score;
- WMA_LOGD("%s: Sending BTM offload to FW for vdev %u btm_offload_config %u btm_query_bitmask %u",
+ WMA_LOGD("%s: vdev %u btm_offload:%u btm_query_bitmask:%u btm_candidate_min_score:%d",
__func__, params->vdev_id, params->btm_offload_config,
- params->btm_query_bitmask);
+ params->btm_query_bitmask, params->btm_candidate_min_score);
status = wmi_unified_send_btm_config(wma_handle->wmi_handle, params);
qdf_mem_free(params);
-
return status;
}
@@ -1673,9 +1694,7 @@ QDF_STATUS wma_process_roaming_config(tp_wma_handle wma_handle,
if (roam_req->EmptyRefreshScanPeriod > 0) {
qdf_status =
wma_roam_scan_offload_scan_period(wma_handle,
- roam_req->EmptyRefreshScanPeriod,
- roam_req->EmptyRefreshScanPeriod * 3,
- roam_req->sessionId);
+ roam_req);
if (qdf_status != QDF_STATUS_SUCCESS)
break;
@@ -1977,10 +1996,7 @@ QDF_STATUS wma_process_roaming_config(tp_wma_handle wma_handle,
if (roam_req->EmptyRefreshScanPeriod > 0) {
qdf_status = wma_roam_scan_offload_scan_period(
- wma_handle,
- roam_req->EmptyRefreshScanPeriod,
- roam_req->EmptyRefreshScanPeriod * 3,
- roam_req->sessionId);
+ wma_handle, roam_req);
if (qdf_status != QDF_STATUS_SUCCESS)
break;