First version
[3rdparty/ote_partner/tlk.git] / include / kernel / timer.h
1 /*
2  * Copyright (c) 2008-2009 Travis Geiselbrecht
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining
5  * a copy of this software and associated documentation files
6  * (the "Software"), to deal in the Software without restriction,
7  * including without limitation the rights to use, copy, modify, merge,
8  * publish, distribute, sublicense, and/or sell copies of the Software,
9  * and to permit persons to whom the Software is furnished to do so,
10  * subject to the following conditions:
11  *
12  * The above copyright notice and this permission notice shall be
13  * included in all copies or substantial portions of the Software.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
18  * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
19  * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
20  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
21  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22  */
23 #ifndef __KERNEL_TIMER_H
24 #define __KERNEL_TIMER_H
25
26 #include <list.h>
27 #include <sys/types.h>
28
29 void timer_init(void);
30
31 struct timer;
32 typedef enum handler_return (*timer_callback)(struct timer *, lk_time_t now, void *arg);
33
34 #define TIMER_MAGIC 'timr'
35
36 typedef struct timer {
37         int magic;
38         struct list_node node;
39
40         lk_time_t scheduled_time;
41         lk_time_t periodic_time;
42
43         timer_callback callback;
44         void *arg;
45 } timer_t;
46
47 /* Rules for Timers:
48  * - Timer callbacks occur from interrupt context
49  * - Timers may be programmed or canceled from interrupt or thread context
50  * - Timers may be canceled or reprogrammed from within their callback
51  * - Timers currently are dispatched from a 10ms periodic tick
52 */
53 void timer_initialize(timer_t *);
54 void timer_set_oneshot(timer_t *, lk_time_t delay, timer_callback, void *arg);
55 void timer_set_periodic(timer_t *, lk_time_t period, timer_callback, void *arg);
56 void timer_cancel(timer_t *);
57
58 #endif
59