UEFI USB 功能协议
重要
本节中的某些信息仅适用于Windows 10 移动版和某些处理器体系结构。
USB 函数协议在 UEFI 环境中定义通用和轻型 USB 传输。 此协议由闪存工具、USB 大容量存储模式和其他工具使用,这些工具需要在启动到 UEFI 环境和主计算机的设备之间进行双向通信。
EFI_USBFN_IO_PROTOCOL
与其他 UEFI 设备驱动程序一样,USB 函数驱动程序的入口点将EFI_DRIVER_BINDING_PROTOCOL附加到EFI_USBFN_IO_PROTOCOL驱动程序的图像句柄
驱动程序绑定协议包含三个服务: 支持、 启动和 停止。 支持的函数必须测试才能查看此驱动程序是否支持给定的控制器。 Start 函数必须在需要时向 USB 控制器供电,初始化硬件和内部数据结构,然后返回。 此函数不得激活端口。 停止函数必须根据需要重置运行/停止位并关闭 USB 控制器来禁用设备。
GUID
// {32D2963A-FE5D-4f30-B633-6E5DC55803CC}
#define EFI_USBFN_IO_PROTOCOL_GUID \
{0x32d2963a, 0xfe5d, 0x4f30, 0xb6, 0x33, 0x6e, 0x5d, 0xc5, \
0x58, 0x3, 0xcc };
修订号
#define EFI_USBFN_IO_PROTOCOL_REVISION 0x00010002
协议接口结构
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;
成员
修订
EFI_USBFN_IO_PROTOCOL所遵循的修订。 所有未来的修订都必须向后兼容。 如果将来的版本不向后兼容,则必须使用不同的 GUID。
DetectPort
返回有关 USB 端口类型的信息。 请参阅 EFI_USBFN_IO_PROTOCOL。DetectPort。
ConfigureEnableEndpoints
基于提供的设备和配置描述符初始化所有终结点。 通过设置运行/停止位来启用设备。 请参阅 EFI_USBFN_IO_PROTOCOL。ConfigureEnableEndpoints。
GetEndpointMaxPacketSize
返回指定终结点的最大数据包大小。 请参阅 EFI_USBFN_IO_PROTOCOL。GetEndpointMaxPacketSize。
GetDeviceInfo
根据提供的标识符作为 Unicode 字符串返回特定于设备的信息。 请参阅 EFI_USBFN_IO_PROTOCOL。GetDeviceInfo。
GetVendorIdProductId
返回设备的供应商 ID 和产品 ID。 请参阅 EFI_USBFN_IO_PROTOCOL。GetVendorIdProductId。
AbortTransfer
在指定的终结点上中止传输。 请参阅 EFI_USBFN_IO_PROTOCOL。AbortTransfer。
GetEndpointStallState
返回指定终结点上的停止状态。 请参阅 EFI_USBFN_IO_PROTOCOL。GetEndpointStallState。
SetEndpointStallS
设置或清除指定终结点上的停止状态。 请参阅 EFI_USBFN_IO_PROTOCOL。SetEndpointStallState。
EventHandler
重复调用此函数以接收 USB 总线状态的更新、接收、传输终结点上的完整事件,并在终结点 0 上设置数据包。 请参阅 EFI_USBFN_IO_PROTOCOL。EventHandler。
转移
此函数根据指定的方向处理在指定终结点上的主机上传输数据或从主机传输数据。 请参阅 EFI_USBFN_IO_PROTOCOL。传输。
GetMaxTransferSize
支持的最大传输大小(以字节为单位)。 请参阅 EFI_USBFN_IO_PROTOCOL。GetMaxTransferSize。
AllocateTransferBuffer
分配满足控制器要求的指定大小的传输缓冲区。 请参阅 EFI_USBFN_IO_PROTOCOL。AllocateTransferBuffer。
FreeTransferBuffer
取消分配 由 AllocateTransferBuffer 函数为传输缓冲区分配的内存。 请参阅 EFI_USBFN_IO_PROTOCOL。FreeTransferBuffer。
StartController
根据需要为 USB 控制器提供电源,并初始化硬件和内部数据结构。 请参阅 EFI_USBFN_IO_PROTOCOL。StartController。 从协议的修订版0x00010001开始,此函数可用。
StopController
根据需要重置运行/停止位并关闭 USB 控制器来禁用设备。 请参阅 EFI_USBFN_IO_PROTOCOL。StopController。 从协议的修订版0x00010001开始,此函数可用。
SetEndpointPolicy
设置指定非控制终结点的配置策略。 请参阅 EFI_USBFN_IO_PROTOCOL。SetEndpointPolicy。 从协议的修订版0x00010001开始,此函数可用。
GetEndpointPolicy
检索指定非控制终结点的配置策略。 请参阅 EFI_USBFN_IO_PROTOCOL。GetEndpointPolicy。 从协议的修订版0x00010001开始,此函数可用。
ConfigureEnableEndpointsEx
通过选择硬件支持的最快速度(最高为 SuperSpeed)的设备和配置描述符来初始化所有终结点。 通过设置运行/停止位来启用设备。 请参阅 EFI_USBFN_IO_PROTOCOL。ConfigureEnableEndpointsEx。 从协议的修订版0x00010002开始,此函数可用。
注解
下表列出了EFI_USBFN_IO_PROTOCOL协议的每个版本中支持的函数。
修订0x00010002 | 修订0x00010001 | 修订0x00010000 |
---|---|---|
ConfigureEnableEndpointsEx | DetectPort ConfigureEnableEndpoints GetEndpointMaxPacketSize GetDeviceInfo GetVendorIdProductId AbortTransfer GetEndpointStallState SetEndpointStallState EventHandler 转移 GetMaxTransferSize AllocateTransferBuffer FreeTransferBuffer StartController StopController SetEndpointPolicy GetEndpointPolicy |
DetectPort ConfigureEnableEndpoints GetEndpointMaxPacketSize GetDeviceInfo GetVendorIdProductId AbortTransfer GetEndpointStallState SetEndpointStallState EventHandler 转移 GetMaxTransferSize AllocateTransferBuffer FreeTransferBuffer |