X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Finclude%2Fpalacios%2Fvmm_dev_mgr.h;h=b7552c46ba9f2921046f6a23d19bd61dc72805e2;hb=9dcbb93853a8ffa6622cca0e86f4a4a29ddc52fe;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..b7552c4 100644 --- a/palacios/include/palacios/vmm_dev_mgr.h +++ b/palacios/include/palacios/vmm_dev_mgr.h @@ -1,44 +1,47 @@ -#ifndef _vmm_dev_mgr -#define _vmm_dev_mgr +/* + * This file is part of the Palacios Virtual Machine Monitor developed + * by the V3VEE Project with funding from the United States National + * Science Foundation and the Department of Energy. + * + * The V3VEE Project is a joint project between Northwestern University + * and the University of New Mexico. You can find out more at + * http://www.v3vee.org + * + * Copyright (c) 2008, Jack Lange + * Copyright (c) 2008, The V3VEE Project + * All rights reserved. + * + * Author: Jack Lange + * + * This is free software. You are permitted to use, + * redistribute, and modify it as specified in the file "V3VEE_LICENSE". + */ + +#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} ; + 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 + uint_t num_io_hooks; + struct list_head io_hooks; - struct vm_device_io_hook *next, *prev; -}; + uint_t num_mem_hooks; + struct list_head mem_hooks; -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; + uint_t num_msr_hook; + struct list_head msr_hooks; }; @@ -51,43 +54,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 v3_init_dev_mgr(struct guest_info * info); +int v3_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