qcacmn: Handle TWT renegotiation failure case

Generally below process should happen in renegotiation failure
case.
1. TWT setup (successful)
2. TWT setup (renegotiation failure)
3. TWT teardown
4. TWT GET STATUS - 0(dialog ID) 0 0 0
5. TWT setup - successful

Since all WMI TWT events gets executed in WMI thread. So when
renegotiation failure case hits, driver sends TWT
teardown to firmware and waits for twt ack in worker thread.
In same worker thread TWT event needs to be processed.
TWT ack event will not process as it's waiting in same worker
thread and it will get timedout.

As part of fix, break the context in renegotiation and
send the teardown in the new worker context.

Change-Id: Id12cb906b780d3013562c1772e276639a056c8f7
CRs-Fixed: 3207537
This commit is contained in:
Jyoti Kumari
2022-05-26 00:20:19 +05:30
کامیت شده توسط Madan Koyyalamudi
والد f4bfa6616b
کامیت 4afef82b70
6فایلهای تغییر یافته به همراه98 افزوده شده و 0 حذف شده

مشاهده پرونده

@@ -210,6 +210,12 @@ struct mlme_twt_ops {
QDF_STATUS (*mlme_twt_notify_complete_cb)(
struct wlan_objmgr_psoc *psoc,
struct twt_notify_event_param *event);
QDF_STATUS (*mlme_twt_vdev_create_cb)(
struct wlan_objmgr_vdev *vdev);
QDF_STATUS (*mlme_twt_vdev_destroy_cb)(
struct wlan_objmgr_vdev *vdev);
};
/**
@@ -1061,6 +1067,23 @@ QDF_STATUS
mlme_twt_osif_notify_complete_ind(struct wlan_objmgr_psoc *psoc,
struct twt_notify_event_param *event);
/**
* mlme_twt_vdev_create_notification() - vdev create notification to osif
* @vdev: vdev pointer
*
* Return: QDF_STATUS
*/
QDF_STATUS
mlme_twt_vdev_create_notification(struct wlan_objmgr_vdev *vdev);
/**
* mlme_twt_vdev_destroy_notification() - vdev destroy notification to osif
* @vdev: vdev pointer
*
* Return: QDF_STATUS
*/
QDF_STATUS
mlme_twt_vdev_destroy_notification(struct wlan_objmgr_vdev *vdev);
#else
static inline QDF_STATUS
mlme_twt_osif_enable_complete_ind(struct wlan_objmgr_psoc *psoc,
@@ -1129,6 +1152,18 @@ mlme_twt_osif_notify_complete_ind(struct wlan_objmgr_psoc *psoc,
return QDF_STATUS_SUCCESS;
}
static inline QDF_STATUS
mlme_twt_vdev_create_notification(struct wlan_objmgr_vdev *vdev)
{
return QDF_STATUS_SUCCESS;
}
static inline QDF_STATUS
mlme_twt_vdev_destroy_notification(struct wlan_objmgr_vdev *vdev)
{
return QDF_STATUS_SUCCESS;
}
#endif /* WLAN_SUPPORT_TWT && WLAN_TWT_CONV_SUPPORTED */
#endif