1/**
2 * \file
3 * \brief Deferred events (ie. timers)
4 */
5
6/*
7 * Copyright (c) 2009, 2011, 2013, ETH Zurich.
8 * All rights reserved.
9 *
10 * This file is distributed under the terms in the attached LICENSE file.
11 * If you do not find this file, copies can be found by writing to:
12 * ETH Zurich D-INFK, Universitaetstrasse 6, CH-8092 Zurich. Attn: Systems Group.
13 */
14
15#ifndef BARRELFISH_DEFERRED_H
16#define BARRELFISH_DEFERRED_H
17
18#include <sys/cdefs.h>
19#include <barrelfish/waitset.h>
20
21#include <barrelfish_kpi/dispatcher_handle.h>
22
23__BEGIN_DECLS
24
25struct deferred_event {
26    struct waitset_chanstate waitset_state; ///< Waitset state
27    struct deferred_event *next, *prev; ///< Next/prev in dispatcher queue
28    systime_t time;                     ///< System time for event
29};
30
31systime_t get_system_time(void);
32
33void deferred_event_init(struct deferred_event *event);
34errval_t deferred_event_register(struct deferred_event *event,
35                                 struct waitset *ws, delayus_t delay,
36                                 struct event_closure closure);
37errval_t deferred_event_cancel(struct deferred_event *event);
38errval_t barrelfish_usleep(delayus_t delay);
39
40struct periodic_event {
41    struct deferred_event de;
42    struct event_closure cl;
43    struct waitset *waitset;
44    delayus_t period;
45};
46
47errval_t periodic_event_create(struct periodic_event *event, struct waitset *ws,
48                               delayus_t period, struct event_closure closure);
49errval_t periodic_event_cancel(struct periodic_event *event);
50
51// XXX: internal to libbarrelfish; should be in another header file
52void trigger_deferred_events_disabled(dispatcher_handle_t dh, systime_t now);
53
54__END_DECLS
55
56#endif // BARRELFISH_DEFERRED_H
57