beautypg.com

Intel Extensible Firmware Interface User Manual

Page 923

background image

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;