17#define HUB_ACPI_RESULT_BYTES (sizeof(ACPI_EVAL_OUTPUT_BUFFER) + 1024)
20#define HUB_ACPI_METHOD_SUFFIX 6U
23#define HUB_UPC_TYPE_C_NO_SWITCH 0x0A
26#define HUB_UPC_ELEMENTS 4
29#define HUB_PLD_BYTES 16
33 { 0xCE2EE385, 0x00E6, 0x48CB, { 0x9F, 0x05, 0x2E, 0xDB, 0x92, 0x7C, 0x48, 0x99 } };
35#define HUB_DSM_REVISION 0
36#define HUB_DSM_INTERCONNECT_TYPE 2
39#define HUB_DSM_DISABLE_U2 5
43 { 0xDAFFD814, 0x6EBA, 0x4D8C, { 0x8A, 0x91, 0xBC, 0x9B, 0xBF, 0x4A, 0xA3, 0x01 } };
49#define HUB_DSD_ENTRY_MIN_BYTES 16
52#define HUB_DSM_INPUT_BYTES (FIELD_OFFSET(ACPI_EVAL_INPUT_BUFFER_COMPLEX_EX, Argument) + \
53 ACPI_METHOD_ARGUMENT_LENGTH(sizeof(GUID)) + \
54 2 * ACPI_METHOD_ARGUMENT_LENGTH(sizeof(ULONG)) + \
55 ACPI_METHOD_ARGUMENT_LENGTH(0))
176 DPRINT1(
"ACPI device path %Z is too long for a method name\n",
Device);
181 Input->Size =
sizeof(*Input);
196HubAcpiEvaluateMethod(
318 DPRINT1(
"Hub %p ACPI child enumeration size query is invalid 0x%lx\n",
Hub,
Status);
332 Children->NumberOfChildren == 0 ||
335 DPRINT1(
"Hub %p ACPI child enumeration returned no children\n",
Hub);
367HubAcpiReadInterconnect(
380 DPRINT1(
"Port %u: _DSM interconnect type is not an integer (platform compliance)\n",
Port->
Number());
409 DPRINT1(
"Port %u: _DSM U2 setting is not an integer (platform compliance)\n",
Port->
Number());
467 if ((
Index & 1) != 0 ||
486 PackageEnd = Package->Data + Package->DataLength;
489 HubAcpiArgumentFits(
Entry, PackageEnd);
498 if (!HubAcpiArgumentFits(
Name, EntryEnd) ||
508 if (!HubAcpiArgumentFits(
Next, EntryEnd))
526HubAcpiCreateHostName(
787HubAcpiReadPortAttributes(
792 WDFMEMORY SizeMemory =
NULL;
793 WDFMEMORY ChildMemory =
NULL;
794 WDFMEMORY ResultMemory =
NULL;
808 Status = HubAcpiEnumChildren(
Hub, SizeMemory,
sizeof(*Children));
812 DPRINT(
"Hub %p has no ACPI namespace node\n",
Hub);
816 DPRINT(
"Hub %p has an ACPI namespace node\n",
Hub);
818 ChildBytes = Children->NumberOfChildren;
823 Status = HubAcpiEnumChildren(
Hub, ChildMemory, ChildBytes);
832 Child = Children->Children;
ACPI_METHOD_ARGUMENT UNALIGNED * PACPI_METHOD_ARGUMENT
#define ACPI_METHOD_NEXT_ARGUMENT(Argument)
#define ACPI_ENUM_CHILD_NEXT(Child)
#define ACPI_METHOD_ARGUMENT_STRING
#define ACPI_METHOD_ARGUMENT_INTEGER
#define ENUM_CHILDREN_IMMEDIATE_ONLY
struct _ACPI_EVAL_INPUT_BUFFER_COMPLEX_EX * PACPI_EVAL_INPUT_BUFFER_COMPLEX_EX
#define IOCTL_ACPI_ENUM_CHILDREN
#define ACPI_METHOD_ARGUMENT_BUFFER
#define IOCTL_ACPI_EVAL_METHOD_EX
#define ACPI_EVAL_OUTPUT_BUFFER_SIGNATURE
#define ACPI_EVAL_INPUT_BUFFER_COMPLEX_SIGNATURE_EX
#define ACPI_ENUM_CHILDREN_INPUT_BUFFER_SIGNATURE
ACPI_ENUM_CHILDREN_OUTPUT_BUFFER UNALIGNED * PACPI_ENUM_CHILDREN_OUTPUT_BUFFER
#define ACPI_OBJECT_HAS_CHILDREN
#define ACPI_METHOD_ARGUMENT_PACKAGE
ACPI_ENUM_CHILD UNALIGNED * PACPI_ENUM_CHILD
ACPI_EVAL_OUTPUT_BUFFER UNALIGNED * PACPI_EVAL_OUTPUT_BUFFER
#define ACPI_ENUM_CHILDREN_OUTPUT_BUFFER_SIGNATURE
VOID SetFlag(_In_ HubFlag Flag)
HubPort * FindPort(_In_ ULONG PortNumber)
USHORT m_InterconnectType
VOID SetFlag(_In_ PortFlag Flag)
#define STATUS_NOT_SUPPORTED
_Check_return_ _In_ DXGK_EVENT_TYPE _In_ ULONG _In_ PVOID Argument
_In_ D3DDDI_VIDEO_PRESENT_TARGET_ID _In_ ULONG _In_ ULONG DataLength
#define NT_SUCCESS(StatCode)
_ACRTIMP int __cdecl strncmp(const char *, const char *, size_t)
#define _IRQL_requires_(irql)
#define ExAllocatePoolWithTag(hernya, size, tag)
FORCEINLINE VOID NTAPI HubClearPortProperty(_In_ HubPort *Port, _In_ PortProperty Property)
FORCEINLINE VOID NTAPI HubSetPortProperty(_In_ HubPort *Port, _In_ PortProperty Property)
_Must_inspect_result_ _In_ PUCXHUB_DEVICE_CREATE_INFO _Out_ UCXUSBDEVICE * Device
#define ExFreePoolWithTag(_P, _T)
#define _Outptr_result_bytebuffer_(s)
#define _Outptr_result_maybenull_
#define STATUS_ACPI_INVALID_OBJTYPE
#define STATUS_ACPI_INVALID_ARGTYPE
#define STATUS_ACPI_INVALID_DATA
#define STATUS_ACPI_INCORRECT_ARGUMENT_COUNT
#define STATUS_ACPI_FATAL
static const GUID HubUsbDsmGuid
static VOID NTAPI HubAcpiFree(_In_opt_ WDFMEMORY Memory)
_In_ PCANSI_STRING Device
_In_ ULONG _In_ WDFMEMORY _In_ WDFMEMORY Output
static NTSTATUS NTAPI HubAcpiPrepareInput(_Out_ PACPI_EVAL_INPUT_BUFFER_COMPLEX_EX Input, _In_ PCANSI_STRING Device, _In_reads_(4) PCSTR Method, _In_ ULONG ArgumentCount)
static NTSTATUS NTAPI HubAcpiAllocate(_In_ HubFdo *Hub, _In_ size_t Bytes, _Out_ WDFMEMORY *Memory, _Outptr_result_bytebuffer_(Bytes) PVOID *Buffer)
#define HUB_DSM_INPUT_BYTES
static const CHAR HubUsb4HostProperty[]
_In_ PCANSI_STRING _In_ ULONG Function
_In_ WDFMEMORY _In_ size_t OutputBytes
PACPI_METHOD_ARGUMENT Argument
#define HUB_DSD_ENTRY_MIN_BYTES
_In_ ULONG _In_ WDFMEMORY Input
PACPI_EVAL_INPUT_BUFFER_COMPLEX_EX Method
#define HUB_UPC_TYPE_C_NO_SWITCH
WDF_MEMORY_DESCRIPTOR_INIT_HANDLE & InputDescriptor
static BOOLEAN NTAPI HubAcpiResultInteger(_In_ WDFMEMORY Output, _Out_ PULONG Value)
static const GUID HubDsdPropertiesGuid
return WdfIoTargetSendInternalIoctlSynchronously(WdfDeviceGetIoTarget(Hub->m_Device), NULL, IoControlCode, &InputDescriptor, &OutputDescriptor, NULL, Information)
_In_ WDFMEMORY _In_ WDFMEMORY _In_ BOOLEAN CheckResultOnNoDevice
_In_ ULONG _In_ WDFMEMORY _In_ WDFMEMORY _Out_ PULONG_PTR Information
#define HUB_DSM_DISABLE_U2
#define HUB_ACPI_RESULT_BYTES
#define HUB_ACPI_METHOD_SUFFIX
WDF_MEMORY_DESCRIPTOR OutputDescriptor
#define HUB_DSM_INTERCONNECT_TYPE
#define IsEqualGUID(rguid1, rguid2)
#define STATUS_BUFFER_OVERFLOW
PACPI_METHOD_ARGUMENT Next
#define FIELD_OFFSET(t, f)
#define RtlCopyMemory(Destination, Source, Length)
#define RtlZeroMemory(Destination, Length)
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFREQUEST _In_ size_t _In_ size_t _In_ ULONG IoControlCode
#define STATUS_INVALID_PARAMETER
#define STATUS_NO_SUCH_DEVICE
#define STATUS_UNSUCCESSFUL
#define STATUS_INSUFFICIENT_RESOURCES
#define STATUS_OBJECT_NAME_NOT_FOUND
_In_ WDFCOLLECTION _In_ ULONG Index
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFDEVICE Child
_Must_inspect_result_ _In_opt_ PWDF_OBJECT_ATTRIBUTES _In_ _Strict_type_match_ POOL_TYPE _In_opt_ ULONG _In_ _Out_ WDFMEMORY * Memory
FORCEINLINE VOID WDF_MEMORY_DESCRIPTOR_INIT_HANDLE(_Out_ PWDF_MEMORY_DESCRIPTOR Descriptor, _In_ WDFMEMORY Memory, _In_opt_ PWDFMEMORY_OFFSET Offsets)
FORCEINLINE VOID WDF_OBJECT_ATTRIBUTES_INIT(_Out_ PWDF_OBJECT_ATTRIBUTES Attributes)
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
_In_ WDFREQUEST _In_ NTSTATUS _In_ ULONG_PTR Information
_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