[pxeprefix] Add .kkpxe image type and ability to return via PXE stack
authorMichael Brown <mcb30@etherboot.org>
Mon, 27 Oct 2008 01:06:00 +0000 (01:06 +0000)
committerMichael Brown <mcb30@etherboot.org>
Wed, 18 Feb 2009 18:12:32 +0000 (18:12 +0000)
commitb5577553e59391653f47b9edb12775c080665db0
treed824146681cbb12132831358f494b9803bad1d48
parentdd44a7c3140f489b1be7f44a1335732f2b47c63d
[pxeprefix] Add .kkpxe image type and ability to return via PXE stack

Certain combinations of PXE stack and BIOS result in a broken INT 18
call, which will leave the system displaying a "PRESS ANY KEY TO
REBOOT" message instead of proceeding to the next boot device.  On
these systems, returning via the PXE stack is the only way to continue
to the next boot device.  Returning via the PXE stack works only if we
haven't already blown away the PXE base code in pxeprefix.S.

In most circumstances, we do want to blow away the PXE base code.
Base memory is a limited resource, and it is desirable to reclaim as
much as possible.  When we perform an iSCSI boot, we need to place the
iBFT above the 512kB mark, because otherwise it may not be detected by
the loaded OS; this may not be possible if the PXE base code is still
occupying that memory.

Introduce a new prefix type .kkpxe which will preserve both the PXE
base code and the UNDI driver (as compared to .kpxe, which preserves
the UNDI driver but uninstalls the PXE base code).  This prefix type
can be used on systems that are known to experience the specific
problem of INT 18 being broken, or in builds (such as gpxelinux.0) for
which it is particularly important to know that returning to the BIOS
will work.

Written by H. Peter Anvin <hpa@zytor.com> and Stefan Hajnoczi
<stefanha@gmail.com>, minor structural alterations by Michael Brown
<mcb30@etherboot.org>.
src/arch/i386/Makefile.pcbios
src/arch/i386/drivers/net/undinet.c
src/arch/i386/drivers/net/undionly.c
src/arch/i386/include/undi.h
src/arch/i386/prefix/kkpxeprefix.S [new file with mode: 0644]
src/arch/i386/prefix/pxeprefix.S
src/include/gpxe/init.h