qcacld-3.0: Add 3 ini for data rssi check when roaming

3 ini:
roam_data_rssi_threshold_triggers
roam_data_rssi_threshold
rx_data_inactivity_time
If there's rx activity during latest rx_data_inactivity_time
and avg of data_rssi is better than roam_data_rssi_threshold, then
suppress roaming triggered by roam_data_rssi_threshold_triggers: low
RSSI or bg scan.

Change-Id: I5b41c4119e61392b50e52ab8ccb8650e5758f3b3
CRs-Fixed: 2768053
This commit is contained in:
Jianmin Zhu 2020-09-03 00:20:12 +08:00 committed by snandini
parent 233ac1b475
commit e7c9718446
11 changed files with 204 additions and 6 deletions

View File

@ -1639,6 +1639,12 @@ static void mlme_init_lfr_cfg(struct wlan_objmgr_psoc *psoc,
cfg_get(psoc, CFG_LFR_ROAM_BG_SCAN_CLIENT_BITMAP);
lfr->roam_bg_scan_bad_rssi_offset_2g =
cfg_get(psoc, CFG_LFR_ROAM_BG_SCAN_BAD_RSSI_OFFSET_2G);
lfr->roam_data_rssi_threshold_triggers =
cfg_get(psoc, CFG_ROAM_DATA_RSSI_THRESHOLD_TRIGGERS);
lfr->roam_data_rssi_threshold =
cfg_get(psoc, CFG_ROAM_DATA_RSSI_THRESHOLD);
lfr->rx_data_inactivity_time =
cfg_get(psoc, CFG_RX_DATA_INACTIVITY_TIME);
lfr->adaptive_roamscan_dwell_mode =
cfg_get(psoc, CFG_LFR_ADAPTIVE_ROAMSCAN_DWELL_MODE);
lfr->per_roam_enable =

View File

@ -500,6 +500,93 @@
CFG_VALUE_OR_DEFAULT, \
"RSSI threshold offset for 2G to 5G roam")
/*
* <ini>
* roam_data_rssi_threshold_triggers - triggers of data rssi threshold for roam
* @Min: 0
* @Max: 0xffff
* @Default: 0
*
* If the DUT is connected to an AP with weak signal, during latest
* rx_data_inactivity_time, if there is no activity or avg of data_rssi is
* better than roam_data_rssi_threshold(-70dbM), then suppress roaming
* triggered by roam_data_rssi_threshold_triggers: low RSSI or bg scan.
* Triggers bitmap definition:
* ROAM_DATA_RSSI_FLAG_LOW_RSSI 1<<0
* ROAM_DATA_RSSI_FLAG_BACKGROUND 1<<1
*
* Related: None
*
* Supported Feature: Roaming
*
* Usage: External
*
* </ini>
*/
#define CFG_ROAM_DATA_RSSI_THRESHOLD_TRIGGERS CFG_INI_UINT( \
"roam_data_rssi_threshold_triggers", \
0, \
0xffff, \
0x3, \
CFG_VALUE_OR_DEFAULT, \
"Triggers of DATA RSSI threshold for roam")
/*
* <ini>
* roam_data_rssi_threshold - Data RSSI threshold for background roam
* @Min: -96
* @Max: 0
* @Default: -70
*
* If the DUT is connected to an AP with weak signal, during latest
* rx_data_inactivity_time, if there is no activity or avg of data_rssi is
* better than roam_data_rssi_threshold(-70dbM), then suppress roaming
* triggered by roam_data_rssi_threshold_triggers: low RSSI or bg scan.
*
* Related: None
*
* Supported Feature: Roaming
*
* Usage: External
*
* </ini>
*/
#define CFG_ROAM_DATA_RSSI_THRESHOLD CFG_INI_INT( \
"roam_data_rssi_threshold", \
-96, \
0, \
-70, \
CFG_VALUE_OR_DEFAULT, \
"DATA RSSI threshold for roam")
/*
* <ini>
* rx_data_inactivity_time - Duration to check data rssi
* @Min: 0
* @Max: 100000 ms
* @Default: 2000
*
* If the DUT is connected to an AP with weak signal, during latest
* rx_data_inactivity_time, if there is no activity or avg of data_rssi is
* better than roam_data_rssi_threshold(-70dbM), then suppress roaming
* triggered by roam_data_rssi_threshold_triggers: low RSSI or bg scan.
*
* Related: None
*
* Supported Feature: Roaming
*
* Usage: External
*
* </ini>
*/
#define CFG_RX_DATA_INACTIVITY_TIME CFG_INI_UINT( \
"rx_data_inactivity_time", \
0, \
100000, \
2000, \
CFG_VALUE_OR_DEFAULT, \
"Rx inactivity time to check data rssi")
/*
* <ini>
* roamscan_adaptive_dwell_mode - Sets dwell time adaptive mode
@ -2778,6 +2865,9 @@
CFG(CFG_LFR_ROAM_BG_SCAN_BAD_RSSI_THRESHOLD) \
CFG(CFG_LFR_ROAM_BG_SCAN_CLIENT_BITMAP) \
CFG(CFG_LFR_ROAM_BG_SCAN_BAD_RSSI_OFFSET_2G) \
CFG(CFG_ROAM_DATA_RSSI_THRESHOLD_TRIGGERS) \
CFG(CFG_ROAM_DATA_RSSI_THRESHOLD) \
CFG(CFG_RX_DATA_INACTIVITY_TIME) \
CFG(CFG_LFR_ADAPTIVE_ROAMSCAN_DWELL_MODE) \
CFG(CFG_LFR_PER_ROAM_ENABLE) \
CFG(CFG_LFR_PER_ROAM_CONFIG_HIGH_RATE_TH) \

View File

@ -1585,6 +1585,10 @@ struct fw_scan_channels {
* @roam_bg_scan_bad_rssi_threshold:RSSI threshold for background roam
* @roam_bg_scan_client_bitmap: Bitmap used to identify the scan clients
* @roam_bg_scan_bad_rssi_offset_2g:RSSI threshold offset for 2G to 5G roam
* @roam_data_rssi_threshold_triggers: triggers of bad data RSSI threshold to
* roam
* @roam_data_rssi_threshold: Bad data RSSI threshold to roam
* @rx_data_inactivity_time: Rx duration to check data RSSI
* @adaptive_roamscan_dwell_mode: Sets dwell time adaptive mode
* @per_roam_enable: To enabled/disable PER based roaming in FW
* @per_roam_config_high_rate_th: Rate at which PER based roam will stop
@ -1696,6 +1700,9 @@ struct wlan_mlme_lfr_cfg {
uint32_t roam_bg_scan_bad_rssi_threshold;
uint32_t roam_bg_scan_client_bitmap;
uint32_t roam_bg_scan_bad_rssi_offset_2g;
uint32_t roam_data_rssi_threshold_triggers;
int32_t roam_data_rssi_threshold;
uint32_t rx_data_inactivity_time;
uint32_t adaptive_roamscan_dwell_mode;
uint32_t per_roam_enable;
uint32_t per_roam_config_high_rate_th;

View File

@ -388,6 +388,7 @@ target_if_cm_roam_scan_offload_rssi_thresh(
req->rssi_thresh &= 0x000000ff;
req->hi_rssi_scan_rssi_ub -= NOISE_FLOOR_DBM_DEFAULT;
req->bg_scan_bad_rssi_thresh -= NOISE_FLOOR_DBM_DEFAULT;
req->roam_data_rssi_threshold -= NOISE_FLOOR_DBM_DEFAULT;
req->good_rssi_threshold -= NOISE_FLOOR_DBM_DEFAULT;
req->good_rssi_threshold &= 0x000000ff;
}
@ -466,6 +467,10 @@ target_if_cm_roam_scan_offload_rssi_thresh(
req->bg_scan_bad_rssi_thresh,
req->bg_scan_client_bitmap,
req->roam_bad_rssi_thresh_offset_2g);
target_if_debug("Roam data rssi triggers:0x%x, threshold:%d, rx time:%d",
req->roam_data_rssi_threshold_triggers,
req->roam_data_rssi_threshold,
req->rx_data_inactivity_time);
status = wmi_unified_roam_scan_offload_rssi_thresh_cmd(wmi_handle, req);
if (QDF_IS_STATUS_ERROR(status)) {

View File

@ -927,6 +927,10 @@ struct wlan_roam_scan_offload_params {
* @roam_bad_rssi_thresh_offset_2g: Offset from Bad RSSI threshold for 2G
* to 5G Roam
* @bg_scan_client_bitmap: Bitmap used to identify the client scans to snoop
* @roam_data_rssi_threshold_triggers: triggers of bad data RSSI threshold to
* roam
* @roam_data_rssi_threshold: Bad data RSSI threshold to roam
* @rx_data_inactivity_time: Rx duration to check data RSSI
*/
struct wlan_roam_offload_scan_rssi_params {
int8_t rssi_thresh;
@ -955,6 +959,9 @@ struct wlan_roam_offload_scan_rssi_params {
int8_t bg_scan_bad_rssi_thresh;
uint8_t roam_bad_rssi_thresh_offset_2g;
uint32_t bg_scan_client_bitmap;
uint32_t roam_data_rssi_threshold_triggers;
int32_t roam_data_rssi_threshold;
uint32_t rx_data_inactivity_time;
};
/**

View File

@ -95,6 +95,10 @@ struct rssi_monitor_param {
* @roam_bad_rssi_thresh_offset_2g: Offset from Bad RSSI threshold for 2G
* to 5G Roam
* @bg_scan_client_bitmap: Bitmap used to identify the client scans to snoop
* @roam_data_rssi_threshold_triggers: triggers of bad data RSSI threshold to
* roam
* @roam_data_rssi_threshold: Bad data RSSI threshold to roam
* @rx_data_inactivity_time: Rx duration to check data RSSI
* @flags: Flags for Background Roaming
* Bit 0 : BG roaming enabled when we connect to 2G AP only and roaming
* to 5G AP only.
@ -125,6 +129,9 @@ struct roam_offload_scan_rssi_params {
int8_t bg_scan_bad_rssi_thresh;
uint8_t roam_bad_rssi_thresh_offset_2g;
uint32_t bg_scan_client_bitmap;
uint32_t roam_data_rssi_threshold_triggers;
int32_t roam_data_rssi_threshold;
uint32_t rx_data_inactivity_time;
uint32_t flags;
};

View File

@ -179,6 +179,7 @@ static QDF_STATUS send_roam_scan_offload_rssi_thresh_cmd_tlv(
wmi_roam_earlystop_rssi_thres_param *early_stop_thresholds = NULL;
wmi_roam_dense_thres_param *dense_thresholds = NULL;
wmi_roam_bg_scan_roaming_param *bg_scan_params = NULL;
wmi_roam_data_rssi_roaming_param *data_rssi_param = NULL;
len = sizeof(wmi_roam_scan_rssi_threshold_fixed_param);
len += WMI_TLV_HDR_SIZE; /* TLV for ext_thresholds*/
@ -189,6 +190,8 @@ static QDF_STATUS send_roam_scan_offload_rssi_thresh_cmd_tlv(
len += sizeof(wmi_roam_dense_thres_param);
len += WMI_TLV_HDR_SIZE; /* TLV for BG Scan*/
len += sizeof(wmi_roam_bg_scan_roaming_param);
len += WMI_TLV_HDR_SIZE; /* TLV for data RSSI*/
len += sizeof(wmi_roam_data_rssi_roaming_param);
buf = wmi_buf_alloc(wmi_handle, len);
if (!buf)
return QDF_STATUS_E_NOMEM;
@ -289,6 +292,26 @@ static QDF_STATUS send_roam_scan_offload_rssi_thresh_cmd_tlv(
WMITLV_GET_STRUCT_TLVLEN
(wmi_roam_bg_scan_roaming_param));
buf_ptr += sizeof(wmi_roam_bg_scan_roaming_param);
WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC,
sizeof(wmi_roam_data_rssi_roaming_param));
buf_ptr += WMI_TLV_HDR_SIZE;
data_rssi_param = (wmi_roam_data_rssi_roaming_param *)buf_ptr;
data_rssi_param->flags =
roam_req->roam_data_rssi_threshold_triggers;
data_rssi_param->roam_data_rssi_thres =
roam_req->roam_data_rssi_threshold;
data_rssi_param->rx_inactivity_ms =
roam_req->rx_data_inactivity_time;
WMITLV_SET_HDR(&data_rssi_param->tlv_header,
WMITLV_TAG_STRUC_wmi_roam_data_rssi_roaming_param,
WMITLV_GET_STRUCT_TLVLEN
(wmi_roam_data_rssi_roaming_param));
WMI_LOGD("Data rssi threshold: %d, triggers: 0x%x, rx time: %d",
data_rssi_param->roam_data_rssi_thres,
data_rssi_param->flags,
data_rssi_param->rx_inactivity_ms);
wmi_mtrace(WMI_ROAM_SCAN_RSSI_THRESHOLD, NO_SESSION, 0);
status = wmi_unified_cmd_send(wmi_handle, buf,
len, WMI_ROAM_SCAN_RSSI_THRESHOLD);
@ -383,6 +406,7 @@ static QDF_STATUS send_roam_scan_offload_rssi_thresh_cmd_tlv(
wmi_roam_earlystop_rssi_thres_param *early_stop_thresholds = NULL;
wmi_roam_dense_thres_param *dense_thresholds = NULL;
wmi_roam_bg_scan_roaming_param *bg_scan_params = NULL;
wmi_roam_data_rssi_roaming_param *data_rssi_param = NULL;
len = sizeof(wmi_roam_scan_rssi_threshold_fixed_param);
len += WMI_TLV_HDR_SIZE; /* TLV for ext_thresholds*/
@ -489,6 +513,22 @@ static QDF_STATUS send_roam_scan_offload_rssi_thresh_cmd_tlv(
WMITLV_GET_STRUCT_TLVLEN
(wmi_roam_bg_scan_roaming_param));
buf_ptr += sizeof(wmi_roam_bg_scan_roaming_param);
WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC,
sizeof(wmi_roam_data_rssi_roaming_param));
buf_ptr += WMI_TLV_HDR_SIZE;
data_rssi_param = (wmi_roam_data_rssi_roaming_param *)buf_ptr;
data_rssi_param->flags =
roam_req->roam_data_rssi_threshold_triggers;
data_rssi_param->roam_data_rssi_thres =
roam_req->roam_data_rssi_threshold;
data_rssi_param->rx_inactivity_ms =
roam_req->rx_data_inactivity_time;
WMITLV_SET_HDR(&data_rssi_param->tlv_header,
WMITLV_TAG_STRUC_wmi_roam_data_rssi_roaming_param,
WMITLV_GET_STRUCT_TLVLEN
(wmi_roam_data_rssi_roaming_param));
wmi_mtrace(WMI_ROAM_SCAN_RSSI_THRESHOLD, NO_SESSION, 0);
status = wmi_unified_cmd_send(wmi_handle, buf,
len, WMI_ROAM_SCAN_RSSI_THRESHOLD);

View File

@ -2148,6 +2148,9 @@ typedef enum {
* @bg_scan_bad_rssi_thresh: Bad RSSI threshold to perform bg scan.
* @bad_rssi_thresh_offset_2g: Offset from Bad RSSI threshold for 2G to 5G Roam
* @bg_scan_client_bitmap: Bitmap to identify the client scans to snoop.
* @roam_data_rssi_threshold_triggers: Bad data RSSI threshold to roam
* @roam_data_rssi_threshold: Bad data RSSI threshold to roam
* @rx_data_inactivity_time: rx duration to check data RSSI
*
* This structure holds all the key parameters related to
* initial connection and also roaming connections.
@ -2181,6 +2184,9 @@ struct roam_ext_params {
int8_t bg_scan_bad_rssi_thresh;
uint8_t roam_bad_rssi_thresh_offset_2g;
uint32_t bg_scan_client_bitmap;
uint32_t roam_data_rssi_threshold_triggers;
int32_t roam_data_rssi_threshold;
uint32_t rx_data_inactivity_time;
};
/**

View File

@ -901,6 +901,9 @@ struct csr_config_params {
uint32_t roam_dense_min_aps;
int8_t roam_bg_scan_bad_rssi_thresh;
uint8_t roam_bad_rssi_thresh_offset_2g;
uint32_t roam_data_rssi_threshold_triggers;
int32_t roam_data_rssi_threshold;
uint32_t rx_data_inactivity_time;
struct csr_sta_roam_policy_params sta_roam_policy_params;
enum force_1x1_type is_force_1x1;
uint32_t offload_11k_enable_bitmask;

View File

@ -2775,6 +2775,12 @@ QDF_STATUS csr_get_config_param(struct mac_context *mac,
cfg_params->roam_params.bg_scan_bad_rssi_thresh;
pParam->roam_bad_rssi_thresh_offset_2g =
cfg_params->roam_params.roam_bad_rssi_thresh_offset_2g;
pParam->roam_data_rssi_threshold_triggers =
cfg_params->roam_params.roam_data_rssi_threshold_triggers;
pParam->roam_data_rssi_threshold =
cfg_params->roam_params.roam_data_rssi_threshold;
pParam->rx_data_inactivity_time =
cfg_params->roam_params.rx_data_inactivity_time;
pParam->conc_custom_rule1 = cfg_params->conc_custom_rule1;
pParam->conc_custom_rule2 = cfg_params->conc_custom_rule2;
@ -19429,6 +19435,12 @@ csr_roam_offload_scan(struct mac_context *mac_ctx, uint8_t session_id,
mac_ctx->mlme_cfg->lfr.roam_bg_scan_client_bitmap;
roam_params_dst->roam_bad_rssi_thresh_offset_2g =
mac_ctx->mlme_cfg->lfr.roam_bg_scan_bad_rssi_offset_2g;
roam_params_dst->roam_data_rssi_threshold_triggers =
mac_ctx->mlme_cfg->lfr.roam_data_rssi_threshold_triggers;
roam_params_dst->roam_data_rssi_threshold =
mac_ctx->mlme_cfg->lfr.roam_data_rssi_threshold;
roam_params_dst->rx_data_inactivity_time =
mac_ctx->mlme_cfg->lfr.rx_data_inactivity_time;
roam_params_dst->raise_rssi_thresh_5g =
mac_ctx->mlme_cfg->lfr.rssi_boost_threshold_5g;
roam_params_dst->drop_rssi_thresh_5g =
@ -19748,11 +19760,16 @@ csr_cm_roam_scan_offload_rssi_thresh(struct mac_context *mac_ctx,
params->bg_scan_bad_rssi_thresh =
mac_ctx->mlme_cfg->lfr.roam_bg_scan_bad_rssi_threshold;
params->bg_scan_client_bitmap =
mac_ctx->mlme_cfg->lfr.roam_bg_scan_client_bitmap;
params->roam_bad_rssi_thresh_offset_2g =
mac_ctx->mlme_cfg->lfr.roam_bg_scan_bad_rssi_offset_2g;
params->roam_data_rssi_threshold_triggers =
mac_ctx->mlme_cfg->lfr.roam_data_rssi_threshold_triggers;
params->roam_data_rssi_threshold =
mac_ctx->mlme_cfg->lfr.roam_data_rssi_threshold;
params->rx_data_inactivity_time =
mac_ctx->mlme_cfg->lfr.rx_data_inactivity_time;
params->drop_rssi_thresh_5g =
mac_ctx->mlme_cfg->lfr.rssi_penalize_threshold_5g;

View File

@ -586,13 +586,19 @@ wma_roam_scan_offload_rssi_thresh(tp_wma_handle wma_handle,
params.traffic_threshold =
roam_params->traffic_threshold;
params.initial_dense_status = roam_params->initial_dense_status;
if (db2dbm_enabled)
if (db2dbm_enabled) {
params.bg_scan_bad_rssi_thresh =
roam_params->bg_scan_bad_rssi_thresh;
else
params.bg_scan_bad_rssi_thresh =
roam_params->bg_scan_bad_rssi_thresh -
WMA_NOISE_FLOOR_DBM_DEFAULT;
params.roam_data_rssi_threshold =
roam_params->roam_data_rssi_threshold;
} else {
params.roam_data_rssi_threshold =
roam_params->roam_data_rssi_threshold -
WMA_NOISE_FLOOR_DBM_DEFAULT;
params.roam_data_rssi_threshold =
roam_params->roam_data_rssi_threshold -
WMA_NOISE_FLOOR_DBM_DEFAULT;
}
params.bg_scan_client_bitmap = roam_params->bg_scan_client_bitmap;
params.roam_bad_rssi_thresh_offset_2g =
@ -706,6 +712,10 @@ wma_roam_scan_offload_rssi_thresh(tp_wma_handle wma_handle,
roam_params->bg_scan_bad_rssi_thresh,
roam_params->bg_scan_client_bitmap,
roam_params->roam_bad_rssi_thresh_offset_2g);
wma_debug("Roam data rssi triggers:0x%x, threshold:%d, rx time:%d",
roam_params->roam_data_rssi_threshold_triggers,
roam_params->roam_data_rssi_threshold,
roam_params->rx_data_inactivity_time);
return status;
}