From dec56323562605b7e1dd69b3b79992872f9b57f7 Mon Sep 17 00:00:00 2001 From: Liangwei Dong Date: Fri, 13 Jan 2023 15:20:25 +0800 Subject: [PATCH] qcacmn: Add ML reconfig starting notify for link removal Add mlme_vdev_reconfig_notify callback to notify the ML reconfig link removal starting after receive the first ML reconfig link removal IE. Change-Id: I9ae37b7defc75c97e7bc39e07c9d154e1923aedd CRs-Fixed: 3380159 --- umac/mlme/include/wlan_vdev_mlme.h | 6 ++++++ umac/mlo_mgr/src/wlan_mlo_mgr_sta.c | 9 +++++++++ 2 files changed, 15 insertions(+) diff --git a/umac/mlme/include/wlan_vdev_mlme.h b/umac/mlme/include/wlan_vdev_mlme.h index f245490da0..e9208d8c87 100644 --- a/umac/mlme/include/wlan_vdev_mlme.h +++ b/umac/mlme/include/wlan_vdev_mlme.h @@ -711,6 +711,9 @@ enum vdev_start_resp_type { * @mlme_vdev_dfs_cac_wait_notify: callback to notify about CAC state * @mlme_vdev_csa_complete: callback to indicate CSA complete * @mlme_vdev_sta_disconn_start: callback to initiate STA disconnection + * @mlme_vdev_reconfig_notify: callback to notify ml reconfing link + * delete start operation after receive + * the first ml reconfig IE * @mlme_vdev_reconfig_timer_complete: callback to process ml reconfing * operation * @mlme_vdev_notify_mlo_sync_wait_entry: @@ -792,6 +795,9 @@ struct vdev_mlme_ops { QDF_STATUS (*mlme_vdev_sta_disconn_start)( struct vdev_mlme_obj *vdev_mlme, uint16_t event_data_len, void *event_data); + QDF_STATUS (*mlme_vdev_reconfig_notify)( + struct vdev_mlme_obj *vdev_mlme, + uint16_t *tbtt_count, uint16_t bcn_int); void (*mlme_vdev_reconfig_timer_complete)( struct vdev_mlme_obj *vdev_mlme); QDF_STATUS (*mlme_vdev_notify_mlo_sync_wait_entry)( diff --git a/umac/mlo_mgr/src/wlan_mlo_mgr_sta.c b/umac/mlo_mgr/src/wlan_mlo_mgr_sta.c index a4d3283b6b..1391ae74ef 100644 --- a/umac/mlo_mgr/src/wlan_mlo_mgr_sta.c +++ b/umac/mlo_mgr/src/wlan_mlo_mgr_sta.c @@ -2185,6 +2185,7 @@ static void mlo_process_link_remove(struct wlan_objmgr_vdev *vdev, struct wlan_objmgr_peer *bss_peer = NULL; uint16_t bcn_int = 0; uint16_t tbtt_count = 0; + QDF_STATUS status; vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev); if (!vdev_mlme) @@ -2207,6 +2208,14 @@ static void mlo_process_link_remove(struct wlan_objmgr_vdev *vdev, if (!bcn_int) return; + if (vdev_mlme->ops && + vdev_mlme->ops->mlme_vdev_reconfig_notify) { + status = vdev_mlme->ops->mlme_vdev_reconfig_notify( + vdev_mlme, &tbtt_count, bcn_int); + if (QDF_IS_STATUS_ERROR(status)) + return; + } + vdev_mlme->ml_reconfig_started = true; qdf_timer_mod(&vdev_mlme->ml_reconfig_timer, qdf_time_uint_to_ms(tbtt_count * bcn_int));