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:
Mukul Sharma
2017-05-23 21:50:56 +05:30
committed by snandini
parent 9c161dd8a7
commit e44d054ec2
4 changed files with 57 additions and 9 deletions

View File

@@ -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;

View File

@@ -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:

View File

@@ -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 */

View File

@@ -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;