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