41f23217bd9a75d04283fc580f131e582f5630d4
[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 _EVENT_H
9 #define _EVENT_H
10
11 #include <ros/event.h>
12 #include <ros/common.h>
13
14 /********* Event_q Setup / Registration  ***********/
15 struct event_queue *get_big_event_q_raw(void);
16 struct event_queue *get_big_event_q(void);
17 void put_big_event_q_raw(struct event_queue *ev_q);
18 void put_big_event_q(struct event_queue *ev_q);
19 struct event_queue *get_event_q(void);
20 struct event_queue *get_event_q_vcpd(uint32_t vcoreid, int ev_flags);
21 void put_event_q(struct event_queue *ev_q);
22 void register_kevent_q(struct event_queue *ev_q, unsigned int ev_type);
23 struct event_queue *clear_kevent_q(unsigned int ev_type);
24 void enable_kevent(unsigned int ev_type, uint32_t vcoreid, int ev_flags);
25 struct event_queue *disable_kevent(unsigned int ev_type);
26
27 /********* Event Handling / Reception ***********/
28 unsigned int get_event_type(struct event_mbox *ev_mbox);
29
30 /* List of handlers, process-wide, that the 2LS should fill in.  They all must
31  * return (don't context switch to a u_thread) */
32 typedef void (*handle_event_t)(struct event_msg *ev_msg, unsigned int ev_type);
33 extern handle_event_t ev_handlers[];
34 /* Default event handlers */
35 void handle_ev_ev(struct event_msg *ev_msg, unsigned int ev_type);
36 void handle_check_msgs(struct event_msg *ev_msg, unsigned int ev_type);
37
38 int handle_events(uint32_t vcoreid);
39 void handle_event_q(struct event_queue *ev_q);
40 int handle_one_mbox_msg(struct event_mbox *ev_mbox);
41 int handle_mbox(struct event_mbox *ev_mbox);
42 bool mbox_is_empty(struct event_mbox *ev_mbox);
43 void send_self_vc_msg(struct event_msg *ev_msg);
44 void handle_vcpd_mbox(uint32_t rem_vcoreid);
45 void try_handle_remote_mbox(void);
46
47 /* Event handler helpers */
48 bool ev_might_not_return(void);
49 void ev_we_returned(bool were_handling_remotes);
50
51 /* Debugging */
52 void print_ev_msg(struct event_msg *msg);
53
54 #endif /* _EVENT_H */