Lines Matching refs:timer
49 void timer_initialize(timer_t *timer) { in timer_initialize() argument
50 *timer = (timer_t)TIMER_INITIAL_VALUE(*timer); in timer_initialize()
53 static void insert_timer_in_queue(uint cpu, timer_t *timer) { in insert_timer_in_queue() argument
58 …TRACEF("timer %p, cpu %u, scheduled %u, periodic %u\n", timer, cpu, timer->scheduled_time, timer->… in insert_timer_in_queue()
61 if (TIME_GT(entry->scheduled_time, timer->scheduled_time)) { in insert_timer_in_queue()
62 list_add_before(&entry->node, &timer->node); in insert_timer_in_queue()
68 list_add_tail(&timers[cpu].timer_queue, &timer->node); in insert_timer_in_queue()
71 static void timer_set(timer_t *timer, lk_time_t delay, lk_time_t period, timer_callback callback, v… in timer_set() argument
74 …LTRACEF("timer %p, delay %u, period %u, callback %p, arg %p\n", timer, delay, period, callback, ar… in timer_set()
76 DEBUG_ASSERT(timer->magic == TIMER_MAGIC); in timer_set()
78 if (list_in_list(&timer->node)) { in timer_set()
79 panic("timer %p already in list\n", timer); in timer_set()
83 timer->scheduled_time = now + delay; in timer_set()
84 timer->periodic_time = period; in timer_set()
85 timer->callback = callback; in timer_set()
86 timer->arg = arg; in timer_set()
88 LTRACEF("scheduled time %u\n", timer->scheduled_time); in timer_set()
94 insert_timer_in_queue(cpu, timer); in timer_set()
97 if (list_peek_head_type(&timers[cpu].timer_queue, timer_t, node) == timer) { in timer_set()
121 void timer_set_oneshot(timer_t *timer, lk_time_t delay, timer_callback callback, void *arg) { in timer_set_oneshot() argument
124 timer_set(timer, delay, 0, callback, arg); in timer_set_oneshot()
141 void timer_set_periodic(timer_t *timer, lk_time_t period, timer_callback callback, void *arg) { in timer_set_periodic() argument
144 timer_set(timer, period, period, callback, arg); in timer_set_periodic()
150 void timer_cancel(timer_t *timer) { in timer_cancel() argument
151 DEBUG_ASSERT(timer->magic == TIMER_MAGIC); in timer_cancel()
162 if (list_in_list(&timer->node)) in timer_cancel()
163 list_delete(&timer->node); in timer_cancel()
168 timer->periodic_time = 0; in timer_cancel()
169 timer->callback = NULL; in timer_cancel()
170 timer->arg = NULL; in timer_cancel()
197 timer_t *timer; in timer_tick() local
213 timer = list_peek_head_type(&timers[cpu].timer_queue, timer_t, node); in timer_tick()
214 if (likely(timer == 0)) in timer_tick()
216 …on timer queue %p at %u now %u (%p, arg %p)\n", timer, timer->scheduled_time, now, timer->callback… in timer_tick()
217 if (likely(TIME_LT(now, timer->scheduled_time))) in timer_tick()
221 LTRACEF("timer %p\n", timer); in timer_tick()
222 DEBUG_ASSERT(timer && timer->magic == TIMER_MAGIC); in timer_tick()
223 list_delete(&timer->node); in timer_tick()
228 …LTRACEF("dequeued timer %p, scheduled %u periodic %u\n", timer, timer->scheduled_time, timer->peri… in timer_tick()
232 bool periodic = timer->periodic_time > 0; in timer_tick()
234 LTRACEF("timer %p firing callback %p, arg %p\n", timer, timer->callback, timer->arg); in timer_tick()
235 KEVLOG_TIMER_CALL(timer->callback, timer->arg); in timer_tick()
236 if (timer->callback(timer, now, timer->arg) == INT_RESCHEDULE) in timer_tick()
245 if (periodic && !list_in_list(&timer->node) && timer->periodic_time > 0) { in timer_tick()
246 LTRACEF("periodic timer, period %u\n", timer->periodic_time); in timer_tick()
247 timer->scheduled_time += timer->periodic_time; in timer_tick()
248 if (unlikely(TIME_LT(timer->scheduled_time, now))) { in timer_tick()
249 timer->scheduled_time = now + timer->periodic_time; in timer_tick()
251 insert_timer_in_queue(cpu, timer); in timer_tick()
257 timer = list_peek_head_type(&timers[cpu].timer_queue, timer_t, node); in timer_tick()
258 if (timer) { in timer_tick()
260 DEBUG_ASSERT(TIME_GT(timer->scheduled_time, now)); in timer_tick()
262 lk_time_t delay = timer->scheduled_time - now; in timer_tick()
264 LTRACEF("setting new timer for %u msecs for event %p\n", (uint)delay, timer); in timer_tick()