qcacld-3.0: Discard 5G candidates based on RSSI threshold
To discard 5G candidates based on RSSI threshold, Introduce a new INI "min_rssi_for_2g_to_5g_roam" to configure the RSSI for High RSSI Trigger. Min: -120 Max: 0 Default: -70 Change-Id: If4545296ef1b53d18b8ae4abf12d450f5e690240 CRs-Fixed: 2789017
This commit is contained in:
@@ -2147,6 +2147,12 @@ mlme_init_roam_score_config(struct wlan_objmgr_psoc *psoc,
|
|||||||
min_rssi_param->min_rssi =
|
min_rssi_param->min_rssi =
|
||||||
cfg_get(psoc, CFG_BMISS_ROAM_MIN_RSSI);
|
cfg_get(psoc, CFG_BMISS_ROAM_MIN_RSSI);
|
||||||
min_rssi_param->trigger_reason = ROAM_TRIGGER_REASON_BMISS;
|
min_rssi_param->trigger_reason = ROAM_TRIGGER_REASON_BMISS;
|
||||||
|
|
||||||
|
min_rssi_param = &mlme_cfg->trig_min_rssi[MIN_RSSI_2G_TO_5G_ROAM];
|
||||||
|
min_rssi_param->min_rssi =
|
||||||
|
cfg_get(psoc, CFG_2G_TO_5G_ROAM_MIN_RSSI);
|
||||||
|
min_rssi_param->trigger_reason = ROAM_TRIGGER_REASON_HIGH_RSSI;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -229,6 +229,33 @@
|
|||||||
CFG_VALUE_OR_DEFAULT, \
|
CFG_VALUE_OR_DEFAULT, \
|
||||||
"Minimum RSSI of candidate AP for Bmiss roam trigger")
|
"Minimum RSSI of candidate AP for Bmiss roam trigger")
|
||||||
|
|
||||||
|
/*
|
||||||
|
* <ini>
|
||||||
|
* min_rssi_for_2g_to_5g_roam - Candidate AP minimum RSSI for
|
||||||
|
* 2G to 5G roam trigger (in dBm)
|
||||||
|
* @Min: -120
|
||||||
|
* @Max: 0
|
||||||
|
* @Default: -70
|
||||||
|
*
|
||||||
|
* Minimum RSSI value of the candidate AP to consider it as candidate
|
||||||
|
* for 2G to 5G roam.
|
||||||
|
*
|
||||||
|
* Related: None
|
||||||
|
*
|
||||||
|
* Supported Feature: Roaming
|
||||||
|
*
|
||||||
|
* Usage: Internal/External
|
||||||
|
*
|
||||||
|
* </ini>
|
||||||
|
*/
|
||||||
|
#define CFG_2G_TO_5G_ROAM_MIN_RSSI CFG_INI_INT( \
|
||||||
|
"min_rssi_for_2g_to_5g_roam", \
|
||||||
|
-120, \
|
||||||
|
0, \
|
||||||
|
-70, \
|
||||||
|
CFG_VALUE_OR_DEFAULT, \
|
||||||
|
"Minimum RSSI of candidate AP for 2G to 5G roam trigger")
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* <ini>
|
* <ini>
|
||||||
* idle_roam_score_delta - Roam score delta value in percentage for idle roam.
|
* idle_roam_score_delta - Roam score delta value in percentage for idle roam.
|
||||||
@@ -323,6 +350,7 @@
|
|||||||
CFG(CFG_APSD_ENABLED) \
|
CFG(CFG_APSD_ENABLED) \
|
||||||
CFG(CFG_DISCONNECT_ROAM_TRIGGER_MIN_RSSI) \
|
CFG(CFG_DISCONNECT_ROAM_TRIGGER_MIN_RSSI) \
|
||||||
CFG(CFG_BMISS_ROAM_MIN_RSSI) \
|
CFG(CFG_BMISS_ROAM_MIN_RSSI) \
|
||||||
|
CFG(CFG_2G_TO_5G_ROAM_MIN_RSSI) \
|
||||||
CFG(CFG_IDLE_ROAM_SCORE_DELTA) \
|
CFG(CFG_IDLE_ROAM_SCORE_DELTA) \
|
||||||
CFG(CFG_BTM_ROAM_SCORE_DELTA) \
|
CFG(CFG_BTM_ROAM_SCORE_DELTA) \
|
||||||
CFG(CFG_VENDOR_ROAM_SCORE_ALGORITHM)
|
CFG(CFG_VENDOR_ROAM_SCORE_ALGORITHM)
|
||||||
|
@@ -2391,7 +2391,7 @@ struct wlan_mlme_cfg {
|
|||||||
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_score_delta trig_score_delta[NUM_OF_ROAM_TRIGGERS];
|
||||||
struct roam_trigger_min_rssi trig_min_rssi[NUM_OF_ROAM_TRIGGERS];
|
struct roam_trigger_min_rssi trig_min_rssi[NUM_OF_ROAM_MIN_RSSI];
|
||||||
struct wlan_mlme_ratemask ratemask_cfg;
|
struct wlan_mlme_ratemask ratemask_cfg;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -627,6 +627,12 @@ target_if_cm_roam_scan_offload_ap_profile(
|
|||||||
req->min_rssi_params[BMISS_MIN_RSSI].min_rssi -=
|
req->min_rssi_params[BMISS_MIN_RSSI].min_rssi -=
|
||||||
NOISE_FLOOR_DBM_DEFAULT;
|
NOISE_FLOOR_DBM_DEFAULT;
|
||||||
req->min_rssi_params[BMISS_MIN_RSSI].min_rssi &= 0x000000ff;
|
req->min_rssi_params[BMISS_MIN_RSSI].min_rssi &= 0x000000ff;
|
||||||
|
|
||||||
|
req->min_rssi_params[MIN_RSSI_2G_TO_5G_ROAM].min_rssi -=
|
||||||
|
NOISE_FLOOR_DBM_DEFAULT;
|
||||||
|
req->min_rssi_params[MIN_RSSI_2G_TO_5G_ROAM].min_rssi &=
|
||||||
|
0x000000ff;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return wmi_unified_send_roam_scan_offload_ap_cmd(wmi_handle, req);
|
return wmi_unified_send_roam_scan_offload_ap_cmd(wmi_handle, req);
|
||||||
|
@@ -289,8 +289,10 @@ struct scoring_param {
|
|||||||
#define IDLE_ROAM_TRIGGER 0
|
#define IDLE_ROAM_TRIGGER 0
|
||||||
#define BTM_ROAM_TRIGGER 1
|
#define BTM_ROAM_TRIGGER 1
|
||||||
|
|
||||||
|
#define NUM_OF_ROAM_MIN_RSSI 3
|
||||||
#define DEAUTH_MIN_RSSI 0
|
#define DEAUTH_MIN_RSSI 0
|
||||||
#define BMISS_MIN_RSSI 1
|
#define BMISS_MIN_RSSI 1
|
||||||
|
#define MIN_RSSI_2G_TO_5G_ROAM 2
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* enum roam_trigger_reason - Reason for triggering roam
|
* enum roam_trigger_reason - Reason for triggering roam
|
||||||
@@ -381,7 +383,7 @@ struct ap_profile_params {
|
|||||||
uint8_t vdev_id;
|
uint8_t vdev_id;
|
||||||
struct ap_profile profile;
|
struct ap_profile profile;
|
||||||
struct scoring_param param;
|
struct scoring_param param;
|
||||||
struct roam_trigger_min_rssi min_rssi_params[NUM_OF_ROAM_TRIGGERS];
|
struct roam_trigger_min_rssi min_rssi_params[NUM_OF_ROAM_MIN_RSSI];
|
||||||
struct roam_trigger_score_delta score_delta_param[NUM_OF_ROAM_TRIGGERS];
|
struct roam_trigger_score_delta score_delta_param[NUM_OF_ROAM_TRIGGERS];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -3036,7 +3036,7 @@ send_roam_scan_offload_ap_profile_cmd_tlv(wmi_unified_t wmi_handle,
|
|||||||
len += WMI_TLV_HDR_SIZE;
|
len += WMI_TLV_HDR_SIZE;
|
||||||
len += NUM_OF_ROAM_TRIGGERS * sizeof(*score_delta_param);
|
len += NUM_OF_ROAM_TRIGGERS * sizeof(*score_delta_param);
|
||||||
len += WMI_TLV_HDR_SIZE;
|
len += WMI_TLV_HDR_SIZE;
|
||||||
len += NUM_OF_ROAM_TRIGGERS * sizeof(*min_rssi_param);
|
len += NUM_OF_ROAM_MIN_RSSI * sizeof(*min_rssi_param);
|
||||||
buf = wmi_buf_alloc(wmi_handle, len);
|
buf = wmi_buf_alloc(wmi_handle, len);
|
||||||
if (!buf)
|
if (!buf)
|
||||||
return QDF_STATUS_E_NOMEM;
|
return QDF_STATUS_E_NOMEM;
|
||||||
@@ -3240,7 +3240,7 @@ send_roam_scan_offload_ap_profile_cmd_tlv(wmi_unified_t wmi_handle,
|
|||||||
|
|
||||||
buf_ptr += sizeof(*score_delta_param);
|
buf_ptr += sizeof(*score_delta_param);
|
||||||
WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC,
|
WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC,
|
||||||
(NUM_OF_ROAM_TRIGGERS * sizeof(*min_rssi_param)));
|
(NUM_OF_ROAM_MIN_RSSI * sizeof(*min_rssi_param)));
|
||||||
buf_ptr += WMI_TLV_HDR_SIZE;
|
buf_ptr += WMI_TLV_HDR_SIZE;
|
||||||
|
|
||||||
min_rssi_param = (wmi_roam_cnd_min_rssi_param *)buf_ptr;
|
min_rssi_param = (wmi_roam_cnd_min_rssi_param *)buf_ptr;
|
||||||
@@ -3266,6 +3266,18 @@ send_roam_scan_offload_ap_profile_cmd_tlv(wmi_unified_t wmi_handle,
|
|||||||
min_rssi_param->candidate_min_rssi =
|
min_rssi_param->candidate_min_rssi =
|
||||||
ap_profile->min_rssi_params[BMISS_MIN_RSSI].min_rssi;
|
ap_profile->min_rssi_params[BMISS_MIN_RSSI].min_rssi;
|
||||||
|
|
||||||
|
buf_ptr += sizeof(*min_rssi_param);
|
||||||
|
min_rssi_param = (wmi_roam_cnd_min_rssi_param *)buf_ptr;
|
||||||
|
WMITLV_SET_HDR(&min_rssi_param->tlv_header,
|
||||||
|
WMITLV_TAG_STRUC_wmi_roam_cnd_min_rssi_param,
|
||||||
|
WMITLV_GET_STRUCT_TLVLEN(wmi_roam_cnd_min_rssi_param));
|
||||||
|
trig_reason =
|
||||||
|
ap_profile->min_rssi_params[MIN_RSSI_2G_TO_5G_ROAM].trigger_reason;
|
||||||
|
min_rssi_param->roam_trigger_reason =
|
||||||
|
convert_roam_trigger_reason(trig_reason);
|
||||||
|
min_rssi_param->candidate_min_rssi =
|
||||||
|
ap_profile->min_rssi_params[MIN_RSSI_2G_TO_5G_ROAM].min_rssi;
|
||||||
|
|
||||||
wmi_mtrace(WMI_ROAM_AP_PROFILE, NO_SESSION, 0);
|
wmi_mtrace(WMI_ROAM_AP_PROFILE, NO_SESSION, 0);
|
||||||
status = wmi_unified_cmd_send(wmi_handle, buf,
|
status = wmi_unified_cmd_send(wmi_handle, buf,
|
||||||
len, WMI_ROAM_AP_PROFILE);
|
len, WMI_ROAM_AP_PROFILE);
|
||||||
|
@@ -2338,7 +2338,7 @@ struct roam_offload_scan_req {
|
|||||||
uint32_t roam_inactive_data_packet_count;
|
uint32_t roam_inactive_data_packet_count;
|
||||||
uint32_t roam_scan_period_after_inactivity;
|
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_min_rssi min_rssi_params[NUM_OF_ROAM_MIN_RSSI];
|
||||||
struct roam_trigger_score_delta score_delta_param[NUM_OF_ROAM_TRIGGERS];
|
struct roam_trigger_score_delta score_delta_param[NUM_OF_ROAM_TRIGGERS];
|
||||||
uint32_t full_roam_scan_period;
|
uint32_t full_roam_scan_period;
|
||||||
};
|
};
|
||||||
|
@@ -17710,6 +17710,9 @@ csr_create_roam_scan_offload_request(struct mac_context *mac_ctx,
|
|||||||
mac_ctx->mlme_cfg->trig_min_rssi[DEAUTH_MIN_RSSI];
|
mac_ctx->mlme_cfg->trig_min_rssi[DEAUTH_MIN_RSSI];
|
||||||
req_buf->min_rssi_params[BMISS_MIN_RSSI] =
|
req_buf->min_rssi_params[BMISS_MIN_RSSI] =
|
||||||
mac_ctx->mlme_cfg->trig_min_rssi[BMISS_MIN_RSSI];
|
mac_ctx->mlme_cfg->trig_min_rssi[BMISS_MIN_RSSI];
|
||||||
|
req_buf->min_rssi_params[MIN_RSSI_2G_TO_5G_ROAM] =
|
||||||
|
mac_ctx->mlme_cfg->trig_min_rssi[MIN_RSSI_2G_TO_5G_ROAM];
|
||||||
|
|
||||||
req_buf->score_delta_param[IDLE_ROAM_TRIGGER] =
|
req_buf->score_delta_param[IDLE_ROAM_TRIGGER] =
|
||||||
mac_ctx->mlme_cfg->trig_score_delta[IDLE_ROAM_TRIGGER];
|
mac_ctx->mlme_cfg->trig_score_delta[IDLE_ROAM_TRIGGER];
|
||||||
req_buf->score_delta_param[BTM_ROAM_TRIGGER] =
|
req_buf->score_delta_param[BTM_ROAM_TRIGGER] =
|
||||||
@@ -19978,6 +19981,9 @@ csr_cm_roam_scan_offload_ap_profile(struct mac_context *mac_ctx,
|
|||||||
mac_ctx->mlme_cfg->trig_min_rssi[DEAUTH_MIN_RSSI];
|
mac_ctx->mlme_cfg->trig_min_rssi[DEAUTH_MIN_RSSI];
|
||||||
params->min_rssi_params[BMISS_MIN_RSSI] =
|
params->min_rssi_params[BMISS_MIN_RSSI] =
|
||||||
mac_ctx->mlme_cfg->trig_min_rssi[BMISS_MIN_RSSI];
|
mac_ctx->mlme_cfg->trig_min_rssi[BMISS_MIN_RSSI];
|
||||||
|
params->min_rssi_params[MIN_RSSI_2G_TO_5G_ROAM] =
|
||||||
|
mac_ctx->mlme_cfg->trig_min_rssi[MIN_RSSI_2G_TO_5G_ROAM];
|
||||||
|
|
||||||
params->score_delta_param[IDLE_ROAM_TRIGGER] =
|
params->score_delta_param[IDLE_ROAM_TRIGGER] =
|
||||||
mac_ctx->mlme_cfg->trig_score_delta[IDLE_ROAM_TRIGGER];
|
mac_ctx->mlme_cfg->trig_score_delta[IDLE_ROAM_TRIGGER];
|
||||||
params->score_delta_param[BTM_ROAM_TRIGGER] =
|
params->score_delta_param[BTM_ROAM_TRIGGER] =
|
||||||
|
@@ -1420,6 +1420,9 @@ static QDF_STATUS wma_roam_scan_offload_ap_profile(tp_wma_handle wma_handle,
|
|||||||
roam_req->min_rssi_params[DEAUTH_MIN_RSSI];
|
roam_req->min_rssi_params[DEAUTH_MIN_RSSI];
|
||||||
ap_profile.min_rssi_params[BMISS_MIN_RSSI] =
|
ap_profile.min_rssi_params[BMISS_MIN_RSSI] =
|
||||||
roam_req->min_rssi_params[BMISS_MIN_RSSI];
|
roam_req->min_rssi_params[BMISS_MIN_RSSI];
|
||||||
|
ap_profile.min_rssi_params[MIN_RSSI_2G_TO_5G_ROAM] =
|
||||||
|
roam_req->min_rssi_params[MIN_RSSI_2G_TO_5G_ROAM];
|
||||||
|
|
||||||
if (!db2dbm_enabled) {
|
if (!db2dbm_enabled) {
|
||||||
ap_profile.min_rssi_params[DEAUTH_MIN_RSSI].min_rssi -=
|
ap_profile.min_rssi_params[DEAUTH_MIN_RSSI].min_rssi -=
|
||||||
WMA_NOISE_FLOOR_DBM_DEFAULT;
|
WMA_NOISE_FLOOR_DBM_DEFAULT;
|
||||||
@@ -1430,6 +1433,11 @@ 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.min_rssi_params[BMISS_MIN_RSSI].min_rssi &=
|
ap_profile.min_rssi_params[BMISS_MIN_RSSI].min_rssi &=
|
||||||
0x000000ff;
|
0x000000ff;
|
||||||
|
|
||||||
|
ap_profile.min_rssi_params[MIN_RSSI_2G_TO_5G_ROAM].min_rssi -=
|
||||||
|
WMA_NOISE_FLOOR_DBM_DEFAULT;
|
||||||
|
ap_profile.min_rssi_params[MIN_RSSI_2G_TO_5G_ROAM].min_rssi &=
|
||||||
|
0x000000ff;
|
||||||
}
|
}
|
||||||
|
|
||||||
ap_profile.score_delta_param[IDLE_ROAM_TRIGGER] =
|
ap_profile.score_delta_param[IDLE_ROAM_TRIGGER] =
|
||||||
|
Reference in New Issue
Block a user