This series enables OvmfPkg and ArmVirtPkg to work with non-transitional VirtIo 1.0 PCI devices. The first 12 patches rework our edk2-only, private VIRTIO_DEVICE_PROTOCOL (and its two existent implementations), and adapt the four device drivers we have. (The 1.0 specification is not fully backwards compatible.) This is done without disturbing the current (legacy, 0.9.5) functionality.
Patch 13 adds a VIRTIO_DEVICE_PROTOCOL implementation that conforms to VirtIo 1.0. Patches 14 and 15 include the new driver in OvmfPkg and ArmVirtPkg. Public branch: <https://github.com/lersek/edk2/commits/virtio10_v1>. If you would like to test this series with VirtIo 1.0 devices, patch 13 has some instructions about the QEMU command line. If you also want to boot Linux guests on them, then you will need a fairly recent (4.2 or 4.3+) guest kernel, *plus* the following (pending) QEMU bugfix: <http://thread.gmane.org/gmane.comp.emulators.qemu/400142/focus=400161>. Cc: Ard Biesheuvel <[email protected]> Cc: Jordan Justen <[email protected]> Laszlo Ersek (15): OvmfPkg: VIRTIO_DEVICE_PROTOCOL: widen the Features bitmap to 64 bits OvmfPkg: VIRTIO_DEVICE_PROTOCOL: remove GetQueueAddress() member OvmfPkg: VIRTIO_DEVICE_PROTOCOL: pass VRING object to SetQueueAddress() OvmfPkg: VirtioBlkDxe: don't clear non-negotiable feature bits OvmfPkg: VirtioRngDxe: clear all feature bits more explicitly OvmfPkg: IndustryStandard: add definitions from the VirtIo 1.0 spec OvmfPkg: VirtioLib: add Virtio10WriteFeatures() function OvmfPkg: VirtioBlkDxe: adapt feature negotiation to virtio-1.0 OvmfPkg: VirtioNetDxe: adapt feature negotiation to virtio-1.0 OvmfPkg: VirtioRngDxe: adapt feature negotiation to virtio-1.0 OvmfPkg: VirtioScsiDxe: adapt feature negotiation to virtio-1.0 OvmfPkg: VirtioNetDxe: adapt virtio-net packet header size to virtio-1.0 OvmfPkg: Virtio10Dxe: non-transitional driver for virtio-1.0 PCI devices OvmfPkg: include Virtio10Dxe ArmVirtPkg: include Virtio10Dxe from OvmfPkg ArmVirtPkg/ArmVirtQemu.dsc | 1 + ArmVirtPkg/ArmVirtQemuKernel.dsc | 1 + OvmfPkg/OvmfPkgIa32.dsc | 1 + OvmfPkg/OvmfPkgIa32X64.dsc | 1 + OvmfPkg/OvmfPkgX64.dsc | 1 + ArmVirtPkg/ArmVirtQemu.fdf | 1 + ArmVirtPkg/ArmVirtQemuKernel.fdf | 1 + OvmfPkg/OvmfPkgIa32.fdf | 1 + OvmfPkg/OvmfPkgIa32X64.fdf | 1 + OvmfPkg/OvmfPkgX64.fdf | 1 + OvmfPkg/Virtio10Dxe/Virtio10.inf | 40 + OvmfPkg/Include/IndustryStandard/Virtio10.h | 81 ++ OvmfPkg/Include/IndustryStandard/Virtio10Net.h | 31 + OvmfPkg/Include/Library/VirtioLib.h | 47 + OvmfPkg/Include/Protocol/VirtioDevice.h | 42 +- OvmfPkg/Library/VirtioMmioDeviceLib/VirtioMmioDevice.h | 15 +- OvmfPkg/Virtio10Dxe/Virtio10.h | 56 ++ OvmfPkg/VirtioNetDxe/VirtioNet.h | 4 +- OvmfPkg/VirtioPciDeviceDxe/VirtioPciDevice.h | 15 +- OvmfPkg/Library/VirtioLib/VirtioLib.c | 75 ++ OvmfPkg/Library/VirtioMmioDeviceLib/VirtioMmioDevice.c | 1 - OvmfPkg/Library/VirtioMmioDeviceLib/VirtioMmioDeviceFunctions.c | 37 +- OvmfPkg/Virtio10Dxe/Virtio10.c | 1061 ++++++++++++++++++++ OvmfPkg/VirtioBlkDxe/VirtioBlk.c | 33 +- OvmfPkg/VirtioNetDxe/DriverBinding.c | 2 +- OvmfPkg/VirtioNetDxe/SnpInitialize.c | 64 +- OvmfPkg/VirtioPciDeviceDxe/VirtioPciDevice.c | 1 - OvmfPkg/VirtioPciDeviceDxe/VirtioPciFunctions.c | 40 +- OvmfPkg/VirtioRngDxe/VirtioRng.c | 31 +- OvmfPkg/VirtioScsiDxe/VirtioScsi.c | 32 +- 30 files changed, 1565 insertions(+), 153 deletions(-) create mode 100644 OvmfPkg/Virtio10Dxe/Virtio10.inf create mode 100644 OvmfPkg/Include/IndustryStandard/Virtio10.h create mode 100644 OvmfPkg/Include/IndustryStandard/Virtio10Net.h create mode 100644 OvmfPkg/Virtio10Dxe/Virtio10.h create mode 100644 OvmfPkg/Virtio10Dxe/Virtio10.c -- 1.8.3.1 _______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

