主控制器驱动程序使用的 UCX 对象和句柄

UCX 扩展了 WDF 对象功能,以定义其自己的特定于 USB 的 UCX 对象。 UCX 使用这些对象将请求排队到任何基础主机控制器驱动程序。

总结

  • 主机控制器驱动程序使用 UCX 对象来处理与控制器、其根集线器和所有端点相关的操作。
  • UCX 对象由主机控制器驱动程序创建,每个对象的生存期由 UCX 管理。

重要的 API

UCX 扩展了 WDF 对象功能,以定义其自己的特定于 USB 的 UCX 对象。 UCX 使用这些对象将请求排队到任何基础主机控制器驱动程序。

有关 WDF 对象的更多详细信息,请参阅 框架对象简介

UCXCONTROLLER:主机控制器对象

表示由主机控制器驱动程序创建的主机控制器。 驱动程序必须为每个主机控制器实例仅创建一个主机控制器对象。 通常通过调用 UcxControllerCreate 方法在 EvtDriverDeviceAdd 回调中创建。

当主机控制器驱动程序创建对象时,驱动程序将注册由 UCX 调用的回调函数的实现。 驱动程序还应识别主机控制器连接的总线类型,例如 ACPI 或 PCI。 驱动程序还通过使用传递给 UcxControllerCreate 调用的 UCX_CONTROLLER_CONFIG 结构来提供主机控制器设备信息。

若要处理 I/O 请求,主机控制器驱动程序必须注册 GUID_DEVINTERFACE_USB_HOST_CONTROLLER 设备接口。 此驱动程序不需要实现此接口中定义的 IOCTL。 相反,UCX 客户端通过调用 UcxIoDeviceControl 将在此接口上收到的 IOCTL 请求传递给 UCX。

下面是与主机控制器对象关联的回调函数,这些函数由 UCX 调用。 这些函数必须由主机控制器驱动程序实现。

*EVT_UCX_CONTROLLER_USBDEVICE_ADD
当集线器驱动程序通过与根集线器和/或外部集线器的交互确定总线上有新设备时调用。

*EVT_UCX_CONTROLLER_QUERY_USB_CAPABILITY UCX
调用以收集有关 USB 主机控制器支持的各种功能的信息。

*EVT_UCX_CONTROLLER_RESET
由 UCX 调用以重置控制器硬件,以响应检测到的错误。

*EVT_UCX_CONTROLLER_GET_CURRENT_FRAMENUMBER
用于从主机控制器中检索当前帧编号,中心驱动程序使用它来计划时序传输。

UCXROOTHUB:根集线器对象

获取和控制主机控制器的根端口的状态。 主机控制器驱动程序通常在创建主机控制器对象后调用 UcxRootHubCreate 方法,在 EvtDriverDeviceAdd 回调中创建。 每个主机控制器实例只能有一个根集线器对象。 在 UcxRootHubCreate 调用中,驱动程序注册其回调实现。

EVT_UCX_ROOTHUB_GET_INFO
返回根集线器的 USB 2.0 和 USB 3.0 端口的数目。

EVT_UCX_ROOTHUB_GET_20PORT_INFO
返回有关根中心的 USB 2.0 或 USB 3.0 端口 (*EVT_UCX_ROOTHUB_GET_30PORT_INFO) 的信息。

创建并初始化根集线器对象后,集线器驱动程序通过发送中断和控制传输与根集线器端口交互。 UCX 通过调用主机控制器驱动程序实现的这些回调函数来帮助实现这些传输。

EVT_UCX_ROOTHUB_CONTROL_URB
处理 USB 集线器的功能控制请求。。

EVT_UCX_ROOTHUB_INTERRUPT_TX
处理有关已更改端口的信息的请求。

有关详细信息,请参阅主控制器驱动程序的根集线器回调函数

UCXUSBDEVICE:USB 设备对象

表示连接到总线的物理 USB 设备。 主机控制器驱动程序通常通过调用 UcxUsbDeviceCreate 方法在 EVT_UCX_CONTROLLER_USBDEVICE_ADD 回调中创建。

创建对象时,主机控制器驱动程序使用 UcxUsbDeviceCreate 调用注册其回调函数的实现。

这些回调函数旨在使控制器和驱动程序了解 USB 设备的当前状态。

EVT_UCX_USBDEVICE_ENABLE
准备控制器以执行到设备的默认端点的传输。

EVT_UCX_USBDEVICE_DISABLE
释放与设备及其默认端点关联的控制器资源。

EVT_UCX_USBDEVICE_ADDRESS
将地址编程到控制器中,并将 SET_ADDRESS 传输发送到设备,使其进入寻址状态。

EVT_UCX_USBDEVICE_ENDPOINTS_CONFIGURE
将非默认端点编程到控制器中,并/或释放其他非默认端点。

EVT_UCX_USBDEVICE_RESET
设备已重置的控制器通知,在这种情况下,驱动程序采取任何必要措施将控制器与 USB 设备同步。

EVT_UCX_USBDEVICE_UPDATE
通知控制器与设备相关的各种信息。

EVT_UCX_USBDEVICE_HUB_INFO
如果 UCXUSBDEVICE 句柄用于集线器设备,则通知集线器属性。

EVT_UCX_USBDEVICE_ENDPOINT_ADD
通知驱动程序为设备创建端点。 默认端点的 EVT_UCX_USBDEVICE_DEFAULT_ENDPOINT_ADD

当挂起的 USB 3.0 设备上的接口发出唤醒信号时,驱动程序应调用 UcxUsbDeviceRemoteWakeNotification 来通知 UCX。

创建对象后,对象的生存期由 UCX 管理,驱动程序不得删除该对象。

UCXENDPOINT:端点对象

表示 USB 设备对象上的端点。 端点对象由主机控制器在 EVT_UCX_USBDEVICE_DEFAULT_ENDPOINT_ADD EVT_UCX_USBDEVICE_ENDPOINT_ADD 回调期间创建。 创建端点对象时,驱动程序会注册其回调函数。

驱动程序还会为每个端点创建一个框架队列对象,并通过调用 UcxEndpointSetWdfIoQueue 将该队列的 WDFQUEUE 传递给 UCX。 创建端点后,对象及其关联的队列的生存期由 UCX 管理,驱动程序不得删除这些对象本身。

端点对象实现多个回调函数,使驱动程序能够协助 UCX 执行与端点相关的操作。

EVT_UCX_ENDPOINT_ABORT
中止与端点关联的队列。

EVT_UCX_ENDPOINT_OK_TO_CANCEL_TRANSFERS
通知控制器驱动程序,它可以在端点上完成取消的传输。

EVT_UCX_ENDPOINT_PURGE
完成端点上所有未完成的 I/O 请求。

EVT_UCX_ENDPOINT_START
开始与端点关联的队列。

EVT_UCX_ENDPOINT_STATIC_STREAMS_ADD
创建静态流。

EVT_UCX_ENDPOINT_RESET
通知驱动程序重置控制器的端点编程。

当主机控制器驱动程序在端点上收到 USB 3.0 无 Ping 响应错误时,驱动程序必须调用 UcxEndpointNoPingResponseError。 该调用会导致 USB 设备对象接收 EVT_UCX_USBDEVICE_UPDATE。 有关详细信息,请参阅 在主机控制器驱动程序中配置 USB 端点

UCXSTREAMS:流对象

代表通过单个端点连接设备的管道数量。 主机控制器驱动程序通过调用 UcxStaticStreamsCreateEVT_UCX_ENDPOINT_STATIC_STREAMS_ADD 回调中创建流对象。

UcxStaticStreamsCreate 调用期间,主机控制器驱动程序注册其回调函数。 对于特定的端点对象,驱动程序可以确定它是否已创建流对象,并通过调用 UcxEndpointGetStaticStreamsReferenced 返回 UCXSTREAMS 句柄。

创建对象后,驱动程序会为每个流创建一个框架队列对象,并通过调用 UcxStaticStreamsSetStreamInfo 将 WDFQUEUE 句柄发送到 UCX。

流对象为主机控制器提供了多个回调函数,以帮助 UCX 管理静态流。

EVT_UCX_ENDPOINT_STATIC_STREAMS_DISABLE
为端点的所有流发布控制器资源。

EVT_UCX_ENDPOINT_STATIC_STREAMS_ENABLE
为此端点启用所有流的控制器硬件。

对象的生存期和关联的队列由 UCX 管理,驱动程序不得删除这些对象。