From 1c055e55a242a33e574e48be530e06770a210dcd Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Mon, 19 Feb 2024 03:26:26 +0000
Subject: [PATCH] add r8169 read mac form eeprom

---
 kernel/drivers/net/wireless/rockchip_wlan/cywdhd/bcmdhd/include/linuxver.h |  261 ++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 200 insertions(+), 61 deletions(-)

diff --git a/kernel/drivers/net/wireless/rockchip_wlan/cywdhd/bcmdhd/include/linuxver.h b/kernel/drivers/net/wireless/rockchip_wlan/cywdhd/bcmdhd/include/linuxver.h
index 88c4999..268d126 100644
--- a/kernel/drivers/net/wireless/rockchip_wlan/cywdhd/bcmdhd/include/linuxver.h
+++ b/kernel/drivers/net/wireless/rockchip_wlan/cywdhd/bcmdhd/include/linuxver.h
@@ -1,16 +1,17 @@
-/* SPDX-License-Identifier: GPL-2.0 */
 /*
  * Linux-specific abstractions to gain some independence from linux kernel versions.
  * Pave over some 2.2 versus 2.4 versus 2.6 kernel differences.
  *
- * Copyright (C) 1999-2019, Broadcom Corporation
- * 
+ * Portions of this code are copyright (c) 2022 Cypress Semiconductor Corporation
+ *
+ * Copyright (C) 1999-2017, Broadcom Corporation
+ *
  *      Unless you and Broadcom execute a separate written software license
  * agreement governing use of this software, this software is licensed to you
  * under the terms of the GNU General Public License version 2 (the "GPL"),
  * available at http://www.broadcom.com/licenses/GPLv2.php, with the
  * following added to such license:
- * 
+ *
  *      As a special exception, the copyright holders of this software give you
  * permission to link this software with independent modules, and to copy and
  * distribute the resulting executable under terms of your choice, provided that
@@ -18,7 +19,7 @@
  * the license of that module.  An independent module is a module which is not
  * derived from this software.  The special exception does not apply to any
  * modifications of the software.
- * 
+ *
  *      Notwithstanding the above, under no circumstances may you combine this
  * software in any way with any other Broadcom software provided under a license
  * other than the GPL, without Broadcom's express prior written consent.
@@ -26,7 +27,7 @@
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
- * $Id: linuxver.h 514727 2014-11-12 03:02:48Z $
+ * $Id: linuxver.h 646730 2016-06-30 13:01:49Z $
  */
 
 #ifndef _linuxver_h_
@@ -36,7 +37,7 @@
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wunused-but-set-variable"
 #pragma GCC diagnostic ignored "-Wunused-but-set-parameter"
-#endif
+#endif // endif
 
 #include <typedefs.h>
 #include <linux/version.h>
@@ -47,12 +48,12 @@
 #include <generated/autoconf.h>
 #else
 #include <linux/autoconf.h>
-#endif
+#endif // endif
 #endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0)) */
 
 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 1, 0))
 #include <linux/kconfig.h>
-#endif
+#endif // endif
 #include <linux/module.h>
 
 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 3, 0))
@@ -61,21 +62,21 @@
 #undef __NO_VERSION__
 #else
 #define __NO_VERSION__
-#endif
+#endif // endif
 #endif	/* LINUX_VERSION_CODE < KERNEL_VERSION(2, 3, 0) */
 
 #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 5, 0)
 #define module_param(_name_, _type_, _perm_)	MODULE_PARM(_name_, "i")
 #define module_param_string(_name_, _string_, _size_, _perm_) \
 		MODULE_PARM(_string_, "c" __MODULE_STRING(_size_))
-#endif
+#endif // endif
 
 /* linux/malloc.h is deprecated, use linux/slab.h instead. */
 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 4, 9))
 #include <linux/malloc.h>
 #else
 #include <linux/slab.h>
-#endif
+#endif // endif
 
 #include <linux/types.h>
 #include <linux/init.h>
@@ -101,16 +102,16 @@
 #include <linux/tqueue.h>
 #ifndef work_struct
 #define work_struct tq_struct
-#endif
+#endif // endif
 #ifndef INIT_WORK
 #define INIT_WORK(_work, _func, _data) INIT_TQUEUE((_work), (_func), (_data))
-#endif
+#endif // endif
 #ifndef schedule_work
 #define schedule_work(_work) schedule_task((_work))
-#endif
+#endif // endif
 #ifndef flush_scheduled_work
 #define flush_scheduled_work() flush_scheduled_tasks()
-#endif
+#endif // endif
 #endif	/* LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 41) */
 
 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0))
@@ -140,7 +141,7 @@
 	(RHEL_MAJOR == 5))
 /* Exclude RHEL 5 */
 typedef void (*work_func_t)(void *work);
-#endif
+#endif // endif
 #endif	/* >= 2.6.20 */
 
 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0))
@@ -150,7 +151,7 @@
 #define IRQ_NONE
 #define IRQ_HANDLED
 #define IRQ_RETVAL(x)
-#endif
+#endif // endif
 #else
 typedef irqreturn_t(*FN_ISR) (int irq, void *dev_id, struct pt_regs *ptregs);
 #endif	/* LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0) */
@@ -162,7 +163,7 @@
 #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 17)
 #ifdef	CONFIG_NET_RADIO
 #define	CONFIG_WIRELESS_EXT
-#endif
+#endif // endif
 #endif	/* < 2.6.17 */
 
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 5, 67)
@@ -174,28 +175,32 @@
 #include <linux/sched.h>
 #endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 32) */
 
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0))
+#include <linux/signal.h>
+#include <linux/sched/signal.h>
+#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0) */
+
 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 9, 0))
 #include <linux/sched/rt.h>
 #endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3, 9, 0) */
 
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 29)
 #include <net/lib80211.h>
-#endif
+#endif // endif
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 29)
 #include <linux/ieee80211.h>
 #else
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 14)
 #include <net/ieee80211.h>
-#endif
+#endif // endif
 #endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 30) */
-
 
 #ifndef __exit
 #define __exit
-#endif
+#endif // endif
 #ifndef __devexit
 #define __devexit
-#endif
+#endif // endif
 #ifndef __devinit
 #  if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 8, 0))
 #    define __devinit	__init
@@ -206,10 +211,10 @@
 #endif /* !__devinit */
 #ifndef __devinitdata
 #define __devinitdata
-#endif
+#endif // endif
 #ifndef __devexit_p
 #define __devexit_p(x)	x
-#endif
+#endif // endif
 
 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 4, 0))
 
@@ -252,7 +257,7 @@
 
 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 18))
 #define pci_module_init pci_register_driver
-#endif
+#endif // endif
 
 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 2, 18))
 #ifdef MODULE
@@ -261,39 +266,39 @@
 #else
 #define module_init(x)	__initcall(x);
 #define module_exit(x)	__exitcall(x);
-#endif
+#endif // endif
 #endif	/* LINUX_VERSION_CODE < KERNEL_VERSION(2, 2, 18) */
 
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 31)
 #define WL_USE_NETDEV_OPS
 #else
 #undef WL_USE_NETDEV_OPS
-#endif
+#endif // endif
 
 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 31)) && defined(CONFIG_RFKILL)
 #define WL_CONFIG_RFKILL
 #else
 #undef WL_CONFIG_RFKILL
-#endif
+#endif // endif
 
 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 3, 48))
 #define list_for_each(pos, head) \
 	for (pos = (head)->next; pos != (head); pos = pos->next)
-#endif
+#endif // endif
 
 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 3, 13))
 #define pci_resource_start(dev, bar)	((dev)->base_address[(bar)])
 #elif (LINUX_VERSION_CODE < KERNEL_VERSION(2, 3, 44))
 #define pci_resource_start(dev, bar)	((dev)->resource[(bar)].start)
-#endif
+#endif // endif
 
 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 3, 23))
 #define pci_enable_device(dev) do { } while (0)
-#endif
+#endif // endif
 
 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 3, 14))
 #define net_device device
-#endif
+#endif // endif
 
 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 3, 42))
 
@@ -306,7 +311,7 @@
 #ifndef PCI_DMA_TODEVICE
 #define	PCI_DMA_TODEVICE	1
 #define	PCI_DMA_FROMDEVICE	2
-#endif
+#endif // endif
 
 typedef u32 dma_addr_t;
 
@@ -347,6 +352,41 @@
 #define pci_unmap_single(cookie, address, size, dir)
 
 #endif /* DMA mapping */
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 15, 0)
+typedef struct timer_list timer_list_compat_t;
+
+#define init_timer_compat(timer_compat, cb, priv) \
+	init_timer(timer_compat); \
+	(timer_compat)->data = (ulong)priv; \
+	(timer_compat)->function = cb
+#define timer_set_private(timer_compat, priv) (timer_compat)->data = (ulong)priv
+#define timer_expires(timer_compat) (timer_compat)->expires
+
+#else /* LINUX_VERSION_CODE < KERNEL_VERSION(4, 15, 0) */
+
+typedef struct timer_list_compat {
+	struct timer_list timer;
+	void *arg;
+	void (*callback)(ulong arg);
+} timer_list_compat_t;
+
+extern void timer_cb_compat(struct timer_list *tl);
+
+#define init_timer_compat(timer_compat, cb, priv) \
+	(timer_compat)->arg = priv; \
+	(timer_compat)->callback = cb; \
+	timer_setup(&(timer_compat)->timer, timer_cb_compat, 0);
+#define timer_set_private(timer_compat, priv) (timer_compat)->arg = priv
+#define timer_expires(timer_compat) (timer_compat)->timer.expires
+
+#define del_timer(t) del_timer(&((t)->timer))
+#define del_timer_sync(t) del_timer_sync(&((t)->timer))
+#define timer_pending(t) timer_pending(&((t)->timer))
+#define add_timer(t) add_timer(&((t)->timer))
+#define mod_timer(t, j) mod_timer(&((t)->timer), j)
+
+#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(4, 15, 0) */
 
 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 3, 43))
 
@@ -445,7 +485,7 @@
 #else
 #define	PCI_SAVE_STATE(a, b)	pci_save_state(a, b)
 #define	PCI_RESTORE_STATE(a, b)	pci_restore_state(a, b)
-#endif
+#endif // endif
 
 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 4, 6))
 static inline int
@@ -488,7 +528,7 @@
 /* Old cp0 access macros deprecated in 2.4.19 */
 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 4, 19))
 #define read_c0_count() read_32bit_cp0_register(CP0_COUNT)
-#endif
+#endif // endif
 
 /* Module refcount handled internally in 2.6.x */
 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 24))
@@ -499,46 +539,46 @@
 #else
 #define OLD_MOD_INC_USE_COUNT		do {} while (0)
 #define OLD_MOD_DEC_USE_COUNT		do {} while (0)
-#endif
+#endif // endif
 #else /* LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 24) */
 #ifndef SET_MODULE_OWNER
 #define SET_MODULE_OWNER(dev)		do {} while (0)
-#endif
+#endif // endif
 #ifndef MOD_INC_USE_COUNT
 #define MOD_INC_USE_COUNT			do {} while (0)
-#endif
+#endif // endif
 #ifndef MOD_DEC_USE_COUNT
 #define MOD_DEC_USE_COUNT			do {} while (0)
-#endif
+#endif // endif
 #define OLD_MOD_INC_USE_COUNT		MOD_INC_USE_COUNT
 #define OLD_MOD_DEC_USE_COUNT		MOD_DEC_USE_COUNT
 #endif /* LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 24) */
 
 #ifndef SET_NETDEV_DEV
 #define SET_NETDEV_DEV(net, pdev)	do {} while (0)
-#endif
+#endif // endif
 
 #if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 1, 0))
 #ifndef HAVE_FREE_NETDEV
 #define free_netdev(dev)		kfree(dev)
-#endif
+#endif // endif
 #endif /* LINUX_VERSION_CODE < KERNEL_VERSION(3, 1, 0) */
 
 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0))
 /* struct packet_type redefined in 2.6.x */
 #define af_packet_priv			data
-#endif
+#endif // endif
 
 /* suspend args */
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 11)
 #define DRV_SUSPEND_STATE_TYPE pm_message_t
 #else
 #define DRV_SUSPEND_STATE_TYPE uint32
-#endif
+#endif // endif
 
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19)
 #define CHECKSUM_HW	CHECKSUM_PARTIAL
-#endif
+#endif // endif
 
 typedef struct {
 	void	*parent;  /* some external entity that the thread supposed to work for */
@@ -549,10 +589,11 @@
 	struct	semaphore sema;
 	int	terminated;
 	struct	completion completed;
+	int	flush_ind;
+	struct	completion flushed;
 	spinlock_t	spinlock;
 	int		up_cnt;
 } tsk_ctl_t;
-
 
 /* requires  tsk_ctl_t tsk  argument, the caller's priv data is passed in owner ptr */
 /* note this macro assumes there may be only one context waiting on thread's completion */
@@ -560,7 +601,7 @@
 #define DBG_THR(x) printk x
 #else
 #define DBG_THR(x)
-#endif
+#endif // endif
 
 static inline bool binary_sema_down(tsk_ctl_t *tsk)
 {
@@ -600,40 +641,111 @@
 	return sem_up;
 }
 
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0))
+#if  (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 9, 0))
+#define SMP_RD_BARRIER_DEPENDS(x)
+#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0))
 #define SMP_RD_BARRIER_DEPENDS(x) smp_read_barrier_depends(x)
 #else
 #define SMP_RD_BARRIER_DEPENDS(x) smp_rmb(x)
-#endif
+#endif // endif
 
 #define PROC_START(thread_func, owner, tsk_ctl, flags, name) \
 { \
 	sema_init(&((tsk_ctl)->sema), 0); \
 	init_completion(&((tsk_ctl)->completed)); \
+	init_completion(&((tsk_ctl)->flushed)); \
 	(tsk_ctl)->parent = owner; \
 	(tsk_ctl)->proc_name = name;  \
 	(tsk_ctl)->terminated = FALSE; \
+	(tsk_ctl)->flush_ind = FALSE; \
+	(tsk_ctl)->up_cnt = 0; \
 	(tsk_ctl)->p_task  = kthread_run(thread_func, tsk_ctl, (char*)name); \
-	(tsk_ctl)->thr_pid = (tsk_ctl)->p_task->pid; \
-	spin_lock_init(&((tsk_ctl)->spinlock)); \
-	DBG_THR(("%s(): thread:%s:%lx started\n", __FUNCTION__, \
-		(tsk_ctl)->proc_name, (tsk_ctl)->thr_pid)); \
+	if (IS_ERR((tsk_ctl)->p_task)) { \
+		(tsk_ctl)->thr_pid = -1; \
+		DBG_THR(("%s(): thread:%s create failed\n", __FUNCTION__, \
+			(tsk_ctl)->proc_name)); \
+	} else { \
+		(tsk_ctl)->thr_pid = (tsk_ctl)->p_task->pid; \
+		spin_lock_init(&((tsk_ctl)->spinlock)); \
+		DBG_THR(("%s(): thread:%s:%lx started\n", __FUNCTION__, \
+			(tsk_ctl)->proc_name, (tsk_ctl)->thr_pid)); \
+	}; \
 }
+
+#define PROC_WAIT_TIMEOUT_MSEC	5000 /* 5 seconds */
 
 #define PROC_STOP(tsk_ctl) \
 { \
+	uint timeout = (uint)msecs_to_jiffies(PROC_WAIT_TIMEOUT_MSEC); \
 	(tsk_ctl)->terminated = TRUE; \
 	smp_wmb(); \
 	up(&((tsk_ctl)->sema));	\
-	wait_for_completion(&((tsk_ctl)->completed)); \
-	DBG_THR(("%s(): thread:%s:%lx terminated OK\n", __FUNCTION__, \
+	DBG_THR(("%s(): thread:%s:%lx wait for terminate\n", __FUNCTION__, \
 			 (tsk_ctl)->proc_name, (tsk_ctl)->thr_pid)); \
+	timeout = (uint)wait_for_completion_timeout(&((tsk_ctl)->completed), timeout); \
+	if (timeout == 0) \
+		DBG_THR(("%s(): thread:%s:%lx terminate timeout\n", __FUNCTION__, \
+			 (tsk_ctl)->proc_name, (tsk_ctl)->thr_pid)); \
+	else \
+		DBG_THR(("%s(): thread:%s:%lx terminated OK\n", __FUNCTION__, \
+			 (tsk_ctl)->proc_name, (tsk_ctl)->thr_pid)); \
+	(tsk_ctl)->parent = NULL; \
+	(tsk_ctl)->proc_name = NULL;  \
 	(tsk_ctl)->thr_pid = -1; \
+	(tsk_ctl)->up_cnt = 0; \
+}
+
+#define PROC_STOP_USING_BINARY_SEMA(tsk_ctl) \
+{ \
+	uint timeout = (uint)msecs_to_jiffies(PROC_WAIT_TIMEOUT_MSEC); \
+	(tsk_ctl)->terminated = TRUE; \
+	smp_wmb(); \
+	binary_sema_up(tsk_ctl);	\
+	DBG_THR(("%s(): thread:%s:%lx wait for terminate\n", __FUNCTION__, \
+			 (tsk_ctl)->proc_name, (tsk_ctl)->thr_pid)); \
+	timeout = (uint)wait_for_completion_timeout(&((tsk_ctl)->completed), timeout); \
+	if (timeout == 0) \
+		DBG_THR(("%s(): thread:%s:%lx terminate timeout\n", __FUNCTION__, \
+			 (tsk_ctl)->proc_name, (tsk_ctl)->thr_pid)); \
+	else \
+		DBG_THR(("%s(): thread:%s:%lx terminated OK\n", __FUNCTION__, \
+			 (tsk_ctl)->proc_name, (tsk_ctl)->thr_pid)); \
+	(tsk_ctl)->parent = NULL; \
+	(tsk_ctl)->proc_name = NULL;  \
+	(tsk_ctl)->thr_pid = -1; \
+}
+
+/*
+* Flush is non-rentrant, so callers must make sure
+* there is no race condition.
+* For safer exit, added wait_for_completion_timeout
+* with 1 sec timeout.
+*/
+#define PROC_FLUSH_USING_BINARY_SEMA(tsk_ctl) \
+{ \
+	uint timeout = (uint)msecs_to_jiffies(PROC_WAIT_TIMEOUT_MSEC); \
+	(tsk_ctl)->flush_ind = TRUE; \
+	smp_wmb(); \
+	binary_sema_up(tsk_ctl);	\
+	DBG_THR(("%s(): thread:%s:%lx wait for flush\n", __FUNCTION__, \
+			 (tsk_ctl)->proc_name, (tsk_ctl)->thr_pid)); \
+	timeout = (uint)wait_for_completion_timeout(&((tsk_ctl)->flushed), timeout); \
+	if (timeout == 0) \
+		DBG_THR(("%s(): thread:%s:%lx flush timeout\n", __FUNCTION__, \
+			 (tsk_ctl)->proc_name, (tsk_ctl)->thr_pid)); \
+	else \
+		DBG_THR(("%s(): thread:%s:%lx flushed OK\n", __FUNCTION__, \
+			 (tsk_ctl)->proc_name, (tsk_ctl)->thr_pid)); \
 }
 
 /*  ----------------------- */
 
 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 31))
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 18, 0)
+/* send_sig declaration moved */
+#include <linux/sched/signal.h>
+#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(4, 18, 0) */
+
 #define KILL_PROC(nr, sig) \
 { \
 struct task_struct *tsk; \
@@ -656,7 +768,7 @@
 { \
 	kill_proc(pid, sig, 1); \
 }
-#endif
+#endif // endif
 #endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 31) */
 
 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0))
@@ -708,7 +820,7 @@
 #define DEV_PRIV(dev)	(dev->priv)
 #else
 #define DEV_PRIV(dev)	netdev_priv(dev)
-#endif
+#endif // endif
 
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 20)
 #define WL_ISR(i, d, p)         wl_isr((i), (d))
@@ -724,14 +836,16 @@
 #define CAN_SLEEP()	((!in_atomic() && !irqs_disabled()))
 #else
 #define CAN_SLEEP()	(FALSE)
-#endif
+#endif // endif
 
 #define KMALLOC_FLAG (CAN_SLEEP() ? GFP_KERNEL: GFP_ATOMIC)
 
 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0))
 #define RANDOM32	prandom_u32
+#define RANDOM_BYTES	prandom_bytes
 #else
 #define RANDOM32	random32
+#define RANDOM_BYTES	get_random_bytes
 #endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0) */
 
 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0))
@@ -744,7 +858,7 @@
  * Overide latest kfifo functions with
  * older version to work on older kernels
  */
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 33))
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 33)) && !defined(WL_COMPAT_WIRELESS)
 #define kfifo_in_spinlocked(a, b, c, d)		kfifo_put(a, (u8 *)b, c)
 #define kfifo_out_spinlocked(a, b, c, d)	kfifo_get(a, (u8 *)b, c)
 #define kfifo_esize(a)				1
@@ -757,6 +871,31 @@
 
 #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)
 #pragma GCC diagnostic pop
-#endif
+#endif // endif
+
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 9, 0))
+static inline struct inode *file_inode(const struct file *f)
+{
+	return f->f_dentry->d_inode;
+}
+#endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(3, 9, 0)) */
+
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 14, 0)
+#define vfs_write(fp, buf, len, pos) kernel_write(fp, buf, len, pos)
+#define vfs_read(fp, buf, len, pos) kernel_read(fp, buf, len, pos)
+int kernel_read_compat(struct file *file, loff_t offset, char *addr, unsigned long count);
+#else /* LINUX_VERSION_CODE >= KERNEL_VERSION(4, 14, 0) */
+#define kernel_read_compat(file, offset, addr, count) kernel_read(file, offset, addr, count)
+#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(4, 14, 0) */
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 17, 0)
+#define timespec64 timespec
+#define ktime_get_real_ts64(timespec) ktime_get_real_ts(timespec)
+#define ktime_to_timespec64(timespec) ktime_to_timespec(timespec)
+#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(3, 17, 0) */
+
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 6, 0)
+#define rtc_time_to_tm(time, tm) rtc_time64_to_tm(time, tm)
+#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(5, 6, 0) */
 
 #endif /* _linuxver_h_ */

--
Gitblit v1.6.2