From: Brijesh Singh <brijesh.singh@amd.com>
To: edk2-devel@lists.01.org
Cc: Brijesh Singh <brijesh.singh@amd.com>,
Ard Biesheuvel <ard.biesheuvel@linaro.org>,
Jordan Justen <jordan.l.justen@intel.com>,
Tom Lendacky <thomas.lendacky@amd.com>,
Laszlo Ersek <lersek@redhat.com>
Subject: [PATCH v1 00/14] OvmfPkg/Virtio: Add APIs to map system physical to device address
Date: Mon, 7 Aug 2017 07:58:45 -0400 [thread overview]
Message-ID: <1502107139-412-1-git-send-email-brijesh.singh@amd.com> (raw)
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.biesheuvel@linaro.org>
Cc: Jordan Justen <jordan.l.justen@intel.com>
Cc: Tom Lendacky <thomas.lendacky@amd.com>
Cc: Laszlo Ersek <lersek@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(-)
--
2.7.4
next reply other threads:[~2017-08-07 11:57 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-08-07 11:58 Brijesh Singh [this message]
2017-08-07 11:58 ` [PATCH v1 01/14] OvmfPkg/Virtio: Introduce new member functions in VIRTIO_DEVICE_PROTOCOL Brijesh Singh
2017-08-09 14:27 ` Laszlo Ersek
2017-08-09 18:23 ` Brijesh Singh
2017-08-07 11:58 ` [PATCH v1 02/14] OvmfPkg/Virtio10Dxe: Implement new member functions Brijesh Singh
2017-08-09 16:50 ` Laszlo Ersek
2017-08-07 11:58 ` [PATCH v1 03/14] OvmfPkg/VirtioPciDeviceDxe: " Brijesh Singh
2017-08-09 17:09 ` Laszlo Ersek
2017-08-10 18:41 ` Brijesh Singh
2017-08-10 19:47 ` Laszlo Ersek
2017-08-07 11:58 ` [PATCH v1 04/14] OvmfPkg/VirtioLib: Add SharedBuffer helper functions Brijesh Singh
2017-08-09 20:30 ` Laszlo Ersek
2017-08-07 11:58 ` [PATCH v1 05/14] OvmfPkg/VirtioLib: Pass VirtIo instance in VringInit/Uinit() Brijesh Singh
2017-08-09 21:13 ` Laszlo Ersek
2017-08-07 11:58 ` [PATCH v1 06/14] OvmfPkg/VirtioLib: Add functions to map/unmap VRING Brijesh Singh
2017-08-09 23:51 ` Laszlo Ersek
2017-08-07 11:58 ` [PATCH v1 07/14] OvmfPkg/VirtioLib: Use AllocateShared() to allocate vring buffer Brijesh Singh
2017-08-10 0:02 ` Laszlo Ersek
2017-08-07 11:58 ` [PATCH v1 08/14] OvmfPkg/VirtioBlkDxe: Use DeviceAddresses in vring descriptors Brijesh Singh
2017-08-07 11:58 ` [PATCH v1 09/14] OvmfPkg/VirtioScsiDxe: " Brijesh Singh
2017-08-07 11:58 ` [PATCH v1 10/14] OvmfPkg/VirtioNetDxe: Allocate Tx and Rx ring using AllocateSharedPage() Brijesh Singh
2017-08-07 11:58 ` [PATCH v1 11/14] OvmfPkg/VirtioNetDxe: Allocate RxBuf using AllocateSharedPages() Brijesh Singh
2017-08-07 11:58 ` [PATCH v1 12/14] OvmfPkg/VirtioNetDxe: Dynamically allocate transmit header Brijesh Singh
2017-08-07 11:58 ` [PATCH v1 13/14] OvmfPkg/VirtioNetDxe: Use DeviceAddress in transmit vring descriptors Brijesh Singh
2017-08-07 11:58 ` [PATCH v1 14/14] OvmfPkg/VirtioRngDxe: Use DeviceAddresses in " Brijesh Singh
2017-08-10 0:25 ` Laszlo Ersek
2017-08-10 0:46 ` Laszlo Ersek
2017-08-09 14:39 ` [PATCH v1 00/14] OvmfPkg/Virtio: Add APIs to map system physical to device address Laszlo Ersek
2017-08-09 17:35 ` Brijesh Singh
2017-08-09 17:56 ` Laszlo Ersek
2017-08-09 19:29 ` Laszlo Ersek
2017-08-11 22:22 ` Brijesh Singh
2017-08-15 10:42 ` Laszlo Ersek
2017-08-15 19:32 ` Brijesh Singh
2017-08-15 19:48 ` Laszlo Ersek
2017-08-15 20:26 ` Brijesh Singh
2017-08-15 20:39 ` Laszlo Ersek
2017-08-15 20:44 ` Brijesh Singh
2017-08-15 21:57 ` Laszlo Ersek
2017-08-09 22:38 ` Laszlo Ersek
2017-08-09 22:44 ` Brijesh Singh
2017-08-10 9:53 ` Laszlo Ersek
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1502107139-412-1-git-send-email-brijesh.singh@amd.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox