172 DPRINT1(
"Root hub %s: rejecting setup %02x %02x %04x %04x %04x\n",
182 return XhciGetRootHubContext(
UcxRootHub)->RootHub;
228 XhciGetRootHubContext(
Handle)->RootHub =
this;
256 DPRINT1(
"Protocol capability at 0x%lx has name 0x%08lx, skipped\n", Capability,
Name);
261 if (Major != 2 && Major != 3)
263 DPRINT1(
"USB protocol capability at 0x%lx with major revision %u, skipped\n", Capability, Major);
286 DPRINT1(
"Port %lu claimed by USB %u and USB %u protocol capabilities\n",
Number,
P->Major, Major);
299 P->LpmCapabilities = 0;
301 P->LpmCapabilities |= 0x01;
303 P->LpmCapabilities |= 0x02;
343 DPRINT1(
"Controller reports no root hub ports\n");
368 DPRINT1(
"No USB 2.x or 3.x protocol capability found\n");
395 P->TimerReady =
TRUE;
541 if (
P->ResumeOverrideCount > 0)
542 Milliseconds =
P->ResumeOverrideMs;
563 if (!
Hub->m_Controller->IsAccessible())
569 if (
Hub->m_Controller->HasErrata(XhciErrata::PortHighSpeedLpmOffForSuspend) &&
P->LpmEnabled)
620 if (
P->ResumeHandled)
626 P->ResumeHandled =
TRUE;
631 DPRINT1(
"Port %lu: USB 2.x device initiated resume\n",
P->Number);
642 DPRINT1(
"Port %lu: USB 3.x device initiated resume\n",
P->Number);
663 if (RepeatRequest && Step != 0 && (Step % 3) == 0)
667 if (PortSc != LastSeen)
673 DPRINT1(
"Port %lu: U3 wait on a port with no protocol\n",
P->Number);
695 DPRINT1(
"Port %lu: U3 transition still pending after 24 ms, PORTSC 0x%08lx\n",
P->Number, LastSeen);
715 else if (
P->Major == 3)
745 DPRINT1(
"Port %lu: link state %lu while forcing U0\n",
P->Number,
Link);
770 DPRINT1(
"Port %lu: suspend requested with PORTSC 0x%08lx\n",
P->Number, PortSc);
811 DPRINT1(
"Port %lu: acknowledged resume not done after 12 ms\n",
Number);
856 DPRINT1(
"Port %lu has no USB protocol, skipped at D0 entry\n",
Number);
897 UcxRootHubPortChanged(
m_Ucx);
959 UcxRootHubPortChanged(
m_Ucx);
983 if (
P->Major > Major)
1000 return P !=
NULL &&
P->Major == 2;
1013 if (
P ==
NULL ||
P->Major != 3)
1069 UcxRootHubPortChanged(
m_Ucx);
1113 P->LpmEnabled =
Parameters->HardwareLpmEnable != 0;
1151 P->ResumeOverrideMs = Milliseconds;
1152 P->ResumeOverrideCount++;
1166 P->ResumeOverrideCount--;
1221 DPRINT1(
"Root hub port feature: USBSTS reads all ones, controller gone\n");
1228 DPRINT1(
"Root hub port feature: controller halted, USBSTS 0x%08lx\n",
Status);
1243 Setup->wIndex.W == 0 &&
1244 Setup->wLength == 0 &&
1263 Setup->wValue.W != 0 ||
1264 Setup->wIndex.W != 0 ||
1297 DPRINT1(
"GetPortStatus: controller not accessible\n");
1302 Length = Extended ?
sizeof(
Out->AsUlong64) :
sizeof(
Out->PortStatusChange);
1310 !((
P->Major == 2 && !Extended) ||
P->Major == 3))
1326 DPRINT1(
"GetPortStatus: port %lu PORTSC reads all ones\n",
P->Number);
1331 Out->PortStatusChange.AsUlong32 = 0;
1352 DPRINT1(
"GetPortStatus: port %lu is in test mode\n",
P->Number);
1353 Status->PortTestMode = 1;
1430 DPRINT1(
"ClearPortFeature: controller not accessible\n");
1442 Setup->wLength != 0)
1450 else if (
P->Major == 3)
1481 DPRINT1(
"Port %lu: disable mapped to suspend with PORTSC 0x%08lx\n",
P->Number, PortSc);
1502 DPRINT1(
"Port %lu: resume requested with PORTSC 0x%08lx\n",
P->Number, PortSc);
1612 DPRINT1(
"SetPortFeature: controller not accessible\n");
1624 Setup->wLength != 0)
1632 else if (
P->Major == 3)
1806 P->ResumeHandled =
FALSE;
1836 DPRINT(
"GetPortErrorCount: controller not accessible\n");
1844 Setup->wValue.W != 0 ||
1881 DPRINT1(
"Status change transfer: controller not accessible\n");
1898 DPRINT1(
"Status change transfer without a buffer\n");
1920 DPRINT1(
"Status change transfer: port %lu PORTSC reads all ones\n",
Number);
2003 List.Minor =
P->Minor;
2013 if (SeenIds & (1UL <<
Id))
2015 DPRINT1(
"Port %lu: speed ID %lu listed twice\n",
P->Number,
Id);
2018 SeenIds |= 1UL <<
Id;
2030 if (++
Index >=
P->SpeedCount)
2032 DPRINT1(
"Port %lu: speed ID %lu has RX but no TX entry\n",
P->Number,
Id);
2040 DPRINT1(
"Port %lu: speed ID %lu RX entry followed by 0x%08lx\n",
P->Number,
Id,
Next);
2052 DPRINT1(
"Port %lu: speed ID %lu TX entry without RX\n",
P->Number,
Id);
2065 if ((SeenIds & 4) == 0)
2070 if ((SeenIds & 5) == 0)
2137 DPRINT(
"SetHubFeature stalled\n");
2185 DPRINT1(
"GetInfo: buffer too small\n");
2191 Info->NumberOf20Ports =
Hub->m_Usb20PortCount;
2192 Info->NumberOf30Ports =
Hub->m_Usb30PortCount;
2193 Info->MaxU1ExitLatency =
Hub->m_U1ExitLatency;
2194 Info->MaxU2ExitLatency =
Hub->m_U2ExitLatency;
2213 Info->NumberOfPorts !=
Hub->m_Usb20PortCount ||
2216 DPRINT1(
"Get20PortInfo: bad request, %u ports of %u bytes\n",
2222 NoLpm =
Hub->m_Controller->HasErrata(XhciErrata::PortHighSpeedLpmOff);
2234 Entry->MinorRevision =
P->Minor;
2235 Entry->HubDepth =
P->HubDepth;
2240 Entry->ControllerUsb20HardwareLpmFlags.AsUchar = NoLpm ? 0 :
P->LpmCapabilities;
2260 Info->NumberOfPorts !=
Hub->m_Usb30PortCount ||
2263 DPRINT1(
"Get30PortInfo: bad request, %u ports of %u bytes\n",
2279 Entry->MinorRevision =
P->Minor;
2280 Entry->HubDepth =
P->HubDepth;
2290 DPRINT1(
"Get30PortInfo: port %lu speed list failed 0x%lx\n",
P->Number,
Status);
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 void *Data ACPI_OBJECT_HANDLER void **Data ACPI_STRING ACPI_OBJECT_LIST ACPI_BUFFER *ReturnObjectBuffer ACPI_DEVICE_INFO **ReturnBuffer ACPI_HANDLE ACPI_HANDLE ACPI_HANDLE *OutHandle ACPI_HANDLE *OutHandle void *Context void *Context ACPI_EVENT_HANDLER Handler UINT32 UINT32 ACPI_GPE_HANDLER void *Context UINT32 ACPI_NOTIFY_HANDLER void *Context ACPI_ADR_SPACE_TYPE ACPI_ADR_SPACE_HANDLER ACPI_ADR_SPACE_SETUP Setup
_In_ ULONG const _In_ FEATURE_NUMBER const Feature
WDF_POWER_DEVICE_STATE m_PowerState
BOOLEAN HasErrata(_In_ XhciErrata Bit) const
BOOLEAN IsAccessible() const
XhciRegisters m_Registers
SystemAction m_SystemAction
ULONG ReadOperational32(_In_ ULONG Offset) const
ULONG ReadPort32(_In_ ULONG Port, _In_ ULONG Offset) const
ULONG FindExtendedCapability(_In_ ULONG Id, _In_ ULONG Start) const
ULONG ReadExtended32(_In_ ULONG Offset) const
VOID WritePort32(_In_ ULONG Port, _In_ ULONG Offset, _In_ ULONG Value)
static XhciRootHub * FromUcx(_In_ UCXROOTHUB UcxRootHub)
VOID ResuspendResumedPorts()
Outcome GetPortStatus(_In_ PURB Urb)
BOOLEAN AcknowledgeResume(_In_ Port *P, _In_ BOOLEAN PowerUp)
NTSTATUS WaitForU3(_In_ Port *P, _In_ BOOLEAN RepeatRequest)
Outcome GetHubStatus(_In_ PURB Urb)
Outcome SetUsb30LinkState(_In_ Port *P, _In_ UCHAR LinkState)
BOOLEAN IsPortConnected(_In_ const Port *P) const
static EVT_UCX_ROOTHUB_INTERRUPT_TX EvtInterruptTransfer
USHORT HighestUsbVersion() const
VOID Update20HardwareLpm(_In_ ULONG PortNumber, _In_ ULONG SlotId, _In_ const USBDEVICE_UPDATE_20_HARDWARE_LPM_PARAMETERS *Parameters)
Outcome ClearUsb20PortFeature(_In_ Port *P, _In_ USHORT Feature, _In_ UCHAR Value)
VOID ClearUsb20LpmLocked(_In_ Port *P)
static KDEFERRED_ROUTINE ResumeTimerDpc
static VOID CompleteHubRequest(_In_ WDFREQUEST Request, _In_ PURB Urb, _In_ Outcome Result)
VOID OnPortStatusChangeEvent(_In_ const XHCI_TRB *Event)
Outcome InterruptTransfer(_In_ PURB Urb)
ULONG ReadPortSc(_In_ const Port *P) const
VOID SetWakeEnables(_In_ BOOLEAN Arm)
Outcome ClearUsb30PortFeature(_In_ Port *P, _In_ USHORT Feature, _In_ UCHAR Value)
ULONG UpdatePortSc(_In_ Port *P, _In_ ULONG Keep, _In_ ULONG Set)
BOOLEAN m_PortScTunnelValid
BOOLEAN m_AwaitingStatusRead
NTSTATUS ParseProtocol(_In_ ULONG Capability, _Out_ PBOOLEAN Usable)
VOID DisableLpmForSlot(_In_ ULONG PortNumber, _In_ ULONG SlotId)
BOOLEAN IsUsb20Port(_In_ ULONG PortNumber) const
VOID StartResumeTimer(_In_ Port *P)
Outcome SetUsb20PortFeature(_In_ Port *P, _In_ USHORT Feature, _In_ UCHAR Value)
BOOLEAN IsHiddenDebugPort(_In_ const Port *P) const
static EVT_UCX_ROOTHUB_CONTROL_URB EvtClearPortFeature
Port * PortAt(_In_ ULONG PortNumber) const
static EVT_UCX_ROOTHUB_CONTROL_URB EvtGetPortErrorCount
static EVT_UCX_ROOTHUB_GET_20PORT_INFO EvtGet20PortInfo
static EVT_UCX_ROOTHUB_CONTROL_URB EvtSetHubFeature
Outcome SetUsb30PortFeature(_In_ Port *P, _In_ USHORT Feature, _In_ UCHAR Value)
Outcome ClearPortFeature(_In_ PURB Urb)
NTSTATUS WaitU0(_In_ Port *P)
static EVT_UCX_ROOTHUB_GET_30PORT_INFO EvtGet30PortInfo
VOID ArmPortResumeTimer(_In_ ULONG PortNumber, _In_ ULONG Milliseconds)
Outcome ClearHubFeature(_In_ PURB Urb)
static EVT_UCX_ROOTHUB_CONTROL_URB EvtGetHubStatus
UCHAR QueryTunnelState(_In_ ULONG PortNumber) const
static EVT_UCX_ROOTHUB_CONTROL_URB EvtSetPortFeature
VOID SuspendPort(_In_ Port *P)
VOID DisarmPortResumeTimer(_In_ ULONG PortNumber)
static EVT_UCX_ROOTHUB_CONTROL_URB EvtClearHubFeature
XhciController * m_Controller
static EVT_UCX_ROOTHUB_CONTROL_URB EvtGetPortStatus
static EVT_UCX_ROOTHUB_GET_INFO EvtGetInfo
Outcome GetPortErrorCount(_In_ PURB Urb)
VOID PostInterruptsEntry()
Outcome SetPortFeature(_In_ PURB Urb)
VOID UpdatePortReg(_In_ Port *P, _In_ ULONG Offset, _In_ ULONG Clear, _In_ ULONG Set)
NTSTATUS FillSpeeds(_In_ const Port *P, _Inout_ PROOTHUB_30PORT_INFO_EX Entry) const
ULONG UpdatePortScLocked(_In_ Port *P, _In_ ULONG Keep, _In_ ULONG Set)
NTSTATUS Create(_In_ XhciController *Controller)
_In_ HANDLE _In_ CONST PDXGKMDT_OPM_GET_INFO_PARAMETERS Parameters
_Check_return_ _In_ DXGK_EVENT_TYPE _In_ ULONG Event
_In_ ULONG _In_ ULONG _In_opt_ DXGKCB_MIRACAST_SEND_MESSAGE_CALLBACK Callback
#define NT_SUCCESS(StatCode)
static const struct token_string Errors[]
VOID NTAPI KeInitializeDpc(IN PKDPC Dpc, IN PKDEFERRED_ROUTINE DeferredRoutine, IN PVOID DeferredContext)
#define KeReleaseSpinLock(sl, irql)
#define KeAcquireSpinLock(sl, irql)
#define KeInitializeSpinLock(sl)
#define UCXHUB_TUNNEL_STATE_TUNNELED
#define UCXHUB_TUNNEL_STATE_UNKNOWN
#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 KeStallExecutionProcessor(MicroSeconds)
_Out_writes_bytes_to_opt_ AbsoluteSecurityDescriptorSize PSECURITY_DESCRIPTOR _Inout_ PULONG _Out_writes_bytes_to_opt_ DaclSize PACL _Inout_ PULONG _Out_writes_bytes_to_opt_ SaclSize PACL _Inout_ PULONG _Out_writes_bytes_to_opt_ OwnerSize PSID Owner
#define UNREFERENCED_PARAMETER(P)
_In_ ULONG _In_ ULONG Offset
_In_ ULONG _In_ ULONG _In_ ULONG Length
#define STATUS_ADAPTER_HARDWARE_ERROR
static PS2_PORT Ports[PS2_PORTS]
FORCEINLINE PUSB_DEFAULT_PIPE_SETUP_PACKET NTAPI XhciSetupOf(_In_ PURB Urb)
struct _XHCI_SPEED_LIST XHCI_SPEED_LIST
static PVOID NTAPI XhciTransferBuffer(_In_opt_ PVOID Buffer, _In_opt_ PMDL Mdl, _In_ ULONG Length, _In_ ULONG Needed)
static const UCHAR HubRequestFromPort
struct _XHCI_ROOTHUB_CONTEXT XHCI_ROOTHUB_CONTEXT
static const ULONG XhciU0WaitSteps
static VOID NTAPI XhciAddSpeed(_Inout_ PXHCI_SPEED_LIST List, _In_ ULONG Id, _In_ ULONG Exponent, _In_ ULONG Mantissa, _In_ ULONG Mode, _In_ ULONG Direction)
static PVOID NTAPI XhciRequestArgument(_In_ WDFREQUEST Request)
static VOID NTAPI XhciTraceBadRequest(_In_ PCSTR Callback, _In_ PURB Urb)
static const UCHAR HubRequestFromHub
@ FeatureHubOverCurrentChange
@ FeatureOverCurrentChange
@ FeatureHubLocalPowerChange
@ FeatureConfigErrorChange
@ FeatureForceLinkPmAccept
static const UCHAR HubRequestToHub
FORCEINLINE ULONG NTAPI XhciPortSpeed(_In_ ULONG PortSc)
struct _XHCI_ROOTHUB_CONTEXT * PXHCI_ROOTHUB_CONTEXT
struct _XHCI_SPEED_LIST * PXHCI_SPEED_LIST
static PVOID NTAPI XhciHubRequestBuffer(_In_ PURB Urb, _In_ ULONG Needed)
static const ULONG XhciPortGone
static const ULONG XhciResumeWaitSteps
static const UCHAR HubRequestToPort
FORCEINLINE BOOLEAN NTAPI XhciPortActive(_In_ ULONG PortSc)
static const ULONG XhciResumeSignalMs
static const ULONG XhciU3WaitSteps
FORCEINLINE ULONG NTAPI XhciLinkState(_In_ ULONG PortSc)
FORCEINLINE ULONG NTAPI XhciLinkWrite(_In_ ULONG State)
PACPI_METHOD_ARGUMENT Next
_In_ const GUID _In_ ULONG Revision
ULONG TransferBufferLength
ULONG TransferBufferLength
PUSB_DEVICE_CAPABILITY_SUPERSPEEDPLUS_SPEED Speeds
BOOLEAN NTAPI KeSetTimer(IN OUT PKTIMER Timer, IN LARGE_INTEGER DueTime, IN PKDPC Dpc OPTIONAL)
BOOLEAN NTAPI KeCancelTimer(IN OUT PKTIMER Timer)
VOID NTAPI KeInitializeTimer(OUT PKTIMER Timer)
#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
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFREQUEST Request
struct _ROOTHUB_INFO * PROOTHUB_INFO
FORCEINLINE VOID NTAPI UCX_ROOTHUB_CONFIG_INIT(_Out_ PUCX_ROOTHUB_CONFIG Config, _In_ PFN_UCX_ROOTHUB_CONTROL_URB EvtRootHubClearHubFeature, _In_ PFN_UCX_ROOTHUB_CONTROL_URB EvtRootHubClearPortFeature, _In_ PFN_UCX_ROOTHUB_CONTROL_URB EvtRootHubGetHubStatus, _In_ PFN_UCX_ROOTHUB_CONTROL_URB EvtRootHubGetPortStatus, _In_ PFN_UCX_ROOTHUB_CONTROL_URB EvtRootHubSetHubFeature, _In_ PFN_UCX_ROOTHUB_CONTROL_URB EvtRootHubSetPortFeature, _In_ PFN_UCX_ROOTHUB_CONTROL_URB EvtRootHubGetPortErrorCount, _In_ PFN_UCX_ROOTHUB_INTERRUPT_TX EvtRootHubInterruptTx, _In_ PFN_UCX_ROOTHUB_GET_INFO EvtRootHubGetInfo, _In_ PFN_UCX_ROOTHUB_GET_20PORT_INFO EvtRootHubGet20PortInfo, _In_ PFN_UCX_ROOTHUB_GET_30PORT_INFO EvtRootHubGet30PortInfo)
struct _ROOTHUB_20PORTS_INFO * PROOTHUB_20PORTS_INFO
struct _ROOTHUB_30PORT_INFO ROOTHUB_30PORT_INFO
struct _ROOTHUB_30PORTS_INFO * PROOTHUB_30PORTS_INFO
struct _ROOTHUB_20PORT_INFO ROOTHUB_20PORT_INFO
#define STATUS_INVALID_PARAMETER
#define STATUS_NO_SUCH_DEVICE
#define STATUS_UNSUCCESSFUL
#define STATUS_INSUFFICIENT_RESOURCES
#define USB_REQUEST_GET_STATUS
#define USB_REQUEST_SET_FEATURE
#define USB_REQUEST_CLEAR_FEATURE
#define PORT_LINK_STATE_DISABLED
#define PORT_LINK_STATE_U3
#define PORT_LINK_STATE_U1
#define PORT_LINK_STATE_COMPLIANCE_MODE
#define PORT_LINK_STATE_HOT_RESET
#define PORT_LINK_STATE_RECOVERY
#define PORT_LINK_STATE_TEST_MODE
#define USB_REQUEST_GET_PORT_ERR_COUNT
#define PORT_LINK_STATE_INACTIVE
#define PORT_LINK_STATE_U2
#define PORT_LINK_STATE_RX_DETECT
#define PORT_LINK_STATE_U0
#define USB_STATUS_EXT_PORT_STATUS
#define USB_STATUS_PORT_STATUS
union _USB_PORT_EXT_STATUS_AND_CHANGE * PUSB_PORT_EXT_STATUS_AND_CHANGE
#define USBD_STATUS_DEVICE_GONE
#define USBD_STATUS_STALL_PID
#define USBD_STATUS_SUCCESS
#define USBD_STATUS_PORT_OPERATION_PENDING
#define USBD_STATUS_XACT_ERROR
_In_opt_ PUSB_CONFIGURATION_DESCRIPTOR _Inout_ PUSBD_INTERFACE_LIST_ENTRY _Outptr_ PURB * Urb
for(Attempt=0;Attempt< UCX_LEGACY_NAME_ATTEMPTS;Attempt++)
_Must_inspect_result_ _In_ WDFCHILDLIST _In_ PWDF_CHILD_LIST_ITERATOR _Out_ WDFDEVICE _Inout_opt_ PWDF_CHILD_RETRIEVE_INFO Info
_In_ WDFCOLLECTION _In_ ULONG Index
_In_ WDFDEVICE _In_ PVOID _In_opt_ PMDL Mdl
WDF_EXTERN_C_START typedef _In_ WDFDEVICE _In_ WDFCONTEXT _In_ WDF_DMA_DIRECTION Direction
_Must_inspect_result_ _In_ PWDF_DPC_CONFIG _In_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFDPC * Dpc
_In_ WDFIOTARGET _In_ _Strict_type_match_ WDF_IO_TARGET_SENT_IO_ACTION Action
#define WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(_attributes, _contexttype)
#define WDF_DECLARE_CONTEXT_TYPE_WITH_NAME(_contexttype, _castingfunction)
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
_In_ WDFIOTARGET _In_ PWDF_REQUEST_COMPLETION_PARAMS Params
FORCEINLINE VOID WDF_REQUEST_PARAMETERS_INIT(_Out_ PWDF_REQUEST_PARAMETERS Parameters)
_Must_inspect_result_ _In_ WDFCMRESLIST List
_In_ NTSTATUS _In_ USBD_STATUS UsbdStatus
_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
_IRQL_requires_same_ _In_opt_ PVOID Argument1
#define KD_DEBUGGER_ENABLED
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
#define MmGetSystemAddressForMdlSafe(_Mdl, _Priority)
#define XHCI_PORTPMSC_HLE
#define XHCI_PSI_TYPE_MASK
#define XHCI_PSI_TYPE_ASYMMETRIC_RX
#define XHCI_EXTCAP_DEBUG
#define XHCI_PORTHLPMC_L1_TIMEOUT_SHIFT
#define XHCI_PROTOCOL_NAME_USB
#define XHCI_PORTHLPMC_L1_TIMEOUT_MASK
#define XHCI_PORTPMSC_L1_SLOT_MASK
#define XHCI_PORTPMSC_BESL_SHIFT
#define XHCI_PSI_TYPE_ASYMMETRIC_TX
#define XHCI_PORTPMSC_U2_TIMEOUT_MASK
#define XHCI_VENDOR_PORT_TUNNEL_STRIDE
#define XHCI_PORTSC_WAKE_MASK
#define XHCI_EXTCAP_USB4_TUNNELING
#define XHCI_PROTOCOL_HSO
#define XHCI_PORTPMSC_FLA
#define XHCI_HCS3_U2_LATENCY_SHIFT
#define XHCI_PORTSC_PIC_SHIFT
#define XHCI_PORTPMSC_BESL_MASK
#define XHCI_PORTPMSC_TEST_SHIFT
#define XHCI_PROTOCOL_COUNT_MASK
#define XHCI_PORTPMSC_TEST_MASK
#define XHCI_PROTOCOL_PORTS
#define XHCI_PORTLI_TX_LANES_SHIFT
#define XHCI_DBC_DCST_PORT_SHIFT
#define XHCI_PROTOCOL_OFFSET_MASK
#define XHCI_EXTCAP_SUPPORTED_PROTOCOL
#define XHCI_PORTLI_RX_LANES_SHIFT
#define XHCI_PSI_MANTISSA_SHIFT
#define XHCI_PORTSC_PLS_SHIFT
#define XHCI_PROTOCOL_PSIC_SHIFT
#define XHCI_PROTOCOL_NAME
#define XHCI_PORTSC_WAKE_SHIFT
#define XHCI_PSI_TYPE_SYMMETRIC
#define XHCI_PORTHLPMC_BESLD_MASK
#define XHCI_PORTSC_SPEED_MASK
#define XHCI_PROTOCOL_MHD_SHIFT
#define XHCI_VENDOR_PORT_TUNNEL_BASE
#define XHCI_PROTOCOL_BLC
#define XHCI_VENDOR_PORT_TUNNEL_ACTIVE
#define XHCI_PROTOCOL_REVISION
#define XHCI_PORTHLPMC_HIRDM_MASK
#define XHCI_PROTOCOL_MHD_MASK
#define XHCI_PORTPMSC_U2_TIMEOUT_SHIFT
#define XHCI_PROTOCOL_PSI
#define XHCI_PORTPMSC_U1_TIMEOUT_MASK
#define XHCI_PORTPMSC_RWE
#define XHCI_PROTOCOL_COUNT_SHIFT
#define XHCI_PROTOCOL_HLC
#define XHCI_PORTSC_PRESERVE
#define XHCI_PORTLI_ERROR_COUNT_MASK
#define XHCI_PROTOCOL_IHI
#define XHCI_PSI_TYPE_SHIFT
#define XHCI_PORTPMSC_L1_SLOT_SHIFT
#define XHCI_PSI_EXPONENT_MASK
#define XHCI_PORTHLPMC_BESLD_SHIFT
#define XHCI_EVENT_PORT_ID_SHIFT
#define XHCI_PORTSC_PIC_MASK
#define XHCI_PORTSC_SPEED_SHIFT
#define XHCI_PORTSC_TUNNELED
#define XHCI_PORTLI_TX_LANES_MASK
#define XHCI_USB4_CAP_PORTSC_TUNNEL_VALID
#define XHCI_PROTOCOL_MAJOR_SHIFT
#define XHCI_PORTSC_PLS_MASK
#define XHCI_HCS3_U1_LATENCY_MASK
#define XHCI_PSI_EXPONENT_SHIFT
#define XHCI_VENDOR_TUNNEL_STATUS
#define XHCI_VENDOR_TUNNEL_STATUS_ACTIVE
#define XHCI_PROTOCOL_MINOR_SHIFT
#define XHCI_PORTLI_RX_LANES_MASK
FORCEINLINE LARGE_INTEGER NTAPI XhciRelativeMs(_In_ ULONG Milliseconds)
_In_ PLARGE_INTEGER _In_opt_ PTIMER_APC_ROUTINE _In_opt_ PVOID _In_ BOOLEAN ResumeTimer