瀏覽代碼

qcacld-3.0: Introduce new INI to configure roam trigger parameters

Add new ini to configure various roam trigger parameters:
1. "minimum_btm_candidate_score"
   Consider the AP as roam candidate only if its score is greater
   than minimum_btm_candidate_score. This value will be sent over
   the WMI_BTM_OFFLOAD_CONFIG command.

2. "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_count.

3. "roam_inactive_data_packet_count"
   Maximum allowed data packets count during
   roam_scan_inactivity_time.

4. "roam_scan_period_after_inactivity"
   Roam scan period in ms after device was in inactive state.

5. "btm_roam_score_delta"
   Roam scan delta value for btm triggered roam scan. This value
   will be sent to firmware over the WMI_ROAM_AP_PROFILE wmi
   command.

6. "idle_roam_score_delta"
   Roam scan delta value for Idle roam scan trigger reason. This
   value will be sent to firmware over the WMI_ROAM_AP_PROFILE
   wmi commnd in the roam_score_delta_param_list tlv.

7. "disconnect_roam_trigger_min_rssi"
   Candidate minimum rssi value for disconnect roam trigger. This
   value will be sent to firmware over the WMI_ROAM_AP_PROFILE
   wmi commnd in the roam_score_min_rssi_param_list tlv.

8. "beacon_miss_roam_min_rssi"
   Candidate minimum rssi value for BTM triggered roam. This
   value will be sent to firmware over the WMI_ROAM_AP_PROFILE
   wmi commnd in the roam_score_min_rssi_param_list tlv.

9. "bss_load_trigger_5g_rssi_threshold"
   If connected AP is in 5GHz band, then consider bss load roam
   triggered only if load % > bss_load_threshold && connected AP
   rssi is worse than bss_load_trigger_5g_rssi_threshold.

10. "bss_load_trigger_2g_rssi_threshold"
   If connected AP is in 2GHz band, then consider bss load roam
   triggered only if load % > bss_load_threshold && connected AP
   rssi is worse than bss_load_trigger_2g_rssi_threshold.

Change-Id: Ib026251a8ec403f4376a16a91ff1b5d969336816
CRs-Fixed: 2434922
Pragaspathi Thilagaraj 6 年之前
父節點
當前提交
2b8ea35e71

+ 41 - 0
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;
 }

+ 29 - 1
components/mlme/dispatcher/inc/cfg_mlme_btm.h

@@ -269,6 +269,33 @@
 			CFG_VALUE_OR_DEFAULT, \
 			"btm query with candidate list bitmask")
 
+/*
+ * <ini>
+ * 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
+ *
+ * </ini>
+ */
+#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_ */

+ 158 - 0
components/mlme/dispatcher/inc/cfg_mlme_lfr.h

@@ -1893,6 +1893,62 @@
 			CFG_VALUE_OR_DEFAULT, \
 			"bss load sampling time")
 
+/*
+ * <ini>
+ * 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
+ *
+ * </ini>
+ */
+#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")
+
+/*
+ * <ini>
+ * 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
+ *
+ * </ini>
+ */
+#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")
+
 /*
  * <ini>
  * ho_delay_for_rx - Delay hand-off (in msec) by this duration to receive
@@ -2353,6 +2409,103 @@
 		0, \
 		"Config roam scan policy")
 
+/*
+ * <ini>
+ * 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
+ *
+ * </ini>
+ */
+#define CFG_ROAM_SCAN_INACTIVITY_TIME CFG_INI_UINT( \
+	"roam_scan_inactivity_time", \
+	0, \
+	0xFFFFFFFF, \
+	0, \
+	CFG_VALUE_OR_DEFAULT, \
+	"Device inactivity monitoring time")
+
+/*
+ * <ini>
+ * 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
+ *
+ * </ini>
+ */
+#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")
+
+/*
+ * <ini>
+ * 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
+ *
+ * </ini>
+ */
+#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

+ 127 - 1
components/mlme/dispatcher/inc/cfg_mlme_scoring.h

@@ -1065,12 +1065,134 @@
  * @Min: 0
  * @Max: 1
  * @Default: 0
+ *
+ * Supported Feature: Power save
+ *
+ * Usage: Internal
+ *
+ * </cfg>
  */
 #define CFG_APSD_ENABLED CFG_BOOL( \
 		"apsd_enabled", \
 		0, \
 		"Enable APSD")
 
+/*
+ * <ini>
+ * 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
+ *
+ * </ini>
+ */
+#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")
+
+/*
+ * <ini>
+ * 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
+ *
+ * </ini>
+ */
+#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")
+
+/*
+ * <ini>
+ * 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
+ *
+ * </ini>
+ */
+#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")
+
+/*
+ * <ini>
+ * 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
+ *
+ * </ini>
+ */
+#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 */

+ 25 - 0
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

+ 6 - 0
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 {

+ 23 - 0
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);
 

+ 3 - 4
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,

+ 35 - 19
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;