USBD 协议驱动程序

用途

支持 USB 系统驱动程序 (USBD) 协议。

语法

#include <sys/usb.h>
#include <sys/usbdi.h>
#include <sys/hubClass.h>
#include <sys/hidClass.h>

描述

UUSBD 协议驱动程序是主机控制器与客户机驱动程序之间的层。 /dev/usb0 特殊文件提供了接口,以允许主机控制器与客户机驱动程序之间进行通信。 此驱动程序负责与相应的主机控制器进行设备通信。 设备连接,断开连接和重新连接是在此级别执行的。 此设备没有父代,并且该设备的 CuDv 条目由从 ConfigRules 字段调用的 /usr/lib/methods/startusb 脚本创建。

/usr/lib/drivers/usb/usbd 驱动程序实现 USB 协议, /usr/lib/methods/cfgusb 文件是 usbd 文件的配置方法。 USB 协议驱动程序更新特定于每个单独 USB 设备的速度 ODM 属性。 在 AIX® 配置期间枚举 USB 设备时,将更新速度。

与设备相关的子例程

UBD 协议驱动程序仅支持 opencloseioctl 子例程。 不支持 readwrite 子例程。

打开和关闭子例程

open 子例程将作为参数传入 open 系统调用的特定设备号与内部适配器设备结构相关联。 如果它找到适配器结构,那么它将验证相应的适配器设备是否已配置,并将状态设置为已打开。 否则,子例程将返回错误。

ioctl 子例程

针对 USBD 协议驱动程序的 ioctl 操作公开给内核和用户环境。

UUSBD ioctl 操作

以下 USBD ioctl 操作公开给用于打开特定 USB 逻辑设备的内核线程:

  • USBD_OPEN_DEVICE
  • USBD_OPEN_DEVICE_EXT

以下 USBD ioctl 操作向用户线程公开:

操作 描述
USBD_REGISTER_MULTI_HC 向 USB 系统驱动程序注册所有 USB 主机控制器。
USBD_REGISTER_SINGLE_HC 仅向 USB 系统驱动程序注册单个 USB 主机控制器。
USBD_ENUMERATE_DEVICE 获取已连接到主机控制器的 USB 逻辑设备 (不包括集线器) 的列表。
USBD_ENUMERATE_ALL 获取已连接至主机控制器的所有 USB 逻辑设备的列表。 
USBD_ENUMERATE_CFG 获取已连接到主机控制器的 USB 逻辑设备的列表以及客户机设备选择信息。
USBD_GET_DESCRIPTORS 获取逻辑设备的标准 USB 描述符。
USBD_CFG_CLIENT_UPDATE 更新客户机连接信息。 

USBD 错误情况摘要

适配器设备驱动程序的可能的 错误号 值如下所示:

描述
EACCES 当适配器具有一个或多个正在使用的设备时,尝试运行 openx 子例程。
EEXIST 设备已配置完毕。
EINVAL 参数无效,或者设备未打开。
EIO
  • 由于检测到错误,命令失败。
  • 设备驱动程序无法将代码置顶。
  • 内核服务失败或发生不可恢复的 I/O 错误。
ENOCONNECT 发生 USB 总线故障。
ENODEV 无法选择目标设备或目标设备未响应。
ENOMEM 由于内存量不足,因此无法完成该命令。
ENXIO 此适配器不支持所请求的 ioctl 操作。
EPERM 调用者不具有必需的权限。