Lines Matching refs:timer
62 static void (*rt_timer_enter_hook)(struct rt_timer *timer);
63 static void (*rt_timer_exit_hook)(struct rt_timer *timer);
77 void rt_timer_enter_sethook(void (*hook)(struct rt_timer *timer)) in rt_timer_enter_sethook() argument
88 void rt_timer_exit_sethook(void (*hook)(struct rt_timer *timer)) in rt_timer_exit_sethook() argument
96 rt_inline struct rt_spinlock* _timerlock_idx(struct rt_timer *timer) in _timerlock_idx() argument
102 if (timer->parent.flag & RT_TIMER_FLAG_SOFT_TIMER) in _timerlock_idx()
131 static void _timer_init(rt_timer_t timer, in _timer_init() argument
144 timer->parent.flag = flag; in _timer_init()
147 timer->parent.flag &= ~RT_TIMER_FLAG_ACTIVATED; in _timer_init()
149 timer->timeout_func = timeout; in _timer_init()
150 timer->parameter = parameter; in _timer_init()
152 timer->timeout_tick = 0; in _timer_init()
153 timer->init_tick = time; in _timer_init()
158 rt_list_init(&(timer->row[i])); in _timer_init()
174 struct rt_timer *timer; in _timer_list_next_timeout() local
178 timer = rt_list_entry(timer_list[RT_TIMER_SKIP_LIST_LEVEL - 1].next, in _timer_list_next_timeout()
180 *timeout_tick = timer->timeout_tick; in _timer_list_next_timeout()
191 rt_inline void _timer_remove(rt_timer_t timer) in _timer_remove() argument
197 rt_list_remove(&timer->row[i]); in _timer_remove()
209 static int _timer_count_height(struct rt_timer *timer) in _timer_count_height() argument
215 if (!rt_list_isempty(&timer->row[i])) in _timer_count_height()
233 struct rt_timer *timer = rt_list_entry(list, in rt_timer_dump() local
236 rt_kprintf("%d", _timer_count_height(timer)); in rt_timer_dump()
267 void rt_timer_init(rt_timer_t timer, in rt_timer_init() argument
275 RT_ASSERT(timer != RT_NULL); in rt_timer_init()
280 rt_object_init(&(timer->parent), RT_Object_Class_Timer, name); in rt_timer_init()
282 _timer_init(timer, timeout, parameter, time, flag); in rt_timer_init()
293 rt_err_t rt_timer_detach(rt_timer_t timer) in rt_timer_detach() argument
299 RT_ASSERT(timer != RT_NULL); in rt_timer_detach()
300 RT_ASSERT(rt_object_get_type(&timer->parent) == RT_Object_Class_Timer); in rt_timer_detach()
301 RT_ASSERT(rt_object_is_systemobject(&timer->parent)); in rt_timer_detach()
303 spinlock = _timerlock_idx(timer); in rt_timer_detach()
306 _timer_remove(timer); in rt_timer_detach()
308 timer->parent.flag &= ~RT_TIMER_FLAG_ACTIVATED; in rt_timer_detach()
311 rt_object_detach(&(timer->parent)); in rt_timer_detach()
351 struct rt_timer *timer; in rt_timer_create() local
358 timer = (struct rt_timer *)rt_object_allocate(RT_Object_Class_Timer, name); in rt_timer_create()
359 if (timer == RT_NULL) in rt_timer_create()
364 _timer_init(timer, timeout, parameter, time, flag); in rt_timer_create()
366 return timer; in rt_timer_create()
377 rt_err_t rt_timer_delete(rt_timer_t timer) in rt_timer_delete() argument
383 RT_ASSERT(timer != RT_NULL); in rt_timer_delete()
384 RT_ASSERT(rt_object_get_type(&timer->parent) == RT_Object_Class_Timer); in rt_timer_delete()
385 RT_ASSERT(rt_object_is_systemobject(&timer->parent) == RT_FALSE); in rt_timer_delete()
387 spinlock = _timerlock_idx(timer); in rt_timer_delete()
391 _timer_remove(timer); in rt_timer_delete()
393 timer->parent.flag &= ~RT_TIMER_FLAG_ACTIVATED; in rt_timer_delete()
395 rt_object_delete(&(timer->parent)); in rt_timer_delete()
409 static rt_err_t _timer_start(rt_list_t *timer_list, rt_timer_t timer) in _timer_start() argument
417 _timer_remove(timer); in _timer_start()
419 timer->parent.flag &= ~RT_TIMER_FLAG_ACTIVATED; in _timer_start()
421 RT_OBJECT_HOOK_CALL(rt_object_take_hook, (&(timer->parent))); in _timer_start()
423 timer->timeout_tick = rt_tick_get() + timer->init_tick; in _timer_start()
442 if ((t->timeout_tick - timer->timeout_tick) == 0) in _timer_start()
446 else if ((t->timeout_tick - timer->timeout_tick) < RT_TICK_MAX / 2) in _timer_start()
463 &(timer->row[RT_TIMER_SKIP_LIST_LEVEL - 1])); in _timer_start()
468 &(timer->row[RT_TIMER_SKIP_LIST_LEVEL - row_lvl])); in _timer_start()
476 timer->parent.flag |= RT_TIMER_FLAG_ACTIVATED; in _timer_start()
562 rt_err_t rt_timer_start(rt_timer_t timer) in rt_timer_start() argument
572 RT_ASSERT(timer != RT_NULL); in rt_timer_start()
573 RT_ASSERT(rt_object_get_type(&timer->parent) == RT_Object_Class_Timer); in rt_timer_start()
580 if (timer->parent.flag & RT_TIMER_FLAG_SOFT_TIMER) in rt_timer_start()
593 if (timer->parent.flag & RT_TIMER_FLAG_THREAD_TIMER) in rt_timer_start()
599 thread = rt_container_of(timer, struct rt_thread, thread_timer); in rt_timer_start()
606 err = _timer_start(timer_list, timer); in rt_timer_start()
626 rt_err_t rt_timer_stop(rt_timer_t timer) in rt_timer_stop() argument
632 RT_ASSERT(timer != RT_NULL); in rt_timer_stop()
633 RT_ASSERT(rt_object_get_type(&timer->parent) == RT_Object_Class_Timer); in rt_timer_stop()
635 spinlock = _timerlock_idx(timer); in rt_timer_stop()
639 if (!(timer->parent.flag & RT_TIMER_FLAG_ACTIVATED)) in rt_timer_stop()
644 RT_OBJECT_HOOK_CALL(rt_object_put_hook, (&(timer->parent))); in rt_timer_stop()
646 _timer_remove(timer); in rt_timer_stop()
648 timer->parent.flag &= ~RT_TIMER_FLAG_ACTIVATED; in rt_timer_stop()
665 rt_err_t rt_timer_control(rt_timer_t timer, int cmd, void *arg) in rt_timer_control() argument
671 RT_ASSERT(timer != RT_NULL); in rt_timer_control()
672 RT_ASSERT(rt_object_get_type(&timer->parent) == RT_Object_Class_Timer); in rt_timer_control()
674 spinlock = _timerlock_idx(timer); in rt_timer_control()
680 *(rt_tick_t *)arg = timer->init_tick; in rt_timer_control()
685 if (timer->parent.flag & RT_TIMER_FLAG_ACTIVATED) in rt_timer_control()
687 _timer_remove(timer); in rt_timer_control()
688 timer->parent.flag &= ~RT_TIMER_FLAG_ACTIVATED; in rt_timer_control()
690 timer->init_tick = *(rt_tick_t *)arg; in rt_timer_control()
694 timer->parent.flag &= ~RT_TIMER_FLAG_PERIODIC; in rt_timer_control()
698 timer->parent.flag |= RT_TIMER_FLAG_PERIODIC; in rt_timer_control()
702 if(timer->parent.flag & RT_TIMER_FLAG_ACTIVATED) in rt_timer_control()
715 *(rt_tick_t *)arg = timer->timeout_tick; in rt_timer_control()
718 *(void **)arg = (void *)timer->timeout_func; in rt_timer_control()
722 timer->timeout_func = (void (*)(void*))arg; in rt_timer_control()
726 *(void **)arg = timer->parameter; in rt_timer_control()
730 timer->parameter = arg; in rt_timer_control()