Merge "prima: Update driver timer APIs according to kernel 4.19" into wlan-driver.lnx.1.0
diff --git a/CORE/HDD/inc/wlan_hdd_wmm.h b/CORE/HDD/inc/wlan_hdd_wmm.h
index 4e1eb23..16cee8f 100644
--- a/CORE/HDD/inc/wlan_hdd_wmm.h
+++ b/CORE/HDD/inc/wlan_hdd_wmm.h
@@ -264,14 +264,23 @@
@return : Qdisc queue index
===========================================================================*/
-v_U16_t hdd_hostapd_select_queue(struct net_device * dev, struct sk_buff *skb
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,13,0))
- , void *accel_priv
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 19, 0))
+uint16_t hdd_hostapd_select_queue(struct net_device *dev, struct sk_buff *skb,
+ struct net_device *sb_dev,
+ select_queue_fallback_t fallbac);
+
+#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 14, 0))
+uint16_t hdd_hostapd_select_queue(struct net_device *dev, struct sk_buff *skb,
+ void *accel_priv,
+ select_queue_fallback_t fallbac);
+
+#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 13, 0))
+uint16_t hdd_hostapd_select_queue(struct net_device *dev, struct sk_buff *skb,
+ void *accel_priv);
+
+#else
+uint16_t hdd_hostapd_select_queue(struct net_device *dev, struct sk_buff *skb);
#endif
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,14,0))
- , select_queue_fallback_t fallbac
-#endif
-);
/**============================================================================
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c
index 541af37..31ef7d3 100644
--- a/CORE/HDD/src/wlan_hdd_cfg80211.c
+++ b/CORE/HDD/src/wlan_hdd_cfg80211.c
@@ -15962,14 +15962,23 @@
if( request->n_channels )
{
- char chList [(request->n_channels*5)+1];
int len;
+ char *chList;
+
+ chList = vos_mem_malloc((request->n_channels * 5) + 1);
+ if (!chList) {
+ hddLog(VOS_TRACE_LEVEL_ERROR,
+ "%s: memory alloc failed channelList", __func__);
+ status = -ENOMEM;
+ }
+
channelList = vos_mem_malloc( request->n_channels );
if( NULL == channelList )
{
hddLog(VOS_TRACE_LEVEL_ERROR,
"%s: memory alloc failed channelList", __func__);
status = -ENOMEM;
+ vos_mem_free(chList);
goto free_mem;
}
@@ -15981,6 +15990,7 @@
hddLog(VOS_TRACE_LEVEL_INFO,
"Channel-List: %s ", chList);
+ vos_mem_free(chList);
}
scanRequest.ChannelInfo.numOfChannels = request->n_channels;
@@ -20397,9 +20407,17 @@
num_ch = 0;
if (request->n_channels)
{
- char chList [(request->n_channels*5)+1];
int len;
- for (i = 0, len = 0; i < request->n_channels; i++)
+ char *chList;
+
+ chList = vos_mem_malloc((request->n_channels * 5) + 1);
+ if (!chList) {
+ hddLog(VOS_TRACE_LEVEL_ERROR,
+ "%s: memory alloc failed channelList", __func__);
+ status = -ENOMEM;
+ }
+
+ for (i = 0, len = 0; i < request->n_channels; i++)
{
for (indx = 0; indx < num_channels_allowed; indx++)
{
@@ -20430,8 +20448,10 @@
VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO,
"%s : All requested channels are DFS channels", __func__);
ret = -EINVAL;
+ vos_mem_free(chList);
goto error;
}
+ vos_mem_free(chList);
}
pnoRequest.aNetworks =
diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c
index 67d86ce..547d901 100644
--- a/CORE/HDD/src/wlan_hdd_main.c
+++ b/CORE/HDD/src/wlan_hdd_main.c
@@ -257,15 +257,21 @@
void hdd_set_vowifi_mode(hdd_context_t *hdd_ctx, bool enable);
void hdd_set_olpc_mode(tHalHandle hHal, bool low_power);
-v_U16_t hdd_select_queue(struct net_device *dev,
- struct sk_buff *skb
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,13,0))
- , void *accel_priv
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 19, 0))
+uint16_t hdd_select_queue(struct net_device *dev, struct sk_buff *skb,
+ struct net_device *sb_dev,
+ select_queue_fallback_t fallback);
+
+#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 14, 0))
+uint16_t hdd_select_queue(struct net_device *dev, struct sk_buff *skb,
+ void *accel_priv, select_queue_fallback_t fallback);
+
+#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 13, 0))
+uint16_t hdd_select_queue(struct net_device *dev, struct sk_buff *skb,
+ void *accel_priv);
+#else
+uint16_t hdd_select_queue(struct net_device *dev, struct sk_buff *skb);
#endif
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,14,0))
- , select_queue_fallback_t fallback
-#endif
-);
#ifdef WLAN_FEATURE_PACKET_FILTERING
static void hdd_set_multicast_list(struct net_device *dev);
@@ -12235,19 +12241,31 @@
\return - ac, Queue Index/access category corresponding to UP in IP header
--------------------------------------------------------------------------*/
-v_U16_t hdd_select_queue(struct net_device *dev,
- struct sk_buff *skb
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,13,0))
- , void *accel_priv
-#endif
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,14,0))
- , select_queue_fallback_t fallback
-#endif
-)
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 19, 0))
+v_U16_t hdd_select_queue(struct net_device *dev, struct sk_buff *skb,
+ struct net_device *sb_dev,
+ select_queue_fallback_t fallback)
{
- return hdd_wmm_select_queue(dev, skb);
+ return hdd_wmm_select_queue(dev, skb);
}
-
+#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 14, 0))
+v_U16_t hdd_select_queue(struct net_device *dev, struct sk_buff *skb,
+ void *accel_priv, select_queue_fallback_t fallback)
+{
+ return hdd_wmm_select_queue(dev, skb);
+}
+#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 13, 0))
+v_U16_t hdd_select_queue(struct net_device *dev, struct sk_buff *skb,
+ void *accel_priv)
+{
+ return hdd_wmm_select_queue(dev, skb);
+}
+#else
+v_U16_t hdd_select_queue(struct net_device *dev, struct sk_buff *skb)
+{
+ return hdd_wmm_select_queue(dev, skb);
+}
+#endif
/**---------------------------------------------------------------------------
diff --git a/CORE/HDD/src/wlan_hdd_wmm.c b/CORE/HDD/src/wlan_hdd_wmm.c
index 9c2ad34..fbb2c32 100644
--- a/CORE/HDD/src/wlan_hdd_wmm.c
+++ b/CORE/HDD/src/wlan_hdd_wmm.c
@@ -2191,7 +2191,7 @@
}
/**============================================================================
- @brief hdd_hostapd_select_quueue() - Function which will classify the packet
+ @brief __hdd_hostapd_select_queue() - Function which will classify the packet
according to linux qdisc expectation.
@@ -2200,14 +2200,8 @@
@return : Qdisc queue index
===========================================================================*/
-v_U16_t hdd_hostapd_select_queue(struct net_device * dev, struct sk_buff *skb
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,13,0))
- , void *accel_priv
-#endif
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,14,0))
- , select_queue_fallback_t fallbac
-#endif
-)
+uint16_t __hdd_hostapd_select_queue(struct net_device *dev,
+ struct sk_buff *skb)
{
WLANTL_ACEnumType ac;
sme_QosWmmUpType up = SME_QOS_WMM_UP_BE;
@@ -2283,6 +2277,34 @@
return queueIndex;
}
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 19, 0))
+uint16_t hdd_hostapd_select_queue(struct net_device *dev, struct sk_buff *skb,
+ struct net_device *sb_dev,
+ select_queue_fallback_t fallbac)
+{
+ return __hdd_hostapd_select_queue(dev, skb);
+}
+
+#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 14, 0))
+uint16_t hdd_hostapd_select_queue(struct net_device *dev, struct sk_buff *skb,
+ void *accel_priv,
+ select_queue_fallback_t fallbac)
+{
+ return __hdd_hostapd_select_queue(dev, skb);
+}
+#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 13, 0))
+uint16_t hdd_hostapd_select_queue(struct net_device *dev, struct sk_buff *skb,
+ void *accel_priv)
+{
+ return __hdd_hostapd_select_queue(dev, skb);
+}
+#else
+uint16_t hdd_hostapd_select_queue(struct net_device *dev, struct sk_buff *skb)
+{
+ return __hdd_hostapd_select_queue(dev, skb);
+}
+#endif
+
/**============================================================================
@brief hdd_wmm_select_quueue() - Function which will classify the packet
according to linux qdisc expectation.
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)