diff --git a/qdf/inc/qdf_timer.h b/qdf/inc/qdf_timer.h index dd0c5a8dc4..f7ac35e413 100644 --- a/qdf/inc/qdf_timer.h +++ b/qdf/inc/qdf_timer.h @@ -27,11 +27,7 @@ #include #include -#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0) typedef struct __qdf_timer_t qdf_timer_t; -#else -typedef __qdf_timer_t qdf_timer_t; -#endif /** * qdf_timer_init() - initialize a timer diff --git a/qdf/linux/src/i_qdf_timer.h b/qdf/linux/src/i_qdf_timer.h index 527f91b8ad..55cafead14 100644 --- a/qdf/linux/src/i_qdf_timer.h +++ b/qdf/linux/src/i_qdf_timer.h @@ -37,18 +37,15 @@ #define qdf_msecs_to_jiffies(msec) \ (qdf_timer_get_multiplier() * msecs_to_jiffies(msec)) -#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0) struct __qdf_timer_t { struct timer_list os_timer; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0) qdf_timer_func_t callback; void *context; -}; -#else -typedef struct timer_list __qdf_timer_t; #endif +}; #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0) - static inline void __os_timer_shim(struct timer_list *os_timer) { struct __qdf_timer_t *timer = from_timer(timer, os_timer, os_timer); @@ -77,6 +74,41 @@ static inline QDF_STATUS __qdf_timer_init(struct __qdf_timer_t *timer, return QDF_STATUS_SUCCESS; } +#else + +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 9, 0) +#define setup_deferrable_timer(timer, fn, data) \ + __setup_timer((timer), (fn), (data), TIMER_DEFERRABLE) +#endif + +typedef void (*__legacy_timer_callback_t)(unsigned long arg); + +static inline QDF_STATUS __qdf_timer_init(struct __qdf_timer_t *timer, + qdf_timer_func_t func, void *arg, + QDF_TIMER_TYPE type) +{ + struct timer_list *os_timer = &timer->os_timer; + bool is_on_stack = object_is_on_stack(os_timer); + __legacy_timer_callback_t callback = (__legacy_timer_callback_t)func; + unsigned long ctx = (unsigned long)arg; + + if (type == QDF_TIMER_TYPE_SW) { + if (is_on_stack) + setup_deferrable_timer_on_stack(os_timer, callback, + ctx); + else + setup_deferrable_timer(os_timer, callback, ctx); + } else { + if (is_on_stack) + setup_timer_on_stack(os_timer, callback, ctx); + else + setup_timer(os_timer, callback, ctx); + } + + return QDF_STATUS_SUCCESS; +} +#endif /* KERNEL_VERSION(4, 15, 0)*/ + static inline void __qdf_timer_start(struct __qdf_timer_t *timer, uint32_t msec) { struct timer_list *os_timer = &timer->os_timer; @@ -109,67 +141,5 @@ static inline bool __qdf_timer_sync_cancel(struct __qdf_timer_t *timer) { return del_timer_sync(&timer->os_timer); } -#else -#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 9, 0) -#define setup_deferrable_timer(timer, fn, data) \ - __setup_timer((timer), (fn), (data), TIMER_DEFERRABLE) -#endif - -typedef void (*__legacy_timer_callback_t)(unsigned long arg); - -static inline QDF_STATUS __qdf_timer_init(__qdf_timer_t *os_timer, - qdf_timer_func_t func, void *arg, - QDF_TIMER_TYPE type) -{ - bool is_on_stack = object_is_on_stack(os_timer); - __legacy_timer_callback_t callback = (__legacy_timer_callback_t)func; - unsigned long ctx = (unsigned long)arg; - - if (type == QDF_TIMER_TYPE_SW) { - if (is_on_stack) - setup_deferrable_timer_on_stack(os_timer, callback, - ctx); - else - setup_deferrable_timer(os_timer, callback, ctx); - } else { - if (is_on_stack) - setup_timer_on_stack(os_timer, callback, ctx); - else - setup_timer(os_timer, callback, ctx); - } - - return QDF_STATUS_SUCCESS; -} - -static inline void __qdf_timer_start(__qdf_timer_t *timer, uint32_t msec) -{ - timer->expires = jiffies + qdf_msecs_to_jiffies(msec); - add_timer(timer); -} - -static inline void __qdf_timer_mod(__qdf_timer_t *timer, uint32_t msec) -{ - mod_timer(timer, jiffies + qdf_msecs_to_jiffies(msec)); -} - -static inline bool __qdf_timer_stop(__qdf_timer_t *timer) -{ - return !!del_timer(timer); -} - -static inline void __qdf_timer_free(__qdf_timer_t *timer) -{ - del_timer_sync(timer); - - if (object_is_on_stack(timer)) - destroy_timer_on_stack(timer); -} - -static inline bool __qdf_timer_sync_cancel(__qdf_timer_t *timer) -{ - return del_timer_sync(timer); -} - -#endif /* KERNEL_VERSION(4, 15, 0)*/ #endif /* _I_QDF_TIMER_H */