From 94b44452f6d5619e85156ca11ccbb9a0288d835e Mon Sep 17 00:00:00 2001 From: Abhinav Kumar Date: Wed, 30 Sep 2020 19:04:29 +0530 Subject: [PATCH] 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 --- components/mlme/core/src/wlan_mlme_main.c | 6 ++++ .../dispatcher/inc/cfg_mlme_roam_scoring.h | 28 +++++++++++++++++++ .../dispatcher/inc/wlan_mlme_public_struct.h | 2 +- .../src/target_if_cm_roam_offload.c | 6 ++++ .../inc/wlan_cm_roam_public_struct.h | 4 ++- components/wmi/src/wmi_unified_roam_tlv.c | 16 +++++++++-- core/mac/inc/sir_api.h | 2 +- core/sme/src/csr/csr_api_roam.c | 6 ++++ core/wma/src/wma_scan_roam.c | 8 ++++++ 9 files changed, 73 insertions(+), 5 deletions(-) diff --git a/components/mlme/core/src/wlan_mlme_main.c b/components/mlme/core/src/wlan_mlme_main.c index 22b776a0ba..7142592782 100644 --- a/components/mlme/core/src/wlan_mlme_main.c +++ b/components/mlme/core/src/wlan_mlme_main.c @@ -2147,6 +2147,12 @@ mlme_init_roam_score_config(struct wlan_objmgr_psoc *psoc, min_rssi_param->min_rssi = cfg_get(psoc, CFG_BMISS_ROAM_MIN_RSSI); 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; + } /** diff --git a/components/mlme/dispatcher/inc/cfg_mlme_roam_scoring.h b/components/mlme/dispatcher/inc/cfg_mlme_roam_scoring.h index 1d52767f8e..007e46a018 100644 --- a/components/mlme/dispatcher/inc/cfg_mlme_roam_scoring.h +++ b/components/mlme/dispatcher/inc/cfg_mlme_roam_scoring.h @@ -229,6 +229,33 @@ CFG_VALUE_OR_DEFAULT, \ "Minimum RSSI of candidate AP for Bmiss roam trigger") +/* + * + * 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 + * + * + */ +#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") + /* * * idle_roam_score_delta - Roam score delta value in percentage for idle roam. @@ -323,6 +350,7 @@ CFG(CFG_APSD_ENABLED) \ CFG(CFG_DISCONNECT_ROAM_TRIGGER_MIN_RSSI) \ CFG(CFG_BMISS_ROAM_MIN_RSSI) \ + CFG(CFG_2G_TO_5G_ROAM_MIN_RSSI) \ CFG(CFG_IDLE_ROAM_SCORE_DELTA) \ CFG(CFG_BTM_ROAM_SCORE_DELTA) \ CFG(CFG_VENDOR_ROAM_SCORE_ALGORITHM) diff --git a/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h b/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h index 1481d5d137..e254d8ab19 100644 --- a/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h +++ b/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h @@ -2391,7 +2391,7 @@ struct wlan_mlme_cfg { 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]; + struct roam_trigger_min_rssi trig_min_rssi[NUM_OF_ROAM_MIN_RSSI]; struct wlan_mlme_ratemask ratemask_cfg; }; diff --git a/components/target_if/connection_mgr/src/target_if_cm_roam_offload.c b/components/target_if/connection_mgr/src/target_if_cm_roam_offload.c index 0e0f95d1de..b2ec47fbad 100644 --- a/components/target_if/connection_mgr/src/target_if_cm_roam_offload.c +++ b/components/target_if/connection_mgr/src/target_if_cm_roam_offload.c @@ -627,6 +627,12 @@ target_if_cm_roam_scan_offload_ap_profile( req->min_rssi_params[BMISS_MIN_RSSI].min_rssi -= NOISE_FLOOR_DBM_DEFAULT; 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); diff --git a/components/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_roam_public_struct.h b/components/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_roam_public_struct.h index 56c771c408..0403191051 100644 --- a/components/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_roam_public_struct.h +++ b/components/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_roam_public_struct.h @@ -289,8 +289,10 @@ struct scoring_param { #define IDLE_ROAM_TRIGGER 0 #define BTM_ROAM_TRIGGER 1 +#define NUM_OF_ROAM_MIN_RSSI 3 #define DEAUTH_MIN_RSSI 0 #define BMISS_MIN_RSSI 1 +#define MIN_RSSI_2G_TO_5G_ROAM 2 /** * enum roam_trigger_reason - Reason for triggering roam @@ -381,7 +383,7 @@ struct ap_profile_params { uint8_t vdev_id; struct ap_profile profile; 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]; }; diff --git a/components/wmi/src/wmi_unified_roam_tlv.c b/components/wmi/src/wmi_unified_roam_tlv.c index 498d51a020..13bf9cfada 100644 --- a/components/wmi/src/wmi_unified_roam_tlv.c +++ b/components/wmi/src/wmi_unified_roam_tlv.c @@ -3036,7 +3036,7 @@ send_roam_scan_offload_ap_profile_cmd_tlv(wmi_unified_t wmi_handle, len += WMI_TLV_HDR_SIZE; len += NUM_OF_ROAM_TRIGGERS * sizeof(*score_delta_param); 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); if (!buf) 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); 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; 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 = 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); status = wmi_unified_cmd_send(wmi_handle, buf, len, WMI_ROAM_AP_PROFILE); diff --git a/core/mac/inc/sir_api.h b/core/mac/inc/sir_api.h index a4165a8561..2d5a724bdf 100644 --- a/core/mac/inc/sir_api.h +++ b/core/mac/inc/sir_api.h @@ -2338,7 +2338,7 @@ struct roam_offload_scan_req { 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_min_rssi min_rssi_params[NUM_OF_ROAM_MIN_RSSI]; struct roam_trigger_score_delta score_delta_param[NUM_OF_ROAM_TRIGGERS]; uint32_t full_roam_scan_period; }; diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index c7fca3c6f8..c9ade41653 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/core/sme/src/csr/csr_api_roam.c @@ -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]; req_buf->min_rssi_params[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] = mac_ctx->mlme_cfg->trig_score_delta[IDLE_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]; params->min_rssi_params[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] = mac_ctx->mlme_cfg->trig_score_delta[IDLE_ROAM_TRIGGER]; params->score_delta_param[BTM_ROAM_TRIGGER] = diff --git a/core/wma/src/wma_scan_roam.c b/core/wma/src/wma_scan_roam.c index f26e869186..6645ad17ea 100644 --- a/core/wma/src/wma_scan_roam.c +++ b/core/wma/src/wma_scan_roam.c @@ -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]; ap_profile.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) { ap_profile.min_rssi_params[DEAUTH_MIN_RSSI].min_rssi -= 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; ap_profile.min_rssi_params[BMISS_MIN_RSSI].min_rssi &= 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] =