Previous RFC you can find at http://lists.gnu.org/archive/html/qemu-devel/2012-04/msg03665.html Yes, long time ago... Since I'm not sure when I'll be able to continue on this, I'm publishing this work as is. In this patchset I tried to split virtio-xxx-pci devices into virtio-pci + virtio-xxx (blk, net, serial,...). Also virtio-mmio transport is introduced based on Peter's work which is accessible here: http://lists.gnu.org/archive/html/qemu-devel/2011-11/msg01870.html
The main idea was to let users specify -device virtio-pci,id=virtio-pci.0 -device virtio-blk,transport=virtio-pci.0,... and -device virtio-mmio,id=virtio-mmio.0 -device virtio-blk,transport=virtio-mmio.0,... I created virtio-pci and virtio-mmio transport devices and tried to enclose back-end functionality into virtio-blk, virtio-net, etc. On initialization of transport device it creates a bus to which a back-end device could be connected. Each back-end device is implemented in corresponding source file. As for PCI transport, I temporary placed it in a new virtio-pci-new.c file to not break a functionality of still presented virtio-xxx-pci devices. Known issues to be resolved: 1. On creation of back-end we need to resolve somehow if props were explicitly set by user. 2. Back-end device can't be initialized if there are no free bus created by transport, so you can't specify -device virtio-blk,transport=virtio-pci.0,... -device virtio-pci,id=virtio-pci.0 3. Implement virtio-xxx-devices such that they just create virtio-pci and virtio-xxx devices during initialization. 4. Refactor all remaining back-ends since I just tried blk, net, serial and balloon. 5. Refactor s390 6. Further? Evgeny Voevodin (9): Virtio: Add transport bindings. hw/qdev-properties.c: Add "transport" property. hw/pci.c: Make pci_add_option_rom global visible hw/virtio-serial-bus.c: Add virtio-serial device. hw/virtio-balloon.c: Add virtio-balloon device. hw/virtio-net.c: Add virtio-net device. hw/virtio-blk.c: Add virtio-blk device. hw/virtio-pci-new.c: Add VirtIOPCI device. hw/exynos4210.c: Create two virtio-mmio transport instances. Peter Maydell (3): virtio: Add support for guest setting of queue size virtio: Support transports which can specify the vring alignment Add MMIO based virtio transport hw/Makefile.objs | 3 + hw/exynos4210.c | 13 + hw/pci.c | 3 +- hw/pci.h | 2 + hw/qdev-properties.c | 29 ++ hw/qdev.h | 3 + hw/virtio-balloon.c | 42 +++ hw/virtio-balloon.h | 9 + hw/virtio-blk.c | 65 ++++ hw/virtio-blk.h | 15 + hw/virtio-mmio.c | 400 +++++++++++++++++++++ hw/virtio-net.c | 59 +++ hw/virtio-net.h | 16 + hw/virtio-pci-new.c | 925 ++++++++++++++++++++++++++++++++++++++++++++++++ hw/virtio-pci.h | 18 + hw/virtio-serial-bus.c | 44 +++ hw/virtio-serial.h | 11 + hw/virtio-transport.c | 147 ++++++++ hw/virtio-transport.h | 74 ++++ hw/virtio.c | 20 +- hw/virtio.h | 2 + 21 files changed, 1896 insertions(+), 4 deletions(-) create mode 100644 hw/virtio-mmio.c create mode 100644 hw/virtio-pci-new.c create mode 100644 hw/virtio-transport.c create mode 100644 hw/virtio-transport.h -- 1.7.9.5