X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Finclude%2Fpalacios%2Fvmm_io.h;h=34c04f05078d8213225ec415495e9621853ccf16;hb=639fdba00d36b2a60fad3d28703459354cf8744f;hp=f13eee8b98b777ab7f21ad48893ef2f6fa1677d7;hpb=a109eb919a162bd7de58d62020801bc2e633be50;p=palacios.git diff --git a/palacios/include/palacios/vmm_io.h b/palacios/include/palacios/vmm_io.h index f13eee8..34c04f0 100644 --- a/palacios/include/palacios/vmm_io.h +++ b/palacios/include/palacios/vmm_io.h @@ -13,10 +13,12 @@ typedef struct vmm_io_hook { ushort_t port; // Reads data into the IO port (IN, INS) - int (*read)(ushort_t port, void * dst, uint_t length); + int (*read)(ushort_t port, void * dst, uint_t length, void * priv_data); // Writes data from the IO port (OUT, OUTS) - int (*write)(ushort_t port, void * src, uint_t length); + int (*write)(ushort_t port, void * src, uint_t length, void * priv_data); + + void * priv_data; struct vmm_io_hook * next; struct vmm_io_hook * prev; @@ -33,21 +35,28 @@ typedef struct vmm_io_map { } vmm_io_map_t; -void add_io_hook(vmm_io_map_t * io_map, vmm_io_hook_t * io_hook); - +int add_io_hook(vmm_io_map_t * io_map, vmm_io_hook_t * io_hook); +int remove_io_hook(vmm_io_map_t * io_map, vmm_io_hook_t * io_hook); vmm_io_hook_t * get_io_hook(vmm_io_map_t * io_map, uint_t port); /* External API */ -void hook_io_port(vmm_io_map_t * io_map, uint_t port, - int (*read)(ushort_t port, void * dst, uint_t length), - int (*write)(ushort_t port, void * src, uint_t length)); +int hook_io_port(vmm_io_map_t * io_map, uint_t port, + int (*read)(ushort_t port, void * dst, uint_t length, void * priv_data), + int (*write)(ushort_t port, void * src, uint_t length, void * priv_data), + void * priv_data); + +int unhook_io_port(vmm_io_map_t * io_map, uint_t port); void init_vmm_io_map(vmm_io_map_t * io_map); void PrintDebugIOMap(vmm_io_map_t * io_map); + + + + #endif