X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?p=palacios.git;a=blobdiff_plain;f=palacios%2Fsrc%2Fpalacios%2Fvmm_dev_mgr.c;h=61850bf4ca4e8336e4ff369ef74d6da51bb34b2d;hp=e872ce7cd1464a1d6ca9b955e02682b0500be49a;hb=266af4b5b19da7bee8e7445288c7c1cb3ee194c7;hpb=5ac47589b79508967bd06b4022bbfc50de47423f diff --git a/palacios/src/palacios/vmm_dev_mgr.c b/palacios/src/palacios/vmm_dev_mgr.c index e872ce7..61850bf 100644 --- a/palacios/src/palacios/vmm_dev_mgr.c +++ b/palacios/src/palacios/vmm_dev_mgr.c @@ -32,62 +32,62 @@ int v3_init_dev_mgr(struct guest_info * info) { - struct vmm_dev_mgr * mgr = &(info->dev_mgr); - INIT_LIST_HEAD(&(mgr->dev_list)); - mgr->num_devs = 0; + struct vmm_dev_mgr * mgr = &(info->dev_mgr); + INIT_LIST_HEAD(&(mgr->dev_list)); + mgr->num_devs = 0; - INIT_LIST_HEAD(&(mgr->io_hooks)); - mgr->num_io_hooks = 0; + INIT_LIST_HEAD(&(mgr->io_hooks)); + mgr->num_io_hooks = 0; - INIT_LIST_HEAD(&(mgr->mem_hooks)); - mgr->num_mem_hooks = 0; + INIT_LIST_HEAD(&(mgr->mem_hooks)); + mgr->num_mem_hooks = 0; - INIT_LIST_HEAD(&(mgr->msr_hooks)); - mgr->num_msr_hook = 0; + INIT_LIST_HEAD(&(mgr->msr_hooks)); + mgr->num_msr_hook = 0; - return 0; + return 0; } int v3_dev_mgr_deinit(struct guest_info * info) { - struct vm_device * dev; - struct vmm_dev_mgr * mgr = &(info->dev_mgr); - struct vm_device * tmp; + struct vm_device * dev; + struct vmm_dev_mgr * mgr = &(info->dev_mgr); + struct vm_device * tmp; - list_for_each_entry_safe(dev, tmp, &(mgr->dev_list), dev_link) { - v3_unattach_device(dev); - v3_free_device(dev); - } + list_for_each_entry_safe(dev, tmp, &(mgr->dev_list), dev_link) { + v3_unattach_device(dev); + v3_free_device(dev); + } - return 0; + return 0; } int v3_attach_device(struct guest_info * vm, struct vm_device * dev) { - struct vmm_dev_mgr *mgr= &(vm->dev_mgr); + struct vmm_dev_mgr *mgr= &(vm->dev_mgr); - dev->vm = vm; + dev->vm = vm; - list_add(&(dev->dev_link), &(mgr->dev_list)); - mgr->num_devs++; + list_add(&(dev->dev_link), &(mgr->dev_list)); + mgr->num_devs++; - dev->ops->init(dev); + dev->ops->init(dev); - return 0; + return 0; } int v3_unattach_device(struct vm_device * dev) { - struct vmm_dev_mgr * mgr = &(dev->vm->dev_mgr); + struct vmm_dev_mgr * mgr = &(dev->vm->dev_mgr); - dev->ops->deinit(dev); + dev->ops->deinit(dev); - list_del(&(dev->dev_link)); - mgr->num_devs--; + list_del(&(dev->dev_link)); + mgr->num_devs--; - dev->vm = NULL; + dev->vm = NULL; - return 0; + return 0; } @@ -96,14 +96,14 @@ int v3_unattach_device(struct vm_device * dev) { /* IO HOOKS */ static struct dev_io_hook * dev_mgr_find_io_hook(struct vmm_dev_mgr * mgr, ushort_t port) { - struct dev_io_hook * tmp = NULL; + struct dev_io_hook * tmp = NULL; - list_for_each_entry(tmp, &(mgr->io_hooks), mgr_list) { - if (tmp->port == port) { - return tmp; + list_for_each_entry(tmp, &(mgr->io_hooks), mgr_list) { + if (tmp->port == port) { + return tmp; + } } - } - return NULL; + return NULL; } @@ -115,55 +115,55 @@ int v3_dev_hook_io(struct vm_device *dev, 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 dev_io_hook *hook = (struct dev_io_hook *)V3_Malloc(sizeof(struct dev_io_hook)); - struct vmm_dev_mgr * mgr = &(dev->vm->dev_mgr); + struct dev_io_hook *hook = (struct dev_io_hook *)V3_Malloc(sizeof(struct dev_io_hook)); + struct vmm_dev_mgr * mgr = &(dev->vm->dev_mgr); - if (!hook) { - return -1; - } + if (!hook) { + return -1; + } - if (v3_hook_io_port(dev->vm, port, - (int (*)(ushort_t, void *, uint_t, void *))read, - (int (*)(ushort_t, void *, uint_t, void *))write, - (void *)dev) == 0) { + if (v3_hook_io_port(dev->vm, port, + (int (*)(ushort_t, void *, uint_t, void *))read, + (int (*)(ushort_t, void *, uint_t, void *))write, + (void *)dev) == 0) { - hook->dev = dev; - hook->port = port; - hook->read = read; - hook->write = write; + hook->dev = dev; + hook->port = port; + hook->read = read; + hook->write = write; - list_add(&(hook->mgr_list), &(mgr->io_hooks)); - mgr->num_io_hooks++; + list_add(&(hook->mgr_list), &(mgr->io_hooks)); + mgr->num_io_hooks++; - list_add(&(hook->dev_list), &(dev->io_hooks)); - dev->num_io_hooks++; - } else { + list_add(&(hook->dev_list), &(dev->io_hooks)); + dev->num_io_hooks++; + } else { - return -1; - } + return -1; + } - return 0; + return 0; } int v3_dev_unhook_io(struct vm_device *dev, - ushort_t port) { - struct vmm_dev_mgr * mgr = &(dev->vm->dev_mgr); - struct dev_io_hook * hook = dev_mgr_find_io_hook(mgr, port); + ushort_t port) { + struct vmm_dev_mgr * mgr = &(dev->vm->dev_mgr); + struct dev_io_hook * hook = dev_mgr_find_io_hook(mgr, port); - if (!hook) { - return -1; - } + if (!hook) { + return -1; + } - list_del(&(hook->mgr_list)); - mgr->num_io_hooks--; + list_del(&(hook->mgr_list)); + mgr->num_io_hooks--; - list_del(&(hook->dev_list)); - dev->num_io_hooks--; + list_del(&(hook->dev_list)); + dev->num_io_hooks--; - return v3_unhook_io_port(dev->vm, port); + return v3_unhook_io_port(dev->vm, port); } @@ -190,30 +190,30 @@ static int dev_mgr_hook_mem(struct guest_info *vm, void *end) { - struct dev_mem_hook * hook = (struct dev_mem_hook*)V3_Malloc(sizeof(struct dev_mem_hook)); - // V3_Malloc(struct dev_mem_hook *, hook,sizeof(struct dev_mem_hook)); + struct dev_mem_hook * hook = (struct dev_mem_hook*)V3_Malloc(sizeof(struct dev_mem_hook)); + // V3_Malloc(struct dev_mem_hook *, hook,sizeof(struct dev_mem_hook)); - if (!hook) { - return -1; - } + if (!hook) { + return -1; + } - /* not implemented yet - hook_memory(vm->mem_map, - guest_physical_address_start, - guest_physical_address_end, - read, - write, - device); + /* not implemented yet + hook_memory(vm->mem_map, + guest_physical_address_start, + guest_physical_address_end, + read, + write, + device); - */ + */ - return -1; // remove when hook_memory works + return -1; // remove when hook_memory works - hook->addr_start = start; - hook->addr_end = end; + hook->addr_start = start; + hook->addr_end = end; - return 0; + return 0; } @@ -221,23 +221,23 @@ static int dev_mgr_hook_mem(struct guest_info *vm, static int dev_mgr_unhook_mem(struct vm_device *dev, addr_t start, addr_t end) { - /* - struct vmm_dev_mgr * mgr = &(dev->vm->dev_mgr); - struct dev_mem_hook *hook = dev_mgr_find_mem_hook(mgr, start, end); + /* + struct vmm_dev_mgr * mgr = &(dev->vm->dev_mgr); + struct dev_mem_hook *hook = dev_mgr_find_mem_hook(mgr, start, end); - if (!hook) { - // Very bad - unhooking something that doesn't exist! + if (!hook) { + // Very bad - unhooking something that doesn't exist! + return -1; + } + */ + + /* not implemented yet + return unhook_mem_port(vm->mem_map, + guest_physical_start, + guest_physical_end) ; + + */ return -1; - } - */ - - /* not implemented yet - return unhook_mem_port(vm->mem_map, - guest_physical_start, - guest_physical_end) ; - - */ - return -1; } #endif @@ -245,44 +245,26 @@ static int dev_mgr_unhook_mem(struct vm_device *dev, - - - - - - - - - - - - - - - - - - #ifdef DEBUG_DEV_MGR void PrintDebugDevMgr(struct guest_info * info) { - struct vmm_dev_mgr * mgr = &(info->dev_mgr); - struct vm_device * dev; - PrintDebug("%d devices registered with manager\n", mgr->num_devs); + struct vmm_dev_mgr * mgr = &(info->dev_mgr); + struct vm_device * dev; + PrintDebug("%d devices registered with manager\n", mgr->num_devs); - list_for_each_entry(dev, &(mgr->dev_list), dev_link) { - PrintDebugDev(dev); - PrintDebug("next..\n"); - } + list_for_each_entry(dev, &(mgr->dev_list), dev_link) { + PrintDebugDev(dev); + PrintDebug("next..\n"); + } - return; + return; } void PrintDebugDev(struct vm_device * dev) { - PrintDebug("Device: %s\n", dev->name); - PrintDebugDevIO(dev); + PrintDebug("Device: %s\n", dev->name); + PrintDebugDevIO(dev); } void PrintDebugDevMgrIO(struct vmm_dev_mgr * mgr) { @@ -290,17 +272,17 @@ void PrintDebugDevMgrIO(struct vmm_dev_mgr * mgr) { } void PrintDebugDevIO(struct vm_device * dev) { - struct dev_io_hook * hook; + struct dev_io_hook * hook; - PrintDebug("IO Hooks(%d) for Device: %s\n", dev->num_io_hooks, dev->name); + PrintDebug("IO Hooks(%d) for Device: %s\n", dev->num_io_hooks, dev->name); - list_for_each_entry(hook, &(dev->io_hooks), dev_list) { - PrintDebug("\tPort: 0x%x (read=0x%p), (write=0x%p)\n", hook->port, - (void *)(addr_t)(hook->read), - (void *)(addr_t)(hook->write)); - } + list_for_each_entry(hook, &(dev->io_hooks), dev_list) { + PrintDebug("\tPort: 0x%x (read=0x%p), (write=0x%p)\n", hook->port, + (void *)(addr_t)(hook->read), + (void *)(addr_t)(hook->write)); + } - return; + return; } #else