| --- a/driver/wl_linux.c |
| +++ b/driver/wl_linux.c |
| @@ -235,7 +235,11 @@ |
| |
| }; |
| |
| +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0) |
| +static void wl_timer(struct timer_list *tl); |
| +#else |
| static void wl_timer(ulong data); |
| +#endif |
| static void _wl_timer(wl_timer_t *t); |
| |
| #ifdef WLC_HIGH_ONLY |
| @@ -2512,6 +2517,18 @@ |
| } |
| #endif /* WLC_HIGH_ONLY */ |
| |
| +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0) |
| +static void |
| +wl_timer(struct timer_list *tl) |
| +{ |
| + wl_timer_t *t = from_timer(t, tl, timer); |
| +#ifndef WLC_HIGH_ONLY |
| + _wl_timer(t); |
| +#else |
| + wl_schedule_task(t->wl, wl_timer_task, t); |
| +#endif /* WLC_HIGH_ONLY */ |
| +} |
| +#else |
| static void |
| wl_timer(ulong data) |
| { |
| @@ -2522,6 +2539,7 @@ |
| wl_schedule_task(t->wl, wl_timer_task, t); |
| #endif /* WLC_HIGH_ONLY */ |
| } |
| +#endif /* linux >= 4.15.0 */ |
| |
| static void |
| _wl_timer(wl_timer_t *t) |
| @@ -2573,9 +2591,13 @@ |
| |
| bzero(t, sizeof(wl_timer_t)); |
| |
| +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0) |
| + timer_setup(&t->timer, wl_timer, 0); |
| +#else |
| init_timer(&t->timer); |
| t->timer.data = (ulong) t; |
| t->timer.function = wl_timer; |
| +#endif |
| t->wl = wl; |
| t->fn = fn; |
| t->arg = arg; |