281 if (
Context->m_Callbacks.SetCharacteristic ==
NULL)
285 Characteristic.
Size =
sizeof(Characteristic);
346 Parent->Header.Size =
sizeof(*Parent);
405#define UCX_FILL_SLOT(Interface, Limit, Field, Value) \
408 if (FIELD_OFFSET(UCXHUB_STACK_INTERFACE, Field) + sizeof((Interface)->Field) <= (Limit)) \
409 (Interface)->Field = (Value); \
432 DPRINT1(
"Stack interface version %u too old, left unfilled\n",
Version);
478 Hub = UcxUsbDevice::FromHandle(
Stack->Hub);
480 Hub->m_HubContext =
Stack->HubContext;
481 Hub->m_HubClearTtBuffer =
Stack->ClearTtBuffer;
482 Hub->m_HubNoPingResponse =
Stack->NoPingResponse;
485 DPRINT(
"Stack interface for hub %p, size %lu version %u\n",
Hub, Filled,
Stack->Header.Version);
497 static const WCHAR Location[] =
L"USBROOT(0)";
508 DPRINT1(
"Root hub location string allocation failed\n");
529 ParentTemplate.
Header.
Size =
sizeof(ParentTemplate);
533 &GUID_UCXHUB_PARENT_INTERFACE,
548 &GUID_UCXHUB_STACK_INTERFACE,
568 ClientTemplate.
Header.
Size =
sizeof(ClientTemplate);
572 &GUID_USBD_CLIENT_INTERFACE,
583 Location.
Size =
sizeof(Location);
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 Parent
#define InterlockedExchange
RtlInitEmptyUnicodeString(SymbolicLinkName, NULL, 0)
_Outptr_ PZZWSTR * LocationStrings
NTSTATUS StopIdle(_Inout_ PUCXHUB_STOP_IDLE_CONTEXT Context)
VOID ResumeIdle(_Inout_ PUCXHUB_STOP_IDLE_CONTEXT Context)
BOOLEAN QueryStreamsSupported()
VOID Address0Release(_In_ UCXUSBDEVICE Hub)
BOOLEAN m_ClientHoldsHandle
UcxController * m_Controller
NTSTATUS AddQueryInterfaces()
UcxController * m_Controller
ULONG64 Timestamp() const
VOID DisconnectPort(_In_ ULONG PortNumber)
VOID SetPdo(_In_ PDEVICE_OBJECT Pdo)
#define STATUS_NOT_SUPPORTED
Hub m_Stack DeviceSetPdo(Hub->UsbDevice(), Child->m_UsbDevice, Pdo)
_In_ D3DDDI_VIDEO_PRESENT_TARGET_ID _In_ ULONG _In_ ULONG Flags
#define NT_SUCCESS(StatCode)
static BOOLEAN NTAPI UcxHubStreamsSupported(_In_ UCXUSBDEVICE Hub)
static NTSTATUS NTAPI UcxGetLocationString(_Inout_ PVOID Context, _Outptr_ PZZWSTR *LocationStrings)
static NTSTATUS NTAPI UcxHubEndpointCreate(_In_ UCXUSBDEVICE Hub, _In_ UCXUSBDEVICE Device, _In_ PUSB_ENDPOINT_DESCRIPTOR Descriptor, _In_ ULONG DescriptorBufferLength, _In_opt_ PUSB_SUPERSPEED_ENDPOINT_COMPANION_DESCRIPTOR Companion, _Out_ UCXENDPOINT *Endpoint)
static ULONG NTAPI UcxHubEndpointMaxTransfer(_In_ UCXENDPOINT Endpoint)
static BOOLEAN NTAPI UcxParentWasProgrammingLost(_In_ PVOID Context)
static VOID NTAPI UcxParentGetHubSymbolicName(_In_ PVOID Context, _In_ PUNICODE_STRING SymbolicLinkName)
static USBD_PIPE_HANDLE NTAPI UcxHubEndpointPipeHandle(_In_ UCXENDPOINT Endpoint)
static NTSTATUS NTAPI UcxHubCreateControlEndpoint(_In_ UCXUSBDEVICE Hub, _In_ UCXUSBDEVICE Device, _In_ ULONG MaxPacketSize, _Out_ UCXENDPOINT *Endpoint)
static ULONG64 NTAPI UcxHubDeviceGetTimestamp(_In_ UCXUSBDEVICE Device)
static BOOLEAN NTAPI UcxParentResetDuringResume(_In_ PVOID Context)
static VOID NTAPI UcxHubDeviceDelete(_In_ UCXUSBDEVICE Hub, _In_ UCXUSBDEVICE Device)
VOID NTAPI UcxInterfaceNoOp(_In_ PVOID Context)
static VOID NTAPI UcxHubWorkItemEnqueue(_In_ PUCXHUB_WORKITEM WorkItem, _In_ PUCXHUB_WORKITEM_ROUTINE Routine, _In_opt_ PVOID Context, _In_ UCXHUB_WORKITEM_ENQUEUE_OPTIONS Options)
static VOID NTAPI UcxHubDeviceSetPdo(_In_ UCXUSBDEVICE Hub, _In_ UCXUSBDEVICE Device, _In_ PDEVICE_OBJECT Pdo)
static VOID NTAPI UcxHubQueryControllerBus(_In_ UCXUSBDEVICE Hub, _Out_ PUCXHUB_CONTROLLER_INFO Info)
static PUCXHUB_WORKITEM NTAPI UcxHubWorkItemAllocate(_In_ UCXUSBDEVICE Hub, _In_ PDEVICE_OBJECT DeviceObject, _In_ ULONG Flags)
static VOID NTAPI UcxHubClearTtBufferComplete(_In_ UCXUSBDEVICE Hub, _In_ UCXENDPOINT Endpoint)
static VOID NTAPI UcxHubWorkItemFlush(_In_ PUCXHUB_WORKITEM WorkItem)
static VOID NTAPI UcxHubWorkItemDelete(_In_ PUCXHUB_WORKITEM WorkItem)
static VOID NTAPI UcxHubEndpointDelete(_In_ UCXUSBDEVICE Hub, _In_ UCXUSBDEVICE Device, _In_ UCXENDPOINT Endpoint)
static VOID NTAPI UcxHubEndpointSetPriority(_In_ UCXUSBDEVICE Hub, _In_ UCXUSBDEVICE Device, _In_ UCXENDPOINT Endpoint, _In_ ULONG Priority)
#define UCX_FILL_SLOT(Interface, Limit, Field, Value)
static VOID NTAPI UcxFillParentInterface(_Out_ T *Parent, _In_ UcxRootHub *RootHub)
static VOID NTAPI UcxHubAllowControllerIdle(_In_ UCXUSBDEVICE Hub, _Inout_ PUCXHUB_STOP_IDLE_CONTEXT Context)
static VOID NTAPI UcxHubEndpointExposed(_In_ UCXENDPOINT Endpoint)
static VOID NTAPI UcxHubDeviceDisconnect(_In_ UCXUSBDEVICE Hub, _In_ ULONG PortNumber)
static NTSTATUS NTAPI UcxHubDeviceCreate(_In_ UCXUSBDEVICE Hub, _In_ PUCXHUB_DEVICE_CREATE_INFO CreateInfo, _Out_ UCXUSBDEVICE *Device)
static BOOLEAN NTAPI UcxHubIsDeviceDisconnected(_In_ UCXUSBDEVICE Device)
static VOID NTAPI UcxHubAddress0Release(_In_ UCXUSBDEVICE Hub, _In_ UCXUSBDEVICE Device)
static NTSTATUS NTAPI UcxHubBlockControllerIdle(_In_ UCXUSBDEVICE Hub, _Inout_ PUCXHUB_STOP_IDLE_CONTEXT Context)
_Must_inspect_result_ _In_ PUCXHUB_DEVICE_CREATE_INFO _Out_ UCXUSBDEVICE * Device
struct _UCXHUB_STACK_INTERFACE * PUCXHUB_STACK_INTERFACE
#define UCXHUB_STACK_INTERFACE_VERSION_2
#define UCXHUB_STACK_INTERFACE_SIZE_ORIGINAL
_Must_inspect_result_ _In_ UCXUSBDEVICE _In_ ULONG MaxPacketSize
UCXHUB_WORKITEM_ROUTINE * PUCXHUB_WORKITEM_ROUTINE
#define UCXHUB_PARENT_INTERFACE_VERSION
_In_ UCXUSBDEVICE _In_ UCXENDPOINT _In_ ULONG Priority
_Must_inspect_result_ _In_ UCXUSBDEVICE _In_ ULONG _In_opt_ PUSB_SUPERSPEED_ENDPOINT_COMPANION_DESCRIPTOR Companion
_In_ PUNICODE_STRING SymbolicLinkName
#define UCXHUB_STACK_INTERFACE_VERSION_1
_In_opt_ PVOID _In_ PUCXHUB_WORKITEM WorkItem
_In_ UCXHUB_DEVICE_CONTEXT _In_ UCXENDPOINT Endpoint
enum _UCXHUB_WORKITEM_ENQUEUE_OPTIONS UCXHUB_WORKITEM_ENQUEUE_OPTIONS
_Must_inspect_result_ _In_ PUCXHUB_DEVICE_CREATE_INFO CreateInfo
_Must_inspect_result_ _In_ UCXUSBDEVICE _In_ ULONG DescriptorBufferLength
_In_ UCXUSBDEVICE _In_ PDEVICE_OBJECT Pdo
_In_ PIRP _In_ PIO_COMPLETION_ROUTINE _In_ PVOID Context
static PVOID ExAllocatePoolZero(ULONG PoolType, SIZE_T NumberOfBytes, ULONG Tag)
_NullNull_terminated_ WCHAR * PZZWSTR
#define UNREFERENCED_PARAMETER(P)
EVT_WDF_DEVICE_PROCESS_QUERY_INTERFACE_REQUEST UcxEvtQueryParentInterface
EVT_WDF_DEVICE_PROCESS_QUERY_INTERFACE_REQUEST UcxEvtQueryStackInterface
EVT_WDF_DEVICE_PROCESS_QUERY_INTERFACE_REQUEST UcxEvtQueryUsbdClientInterface
EVT_WDF_DEVICE_PROCESS_QUERY_INTERFACE_REQUEST UcxEvtQueryUsbdiInterface
#define STATUS_BUFFER_TOO_SMALL
ULONG MaximumTransferSize
USBD_PIPE_HANDLE Handle()
PGET_LOCATION_STRING GetLocationString
PINTERFACE_REFERENCE InterfaceReference
PINTERFACE_DEREFERENCE InterfaceDereference
static PUCXHUB_WORKITEM Allocate(_In_ UcxController *Controller, _In_ PDEVICE_OBJECT DeviceObject, _In_ ULONG Flags)
UCX_ENDPOINT_CHARACTERISTIC_TYPE CharacteristicType
UCX_CONTROLLER_ENDPOINT_CHARACTERISTIC_PRIORITY Priority
#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
@ UCX_ENDPOINT_CHARACTERISTIC_TYPE_PRIORITY
enum _UCX_ENDPOINT_CHARACTERISTIC_PRIORITY UCX_CONTROLLER_ENDPOINT_CHARACTERISTIC_PRIORITY
_Must_inspect_result_ _In_ UCXCONTROLLER _In_ PUCX_ROOTHUB_CONFIG _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ UCXROOTHUB * RootHub
#define STATUS_INSUFFICIENT_RESOURCES
#define USBD_CLIENT_INTERFACE_VERSION
WdfStringGetUnicodeString(Original, &Name)
_Must_inspect_result_ _In_ WDFCHILDLIST _In_ PWDF_CHILD_LIST_ITERATOR _Out_ WDFDEVICE _Inout_opt_ PWDF_CHILD_RETRIEVE_INFO Info
_In_ PDEVICE_OBJECT DeviceObject
_In_ PWDFDEVICE_INIT _In_ PWDF_REMOVE_LOCK_OPTIONS Options
_Must_inspect_result_ _In_ WDFDEVICE _In_ LPCGUID InterfaceType
_Must_inspect_result_ _In_ WDFDEVICE _In_ LPCGUID _Out_ PINTERFACE _In_ USHORT _In_ USHORT Version
WDF_EXTERN_C_START typedef _In_ LPGUID _Inout_ PINTERFACE ExposedInterface
WDF_EXTERN_C_START typedef _In_ LPGUID _Inout_ PINTERFACE _Inout_opt_ PVOID ExposedInterfaceSpecificData
FORCEINLINE VOID WDF_QUERY_INTERFACE_CONFIG_INIT(_Out_ PWDF_QUERY_INTERFACE_CONFIG InterfaceConfig, _In_opt_ PINTERFACE Interface, _In_ CONST GUID *InterfaceType, _In_opt_ PFN_WDF_DEVICE_PROCESS_QUERY_INTERFACE_REQUEST EvtDeviceProcessQueryInterfaceRequest)
_In_ WDFREQUEST _In_ PIO_STACK_LOCATION Stack
_Must_inspect_result_ _In_ WDFIORESLIST _In_ PIO_RESOURCE_DESCRIPTOR Descriptor
#define PNP_LOCATION_INTERFACE_VERSION