diff options
author | Laszlo Ersek <lersek@redhat.com> | 2015-01-22 22:05:35 +0100 |
---|---|---|
committer | Gerd Hoffmann <kraxel@redhat.com> | 2015-07-07 09:51:05 +0200 |
commit | ca65a1ff7568ec44fe77117ea93615f786ce8d87 (patch) | |
tree | 9732c8c38613424f1d06a7916dcff1b2549b6833 /src/config/general.h | |
parent | 24112d91a0ab4c29794bc7750cbfc4166bc9026a (diff) | |
download | ipxe-ca65a1ff7568ec44fe77117ea93615f786ce8d87.tar.gz |
efi_snp: improve compliance with the EFI_SIMPLE_NETWORK_PROTOCOL spec
The efi_snp interface dates back to 2008, when the GetStatus() interface
must have been seriously under-specified. The UEFI Specification (2.4)
specifies EFI_SIMPLE_NETWORK_PROTOCOL in detail however. In short:
- the Transmit() interface is assumed to link (not copy) the SNP client's
buffer and return at once (without blocking), taking ownership of the
buffer temporarily;
- the GetStatus() interface releases one of the completed (transmitted or
internally copied) buffers back to the caller. If there are several
completed buffers, it is unspecified which one is returned.
The EFI build of the grub boot loader actually verifies the buffer address
returned by GetStatus(), therefore in efi_snp we must at least fake the
queueing of client buffers. This patch doesn't track client buffers
together with the internally queued io_buffer structures, we consider a
client buffer recyclable as soon as we make a deep copy of it and queue
the copy internally.
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Diffstat (limited to 'src/config/general.h')
0 files changed, 0 insertions, 0 deletions