1/**
2 * \file
3 * \brief Waitset interface to channel implementations
4 */
5
6/*
7 * Copyright (c) 2009, 2011, 2012, 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, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
13 */
14
15#ifndef BARRELFISH_WAITSET_CHAN_H
16#define BARRELFISH_WAITSET_CHAN_H
17
18#include <sys/cdefs.h>
19#include <barrelfish/waitset.h>
20
21__BEGIN_DECLS
22
23static inline bool waitset_chan_is_registered(struct waitset_chanstate *chan)
24{
25    return chan->waitset != NULL &&
26            (chan->state == CHAN_IDLE || chan->state == CHAN_POLLED);
27}
28
29void waitset_chanstate_init(struct waitset_chanstate *chan,
30                            enum ws_chantype chantype);
31void waitset_chanstate_destroy(struct waitset_chanstate *chan);
32errval_t waitset_chan_trigger(struct waitset_chanstate *chan);
33errval_t waitset_chan_trigger_closure(struct waitset *ws,
34                                      struct waitset_chanstate *chan,
35                                      struct event_closure closure);
36errval_t waitset_chan_deregister(struct waitset_chanstate *chan);
37errval_t waitset_chan_register(struct waitset *ws, struct waitset_chanstate *chan,
38                               struct event_closure closure);
39errval_t waitset_chan_register_polled(struct waitset *ws,
40                                      struct waitset_chanstate *chan,
41                                      struct event_closure closure);
42void waitset_chan_migrate(struct waitset_chanstate *chan,
43                          struct waitset *new_ws);
44
45__END_DECLS
46
47#endif // BARRELFISH_WAITSET_CHAN_H
48