qcacld-3.0: Remove wow wake lock overloading
Currently, Host uses single wow_wake-lock for all wow wakeup events like (auth/assoc/deauth/disassoc etc) which raise difficulty to detect what is actual cause of holding wake lock. As a part of this fix, Add separate multiple wake locks to remove wake lock overloading. Change-Id: Iac0a6f73ac05dd3960a4ea0229190cb851808e16 CRs-Fixed: 2046511
This commit is contained in:
@@ -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;
|
||||
|
@@ -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:
|
||||
|
@@ -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 */
|
||||
|
@@ -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;
|
||||
|
Reference in New Issue
Block a user