Intel Extensible Firmware Interface User Manual
Page 901
32/64-Bit UNDI Specification
Version 1.10
12/01/02
E-35
E.3.5.2 PXE_SW_UNDI
This section defines the C structures and #defines for the !PXE S/W UNDI interface.
#pragma pack(1)
typedef struct s_pxe_sw_undi {
PXE_UINT32
Signature; //
PXE_ROMID_SIGNATURE
PXE_UINT8
Len; //
sizeof(PXE_SW_UNDI)
PXE_UINT8
Fudge;
// makes 8-bit cksum zero
PXE_UINT8
Rev; //
PXE_ROMID_REV
PXE_UINT8
IFcnt;
// physical connector count
PXE_UINT8
MajorVer;
//
PXE_ROMID_MAJORVER
PXE_UINT8
MinorVer;
//
PXE_ROMID_MINORVER
PXE_UINT16
reserved1;
// zero, not used
PXE_UINT32
Implementation; // Implementation flags
PXE_UINT64
EntryPoint;
// API entry point
PXE_UINT8
reserved2[3];
// zero, not used
PXE_UINT8
BusCnt;
// number of bustypes supported
PXE_UINT32
BusType[1];
// list of supported bustypes
} PXE_SW_UNDI;
#pragma pack()
E.3.5.3 PXE_UNDI
PXE_UNDI combines both the H/W and S/W UNDI types into one typedef and has #defines for
common fields in both H/W and S/W UNDI types.
#pragma pack(1)
typedef union u_pxe_undi {
PXE_HW_UNDI
hw;
PXE_SW_UNDI
sw;
} PXE_UNDI;
#pragma pack()
// Signature of !PXE structure
#define PXE_ROMID_SIGNATURE
PXE_BUSTYPE(’!’, ’P’, ’X’, ’E’)
// !PXE structure format revision
#define
PXE_ROMID_REV
0x02
// UNDI command interface revision. These are the values that
// get sent in option 94 (Client Network Interface Identifier) in
// the DHCP Discover and PXE Boot Server Request packets.
#define
PXE_ROMID_MAJORVER
0x03
#define
PXE_ROMID_MINORVER
0x01