Quickly return/pop DONT_MIGRATE uthreads
[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);
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 void handle_ev_ev(struct event_msg *ev_msg, unsigned int ev_type);
35 int handle_events(uint32_t vcoreid);
36 void handle_event_q(struct event_queue *ev_q);
37 int handle_mbox_msgs(struct event_mbox *ev_mbox);
38
39 #endif /* _EVENT_H */