Merge "wlan: Update Wakelock apis fix for kernel 4.19" into wlan-driver.lnx.1.0
diff --git a/CORE/VOSS/inc/i_vos_lock.h b/CORE/VOSS/inc/i_vos_lock.h
index cc213f7..804733c 100644
--- a/CORE/VOSS/inc/i_vos_lock.h
+++ b/CORE/VOSS/inc/i_vos_lock.h
@@ -77,8 +77,17 @@
typedef spinlock_t vos_spin_lock_t;
#if defined(WLAN_OPEN_SOURCE)
+
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
-typedef struct wakeup_source vos_wake_lock_t;
+/**
+ * typedef struct - vos_wake_lock_t
+ * @lock: this lock needs to be used in kernel version < 4.19
+ * @priv: this lock pointer needs to be used in kernel version >= 4.19
+ */
+typedef struct vos_wake_lock {
+ struct wakeup_source lock;
+ struct wakeup_source *priv;
+} vos_wake_lock_t;
#else
typedef struct wake_lock vos_wake_lock_t;
#endif
diff --git a/CORE/VOSS/src/vos_lock.c b/CORE/VOSS/src/vos_lock.c
index aaa9e50..c8b3bbf 100644
--- a/CORE/VOSS/src/vos_lock.c
+++ b/CORE/VOSS/src/vos_lock.c
@@ -482,11 +482,27 @@
return VOS_STATUS_SUCCESS;
}
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)) && \
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 19, 110)) || \
+ defined(WAKEUP_SOURCE_DEV)
+VOS_STATUS vos_wake_lock_init(vos_wake_lock_t *lock, const char *name)
+{
+ vos_mem_zero(lock, sizeof(*lock));
+ lock->priv = wakeup_source_register(lock->lock.dev, name);
+ if (!(lock->priv)) {
+ VOS_BUG(0);
+ return VOS_STATUS_E_FAILURE;
+ }
+
+ lock->lock = *(lock->priv);
+
+ return VOS_STATUS_SUCCESS;
+}
+#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)) && \
defined(WLAN_OPEN_SOURCE)
VOS_STATUS vos_wake_lock_init(vos_wake_lock_t *pLock, const char *name)
{
- wakeup_source_init(pLock, name);
+ wakeup_source_init(&pLock->lock, name);
+ pLock->priv = &(pLock->lock);
return VOS_STATUS_SUCCESS;
}
#else
@@ -513,8 +529,8 @@
defined(WLAN_OPEN_SOURCE)
static const char *vos_wake_lock_name(vos_wake_lock_t *pLock)
{
- if (pLock->name)
- return pLock->name;
+ if (pLock)
+ return pLock->lock.name;
return "UNNAMED_WAKELOCK";
}
@@ -548,7 +564,7 @@
vos_log_wlock_diag(reason, vos_wake_lock_name(pLock),
WIFI_POWER_EVENT_DEFAULT_WAKELOCK_TIMEOUT,
WIFI_POWER_EVENT_WAKELOCK_TAKEN);
- __pm_stay_awake(pLock);
+ __pm_stay_awake(pLock->priv);
return VOS_STATUS_SUCCESS;
}
#else
@@ -586,7 +602,7 @@
* Wakelock for Rx is frequent.
* It is reported only during active debug
*/
- __pm_wakeup_event(pLock, msec);
+ __pm_wakeup_event(pLock->priv, msec);
return VOS_STATUS_SUCCESS;
}
#else
@@ -630,7 +646,7 @@
vos_log_wlock_diag(reason, vos_wake_lock_name(pLock),
WIFI_POWER_EVENT_DEFAULT_WAKELOCK_TIMEOUT,
WIFI_POWER_EVENT_WAKELOCK_RELEASED);
- __pm_relax(pLock);
+ __pm_relax(pLock->priv);
return VOS_STATUS_SUCCESS;
}
#else
@@ -660,11 +676,19 @@
}
#endif
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)) && \
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 19, 110)) || \
+ defined(WAKEUP_SOURCE_DEV)
+VOS_STATUS vos_wake_lock_destroy(vos_wake_lock_t *lock)
+{
+ wakeup_source_unregister(lock->priv);
+ return VOS_STATUS_SUCCESS;
+}
+
+#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)) && \
defined(WLAN_OPEN_SOURCE)
VOS_STATUS vos_wake_lock_destroy(vos_wake_lock_t *pLock)
{
- wakeup_source_trash(pLock);
+ wakeup_source_trash(pLock->priv);
return VOS_STATUS_SUCCESS;
}
#else
@@ -691,7 +715,7 @@
defined(WLAN_OPEN_SOURCE)
bool vos_wake_lock_active(vos_wake_lock_t *lock)
{
- return lock->active;
+ return lock->priv->active;
}
#else
bool vos_wake_lock_active(vos_wake_lock_t *lock)