ReactOS 0.4.17-dev-1281-g065abb3
clientxrb.h File Reference
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  UcxXrbPreamble
 

Macros

#define UCX_XRB_SIGNATURE   0x2E425258
 
#define UCX_XRB_KIND_PLAIN   0xAABB0000
 
#define UCX_XRB_KIND_CONFIG   0xAABB0001
 
#define UCX_XRB_KIND_ALT_SETTING   0xAABB0002
 
#define UCX_XRB_KIND_ISO_PACKETS   0xAABB0003
 
#define UCX_XRB_IDLE   0xABCD0000
 
#define UCX_XRB_IN_FLIGHT   0xABCD0001
 
#define UCX_BUGCHECK_USB3   0x144
 
#define UCX_USB3_ACTIVE_URB_REUSED   0x1
 
#define UCX_USB3_XRB_CORRUPTED   0x3
 
#define UCX_USB3_STREAMS_IRQL   0x800
 
#define UCX_USB3_STREAMS_NOT_GRANTED   0x801
 
#define UCX_USB3_STREAMS_BAD_COUNT   0x802
 
#define UCX_USB3_STREAMS_OPEN   0x803
 
#define UCX_USB3_HANDLE_LEAKED   0x804
 
#define UCX_USB3_CHAINED_MDL   0x806
 

Functions

 C_ASSERT (sizeof(UcxXrbPreamble)==0x30)
 
 C_ASSERT (FIELD_OFFSET(UcxXrbPreamble, Signature)==sizeof(UcxXrbPreamble) - sizeof(ULONG))
 
FORCEINLINE UcxXrbPreamble *NTAPI UcxXrbFromUrb (_In_ PURB Urb)
 
FORCEINLINE PURB NTAPI UcxUrbFromXrb (_In_ UcxXrbPreamble *Xrb)
 
FORCEINLINE BOOLEAN NTAPI UcxIsXrbIrp (_In_ PIRP Irp, _In_ PURB Urb)
 
FORCEINLINE VOID NTAPI UcxXrbMarkInactive (_In_ PURB Urb)
 
NTSTATUS NTAPI UcxProcessSubmitUrb (_In_ WDFDEVICE RootHubPdo, _In_ PIRP Irp)
 
NTSTATUS NTAPI UcxCompleteUrb (_In_ PIRP Irp, _In_ PURB Urb, _In_ NTSTATUS Status, _In_ USBD_STATUS UsbdStatus)
 
VOID NTAPI UcxCompleteUrbAtDispatch (_In_ PIRP Irp, _In_ PURB Urb, _In_ NTSTATUS Status, _In_ USBD_STATUS UsbdStatus)
 
VOID NTAPI UcxCompleteHeldUrbIrp (_In_ PIRP Irp)
 
NTSTATUS NTAPI UcxForwardStreamsUrb (_In_ WDFDEVICE RootHubPdo, _In_ PIRP Irp, _In_ PURB Urb, _In_ UcxController *Controller)
 

Macro Definition Documentation

◆ UCX_BUGCHECK_USB3

#define UCX_BUGCHECK_USB3   0x144

Definition at line 22 of file clientxrb.h.

◆ UCX_USB3_ACTIVE_URB_REUSED

#define UCX_USB3_ACTIVE_URB_REUSED   0x1

Definition at line 23 of file clientxrb.h.

◆ UCX_USB3_CHAINED_MDL

#define UCX_USB3_CHAINED_MDL   0x806

Definition at line 30 of file clientxrb.h.

◆ UCX_USB3_HANDLE_LEAKED

#define UCX_USB3_HANDLE_LEAKED   0x804

Definition at line 29 of file clientxrb.h.

◆ UCX_USB3_STREAMS_BAD_COUNT

#define UCX_USB3_STREAMS_BAD_COUNT   0x802

Definition at line 27 of file clientxrb.h.

◆ UCX_USB3_STREAMS_IRQL

#define UCX_USB3_STREAMS_IRQL   0x800

Definition at line 25 of file clientxrb.h.

◆ UCX_USB3_STREAMS_NOT_GRANTED

#define UCX_USB3_STREAMS_NOT_GRANTED   0x801

Definition at line 26 of file clientxrb.h.

◆ UCX_USB3_STREAMS_OPEN

#define UCX_USB3_STREAMS_OPEN   0x803

Definition at line 28 of file clientxrb.h.

◆ UCX_USB3_XRB_CORRUPTED

#define UCX_USB3_XRB_CORRUPTED   0x3

Definition at line 24 of file clientxrb.h.

◆ UCX_XRB_IDLE

#define UCX_XRB_IDLE   0xABCD0000

Definition at line 18 of file clientxrb.h.

◆ UCX_XRB_IN_FLIGHT

#define UCX_XRB_IN_FLIGHT   0xABCD0001

Definition at line 19 of file clientxrb.h.

◆ UCX_XRB_KIND_ALT_SETTING

#define UCX_XRB_KIND_ALT_SETTING   0xAABB0002

Definition at line 15 of file clientxrb.h.

◆ UCX_XRB_KIND_CONFIG

#define UCX_XRB_KIND_CONFIG   0xAABB0001

Definition at line 14 of file clientxrb.h.

◆ UCX_XRB_KIND_ISO_PACKETS

#define UCX_XRB_KIND_ISO_PACKETS   0xAABB0003

Definition at line 16 of file clientxrb.h.

◆ UCX_XRB_KIND_PLAIN

#define UCX_XRB_KIND_PLAIN   0xAABB0000

Definition at line 13 of file clientxrb.h.

◆ UCX_XRB_SIGNATURE

#define UCX_XRB_SIGNATURE   0x2E425258

Definition at line 11 of file clientxrb.h.

Function Documentation

◆ C_ASSERT() [1/2]

◆ C_ASSERT() [2/2]

C_ASSERT ( sizeof(UcxXrbPreamble)  = =0x30)

◆ UcxCompleteHeldUrbIrp()

VOID NTAPI UcxCompleteHeldUrbIrp ( _In_ PIRP  Irp)

Completes an IRP held after STATUS_MORE_PROCESSING_REQUIRED, statuses as they are.

Definition at line 61 of file clientxrb.cpp.

63{
65
66 if (UcxIsXrbIrp(Irp, Urb))
68
70}
static PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(PIRP Irp)
FORCEINLINE VOID NTAPI UcxXrbMarkInactive(_In_ PURB Urb)
Definition: clientxrb.h:90
FORCEINLINE BOOLEAN NTAPI UcxIsXrbIrp(_In_ PIRP Irp, _In_ PURB Urb)
Definition: clientxrb.h:79
_In_ PIRP Irp
Definition: kse.h:79
#define IoCompleteRequest
Definition: irp.c:1272
struct _IO_STACK_LOCATION::@5100::@5139 Others
union _IO_STACK_LOCATION::@1823 Parameters
Definition: usb.h:565
struct _URB * PURB
_In_opt_ PUSB_CONFIGURATION_DESCRIPTOR _Inout_ PUSBD_INTERFACE_LIST_ENTRY _Outptr_ PURB * Urb
Definition: usbdlib.h:333
#define IO_NO_INCREMENT
Definition: iotypes.h:598

Referenced by EndpointMachine::FinishStreamsCloseRequest(), EndpointMachine::FinishStreamsOpenRequest(), and UcxEndpoint::OpenStaticStreamsComplete().

◆ UcxCompleteUrb()

NTSTATUS NTAPI UcxCompleteUrb ( _In_ PIRP  Irp,
_In_ PURB  Urb,
_In_ NTSTATUS  Status,
_In_ USBD_STATUS  UsbdStatus 
)

Sets both statuses and completes at the current IRQL; returns Status.

Definition at line 23 of file clientxrb.cpp.

28{
29 if (UcxIsXrbIrp(Irp, Urb))
31
32 Urb->UrbHeader.Status = UsbdStatus;
33 Irp->IoStatus.Status = Status;
34 Irp->IoStatus.Information = 0;
36
37 return Status;
38}
Status
Definition: gdiplustypes.h:24
_In_ NTSTATUS _In_ USBD_STATUS UsbdStatus
Definition: wdfusb.h:403

Referenced by UcxEndpoint::AbortPipe(), UcxEndpoint::CloseStaticStreams(), UcxEndpoint::GetIsochPathDelays(), UcxCompleteUrbAtDispatch(), UcxFailStreamsUrb(), UcxHandleGetCurrentFrame(), UcxHandleIsoch(), UcxHandleStandardRequest(), UcxProcessLegacyUrb(), and UcxXrbSubmitChainedMdlTransfer().

◆ UcxCompleteUrbAtDispatch()

VOID NTAPI UcxCompleteUrbAtDispatch ( _In_ PIRP  Irp,
_In_ PURB  Urb,
_In_ NTSTATUS  Status,
_In_ USBD_STATUS  UsbdStatus 
)

Same, but plain URBs complete at DISPATCH_LEVEL as they did under USBPORT.

Definition at line 42 of file clientxrb.cpp.

47{
48 if (UcxIsXrbIrp(Irp, Urb))
49 {
51 return;
52 }
53
56}
NTSTATUS NTAPI UcxCompleteUrb(_In_ PIRP Irp, _In_ PURB Urb, _In_ NTSTATUS Status, _In_ USBD_STATUS UsbdStatus)
Definition: clientxrb.cpp:23

Referenced by EndpointMachine::CompleteAbortUrb(), and UcxCsqCompleteCanceledAbortIrp().

◆ UcxForwardStreamsUrb()

NTSTATUS NTAPI UcxForwardStreamsUrb ( _In_ WDFDEVICE  RootHubPdo,
_In_ PIRP  Irp,
_In_ PURB  Urb,
_In_ UcxController *  Controller 
)

Definition at line 212 of file clientxrb.cpp.

217{
218 Urb->UrbHeader.Status = USBD_STATUS_PENDING;
219
220 return UcxForwardIrpToQueue(RootHubPdo, Irp, UcxXrbStreamsCompletion, Urb, Controller->m_DeviceMgmtQueue);
221}
static IO_COMPLETION_ROUTINE UcxXrbStreamsCompletion
Definition: clientxrb.cpp:17
_Must_inspect_result_ _In_ WDFDEVICE _In_ PUCX_CONTROLLER_CONFIG _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ UCXCONTROLLER * Controller
NTSTATUS NTAPI UcxForwardIrpToQueue(_In_ WDFDEVICE RootHubPdo, _In_ PIRP Irp, _In_ PIO_COMPLETION_ROUTINE Completion, _In_ PVOID Context, _In_ WDFQUEUE Queue)
Definition: urbroute.cpp:308
#define USBD_STATUS_PENDING
Definition: usb.h:179

Referenced by UcxEndpoint::CloseStaticStreams(), and UcxEndpoint::OpenStaticStreams().

◆ UcxIsXrbIrp()

◆ UcxProcessSubmitUrb()

NTSTATUS NTAPI UcxProcessSubmitUrb ( _In_ WDFDEVICE  RootHubPdo,
_In_ PIRP  Irp 
)

Definition at line 169 of file clientxrb.cpp.

172{
174
175 if (!UcxIsXrbIrp(Irp, Urb))
176 return UcxProcessLegacyUrb(RootHubPdo, Irp, Urb);
177
179
180 /* Older contracts take the legacy path; its completions reset the state */
181 if (UcxXrbFromUrb(Urb)->ContractVersion < USBD_CLIENT_CONTRACT_VERSION_602)
182 return UcxProcessLegacyUrb(RootHubPdo, Irp, Urb);
183
184 switch (Urb->UrbHeader.Function)
185 {
188 return UcxXrbSubmitTransfer(RootHubPdo, Irp, Urb);
189
192 return UcxXrbSubmitChainedMdlTransfer(RootHubPdo, Irp, Urb);
193
195 return UcxEndpoint::FromPipe(Urb->UrbOpenStaticStreams.PipeHandle)->OpenStaticStreams(Irp, Urb);
196
197 /* The pipe handle sits at the same offset in both stream URBs */
199 return UcxEndpoint::FromPipe(Urb->UrbOpenStaticStreams.PipeHandle)->CloseStaticStreams(Irp, Urb);
200
201 /* Only XRBs reach this; a plain URB with this function is invalid */
203 return UcxEndpoint::FromPipe(Urb->UrbGetIsochPipeTransferPathDelays.PipeHandle)->GetIsochPathDelays(Irp, Urb);
204
205 default:
206 return UcxProcessLegacyUrb(RootHubPdo, Irp, Urb);
207 }
208}
NTSTATUS GetIsochPathDelays(_In_ PIRP Irp, _In_ PURB Urb)
Definition: pipeio.cpp:59
NTSTATUS CloseStaticStreams(_In_ PIRP Irp, _In_ PURB Urb)
Definition: pipeio.cpp:267
static UcxEndpoint * FromPipe(_In_ USBD_PIPE_HANDLE Handle)
Definition: pipe.h:241
NTSTATUS OpenStaticStreams(_In_ PIRP Irp, _In_ PURB Urb)
Definition: pipeio.cpp:171
static NTSTATUS NTAPI UcxXrbSubmitTransfer(_In_ WDFDEVICE RootHubPdo, _In_ PIRP Irp, _In_ PURB Urb)
Definition: clientxrb.cpp:111
static NTSTATUS NTAPI UcxXrbSubmitChainedMdlTransfer(_In_ WDFDEVICE RootHubPdo, _In_ PIRP Irp, _In_ PURB Urb)
Definition: clientxrb.cpp:141
static VOID NTAPI UcxXrbCheckOnSubmit(_In_ PIRP Irp, _In_ PURB Urb)
Definition: clientxrb.cpp:78
FORCEINLINE UcxXrbPreamble *NTAPI UcxXrbFromUrb(_In_ PURB Urb)
Definition: clientxrb.h:60
NTSTATUS NTAPI UcxProcessLegacyUrb(_In_ WDFDEVICE RootHubPdo, _In_ PIRP Irp, _In_ PURB Urb)
Definition: urbroute.cpp:760
#define URB_FUNCTION_ISOCH_TRANSFER_USING_CHAINED_MDL
Definition: usb.h:155
#define URB_FUNCTION_GET_ISOCH_PIPE_TRANSFER_PATH_DELAYS
Definition: usb.h:156
#define URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER_USING_CHAINED_MDL
Definition: usb.h:154
#define URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER
Definition: usb.h:95
#define URB_FUNCTION_OPEN_STATIC_STREAMS
Definition: usb.h:152
#define URB_FUNCTION_CLOSE_STATIC_STREAMS
Definition: usb.h:153
#define URB_FUNCTION_ISOCH_TRANSFER
Definition: usb.h:96
#define USBD_CLIENT_CONTRACT_VERSION_602
Definition: usbdlib.h:100

Referenced by UcxEvtRootHubPreprocessInternalIoctl().

◆ UcxUrbFromXrb()

FORCEINLINE PURB NTAPI UcxUrbFromXrb ( _In_ UcxXrbPreamble *  Xrb)

Definition at line 69 of file clientxrb.h.

71{
72 return (PURB)(Xrb + 1);
73}

Referenced by UcxClientAllocIsochUrb(), UcxClientAllocUrb(), UcxClientSelectConfigXrbBuild(), and UcxClientSelectInterfaceXrbBuild().

◆ UcxXrbFromUrb()

◆ UcxXrbMarkInactive()