17 { 0x496b8280, 0x6f25, 0x11d0, { 0xbe, 0xaf, 0x08, 0x00, 0x2b, 0xe2, 0x09, 0x2f } };
19 { 0xb38290e5, 0x3cd0, 0x4f9d, { 0x99, 0x37, 0xf5, 0xfe, 0x2b, 0x44, 0xd4, 0x7a } };
21 { 0x9d7debbc, 0xc85d, 0x11d1, { 0x9e, 0xb4, 0x00, 0x60, 0x08, 0xc3, 0xa1, 0x9a } };
23 { 0x3abf6f2d, 0x71c4, 0x462a, { 0x8a, 0x92, 0x1e, 0x68, 0x61, 0xe6, 0xaf, 0x27 } };
25 { 0xf5ceeb23, 0xad90, 0x458c, { 0x97, 0x9a, 0xd5, 0x9b, 0x3a, 0xd6, 0x88, 0x4f } };
27 { 0x09051e1f, 0x0dc9, 0x4e6b, { 0x8b, 0x12, 0x96, 0x0c, 0xbd, 0x81, 0xaa, 0x8f } };
29 { 0x755c630d, 0xc8a0, 0x4765, { 0x94, 0x6f, 0x90, 0xcc, 0x70, 0x38, 0x56, 0xa4 } };
31 { 0xf4563183, 0xd66e, 0x42bd, { 0xbd, 0x53, 0x1a, 0xc7, 0xb0, 0x4c, 0xd5, 0x9d } };
33 { 0x9c8a8a27, 0x15f9, 0x42e3, { 0xa3, 0x56, 0xcd, 0xa6, 0xae, 0x97, 0xa8, 0xc8 } };
35 { 0x09b76d52, 0x0a6d, 0x4e4f, { 0xa9, 0x11, 0xd0, 0x36, 0xd1, 0x92, 0x94, 0x97 } };
37 { 0xac340cb7, 0xe901, 0x45bf, { 0xb7, 0xe6, 0x2b, 0x34, 0xec, 0x93, 0x1e, 0x23 } };
40#define XHCI_RECOVER_NONE 0x00
41#define XHCI_RECOVER_INTERNAL_RESET 0x01
42#define XHCI_RECOVER_RESET 0x02
43#define XHCI_RECOVER_NO_RESTART 0x04
44#define XHCI_RECOVER_GONE 0x08
45#define XHCI_RECOVER_GONE_PNP 0x10
46#define XHCI_RECOVER_REPORT_FAILED 0x20
49#define XHCI_REASON_NO_LIVE_DUMP 0x0000
50#define XHCI_REASON_HOST_SYSTEM_ERROR 0x1001
51#define XHCI_REASON_HOST_CONTROLLER_ERROR 0x1002
52#define XHCI_REASON_RESET_FAILED 0x1007
53#define XHCI_REASON_RESTART_FAILED 0x1008
54#define XHCI_REASON_STOP_FAILED 0x100B
55#define XHCI_REASON_NOT_SUPPORTED 0x100C
56#define XHCI_REASON_REMOVED 0x100D
57#define XHCI_REASON_OLD_FIRMWARE 0x100F
58#define XHCI_REASON_START_FAILED 0x101C
59#define XHCI_REASON_TEST_RESET 0x103F
62#define XHCI_VERIFY_FIRMWARE_OUTDATED 0x00000001
63#define XHCI_VERIFY_HSE 0x00000002
64#define XHCI_VERIFY_HCE 0x00000004
65#define XHCI_VERIFY_STOP_TIMEOUT 0x00000008
66#define XHCI_VERIFY_RESET_TIMEOUT 0x00000010
67#define XHCI_VERIFY_START_TIMEOUT 0x00000020
68#define XHCI_VERIFY_ALL_ONES 0x00000040
69#define XHCI_VERIFY_SAVE_RESTORE 0x00400000
71#define XHCI_WATCHDOG_PERIOD_MS 5000
72#define XHCI_WATCHDOG_TOLERANCE_MS 1000
73#define XHCI_RESET_LIMIT 10
74#define XHCI_RESET_WINDOW_TICKS 60
75#define XHCI_IDLE_TIMEOUT_LONG_MS 5000
76#define XHCI_IDLE_TIMEOUT_SHORT_MS 1
77#define XHCI_PAD_BUFFER_SIZE 512
78#define XHCI_ACPI_PARENT_ID 0x7FFFFFFF
80#define XHCI_BUGCHECK_USB3_DRIVER 0x144
81#define XHCI_TEST_RESET_IOCTL 0x00220FB7
82#define XHCI_DEVICE_USED_BY_DEBUGGER 0x02000000
84#define XHCI_ACPI_GET_DEVICE_INFORMATION \
85 CTL_CODE(FILE_DEVICE_ACPI, 10, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
172 return XhciGetFdoContext(
Device)->Controller;
186 if (Bit != XhciErrata::RegSplit64BitAccess && Bit != XhciErrata::IntPrimaryOnly)
187 DPRINT1(
"Errata bit %lu set after population\n",
static_cast<ULONG>(Bit));
197 DPRINT(
"Controller %p not accessible\n",
this);
237 sizeof(*Bus), 1,
NULL);
247 DPRINT1(
"PCI config space read came back short\n");
253 Id->PciRevisionId =
Config.RevisionID;
254 Id->PciSubsystemVendorId =
Config.u.type0.SubVendorID;
255 Id->PciSubsystemId =
Config.u.type0.SubSystemID;
258 if (
Id->PciVendorId == 0x1106 &&
Id->PciDeviceId == 0x3432)
264 DPRINT1(
"VIA firmware version read failed\n");
270 else if (
Id->PciVendorId == 0x1106 && (
Id->PciDeviceId == 0x3483 ||
Id->PciDeviceId == 0x9201))
275 DPRINT1(
"VIA firmware version read failed\n");
328 DPRINT1(
"ACPI device information size query returned 0x%lx\n",
Status);
335 DPRINT1(
"ACPI device information size %lu too small\n",
Size);
342 DPRINT1(
"No memory for %lu bytes of ACPI device information\n",
Size);
351 DPRINT1(
"ACPI device information query failed 0x%lx\n",
Status);
359 VendorOffset =
Info->VendorIdStringOffset;
365 if (VendorOffset == 0)
370 else if (
DeviceOffset == 0 || DeviceOffset < VendorOffset || DeviceOffset > VendorOffset +
Length)
401 sizeof(Enumerator), Enumerator, &
Length);
404 DPRINT1(
"Enumerator name query failed 0x%lx, assuming PCI\n",
Status);
406 else if (
_wcsicmp(Enumerator,
L"ACPI") == 0)
410 else if (
_wcsicmp(Enumerator,
L"URS") == 0)
414 DPRINT1(
"Controllers below the role switch enumerator are not supported\n");
435 static const PCWSTR Providers[] = {
L"USBXHCI",
L"USBXHCI2" };
454 m_Identity.PciVendorId);
456 Keys[1], m_Identity.PciDeviceId);
458 Keys[2], m_Identity.PciRevisionId);
463 m_Identity.AcpiVendorId);
465 Keys[1], m_Identity.AcpiDeviceId);
467 Keys[2], m_Identity.AcpiRevisionId);
474 Keys[3], m_Identity.FirmwareVersion);
481 Keys[2], m_Identity.PciSubsystemId, m_Identity.PciSubsystemVendorId);
483 Keys[KeyCount], m_Identity.PciRevisionId);
505 DPRINT(
"No errata database entry for this controller\n");
515 DPRINT1(
"Controller firmware 0x%I64x is outdated\n", m_Identity.FirmwareVersion);
533 DPRINT1(
"Driver parameters key open failed 0x%lx\n",
Status);
552 m_Errata &= ~XhciErrataBit(XhciErrata::BootStrictBiosRelease);
571 else if (Vendor == 0x1B73 &&
Device == 0x1009)
573 else if (Vendor == 0x1B6F &&
Device == 0x7023)
575 else if (Vendor == 0x1B21 &&
Device >= 0x1040 &&
Device <= 0x1042)
588 DPRINT1(
"Controller %04lx:%04lx rev %02x errata 0x%I64x 0x%I64x internal 0x%I64x\n",
629 L"\\Registry\\Machine\\System\\CurrentControlSet\\Control\\usb\\HardwareVerifier\\%s\\%s",
644 DPRINT1(
"Hardware verifier settings read failed 0x%lx\n",
Status);
652XhciController::VerifierCheck(
655 DPRINT1(
"Controller %p hardware verifier condition 0x%lx\n",
this,
Flag);
680 DPRINT(
"ACPI method evaluation failed 0x%lx\n",
Status);
682 DPRINT(
"ACPI method returned signature 0x%lx\n",
Output.Signature);
705 Input->MethodNameAsUlong =
'MSD_';
707 Input->ArgumentCount = 4;
729 Input.MethodNameAsUlong =
'IMRP';
745 Settings.IdleTimeout = Milliseconds;
752 DPRINT(
"Idle timeout %lu ms refused 0x%lx\n", Milliseconds,
Status);
769 DPRINT1(
"S0 idle disabled by errata\n");
774 if (
HasErrata(XhciErrata::AcpiDsmAllowD3Cold))
782 DPRINT(
"No D3cold interface 0x%lx, S0 idle off\n",
Status);
792 DPRINT1(
"Idle wake information query failed 0x%lx\n",
Status);
802 DPRINT(
"Controller cannot wake from a Dx state in S0, S0 idle off\n");
811 DPRINT(
"Power framework registration skipped\n");
815XhciController::OnRootHubD0Entry()
828XhciController::NotifyPortConnectState(
832 DPRINT(
"Port connect state %u not reported, no power framework\n", AnyConnected);
841 if (!Arm &&
HasErrata(XhciErrata::PortHoldWakeMaskAwake))
872 XhciGetObjectContext(
m_Watchdog)->Controller =
this;
882 DPRINT1(
"Idle timeout work item creation failed 0x%lx\n",
Status);
885 XhciGetObjectContext(
m_IdleItem)->Controller =
this;
893 DPRINT1(
"Recovery work item creation failed 0x%lx\n",
Status);
907 _In_ UCXCONTROLLER Ucx,
945 if (
HasErrata(XhciErrata::HostRefuseToStart))
947 DPRINT1(
"Controller is marked as not supported\n");
977 DPRINT1(
"Device slot table creation failed 0x%lx\n",
Status);
988 if (
HasErrata(XhciErrata::IntelPchBandwidthCap))
989 DPRINT1(
"Panther Point command filter not implemented, endpoint limit not enforced\n");
998 DPRINT(
"Controller capability WMI block not provided\n");
1046 DPRINT1(
"Assigning the FDO security failed 0x%lx\n",
Status);
1053 DPRINT1(
"FDO name %wZ taken, trying the next one\n", &
Name);
1084 WdfDeviceSetBusInformationForChildren(*
Device, &BusInfo);
1089 DPRINT1(
"Host controller interface registration failed 0x%lx\n",
Status);
1136 WdfDeviceInitSetPnpPowerEventCallbacks(
DeviceInit, &PnpPower);
1144 WdfDeviceInitSetPowerPolicyEventCallbacks(
DeviceInit, &PowerPolicy);
1150 WdfFdoInitSetEventCallbacks(
DeviceInit, &FdoCallbacks);
1158 DPRINT1(
"Power IRP preprocess registration failed 0x%lx\n",
Status);
1168 DPRINT1(
"Internal IOCTL preprocess registration failed 0x%lx\n",
Status);
1223 if (
Identity.PciInterface.InterfaceDereference !=
NULL)
1256 _In_ WDFCMRESLIST Translated)
1306 DPRINT1(
"Controller %p failed to prepare hardware 0x%lx\n",
this,
Status);
1369 DPRINT1(
"Controller registers read all ones at D0 entry\n");
1381 DPRINT1(
"BIOS handoff on hibernate resume failed 0x%lx\n",
Status);
1390 DPRINT1(
"Reset on hibernate resume failed 0x%lx\n",
Status);
1399 if (
HasErrata(XhciErrata::AcpiDsmHsicSuspendDetach))
1402 Restore = !
HasErrata(XhciErrata::PwrSkipSaveRestore) &&
1431 DPRINT1(
"Controller reset at D0 entry failed 0x%lx\n",
Status);
1449 UcxControllerResetComplete(
m_Ucx, &ResetInfo);
1525 DPRINT1(
"Firmware version command %lu failed, status 0x%lx code %lu\n",
1546 if (!Renesas && !Asmedia && !Nvidia)
1592 if (
HasErrata(XhciErrata::HostRefuseToStart))
1594 DPRINT1(
"Controller is marked as not supported\n");
1606 if (
HasErrata(XhciErrata::AcpiNotifyBeforeIntOff))
1628 DPRINT1(
"Controller stop at D0 exit failed 0x%lx\n",
Status);
1642 DPRINT(
"Controller state save failed 0x%lx\n",
Status);
1650 if (
HasErrata(XhciErrata::AcpiDsmHsicSuspendDetach))
1673 DPRINT1(
"Controller shared with the kernel debugger; low power epoch tracking unavailable\n");
1675 DPRINT(
"Friendly name not set\n");
1684 DPRINT1(
"No split transfer pad buffer, transfers run without it\n");
1704 DPRINT1(
"Device key open for the recovery counters failed 0x%lx\n",
Status);
1751 switch (
Stack->Parameters.Power.State.SystemState)
1775 DPRINT1(
"Unexpected system power state %d\n",
Stack->Parameters.Power.State.SystemState);
1801 return (
LONG64)((
Base << 21) | ((Frame >> 11) & 0x1FFFFF));
1812XhciController::GetFrameNumber(
1825 Estimate = (
ULONG)((Snapshot & 0x1FFFFF) << 11) + (
ULONG)(
Now - (Snapshot >> 21));
1833 Low = Estimate & 0x7FF;
1836 if (Low < Hardware && Hardware - Low > 0x400)
1858 DPRINT1(
"Watchdog read all ones, controller gone\n");
1866 DPRINT1(
"Host System Error, USBSTS 0x%08lx\n", Usbsts);
1874 DPRINT1(
"Host Controller Error, USBSTS 0x%08lx\n", Usbsts);
1892XhciController::RaiseControllerFault(
1900 case XhciRecovery::Ignore:
1903 case XhciRecovery::ResetHost:
1906 case XhciRecovery::InternalReset:
1909 case XhciRecovery::Gone:
1913 case XhciRecovery::Disable:
1914 case XhciRecovery::HoldStopped:
1920 QueueRecovery(Actions,
Reason);
1930XhciController::SetGone(
1933 if (ReportToPnp && !
m_Gone)
1935 DPRINT1(
"Controller %p registers read all ones, marking it gone\n",
this);
1948XhciController::QueueRecovery(
1961 DPRINT1(
"Controller %p recovery 0x%lx requested, reason 0x%lx\n",
this, Actions,
Reason);
1974 static LONG InlineResets;
1985 UcxControllerNeedsReset(
m_Ucx);
1991 DPRINT1(
"Boot path internal resets overlap\n");
1997 UcxControllerNeedsReset(
m_Ucx);
2001 DPRINT1(
"Boot path recovery 0x%lx has no handler\n", Actions);
2006XhciController::DisableController()
2017 DPRINT1(
"Controller is not on PCI, cannot disable it\n");
2020 KeFlushQueuedDpcs();
2035 while (Actions != 0)
2043 KeFlushQueuedDpcs();
2047 KeFlushQueuedDpcs();
2048 UcxControllerSetFailed(
m_Ucx);
2067 DisableController();
2074 Actions &= ~XHCI_RECOVER_INTERNAL_RESET;
2078 UcxControllerNeedsReset(
m_Ucx);
2079 Actions &= ~XHCI_RECOVER_RESET;
2084 Actions &= ~XHCI_RECOVER_REPORT_FAILED;
2088 DPRINT1(
"Recovery actions 0x%lx not understood\n", Actions);
2121 DPRINT1(
"Controller %p internal reset entered twice\n",
this);
2130 KeFlushQueuedDpcs();
2132 KeFlushQueuedDpcs();
2136 DPRINT1(
"Stop before internal reset failed 0x%lx\n", StopStatus);
2137 DisableController();
2161 DPRINT1(
"Internal reset failed 0x%lx\n", ResetStatus);
2171 DPRINT1(
"Start after internal reset failed 0x%lx\n",
Status);
2184 DPRINT1(
"Controller %p internal reset ended with 0x%lx\n",
this,
Status);
2186 UcxControllerSetFailed(
m_Ucx);
2200 DPRINT1(
"UCX reset of an inaccessible controller skipped\n");
2204 UcxControllerResetComplete(
m_Ucx, &
Info);
2233 DPRINT1(
"Stream capability buffer missing\n");
2260 DPRINT1(
"Isoch capability buffer missing\n");
2543 XhciGetObjectContext(
Timer)->Controller->WatchdogTick();
2552 XhciGetObjectContext(
WorkItem)->Controller->RecoveryWorker();
2561 XhciGetObjectContext(
WorkItem)->Controller->IdleTimeoutWorker();
static PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(PIRP Irp)
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_EVAL_INPUT_BUFFER_SIGNATURE
#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
struct _ACPI_EVAL_INPUT_BUFFER_COMPLEX ACPI_EVAL_INPUT_BUFFER_COMPLEX
#define InterlockedIncrement
#define InterlockedExchange
#define InterlockedDecrement
DECLSPEC_NORETURN VOID NTAPI KeBugCheckEx(IN ULONG BugCheckCode, IN ULONG_PTR BugCheckParameter1, IN ULONG_PTR BugCheckParameter2, IN ULONG_PTR BugCheckParameter3, IN ULONG_PTR BugCheckParameter4)
_In_ BOOLEAN _In_ BOOLEAN SetIdleTimeout
_In_ CDROM_SCAN_FOR_SPECIAL_INFO _In_ PCDROM_SCAN_FOR_SPECIAL_HANDLER Function
WdfDeviceWdmDispatchPreprocessedIrp(Device, Irp)
WdfDeviceSetSpecialFileSupport(Device, WdfSpecialFilePaging, TRUE)
VOID PostInterruptsEntry()
NTSTATUS Create(_In_ XhciController *Controller)
NTSTATUS Create(_In_ XhciController *Controller)
WDF_POWER_DEVICE_STATE m_PowerState
KSPIN_LOCK m_RecoveryLock
NTSTATUS Initialize(_In_ WDFDEVICE Device, _In_ UCXCONTROLLER Ucx, _In_ const XhciIdentity *Identity)
NTSTATUS D0EntryPostInterruptsEnabled(_In_ WDF_POWER_DEVICE_STATE PreviousState)
NTSTATUS PrepareHardware(_In_ WDFCMRESLIST Raw, _In_ WDFCMRESLIST Translated)
VOID UsageNotification(_In_ WDF_SPECIAL_FILE_TYPE Type, _In_ BOOLEAN InPath)
VOID QueryErrataDatabase(_In_ BOOLEAN AtAddDevice)
static XhciController * FromDevice(_In_ WDFDEVICE Device)
XhciCommonBuffer m_Buffers
BOOLEAN HasErrata(_In_ XhciErrata Bit) const
XhciInterrupters m_Interrupters
VOID SelfManagedIoCleanup()
PDEVICE_OBJECT m_WdmDevice
NTSTATUS RunD0Pass(_In_ BOOLEAN Restore)
VOID SetIdleTimeout(_In_ ULONG Milliseconds)
XhciCommandRing m_Commands
NTSTATUS QueryUsbCapability(_In_ const GUID *Capability, _In_ ULONG OutputBufferLength, _Out_writes_bytes_opt_(OutputBufferLength) PVOID OutputBuffer, _Out_ PULONG ResultLength)
VOID BootRecovery(_In_ ULONG Actions)
VOID SetPortWake(_In_ BOOLEAN Arm)
BOOLEAN IsAccessible() const
BOOLEAN m_ReservedIoArmed
VOID RunFirmwareCommands()
VOID EvaluateDsm(_In_ ULONG Function)
VOID TrackSystemPowerIrp(_In_ PIO_STACK_LOCATION Stack)
VOID ReadRegistryErrata()
BOOLEAN m_FrameSnapshotReady
VOID RunRecovery(_In_ ULONG Actions)
VOID SetErrata(_In_ XhciErrata Bit)
XhciRegisters m_Registers
XhciDmaBuffer * m_SplitPadBuffer
VOID UpdateRegistryCounters()
SystemAction m_SystemAction
NTSTATUS StartController()
static XhciController * FromUcx(_In_ UCXCONTROLLER UcxController)
VOID D0ExitPreInterruptsDisabled()
WDFWORKITEM m_RecoveryItem
NTSTATUS CreateWdfObjects()
VOID D0Exit(_In_ WDF_POWER_DEVICE_STATE TargetState)
NTSTATUS D0Entry(_In_ WDF_POWER_DEVICE_STATE PreviousState)
NTSTATUS Create(_In_ XhciController *Controller)
NTSTATUS Prepare(_In_ WDFCMRESLIST Raw, _In_ WDFCMRESLIST Translated)
VOID D0ExitPreInterruptsDisabled()
NTSTATUS D0Entry(_In_ BOOLEAN StatePreserved)
ULONG ReadOperational32(_In_ ULONG Offset) const
ULONG ReadCapability32(_In_ ULONG Offset) const
UCHAR VersionMajor() const
NTSTATUS ResetController(_In_ BOOLEAN AllowRunning)
NTSTATUS Prepare(_In_ XhciController *Controller, _In_ WDFCMRESLIST Translated)
VOID ProgramSsicPortUnused(_In_ BOOLEAN PowerDown)
ULONG SupportedStreams() const
ULONG CurrentFrame(_In_ ULONG Increment) const
VOID ApplyD0Workarounds()
VOID SetWakeEnables(_In_ BOOLEAN Arm)
VOID PostInterruptsEntry()
NTSTATUS Create(_In_ XhciController *Controller)
NTSTATUS Create(_In_ XhciController *Controller)
#define STATUS_NOT_SUPPORTED
#define STATUS_NOT_IMPLEMENTED
_Check_return_ _In_ DXGK_EVENT_TYPE _In_ ULONG _In_ PVOID Argument
_In_ D3DDDI_VIDEO_PRESENT_TARGET_ID _In_ ULONG _In_ ULONG Flags
#define NT_SUCCESS(StatCode)
static GLfloat Identity[16]
#define _strnicmp(_String1, _String2, _MaxCount)
_ACRTIMP int __cdecl _wcsicmp(const wchar_t *, const wchar_t *)
return WdfRegistryQueryValue(Key, &ValueName, sizeof(*Value), Value, NULL, NULL)
return WdfRegistryOpenKey(NULL, &KeyName, Access, WDF_NO_OBJECT_ATTRIBUTES, Key)
#define KeWaitForSingleObject(pEvt, foo, a, b, c)
#define KeReleaseSpinLock(sl, irql)
#define KeAcquireSpinLock(sl, irql)
#define KeGetCurrentIrql()
#define KeInitializeSpinLock(sl)
#define XHCI_REASON_NO_LIVE_DUMP
WdfRegistryClose(HardwareKey)
IN OUT PLONG IN OUT PLONG Addend IN OUT PLONG IN LONG Increment
static EVT_WDF_DEVICE_WAKE_FROM_S0_TRIGGERED XhciEvtDeviceWakeFromS0Triggered
static const GUID XhciGuidBusTypeUsb
static const GUID XhciGuidStaticStreams
#define XHCI_TEST_RESET_IOCTL
#define XHCI_IDLE_TIMEOUT_SHORT_MS
static EVT_WDF_DEVICE_ARM_WAKE_FROM_S0 XhciEvtDeviceArmWakeFromS0
static EVT_WDF_WORKITEM XhciEvtRecoveryWork
static VOID NTAPI XhciEvaluateAcpiMethod(_In_ WDFDEVICE Device, _In_reads_bytes_(InputSize) PVOID Input, _In_ ULONG InputSize)
#define XHCI_RECOVER_NO_RESTART
static EVT_WDF_DEVICE_D0_ENTRY_POST_INTERRUPTS_ENABLED XhciEvtDeviceD0EntryPostInterruptsEnabled
#define XHCI_RECOVER_INTERNAL_RESET
static EVT_UCX_CONTROLLER_GET_CURRENT_FRAMENUMBER XhciEvtControllerGetCurrentFrameNumber
#define XHCI_REASON_START_FAILED
static EVT_WDF_DEVICE_SELF_MANAGED_IO_CLEANUP XhciEvtDeviceSelfManagedIoCleanup
static EVT_WDF_DEVICE_USAGE_NOTIFICATION XhciEvtDeviceUsageNotification
static EVT_WDF_IO_QUEUE_IO_DEVICE_CONTROL XhciEvtIoDeviceControl
static const GUID XhciGuidSelectiveSuspend
static NTSTATUS NTAPI XhciQueryPciIdentity(_In_ WDFDEVICE Device, _Inout_ XhciIdentity *Id)
#define XHCI_RECOVER_GONE_PNP
static EVT_UCX_CONTROLLER_QUERY_USB_CAPABILITY XhciEvtControllerQueryUsbCapability
NTSTATUS(NTAPI * PFN_XHCI_QUERY_DEVICE_FLAGS)(_In_ PCWSTR DeviceKey, _In_ PCWSTR Category, _Out_ PULONG64 Flags)
static NTSTATUS NTAPI XhciQueryIdentity(_In_ WDFDEVICE Device, _Out_ XhciIdentity *Id)
#define XHCI_DEVICE_USED_BY_DEBUGGER
static const GUID XhciGuidBusInterfaceStandard
struct _XHCI_OBJECT_CONTEXT XHCI_OBJECT_CONTEXT
static const GUID XhciGuidHostControllerInterface
#define XHCI_ACPI_GET_DEVICE_INFORMATION
#define XHCI_IDLE_TIMEOUT_LONG_MS
#define XHCI_RECOVER_RESET
static VOID NTAPI XhciFirmwareCommandDone(_In_ XhciCommand *Command)
static EVT_WDFDEVICE_WDM_IRP_PREPROCESS XhciEvtPreprocessInternalIoctl
#define XHCI_REASON_RESTART_FAILED
#define XHCI_REASON_REMOVED
struct _XHCI_OBJECT_CONTEXT * PXHCI_OBJECT_CONTEXT
static EVT_WDF_DEVICE_FILTER_RESOURCE_REQUIREMENTS XhciEvtDeviceFilterAddResourceRequirements
static VOID NTAPI XhciCopyAcpiId(_Out_writes_(MAX_VENDOR_ID_STRING_LENGTH) PCHAR Destination, _In_reads_(Length) const CHAR *Source, _In_ ULONG Length)
static EVT_WDF_DEVICE_DISARM_WAKE_FROM_S0 XhciEvtDeviceDisarmWakeFromS0
#define XHCI_ACPI_PARENT_ID
#define XHCI_REASON_RESET_FAILED
#define XHCI_RESET_WINDOW_TICKS
static const GUID XhciGuidHighBandwidthIsoch
#define XHCI_REASON_OLD_FIRMWARE
static EVT_WDF_OBJECT_CONTEXT_CLEANUP XhciEvtFdoCleanup
static EVT_WDF_DEVICE_PREPARE_HARDWARE XhciEvtDevicePrepareHardware
#define XHCI_REASON_NOT_SUPPORTED
static EVT_WDFDEVICE_WDM_IRP_PREPROCESS XhciEvtPreprocessSetPower
#define XHCI_RECOVER_REPORT_FAILED
#define XHCI_REASON_STOP_FAILED
static NTSTATUS NTAPI XhciQueryAcpiIdentity(_In_ WDFDEVICE Device, _Inout_ XhciIdentity *Id)
static EVT_WDF_DEVICE_D0_EXIT_PRE_INTERRUPTS_DISABLED XhciEvtDeviceD0ExitPreInterruptsDisabled
static EVT_WDF_WORKITEM XhciEvtIdleTimeoutWork
#define XHCI_PAD_BUFFER_SIZE
#define XHCI_VERIFY_FIRMWARE_OUTDATED
struct _XHCI_FDO_CONTEXT XHCI_FDO_CONTEXT
#define XHCI_VERIFY_START_TIMEOUT
static LONG64 NTAPI XhciPackFrameSnapshot(_In_ ULONG Frame, _In_ ULONG64 Now)
struct _XHCI_ACPI_DEVICE_INFO * PXHCI_ACPI_DEVICE_INFO
#define XHCI_VERIFY_SAVE_RESTORE
static EVT_WDF_DEVICE_REMOVE_ADDED_RESOURCES XhciEvtDeviceRemoveAddedResources
#define XHCI_REASON_TEST_RESET
static EVT_WDF_DEVICE_RELEASE_HARDWARE XhciEvtDeviceReleaseHardware
static EVT_WDF_DEVICE_ARM_WAKE_FROM_SX XhciEvtDeviceArmWakeFromSx
static EVT_WDF_DEVICE_FILTER_RESOURCE_REQUIREMENTS XhciEvtDeviceFilterRemoveResourceRequirements
static BOOLEAN NTAPI XhciSendFirmwareCommand(_In_ XhciController *Controller, _In_ ULONG Type, _Out_ PULONG Parameter)
static EVT_UCX_CONTROLLER_RESET XhciEvtControllerReset
#define XHCI_RECOVER_NONE
static const GUID XhciGuidDsm
#define XHCI_BUGCHECK_USB3_DRIVER
#define XHCI_WATCHDOG_TOLERANCE_MS
#define XHCI_RECOVER_GONE
static NTSTATUS NTAPI XhciCreateFdo(_Inout_ PWDFDEVICE_INIT DeviceInit, _In_ PWDF_OBJECT_ATTRIBUTES Attributes, _Out_ WDFDEVICE *Device)
static EVT_WDF_DEVICE_SELF_MANAGED_IO_INIT XhciEvtDeviceSelfManagedIoInit
static const GUID XhciGuidChainedMdls
static const GUID XhciGuidClearTtBufferOnCancel
struct _XHCI_ACPI_DEVICE_INFO XHCI_ACPI_DEVICE_INFO
#define XHCI_REASON_HOST_SYSTEM_ERROR
#define XHCI_REASON_HOST_CONTROLLER_ERROR
static EVT_WDF_DEVICE_D0_EXIT XhciEvtDeviceD0Exit
#define XHCI_WATCHDOG_PERIOD_MS
#define XHCI_VERIFY_STOP_TIMEOUT
static EVT_WDF_DEVICE_DISARM_WAKE_FROM_SX XhciEvtDeviceDisarmWakeFromSx
#define XHCI_VERIFY_ALL_ONES
static EVT_WDF_TIMER XhciEvtWatchdog
static const GUID XhciGuidD3ColdSupport
struct _XHCI_FDO_CONTEXT * PXHCI_FDO_CONTEXT
static EVT_WDF_DEVICE_D0_ENTRY XhciEvtDeviceD0Entry
#define XHCI_VERIFY_RESET_TIMEOUT
static const GUID XhciGuidFunctionSuspend
static NTSTATUS NTAPI XhciEvtControllerEnableForwardProgress(_In_ UCXCONTROLLER UcxController)
#define XHCI_FIRMWARE_UNKNOWN
XhciDriverData XhciDriver
_In_ const HubIdStrings * Ids
_In_ ACCESS_MASK _Out_ WDFKEY _Out_ WDFKEY * DeviceKey
return WdfDeviceOpenRegistryKey(Child->m_Pdo->m_Device, PLUGPLAY_REGKEY_DEVICE, Access, WDF_NO_OBJECT_ATTRIBUTES, Key)
WdfWorkItemEnqueue(WorkItem)
_Must_inspect_result_ _In_ PUCXHUB_DEVICE_CREATE_INFO _Out_ UCXUSBDEVICE * Device
_In_opt_ PVOID _In_ PUCXHUB_WORKITEM WorkItem
_In_ UCXUSBDEVICE _In_ PDEVICE_OBJECT Pdo
_In_ const GUID _In_ ULONG _In_opt_ PFN_WDF_WMI_INSTANCE_QUERY_INSTANCE Query
#define InterlockedCompareExchange64
#define InterlockedExchange64
_In_ PIRP _In_ PIO_COMPLETION_ROUTINE _In_ PVOID Context
#define ExFreePoolWithTag(_P, _T)
unsigned __int64 * PULONG64
PVOID PVOID PWCHAR PVOID USHORT PULONG Reason
static PVOID ExAllocatePoolZero(ULONG PoolType, SIZE_T NumberOfBytes, ULONG Tag)
_In_ UINT _In_ UINT _In_ PNDIS_PACKET Source
_In_ PUNICODE_STRING _Inout_ PUNICODE_STRING Destination
#define _In_reads_bytes_(s)
#define _Out_writes_bytes_opt_(s)
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define UNREFERENCED_PARAMETER(P)
_In_ ULONG _In_ ULONG _In_ ULONG Length
#define IoSkipCurrentIrpStackLocation(Irp)
#define IoCompleteRequest
ULONG NTAPI KeQueryTimeIncrement(VOID)
VOID NTAPI KeInitializeMutex(IN PKMUTEX Mutex, IN ULONG Level)
LONG NTAPI KeReleaseMutex(IN PKMUTEX Mutex, IN BOOLEAN Wait)
@ PowerActionShutdownReset
#define STATUS_ACPI_INVALID_DATA
NTSTRSAFEAPI RtlStringCchCopyW(_Out_writes_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest, _In_ size_t cchDest, _In_ NTSTRSAFE_PCWSTR pszSrc)
NTSTRSAFEVAPI RtlStringCbPrintfA(_Out_writes_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest, _In_ size_t cbDest, _In_ _Printf_format_string_ NTSTRSAFE_PCSTR pszFormat,...)
NTSTRSAFEVAPI RtlStringCchPrintfW(_Out_writes_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest, _In_ size_t cchDest, _In_ _Printf_format_string_ NTSTRSAFE_PCWSTR pszFormat,...)
NTSTRSAFEAPI RtlStringCbCopyA(_Out_writes_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest, _In_ size_t cbDest, _In_ NTSTRSAFE_PCSTR pszSrc)
NTSTATUS NTAPI IoGetDeviceProperty(IN PDEVICE_OBJECT DeviceObject, IN DEVICE_REGISTRY_PROPERTY DeviceProperty, IN ULONG BufferLength, OUT PVOID PropertyBuffer, OUT PULONG ResultLength)
_In_ ULONG _In_ WDFMEMORY Input
WDF_MEMORY_DESCRIPTOR_INIT_HANDLE & InputDescriptor
WDF_MEMORY_DESCRIPTOR OutputDescriptor
#define IsEqualGUID(rguid1, rguid2)
#define KeQueryTickCount(CurrentCount)
#define STATUS_BUFFER_TOO_SMALL
#define STATUS_BUFFER_OVERFLOW
CHAR AcpiRevisionId[MAX_REVISION_ID_STRING_LENGTH]
CHAR AcpiDeviceId[MAX_DEVICE_ID_STRING_LENGTH]
BUS_INTERFACE_STANDARD PciInterface
CHAR AcpiVendorId[MAX_VENDOR_ID_STRING_LENGTH]
UCX_CONTROLLER_PARENT_BUS_TYPE ParentBus
PGET_SET_DEVICE_DATA SetBusData
PGET_SET_DEVICE_DATA GetBusData
PINTERFACE_DEREFERENCE InterfaceDereference
PINTERFACE_DEREFERENCE InterfaceDereference
PGET_IDLE_WAKE_INFO GetIdleWakeInfo
WDF_POWER_POLICY_SX_WAKE_USER_CONTROL UserControlOfWakeSettings
BOOLEAN IndicateChildWakeOnParentWake
BOOLEAN ArmForWakeIfChildrenAreArmedForWake
PFN_WDF_DEVICE_FILTER_RESOURCE_REQUIREMENTS EvtDeviceFilterAddResourceRequirements
PFN_WDF_DEVICE_REMOVE_ADDED_RESOURCES EvtDeviceRemoveAddedResources
PFN_WDF_DEVICE_FILTER_RESOURCE_REQUIREMENTS EvtDeviceFilterRemoveResourceRequirements
PFN_WDF_IO_QUEUE_IO_DEVICE_CONTROL EvtIoDeviceControl
PFN_WDF_DEVICE_D0_ENTRY EvtDeviceD0Entry
PFN_WDF_DEVICE_SELF_MANAGED_IO_INIT EvtDeviceSelfManagedIoInit
PFN_WDF_DEVICE_D0_EXIT EvtDeviceD0Exit
PFN_WDF_DEVICE_USAGE_NOTIFICATION EvtDeviceUsageNotification
PFN_WDF_DEVICE_PREPARE_HARDWARE EvtDevicePrepareHardware
PFN_WDF_DEVICE_D0_ENTRY_POST_INTERRUPTS_ENABLED EvtDeviceD0EntryPostInterruptsEnabled
PFN_WDF_DEVICE_SELF_MANAGED_IO_CLEANUP EvtDeviceSelfManagedIoCleanup
PFN_WDF_DEVICE_D0_EXIT_PRE_INTERRUPTS_DISABLED EvtDeviceD0ExitPreInterruptsDisabled
PFN_WDF_DEVICE_RELEASE_HARDWARE EvtDeviceReleaseHardware
PFN_WDF_DEVICE_ARM_WAKE_FROM_S0 EvtDeviceArmWakeFromS0
PFN_WDF_DEVICE_DISARM_WAKE_FROM_S0 EvtDeviceDisarmWakeFromS0
PFN_WDF_DEVICE_WAKE_FROM_S0_TRIGGERED EvtDeviceWakeFromS0Triggered
PFN_WDF_DEVICE_ARM_WAKE_FROM_SX EvtDeviceArmWakeFromSx
PFN_WDF_DEVICE_DISARM_WAKE_FROM_SX EvtDeviceDisarmWakeFromSx
BOOLEAN AutomaticSerialization
BOOLEAN AutomaticSerialization
USHORT SubSystemStringLength
USHORT VendorStringLength
USHORT SubSystemIdStringOffset
USHORT SubDeviceIdStringOffset
USHORT VendorIdStringOffset
UCHAR ProgrammingInterface
USHORT DeviceIdStringOffset
XhciController * Controller
XhciController * Controller
#define RtlZeroMemory(Destination, Length)
_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
_In_ PGUID _In_ ULONG _Out_ PULONG ResultLength
#define MAX_VENDOR_ID_STRING_LENGTH
@ UcxControllerParentBusTypePci
@ UcxControllerParentBusTypeAcpi
FORCEINLINE VOID NTAPI UCX_CONTROLLER_CONFIG_INIT(_Out_ PUCX_CONTROLLER_CONFIG Config, _In_ LPCSTR DeviceDescription)
_In_ PGUID CapabilityType
_Must_inspect_result_ _In_ WDFDEVICE _In_ PUCX_CONTROLLER_CONFIG Config
FORCEINLINE VOID NTAPI UCX_CONTROLLER_RESET_COMPLETE_INFO_INIT(_Out_ PUCX_CONTROLLER_RESET_COMPLETE_INFO UcxControllerResetCompleteInfo, _In_ UCX_CONTROLLER_STATE UcxControllerState, _In_ BOOLEAN UcxCoordinated)
FORCEINLINE VOID NTAPI UCX_CONTROLLER_CONFIG_SET_PCI_INFO(_Inout_ PUCX_CONTROLLER_CONFIG Config, _In_ ULONG VendorId, _In_ ULONG DeviceId, _In_ USHORT RevisionId, _In_ ULONG BusNumber, _In_ ULONG DeviceNumber, _In_ ULONG FunctionNumber)
FORCEINLINE VOID NTAPI UCX_CONTROLLER_CONFIG_SET_ACPI_INFO(_Inout_ PUCX_CONTROLLER_CONFIG Config, _In_reads_(MAX_VENDOR_ID_STRING_LENGTH) PSTR VendorId, _In_reads_(MAX_DEVICE_ID_STRING_LENGTH) PSTR DeviceId, _In_reads_(MAX_REVISION_ID_STRING_LENGTH) PSTR RevisionId)
_In_ PGUID _In_ ULONG OutputBufferLength
_In_ WDFREQUEST _In_ size_t _In_ size_t InputBufferLength
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFREQUEST Request
#define STATUS_INVALID_DEVICE_REQUEST
#define STATUS_INVALID_PARAMETER
#define STATUS_UNSUCCESSFUL
#define STATUS_OBJECT_NAME_COLLISION
#define STATUS_INSUFFICIENT_RESOURCES
#define STATUS_OBJECT_NAME_NOT_FOUND
PUSB_ROOT_HUB_NAME Output
static int Save(const char **args)
_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_ PWDFDEVICE_INIT DeviceInit
_Must_inspect_result_ _In_ WDFDRIVER Driver
#define DECLARE_CONST_UNICODE_STRING(_variablename, _string)
FORCEINLINE LONGLONG WDF_REL_TIMEOUT_IN_MS(_In_ ULONGLONG Time)
@ WakeDoNotAllowUserControl
_In_ WDF_POWER_DEVICE_STATE PreviousState
FORCEINLINE VOID WDF_DEVICE_STATE_INIT(_Out_ PWDF_DEVICE_STATE PnpDeviceState)
enum _WDF_SPECIAL_FILE_TYPE WDF_SPECIAL_FILE_TYPE
@ WdfReleaseHardwareOrderOnFailureAfterDescendants
enum _WDF_POWER_DEVICE_STATE WDF_POWER_DEVICE_STATE
_In_ WDFCMRESLIST _In_ WDFCMRESLIST ResourcesTranslated
_In_ WDF_SPECIAL_FILE_TYPE _In_ BOOLEAN IsInNotificationPath
FORCEINLINE VOID WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS_INIT(_Out_ PWDF_DEVICE_POWER_POLICY_IDLE_SETTINGS Settings, _In_ WDF_POWER_POLICY_S0_IDLE_CAPABILITIES IdleCaps)
_In_ WDF_SPECIAL_FILE_TYPE NotificationType
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_POWER_POLICY_IDLE_SETTINGS Settings
@ WdfDeviceFailedNoRestart
@ WdfSpecialFileHibernation
_Must_inspect_result_ _In_ WDFDEVICE _In_ PIRP _In_ WDFQUEUE Queue
FORCEINLINE VOID WDF_PNPPOWER_EVENT_CALLBACKS_INIT(_Out_ PWDF_PNPPOWER_EVENT_CALLBACKS Callbacks)
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
_In_ WDF_POWER_DEVICE_STATE TargetState
_In_ WDFCMRESLIST ResourcesRaw
@ SystemManagedIdleTimeoutWithHint
FORCEINLINE VOID WDF_DEVICE_POWER_POLICY_WAKE_SETTINGS_INIT(_Out_ PWDF_DEVICE_POWER_POLICY_WAKE_SETTINGS Settings)
FORCEINLINE VOID WDF_POWER_POLICY_EVENT_CALLBACKS_INIT(_Out_ PWDF_POWER_POLICY_EVENT_CALLBACKS Callbacks)
FORCEINLINE WDFDRIVER WdfGetDriver(VOID)
_Must_inspect_result_ _In_ WDFDEVICE _In_ LPCGUID _Out_ PINTERFACE _In_ USHORT _In_ USHORT Version
FORCEINLINE VOID WDF_FDO_EVENT_CALLBACKS_INIT(_Out_ PWDF_FDO_EVENT_CALLBACKS Callbacks)
FORCEINLINE VOID WDF_IO_QUEUE_CONFIG_INIT_DEFAULT_QUEUE(_Out_ PWDF_IO_QUEUE_CONFIG Config, _In_ WDF_IO_QUEUE_DISPATCH_TYPE DispatchType)
@ WdfIoQueueDispatchSequential
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR OutputBuffer
_In_ WDFIOTARGET _In_ _Strict_type_match_ WDF_IO_TARGET_SENT_IO_ACTION Action
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR _In_opt_ PLONGLONG DeviceOffset
FORCEINLINE VOID WDF_MEMORY_DESCRIPTOR_INIT_BUFFER(_Out_ PWDF_MEMORY_DESCRIPTOR Descriptor, _In_ PVOID Buffer, _In_ ULONG BufferLength)
#define WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(_attributes, _contexttype)
@ WdfExecutionLevelDispatch
#define WDF_DECLARE_CONTEXT_TYPE_WITH_NAME(_contexttype, _castingfunction)
_In_ WDFIORESREQLIST IoResourceRequirementsList
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING ValueName
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
_In_ WDFREQUEST _In_ PIO_STACK_LOCATION Stack
FORCEINLINE VOID WDF_TIMER_CONFIG_INIT_PERIODIC(_Out_ PWDF_TIMER_CONFIG Config, _In_ PFN_WDF_TIMER EvtTimerFunc, _In_ LONG Period)
#define WDF_NO_OBJECT_ATTRIBUTES
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_WMI_INSTANCE_CONFIG _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_opt_ WDFWMIINSTANCE * Instance
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
#define PLUGPLAY_REGKEY_DEVICE
enum _DEVICE_WAKE_DEPTH DEVICE_WAKE_DEPTH
#define PCI_WHICHSPACE_CONFIG
@ DevicePropertyEnumeratorName
@ DevicePropertyBusNumber
#define D3COLD_SUPPORT_INTERFACE_VERSION
#define IRP_MJ_INTERNAL_DEVICE_CONTROL
@ DeviceWakeDepthNotWakeable
_In_ SYSTEM_POWER_STATE SystemPowerState
_Inout_opt_ PVOID Parameter
EVT_WDF_DRIVER_DEVICE_ADD XhciEvtDeviceAdd
EVT_UCX_CONTROLLER_USBDEVICE_ADD XhciEvtControllerUsbDeviceAdd
FORCEINLINE ULONG64 NTAPI XhciErrataBit(_In_ XhciErrata Bit)
#define XHCI_TRB_TYPE_SHIFT
#define XHCI_CAP_LENGTH_VERSION
#define XHCI_TAG_CONTROLLER