Intel Extensible Firmware Interface Network Router User Manual


  Open as PDF
of 1084
 
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);
//