X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Finclude%2Fpalacios%2Fvmm_dev_mgr.h;h=17a337008facbbd6936a23d7252395c29d1d9a94;hb=f4b074d9bf5c28dfd6e5fd616805ade2e9473b01;hp=5f1e96eebb426e94b535ce5c368ef1f814a20c69;hpb=7841dc573457c334a0f3b6e9186d26b1776c400f;p=palacios-OLD.git diff --git a/palacios/include/palacios/vmm_dev_mgr.h b/palacios/include/palacios/vmm_dev_mgr.h index 5f1e96e..17a3370 100644 --- a/palacios/include/palacios/vmm_dev_mgr.h +++ b/palacios/include/palacios/vmm_dev_mgr.h @@ -1,44 +1,28 @@ -#ifndef _vmm_dev_mgr -#define _vmm_dev_mgr +/* (c) 2008, Jack Lange */ +/* (c) 2008, The V3VEE Project */ + +#ifndef _VMM_DEV_MGR +#define _VMM_DEV_MGR + +#ifdef __V3VEE__ #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} ; - -struct vm_device_io_hook { - enum access_control control; - enum access_type atype; - - ushort_t guest_port; + uint_t num_devs; + struct list_head dev_list; - // 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; }; @@ -51,43 +35,48 @@ 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); -int dev_mgr_hook_io(struct guest_info *vm, - struct vm_device *device, - ushort_t portno, - enum access_control control, - enum access_type atype); -int dev_mgr_unhook_io(struct guest_info *vm, - struct vm_device *device, - ushort_t portno); -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); +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); -// -// Strictly a helper - the device is resposible for unhooking on disconnect -// + 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_init(struct guest_info * info); +int dev_mgr_deinit(struct guest_info * info); -int dev_mgr_unhook_device(struct guest_info *vm, - struct vm_device *device); +void PrintDebugDevMgr(struct guest_info * info); +void PrintDebugDev(struct vm_device * dev); +void PrintDebugDevIO(struct vm_device * dev); +void PrintDebugDevMgrIO(struct vmm_dev_mgr * mgr); +#endif // ! __V3VEE__ #endif