Extensible Firmware Interface Specification
466 12/12/00 Version 1.02
// Protocol type from media header.
PXE_PROTOCOL Protocol;
// Length of media header in received frame.
PXE_UINT16 MediaHeaderLen;
// Type of receive frame.
PXE_FRAME_TYPE Type;
// Reserved, must be zero.
PXE_UINT8 reserved[7];
} PXE_DB_RECEIVE;
#pragma pack()
G.5 UNDI as an EFI Runtime Driver
This section defines the interface between UNDI and EFI and how UNDI must be initialized as an
EFI runtime driver.
In the EFI environment, UNDI must implement the Network Interface Identifier (NII) protocol and
install an interface pointer of the type NII protocol with EFI. It must also install a device path
protocol with a device path that includes the hardware device path (such as PCI) appended with the
NICs MAC address. If the UNDI drives more than one NIC device, it must install one set of NII
and device path protocols for each device it controls.
UNDI must be compiled as a runtime driver so that when the operating system loads, a universal
protocol driver can use the UNDI driver to access the NIC hardware.
For the universal driver to be able to find UNDI, UNDI must install a configuration table (using the
EFI boot service InstallConfigurationTable) for the GUID
NETWORK_INTERFACE_IDENTIFIER_PROTOCOL. The format of the configuration table for
UNDI is defined as follows.
struct undiconfig_table {
UINT32 NumberOfInterfaces; // the number of NIC devices that this UNDI controls
UINT32 reserved;
struct undiconfigtable *nextlink;// a pointer to the next UNDI configuration table
struct {
VOID *NII_InterfacePointer; // pointer to the NII interface structure
VOID *DevicePathPointer; // pointer to the device path for this NIC