19 { 0xce2ee385, 0x00e6, 0x48cb, { 0x9f, 0x05, 0x2e, 0xdb, 0x92, 0x7c, 0x48, 0x99 } };
21#define XHCI_USB_DSM_REVISION 0
22#define XHCI_USB_DSM_TUNNEL_STATE 10
23#define XHCI_USB_DSM_PORT_NATIVE 1
24#define XHCI_USB_DSM_PORT_TUNNELED 2
57#define XHCI_DEFAULT_CONTEXT_MASK 0x00000003
59#define XHCI_ROUTE_TIER_MAX 15
60#define XHCI_ROUTE_TIER_BITS 4
136 Status = WdfIoTargetSendIoctlSynchronously(WdfDeviceGetIoTarget(
Device),
151 else if (
Output.Header.Count != 0 &&
Output.Header.Argument[0].DataLength != 0)
181 return XhciGetUsbDeviceContext(
UsbDevice);
186XhciUsbDevice::Initialize(
214 DPRINT(
"USB device %p: speed %d, root port %lu, depth %lu, TT hub %p\n",
328 while ((
Mask >>= 1) != 0)
393XhciUsbDevice::RingDoorbell(
401 DPRINT(
"Doorbell for DCI %lu of device %p without a slot\n", Dci,
this);
413XhciUsbDevice::EndpointAt(
424XhciUsbDevice::AddEndpoint(
439XhciUsbDevice::RemoveEndpoint(
576 DPRINT(
"Device %p command type %lu completed with no request left\n",
583 case static_cast<ULONG>(XhciTrbType::EnableSlot):
587 case static_cast<ULONG>(XhciTrbType::AddressDevice):
591 case static_cast<ULONG>(XhciTrbType::EvaluateContext):
595 case static_cast<ULONG>(XhciTrbType::ConfigureEndpoint):
599 case static_cast<ULONG>(XhciTrbType::DisableSlot):
603 case static_cast<ULONG>(XhciTrbType::ResetDevice):
625XhciUsbDevice::SetDisabled()
689 Slot->RouteString = Route;
691 Slot->ContextEntries = 1;
692 Slot->RootHubPortNumber =
Path->PortPath[0];
697 Slot->MultiTT = (
Hub->m_NumberOfTTs > 1);
698 Slot->TTHubSlotId =
Hub->m_SlotId;
739 DPRINT1(
"ENABLE for device %p before its default endpoint exists\n",
this);
747 DPRINT1(
"Default endpoint of device %p failed to enable: 0x%lx\n",
this,
Status);
754 DPRINT1(
"ENABLE for device %p with the controller gone\n",
this);
779 if (
Command->Code != XhciCompletionCode::Success)
781 DPRINT1(
"Enable Slot for device %p failed with completion code %lu\n",
this,
Code);
810 DPRINT1(
"Enable Slot gave device %p slot %lu, which is already in use (0x%lx)\n",
847 DPRINT1(
"ADDRESS for device %p without a slot\n",
this);
854 DPRINT1(
"ADDRESS for device %p with the controller gone\n",
this);
884 if (
Command->Code == XhciCompletionCode::Success)
889 DPRINT(
"Slot %lu addressed (BSR %u), USB address %u\n",
895 DPRINT1(
"Address Device (BSR %u) for slot %lu failed with completion code %lu\n",
899 if (!BlockSetAddress)
925 if (Payload->Flags.UpdateIsHub && Payload->IsHub)
928 if (Payload->Flags.UpdateDeviceDescriptor && Payload->DeviceDescriptor !=
NULL)
931 if (Payload->Flags.Update20HardwareLpmParameters)
938 if (Payload->Flags.UpdateRootPortResumeTime)
958 return Payload->Flags.UpdateTunnelState &&
m_Controller->
HasErrata(XhciErrata::Usb4TunnelFromAcpiDsm);
993 Work = XhciGetTunnelDsmWork(
Item);
1014XhciUsbDevice::RunTunnelStateDsm(
1031 DPRINT(
"Root port %lu tunnel state _DSM returned %I64u\n", RootPort,
Result);
1049 DPRINT1(
"Root port %lu tunnel state _DSM gave %I64u, state unknown\n", RootPort,
Result);
1066 if (!Payload->Flags.UpdateMaxExitLatency)
1087 Slot->MaxExitLatency = Payload->MaxExitLatency & 0xFFFF;
1088 Slot->InterrupterTarget = 0;
1098 DPRINT1(
"UPDATE for device %p with the controller gone\n",
this);
1118 else if (
Command->Code == XhciCompletionCode::Success)
1129 DPRINT1(
"Max Exit Latency %lu for slot %lu rejected with completion code %lu\n",
1132 if (
Command->Code == XhciCompletionCode::MaxExitLatencyTooLarge)
1151 DPRINT(
"Hub %p: %lu ports, %lu TTs, think time %lu\n",
1201 ULONG EnableCount = Payload->EndpointsToEnableCount;
1202 ULONG DisableCount = Payload->EndpointsToDisableCount;
1211 DPRINT1(
"ENDPOINTS_CONFIGURE for device %p carries no request context\n",
this);
1216 Data->EndpointsConfigure.EnableFailed =
FALSE;
1217 Data->EndpointsConfigure.FirstCommandFailed =
FALSE;
1222 DPRINT1(
"ENDPOINTS_CONFIGURE for device %p without a slot\n",
this);
1229 DPRINT1(
"ENDPOINTS_CONFIGURE for device %p with the controller gone\n",
this);
1246 DPRINT1(
"Endpoint %lu of %lu for device %p failed to enable: 0x%lx\n",
1252 if (DisableCount == 0)
1259 Data->EndpointsConfigure.EnableFailed =
TRUE;
1264 if (!
Data->EndpointsConfigure.EnableFailed)
1270 AddFlags |= 1UL <<
Endpoint->Dci();
1280 Control->DropFlags = DropFlags;
1302 Data->EndpointsConfigure.FirstCommandFailed =
TRUE;
1335 EarlierFailure =
Data->EndpointsConfigure.EnableFailed ||
Data->EndpointsConfigure.FirstCommandFailed;
1340 if (!EarlierFailure)
1349 Command->Code == XhciCompletionCode::SlotNotEnabled);
1353 DPRINT1(
"Configure Endpoint for slot %lu failed with completion code %lu (enable %lu, disable %lu)\n",
1356 if (!SlotLost && EnableCount != 0)
1360 case XhciCompletionCode::BandwidthError:
1361 case XhciCompletionCode::SecondaryBandwidthError:
1364 case XhciCompletionCode::ResourceError:
1367 case XhciCompletionCode::MaxExitLatencyTooLarge:
1375 if (
Command->Code == XhciCompletionCode::MaxExitLatencyTooLarge)
1383 if (EnableCount != 0 && !EarlierFailure)
1391 if (DisableCount == 0)
1398 if (EnableCount == 0 || EarlierFailure)
1442 DPRINT(
"DISABLE for device %p with the controller gone\n",
this);
1464 if (
Command->Code != XhciCompletionCode::Success)
1468 if (
Command->Code != XhciCompletionCode::SlotNotEnabled)
1513 DPRINT(
"RESET for device %p with the controller gone\n",
this);
1524 Type =
static_cast<ULONG>(XhciTrbType::DisableSlot);
1529 Type =
static_cast<ULONG>(XhciTrbType::ResetDevice);
1546 if (
Command->Code != XhciCompletionCode::Success)
1548 DPRINT1(
"Reset Device for slot %lu failed with completion code %lu\n",
1556 DPRINT1(
"Reset Device for slot %lu left the default endpoint disabled\n",
m_SlotId);
1569XhciUsbDevice::ReconfigureEndpoint(
1574 ReconfigureWaiter Waiter;
1619 DPRINT1(
"No input context to reconfigure DCI %lu of slot %lu\n", Dci,
m_SlotId);
1636 Control->AddFlags = 1 | (1UL << Dci);
1637 Control->DropFlags = 1UL << Dci;
1661 DPRINT1(
"Reconfigure of DCI %lu on slot %lu failed: status 0x%lx, code %lu\n",
1662 Device->m_ReconfigureCurrent.Endpoint->Dci(),
Device->m_SlotId,
1722 DPRINT1(
"Transfer event for slot %lu DCI %lu code %lu has no endpoint, dropped\n",
1758XhciUsbDevice::ControllerResetDone()
struct _ACPI_EVAL_INPUT_BUFFER_COMPLEX * PACPI_EVAL_INPUT_BUFFER_COMPLEX
#define ACPI_EVAL_INPUT_BUFFER_COMPLEX_SIGNATURE
ACPI_METHOD_ARGUMENT UNALIGNED * PACPI_METHOD_ARGUMENT
#define ACPI_METHOD_NEXT_ARGUMENT(Argument)
#define ACPI_METHOD_ARGUMENT_LENGTH(DataLength)
#define ACPI_METHOD_SET_ARGUMENT_INTEGER(MethodArgument, IntData)
#define ACPI_EVAL_OUTPUT_BUFFER_SIGNATURE
#define ACPI_METHOD_SET_ARGUMENT_BUFFER(Argument, BuffData, BuffLength)
#define IOCTL_ACPI_EVAL_METHOD
#define InterlockedIncrement
#define InterlockedDecrement
const struct winhelp_callbacks Callbacks
XhciCommonBuffer m_Buffers
BOOLEAN HasErrata(_In_ XhciErrata Bit) const
XhciCommandRing m_Commands
BOOLEAN IsAccessible() const
XhciRegisters m_Registers
static XhciController * FromUcx(_In_ UCXCONTROLLER UcxController)
static XhciEndpoint * FromUcx(_In_ UCXENDPOINT Endpoint)
VOID BuildContext(_Out_writes_bytes_(ContextSize) PVOID EndpointContext, _In_ ULONG ContextSize) const
VOID ControllerResetStarting()
VOID RingDoorbell(_In_ ULONG Index, _In_ ULONG Value)
VOID Update20HardwareLpm(_In_ ULONG PortNumber, _In_ ULONG SlotId, _In_ const USBDEVICE_UPDATE_20_HARDWARE_LPM_PARAMETERS *Parameters)
VOID DisableLpmForSlot(_In_ ULONG PortNumber, _In_ ULONG SlotId)
VOID ArmPortResumeTimer(_In_ ULONG PortNumber, _In_ ULONG Milliseconds)
UCHAR QueryTunnelState(_In_ ULONG PortNumber) const
VOID DisarmPortResumeTimer(_In_ ULONG PortNumber)
ULONG ContextSize() const
WDFREQUEST m_PendingRequest
VOID OnResetDeviceDone(_In_ const XhciCommand *Command)
BOOLEAN QueueTunnelStateDsm(_Inout_ PUSBDEVICE_UPDATE Payload)
VOID PrepareCommand(_In_ ULONG Type)
ULONG64 InputContextAddress() const
VOID Cleanup(_In_ WDFOBJECT Object)
_In_ UCXUSBDEVICE UsbDevice
VOID BuildSlotContext(_Out_writes_bytes_(ContextSize) PVOID SlotContext, _In_ ULONG ContextSize) const
const XHCI_SLOT_CONTEXT * OutputSlot() const
NTSTATUS LostSlotStatus() const
BOOLEAN IsSlotEnabled() const
PendingKind m_PendingKind
VOID OnTransferEvent(_In_ const XHCI_TRB *Event)
PXHCI_SLOT_CONTEXT InputSlot() const
VOID ControllerResetStarting()
XhciUsbDevice * TtHub() const
VOID DisableDefaultEndpoint()
volatile LONG m_EndpointCount
static VOID NTAPI ReconfigureCommandDone(_In_ XhciCommand *Command)
VOID DisableConfiguredEndpoints(_In_ BOOLEAN ClearTable)
VOID OnEvaluateContextDone(_In_ const XhciCommand *Command)
XhciDmaBuffer * m_ReconfigureInput
VOID OnDisableSlotDone(_In_ const XhciCommand *Command)
const USB_DEVICE_DESCRIPTOR * DeviceDescriptor() const
VOID FinishReconfigure(_In_ NTSTATUS Status)
BOOLEAN m_ReconfigureBusy
VOID Address(_In_ WDFREQUEST Request, _Inout_ PUSBDEVICE_ADDRESS Payload)
VOID CompletePending(_In_ NTSTATUS Status)
VOID OnAddressDeviceDone(_In_ const XhciCommand *Command)
PVOID InputContext(_In_ ULONG Index) const
BOOLEAN WantsTunnelStateDsm(_In_ const USBDEVICE_UPDATE *Payload) const
VOID Reset(_In_ WDFREQUEST Request)
NTSTATUS SubmitAddressDevice(_In_ BOOLEAN BlockSetAddress)
ULONG m_ReconfigureQueued
static XhciUsbDevice * FromUcx(_In_ UCXUSBDEVICE UsbDevice)
static EVT_WDF_WORKITEM TunnelDsmWorker
VOID DisableEndpointList(_In_ ULONG Count, _In_reads_(Count) UCXENDPOINT *Endpoints)
PVOID OutputContext(_In_ ULONG Dci) const
VOID ApplyUpdate(_Inout_ PUSBDEVICE_UPDATE Payload)
ULONG64 HardwareDequeuePointer(_In_ ULONG Dci) const
USB_DEVICE_SPEED Speed() const
VOID Update(_In_ WDFREQUEST Request, _Inout_ PUSBDEVICE_UPDATE Payload)
XhciEndpoint * m_Endpoints[XHCI_MAX_DCI+1]
XhciController * m_Controller
VOID Enable(_In_ WDFREQUEST Request, _Inout_ PUSBDEVICE_ENABLE Payload)
VOID EndpointsConfigure(_In_ WDFREQUEST Request, _Inout_ PENDPOINTS_CONFIGURE Payload)
static VOID NTAPI CommandDone(_In_ XhciCommand *Command)
VOID SubmitSecondConfigure()
VOID SubmitDisableSlot(_In_ AfterDisable Next)
NTSTATUS BuildAddressContext()
AfterDisable m_AfterDisable
_In_ _In_ NTSTATUS _In_ PVOID Context
KSPIN_LOCK m_ReconfigureLock
PXHCI_INPUT_CONTROL_CONTEXT InputControl() const
XhciCommand m_ReconfigureCommand
VOID RecordEnabledEndpoints(_In_ const ENDPOINTS_CONFIGURE *Payload)
VOID OnEnableSlotDone(_In_ const XhciCommand *Command)
VOID HubInfo(_In_ WDFREQUEST Request, _In_ const USBDEVICE_HUB_INFO *Payload)
VOID SetPending(_In_ WDFREQUEST Request, _In_ PVOID Payload, _In_ PendingKind Kind, _In_ BOOLEAN MustSucceed)
const USB_DEVICE_PORT_PATH * PortPath() const
VOID Disable(_In_ WDFREQUEST Request)
VOID OnConfigureEndpointDone(_In_ const XhciCommand *Command)
_In_ _In_ NTSTATUS Status
ReconfigureWaiter m_ReconfigureWaiters[XHCI_MAX_DCI+1]
UCXUSBDEVICE Handle() const
USB_DEVICE_DESCRIPTOR m_DeviceDescriptor
VOID StartReconfigure(_In_ const ReconfigureWaiter *Waiter)
XhciController * Controller() const
ULONG ContextEntries() const
ReconfigureWaiter m_ReconfigureCurrent
VOID OnDeviceNotificationEvent(_In_ const XHCI_TRB *Event)
ULONG EndpointState(_In_ ULONG Dci) const
_Inout_ HubConfiguration ** Slot
_In_ HANDLE _In_ CONST PDXGKMDT_OPM_GET_INFO_PARAMETERS Parameters
_Check_return_ _In_ DXGK_EVENT_TYPE _In_ ULONG _In_ PVOID Argument
_Check_return_ _In_ DXGK_EVENT_TYPE _In_ ULONG Event
#define NT_SUCCESS(StatCode)
#define _IRQL_requires_max_(irql)
#define _IRQL_requires_(irql)
#define InterlockedExchangePointer(Target, Value)
#define KeReleaseSpinLock(sl, irql)
#define KeAcquireSpinLock(sl, irql)
#define KeInitializeSpinLock(sl)
_Must_inspect_result_ _In_ FLT_CONTEXT_TYPE _In_ SIZE_T ContextSize
_In_ UCXUSBDEVICE UsbDevice
WdfWorkItemEnqueue(WorkItem)
_Must_inspect_result_ _In_ PUCXHUB_DEVICE_CREATE_INFO _Out_ UCXUSBDEVICE * Device
#define UCXHUB_TUNNEL_STATE_TUNNELED
#define UCXHUB_TUNNEL_STATE_UNKNOWN
_In_opt_ PVOID _In_ PUCXHUB_WORKITEM WorkItem
_In_ UCXHUB_DEVICE_CONTEXT _In_ UCXENDPOINT Endpoint
FORCEINLINE PUCXHUB_UPDATE_TUNNEL_ANSWER NTAPI UcxHubUpdateTunnelAnswer(_In_ PUSBDEVICE_UPDATE Update)
#define UCXHUB_TUNNEL_STATE_NATIVE
_In_ PIRP _In_ PIO_COMPLETION_ROUTINE _In_ PVOID Context
#define ExFreePoolWithTag(_P, _T)
static PVOID ExAllocatePoolZero(ULONG PoolType, SIZE_T NumberOfBytes, ULONG Tag)
#define _Enum_is_bitflag_
#define _Out_writes_bytes_(s)
#define _In_reads_bytes_opt_(s)
#define UNREFERENCED_PARAMETER(P)
_In_ ULONG _In_ ULONG _In_ ULONG Length
#define STATUS_INTERNAL_ERROR
PACPI_EVAL_INPUT_BUFFER_COMPLEX Input
@ XhciDeviceFatalAddressDefault
@ XhciDeviceFatalDisableSlot
@ XhciDeviceFatalDeconfigure
@ XhciDeviceFatalSlotInUse
@ XhciDeviceFatalEnableSlot
@ XhciDeviceFatalResetDevice
#define XHCI_USB_DSM_REVISION
struct _XHCI_TUNNEL_DSM_WORK XHCI_TUNNEL_DSM_WORK
#define XHCI_USB_DSM_PORT_TUNNELED
static BOOLEAN NTAPI XhciCommandSucceeded(_In_ const XhciCommand *Command)
PACPI_METHOD_ARGUMENT Next
#define XHCI_ROUTE_TIER_MAX
_In_ const GUID _In_ ULONG _In_ ULONG Function
WDF_MEMORY_DESCRIPTOR InputDescriptor
static const GUID XhciGuidUsbDsm
#define XHCI_ROUTE_TIER_BITS
#define XHCI_USB_DSM_TUNNEL_STATE
struct _XHCI_TUNNEL_DSM_WORK * PXHCI_TUNNEL_DSM_WORK
_In_ const GUID _In_ ULONG _In_ ULONG _In_ USHORT ArgumentLength
@ XhciDeviceCheckAddressDefault
@ XhciDeviceCheckDisableSlot
@ XhciDeviceCheckDeconfigure
@ XhciDeviceCheckResetDevice
@ XhciDeviceCheckSlotInUse
#define XHCI_USB_DSM_PORT_NATIVE
_In_ const GUID _In_ ULONG Revision
WDF_MEMORY_DESCRIPTOR OutputDescriptor
static EVT_WDF_OBJECT_CONTEXT_CLEANUP XhciEvtUsbDeviceCleanup
#define XHCI_DEFAULT_CONTEXT_MASK
static PVOID NTAPI XhciRequestPayload(_In_ WDFREQUEST Request)
PFN_XHCI_COMMAND_DONE Done
PHYSICAL_ADDRESS LogicalAddress
USB_DEVICE_PORT_PATH PortPath
USB_DEVICE_SPEED DeviceSpeed
ULONG MaxExitLatencyTooLarge
USBDEVICE_UPDATE_FAILURE_FLAGS FailureFlags
ULONG PortPath[MAX_USB_DEVICE_DEPTH]
PUSBDEVICE_UPDATE Payload
#define FIELD_OFFSET(t, f)
#define RtlCopyMemory(Destination, Source, Length)
#define RtlZeroMemory(Destination, Length)
_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_ PUCXUSBDEVICE_INFO UcxUsbDeviceInfo
_In_ PUCXUSBDEVICE_INFO _In_ PUCXUSBDEVICE_INIT UsbDeviceInit
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFREQUEST Request
struct _ENDPOINTS_CONFIGURE * PENDPOINTS_CONFIGURE
_In_ UCXUSBDEVICE _In_ ULONG Interface
struct _USBDEVICE_DISABLE * PUSBDEVICE_DISABLE
struct _USBDEVICE_HUB_INFO * PUSBDEVICE_HUB_INFO
struct _USBDEVICE_RESET * PUSBDEVICE_RESET
struct _USBDEVICE_ADDRESS * PUSBDEVICE_ADDRESS
#define MAX_USB_DEVICE_DEPTH
FORCEINLINE VOID NTAPI UcxUsbDeviceInitSetEventCallbacks(_Inout_ PUCXUSBDEVICE_INIT UsbDeviceInit, _In_ PUCX_USBDEVICE_EVENT_CALLBACKS EventCallbacks)
struct _USBDEVICE_UPDATE * PUSBDEVICE_UPDATE
FORCEINLINE VOID NTAPI UCX_USBDEVICE_EVENT_CALLBACKS_INIT(_Out_ PUCX_USBDEVICE_EVENT_CALLBACKS Callbacks, _In_ PFN_UCX_USBDEVICE_ENDPOINTS_CONFIGURE EvtUsbDeviceEndpointsConfigure, _In_ PFN_UCX_USBDEVICE_ENABLE EvtUsbDeviceEnable, _In_ PFN_UCX_USBDEVICE_DISABLE EvtUsbDeviceDisable, _In_ PFN_UCX_USBDEVICE_RESET EvtUsbDeviceReset, _In_ PFN_UCX_USBDEVICE_ADDRESS EvtUsbDeviceAddress, _In_ PFN_UCX_USBDEVICE_UPDATE EvtUsbDeviceUpdate, _In_ PFN_UCX_USBDEVICE_HUB_INFO EvtUsbDeviceHubInfo, _In_ PFN_UCX_USBDEVICE_DEFAULT_ENDPOINT_ADD EvtUsbDeviceDefaultEndpointAdd, _In_ PFN_UCX_USBDEVICE_ENDPOINT_ADD EvtUsbDeviceEndpointAdd)
struct _USBDEVICE_ENABLE * PUSBDEVICE_ENABLE
#define STATUS_INVALID_PARAMETER
#define STATUS_NO_SUCH_DEVICE
#define STATUS_UNSUCCESSFUL
#define STATUS_INVALID_DEVICE_STATE
#define STATUS_INSUFFICIENT_RESOURCES
#define USB_ENDPOINT_TYPE_ISOCHRONOUS
enum _USB_DEVICE_SPEED USB_DEVICE_SPEED
PUSB_ROOT_HUB_NAME Output
_Must_inspect_result_ _In_ WDFCHILDLIST _In_ PWDF_CHILD_LIST_ITERATOR _Out_ WDFDEVICE _Inout_opt_ PWDF_CHILD_RETRIEVE_INFO Info
_Must_inspect_result_ _In_ WDFCOLLECTION _In_ WDFOBJECT Object
_In_ WDFCOLLECTION _In_ ULONG Index
_In_ WDFCOLLECTION _In_ WDFOBJECT Item
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
_In_ UCHAR _In_ UCHAR _In_ ULONG Code
FORCEINLINE VOID WDF_MEMORY_DESCRIPTOR_INIT_BUFFER(_Out_ PWDF_MEMORY_DESCRIPTOR Descriptor, _In_ PVOID Buffer, _In_ ULONG BufferLength)
#define WdfObjectDereferenceWithTag(Handle, Tag)
#define WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(_attributes, _contexttype)
#define WdfObjectReference(Handle)
#define WDF_DECLARE_CONTEXT_TYPE_WITH_NAME(_contexttype, _castingfunction)
#define WdfObjectReferenceWithTag(Handle, Tag)
#define WdfObjectDereference(Handle)
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
FORCEINLINE VOID WDF_REQUEST_PARAMETERS_INIT(_Out_ PWDF_REQUEST_PARAMETERS Parameters)
_In_ WDF_WMI_PROVIDER_CONTROL Control
FORCEINLINE VOID WDF_WORKITEM_CONFIG_INIT(_Out_ PWDF_WORKITEM_CONFIG Config, _In_ PFN_WDF_WORKITEM EvtWorkItemFunc)
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
_Inout_opt_ PVOID Parameter
EVT_UCX_USBDEVICE_ADDRESS XhciEvtUsbDeviceAddress
EVT_UCX_USBDEVICE_DISABLE XhciEvtUsbDeviceDisable
EVT_UCX_USBDEVICE_DEFAULT_ENDPOINT_ADD XhciEvtUsbDeviceDefaultEndpointAdd
EVT_UCX_USBDEVICE_ENDPOINT_ADD XhciEvtUsbDeviceEndpointAdd
EVT_UCX_USBDEVICE_ENDPOINTS_CONFIGURE XhciEvtUsbDeviceEndpointsConfigure
EVT_UCX_USBDEVICE_ENABLE XhciEvtUsbDeviceEnable
EVT_UCX_CONTROLLER_USBDEVICE_ADD XhciEvtControllerUsbDeviceAdd
EVT_UCX_USBDEVICE_RESET XhciEvtUsbDeviceReset
EVT_UCX_USBDEVICE_HUB_INFO XhciEvtUsbDeviceHubInfo
EVT_UCX_USBDEVICE_UPDATE XhciEvtUsbDeviceUpdate
struct _XHCI_INPUT_CONTROL_CONTEXT * PXHCI_INPUT_CONTROL_CONTEXT
#define XHCI_DEVICE_CONTEXT_COUNT
#define XHCI_CMD_BLOCK_SET_ADDRESS
#define XHCI_NOTIFICATION_DATA_MASK
#define XHCI_NOTIFICATION_TYPE_MASK
#define XHCI_TRB_ENDPOINT_MASK
#define XHCI_TRB_TYPE_SHIFT
struct _XHCI_SLOT_CONTEXT * PXHCI_SLOT_CONTEXT
#define XHCI_TRB_ENDPOINT_SHIFT
#define XHCI_NOTIFICATION_DATA_SHIFT
#define XHCI_SLOT_STATE_DEFAULT
#define XHCI_TRB_SLOT_SHIFT
#define XHCI_NOTIFICATION_FUNCTION_WAKE
#define XHCI_COMPLETION_PARAMETER_MASK
#define XHCI_INPUT_CONTEXT_COUNT
#define XHCI_NOTIFICATION_TYPE_SHIFT
#define XHCI_EVENT_DATA_TYPE_MASK
#define XHCI_TRB_TYPE_MASK
#define XHCI_ENDPOINT_STATE_DISABLED
FORCEINLINE ULONG NTAPI XhciTrbCompletionCode(_In_ const XHCI_TRB *Trb)
FORCEINLINE ULONG NTAPI XhciTrbSlotId(_In_ const XHCI_TRB *Trb)
#define XHCI_TAG_CONTROLLER