Adds hexdump to a parlib header
[akaros.git] / user / parlib / include / event.h
1 /* Copyright (c) 2011 The Regents of the University of California
2  * Barret Rhoden <brho@cs.berkeley.edu>
3  * See LICENSE for details.
4  *
5  * Userspace utility functions for receiving events and notifications (IPIs).
6  * Some are higher level than others; just use what you need. */ 
7
8 #ifndef PARLIB_EVENT_H
9 #define PARLIB_EVENT_H
10
11 #include <ros/event.h>
12 #include <ros/common.h>
13
14 __BEGIN_DECLS
15
16 /********* Event_q Setup / Registration  ***********/
17 struct event_queue *get_big_event_q_raw(void);
18 struct event_queue *get_big_event_q(void);
19 void put_big_event_q_raw(struct event_queue *ev_q);
20 void put_big_event_q(struct event_queue *ev_q);
21 struct event_queue *get_event_q(void);
22 struct event_queue *get_event_q_vcpd(uint32_t vcoreid, int ev_flags);
23 void put_event_q(struct event_queue *ev_q);
24 void register_kevent_q(struct event_queue *ev_q, unsigned int ev_type);
25 struct event_queue *clear_kevent_q(unsigned int ev_type);
26 void enable_kevent(unsigned int ev_type, uint32_t vcoreid, int ev_flags);
27 struct event_queue *disable_kevent(unsigned int ev_type);
28
29 /********* Event Handling / Reception ***********/
30 unsigned int get_event_type(struct event_mbox *ev_mbox);
31
32 typedef void (*handle_event_t)(struct event_msg *ev_msg, unsigned int ev_type,
33                                void *data);
34 struct ev_handler {
35         struct ev_handler                       *next;
36         handle_event_t                          func;
37         void                                            *data;
38 };
39 int register_ev_handler(unsigned int ev_type, handle_event_t handler,
40                         void *data);
41 int deregister_ev_handler(unsigned int ev_type, handle_event_t handler,
42                           void *data);
43
44 /* Default event handlers */
45 void handle_ev_ev(struct event_msg *ev_msg, unsigned int ev_type, void *data);
46
47 int handle_events(uint32_t vcoreid);
48 void handle_event_q(struct event_queue *ev_q);
49 int handle_one_mbox_msg(struct event_mbox *ev_mbox);
50 int handle_mbox(struct event_mbox *ev_mbox);
51 bool mbox_is_empty(struct event_mbox *ev_mbox);
52 void send_self_vc_msg(struct event_msg *ev_msg);
53 void handle_vcpd_mbox(uint32_t rem_vcoreid);
54 void try_handle_remote_mbox(void);
55
56 /* Event handler helpers */
57 bool ev_might_not_return(void);
58 void ev_we_returned(bool were_handling_remotes);
59
60 /* Debugging */
61 void print_ev_msg(struct event_msg *msg);
62
63 __END_DECLS
64
65 #endif /* PARLIB_EVENT_H */