Intel Extensible Firmware Interface User Manual
Page 554

Extensible Firmware Interface Specification
14-14 12/01/02
Version
1.10
TimeOut
Indicates the maximum time, in milliseconds, which the transfer
is allowed to complete.
TransferResult
A pointer to the detailed result information of the bulk transfer.
Refer to Section 2.5.1 of EFI1.1 USB Driver Model, version 0.7.
Description
This function is used to submit bulk transfer to a target endpoint of a USB device. The target
endpoint is specified by
DeviceAddress
and
EndpointAddress
. Bulk transfers are
designed to support devices that need to communicate relatively large amounts of data at highly
variable times where the transfer can use any available bandwidth. Bulk transfers can be used only
by full-speed devices.
The data transfer direction is determined by the endpoint direction that is encoded in the
EndPointAddress
parameter. Please refer to USB Specification, Revision 1.1 on the Endpoint
Address encoding.
The
DataToggle
parameter is used to track target endpoint’s data sequence toggle bits. The
USB provides a mechanism to guarantee data packet synchronization between data transmitter and
receiver across multiple transactions. The data packet synchronization is achieved with the data
sequence toggle bits and the DATA0/DATA1 PIDs. A bulk endpoint’s toggle sequence is
initialized to DATA0 when the endpoint experiences a configuration event. It toggles between
DATA0 and DATA1 in each successive data transfer. It is host’s responsibility to track the bulk
endpoint’s data toggle sequence and set the correct value for each data packet. The input
DataToggle
value points to the data toggle value for the first data packet of this bulk transfer;
the output
DataToggle
value points to the data toggle value for the last successfully transferred
data packet of this bulk transfer. The caller should record the data toggle value for use in
subsequent bulk transfers to the same endpoint.
If the bulk transfer is successful, then
EFI_SUCCESS
is returned. If USB transfer cannot be
completed within the timeout specified by
Timeout
, then
EFI_TIMEOUT
is returned. If an error
other than timeout occurs during the USB transfer, then
EFI_DEVICE_ERROR
is returned and the
detailed status code is returned in
TransferResult
.
EFI_INVALID_PARAMETER
is returned if one of the following conditions is satisfied:
1.
Data
is
NULL
.
2.
DataLength
is 0.
3.
MaximumPacketLength
is not valid. The legal value of this parameter is 8, 16, 32, or 64.
4.
DataToggle
points to a value other than 0 and 1.
5.
TransferResult
is
NULL
.