ReactOS 0.4.17-dev-1281-g065abb3
hubinterface.cpp File Reference
#include "ucx01000.h"
#include <debug.h>
Include dependency graph for hubinterface.cpp:

Go to the source code of this file.

Macros

#define NDEBUG
 
#define UCX_FILL_SLOT(Interface, Limit, Field, Value)
 

Functions

VOID NTAPI UcxInterfaceNoOp (_In_ PVOID Context)
 
static NTSTATUS NTAPI UcxHubDeviceCreate (_In_ UCXUSBDEVICE Hub, _In_ PUCXHUB_DEVICE_CREATE_INFO CreateInfo, _Out_ UCXUSBDEVICE *Device)
 
static VOID NTAPI UcxHubDeviceDelete (_In_ UCXUSBDEVICE Hub, _In_ UCXUSBDEVICE Device)
 
static VOID NTAPI UcxHubDeviceDisconnect (_In_ UCXUSBDEVICE Hub, _In_ ULONG PortNumber)
 
static VOID NTAPI UcxHubDeviceSetPdo (_In_ UCXUSBDEVICE Hub, _In_ UCXUSBDEVICE Device, _In_ PDEVICE_OBJECT Pdo)
 
static NTSTATUS NTAPI UcxHubCreateControlEndpoint (_In_ UCXUSBDEVICE Hub, _In_ UCXUSBDEVICE Device, _In_ ULONG MaxPacketSize, _Out_ UCXENDPOINT *Endpoint)
 
static VOID NTAPI UcxHubAddress0Release (_In_ UCXUSBDEVICE Hub, _In_ UCXUSBDEVICE Device)
 
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 VOID NTAPI UcxHubEndpointDelete (_In_ UCXUSBDEVICE Hub, _In_ UCXUSBDEVICE Device, _In_ UCXENDPOINT Endpoint)
 
static VOID NTAPI UcxHubEndpointExposed (_In_ UCXENDPOINT Endpoint)
 
static USBD_PIPE_HANDLE NTAPI UcxHubEndpointPipeHandle (_In_ UCXENDPOINT Endpoint)
 
static ULONG NTAPI UcxHubEndpointMaxTransfer (_In_ UCXENDPOINT Endpoint)
 
static PUCXHUB_WORKITEM NTAPI UcxHubWorkItemAllocate (_In_ UCXUSBDEVICE Hub, _In_ PDEVICE_OBJECT DeviceObject, _In_ ULONG Flags)
 
static VOID NTAPI UcxHubWorkItemDelete (_In_ PUCXHUB_WORKITEM WorkItem)
 
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 UcxHubWorkItemFlush (_In_ PUCXHUB_WORKITEM WorkItem)
 
static VOID NTAPI UcxHubClearTtBufferComplete (_In_ UCXUSBDEVICE Hub, _In_ UCXENDPOINT Endpoint)
 
static BOOLEAN NTAPI UcxHubIsDeviceDisconnected (_In_ UCXUSBDEVICE Device)
 
static BOOLEAN NTAPI UcxHubStreamsSupported (_In_ UCXUSBDEVICE Hub)
 
static NTSTATUS NTAPI UcxHubBlockControllerIdle (_In_ UCXUSBDEVICE Hub, _Inout_ PUCXHUB_STOP_IDLE_CONTEXT Context)
 
static VOID NTAPI UcxHubAllowControllerIdle (_In_ UCXUSBDEVICE Hub, _Inout_ PUCXHUB_STOP_IDLE_CONTEXT Context)
 
static VOID NTAPI UcxHubQueryControllerBus (_In_ UCXUSBDEVICE Hub, _Out_ PUCXHUB_CONTROLLER_INFO Info)
 
static ULONG64 NTAPI UcxHubDeviceGetTimestamp (_In_ UCXUSBDEVICE Device)
 
static VOID NTAPI UcxHubEndpointSetPriority (_In_ UCXUSBDEVICE Hub, _In_ UCXUSBDEVICE Device, _In_ UCXENDPOINT Endpoint, _In_ ULONG Priority)
 
static BOOLEAN NTAPI UcxParentResetDuringResume (_In_ PVOID Context)
 
static BOOLEAN NTAPI UcxParentWasProgrammingLost (_In_ PVOID Context)
 
static VOID NTAPI UcxParentGetHubSymbolicName (_In_ PVOID Context, _In_ PUNICODE_STRING SymbolicLinkName)
 
template<typename T >
static VOID NTAPI UcxFillParentInterface (_Out_ T *Parent, _In_ UcxRootHub *RootHub)
 
NTSTATUS NTAPI UcxEvtQueryParentInterface (_In_ WDFDEVICE Device, _In_ LPGUID InterfaceType, _Inout_ PINTERFACE ExposedInterface, _Inout_opt_ PVOID ExposedInterfaceSpecificData)
 
NTSTATUS NTAPI UcxEvtQueryStackInterface (_In_ WDFDEVICE Device, _In_ LPGUID InterfaceType, _Inout_ PINTERFACE ExposedInterface, _Inout_opt_ PVOID ExposedInterfaceSpecificData)
 
static NTSTATUS NTAPI UcxGetLocationString (_Inout_ PVOID Context, _Outptr_ PZZWSTR *LocationStrings)
 

Macro Definition Documentation

◆ NDEBUG

#define NDEBUG

Definition at line 10 of file hubinterface.cpp.

◆ UCX_FILL_SLOT

#define UCX_FILL_SLOT (   Interface,
  Limit,
  Field,
  Value 
)
Value:
do \
{ \
if (FIELD_OFFSET(UCXHUB_STACK_INTERFACE, Field) + sizeof((Interface)->Field) <= (Limit)) \
(Interface)->Field = (Value); \
} while (0)
PUCHAR Limit
Definition: desccheck.cpp:2230
#define FIELD_OFFSET(t, f)
Definition: typedefs.h:255
_In_ UCXUSBDEVICE _In_ ULONG Interface
Definition: ucxusbdevice.h:428
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
Definition: wdfregistry.h:413

Definition at line 405 of file hubinterface.cpp.

Function Documentation

◆ UcxEvtQueryParentInterface()

NTSTATUS NTAPI UcxEvtQueryParentInterface ( _In_ WDFDEVICE  Device,
_In_ LPGUID  InterfaceType,
_Inout_ PINTERFACE  ExposedInterface,
_Inout_opt_ PVOID  ExposedInterfaceSpecificData 
)

Definition at line 370 of file hubinterface.cpp.

375{
376 UcxRootHub* RootHub = UcxGetRootHubPdoContext(Device)->RootHub;
377
380
381 if (ExposedInterface->Size != sizeof(UCXHUB_PARENT_INTERFACE) &&
383 {
384 DPRINT1("Parent interface size %u not accepted\n", ExposedInterface->Size);
386 }
387
389 {
390 DPRINT1("Parent interface version %u not supported\n", ExposedInterface->Version);
392 }
393
394 /* The current layout added the tunnel state, which is 0 for the root hub */
395 if (ExposedInterface->Size == sizeof(UCXHUB_PARENT_INTERFACE))
397 else
399
400 DPRINT("Parent interface size %u handed to root hub %p's hub\n", ExposedInterface->Size, RootHub);
401 return STATUS_SUCCESS;
402}
#define DPRINT1
Definition: precomp.h:8
#define STATUS_NOT_SUPPORTED
Definition: d3dkmdt.h:48
static VOID NTAPI UcxFillParentInterface(_Out_ T *Parent, _In_ UcxRootHub *RootHub)
_Must_inspect_result_ _In_ PUCXHUB_DEVICE_CREATE_INFO _Out_ UCXUSBDEVICE * Device
Definition: hubucx.h:258
#define UCXHUB_PARENT_INTERFACE_VERSION
Definition: hubucx.h:493
#define UNREFERENCED_PARAMETER(P)
Definition: ntbasedef.h:329
#define STATUS_SUCCESS
Definition: shellext.h:65
#define STATUS_BUFFER_TOO_SMALL
Definition: shellext.h:69
#define DPRINT
Definition: sndvol32.h:73
_Must_inspect_result_ _In_ UCXCONTROLLER _In_ PUCX_ROOTHUB_CONFIG _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ UCXROOTHUB * RootHub
Definition: ucxroothub.h:299
_Must_inspect_result_ _In_ WDFDEVICE _In_ LPCGUID InterfaceType
Definition: wdffdo.h:463
WDF_EXTERN_C_START typedef _In_ LPGUID _Inout_ PINTERFACE ExposedInterface
WDF_EXTERN_C_START typedef _In_ LPGUID _Inout_ PINTERFACE _Inout_opt_ PVOID ExposedInterfaceSpecificData

◆ UcxEvtQueryStackInterface()

NTSTATUS NTAPI UcxEvtQueryStackInterface ( _In_ WDFDEVICE  Device,
_In_ LPGUID  InterfaceType,
_Inout_ PINTERFACE  ExposedInterface,
_Inout_opt_ PVOID  ExposedInterfaceSpecificData 
)

Definition at line 415 of file hubinterface.cpp.

420{
425 ULONG Filled;
426
429
431 {
432 DPRINT1("Stack interface version %u too old, left unfilled\n", Version);
433 return STATUS_SUCCESS;
434 }
435
436 Limit = min(Limit, (ULONG)sizeof(*Stack));
437
438 Stack->Header.Context = Device;
439 Stack->Header.InterfaceReference = UcxInterfaceNoOp;
440 Stack->Header.InterfaceDereference = UcxInterfaceNoOp;
441
444 UCX_FILL_SLOT(Stack, Limit, DeviceDisconnect, UcxHubDeviceDisconnect);
446 UCX_FILL_SLOT(Stack, Limit, CreateControlEndpoint, UcxHubCreateControlEndpoint);
450 UCX_FILL_SLOT(Stack, Limit, MarkEndpointClientOwned, UcxHubEndpointExposed);
451 UCX_FILL_SLOT(Stack, Limit, EndpointGetPipeHandle, UcxHubEndpointPipeHandle);
452 UCX_FILL_SLOT(Stack, Limit, EndpointGetMaxTransferSize, UcxHubEndpointMaxTransfer);
453 UCX_FILL_SLOT(Stack, Limit, WorkItemAllocate, UcxHubWorkItemAllocate);
457 UCX_FILL_SLOT(Stack, Limit, ClearTtBufferComplete, UcxHubClearTtBufferComplete);
458 UCX_FILL_SLOT(Stack, Limit, IsDeviceDisconnected, UcxHubIsDeviceDisconnected);
459 UCX_FILL_SLOT(Stack, Limit, StreamsSupported, UcxHubStreamsSupported);
460 UCX_FILL_SLOT(Stack, Limit, BlockControllerIdle, UcxHubBlockControllerIdle);
461 UCX_FILL_SLOT(Stack, Limit, AllowControllerIdle, UcxHubAllowControllerIdle);
462 UCX_FILL_SLOT(Stack, Limit, QueryControllerBus, UcxHubQueryControllerBus);
463 UCX_FILL_SLOT(Stack, Limit, DeviceGetTimestamp, UcxHubDeviceGetTimestamp);
464
465 Filled = min(Limit, (ULONG)FIELD_OFFSET(UCXHUB_STACK_INTERFACE, EndpointSetPriority));
466 Stack->Header.Version = UCXHUB_STACK_INTERFACE_VERSION_1;
467
469 {
470 UCX_FILL_SLOT(Stack, Limit, EndpointSetPriority, UcxHubEndpointSetPriority);
471 Filled = min(Limit, (ULONG)FIELD_OFFSET(UCXHUB_STACK_INTERFACE, EndpointCreateEx));
472 Stack->Header.Version = UCXHUB_STACK_INTERFACE_VERSION_2;
473 }
474
475 Stack->Header.Size = (USHORT)Filled;
476
477 /* The hub's own half of the interface goes into its device context */
479 NT_ASSERT(Hub->IsHub());
480 Hub->m_HubContext = Stack->HubContext;
481 Hub->m_HubClearTtBuffer = Stack->ClearTtBuffer;
482 Hub->m_HubNoPingResponse = Stack->NoPingResponse;
483 Hub->m_HubUsesGrownInterface = (ExposedInterface->Size > UCXHUB_STACK_INTERFACE_SIZE_ORIGINAL);
484
485 DPRINT("Stack interface for hub %p, size %lu version %u\n", Hub, Filled, Stack->Header.Version);
486 return STATUS_SUCCESS;
487}
HubFdo * Hub
Definition: bootdev.cpp:261
static UcxUsbDevice * FromHandle(_In_ UCXUSBDEVICE Handle)
Definition: devobj.cpp:18
Hub m_Stack DeviceSetPdo(Hub->UsbDevice(), Child->m_UsbDevice, Pdo)
static BOOLEAN NTAPI UcxHubStreamsSupported(_In_ UCXUSBDEVICE Hub)
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 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 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 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)
struct _UCXHUB_STACK_INTERFACE * PUCXHUB_STACK_INTERFACE
#define UCXHUB_STACK_INTERFACE_VERSION_2
Definition: hubucx.h:418
#define UCXHUB_STACK_INTERFACE_SIZE_ORIGINAL
Definition: hubucx.h:469
#define UCXHUB_STACK_INTERFACE_VERSION_1
Definition: hubucx.h:417
#define min(a, b)
Definition: monoChain.cc:55
unsigned short USHORT
Definition: pedump.c:61
uint32_t ULONG
Definition: typedefs.h:59
_Must_inspect_result_ _In_ WDFDEVICE _In_ LPCGUID _Out_ PINTERFACE _In_ USHORT _In_ USHORT Version
Definition: wdffdo.h:469
_In_ WDFREQUEST _In_ PIO_STACK_LOCATION Stack
Definition: wdfrequest.h:639
#define NT_ASSERT
Definition: rtlfuncs.h:3334

◆ UcxFillParentInterface()

template<typename T >
static VOID NTAPI UcxFillParentInterface ( _Out_ T *  Parent,
_In_ UcxRootHub *  RootHub 
)
static

Fills whichever parent layout the hub asked for; both share every field but one.

Definition at line 337 of file hubinterface.cpp.

340{
341 const UCX_CONTROLLER_PCI_INFORMATION* Pci = &RootHub->m_Controller->m_Config.PciDeviceInfo;
342
343 /* Wipes the hub's debug context too, harmlessly */
344 RtlZeroMemory(Parent, sizeof(*Parent));
345
346 Parent->Header.Size = sizeof(*Parent);
347 Parent->Header.Version = UCXHUB_PARENT_INTERFACE_VERSION;
348 Parent->Header.Context = RootHub->m_Handle;
349 Parent->Header.InterfaceReference = UcxInterfaceNoOp;
350 Parent->Header.InterfaceDereference = UcxInterfaceNoOp;
351
352 Parent->HubDepth = 0;
353 Parent->Hub = (UCXUSBDEVICE)RootHub->m_Handle;
354
355 /* UCX wakes the root hub itself on a port change */
356 Parent->ParentCanWake = TRUE;
357
358 Parent->ParentResetDuringResume = UcxParentResetDuringResume;
359 Parent->ParentLostStateDuringResume = UcxParentWasProgrammingLost;
360 Parent->QueryHubLinkName = UcxParentGetHubSymbolicName;
361
362 /* Taken from the PCI fields whatever the parent bus is */
363 Parent->HubTopologyAddress.PciBusNumber = Pci->BusNumber;
364 Parent->HubTopologyAddress.PciDeviceNumber = Pci->DeviceNumber;
365 Parent->HubTopologyAddress.PciFunctionNumber = Pci->FunctionNumber;
366}
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
Definition: acpixf.h:732
#define TRUE
Definition: types.h:120
static BOOLEAN NTAPI UcxParentWasProgrammingLost(_In_ PVOID Context)
static VOID NTAPI UcxParentGetHubSymbolicName(_In_ PVOID Context, _In_ PUNICODE_STRING SymbolicLinkName)
static BOOLEAN NTAPI UcxParentResetDuringResume(_In_ PVOID Context)
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:262

Referenced by UcxEvtQueryParentInterface().

◆ UcxGetLocationString()

static NTSTATUS NTAPI UcxGetLocationString ( _Inout_ PVOID  Context,
_Outptr_ PZZWSTR *  LocationStrings 
)
static

Definition at line 493 of file hubinterface.cpp.

496{
497 static const WCHAR Location[] = L"USBROOT(0)";
499
501
503
504 /* One extra NUL makes it a multi string; PnP frees it */
505 Buffer = (PWCHAR)ExAllocatePoolZero(PagedPool, sizeof(Location) + sizeof(WCHAR), UCX_POOL_TAG);
506 if (Buffer == NULL)
507 {
508 DPRINT1("Root hub location string allocation failed\n");
510 }
511
512 RtlCopyMemory(Buffer, Location, sizeof(Location));
514 return STATUS_SUCCESS;
515}
_Outptr_ PZZWSTR * LocationStrings
Definition: childpdo.cpp:950
Definition: bufpool.h:45
#define NULL
Definition: types.h:112
#define L(x)
Definition: resources.c:13
#define PagedPool
Definition: env_spec_w32.h:308
_In_ PIRP _In_ PIO_COMPLETION_ROUTINE _In_ PVOID Context
Definition: kse.h:81
static PVOID ExAllocatePoolZero(ULONG PoolType, SIZE_T NumberOfBytes, ULONG Tag)
Definition: precomp.h:45
short WCHAR
Definition: pedump.c:58
#define RtlCopyMemory(Destination, Source, Length)
Definition: typedefs.h:263
uint16_t * PWCHAR
Definition: typedefs.h:56
#define UCX_POOL_TAG
Definition: ucxutil.h:11
#define STATUS_INSUFFICIENT_RESOURCES
Definition: udferr_usr.h:158

Referenced by UcxRootHub::AddQueryInterfaces().

◆ UcxHubAddress0Release()

static VOID NTAPI UcxHubAddress0Release ( _In_ UCXUSBDEVICE  Hub,
_In_ UCXUSBDEVICE  Device 
)
static

Definition at line 86 of file hubinterface.cpp.

89{
91
93}
VOID Address0Release(_In_ UCXUSBDEVICE Hub)
Definition: hostctl.cpp:647
UcxController * m_Controller
Definition: devobj.h:216

Referenced by UcxEvtQueryStackInterface().

◆ UcxHubAllowControllerIdle()

static VOID NTAPI UcxHubAllowControllerIdle ( _In_ UCXUSBDEVICE  Hub,
_Inout_ PUCXHUB_STOP_IDLE_CONTEXT  Context 
)
static

Definition at line 238 of file hubinterface.cpp.

241{
243}
VOID ResumeIdle(_Inout_ PUCXHUB_STOP_IDLE_CONTEXT Context)
Definition: hostctl.cpp:680

Referenced by UcxEvtQueryStackInterface().

◆ UcxHubBlockControllerIdle()

static NTSTATUS NTAPI UcxHubBlockControllerIdle ( _In_ UCXUSBDEVICE  Hub,
_Inout_ PUCXHUB_STOP_IDLE_CONTEXT  Context 
)
static

Definition at line 228 of file hubinterface.cpp.

231{
233}
NTSTATUS StopIdle(_Inout_ PUCXHUB_STOP_IDLE_CONTEXT Context)
Definition: hostctl.cpp:663

Referenced by UcxEvtQueryStackInterface().

◆ UcxHubClearTtBufferComplete()

static VOID NTAPI UcxHubClearTtBufferComplete ( _In_ UCXUSBDEVICE  Hub,
_In_ UCXENDPOINT  Endpoint 
)
static

Definition at line 197 of file hubinterface.cpp.

200{
202
204}
static UcxEndpoint * FromHandle(_In_ UCXENDPOINT Handle)
Definition: pipe.cpp:91
VOID ReleaseCancelSync()
Definition: pipe.cpp:360
_In_ UCXHUB_DEVICE_CONTEXT _In_ UCXENDPOINT Endpoint
Definition: hubucx.h:238

Referenced by UcxEvtQueryStackInterface().

◆ UcxHubCreateControlEndpoint()

static NTSTATUS NTAPI UcxHubCreateControlEndpoint ( _In_ UCXUSBDEVICE  Hub,
_In_ UCXUSBDEVICE  Device,
_In_ ULONG  MaxPacketSize,
_Out_ UCXENDPOINT *  Endpoint 
)
static

Definition at line 72 of file hubinterface.cpp.

77{
79
81}
static _Must_inspect_result_ NTSTATUS CreateDefaultFromHub(_In_ UCXUSBDEVICE UsbDevice, _In_ ULONG MaxPacketSize, _Out_ UCXENDPOINT *Endpoint)
Definition: pipe.cpp:451
_Must_inspect_result_ _In_ UCXUSBDEVICE _In_ ULONG MaxPacketSize
Definition: hubucx.h:289

Referenced by UcxEvtQueryStackInterface().

◆ UcxHubDeviceCreate()

static NTSTATUS NTAPI UcxHubDeviceCreate ( _In_ UCXUSBDEVICE  Hub,
_In_ PUCXHUB_DEVICE_CREATE_INFO  CreateInfo,
_Out_ UCXUSBDEVICE *  Device 
)
static

Definition at line 26 of file hubinterface.cpp.

30{
32}
static _Must_inspect_result_ NTSTATUS CreateFromHub(_In_ UCXUSBDEVICE Hub, _In_ PUCXHUB_DEVICE_CREATE_INFO Info, _Out_ UCXUSBDEVICE *UsbDevice)
Definition: devobj.cpp:297
_Must_inspect_result_ _In_ PUCXHUB_DEVICE_CREATE_INFO CreateInfo
Definition: hubucx.h:257

Referenced by UcxEvtQueryStackInterface().

◆ UcxHubDeviceDelete()

static VOID NTAPI UcxHubDeviceDelete ( _In_ UCXUSBDEVICE  Hub,
_In_ UCXUSBDEVICE  Device 
)
static

Definition at line 37 of file hubinterface.cpp.

Referenced by UcxEvtQueryStackInterface().

◆ UcxHubDeviceDisconnect()

static VOID NTAPI UcxHubDeviceDisconnect ( _In_ UCXUSBDEVICE  Hub,
_In_ ULONG  PortNumber 
)
static

Definition at line 49 of file hubinterface.cpp.

52{
54}
VOID DisconnectPort(_In_ ULONG PortNumber)
Definition: devobj.cpp:440
_In_ ULONG PortNumber
Definition: hubucx.h:272

Referenced by UcxEvtQueryStackInterface().

◆ UcxHubDeviceGetTimestamp()

static ULONG64 NTAPI UcxHubDeviceGetTimestamp ( _In_ UCXUSBDEVICE  Device)
static

Definition at line 260 of file hubinterface.cpp.

262{
264}
ULONG64 Timestamp() const
Definition: devobj.h:99

Referenced by UcxEvtQueryStackInterface().

◆ UcxHubDeviceSetPdo()

static VOID NTAPI UcxHubDeviceSetPdo ( _In_ UCXUSBDEVICE  Hub,
_In_ UCXUSBDEVICE  Device,
_In_ PDEVICE_OBJECT  Pdo 
)
static

Definition at line 59 of file hubinterface.cpp.

63{
65
67}
VOID SetPdo(_In_ PDEVICE_OBJECT Pdo)
Definition: devobj.cpp:489
_In_ UCXUSBDEVICE _In_ PDEVICE_OBJECT Pdo
Definition: hubucx.h:280

Referenced by UcxEvtQueryStackInterface().

◆ UcxHubEndpointCreate()

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

Definition at line 98 of file hubinterface.cpp.

105{
107
109}
static _Must_inspect_result_ NTSTATUS CreateFromHub(_In_ UCXUSBDEVICE UsbDevice, _In_ PUSB_ENDPOINT_DESCRIPTOR Descriptor, _In_ ULONG DescriptorBufferLength, _In_opt_ PUSB_SUPERSPEED_ENDPOINT_COMPANION_DESCRIPTOR Companion, _Out_ UCXENDPOINT *Endpoint)
Definition: pipe.cpp:467
_Must_inspect_result_ _In_ UCXUSBDEVICE _In_ ULONG _In_opt_ PUSB_SUPERSPEED_ENDPOINT_COMPANION_DESCRIPTOR Companion
Definition: hubucx.h:308
_Must_inspect_result_ _In_ UCXUSBDEVICE _In_ ULONG DescriptorBufferLength
Definition: hubucx.h:307
_Must_inspect_result_ _In_ WDFIORESLIST _In_ PIO_RESOURCE_DESCRIPTOR Descriptor
Definition: wdfresource.h:342

Referenced by UcxEvtQueryStackInterface().

◆ UcxHubEndpointDelete()

static VOID NTAPI UcxHubEndpointDelete ( _In_ UCXUSBDEVICE  Hub,
_In_ UCXUSBDEVICE  Device,
_In_ UCXENDPOINT  Endpoint 
)
static

Definition at line 114 of file hubinterface.cpp.

Referenced by UcxEvtQueryStackInterface().

◆ UcxHubEndpointExposed()

static VOID NTAPI UcxHubEndpointExposed ( _In_ UCXENDPOINT  Endpoint)
static

Definition at line 129 of file hubinterface.cpp.

131{
133}
BOOLEAN m_ClientHoldsHandle
Definition: pipe.h:313

Referenced by UcxEvtQueryStackInterface().

◆ UcxHubEndpointMaxTransfer()

static ULONG NTAPI UcxHubEndpointMaxTransfer ( _In_ UCXENDPOINT  Endpoint)
static

Definition at line 147 of file hubinterface.cpp.

149{
151}
UcxPipe m_Pipe
Definition: pipe.h:284
ULONG MaximumTransferSize
Definition: pipe.h:37

Referenced by UcxEvtQueryStackInterface().

◆ UcxHubEndpointPipeHandle()

static USBD_PIPE_HANDLE NTAPI UcxHubEndpointPipeHandle ( _In_ UCXENDPOINT  Endpoint)
static

Definition at line 138 of file hubinterface.cpp.

140{
142}
USBD_PIPE_HANDLE Handle()
Definition: pipe.h:60

Referenced by UcxEvtQueryStackInterface().

◆ UcxHubEndpointSetPriority()

static VOID NTAPI UcxHubEndpointSetPriority ( _In_ UCXUSBDEVICE  Hub,
_In_ UCXUSBDEVICE  Device,
_In_ UCXENDPOINT  Endpoint,
_In_ ULONG  Priority 
)
static

Definition at line 269 of file hubinterface.cpp.

274{
276 UCX_ENDPOINT_CHARACTERISTIC Characteristic;
277
280
281 if (Context->m_Callbacks.SetCharacteristic == NULL)
282 return;
283
284 RtlZeroMemory(&Characteristic, sizeof(Characteristic));
285 Characteristic.Size = sizeof(Characteristic);
288
289 Context->m_Callbacks.SetCharacteristic(Endpoint, &Characteristic);
290}
_In_ UCXUSBDEVICE _In_ UCXENDPOINT _In_ ULONG Priority
Definition: hubucx.h:414
UCX_ENDPOINT_CHARACTERISTIC_TYPE CharacteristicType
Definition: ucxendpoint.h:81
UCX_CONTROLLER_ENDPOINT_CHARACTERISTIC_PRIORITY Priority
Definition: ucxendpoint.h:84
@ UCX_ENDPOINT_CHARACTERISTIC_TYPE_PRIORITY
Definition: ucxendpoint.h:67
enum _UCX_ENDPOINT_CHARACTERISTIC_PRIORITY UCX_CONTROLLER_ENDPOINT_CHARACTERISTIC_PRIORITY

Referenced by UcxEvtQueryStackInterface().

◆ UcxHubIsDeviceDisconnected()

static BOOLEAN NTAPI UcxHubIsDeviceDisconnected ( _In_ UCXUSBDEVICE  Device)
static

Definition at line 210 of file hubinterface.cpp.

212{
214}
BOOLEAN m_Disconnected
Definition: devobj.h:231

Referenced by UcxEvtQueryStackInterface().

◆ UcxHubQueryControllerBus()

static VOID NTAPI UcxHubQueryControllerBus ( _In_ UCXUSBDEVICE  Hub,
_Out_ PUCXHUB_CONTROLLER_INFO  Info 
)
static

Definition at line 248 of file hubinterface.cpp.

251{
253
254 HubDevice->m_Controller->GetInfo(Info, HubDevice->m_HubUsesGrownInterface);
255}
WDFDEVICE HubDevice
Definition: childpdo.cpp:989
_Must_inspect_result_ _In_ WDFCHILDLIST _In_ PWDF_CHILD_LIST_ITERATOR _Out_ WDFDEVICE _Inout_opt_ PWDF_CHILD_RETRIEVE_INFO Info
Definition: wdfchildlist.h:690

Referenced by UcxEvtQueryStackInterface().

◆ UcxHubStreamsSupported()

static BOOLEAN NTAPI UcxHubStreamsSupported ( _In_ UCXUSBDEVICE  Hub)
static

Definition at line 219 of file hubinterface.cpp.

221{
223}
BOOLEAN QueryStreamsSupported()
Definition: hostctl.cpp:626

Referenced by UcxEvtQueryStackInterface().

◆ UcxHubWorkItemAllocate()

static PUCXHUB_WORKITEM NTAPI UcxHubWorkItemAllocate ( _In_ UCXUSBDEVICE  Hub,
_In_ PDEVICE_OBJECT  DeviceObject,
_In_ ULONG  Flags 
)
static

Definition at line 156 of file hubinterface.cpp.

160{
161 return UcxWorkItem::Allocate(UcxUsbDevice::FromHandle(Hub)->m_Controller, DeviceObject, Flags);
162}
_In_ D3DDDI_VIDEO_PRESENT_TARGET_ID _In_ ULONG _In_ ULONG Flags
Definition: dispmprt.h:245
static PUCXHUB_WORKITEM Allocate(_In_ UcxController *Controller, _In_ PDEVICE_OBJECT DeviceObject, _In_ ULONG Flags)
Definition: workitem.cpp:16
_In_ PDEVICE_OBJECT DeviceObject
Definition: wdfdevice.h:2061

Referenced by UcxEvtQueryStackInterface().

◆ UcxHubWorkItemDelete()

static VOID NTAPI UcxHubWorkItemDelete ( _In_ PUCXHUB_WORKITEM  WorkItem)
static

Definition at line 167 of file hubinterface.cpp.

169{
170 WorkItem->Free();
171}
_In_opt_ PVOID _In_ PUCXHUB_WORKITEM WorkItem
Definition: hubucx.h:227

Referenced by UcxEvtQueryStackInterface().

◆ UcxHubWorkItemEnqueue()

static VOID NTAPI UcxHubWorkItemEnqueue ( _In_ PUCXHUB_WORKITEM  WorkItem,
_In_ PUCXHUB_WORKITEM_ROUTINE  Routine,
_In_opt_ PVOID  Context,
_In_ UCXHUB_WORKITEM_ENQUEUE_OPTIONS  Options 
)
static

Definition at line 176 of file hubinterface.cpp.

181{
182 WorkItem->Enqueue(Routine, Context, Options);
183}
_In_ PWDFDEVICE_INIT _In_ PWDF_REMOVE_LOCK_OPTIONS Options
Definition: wdfdevice.h:3540

Referenced by UcxEvtQueryStackInterface().

◆ UcxHubWorkItemFlush()

static VOID NTAPI UcxHubWorkItemFlush ( _In_ PUCXHUB_WORKITEM  WorkItem)
static

Definition at line 188 of file hubinterface.cpp.

190{
191 WorkItem->Flush();
192}

Referenced by UcxEvtQueryStackInterface().

◆ UcxInterfaceNoOp()

◆ UcxParentGetHubSymbolicName()

static VOID NTAPI UcxParentGetHubSymbolicName ( _In_ PVOID  Context,
_In_ PUNICODE_STRING  SymbolicLinkName 
)
static

Definition at line 320 of file hubinterface.cpp.

323{
325
327
328 if (RootHub->m_SymbolicName != NULL)
330}
RtlInitEmptyUnicodeString(SymbolicLinkName, NULL, 0)
static UcxRootHub * FromHandle(_In_ UCXROOTHUB Handle)
Definition: rhub.cpp:14
_In_ PUNICODE_STRING SymbolicLinkName
Definition: hubucx.h:491
WdfStringGetUnicodeString(Original, &Name)

Referenced by UcxFillParentInterface().

◆ UcxParentResetDuringResume()

static BOOLEAN NTAPI UcxParentResetDuringResume ( _In_ PVOID  Context)
static

Definition at line 297 of file hubinterface.cpp.

299{
301
302 return InterlockedExchange(&Controller->m_RootHubResetSeen, 0) != 0;
303}
#define InterlockedExchange
Definition: armddk.h:54
UcxController * m_Controller
Definition: rhub.h:115
_Must_inspect_result_ _In_ WDFDEVICE _In_ PUCX_CONTROLLER_CONFIG _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ UCXCONTROLLER * Controller

Referenced by UcxFillParentInterface().

◆ UcxParentWasProgrammingLost()

static BOOLEAN NTAPI UcxParentWasProgrammingLost ( _In_ PVOID  Context)
static

Definition at line 308 of file hubinterface.cpp.

310{
312
313 return InterlockedExchange(&Controller->m_DeviceContextsLost, 0) != 0;
314}

Referenced by UcxFillParentInterface().