diff --git a/repos/dde_linux/src/lib/usb/include/lx_emul.h b/repos/dde_linux/src/lib/usb/include/lx_emul.h index c2a3940cbd..7f0ef63598 100644 --- a/repos/dde_linux/src/lib/usb/include/lx_emul.h +++ b/repos/dde_linux/src/lib/usb/include/lx_emul.h @@ -622,6 +622,10 @@ ktime_t ktime_mono_to_real(ktime_t mono); #define from_timer(var, callback_timer, timer_fieldname) \ container_of(callback_timer, typeof(*var), timer_fieldname) +void setup_timer(struct timer_list *timer, void (*function)(unsigned long), + unsigned long data); +void init_timer(struct timer_list *); +void set_timer_slack(struct timer_list *, int); /******************* ** linux/delay.h ** diff --git a/repos/dde_linux/src/lib/usb/lx_emul.cc b/repos/dde_linux/src/lib/usb/lx_emul.cc index 97138163c2..763e79a36d 100644 --- a/repos/dde_linux/src/lib/usb/lx_emul.cc +++ b/repos/dde_linux/src/lib/usb/lx_emul.cc @@ -1127,10 +1127,24 @@ int hex2bin(u8 *dst, const char *src, size_t count) extern "C" void init_timer(struct timer_list *) { } +struct callback_timer { + void (*function)(unsigned long); + unsigned long data; +}; + +static void timer_callback(struct timer_list *t) +{ + struct callback_timer * tc = (struct callback_timer *)t->data; + tc->function(tc->data); +} extern "C" void setup_timer(struct timer_list *timer, void (*function)(unsigned long), unsigned long data) { - timer_setup(timer, function, 0u); - timer->data = data; + callback_timer * tc = new (Lx::Malloc::mem()) callback_timer; + tc->function = function; + tc->data = data; + + timer_setup(timer, timer_callback, 0u); + timer->data = (unsigned long)tc; }