From 1ffc60a883a56a0da51a53459c4fc701753c5091 Mon Sep 17 00:00:00 2001 From: Liangwei Dong Date: Thu, 24 Nov 2022 16:20:26 +0800 Subject: [PATCH] qcacmn: Add API to stop reconfig timer Add API to stop link reconfig timer on vdev or ml dev. Add API to query the reconfig timer state. Change-Id: I729d403122e4e84cdf0dced21c49176397e10e5d CRs-Fixed: 3352937 --- umac/mlo_mgr/inc/wlan_mlo_mgr_sta.h | 40 +++++++++++++++++ umac/mlo_mgr/src/wlan_mlo_mgr_sta.c | 67 +++++++++++++++++++++++++++++ 2 files changed, 107 insertions(+) diff --git a/umac/mlo_mgr/inc/wlan_mlo_mgr_sta.h b/umac/mlo_mgr/inc/wlan_mlo_mgr_sta.h index f407a63537..50f3fbf3b2 100644 --- a/umac/mlo_mgr/inc/wlan_mlo_mgr_sta.h +++ b/umac/mlo_mgr/inc/wlan_mlo_mgr_sta.h @@ -621,6 +621,31 @@ bool mlo_is_sta_csa_param_handled(struct wlan_objmgr_vdev *vdev, */ void mlo_internal_disconnect_links(struct wlan_objmgr_vdev *vdev); +/** + * mlo_sta_vdev_get_reconfig_timer_state() - Get ml reconfig timer state on + * vdev + * @vdev: vdev pointer + * + * Return: true if reconfig timer is active, otherwise false + */ +bool mlo_sta_vdev_get_reconfig_timer_state(struct wlan_objmgr_vdev *vdev); + +/** + * mlo_sta_stop_reconfig_timer_by_vdev() - Stop ml reconfig timer + * @vdev: vdev pointer + * + * Return: None + */ +void mlo_sta_stop_reconfig_timer_by_vdev(struct wlan_objmgr_vdev *vdev); + +/** + * mlo_sta_stop_reconfig_timer() - Stop reconfig timer on all vdev on ml dev + * @vdev: vdev pointer + * + * Return: None + */ +void mlo_sta_stop_reconfig_timer(struct wlan_objmgr_vdev *vdev); + /** * mlo_sta_get_vdev_list() - get mlo vdev list * @vdev: vdev pointer @@ -805,6 +830,21 @@ void mlo_sta_get_vdev_list(struct wlan_objmgr_vdev *vdev, { } +static inline bool +mlo_sta_vdev_get_reconfig_timer_state(struct wlan_objmgr_vdev *vdev) +{ + return false; +} + +static inline void +mlo_sta_stop_reconfig_timer_by_vdev(struct wlan_objmgr_vdev *vdev) +{ +} + +static inline void mlo_sta_stop_reconfig_timer(struct wlan_objmgr_vdev *vdev) +{ +} + static inline void mlo_set_keys_saved(struct wlan_objmgr_vdev *vdev, struct qdf_mac_addr *mac_address, bool value) diff --git a/umac/mlo_mgr/src/wlan_mlo_mgr_sta.c b/umac/mlo_mgr/src/wlan_mlo_mgr_sta.c index d8d682ded5..a4d3283b6b 100644 --- a/umac/mlo_mgr/src/wlan_mlo_mgr_sta.c +++ b/umac/mlo_mgr/src/wlan_mlo_mgr_sta.c @@ -2035,6 +2035,73 @@ void mlo_sta_get_vdev_list(struct wlan_objmgr_vdev *vdev, uint16_t *vdev_count, mlo_dev_lock_release(dev_ctx); } +bool mlo_sta_vdev_get_reconfig_timer_state(struct wlan_objmgr_vdev *vdev) +{ + struct vdev_mlme_obj *vdev_mlme; + + if (!vdev || !mlo_is_mld_sta(vdev)) + return false; + + vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev); + if (!vdev_mlme) { + mlo_err("vdev mlme is null"); + return false; + } + + return vdev_mlme->ml_reconfig_started; +} + +void mlo_sta_stop_reconfig_timer_by_vdev(struct wlan_objmgr_vdev *vdev) +{ + struct vdev_mlme_obj *vdev_mlme; + + if (!vdev || !mlo_is_mld_sta(vdev)) + return; + + vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev); + if (!vdev_mlme) { + mlo_err("vdev mlme is null"); + return; + } + + if (!vdev_mlme->ml_reconfig_started) + return; + + qdf_timer_stop(&vdev_mlme->ml_reconfig_timer); + + mlo_debug("vdev %d reconfig timer active to stop", + wlan_vdev_get_id(vdev)); + vdev_mlme->ml_reconfig_started = false; +} + +void mlo_sta_stop_reconfig_timer(struct wlan_objmgr_vdev *vdev) +{ + struct wlan_objmgr_vdev *wlan_vdev_list[WLAN_UMAC_MLO_MAX_VDEVS] = {0}; + uint16_t vdev_count = 0; + uint8_t i; + + if (!vdev || !mlo_is_mld_sta(vdev)) + return; + + mlo_get_ml_vdev_list(vdev, &vdev_count, wlan_vdev_list); + if (!vdev_count) { + mlo_err("vdev num 0 in mld dev"); + return; + } + + for (i = 0; i < vdev_count; i++) { + if (!wlan_vdev_list[i]) { + mlo_err("vdev is null in mld"); + goto release_ref; + } + mlo_sta_stop_reconfig_timer_by_vdev(wlan_vdev_list[i]); + } + +release_ref: + for (i = 0; i < vdev_count; i++) + mlo_release_vdev_ref(wlan_vdev_list[i]); +} + void mlo_set_keys_saved(struct wlan_objmgr_vdev *vdev, struct qdf_mac_addr *mac_address, bool value) {