qcacld-3.0: Add a new INI bg_rssi_threshold

FW triggers roaming based on the RSSI score of AP(s) available
after background scan. Currently, the host does not configure
the value of bg_rssi_threshold RSSI. This results in ping-pong
roaming after background scan, even though candidate AP
RSSI is not better than 5dbm than connected AP.

Fix is to configure the value of bg_rssi_threshold via new
INI "bg_rssi_threshold" and configuring default value of
INI as 5dB.

Min: 0
Max: 100
Default: 5

Change-Id: Ib710e294c8b33ff4903d41453e3b55f02daf53ae
CRs-Fixed: 2763962
This commit is contained in:
Abhinav Kumar
2020-08-27 10:05:06 +05:30
committed by snandini
parent e0d7d0e692
commit 7ac893f2af
11 changed files with 49 additions and 1 deletions

View File

@@ -1696,6 +1696,7 @@ static void mlme_init_lfr_cfg(struct wlan_objmgr_psoc *psoc,
lfr->roam_preauth_retry_count =
cfg_get(psoc, CFG_LFR3_ROAM_PREAUTH_RETRY_COUNT);
lfr->roam_rssi_diff = cfg_get(psoc, CFG_LFR_ROAM_RSSI_DIFF);
lfr->bg_rssi_threshold = cfg_get(psoc, CFG_LFR_ROAM_BG_RSSI_TH);
lfr->roam_scan_offload_enabled =
cfg_get(psoc, CFG_LFR_ROAM_SCAN_OFFLOAD_ENABLED);
lfr->neighbor_scan_timer_period =

View File

@@ -1250,6 +1250,34 @@
CFG_VALUE_OR_DEFAULT, \
"Enable roam based on rssi")
/*
* <ini>
* bg_rssi_threshold - To set RSSI Threshold for BG scan roaming
* @Min: 0
* @Max: 100
* @Default: 5
*
* This INI is used to set the value of rssi threshold to trigger roaming
* after background scan. To trigger roam after bg scan, value of rssi of
* candidate AP should be higher by this threshold than the rssi of the
* currrently associated AP.
*
* Related: RoamRssiDiff
*
* Supported Feature: Roaming
*
* Usage: External
*
* </ini>
*/
#define CFG_LFR_ROAM_BG_RSSI_TH CFG_INI_UINT( \
"bg_rssi_threshold", \
0, \
100, \
5, \
CFG_VALUE_OR_DEFAULT, \
"Enable roam based on rssi after BG scan")
/*
* <ini>
* gWESModeEnabled - Enable WES mode
@@ -2893,6 +2921,7 @@
CFG(CFG_LFR_MAWC_FEATURE_ENABLED) \
CFG(CFG_LFR_FAST_TRANSITION_ENABLED) \
CFG(CFG_LFR_ROAM_RSSI_DIFF) \
CFG(CFG_LFR_ROAM_BG_RSSI_TH) \
CFG(CFG_LFR_ENABLE_WES_MODE) \
CFG(CFG_LFR_ROAM_SCAN_OFFLOAD_ENABLED) \
CFG(CFG_LFR_NEIGHBOR_SCAN_CHANNEL_LIST) \

View File

@@ -1724,6 +1724,7 @@ struct wlan_mlme_lfr_cfg {
uint32_t roam_preauth_retry_count;
uint32_t roam_preauth_no_ack_timeout;
uint8_t roam_rssi_diff;
uint8_t bg_rssi_threshold;
bool roam_scan_offload_enabled;
uint32_t neighbor_scan_timer_period;
uint32_t neighbor_scan_min_timer_period;

View File

@@ -186,6 +186,8 @@ struct wlan_roam_triggers {
* absolute RSSI threshold. Zero means no absolute minimum
* RSSI is required. units are the offset from the noise
* floor in dB
* @bg_rssi_threshold: Value of rssi threshold to trigger roaming
* after background scan.
*/
struct ap_profile {
uint32_t flags;
@@ -196,6 +198,7 @@ struct ap_profile {
uint32_t rsn_mcastcipherset;
uint32_t rsn_mcastmgmtcipherset;
uint32_t rssi_abs_thresh;
uint8_t bg_rssi_threshold;
};
/**

View File

@@ -2967,6 +2967,7 @@ send_roam_scan_offload_ap_profile_cmd_tlv(wmi_unified_t wmi_handle,
WMITLV_GET_STRUCT_TLVLEN(wmi_ap_profile));
profile->flags = ap_profile->profile.flags;
profile->rssi_threshold = ap_profile->profile.rssi_threshold;
profile->bg_rssi_threshold = ap_profile->profile.bg_rssi_threshold;
profile->ssid.ssid_len = ap_profile->profile.ssid.length;
qdf_mem_copy(profile->ssid.ssid, ap_profile->profile.ssid.ssid,
profile->ssid.ssid_len);
@@ -2977,8 +2978,9 @@ send_roam_scan_offload_ap_profile_cmd_tlv(wmi_unified_t wmi_handle,
ap_profile->profile.rsn_mcastmgmtcipherset;
profile->rssi_abs_thresh = ap_profile->profile.rssi_abs_thresh;
WMI_LOGD("AP PROFILE: flags %x rssi_thres:%d ssid:%.*s authmode %d uc cipher %d mc cipher %d mc mgmt cipher %d rssi abs thresh %d",
WMI_LOGD("AP PROFILE: flags %x rssi_thres:%d bg_rssi_thres:%d ssid:%.*s authmode %d uc cipher %d mc cipher %d mc mgmt cipher %d rssi abs thresh %d",
profile->flags, profile->rssi_threshold,
profile->bg_rssi_threshold,
profile->ssid.ssid_len, ap_profile->profile.ssid.ssid,
profile->rsn_authmode, profile->rsn_ucastcipherset,
profile->rsn_mcastcipherset, profile->rsn_mcastmgmtcipherset,

View File

@@ -2262,6 +2262,7 @@ struct roam_offload_scan_req {
uint8_t OpportunisticScanThresholdDiff;
uint8_t RoamRescanRssiDiff;
uint8_t RoamRssiDiff;
uint8_t bg_rssi_threshold;
struct rsn_caps rsn_caps;
int32_t rssi_abs_thresh;
uint8_t ChannelCacheType;

View File

@@ -68,6 +68,7 @@ typedef struct sCsrNeighborRoamCfgParams {
uint32_t full_roam_scan_period;
bool enable_scoring_for_roam;
uint8_t roam_rssi_diff;
uint8_t bg_rssi_threshold;
uint16_t roam_scan_home_away_time;
uint8_t roam_scan_n_probes;
uint32_t roam_scan_inactivity_time;

View File

@@ -7002,6 +7002,9 @@ sme_restore_default_roaming_params(struct mac_context *mac,
mac->mlme_cfg->lfr.neighbor_lookup_rssi_threshold;
roam_info->cfgParams.roam_rssi_diff =
mac->mlme_cfg->lfr.roam_rssi_diff;
roam_info->cfgParams.bg_rssi_threshold =
mac->mlme_cfg->lfr.bg_rssi_threshold;
roam_info->cfgParams.maxChannelScanTime =
mac->mlme_cfg->lfr.neighbor_scan_max_chan_time;
roam_info->cfgParams.roam_scan_home_away_time =

View File

@@ -17663,6 +17663,7 @@ csr_create_roam_scan_offload_request(struct mac_context *mac_ctx,
req_buf->RoamRescanRssiDiff =
roam_info->cfgParams.nRoamRescanRssiDiff;
req_buf->RoamRssiDiff = roam_info->cfgParams.roam_rssi_diff;
req_buf->bg_rssi_threshold = roam_info->cfgParams.bg_rssi_threshold;
req_buf->rssi_abs_thresh =
mac_ctx->mlme_cfg->lfr.roam_rssi_abs_threshold;
req_buf->reason = reason;
@@ -19945,6 +19946,8 @@ csr_cm_roam_scan_offload_ap_profile(struct mac_context *mac_ctx,
/* Group management cipher suite */
profile->rssi_threshold = roam_info->cfgParams.roam_rssi_diff;
profile->bg_rssi_threshold =
roam_info->cfgParams.bg_rssi_threshold;
/*
* rssi_diff which is updated via framework is equivalent to the
* INI RoamRssiDiff parameter and hence should be updated.

View File

@@ -1140,6 +1140,8 @@ QDF_STATUS csr_neighbor_roam_init(struct mac_context *mac, uint8_t sessionId)
mac->mlme_cfg->lfr.roam_scan_hi_rssi_ub;
pNeighborRoamInfo->cfgParams.roam_rssi_diff =
mac->mlme_cfg->lfr.roam_rssi_diff;
pNeighborRoamInfo->cfgParams.bg_rssi_threshold =
mac->mlme_cfg->lfr.bg_rssi_threshold;
qdf_zero_macaddr(&pNeighborRoamInfo->currAPbssid);
pNeighborRoamInfo->currentNeighborLookupThreshold =

View File

@@ -1065,6 +1065,7 @@ wma_roam_scan_fill_ap_profile(struct roam_offload_scan_req *roam_req,
profile->rsn_mcastcipherset = WMI_CIPHER_NONE;
profile->rsn_mcastmgmtcipherset = WMI_CIPHER_NONE;
profile->rssi_threshold = WMA_ROAM_RSSI_DIFF_DEFAULT;
profile->bg_rssi_threshold = WMA_ROAM_RSSI_DIFF_DEFAULT;
return;
}
@@ -1100,6 +1101,7 @@ wma_roam_scan_fill_ap_profile(struct roam_offload_scan_req *roam_req,
roam_req->ConnectedNetwork.gp_mgmt_cipher_suite);
profile->rssi_threshold = roam_req->RoamRssiDiff;
profile->bg_rssi_threshold = roam_req->bg_rssi_threshold;
if (roam_req->rssi_abs_thresh)
profile->rssi_abs_thresh = roam_req->rssi_abs_thresh;
#ifdef WLAN_FEATURE_11W