UCX 扩展 WDF 对象功能,以定义其自己的特定于 USB 的 UCX 对象。 UCX 使用这些对象将请求排队到任何基础主机控制器驱动程序。
概要
- 主机控制器驱动程序使用 UCX 对象来处理与控制器、其根集线器和所有终结点相关的操作。
- UCX 对象由主机控制器驱动程序创建,每个对象的生存期由 UCX 管理。
重要 API
UCX 扩展 WDF 对象功能,以定义其自己的特定于 USB 的 UCX 对象。 UCX 使用这些对象将请求排队到任何底层主机控制器驱动程序。
有关 WDF 对象的更多详细信息,请参阅 框架对象简介。
UCXCONTROLLER:主机控制器对象
表示由主机控制器驱动程序创建的主机控制器。 驱动程序每个主机控制器实例只能创建一个主机控制器对象。 通常通过调用 UcxControllerCreate 方法在 EvtDriverDeviceAdd 回调中创建。
当主机控制器驱动程序创建对象时,驱动程序将注册由 UCX 调用的回调函数的实现。 驱动程序还应识别主机控制器连接的总线类型,例如 ACPI 或 PCI。 驱动程序还通过使用 UCX_CONTROLLER_CONFIG 结构传递给 UcxControllerCreate 调用来提供主机控制器设备信息。
若要处理 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:Endpoint 对象
表示 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:流对象
表示通过单个终结点连接到设备的多个管道。 主机控制器驱动程序通过调用 UcxStaticStreamsCreate 在EVT_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 管理,驱动程序不得删除这些对象。