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;
} 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