beautypg.com

Intel Extensible Firmware Interface User Manual

Page 551

background image

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

.