summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSameer Thalappil <sameert@qca.qualcomm.com>2014-01-21 16:56:06 -0800
committerPrakash Dhavali <pdhavali@qca.qualcomm.com>2014-01-26 21:37:05 -0800
commitb2f394b0cfe3c46513fee02428c4b5e5f0bb8a3e (patch)
tree13442aeb9d9186a30486e4bf4fdc4bf437c914e0
parent02f5426de71cf89667e3cb171473bedc4f3b51cc (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.h8
-rw-r--r--CORE/HDD/src/wlan_hdd_hostapd.c9
-rw-r--r--CORE/HDD/src/wlan_hdd_main.c56
-rw-r--r--CORE/HDD/src/wlan_hdd_p2p.c14
-rw-r--r--CORE/HDD/src/wlan_hdd_softap_tx_rx.c10
-rw-r--r--CORE/HDD/src/wlan_hdd_tx_rx.c10
-rw-r--r--CORE/VOSS/inc/i_vos_lock.h5
-rw-r--r--CORE/VOSS/src/vos_lock.c43
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;
}