aboutsummaryrefslogtreecommitdiffstats
path: root/src/generic/timer.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/generic/timer.c')
-rw-r--r--src/generic/timer.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/generic/timer.c b/src/generic/timer.c
index 5185ed54..fba56051 100644
--- a/src/generic/timer.c
+++ b/src/generic/timer.c
@@ -49,7 +49,7 @@ static uint32_t timer_repeat_until;
// Set the next timer wake time (in absolute clock ticks) or return 1
// if the next timer is too close to schedule. Caller must disable
// irqs.
-uint8_t
+static int
timer_try_set_next(unsigned int next)
{
uint32_t now = timer_read_time();
@@ -84,6 +84,20 @@ fail:
shutdown("Rescheduled timer in the past");
}
+// Invoke timers - called from board irq code.
+void
+timer_dispatch_many(void)
+{
+ for (;;) {
+ uint32_t next_waketime = sched_timer_dispatch();
+
+ // Schedule next timer event (or run next timer if it's ready)
+ int res = timer_try_set_next(next_waketime);
+ if (res)
+ break;
+ }
+}
+
// Periodic background task that temporarily boosts priority of
// timers. This helps prioritize timers when tasks are idling.
static void