增强型主机控制器适配器设备驱动程序
用途
支持适配器设备驱动程序的增强型主机控制器接口 (EHCI) 规范。
语法
#include <sys/hcdi.h>
#include <sys/usbdi.h>
#include <sys/usb.h>描述
/dev/usbhcn 特殊文件提供了允许访问通用串行总线 (USB) 主机控制器适配器设备的接口。 这些文件用于管理适配器资源,以便多个 USB 客户机驱动程序和 USB 系统 (或协议驱动程序) 可以同时访问同一 USB 主机控制器适配器上的 USB 设备。
在 USB 2.0 设计中, USB Implementer Forum (USB-IF) 实现了单个规范 (称为 EHCI) ,仅支持高速数据传输。 基于 EHCI 的适配器是多功能外围组件互连 (PCI) 设备,由称为配套控制器的虚拟主机控制器功能组成,以支持与 USB 1.0 和 1.1 设备的开放式主机控制器接口 (OHCI) 连接。 EHCI 适配器的对象数据管理器 (ODM) alt_usb_ctrl 属性提供配套 OHCI 控制器的位置值。
适配器设备驱动程序入口点子例程
USB 适配器设备驱动程序仅支持 open, close, ioctl和 config 入口点。 不支持 read 和 write 入口点。
打开和关闭子例程
open 子例程将指定为 open 系统调用的参数的设备号与内部适配器设备结构相关联。 如果 open 子例程找到适配器结构,那么它将验证是否配置了相应的适配器设备并且未将其标记为不活动。 如果 open 子例程找不到适配器结构,那么会返回错误。 如果启用了增强型错误处理 (EEH) 功能,那么在处理 EEH 事件时, open 子例程不会访问设备。
ioctl 子例程
ioctl 子操作:| 操作 | 描述 |
|---|---|
| hcd_register_hc | 注册 USB 系统 (或协议驱动程序) 与主机控制器驱动程序之间的调用向量。 在注册呼叫向量后, USB 系统 (或协议驱动程序) 与主机控制器驱动程序之间的所有进一步通信都由这些向量处理。 |
| hcd_request_companions | 请求有关相伴 OHCI 主机控制器的端口路由信息。 |
EHCI 适配器设备驱动程序返回的错误情况的摘要
以下是 EHCI 适配器设备驱动程序的 USBstatus 返回值的可能值:
| 错误代码 | 描述 |
|---|---|
| USBD_ABORTED | 关联的 IRP 已结束。 |
| USBD_ABORTING | 关联的 I/O 请求包 (IRP) 失败。 |
| USBD_ACTIVE | 逻辑管道处于运行状态,并且未停止。 |
| USBD_BADHANDLE | 通过调用向量接口传递的作为参数的句柄无效。 |
| USBD_BANDWIDTH | 由于带宽需求,逻辑管道连接已失败。 |
| USBD_CONNECT | 该逻辑管道已连接。 |
| USBD_DATA | 来自设备的响应无效。 |
| 用户断开连接 | 与事务关联的设备已断开连接或已移除。 |
| USBD_ERROR | 一般错误条件。 |
| 已暂停的用户 | 与该事务关联的逻辑管道已暂停。 |
| USBD_POWER | 设备超出了电源预算。 |
| USBD_SPEED | 由于设备速度不匹配,端口重置操作已失败。 |
| USBD_STALL | 与该事务关联的逻辑管道延迟。 |
| USBD_TIMEOUT | 该 I/O 操作已超时。 |
调用向量
每当运行 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 操作。 当调用此调用向量时,该函数会检查环是否处于已停止状态。 |
| 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 注销主机控制器。 此调用向量是在除去主机控制器期间提供的。 |