void rthal_timer_release(int cpu) { #ifdef CONFIG_GENERIC_CLOCKEVENTS ipipe_release_tickdev(cpu); #endif rthal_irq_release(RTHAL_TIMER_IRQ); if (rthal_ktimer_saved_mode == KTIMER_MODE_PERIODIC) rthal_timer_set_periodic(); else if (rthal_ktimer_saved_mode == KTIMER_MODE_ONESHOT) /* We need to keep the timing cycle alive for the kernel. */ rthal_trigger_irq(RTHAL_TIMER_IRQ); }
static void rthal_timer_set_oneshot(int rt_mode) { unsigned long flags; flags = rthal_critical_enter(rthal_critical_sync); if (rt_mode) { rthal_sync_op = RTHAL_SET_ONESHOT_XENOMAI; rthal_setup_oneshot_dec(); rthal_disarm_decr(1); } else { rthal_sync_op = RTHAL_SET_ONESHOT_LINUX; rthal_setup_oneshot_dec(); rthal_disarm_decr(0); /* We need to keep the timing cycle alive for the kernel. */ rthal_trigger_irq(RTHAL_TIMER_IRQ); } rthal_critical_exit(flags); }
static void rthal_critical_sync(void) { switch (rthal_sync_op) { case RTHAL_SET_ONESHOT_XENOMAI: force_oneshot_hw_mode(); steal_timer(1); break; case RTHAL_SET_ONESHOT_LINUX: force_oneshot_hw_mode(); steal_timer(0); /* We need to keep the timing cycle alive for the kernel. */ rthal_trigger_irq(RTHAL_TIMER_IRQ); break; case RTHAL_SET_PERIODIC: restore_normal_hw_mode(); break; } }
static void rthal_critical_sync(void) { switch (rthal_sync_op) { case RTHAL_SET_ONESHOT_XENOMAI: rthal_setup_oneshot_dec(); rthal_disarm_decr(1); break; case RTHAL_SET_ONESHOT_LINUX: rthal_setup_oneshot_dec(); rthal_disarm_decr(0); /* We need to keep the timing cycle alive for the kernel. */ rthal_trigger_irq(RTHAL_TIMER_IRQ); break; case RTHAL_SET_PERIODIC: rthal_setup_periodic_dec(); rthal_disarm_decr(0); break; } }