diff --git a/core/wma/inc/wma.h b/core/wma/inc/wma.h index 106d80aba1..b67e43ae4d 100644 --- a/core/wma/inc/wma.h +++ b/core/wma/inc/wma.h @@ -328,6 +328,8 @@ enum ds_mode { #define WMA_ROAM_HO_WAKE_LOCK_DURATION (500) /* in msec */ #ifdef FEATURE_WLAN_AUTO_SHUTDOWN #define WMA_AUTO_SHUTDOWN_WAKE_LOCK_DURATION (5 * 1000) /* in msec */ +#else +#define WMA_AUTO_SHUTDOWN_WAKE_LOCK_DURATION 0 /* in msec */ #endif #define WMA_BMISS_EVENT_WAKE_LOCK_DURATION (4 * 1000) /* in msec */ #define WMA_FW_RSP_EVENT_WAKE_LOCK_DURATION (3 * 1000) /* in msec */ @@ -1281,6 +1283,13 @@ struct hw_mode_idx_to_mac_cap_idx { * @pno_wake_lock: PNO wake lock * @extscan_wake_lock: extscan wake lock * @wow_wake_lock: wow wake lock + * @wow_auth_req_wl: wow wake lock for auth req + * @wow_assoc_req_wl: wow wake lock for assoc req + * @wow_deauth_rec_wl: wow wake lock for deauth req + * @wow_disassoc_rec_wl: wow wake lock for disassoc req + * @wow_ap_assoc_lost_wl: wow wake lock for assoc lost req + * @wow_auto_shutdown_wl: wow wake lock for shutdown req + * @roam_ho_wl: wake lock for roam handoff req * @wow_nack: wow negative ack flag * @ap_client_cnt: ap client count * @is_wow_bus_suspended: is wow bus suspended flag @@ -1442,6 +1451,13 @@ typedef struct { qdf_wake_lock_t extscan_wake_lock; #endif qdf_wake_lock_t wow_wake_lock; + qdf_wake_lock_t wow_auth_req_wl; + qdf_wake_lock_t wow_assoc_req_wl; + qdf_wake_lock_t wow_deauth_rec_wl; + qdf_wake_lock_t wow_disassoc_rec_wl; + qdf_wake_lock_t wow_ap_assoc_lost_wl; + qdf_wake_lock_t wow_auto_shutdown_wl; + qdf_wake_lock_t roam_ho_wl; int wow_nack; qdf_atomic_t is_wow_bus_suspended; qdf_mc_timer_t wma_scan_comp_timer; diff --git a/core/wma/src/wma_features.c b/core/wma/src/wma_features.c index 0534665575..c216be7623 100644 --- a/core/wma/src/wma_features.c +++ b/core/wma/src/wma_features.c @@ -2207,33 +2207,33 @@ static void wma_acquire_wow_wakelock(t_wma_handle *wma, int wake_reason) switch (wake_reason) { case WOW_REASON_AUTH_REQ_RECV: - wl = &wma->wow_wake_lock; + wl = &wma->wow_auth_req_wl; ms = WMA_AUTH_REQ_RECV_WAKE_LOCK_TIMEOUT; break; case WOW_REASON_ASSOC_REQ_RECV: - wl = &wma->wow_wake_lock; + wl = &wma->wow_assoc_req_wl; ms = WMA_ASSOC_REQ_RECV_WAKE_LOCK_DURATION; break; case WOW_REASON_DEAUTH_RECVD: - wl = &wma->wow_wake_lock; + wl = &wma->wow_deauth_rec_wl; ms = WMA_DEAUTH_RECV_WAKE_LOCK_DURATION; break; case WOW_REASON_DISASSOC_RECVD: - wl = &wma->wow_wake_lock; + wl = &wma->wow_disassoc_rec_wl; ms = WMA_DISASSOC_RECV_WAKE_LOCK_DURATION; break; case WOW_REASON_AP_ASSOC_LOST: - wl = &wma->wow_wake_lock; + wl = &wma->wow_ap_assoc_lost_wl; ms = WMA_BMISS_EVENT_WAKE_LOCK_DURATION; break; #ifdef FEATURE_WLAN_AUTO_SHUTDOWN case WOW_REASON_HOST_AUTO_SHUTDOWN: - wl = &wma->wow_wake_lock; + wl = &wma->wow_auto_shutdown_wl; ms = WMA_AUTO_SHUTDOWN_WAKE_LOCK_DURATION; break; #endif case WOW_REASON_ROAM_HO: - wl = &wma->wow_wake_lock; + wl = &wma->roam_ho_wl; ms = WMA_ROAM_HO_WAKE_LOCK_DURATION; break; default: diff --git a/core/wma/src/wma_main.c b/core/wma/src/wma_main.c index 2937cf7289..8661635b89 100644 --- a/core/wma/src/wma_main.c +++ b/core/wma/src/wma_main.c @@ -2148,7 +2148,22 @@ QDF_STATUS wma_open(struct wlan_objmgr_psoc *psoc, void *cds_context, qdf_wake_lock_create(&wma_handle->extscan_wake_lock, "wlan_extscan_wl"); #endif /* FEATURE_WLAN_EXTSCAN */ - qdf_wake_lock_create(&wma_handle->wow_wake_lock, "wlan_wow_wl"); + qdf_wake_lock_create(&wma_handle->wow_wake_lock, + "wlan_wow_wl"); + qdf_wake_lock_create(&wma_handle->wow_auth_req_wl, + "wlan_auth_req_wl"); + qdf_wake_lock_create(&wma_handle->wow_assoc_req_wl, + "wlan_assoc_req_wl"); + qdf_wake_lock_create(&wma_handle->wow_deauth_rec_wl, + "wlan_deauth_rec_wl"); + qdf_wake_lock_create(&wma_handle->wow_disassoc_rec_wl, + "wlan_disassoc_rec_wl"); + qdf_wake_lock_create(&wma_handle->wow_ap_assoc_lost_wl, + "wlan_ap_assoc_lost_wl"); + qdf_wake_lock_create(&wma_handle->wow_auto_shutdown_wl, + "wlan_auto_shutdown_wl"); + qdf_wake_lock_create(&wma_handle->roam_ho_wl, + "wlan_roam_ho_wl"); } qdf_status = wlan_objmgr_psoc_try_get_ref(psoc, WLAN_LEGACY_WMA_ID); @@ -2606,6 +2621,13 @@ err_wma_handle: qdf_wake_lock_destroy(&wma_handle->extscan_wake_lock); #endif /* FEATURE_WLAN_EXTSCAN */ qdf_wake_lock_destroy(&wma_handle->wow_wake_lock); + qdf_wake_lock_destroy(&wma_handle->wow_auth_req_wl); + qdf_wake_lock_destroy(&wma_handle->wow_assoc_req_wl); + qdf_wake_lock_destroy(&wma_handle->wow_deauth_rec_wl); + qdf_wake_lock_destroy(&wma_handle->wow_disassoc_rec_wl); + qdf_wake_lock_destroy(&wma_handle->wow_ap_assoc_lost_wl); + qdf_wake_lock_destroy(&wma_handle->wow_auto_shutdown_wl); + qdf_wake_lock_destroy(&wma_handle->roam_ho_wl); } cds_free_context(cds_context, QDF_MODULE_ID_WMA, wma_handle); @@ -3565,6 +3587,13 @@ QDF_STATUS wma_close(void *cds_ctx) qdf_wake_lock_destroy(&wma_handle->extscan_wake_lock); #endif /* FEATURE_WLAN_EXTSCAN */ qdf_wake_lock_destroy(&wma_handle->wow_wake_lock); + qdf_wake_lock_destroy(&wma_handle->wow_auth_req_wl); + qdf_wake_lock_destroy(&wma_handle->wow_assoc_req_wl); + qdf_wake_lock_destroy(&wma_handle->wow_deauth_rec_wl); + qdf_wake_lock_destroy(&wma_handle->wow_disassoc_rec_wl); + qdf_wake_lock_destroy(&wma_handle->wow_ap_assoc_lost_wl); + qdf_wake_lock_destroy(&wma_handle->wow_auto_shutdown_wl); + qdf_wake_lock_destroy(&wma_handle->roam_ho_wl); } /* unregister Firmware debug log */ diff --git a/core/wma/src/wma_scan_roam.c b/core/wma/src/wma_scan_roam.c index 225612ab5b..a22add73ae 100644 --- a/core/wma/src/wma_scan_roam.c +++ b/core/wma/src/wma_scan_roam.c @@ -2342,7 +2342,10 @@ int wma_roam_synch_event_handler(void *handle, uint8_t *event, } WMA_LOGE("LFR3: Received WMA_ROAM_OFFLOAD_SYNCH_IND"); - qdf_wake_lock_timeout_acquire(&wma->wow_wake_lock, + cds_host_diag_log_work(&wma->roam_ho_wl, + WMA_ROAM_HO_WAKE_LOCK_DURATION, + WIFI_POWER_EVENT_WAKELOCK_WOW); + qdf_wake_lock_timeout_acquire(&wma->roam_ho_wl, WMA_ROAM_HO_WAKE_LOCK_DURATION); wma->interfaces[synch_event->vdev_id].roam_synch_in_progress = true;