audk/OvmfPkg/VirtioNetDxe
Brijesh Singh 891f016c1b OvmfPkg/VirtioNetDxe: dynamically alloc transmit header
Each network packet is submitted for transmission by pushing the head
descriptor of a two-part descriptor chain to the Available Ring of the
TX queue. VirtioNetInitTx() sets up the the descriptor chains for all
queueable packets in advance, and points all the head descriptors to the
same shared, never modified, VIRTIO_1_0_NET_REQ header object (or its
initial VIRTIO_NET_REQ sub-object, dependent on virtio version).
VirtioNetInitTx() currently uses the header object's system physical
address for populating the head descriptors.

When device is behind the IOMMU, VirtioNet driver is required to provide
the device address of VIRTIO_1_0_NET_REQ header. In this patch we
dynamically allocate the header using AllocateSharedPages() and map with
BusMasterCommonBuffer so that header can be accessed by both processor
and the device.

We map the header object for CommonBuffer operation because, in order to
stick with the current code order, we populate the head descriptors with
the header's device address first, and fill in the header itself second.

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>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Brijesh Singh <brijesh.singh@amd.com>
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
Regression-tested-by: Laszlo Ersek <lersek@redhat.com>
Tested-by: Laszlo Ersek <lersek@redhat.com>
2017-09-14 23:54:10 +02:00
..
ComponentName.c OvmfPkg: Make the VirtIo devices use the new VIRTIO_DEVICE_PROTOCOL 2013-12-11 16:58:22 +00:00
DriverBinding.c OvmfPkg: VIRTIO_DEVICE_PROTOCOL: widen the Features bitmap to 64 bits 2016-04-06 13:04:03 +02:00
EntryPoint.c OvmfPkg: VirtioNetDxe: add entry point 2013-06-14 07:39:40 +00:00
Events.c OvmfPkg: Make the VirtIo devices use the new VIRTIO_DEVICE_PROTOCOL 2013-12-11 16:58:22 +00:00
SnpGetStatus.c OvmfPkg: Fix VS2005 build warnings 2014-09-25 02:29:10 +00:00
SnpInitialize.c OvmfPkg/VirtioNetDxe: dynamically alloc transmit header 2017-09-14 23:54:10 +02:00
SnpMcastIpToMac.c OvmfPkg: VirtioNetDxe: map multicast IP to MAC: SNP.McastIpToMac 2013-06-14 07:40:30 +00:00
SnpReceive.c OvmfPkg/VirtioNetDxe: alloc RxBuf using AllocateSharedPages() 2017-09-14 23:54:07 +02:00
SnpReceiveFilters.c OvmfPkg: VirtioNetDxe: emulate Rx filter configuration: SNP.ReceiveFilters 2013-06-14 07:40:36 +00:00
SnpSharedHelpers.c OvmfPkg/VirtioNetDxe: dynamically alloc transmit header 2017-09-14 23:54:10 +02:00
SnpShutdown.c OvmfPkg/VirtioNetDxe: map VRINGs using VirtioRingMap() 2017-09-14 23:54:05 +02:00
SnpStart.c OvmfPkg: VirtioNetDxe: Simple Network Protocol members Start and Stop 2013-06-14 07:39:58 +00:00
SnpStop.c OvmfPkg: VirtioNetDxe: Simple Network Protocol members Start and Stop 2013-06-14 07:39:58 +00:00
SnpTransmit.c OvmfPkg: Make the VirtIo devices use the new VIRTIO_DEVICE_PROTOCOL 2013-12-11 16:58:22 +00:00
SnpUnsupported.c OvmfPkg: VirtioNetDxe: definitions of unsupported SNP member functions 2013-06-14 07:40:42 +00:00
TechNotes.txt OvmfPkg/VirtioNetDxe: alloc RxBuf using AllocateSharedPages() 2017-09-14 23:54:07 +02:00
VirtioNet.h OvmfPkg/VirtioNetDxe: dynamically alloc transmit header 2017-09-14 23:54:10 +02:00
VirtioNet.inf OvmfPkg: Make the VirtIo devices use the new VIRTIO_DEVICE_PROTOCOL 2013-12-11 16:58:22 +00:00