On 08/07/17 13:58, Brijesh Singh wrote:
> Currently, virtio drivers provides the system physical address to the device.
> However, some systems may feature an IOMMU that requires the drivers to pass
> the device addresses to the device - which are then translated by the IOMMU 
> into physical addresses in memory. The patch series introduces new member
> functions in VIRTIO_DEVICE_PROTOCOL which can be used for mapping a system
> physical address to device address.
> 
> The approach that this patch series takes is to maps the system physical
> address to device address for buffers (including rings, device specifc
> request and response  pointed by vring descriptor, and any further memory 
> reference by those request and response).
> 
> Patch 1 - 3:
>  Defines and implements new member functions to map a system physical address
>  to device address. The patch implements Laszlo's suggestion [1].
> 
> Patch 4 - 7:
>  Allocates the vring buffer using newly added member functions and provides
>  some helper functions.
> 
> Patch 8:
>  Update the virtio-blk driver to use newly added member functions to map the
>  addresses.
>  Verified using the following qemu cli
> 
>  # $QEMU \
>     -drive file=${IMAGE},if=none,id=disk0 \
>     -device virtio-blk-pci,drive=disk0
> 
>  # $QEMU \
>     -drive file=${IMAGE},if=none,id=disk0 \
>     -device virtio-blk-pci,drive=disk0,disable-legacy=on
> 
> Patch 9:
>  Update the virtio-scsi driver to use newly added member functions to map the
>  addresses.
>  Verified using the following qemu cli
> 
>  # $QEMU \
>     -drive file=${IMAGE},if=none,id=disk0 \
>     -device scsi-hd,drive=disk0
>     -device virtio-scsi-pci,id=scsi \
> 
>  # $QEMU \
>     -drive file=${IMAGE},if=none,id=disk0 \
>     -device scsi-hd,drive=disk0 \
>     -device virtio-scsi-pci,id=scsi,disable-legacy=on \
> 
> Patch 10 - 13:
>  Update the virtio-net driver to use newly added member functions to map the
>  addresses.
>  Verified using the following qemu cli
> 
>  # $QEMU \
>     -netdev type=tap,id=net0 \
>     -device virtio-net-pci,netdev=net0,romfile=
> 
>  # $QEMU \
>     -netdev type=tap,id=net0 \
>     -device virtio-net-pci,netdev=net0,disable-legacy=on,romfile=
> 
> Patch 14:
>  Update the virtio-rng driver to use newly added member functions to map the
>  addresses.
>  Verified using the following qemu cli
> 
>  # $QEMU \
>     -device virtio-rng-pci
> 
>  # $QEMU \
>     -device virtio-rng-pci,disable-legacy=on
> 
>  And succesfully ran RngTest.efi from SecurityPkg/Application
> 
> Repo: https://github.com/codomania/edk2
> Branch: virtio-support
> 
> Cc: Ard Biesheuvel <ard.biesheu...@linaro.org>
> Cc: Jordan Justen <jordan.l.jus...@intel.com>
> Cc: Tom Lendacky <thomas.lenda...@amd.com>
> Cc: Laszlo Ersek <ler...@redhat.com>
> 
> Brijesh Singh (14):
>   OvmfPkg/Virtio: Introduce new member functions in
>     VIRTIO_DEVICE_PROTOCOL
>   OvmfPkg/Virtio10Dxe: Implement new member functions
>   OvmfPkg/VirtioPciDeviceDxe: Implement new member functions
>   OvmfPkg/VirtioLib: Add SharedBuffer helper functions
>   OvmfPkg/VirtioLib: Pass VirtIo instance in VringInit/Uinit()
>   OvmfPkg/VirtioLib: Add functions to map/unmap VRING
>   OvmfPkg/VirtioLib: Use AllocateShared() to allocate vring buffer
>   OvmfPkg/VirtioBlkDxe: Use DeviceAddresses in vring descriptors
>   OvmfPkg/VirtioScsiDxe: Use DeviceAddresses in vring descriptors
>   OvmfPkg/VirtioNetDxe: Allocate Tx and Rx ring using
>     AllocateSharedPage()
>   OvmfPkg/VirtioNetDxe: Allocate RxBuf using AllocateSharedPages()
>   OvmfPkg/VirtioNetDxe: Dynamically allocate transmit header
>   OvmfPkg/VirtioNetDxe: Use DeviceAddress in transmit vring descriptors
>   OvmfPkg/VirtioRngDxe: Use DeviceAddresses in vring descriptors
> 
>  OvmfPkg/Include/Library/VirtioLib.h             | 198 ++++++++++++-
>  OvmfPkg/Include/Protocol/VirtioDevice.h         | 121 ++++++++
>  OvmfPkg/VirtioBlkDxe/VirtioBlk.h                |   1 +
>  OvmfPkg/VirtioNetDxe/VirtioNet.h                |  25 +-
>  OvmfPkg/VirtioPciDeviceDxe/VirtioPciDevice.h    |  34 +++
>  OvmfPkg/VirtioRngDxe/VirtioRng.h                |   1 +
>  OvmfPkg/VirtioScsiDxe/VirtioScsi.h              |   1 +
>  OvmfPkg/Library/VirtioLib/VirtioLib.c           | 296 +++++++++++++++++++-
>  OvmfPkg/Virtio10Dxe/Virtio10.c                  | 114 +++++++-
>  OvmfPkg/VirtioBlkDxe/VirtioBlk.c                | 104 ++++++-
>  OvmfPkg/VirtioGpuDxe/Commands.c                 |   7 +-
>  OvmfPkg/VirtioNetDxe/Events.c                   |  24 ++
>  OvmfPkg/VirtioNetDxe/SnpGetStatus.c             |  19 +-
>  OvmfPkg/VirtioNetDxe/SnpInitialize.c            | 102 +++++--
>  OvmfPkg/VirtioNetDxe/SnpSharedHelpers.c         | 119 +++++++-
>  OvmfPkg/VirtioNetDxe/SnpShutdown.c              |  16 +-
>  OvmfPkg/VirtioNetDxe/SnpTransmit.c              |  22 +-
>  OvmfPkg/VirtioPciDeviceDxe/VirtioPciDevice.c    |   7 +-
>  OvmfPkg/VirtioPciDeviceDxe/VirtioPciFunctions.c |  66 +++++
>  OvmfPkg/VirtioRngDxe/VirtioRng.c                |  54 +++-
>  OvmfPkg/VirtioScsiDxe/VirtioScsi.c              | 121 +++++++-
>  21 files changed, 1378 insertions(+), 74 deletions(-)
> 

The conversion for VirtioGpuDxe seems to be missing; is it on your todo
list? (Not that it's urgent at all; in fact I'll suggest delaying the
more complex drivers in a minute.)

Thanks,
Laszlo
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to