iPXE - Open Source Boot Firmware

vendor/jentu/ipxe.git
2 years agoAdding Jentu modifications to the src folder master
Andrew Murdoch [Mon, 27 Jun 2016 17:09:28 +0000 (13:09 -0400)] 
Adding Jentu modifications to the src folder

2 years ago[efi] Include VLAN in SNP device path if applicable
Michael Brown [Sat, 18 Jun 2016 17:45:18 +0000 (18:45 +0100)] 
[efi] Include VLAN in SNP device path if applicable

Signed-off-by: Michael Brown <mcb30@ipxe.org>

2 years ago[intel] Add PCI device ID for another I219-LM
Christian Nilsson [Thu, 16 Jun 2016 10:41:40 +0000 (11:41 +0100)] 
[intel] Add PCI device ID for another I219-LM

Tested-by: Kuniyasu Suzaki <k.suzaki@aist.go.jp>
Signed-off-by: Michael Brown <mcb30@ipxe.org>

2 years ago[thunderx] Fix channel configuration for VNICs 1-7
Michael Brown [Wed, 15 Jun 2016 19:29:38 +0000 (20:29 +0100)] 
[thunderx] Fix channel configuration for VNICs 1-7

Signed-off-by: Michael Brown <mcb30@ipxe.org>

2 years ago[thunderx] Add driver for Cavium ThunderX SoC NICs
Michael Brown [Mon, 13 Jun 2016 17:41:26 +0000 (18:41 +0100)] 
[thunderx] Add driver for Cavium ThunderX SoC NICs

Signed-off-by: Michael Brown <mcb30@ipxe.org>

2 years ago[cmdline] Add "ntp" command
Michael Brown [Mon, 13 Jun 2016 14:57:16 +0000 (15:57 +0100)] 
[cmdline] Add "ntp" command

Signed-off-by: Michael Brown <mcb30@ipxe.org>

2 years ago[ntp] Add simple NTP client
Michael Brown [Mon, 13 Jun 2016 14:55:49 +0000 (15:55 +0100)] 
[ntp] Add simple NTP client

Signed-off-by: Michael Brown <mcb30@ipxe.org>

2 years ago[time] Allow system clock to be adjusted at runtime
Michael Brown [Mon, 13 Jun 2016 14:29:05 +0000 (15:29 +0100)] 
[time] Allow system clock to be adjusted at runtime

Provide a mechanism to allow an arbitrary adjustment to be applied to
all subsequent calls to time().

Note that the underlying clock source (e.g. the RTC clock) will not be
changed; only the time as reported within iPXE will be affected.

Signed-off-by: Michael Brown <mcb30@ipxe.org>

2 years ago[tg3] Add missing memory barrier
Leendert van Doorn [Mon, 13 Jun 2016 13:14:42 +0000 (08:14 -0500)] 
[tg3] Add missing memory barrier

ARM64 has a weaker memory order model than x86.  The missing memory
barrier caused phy initialization notification to be delayed beyond
the link-wait timeout (15 secs).

Signed-off-by: Leendert van Doorn <leendert@paramecium.org>
Signed-off-by: Michael Brown <mcb30@ipxe.org>

2 years ago[tcp] Send TCP keepalives on idle established connections
Michael Brown [Fri, 10 Jun 2016 16:27:06 +0000 (17:27 +0100)] 
[tcp] Send TCP keepalives on idle established connections

In some circumstances, intermediate devices may lose state in a way
that temporarily prevents the successful delivery of packets from a
TCP peer.  For example, a firewall may drop a NAT forwarding table
entry.

Since iPXE spends most of its time downloading files (and hence purely
receiving data, sending only TCP ACKs), this can easily happen in a
situation in which there is no reason for iPXE's TCP stack to generate
any retransmissions.  The temporary loss of connectivity can therefore
effectively become permanent.

Work around this problem by sending TCP keepalives after a period of
inactivity on an established connection.

TCP keepalives usually send a single garbage byte in sequence number
space that has already been ACKed by the peer.  Since we do not need
to elicit a response from the peer, we instead send pure ACKs (with no
garbage data) in order to keep the transmit code path simple.

Originally-implemented-by: Ladi Prosek <lprosek@redhat.com>
Debugged-by: Ladi Prosek <lprosek@redhat.com>
Signed-off-by: Michael Brown <mcb30@ipxe.org>

2 years ago[tg3] Fix address truncation bug on 64-bit machines
Leendert van Doorn [Fri, 10 Jun 2016 13:54:25 +0000 (08:54 -0500)] 
[tg3] Fix address truncation bug on 64-bit machines

Signed-off-by: Leendert van Doorn <leendert@paramecium.org>
Signed-off-by: Michael Brown <mcb30@ipxe.org>

2 years ago[http] Accept headers with no whitespace following the colon
Michael Brown [Thu, 9 Jun 2016 11:20:35 +0000 (12:20 +0100)] 
[http] Accept headers with no whitespace following the colon

Reported-by: Raphael Cohn <raphael.cohn@stormmq.com>
Signed-off-by: Michael Brown <mcb30@ipxe.org>

2 years ago[pci] Support systems with multiple PCI root bridges
Michael Brown [Thu, 9 Jun 2016 08:36:28 +0000 (09:36 +0100)] 
[pci] Support systems with multiple PCI root bridges

Extend the 16-bit PCI bus:dev.fn address to a 32-bit seg:bus:dev.fn
address, assuming a segment value of zero in contexts where multiple
segments are unsupported by the underlying data structures (e.g. in
the iBFT or BOFM tables).

Signed-off-by: Michael Brown <mcb30@ipxe.org>

2 years ago[libc] Always use a non-zero seed for the (non-crypto) RNG
Michael Brown [Thu, 9 Jun 2016 07:39:25 +0000 (08:39 +0100)] 
[libc] Always use a non-zero seed for the (non-crypto) RNG

The non-cryptographic RNG implemented by random() has the property
that a seed value of zero will result in a generated sequence of
all-zero values.  This situation can arise if currticks() returns zero
at start of day.

Work around this problem by falling back to a fixed non-zero seed if
necessary.

This has no effect on the separate DRBG used by cryptographic code.

Signed-off-by: Michael Brown <mcb30@ipxe.org>

2 years ago[build] Remove nested "my" declaration
Vinson Lee [Fri, 3 Jun 2016 17:09:54 +0000 (18:09 +0100)] 
[build] Remove nested "my" declaration

Fix build error with perl >= 5.23.2:

  Can't redeclare "my" in "my" at ./util/parserom.pl line 160

Signed-off-by: Vinson Lee <vlee@freedesktop.org>
Reviewed-by: Robin Smidsrød <robin@smidsrod.no>
Signed-off-by: Michael Brown <mcb30@ipxe.org>

2 years ago[efi] Expose DHCP packets via the Apple NetBoot protocol
Michael Brown [Sun, 29 May 2016 12:04:26 +0000 (13:04 +0100)] 
[efi] Expose DHCP packets via the Apple NetBoot protocol

Mac OS X uses non-standard EFI protocols to obtain the DHCP packets
from the UEFI firmware.

Originally-implemented-by: Michael Kuron <m.kuron@gmx.de>
Signed-off-by: Michael Brown <mcb30@ipxe.org>

2 years ago[dhcp] Fix definitions for x86_64 and EFI BC client architectures
Michael Brown [Thu, 26 May 2016 12:58:37 +0000 (13:58 +0100)] 
[dhcp] Fix definitions for x86_64 and EFI BC client architectures

There has been a longstanding disagreement between RFC4578 and the
IANA "Processor Architecture Types" registry.  RFC4578 section 2.1
defines type 7 as "EFI BC" and type 9 as "EFI x86-64"; the IANA
registry quotes RFC4578 as its source but has these values erroneously
swapped.  The EDK2 codebase uses the IANA values.

As of March 2016, RFC4578 has been modified by an errata to match the
values as recorded in the IANA registry.

Fix our definitions to match the consensus values.

Signed-off-by: Michael Brown <mcb30@ipxe.org>

2 years ago[arm] Use correct DHCP client architecture values
Michael Brown [Thu, 26 May 2016 12:43:33 +0000 (13:43 +0100)] 
[arm] Use correct DHCP client architecture values

Signed-off-by: Michael Brown <mcb30@ipxe.org>

2 years ago[axge] Add driver for ASIX 10/100/1000 USB Ethernet NICs
Michael Brown [Mon, 23 May 2016 23:23:10 +0000 (00:23 +0100)] 
[axge] Add driver for ASIX 10/100/1000 USB Ethernet NICs

Add driver for the AX88178A (USB2) and AX88179 (USB3) 10/100/1000
Ethernet NICs.

Signed-off-by: Michael Brown <mcb30@ipxe.org>

2 years ago[efi] Work around broken UEFI keyboard drivers
Michael Brown [Wed, 25 May 2016 14:51:36 +0000 (15:51 +0100)] 
[efi] Work around broken UEFI keyboard drivers

Some UEFI keyboard drivers are blissfully unaware of the existence of
either Ctrl key, and will report "Ctrl-<key>" as just "<key>".  This
breaks substantial portions of the iPXE user interface.

Work around these broken UEFI drivers by allowing "ESC <key>" to be
used as a substitute for "Ctrl-<key>".

Tested-by: Dreamcat4 <dreamcat4@gmail.com>
Signed-off-by: Michael Brown <mcb30@ipxe.org>

2 years ago[http] Ignore unrecognised "Connection" header tokens
Michael Brown [Wed, 25 May 2016 14:27:50 +0000 (15:27 +0100)] 
[http] Ignore unrecognised "Connection" header tokens

Some HTTP/2 servers send the header "Connection: upgrade, close".  This
currently causes iPXE to fail due to the unrecognised "upgrade" token.

Fix by ignoring any unrecognised tokens in the "Connection" header.

Reported-by: Ján ONDREJ (SAL) <ondrejj@salstar.sk>
Signed-off-by: Michael Brown <mcb30@ipxe.org>

2 years ago[lotest] Add option to use broadcast packets for loopback testing
Michael Brown [Fri, 20 May 2016 19:57:18 +0000 (20:57 +0100)] 
[lotest] Add option to use broadcast packets for loopback testing

Signed-off-by: Michael Brown <mcb30@ipxe.org>

2 years ago[netdevice] Fix failure path in register_netdev()
Michael Brown [Fri, 20 May 2016 19:43:58 +0000 (20:43 +0100)] 
[netdevice] Fix failure path in register_netdev()

Signed-off-by: Michael Brown <mcb30@ipxe.org>

2 years ago[settings] Extend numerical setting tags to "unsigned long"
Michael Brown [Fri, 20 May 2016 12:05:39 +0000 (13:05 +0100)] 
[settings] Extend numerical setting tags to "unsigned long"

Signed-off-by: Michael Brown <mcb30@ipxe.org>

2 years ago[pci] Add support for PCI Enhanced Allocation
Michael Brown [Sat, 14 May 2016 17:34:08 +0000 (18:34 +0100)] 
[pci] Add support for PCI Enhanced Allocation

Some embedded devices have immovable BARs, which are described via a
PCI Enhanced Allocation capability.

Signed-off-by: Michael Brown <mcb30@ipxe.org>

2 years ago[undi] Work around broken HP EliteBook 745 G3 PXE ROM
Michael Brown [Fri, 13 May 2016 12:22:06 +0000 (13:22 +0100)] 
[undi] Work around broken HP EliteBook 745 G3 PXE ROM

Reported-by: Arturino Mazzei <mazzeia@hotmail.com>
Tested-by: Arturino Mazzei <mazzeia@hotmail.com>
Signed-off-by: Michael Brown <mcb30@ipxe.org>

2 years ago[ath9k] Fix buffer overrun for ar9287
Christian Hesse [Sat, 7 May 2016 19:20:37 +0000 (21:20 +0200)] 
[ath9k] Fix buffer overrun for ar9287

This backport is from linux kernel upstream commit 83d6f1f ("ath9k:
fix buffer overrun for ar9287").

Signed-off-by: Christian Hesse <mail@eworm.de>
Signed-off-by: Michael Brown <mcb30@ipxe.org>

2 years ago[arm] Use CNTVCT_EL0 as profiling timestamp
Michael Brown [Wed, 11 May 2016 20:44:23 +0000 (21:44 +0100)] 
[arm] Use CNTVCT_EL0 as profiling timestamp

The raw cycle counter at PMCCNTR_EL0 works in qemu but seems to always
read as zero on physical hardware (tested on Juno r1 and Cavium
ThunderX), even after ensuring that PMCR_EL0.E and PMCNTENSET_EL0.C
are both enabled.

Use CNTVCT_EL0 instead; this seems to count at a lower resolution
(tens of CPU cycles), but is usable for profiling.

Signed-off-by: Michael Brown <mcb30@ipxe.org>

2 years ago[efi] Guard against GetStatus() failing to return a NULL TX buffer
Michael Brown [Wed, 11 May 2016 21:02:26 +0000 (22:02 +0100)] 
[efi] Guard against GetStatus() failing to return a NULL TX buffer

The UEFI specification requires the EFI_SIMPLE_NETWORK_PROTOCOL
GetStatus() method to set TxBuf to NULL if there are no transmit
buffers to recycle.

Some implementations (observed with Lan9118Dxe in EDK2) fill in TxBuf
only when there is a transmit buffer to recycle, which leads to large
numbers of "spurious TX completion" errors.

Work around this problem by initialising TxBuf to NULL before calling
the GetStatus() method.

Signed-off-by: Michael Brown <mcb30@ipxe.org>

2 years ago[arm] Add optimised TCP/IP checksumming for 64-bit ARM
Michael Brown [Tue, 10 May 2016 16:13:05 +0000 (17:13 +0100)] 
[arm] Add optimised TCP/IP checksumming for 64-bit ARM

Signed-off-by: Michael Brown <mcb30@ipxe.org>

2 years ago[arm] Add optimised string functions for 64-bit ARM
Michael Brown [Mon, 9 May 2016 15:03:19 +0000 (16:03 +0100)] 
[arm] Add optimised string functions for 64-bit ARM

Signed-off-by: Michael Brown <mcb30@ipxe.org>

2 years ago[libc] Avoid implicit assumptions about potentially-optimised memcpy()
Michael Brown [Mon, 9 May 2016 15:01:06 +0000 (16:01 +0100)] 
[libc] Avoid implicit assumptions about potentially-optimised memcpy()

Do not assume that an architecture-specific optimised memcpy() will
have the same properties as generic_memcpy() in terms of handling
overlapping regions.

Signed-off-by: Michael Brown <mcb30@ipxe.org>

2 years ago[efi] Allow for building with older versions of elf.h system header
Michael Brown [Mon, 9 May 2016 15:16:43 +0000 (16:16 +0100)] 
[efi] Allow for building with older versions of elf.h system header

Reported-by: Ahmad Mahagna <ahmhad@mellanox.com>
Signed-off-by: Michael Brown <mcb30@ipxe.org>

2 years ago[arm] Add support for 64-bit ARM (Aarch64)
Michael Brown [Sat, 7 May 2016 23:20:20 +0000 (00:20 +0100)] 
[arm] Add support for 64-bit ARM (Aarch64)

Signed-off-by: Michael Brown <mcb30@ipxe.org>

2 years ago[arm] Split out 32-bit-specific code to arch/arm32
Michael Brown [Sat, 7 May 2016 23:18:35 +0000 (00:18 +0100)] 
[arm] Split out 32-bit-specific code to arch/arm32

Signed-off-by: Michael Brown <mcb30@ipxe.org>

2 years ago[arm] Avoid instruction references to symbols defined via ".equ"
Michael Brown [Sat, 7 May 2016 22:55:28 +0000 (23:55 +0100)] 
[arm] Avoid instruction references to symbols defined via ".equ"

When building for 64-bit ARM, some symbol references may be resolved
via an "adrp" instruction (to obtain the start of the 4kB page
containing the symbol) and a separate 12-bit offset.  For example
(taken from the GNU assembler documentation):

  adrp x0, foo
  ldr  x0, [x0, #:lo12:foo]

We occasionally refer to symbols defined via mechanisms that are not
directly visible to gcc.  For example:

  extern char some_magic_symbol[];
  __asm__ ( ".equ some_magic_symbol, some_magic_expression" );

The subsequent use of the ":lo12:" prefix on such magically-defined
symbols triggers an assertion failure in the assembler.

This problem seems to affect only "private_key_len" in the current
codebase.  Fix by storing this value as static data; this avoids the
need to provide the value as a literal within the instruction stream,
and so avoids the problematic use of the ":lo12:" prefix.

Signed-off-by: Michael Brown <mcb30@ipxe.org>

2 years ago[arm] Add support for 32-bit ARM
Michael Brown [Mon, 19 Oct 2015 19:01:19 +0000 (20:01 +0100)] 
[arm] Add support for 32-bit ARM

Signed-off-by: Michael Brown <mcb30@ipxe.org>

2 years ago[bitops] Fix typo in test case
Michael Brown [Thu, 5 May 2016 13:46:40 +0000 (14:46 +0100)] 
[bitops] Fix typo in test case

Signed-off-by: Michael Brown <mcb30@ipxe.org>

2 years ago[libgcc] Provide __divmoddi4()
Michael Brown [Wed, 4 May 2016 18:13:31 +0000 (19:13 +0100)] 
[libgcc] Provide __divmoddi4()

Signed-off-by: Michael Brown <mcb30@ipxe.org>

2 years ago[legacy] Fix building with GCC 6
Michael Brown [Wed, 4 May 2016 14:58:14 +0000 (15:58 +0100)] 
[legacy] Fix building with GCC 6

Signed-off-by: Michael Brown <mcb30@ipxe.org>

2 years ago[ath] Fix building with GCC 6
Michael Brown [Wed, 4 May 2016 14:57:44 +0000 (15:57 +0100)] 
[ath] Fix building with GCC 6

Signed-off-by: Michael Brown <mcb30@ipxe.org>

2 years ago[golan] Fix building with GCC 6
Michael Brown [Wed, 4 May 2016 14:57:14 +0000 (15:57 +0100)] 
[golan] Fix building with GCC 6

Signed-off-by: Michael Brown <mcb30@ipxe.org>

2 years ago[skge] Fix building with GCC 6
Michael Brown [Wed, 4 May 2016 14:54:10 +0000 (15:54 +0100)] 
[skge] Fix building with GCC 6

Signed-off-by: Michael Brown <mcb30@ipxe.org>

2 years ago[sis190] Fix building with GCC 6
Michael Brown [Wed, 4 May 2016 14:53:52 +0000 (15:53 +0100)] 
[sis190] Fix building with GCC 6

Signed-off-by: Michael Brown <mcb30@ipxe.org>

2 years ago[mucurses] Fix GCC 6 nonnull-compare errors
Vinson Lee [Fri, 15 Apr 2016 22:38:35 +0000 (22:38 +0000)] 
[mucurses] Fix GCC 6 nonnull-compare errors

Remove null checks for arguments declared as nonnull.

Signed-off-by: Vinson Lee <vlee@freedesktop.org>
Signed-off-by: Michael Brown <mcb30@ipxe.org>

2 years ago[efi] Generalise EFI entropy generation to non-x86 CPUs
Michael Brown [Wed, 4 May 2016 13:13:44 +0000 (14:13 +0100)] 
[efi] Generalise EFI entropy generation to non-x86 CPUs

Signed-off-by: Michael Brown <mcb30@ipxe.org>

2 years ago[efi] Use a timer event to generate the currticks() timer
Michael Brown [Wed, 4 May 2016 12:04:33 +0000 (13:04 +0100)] 
[efi] Use a timer event to generate the currticks() timer

We currently use the EFI_CPU_ARCH_PROTOCOL's GetTimerValue() method to
generate the currticks() timer, calibrated against a 1ms delay from
the boot services Stall() method.

This does not work on ARM platforms, where GetTimerValue() is an empty
stub which just returns EFI_UNSUPPORTED.

Fix by instead creating a periodic timer event, and using this event
to increment a current tick counter.

Signed-off-by: Michael Brown <mcb30@ipxe.org>

2 years ago[tcpip] Do not fall back to using unoptimised TCP/IP checksumming
Michael Brown [Wed, 4 May 2016 12:30:37 +0000 (13:30 +0100)] 
[tcpip] Do not fall back to using unoptimised TCP/IP checksumming

Require architecture-specific code to make a deliberate choice to use
the unoptimised generic_tcpip_continue_chksum() function, if there is
no optimised version available.

Signed-off-by: Michael Brown <mcb30@ipxe.org>

2 years ago[build] Remove unnecessary dependency on zlib
Michael Brown [Mon, 2 May 2016 22:09:49 +0000 (23:09 +0100)] 
[build] Remove unnecessary dependency on zlib

The dependency on zlib seems to have been introduced in commit 3dd7ce1
("[efi] Allow building with non-system libbfd") as an indirect
requirement of either libbfd or libiberty when building on Mac OS X.
Since we no longer use either of these libraries, remove the
unnecessary link against zlib.

Signed-off-by: Michael Brown <mcb30@ipxe.org>

2 years ago[efi] Eliminate use of libbfd
Michael Brown [Mon, 2 May 2016 19:36:54 +0000 (20:36 +0100)] 
[efi] Eliminate use of libbfd

Parse the intermediate ELF file directly instead of using libbfd, in
order to allow for cross-compiled ELF objects.

As a side bonus, this eliminates libbfd as a build requirement.

Signed-off-by: Michael Brown <mcb30@ipxe.org>

2 years ago[librm] Preserve FPU, MMX and SSE state across calls to virt_call()
Michael Brown [Wed, 27 Apr 2016 10:03:18 +0000 (11:03 +0100)] 
[librm] Preserve FPU, MMX and SSE state across calls to virt_call()

The IBM Tivoli Provisioning Manager for OS Deployment (also known as
TPMfOSD, Rembo-ia32, or Rembo Auto-Deploy) has a serious bug in some
older versions (observed with v5.1.1.0, apparently fixed by v7.1.1.0)
which can lead to arbitrary data corruption.

As mentioned in commit 87723a0 ("[libflat] Test A20 gate without
switching to flat real mode"), Tivoli's NBP sets up a VMM and makes
calls to the PXE stack in VM86 mode.  This appears to be some kind of
attempt to run PXE API calls inside a sandbox.  The VMM is fairly
sophisticated: for example, it handles our attempts to switch into
protected mode and patches our GDT so that our protected-mode code
runs in ring 1 instead of ring 0.  However, it neglects to apply any
memory protections.  In particular, it does not enable paging and
leaves us with 4GB segment limits.  We can therefore trivially break
out of the sandbox by simply overwriting the GDT (or by modifying any
of Tivoli's VMM code or data structures).

When we attempt to execute privileged instructions (such as "lidt"),
the CPU raises an exception and control is passed to the Tivoli VMM.
This may result in a call to Tivoli's memcpy() function.

Tivoli's memcpy() function includes optimisations which use the SSE
registers %xmm0-%xmm3 to speed up aligned memory copies.

Unfortunately, the Tivoli VMM's exception handler does not save or
restore %xmm0-%xmm3.  The net effect of this bug in the Tivoli VMM is
that any privileged instruction (such as "lidt") issued by iPXE may
result in unexpected corruption of the %xmm0-%xmm3 registers.

Even more unfortunately, this problem affects the code path taken in
response to a hardware interrupt from the NIC, since that code path
will call PXENV_UNDI_ISR.  The net effect therefore becomes that any
NIC hardware interrupt (e.g. due to a received packet) may result in
unexpected corruption of the %xmm0-%xmm3 registers.

If a packet arrives while Tivoli is in the middle of using its
memcpy() function, then the unexpected corruption of the %xmm0-%xmm3
registers will result in unexpected corruption in the destination
buffer.  The net effect therefore becomes that any received packet may
result in a 16-byte block of corruption somewhere in any data that
Tivoli copied using its memcpy() function.

We can work around this bug in the Tivoli VMM by saving and restoring
the %xmm0-%xmm3 registers across calls to virt_call().  To work around
the problem, we need to save registers before attempting to execute
any privileged instructions, and ensure that we attempt no further
privileged instructions after restoring the registers.

This is less simple than it may sound.  We can use the "movups"
instruction to save and restore individual registers, but this will
itself generate an undefined opcode exception if SSE is not currently
enabled according to the flags in %cr0 and %cr4.  We can't access %cr0
or %cr4 before attempting the "movups" instruction, because access a
control register is itself a privileged instruction (which may
therefore trigger corruption of the registers that we're trying to
save).

The best solution seems to be to use the "fxsave" and "fxrstor"
instructions.  If SSE is not enabled, then these instructions may fail
to save and restore the SSE register contents, but will not generate
an undefined opcode exception.  (If SSE is not enabled, then we don't
really care about preserving the SSE register contents anyway.)

The use of "fxsave" and "fxrstor" introduces an implicit assumption
that the CPU supports SSE instructions (even though we make no
assumption about whether or not SSE is currently enabled).  SSE was
introduced in 1999 with the Pentium III (and added by AMD in 2001),
and is an architectural requirement for x86_64.  Experimentation with
current versions of gcc suggest that it may generate SSE instructions
even when using "-m32", unless an explicit "-march=i386" or "-mno-sse"
is used to inhibit this.  It therefore seems reasonable to assume that
SSE will be supported on any hardware that might realistically be used
with new iPXE builds.

As a side benefit of this change, the MMX register %mm0 will now be
preserved across virt_call() even in an i386 build of iPXE using a
driver that requires readq()/writeq(), and the SSE registers
%xmm0-%xmm5 will now be preserved across virt_call() even in an x86_64
build of iPXE using the Hyper-V netvsc driver.

Experimentation suggests that this change adds around 10% to the
number of cycles required for a do-nothing virt_call(), most of which
are due to the extra bytes copied using "rep movsb".  Since the number
of bytes copied is a compile-time constant local to librm.S, we could
potentially reduce this impact by ensuring that we always copy a whole
number of dwords and so can use "rep movsl" instead of "rep movsb".

Signed-off-by: Michael Brown <mcb30@ipxe.org>

2 years ago[tg3] Fix _tg3_flag() for 64-bit builds
Michael Brown [Mon, 2 May 2016 12:20:26 +0000 (13:20 +0100)] 
[tg3] Fix _tg3_flag() for 64-bit builds

Commit 86f96a4 ("[tg3] Remove x86-specific inline assembly")
introduced a regression in _tg3_flag() in 64-bit builds, since any
flags in the upper 32 bits of a 64-bit unsigned long would be
discarded when truncating to a 32-bit int.

Debugged-by: Shane Thompson <shane.thompson@aeontech.com.au>
Tested-by: Shane Thompson <shane.thompson@aeontech.com.au>
Signed-off-by: Michael Brown <mcb30@ipxe.org>

2 years ago[librm] Reduce real-mode stack consumption in virt_call()
Michael Brown [Fri, 29 Apr 2016 10:33:13 +0000 (11:33 +0100)] 
[librm] Reduce real-mode stack consumption in virt_call()

Some PXE NBPs are known to make PXE API calls with very little space
available on the real-mode stack.  For example, the Rembo-ia32 NBP
from some versions of IBM's Tivoli Provisioning Manager for Operating
System Deployment (TPMfOSD) will issue calls with the real-mode stack
placed at 0000:03d2; this is at the end of the interrupt vector table
and leaves only 498 bytes of stack space available before overwriting
the hardware IRQ vectors.  This limits the amount of state that we can
preserve before transitioning to protected mode.

Work around these challenging conditions by preserving everything
other than the initial register dump in a temporary static buffer
within our real-mode data segment, and copying the contents of this
buffer to the protected-mode stack.

Signed-off-by: Michael Brown <mcb30@ipxe.org>

2 years ago[image] Skip misleading "format not recognised" error message
Michael Brown [Thu, 28 Apr 2016 11:12:50 +0000 (12:12 +0100)] 
[image] Skip misleading "format not recognised" error message

Return success (rather than failure) after an image format has been
correctly identified.

This has no practical effect, since the return value from
image_probe() is deliberately never used, but avoids a somewhat
surprising and misleading "format not recognised" error message when
debugging is enabled.

Signed-off-by: Michael Brown <mcb30@ipxe.org>

3 years ago[libgcc] Provide symbol to handle gcc's implicit calls to memset()
Michael Brown [Wed, 20 Apr 2016 15:43:34 +0000 (16:43 +0100)] 
[libgcc] Provide symbol to handle gcc's implicit calls to memset()

On some architectures (such as ARM), gcc will insert implicit calls to
memset().  Handle these using the same mechanism as for the implicit
calls to memcpy() used by x86.

Signed-off-by: Michael Brown <mcb30@ipxe.org>

3 years ago[libc] Allow CPU architectures to use unoptimised string functions
Michael Brown [Tue, 19 Apr 2016 15:30:49 +0000 (16:30 +0100)] 
[libc] Allow CPU architectures to use unoptimised string functions

Signed-off-by: Michael Brown <mcb30@ipxe.org>

3 years ago[ethernet] Make LACP support configurable at build time
Michael Brown [Mon, 18 Apr 2016 09:08:46 +0000 (10:08 +0100)] 
[ethernet] Make LACP support configurable at build time

Add a build configuration option NET_PROTO_LACP to control whether or
not LACP support is included for Ethernet devices.

Signed-off-by: Michael Brown <mcb30@ipxe.org>

3 years ago[virtio] Add virtio-net 1.0 support
Ladi Prosek [Mon, 11 Apr 2016 09:26:59 +0000 (11:26 +0200)] 
[virtio] Add virtio-net 1.0 support

This commit makes virtio-net support devices with VEN 0x1af4 and DEV
0x1041, which is how non-transitional (modern-only) virtio-net devices
are exposed on the PCI bus.

Transitional devices supporting both the old 0.9.5 and new 1.0 version
of the virtio spec are driven using the new protocol.  Legacy devices
are driven using the old protocol, same as before this commit.

Signed-off-by: Ladi Prosek <lprosek@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael Brown <mcb30@ipxe.org>

3 years ago[virtio] Add virtio 1.0 PCI support
Ladi Prosek [Mon, 11 Apr 2016 09:26:58 +0000 (11:26 +0200)] 
[virtio] Add virtio 1.0 PCI support

This commit adds support for driving virtio 1.0 PCI devices.  In
addition to various helpers, a number of vpm_ functions are introduced
to be used instead of their legacy vp_ counterparts when accessing
virtio 1.0 (aka modern) devices.

Signed-off-by: Ladi Prosek <lprosek@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Modified-by: Michael Brown <mcb30@ipxe.org>
Signed-off-by: Michael Brown <mcb30@ipxe.org>

3 years ago[virtio] Add virtio 1.0 constants and data structures
Ladi Prosek [Mon, 11 Apr 2016 09:26:57 +0000 (11:26 +0200)] 
[virtio] Add virtio 1.0 constants and data structures

Virtio 1.0 introduces new constants and data structures, common to all
devices as well as specific to virtio-net.  This commit adds a subset
of these to be able to drive the virtio-net 1.0 network device.

Signed-off-by: Ladi Prosek <lprosek@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael Brown <mcb30@ipxe.org>

3 years ago[pci] Add pci_find_next_capability()
Ladi Prosek [Mon, 11 Apr 2016 09:26:56 +0000 (11:26 +0200)] 
[pci] Add pci_find_next_capability()

PCI devices may support more capabilities of the same type (for
example PCI_CAP_ID_VNDR) and there was no way to discover all of them.
This commit adds a new API pci_find_next_capability which provides
this functionality.  It would typically be used like so:

  for (pos = pci_find_capability(pci, PCI_CAP_ID_VNDR);
       pos > 0;
       pos = pci_find_next_capability(pci, pos, PCI_CAP_ID_VNDR)) {
    ...
  }

Signed-off-by: Ladi Prosek <lprosek@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael Brown <mcb30@ipxe.org>

3 years ago[comboot] Support COMBOOT in 64-bit builds
Michael Brown [Thu, 14 Apr 2016 15:48:41 +0000 (16:48 +0100)] 
[comboot] Support COMBOOT in 64-bit builds

Signed-off-by: Michael Brown <mcb30@ipxe.org>

3 years ago[pool] Fix check for reopenable pooled connections
Suresh Sundriyal [Tue, 12 Apr 2016 13:18:17 +0000 (14:18 +0100)] 
[pool] Fix check for reopenable pooled connections

Signed-off-by: Michael Brown <mcb30@ipxe.org>

3 years ago[golan] Add missing iounmap()
Wissam Shoukair [Thu, 24 Mar 2016 16:42:59 +0000 (18:42 +0200)] 
[golan] Add missing iounmap()

Signed-off-by: Wissam Shoukair <wissams@mellanox.com>
Signed-off-by: Michael Brown <mcb30@ipxe.org>

3 years ago[mlx_icmd] Fix compilation error in GCC versions newer than 4.6.4
Wissam Shoukair [Tue, 5 Apr 2016 10:39:08 +0000 (13:39 +0300)] 
[mlx_icmd] Fix compilation error in GCC versions newer than 4.6.4

Signed-off-by: Wissam Shoukair <wissams@mellanox.com>
Signed-off-by: Michael Brown <mcb30@ipxe.org>

3 years ago[efi] Work around broken EFI HII specification
Michael Brown [Tue, 12 Apr 2016 10:59:31 +0000 (11:59 +0100)] 
[efi] Work around broken EFI HII specification

The EFI_HII_CONFIG_ACCESS_PROTOCOL's ExtractConfig() method is passed
a request string which includes the parameters being queried plus an
apparently meaningless blob of information (the ConfigHdr), and is
expected to include this same meaningless blob of information in the
results string.

Neither the specification nor the existing EDK2 code (including the
nominal reference implementation in the DriverSampleDxe driver)
provide any reason for the existence of this meaningless blob of
information.  It appears to be consumed in its entirety by the
EFI_HII_CONFIG_ROUTING_PROTOCOL, and to contain zero bits of
information by the time it reaches an EFI_HII_CONFIG_ACCESS_PROTOCOL
instance.  It would potentially allow for multiple configuration data
sets to be handled by a single EFI_HII_CONFIG_ACCESS_PROTOCOL
instance, in a style alien to the rest of the UEFI specification
(which implicitly assumes that the instance pointer is always
sufficient to uniquely identify the instance).

iPXE currently handles this by simply copying the ConfigHdr from the
request string to the results string, and otherwise ignoring it.  This
approach is also used by some code in EDK2, such as OVMF's PlatformDxe
driver.

As of EDK2 commit 8a45f80 ("MdeModulePkg: Make HII configuration
settings available to OS runtime"), this causes an assertion failure
inside EDK2.  The failure arises when iPXE is handled a NULL request
string, and responds (as per the specification) with a results string
including all settings.  Since there is no meaningless blob to copy
from the request string, there is no corresponding meaningless blob in
the results string.  This now causes an assertion failure in
HiiDatabaseDxe's HiiConfigRoutingExportConfig().

The same failure does not affect the OVMF PlatformDxe driver, which
simply passes the request string to the HII BlockToConfig() utility
function.  The BlockToConfig() function returns EFI_INVALID_PARAMETER
when passed a null request string, and PlatformDxe propagates this
error directly to the caller.

Fix by matching the behaviour of OVMF's PlatformDxe driver: explicitly
return EFI_INVALID_PARAMETER if the request string is NULL or empty.
This violates the specification (insofar as it is feasible to
determine what the specification actually requires), but causes
correct behaviour with the EDK2 codebase.

Signed-off-by: Michael Brown <mcb30@ipxe.org>

3 years ago[libc] Print "<NULL>" for wide-character NULL strings
Michael Brown [Tue, 12 Apr 2016 10:51:05 +0000 (11:51 +0100)] 
[libc] Print "<NULL>" for wide-character NULL strings

The existing code intends to print NULL strings as "<NULL>" (for the
sake of debug messages), but the logic is incorrect when handling
wide-character strings.  Fix the logic and add applicable unit tests.

Signed-off-by: Michael Brown <mcb30@ipxe.org>

3 years ago[test] Update snprintf_ok() to use okx()
Michael Brown [Tue, 12 Apr 2016 10:45:58 +0000 (11:45 +0100)] 
[test] Update snprintf_ok() to use okx()

Signed-off-by: Michael Brown <mcb30@ipxe.org>

3 years ago[qib7322] Validate payload length
Michael Brown [Wed, 30 Mar 2016 06:31:51 +0000 (07:31 +0100)] 
[qib7322] Validate payload length

There is no way for the hardware to give us an invalid length in the
LRH, since it must have parsed this length field in order to perform
header splitting.  However, this is difficult to prove conclusively.

Add an unnecessary length check to explicitly reject any packets
larger than the posted receive I/O buffer.

Signed-off-by: Michael Brown <mcb30@ipxe.org>

3 years ago[linda] Validate payload length
Michael Brown [Wed, 30 Mar 2016 06:27:09 +0000 (07:27 +0100)] 
[linda] Validate payload length

There is no way for the hardware to give us an invalid length in the
LRH, since it must have parsed this length field in order to perform
header splitting.  However, this is difficult to prove conclusively.

Add an unnecessary length check to explicitly reject any packets
larger than the posted receive I/O buffer.

Signed-off-by: Michael Brown <mcb30@ipxe.org>

3 years ago[netdevice] Return ENOENT for an unknown bus type
Michael Brown [Tue, 29 Mar 2016 19:57:03 +0000 (20:57 +0100)] 
[netdevice] Return ENOENT for an unknown bus type

It is possible for the preloaded UNDI device to end up with no
specified bus type, since it may not be recognised as either a PCI or
an ISAPnP device.  This will result in a bus type value of zero, which
currently results in NULL being treated as a string pointer by
netdev_fetch_bustype().

Fix by returning ENOENT if an unknown bus type is specified.

Reported-by: Todd Stansell <todd@stansell.org>
Signed-off-by: Michael Brown <mcb30@ipxe.org>

3 years ago[intel] Add PCI device ID for another I219-V
Christian Nilsson [Tue, 29 Mar 2016 16:44:30 +0000 (18:44 +0200)] 
[intel] Add PCI device ID for another I219-V

Signed-off-by: Christian Nilsson <nikize@gmail.com>
Signed-off-by: Michael Brown <mcb30@ipxe.org>

3 years ago[iscsi] Include DHCP server address in iBFT
Michael Brown [Tue, 29 Mar 2016 18:38:18 +0000 (19:38 +0100)] 
[iscsi] Include DHCP server address in iBFT

Signed-off-by: Michael Brown <mcb30@ipxe.org>

3 years ago[crypto] Allow cross-certificate source to be configured at build time
Michael Brown [Thu, 24 Mar 2016 19:25:03 +0000 (19:25 +0000)] 
[crypto] Allow cross-certificate source to be configured at build time

Provide a build option CROSSCERT in config/crypto.h to allow the
default cross-signed certificate source to be configured at build
time.  The ${crosscert} setting may still be used to reconfigure the
cross-signed certificate source at runtime.

Signed-off-by: Michael Brown <mcb30@ipxe.org>

3 years ago[prefix] Use CRC32 to verify each block prior to decompression
Michael Brown [Wed, 23 Mar 2016 13:41:17 +0000 (13:41 +0000)] 
[prefix] Use CRC32 to verify each block prior to decompression

Signed-off-by: Michael Brown <mcb30@ipxe.org>

3 years ago[golan] Fix build error on some versions of gcc
Christian Hesse [Tue, 22 Mar 2016 20:26:06 +0000 (21:26 +0100)] 
[golan] Fix build error on some versions of gcc

Some versions of gcc complain that "'__bswap_variable_32' is static
but used in inline function 'golan_check_rc_and_cmd_status' which is
not static".

Fix by making golan_check_rc_and_cmd_status() a static inline.

Modified-by: Michael Brown <mcb30@ipxe.org>
Signed-off-by: Michael Brown <mcb30@ipxe.org>

3 years ago[golan] Add Connect-IB, ConnectX-4 and ConnectX-4 Lx (Infiniband) support
Wissam Shoukair [Mon, 21 Mar 2016 13:09:13 +0000 (15:09 +0200)] 
[golan] Add Connect-IB, ConnectX-4 and ConnectX-4 Lx (Infiniband) support

Signed-off-by: Wissam Shoukair <wissams@mellanox.com>
Signed-off-by: Michael Brown <mcb30@ipxe.org>

3 years ago[pxe] Implicitly open network device in PXENV_UDP_OPEN
Michael Brown [Tue, 22 Mar 2016 17:33:21 +0000 (17:33 +0000)] 
[pxe] Implicitly open network device in PXENV_UDP_OPEN

Some end-user configurations have been observed in which the first NBP
(such as GRUB2) uses the UNDI API and then transfers control to a
second NBP (such as pxelinux) which uses the UDP API.  The first NBP
closes the network device using PXENV_UNDI_CLOSE, which renders the
UDP API unable to transmit or receive packets.

The correct behaviour under these circumstances is (as often) simply
not documented by the PXE specification.  Testing with the Intel PXE
stack suggests that PXENV_UDP_OPEN will implicitly reopen the network
device if necessary, so match this behaviour.

Signed-off-by: Michael Brown <mcb30@ipxe.org>

3 years ago[libc] Make sleep() interruptible
Michael Brown [Tue, 22 Mar 2016 16:12:32 +0000 (16:12 +0000)] 
[libc] Make sleep() interruptible

Signed-off-by: Michael Brown <mcb30@ipxe.org>

3 years ago[arbel] Fix received packet length
Michael Brown [Tue, 22 Mar 2016 16:11:58 +0000 (16:11 +0000)] 
[arbel] Fix received packet length

Signed-off-by: Michael Brown <mcb30@ipxe.org>

3 years ago[hermon] Fix received packet length
Michael Brown [Tue, 22 Mar 2016 16:09:18 +0000 (16:09 +0000)] 
[hermon] Fix received packet length

Debugged-by: Wissam Shoukair <wissams@mellanox.com>
Signed-off-by: Michael Brown <mcb30@ipxe.org>

3 years ago[etherfabric] Avoid use of sleep() in driver code
Michael Brown [Tue, 22 Mar 2016 15:19:25 +0000 (15:19 +0000)] 
[etherfabric] Avoid use of sleep() in driver code

Signed-off-by: Michael Brown <mcb30@ipxe.org>

3 years ago[3c5x9] Avoid use of sleep() in driver code
Michael Brown [Tue, 22 Mar 2016 15:14:07 +0000 (15:14 +0000)] 
[3c5x9] Avoid use of sleep() in driver code

Signed-off-by: Michael Brown <mcb30@ipxe.org>

3 years ago[int13] Allow default drive to be specified via "san-drive" setting
Michael Brown [Tue, 22 Mar 2016 09:35:10 +0000 (09:35 +0000)] 
[int13] Allow default drive to be specified via "san-drive" setting

The DHCP option 175.189 has been defined (by us) since 2006 as
containing the drive number to be used for a SAN boot, but has never
been automatically used as such by iPXE.

Use this option (if specified) to override the default SAN drive
number.

Signed-off-by: Michael Brown <mcb30@ipxe.org>

3 years ago[int13] Allow drive to be hooked using the natural drive number
Michael Brown [Sun, 20 Mar 2016 09:16:13 +0000 (09:16 +0000)] 
[int13] Allow drive to be hooked using the natural drive number

Interpret the maximum drive number (0xff for hard disks, 0x7f for
floppy disks) as meaning "use natural drive number".

Signed-off-by: Michael Brown <mcb30@ipxe.org>

3 years ago[gdb] Add support for x86_64
Michael Brown [Sun, 20 Mar 2016 12:00:15 +0000 (12:00 +0000)] 
[gdb] Add support for x86_64

Signed-off-by: Michael Brown <mcb30@ipxe.org>

3 years ago[build] Do not use "objcopy -O binary" for objects with relocation records
Michael Brown [Mon, 21 Mar 2016 17:33:45 +0000 (17:33 +0000)] 
[build] Do not use "objcopy -O binary" for objects with relocation records

The mbr.bin and usbdisk.bin standalone blobs are currently generated
using "objcopy -O binary", which does not process relocation records.

For the i386 build, this does not matter since the section start
address is zero and so the ".rel" relocation records are effectively
no-ops anyway.

For the x86_64 build, the ".rela" relocation records are not no-ops,
since the addend is included as part of the relocation record (rather
than inline).  Using "objcopy -O binary" will silently discard the
relocation records, with the result that all symbols are effectively
given a value of zero.

Fix by using "ld --oformat binary" instead of "objcopy -O binary" to
generate mbr.bin and usbdisk.bin.

Signed-off-by: Michael Brown <mcb30@ipxe.org>

3 years ago[infiniband] Allow drivers to override the eIPoIB LEMAC
Michael Brown [Mon, 21 Mar 2016 09:29:54 +0000 (09:29 +0000)] 
[infiniband] Allow drivers to override the eIPoIB LEMAC

Signed-off-by: Michael Brown <mcb30@ipxe.org>

3 years ago[arbel] Allocate space for GRH on UD queue pairs
Michael Brown [Mon, 21 Mar 2016 08:55:02 +0000 (08:55 +0000)] 
[arbel] Allocate space for GRH on UD queue pairs

As with the previous commit (for Hermon), allocate a separate ring
buffer to hold received GRHs.

Signed-off-by: Michael Brown <mcb30@ipxe.org>

3 years ago[hermon] Allocate space for GRH on UD queue pairs
Michael Brown [Mon, 21 Mar 2016 08:18:15 +0000 (08:18 +0000)] 
[hermon] Allocate space for GRH on UD queue pairs

The Infiniband specification (volume 1, section 11.4.1.2 "Post Receive
Request") notes that for UD QPs, the GRH will be placed in the first
40 bytes of the receive buffer if present.  (If no GRH is present,
which is normal, then the first 40 bytes of the receive buffer will be
unused.)

Mellanox hardware performs this placement automatically: other headers
will be stripped (and their values returned via the CQE), but the
first 40 bytes of the data buffer will be consumed by the (probably
non-existent) GRH.

This does not fit neatly into iPXE's internal abstraction, which
expects the data buffer to represent just the data payload with the
addresses from the GRH (if present) passed as additional parameters to
ib_complete_recv().

The end result of this discrepancy is that attempts to receive
full-sized 2048-byte IPoIB packets on Mellanox hardware will fail.

Fix by allocating a separate ring buffer to hold the received GRHs.

Signed-off-by: Michael Brown <mcb30@ipxe.org>

3 years ago[crypto] Allow trusted certificates to be stored in non-volatile options
Michael Brown [Sun, 20 Mar 2016 17:26:09 +0000 (17:26 +0000)] 
[crypto] Allow trusted certificates to be stored in non-volatile options

The intention of the existing code (as documented in its own comments)
is that it should be possible to override the list of trusted root
certificates using a "trust" setting held in non-volatile stored
options.  However, the rootcert_init() function currently executes
before any devices have been probed, and so will not be able to
retrieve any such non-volatile stored options.

Fix by executing rootcert_init() only after devices have been probed.
Since startup functions may be executed multiple times (unlike
initialisation functions), add an explicit flag to preserve the
property that rootcert_init() should run only once.

As before, if an explicit root of trust is specified at build time,
then any runtime "trust" setting will be ignored.

Signed-off-by: Michael Brown <mcb30@ipxe.org>

3 years ago[qib7322] Add missing iounmap()
Michael Brown [Sun, 20 Mar 2016 14:55:18 +0000 (14:55 +0000)] 
[qib7322] Add missing iounmap()

Signed-off-by: Michael Brown <mcb30@ipxe.org>

3 years ago[linda] Add missing iounmap()
Michael Brown [Sun, 20 Mar 2016 14:53:32 +0000 (14:53 +0000)] 
[linda] Add missing iounmap()

Signed-off-by: Michael Brown <mcb30@ipxe.org>

3 years ago[arbel] Add missing iounmap()
Michael Brown [Sun, 20 Mar 2016 14:50:36 +0000 (14:50 +0000)] 
[arbel] Add missing iounmap()

Signed-off-by: Michael Brown <mcb30@ipxe.org>

3 years ago[hermon] Add missing iounmap()
Michael Brown [Sun, 20 Mar 2016 14:46:40 +0000 (14:46 +0000)] 
[hermon] Add missing iounmap()

Signed-off-by: Michael Brown <mcb30@ipxe.org>

3 years ago[ipoib] Allow external code to identify IPoIB network devices
Michael Brown [Sun, 20 Mar 2016 09:22:55 +0000 (09:22 +0000)] 
[ipoib] Allow external code to identify IPoIB network devices

Signed-off-by: Michael Brown <mcb30@ipxe.org>

3 years ago[libc] Allow container_of() to be used on volatile pointers
Michael Brown [Fri, 18 Mar 2016 08:18:31 +0000 (08:18 +0000)] 
[libc] Allow container_of() to be used on volatile pointers

Signed-off-by: Michael Brown <mcb30@ipxe.org>

3 years ago[efi] Move architecture-independent EFI prefixes to interface/efi
Michael Brown [Thu, 17 Mar 2016 14:50:29 +0000 (14:50 +0000)] 
[efi] Move architecture-independent EFI prefixes to interface/efi

Signed-off-by: Michael Brown <mcb30@ipxe.org>

3 years ago[test] Move i386-specific tests to arch/i386/tests
Michael Brown [Thu, 17 Mar 2016 14:29:18 +0000 (14:29 +0000)] 
[test] Move i386-specific tests to arch/i386/tests

Signed-off-by: Michael Brown <mcb30@ipxe.org>

3 years ago[xen] Use generic test_and_clear_bit() function
Michael Brown [Wed, 16 Mar 2016 21:27:07 +0000 (21:27 +0000)] 
[xen] Use generic test_and_clear_bit() function

Signed-off-by: Michael Brown <mcb30@ipxe.org>