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