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
This commit is contained in:
Pragaspathi Thilagaraj
2019-04-12 02:23:50 +05:30
committed by nshrivas
parent ed23c6ff1e
commit 2b8ea35e71
9 changed files with 447 additions and 25 deletions

View File

@@ -1516,6 +1516,10 @@ mlme_init_bss_load_trigger_params(struct wlan_objmgr_psoc *psoc,
cfg_get(psoc, CFG_ENABLE_BSS_LOAD_TRIGGERED_ROAM); cfg_get(psoc, CFG_ENABLE_BSS_LOAD_TRIGGERED_ROAM);
bss_load_trig->threshold = cfg_get(psoc, CFG_BSS_LOAD_THRESHOLD); 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->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, 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 = lfr->roaming_scan_policy =
cfg_get(psoc, CFG_ROAM_SCAN_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_roam_offload_cfg(psoc, lfr);
mlme_init_ese_cfg(psoc, lfr); mlme_init_ese_cfg(psoc, lfr);
mlme_init_bss_load_trigger_params(psoc, &lfr->bss_load_trig); 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 = btm->disassoc_timer_threshold =
cfg_get(psoc, CFG_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_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_mwc_cfg(psoc, &mlme_cfg->mwc);
mlme_init_reg_cfg(psoc, &mlme_cfg->reg); mlme_init_reg_cfg(psoc, &mlme_cfg->reg);
mlme_init_btm_cfg(psoc, &mlme_cfg->btm); mlme_init_btm_cfg(psoc, &mlme_cfg->btm);
mlme_init_roam_score_config(psoc, mlme_cfg);
return status; return status;
} }

View File

@@ -269,6 +269,33 @@
CFG_VALUE_OR_DEFAULT, \ CFG_VALUE_OR_DEFAULT, \
"btm query with candidate list bitmask") "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 \ #define CFG_BTM_ALL \
CFG(CFG_PREFER_BTM_QUERY) \ CFG(CFG_PREFER_BTM_QUERY) \
CFG(CFG_ENABLE_BTM_ABRIDGE) \ CFG(CFG_ENABLE_BTM_ABRIDGE) \
@@ -278,6 +305,7 @@
CFG(CFG_BTM_STICKY_TIME) \ CFG(CFG_BTM_STICKY_TIME) \
CFG(CFG_BTM_VALIDITY_TIMER) \ CFG(CFG_BTM_VALIDITY_TIMER) \
CFG(CFG_BTM_DISASSOC_TIMER_THRESHOLD) \ 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_ */ #endif /* CFG_MLME_BTM_H_ */

View File

@@ -1893,6 +1893,62 @@
CFG_VALUE_OR_DEFAULT, \ CFG_VALUE_OR_DEFAULT, \
"bss load sampling time") "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> * <ini>
* ho_delay_for_rx - Delay hand-off (in msec) by this duration to receive * ho_delay_for_rx - Delay hand-off (in msec) by this duration to receive
@@ -2353,6 +2409,103 @@
0, \ 0, \
"Config roam scan policy") "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 \ #define CFG_LFR_ALL \
CFG(CFG_LFR_MAWC_ROAM_ENABLED) \ CFG(CFG_LFR_MAWC_ROAM_ENABLED) \
CFG(CFG_LFR_MAWC_ROAM_TRAFFIC_THRESHOLD) \ CFG(CFG_LFR_MAWC_ROAM_TRAFFIC_THRESHOLD) \
@@ -2431,6 +2584,11 @@
CFG(CFG_LFR_ROAM_FT_OPEN_ENABLE) \ CFG(CFG_LFR_ROAM_FT_OPEN_ENABLE) \
CFG(CFG_LFR_ROAM_FORCE_RSSI_TRIGGER) \ CFG(CFG_LFR_ROAM_FORCE_RSSI_TRIGGER) \
CFG(CFG_ROAM_SCAN_SCAN_POLICY) \ 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 \ ROAM_OFFLOAD_ALL \
LFR_ESE_ALL \ LFR_ESE_ALL \
LFR_SUBNET_DETECTION_ALL LFR_SUBNET_DETECTION_ALL

View File

@@ -1065,12 +1065,134 @@
* @Min: 0 * @Min: 0
* @Max: 1 * @Max: 1
* @Default: 0 * @Default: 0
*
* Supported Feature: Power save
*
* Usage: Internal
*
* </cfg>
*/ */
#define CFG_APSD_ENABLED CFG_BOOL( \ #define CFG_APSD_ENABLED CFG_BOOL( \
"apsd_enabled", \ "apsd_enabled", \
0, \ 0, \
"Enable APSD") "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 \ #define CFG_SCORING_ALL \
CFG(CFG_SCORING_RSSI_WEIGHTAGE) \ CFG(CFG_SCORING_RSSI_WEIGHTAGE) \
CFG(CFG_SCORING_HT_CAPS_WEIGHTAGE) \ CFG(CFG_SCORING_HT_CAPS_WEIGHTAGE) \
@@ -1107,6 +1229,10 @@
CFG(CFG_ROAM_TRIGGER_BITMAP) \ CFG(CFG_ROAM_TRIGGER_BITMAP) \
CFG(CFG_ROAM_SCORE_DELTA) \ CFG(CFG_ROAM_SCORE_DELTA) \
CFG(CFG_ENABLE_SCORING_FOR_ROAM) \ 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 */ #endif /* __CFG_MLME_SCORING_H */

View File

@@ -1248,11 +1248,19 @@ enum roaming_dfs_channel_type {
* @threshold: Bss load threshold value above which roaming should start * @threshold: Bss load threshold value above which roaming should start
* @sample_time: Time duration in milliseconds for which the bss load value * @sample_time: Time duration in milliseconds for which the bss load value
* should be monitored * 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 { struct bss_load_trigger {
bool enabled; bool enabled;
uint32_t threshold; uint32_t threshold;
uint32_t sample_time; 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 * @enable_ftopen: Enable/disable FT open feature
* @roam_force_rssi_trigger: Force RSSI trigger or not * @roam_force_rssi_trigger: Force RSSI trigger or not
* @roaming_scan_policy: Config roaming scan policy in fw * @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 { struct wlan_mlme_lfr_cfg {
bool mawc_roam_enabled; bool mawc_roam_enabled;
@@ -1438,6 +1452,9 @@ struct wlan_mlme_lfr_cfg {
bool roam_force_rssi_trigger; bool roam_force_rssi_trigger;
struct bss_load_trigger bss_load_trig; struct bss_load_trigger bss_load_trig;
bool roaming_scan_policy; 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 * not be triggered
* @btm_query_bitmask: Bitmask to send BTM query with candidate list on * @btm_query_bitmask: Bitmask to send BTM query with candidate list on
* various roam * 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 { struct wlan_mlme_btm {
bool prefer_btm_query; bool prefer_btm_query;
@@ -1894,6 +1913,7 @@ struct wlan_mlme_btm {
uint32_t rct_validity_timer; uint32_t rct_validity_timer;
uint32_t disassoc_timer_threshold; uint32_t disassoc_timer_threshold;
uint32_t btm_query_bitmask; 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 * @mwc: MWC related CFG items
* @dot11_mode: dot11 mode supported * @dot11_mode: dot11 mode supported
* @reg: REG related CFG itmes * @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_cfg {
struct wlan_mlme_chainmask chainmask_cfg; struct wlan_mlme_chainmask chainmask_cfg;
@@ -2077,6 +2100,8 @@ struct wlan_mlme_cfg {
struct wlan_mlme_mwc mwc; struct wlan_mlme_mwc mwc;
struct wlan_mlme_dot11_mode dot11_mode; struct wlan_mlme_dot11_mode dot11_mode;
struct wlan_mlme_reg reg; 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 #endif

View File

@@ -2269,6 +2269,7 @@ struct roam_offload_scan_req {
uint32_t btm_sticky_time; uint32_t btm_sticky_time;
uint32_t rct_validity_timer; uint32_t rct_validity_timer;
uint32_t disassoc_timer_threshold; uint32_t disassoc_timer_threshold;
uint32_t btm_trig_min_candidate_score;
struct wmi_11k_offload_params offload_11k_params; struct wmi_11k_offload_params offload_11k_params;
uint32_t ho_delay_for_rx; uint32_t ho_delay_for_rx;
uint32_t roam_preauth_retry_count; uint32_t roam_preauth_retry_count;
@@ -2280,7 +2281,12 @@ struct roam_offload_scan_req {
bool bss_load_trig_enabled; bool bss_load_trig_enabled;
struct wmi_bss_load_config bss_load_config; struct wmi_bss_load_config bss_load_config;
bool roaming_scan_policy; 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; 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 { struct roam_offload_scan_rsp {

View File

@@ -17732,6 +17732,10 @@ csr_update_roam_scan_offload_request(struct mac_context *mac_ctx,
mac_ctx->mlme_cfg->lfr.bss_load_trig.threshold; mac_ctx->mlme_cfg->lfr.bss_load_trig.threshold;
req_buf->bss_load_config.bss_load_sample_time = req_buf->bss_load_config.bss_load_sample_time =
mac_ctx->mlme_cfg->lfr.bss_load_trig.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; 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; roam_info->cfgParams.maxChannelScanTime;
req_buf->EmptyRefreshScanPeriod = req_buf->EmptyRefreshScanPeriod =
roam_info->cfgParams.emptyScanRefreshPeriod; 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 = req_buf->RoamBmissFirstBcnt =
roam_info->cfgParams.nRoamBmissFirstBcnt; roam_info->cfgParams.nRoamBmissFirstBcnt;
req_buf->RoamBmissFinalBcnt = 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_ap_rssi_threshold,
req_buf->mawc_roam_params.mawc_roam_rssi_high_adjust, req_buf->mawc_roam_params.mawc_roam_rssi_high_adjust,
req_buf->mawc_roam_params.mawc_roam_rssi_low_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 #ifdef FEATURE_WLAN_ESE
req_buf->IsESEAssoc = req_buf->IsESEAssoc =
csr_roam_is_ese_assoc(mac_ctx, session_id) && 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; mac_ctx->mlme_cfg->btm.disassoc_timer_threshold;
req_buf->btm_query_bitmask = req_buf->btm_query_bitmask =
mac_ctx->mlme_cfg->btm.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); csr_update_roam_scan_offload_request(mac_ctx, req_buf, session);

View File

@@ -252,10 +252,9 @@ QDF_STATUS
wma_roam_scan_offload_rssi_thresh(tp_wma_handle wma_handle, wma_roam_scan_offload_rssi_thresh(tp_wma_handle wma_handle,
struct roam_offload_scan_req *roam_req); struct roam_offload_scan_req *roam_req);
QDF_STATUS wma_roam_scan_offload_scan_period(tp_wma_handle wma_handle, QDF_STATUS
uint32_t scan_period, wma_roam_scan_offload_scan_period(tp_wma_handle wma_handle,
uint32_t scan_age, struct roam_offload_scan_req *roam_req);
uint32_t vdev_id);
QDF_STATUS wma_roam_scan_offload_rssi_change(tp_wma_handle wma_handle, QDF_STATUS wma_roam_scan_offload_rssi_change(tp_wma_handle wma_handle,
uint32_t vdev_id, uint32_t vdev_id,

View File

@@ -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_roam_scan_offload_scan_period() - set roam offload scan period
* @wma_handle: wma handle * @wma_handle: wma handle
* @scan_period: scan period * @roam_req: Pointer to roam_offload_scan_req
* @scan_age: scan age
* @vdev_id: vdev id
* *
* Send WMI_ROAM_SCAN_PERIOD parameters to fw. * Send WMI_ROAM_SCAN_PERIOD parameters to fw.
* *
* Return: QDF status * Return: QDF status
*/ */
QDF_STATUS wma_roam_scan_offload_scan_period(tp_wma_handle wma_handle, QDF_STATUS
uint32_t scan_period, wma_roam_scan_offload_scan_period(tp_wma_handle wma_handle,
uint32_t scan_age, struct roam_offload_scan_req *roam_req)
uint32_t vdev_id)
{ {
uint8_t vdev_id;
struct roam_scan_period_params scan_period_params;
vdev_id = roam_req->sessionId;
if (!wma_is_vdev_valid(vdev_id)) { if (!wma_is_vdev_valid(vdev_id)) {
WMA_LOGE("%s: Invalid vdev id:%d", __func__, vdev_id); WMA_LOGE("%s: Invalid vdev id:%d", __func__, vdev_id);
return QDF_STATUS_E_FAILURE; 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, return wmi_unified_roam_scan_offload_scan_period(wma_handle->wmi_handle,
scan_period, scan_age, &scan_period_params);
vdev_id);
} }
/** /**
@@ -1206,6 +1216,16 @@ static QDF_STATUS wma_roam_scan_offload_ap_profile(tp_wma_handle wma_handle,
WMA_NOISE_FLOOR_DBM_DEFAULT; WMA_NOISE_FLOOR_DBM_DEFAULT;
} }
ap_profile.param = roam_req->score_params; 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, return wmi_unified_send_roam_scan_offload_ap_cmd(wma_handle->wmi_handle,
&ap_profile); &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->btm_sticky_time = roam_req->btm_sticky_time;
params->disassoc_timer_threshold = roam_req->disassoc_timer_threshold; params->disassoc_timer_threshold = roam_req->disassoc_timer_threshold;
params->btm_query_bitmask = roam_req->btm_query_bitmask; 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, __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); status = wmi_unified_send_btm_config(wma_handle->wmi_handle, params);
qdf_mem_free(params); qdf_mem_free(params);
return status; return status;
} }
@@ -1673,9 +1694,7 @@ QDF_STATUS wma_process_roaming_config(tp_wma_handle wma_handle,
if (roam_req->EmptyRefreshScanPeriod > 0) { if (roam_req->EmptyRefreshScanPeriod > 0) {
qdf_status = qdf_status =
wma_roam_scan_offload_scan_period(wma_handle, wma_roam_scan_offload_scan_period(wma_handle,
roam_req->EmptyRefreshScanPeriod, roam_req);
roam_req->EmptyRefreshScanPeriod * 3,
roam_req->sessionId);
if (qdf_status != QDF_STATUS_SUCCESS) if (qdf_status != QDF_STATUS_SUCCESS)
break; break;
@@ -1977,10 +1996,7 @@ QDF_STATUS wma_process_roaming_config(tp_wma_handle wma_handle,
if (roam_req->EmptyRefreshScanPeriod > 0) { if (roam_req->EmptyRefreshScanPeriod > 0) {
qdf_status = wma_roam_scan_offload_scan_period( qdf_status = wma_roam_scan_offload_scan_period(
wma_handle, wma_handle, roam_req);
roam_req->EmptyRefreshScanPeriod,
roam_req->EmptyRefreshScanPeriod * 3,
roam_req->sessionId);
if (qdf_status != QDF_STATUS_SUCCESS) if (qdf_status != QDF_STATUS_SUCCESS)
break; break;