打开主机控制器适配器设备驱动程序
用途
支持适配器设备驱动程序的开放式主机控制器接口 (OHCI) 规范。
语法
#include <sys/hcdi.h>
#include <sys/usbdi.h>
#include <sys/usb.h>描述
/dev/usbhcn 特殊文件提供了允许访问通用串行总线 (USB) 主机控制器适配器设备的接口。 这些文件管理适配器资源,以便多个 USB 客户机驱动程序和 USB 系统 (或协议驱动程序) 可以同时访问同一 USB 主机控制器适配器上的 USB 设备的低速和全速运行。
OHCI 适配器支持以 USB 1.0 和 USB 1.1 速度运行的 USB 设备 (例如,键盘和鼠标)。
适配器设备驱动程序入口点子例程
USB 适配器设备驱动程序仅支持 open, close, ioctl和 config 入口点。 不支持 read 和 write 入口点。
打开和关闭子例程
open 子例程将指定为 open 系统调用的参数的设备号与内部适配器设备结构相关联。 如果 open 子例程找到适配器结构,那么它将验证是否配置了相应的适配器设备并且未将其标记为不活动。 如果 open 子例程找不到适配器结构,那么会返回错误。 如果启用了增强型错误处理 (EEH) 功能,那么在处理 EEH 事件时, open 子例程将阻止访问设备。
ioctl 子例程
ioctl 子操作:| 操作 | 描述 |
|---|---|
| HCD_REGISTER_HC | 注册 USB 系统 (或协议驱动程序) 与主机控制器驱动程序之间的调用向量。 在注册呼叫向量后, USB 系统 (或协议驱动程序) 与主机控制器驱动程序之间的所有进一步通信都由这些向量处理。 |
由 OHCI 适配器设备驱动程序返回的错误情况摘要
将 OHCI 的以下错误条件代码转换为 USBstatus 值,以向 USB 协议驱动程序和客户机驱动程序通知错误条件。 可能的 OHCI 错误条件和相应的 USBstatus 值如下所示:
| OHCI 错误条件代码 | USBstatus 值 | 描述 |
|---|---|---|
| OHCI_CC_BitStuffing | USBD_ERROR | 一般错误条件 |
| OHCI_CC_BufferOverrun | USBD_ERROR | 一般错误条件 |
| OHCI_CC_BufferUnderrun | USBD_ERROR | 一般错误条件 |
| OHCI_CC_CRC | USBD_ERROR | 一般错误条件 |
| OHCI_CC_DataOverrun | USBD_ERROR | 一般错误条件 |
| OHCI_CC_DataToggleMismatch | USBD_ERROR | 一般错误条件 |
| OHCI_CC_DataUnderrun | USBD_ERROR | 一般错误条件 |
| OHCI_CC_DeviceNotResponding | USBD_ERROR | 一般错误条件 |
| OHCI_CC_NotAccessed_0 | USBD_ERROR | 一般错误条件 |
| OHCI_CC_NotAccessed_1 | USBD_ERROR | 一般错误条件 |
| OHCI_CC_NoError | USBD_SUCCESS | 成功完成事务 |
| OHCI_CC_PIDCheckFailure | USBD_ERROR | 一般错误条件 |
| OHCI_CC_STALL | USBD_STALL | 逻辑管道已延迟 |
| OHCI_CC_UnexpectedPID | USBD_ERROR | 一般错误条件 |
调用向量
每当 USB 配置方法运行时,它都会打开 /dev/usb0 USB 系统驱动程序 (USBD) 特殊文件,并尝试使用 USBD_REGISTER_HC ioctl 操作向 USBD 注册每个检测到的可用 USB 主机控制器。 处理 USBD_REGISTER_HC ioctl 操作时, USBD 会打开主机控制器驱动程序,并使用 HCD_REGISTER_HC ioctl 操作请求注册存储在主机控制器驱动程序中的调用向量。 所述呼叫向量向所述 USBD 注册后,所述呼叫向量处理所述 USBD 与所述主机控制器驱动程序之间的所有进一步通信。 调用向量的摘要如下所示:
| 调用向量 | 描述 |
|---|---|
| hcdGetFrame | 从连接的主机控制器获取当前帧号。 此呼叫矢量由 USBD 提供。 |
| hcdPipeAbort | 取消对 I/O 缓冲区的处理。 在调用 hcdPipeAbort 调用向量之前, I/O 缓冲区指定的管道已停止。 此呼叫矢量由 USBD 提供。 |
| hcdPipeAddIOB | 增加未完成 I/O 缓冲区的最大数目。 此呼叫矢量由 USBD 提供。 |
| hcdPipeClear | 在特定端点上清除,取消停止并重新启动 I/O 操作。 调用此调用向量时,该函数将检查环是否处于已暂停状态。 此呼叫矢量由 USBD 提供。 |
| hcdPipeConnect | 创建到特定 USB 设备上的端点的管道连接。 |
| hcdPipeDisconnect | 除去先前与特定 USB 设备上的端点建立的管道连接。 |
| hcdPipeHalt | 从主机控制器的角度停止一个管道。 所有暂挂 I/O 操作仍处于暂挂状态。 此呼叫矢量由 USBD 提供。 |
| hcdPipeIO | 在 USB 设备上执行 I/O 操作。 I/O 操作可以是以下类型的传输: 控制,批量,同步和中断。 |
| hcdPipeResetToggle | 将数据同步切换位重置为 DATA0。 此呼叫矢量由 USBD 提供。 |
| hcdPipeStatus | 从主机透视图中获取管道的状态。 此呼叫矢量由 USBD 提供。 |
| hcdShutdownComplete | 通知主机控制器驱动程序 usbdReqHCshutdown 请求已完成。 此呼叫矢量由 USBD 提供。 |
| hcdUnregisterHC | 从 USBD 取消注册主机控制器。 |
| usbdBusMap | 映射由主机控制器控制的总线的内存。 此调用向量由可扩展主机控制器驱动程序 (xHCD) 提供。 |
| usbdPostIOB | 重新创建 I/O 缓冲区。 此调用向量是由适配器驱动程序提供的。 |
| usbdReqHCrestart | 如果在适配器上检测到错误,并且从该错误恢复适配器驱动程序需要您重新启动适配器,那么会提供此调用。 |
| usbdReqHCshutdown | 此调用向量是在除去主机控制器期间提供的。 |
| usbdReqHCunregister | 适配器驱动程序的 CFG TERM 功能请求 USBD 注销主机控制器。 此调用向量是在除去主机控制器期间提供的。 |