X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fdevices%2Fi440fx.c;h=6c587d3eedaf72108f3834475a4e564590a02925;hb=f7e83e5d2d00ba107ccda346da4660ab523471bb;hp=22f5c62c4bbe5cf243e4ce8916f0fecb214002dc;hpb=e2964f7234daa3429275c039769a313f0870c212;p=palacios.git diff --git a/palacios/src/devices/i440fx.c b/palacios/src/devices/i440fx.c index 22f5c62..6c587d3 100644 --- a/palacios/src/devices/i440fx.c +++ b/palacios/src/devices/i440fx.c @@ -45,8 +45,7 @@ static int io_write(struct guest_info * core, ushort_t port, void * src, uint_t -static int i440_free(struct vm_device * dev) { - struct i440_state * state = dev->private_data; +static int i440_free(struct i440_state * state) { // unregister from PCI @@ -56,7 +55,7 @@ static int i440_free(struct vm_device * dev) { } static struct v3_device_ops dev_ops = { - .free = i440_free, + .free = (int (*)(void *))i440_free, }; @@ -70,6 +69,7 @@ static int i440_init(struct v3_vm_info * vm, v3_cfg_tree_t * cfg) { struct i440_state * state = NULL; struct vm_device * pci = v3_find_dev(vm, v3_cfg_val(cfg, "bus")); char * dev_id = v3_cfg_val(cfg, "ID"); + int ret = 0; if (!pci) { PrintError("could not find PCI Device\n"); @@ -80,19 +80,27 @@ static int i440_init(struct v3_vm_info * vm, v3_cfg_tree_t * cfg) { state->pci = pci; - struct vm_device * dev = v3_allocate_device(dev_id, &dev_ops, state); + struct vm_device * dev = v3_add_device(vm, dev_id, &dev_ops, state); - if (v3_attach_device(vm, dev) == -1) { + if (dev == NULL) { PrintError("Could not attach device %s\n", dev_id); V3_Free(state); return -1; } for (i = 0; i < 4; i++) { - v3_dev_hook_io(dev, 0x0cf8 + i, &io_read, &io_write); - v3_dev_hook_io(dev, 0x0cfc + i, &io_read, &io_write); + ret |= v3_dev_hook_io(dev, 0x0cf8 + i, &io_read, &io_write); + ret |= v3_dev_hook_io(dev, 0x0cfc + i, &io_read, &io_write); } + /* + if (ret != 0) { + PrintError("Error hooking i440FX io ports\n"); + v3_remove_device(dev); + return -1; + } + */ + for (i = 0; i < 6; i++) { bars[i].type = PCI_BAR_NONE; } @@ -102,7 +110,7 @@ static int i440_init(struct v3_vm_info * vm, v3_cfg_tree_t * cfg) { NULL, NULL, NULL, state); if (!pci_dev) { - v3_detach_device(dev); + v3_remove_device(dev); return -1; }