Esempio n. 1
0
/* Available in: thread. */
int tt_wq_wait_event_timeout (TT_WQ_T *wait_queue, uint32_t msec)
{
    __TIMEOUT_WQ_T wq_args;

    wq_args.wait_queue	= wait_queue;
    wq_args.thread		= tt_thread_self ();

    if (tt_is_irq_disabled ())
    {
        int i;
        __tt_wq_add_event (wait_queue);

        for (i = 0; tt_is_irq_disabled (); ++i)
            tt_enable_irq ();

        tt_timer_start (&wq_args.timer, __tt_wq_wakeup, &wq_args, msec);
        tt_syscall ((void *)&wq_args, __tt_wq_schedule_timeout);
        tt_timer_kill (&wq_args.timer);

        while (i-- != 0)
            tt_disable_irq ();
    }
    else
    {
        tt_timer_start (&wq_args.timer, __tt_wq_wakeup, &wq_args, msec);
        tt_syscall ((void *)&wq_args, __tt_wq_wait_event_timeout);
        tt_timer_kill (&wq_args.timer);
    }
    return wq_args.result;
}
Esempio n. 2
0
/* Available in: irq, thread. */
void tt_wq_set_event (TT_WQ_T *wait_queue)
{
	if (tt_is_irq_disabled ())
		__tt_wq_set_event (wait_queue);
	else
		tt_syscall ((void *)wait_queue, __tt_wq_set_event);
}
Esempio n. 3
0
/* Available in: thread (interruptable). */
void tt_wq_wait_event (TT_WQ_T *wait_queue)
{
	if (tt_is_irq_disabled ())
	{
		int i;
		__tt_wq_add_event (wait_queue);
		
		for (i = 0; tt_is_irq_disabled (); ++i)
			tt_enable_irq ();
		
		tt_syscall (NULL, __tt_schedule);
		
		while (i-- != 0)
			tt_disable_irq ();
	}
	else
		tt_syscall ((void *)wait_queue, __tt_wq_wait_event);
}