34 Config.Settings.Parallel.NumberOfPresentedRequests = PresentedRequests;
145 Context->OwnerHub = Acquire->Header.Hub;
146 Context->OwnerDevice = Acquire->Header.UsbDevice;
161 ULONG Override =
Handle->m_VerifierStaticStreamCountOverride;
167 if (
Handle->m_GrantedStreams != 0)
171 else if (Override < *StreamCount)
199 Query->ResultLength = 0;
203 DPRINT1(
"Capability query %p length %lu does not match buffer %p\n",
208 IsChainedMdl =
IsEqualGUID(
Query->CapabilityType, GUID_USB_CAPABILITY_CHAINED_MDLS);
209 IsStreams =
IsEqualGUID(
Query->CapabilityType, GUID_USB_CAPABILITY_STATIC_STREAMS);
215 DPRINT1(
"Chained MDL query %p must not have a buffer\n",
Query);
219 if (!
Handle->m_ChainedMdlGranted &&
227 else if (
IsEqualGUID(
Query->CapabilityType, GUID_USB_CAPABILITY_SELECTIVE_SUSPEND))
231 DPRINT1(
"Selective suspend query %p must not have a buffer\n",
Query);
235 else if (
IsEqualGUID(
Query->CapabilityType, GUID_USB_CAPABILITY_HIGH_BANDWIDTH_ISOCH))
237 if (
Query->OutputBufferLength !=
sizeof(
ULONG))
239 DPRINT1(
"High bandwidth isoch query %p bad length %lu\n",
Query,
Query->OutputBufferLength);
247 DPRINT1(
"Static streams query %p bad length %lu\n",
Query,
Query->OutputBufferLength);
260 DPRINT(
"Capability query %p has unknown type %08lx\n",
Query,
Query->CapabilityType.Data1);
271 &
Query->CapabilityType,
272 Query->OutputBufferLength,
274 &
Query->ResultLength);
292 else if (IsChainedMdl)
309 PFN_UCX_HCD_GET_DUMP_DATA GetDumpData =
Controller->HcdGetDumpData();
314 if (GetDumpData ==
NULL)
336 PFN_UCX_HCD_FREE_DUMP_DATA FreeDumpData =
Controller->HcdFreeDumpData();
339 if (FreeDumpData ==
NULL)
346 FreeDumpData(
Controller->m_Handle,
Irp->AssociatedIrp.SystemBuffer);
416 Device = UcxUsbDevice::FromHandle((UCXUSBDEVICE)
Args.Arg2);
421 Device = UcxUsbDevice::FromHandle((UCXUSBDEVICE)
Args.Arg2);
426 Device = UcxUsbDevice::FromHandle((UCXUSBDEVICE)
Args.Arg2);
431 Device = UcxUsbDevice::FromHandle((UCXUSBDEVICE)
Args.Arg2);
439 WdfRequestWdmGetIrp(
Request)->AssociatedIrp.SystemBuffer);
476 DPRINT1(
"No reserved request for remote wake IRP %p\n",
Irp);
553 DPRINT(
"Abort pipe IRP %p canceled\n",
Irp);
static PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(PIRP Irp)
ACPI_PHYSICAL_ADDRESS ACPI_SIZE BOOLEAN Warn UINT32 *TableIdx UINT32 ACPI_TABLE_HEADER *OutTableHeader ACPI_TABLE_HEADER **OutTable ACPI_HANDLE UINT32 ACPI_WALK_CALLBACK ACPI_WALK_CALLBACK void void **ReturnValue UINT32 ACPI_BUFFER *RetPathPtr ACPI_OBJECT_HANDLER Handler
static UcxController * FromFdo(_In_ WDFDEVICE Fdo)
WDFQUEUE m_DeviceMgmtQueue
WDFQUEUE m_TreePurgeQueue
UCX_CONTROLLER_CONFIG m_Config
WDFQUEUE m_PendDuringResetQueue
VOID NTAPI UcxCompleteUrbAtDispatch(_In_ PIRP Irp, _In_ PURB Urb, _In_ NTSTATUS Status, _In_ USBD_STATUS UsbdStatus)
_In_opt_ PIRP _In_opt_ PVOID PeekContext
#define STATUS_NOT_SUPPORTED
EVT_WDF_IO_QUEUE_IO_INTERNAL_DEVICE_CONTROL UcxEvtTreePurgeIoInternalDeviceControl
EVT_WDF_IO_QUEUE_IO_INTERNAL_DEVICE_CONTROL UcxEvtDeviceMgmtIoInternalDeviceControl
EVT_WDF_IO_QUEUE_IO_INTERNAL_DEVICE_CONTROL UcxEvtPendDuringResetIoInternalDeviceControl
_In_ HANDLE _In_ CONST PDXGKMDT_OPM_GET_INFO_PARAMETERS Parameters
#define NT_SUCCESS(StatCode)
#define _IRQL_raises_(irql)
#define KeReleaseSpinLock(sl, irql)
#define KeAcquireSpinLock(sl, irql)
_Must_inspect_result_ _In_ FLT_CONTEXT_TYPE ContextType
EVT_WDF_IO_QUEUE_IO_INTERNAL_DEVICE_CONTROL UcxEvtDefaultIoInternalDeviceControl
IO_CSQ_REMOVE_IRP UcxCsqRemoveAbortIrp
IO_CSQ_COMPLETE_CANCELED_IRP UcxCsqCompleteCanceledAbortIrp
IO_CSQ_INSERT_IRP UcxCsqInsertAbortIrp
IO_CSQ_RELEASE_LOCK UcxCsqReleaseAbortLock
EVT_WDF_IO_QUEUE_IO_INTERNAL_DEVICE_CONTROL UcxEvtAddress0IoInternalDeviceControl
IO_CSQ_PEEK_NEXT_IRP UcxCsqPeekAbortIrp
EVT_WDF_IO_WDM_IRP_FOR_FORWARD_PROGRESS UcxEvtDefaultQueueExamineIrp
IO_CSQ_ACQUIRE_LOCK UcxCsqAcquireAbortLock
static VOID NTAPI UcxDispatchGetDumpData(_In_ UcxController *Controller, _In_ WDFREQUEST Request)
static VOID NTAPI UcxDispatchRootHubQuery(_In_ UcxController *Controller, _In_ WDFREQUEST Request, _In_ ULONG IoControlCode)
static NTSTATUS NTAPI UcxCreateControllerQueue(_In_ UcxController *Controller, _In_ WDF_IO_QUEUE_DISPATCH_TYPE Dispatch, _In_ ULONG PresentedRequests, _In_opt_ PFN_WDF_IO_QUEUE_IO_INTERNAL_DEVICE_CONTROL Handler, _In_opt_ PCWDF_OBJECT_CONTEXT_TYPE_INFO ContextType, _In_opt_ PWDF_IO_QUEUE_FORWARD_PROGRESS_POLICY Policy, _Out_ WDFQUEUE *Queue)
static VOID NTAPI UcxApplyStreamCountOverride(_In_ UcxUsbdHandle *Handle, _Inout_ PUSHORT StreamCount)
static NTSTATUS NTAPI UcxQueryUsbCapability(_In_ UcxController *Controller, _Inout_ PUCXHUB_QUERY_CAPABILITY Query, _Out_writes_bytes_opt_(Query->OutputBufferLength) PVOID OutputBuffer)
static VOID NTAPI UcxDispatchFreeDumpData(_In_ UcxController *Controller, _In_ WDFREQUEST Request)
_Must_inspect_result_ _In_ PUCXHUB_DEVICE_CREATE_INFO _Out_ UCXUSBDEVICE * Device
#define IOCTL_UCXHUB_ROOTHUB_GET_20PORT_INFO
#define IOCTL_UCXHUB_ROOTHUB_GET_30PORT_INFO
#define IOCTL_UCXHUB_ADDRESS0_OWNERSHIP_ACQUIRE
#define IOCTL_UCXHUB_FREE_DUMP_DATA
#define UCXHUB_QUERY_CAPABILITY_VERSION
#define IOCTL_UCXHUB_ROOTHUB_GET_INFO
struct _UCXHUB_DUMP_DEVICE_INFO * PUCXHUB_DUMP_DEVICE_INFO
struct _UCXHUB_QUERY_CAPABILITY * PUCXHUB_QUERY_CAPABILITY
#define IOCTL_UCXHUB_QUERY_USB_CAPABILITY
#define IOCTL_UCXHUB_SET_FUNCTION_HANDLE_DATA
#define IOCTL_UCXHUB_GET_DUMP_DATA
#define IOCTL_UCXHUB_NOTIFY_FORWARD_PROGRESS
_In_ const GUID _In_ ULONG _In_opt_ PFN_WDF_WMI_INSTANCE_QUERY_INSTANCE Query
_In_ PIRP _In_ PIO_COMPLETION_ROUTINE _In_ PVOID Context
#define _Out_writes_bytes_opt_(s)
#define UNREFERENCED_PARAMETER(P)
#define IsEqualGUID(rguid1, rguid2)
struct _IO_STACK_LOCATION::@5100::@5139 Others
union _IO_STACK_LOCATION::@1823 Parameters
struct _IO_STACK_LOCATION::@1823::@1824 DeviceIoControl
ULONG NumberOfPresentedDeviceMgmtEvtCallbacks
#define CONTAINING_RECORD(address, type, field)
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFREQUEST _In_ size_t _In_ size_t _In_ ULONG IoControlCode
_Must_inspect_result_ _In_ WDFDEVICE _In_ PUCX_CONTROLLER_CONFIG _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ UCXCONTROLLER * Controller
_Must_inspect_result_ _In_ WDFDEVICE _In_ PUCX_CONTROLLER_CONFIG Config
_In_ PGUID _In_ ULONG OutputBufferLength
_In_ WDFREQUEST _In_ size_t _In_ size_t InputBufferLength
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFREQUEST Request
_Must_inspect_result_ _In_ UCXCONTROLLER _In_ PUCX_ROOTHUB_CONFIG _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ UCXROOTHUB * RootHub
struct _ADDRESS0_OWNERSHIP_ACQUIRE * PADDRESS0_OWNERSHIP_ACQUIRE
BOOLEAN NTAPI UcxVerifierWantsFailure(_In_ ULONG Setting)
NTSTATUS NTAPI UcxRandomErrorStatus(VOID)
ULONG NTAPI UcxRandomInRange(_In_ ULONG Max)
#define STATUS_INVALID_DEVICE_REQUEST
#define STATUS_INVALID_PARAMETER
#define STATUS_NO_SUCH_DEVICE
#define USBD_STATUS_DEVICE_GONE
_In_opt_ PUSB_CONFIGURATION_DESCRIPTOR _Inout_ PUSBD_INTERFACE_LIST_ENTRY _Outptr_ PURB * Urb
#define IOCTL_INTERNAL_USB_REGISTER_COMPOSITE_DEVICE
#define IOCTL_INTERNAL_USB_REQUEST_REMOTE_WAKE_NOTIFICATION
#define IOCTL_INTERNAL_USB_UNREGISTER_COMPOSITE_DEVICE
WdfRequestCompleteWithInformation(Request, STATUS_SUCCESS, ActualLength)
_Must_inspect_result_ _In_ WDFDEVICE _In_ PIRP _In_ WDFQUEUE Queue
_In_ WDFINTERRUPT _In_ WDF_INTERRUPT_POLICY Policy
EVT_WDF_IO_QUEUE_IO_INTERNAL_DEVICE_CONTROL * PFN_WDF_IO_QUEUE_IO_INTERNAL_DEVICE_CONTROL
@ WdfIoForwardProgressActionUseReservedRequest
@ WdfIoForwardProgressActionFailRequest
FORCEINLINE VOID WDF_IO_QUEUE_FORWARD_PROGRESS_POLICY_EXAMINE_INIT(_Out_ PWDF_IO_QUEUE_FORWARD_PROGRESS_POLICY Policy, _In_ ULONG TotalForwardProgressRequests, _In_ PFN_WDF_IO_WDM_IRP_FOR_FORWARD_PROGRESS EvtIoWdmIrpForForwardProgress)
FORCEINLINE VOID WDF_IO_QUEUE_FORWARD_PROGRESS_POLICY_DEFAULT_INIT(_Out_ PWDF_IO_QUEUE_FORWARD_PROGRESS_POLICY Policy, _In_ ULONG TotalForwardProgressRequests)
FORCEINLINE VOID WDF_IO_QUEUE_CONFIG_INIT(_Out_ PWDF_IO_QUEUE_CONFIG Config, _In_ WDF_IO_QUEUE_DISPATCH_TYPE DispatchType)
@ WdfIoQueueDispatchSequential
@ WdfIoQueueDispatchParallel
enum _WDF_IO_FORWARD_PROGRESS_ACTION WDF_IO_FORWARD_PROGRESS_ACTION
WDF_EXTERN_C_START enum _WDF_IO_QUEUE_DISPATCH_TYPE WDF_IO_QUEUE_DISPATCH_TYPE
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR OutputBuffer
FORCEINLINE VOID WDF_OBJECT_ATTRIBUTES_INIT(_Out_ PWDF_OBJECT_ATTRIBUTES Attributes)
#define WDF_GET_CONTEXT_TYPE_INFO(_contexttype)
_Reserved_ PVOID Reserved
_In_ USHORT _In_ ULONG _In_ PSOCKADDR _In_ PSOCKADDR _Reserved_ ULONG _In_opt_ PVOID _In_opt_ const WSK_CLIENT_CONNECTION_DISPATCH * Dispatch