Extensible Firmware Interface Specification
464 12/12/00 Version 1.02
G.4.19 Receive
When the network adapter has received a frame, this command is used to copy the frame into
driver/application storage. Once a frame has been copied, it is removed from the receive queue.
G.4.19.1 Issuing the Command
To issue a Receive command, create a CDB and fill it in as shows in the table below:
CDB Field How to initialize the CDB structure for a Receive command
OpCode PXE_OPCODE_RECEIVE
OpFlags Set as needed.
CPBsize sizeof(PXE_CPB_RECEIVE)
DBsize sizeof(PXE_DB_RECEIVE)
CPBaddr Address of a PXE_CPB_RECEIVE structure.
DBaddr Address of a PXE_DB_RECEIVE structure.
StatCode PXE_STATCODE_INITIALIZE
StatFlags PXE_STATFLAGS_INITIALIZE
IFnum A valid interface number from zero to !PXE.IFcnt.
Control Set as needed.
Preparing the CPB
If multiple frames per command are supported (see !PXE.Implementation flags), multiple
CPBs can be packed together. For each complete received frame, a receive buffer large enough to
contain the entire unfragmented frame needs to be described in the CPB.
#pragma pack(1)
typedef struct s_pxe_cpb_receive {
// Address of first byte of receive buffer. This is also the
// first byte of the frame header.
PXE_UINT64 BufferAddr;
// Length of receive buffer. This must be large enough to hold
// the received frame (media header + data). If the length of
// smaller than the received frame, data will be lost.
PXE_UINT32 BufferLen;
// Reserved, must be set to zero.
PXE_UINT32 reserved;
} PXE_CPB_RECEIVE;
#pragma pack()