X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?p=palacios.git;a=blobdiff_plain;f=palacios%2Finclude%2Fpalacios%2Fvmm_host_events.h;fp=palacios%2Finclude%2Fpalacios%2Fvmm_host_events.h;h=dfe4775192bce1893434338c4d23e57c7f14492b;hp=0000000000000000000000000000000000000000;hb=ddc16b0737cf58f7aa90a69c6652cdf4090aec51;hpb=626595465a2c6987606a6bc697df65130ad8c2d3 diff --git a/palacios/include/palacios/vmm_host_events.h b/palacios/include/palacios/vmm_host_events.h new file mode 100644 index 0000000..dfe4775 --- /dev/null +++ b/palacios/include/palacios/vmm_host_events.h @@ -0,0 +1,89 @@ +/* + * This file is part of the Palacios Virtual Machine Monitor developed + * by the V3VEE Project with funding from the United States National + * Science Foundation and the Department of Energy. + * + * The V3VEE Project is a joint project between Northwestern University + * and the University of New Mexico. You can find out more at + * http://www.v3vee.org + * + * Copyright (c) 2008, Jack Lange + * Copyright (c) 2008, The V3VEE Project + * All rights reserved. + * + * Author: Jack Lange + * + * This is free software. You are permitted to use, + * redistribute, and modify it as specified in the file "V3VEE_LICENSE". + */ + +#ifndef __VMM_HOST_EVENTS_H__ +#define __VMM_HOST_EVENTS_H__ + + +struct v3_keyboard_event { + unsigned char status; + unsigned char scan_code; +}; + +struct v3_mouse_event { + unsigned char data[3]; +}; + +struct v3_timer_event { + unsigned int period_us; +}; + +#ifdef __V3VEE__ + +#include + + +typedef enum {HOST_KEYBOARD_EVT, + HOST_MOUSE_EVT, + HOST_TIMER_EVT} v3_host_evt_type_t; + + +union v3_host_event_handler { + int (*keyboard_handler)(struct guest_info * info, struct v3_keyboard_event * evt, void * priv_data); + int (*mouse_handler)(struct guest_info * info, struct v3_mouse_event * evt, void * priv_data); + int (*timer_handler)(struct guest_info * info, struct v3_timer_event * evt, void * priv_data); +}; + + +struct v3_host_event_hook { + union v3_host_event_handler cb; + void * private_data; + struct list_head link; +}; + + + +struct v3_host_events { + struct list_head keyboard_events; + struct list_head mouse_events; + struct list_head timer_events; +}; + + + +int v3_init_host_events(struct guest_info * info); + +#define V3_HOST_EVENT_HANDLER(cb) ((union v3_host_event_handler)cb) + +int v3_hook_host_event(struct guest_info * info, + v3_host_evt_type_t event_type, + union v3_host_event_handler cb, + void * private_data); + +#endif // ! __V3VEE__ + + + +int v3_deliver_keyboard_event(struct guest_info * info, struct v3_keyboard_event * evt); +int v3_deliver_mouse_event(struct guest_info * info, struct v3_mouse_event * evt); +int v3_deliver_timer_event(struct guest_info * info, struct v3_timer_event * evt); + + + +#endif