32/64-bit UNDI Specification
Version 1.02 12/12/00 461
OpFlags
Check the !PXE.Implementation flags to see if the network device support fragmented
packets. Select one of the OpFlags below so the UNDI knows what type of CPB is being used.
PXE_OPFLAGS_TRANSMIT_WHOLE
PXE_OPFLAGS_TRANSMIT_FRAGMENTED
In addition to selecting whether or not fragmented packets are being given, S/W UNDI needs to
know if it should block until the packets are transmitted. H/W UNDI cannot block, these two
OpFlag settings have no affect when used with H/W UNDI.
PXE_OPFLAGS_TRANSMIT_BLOCK
PXE_OPFLAGS_TRANSMIT_DONT_BLOCK
Preparing the CPB
If multiple frames per command are supported (see !PXE.Implementation flags), multiple
CPBs can be packed together. The CDB.CPBsize field lets the UNDI know how may frames are
to be transmitted.
Non-Fragmented Frame
#pragma pack(1)
typedef struct s_pxe_cpb_transmit {
// Address of first byte of frame buffer. This is also the first
// byte of the media header.
PXE_UINT64 FrameAddr;
// Length of the data portion of the frame buffer in bytes. Do
// not include the length of the media header.
PXE_UINT32 DataLen;
// Length of the media header in bytes.
PXE_UINT16 MediaheaderLen;
// Reserved, must be zero.
PXE_UINT16 reserved;
} PXE_CPB_TRANSMIT;
#pragma pack()