X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?p=palacios.git;a=blobdiff_plain;f=palacios%2Finclude%2Fpalacios%2Fvmm_dev_mgr.h;fp=palacios%2Finclude%2Fpalacios%2Fvmm_dev_mgr.h;h=5f1e96eebb426e94b535ce5c368ef1f814a20c69;hp=0000000000000000000000000000000000000000;hb=7841dc573457c334a0f3b6e9186d26b1776c400f;hpb=a27a60b911afe29329cf93b23e274e0ef182093e diff --git a/palacios/include/palacios/vmm_dev_mgr.h b/palacios/include/palacios/vmm_dev_mgr.h new file mode 100644 index 0000000..5f1e96e --- /dev/null +++ b/palacios/include/palacios/vmm_dev_mgr.h @@ -0,0 +1,93 @@ +#ifndef _vmm_dev_mgr +#define _vmm_dev_mgr + +#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; + + // 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 + + struct vm_device_mem_hook *next, *prev; + +}; + + + +// Registration of devices + +// +// The following device manager functions should only be called +// 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_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); + +// +// Strictly a helper - the device is resposible for unhooking on disconnect +// + +int dev_mgr_unhook_device(struct guest_info *vm, + struct vm_device *device); + + +#endif