TianoCore EDK2 master
|
Data Fields | |
UINT64 | Delay |
UINT64 | Block |
UINT64 | Virt2Phys |
UINT64 | Mem_IO |
UINT64 s_pxe_cpb_start_30::Block |
PXE_VOID Block(UINT32 enable);
UNDI may need to block multi-threaded/multi-processor 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 non-zero 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.
UINT64 s_pxe_cpb_start_30::Delay |
PXE_VOID Delay(UINTN 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.
UINT64 s_pxe_cpb_start_30::Mem_IO |
PXE_VOID Mem_IO(UINT8 read_write, UINT8 len, UINT64 port, UINT64 buf_addr);
UNDI will read or write the device io space using this call back function. It passes the number of bytes as the len parameter and it will be either 1,2,4 or 8.
This field can not be set to zero.
UINT64 s_pxe_cpb_start_30::Virt2Phys |
PXE_VOID Virt2Phys(UINT64 virtual, 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.