UEFI USB function protocol
Important
Some information in this section may apply only to Windows 10 Mobile and certain processor architectures.
The USB function protocol defines a generic and lightweight USB transport in the UEFI environment. This protocol is used by flashing tools, USB mass storage mode, and other tools that require bidirectional communication between a device that is booted into the UEFI environment and a host computer.
EFI_USBFN_IO_PROTOCOL
Like other UEFI device drivers, the entry point for a USB function driver attaches EFI_DRIVER_BINDING_PROTOCOL to image handle of EFI_USBFN_IO_PROTOCOL driver
The driver binding protocol contains three services, Supported, Start, and Stop. The Supported function must test to see if this driver supports a given controller. The Start function must supply power to the USB controller if needed, initialize hardware and internal data structures, and then return. The port must not be activated by this function. The Stop function must disable the device by resetting the run/stop bit and power off the USB controller if needed.
GUID
// {32D2963A-FE5D-4f30-B633-6E5DC55803CC}
#define EFI_USBFN_IO_PROTOCOL_GUID \
{0x32d2963a, 0xfe5d, 0x4f30, 0xb6, 0x33, 0x6e, 0x5d, 0xc5, \
0x58, 0x3, 0xcc };
Revision number
#define EFI_USBFN_IO_PROTOCOL_REVISION 0x00010002
Protocol interface structure
typedef struct _EFI_USBFN_IO_PROTOCOL
{
UINT32 Revision;
EFI_USBFN_IO_DETECT_PORT DetectPort;
EFI_USBFN_IO_CONFIGURE_ENABLE_ENDPOINTS ConfigureEnableEndpoints;
EFI_USBFN_IO_GET_ENDPOINT_MAXPACKET_SIZE GetEndpointMaxPacketSize;
EFI_USBFN_IO_GET_DEVICE_INFO GetDeviceInfo;
EFI_USBFN_IO_GET_VENDOR_ID_PRODUCT_ID GetVendorIdProductId;
EFI_USBFN_IO_ABORT_TRANSFER AbortTransfer;
EFI_USBFN_IO_GET_ENDPOINT_STALL_STATE GetEndpointStallState;
EFI_USBFN_IO_SET_ENDPOINT_STALL_STATE SetEndpointStallState;
EFI_USBFN_IO_EVENTHANDLER EventHandler;
EFI_USBFN_IO_TRANSFER Transfer;
EFI_USBFN_IO_GET_MAXTRANSFER_SIZE GetMaxTransferSize;
EFI_USBFN_IO_ALLOCATE_TRANSFER_BUFFER AllocateTransferBuffer;
EFI_USBFN_IO_FREE_TRANSFER_BUFFER FreeTransferBuffer;
EFI_USBFN_IO_START_CONTROLLER StartController;
EFI_USBFN_IO_STOP_CONTROLLER StopController;
EFI_USBFN_IO_SET_ENDPOINT_POLICY SetEndpointPolicy;
EFI_USBFN_IO_GET_ENDPOINT_POLICY GetEndpointPolicy;
EFI_USBFN_IO_CONFIGURE_ENABLE_ENDPOINTS_EX ConfigureEnableEndpointsEx;
} EFI_USBFN_IO_PROTOCOL;
Members
Revision
The revision to which the EFI_USBFN_IO_PROTOCOL adheres. All future revisions must be backward compatible. If a future version is not backward compatible, a different GUID must be used.
DetectPort
Returns information about USB port type. See EFI_USBFN_IO_PROTOCOL.DetectPort.
ConfigureEnableEndpoints
Initialize all endpoints based on supplied device and configuration descriptors. Enable the device by setting the run/stop bit. See EFI_USBFN_IO_PROTOCOL.ConfigureEnableEndpoints.
GetEndpointMaxPacketSize
Returns the maximum packet size of the specified endpoint. See EFI_USBFN_IO_PROTOCOL.GetEndpointMaxPacketSize.
GetDeviceInfo
Returns device specific information based on the supplied identifier as a Unicode string. See EFI_USBFN_IO_PROTOCOL.GetDeviceInfo.
GetVendorIdProductId
Returns vendor-id and product-id of the device. See EFI_USBFN_IO_PROTOCOL.GetVendorIdProductId.
AbortTransfer
Aborts transfer on the specified endpoint. See EFI_USBFN_IO_PROTOCOL.AbortTransfer.
GetEndpointStallState
Returns the stall state on the specified endpoint. See EFI_USBFN_IO_PROTOCOL.GetEndpointStallState.
SetEndpointStallS
Sets or clears the stall state on the specified endpoint. See EFI_USBFN_IO_PROTOCOL.SetEndpointStallState.
EventHandler
This function is called repeatedly to receive updates on USB bus states, receive, transmit complete events on endpoints and setup packet on endpoint 0. See EFI_USBFN_IO_PROTOCOL.EventHandler.
Transfer
This function handles transferring data to or from the host on the specified endpoint, depending on the direction specified. See EFI_USBFN_IO_PROTOCOL.Transfer.
GetMaxTransferSize
The maximum supported transfer size in bytes. See EFI_USBFN_IO_PROTOCOL.GetMaxTransferSize.
AllocateTransferBuffer
Allocates a transfer buffer of the specified size that satisfies controller requirements. See EFI_USBFN_IO_PROTOCOL.AllocateTransferBuffer.
FreeTransferBuffer
De-allocates the memory allocated for the transfer buffer by the AllocateTransferBuffer function. See EFI_USBFN_IO_PROTOCOL.FreeTransferBuffer.
StartController
Supplies power to the USB controller if needed and initializes hardware and internal data structures. See EFI_USBFN_IO_PROTOCOL.StartController. This function is available starting in revision 0x00010001 of the protocol.
StopController
Disables the device by resetting the run/stop bit and powers off the USB controller if needed. See EFI_USBFN_IO_PROTOCOL.StopController. This function is available starting in revision 0x00010001 of the protocol.
SetEndpointPolicy
Sets the configuration policy for the specified non-control endpoint. See EFI_USBFN_IO_PROTOCOL.SetEndpointPolicy. This function is available starting in revision 0x00010001 of the protocol.
GetEndpointPolicy
Retrieves the configuration policy for the specified non-control endpoint. See EFI_USBFN_IO_PROTOCOL.GetEndpointPolicy. This function is available starting in revision 0x00010001 of the protocol.
ConfigureEnableEndpointsEx
Intializes all endpoints by selecting the device and configuration descriptor with the highest speed (up to SuperSpeed) supported by the hardware. Enables the device by setting the run/stop bit. See EFI_USBFN_IO_PROTOCOL.ConfigureEnableEndpointsEx. This function is available starting in revision 0x00010002 of the protocol.
Remarks
The following table lists the functions that are supported in each version of the EFI_USBFN_IO_PROTOCOL protocol.
Revision 0x00010002 | Revision 0x00010001 | Revision 0x00010000 |
---|---|---|
ConfigureEnableEndpointsEx | DetectPort ConfigureEnableEndpoints GetEndpointMaxPacketSize GetDeviceInfo GetVendorIdProductId AbortTransfer GetEndpointStallState SetEndpointStallState EventHandler Transfer GetMaxTransferSize AllocateTransferBuffer FreeTransferBuffer StartController StopController SetEndpointPolicy GetEndpointPolicy |
DetectPort ConfigureEnableEndpoints GetEndpointMaxPacketSize GetDeviceInfo GetVendorIdProductId AbortTransfer GetEndpointStallState SetEndpointStallState EventHandler Transfer GetMaxTransferSize AllocateTransferBuffer FreeTransferBuffer |