ReactOS 0.4.17-dev-1281-g065abb3
HubFdo Class Reference

#include <fdo.h>

Collaboration diagram for HubFdo:

Public Member Functions

BOOLEAN HasFlag (_In_ HubFlag Flag) const
 
VOID SetFlag (_In_ HubFlag Flag)
 
VOID ClearFlag (_In_ HubFlag Flag)
 
BOOLEAN IsRootHub () const
 
UCXUSBDEVICE UsbDevice () const
 
WDFDEVICE Device () const
 
VOID Post (_In_ HubEvent Event)
 
 _IRQL_requires_ (PASSIVE_LEVEL) NTSTATUS PostAndWait(_In_ HubEvent Event
 
BOOLEAN NeedsForwardProgress () const
 
PUCXHUB_WORKITEM AllocateWorkItem ()
 
VOID EnqueueWorkItem (_In_ PUCXHUB_WORKITEM WorkItem, _In_ PUCXHUB_WORKITEM_ROUTINE Routine, _In_ PVOID Context, _In_ BOOLEAN ForwardProgress)
 
 _IRQL_requires_ (PASSIVE_LEVEL) VOID FlushAndDeleteWorkItem(_Inout_ PUCXHUB_WORKITEM *WorkItem)
 
HubPort * FindPort (_In_ ULONG PortNumber)
 
VOID InitializeMux ()
 
 _IRQL_requires_ (PASSIVE_LEVEL) BOOLEAN CreateChildPorts()
 
VOID QueuePowerUpToPorts (_In_ PortEvent Event)
 
VOID QueueStopToPorts ()
 
VOID QueueSuspendToPorts ()
 
VOID QueueSurpriseRemovalToPorts ()
 
VOID QueueResetToPorts ()
 
VOID QueueStatusChangeToPorts ()
 
VOID QueueFakeStatusChangeToPorts ()
 
VOID QueuePowerDownToDevices (_In_ DsmEvent Event, _In_ HubDeviceFanOut FanOut)
 
VOID QueuePowerUpToDevices (_In_ DsmEvent Event)
 
VOID AllowHubReset ()
 
BOOLEAN RequestHubReset ()
 
BOOLEAN PortInterruptRefsReleased ()
 
BOOLEAN TakeInterruptReference (_In_ HubPort *Port)
 
VOID DropInterruptReference (_In_ HubPort *Port)
 
VOID TakePortPowerReference (_In_ HubPort *Port)
 
VOID DropPortPowerReference (_In_ HubPort *Port)
 
VOID DropHubResetReference (_In_ HubPort *Port)
 
VOID ResumeInterruptTransfer (_In_ HubPort *Port)
 
BOOLEAN RegisterDevice (_In_ HubChild *Child)
 
VOID UnregisterDevice (_In_ HubChild *Child)
 
VOID ReferenceDevicePower (_In_ HubChild *Child)
 
VOID DereferenceDevicePower (_In_ HubChild *Child)
 
VOID ConfirmStopWhileSuspended (_In_ HubChild *Child)
 
VOID MarkDevicesProgrammingLost ()
 
BOOLEAN IsHubResetInProgress () const
 
VOID AcquirePowerReference ()
 
VOID ReleasePowerReference ()
 

Static Public Member Functions

static HubFdo * FromDevice (_In_ WDFDEVICE Device)
 
static HubFdo * FromContext (_In_ UCXHUB_HUB_CONTEXT Context)
 

Public Attributes

_In_ PCSTR What
 
HubMachine m_Machine
 
WDFDEVICE m_Device
 
PDEVICE_OBJECT m_WdmPdo
 
ULONG m_HubNumber
 
volatile LONG m_Flags
 
UCXHUB_PARENT_INTERFACE m_Parent
 
UCXHUB_STACK_INTERFACE m_Stack
 
USB_BUS_INTERFACE_USBDI_V3 m_Usbdi
 
DEVICE_CAPABILITIES m_Capabilities
 
HubParentInfo m_ParentInfo
 
BOOLEAN m_StreamsSupported
 
ULONG m_ResetFlags
 
struct _URB_PIPE_REQUEST m_PipeUrb
 
WDFIOTARGET m_RootHubTarget
 
UCXHUB_CONTROLLER_INFO_V2 m_ControllerInfo
 
UCXHUB_ROOTHUB_INFO m_RootHubInfo
 
PROOTHUB_20PORT_INFO * m_Root20Ports
 
PROOTHUB_30PORT_INFO_EX * m_Root30Ports
 
ULONG m_PortCount
 
USHORT m_First20Port
 
USHORT m_Last20Port
 
USHORT m_First30Port
 
USHORT m_Last30Port
 
ULONG m_MaxPortPower
 
ULONG m_SspIsochBurstCount
 
KEVENT m_PnpEvent
 
NTSTATUS m_PnpStatus
 
WDFREQUEST m_PortStatusRequest
 
HubPort * m_PortStatusTarget
 
ULONG m_IdleTimeout
 
PVOID m_IdleTimeoutSetting
 
PVOID m_SelectiveSuspendSetting
 
WDF_POWER_DEVICE_STATE m_PowerState
 
ULONG m_FailureMessageId
 
LIST_ENTRY m_HubListEntry
 
BOOLEAN m_OnHubList
 
HubMux m_Mux
 
HubTimer m_Timer
 
PUCXHUB_WORKITEM m_WorkItem
 
BOOLEAN m_NeedsForwardProgress
 
HubControlRequest m_Control
 
HubInterruptRequest m_Interrupt
 
union {
   USB_HUB_DESCRIPTOR   Usb20
 
   USB_30_HUB_DESCRIPTOR   Usb30
 
} m_HubDescriptor
 
USB_DEVICE_STATUS m_DeviceStatus
 
USB_HUB_STATUS_AND_CHANGE m_HubStatus
 
USB_HUB_STATUS_AND_CHANGE m_PreviousHubStatus
 
PUSB_CONFIGURATION_DESCRIPTOR m_ConfigDescriptor
 
USHORT m_ConfigTotalLength
 
USHORT m_SelectedFeature
 
HubChange m_SelectedChange
 
USHORT m_InterruptMaxPacket
 
USBD_CONFIGURATION_HANDLE m_ConfigurationHandle
 
USHORT m_ResetCount
 
USHORT m_DescriptorRetryCount
 
ULONG m_RecoveryCount
 
ULONG m_LifetimeRecoveryCount
 
LARGE_INTEGER m_FirstRecoveryTime
 
ULONG m_LastResetPortStatus
 
UNICODE_STRING m_SymbolicLinkName
 
ULONG m_VerifierFlags
 
WDFWMIINSTANCE m_WmiInstance
 
ULONG m_FwUpdateProtocol
 
ULONG m_DromHeader [4]
 
PULONG m_DromBuffer
 
PULONG m_DromPool
 
ULONG m_DromLength
 
ULONG m_DromMailbox
 
HubRouterIdentity m_RouterIdentity
 
WDFSTRING m_Usb4HostName
 
BOOLEAN m_HasUsb4Ports
 
BOOLEAN m_TunneledDevicesSkipU2
 
WDFCOLLECTION m_Usb4Hosts
 
WDFWAITLOCK m_Usb4HostsLock
 
PVOID m_Usb4Notification
 

Static Public Attributes

static EVT_WDF_DRIVER_DEVICE_ADD EvtDeviceAdd
 

Private Member Functions

 _IRQL_requires_ (PASSIVE_LEVEL) NTSTATUS Initialize(_In_ WDFDEVICE Device)
 
 _IRQL_requires_ (PASSIVE_LEVEL) NTSTATUS QueryCapabilities()
 
 _IRQL_requires_ (PASSIVE_LEVEL) NTSTATUS QueryInterfaces()
 
 _IRQL_requires_ (PASSIVE_LEVEL) VOID ProbeParentCapabilities()
 
 _IRQL_requires_ (PASSIVE_LEVEL) VOID ConfigureIdle()
 
 _IRQL_requires_ (PASSIVE_LEVEL) NTSTATUS CreateQueue()
 
 _IRQL_requires_ (PASSIVE_LEVEL) NTSTATUS InitializeMachine()
 
 _IRQL_requires_ (PASSIVE_LEVEL) NTSTATUS AssignIdleSettings(_In_ WDF_POWER_POLICY_IDLE_TIMEOUT_TYPE TimeoutType)
 
VOID PostToAllPorts (_In_ PortEvent Event)
 
VOID FinishDeviceFanOut ()
 

Static Private Member Functions

static VOID NTAPI TimerFired (_In_ PVOID Context)
 

Static Private Attributes

static EVT_WDF_DEVICE_PREPARE_HARDWARE EvtPrepareHardware
 
static EVT_WDF_DEVICE_RELEASE_HARDWARE EvtReleaseHardware
 
static EVT_WDF_DEVICE_D0_ENTRY EvtD0Entry
 
static EVT_WDF_DEVICE_D0_EXIT EvtD0Exit
 
static EVT_WDF_DEVICE_SURPRISE_REMOVAL EvtSurpriseRemoval
 
static EVT_WDF_DEVICE_USAGE_NOTIFICATION EvtUsageNotification
 
static EVT_WDF_DEVICE_ARM_WAKE_FROM_S0 EvtArmWakeFromS0
 
static EVT_WDF_DEVICE_DISARM_WAKE_FROM_S0 EvtDisarmWakeFromS0
 
static EVT_WDF_DEVICE_ARM_WAKE_FROM_SX EvtArmWakeFromSx
 
static EVT_WDF_DEVICE_DISARM_WAKE_FROM_SX EvtDisarmWakeFromSx
 
static EVT_WDF_OBJECT_CONTEXT_CLEANUP EvtCleanup
 
static EVT_WDF_OBJECT_CONTEXT_DESTROY EvtDestroy
 
static EVT_WDFDEVICE_WDM_IRP_PREPROCESS EvtShutdown
 
static POWER_SETTING_CALLBACK PowerSettingChanged
 
static UCXHUB_WORKITEM_ROUTINE MachineWorkItem
 

Friends

class HubMachine
 

Detailed Description

Definition at line 131 of file fdo.h.

Member Function Documentation

◆ _IRQL_requires_() [1/11]

HubFdo::_IRQL_requires_ ( PASSIVE_LEVEL  )

◆ _IRQL_requires_() [2/11]

HubFdo::_IRQL_requires_ ( PASSIVE_LEVEL  )
private

◆ _IRQL_requires_() [3/11]

HubFdo::_IRQL_requires_ ( PASSIVE_LEVEL  )
private

◆ _IRQL_requires_() [4/11]

HubFdo::_IRQL_requires_ ( PASSIVE_LEVEL  )
private

◆ _IRQL_requires_() [5/11]

HubFdo::_IRQL_requires_ ( PASSIVE_LEVEL  )
private

◆ _IRQL_requires_() [6/11]

HubFdo::_IRQL_requires_ ( PASSIVE_LEVEL  )

Posts a PnP or power event and waits until the machine answers it.

◆ _IRQL_requires_() [7/11]

HubFdo::_IRQL_requires_ ( PASSIVE_LEVEL  )
private

◆ _IRQL_requires_() [8/11]

HubFdo::_IRQL_requires_ ( PASSIVE_LEVEL  )
private

◆ _IRQL_requires_() [9/11]

HubFdo::_IRQL_requires_ ( PASSIVE_LEVEL  )
private

◆ _IRQL_requires_() [10/11]

HubFdo::_IRQL_requires_ ( PASSIVE_LEVEL  )

◆ _IRQL_requires_() [11/11]

HubFdo::_IRQL_requires_ ( PASSIVE_LEVEL  )
private

◆ AcquirePowerReference()

VOID HubFdo::AcquirePowerReference ( )

Definition at line 105 of file fdo.cpp.

106{
109
110 NT_ASSERT(!HasFlag(HubFlag::PowerReferencePending));
111
115
116 if (NT_SUCCESS(Status))
117 SetFlag(HubFlag::PowerReferencePending);
118 else
119 DPRINT1("Hub %p power reference failed 0x%lx\n", m_Device, Status);
120}
LONG NTSTATUS
Definition: precomp.h:26
#define DPRINT1
Definition: precomp.h:8
WDFDEVICE m_Device
Definition: fdo.h:349
BOOLEAN HasFlag(_In_ HubFlag Flag) const
Definition: fdo.h:153
#define FALSE
Definition: types.h:117
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:33
UCHAR KIRQL
Definition: env_spec_w32.h:591
#define KeRaiseIrql(irql, oldIrql)
Definition: env_spec_w32.h:597
#define KeLowerIrql(oldIrql)
Definition: env_spec_w32.h:602
#define DISPATCH_LEVEL
Definition: env_spec_w32.h:696
#define SetFlag(_F, _SF)
Definition: ext2fs.h:187
Status
Definition: gdiplustypes.h:24
#define WdfDeviceStopIdle(Device, WaitForD0)
Definition: wdfdevice.h:1977
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
Definition: kefuncs.h:778
#define NT_ASSERT
Definition: rtlfuncs.h:3334

Referenced by HubMachine::AcquirePowerReference().

◆ AllocateWorkItem()

PUCXHUB_WORKITEM HubFdo::AllocateWorkItem ( )

Definition at line 46 of file fdo.cpp.

47{
49 WdfDeviceWdmGetDeviceObject(m_Device),
51}
UCXHUB_STACK_INTERFACE m_Stack
Definition: fdo.h:356
UCXUSBDEVICE UsbDevice() const
Definition: fdo.h:180
#define UCXHUB_WORKITEM_FLAG_NEEDS_FLUSH
Definition: hubucx.h:212
PFN_UCXHUB_WORKITEM_ALLOCATE WorkItemAllocate
Definition: hubucx.h:446

Referenced by _IRQL_requires_(), and HubChild::Create().

◆ AllowHubReset()

VOID HubFdo::AllowHubReset ( )

Definition at line 444 of file fanout.cpp.

445{
448}
HubMux m_Mux
Definition: fdo.h:407
#define TRUE
Definition: types.h:120
BOOLEAN HubResetEnabled
Definition: fdo.h:77
KSPIN_LOCK Lock
Definition: fdo.h:59

Referenced by HubMachine::AllowHubReset().

◆ ClearFlag()

VOID HubFdo::ClearFlag ( _In_ HubFlag  Flag)
inline

Definition at line 167 of file fdo.h.

169 {
171 }
volatile LONG m_Flags
Definition: fdo.h:352
#define InterlockedAnd
Definition: interlocked.h:77
long LONG
Definition: pedump.c:60
Definition: xml2sdb.h:103

Referenced by _IRQL_requires_().

◆ ConfirmStopWhileSuspended()

VOID HubFdo::ConfirmStopWhileSuspended ( _In_ HubChild *  Child)

Definition at line 821 of file fanout.cpp.

823{
824 BOOLEAN Completed;
825
826 {
828
829 Child->m_MuxFlags &= ~(ULONG)ChildMuxFlag::PnpOperationPending;
830 Child->m_MuxFlags |= (ULONG)ChildMuxFlag::Stopped;
832 }
833
834 if (Completed)
836}
unsigned char BOOLEAN
Definition: actypes.h:127
#define InterlockedDecrement
Definition: armddk.h:52
VOID FinishDeviceFanOut()
Definition: fanout.cpp:609
volatile LONG OutstandingPnpOperations
Definition: fdo.h:62
uint32_t ULONG
Definition: typedefs.h:59
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFDEVICE Child
Definition: wdffdo.h:536

Referenced by DeviceMachine::ConfirmStopWhileSuspended().

◆ DereferenceDevicePower()

VOID HubFdo::DereferenceDevicePower ( _In_ HubChild *  Child)

Definition at line 802 of file fanout.cpp.

804{
805 BOOLEAN Completed;
806
807 {
809
810 Child->m_MuxFlags &= ~((ULONG)ChildMuxFlag::PnpOperationPending | (ULONG)ChildMuxFlag::PowerReference);
811 Child->m_MuxFlags |= (ULONG)ChildMuxFlag::Stopped;
814 }
815
816 if (Completed)
818}
LONG DevicePowerReferences
Definition: fdo.h:66

Referenced by DeviceMachine::DereferenceDevicePower().

◆ Device()

WDFDEVICE HubFdo::Device ( ) const
inline

Definition at line 186 of file fdo.h.

187 {
188 return m_Device;
189 }

◆ DropHubResetReference()

VOID HubFdo::DropHubResetReference ( _In_ HubPort *  Port)

Definition at line 563 of file fanout.cpp.

565{
566 Port->ClearMuxFlag(PortMuxFlag::ResetPending);
567
569 Post(HubEvent::PortsResetReleased);
570}
VOID Post(_In_ HubEvent Event)
Definition: fdo.h:194
CPPORT Port[4]
Definition: headless.c:38
volatile LONG OutstandingResetOperations
Definition: fdo.h:63

Referenced by PortMachine::DropHubResetReference().

◆ DropInterruptReference()

VOID HubFdo::DropInterruptReference ( _In_ HubPort *  Port)

Definition at line 499 of file fanout.cpp.

501{
502 BOOLEAN Released = FALSE;
503
504 {
506
507 if (!Port->HasMuxFlag(PortMuxFlag::InterruptReference))
508 DPRINT1("Port %u dropped an interrupt reference it did not hold\n", Port->Number());
509 NT_ASSERT(Port->HasMuxFlag(PortMuxFlag::InterruptReference));
510 Port->ClearMuxFlag(PortMuxFlag::InterruptReference);
511
512 if (m_Mux.InterruptReferences == 0)
513 DPRINT1("Hub %p interrupt references released too many times\n", m_Device);
515 if (m_Mux.InterruptReferences != 0)
517
519 {
521 Released = TRUE;
522 }
523 }
524
525 if (Released)
526 Post(HubEvent::PortsInterruptReleased);
527}
LONG InterruptReferences
Definition: fdo.h:64
BOOLEAN InterruptReleasePending
Definition: fdo.h:75

Referenced by PortMachine::DropInterruptReference().

◆ DropPortPowerReference()

VOID HubFdo::DropPortPowerReference ( _In_ HubPort *  Port)

Definition at line 544 of file fanout.cpp.

546{
547 Port->ClearMuxFlag(PortMuxFlag::PnpOperationPending);
548 Port->ClearMuxFlag(PortMuxFlag::PowerReference);
550
552 Post(HubEvent::PortsReleased);
553
554 /* Taken when a root port answered with an operation still pending */
555 if (Port->HasFlag(PortFlag::PendingHubPowerReference))
556 {
558 Port->ClearFlag(PortFlag::PendingHubPowerReference);
559 }
560}
volatile LONG PortPowerReferences
Definition: fdo.h:65
#define WdfDeviceResumeIdle(Device)
Definition: wdfdevice.h:1983

Referenced by PortMachine::DropPortPowerReference().

◆ EnqueueWorkItem()

VOID HubFdo::EnqueueWorkItem ( _In_ PUCXHUB_WORKITEM  WorkItem,
_In_ PUCXHUB_WORKITEM_ROUTINE  Routine,
_In_ PVOID  Context,
_In_ BOOLEAN  ForwardProgress 
)

Definition at line 54 of file fdo.cpp.

59{
61 Routine,
62 Context,
64}
_In_opt_ PVOID _In_ PUCXHUB_WORKITEM WorkItem
Definition: hubucx.h:227
@ UcxHubWorkItemForwardProgressNotRequired
Definition: hubucx.h:217
@ UcxHubWorkItemDefault
Definition: hubucx.h:216
_In_ PIRP _In_ PIO_COMPLETION_ROUTINE _In_ PVOID Context
Definition: kse.h:81
PFN_UCXHUB_WORKITEM_ENQUEUE WorkItemEnqueue
Definition: hubucx.h:448

Referenced by DeviceMachine::QueuePassiveWork(), HubMachine::QueuePassiveWork(), and PortMachine::QueuePassiveWork().

◆ FindPort()

HubPort * HubFdo::FindPort ( _In_ ULONG  PortNumber)

Definition at line 42 of file fanout.cpp.

44{
47
48 /* The list only changes in CreateChildPorts */
50 {
51 Port = CONTAINING_RECORD(Entry, HubPort, m_HubLink);
52 if (Port->Number() == PortNumber)
53 return Port;
54 }
55
56 return NULL;
57}
PLIST_ENTRY Entry
Definition: devhcd.cpp:1262
#define NULL
Definition: types.h:112
_In_ ULONG PortNumber
Definition: hubucx.h:272
LIST_ENTRY Ports
Definition: fdo.h:69
Definition: typedefs.h:120
struct _LIST_ENTRY * Flink
Definition: typedefs.h:121
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260

Referenced by HubMachine::CheckHubChangeBit(), HubIoGetConnectionAttributes(), HubIoGetConnectionInformation(), HubIoGetConnectionInformationV2(), HubIoGetConnectorProperties(), HubIoGetPortStatus(), HubWmiQueryHubNode(), and HubWmiResetOverCurrent().

◆ FinishDeviceFanOut()

VOID HubFdo::FinishDeviceFanOut ( )
private

Definition at line 609 of file fanout.cpp.

610{
612
613 m_Mux.DeviceFanOut = HubDeviceFanOut::None;
614
615 switch (FanOut)
616 {
617 case HubDeviceFanOut::PowerUp:
618 Post(HubEvent::DevicesAcquired);
619 break;
620
621 case HubDeviceFanOut::PowerDown:
622 Post(HubEvent::DevicesReleased);
623 break;
624
625 case HubDeviceFanOut::StopWhileSuspended:
626 Post(HubEvent::DevicesStoppedAfterSuspend);
627 break;
628
629 default:
630 DPRINT1("Hub %p device fan out ended with none running\n", m_Device);
632 break;
633 }
634}
HubDeviceFanOut DeviceFanOut
Definition: fdo.h:79
HubDeviceFanOut
Definition: fdo.h:49

Referenced by ConfirmStopWhileSuspended(), DereferenceDevicePower(), ReferenceDevicePower(), and UnregisterDevice().

◆ FromContext()

static HubFdo * HubFdo::FromContext ( _In_ UCXHUB_HUB_CONTEXT  Context)
inlinestatic

Definition at line 144 of file fdo.h.

146 {
147 return (HubFdo*)Context;
148 }
Definition: fdo.h:132

Referenced by HubClearTtBuffer().

◆ FromDevice()

HubFdo * HubFdo::FromDevice ( _In_ WDFDEVICE  Device)
static

Definition at line 37 of file fdo.cpp.

39{
40 return HubGetFdoContext(Device);
41}
_Must_inspect_result_ _In_ PUCXHUB_DEVICE_CREATE_INFO _Out_ UCXUSBDEVICE * Device
Definition: hubucx.h:258

Referenced by HubConfigurationComplete(), HubEvtIoDeviceControl(), HubEvtIoInternalDeviceControl(), HubEvtOverCurrentWorkItem(), HubUsb4InterfaceChange(), HubUsb4OpenWorkItem(), HubWmiExecuteMethod(), and HubWmiQueryHubNode().

◆ HasFlag()

◆ InitializeMux()

VOID HubFdo::InitializeMux ( )

Definition at line 33 of file fanout.cpp.

34{
35 RtlZeroMemory(&m_Mux, sizeof(m_Mux));
39}
#define InitializeListHead(ListHead)
Definition: env_spec_w32.h:944
#define KeInitializeSpinLock(sl)
Definition: env_spec_w32.h:604
LIST_ENTRY Devices
Definition: fdo.h:73
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:262

◆ IsHubResetInProgress()

BOOLEAN HubFdo::IsHubResetInProgress ( ) const
inline

Definition at line 333 of file fdo.h.

334 {
335 return m_Mux.HubResetInProgress != 0;
336 }
volatile LONG HubResetInProgress
Definition: fdo.h:82

Referenced by PortMachine::NotifyBootDeviceRemoval().

◆ IsRootHub()

◆ MarkDevicesProgrammingLost()

VOID HubFdo::MarkDevicesProgrammingLost ( )

Definition at line 840 of file fanout.cpp.

841{
843
845
847 CONTAINING_RECORD(Entry, HubChild, m_HubLink)->SetState(ChildState::ReprogrammingPending);
848}

Referenced by HubResetComplete(), and HubMachine::WasResetByParent().

◆ NeedsForwardProgress()

BOOLEAN HubFdo::NeedsForwardProgress ( ) const
inline

◆ PortInterruptRefsReleased()

BOOLEAN HubFdo::PortInterruptRefsReleased ( )

Definition at line 472 of file fanout.cpp.

473{
475 BOOLEAN Released = (m_Mux.InterruptReferences == 0);
476
477 if (!Released)
479
481 return Released;
482}
BOOLEAN FailInterruptAcquire
Definition: fdo.h:76

Referenced by HubMachine::PortInterruptRefsReleased().

◆ Post()

◆ PostToAllPorts()

VOID HubFdo::PostToAllPorts ( _In_ PortEvent  Event)
private

Definition at line 258 of file fanout.cpp.

260{
262
264 CONTAINING_RECORD(Entry, HubPort, m_HubLink)->Post(Event);
265}

Referenced by QueueSurpriseRemovalToPorts().

◆ QueueFakeStatusChangeToPorts()

VOID HubFdo::QueueFakeStatusChangeToPorts ( )

Definition at line 425 of file fanout.cpp.

426{
428 HubPort* Port;
429
430 if (m_Mux.PortCount == 0)
431 DPRINT1("Hub %p status recheck with no ports will not finish\n", m_Device);
432
434
436 {
437 Port = CONTAINING_RECORD(Entry, HubPort, m_HubLink);
438 Port->SetMuxFlag(PortMuxFlag::PortChangePending);
439 Port->Post(PortEvent::StatusChanged);
440 }
441}
volatile LONG OutstandingPortChanges
Definition: fdo.h:61
ULONG PortCount
Definition: fdo.h:70

Referenced by HubMachine::QueueFakeStatusChangeToPorts().

◆ QueuePowerDownToDevices()

VOID HubFdo::QueuePowerDownToDevices ( _In_ DsmEvent  Event,
_In_ HubDeviceFanOut  FanOut 
)

Definition at line 676 of file fanout.cpp.

679{
680 LIST_ENTRY FanOutList;
683 LONG Counted = 0;
684 BOOLEAN Any;
685
686 InitializeListHead(&FanOutList);
687
688 {
690
692
694 {
695 Child = CONTAINING_RECORD(Entry, HubChild, m_HubLink);
696
697 if (FanOut == HubDeviceFanOut::StopWhileSuspended ||
698 (Child->m_MuxFlags & (ULONG)ChildMuxFlag::PowerReference))
699 {
700 Child->m_MuxFlags |= (ULONG)ChildMuxFlag::PnpOperationPending;
701 Counted++;
702 }
703
705 InsertTailList(&FanOutList, &Child->m_FanOutLink);
706 }
707
709 m_Mux.DeviceFanOut = (Counted != 0) ? FanOut : HubDeviceFanOut::None;
710 }
711
712 Any = !IsListEmpty(&FanOutList);
713
714 while (!IsListEmpty(&FanOutList))
715 {
716 Entry = RemoveHeadList(&FanOutList);
718 Child = CONTAINING_RECORD(Entry, HubChild, m_FanOutLink);
719
720 Child->Post(Event);
722 }
723
724 if (!Any || Counted == 0)
725 {
726 Post(FanOut == HubDeviceFanOut::StopWhileSuspended ? HubEvent::DevicesStoppedAfterSuspend
727 : HubEvent::DevicesReleased);
728 }
729}
#define InsertTailList(ListHead, Entry)
#define IsListEmpty(ListHead)
Definition: env_spec_w32.h:954
#define RemoveHeadList(ListHead)
Definition: env_spec_w32.h:964
static const char HubTagPnpPower[]
Definition: fanout.cpp:20
FORCEINLINE VOID NTAPI HubClearListEntry(_Out_ PLIST_ENTRY Entry)
Definition: hubutil.h:149
BOOLEAN FailDeviceRegistration
Definition: fdo.h:78
#define WdfObjectDereferenceWithTag(Handle, Tag)
Definition: wdfobject.h:829
#define WdfObjectReferenceWithTag(Handle, Tag)
Definition: wdfobject.h:806

Referenced by HubMachine::QueueStopAfterSuspendToDevices(), HubMachine::QueueStopToDevices(), and HubMachine::QueueSuspendToDevices().

◆ QueuePowerUpToDevices()

VOID HubFdo::QueuePowerUpToDevices ( _In_ DsmEvent  Event)

Definition at line 733 of file fanout.cpp.

735{
736 LIST_ENTRY FanOutList;
739 LONG Counted = 0;
740
741 InitializeListHead(&FanOutList);
742
743 {
745
747 {
748 Child = CONTAINING_RECORD(Entry, HubChild, m_HubLink);
749 if (!(Child->m_MuxFlags & (ULONG)ChildMuxFlag::Stopped))
750 continue;
751
752 Child->m_MuxFlags &= ~(ULONG)ChildMuxFlag::Stopped;
753 Child->m_MuxFlags |= (ULONG)ChildMuxFlag::PnpOperationPending;
755 InsertTailList(&FanOutList, &Child->m_FanOutLink);
756 Counted++;
757 }
758
760 m_Mux.DeviceFanOut = (Counted != 0) ? HubDeviceFanOut::PowerUp : HubDeviceFanOut::None;
761 }
762
763 if (Counted == 0)
764 {
765 Post(HubEvent::DevicesAcquired);
766 return;
767 }
768
769 while (!IsListEmpty(&FanOutList))
770 {
771 Entry = RemoveHeadList(&FanOutList);
773 Child = CONTAINING_RECORD(Entry, HubChild, m_FanOutLink);
774
775 Child->Post(Event);
777 }
778}

Referenced by HubMachine::QueueResumeInS0ToDevices(), HubMachine::QueueResumeToDevices(), HubMachine::QueueResumeWithResetToDevices(), and HubMachine::QueueStartToDevices().

◆ QueuePowerUpToPorts()

VOID HubFdo::QueuePowerUpToPorts ( _In_ PortEvent  Event)

Definition at line 269 of file fanout.cpp.

271{
273 HubPort* Port;
274
275 {
277
280 }
281
282 if (m_Mux.PortCount == 0)
283 {
284 Post(HubEvent::PortsAcquired);
285 return;
286 }
287
289
291 {
292 Port = CONTAINING_RECORD(Entry, HubPort, m_HubLink);
293 Port->SetMuxFlag(PortMuxFlag::PnpOperationPending);
294 Port->Post(Event);
295 }
296}

Referenced by HubMachine::QueueResumeInS0ToPorts(), HubMachine::QueueResumeToPorts(), HubMachine::QueueResumeWithResetToPorts(), and HubMachine::QueueStartToPorts().

◆ QueueResetToPorts()

VOID HubFdo::QueueResetToPorts ( )

Definition at line 361 of file fanout.cpp.

362{
364 HubPort* Port;
365
366 if (m_Mux.PortCount == 0)
367 DPRINT1("Hub %p reset fan out with no ports will not finish\n", m_Device);
368
371
373 {
374 Port = CONTAINING_RECORD(Entry, HubPort, m_HubLink);
375 Port->SetMuxFlag(PortMuxFlag::ResetPending);
376 Port->Post(PortEvent::HubResetting);
377 }
378}
#define InterlockedExchange
Definition: armddk.h:54

Referenced by HubMachine::QueueResetToPorts().

◆ QueueStatusChangeToPorts()

VOID HubFdo::QueueStatusChangeToPorts ( )

Definition at line 385 of file fanout.cpp.

386{
388 HubPort* Port;
390 LONG Sent = 0;
391
393 if (Expected == 0)
394 {
396 Post(HubEvent::PortsEnableInterrupt);
397 return;
398 }
399
401
403 {
404 Port = CONTAINING_RECORD(Entry, HubPort, m_HubLink);
405 if (Port->Number() >= m_Interrupt.Bitmap.SizeOfBitMap ||
406 !RtlCheckBit(&m_Interrupt.Bitmap, Port->Number()))
407 {
408 continue;
409 }
410
411 Port->SetMuxFlag(PortMuxFlag::PortChangePending);
412 Port->Post(PortEvent::StatusChanged);
413 Sent++;
414 }
415
416 if (Sent < Expected &&
418 {
419 Post(HubEvent::PortsEnableInterrupt);
420 }
421}
BOOLEAN Expected
UINT Sent
Definition: arping.c:39
HubInterruptRequest m_Interrupt
Definition: fdo.h:414
#define RtlNumberOfSetBits
Definition: dbgbitmap.h:343
#define RtlCheckBit
Definition: dbgbitmap.h:349
#define InterlockedExchangeAdd
Definition: interlocked.h:196
RTL_BITMAP Bitmap
Definition: hubreq.h:81
BOOLEAN LastInterruptWasEmpty
Definition: hubreq.h:75
ULONG SizeOfBitMap
Definition: typedefs.h:90

Referenced by HubMachine::QueueStatusChangeToPorts().

◆ QueueStopToPorts()

VOID HubFdo::QueueStopToPorts ( )

Definition at line 300 of file fanout.cpp.

301{
303 HubPort* Port;
304 BOOLEAN NothingToWaitFor;
305
306 if (m_Mux.PortCount == 0)
307 {
308 Post(HubEvent::PortsReleased);
309 return;
310 }
311
313 NothingToWaitFor = (m_Mux.OutstandingPnpOperations == 0);
314
316 {
317 Port = CONTAINING_RECORD(Entry, HubPort, m_HubLink);
318 if (Port->HasMuxFlag(PortMuxFlag::PowerReference))
319 Port->SetMuxFlag(PortMuxFlag::PnpOperationPending);
320 Port->Post(PortEvent::HubStopping);
321 }
322
323 if (NothingToWaitFor)
324 Post(HubEvent::PortsReleased);
325}

Referenced by HubMachine::QueueStopToPorts().

◆ QueueSurpriseRemovalToPorts()

VOID HubFdo::QueueSurpriseRemovalToPorts ( )

Definition at line 351 of file fanout.cpp.

352{
353 PostToAllPorts(PortEvent::HubRemoved);
354
357}
VOID PostToAllPorts(_In_ PortEvent Event)
Definition: fanout.cpp:258

Referenced by HubMachine::QueueSurpriseRemovalToPorts().

◆ QueueSuspendToPorts()

VOID HubFdo::QueueSuspendToPorts ( )

Definition at line 329 of file fanout.cpp.

330{
332 HubPort* Port;
333
334 if (m_Mux.PortCount == 0)
335 {
336 Post(HubEvent::PortsReleased);
337 return;
338 }
339
341
343 {
344 Port = CONTAINING_RECORD(Entry, HubPort, m_HubLink);
345 Port->SetMuxFlag(PortMuxFlag::PnpOperationPending);
346 Port->Post(PortEvent::HubSuspending);
347 }
348}

Referenced by HubMachine::QueueSuspendToPorts().

◆ ReferenceDevicePower()

VOID HubFdo::ReferenceDevicePower ( _In_ HubChild *  Child)

Definition at line 783 of file fanout.cpp.

785{
786 BOOLEAN Completed;
787
788 {
790
791 Child->m_MuxFlags &= ~((ULONG)ChildMuxFlag::PnpOperationPending | (ULONG)ChildMuxFlag::Stopped);
792 Child->m_MuxFlags |= (ULONG)ChildMuxFlag::PowerReference;
795 }
796
797 if (Completed)
799}

Referenced by DeviceMachine::ReferenceDevicePower().

◆ RegisterDevice()

BOOLEAN HubFdo::RegisterDevice ( _In_ HubChild *  Child)

A new device starts out holding a power reference.

Definition at line 586 of file fanout.cpp.

588{
589 {
591
593 {
594 DPRINT("Hub %p refused device %p, hub is going down\n", m_Device, Child);
595 return FALSE;
596 }
597
598 Child->m_MuxFlags |= (ULONG)ChildMuxFlag::PowerReference;
600 InsertTailList(&m_Mux.Devices, &Child->m_HubLink);
601 }
602
604 return TRUE;
605}
static const char HubTagRegistration[]
Definition: fanout.cpp:19
#define DPRINT
Definition: sndvol32.h:73

Referenced by DeviceMachine::RegisterWithHub().

◆ ReleasePowerReference()

VOID HubFdo::ReleasePowerReference ( )

Definition at line 123 of file fdo.cpp.

124{
126
127 if (!HasFlag(HubFlag::PowerReferencePending))
128 return;
129
133
134 ClearFlag(HubFlag::PowerReferencePending);
135}
#define ClearFlag(_F, _SF)
Definition: ext2fs.h:191

Referenced by HubMachine::ReleasePowerReference().

◆ RequestHubReset()

BOOLEAN HubFdo::RequestHubReset ( )

Only the first caller after AllowHubReset gets a reset posted.

Definition at line 452 of file fanout.cpp.

453{
455
456 {
458
461 }
462
463 if (Queue)
464 Post(HubEvent::ResetRequested);
465
466 return Queue;
467}
_Must_inspect_result_ _In_ WDFDEVICE _In_ PIRP _In_ WDFQUEUE Queue
Definition: wdfdevice.h:2231

Referenced by HubIoResetHub(), and PortMachine::RequestHubReset().

◆ ResumeInterruptTransfer()

VOID HubFdo::ResumeInterruptTransfer ( _In_ HubPort *  Port)

Definition at line 573 of file fanout.cpp.

575{
576 Port->ClearMuxFlag(PortMuxFlag::PortChangePending);
577
579 Post(HubEvent::PortsEnableInterrupt);
580}

Referenced by PortMachine::ResumeInterruptTransfer().

◆ SetFlag()

VOID HubFdo::SetFlag ( _In_ HubFlag  Flag)
inline

◆ TakeInterruptReference()

BOOLEAN HubFdo::TakeInterruptReference ( _In_ HubPort *  Port)

Definition at line 485 of file fanout.cpp.

487{
489
491 return FALSE;
492
493 Port->SetMuxFlag(PortMuxFlag::InterruptReference);
495 return TRUE;
496}

Referenced by PortMachine::TakeInterruptReference().

◆ TakePortPowerReference()

VOID HubFdo::TakePortPowerReference ( _In_ HubPort *  Port)

Definition at line 532 of file fanout.cpp.

534{
535 Port->ClearMuxFlag(PortMuxFlag::PnpOperationPending);
536 Port->SetMuxFlag(PortMuxFlag::PowerReference);
538
540 Post(HubEvent::PortsAcquired);
541}
#define InterlockedIncrement
Definition: armddk.h:53

Referenced by PortMachine::TakePortPowerReference().

◆ TimerFired()

VOID NTAPI HubFdo::TimerFired ( _In_ PVOID  Context)
staticprivate

Definition at line 1170 of file fdo.cpp.

1172{
1173 ((HubFdo*)Context)->Post(HubEvent::TimerFired);
1174}

◆ UnregisterDevice()

VOID HubFdo::UnregisterDevice ( _In_ HubChild *  Child)

Definition at line 638 of file fanout.cpp.

640{
641 BOOLEAN Completed = FALSE;
642
643 Child->ClearState(ChildState::ActivityIdSet);
644
645 {
647
648 if (Child->m_MuxFlags & (ULONG)ChildMuxFlag::PowerReference)
649 {
651 Child->m_MuxFlags &= ~(ULONG)ChildMuxFlag::PowerReference;
652 }
653
654 if (Child->m_MuxFlags & (ULONG)ChildMuxFlag::PnpOperationPending)
655 {
656 Child->m_MuxFlags &= ~(ULONG)ChildMuxFlag::PnpOperationPending;
658 Completed = TRUE;
659 }
660
661 RemoveEntryList(&Child->m_HubLink);
662 HubClearListEntry(&Child->m_HubLink);
663 }
664
666
667 if (Completed)
669}
#define RemoveEntryList(Entry)
Definition: env_spec_w32.h:986

Referenced by DeviceMachine::UnregisterFromHub().

◆ UsbDevice()

Friends And Related Function Documentation

◆ HubMachine

friend class HubMachine
friend

Definition at line 543 of file fdo.h.

Member Data Documentation

◆ EvtArmWakeFromS0

NTSTATUS NTAPI HubFdo::EvtArmWakeFromS0
staticprivate

Definition at line 533 of file fdo.h.

◆ EvtArmWakeFromSx

NTSTATUS NTAPI HubFdo::EvtArmWakeFromSx
staticprivate

Definition at line 535 of file fdo.h.

◆ EvtCleanup

VOID NTAPI HubFdo::EvtCleanup
staticprivate

Definition at line 537 of file fdo.h.

◆ EvtD0Entry

NTSTATUS NTAPI HubFdo::EvtD0Entry
staticprivate

Definition at line 529 of file fdo.h.

◆ EvtD0Exit

NTSTATUS NTAPI HubFdo::EvtD0Exit
staticprivate

Definition at line 530 of file fdo.h.

◆ EvtDestroy

VOID NTAPI HubFdo::EvtDestroy
staticprivate

Definition at line 538 of file fdo.h.

◆ EvtDeviceAdd

NTSTATUS NTAPI HubFdo::EvtDeviceAdd
static

Definition at line 135 of file fdo.h.

◆ EvtDisarmWakeFromS0

VOID NTAPI HubFdo::EvtDisarmWakeFromS0
staticprivate

Definition at line 534 of file fdo.h.

◆ EvtDisarmWakeFromSx

VOID NTAPI HubFdo::EvtDisarmWakeFromSx
staticprivate

Definition at line 536 of file fdo.h.

◆ EvtPrepareHardware

NTSTATUS NTAPI HubFdo::EvtPrepareHardware
staticprivate

Definition at line 527 of file fdo.h.

◆ EvtReleaseHardware

NTSTATUS NTAPI HubFdo::EvtReleaseHardware
staticprivate

Definition at line 528 of file fdo.h.

◆ EvtShutdown

NTSTATUS NTAPI HubFdo::EvtShutdown
staticprivate

Definition at line 539 of file fdo.h.

◆ EvtSurpriseRemoval

VOID NTAPI HubFdo::EvtSurpriseRemoval
staticprivate

Definition at line 531 of file fdo.h.

◆ EvtUsageNotification

VOID NTAPI HubFdo::EvtUsageNotification
staticprivate

Definition at line 532 of file fdo.h.

◆ m_Capabilities

DEVICE_CAPABILITIES HubFdo::m_Capabilities

Definition at line 359 of file fdo.h.

◆ m_ConfigDescriptor

◆ m_ConfigTotalLength

USHORT HubFdo::m_ConfigTotalLength

◆ m_ConfigurationHandle

USBD_CONFIGURATION_HANDLE HubFdo::m_ConfigurationHandle

Definition at line 430 of file fdo.h.

Referenced by HubConfigurationComplete().

◆ m_Control

◆ m_ControllerInfo

UCXHUB_CONTROLLER_INFO_V2 HubFdo::m_ControllerInfo

Definition at line 371 of file fdo.h.

Referenced by HubMachine::QueryControllerInfo(), and HubMachine::QueryErrataFlags().

◆ m_DescriptorRetryCount

USHORT HubFdo::m_DescriptorRetryCount

◆ m_Device

◆ m_DeviceStatus

USB_DEVICE_STATUS HubFdo::m_DeviceStatus

Definition at line 422 of file fdo.h.

Referenced by HubMachine::GetStandardStatus(), and HubMachine::ParsePowerStatus().

◆ m_DromBuffer

◆ m_DromHeader

ULONG HubFdo::m_DromHeader[4]

Definition at line 456 of file fdo.h.

Referenced by HubMachine::DromDataLength(), and HubMachine::UseDromHeaderBuffer().

◆ m_DromLength

ULONG HubFdo::m_DromLength

◆ m_DromMailbox

ULONG HubFdo::m_DromMailbox

◆ m_DromPool

PULONG HubFdo::m_DromPool

◆ m_FailureMessageId

◆ m_First20Port

USHORT HubFdo::m_First20Port

Definition at line 380 of file fdo.h.

Referenced by _IRQL_requires_().

◆ m_First30Port

USHORT HubFdo::m_First30Port

Definition at line 382 of file fdo.h.

Referenced by _IRQL_requires_().

◆ m_FirstRecoveryTime

LARGE_INTEGER HubFdo::m_FirstRecoveryTime

Definition at line 437 of file fdo.h.

Referenced by HubMachine::RecoveryLimitReached().

◆ m_Flags

volatile LONG HubFdo::m_Flags

Definition at line 352 of file fdo.h.

Referenced by _IRQL_requires_max_(), ClearFlag(), HasFlag(), and SetFlag().

◆ m_FwUpdateProtocol

ULONG HubFdo::m_FwUpdateProtocol

Definition at line 453 of file fdo.h.

Referenced by _IRQL_requires_(), and HubMachine::IsDromReadWanted().

◆ m_HasUsb4Ports

BOOLEAN HubFdo::m_HasUsb4Ports

Definition at line 467 of file fdo.h.

Referenced by if().

◆ 

◆ m_HubListEntry

LIST_ENTRY HubFdo::m_HubListEntry

Definition at line 404 of file fdo.h.

◆ m_HubNumber

ULONG HubFdo::m_HubNumber

Definition at line 351 of file fdo.h.

Referenced by HubConnectorSetRootId(), and HubWmiQueryHubNode().

◆ m_HubStatus

◆ m_IdleTimeout

ULONG HubFdo::m_IdleTimeout

Definition at line 396 of file fdo.h.

◆ m_IdleTimeoutSetting

PVOID HubFdo::m_IdleTimeoutSetting

Definition at line 397 of file fdo.h.

◆ m_Interrupt

◆ m_InterruptMaxPacket

USHORT HubFdo::m_InterruptMaxPacket

◆ m_Last20Port

USHORT HubFdo::m_Last20Port

Definition at line 381 of file fdo.h.

Referenced by _IRQL_requires_().

◆ m_Last30Port

USHORT HubFdo::m_Last30Port

Definition at line 383 of file fdo.h.

Referenced by _IRQL_requires_().

◆ m_LastResetPortStatus

ULONG HubFdo::m_LastResetPortStatus

Definition at line 438 of file fdo.h.

Referenced by HubMachine::LogResetRecovery(), and PortMachine::NextChange().

◆ m_LifetimeRecoveryCount

ULONG HubFdo::m_LifetimeRecoveryCount

Definition at line 436 of file fdo.h.

Referenced by _IRQL_requires_(), and HubMachine::LogResetRecovery().

◆ m_Machine

HubMachine HubFdo::m_Machine

Definition at line 347 of file fdo.h.

Referenced by Post().

◆ m_MaxPortPower

◆ m_Mux

◆ m_NeedsForwardProgress

BOOLEAN HubFdo::m_NeedsForwardProgress

Definition at line 412 of file fdo.h.

Referenced by NeedsForwardProgress(), and HubMachine::QueuePassiveWork().

◆ m_OnHubList

BOOLEAN HubFdo::m_OnHubList

Definition at line 405 of file fdo.h.

◆ m_Parent

◆ m_ParentInfo

◆ m_PipeUrb

struct _URB_PIPE_REQUEST HubFdo::m_PipeUrb

Definition at line 365 of file fdo.h.

Referenced by HubPipeResetComplete(), and HubMachine::ResetStatusChangePipe().

◆ m_PnpEvent

KEVENT HubFdo::m_PnpEvent

Definition at line 388 of file fdo.h.

Referenced by HubMachine::SignalPnpEvent(), and HubMachine::SignalPnpFailure().

◆ m_PnpStatus

NTSTATUS HubFdo::m_PnpStatus

Definition at line 389 of file fdo.h.

Referenced by HubMachine::SignalPnpEvent(), and HubMachine::SignalPnpFailure().

◆ m_PortCount

◆ m_PortStatusRequest

WDFREQUEST HubFdo::m_PortStatusRequest

◆ m_PortStatusTarget

◆ m_PowerState

WDF_POWER_DEVICE_STATE HubFdo::m_PowerState

Definition at line 399 of file fdo.h.

◆ m_PreviousHubStatus

USB_HUB_STATUS_AND_CHANGE HubFdo::m_PreviousHubStatus

Definition at line 424 of file fdo.h.

Referenced by HubMachine::GetHubStatus().

◆ m_RecoveryCount

ULONG HubFdo::m_RecoveryCount

Definition at line 435 of file fdo.h.

Referenced by HubMachine::RecoveryLimitReached().

◆ m_ResetCount

◆ m_ResetFlags

ULONG HubFdo::m_ResetFlags

Definition at line 364 of file fdo.h.

Referenced by HubResetComplete(), and HubMachine::ResetHub().

◆ m_Root20Ports

PROOTHUB_20PORT_INFO* HubFdo::m_Root20Ports

Definition at line 375 of file fdo.h.

Referenced by _IRQL_requires_(), and HubMachine::GetRootHub20Ports().

◆ m_Root30Ports

PROOTHUB_30PORT_INFO_EX* HubFdo::m_Root30Ports

Definition at line 376 of file fdo.h.

Referenced by _IRQL_requires_(), and HubMachine::GetRootHub30Ports().

◆ m_RootHubInfo

◆ m_RootHubTarget

◆ m_RouterIdentity

HubRouterIdentity HubFdo::m_RouterIdentity

Definition at line 461 of file fdo.h.

Referenced by _IRQL_requires_(), and HubMachine::ParseDromIdentity().

◆ m_SelectedChange

HubChange HubFdo::m_SelectedChange

Definition at line 428 of file fdo.h.

Referenced by HubMachine::PendingHubChange(), and HubMachine::SelectHubChange().

◆ m_SelectedFeature

USHORT HubFdo::m_SelectedFeature

Definition at line 427 of file fdo.h.

Referenced by HubMachine::AckHubChange(), and HubMachine::SelectHubChange().

◆ m_SelectiveSuspendSetting

PVOID HubFdo::m_SelectiveSuspendSetting

Definition at line 398 of file fdo.h.

◆ m_SspIsochBurstCount

ULONG HubFdo::m_SspIsochBurstCount

Definition at line 385 of file fdo.h.

Referenced by _IRQL_requires_().

◆ m_Stack

◆ m_StreamsSupported

BOOLEAN HubFdo::m_StreamsSupported

Definition at line 361 of file fdo.h.

◆ m_SymbolicLinkName

UNICODE_STRING HubFdo::m_SymbolicLinkName

Definition at line 441 of file fdo.h.

Referenced by HubWmiHubName().

◆ m_Timer

◆ m_TunneledDevicesSkipU2

BOOLEAN HubFdo::m_TunneledDevicesSkipU2

Definition at line 470 of file fdo.h.

Referenced by if().

◆ m_Usb4HostName

WDFSTRING HubFdo::m_Usb4HostName

Definition at line 464 of file fdo.h.

◆ m_Usb4Hosts

WDFCOLLECTION HubFdo::m_Usb4Hosts

Definition at line 473 of file fdo.h.

Referenced by _IRQL_requires_(), HubUsb4FindHost(), and HubUsb4HostAt().

◆ m_Usb4HostsLock

WDFWAITLOCK HubFdo::m_Usb4HostsLock

◆ m_Usb4Notification

PVOID HubFdo::m_Usb4Notification

Definition at line 477 of file fdo.h.

◆ m_Usbdi

USB_BUS_INTERFACE_USBDI_V3 HubFdo::m_Usbdi

Definition at line 357 of file fdo.h.

Referenced by if().

◆ m_VerifierFlags

ULONG HubFdo::m_VerifierFlags

Definition at line 443 of file fdo.h.

Referenced by HubMachine::QueryErrataFlags().

◆ m_WdmPdo

PDEVICE_OBJECT HubFdo::m_WdmPdo

Definition at line 350 of file fdo.h.

◆ m_WmiInstance

WDFWMIINSTANCE HubFdo::m_WmiInstance

Definition at line 448 of file fdo.h.

Referenced by _IRQL_requires_(), and HubWmiFirePortEvent().

◆ m_WorkItem

PUCXHUB_WORKITEM HubFdo::m_WorkItem

Definition at line 411 of file fdo.h.

Referenced by HubMachine::QueuePassiveWork().

◆ MachineWorkItem

VOID NTAPI HubFdo::MachineWorkItem
staticprivate

Definition at line 541 of file fdo.h.

Referenced by HubMachine::QueuePassiveWork().

◆ PowerSettingChanged

NTSTATUS NTAPI HubFdo::PowerSettingChanged
staticprivate

Definition at line 540 of file fdo.h.

◆ Usb20

◆ Usb30

◆ What

_In_ PCSTR HubFdo::What

Definition at line 205 of file fdo.h.


The documentation for this class was generated from the following files: