ReactOS 0.4.17-dev-1037-g720d112
hubucx.h
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS USB 3 stack
3 * LICENSE: MIT (https://spdx.org/licenses/MIT)
4 * PURPOSE: Private communication between the hub driver and the USB controller extension
5 * COPYRIGHT: Copyright 2026 Justin Miller <justinmiller100@gmail.com>
6 */
7
8#pragma once
9
10#include <usbiodef.h>
11
12#ifdef __cplusplus
13extern "C" {
14#endif
15
16DEFINE_GUID(GUID_UCXHUB_STACK_INTERFACE,
17 0x4fb2b0e1, 0x5fdd, 0x4dab, 0xa6, 0x00, 0x5e, 0x15, 0x16, 0xbb, 0xd8, 0xa7);
18
19DEFINE_GUID(GUID_UCXHUB_PARENT_INTERFACE,
20 0xa9264c93, 0xeccd, 0x4b40, 0x92, 0x9b, 0xb3, 0x54, 0xf1, 0xe9, 0xa2, 0xdc);
21
22#define UCXHUB_FN_ADDRESS0_OWNERSHIP_ACQUIRE 0x401
23#define UCXHUB_FN_ROOTHUB_GET_INFO 0x402
24#define UCXHUB_FN_ROOTHUB_GET_20PORT_INFO 0x403
25#define UCXHUB_FN_ROOTHUB_GET_30PORT_INFO 0x404
26#define UCXHUB_FN_DEVICE_ENABLE 0x405
27#define UCXHUB_FN_DEVICE_RESET 0x406
28#define UCXHUB_FN_DEVICE_ADDRESS 0x407
29#define UCXHUB_FN_DEVICE_UPDATE 0x408
30#define UCXHUB_FN_DEVICE_HUB_INFO 0x409
31#define UCXHUB_FN_DEVICE_DISABLE 0x40A
32#define UCXHUB_FN_DEVICE_PURGE_IO 0x40B
33#define UCXHUB_FN_DEVICE_START_IO 0x40C
34#define UCXHUB_FN_ENDPOINTS_CONFIGURE 0x40D
35#define UCXHUB_FN_DEFAULT_ENDPOINT_UPDATE 0x40E
36#define UCXHUB_FN_ENDPOINT_RESET 0x40F
37#define UCXHUB_FN_GET_HUB_INFO 0x410
38#define UCXHUB_FN_QUERY_USB_CAPABILITY 0x412
39#define UCXHUB_FN_SET_FUNCTION_HANDLE_DATA 0x413
40#define UCXHUB_FN_DEVICE_TREE_PURGE_IO 0x414
41#define UCXHUB_FN_DEVICE_ABORT_IO 0x415
42#define UCXHUB_FN_GET_DUMP_DATA 0x501
43#define UCXHUB_FN_FREE_DUMP_DATA 0x502
44#define UCXHUB_FN_NOTIFY_FORWARD_PROGRESS 0x503
45
46#define UCXHUB_IOCTL(Function) \
47 CTL_CODE(FILE_DEVICE_USBEX, (Function), METHOD_NEITHER, FILE_ANY_ACCESS)
48
49#define IOCTL_UCXHUB_ADDRESS0_OWNERSHIP_ACQUIRE UCXHUB_IOCTL(UCXHUB_FN_ADDRESS0_OWNERSHIP_ACQUIRE)
50#define IOCTL_UCXHUB_ROOTHUB_GET_INFO UCXHUB_IOCTL(UCXHUB_FN_ROOTHUB_GET_INFO)
51#define IOCTL_UCXHUB_ROOTHUB_GET_20PORT_INFO UCXHUB_IOCTL(UCXHUB_FN_ROOTHUB_GET_20PORT_INFO)
52#define IOCTL_UCXHUB_ROOTHUB_GET_30PORT_INFO UCXHUB_IOCTL(UCXHUB_FN_ROOTHUB_GET_30PORT_INFO)
53#define IOCTL_UCXHUB_DEVICE_ENABLE UCXHUB_IOCTL(UCXHUB_FN_DEVICE_ENABLE)
54#define IOCTL_UCXHUB_DEVICE_RESET UCXHUB_IOCTL(UCXHUB_FN_DEVICE_RESET)
55#define IOCTL_UCXHUB_DEVICE_ADDRESS UCXHUB_IOCTL(UCXHUB_FN_DEVICE_ADDRESS)
56#define IOCTL_UCXHUB_DEVICE_UPDATE UCXHUB_IOCTL(UCXHUB_FN_DEVICE_UPDATE)
57#define IOCTL_UCXHUB_DEVICE_HUB_INFO UCXHUB_IOCTL(UCXHUB_FN_DEVICE_HUB_INFO)
58#define IOCTL_UCXHUB_DEVICE_DISABLE UCXHUB_IOCTL(UCXHUB_FN_DEVICE_DISABLE)
59#define IOCTL_UCXHUB_DEVICE_PURGE_IO UCXHUB_IOCTL(UCXHUB_FN_DEVICE_PURGE_IO)
60#define IOCTL_UCXHUB_DEVICE_START_IO UCXHUB_IOCTL(UCXHUB_FN_DEVICE_START_IO)
61#define IOCTL_UCXHUB_ENDPOINTS_CONFIGURE UCXHUB_IOCTL(UCXHUB_FN_ENDPOINTS_CONFIGURE)
62#define IOCTL_UCXHUB_DEFAULT_ENDPOINT_UPDATE UCXHUB_IOCTL(UCXHUB_FN_DEFAULT_ENDPOINT_UPDATE)
63#define IOCTL_UCXHUB_ENDPOINT_RESET UCXHUB_IOCTL(UCXHUB_FN_ENDPOINT_RESET)
64#define IOCTL_UCXHUB_GET_HUB_INFO UCXHUB_IOCTL(UCXHUB_FN_GET_HUB_INFO)
65#define IOCTL_UCXHUB_QUERY_USB_CAPABILITY UCXHUB_IOCTL(UCXHUB_FN_QUERY_USB_CAPABILITY)
66#define IOCTL_UCXHUB_SET_FUNCTION_HANDLE_DATA UCXHUB_IOCTL(UCXHUB_FN_SET_FUNCTION_HANDLE_DATA)
67#define IOCTL_UCXHUB_DEVICE_TREE_PURGE_IO UCXHUB_IOCTL(UCXHUB_FN_DEVICE_TREE_PURGE_IO)
68#define IOCTL_UCXHUB_DEVICE_ABORT_IO UCXHUB_IOCTL(UCXHUB_FN_DEVICE_ABORT_IO)
69#define IOCTL_UCXHUB_NOTIFY_FORWARD_PROGRESS UCXHUB_IOCTL(UCXHUB_FN_NOTIFY_FORWARD_PROGRESS)
70
71/* The two dump IOCTLs are buffered */
72#define IOCTL_UCXHUB_GET_DUMP_DATA \
73 CTL_CODE(FILE_DEVICE_USBEX, UCXHUB_FN_GET_DUMP_DATA, METHOD_BUFFERED, FILE_ANY_ACCESS)
74#define IOCTL_UCXHUB_FREE_DUMP_DATA \
75 CTL_CODE(FILE_DEVICE_USBEX, UCXHUB_FN_FREE_DUMP_DATA, METHOD_BUFFERED, FILE_ANY_ACCESS)
76
77/* Asynchronous port reset, FILE_DEVICE_UNKNOWN function 1004 */
78#define IOCTL_UCXHUB_RESET_PORT_ASYNC \
79 CTL_CODE(FILE_DEVICE_UNKNOWN, 1004, METHOD_NEITHER, FILE_ANY_ACCESS)
80
81/* Written into Parameters.Others.Argument1 of a completed async port reset */
83{
85 struct
86 {
90 };
92
93/*
94 * URB_HEADER.UsbdFlags is split between the two drivers: the low 24 bits
95 * belong to the controller extension, which clears them on entry, the high
96 * 8 bits to the hub.
97 */
98#define UCXHUB_URB_FLAGS_UCX_MASK 0x00FFFFFF
99#define UCXHUB_URB_FLAGS_HUB_MASK 0xFF000000
100#define UCXHUB_URB_FLAG_PEND_INTERRUPT_TX 0x80000000
101#define UCXHUB_URB_FLAG_ALLOW_LARGE_TRANSFER 0x40000000
102
103/* Handles the hub gives the controller extension to call it back with */
104DECLARE_HANDLE(UCXHUB_HUB_CONTEXT);
105DECLARE_HANDLE(UCXHUB_DEVICE_CONTEXT);
106
109{
113 UCXHUB_DEVICE_CONTEXT HubDeviceContext;
115
118{
122
125{
127 union
128 {
131 };
133
134/*
135 * The same answer as hubs that ask for the grown stack interface expect it:
136 * the union moved to an 8 byte boundary.
137 */
139{
142 union
143 {
147 };
149
151{
154
155/* QUERY_USB_CAPABILITY payload */
156#define UCXHUB_QUERY_CAPABILITY_VERSION 1
157
159{
167
168/* SET_FUNCTION_HANDLE_DATA input, in the system buffer */
170{
173 USBD_FUNCTION_HANDLE FunctionHandle;
176
177/* GET_DUMP_DATA input; the rest of the dump contract is between the hub and the HCD */
179{
185 UCXUSBDEVICE Device;
187
188/* NOTIFY_FORWARD_PROGRESS payload */
190{
194
196{
199 UCXUSBDEVICE Device;
204
205/*
206 * Forward progress work items. Opaque to the hub; it only allocates, queues,
207 * flushes and frees them through the stack interface.
208 */
209typedef struct _UCXHUB_WORKITEM *PUCXHUB_WORKITEM;
210
211#define UCXHUB_WORKITEM_NO_FLAGS 0
212#define UCXHUB_WORKITEM_FLAG_NEEDS_FLUSH 1
213
215{
219
220typedef
221_Function_class_(UCXHUB_WORKITEM_ROUTINE)
222VOID
223NTAPI
224UCXHUB_WORKITEM_ROUTINE(
228typedef UCXHUB_WORKITEM_ROUTINE *PUCXHUB_WORKITEM_ROUTINE;
229
230/* Stack interface, hub side callbacks */
231
232typedef
234VOID
235(NTAPI *PFN_UCXHUB_CLEAR_TT_BUFFER)(
236 _In_ UCXHUB_HUB_CONTEXT HubContext,
237 _In_ UCXHUB_DEVICE_CONTEXT DeviceContext,
238 _In_ UCXENDPOINT Endpoint,
241
242typedef
244VOID
245(NTAPI *PFN_UCXHUB_NO_PING_RESPONSE)(
246 _In_ UCXHUB_HUB_CONTEXT HubContext,
247 _In_ UCXHUB_DEVICE_CONTEXT DeviceContext);
248
249/* Stack interface, controller extension side */
250
251typedef
255(NTAPI *PFN_UCXHUB_DEVICE_CREATE)(
256 _In_ UCXUSBDEVICE Hub,
258 _Out_ UCXUSBDEVICE *Device);
259
260typedef
262VOID
263(NTAPI *PFN_UCXHUB_DEVICE_DELETE)(
264 _In_ UCXUSBDEVICE Hub,
265 _In_ UCXUSBDEVICE Device);
266
267typedef
269VOID
270(NTAPI *PFN_UCXHUB_DEVICE_DISCONNECT)(
271 _In_ UCXUSBDEVICE Hub,
273
274typedef
276VOID
277(NTAPI *PFN_UCXHUB_DEVICE_SET_PDO)(
278 _In_ UCXUSBDEVICE Hub,
279 _In_ UCXUSBDEVICE Device,
281
282typedef
286(NTAPI *PFN_UCXHUB_DEFAULT_ENDPOINT_CREATE)(
287 _In_ UCXUSBDEVICE Hub,
288 _In_ UCXUSBDEVICE Device,
290 _Out_ UCXENDPOINT *Endpoint);
291
292typedef
294VOID
295(NTAPI *PFN_UCXHUB_ADDRESS0_RELEASE)(
296 _In_ UCXUSBDEVICE Hub,
297 _In_ UCXUSBDEVICE Device);
298
299typedef
303(NTAPI *PFN_UCXHUB_ENDPOINT_CREATE)(
304 _In_ UCXUSBDEVICE Hub,
305 _In_ UCXUSBDEVICE Device,
309 _Out_ UCXENDPOINT *Endpoint);
310
311typedef
313VOID
314(NTAPI *PFN_UCXHUB_ENDPOINT_DELETE)(
315 _In_ UCXUSBDEVICE Hub,
316 _In_ UCXUSBDEVICE Device,
317 _In_ UCXENDPOINT Endpoint);
318
319typedef
321VOID
322(NTAPI *PFN_UCXHUB_ENDPOINT_EXPOSED)(
323 _In_ UCXENDPOINT Endpoint);
324
325typedef
328 _In_ UCXENDPOINT Endpoint);
329
330typedef
333 _In_ UCXENDPOINT Endpoint);
334
335typedef
338 _In_ UCXUSBDEVICE Hub,
341
342typedef
346
347typedef
354
355typedef
357VOID
358(NTAPI *PFN_UCXHUB_WORKITEM_FLUSH)(
360
361typedef
363VOID
364(NTAPI *PFN_UCXHUB_CLEAR_TT_BUFFER_COMPLETE)(
365 _In_ UCXUSBDEVICE Hub,
366 _In_ UCXENDPOINT Endpoint);
367
368typedef
371 _In_ UCXUSBDEVICE Device);
372
373typedef
376(NTAPI *PFN_UCXHUB_STREAMS_SUPPORTED)(
377 _In_ UCXUSBDEVICE Hub);
378
379typedef
382(NTAPI *PFN_UCXHUB_CONTROLLER_STOP_IDLE)(
383 _In_ UCXUSBDEVICE Hub,
385
386typedef
388VOID
389(NTAPI *PFN_UCXHUB_CONTROLLER_RESUME_IDLE)(
390 _In_ UCXUSBDEVICE Hub,
392
393typedef
395VOID
396(NTAPI *PFN_UCXHUB_CONTROLLER_GET_INFO)(
397 _In_ UCXUSBDEVICE Hub,
399
401typedef
404 _In_ UCXUSBDEVICE Device);
405
407typedef
409VOID
410(NTAPI *PFN_UCXHUB_ENDPOINT_SET_PRIORITY)(
411 _In_ UCXUSBDEVICE Hub,
412 _In_ UCXUSBDEVICE Device,
413 _In_ UCXENDPOINT Endpoint,
415
416/* Stack interface versions. Version 1 later grew a slot; see the size table below. */
417#define UCXHUB_STACK_INTERFACE_VERSION_1 1000
418#define UCXHUB_STACK_INTERFACE_VERSION_2 2000
419#define UCXHUB_STACK_INTERFACE_VERSION_3 3000
420
421/*
422 * Everything the hub needs from the controller extension. The hub fills Hub,
423 * HubContext, ClearTtBuffer and NoPingResponse; the rest is filled by the
424 * controller extension, up to what the size and version requested allow.
425 */
427{
429
430 UCXUSBDEVICE Hub;
431 UCXHUB_HUB_CONTEXT HubContext;
432 PFN_UCXHUB_CLEAR_TT_BUFFER ClearTtBuffer;
433
434 PFN_UCXHUB_DEVICE_CREATE DeviceCreate;
435 PFN_UCXHUB_DEVICE_DELETE DeviceDelete;
436 PFN_UCXHUB_DEVICE_DISCONNECT DeviceDisconnect;
437 PFN_UCXHUB_DEVICE_SET_PDO DeviceSetPdo;
438 PFN_UCXHUB_DEFAULT_ENDPOINT_CREATE CreateControlEndpoint;
439 PFN_UCXHUB_ADDRESS0_RELEASE Address0Release;
440 PFN_UCXHUB_ENDPOINT_CREATE EndpointCreate;
441 PFN_UCXHUB_ENDPOINT_DELETE EndpointDelete;
442 PFN_UCXHUB_ENDPOINT_EXPOSED MarkEndpointClientOwned;
449 PFN_UCXHUB_WORKITEM_FLUSH WorkItemFlush;
450 PFN_UCXHUB_CLEAR_TT_BUFFER_COMPLETE ClearTtBufferComplete;
451 PFN_UCXHUB_NO_PING_RESPONSE NoPingResponse;
453 PFN_UCXHUB_STREAMS_SUPPORTED StreamsSupported;
454 PFN_UCXHUB_CONTROLLER_STOP_IDLE BlockControllerIdle;
455 PFN_UCXHUB_CONTROLLER_RESUME_IDLE AllowControllerIdle;
456 PFN_UCXHUB_CONTROLLER_GET_INFO QueryControllerBus;
457
458 /* Present in version 1 once the size covers it */
460
461 /* Version 2 */
462 PFN_UCXHUB_ENDPOINT_SET_PRIORITY EndpointSetPriority;
463
464 /* Version 3: endpoint create with an extra descriptor, not provided */
467
468/* Size of the original version 1 layout, before DeviceGetTimestamp was added; still accepted */
469#define UCXHUB_STACK_INTERFACE_SIZE_ORIGINAL \
470 FIELD_OFFSET(UCXHUB_STACK_INTERFACE, DeviceGetTimestamp)
471
472/* Parent interface, answered by whoever is a hub's parent */
473
474typedef
477(NTAPI *PFN_UCXHUB_WAS_HUB_RESET)(
479
480typedef
483(NTAPI *PFN_UCXHUB_WAS_PROGRAMMING_LOST)(
485
486typedef
488VOID
489(NTAPI *PFN_UCXHUB_GET_SYMBOLIC_NAME)(
492
493#define UCXHUB_PARENT_INTERFACE_VERSION 1013
494
495/*
496 * Current layout. The original layout lacks the ULONG after the resume
497 * callbacks; UCXHUB_PARENT_INTERFACE_ORIGINAL below describes it.
498 */
500{
503 UCXUSBDEVICE Hub;
507 PFN_UCXHUB_WAS_HUB_RESET ParentResetDuringResume;
508 PFN_UCXHUB_WAS_PROGRAMMING_LOST ParentLostStateDuringResume;
513 PFN_UCXHUB_GET_SYMBOLIC_NAME QueryHubLinkName;
514 USB_TOPOLOGY_ADDRESS HubTopologyAddress;
517
519{
522 UCXUSBDEVICE Hub;
526 PFN_UCXHUB_WAS_HUB_RESET ParentResetDuringResume;
527 PFN_UCXHUB_WAS_PROGRAMMING_LOST ParentLostStateDuringResume;
531 PFN_UCXHUB_GET_SYMBOLIC_NAME QueryHubLinkName;
532 USB_TOPOLOGY_ADDRESS HubTopologyAddress;
535
536/* Tunnel state of a root port as the hub and the HCD exchange it */
537#define UCXHUB_TUNNEL_STATE_NOT_ANSWERED 0
538#define UCXHUB_TUNNEL_STATE_NO_INFORMATION 1
539#define UCXHUB_TUNNEL_STATE_TUNNELED 2
540#define UCXHUB_TUNNEL_STATE_NATIVE 3
541#define UCXHUB_TUNNEL_STATE_UNKNOWN 4
542
543/*
544 * The HCD answers UpdateTunnelState of USBDEVICE_UPDATE in the BOOLEAN the
545 * public header calls Reserved and in the padding byte right after it.
546 */
548{
552
555NTAPI
558{
559 return (PUCXHUB_UPDATE_TUNNEL_ANSWER)&Update->Reserved;
560}
561
562#ifdef _WIN64
563C_ASSERT(FIELD_OFFSET(UCXHUB_STACK_INTERFACE, QueryControllerBus) == 0xE8);
564C_ASSERT(FIELD_OFFSET(UCXHUB_STACK_INTERFACE, DeviceGetTimestamp) == 0xF0);
565C_ASSERT(sizeof(UCXHUB_STACK_INTERFACE) == 0x108);
566C_ASSERT(FIELD_OFFSET(UCXHUB_PARENT_INTERFACE, TunnelState) == 0x48);
567C_ASSERT(FIELD_OFFSET(UCXHUB_PARENT_INTERFACE, HubTopologyAddress) == 0x68);
568C_ASSERT(sizeof(UCXHUB_PARENT_INTERFACE) == 0x90);
570C_ASSERT(sizeof(UCXHUB_QUERY_CAPABILITY) == 40);
571C_ASSERT(sizeof(UCXHUB_ROOTHUB_INFO) == 24);
574C_ASSERT(sizeof(USBDEVICE_UPDATE) == 0x48);
575#else
582C_ASSERT(sizeof(USBDEVICE_UPDATE) == 0x30);
583#endif
588
589#ifdef __cplusplus
590}
591#endif
#define VOID
Definition: acefi.h:82
unsigned char BOOLEAN
Definition: actypes.h:127
@ Update
Definition: registry.c:565
_In_ D3DDDI_VIDEO_PRESENT_TARGET_ID _In_ ULONG _In_ ULONG Flags
Definition: dispmprt.h:245
#define NTSTATUS
Definition: precomp.h:19
#define _IRQL_requires_max_(irql)
Definition: driverspecs.h:230
#define PASSIVE_LEVEL
Definition: env_spec_w32.h:693
#define DISPATCH_LEVEL
Definition: env_spec_w32.h:696
_In_ UCXHUB_DEVICE_CONTEXT _In_ UCXENDPOINT _In_ ULONG _In_ ULONG TtPortNumber
Definition: hubucx.h:240
struct _UCXHUB_PARENT_INTERFACE UCXHUB_PARENT_INTERFACE
_Must_inspect_result_ _In_ PUCXHUB_DEVICE_CREATE_INFO _Out_ UCXUSBDEVICE * Device
Definition: hubucx.h:258
struct _UCXHUB_FORWARD_PROGRESS_PIPE * PUCXHUB_FORWARD_PROGRESS_PIPE
struct _UCXHUB_STACK_INTERFACE * PUCXHUB_STACK_INTERFACE
_In_opt_ PVOID Context
Definition: hubucx.h:226
struct _UCXHUB_DEVICE_CREATE_INFO UCXHUB_DEVICE_CREATE_INFO
#define UCXHUB_STACK_INTERFACE_SIZE_ORIGINAL
Definition: hubucx.h:469
struct _UCXHUB_FUNCTION_DATA UCXHUB_FUNCTION_DATA
_Must_inspect_result_ _In_ UCXUSBDEVICE _In_ ULONG MaxPacketSize
Definition: hubucx.h:289
UCXHUB_WORKITEM_ROUTINE * PUCXHUB_WORKITEM_ROUTINE
Definition: hubucx.h:228
VOID(NTAPI * PFN_UCXHUB_WORKITEM_ENQUEUE)(_In_ PUCXHUB_WORKITEM WorkItem, _In_ PUCXHUB_WORKITEM_ROUTINE Routine, _In_opt_ PVOID Context, _In_ UCXHUB_WORKITEM_ENQUEUE_OPTIONS Options)
Definition: hubucx.h:349
struct _UCXHUB_WORKITEM * PUCXHUB_WORKITEM
Definition: hubucx.h:209
_In_ UCXUSBDEVICE _In_ UCXENDPOINT _In_ ULONG Priority
Definition: hubucx.h:414
struct _UCXHUB_PARENT_INTERFACE_ORIGINAL * PUCXHUB_PARENT_INTERFACE_ORIGINAL
ULONG(NTAPI * PFN_UCXHUB_ENDPOINT_MAX_TRANSFER)(_In_ UCXENDPOINT Endpoint)
Definition: hubucx.h:332
_Must_inspect_result_ _IRQL_requires_(PASSIVE_LEVEL) NTSTATUS(NTAPI *PFN_UCXHUB_DEVICE_CREATE)(_In_ UCXUSBDEVICE Hub
Definition: hubucx.h:253
BOOLEAN(NTAPI * PFN_UCXHUB_IS_DEVICE_DISCONNECTED)(_In_ UCXUSBDEVICE Device)
Definition: hubucx.h:370
USBD_PIPE_HANDLE(NTAPI * PFN_UCXHUB_ENDPOINT_PIPE_HANDLE)(_In_ UCXENDPOINT Endpoint)
Definition: hubucx.h:327
_Must_inspect_result_ _In_ UCXUSBDEVICE _In_reads_bytes_(DescriptorBufferLength) PUSB_ENDPOINT_DESCRIPTOR Descriptor
Definition: hubucx.h:306
_In_ UCXHUB_DEVICE_CONTEXT DeviceContext
Definition: hubucx.h:237
ULONG64(NTAPI * PFN_UCXHUB_DEVICE_GET_TIMESTAMP)(_In_ UCXUSBDEVICE Device)
Definition: hubucx.h:403
struct _UCXHUB_DUMP_DEVICE_INFO * PUCXHUB_DUMP_DEVICE_INFO
union _UCXHUB_RESET_FLAGS * PUCXHUB_RESET_FLAGS
struct _UCXHUB_FORWARD_PROGRESS_INFO UCXHUB_FORWARD_PROGRESS_INFO
struct _UCXHUB_CONTROLLER_INFO_V2 UCXHUB_CONTROLLER_INFO_V2
struct _UCXHUB_CONTROLLER_INFO UCXHUB_CONTROLLER_INFO
struct _UCXHUB_STOP_IDLE_CONTEXT * PUCXHUB_STOP_IDLE_CONTEXT
PUCXHUB_WORKITEM(NTAPI * PFN_UCXHUB_WORKITEM_ALLOCATE)(_In_ UCXUSBDEVICE Hub, _In_ PDEVICE_OBJECT DeviceObject, _In_ ULONG Flags)
Definition: hubucx.h:337
_Must_inspect_result_ _In_ UCXUSBDEVICE _In_ ULONG _In_opt_ PUSB_SUPERSPEED_ENDPOINT_COMPANION_DESCRIPTOR Companion
Definition: hubucx.h:308
_In_ PUNICODE_STRING SymbolicLinkName
Definition: hubucx.h:491
struct _UCXHUB_ROOTHUB_INFO UCXHUB_ROOTHUB_INFO
struct _UCXHUB_FORWARD_PROGRESS_PIPE UCXHUB_FORWARD_PROGRESS_PIPE
_Out_ PUCXHUB_CONTROLLER_INFO ControllerInfo
Definition: hubucx.h:398
struct _UCXHUB_QUERY_CAPABILITY * PUCXHUB_QUERY_CAPABILITY
struct _UCXHUB_CONTROLLER_INFO_V2 * PUCXHUB_CONTROLLER_INFO_V2
struct _UCXHUB_DEVICE_CREATE_INFO * PUCXHUB_DEVICE_CREATE_INFO
_In_opt_ PVOID _In_ PUCXHUB_WORKITEM WorkItem
Definition: hubucx.h:227
_In_ UCXHUB_DEVICE_CONTEXT _In_ UCXENDPOINT Endpoint
Definition: hubucx.h:238
struct _UCXHUB_PARENT_INTERFACE_ORIGINAL UCXHUB_PARENT_INTERFACE_ORIGINAL
_Inout_ PUCXHUB_STOP_IDLE_CONTEXT StopIdleContext
Definition: hubucx.h:384
enum _UCXHUB_WORKITEM_ENQUEUE_OPTIONS UCXHUB_WORKITEM_ENQUEUE_OPTIONS
_In_ UCXHUB_DEVICE_CONTEXT _In_ UCXENDPOINT _In_ ULONG EndpointNumber
Definition: hubucx.h:239
struct _UCXHUB_PARENT_INTERFACE * PUCXHUB_PARENT_INTERFACE
struct _UCXHUB_DUMP_DEVICE_INFO UCXHUB_DUMP_DEVICE_INFO
_Must_inspect_result_ _In_ PUCXHUB_DEVICE_CREATE_INFO CreateInfo
Definition: hubucx.h:257
_In_ ULONG PortNumber
Definition: hubucx.h:272
struct _UCXHUB_UPDATE_TUNNEL_ANSWER * PUCXHUB_UPDATE_TUNNEL_ANSWER
struct _UCXHUB_STOP_IDLE_CONTEXT UCXHUB_STOP_IDLE_CONTEXT
FORCEINLINE PUCXHUB_UPDATE_TUNNEL_ANSWER NTAPI UcxHubUpdateTunnelAnswer(_In_ PUSBDEVICE_UPDATE Update)
Definition: hubucx.h:556
_UCXHUB_WORKITEM_ENQUEUE_OPTIONS
Definition: hubucx.h:215
@ UcxHubWorkItemForwardProgressNotRequired
Definition: hubucx.h:217
@ UcxHubWorkItemDefault
Definition: hubucx.h:216
struct _UCXHUB_QUERY_CAPABILITY UCXHUB_QUERY_CAPABILITY
struct _UCXHUB_FORWARD_PROGRESS_INFO * PUCXHUB_FORWARD_PROGRESS_INFO
struct _UCXHUB_CONTROLLER_INFO * PUCXHUB_CONTROLLER_INFO
_Must_inspect_result_ _In_ UCXUSBDEVICE _In_ ULONG DescriptorBufferLength
Definition: hubucx.h:307
_In_ UCXUSBDEVICE _In_ PDEVICE_OBJECT Pdo
Definition: hubucx.h:280
struct _UCXHUB_STACK_INTERFACE UCXHUB_STACK_INTERFACE
VOID(NTAPI * PFN_UCXHUB_WORKITEM_DELETE)(_In_ PUCXHUB_WORKITEM WorkItem)
Definition: hubucx.h:344
struct _UCXHUB_FUNCTION_DATA * PUCXHUB_FUNCTION_DATA
struct _UCXHUB_UPDATE_TUNNEL_ANSWER UCXHUB_UPDATE_TUNNEL_ANSWER
union _UCXHUB_RESET_FLAGS UCXHUB_RESET_FLAGS
struct _UCXHUB_ROOTHUB_INFO * PUCXHUB_ROOTHUB_INFO
#define C_ASSERT(e)
Definition: intsafe.h:73
#define DECLARE_HANDLE(name)
Definition: mimeole.idl:23
unsigned __int64 ULONG64
Definition: imports.h:198
#define _Inout_
Definition: no_sal2.h:162
#define _Must_inspect_result_
Definition: no_sal2.h:62
#define _Out_
Definition: no_sal2.h:160
#define _In_
Definition: no_sal2.h:158
#define _In_opt_
Definition: no_sal2.h:212
#define _Function_class_(n)
Definition: no_sal2.h:398
#define BOOLEAN
Definition: pedump.c:73
unsigned short USHORT
Definition: pedump.c:61
#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8)
Definition: guiddef.h:68
_In_ PVOID Context
Definition: storport.h:2269
UCX_CONTROLLER_PARENT_BUS_TYPE Type
Definition: hubucx.h:140
UCX_CONTROLLER_PCI_INFORMATION Pci
Definition: hubucx.h:144
UCX_CONTROLLER_ACPI_INFORMATION Acpi
Definition: hubucx.h:145
UCX_CONTROLLER_ACPI_INFORMATION Acpi
Definition: hubucx.h:130
UCX_CONTROLLER_PARENT_BUS_TYPE Type
Definition: hubucx.h:126
UCX_CONTROLLER_PCI_INFORMATION Pci
Definition: hubucx.h:129
USB_DEVICE_SPEED DeviceSpeed
Definition: hubucx.h:111
UCXHUB_DEVICE_CONTEXT HubDeviceContext
Definition: hubucx.h:113
UCXUSBDEVICE Device
Definition: hubucx.h:185
UCXHUB_FORWARD_PROGRESS_PIPE Pipes[ANYSIZE_ARRAY]
Definition: hubucx.h:202
USBD_PIPE_HANDLE PipeHandle
Definition: hubucx.h:191
PDEVICE_OBJECT PhysicalDeviceObject
Definition: hubucx.h:174
USBD_FUNCTION_HANDLE FunctionHandle
Definition: hubucx.h:173
USB_TOPOLOGY_ADDRESS HubTopologyAddress
Definition: hubucx.h:532
PFN_UCXHUB_GET_SYMBOLIC_NAME QueryHubLinkName
Definition: hubucx.h:531
USB_DEVICE_SPEED HubSpeed
Definition: hubucx.h:523
PFN_UCXHUB_WAS_HUB_RESET ParentResetDuringResume
Definition: hubucx.h:526
PFN_UCXHUB_WAS_PROGRAMMING_LOST ParentLostStateDuringResume
Definition: hubucx.h:527
BOOLEAN IsEnhancedSuperSpeed
Definition: hubucx.h:506
PFN_UCXHUB_WAS_HUB_RESET ParentResetDuringResume
Definition: hubucx.h:507
PFN_UCXHUB_WAS_PROGRAMMING_LOST ParentLostStateDuringResume
Definition: hubucx.h:508
PFN_UCXHUB_GET_SYMBOLIC_NAME QueryHubLinkName
Definition: hubucx.h:513
USB_DEVICE_SPEED HubSpeed
Definition: hubucx.h:504
UCXUSBDEVICE Hub
Definition: hubucx.h:503
USB_TOPOLOGY_ADDRESS HubTopologyAddress
Definition: hubucx.h:514
ROOTHUB_INFO Info
Definition: hubucx.h:119
USBD_PIPE_HANDLE InterruptPipe
Definition: hubucx.h:120
PFN_UCXHUB_DEVICE_CREATE DeviceCreate
Definition: hubucx.h:434
PFN_UCXHUB_IS_DEVICE_DISCONNECTED IsDeviceDisconnected
Definition: hubucx.h:452
PFN_UCXHUB_ENDPOINT_MAX_TRANSFER EndpointGetMaxTransferSize
Definition: hubucx.h:444
PFN_UCXHUB_CONTROLLER_STOP_IDLE BlockControllerIdle
Definition: hubucx.h:454
PFN_UCXHUB_ENDPOINT_EXPOSED MarkEndpointClientOwned
Definition: hubucx.h:442
UCXHUB_HUB_CONTEXT HubContext
Definition: hubucx.h:431
PFN_UCXHUB_WORKITEM_ALLOCATE WorkItemAllocate
Definition: hubucx.h:446
PFN_UCXHUB_WORKITEM_FLUSH WorkItemFlush
Definition: hubucx.h:449
PFN_UCXHUB_ENDPOINT_CREATE EndpointCreate
Definition: hubucx.h:440
PFN_UCXHUB_DEVICE_DISCONNECT DeviceDisconnect
Definition: hubucx.h:436
PFN_UCXHUB_DEVICE_GET_TIMESTAMP DeviceGetTimestamp
Definition: hubucx.h:459
PFN_UCXHUB_CONTROLLER_GET_INFO QueryControllerBus
Definition: hubucx.h:456
PFN_UCXHUB_CLEAR_TT_BUFFER ClearTtBuffer
Definition: hubucx.h:432
PFN_UCXHUB_ENDPOINT_PIPE_HANDLE EndpointGetPipeHandle
Definition: hubucx.h:443
PFN_UCXHUB_DEFAULT_ENDPOINT_CREATE CreateControlEndpoint
Definition: hubucx.h:438
PFN_UCXHUB_CONTROLLER_RESUME_IDLE AllowControllerIdle
Definition: hubucx.h:455
PFN_UCXHUB_NO_PING_RESPONSE NoPingResponse
Definition: hubucx.h:451
PFN_UCXHUB_WORKITEM_DELETE WorkItemDelete
Definition: hubucx.h:447
UCXUSBDEVICE Hub
Definition: hubucx.h:430
PFN_UCXHUB_ENDPOINT_SET_PRIORITY EndpointSetPriority
Definition: hubucx.h:462
PFN_UCXHUB_ENDPOINT_DELETE EndpointDelete
Definition: hubucx.h:441
PFN_UCXHUB_STREAMS_SUPPORTED StreamsSupported
Definition: hubucx.h:453
PFN_UCXHUB_WORKITEM_ENQUEUE WorkItemEnqueue
Definition: hubucx.h:448
PFN_UCXHUB_ADDRESS0_RELEASE Address0Release
Definition: hubucx.h:439
PFN_UCXHUB_CLEAR_TT_BUFFER_COMPLETE ClearTtBufferComplete
Definition: hubucx.h:450
PFN_UCXHUB_DEVICE_SET_PDO DeviceSetPdo
Definition: hubucx.h:437
PFN_UCXHUB_DEVICE_DELETE DeviceDelete
Definition: hubucx.h:435
BOOLEAN PowerReferenceAcquired
Definition: hubucx.h:152
unsigned char UCHAR
Definition: typedefs.h:53
#define FIELD_OFFSET(t, f)
Definition: typedefs.h:255
#define ANYSIZE_ARRAY
Definition: typedefs.h:46
#define NTAPI
Definition: typedefs.h:36
uint32_t ULONG
Definition: typedefs.h:59
WDF_EXTERN_C_START enum _UCX_CONTROLLER_PARENT_BUS_TYPE UCX_CONTROLLER_PARENT_BUS_TYPE
ULONG PortPowerInterrupted
Definition: hubucx.h:88
ULONG HostContextLost
Definition: hubucx.h:87
enum _USB_DEVICE_SPEED USB_DEVICE_SPEED
PVOID USBD_PIPE_HANDLE
Definition: usb.h:240
_In_ PDEVICE_OBJECT DeviceObject
Definition: wdfdevice.h:2061
_In_ PWDFDEVICE_INIT _In_ PWDF_REMOVE_LOCK_OPTIONS Options
Definition: wdfdevice.h:3540
_Must_inspect_result_ _In_ WDFIORESLIST _In_ PIO_RESOURCE_DESCRIPTOR Descriptor
Definition: wdfresource.h:342
#define FORCEINLINE
Definition: wdftypes.h:67
_Reserved_ PVOID Reserved
Definition: winddi.h:3974