OvmfPkg/VirtioNetDxe: update TechNotes

In next patches we will update Virtio transmit to use the device-mapped
address of the caller-supplied packet. The patch documents the new model.

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>
This commit is contained in:
Brijesh Singh 2017-09-14 16:22:44 -05:00 committed by Laszlo Ersek
parent 891f016c1b
commit 76ad23ca82
1 changed files with 13 additions and 7 deletions

View File

@ -312,10 +312,14 @@ in the following:
that is shared by all of the head descriptors. This virtio-net request header
is never modified by the host.
- Each tail descriptor is re-pointed to the caller-supplied packet buffer
whenever VirtioNetTransmit places the corresponding head descriptor on the
Available Ring. The caller is responsible to hang on to the unmodified buffer
until it is reported transmitted by VirtioNetGetStatus.
- Each tail descriptor is re-pointed to the device-mapped address of the
caller-supplied packet buffer whenever VirtioNetTransmit places the
corresponding head descriptor on the Available Ring. A reverse mapping, from
the device-mapped address to the caller-supplied packet address, is saved in
an associative data structure that belongs to the driver instance.
- Per spec, the caller is responsible to hang on to the unmodified packet
buffer until it is reported transmitted by VirtioNetGetStatus.
Steps of packet transmission:
@ -338,9 +342,11 @@ Steps of packet transmission:
- Client code calls VirtioNetGetStatus. In case the Used Ring is empty, the
function reports no Tx completion. Otherwise, a head descriptor's index is
consumed from the Used Ring and recycled to the private stack. The client
code's original packet buffer address is fetched from the tail descriptor
(where it has been stored at VirtioNetTransmit time) and returned to the
caller.
code's original packet buffer address is calculated by fetching the
device-mapped address from the tail descriptor (where it has been stored at
VirtioNetTransmit time), and by looking up the device-mapped address in the
associative data structure. The reverse-mapped packet buffer address is
returned to the caller.
- The Len field of the Used Ring Element is not checked. The host is assumed to
have transmitted the entire packet -- VirtioNetTransmit had forced it below