beautypg.com

Intel Extensible Firmware Interface User Manual

Page 952

background image

Extensible Firmware Interface Specification

E-86

12/01/02

Version 1.10

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.

Nonfragmented 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. This address must be a

// processor-based address for S/W UNDI and a device-based

// address for H/W UNDI.

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()