Lines Matching defs:timer

18 #include <sel4platsupport/timer.h>
36 void sel4platsupport_destroy_timer(seL4_timer_t *timer, vka_t *vka)
38 ltimer_destroy(&timer->ltimer);
39 assert(timer->to.nirqs < MAX_IRQS);
40 for (size_t i = 0; i < timer->to.nirqs; i++) {
41 cleanup_timer_irq(vka, &timer->to.irqs[i]);
44 assert(timer->to.nobjs < MAX_OBJS);
45 for (size_t i = 0; i < timer->to.nobjs; i++) {
46 vka_free_object(vka, &timer->to.objs[i].obj);
50 void sel4platsupport_handle_timer_irq(seL4_timer_t *timer, seL4_Word badge)
52 assert(timer->to.nirqs < MAX_IRQS);
54 for (unsigned long i = 0; badge && i < timer->to.nirqs; i++) {
60 if (timer->to.irqs[i].irq.type != PS_NONE) {
61 int error = seL4_IRQHandler_Ack(timer->to.irqs[i].handler_path.capPtr);
106 ZF_LOGF("Failed to obtain device-ut cap for default timer.");
115 ZF_LOGE("MAX_IRQS insufficient for timer");
123 seL4_timer_t *timer, size_t nirqs)
126 /* set up the irq caps the timer needs */
127 timer->to.nirqs = 0;
129 assert(timer->to.irqs[i].irq.type != PS_NONE);
130 int error = sel4platsupport_copy_irq_cap(vka, simple, &timer->to.irqs[i].irq,
131 &timer->to.irqs[i].handler_path);
133 error = setup_irq(vka, &timer->to.irqs[i], BIT(seL4_BadgeBits - i - 1), ntfn);
136 sel4platsupport_destroy_timer(timer, vka);
140 timer->to.nirqs++;
143 timer->to.nobjs = 0;
148 ps_io_ops_t ops, seL4_CPtr ntfn, seL4_timer_t *timer)
151 if (timer == NULL) {
155 error = ltimer_default_describe(&timer->ltimer, ops);
158 size_t nirqs = get_nirqs(&timer->ltimer);
160 error = ltimer_get_nth_irq(&timer->ltimer, i, &timer->to.irqs[i].irq);
165 error = init_timer_internal(vka, simple, ntfn, timer, nirqs);
169 error = ltimer_default_init(&timer->ltimer, ops, NULL, NULL);
175 seL4_CPtr ntfn, seL4_timer_t *timer)
186 return sel4platsupport_init_default_timer_ops(vka, vspace, simple, ops, ntfn, timer);
192 seL4_CPtr ntfn, seL4_timer_t *timer, timer_objects_t *to)
194 if (timer == NULL) {
198 /* copy the timer objects */
199 timer->to = *to;
200 return init_timer_internal(vka, simple, ntfn, timer, to->nirqs);
216 /* Allocate timer irqs. */
220 ZF_LOGE("Failed to describe default timer");
224 /* set up the irq caps the timer needs */
245 ZF_LOGE("MAX_OBJS insufficient for timer");