diff options
| author | Sundar Subramaniyan <subrams@qti.qualcomm.com> | 2014-02-23 00:58:10 +0530 |
|---|---|---|
| committer | Akash Patel <c_akashp@qca.qualcomm.com> | 2014-02-27 10:58:08 -0800 |
| commit | fb84e4edc1409c93f863638b482b04ce648227af (patch) | |
| tree | 25de7951a362cd0df3070314888aa870a2f10648 | |
| parent | 4f8467de559e77461fc242e20ef5791187ad945b (diff) | |
qcacld: Fix the timeout value passed to vos wakelock API
- Fix the timeout value that is passed to the vos wake lock
API. It takes parameter in milli seconds. The calling functions
are actually converting milli seconds to jiffies and passing it
which is wrong. So fix this in all calling functions wherever
the vos wakelock timeout APIs are called with wrong timeout.
- Also, add macros to the wakelock duration which were hardcoded
in WMA.
- Cleanup the WMA wow wakeup handler to handle the different
cases in switch-case instead of cluttering if-conditions.
Change-Id: I3c3389dd06dd56e62812ebd6e50d11e0be70e040
CRs-Fixed: 619610
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_hostapd.c | 2 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_main.c | 2 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_p2p.c | 4 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_softap_tx_rx.c | 4 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_tx_rx.c | 4 | ||||
| -rw-r--r-- | CORE/SERVICES/WMA/wma.c | 82 | ||||
| -rw-r--r-- | CORE/SERVICES/WMA/wma.h | 6 |
7 files changed, 63 insertions, 41 deletions
diff --git a/CORE/HDD/src/wlan_hdd_hostapd.c b/CORE/HDD/src/wlan_hdd_hostapd.c index 7bf5741e5e9b..cae84263f45a 100644 --- a/CORE/HDD/src/wlan_hdd_hostapd.c +++ b/CORE/HDD/src/wlan_hdd_hostapd.c @@ -711,7 +711,7 @@ VOS_STATUS hdd_hostapd_SAPEventCB( tpSap_Event pSapEvent, v_PVOID_t usrDataForCa hddLog(LOGE, FL("Failed to start AP inactivity timer\n")); } vos_wake_lock_timeout_acquire(&pHddCtx->sap_wake_lock, - msecs_to_jiffies(HDD_SAP_WAKE_LOCK_DURATION)); + HDD_SAP_WAKE_LOCK_DURATION); #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) { struct station_info staInfo; diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c index 30ad93ef3e27..df9f59662cb7 100644 --- a/CORE/HDD/src/wlan_hdd_main.c +++ b/CORE/HDD/src/wlan_hdd_main.c @@ -8816,7 +8816,7 @@ void hdd_allow_suspend(void) void hdd_allow_suspend_timeout(v_U32_t timeout) { - vos_wake_lock_timeout_acquire(&wlan_wake_lock, msecs_to_jiffies(timeout)); + vos_wake_lock_timeout_acquire(&wlan_wake_lock, timeout); } /**--------------------------------------------------------------------------- diff --git a/CORE/HDD/src/wlan_hdd_p2p.c b/CORE/HDD/src/wlan_hdd_p2p.c index d664c00cbf45..642a067d1fab 100644 --- a/CORE/HDD/src/wlan_hdd_p2p.c +++ b/CORE/HDD/src/wlan_hdd_p2p.c @@ -1460,7 +1460,7 @@ void hdd_sendMgmtFrameOverMonitorIface( hdd_adapter_t *pMonAdapter, skb->ip_summed = CHECKSUM_NONE; #ifdef WLAN_FEATURE_HOLD_RX_WAKELOCK vos_wake_lock_timeout_acquire(&pHddCtx->rx_wake_lock, - msecs_to_jiffies(HDD_WAKE_LOCK_DURATION)); + HDD_WAKE_LOCK_DURATION); #endif rxstat = netif_rx_ni(skb); if( NET_RX_SUCCESS == rxstat ) @@ -1788,7 +1788,7 @@ static void hdd_wlan_tx_complete( hdd_adapter_t* pAdapter, memset( skb->cb, 0, sizeof( skb->cb ) ); #ifdef WLAN_FEATURE_HOLD_RX_WAKELOCK vos_wake_lock_timeout_acquire(&pHddCtx->rx_wake_lock, - msecs_to_jiffies(HDD_WAKE_LOCK_DURATION)); + HDD_WAKE_LOCK_DURATION); #endif if (in_interrupt()) netif_rx( skb ); diff --git a/CORE/HDD/src/wlan_hdd_softap_tx_rx.c b/CORE/HDD/src/wlan_hdd_softap_tx_rx.c index 64fff5970a58..163d8db62ff2 100644 --- a/CORE/HDD/src/wlan_hdd_softap_tx_rx.c +++ b/CORE/HDD/src/wlan_hdd_softap_tx_rx.c @@ -1534,7 +1534,7 @@ VOS_STATUS hdd_softap_rx_packet_cbk( v_VOID_t *vosContext, skb->ip_summed = CHECKSUM_NONE; #ifdef WLAN_FEATURE_HOLD_RX_WAKELOCK vos_wake_lock_timeout_acquire(&pHddCtx->rx_wake_lock, - msecs_to_jiffies(HDD_WAKE_LOCK_DURATION)); + HDD_WAKE_LOCK_DURATION); #endif rxstat = netif_rx_ni(skb); if (NET_RX_SUCCESS == rxstat) @@ -1642,7 +1642,7 @@ VOS_STATUS hdd_softap_rx_packet_cbk(v_VOID_t *vosContext, skb->protocol = eth_type_trans(skb, skb->dev); #ifdef WLAN_FEATURE_HOLD_RX_WAKELOCK vos_wake_lock_timeout_acquire(&pHddCtx->rx_wake_lock, - msecs_to_jiffies(HDD_WAKE_LOCK_DURATION)); + HDD_WAKE_LOCK_DURATION); #endif rxstat = netif_rx_ni(skb); if (NET_RX_SUCCESS == rxstat) diff --git a/CORE/HDD/src/wlan_hdd_tx_rx.c b/CORE/HDD/src/wlan_hdd_tx_rx.c index ab764e816143..a3a7208bc1f7 100644 --- a/CORE/HDD/src/wlan_hdd_tx_rx.c +++ b/CORE/HDD/src/wlan_hdd_tx_rx.c @@ -1790,7 +1790,7 @@ VOS_STATUS hdd_rx_packet_cbk( v_VOID_t *vosContext, pAdapter->stats.rx_bytes += skb->len; #ifdef WLAN_FEATURE_HOLD_RX_WAKELOCK vos_wake_lock_timeout_acquire(&pHddCtx->rx_wake_lock, - msecs_to_jiffies(HDD_WAKE_LOCK_DURATION)); + HDD_WAKE_LOCK_DURATION); #endif rxstat = netif_rx_ni(skb); if (NET_RX_SUCCESS == rxstat) @@ -2028,7 +2028,7 @@ VOS_STATUS hdd_rx_packet_cbk(v_VOID_t *vosContext, pAdapter->stats.rx_bytes += skb->len; #ifdef WLAN_FEATURE_HOLD_RX_WAKELOCK vos_wake_lock_timeout_acquire(&pHddCtx->rx_wake_lock, - msecs_to_jiffies(HDD_WAKE_LOCK_DURATION)); + HDD_WAKE_LOCK_DURATION); #endif rxstat = netif_rx_ni(skb); if (NET_RX_SUCCESS == rxstat) diff --git a/CORE/SERVICES/WMA/wma.c b/CORE/SERVICES/WMA/wma.c index 059babbeda3c..7d5aeac08467 100644 --- a/CORE/SERVICES/WMA/wma.c +++ b/CORE/SERVICES/WMA/wma.c @@ -11628,6 +11628,7 @@ static int wma_wow_wakeup_host_event(void *handle, u_int8_t *event, WMI_WOW_WAKEUP_HOST_EVENTID_param_tlvs *param_buf; WOW_EVENT_INFO_fixed_param *wake_info; struct wma_txrx_node *node; + u_int32_t wake_lock_duration = 0; param_buf = (WMI_WOW_WAKEUP_HOST_EVENTID_param_tlvs *) event; if (!param_buf) { @@ -11641,51 +11642,68 @@ static int wma_wow_wakeup_host_event(void *handle, u_int8_t *event, wma_wow_wake_reason_str(wake_info->wake_reason), wake_info->vdev_id); - if (wake_info->wake_reason == WOW_REASON_AUTH_REQ_RECV) { - WMA_LOGD("Holding 50 sec wake_lock"); - vos_wake_lock_timeout_acquire(&wma->wow_wake_lock, 50000); - } else if (wake_info->wake_reason == WOW_REASON_ASSOC_REQ_RECV) { - WMA_LOGD("Holding 30 sec wake_lock"); - vos_wake_lock_timeout_acquire(&wma->wow_wake_lock, 30000); - } else if (wake_info->wake_reason == WOW_REASON_DEAUTH_RECVD) { - WMA_LOGD("Holding 30 sec wake_lock"); - vos_wake_lock_timeout_acquire(&wma->wow_wake_lock, 30000); - } else if (wake_info->wake_reason == WOW_REASON_DISASSOC_RECVD) { - WMA_LOGD("Holding 30 sec wake_lock"); - vos_wake_lock_timeout_acquire(&wma->wow_wake_lock, 30000); - } - - if(wake_info->wake_reason == WOW_REASON_AP_ASSOC_LOST) { + switch (wake_info->wake_reason) { + case WOW_REASON_AUTH_REQ_RECV: + wake_lock_duration = WMA_AUTH_REQ_RECV_WAKE_LOCK_TIMEOUT; + break; + + case WOW_REASON_ASSOC_REQ_RECV: + wake_lock_duration = WMA_ASSOC_REQ_RECV_WAKE_LOCK_DURATION; + break; + + case WOW_REASON_DEAUTH_RECVD: + wake_lock_duration = WMA_DEAUTH_RECV_WAKE_LOCK_DURATION; + break; + + case WOW_REASON_DISASSOC_RECVD: + wake_lock_duration = WMA_DISASSOC_RECV_WAKE_LOCK_DURATION; + break; + + case WOW_REASON_AP_ASSOC_LOST: WMA_LOGA("Beacon miss indication on vdev %x", - wake_info->vdev_id); + wake_info->vdev_id); wma_beacon_miss_handler(wma, wake_info->vdev_id); - } + break; + #ifdef FEATURE_WLAN_SCAN_PNO - if (wake_info->wake_reason == WOW_REASON_NLOD) { + case WOW_REASON_NLOD: + wake_lock_duration = WMA_PNO_WAKE_LOCK_TIMEOUT; node = &wma->interfaces[wake_info->vdev_id]; if (node) { WMA_LOGD("NLO match happened"); node->nlo_match_evt_received = TRUE; } - - WMA_LOGD("Holding %d sec wake_lock", WMA_PNO_WAKE_LOCK_TIMEOUT); - vos_wake_lock_timeout_acquire(&wma->pno_wake_lock, - WMA_PNO_WAKE_LOCK_TIMEOUT); - } + break; #endif - if (wake_info->wake_reason == WOW_REASON_CSA_EVENT) { - WMI_CSA_HANDLING_EVENTID_param_tlvs param; + case WOW_REASON_CSA_EVENT: + { + WMI_CSA_HANDLING_EVENTID_param_tlvs param; + WMA_LOGD("Host woken up because of CSA IE"); + param.fixed_param = (wmi_csa_event_fixed_param *) + (((u_int8_t *) wake_info) + + sizeof(WOW_EVENT_INFO_fixed_param) + + WOW_CSA_EVENT_OFFSET); + wma_csa_offload_handler(handle, (u_int8_t *)¶m, + sizeof(param)); + } + break; - WMA_LOGD("Host woken up because of CSA IE"); - param.fixed_param = (wmi_csa_event_fixed_param *) (((u_int8_t *) wake_info) + - sizeof(WOW_EVENT_INFO_fixed_param) + WOW_CSA_EVENT_OFFSET); - wma_csa_offload_handler(handle, (u_int8_t *)¶m, sizeof(param)); - } #ifdef FEATURE_WLAN_LPHB - if(wake_info->wake_reason == WOW_REASON_WLAN_HB) + case WOW_REASON_WLAN_HB: wma_lphb_handler(wma, (u_int8_t *)param_buf->hb_indevt); -#endif /* FEATURE_WLAN_LPHB */ + break; +#endif + + default: + break; + } + + if (wake_lock_duration) { + vos_wake_lock_timeout_acquire(&wma->wow_wake_lock, + wake_lock_duration); + WMA_LOGD("Holding %d msec wake_lock", wake_lock_duration); + } return 0; } diff --git a/CORE/SERVICES/WMA/wma.h b/CORE/SERVICES/WMA/wma.h index 2933ac73acb9..770c3e29fb0c 100644 --- a/CORE/SERVICES/WMA/wma.h +++ b/CORE/SERVICES/WMA/wma.h @@ -1236,7 +1236,11 @@ VOS_STATUS wma_send_snr_request(tp_wma_handle wma_handle, void *pGetRssiReq); /* Default rssi threshold defined in CFG80211 */ #define WMA_RSSI_THOLD_DEFAULT -300 -#define WMA_PNO_WAKE_LOCK_TIMEOUT (30 * 1000) /* in msec */ +#define WMA_PNO_WAKE_LOCK_TIMEOUT (30 * 1000) /* in msec */ +#define WMA_AUTH_REQ_RECV_WAKE_LOCK_TIMEOUT (50 * 1000) /* in msec */ +#define WMA_ASSOC_REQ_RECV_WAKE_LOCK_DURATION (30 * 1000) /* in msec */ +#define WMA_DEAUTH_RECV_WAKE_LOCK_DURATION (30 * 1000) /* in msec */ +#define WMA_DISASSOC_RECV_WAKE_LOCK_DURATION (30 * 1000) /* in msec */ #endif |
