[romprefix] Add .mrom format, allowing loading of large ROMs
authorMichael Brown <mcb30@ipxe.org>
Sun, 25 Apr 2010 14:57:00 +0000 (15:57 +0100)
committerStefan Hajnoczi <stefanha@gmail.com>
Wed, 7 Jul 2010 19:14:37 +0000 (20:14 +0100)
commit66cf79c97387109545598ef95afd0eb1b3b2c48a
tree286c3935c2254aa53604d4e38b55c41eebeaa26d
parent90e27353d61e7b2594985d8158bd79bdaad78882
[romprefix] Add .mrom format, allowing loading of large ROMs

Add an infrastructure allowing the prefix to provide an open_payload()
method for obtaining out-of-band access to the whole gPXE image.  Add
a mechanism within this infrastructure that allows raw access to the
expansion ROM BAR by temporarily borrowing an address from a suitable
memory BAR on the same PCI card.

For cards that have a memory BAR that is at least as large as their
expansion ROM BAR, this allows large gPXE ROMs to be supported even on
systems where PMM fails, or where option ROM space pressure makes it
impossible to use PMM shrinking.  The BIOS sees only a stub ROM of
approximately 3kB in size; the remainder (which can be well over 64kB)
is loaded only at the time gPXE is invoked.

As a nice side-effect, an gPXE .mrom image will continue to work even
if its PMM-allocated areas are overwritten between initialisation and
invocation.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
Signed-off-by: Stefan Hajnoczi <stefanha@gmail.com>
src/arch/i386/Makefile.pcbios
src/arch/i386/prefix/libprefix.S
src/arch/i386/prefix/mromprefix.S [new file with mode: 0644]
src/arch/i386/prefix/romprefix.S
src/util/Option/ROM.pm