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

Go to the source code of this file.

Classes

struct  HubUsb4Host
 
struct  HubUsb4TargetContext
 
struct  HubUsb4OpenContext
 

Macros

#define NDEBUG
 
#define HUB_USB4_REFERENCE_PREFIX   L"Usb4-Host-Interface-"
 
#define HUB_USB4_REFERENCE_PREFIX_CHARS   20
 
#define HUB_USB4_REFERENCE_CHARS   256
 
#define HUB_USB4_FIELD_SEPARATOR   L'^'
 
#define HUB_USB4_LINK_CHARS   256
 
#define HUB_USB4_OPEN_NAME_CHARS   256
 
#define HUB_USB4_HOST_INDEX_MASK   0x07
 
#define HUB_USB4_NO_HOST   0x07
 
#define HUB_USB4_DVSEC_NAME_CHARS   20
 
#define HUB_USB4_MAPPING_EXTRA_BYTES   14
 

Enumerations

enum class  HubUsb4TargetState : ULONG {
  Idle , Opening , Open , Closing ,
  Closed
}
 

Functions

 WDF_DECLARE_CONTEXT_TYPE_WITH_NAME (HubUsb4TargetContext, HubUsb4GetTargetContext)
 
 WDF_DECLARE_CONTEXT_TYPE_WITH_NAME (HubUsb4OpenContext, HubUsb4GetOpenContext)
 
 _IRQL_requires_ (PASSIVE_LEVEL) NTSTATUS NTAPI HubUsb4BindPort(_In_ HubFdo *Hub
 Marks Port as tunneled through the host router Name; ports naming the same host share one record.
 
static HubUsb4Host *NTAPI HubUsb4HostAt (_In_ HubFdo *Hub, _In_ ULONG Index)
 
static HubUsb4Host *NTAPI HubUsb4FindHost (_In_ HubFdo *Hub, _In_ PCUNICODE_STRING Name)
 
static VOID NTAPI HubUsb4EscapeName (_In_ WDFSTRING Name)
 
 if (!NT_SUCCESS(Status))
 
 RtlZeroMemory (Host, sizeof(*Host))
 
 HubUsb4GetTargetContext (Host->Target) -> Hub=Hub
 
 PAGED_CODE ()
 
 if (!Hub->m_HasUsb4Ports)
 
 HubUsb4EscapeName (Name)
 
 WdfStringGetUnicodeString (Name, &Text)
 
 if (Host==NULL)
 
Port SetFlag (PortFlag::Usb4Host)
 
 DPRINT ("Port %u belongs to USB4 host %wZ\n", Port->Number(), &Text)
 
static VOID NTAPI HubUsb4AddPowerRelation (_In_ HubFdo *Hub, _In_ HubUsb4Host *Host)
 
static VOID NTAPI HubUsb4InvalidatePowerRelations (_In_ HubFdo *Hub)
 
static VOID NTAPI HubUsb4RemovePowerRelation (_In_ HubFdo *Hub, _In_ HubUsb4Host *Host)
 
BOOLEAN NTAPI HubUsb4NeedsHostPower (_In_ HubChild *Child)
 
static NTSTATUS NTAPI HubUsb4TargetQueryRemove (_In_ WDFIOTARGET Target)
 
static VOID NTAPI HubUsb4TargetRemoveCanceled (_In_ WDFIOTARGET Target)
 
static VOID NTAPI HubUsb4TargetRemoveComplete (_In_ WDFIOTARGET Target)
 
static VOID NTAPI HubUsb4OpenWorkItem (_In_ WDFWORKITEM WorkItem)
 
 if ((SymbolicLink->Length &1) !=0||SymbolicLink->Length > SymbolicLink->MaximumLength||(SymbolicLink->Buffer==NULL &&SymbolicLink->Length !=0))
 
else if (Chars >=HUB_USB4_LINK_CHARS)
 
 WdfWorkItemEnqueue (WorkItem)
 
 DPRINT1 ("Hub %p USB4 host symbolic link %wZ not copied 0x%lx\n", Hub, SymbolicLink, Status)
 
 WdfObjectDelete (WorkItem)
 
static NTSTATUS NTAPI HubUsb4InterfaceChange (_In_ PVOID NotificationStructure, _Inout_opt_ PVOID Context)
 A host router's power PDO came or went; its reference string picks the record by ACPI path or DVSEC name.
 

Variables

static const GUID HubUsb4PowerPdoInterface
 
static const DEVPROPKEY HubKeyUsb4PortMappings
 
static const DEVPROPKEY HubKeyPciSerialNumber
 
static const DEVPROPKEY HubKeyPciUsb4PortAttributes
 
static DRIVER_NOTIFICATION_CALLBACK_ROUTINE HubUsb4InterfaceChange
 
static EVT_WDF_WORKITEM HubUsb4OpenWorkItem
 
static EVT_WDF_IO_TARGET_QUERY_REMOVE HubUsb4TargetQueryRemove
 
static EVT_WDF_IO_TARGET_REMOVE_CANCELED HubUsb4TargetRemoveCanceled
 
static EVT_WDF_IO_TARGET_REMOVE_COMPLETE HubUsb4TargetRemoveComplete
 
_In_ WDFSTRING Name
 
HubUsb4Host * Host = HubUsb4FindHost(Hub, &Text)
 
WDFMEMORY Memory
 
NTSTATUS Status = WdfMemoryCreate(&Attributes, NonPagedPool, HUB_TAG_HUB, sizeof(*Host), &Memory, (PVOID*)&Host)
 
WDF_OBJECT_ATTRIBUTES_INIT & Attributes
 
Attributes ParentObject = Hub->m_Device
 
return STATUS_SUCCESS
 
Failed __pad0__
 
_In_ HubPort * Port
 
Port m_Usb4HostName = Name
 
_In_ HubUsb4Host _In_ PCUNICODE_STRING SymbolicLink
 
HubUsb4OpenContext * Open = HubUsb4GetOpenContext(WorkItem)
 
WDFWORKITEM WorkItem
 
ULONG Chars = SymbolicLink->Length / sizeof(WCHAR)
 
WDF_WORKITEM_CONFIG_INIT & Config
 
Config AutomaticSerialization = TRUE
 
 else
 
 return
 
Failed __pad1__
 
Host State = HubUsb4TargetState::Idle
 

Macro Definition Documentation

◆ HUB_USB4_DVSEC_NAME_CHARS

#define HUB_USB4_DVSEC_NAME_CHARS   20

Definition at line 40 of file hubtunnel.cpp.

◆ HUB_USB4_FIELD_SEPARATOR

#define HUB_USB4_FIELD_SEPARATOR   L'^'

Definition at line 31 of file hubtunnel.cpp.

◆ HUB_USB4_HOST_INDEX_MASK

#define HUB_USB4_HOST_INDEX_MASK   0x07

Definition at line 38 of file hubtunnel.cpp.

◆ HUB_USB4_LINK_CHARS

#define HUB_USB4_LINK_CHARS   256

Definition at line 34 of file hubtunnel.cpp.

◆ HUB_USB4_MAPPING_EXTRA_BYTES

#define HUB_USB4_MAPPING_EXTRA_BYTES   14

Definition at line 43 of file hubtunnel.cpp.

◆ HUB_USB4_NO_HOST

#define HUB_USB4_NO_HOST   0x07

Definition at line 39 of file hubtunnel.cpp.

◆ HUB_USB4_OPEN_NAME_CHARS

#define HUB_USB4_OPEN_NAME_CHARS   256

Definition at line 35 of file hubtunnel.cpp.

◆ HUB_USB4_REFERENCE_CHARS

#define HUB_USB4_REFERENCE_CHARS   256

Definition at line 30 of file hubtunnel.cpp.

◆ HUB_USB4_REFERENCE_PREFIX

#define HUB_USB4_REFERENCE_PREFIX   L"Usb4-Host-Interface-"

Definition at line 28 of file hubtunnel.cpp.

◆ HUB_USB4_REFERENCE_PREFIX_CHARS

#define HUB_USB4_REFERENCE_PREFIX_CHARS   20

Definition at line 29 of file hubtunnel.cpp.

◆ NDEBUG

#define NDEBUG

Definition at line 10 of file hubtunnel.cpp.

Enumeration Type Documentation

◆ HubUsb4TargetState

Lifecycle of the remote target on a host router's power PDO.

Enumerator
Idle 
Opening 
Open 
Closing 
Closed 

Definition at line 46 of file hubtunnel.cpp.

47{
48 Idle,
49 Opening,
50 Open,
51 Closing,
52 Closed
53};
HubUsb4OpenContext * Open
Definition: hubtunnel.cpp:831

Function Documentation

◆ _IRQL_requires_()

_IRQL_requires_ ( PASSIVE_LEVEL  )

Marks Port as tunneled through the host router Name; ports naming the same host share one record.

Sends a synchronous IOCTL to the specified device object.

Publishes "<port>#<host>" for every bound port on the hub's PDO. QUIRK: with no bound port an older value is left in place.

Binds USB 3 ports to the host routers named by the USB4 DVSEC; an earlier ACPI mapping wins.

Definition at line 96 of file hubtunnel.cpp.

101{
104
105 PAGED_CODE();
106
108 Attributes.ParentObject = Hub->m_Device;
109
110 Status = WdfCollectionCreate(&Attributes, &Hub->m_Usb4Hosts);
111 if (!NT_SUCCESS(Status))
112 {
113 DPRINT1("Hub %p USB4 host list not created 0x%lx\n", Hub, Status);
114 return Status;
115 }
116
117 Status = WdfWaitLockCreate(&Attributes, &Hub->m_Usb4HostsLock);
118 if (!NT_SUCCESS(Status))
119 DPRINT1("Hub %p USB4 host list lock not created 0x%lx\n", Hub, Status);
120
121 return Status;
122}
LONG NTSTATUS
Definition: precomp.h:26
#define DPRINT1
Definition: precomp.h:8
HubFdo * Hub
Definition: bootdev.cpp:261
WDFDEVICE m_Device
Definition: fdo.h:349
WDFWAITLOCK m_Usb4HostsLock
Definition: fdo.h:474
WDFCOLLECTION m_Usb4Hosts
Definition: fdo.h:473
_In_ ULONG Attributes
Definition: dispmprt.h:1077
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:33
Status
Definition: gdiplustypes.h:24
WDF_OBJECT_ATTRIBUTES_INIT & Attributes
Definition: hubtunnel.cpp:215
NTSTATUS Status
Definition: hubtunnel.cpp:213
PAGED_CODE()
FORCEINLINE VOID WDF_OBJECT_ATTRIBUTES_INIT(_Out_ PWDF_OBJECT_ATTRIBUTES Attributes)
Definition: wdfobject.h:147

◆ DPRINT()

DPRINT ( "Port %u belongs to USB4 host %wZ\n"  ,
Port->  Number(),
&  Text 
)

◆ DPRINT1()

DPRINT1 ( "Hub %p USB4 host symbolic link %wZ not copied 0x%lx\n"  ,
Hub  ,
SymbolicLink  ,
Status   
)

◆ HubUsb4AddPowerRelation()

static VOID NTAPI HubUsb4AddPowerRelation ( _In_ HubFdo *  Hub,
_In_ HubUsb4Host *  Host 
)
static

Definition at line 552 of file hubtunnel.cpp.

555{
556 DPRINT("Hub %p would depend on USB4 host router PDO %p; PoFx component relations are not available\n",
557 Hub, Host->PowerPdo);
558}
HubUsb4Host * Host
Definition: hubtunnel.cpp:211
#define DPRINT
Definition: sndvol32.h:73
PDEVICE_OBJECT PowerPdo
Definition: hubtunnel.cpp:65

◆ HubUsb4EscapeName() [1/2]

static VOID NTAPI HubUsb4EscapeName ( _In_ WDFSTRING  Name)
static

Definition at line 186 of file hubtunnel.cpp.

188{
190 ULONG Index;
191
193
194 for (Index = 0; Index < Text.Length / sizeof(WCHAR); Index++)
195 {
197 Text.Buffer[Index] = L'#';
198 }
199}
#define L(x)
Definition: resources.c:13
WdfStringGetUnicodeString(Name, &Text)
_In_ WDFSTRING Name
Definition: hubtunnel.cpp:209
#define HUB_USB4_FIELD_SEPARATOR
Definition: hubtunnel.cpp:31
short WCHAR
Definition: pedump.c:58
uint32_t ULONG
Definition: typedefs.h:59
UNICODE_STRING Text
Definition: userreq.cpp:261
_In_ WDFCOLLECTION _In_ ULONG Index

◆ HubUsb4EscapeName() [2/2]

HubUsb4EscapeName ( Name  )

◆ HubUsb4FindHost()

static HubUsb4Host *NTAPI HubUsb4FindHost ( _In_ HubFdo *  Hub,
_In_ PCUNICODE_STRING  Name 
)
static

Definition at line 143 of file hubtunnel.cpp.

146{
147 UNICODE_STRING HostName;
149 ULONG Count = WdfCollectionGetCount(Hub->m_Usb4Hosts);
150 ULONG Index;
151
152 for (Index = 0; Index < Count; Index++)
153 {
155 if (Host == NULL)
156 break;
157
159 if (RtlEqualUnicodeString(&HostName, Name, TRUE))
160 return Host;
161 }
162
163 return NULL;
164}
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
static HubUsb4Host *NTAPI HubUsb4HostAt(_In_ HubFdo *Hub, _In_ ULONG Index)
Definition: hubtunnel.cpp:127
NTSYSAPI BOOLEAN NTAPI RtlEqualUnicodeString(PUNICODE_STRING String1, PUNICODE_STRING String2, BOOLEAN CaseInSensitive)
WDFSTRING Name
Definition: hubtunnel.cpp:59
USHORT Count
Definition: userreq.cpp:200

Referenced by HubUsb4InterfaceChange().

◆ HubUsb4GetTargetContext()

HubUsb4GetTargetContext ( Host->  Target) -> Hub=Hub

◆ HubUsb4HostAt()

static HubUsb4Host *NTAPI HubUsb4HostAt ( _In_ HubFdo *  Hub,
_In_ ULONG  Index 
)
static

Definition at line 127 of file hubtunnel.cpp.

130{
131 WDFOBJECT Item = WdfCollectionGetItem(Hub->m_Usb4Hosts, Index);
132
133 if (Item == NULL)
134 return NULL;
135
136 return (HubUsb4Host*)WdfMemoryGetBuffer((WDFMEMORY)Item, NULL);
137}
_In_ WDFCOLLECTION _In_ WDFOBJECT Item

Referenced by HubUsb4FindHost().

◆ HubUsb4InterfaceChange()

static NTSTATUS NTAPI HubUsb4InterfaceChange ( _In_ PVOID  NotificationStructure,
_Inout_opt_ PVOID  Context 
)
static

A host router's power PDO came or went; its reference string picks the record by ACPI path or DVSEC name.

Definition at line 888 of file hubtunnel.cpp.

891{
893 HubFdo* Hub = HubFdo::FromDevice((WDFDEVICE)Context);
895 UNICODE_STRING AcpiName;
896 UNICODE_STRING DvsecName;
898 PWCHAR AcpiField;
899 PWCHAR DvsecField = NULL;
900 PWCHAR Mark;
905
906 PAGED_CODE();
907
908 if (!IsEqualGUID(Change->InterfaceClassGuid, HubUsb4PowerPdoInterface))
909 {
910 DPRINT("Hub %p ignores an interface change of another class\n", Hub);
911 return STATUS_SUCCESS;
912 }
913
915 {
916 DPRINT1("Hub %p cannot read USB4 power interface properties on this kernel\n", Hub);
917 return STATUS_SUCCESS;
918 }
919
920 Status = HubDriver.GetInterfaceProperty(Change->SymbolicLinkName,
921 &DEVPKEY_DeviceInterface_ReferenceString,
923 0,
924 sizeof(Reference),
925 Reference,
926 &Required,
927 &Type);
928 if (!NT_SUCCESS(Status))
929 {
930 DPRINT1("Hub %p USB4 power interface reference string query failed 0x%lx\n", Hub, Status);
931 return STATUS_SUCCESS;
932 }
933
935 {
936 DPRINT1("Hub %p USB4 power interface reference string has type 0x%lx\n", Hub, Type);
937 return STATUS_SUCCESS;
938 }
939
940 Reference[RTL_NUMBER_OF(Reference) - 1] = UNICODE_NULL;
941
943 {
944 DPRINT1("Hub %p USB4 power interface has an invalid reference string %ws\n", Hub, Reference);
945 return STATUS_SUCCESS;
946 }
947
949 if (Mark == NULL)
950 {
951 DPRINT1("Hub %p USB4 power interface reference string %ws has no fields\n", Hub, Reference);
952 return STATUS_SUCCESS;
953 }
954
955 AcpiField = Mark + 1;
957 if (Mark != NULL)
958 {
960 DvsecField = Mark + 1;
961
962 Mark = wcschr(DvsecField, HUB_USB4_FIELD_SEPARATOR);
963 if (Mark != NULL)
965 }
966
967 RtlInitUnicodeString(&AcpiName, AcpiField);
968
969 {
971
972 if (AcpiName.Length != 0)
973 Host = HubUsb4FindHost(Hub, &AcpiName);
974
975 if (Host == NULL && DvsecField != NULL)
976 {
977 RtlInitUnicodeString(&DvsecName, DvsecField);
978 Host = HubUsb4FindHost(Hub, &DvsecName);
979 }
980 }
981
982 if (Host == NULL)
983 {
984 DPRINT1("Hub %p has no USB4 host for %ws\n", Hub, Reference);
985 return STATUS_SUCCESS;
986 }
987
988 /* Removal is handled by the target's remove callbacks */
990 {
991 DPRINT("Hub %p USB4 host %p power interface removed\n", Hub, Host);
992 return STATUS_SUCCESS;
993 }
994
995 DPRINT("Hub %p USB4 host %p power interface arrived\n", Hub, Host);
996
997 {
998 HubWaitLockGuard Guard(Host->Lock);
999
1001 {
1003 Open = TRUE;
1004 }
1005 }
1006
1007 if (Open)
1008 HubUsb4QueueOpen(Hub, Host, Change->SymbolicLinkName);
1009
1010 return STATUS_SUCCESS;
1011}
#define RTL_NUMBER_OF(x)
Definition: RtlRegistry.c:12
Type
Definition: Type.h:7
unsigned char BOOLEAN
Definition: actypes.h:127
USHORT Change
Definition: bootdev.cpp:133
Definition: fdo.h:132
static HubFdo * FromDevice(_In_ WDFDEVICE Device)
Definition: fdo.cpp:37
static VOID Mark(PGUI_CONSOLE_DATA GuiData)
Definition: conwnd.c:300
ULONG DEVPROPTYPE
Definition: devpropdef.h:24
#define DEVPROP_TYPE_STRING
Definition: devpropdef.h:47
#define FALSE
Definition: types.h:117
#define wcschr
Definition: compat.h:17
_ACRTIMP int __cdecl _wcsnicmp(const wchar_t *, const wchar_t *, size_t)
Definition: wcs.c:200
const GUID GUID_DEVICE_INTERFACE_ARRIVAL
Definition: deviface.c:14
HubDriverState HubDriver
Definition: entry.cpp:13
static HubUsb4Host *NTAPI HubUsb4FindHost(_In_ HubFdo *Hub, _In_ PCUNICODE_STRING Name)
Definition: hubtunnel.cpp:143
return STATUS_SUCCESS
Definition: hubtunnel.cpp:262
#define HUB_USB4_REFERENCE_CHARS
Definition: hubtunnel.cpp:30
#define HUB_USB4_REFERENCE_PREFIX
Definition: hubtunnel.cpp:28
#define HUB_USB4_REFERENCE_PREFIX_CHARS
Definition: hubtunnel.cpp:29
static const GUID HubUsb4PowerPdoInterface
Definition: hubtunnel.cpp:14
_In_ PIRP _In_ PIO_COMPLETION_ROUTINE _In_ PVOID Context
Definition: kse.h:81
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define LOCALE_NEUTRAL
#define UNICODE_NULL
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
ULONG Required
Definition: rhubpdo.cpp:336
PFN_HUB_GET_INTERFACE_PROPERTY GetInterfaceProperty
Definition: hubdriver.h:116
WDFWAITLOCK Lock
Definition: hubtunnel.cpp:61
HubUsb4TargetState State
Definition: hubtunnel.cpp:62
uint16_t * PWCHAR
Definition: typedefs.h:56
_In_ PVOID NotificationStructure
Definition: iofuncs.h:1225
struct _DEVICE_INTERFACE_CHANGE_NOTIFICATION * PDEVICE_INTERFACE_CHANGE_NOTIFICATION

◆ HubUsb4InvalidatePowerRelations()

static VOID NTAPI HubUsb4InvalidatePowerRelations ( _In_ HubFdo *  Hub)
static

Definition at line 563 of file hubtunnel.cpp.

565{
566 DPRINT("Hub %p power relations are not reported\n", Hub);
567}

Referenced by HubUsb4TargetRemoveComplete().

◆ HubUsb4NeedsHostPower()

BOOLEAN NTAPI HubUsb4NeedsHostPower ( _In_ HubChild *  Child)

A device behind a USB4 port holds its host router powered while tunneled or not known yet.

Definition at line 587 of file hubtunnel.cpp.

589{
590 return Child->m_Port->HasFlag(PortFlag::Usb4Host) &&
591 (Child->m_TunnelState == HUB_TUNNEL_STATE_TUNNELED ||
592 Child->m_TunnelState == HUB_TUNNEL_STATE_UNKNOWN);
593}
#define HUB_TUNNEL_STATE_UNKNOWN
Definition: hubchild.h:54
#define HUB_TUNNEL_STATE_TUNNELED
Definition: hubchild.h:52
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFDEVICE Child
Definition: wdffdo.h:536

◆ HubUsb4OpenWorkItem()

static VOID NTAPI HubUsb4OpenWorkItem ( _In_ WDFWORKITEM  WorkItem)
static

Definition at line 760 of file hubtunnel.cpp.

762{
763 HubUsb4OpenContext* Open = HubUsb4GetOpenContext(WorkItem);
764 HubFdo* Hub = HubFdo::FromDevice((WDFDEVICE)WdfWorkItemGetParentObject(WorkItem));
770
773 if (!NT_SUCCESS(Status))
774 {
775 DPRINT1("Hub %p USB4 host target name not formatted 0x%lx\n", Hub, Status);
776 goto Failed;
777 }
778
780 Params.ShareAccess = FILE_SHARE_READ;
781 Params.CreateOptions = FILE_NON_DIRECTORY_FILE;
782 Params.EvtIoTargetQueryRemove = HubUsb4TargetQueryRemove;
783 Params.EvtIoTargetRemoveCanceled = HubUsb4TargetRemoveCanceled;
784 Params.EvtIoTargetRemoveComplete = HubUsb4TargetRemoveComplete;
785
786 Status = WdfIoTargetOpen(Host->Target, &Params);
787 if (!NT_SUCCESS(Status))
788 {
789 DPRINT1("Hub %p USB4 host target %wZ not opened 0x%lx\n", Hub, &Name, Status);
790 goto Failed;
791 }
792
793 {
795 HubWaitLockGuard HostGuard(Host->Lock);
796
799
800 Host->PowerPdo = WdfIoTargetWdmGetTargetPhysicalDevice(Host->Target);
802 }
803
804 HubUsb4UpdatePowerRelations(Hub, Host);
805
806 DPRINT("Hub %p opened USB4 host target %wZ, PDO %p\n", Hub, &Name, Host->PowerPdo);
808 return;
809
810Failed:
811 {
812 HubWaitLockGuard Guard(Host->Lock);
814 }
815
817}
#define FILE_NON_DIRECTORY_FILE
Definition: constants.h:492
RtlInitEmptyUnicodeString(SymbolicLinkName, NULL, 0)
Definition: bufpool.h:45
#define FILE_SHARE_READ
Definition: compat.h:136
return RtlUnicodeStringPrintf(Name, L"uxd_port_%03u", PortNumber)
WdfObjectDelete(WorkItem)
static EVT_WDF_IO_TARGET_REMOVE_COMPLETE HubUsb4TargetRemoveComplete
Definition: hubtunnel.cpp:92
static EVT_WDF_IO_TARGET_QUERY_REMOVE HubUsb4TargetQueryRemove
Definition: hubtunnel.cpp:90
static EVT_WDF_IO_TARGET_REMOVE_CANCELED HubUsb4TargetRemoveCanceled
Definition: hubtunnel.cpp:91
#define HUB_USB4_OPEN_NAME_CHARS
Definition: hubtunnel.cpp:35
HubUsb4GetTargetContext(Host->Target) -> Hub=Hub
_In_opt_ PVOID _In_ PUCXHUB_WORKITEM WorkItem
Definition: hubucx.h:227
#define FILE_READ_DATA
Definition: nt_native.h:628
@ Failed
Definition: arc.h:88
WDFIOTARGET Target
Definition: hubtunnel.cpp:60
WCHAR SymbolicLink[HUB_USB4_LINK_CHARS]
Definition: hubtunnel.cpp:82
HubUsb4Host * Host
Definition: hubtunnel.cpp:83
FORCEINLINE VOID WDF_IO_TARGET_OPEN_PARAMS_INIT_OPEN_BY_NAME(_Out_ PWDF_IO_TARGET_OPEN_PARAMS Params, _In_ PCUNICODE_STRING TargetDeviceName, _In_ ACCESS_MASK DesiredAccess)
Definition: wdfiotarget.h:323
_In_ WDFIOTARGET _In_ PWDF_REQUEST_COMPLETION_PARAMS Params
Definition: wdfrequest.h:308

◆ HubUsb4RemovePowerRelation()

static VOID NTAPI HubUsb4RemovePowerRelation ( _In_ HubFdo *  Hub,
_In_ HubUsb4Host *  Host 
)
static

Definition at line 573 of file hubtunnel.cpp.

576{
577 if (!Host->RelationAdded)
578 return;
579
580 DPRINT("Hub %p drops its dependency on USB4 host router PDO %p\n", Hub, Host->PowerPdo);
582}
BOOLEAN RelationAdded
Definition: hubtunnel.cpp:67

◆ HubUsb4TargetQueryRemove()

static NTSTATUS NTAPI HubUsb4TargetQueryRemove ( _In_ WDFIOTARGET  Target)
static

Definition at line 719 of file hubtunnel.cpp.

721{
722 DPRINT("USB4 host target %p query remove\n", Target);
723 WdfIoTargetCloseForQueryRemove(Target);
724 return STATUS_SUCCESS;
725}
_In_ WDFIOTARGET Target
Definition: wdfrequest.h:306

◆ HubUsb4TargetRemoveCanceled()

static VOID NTAPI HubUsb4TargetRemoveCanceled ( _In_ WDFIOTARGET  Target)
static

Definition at line 731 of file hubtunnel.cpp.

733{
734 DPRINT("USB4 host target %p remove canceled\n", Target);
735}

◆ HubUsb4TargetRemoveComplete()

static VOID NTAPI HubUsb4TargetRemoveComplete ( _In_ WDFIOTARGET  Target)
static

Definition at line 740 of file hubtunnel.cpp.

742{
744 HubFdo* Hub = Context->Hub;
745
746 DPRINT("USB4 host target %p removed\n", Target);
747
748 {
750 HubUsb4CloseHost(Context);
751 }
752
754}
static VOID NTAPI HubUsb4InvalidatePowerRelations(_In_ HubFdo *Hub)
Definition: hubtunnel.cpp:563

◆ if() [1/5]

if ( !Hub->  m_HasUsb4Ports)

Definition at line 288 of file hubtunnel.cpp.

289 {
290 DPRINT("Hub %p has ports behind a USB4 host router\n", Hub);
292 }
BOOLEAN m_HasUsb4Ports
Definition: fdo.h:467

◆ if() [2/5]

if ( !  NT_SUCCESSStatus)

Definition at line 219 of file hubtunnel.cpp.

220 {
221 DPRINT1("Hub %p USB4 host record not created 0x%lx\n", Hub, Status);
222 return Status;
223 }

◆ if() [3/5]

if ( (SymbolicLink->Length &1) !  = 0 || SymbolicLink->Length,
SymbolicLink->MaximumLength||  SymbolicLink->Buffer==NULL &&SymbolicLink->Length !=0 
)

Definition at line 853 of file hubtunnel.cpp.

856 {
858 }
#define STATUS_INVALID_PARAMETER
Definition: udferr_usr.h:135

◆ if() [4/5]

else if ( Chars >=  HUB_USB4_LINK_CHARS)

Definition at line 859 of file hubtunnel.cpp.

860 {
862 }
#define STATUS_BUFFER_OVERFLOW
Definition: shellext.h:66

◆ if() [5/5]

if ( Host  = = NULL)

Definition at line 302 of file hubtunnel.cpp.

303 {
304 Status = HubUsb4CreateHost(Hub, Name);
305 if (!NT_SUCCESS(Status))
306 return Status;
307 }

◆ PAGED_CODE()

PAGED_CODE ( )

◆ RtlZeroMemory()

RtlZeroMemory ( Host  ,
sizeof *  Host 
)

◆ SetFlag()

Port SetFlag ( PortFlag::Usb4Host  )

◆ WDF_DECLARE_CONTEXT_TYPE_WITH_NAME() [1/2]

WDF_DECLARE_CONTEXT_TYPE_WITH_NAME ( HubUsb4OpenContext  ,
HubUsb4GetOpenContext   
)

◆ WDF_DECLARE_CONTEXT_TYPE_WITH_NAME() [2/2]

WDF_DECLARE_CONTEXT_TYPE_WITH_NAME ( HubUsb4TargetContext  ,
HubUsb4GetTargetContext   
)

◆ WdfObjectDelete()

WdfObjectDelete ( WorkItem  )

Referenced by HubUsb4OpenWorkItem().

◆ WdfStringGetUnicodeString()

WdfStringGetUnicodeString ( Name  ,
&  Text 
)

◆ WdfWorkItemEnqueue()

Variable Documentation

◆ __pad0__

Failed __pad0__

Definition at line 264 of file hubtunnel.cpp.

◆ __pad1__

Failed __pad1__

Definition at line 874 of file hubtunnel.cpp.

◆ Attributes

◆ AutomaticSerialization

Config AutomaticSerialization = TRUE

Definition at line 837 of file hubtunnel.cpp.

◆ Chars

◆ Config

Definition at line 836 of file hubtunnel.cpp.

◆ else

else
Initial value:
{
_In_ HubUsb4Host _In_ PCUNICODE_STRING SymbolicLink
Definition: hubtunnel.cpp:828
#define RtlCopyMemory(Destination, Source, Length)
Definition: typedefs.h:263

Definition at line 863 of file hubtunnel.cpp.

◆ Host

◆ HubKeyPciSerialNumber

const DEVPROPKEY HubKeyPciSerialNumber
static
Initial value:
=
{ { 0x3ab22e31, 0x8264, 0x4b4e, { 0x9a, 0xf5, 0xa8, 0xd2, 0xd8, 0xe3, 0x3e, 0x62 } }, 40 }

Definition at line 22 of file hubtunnel.cpp.

◆ HubKeyPciUsb4PortAttributes

const DEVPROPKEY HubKeyPciUsb4PortAttributes
static
Initial value:
=
{ { 0x3ab22e31, 0x8264, 0x4b4e, { 0x9a, 0xf5, 0xa8, 0xd2, 0xd8, 0xe3, 0x3e, 0x62 } }, 42 }

Definition at line 24 of file hubtunnel.cpp.

◆ HubKeyUsb4PortMappings

const DEVPROPKEY HubKeyUsb4PortMappings
static
Initial value:
=
{ { 0xb5a825b8, 0x3907, 0x40b5, { 0xab, 0xca, 0x84, 0x51, 0xe2, 0x45, 0x3d, 0x5f } }, 1 }

Definition at line 18 of file hubtunnel.cpp.

◆ HubUsb4InterfaceChange

DRIVER_NOTIFICATION_CALLBACK_ROUTINE HubUsb4InterfaceChange
static

Definition at line 88 of file hubtunnel.cpp.

◆ HubUsb4OpenWorkItem

EVT_WDF_WORKITEM HubUsb4OpenWorkItem
static

Definition at line 89 of file hubtunnel.cpp.

◆ HubUsb4PowerPdoInterface

const GUID HubUsb4PowerPdoInterface
static
Initial value:
=
{ 0x9c0d3eae, 0xfba6, 0x4e08, { 0x9e, 0x8d, 0x18, 0x1c, 0xbb, 0x39, 0x97, 0xd6 } }

Definition at line 14 of file hubtunnel.cpp.

Referenced by HubUsb4InterfaceChange().

◆ HubUsb4TargetQueryRemove

EVT_WDF_IO_TARGET_QUERY_REMOVE HubUsb4TargetQueryRemove
static

Definition at line 90 of file hubtunnel.cpp.

Referenced by HubUsb4OpenWorkItem().

◆ HubUsb4TargetRemoveCanceled

EVT_WDF_IO_TARGET_REMOVE_CANCELED HubUsb4TargetRemoveCanceled
static

Definition at line 91 of file hubtunnel.cpp.

Referenced by HubUsb4OpenWorkItem().

◆ HubUsb4TargetRemoveComplete

EVT_WDF_IO_TARGET_REMOVE_COMPLETE HubUsb4TargetRemoveComplete
static

Definition at line 92 of file hubtunnel.cpp.

Referenced by HubUsb4OpenWorkItem().

◆ m_Usb4HostName

Port m_Usb4HostName = Name

Definition at line 309 of file hubtunnel.cpp.

◆ Memory

WDFMEMORY Memory

Definition at line 212 of file hubtunnel.cpp.

◆ Name

_In_ HubPort _In_ WDFSTRING Name
Initial value:

Definition at line 208 of file hubtunnel.cpp.

Referenced by HubUsb4EscapeName(), HubUsb4FindHost(), HubUsb4OpenWorkItem(), and if().

◆ Open

int Open = HubUsb4GetOpenContext(WorkItem)

Definition at line 831 of file hubtunnel.cpp.

Referenced by HubUsb4InterfaceChange(), and HubUsb4OpenWorkItem().

◆ ParentObject

Attributes ParentObject = Hub->m_Device

Definition at line 216 of file hubtunnel.cpp.

◆ Port

_In_ HubPort* Port

Definition at line 278 of file hubtunnel.cpp.

◆ return

return

Definition at line 868 of file hubtunnel.cpp.

◆ State

Definition at line 876 of file hubtunnel.cpp.

◆ Status

◆ STATUS_SUCCESS

return STATUS_SUCCESS

Definition at line 262 of file hubtunnel.cpp.

Referenced by HubUsb4InterfaceChange(), and HubUsb4TargetQueryRemove().

◆ SymbolicLink

Open SymbolicLink
Initial value:
{
_Must_inspect_result_ _In_ WDFDEVICE _In_ PUCX_CONTROLLER_CONFIG Config

Definition at line 827 of file hubtunnel.cpp.

◆ WorkItem

WDFWORKITEM WorkItem

Definition at line 832 of file hubtunnel.cpp.