From 094c6bd356dcc6944128e7469f818324faf1efb2 Mon Sep 17 00:00:00 2001 From: Pragaspathi Thilagaraj Date: Thu, 3 Jun 2021 19:13:45 +0530 Subject: [PATCH] qcacld-3.0: Add support to retain WTC params across disconnection The WTC parameters are stored in MLME vdev private object. So the parameters are cleared once vdev delete is done. Move the WTC parameters to psoc->mlme_cfg to retain the values across disconnections. Change-Id: Icecfbef19af994f8a05622501d435bfb63beca50 CRs-Fixed: 2959715 --- .../dispatcher/inc/wlan_mlme_public_struct.h | 2 + .../core/src/wlan_cm_roam_offload.c | 3 +- .../dispatcher/inc/wlan_cm_roam_api.h | 19 ++--- .../inc/wlan_cm_roam_public_struct.h | 2 - .../dispatcher/src/wlan_cm_roam_api.c | 70 ++++--------------- core/hdd/src/wlan_hdd_cfg80211.c | 3 +- core/hdd/src/wlan_hdd_main.c | 3 +- 7 files changed, 25 insertions(+), 77 deletions(-) diff --git a/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h b/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h index 4d2831f6f007..391a6435d8ce 100644 --- a/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h +++ b/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h @@ -1583,6 +1583,7 @@ struct fw_scan_channels { /* * @mawc_roam_enabled: Enable/Disable MAWC during roaming * @enable_fast_roam_in_concurrency:Enable LFR roaming on STA during concurrency + * @vendor_btm_param: Vendor WTC roam trigger parameters * @lfr3_roaming_offload: Enable/disable roam offload feature * @lfr3_dual_sta_roaming_enabled: Enable/Disable dual sta roaming offload * feature @@ -1700,6 +1701,7 @@ struct wlan_mlme_lfr_cfg { bool mawc_roam_enabled; bool enable_fast_roam_in_concurrency; #ifdef WLAN_FEATURE_ROAM_OFFLOAD + struct wlan_cm_roam_vendor_btm_params vendor_btm_param; bool lfr3_roaming_offload; bool lfr3_dual_sta_roaming_enabled; bool enable_self_bss_roam; diff --git a/components/umac/mlme/connection_mgr/core/src/wlan_cm_roam_offload.c b/components/umac/mlme/connection_mgr/core/src/wlan_cm_roam_offload.c index dfe687cc5ba5..c4ffb442d3c1 100644 --- a/components/umac/mlme/connection_mgr/core/src/wlan_cm_roam_offload.c +++ b/components/umac/mlme/connection_mgr/core/src/wlan_cm_roam_offload.c @@ -118,8 +118,7 @@ cm_roam_triggers(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id, mlme_get_roam_trigger_bitmap(psoc, vdev_id); params->roam_scan_scheme_bitmap = wlan_cm_get_roam_scan_scheme_bitmap(psoc, vdev_id); - wlan_cm_roam_get_vendor_btm_params(psoc, vdev_id, - ¶ms->vendor_btm_param); + wlan_cm_roam_get_vendor_btm_params(psoc, ¶ms->vendor_btm_param); wlan_cm_roam_get_score_delta_params(psoc, params); wlan_cm_roam_get_min_rssi_params(psoc, params); } diff --git a/components/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_roam_api.h b/components/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_roam_api.h index 87ec2aed0be9..591208a4dbc6 100644 --- a/components/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_roam_api.h +++ b/components/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_roam_api.h @@ -499,40 +499,33 @@ wlan_cm_dual_sta_roam_update_connect_channels(struct wlan_objmgr_psoc *psoc, /** * wlan_cm_roam_set_vendor_btm_params() - API to set vendor btm params * @psoc: PSOC pointer - * @vdev_id: VDEV id * @param: vendor configured roam trigger param * * Return: none */ void wlan_cm_roam_set_vendor_btm_params(struct wlan_objmgr_psoc *psoc, - uint8_t vdev_id, struct wlan_cm_roam_vendor_btm_params *param); /** * wlan_cm_roam_disable_vendor_btm() - API to disable vendor btm by default * reason * @psoc: PSOC pointer - * @vdev_id: VDEV id * * Return: none */ -void -wlan_cm_roam_disable_vendor_btm(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id); +void wlan_cm_roam_disable_vendor_btm(struct wlan_objmgr_psoc *psoc); /** * wlan_cm_roam_get_vendor_btm_params() - API to get vendor btm param * @psoc: PSOC pointer - * @vdev_id: VDEV id * @param: vendor configured roam trigger param * * Return: none */ -void -wlan_cm_roam_get_vendor_btm_params(struct wlan_objmgr_psoc *psoc, - uint8_t vdev_id, - struct wlan_cm_roam_vendor_btm_params - *param); +void wlan_cm_roam_get_vendor_btm_params( + struct wlan_objmgr_psoc *psoc, + struct wlan_cm_roam_vendor_btm_params *param); /** * wlan_cm_roam_get_score_delta_params() - API to get roam score delta param @@ -656,18 +649,16 @@ wlan_cm_roam_extract_roam_msg_info(wmi_unified_t wmi, void *evt_buf, } static inline void -wlan_cm_roam_disable_vendor_btm(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id) +wlan_cm_roam_disable_vendor_btm(struct wlan_objmgr_psoc *psoc) {} static inline void wlan_cm_roam_set_vendor_btm_params(struct wlan_objmgr_psoc *psoc, - uint8_t vdev_id, struct wlan_cm_roam_vendor_btm_params *param) {} static inline void wlan_cm_roam_get_vendor_btm_params(struct wlan_objmgr_psoc *psoc, - uint8_t vdev_id, struct wlan_cm_roam_vendor_btm_params *param) {} 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 f378b45dee28..a921123de49d 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 @@ -1400,13 +1400,11 @@ struct wlan_cm_rso_configs { * data related structure * @pcl_vdev_cmd_active: Flag to check if vdev level pcl command needs to be * sent or PDEV level PCL command needs to be sent - * @control_param: vendor configured roam control param * @vdev_rso_config: Roam scan offload related configurations. Equivalent to the * legacy tpCsrNeighborRoamControlInfo structure. */ struct wlan_cm_roam { bool pcl_vdev_cmd_active; - struct wlan_cm_roam_vendor_btm_params vendor_btm_param; struct wlan_cm_rso_configs vdev_rso_config; }; diff --git a/components/umac/mlme/connection_mgr/dispatcher/src/wlan_cm_roam_api.c b/components/umac/mlme/connection_mgr/dispatcher/src/wlan_cm_roam_api.c index 292a4081d799..fdd06cc9f36f 100644 --- a/components/umac/mlme/connection_mgr/dispatcher/src/wlan_cm_roam_api.c +++ b/components/umac/mlme/connection_mgr/dispatcher/src/wlan_cm_roam_api.c @@ -391,85 +391,45 @@ wlan_cm_dual_sta_roam_update_connect_channels(struct wlan_objmgr_psoc *psoc, } void -wlan_cm_roam_disable_vendor_btm(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id) +wlan_cm_roam_disable_vendor_btm(struct wlan_objmgr_psoc *psoc) { - struct wlan_objmgr_vdev *vdev; - struct mlme_legacy_priv *mlme_priv; + struct wlan_mlme_psoc_ext_obj *mlme_obj; - vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id, - WLAN_MLME_NB_ID); - if (!vdev) { - mlme_err("vdev object is NULL"); + mlme_obj = mlme_get_psoc_ext_obj(psoc); + if (!mlme_obj) return; - } - - mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev); - if (!mlme_priv) { - mlme_err("vdev legacy private object is NULL"); - wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID); - return; - } /* Set default value of reason code */ - mlme_priv->cm_roam.vendor_btm_param.user_roam_reason = - DISABLE_VENDOR_BTM_CONFIG; - wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID); + mlme_obj->cfg.lfr.vendor_btm_param.user_roam_reason = + DISABLE_VENDOR_BTM_CONFIG; } void wlan_cm_roam_set_vendor_btm_params(struct wlan_objmgr_psoc *psoc, - uint8_t vdev_id, - struct wlan_cm_roam_vendor_btm_params - *param) + struct wlan_cm_roam_vendor_btm_params *param) { - struct wlan_objmgr_vdev *vdev; - struct mlme_legacy_priv *mlme_priv; + struct wlan_mlme_psoc_ext_obj *mlme_obj; - vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id, - WLAN_MLME_NB_ID); - if (!vdev) { - mlme_err("vdev object is NULL"); + mlme_obj = mlme_get_psoc_ext_obj(psoc); + if (!mlme_obj) return; - } - mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev); - if (!mlme_priv) { - mlme_err("vdev legacy private object is NULL"); - wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID); - return; - } - - qdf_mem_copy(&mlme_priv->cm_roam.vendor_btm_param, param, + qdf_mem_copy(&mlme_obj->cfg.lfr.vendor_btm_param, param, sizeof(struct wlan_cm_roam_vendor_btm_params)); - wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID); } void wlan_cm_roam_get_vendor_btm_params(struct wlan_objmgr_psoc *psoc, - uint8_t vdev_id, struct wlan_cm_roam_vendor_btm_params *param) { - struct wlan_objmgr_vdev *vdev; - struct mlme_legacy_priv *mlme_priv; + struct wlan_mlme_psoc_ext_obj *mlme_obj; - vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id, - WLAN_MLME_NB_ID); - if (!vdev) { - mlme_err("vdev object is NULL"); + mlme_obj = mlme_get_psoc_ext_obj(psoc); + if (!mlme_obj) return; - } - mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev); - if (!mlme_priv) { - mlme_err("vdev legacy private object is NULL"); - wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID); - return; - } - - qdf_mem_copy(param, &mlme_priv->cm_roam.vendor_btm_param, + qdf_mem_copy(param, &mlme_obj->cfg.lfr.vendor_btm_param, sizeof(struct wlan_cm_roam_vendor_btm_params)); - - wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID); } void diff --git a/core/hdd/src/wlan_hdd_cfg80211.c b/core/hdd/src/wlan_hdd_cfg80211.c index 7ece5048fa24..0fd1ab3e7671 100644 --- a/core/hdd/src/wlan_hdd_cfg80211.c +++ b/core/hdd/src/wlan_hdd_cfg80211.c @@ -5192,8 +5192,7 @@ hdd_set_roam_with_control_config(struct hdd_context *hdd_ctx, } if (is_wtc_param_updated) { - wlan_cm_roam_set_vendor_btm_params(hdd_ctx->psoc, vdev_id, - ¶m); + wlan_cm_roam_set_vendor_btm_params(hdd_ctx->psoc, ¶m); /* Sends RSO update */ sme_send_vendor_btm_params(hdd_ctx->mac_handle, vdev_id); } diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c index 6b9d5659f66d..6b82102992a9 100644 --- a/core/hdd/src/wlan_hdd_main.c +++ b/core/hdd/src/wlan_hdd_main.c @@ -5822,8 +5822,7 @@ QDF_STATUS hdd_init_station_mode(struct hdd_adapter *adapter) roam_triggers = ucfg_mlme_get_roaming_triggers(hdd_ctx->psoc); mlme_set_roam_trigger_bitmap(hdd_ctx->psoc, adapter->vdev_id, roam_triggers); - wlan_cm_roam_disable_vendor_btm(hdd_ctx->psoc, - adapter->vdev_id); + wlan_cm_roam_disable_vendor_btm(hdd_ctx->psoc); ucfg_mlme_get_fine_time_meas_cap(hdd_ctx->psoc, &fine_time_meas_cap); sme_cli_set_command(