TianoCore EDK2 master
|
Data Fields | |
UINT64 | Delay |
UINT64 | Block |
UINT64 | Virt2Phys |
UINT64 | Mem_IO |
UINT64 | Map_Mem |
UINT64 | UnMap_Mem |
UINT64 | Sync_Mem |
UINT64 | Unique_ID |
UINT64 s_pxe_cpb_start_31::Block |
PXE_VOID Block(UINT64 unq_id, 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_31::Delay |
PXE_VOID Delay(UINT64 UnqId, 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_31::Map_Mem |
PXE_VOID Map_Mem(UINT64 unq_id, UINT64 virtual_addr, UINT32 size, UINT32 Direction, UINT64 mapped_addr);
UNDI will pass the virtual address of a buffer, direction of the data flow from/to the mapped buffer (the constants are defined below) and a place holder (pointer) for the mapped address. This call will Map the given address to a physical DMA address and write the result to the mapped_addr pointer. If there is no need to map the given address to a lower address (i.e. the given address is associated with a physical address that is already compatible to be used with the DMA, it converts the given virtual address to it's physical address and write that in the mapped address pointer.
This field can be set to zero if there is no mapping service available.
UINT64 s_pxe_cpb_start_31::Mem_IO |
PXE_VOID Mem_IO(UINT64 UnqId, 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_31::Sync_Mem |
PXE_VOID Sync_Mem(UINT64 unq_id, UINT64 virtual, UINT32 size, UINT32 Direction, UINT64 mapped_addr);
UNDI will pass the virtual and mapped addresses of a buffer. This call will synchronize the contents of both the virtual and mapped. buffers for the given Direction.
This field can be set to zero if there is no service available.
UINT64 s_pxe_cpb_start_31::Unique_ID |
UINT64 s_pxe_cpb_start_31::UnMap_Mem |
PXE_VOID UnMap_Mem(UINT64 unq_id, UINT64 virtual_addr, UINT32 size, UINT32 Direction, UINT64 mapped_addr);
UNDI will pass the virtual and mapped addresses of a buffer. This call will un map the given address.
This field can be set to zero if there is no unmapping service available.
UINT64 s_pxe_cpb_start_31::Virt2Phys |
PXE_VOID Virt2Phys(UINT64 UnqId, 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.