17.1 USB2 Host Controller Protocol
USB2 Host Controller Protocol 主要是被 USB Bus Driver 调用抽象出 USB host controller I/O,然后 USB host controller (硬件抽象出来的)通过这个抽象 IO,可以管理在 USB (Universal Serial Bus)Bus 上的传输事务(传输事务是指内存和 USB 设备之前的数据传输)和集成在 USB host controller 上的 USB root Hub(控制挂在 USB hub 后面的 devices)。
UBS device driver 不直接使用这个 Protocol,而是访问USB host controller I/O,这个 protocol 只能被直接访问 USB bus 的 driver 调用。
17.1.1 USB Host Controller Protocol Overview
USB Host Controller Protocol 也就是代码中的EFI_USB_HC_PROTOCOL 或者 EFI_USB2_HC_PROTOCOL,EFI_USB2_HC_PROTOCOL 可以看作是更新的协议用于支持 USB1.1 和 USB 2.0.可以和 EHCI、UHCI、OHCI 标准一起配合使用,通过使用这个 protocol USB bus driver 不需要知道底层的 USB 控制器是否满足 EHCI、UHCI、OHCI 中的哪一种。平台中的每一个 USB host controller 都有自己的 EFI_USB2_HC_PROTOCOL 函数实例,且需要 USB controller 的父总线类型的 device driver 来将 protocol install 到 USB controller 的 device handle 上面。
typedef struct _EFI_USB2_HC_PROTOCOL {
EFI_USB2_HC_PROTOCOL_GET_CAPABILITY GetCapability;
EFI_USB2_HC_PROTOCOL_RESET Reset;
EFI_USB2_HC_PROTOCOL_GET_STATE GetState;
EFI_USB2_HC_PROTOCOL_SET_STATE SetState;
EFI_USB2_HC_PROTOCOL_CONTROL_TRANSFER ControlTransfer;
EFI_USB2_HC_PROTOCOL_BULK_TRANSFER BulkTransfer;
EFI_USB2_HC_PROTOCOL_ASYNC_INTERRUPT_TRANSFER
AsyncInterruptTransfer;
EFI_USB2_HC_PROTOCOL_SYNC_INTERRUPT_TRANSFER
SyncInterruptTransfer;
EFI_USB2_HC_PROTOCOL_ISOCHRONOUS_TRANSFER
IsochronousTransfer;
EFI_USB2_HC_PROTOCOL_ASYNC_ISOCHRONOUS_TRANSFER
AsyncIsochronousTransfer;
EFI_USB2_HC_PROTOCOL_GET_ROOTHUB_PORT_STATUS
GetRootHubPortStatus;
EFI_USB2_HC_PROTOCOL_SET_ROOTHUB_PORT_FEATURE
SetRootHubPortFeature;
EFI_USB2_HC_PROTOCOL_CLEAR_ROOTHUB_PORT_FEATURE
ClearRootHubPortFeature;
UINT16 MajorRevision;
UINT16 MinorRevision;
} EFI_USB2_HC_PROTOCOL;
函数名称 |
功能 |
GetCapability |
获取 USB host controller的功能,比如最大传输速率,Port number,是否支持 64Bit 内存地址 |
Reset |
重启 USB host controller |
GetState |
获取 USB host controller 的状态 |
SetState |
设置 USB host controller 的状态 |
ControlTransfer |
向目标设备发送控制请求 |
BulkTransfer |
将大容量数据传输提交到USB设备的大容量端点 |
AsyncInter |