diff options
| author | Sameer Thalappil <sameert@qca.qualcomm.com> | 2014-01-21 16:56:06 -0800 |
|---|---|---|
| committer | Prakash Dhavali <pdhavali@qca.qualcomm.com> | 2014-01-26 21:37:05 -0800 |
| commit | b2f394b0cfe3c46513fee02428c4b5e5f0bb8a3e (patch) | |
| tree | 13442aeb9d9186a30486e4bf4fdc4bf437c914e0 | |
| parent | 02f5426de71cf89667e3cb171473bedc4f3b51cc (diff) | |
qcacld: Add generic APIs to support wakelock
The wakelock APIs implemented in VOSS is currently only applicable to
open source driver; extend these APIs for generic usage by using the
the APIs exported by CNSS platform driver. Also make changes to use
only the VOSS implementation for wakelock functionality.
CRs-Fixed: 605398
Change-Id: Ibb741a0e6195cd11777d68ac08fe3cb3d165f176
| -rw-r--r-- | CORE/HDD/inc/wlan_hdd_main.h | 8 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_hostapd.c | 9 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_main.c | 56 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_p2p.c | 14 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_softap_tx_rx.c | 10 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_tx_rx.c | 10 | ||||
| -rw-r--r-- | CORE/VOSS/inc/i_vos_lock.h | 5 | ||||
| -rw-r--r-- | CORE/VOSS/src/vos_lock.c | 43 |
8 files changed, 61 insertions, 94 deletions
diff --git a/CORE/HDD/inc/wlan_hdd_main.h b/CORE/HDD/inc/wlan_hdd_main.h index 877c4450b86f..d19d2d6fa526 100644 --- a/CORE/HDD/inc/wlan_hdd_main.h +++ b/CORE/HDD/inc/wlan_hdd_main.h @@ -1153,10 +1153,8 @@ struct hdd_context_s /* Thermal mitigation information */ hdd_thermal_mitigation_info_t tmInfo; -#ifdef WLAN_OPEN_SOURCE #ifdef WLAN_FEATURE_HOLD_RX_WAKELOCK - struct wake_lock rx_wake_lock; -#endif + vos_wake_lock_t rx_wake_lock; #endif /* @@ -1174,9 +1172,7 @@ struct hdd_context_s is invoked*/ v_BOOL_t is_dynamic_channel_range_set; -#ifdef WLAN_OPEN_SOURCE - struct wake_lock sap_wake_lock; -#endif + vos_wake_lock_t sap_wake_lock; #ifdef FEATURE_WLAN_TDLS eTDLSSupportMode tdls_mode; diff --git a/CORE/HDD/src/wlan_hdd_hostapd.c b/CORE/HDD/src/wlan_hdd_hostapd.c index 869b58f76386..2ae96c3601a5 100644 --- a/CORE/HDD/src/wlan_hdd_hostapd.c +++ b/CORE/HDD/src/wlan_hdd_hostapd.c @@ -683,13 +683,8 @@ VOS_STATUS hdd_hostapd_SAPEventCB( tpSap_Event pSapEvent, v_PVOID_t usrDataForCa if (!VOS_IS_STATUS_SUCCESS(vos_status)) hddLog(LOGE, FL("Failed to start AP inactivity timer\n")); } -#ifdef WLAN_OPEN_SOURCE - if (wake_lock_active(&pHddCtx->sap_wake_lock)) - { - wake_unlock(&pHddCtx->sap_wake_lock); - } - wake_lock_timeout(&pHddCtx->sap_wake_lock, msecs_to_jiffies(HDD_SAP_WAKE_LOCK_DURATION)); -#endif + vos_wake_lock_timeout_acquire(&pHddCtx->sap_wake_lock, + msecs_to_jiffies(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 d01153a545b1..9b69a9b936ac 100644 --- a/CORE/HDD/src/wlan_hdd_main.c +++ b/CORE/HDD/src/wlan_hdd_main.c @@ -194,9 +194,7 @@ static VOS_STATUS hdd_parse_ccx_beacon_req(tANI_U8 *pValue, */ #define NUM_OF_STA_DATA_TO_PRINT 16 -#ifdef WLAN_OPEN_SOURCE -static struct wake_lock wlan_wake_lock; -#endif +static vos_wake_lock_t wlan_wake_lock; /* set when SSR is needed after unload */ static e_hdd_ssr_required isSsrRequired = HDD_SSR_NOT_REQUIRED; @@ -8297,14 +8295,12 @@ void hdd_wlan_exit(hdd_context_t *pHddCtx) "%s: Failed to close VOSS Scheduler",__func__); VOS_ASSERT( VOS_IS_STATUS_SUCCESS( vosStatus ) ); } -#ifdef WLAN_OPEN_SOURCE #ifdef WLAN_FEATURE_HOLD_RX_WAKELOCK /* Destroy the wake lock */ - wake_lock_destroy(&pHddCtx->rx_wake_lock); + vos_wake_lock_destroy(&pHddCtx->rx_wake_lock); #endif /* Destroy the wake lock */ - wake_lock_destroy(&pHddCtx->sap_wake_lock); -#endif + vos_wake_lock_destroy(&pHddCtx->sap_wake_lock); //Close VOSS //This frees pMac(HAL) context. There should not be any call that requires pMac access after this. @@ -8532,29 +8528,17 @@ VOS_STATUS hdd_post_voss_start_config(hdd_context_t* pHddCtx) /* wake lock APIs for HDD */ void hdd_prevent_suspend(void) { -#ifdef WLAN_OPEN_SOURCE - wake_lock(&wlan_wake_lock); -#else - wcnss_prevent_suspend(); -#endif + vos_wake_lock_acquire(&wlan_wake_lock); } void hdd_allow_suspend(void) { -#ifdef WLAN_OPEN_SOURCE - wake_unlock(&wlan_wake_lock); -#else - wcnss_allow_suspend(); -#endif + vos_wake_lock_release(&wlan_wake_lock); } void hdd_allow_suspend_timeout(v_U32_t timeout) { -#ifdef WLAN_OPEN_SOURCE - wake_lock_timeout(&wlan_wake_lock, msecs_to_jiffies(timeout)); -#else - /* Do nothing as there is no API in wcnss for timeout*/ -#endif + vos_wake_lock_timeout_acquire(&wlan_wake_lock, msecs_to_jiffies(timeout)); } /**--------------------------------------------------------------------------- @@ -9505,18 +9489,14 @@ int hdd_wlan_startup(struct device *dev, v_VOID_t *hif_sc) pHddCtx->isLoadUnloadInProgress = FALSE; -#ifdef WLAN_OPEN_SOURCE #ifdef WLAN_FEATURE_HOLD_RX_WAKELOCK /* Initialize the wake lcok */ - wake_lock_init(&pHddCtx->rx_wake_lock, - WAKE_LOCK_SUSPEND, + vos_wake_lock_init(&pHddCtx->rx_wake_lock, "qcom_rx_wakelock"); #endif /* Initialize the wake lcok */ - wake_lock_init(&pHddCtx->sap_wake_lock, - WAKE_LOCK_SUSPEND, + vos_wake_lock_init(&pHddCtx->sap_wake_lock, "qcom_sap_wakelock"); -#endif vos_set_load_unload_in_progress(VOS_MODULE_ID_VOSS, FALSE); hdd_allow_suspend(); @@ -9702,9 +9682,7 @@ static int hdd_driver_init( void) ENTER(); -#ifdef WLAN_OPEN_SOURCE - wake_lock_init(&wlan_wake_lock, WAKE_LOCK_SUSPEND, "wlan"); -#endif + vos_wake_lock_init(&wlan_wake_lock, "wlan"); pr_info("%s: loading driver v%s\n", WLAN_MODULE_NAME, QWLAN_VERSIONSTR TIMER_MANAGER_STR MEMORY_DEBUG_STR); @@ -9715,9 +9693,7 @@ static int hdd_driver_init( void) { hddLog(VOS_TRACE_LEVEL_FATAL, "%s: Libra WLAN not Powered Up. " "exiting", __func__); -#ifdef WLAN_OPEN_SOURCE - wake_lock_destroy(&wlan_wake_lock); -#endif + vos_wake_lock_destroy(&wlan_wake_lock); return -EIO; } @@ -9736,9 +9712,7 @@ static int hdd_driver_init( void) } if (max_retries >= 5) { hddLog(VOS_TRACE_LEVEL_FATAL,"%s: WCNSS driver not ready", __func__); -#ifdef WLAN_OPEN_SOURCE - wake_lock_destroy(&wlan_wake_lock); -#endif + vos_wake_lock_destroy(&wlan_wake_lock); return -ENODEV; } #endif @@ -9852,9 +9826,7 @@ static int hdd_driver_init( void) vos_mem_exit(); #endif -#ifdef WLAN_OPEN_SOURCE - wake_lock_destroy(&wlan_wake_lock); -#endif + vos_wake_lock_destroy(&wlan_wake_lock); pr_err("%s: driver load failure\n", WLAN_MODULE_NAME); } else @@ -9982,9 +9954,7 @@ static void hdd_driver_exit(void) #endif done: -#ifdef WLAN_OPEN_SOURCE - wake_lock_destroy(&wlan_wake_lock); -#endif + vos_wake_lock_destroy(&wlan_wake_lock); pr_info("%s: driver unloaded\n", WLAN_MODULE_NAME); } diff --git a/CORE/HDD/src/wlan_hdd_p2p.c b/CORE/HDD/src/wlan_hdd_p2p.c index 71ae70988494..127fdc73f35b 100644 --- a/CORE/HDD/src/wlan_hdd_p2p.c +++ b/CORE/HDD/src/wlan_hdd_p2p.c @@ -1390,11 +1390,9 @@ void hdd_sendMgmtFrameOverMonitorIface( hdd_adapter_t *pMonAdapter, int needed_headroom = 0; int flag = HDD_RX_FLAG_IV_STRIPPED | HDD_RX_FLAG_DECRYPTED | HDD_RX_FLAG_MMIC_STRIPPED; -#ifdef WLAN_OPEN_SOURCE #ifdef WLAN_FEATURE_HOLD_RX_WAKELOCK hdd_context_t* pHddCtx = (hdd_context_t*)(pMonAdapter->pHddCtx); #endif -#endif hddLog( LOG1, FL("Indicate Frame over Monitor Intf")); if (NULL == pbFrames) @@ -1441,10 +1439,9 @@ void hdd_sendMgmtFrameOverMonitorIface( hdd_adapter_t *pMonAdapter, skb->dev = pMonAdapter->dev; skb->protocol = eth_type_trans( skb, skb->dev ); skb->ip_summed = CHECKSUM_NONE; -#ifdef WLAN_OPEN_SOURCE #ifdef WLAN_FEATURE_HOLD_RX_WAKELOCK - wake_lock_timeout(&pHddCtx->rx_wake_lock, msecs_to_jiffies(HDD_WAKE_LOCK_DURATION)); -#endif + vos_wake_lock_timeout_acquire(&pHddCtx->rx_wake_lock, + msecs_to_jiffies(HDD_WAKE_LOCK_DURATION)); #endif rxstat = netif_rx_ni(skb); if( NET_RX_SUCCESS == rxstat ) @@ -1708,11 +1705,9 @@ static void hdd_wlan_tx_complete( hdd_adapter_t* pAdapter, struct ieee80211_radiotap_header *rthdr; unsigned char *pos; struct sk_buff *skb = cfgState->skb; -#ifdef WLAN_OPEN_SOURCE #ifdef WLAN_FEATURE_HOLD_RX_WAKELOCK hdd_context_t *pHddCtx = (hdd_context_t*)(pAdapter->pHddCtx); #endif -#endif /* 2 Byte for TX flags and 1 Byte for Retry count */ u32 rtHdrLen = sizeof(*rthdr) + 3; @@ -1772,10 +1767,9 @@ static void hdd_wlan_tx_complete( hdd_adapter_t* pAdapter, skb->pkt_type = PACKET_OTHERHOST; skb->protocol = htons(ETH_P_802_2); memset( skb->cb, 0, sizeof( skb->cb ) ); -#ifdef WLAN_OPEN_SOURCE #ifdef WLAN_FEATURE_HOLD_RX_WAKELOCK - wake_lock_timeout(&pHddCtx->rx_wake_lock, msecs_to_jiffies(HDD_WAKE_LOCK_DURATION)); -#endif + vos_wake_lock_timeout_acquire(&pHddCtx->rx_wake_lock, + msecs_to_jiffies(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 39a11a6d62fa..ef408bbee1bf 100644 --- a/CORE/HDD/src/wlan_hdd_softap_tx_rx.c +++ b/CORE/HDD/src/wlan_hdd_softap_tx_rx.c @@ -1520,10 +1520,9 @@ VOS_STATUS hdd_softap_rx_packet_cbk( v_VOID_t *vosContext, skb->protocol = eth_type_trans(skb, skb->dev); skb->ip_summed = CHECKSUM_NONE; -#ifdef WLAN_OPEN_SOURCE #ifdef WLAN_FEATURE_HOLD_RX_WAKELOCK - wake_lock_timeout(&pHddCtx->rx_wake_lock, msecs_to_jiffies(HDD_WAKE_LOCK_DURATION)); -#endif + vos_wake_lock_timeout_acquire(&pHddCtx->rx_wake_lock, + msecs_to_jiffies(HDD_WAKE_LOCK_DURATION)); #endif rxstat = netif_rx_ni(skb); if (NET_RX_SUCCESS == rxstat) @@ -1629,10 +1628,9 @@ VOS_STATUS hdd_softap_rx_packet_cbk(v_VOID_t *vosContext, "%s: send one packet to kernel \n", __func__); skb->protocol = eth_type_trans(skb, skb->dev); -#ifdef WLAN_OPEN_SOURCE #ifdef WLAN_FEATURE_HOLD_RX_WAKELOCK - wake_lock_timeout(&pHddCtx->rx_wake_lock, msecs_to_jiffies(HDD_WAKE_LOCK_DURATION)); -#endif + vos_wake_lock_timeout_acquire(&pHddCtx->rx_wake_lock, + msecs_to_jiffies(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 ae555b150314..28f7adb26747 100644 --- a/CORE/HDD/src/wlan_hdd_tx_rx.c +++ b/CORE/HDD/src/wlan_hdd_tx_rx.c @@ -1786,10 +1786,9 @@ VOS_STATUS hdd_rx_packet_cbk( v_VOID_t *vosContext, ++pAdapter->hdd_stats.hddTxRxStats.rxPackets; ++pAdapter->stats.rx_packets; pAdapter->stats.rx_bytes += skb->len; -#ifdef WLAN_OPEN_SOURCE #ifdef WLAN_FEATURE_HOLD_RX_WAKELOCK - wake_lock_timeout(&pHddCtx->rx_wake_lock, msecs_to_jiffies(HDD_WAKE_LOCK_DURATION)); -#endif + vos_wake_lock_timeout_acquire(&pHddCtx->rx_wake_lock, + msecs_to_jiffies(HDD_WAKE_LOCK_DURATION)); #endif rxstat = netif_rx_ni(skb); if (NET_RX_SUCCESS == rxstat) @@ -2025,10 +2024,9 @@ VOS_STATUS hdd_rx_packet_cbk(v_VOID_t *vosContext, ++pAdapter->hdd_stats.hddTxRxStats.rxPackets; ++pAdapter->stats.rx_packets; pAdapter->stats.rx_bytes += skb->len; -#ifdef WLAN_OPEN_SOURCE #ifdef WLAN_FEATURE_HOLD_RX_WAKELOCK - wake_lock_timeout(&pHddCtx->rx_wake_lock, msecs_to_jiffies(HDD_WAKE_LOCK_DURATION)); -#endif + vos_wake_lock_timeout_acquire(&pHddCtx->rx_wake_lock, + msecs_to_jiffies(HDD_WAKE_LOCK_DURATION)); #endif rxstat = netif_rx_ni(skb); if (NET_RX_SUCCESS == rxstat) diff --git a/CORE/VOSS/inc/i_vos_lock.h b/CORE/VOSS/inc/i_vos_lock.h index dd670661fc29..57b053ebae02 100644 --- a/CORE/VOSS/inc/i_vos_lock.h +++ b/CORE/VOSS/inc/i_vos_lock.h @@ -44,6 +44,7 @@ #include <linux/mutex.h> #include <linux/spinlock.h> #include <linux/sched.h> +#include <linux/device.h> #ifdef WLAN_OPEN_SOURCE #include <linux/wakelock.h> #endif @@ -69,7 +70,9 @@ typedef struct vos_lock_s typedef spinlock_t vos_spin_lock_t; -#ifdef WLAN_OPEN_SOURCE +#if defined CONFIG_CNSS +typedef struct wakeup_source vos_wake_lock_t; +#elif defined WLAN_OPEN_SOURCE typedef struct wake_lock vos_wake_lock_t; #else typedef int vos_wake_lock_t; diff --git a/CORE/VOSS/src/vos_lock.c b/CORE/VOSS/src/vos_lock.c index b7f6f4f31e83..071cd94e11dd 100644 --- a/CORE/VOSS/src/vos_lock.c +++ b/CORE/VOSS/src/vos_lock.c @@ -48,6 +48,9 @@ #include "vos_lock.h" #include "vos_memory.h" #include "vos_trace.h" +#ifdef CONFIG_CNSS +#include <net/cnss.h> +#endif /*---------------------------------------------------------------------------- @@ -486,10 +489,12 @@ VOS_STATUS vos_spin_lock_destroy(vos_spin_lock_t *pLock) --------------------------------------------------------------------------*/ VOS_STATUS vos_wake_lock_init(vos_wake_lock_t *pLock, const char *name) { -#ifdef WLAN_OPEN_SOURCE - wake_lock_init(pLock, WAKE_LOCK_SUSPEND, name); +#if defined CONFIG_CNSS + cnss_pm_wake_lock_init(pLock, name); +#elif defined WLAN_OPEN_SOURCE + wake_lock_init(pLock, WAKE_LOCK_SUSPEND, name); #endif - return VOS_STATUS_SUCCESS; + return VOS_STATUS_SUCCESS; } /*-------------------------------------------------------------------------- @@ -503,10 +508,12 @@ VOS_STATUS vos_wake_lock_init(vos_wake_lock_t *pLock, const char *name) ------------------------------------------------------------------------*/ VOS_STATUS vos_wake_lock_acquire(vos_wake_lock_t *pLock) { -#ifdef WLAN_OPEN_SOURCE - wake_lock(pLock); +#if defined CONFIG_CNSS + cnss_pm_wake_lock(pLock); +#elif defined WLAN_OPEN_SOURCE + wake_lock(pLock); #endif - return VOS_STATUS_SUCCESS; + return VOS_STATUS_SUCCESS; } /*-------------------------------------------------------------------------- @@ -520,10 +527,12 @@ VOS_STATUS vos_wake_lock_acquire(vos_wake_lock_t *pLock) ------------------------------------------------------------------------*/ VOS_STATUS vos_wake_lock_timeout_acquire(vos_wake_lock_t *pLock, v_U32_t msec) { -#ifdef WLAN_OPEN_SOURCE - wake_lock_timeout(pLock, msecs_to_jiffies(msec)); +#if defined CONFIG_CNSS + cnss_pm_wake_lock_timeout(pLock, msec); +#elif defined WLAN_OPEN_SOURCE + wake_lock_timeout(pLock, msecs_to_jiffies(msec)); #endif - return VOS_STATUS_SUCCESS; + return VOS_STATUS_SUCCESS; } /*-------------------------------------------------------------------------- @@ -537,10 +546,12 @@ VOS_STATUS vos_wake_lock_timeout_acquire(vos_wake_lock_t *pLock, v_U32_t msec) ------------------------------------------------------------------------*/ VOS_STATUS vos_wake_lock_release(vos_wake_lock_t *pLock) { -#ifdef WLAN_OPEN_SOURCE - wake_unlock(pLock); +#if defined CONFIG_CNSS + cnss_pm_wake_lock_release(pLock); +#elif defined WLAN_OPEN_SOURCE + wake_unlock(pLock); #endif - return VOS_STATUS_SUCCESS; + return VOS_STATUS_SUCCESS; } /*-------------------------------------------------------------------------- @@ -554,8 +565,10 @@ VOS_STATUS vos_wake_lock_release(vos_wake_lock_t *pLock) ------------------------------------------------------------------------*/ VOS_STATUS vos_wake_lock_destroy(vos_wake_lock_t *pLock) { -#ifdef WLAN_OPEN_SOURCE - wake_lock_destroy(pLock); +#if defined CONFIG_CNSS + cnss_pm_wake_lock_destroy(pLock); +#elif defined WLAN_OPEN_SOURCE + wake_lock_destroy(pLock); #endif - return VOS_STATUS_SUCCESS; + return VOS_STATUS_SUCCESS; } |
