14#define UCX_REQUEST_REUSE_MUST_COMPLETE 0x00000002
34 Irp->IoStatus.Information = 0;
86 DPRINT1(
"IRP %p submitted corrupted XRB for URB %p\n",
Irp,
Urb);
96 DPRINT1(
"IRP %p resubmitted URB %p while it is still active\n",
Irp,
Urb);
112 _In_ WDFDEVICE RootHubPdo,
142 _In_ WDFDEVICE RootHubPdo,
148 if (!
Handle->m_ChainedMdlGranted)
150 DPRINT1(
"Chained MDL URB %p from handle %p without the capability\n",
Urb,
Handle);
152 if (
Handle->m_VerifierEnabled)
170 _In_ WDFDEVICE RootHubPdo,
184 switch (
Urb->UrbHeader.Function)
213 _In_ WDFDEVICE RootHubPdo,
234 if (
Device->m_Disconnected)
261 DPRINT(
"XRB URB %p function 0x%x canceled before reaching the HCD\n",
Urb,
Urb->UrbHeader.Function);
262 Device->m_TransferFailureCount++;
263 Urb->UrbBulkOrInterruptTransfer.TransferBufferLength = 0;
270 Urb->UrbIsochronousTransfer.IsoPacket[
Index].Status = 0xFFFFFFFF;
271 Urb->UrbIsochronousTransfer.ErrorCount = 0;
278 DPRINT(
"XRB URB %p function 0x%x on device %p failed, USBD status 0x%lx\n",
280 Device->m_TransferFailureCount++;
281 Device->ReportNoPingResponseIfPending();
288 if (
Irp->PendingReturned)
312 DPRINT1(
"Streams URB %p function 0x%x never reached the HCD\n",
Urb,
Urb->UrbHeader.Function);
319 DPRINT1(
"Streams URB %p function 0x%x failed, USBD status 0x%lx\n",
320 Urb,
Urb->UrbHeader.Function,
Urb->UrbHeader.Status);
326 if (
Irp->PendingReturned)
329 Endpoint = UcxEndpoint::FromPipe(
Urb->UrbOpenStaticStreams.PipeHandle);
331 switch (
Urb->UrbHeader.Function)
static PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(PIRP Irp)
DECLSPEC_NORETURN VOID NTAPI KeBugCheckEx(IN ULONG BugCheckCode, IN ULONG_PTR BugCheckParameter1, IN ULONG_PTR BugCheckParameter2, IN ULONG_PTR BugCheckParameter3, IN ULONG_PTR BugCheckParameter4)
NTSTATUS GetIsochPathDelays(_In_ PIRP Irp, _In_ PURB Urb)
NTSTATUS CloseStaticStreams(_In_ PIRP Irp, _In_ PURB Urb)
NTSTATUS OpenStaticStreams(_In_ PIRP Irp, _In_ PURB Urb)
PDEVICE_OBJECT m_ClientDeviceObject
NTSTATUS NTAPI UcxForwardStreamsUrb(_In_ WDFDEVICE RootHubPdo, _In_ PIRP Irp, _In_ PURB Urb, _In_ UcxController *Controller)
VOID NTAPI UcxCompleteHeldUrbIrp(_In_ PIRP Irp)
NTSTATUS NTAPI UcxProcessSubmitUrb(_In_ WDFDEVICE RootHubPdo, _In_ PIRP Irp)
static NTSTATUS NTAPI UcxXrbSubmitTransfer(_In_ WDFDEVICE RootHubPdo, _In_ PIRP Irp, _In_ PURB Urb)
static NTSTATUS NTAPI UcxXrbSubmitChainedMdlTransfer(_In_ WDFDEVICE RootHubPdo, _In_ PIRP Irp, _In_ PURB Urb)
static VOID NTAPI UcxXrbCheckOnSubmit(_In_ PIRP Irp, _In_ PURB Urb)
static VOID NTAPI UcxXrbFixUnprocessed(_Inout_ PIRP Irp, _Inout_ PURB Urb, _In_ UcxUsbDevice *Device)
#define UCX_REQUEST_REUSE_MUST_COMPLETE
NTSTATUS NTAPI UcxCompleteUrb(_In_ PIRP Irp, _In_ PURB Urb, _In_ NTSTATUS Status, _In_ USBD_STATUS UsbdStatus)
static IO_COMPLETION_ROUTINE UcxXrbStreamsCompletion
static IO_COMPLETION_ROUTINE UcxXrbTransferCompletion
VOID NTAPI UcxCompleteUrbAtDispatch(_In_ PIRP Irp, _In_ PURB Urb, _In_ NTSTATUS Status, _In_ USBD_STATUS UsbdStatus)
#define UCX_XRB_SIGNATURE
FORCEINLINE VOID NTAPI UcxXrbMarkInactive(_In_ PURB Urb)
FORCEINLINE UcxXrbPreamble *NTAPI UcxXrbFromUrb(_In_ PURB Urb)
#define UCX_USB3_ACTIVE_URB_REUSED
#define UCX_USB3_CHAINED_MDL
FORCEINLINE BOOLEAN NTAPI UcxIsXrbIrp(_In_ PIRP Irp, _In_ PURB Urb)
#define UCX_BUGCHECK_USB3
#define UCX_USB3_XRB_CORRUPTED
#define UCX_XRB_IN_FLIGHT
return pRequest Reuse(ReuseParams)
_Must_inspect_result_ _In_ PUCXHUB_DEVICE_CREATE_INFO _Out_ UCXUSBDEVICE * Device
_In_ UCXHUB_DEVICE_CONTEXT _In_ UCXENDPOINT Endpoint
_In_ PIRP _In_ PIO_COMPLETION_ROUTINE _In_ PVOID Context
#define _In_reads_opt_(s)
#define UNREFERENCED_PARAMETER(P)
#define IoCompleteRequest
static UcxPipe * FromHandle(_In_ USBD_PIPE_HANDLE Handle)
struct _IO_STACK_LOCATION::@5100::@5139 Others
union _IO_STACK_LOCATION::@1823 Parameters
_Must_inspect_result_ _In_ WDFDEVICE _In_ PUCX_CONTROLLER_CONFIG _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ UCXCONTROLLER * Controller
#define STATUS_INVALID_PARAMETER
#define STATUS_NO_SUCH_DEVICE
NTSTATUS NTAPI UcxUsbdStatusToNtStatus(_In_ USBD_STATUS UsbdStatus)
NTSTATUS NTAPI UcxProcessLegacyUrb(_In_ WDFDEVICE RootHubPdo, _In_ PIRP Irp, _In_ PURB Urb)
NTSTATUS NTAPI UcxForwardIrpToQueue(_In_ WDFDEVICE RootHubPdo, _In_ PIRP Irp, _In_ PIO_COMPLETION_ROUTINE Completion, _In_ PVOID Context, _In_ WDFQUEUE Queue)
VOID NTAPI UcxUnlockTransferBuffer(_Inout_ PURB Urb)
NTSTATUS NTAPI UcxForwardIrpWithRequest(_In_ WDFDEVICE RootHubPdo, _In_ PIRP Irp, _In_ PIO_COMPLETION_ROUTINE Completion, _In_ PVOID Context, _In_ WDFQUEUE Queue, _In_ WDFREQUEST Request)
VOID NTAPI UcxLockTransferBuffer(_Inout_ PURB Urb)
FORCEINLINE VOID NTAPI UcxSetTransferDirection(_Inout_ PURB Urb, _In_ const UcxPipe *Pipe)
FORCEINLINE VOID NTAPI UcxStampProcessorNumber(_Inout_ PURB Urb)
#define URB_FUNCTION_ISOCH_TRANSFER_USING_CHAINED_MDL
#define USBD_STATUS_DEVICE_GONE
#define URB_FUNCTION_GET_ISOCH_PIPE_TRANSFER_PATH_DELAYS
#define USBD_STATUS_CANCELED
#define URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER_USING_CHAINED_MDL
#define USBD_STATUS_INVALID_PARAMETER
#define URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER
#define USBD_SUCCESS(Status)
#define USBD_STATUS_PENDING
#define URB_FUNCTION_OPEN_STATIC_STREAMS
#define URB_FUNCTION_CLOSE_STATIC_STREAMS
#define URB_FUNCTION_ISOCH_TRANSFER
#define USBD_CLIENT_CONTRACT_VERSION_602
_In_opt_ PUSB_CONFIGURATION_DESCRIPTOR _Inout_ PUSBD_INTERFACE_LIST_ENTRY _Outptr_ PURB * Urb
_In_ WDFCOLLECTION _In_ ULONG Index
_In_ PDEVICE_OBJECT DeviceObject
FORCEINLINE VOID WDF_REQUEST_REUSE_PARAMS_SET_NEW_IRP(_Inout_ PWDF_REQUEST_REUSE_PARAMS Params, _In_ PIRP NewIrp)
@ WDF_REQUEST_REUSE_SET_NEW_IRP
FORCEINLINE VOID WDF_REQUEST_REUSE_PARAMS_INIT(_Out_ PWDF_REQUEST_REUSE_PARAMS Params, _In_ ULONG Flags, _In_ NTSTATUS Status)
_In_ NTSTATUS _In_ USBD_STATUS UsbdStatus
#define STATUS_CONTINUE_COMPLETION