Intel Extensible Firmware Interface User Manual
Page 551

Protocols
— USB Support
Version 1.10
12/01/02
14-11
TimeOut
Indicates the maximum time, in milliseconds, which the transfer
is allowed to complete.
TransferResult
A pointer to the detailed result information generated by this
control transfer. Refer to Section 2.5.1 of EFI1.1 USB Driver
Model, version 0.7.
Description
This function is used to submit a control transfer to a target USB device specified by
DeviceAddress
. Control transfers are intended to support configuration/command/status type
communication flows between host and USB device.
There are three control transfer types according to the data phase. If the
TransferDirection
parameter is
EfiUsbNoData
,
Data
is
NULL
, and
DataLength
is 0, then no data phase is
present in the control transfer. If the
TransferDirection
parameter is
EfiUsbDataOut
,
then
Data
specifies the data to be transmitted to the device, and
DataLength
specifies the
number of bytes to transfer to the device. In this case, there is an OUT DATA stage followed by a
SETUP stage. If the
TransferDirection
parameter is
EfiUsbDataIn
, then
Data
specifies
the data to be received from the device, and
DataLength
specifies the number of bytes to receive
from the device. In this case there is an IN DATA stage followed by a SETUP stage.
If the control transfer has completed successfully, then
EFI_SUCCESS
is returned. If the 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 error code will be returned in the
TransferResult
parameter.
EFI_INVALID_PARAMETER
is returned if one of the following conditions is satisfied:
1.
TransferDirection
is invalid.
2.
TransferDirection
,
Data
, and
DataLength
do not match one of the three control
transfer types described above.
3.
Request
pointer is
NULL
.
4.
MaximumPacketLength
is not valid. If
IsSlowDevice
is
TRUE
, then
MaximumPacketLength
must be 8. If
IsSlowDevice
is
FALSE
, then
MaximumPacketLength
must be 8, 16, 32, or 64.
5.
TransferResult
pointer is
NULL
.