Intel Extensible Firmware Interface User Manual
Page 923
32/64-Bit UNDI Specification
Version 1.10
12/01/02
E-57
Preparing the CPB
If the
MemoryRequired
field returned in the
PXE_DB_GET_INIT_INFO
structure is zero, the
Initialize command does not need to be given a memory buffer or even a CPB structure. If the
MemoryRequired
field is nonzero, the Initialize command does need a memory buffer.
#pragma pack(1)
typedef struct s_pxe_cpb_initialize {
// Address of first (lowest) byte of the memory buffer.
// This buffer must be in contiguous physical memory and cannot
// be swapped out. The UNDI will be using this for transmit
// and receive buffering. This address must be a processor-
// based address for S/W UNDI and a device-based address for
// H/W UNDI.
PXE_UINT64
MemoryAddr;
// MemoryLength must be greater than or equal to MemoryRequired
// returned by the Get Init Info command.
PXE_UINT32
MemoryLength;
// Desired link speed in Mbit/sec. Common ethernet values are
// 10, 100 and 1000. Setting a value of zero will auto-detect
// and/or use the default link speed (operation depends on
// UNDI/NIC functionality).
PXE_UINT32
LinkSpeed;
// Suggested number and size of receive and transmit buffers to
// allocate. If MemoryAddr and MemoryLength are nonzero, this
// allocation comes out of the supplied memory buffer. If
// MemoryAddr and MemoryLength are zero, this allocation comes
// out of memory on the NIC.
// If these fields are set to zero, the UNDI will allocate
// buffer counts and sizes as it sees fit.
PXE_UINT16
TxBufCnt;
PXE_UINT16
TxBufSize;
PXE_UINT16
RxBufCnt;
PXE_UINT16
RxBufSize;