X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Finclude%2Fpalacios%2Fvmm_dev_mgr.h;h=eba13c81c4f55332afb693c599ccd0720817759e;hb=bc2c46a12649344d973e2201271c05390ce924bf;hp=5f1e96eebb426e94b535ce5c368ef1f814a20c69;hpb=7841dc573457c334a0f3b6e9186d26b1776c400f;p=palacios.git diff --git a/palacios/include/palacios/vmm_dev_mgr.h b/palacios/include/palacios/vmm_dev_mgr.h index 5f1e96e..eba13c8 100644 --- a/palacios/include/palacios/vmm_dev_mgr.h +++ b/palacios/include/palacios/vmm_dev_mgr.h @@ -1,48 +1,29 @@ -#ifndef _vmm_dev_mgr -#define _vmm_dev_mgr +#ifndef _VMM_DEV_MGR +#define _VMM_DEV_MGR #include -#include +#include +#include struct vm_device; struct guest_info; - struct vmm_dev_mgr { - struct guest_info *vm; - struct vm_device *dev_list; - uint_t num_devices; -}; - - -enum access_control {DEVICE_EMULATED, DEVICE_PASSTHROUGH} ; -enum access_type {DEVICE_READ, DEVICE_WRITE, DEVICE_READWRITE} ; + uint_t num_devs; + struct list_head dev_list; -struct vm_device_io_hook { - enum access_control control; - enum access_type atype; - - ushort_t guest_port; - - // Do not touch anything below this - - struct vm_device_io_hook *next, *prev; -}; - -struct vm_device_mem_hook { - enum access_control control; - enum access_type atype; - - void *guest_physical_start; - void *guest_physical_end; - - // Do not touch anything below this + uint_t num_io_hooks; + struct list_head io_hooks; - struct vm_device_mem_hook *next, *prev; + uint_t num_mem_hooks; + struct list_head mem_hooks; }; +int dev_mgr_init(struct vmm_dev_mgr *mgr); +int dev_mgr_deinit(struct vmm_dev_mgr * mgr); + // Registration of devices @@ -51,43 +32,46 @@ struct vm_device_mem_hook { // when the guest is stopped // -int dev_mgr_init(struct vmm_dev_mgr *mgr, struct guest_info *vm); -int dev_mgr_deinit(struct vmm_dev_mgr *mgr); +int v3_attach_device(struct guest_info *vm, struct vm_device * dev); +int v3_unattach_device(struct vm_device *dev); -int dev_mgr_attach_device(struct guest_info *vm, - struct vm_device *device); -int dev_mgr_detach_device(struct guest_info *vm, - struct vm_device *device); +void PrintDebugDevMgr(struct vmm_dev_mgr * mgr); -int dev_mgr_hook_io(struct guest_info *vm, - struct vm_device *device, - ushort_t portno, - enum access_control control, - enum access_type atype); +#ifdef __V3VEE__ -int dev_mgr_unhook_io(struct guest_info *vm, - struct vm_device *device, - ushort_t portno); +struct dev_io_hook { + ushort_t port; + + int (*read)(ushort_t port, void * dst, uint_t length, struct vm_device * dev); + int (*write)(ushort_t port, void * src, uint_t length, struct vm_device * dev); + + struct vm_device * dev; + + // Do not touch anything below this + + struct list_head dev_list; + struct list_head mgr_list; +}; + +struct dev_mem_hook { + void *addr_start; + void *addr_end; + + struct vm_device * dev; + + // Do not touch anything below this + struct list_head dev_list; + struct list_head mgr_list; +}; -int dev_mgr_hook_mem(struct guest_info *vm, - struct vm_device *device, - void *guest_physical_address_start, - void *guest_physical_address_end, - enum access_control control, - enum access_type atype); -int dev_mgr_unhook_mem(struct guest_info *vm, - struct vm_device *device, - void *guest_physical_address_start, - void *guest_physical_address_end); -// -// Strictly a helper - the device is resposible for unhooking on disconnect -// -int dev_mgr_unhook_device(struct guest_info *vm, - struct vm_device *device); +void PrintDebugDev(struct vm_device * dev); +void PrintDebugDevIO(struct vm_device * dev); +void PrintDebugDevMgrIO(struct vmm_dev_mgr * mgr); +#endif // ! __V3VEE__ #endif