X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Finclude%2Fpalacios%2Fvmm_dev_mgr.h;h=080de99f1a47063f340dae215b80ba670445cdab;hb=7c11601d0b92517069ef802f54a4c770cdcce423;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..080de99 100644 --- a/palacios/include/palacios/vmm_dev_mgr.h +++ b/palacios/include/palacios/vmm_dev_mgr.h @@ -1,49 +1,72 @@ -#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; -}; - + uint_t num_devs; + struct list_head dev_list; -enum access_control {DEVICE_EMULATED, DEVICE_PASSTHROUGH} ; -enum access_type {DEVICE_READ, DEVICE_WRITE, DEVICE_READWRITE} ; + uint_t num_io_hooks; + struct list_head io_hooks; + + uint_t num_mem_hooks; + struct list_head mem_hooks; + /* + uint_t num_irq_hooks; + struct list_head irq_hooks; + */ +}; -struct vm_device_io_hook { - enum access_control control; - enum access_type atype; - ushort_t guest_port; - // Do not touch anything below this +struct dev_io_hook { + ushort_t port; - struct vm_device_io_hook *next, *prev; + 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 dev_io_hook *dev_next, *dev_prev; + struct dev_io_hook *mgr_next, *mgr_prev; + */ + struct list_head dev_list; + struct list_head mgr_list; }; -struct vm_device_mem_hook { - enum access_control control; - enum access_type atype; +struct dev_mem_hook { + void *addr_start; + void *addr_end; - void *guest_physical_start; - void *guest_physical_end; + struct vm_device * dev; // Do not touch anything below this - - struct vm_device_mem_hook *next, *prev; - + struct list_head dev_list; + struct list_head mgr_list; }; +/* +struct dev_irq_hook { + uint_t irq; + int (*handler)(uint_t irq, struct vm_device * dev); + struct vm_device * dev; + + struct list_head dev_list; + struct list_head mgr_list; +}; + +*/ // Registration of devices // @@ -51,43 +74,31 @@ 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 dev_mgr_init(struct vmm_dev_mgr *mgr); +int dev_mgr_deinit(struct vmm_dev_mgr * mgr); -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 attach_device(struct guest_info *vm, struct vm_device * dev); +int unattach_device(struct vm_device *dev); -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_add_device(struct vmm_dev_mgr * mgr, struct vm_device * dev); +int dev_mgr_remove_device(struct vmm_dev_mgr * mgr, struct vm_device * dev); -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); +/* + int dev_mgr_add_io_hook(struct vmm_dev_mgr * mgr, struct dev_io_hook * hook); + int dev_mgr_remove_io_hook(struct vmm_dev_mgr * mgr, struct dev_io_hook * hook); + int dev_add_io_hook(struct vmm_dev_mgr * mgr, struct dev_io_hook * hook); + int dev_remove_io_hook(struct vmm_dev_mgr * mgr, struct dev_io_hook * hook); + struct dev_io_hook * dev_find_io_hook(struct vm_device * dev, ushort_t port); + struct dev_io_hook * dev_mgr_find_io_hook(struct vmm_dev_mgr * mgr, ushort_t port) +*/ +void PrintDebugDevMgr(struct vmm_dev_mgr * mgr); +void PrintDebugDev(struct vm_device * dev); +void PrintDebugDevIO(struct vm_device * dev); +void PrintDebugDevMgrIO(struct vmm_dev_mgr * mgr); #endif