minix/common/include/timers.h
Gianluca Guida f4814901af Move even more includes to common/include.
This patch moves more includes (most of them, to tell the truth) to
common/include directory. This completes the list of includes needed
to compile current trunk with the new libc (but to do that you need
more patches in queue).

This patch also contains some modification (for compilation with new
headers) to the common includes under __NBSD_LIBC, the define used
in mk script to specialize compilation with new includes.
2011-03-03 16:39:02 +00:00

64 lines
2.4 KiB
C

/* This library provides generic watchdog timer management functionality.
* The functions operate on a timer queue provided by the caller. Note that
* the timers must use absolute time to allow sorting. The library provides:
*
* tmrs_settimer: (re)set a new watchdog timer in the timers queue
* tmrs_clrtimer: remove a timer from both the timers queue
* tmrs_exptimers: check for expired timers and run watchdog functions
*
* Author:
* Jorrit N. Herder <jnherder@cs.vu.nl>
* Adapted from tmr_settimer and tmr_clrtimer in src/kernel/clock.c.
* Last modified: September 30, 2004.
*/
#ifndef _TIMERS_H
#define _TIMERS_H
#include <limits.h>
#include <minix/types.h>
struct timer;
typedef void (*tmr_func_t)(struct timer *tp);
typedef union { int ta_int; long ta_long; void *ta_ptr; } tmr_arg_t;
/* A timer_t variable must be declare for each distinct timer to be used.
* The timers watchdog function and expiration time are automatically set
* by the library function tmrs_settimer, but its argument is not.
*/
typedef struct timer
{
struct timer *tmr_next; /* next in a timer chain */
clock_t tmr_exp_time; /* expiration time */
tmr_func_t tmr_func; /* function to call when expired */
tmr_arg_t tmr_arg; /* random argument */
} timer_t;
/* Used when the timer is not active. */
#define TMR_NEVER ((clock_t) -1 < 0) ? ((clock_t) LONG_MAX) : ((clock_t) -1)
#undef TMR_NEVER
#define TMR_NEVER ((clock_t) LONG_MAX)
/* These definitions can be used to set or get data from a timer variable. */
#define tmr_arg(tp) (&(tp)->tmr_arg)
#define tmr_exp_time(tp) (&(tp)->tmr_exp_time)
/* Timers should be initialized once before they are being used. Be careful
* not to reinitialize a timer that is in a list of timers, or the chain
* will be broken.
*/
#define tmr_inittimer(tp) (void)((tp)->tmr_exp_time = TMR_NEVER, \
(tp)->tmr_next = NULL)
/* The following generic timer management functions are available. They
* can be used to operate on the lists of timers. Adding a timer to a list
* automatically takes care of removing it.
*/
_PROTOTYPE( clock_t tmrs_clrtimer, (timer_t **tmrs, timer_t *tp, clock_t *new_head) );
_PROTOTYPE( void tmrs_exptimers, (timer_t **tmrs, clock_t now, clock_t *new_head) );
_PROTOTYPE( clock_t tmrs_settimer, (timer_t **tmrs, timer_t *tp,
clock_t exp_time, tmr_func_t watchdog, clock_t *new_head) );
#endif /* _TIMERS_H */