+ if (!timer->running)
+ panic("attempting to stop stopped timer");
+ if (timer != timer_stack)
+ panic("timer stack error");
+ timer_stack = timer->parent;
+
+ ir_timer_val_t val;
+ ir_timer_val_t tgt;
+
+ _time_get(&val);
+ timer->running = 0;
+ _time_add(&timer->elapsed, &timer->elapsed, _time_sub(&tgt, &val, &timer->start));
+}
+
+void ir_timer_init_parent(ir_timer_t *timer)
+{
+ if (timer == NULL)
+ return;
+ if (timer->parent != NULL && timer->parent != timer_stack)
+ panic("timer parent mismatch");
+ timer->parent = timer_stack;
+}