diff --git a/components/mlme/core/src/wlan_mlme_main.c b/components/mlme/core/src/wlan_mlme_main.c index f20f5af546cc..666da310b29e 100644 --- a/components/mlme/core/src/wlan_mlme_main.c +++ b/components/mlme/core/src/wlan_mlme_main.c @@ -1863,6 +1863,8 @@ static void mlme_init_scoring_cfg(struct wlan_objmgr_psoc *psoc, cfg_get(psoc, CFG_ROAM_TRIGGER_BITMAP); scoring_cfg->roam_score_delta = cfg_get(psoc, CFG_ROAM_SCORE_DELTA); scoring_cfg->apsd_enabled = (bool)cfg_default(CFG_APSD_ENABLED); + scoring_cfg->min_roam_score_delta = + cfg_get(psoc, CFG_CAND_MIN_ROAM_SCORE_DELTA); } static void mlme_init_oce_cfg(struct wlan_objmgr_psoc *psoc, diff --git a/components/mlme/dispatcher/inc/cfg_mlme_scoring.h b/components/mlme/dispatcher/inc/cfg_mlme_scoring.h index d5c39bc3fab2..26cc36939a3d 100644 --- a/components/mlme/dispatcher/inc/cfg_mlme_scoring.h +++ b/components/mlme/dispatcher/inc/cfg_mlme_scoring.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2019 The Linux Foundation. All rights reserved. + * Copyright (c) 2012-2020 The Linux Foundation. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for * any purpose with or without fee is hereby granted, provided that the @@ -1035,6 +1035,40 @@ CFG_VALUE_OR_DEFAULT, \ "candidate AP's percentage roam score delta") +/* + * + * min_roam_score_delta - Difference of roam score values between connected + * AP and roam candidate AP. + * @Min: 0 + * @Max: 10000 + * @Default: 1850 + * + * This ini is used during CU and low rssi based roam triggers, consider + * AP as roam candidate only if its roam score is better than connected + * AP score by at least min_roam_score_delta. + * If user configured "roam_score_delta" and "min_roam_score_delta" both, + * then firmware selects roam candidate AP by considering values of both + * INIs. + * Example: If DUT is connected with AP1 and roam candidate AP2 has roam + * score greater than roam_score_delta and min_roam_score_delta then only + * firmware will trigger roaming to AP2. + * + * Related: roam_score_delta + * + * Supported Feature: Roaming + * + * Usage: Internal + * + * + */ +#define CFG_CAND_MIN_ROAM_SCORE_DELTA CFG_INI_UINT( \ + "min_roam_score_delta", \ + 0, \ + 10000, \ + 1850, \ + CFG_VALUE_OR_DEFAULT, \ + "Diff between connected AP's and candidate AP's roam score") + /* * * enable_scoring_for_roam - enable/disable scoring logic in FW for candidate @@ -1256,6 +1290,7 @@ CFG(CFG_SCORING_OCE_WAN_SCORE_IDX_15_TO_12) \ CFG(CFG_ROAM_TRIGGER_BITMAP) \ CFG(CFG_ROAM_SCORE_DELTA) \ + CFG(CFG_CAND_MIN_ROAM_SCORE_DELTA) \ CFG(CFG_ENABLE_SCORING_FOR_ROAM) \ CFG(CFG_APSD_ENABLED) \ CFG(CFG_DISCONNECT_ROAM_TRIGGER_MIN_RSSI) \ diff --git a/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h b/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h index c1da33782bd0..f3e241d11978 100644 --- a/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h +++ b/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h @@ -1877,6 +1877,8 @@ struct wlan_mlme_per_slot_scoring { * @roam_score_delta: percentage delta in roam score * @apsd_enabled: Enable automatic power save delivery * @vendor_roam_score_algorithm: Preferred vendor roam score algorithm + * @min_roam_score_delta: Minimum difference between connected AP's and + * candidate AP's roam score to start roaming. */ struct wlan_mlme_scoring_cfg { bool enable_scoring_for_roam; @@ -1891,6 +1893,7 @@ struct wlan_mlme_scoring_cfg { uint32_t roam_score_delta; bool apsd_enabled; uint32_t vendor_roam_score_algorithm; + uint32_t min_roam_score_delta; }; /* struct wlan_mlme_threshold - Threshold related config items diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index 984045f70619..da38756e7a93 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/core/sme/src/csr/csr_api_roam.c @@ -18817,6 +18817,8 @@ static void csr_update_score_params(struct mac_context *mac_ctx, bss_score_params->oce_wan_scoring.score_pcnt11_to_8; req_score_params->oce_wan_scoring.score_pcnt15_to_12 = bss_score_params->oce_wan_scoring.score_pcnt15_to_12; + req_score_params->cand_min_roam_score_delta = + bss_score_params->min_roam_score_delta; } uint8_t csr_get_roam_enabled_sta_sessionid(struct mac_context *mac_ctx)