[gPXE-devel] One ROM, multiple PCI IDs

Stefan Hajnoczi stefanha at gmail.com
Sat Jul 31 06:08:58 EDT 2010


Josh: I have CCed you explicitly because I think you had ideas on this
some time ago.

The question of multiple PCI IDs for a single gPXE ROM came up
recently on IRC.  It can be useful to have a single gPXE ROM file that
works on multiple PCI devices that have different IDs.

I reviewed the PnP, BBS, and PCI 3.0 Firmware specifications to check
whether it is possible or not.  The constraints end up making
general-purpose multiple PCI ID ROMs infeasible.  I think it is not
worth pursuing this unless these ROMs can be widely used.

The approaches I found are:
1. PCI 3.0 device ID list.  The PCI 3.0 Data Structure includes a
Device List pointer allowing a ROM to advertise support for additional
*device* IDs.  Two limitations here: only additional device IDs may be
used, not vendor IDs, and the BIOS needs to have PCI 3.0 Firmware
support.
2. Using multiple ROM headers.  This means providing multiple
expansion ROM headers within the ROM so the BIOS can pick an
applicable one.  However, each header must start on a 512-byte
boundary and I don't see a reasonable way to share the compressed gPXE
image between multiple ROM headers.  There will not be enough space to
accommodate multiple (duplicate) images, and the alternative is a more
complex loader that tries to fetch gPXE as a second stage payload from
the PCI expansion ROM (which is known to be tricky).

Thoughts?

Stefan


More information about the gPXE-devel mailing list