Extensible Firmware Interface Specification
460 12/12/00 Version 1.02
G.4.17.3 Checking Command Execution Results
After command execution completes, either successfully or not, the CDB.StatCode field
contains the result of the command execution.
StatCode Reason
SUCCESS Command completed successfully. Frame is ready to transmit.
INVALID_CDB One of the CDB fields was not set correctly.
INVALID_CPB One of the CPB fields was not set correctly.
BUSY UNDI is already processing commands. Try again later.
QUEUE_FULL Command queue is full. Try again later.
NOT_STARTED The UNDI is not started.
NOT_INITIALIZED The UNDI is not initialized.
G.4.18 Transmit
The Transmit command is used to place a packet into the transmit queue. The data buffers given to
this command are to be considered locked and the application or universal network driver loses the
ownership of those buffers and must not free or relocate them until the ownership returns.
When the packets are transmitted, a transmi t complete interrupt is generated (if int errupts are
disabled, the transmit interrupt status is still set and can be checked using the Get Status command).
Some UNDI implementations and network adapters support transmitting multiple packets with one
transmit command. If this feature is supported, multiple transmit CPBs can be linked in one
transmit command.
Though all UNDIs support fragmented frames, the same cannot be said for all network devices or
protocols. If a fragmented frame CPB is given to UNDI and the network device does not support
fragmented frames (see !PXE.Implementation flags), the UNDI will have to copy the
fragments into a local buffer before transmitting.
G.4.18.1 Issuing the Command
To issue a Transmit command, create a CDB and fill it in as shows in the table below:
CDB Field How to initialize the CDB structure for a Transmit command
OpCode PXE_OPCODE_TRANSMIT
OpFlags Set as needed.
CPBsize sizeof(PXE_CPB_TRANSMIT)
DBsize PXE_DBSIZE_NOT_USED
CPBaddr Address of a PXE_CPB_TRANSMIT structure.
DBaddr PXE_DBADDR_NOT_USED
StatCode PXE_STATCODE_INITIALIZE
StatFlags PXE_STATFLAGS_INITIALIZE
IFnum A valid interface number from zero to !PXE.IFcnt.
Control Set as needed.