v6: unfold IO_READ/WRITE_DEF macro v5: minor fixes:
- fix wrong type of arg "offset" of read/write_dev_config(): patch 2 is newly added for that. - check "offset + length" overflow Almost all difference comes from virtio 1.0 are the PCI layout change: the major configuration structures are stored at bar space, and their location is stored at corresponding pci cap structure. Reading/parsing them is one of the major work of patch 8. To make handling virtio v1.0 and v0.95 co-exist well, this patch set introduces a virtio_pci_ops structure, to add another layer so that we could keep those vtpci_foo_bar "APIs". With that, we could do the minimum change to add virtio 1.0 support. Rough test guide ================ Firstly, you need get a virtio 1.0 supported QEMU (say, v2.5), then add option "disable-modern=false" to qemu virtio-net-pci device to enable virtio 1.0 (which is disabled by default). And if you see something like following from 'lspci -v', it means virtio 1.0 is indeed enabled: 00:04.0 Ethernet controller: Red Hat, Inc Virtio network device Subsystem: Red Hat, Inc Device 0001 Physical Slot: 4 Flags: bus master, fast devsel, latency 0, IRQ 11 I/O ports at c040 [size=64] Memory at febf1000 (32-bit, non-prefetchable) [size=4K] Memory at fe000000 (64-bit, prefetchable) [size=8M] Expansion ROM at feb80000 [disabled] [size=256K] Capabilities: [98] MSI-X: Enable+ Count=6 Masked- ==> Capabilities: [84] Vendor Specific Information: Len=14 <?> ==> Capabilities: [70] Vendor Specific Information: Len=14 <?> ==> Capabilities: [60] Vendor Specific Information: Len=10 <?> ==> Capabilities: [50] Vendor Specific Information: Len=10 <?> ==> Capabilities: [40] Vendor Specific Information: Len=10 <?> Kernel driver in use: virtio-pci Kernel modules: virtio_pci After that, there wasn't anything speical comparing to the old virtio 0.95 pmd driver. --- Yuanhan Liu (9): virtio: don't set vring address again at queue startup virtio: define offset as size_t type virtio: introduce struct virtio_pci_ops virtio: move left pci stuff to virtio_pci.c viritio: switch to 64 bit features virtio: retrieve hdr_size from hw->vtnet_hdr_size eal: pci: export pci_[un]map_device virtio: add 1.0 support virtio: move VIRTIO_READ/WRITE_REG_X into virtio_pci.c doc/guides/rel_notes/release_2_3.rst | 3 + drivers/net/virtio/virtio_ethdev.c | 302 +-------- drivers/net/virtio/virtio_ethdev.h | 3 +- drivers/net/virtio/virtio_pci.c | 813 +++++++++++++++++++++++- drivers/net/virtio/virtio_pci.h | 124 +++- drivers/net/virtio/virtio_rxtx.c | 21 +- drivers/net/virtio/virtio_rxtx_simple.c | 12 +- drivers/net/virtio/virtqueue.h | 4 +- lib/librte_eal/bsdapp/eal/eal_pci.c | 4 +- lib/librte_eal/bsdapp/eal/rte_eal_version.map | 7 + lib/librte_eal/common/eal_common_pci.c | 4 +- lib/librte_eal/common/eal_private.h | 18 - lib/librte_eal/common/include/rte_pci.h | 27 + lib/librte_eal/linuxapp/eal/eal_pci.c | 4 +- lib/librte_eal/linuxapp/eal/rte_eal_version.map | 7 + 15 files changed, 971 insertions(+), 382 deletions(-) -- 1.9.0