1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
diff --git a/hal/OUTSRC/odm_types.h b/hal/OUTSRC/odm_types.h
index 27cecce..0d3407a 100644
--- a/hal/OUTSRC/odm_types.h
+++ b/hal/OUTSRC/odm_types.h
@@ -148,7 +148,11 @@ typedef enum _RT_SPINLOCK_TYPE{
typedef struct rtl8192cd_priv *prtl8192cd_priv;
typedef struct stat_info STA_INFO_T,*PSTA_INFO_T;
+#if defined(LINUX_VERSION_CODE) && (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0))
+ typedef struct legacy_timer_emu RT_TIMER, *PRT_TIMER;
+#else
typedef struct timer_list RT_TIMER, *PRT_TIMER;
+#endif
typedef void * RT_TIMER_CALL_BACK;
#define DEV_BUS_TYPE RT_PCI_INTERFACE
@@ -175,7 +179,11 @@ typedef enum _RT_SPINLOCK_TYPE{
typedef struct rtl8192cd_priv *prtl8192cd_priv;
typedef struct stat_info STA_INFO_T,*PSTA_INFO_T;
+#if defined(LINUX_VERSION_CODE) && (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0))
+ typedef struct legacy_timer_emu RT_TIMER, *PRT_TIMER;
+#else
typedef struct timer_list RT_TIMER, *PRT_TIMER;
+#endif
typedef void * RT_TIMER_CALL_BACK;
#define DEV_BUS_TYPE RT_PCI_INTERFACE
@@ -238,7 +246,11 @@ typedef enum _RT_SPINLOCK_TYPE{
#define ODM_ENDIAN_TYPE ODM_ENDIAN_BIG
#endif
+#if defined(LINUX_VERSION_CODE) && (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0))
+ typedef struct legacy_timer_emu RT_TIMER, *PRT_TIMER;
+#else
typedef struct timer_list RT_TIMER, *PRT_TIMER;
+#endif
typedef void * RT_TIMER_CALL_BACK;
#define STA_INFO_T struct sta_info
#define PSTA_INFO_T struct sta_info *
diff --git a/include/osdep_service.h b/include/osdep_service.h
index b262938..0464e02 100644
--- a/include/osdep_service.h
+++ b/include/osdep_service.h
@@ -318,8 +318,12 @@ extern void rtw_init_timer(_timer *ptimer, void *padapter, void *pfunc);
__inline static unsigned char _cancel_timer_ex(_timer *ptimer)
{
#ifdef PLATFORM_LINUX
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0))
+ return del_timer_sync(&ptimer->t);
+#else
return del_timer_sync(ptimer);
#endif
+#endif
#ifdef PLATFORM_FREEBSD
_cancel_timer(ptimer,0);
return 0;
diff --git a/include/osdep_service_linux.h b/include/osdep_service_linux.h
index 3cf1c30..d733520 100644
--- a/include/osdep_service_linux.h
+++ b/include/osdep_service_linux.h
@@ -124,7 +124,15 @@
#else
typedef struct semaphore _mutex;
#endif
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0))
+ typedef struct legacy_timer_emu {
+ struct timer_list t;
+ void (*function)(unsigned long);
+ unsigned long data;
+ } _timer;
+#else
typedef struct timer_list _timer;
+#endif
struct __queue {
struct list_head queue;
@@ -256,23 +264,41 @@ __inline static void rtw_list_delete(_list *plist)
}
#define RTW_TIMER_HDL_ARGS void *FunctionContext
-
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0))
+static void legacy_timer_emu_func(struct timer_list *t)
+{
+ struct legacy_timer_emu *lt = from_timer(lt, t, t);
+ lt->function(lt->data);
+}
+#endif
__inline static void _init_timer(_timer *ptimer,_nic_hdl nic_hdl,void *pfunc,void* cntx)
{
//setup_timer(ptimer, pfunc,(u32)cntx);
ptimer->function = pfunc;
ptimer->data = (unsigned long)cntx;
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0))
+ timer_setup(&ptimer->t, legacy_timer_emu_func, 0);
+#else
init_timer(ptimer);
+#endif
}
__inline static void _set_timer(_timer *ptimer,u32 delay_time)
{
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0))
+ mod_timer(&ptimer->t, (jiffies+(delay_time*HZ/1000)));
+#else
mod_timer(ptimer , (jiffies+(delay_time*HZ/1000)));
+#endif
}
__inline static void _cancel_timer(_timer *ptimer,u8 *bcancelled)
{
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0))
+ del_timer_sync(&ptimer->t);
+#else
del_timer_sync(ptimer);
+#endif
*bcancelled= _TRUE;//TRUE ==1; FALSE==0
}
|