diff --git a/components/pkt_capture/core/inc/wlan_pkt_capture_priv.h b/components/pkt_capture/core/inc/wlan_pkt_capture_priv.h index 820de82a18bd..50279fe8b3bb 100644 --- a/components/pkt_capture/core/inc/wlan_pkt_capture_priv.h +++ b/components/pkt_capture/core/inc/wlan_pkt_capture_priv.h @@ -65,6 +65,8 @@ struct pkt_capture_cb_context { * @last_freq: Last connected freq * @curr_freq: current connected freq * @rx_vht_sgi: guard interval of vht rx packet + * @wake_lock: wake lock for packet capture + * @runtime_lock: runtime lock for packet capture */ struct pkt_capture_vdev_priv { struct wlan_objmgr_vdev *vdev; @@ -78,6 +80,8 @@ struct pkt_capture_vdev_priv { qdf_freq_t last_freq; qdf_freq_t curr_freq; uint8_t rx_vht_sgi; + qdf_wake_lock_t wake_lock; + qdf_runtime_lock_t runtime_lock; }; /** diff --git a/components/pkt_capture/core/src/wlan_pkt_capture_main.c b/components/pkt_capture/core/src/wlan_pkt_capture_main.c index d4009775dd07..97d7d2ba693f 100644 --- a/components/pkt_capture/core/src/wlan_pkt_capture_main.c +++ b/components/pkt_capture/core/src/wlan_pkt_capture_main.c @@ -35,6 +35,7 @@ #include "wlan_pkt_capture_tgt_api.h" #include #include "wlan_vdev_mgr_utils_api.h" +#include "host_diag_core_event.h" static struct wlan_objmgr_vdev *gp_pkt_capture_vdev; @@ -775,6 +776,10 @@ pkt_capture_register_callbacks(struct wlan_objmgr_vdev *vdev, goto send_mode_fail; } + qdf_wake_lock_acquire(&vdev_priv->wake_lock, + WIFI_POWER_EVENT_WAKELOCK_MONITOR_MODE); + qdf_runtime_pm_prevent_suspend(&vdev_priv->runtime_lock); + return QDF_STATUS_SUCCESS; send_mode_fail: @@ -845,6 +850,10 @@ QDF_STATUS pkt_capture_deregister_callbacks(struct wlan_objmgr_vdev *vdev) vdev_priv->cb_ctx->mon_cb = NULL; vdev_priv->cb_ctx->mon_ctx = NULL; + qdf_wake_lock_release(&vdev_priv->wake_lock, + WIFI_POWER_EVENT_WAKELOCK_MONITOR_MODE); + qdf_runtime_pm_allow_suspend(&vdev_priv->runtime_lock); + return QDF_STATUS_SUCCESS; } @@ -1097,6 +1106,8 @@ pkt_capture_vdev_create_notification(struct wlan_objmgr_vdev *vdev, void *arg) } qdf_spinlock_create(&vdev_priv->lock_q); qdf_list_create(&vdev_priv->ppdu_stats_q, PPDU_STATS_Q_MAX_SIZE); + qdf_wake_lock_create(&vdev_priv->wake_lock, "pkt_capture_mode"); + qdf_runtime_lock_init(&vdev_priv->runtime_lock); return status; @@ -1133,6 +1144,9 @@ pkt_capture_vdev_destroy_notification(struct wlan_objmgr_vdev *vdev, void *arg) return QDF_STATUS_E_FAILURE; } + qdf_runtime_lock_deinit(&vdev_priv->runtime_lock); + qdf_wake_lock_destroy(&vdev_priv->wake_lock); + while (qdf_list_remove_front(&vdev_priv->ppdu_stats_q, &node) == QDF_STATUS_SUCCESS) { stats_node = qdf_container_of(