X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?p=palacios.git;a=blobdiff_plain;f=palacios%2Fsrc%2Fdevices%2Flnx_virtio_sym.c;h=852709e02c3965415d7219f40a00b569d6cc8f93;hp=e7fa1f0a4aa23ce160cddbdbdca433f014fa29ef;hb=3cab540e9e47ce3562dae4c03b20d84b24d8f1f7;hpb=f7bc654c609c9780d52f6fa980de987ddd337416 diff --git a/palacios/src/devices/lnx_virtio_sym.c b/palacios/src/devices/lnx_virtio_sym.c index e7fa1f0..852709e 100644 --- a/palacios/src/devices/lnx_virtio_sym.c +++ b/palacios/src/devices/lnx_virtio_sym.c @@ -156,14 +156,16 @@ static int handle_kick(struct vm_device * dev) { } -static int virtio_io_write(uint16_t port, void * src, uint_t length, struct vm_device * dev) { +static int virtio_io_write(uint16_t port, void * src, uint_t length, void * private_data) { + struct vm_device * dev = (struct vm_device *)private_data; struct virtio_sym_state * virtio = (struct virtio_sym_state *)dev->private_data; int port_idx = port % virtio->io_range_size; +/* PrintDebug("VIRTIO SYMBIOTIC Write for port %d (index=%d) len=%d, value=%x\n", port, port_idx, length, *(uint32_t *)src); - +*/ switch (port_idx) { @@ -264,14 +266,15 @@ static int virtio_io_write(uint16_t port, void * src, uint_t length, struct vm_d } -static int virtio_io_read(uint16_t port, void * dst, uint_t length, struct vm_device * dev) { +static int virtio_io_read(uint16_t port, void * dst, uint_t length, void * private_data) { + struct vm_device * dev = (struct vm_device *)private_data; struct virtio_sym_state * virtio = (struct virtio_sym_state *)dev->private_data; int port_idx = port % virtio->io_range_size; - +/* PrintDebug("VIRTIO SYMBIOTIC Read for port %d (index =%d), length=%d\n", port, port_idx, length); - +*/ switch (port_idx) { case HOST_FEATURES_PORT: if (length != 4) { @@ -349,10 +352,11 @@ static struct v3_device_ops dev_ops = { -static int virtio_init(struct guest_info * vm, void * cfg_data) { - struct vm_device * pci_bus = v3_find_dev(vm, (char *)cfg_data); +static int virtio_init(struct guest_info * vm, v3_cfg_tree_t * cfg) { + struct vm_device * pci_bus = v3_find_dev(vm, v3_cfg_val(cfg, "bus")); struct virtio_sym_state * virtio_state = NULL; struct pci_device * pci_dev = NULL; + char * name = v3_cfg_val(cfg, "name"); PrintDebug("Initializing VIRTIO Symbiotic device\n"); @@ -366,9 +370,9 @@ static int virtio_init(struct guest_info * vm, void * cfg_data) { memset(virtio_state, 0, sizeof(struct virtio_sym_state)); - struct vm_device * dev = v3_allocate_device("LNX_VIRTIO_SYM", &dev_ops, virtio_state); + struct vm_device * dev = v3_allocate_device(name, &dev_ops, virtio_state); if (v3_attach_device(vm, dev) == -1) { - PrintError("Could not attach device %s\n", "LNX_VIRTIO_SYM"); + PrintError("Could not attach device %s\n", name); return -1; } @@ -407,6 +411,7 @@ static int virtio_init(struct guest_info * vm, void * cfg_data) { bars[0].io_read = virtio_io_read; bars[0].io_write = virtio_io_write; + bars[0].private_data = dev; pci_dev = v3_pci_register_device(pci_bus, PCI_STD_DEVICE, 0, PCI_AUTO_DEV_NUM, 0,