Project

General

Profile

Statistics
| Branch: | Revision:

scoutos / prex-0.9.0 / sys / include / timer.h @ 03e9c04a

History | View | Annotate | Download (3.04 KB)

1 03e9c04a Brad Neuman
/*-
2
 * Copyright (c) 2005-2007, Kohsuke Ohtani
3
 * All rights reserved.
4
 *
5
 * Redistribution and use in source and binary forms, with or without
6
 * modification, are permitted provided that the following conditions
7
 * are met:
8
 * 1. Redistributions of source code must retain the above copyright
9
 *    notice, this list of conditions and the following disclaimer.
10
 * 2. Redistributions in binary form must reproduce the above copyright
11
 *    notice, this list of conditions and the following disclaimer in the
12
 *    documentation and/or other materials provided with the distribution.
13
 * 3. Neither the name of the author nor the names of any co-contributors
14
 *    may be used to endorse or promote products derived from this software
15
 *    without specific prior written permission.
16
 *
17
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
21
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27
 * SUCH DAMAGE.
28
 */
29
30
#ifndef _TIMER_H
31
#define _TIMER_H
32
33
#include <types.h>
34
#include <sys/cdefs.h>
35
#include <sys/list.h>
36
#include <sys/sysinfo.h>
37
#include <event.h>
38
39
/*
40
 * Time-out element.
41
 */
42
struct timer {
43
        struct list        link;                /* linkage on timer chain */
44
        int                state;                /* timer state */
45
        u_long                expire;                /* expiration time, in ticks */
46
        u_long                interval;        /* time interval */
47
        void                (*func)(void *); /* function to call */
48
        void                *arg;                /* function argument */
49
        struct event        event;                /* event for this timer */
50
};
51
52
/* state for timer */
53
#define TM_ACTIVE        0x54616321        /* magic# 'Tac!' */
54
#define TM_STOP                0x54737421        /* magic# 'Tst!' */
55
56
/*
57
 * Macro to compare two timer counts.
58
 * time_after() returns true if a is after b.
59
 */
60
#define time_after(a,b)                (((long)(b) - (long)(a)) < 0)
61
#define time_before(a,b)        time_after(b,a)
62
63
#define time_after_eq(a,b)        (((long)(a) - (long)(b)) >= 0)
64
#define time_before_eq(a,b)        time_after_eq(b,a)
65
66
/*
67
 * Macro to get the next element on timer list.
68
 */
69
#define timer_next(head) \
70
        (list_entry(list_first(head), struct timer, link))
71
72
__BEGIN_DECLS
73
void         timer_callout(struct timer *, u_long, void (*)(void *), void *);
74
void         timer_stop(struct timer *);
75
u_long         timer_delay(u_long);
76
int         timer_sleep(u_long, u_long *);
77
int         timer_alarm(u_long, u_long *);
78
int         timer_periodic(thread_t, u_long, u_long);
79
int         timer_waitperiod(void);
80
void         timer_cancel(thread_t);
81
void         timer_clock(void);
82
void         timer_handler(void);
83
u_long         timer_ticks(void);
84
void         timer_info(struct timerinfo *);
85
void         timer_init(void);
86
__END_DECLS
87
88
#endif /* !_TIMER_H */