1 /*
2 * \brief Timers and tick
3 * \author Christian Helmuth
4 * \date 2008-10-22
5 *
6 * DDE kit provides a generic timer implementation that enables users to
7 * execute a callback function after a certain period of time. Therefore, DDE
8 * kit starts a timer thread that executes callbacks and keeps track of the
9 * currently running timers.
10 */
11
12 /*
13 * Copyright (C) 2008-2013 Genode Labs GmbH
14 *
15 * This file is part of the Genode OS framework, which is distributed
16 * under the terms of the GNU General Public License version 2.
17 */
18
19 #ifndef _INCLUDE__DDE_KIT__TIMER_H_
20 #define _INCLUDE__DDE_KIT__TIMER_H_
21
22 #include <dde_kit/thread.h>
23
24
25 /**********
26 ** Tick **
27 **********/
28
29 /** Timer tick (global symbol) */
30 extern volatile unsigned long dde_kit_timer_ticks;
31 extern volatile unsigned long jiffies;
32
33 /** Timer tick rate */
34 enum { DDE_KIT_HZ = 100 };
35
36
37 /***********
38 ** Timer **
39 ***********/
40
41 struct dde_kit_timer;
42
43 /**
44 * Add timer event handler
45 *
46 * \param fn function to call on timeout
47 * \param priv private handler token
48 * \param timeout absolute timeout (in DDE kit ticks)
49 *
50 * \return timer reference on success; 0 otherwise
51 *
52 * After the absolute timeout has expired, function fn is called with args as
53 * arguments.
54 */
55 struct dde_kit_timer *dde_kit_timer_add(void (*fn)(void *), void *priv,
56 unsigned long timeout);
57
58 /**
59 * Delete timer
60 *
61 * \param timer timer reference
62 */
63 void dde_kit_timer_del(struct dde_kit_timer *timer);
64
65
66 /**
67 * Schedule absolute timeout
68 *
69 * \param timer timer reference
70 * \param timeout absolute timeout (in DDE kit ticks)
71 */
72 void dde_kit_timer_schedule_absolute(struct dde_kit_timer *timer, unsigned long timeout);
73
74
75 /**
76 * Check whether a timer is pending
77 *
78 * \param timer timer reference
79 */
80 int dde_kit_timer_pending(struct dde_kit_timer *timer);
81
82 /** Init timers and ticks */
83 void dde_kit_timer_init(void(*thread_init)(void *), void *priv);
84
85 #endif /* _INCLUDE__DDE_KIT__TIMER_H_ */