From: Jack Lange Date: Wed, 10 Nov 2010 21:23:06 +0000 (-0600) Subject: moved CONSOLE host event to SERIAL host event X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=commitdiff_plain;h=7ee094e43dab15b0139847bca24cef904f8a42f6;p=palacios-OLD.git moved CONSOLE host event to SERIAL host event --- diff --git a/palacios/include/palacios/vmm_host_events.h b/palacios/include/palacios/vmm_host_events.h index 4d17a6c..b762501 100644 --- a/palacios/include/palacios/vmm_host_events.h +++ b/palacios/include/palacios/vmm_host_events.h @@ -34,27 +34,33 @@ struct v3_timer_event { unsigned int period_us; }; -struct v3_console_event { +struct v3_serial_event { unsigned char data[128]; unsigned int len; }; +struct v3_console_event { + unsigned int cmd; +}; + #ifdef __V3VEE__ #include struct v3_vm_info; -typedef enum {HOST_KEYBOARD_EVT, - HOST_MOUSE_EVT, - HOST_TIMER_EVT, - HOST_CONSOLE_EVT} v3_host_evt_type_t; +typedef enum { HOST_KEYBOARD_EVT, + HOST_MOUSE_EVT, + HOST_TIMER_EVT, + HOST_CONSOLE_EVT, + HOST_SERIAL_EVT } v3_host_evt_type_t; union v3_host_event_handler { int (*keyboard_handler)(struct v3_vm_info * vm, struct v3_keyboard_event * evt, void * priv_data); int (*mouse_handler)(struct v3_vm_info * vm, struct v3_mouse_event * evt, void * priv_data); int (*timer_handler)(struct v3_vm_info * vm, struct v3_timer_event * evt, void * priv_data); + int (*serial_handler)(struct v3_vm_info * vm, struct v3_serial_event * evt, void * priv_data); int (*console_handler)(struct v3_vm_info * vm, struct v3_console_event * evt, void * priv_data); }; @@ -71,6 +77,7 @@ struct v3_host_events { struct list_head keyboard_events; struct list_head mouse_events; struct list_head timer_events; + struct list_head serial_events; struct list_head console_events; }; @@ -92,6 +99,7 @@ int v3_hook_host_event(struct v3_vm_info * vm, int v3_deliver_keyboard_event(struct v3_vm_info * vm, struct v3_keyboard_event * evt); int v3_deliver_mouse_event(struct v3_vm_info * vm, struct v3_mouse_event * evt); int v3_deliver_timer_event(struct v3_vm_info * vm, struct v3_timer_event * evt); +int v3_deliver_serial_event(struct v3_vm_info * vm, struct v3_serial_event * evt); int v3_deliver_console_event(struct v3_vm_info * vm, struct v3_console_event * evt); diff --git a/palacios/src/devices/char_stream.c b/palacios/src/devices/char_stream.c index 33a0a32..445194c 100644 --- a/palacios/src/devices/char_stream.c +++ b/palacios/src/devices/char_stream.c @@ -35,8 +35,8 @@ struct stream_state { }; -static int console_event_handler(struct v3_vm_info * vm, - struct v3_console_event * evt, +static int serial_event_handler(struct v3_vm_info * vm, + struct v3_serial_event * evt, void * private_data) { struct stream_state *state = (struct stream_state *)private_data; @@ -113,7 +113,7 @@ static int stream_init(struct v3_vm_info * vm, v3_cfg_tree_t * cfg) } - v3_hook_host_event(vm, HOST_CONSOLE_EVT, V3_HOST_EVENT_HANDLER(console_event_handler), state); + v3_hook_host_event(vm, HOST_SERIAL_EVT, V3_HOST_EVENT_HANDLER(serial_event_handler), state); return 0; diff --git a/palacios/src/palacios/vmm_host_events.c b/palacios/src/palacios/vmm_host_events.c index 078fb08..bbacce5 100644 --- a/palacios/src/palacios/vmm_host_events.c +++ b/palacios/src/palacios/vmm_host_events.c @@ -28,6 +28,7 @@ int v3_init_host_events(struct v3_vm_info * vm) { INIT_LIST_HEAD(&(host_evts->keyboard_events)); INIT_LIST_HEAD(&(host_evts->mouse_events)); INIT_LIST_HEAD(&(host_evts->timer_events)); + INIT_LIST_HEAD(&(host_evts->serial_events)); INIT_LIST_HEAD(&(host_evts->console_events)); return 0; @@ -61,6 +62,9 @@ int v3_hook_host_event(struct v3_vm_info * vm, case HOST_TIMER_EVT: list_add(&(hook->link), &(host_evts->timer_events)); break; + case HOST_SERIAL_EVT: + list_add(&(hook->link), &(host_evts->serial_events)); + break; case HOST_CONSOLE_EVT: list_add(&(hook->link), &(host_evts->console_events)); break; @@ -144,8 +148,34 @@ int v3_deliver_timer_event(struct v3_vm_info * vm, return 0; } +int v3_deliver_serial_event(struct v3_vm_info * vm, + struct v3_serial_event * evt) { + struct v3_host_events * host_evts = NULL; + struct v3_host_event_hook * hook = NULL; + + if (vm == NULL) { + vm = v3_get_foreground_vm(); + } + + host_evts = &(vm->host_event_hooks); + + if (vm->run_state != VM_RUNNING) { + return -1; + } + + list_for_each_entry(hook, &(host_evts->serial_events), link) { + if (hook->cb.serial_handler(vm, evt, hook->private_data) == -1) { + return -1; + } + } + + return 0; +} + + + int v3_deliver_console_event(struct v3_vm_info * vm, - struct v3_console_event * evt) { + struct v3_console_event * evt) { struct v3_host_events * host_evts = NULL; struct v3_host_event_hook * hook = NULL;