Intel Extensible Firmware Interface User Manual

Page 910

Advertising
background image

Extensible Firmware Interface Specification

E-44

12/01/02

Version 1.10

Preparing the CPB

The CPB for the S/W UNDI Start command (shown below) must be filled in and the size and
address of the CPB must be given in the CDB.

#pragma pack(1)

typedef struct s_pxe_cpb_start {

// PXE_VOID Delay(PXE_UINT64 microseconds);

// UNDI will never request a delay smaller than 10 microseconds
// and will always request delays in increments of 10
// microseconds. The Delay() CallBack routine must delay
// between n and n + 10 microseconds before returning control
// to the UNDI.

// This field cannot be set to zero.

PXE_UINT64

Delay;

// PXE_VOID Block(PXE_UINT32 enable);

// UNDI may need to block multithreaded/multiprocessor access
// to critical code sections when programming or accessing the
// network device. To this end, a blocking service is needed
// by the UNDI. When UNDI needs a block, it will call Block()
// passing a nonzero value. When UNDI no longer needs a
// block, it will call Block() with a zero value. When called,
// if the Block() is already enabled, do not return control to
// the UNDI until the previous Block() is disabled.

// This field cannot be set to zero.

PXE_UINT64

Block;

// PXE_VOID Virt2Phys(PXE_UINT64 virtual, PXE_UINT64
// physical_ptr);

// UNDI will pass the virtual address of a buffer and the
// virtual address of a 64-bit physical buffer. Convert the
// virtual address to a physical address and write the result
// to the physical address buffer. If virtual and physical
// addresses are the same, just copy the virtual address to the
// physical address buffer.

// This field can be set to zero if virtual and physical
// addresses are equal.

PXE_UINT64

Virt2Phys;

// PXE_VOID Mem_IO(UINT64 unq_id, PXE_UINT8 read_write,

//PXE_UINT8 len, PXE_UINT64 port, PXE_UINT64 buf_addr);

//

Advertising