|  | /* Copyright (c) 2011 The Regents of the University of California | 
|  | * Barret Rhoden <brho@cs.berkeley.edu> | 
|  | * See LICENSE for details. | 
|  | * | 
|  | * Userspace utility functions for receiving events and notifications (IPIs). | 
|  | * Some are higher level than others; just use what you need. */ | 
|  |  | 
|  | #ifndef _EVENT_H | 
|  | #define _EVENT_H | 
|  |  | 
|  | #include <ros/event.h> | 
|  | #include <ros/common.h> | 
|  |  | 
|  | /********* Event_q Setup / Registration  ***********/ | 
|  | struct event_queue *get_big_event_q_raw(void); | 
|  | struct event_queue *get_big_event_q(void); | 
|  | void put_big_event_q_raw(struct event_queue *ev_q); | 
|  | void put_big_event_q(struct event_queue *ev_q); | 
|  | struct event_queue *get_event_q(void); | 
|  | struct event_queue *get_event_q_vcpd(uint32_t vcoreid, int ev_flags); | 
|  | void put_event_q(struct event_queue *ev_q); | 
|  | void register_kevent_q(struct event_queue *ev_q, unsigned int ev_type); | 
|  | struct event_queue *clear_kevent_q(unsigned int ev_type); | 
|  | void enable_kevent(unsigned int ev_type, uint32_t vcoreid, int ev_flags); | 
|  | struct event_queue *disable_kevent(unsigned int ev_type); | 
|  |  | 
|  | /********* Event Handling / Reception ***********/ | 
|  | unsigned int get_event_type(struct event_mbox *ev_mbox); | 
|  |  | 
|  | typedef void (*handle_event_t)(struct event_msg *ev_msg, unsigned int ev_type, | 
|  | void *data); | 
|  | struct ev_handler { | 
|  | struct ev_handler			*next; | 
|  | handle_event_t				func; | 
|  | void						*data; | 
|  | }; | 
|  | int register_ev_handler(unsigned int ev_type, handle_event_t handler, | 
|  | void *data); | 
|  | int deregister_ev_handler(unsigned int ev_type, handle_event_t handler, | 
|  | void *data); | 
|  |  | 
|  | /* Default event handlers */ | 
|  | void handle_ev_ev(struct event_msg *ev_msg, unsigned int ev_type, void *data); | 
|  |  | 
|  | int handle_events(uint32_t vcoreid); | 
|  | void handle_event_q(struct event_queue *ev_q); | 
|  | int handle_one_mbox_msg(struct event_mbox *ev_mbox); | 
|  | int handle_mbox(struct event_mbox *ev_mbox); | 
|  | bool mbox_is_empty(struct event_mbox *ev_mbox); | 
|  | void send_self_vc_msg(struct event_msg *ev_msg); | 
|  | void handle_vcpd_mbox(uint32_t rem_vcoreid); | 
|  | void try_handle_remote_mbox(void); | 
|  |  | 
|  | /* Event handler helpers */ | 
|  | bool ev_might_not_return(void); | 
|  | void ev_we_returned(bool were_handling_remotes); | 
|  |  | 
|  | /* Debugging */ | 
|  | void print_ev_msg(struct event_msg *msg); | 
|  |  | 
|  | #endif /* _EVENT_H */ |