Version 1.02 12/12/00 327
18PCI Expansion ROM
The PCI Local Bus Specification defines how to discover expansion ROM code that comes from a
ROM on a PCI Card. The expansion ROM can be executed to initialize a specific device or,
possibly, to boot a system. PCI allows the ROM to contain several different images to
accommodate different machine and processor architectures. This chapter explains how EFI
images can be discovered and executed from a PCI expansion ROM. The EFI images are
discovered using the basic methods outlined in the PCI Local Bus Specification, and then executed
just like any other EFI image. The format and definition of an EFI image in a PCI expansion ROM
are the same as the format and definition of an EFI image that is loaded from a disk or removable
medium.
An EFI PCI expansion ROM can coexist with other image types in a single PCI ROM. The
coexistence of multiple images in a PCI expansion ROM is detailed in the PCI Local Bus
Specification. EFI utilizes a new PCI code type to define a platform-specific PCI Expansion ROM
Header. The EFI expansion ROM header contains information about the image and a pointer to the
start of the image.

18.1 Standard PCI Expansion ROM Header

All PCI expansion ROMs start with the standard header shown in Table 18-1. (The header is
defined in the PCI Local Bus Specification, Revision 2.2). The table contains a simple signature,
0xAA55, and the offset to the PCI Data Structure. The Standard PCI Data Structure must be
located within the first 64 KB of the ROM image and must be aligned on a four byte boundary.
Table 18-1. Standard PCI Expansion ROM Header
Offset Byte Length Value Description
0x00 1 0x55 ROM Signature, byte 1
0x01 1 0xAA ROM Signature, byte 2
0x02-0x17 22 XX Reserved per processor architecture unique data
0x18-0x19 2 XX Pointer to PCI Data Structure
Table 18-2 defines the contents of the PCI Data Structure. (The definition is taken from the PCI
Local Bus Specification, Revision 2.2). The code type field is used to identify the type of code
contained in this section of the ROM. The following code types are assigned by the PCI Local Bus
Specification, Revision 2.2:
0x00 – Intel® IA-32, PC-AT compatible
0x01 Open Firmware standard for PCI
0x02 Hewlett-Packard PA RISC
0x03-0xff Reserved