diff --git a/components/mlme/core/inc/wlan_mlme_main.h b/components/mlme/core/inc/wlan_mlme_main.h index 8f90a750d9e9..c91664273e8e 100644 --- a/components/mlme/core/inc/wlan_mlme_main.h +++ b/components/mlme/core/inc/wlan_mlme_main.h @@ -512,4 +512,17 @@ mlme_set_operations_bitmap(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id, #define MLME_IS_ROAM_INITIALIZED(psoc, vdev_id) \ (mlme_get_roam_state(psoc, vdev_id) >= ROAM_INIT) #endif + +/** + * mlme_reinit_control_config_lfr_params() - Reinitialize roam control config + * @psoc: PSOC pointer + * @lfr: Pointer of an lfr_cfg buffer to fill. + * + * Reinitialize/restore the param related control roam config lfr params with + * default values of corresponding ini params. + * + * Return: None + */ +void mlme_reinit_control_config_lfr_params(struct wlan_objmgr_psoc *psoc, + struct wlan_mlme_lfr_cfg *lfr); #endif diff --git a/components/mlme/core/src/wlan_mlme_main.c b/components/mlme/core/src/wlan_mlme_main.c index 76841ce2319e..8a3f1f48d205 100644 --- a/components/mlme/core/src/wlan_mlme_main.c +++ b/components/mlme/core/src/wlan_mlme_main.c @@ -1503,6 +1503,17 @@ mlme_init_bss_load_trigger_params(struct wlan_objmgr_psoc *psoc, cfg_get(psoc, CFG_BSS_LOAD_TRIG_2G_RSSI_THRES); } +void mlme_reinit_control_config_lfr_params(struct wlan_objmgr_psoc *psoc, + struct wlan_mlme_lfr_cfg *lfr) +{ + /* Restore the params set through SETDFSSCANMODE */ + lfr->roaming_dfs_channel = + cfg_get(psoc, CFG_LFR_ROAMING_DFS_CHANNEL); + + /* Restore the params set through SETWESMODE */ + lfr->wes_mode_enabled = cfg_get(psoc, CFG_LFR_ENABLE_WES_MODE); +} + static void mlme_init_lfr_cfg(struct wlan_objmgr_psoc *psoc, struct wlan_mlme_lfr_cfg *lfr) { diff --git a/core/sme/inc/csr_neighbor_roam.h b/core/sme/inc/csr_neighbor_roam.h index f2f3271836af..f303c2dc15ad 100644 --- a/core/sme/inc/csr_neighbor_roam.h +++ b/core/sme/inc/csr_neighbor_roam.h @@ -260,6 +260,7 @@ void csr_roam_reset_roam_params(struct mac_context *mac_ptr); #define REASON_DRIVER_ENABLED 43 #define REASON_ROAM_FULL_SCAN_PERIOD_CHANGED 44 #define REASON_SCORING_CRITERIA_CHANGED 45 +#define REASON_ROAM_CONTROL_CONFIG_RESTORED 46 #if defined(WLAN_FEATURE_HOST_ROAM) || defined(WLAN_FEATURE_ROAM_OFFLOAD) QDF_STATUS csr_roam_offload_scan(struct mac_context *mac, uint8_t sessionId, diff --git a/core/sme/src/common/sme_api.c b/core/sme/src/common/sme_api.c index 45d420ecbee8..7a6f29f83e24 100644 --- a/core/sme/src/common/sme_api.c +++ b/core/sme/src/common/sme_api.c @@ -6904,12 +6904,52 @@ out: return status; } +/** + * sme_restore_default_roaming_params() - Restore neighbor roam config + * @mac: mac context + * @roam_info: Neighbor roam info pointer to be populated + * + * Restore neighbor roam info request params with lfr config params + * + * Return: None + */ +static void +sme_restore_default_roaming_params(struct mac_context *mac, + tCsrNeighborRoamControlInfo *roam_info) +{ + sme_debug("%s default roam scoring", + mac->mlme_cfg->scoring.enable_scoring_for_roam ? + "Enable" : "Disable"); + + roam_info->cfgParams.enable_scoring_for_roam = + mac->mlme_cfg->scoring.enable_scoring_for_roam; + roam_info->cfgParams.emptyScanRefreshPeriod = + mac->mlme_cfg->lfr.empty_scan_refresh_period; + roam_info->cfgParams.full_roam_scan_period = + mac->mlme_cfg->lfr.roam_full_scan_period; + roam_info->cfgParams.maxChannelScanTime = + mac->mlme_cfg->lfr.neighbor_scan_max_chan_time; + roam_info->cfgParams.neighborScanPeriod = + mac->mlme_cfg->lfr.neighbor_scan_timer_period; + roam_info->cfgParams.neighborLookupThreshold = + mac->mlme_cfg->lfr.neighbor_lookup_rssi_threshold; + roam_info->cfgParams.roam_rssi_diff = + mac->mlme_cfg->lfr.roam_rssi_diff; + roam_info->cfgParams.maxChannelScanTime = + mac->mlme_cfg->lfr.neighbor_scan_max_chan_time; + roam_info->cfgParams.roam_scan_home_away_time = + mac->mlme_cfg->lfr.roam_scan_home_away_time; + roam_info->cfgParams.roam_scan_n_probes = + mac->mlme_cfg->lfr.roam_scan_n_probes; +} + QDF_STATUS sme_roam_control_restore_default_config(mac_handle_t mac_handle, uint8_t vdev_id) { struct mac_context *mac = MAC_CONTEXT(mac_handle); QDF_STATUS status; tpCsrNeighborRoamControlInfo neighbor_roam_info; + tCsrChannelInfo *chan_info; if (vdev_id >= WLAN_MAX_VDEVS) { sme_err("Invalid vdev_id: %d", vdev_id); @@ -6926,24 +6966,23 @@ QDF_STATUS sme_roam_control_restore_default_config(mac_handle_t mac_handle, goto out; } - sme_debug("%s default roam scoring", - mac->mlme_cfg->scoring.enable_scoring_for_roam ? - "Enable" : "Disable"); + sme_debug("Cleanup roam scan control"); + mac->roam.configParam.nRoamScanControl = false; neighbor_roam_info = &mac->roam.neighborRoamInfo[vdev_id]; - neighbor_roam_info->cfgParams.enable_scoring_for_roam = - mac->mlme_cfg->scoring.enable_scoring_for_roam; + sme_debug("Cleanup Preferred frequency list"); + chan_info = &neighbor_roam_info->cfgParams.pref_chan_info; + csr_flush_cfg_bg_scan_roam_channel_list(chan_info); - neighbor_roam_info->cfgParams.emptyScanRefreshPeriod = - mac->mlme_cfg->lfr.empty_scan_refresh_period; + sme_debug("Cleanup specific frequency list"); + chan_info = &neighbor_roam_info->cfgParams.specific_chan_info; + csr_flush_cfg_bg_scan_roam_channel_list(chan_info); - neighbor_roam_info->cfgParams.full_roam_scan_period = - mac->mlme_cfg->lfr.roam_full_scan_period; + sme_debug("Cleanup roam control config related lfr params"); + mlme_reinit_control_config_lfr_params(mac->psoc, &mac->mlme_cfg->lfr); - sme_debug("Restore scan period to: %u and full scan period to: %u", - neighbor_roam_info->cfgParams.emptyScanRefreshPeriod, - neighbor_roam_info->cfgParams.full_roam_scan_period); + sme_restore_default_roaming_params(mac, neighbor_roam_info); csr_roam_offload_scan(mac, vdev_id, ROAM_SCAN_OFFLOAD_UPDATE_CFG,