ReactOS 0.4.17-dev-1281-g065abb3
HubMachine Class Reference

#include <hubsm.h>

Inheritance diagram for HubMachine:
Collaboration diagram for HubMachine:

Public Member Functions

VOID Initialize (_In_ HubFdo *Hub, _In_ HubKind Kind)
 
HubFdo * Hub () const
 
- Public Member Functions inherited from SmMachine< HubMachine, HubEvent >
VOID SmInitialize (_In_ const State *Initial)
 
BOOLEAN SmPost (_In_ HubEvent Ev)
 
VOID SmContinueOnPassive ()
 
const State * SmCurrent () const
 
ULONG SmDepth () const
 
const State * SmFrame (_In_ ULONG Index) const
 
BOOLEAN SmIsIn (_In_ const State *Ancestor) const
 
BOOLEAN SmIsPaused () const
 
BOOLEAN SmIsWaitingForTimer () const
 
ULONG SmUnexpectedCount () const
 

Static Public Attributes

static const SM_EVENT_INFO EventInfo []
 

Private Types

enum class  Teardown : UCHAR {
  Recover , Fatal , Stop , StopAfterReset ,
  Suspend , ResumeFailed
}
 
enum class  PowerUp : UCHAR {
  Start , PostReset , Resume , ResumeInS0 ,
  ResumeWithReset , ResumeResetFailed
}
 
enum class  DromPhase : UCHAR { Header , Full }
 
enum class  StatusRead : UCHAR { Change , LostChanges , OverCurrent }
 

Private Member Functions

VOID SmReference ()
 
VOID SmDereference ()
 
VOID SmQueuePassive ()
 
SM_RESULT OnAwaitingAddDevice (_In_ HubEvent Event)
 
SM_RESULT OnUnconfigured (_In_ HubEvent Event)
 
SM_RESULT OnQueryingParentInfo (_In_ HubEvent Event)
 
SM_RESULT OnConfiguring (_In_ HubEvent Event)
 
SM_RESULT OnReconfiguring (_In_ HubEvent Event)
 
SM_RESULT OnDromRead (_In_ HubEvent Event)
 
SM_RESULT OnDromReadingFirstStatus (_In_ HubEvent Event)
 
SM_RESULT OnDromWritingMetadata (_In_ HubEvent Event)
 
SM_RESULT OnDromSendingCommand (_In_ HubEvent Event)
 
SM_RESULT OnDromReadingStatus (_In_ HubEvent Event)
 
SM_RESULT OnDromReadingWord (_In_ HubEvent Event)
 
SM_RESULT OnAwaitingD0 (_In_ HubEvent Event)
 
SM_RESULT OnDown (_In_ HubEvent Event)
 
SM_RESULT OnStopped (_In_ HubEvent Event)
 
SM_RESULT OnAwaitingReleaseHardware (_In_ HubEvent Event)
 
SM_RESULT OnAwaitingReleaseAfterFailure (_In_ HubEvent Event)
 
SM_RESULT OnAwaitingStop (_In_ HubEvent Event)
 
SM_RESULT OnSurpriseRemoved (_In_ HubEvent Event)
 
SM_RESULT OnPortsAcquiring (_In_ HubEvent Event)
 
SM_RESULT OnDevicesAcquiring (_In_ HubEvent Event)
 
SM_RESULT OnListening (_In_ HubEvent Event)
 
SM_RESULT OnNotListening (_In_ HubEvent Event)
 
SM_RESULT OnReadingPortStatus (_In_ HubEvent Event)
 
SM_RESULT OnReadingHubStatus (_In_ HubEvent Event)
 
SM_RESULT OnAckingHubChange (_In_ HubEvent Event)
 
SM_RESULT OnAwaitingOverCurrentTimer (_In_ HubEvent Event)
 
SM_RESULT OnResettingPipe (_In_ HubEvent Event)
 
SM_RESULT OnDrainingInterruptRefs (_In_ HubEvent Event)
 
SM_RESULT OnCancelingInterrupt (_In_ HubEvent Event)
 
SM_RESULT OnAwaitingInterruptRefs (_In_ HubEvent Event)
 
SM_RESULT OnAwaitingInterruptEnable (_In_ HubEvent Event)
 
SM_RESULT OnDevicesReleasing (_In_ HubEvent Event)
 
SM_RESULT OnPortsReleasing (_In_ HubEvent Event)
 
SM_RESULT OnPortsResetting (_In_ HubEvent Event)
 
SM_RESULT OnHubResetting (_In_ HubEvent Event)
 
SM_RESULT OnAwaitingResetRetry (_In_ HubEvent Event)
 
SM_RESULT OnReconfiguringAfterReset (_In_ HubEvent Event)
 
SM_RESULT OnResettingOnResume (_In_ HubEvent Event)
 
SM_RESULT OnReconfiguringAfterResume (_In_ HubEvent Event)
 
SM_RESULT OnCheckingPowerLoss (_In_ HubEvent Event)
 
SM_RESULT OnAsleep (_In_ HubEvent Event)
 
SM_RESULT OnSuspended (_In_ HubEvent Event)
 
SM_RESULT OnRecycleSuspended (_In_ HubEvent Event)
 
SM_RESULT OnSuspendedResetPending (_In_ HubEvent Event)
 
SM_RESULT OnAwaitingStopAfterSuspend (_In_ HubEvent Event)
 
SM_RESULT OnReadingHubDescriptor (_In_ HubEvent Event)
 
SM_RESULT OnAwaitingDescriptorRetry (_In_ HubEvent Event)
 
SM_RESULT OnReadingStandardStatus (_In_ HubEvent Event)
 
SM_RESULT OnReadingConfigDescriptor (_In_ HubEvent Event)
 
SM_RESULT OnUpdatingController (_In_ HubEvent Event)
 
SM_RESULT OnSettingConfiguration (_In_ HubEvent Event)
 
SM_RESULT OnFinishingConfiguration (_In_ HubEvent Event)
 
SM_RESULT OnReadingRootHubInfo (_In_ HubEvent Event)
 
SM_RESULT OnReadingRootHub20Ports (_In_ HubEvent Event)
 
SM_RESULT OnReadingRootHub30Ports (_In_ HubEvent Event)
 
SM_RESULT OnProgrammingHubDepth (_In_ HubEvent Event)
 
SM_RESULT EnterQueryingParentInfo ()
 
SM_RESULT EnterConfiguring ()
 
SM_RESULT EnterReconfiguring ()
 
SM_RESULT EnterDromReadingFirstStatus ()
 
SM_RESULT EnterDromWritingMetadata ()
 
SM_RESULT EnterDromSendingCommand ()
 
SM_RESULT EnterDromReadingStatus ()
 
SM_RESULT EnterDromReadingWord ()
 
SM_RESULT EnterQueryingErrata ()
 
SM_RESULT EnterSignalPnp ()
 
SM_RESULT EnterCheckingRecoveryLimit ()
 
SM_RESULT EnterReportingFailure ()
 
SM_RESULT EnterHalted ()
 
SM_RESULT EnterHubResetting ()
 
SM_RESULT EnterLoggingReset ()
 
SM_RESULT EnterReconfiguringAfterReset ()
 
SM_RESULT EnterReconfiguringAfterResume ()
 
SM_RESULT EnterSuspendedResetPending ()
 
SM_RESULT EnterReadingHubDescriptor ()
 
SM_RESULT EnterAwaitingDescriptorRetry ()
 
SM_RESULT EnterReadingStandardStatus ()
 
SM_RESULT EnterReadingConfigDescriptor ()
 
SM_RESULT EnterUpdatingController ()
 
SM_RESULT EnterSettingConfiguration ()
 
SM_RESULT EnterFinishingConfiguration ()
 
SM_RESULT EnterReadingRootHubInfo ()
 
SM_RESULT EnterReadingRootHub20Ports ()
 
SM_RESULT EnterReadingRootHub30Ports ()
 
SM_RESULT EnterProgrammingHubDepth ()
 
SM_RESULT StartHubConfiguration ()
 
SM_RESULT FailStart (_In_ BOOLEAN FirstStart)
 A failed first start returns to Unconfigured, a failed restart to Stopped.
 
SM_RESULT StartDromOrSkip (_In_ const State *Next)
 Reads the router DROM through the vendor mailbox; no failure here fails the start.
 
SM_RESULT CheckDromStatus ()
 
SM_RESULT StartDromWords ()
 The DWORD count is rounded up from the total size, not from the length field.
 
SM_RESULT StoreDromWordAndContinue ()
 
SM_RESULT FinishDrom ()
 
SM_RESULT StartPowerUp (_In_ PowerUp Kind)
 
SM_RESULT ReadStatus (_In_ StatusRead Purpose)
 
SM_RESULT HandleHubChange (_In_ HubChange Change)
 None comes only from the lost change query, Error only from the pending one.
 
SM_RESULT HandleHubStatusFault ()
 
SM_RESULT OverCurrentError ()
 
SM_RESULT SendInterrupt (_In_ BOOLEAN ClearPipeResets)
 
SM_RESULT QuiesceWithInterrupt (_In_ Teardown Reason)
 
SM_RESULT QuiesceWithoutInterrupt (_In_ Teardown Reason)
 
SM_RESULT AfterInterruptQuiet ()
 
SM_RESULT ReadPortStatus (_In_ const State *ReturnTo)
 
SM_RESULT ResumeResetFailed ()
 
SM_RESULT CheckPowerLoss ()
 
SM_RESULT CallHubDepthOr (_In_ PowerUp Kind)
 
VOID ReferenceHub ()
 
VOID DereferenceHub ()
 
VOID QueuePassiveWork ()
 
VOID AcquirePowerReference ()
 
VOID ReleasePowerReference ()
 
VOID SignalPnpEvent ()
 
VOID SignalPnpFailure ()
 
VOID ReportFailureToPnp ()
 
VOID BugcheckBootHub ()
 
VOID LogResetRecovery ()
 
VOID LogResetOnResume ()
 
VOID QueryErrataFlags ()
 
VOID CancelStatusChangeRead ()
 
VOID StartStatusChangeRead ()
 
VOID GetHubStatus ()
 
VOID GetPortStatus ()
 
VOID ReplyPortStatus ()
 
VOID FailPortStatus (_In_ BOOLEAN HardwareError)
 
VOID AckHubChange ()
 
VOID GetHubDescriptor ()
 
VOID GetStandardStatus ()
 
VOID GetConfigDescriptor (_In_ BOOLEAN FullLength)
 
VOID SetHubDepth ()
 
VOID InitializeResetCount ()
 
VOID ClearPipeResetCount ()
 
VOID InitializeDescriptorRetries ()
 
VOID ArmResetRetryTimer ()
 
VOID ArmOverCurrentTimer ()
 
VOID StartDescriptorRetryTimer ()
 
VOID QueueSurpriseRemovalToPorts ()
 
VOID QueueStopToPorts ()
 
VOID QueueResetToPorts ()
 
VOID QueueStartToPorts ()
 
VOID QueueSuspendToPorts ()
 
VOID QueueResumeToPorts ()
 
VOID QueueResumeInS0ToPorts ()
 
VOID QueueResumeWithResetToPorts ()
 
VOID QueueFakeStatusChangeToPorts ()
 
VOID QueueStatusChangeToPorts ()
 
VOID AllowHubReset ()
 
VOID QueueStopToDevices ()
 
VOID QueueStopAfterSuspendToDevices ()
 
VOID QueueSuspendToDevices ()
 
VOID QueueStartToDevices ()
 
VOID QueueResumeToDevices ()
 
VOID QueueResumeInS0ToDevices ()
 
VOID QueueResumeWithResetToDevices ()
 
VOID ResetHub ()
 
VOID ResetStatusChangePipe ()
 
VOID SelectHubConfiguration ()
 
VOID GetParentInfo ()
 
VOID QueryControllerInfo ()
 
VOID GetRootHubInfo ()
 
VOID GetRootHub20Ports ()
 
VOID GetRootHub30Ports ()
 
VOID UpdateControllerHubInfo ()
 
VOID ReadDromRegister (_In_ USHORT Register)
 
VOID WriteDromRegister (_In_ USHORT Register, _In_ ULONG Value)
 
VOID UseDromHeaderBuffer ()
 
VOID ReleaseDromBuffer ()
 
VOID StoreDromWord (_In_ ULONG Index)
 
VOID ParseDromIdentity ()
 Finds the router identity entry of a version 1 DROM, bounds checking each entry.
 
BOOLEAN IsDepthZero ()
 
BOOLEAN IsInBootPath ()
 
BOOLEAN WasResetByParent ()
 
BOOLEAN RecoveryLimitReached ()
 
BOOLEAN ResetLimitReached ()
 
BOOLEAN PipeResetLimitReached ()
 
BOOLEAN DescriptorRetriesExhausted ()
 
BOOLEAN PortInterruptRefsReleased ()
 
BOOLEAN OverCurrentCleared ()
 
BOOLEAN CreateChildPorts ()
 
BOOLEAN IsErrorFatal ()
 
HubCheck CheckHubChangeBit ()
 
HubCheck SelectHubChange ()
 
HubChange PendingHubChange ()
 
HubChange LostHubChange ()
 
BOOLEAN ConfigDescriptorTruncated ()
 
BOOLEAN ParseHubDescriptor ()
 
BOOLEAN ParsePowerStatus ()
 
BOOLEAN CacheConfigDescriptor ()
 
BOOLEAN IsDromReadWanted ()
 
ULONG MailboxValue ()
 
ULONG DromDataLength ()
 
BOOLEAN AllocateDromBuffer (_In_ ULONG Length)
 

Private Attributes

HubFdo * m_Hub
 
HubKind m_Kind
 
Teardown m_Teardown
 
PowerUp m_PowerUp
 
StatusRead m_StatusRead
 
const State * m_PortStatusReturn
 
BOOLEAN m_ReleaseToUnconfigured
 
BOOLEAN m_FullConfigRead
 
ULONGLONG m_DromPollStart
 
ULONG m_DromIndex
 
ULONG m_DromWords
 
DromPhase m_DromPhase
 
const State * m_DromNext
 

Static Private Attributes

static const BOOLEAN SmCompletionsFirst = FALSE
 
static const State AwaitingAddDevice
 
static const State Unconfigured
 
static const State QueryingParentInfo
 
static const State Configuring
 
static const State Reconfiguring
 
static const State DromRead
 
static const State DromReadingFirstStatus
 
static const State DromWritingMetadata
 
static const State DromSendingCommand
 
static const State DromReadingStatus
 
static const State DromReadingWord
 
static const State QueryingErrata
 
static const State AwaitingD0
 
static const State Down
 
static const State Stopped
 
static const State AwaitingReleaseHardware
 
static const State AwaitingReleaseAfterFailure
 
static const State AwaitingStop
 
static const State SurpriseRemoved
 
static const State Deleted
 
static const State PortsAcquiring
 
static const State DevicesAcquiring
 
static const State Listening
 
static const State NotListening
 
static const State ReadingPortStatus
 
static const State ReadingHubStatus
 
static const State AckingHubChange
 
static const State AwaitingOverCurrentTimer
 
static const State ResettingPipe
 
static const State DrainingInterruptRefs
 
static const State CancelingInterrupt
 
static const State AwaitingInterruptRefs
 
static const State AwaitingInterruptEnable
 
static const State DevicesReleasing
 
static const State PortsReleasing
 
static const State PortsResetting
 
static const State CheckingRecoveryLimit
 
static const State ReportingFailure
 
static const State Halted
 
static const State HubResetting
 
static const State LoggingReset
 
static const State AwaitingResetRetry
 
static const State ReconfiguringAfterReset
 
static const State ResettingOnResume
 
static const State ReconfiguringAfterResume
 
static const State CheckingPowerLoss
 
static const State Asleep
 
static const State Suspended
 
static const State RecycleSuspended
 
static const State SuspendedResetPending
 
static const State AwaitingStopAfterSuspend
 
static const State ReadingHubDescriptor
 
static const State AwaitingDescriptorRetry
 
static const State ReadingStandardStatus
 
static const State ReadingConfigDescriptor
 
static const State UpdatingController
 
static const State SettingConfiguration
 
static const State FinishingConfiguration
 
static const State ReadingRootHubInfo
 
static const State ReadingRootHub20Ports
 
static const State ReadingRootHub30Ports
 
static const State ProgrammingHubDepth
 
static const HubEvent ResetDiscards [] = { HubEvent::ResetRequested, HubEvent::Count }
 

Friends

class SmMachine< HubMachine, HubEvent >
 

Additional Inherited Members

- Public Types inherited from SmMachine< HubMachine, HubEvent >
typedef SmState< HubMachine, HubEvent > State
 
- Protected Member Functions inherited from SmMachine< HubMachine, HubEvent >
VOID SmBeginPause ()
 
VOID SmDiscardQueued (_In_ HubEvent Ev)
 
BOOLEAN SmAccepts (_In_ HubEvent Ev)
 
VOID SmReference ()
 
VOID SmDereference ()
 
VOID SmQueuePassive ()
 
VOID SmOnDequeue (_In_ HubEvent Ev)
 
VOID SmStateChanged ()
 
BOOLEAN SmCancelTimer ()
 
- Static Protected Member Functions inherited from SmMachine< HubMachine, HubEvent >
static SM_RESULT SmMakeResult (_In_ SM_RESULT_KIND Kind, _In_ USHORT Ev, _In_opt_ const VOID *Target)
 
static SM_RESULT SmHandled ()
 
static SM_RESULT SmUnhandled ()
 
static SM_RESULT SmTransition (_In_ const State *Target)
 
static SM_RESULT SmPaused ()
 
static SM_RESULT SmCall (_In_ const State *Start)
 
static SM_RESULT SmReturn (_In_ HubEvent Ev)
 
- Static Protected Attributes inherited from SmMachine< HubMachine, HubEvent >
static const BOOLEAN SmCompletionsFirst
 
static const USHORT SmTimerEventId
 

Detailed Description

Definition at line 89 of file hubsm.h.

Member Enumeration Documentation

◆ DromPhase

Which part of the router DROM the mailbox read is fetching

Enumerator
Header 
Full 

Definition at line 131 of file hubsm.h.

◆ PowerUp

Why the port and device references are being taken

Enumerator
Start 
PostReset 
Resume 
ResumeInS0 
ResumeWithReset 
ResumeResetFailed 

Definition at line 120 of file hubsm.h.

◆ StatusRead

What a hub status read is for

Enumerator
Change 
LostChanges 
OverCurrent 

Definition at line 138 of file hubsm.h.

◆ Teardown

Why the hub is being taken down

Enumerator
Recover 
Fatal 
Stop 
StopAfterReset 
Suspend 
ResumeFailed 

Definition at line 109 of file hubsm.h.

Member Function Documentation

◆ AckHubChange()

VOID HubMachine::AckHubChange ( )
private

Definition at line 348 of file hubreq.cpp.

349{
351 DPRINT("Hub %p acking hub change %u\n", m_Hub, m_Hub->m_SelectedFeature);
353}
USHORT m_SelectedFeature
Definition: fdo.h:427
HubControlRequest m_Control
Definition: fdo.h:413
HubFdo * m_Hub
Definition: hubsm.h:574
#define NULL
Definition: types.h:112
#define FALSE
Definition: types.h:117
static VOID NTAPI HubSendControl(_In_ HubFdo *Hub, _In_reads_bytes_opt_(Length) PVOID Buffer, _In_ ULONG Length, _In_ BOOLEAN ShortOk)
Definition: hubreq.cpp:327
#define HUB_REQUEST_CLEAR_FEATURE
Definition: hubreq.h:86
#define DPRINT
Definition: sndvol32.h:73
VOID SetSetup(_In_ UCHAR RequestType, _In_ UCHAR RequestCode, _In_ USHORT Value, _In_ USHORT Index, _In_ USHORT Length)
Definition: hubreq.h:34

Referenced by OnReadingHubStatus().

◆ AcquirePowerReference()

VOID HubMachine::AcquirePowerReference ( )
private

Definition at line 1210 of file fdo.cpp.

1211{
1213}
VOID AcquirePowerReference()
Definition: fdo.cpp:105

Referenced by EnterSuspendedResetPending(), OnAwaitingD0(), OnListening(), OnRecycleSuspended(), and OnSuspended().

◆ AfterInterruptQuiet()

SM_RESULT HubMachine::AfterInterruptQuiet ( )
private

Definition at line 1153 of file hubsm.cpp.

1154{
1155 switch (m_Teardown)
1156 {
1157 case Teardown::Stop:
1160
1161 case Teardown::Suspend:
1164
1165 default:
1168 }
1169}
VOID QueueSuspendToDevices()
Definition: fanout.cpp:938
static const State PortsReleasing
Definition: hubsm.h:182
VOID QueueStopToDevices()
Definition: fanout.cpp:932
static const State DevicesReleasing
Definition: hubsm.h:181
VOID QueueStopToPorts()
Definition: fanout.cpp:896
Teardown m_Teardown
Definition: hubsm.h:576
static SM_RESULT SmTransition(_In_ const State *Target)
Definition: smengine.h:194

Referenced by OnAwaitingInterruptRefs(), OnCancelingInterrupt(), and QuiesceWithoutInterrupt().

◆ AllocateDromBuffer()

BOOLEAN HubMachine::AllocateDromBuffer ( _In_ ULONG  Length)
private

Definition at line 158 of file hubdrom.cpp.

160{
161 ULONG Bytes = ALIGN_UP_BY(Length, sizeof(ULONG));
163
165 if (Buffer == NULL)
166 {
167 DPRINT1("Hub %p no memory for a %lu byte router DROM\n", m_Hub, Length);
168 return FALSE;
169 }
170
174 return TRUE;
175}
#define ALIGN_UP_BY(size, align)
#define DPRINT1
Definition: precomp.h:8
Definition: bufpool.h:45
ULONG m_DromLength
Definition: fdo.h:459
PULONG m_DromPool
Definition: fdo.h:458
PULONG m_DromBuffer
Definition: fdo.h:457
#define TRUE
Definition: types.h:120
#define NonPagedPool
Definition: env_spec_w32.h:307
#define HUB_TAG_HUB
Definition: hubutil.h:12
_In_ UINT Bytes
Definition: mmcopy.h:9
static PVOID ExAllocatePoolZero(ULONG PoolType, SIZE_T NumberOfBytes, ULONG Tag)
Definition: precomp.h:45
_In_ ULONG _In_ ULONG _In_ ULONG Length
Definition: ntddpcm.h:102
uint32_t * PULONG
Definition: typedefs.h:59
uint32_t ULONG
Definition: typedefs.h:59

Referenced by StartDromWords().

◆ AllowHubReset()

VOID HubMachine::AllowHubReset ( )
private

Definition at line 865 of file fanout.cpp.

866{
868}
VOID AllowHubReset()
Definition: fanout.cpp:444

Referenced by StartPowerUp().

◆ ArmOverCurrentTimer()

VOID HubMachine::ArmOverCurrentTimer ( )
private

Definition at line 1324 of file fdo.cpp.

1325{
1327}
HubTimer m_Timer
Definition: fdo.h:410
VOID Start(_In_ ULONG Milliseconds)
Definition: hubutil.h:104
#define HUB_OVERCURRENT_TIME
Definition: fdo.cpp:14

Referenced by HandleHubChange().

◆ ArmResetRetryTimer()

VOID HubMachine::ArmResetRetryTimer ( )
private

Definition at line 1318 of file fdo.cpp.

1319{
1321}
#define HUB_RESET_RETRY_TIME
Definition: fdo.cpp:15

Referenced by EnterLoggingReset(), and OnHubResetting().

◆ BugcheckBootHub()

VOID HubMachine::BugcheckBootHub ( )
private

Definition at line 1253 of file fdo.cpp.

1254{
1255 DPRINT1("Boot path hub %p failed, bugchecking\n", m_Hub->m_Device);
1256
1259 (ULONG_PTR)WdfDeviceWdmGetDeviceObject(m_Hub->m_Device),
1261 0);
1262}
DECLSPEC_NORETURN VOID NTAPI KeBugCheckEx(IN ULONG BugCheckCode, IN ULONG_PTR BugCheckParameter1, IN ULONG_PTR BugCheckParameter2, IN ULONG_PTR BugCheckParameter3, IN ULONG_PTR BugCheckParameter4)
Definition: debug.c:485
WDFDEVICE m_Device
Definition: fdo.h:349
#define HUB_USB3_BOOT_DEVICE_FAILED
Definition: hubdriver.h:158
#define HUB_BUGCHECK_USB3
Definition: hubdriver.h:157
#define HUB_BOOT_DEVICE_IS_HUB
Definition: hubdriver.h:160
uint32_t ULONG_PTR
Definition: typedefs.h:65

Referenced by EnterHalted().

◆ CacheConfigDescriptor()

BOOLEAN HubMachine::CacheConfigDescriptor ( )
private

Definition at line 489 of file hubreq.cpp.

490{
495
496 if (m_Hub->m_Control.Urb.TransferBufferLength < sizeof(*Held) || TotalLength < sizeof(*Held))
497 {
498 DPRINT1("Hub %p configuration descriptor too short, %lu bytes, wTotalLength %u\n",
499 m_Hub, m_Hub->m_Control.Urb.TransferBufferLength, TotalLength);
500 goto Exit;
501 }
502
503 /* The buffer was sized from the first read, so a larger second wTotalLength is rejected */
505 {
507 goto Exit;
508 }
509
510 if (TotalLength < MAXUCHAR)
511 {
513 if (Copy == NULL)
514 {
515 DPRINT1("Hub %p no memory to cache the configuration descriptor\n", m_Hub);
516 goto Exit;
517 }
518
521 }
522
524 goto Exit;
525
527 {
529 goto Exit;
530 }
531
532 Valid = TRUE;
533
534Exit:
535 if (Copy != NULL)
537
539 {
542 }
543
544 return Valid;
545}
unsigned char BOOLEAN
Definition: actypes.h:127
PUSB_CONFIGURATION_DESCRIPTOR m_ConfigDescriptor
Definition: fdo.h:425
USHORT m_ConfigTotalLength
Definition: fdo.h:426
BOOLEAN Valid
Definition: desccheck.cpp:2227
ULONG Copy
Definition: devhcd.cpp:1449
#define ExAllocatePoolWithTag(hernya, size, tag)
Definition: env_spec_w32.h:350
BOOLEAN NTAPI HubValidateHubConfiguration(_In_ HubFdo *Hub, _In_reads_bytes_(Length) PUSB_CONFIGURATION_DESCRIPTOR Descriptor, _In_ ULONG Length)
Definition: hubdescval.cpp:46
VOID NTAPI HubLogConfigTotalLengthMismatch(_In_ HubFdo *Hub)
Definition: hubdescval.cpp:85
#define ExFreePoolWithTag(_P, _T)
Definition: module.h:1109
unsigned short USHORT
Definition: pedump.c:61
static void Exit(void)
Definition: sock.c:1330
struct _URB_CONTROL_TRANSFER_EX Urb
Definition: hubreq.h:21
#define RtlCopyMemory(Destination, Source, Length)
Definition: typedefs.h:263
#define MAXUCHAR
Definition: umtypes.h:117
struct _USB_CONFIGURATION_DESCRIPTOR * PUSB_CONFIGURATION_DESCRIPTOR
_In_ ULONG TotalLength
Definition: usbdlib.h:185

Referenced by OnReadingConfigDescriptor().

◆ CallHubDepthOr()

SM_RESULT HubMachine::CallHubDepthOr ( _In_ PowerUp  Kind)
private

Definition at line 1379 of file hubsm.cpp.

1381{
1382 if (m_Kind == HubKind::Usb30)
1383 return SmCall(&ProgrammingHubDepth);
1384
1385 return StartPowerUp(Kind);
1386}
static const State ProgrammingHubDepth
Definition: hubsm.h:215
SM_RESULT StartPowerUp(_In_ PowerUp Kind)
Definition: hubsm.cpp:766
HubKind m_Kind
Definition: hubsm.h:575
static SM_RESULT SmCall(_In_ const State *Start)
Definition: smengine.h:209

Referenced by EnterReconfiguringAfterReset(), and EnterReconfiguringAfterResume().

◆ CancelStatusChangeRead()

VOID HubMachine::CancelStatusChangeRead ( )
private

Definition at line 757 of file hubreq.cpp.

758{
759 if (!WdfRequestCancelSentRequest(m_Hub->m_Interrupt.Request))
760 DPRINT1("Hub %p status change read not canceled\n", m_Hub);
761}
HubInterruptRequest m_Interrupt
Definition: fdo.h:414
WDFREQUEST Request
Definition: hubreq.h:70

Referenced by OnDrainingInterruptRefs(), and QuiesceWithInterrupt().

◆ CheckDromStatus()

SM_RESULT HubMachine::CheckDromStatus ( )
private

Definition at line 583 of file hubsm.cpp.

584{
585 if (!(MailboxValue() & HubMailboxBusy))
587
590
591 DPRINT1("Hub %p router still busy after 5 s, DROM read stopped at DWORD %lu\n", m_Hub, m_DromIndex);
592 return FinishDrom();
593}
ULONG MailboxValue()
Definition: hubdrom.cpp:120
static const State DromReadingStatus
Definition: hubsm.h:157
ULONG m_DromIndex
Definition: hubsm.h:583
ULONGLONG m_DromPollStart
Definition: hubsm.h:582
static const State DromReadingWord
Definition: hubsm.h:158
SM_RESULT FinishDrom()
Definition: hubsm.cpp:659
static const ULONGLONG HubDromBusyLimit
Definition: hubsm.cpp:34
static const ULONG HubMailboxBusy
Definition: hubsm.cpp:21
#define KeQueryInterruptTime()
Definition: ke.h:37

Referenced by OnDromReadingStatus().

◆ CheckHubChangeBit()

HubCheck HubMachine::CheckHubChangeBit ( )
private

Definition at line 765 of file hubreq.cpp.

766{
768 HubCheck Result = (Interrupt->BitmapBuffer[0] & 1) ? HubCheck::Yes : HubCheck::No;
769 ULONG Bit;
770
771 for (Bit = 1; Bit < (ULONG)Interrupt->BitmapBytes * 8; Bit++)
772 {
773 if (!(Interrupt->BitmapBuffer[Bit / 8] & (1 << (Bit % 8))))
774 continue;
775
776 if (m_Hub->FindPort(Bit) == NULL)
777 {
778 DPRINT1("Hub %p reports a change on missing port %lu\n", m_Hub, Bit);
779 return HubCheck::Error;
780 }
781 }
782
783 return Result;
784}
HubPort * FindPort(_In_ ULONG PortNumber)
Definition: fanout.cpp:42
HubCheck
Definition: hubsm.h:72
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_INTERRUPT_CONFIG _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFINTERRUPT * Interrupt
Definition: wdfinterrupt.h:379
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
Definition: wsk.h:409

Referenced by OnListening().

◆ CheckPowerLoss()

SM_RESULT HubMachine::CheckPowerLoss ( )
private

Definition at line 1464 of file hubsm.cpp.

1465{
1466 if (m_Kind == HubKind::Root)
1468
1471}
VOID GetHubDescriptor()
Definition: hubreq.cpp:357
static const State CheckingPowerLoss
Definition: hubsm.h:193

Referenced by OnSuspended().

◆ ClearPipeResetCount()

VOID HubMachine::ClearPipeResetCount ( )
private

Definition at line 1344 of file fdo.cpp.

1345{
1346 m_Hub->m_ResetCount = 0;
1347}
USHORT m_ResetCount
Definition: fdo.h:433

Referenced by SendInterrupt().

◆ ConfigDescriptorTruncated()

BOOLEAN HubMachine::ConfigDescriptorTruncated ( )
private

Definition at line 478 of file hubreq.cpp.

Referenced by OnReadingConfigDescriptor().

◆ CreateChildPorts()

BOOLEAN HubMachine::CreateChildPorts ( )
private

Definition at line 853 of file fanout.cpp.

854{
855 return m_Hub->CreateChildPorts();
856}

Referenced by EnterQueryingErrata().

◆ DereferenceHub()

VOID HubMachine::DereferenceHub ( )
private

Definition at line 1196 of file fdo.cpp.

1197{
1199}
#define WdfObjectDereference(Handle)
Definition: wdfobject.h:826

Referenced by SmDereference().

◆ DescriptorRetriesExhausted()

BOOLEAN HubMachine::DescriptorRetriesExhausted ( )
private

Definition at line 1380 of file fdo.cpp.

1381{
1383 return FALSE;
1384
1385 DPRINT1("Hub %p hub descriptor retries exhausted\n", m_Hub->m_Device);
1386 return TRUE;
1387}
USHORT m_DescriptorRetryCount
Definition: fdo.h:434
#define HUB_RESET_LIMIT
Definition: fdo.cpp:22

Referenced by OnReadingHubDescriptor().

◆ DromDataLength()

ULONG HubMachine::DromDataLength ( )
private

Definition at line 126 of file hubdrom.cpp.

127{
128 const UCHAR* Header = (const UCHAR*)m_Hub->m_DromHeader;
129
131}
Definition: Header.h:9
ULONG m_DromHeader[4]
Definition: fdo.h:456
#define DROM_LENGTH_OFFSET
Definition: hubdrom.cpp:25
static USHORT NTAPI HubDromReadUshort(_In_reads_bytes_(2) const UCHAR *Bytes)
Definition: hubdrom.cpp:106
#define DROM_LENGTH_MASK
Definition: hubdrom.cpp:26
unsigned char UCHAR
Definition: typedefs.h:53

Referenced by StartDromWords().

◆ EnterAwaitingDescriptorRetry()

SM_RESULT HubMachine::EnterAwaitingDescriptorRetry ( )
private

Definition at line 1617 of file hubsm.cpp.

1618{
1620 return SmHandled();
1621}
VOID StartDescriptorRetryTimer()
Definition: fdo.cpp:1330
static SM_RESULT SmHandled()
Definition: smengine.h:182

◆ EnterCheckingRecoveryLimit()

SM_RESULT HubMachine::EnterCheckingRecoveryLimit ( )
private

Definition at line 1287 of file hubsm.cpp.

1288{
1289 if (!RecoveryLimitReached())
1290 {
1292 return SmTransition(&HubResetting);
1293 }
1294
1295 if (IsInBootPath())
1296 return SmTransition(&Halted);
1297
1299}
VOID InitializeResetCount()
Definition: fdo.cpp:1338
BOOLEAN RecoveryLimitReached()
Definition: fdo.cpp:1391
static const State HubResetting
Definition: hubsm.h:187
static const State Halted
Definition: hubsm.h:186
BOOLEAN IsInBootPath()
Definition: fdo.cpp:1304
static const State ReportingFailure
Definition: hubsm.h:185

◆ EnterConfiguring()

SM_RESULT HubMachine::EnterConfiguring ( )
private

Definition at line 351 of file hubsm.cpp.

352{
354
355 if (m_Kind == HubKind::Root)
356 return SmCall(&ReadingRootHubInfo);
357
358 return StartHubConfiguration();
359}
VOID QueryControllerInfo()
Definition: ucxlink.cpp:150
static const State ReadingRootHubInfo
Definition: hubsm.h:210
SM_RESULT StartHubConfiguration()
Definition: hubsm.cpp:406

◆ EnterDromReadingFirstStatus()

SM_RESULT HubMachine::EnterDromReadingFirstStatus ( )
private

Definition at line 501 of file hubsm.cpp.

502{
504 return SmHandled();
505}
VOID ReadDromRegister(_In_ USHORT Register)
Definition: hubdrom.cpp:134
static const USHORT HubMailboxOpcode
Definition: hubsm.cpp:19

◆ EnterDromReadingStatus()

SM_RESULT HubMachine::EnterDromReadingStatus ( )
private

Definition at line 565 of file hubsm.cpp.

566{
568 return SmHandled();
569}

◆ EnterDromReadingWord()

SM_RESULT HubMachine::EnterDromReadingWord ( )
private

Definition at line 622 of file hubsm.cpp.

623{
625 return SmHandled();
626}
static const ULONG HubMailboxDataWords
Definition: hubsm.cpp:20

◆ EnterDromSendingCommand()

SM_RESULT HubMachine::EnterDromSendingCommand ( )
private

Definition at line 547 of file hubsm.cpp.

548{
550 return SmHandled();
551}
VOID WriteDromRegister(_In_ USHORT Register, _In_ ULONG Value)
Definition: hubdrom.cpp:141
static const ULONG HubDromReadCommand
Definition: hubsm.cpp:24

◆ EnterDromWritingMetadata()

SM_RESULT HubMachine::EnterDromWritingMetadata ( )
private

Definition at line 527 of file hubsm.cpp.

528{
530 ULONG Metadata = ((m_DromIndex & 0x1FFF) << 2) | ((Count & 0x1F) << 15);
531
533 return SmHandled();
534}
ULONG m_DromWords
Definition: hubsm.h:584
static const USHORT HubMailboxMetadata
Definition: hubsm.cpp:18
#define min(a, b)
Definition: monoChain.cc:55

◆ EnterFinishingConfiguration()

SM_RESULT HubMachine::EnterFinishingConfiguration ( )
private

Definition at line 1747 of file hubsm.cpp.

1748{
1749 return SmCall(&ProgrammingHubDepth);
1750}

◆ EnterHalted()

SM_RESULT HubMachine::EnterHalted ( )
private

Definition at line 1309 of file hubsm.cpp.

1310{
1312 return SmHandled();
1313}
VOID BugcheckBootHub()
Definition: fdo.cpp:1253

◆ EnterHubResetting()

SM_RESULT HubMachine::EnterHubResetting ( )
private

Definition at line 1318 of file hubsm.cpp.

1319{
1320 ResetHub();
1321 return SmHandled();
1322}
VOID ResetHub()
Definition: upstream.cpp:301

◆ EnterLoggingReset()

SM_RESULT HubMachine::EnterLoggingReset ( )
private

Definition at line 1346 of file hubsm.cpp.

1347{
1351}
VOID ArmResetRetryTimer()
Definition: fdo.cpp:1318
VOID LogResetRecovery()
Definition: fdo.cpp:1266
static const State AwaitingResetRetry
Definition: hubsm.h:189

◆ EnterProgrammingHubDepth()

SM_RESULT HubMachine::EnterProgrammingHubDepth ( )
private

Definition at line 1840 of file hubsm.cpp.

1841{
1842 SetHubDepth();
1843 return SmHandled();
1844}
VOID SetHubDepth()
Definition: hubreq.cpp:408

◆ EnterQueryingErrata()

SM_RESULT HubMachine::EnterQueryingErrata ( )
private

Definition at line 426 of file hubsm.cpp.

427{
429
430 if (!CreateChildPorts())
431 return FailStart(TRUE);
432
433 return SmTransition(&AwaitingD0);
434}
VOID QueryErrataFlags()
SM_RESULT FailStart(_In_ BOOLEAN FirstStart)
A failed first start returns to Unconfigured, a failed restart to Stopped.
Definition: hubsm.cpp:417
BOOLEAN CreateChildPorts()
Definition: fanout.cpp:853
static const State AwaitingD0
Definition: hubsm.h:160

◆ EnterQueryingParentInfo()

SM_RESULT HubMachine::EnterQueryingParentInfo ( )
private

Definition at line 327 of file hubsm.cpp.

328{
330 return SmHandled();
331}
VOID GetParentInfo()
Definition: upstream.cpp:378

◆ EnterReadingConfigDescriptor()

SM_RESULT HubMachine::EnterReadingConfigDescriptor ( )
private

Definition at line 1662 of file hubsm.cpp.

1663{
1665 return SmHandled();
1666}
BOOLEAN m_FullConfigRead
Definition: hubsm.h:581
VOID GetConfigDescriptor(_In_ BOOLEAN FullLength)
Definition: hubreq.cpp:417

◆ EnterReadingHubDescriptor()

SM_RESULT HubMachine::EnterReadingHubDescriptor ( )
private

Definition at line 1587 of file hubsm.cpp.

1588{
1590 return SmHandled();
1591}

◆ EnterReadingRootHub20Ports()

SM_RESULT HubMachine::EnterReadingRootHub20Ports ( )
private

Definition at line 1790 of file hubsm.cpp.

1791{
1793 return SmHandled();
1794}
VOID GetRootHub20Ports()
Definition: ucxlink.cpp:212

◆ EnterReadingRootHub30Ports()

SM_RESULT HubMachine::EnterReadingRootHub30Ports ( )
private

Definition at line 1814 of file hubsm.cpp.

1815{
1817 return SmHandled();
1818}
VOID GetRootHub30Ports()
Definition: ucxlink.cpp:296

◆ EnterReadingRootHubInfo()

SM_RESULT HubMachine::EnterReadingRootHubInfo ( )
private

Definition at line 1765 of file hubsm.cpp.

1766{
1769 return SmHandled();
1770}
VOID GetRootHubInfo()
Definition: ucxlink.cpp:189

◆ EnterReadingStandardStatus()

SM_RESULT HubMachine::EnterReadingStandardStatus ( )
private

Definition at line 1634 of file hubsm.cpp.

1635{
1637 return SmHandled();
1638}
VOID GetStandardStatus()
Definition: hubreq.cpp:388

◆ EnterReconfiguring()

SM_RESULT HubMachine::EnterReconfiguring ( )
private

Definition at line 379 of file hubsm.cpp.

380{
381 if (m_Kind == HubKind::Root)
382 return SmTransition(&AwaitingD0);
383
384 return StartHubConfiguration();
385}

◆ EnterReconfiguringAfterReset()

SM_RESULT HubMachine::EnterReconfiguringAfterReset ( )
private

Definition at line 1389 of file hubsm.cpp.

1390{
1393}
SM_RESULT CallHubDepthOr(_In_ PowerUp Kind)
Definition: hubsm.cpp:1379

◆ EnterReconfiguringAfterResume()

SM_RESULT HubMachine::EnterReconfiguringAfterResume ( )
private

Definition at line 1440 of file hubsm.cpp.

1441{
1443}

◆ EnterReportingFailure()

SM_RESULT HubMachine::EnterReportingFailure ( )
private

Definition at line 1302 of file hubsm.cpp.

1303{
1305 return SmTransition(&AwaitingStop);
1306}
static const State AwaitingStop
Definition: hubsm.h:165
VOID ReportFailureToPnp()
Definition: fdo.cpp:1241

◆ EnterSettingConfiguration()

SM_RESULT HubMachine::EnterSettingConfiguration ( )
private

Definition at line 1720 of file hubsm.cpp.

1721{
1723 return SmHandled();
1724}
VOID SelectHubConfiguration()
Definition: upstream.cpp:128

◆ EnterSignalPnp()

SM_RESULT HubMachine::EnterSignalPnp ( )
private

Definition at line 437 of file hubsm.cpp.

438{
440 return SmHandled();
441}
VOID SignalPnpEvent()
Definition: fdo.cpp:1222

◆ EnterSuspendedResetPending()

SM_RESULT HubMachine::EnterSuspendedResetPending ( )
private

Definition at line 1556 of file hubsm.cpp.

1557{
1559 return SmHandled();
1560}
VOID AcquirePowerReference()
Definition: fdo.cpp:1210

◆ EnterUpdatingController()

SM_RESULT HubMachine::EnterUpdatingController ( )
private

Definition at line 1696 of file hubsm.cpp.

1697{
1699 return SmHandled();
1700}
VOID UpdateControllerHubInfo()
Definition: ucxlink.cpp:421

◆ FailPortStatus()

VOID HubMachine::FailPortStatus ( _In_ BOOLEAN  HardwareError)
private

Definition at line 884 of file hubreq.cpp.

886{
889
890 if (Params.Parameters.DeviceIoControl.IoControlCode == IOCTL_INTERNAL_USB_GET_PORT_STATUS)
891 *(PULONG)Params.Parameters.Others.Arg1 = 0;
892
893 DPRINT1("Hub %p port %u status request failed, hardware error %u\n",
894 m_Hub, m_Hub->m_PortStatusTarget->Number(), HardwareError);
895
896 WdfRequestComplete(Request, HardwareError ? STATUS_ADAPTER_HARDWARE_ERROR : STATUS_NO_SUCH_DEVICE);
897}
HubPort * m_PortStatusTarget
Definition: fdo.h:393
USHORT Number() const
Definition: hubport.h:213
static WDFREQUEST NTAPI HubTakePortStatusRequest(_In_ HubFdo *Hub, _Out_ PWDF_REQUEST_PARAMETERS Params)
Definition: hubreq.cpp:803
#define STATUS_ADAPTER_HARDWARE_ERROR
Definition: ntstatus.h:524
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFREQUEST Request
#define STATUS_NO_SUCH_DEVICE
Definition: udferr_usr.h:136
#define IOCTL_INTERNAL_USB_GET_PORT_STATUS
Definition: usbioctl.h:44
_In_ WDFIOTARGET _In_ PWDF_REQUEST_COMPLETION_PARAMS Params
Definition: wdfrequest.h:308

Referenced by OnAsleep(), OnAwaitingD0(), OnAwaitingResetRetry(), OnDown(), and OnReadingPortStatus().

◆ FailStart()

SM_RESULT HubMachine::FailStart ( _In_ BOOLEAN  FirstStart)
private

A failed first start returns to Unconfigured, a failed restart to Stopped.

Definition at line 417 of file hubsm.cpp.

419{
421 m_ReleaseToUnconfigured = FirstStart;
423}
static const State AwaitingReleaseAfterFailure
Definition: hubsm.h:164
BOOLEAN m_ReleaseToUnconfigured
Definition: hubsm.h:580
VOID SignalPnpFailure()
Definition: fdo.cpp:1231

Referenced by EnterQueryingErrata(), OnConfiguring(), OnQueryingParentInfo(), and OnReconfiguring().

◆ FinishDrom()

SM_RESULT HubMachine::FinishDrom ( )
private

Definition at line 659 of file hubsm.cpp.

660{
663
666 m_DromIndex = 0;
667 m_DromWords = 0;
668 return SmTransition(m_DromNext);
669}
DromPhase m_DromPhase
Definition: hubsm.h:585
VOID ReleaseDromBuffer()
Definition: hubdrom.cpp:178
VOID ParseDromIdentity()
Finds the router identity entry of a version 1 DROM, bounds checking each entry.
Definition: hubdrom.cpp:201
const State * m_DromNext
Definition: hubsm.h:586

Referenced by CheckDromStatus(), OnDromRead(), StartDromWords(), and StoreDromWordAndContinue().

◆ GetConfigDescriptor()

VOID HubMachine::GetConfigDescriptor ( _In_ BOOLEAN  FullLength)
private

Definition at line 417 of file hubreq.cpp.

419{
424
425 if (!FullLength)
426 {
427 if (Previous != NULL)
429 Previous = NULL;
431 }
432 else
433 {
434 Length = Previous->wTotalLength;
435 }
436
438
440 if (Buffer == NULL)
441 {
442 DPRINT1("Hub %p no memory for a %lu byte configuration descriptor\n", m_Hub, Length);
444 }
445 else
446 {
447 DPRINT("Hub %p reading %lu bytes of configuration descriptor\n", m_Hub, Length);
449
452 m_Hub->UsbDevice(),
454 m_Hub,
455 Buffer,
456 Length,
457 TRUE,
459 }
460
461 if (Previous != NULL)
463
464 if (NT_SUCCESS(Status))
465 return;
466
468 {
471 }
472
473 m_Hub->Post(HubEvent::TransferFailed);
474}
LONG NTSTATUS
Definition: precomp.h:26
WDFIOTARGET m_RootHubTarget
Definition: fdo.h:368
VOID Post(_In_ HubEvent Event)
Definition: fdo.h:194
UCXUSBDEVICE UsbDevice() const
Definition: fdo.h:180
BOOLEAN NeedsForwardProgress() const
Definition: fdo.h:208
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:33
Status
Definition: gdiplustypes.h:24
Previous
static EVT_WDF_REQUEST_COMPLETION_ROUTINE HubControlComplete
Definition: hubreq.cpp:289
NTSTATUS Send(_In_ WDFIOTARGET Target, _In_opt_ UCXUSBDEVICE Device, _In_ PFN_WDF_REQUEST_COMPLETION_ROUTINE Completion, _In_ WDFCONTEXT Context, _In_reads_bytes_opt_(Length) PVOID Buffer, _In_ ULONG Length, _In_ BOOLEAN ShortTransferOk, _In_ BOOLEAN ForwardProgress)
Definition: hubreq.cpp:62
#define STATUS_INSUFFICIENT_RESOURCES
Definition: udferr_usr.h:158
#define USB_REQUEST_GET_DESCRIPTOR
Definition: usb100.h:82
#define USB_CONFIGURATION_DESCRIPTOR_TYPE
Definition: usb100.h:50

Referenced by EnterReadingConfigDescriptor().

◆ GetHubDescriptor()

VOID HubMachine::GetHubDescriptor ( )
private

Definition at line 357 of file hubreq.cpp.

358{
359 switch (m_Hub->m_Parent.HubSpeed)
360 {
361 case UsbFullSpeed:
362 case UsbHighSpeed:
366 0,
367 sizeof(m_Hub->m_HubDescriptor.Usb20));
369 break;
370
371 case UsbSuperSpeed:
375 0,
376 sizeof(m_Hub->m_HubDescriptor.Usb30));
378 break;
379
380 default:
381 DPRINT1("Hub %p of speed %lu has no hub descriptor\n", m_Hub, (ULONG)m_Hub->m_Parent.HubSpeed);
382 m_Hub->Post(HubEvent::TransferFailed);
383 break;
384 }
385}
USB_HUB_DESCRIPTOR Usb20
Definition: fdo.h:419
USB_30_HUB_DESCRIPTOR Usb30
Definition: fdo.h:420
UCXHUB_PARENT_INTERFACE m_Parent
Definition: fdo.h:355
union HubFdo::@1628 m_HubDescriptor
#define HUB_REQUEST_GET_DESCRIPTOR
Definition: hubreq.h:88
USB_DEVICE_SPEED HubSpeed
Definition: hubucx.h:504
@ UsbSuperSpeed
Definition: usb200.h:45
@ UsbHighSpeed
Definition: usb200.h:44
@ UsbFullSpeed
Definition: usb200.h:43
#define USB_20_HUB_DESCRIPTOR_TYPE
Definition: usb200.h:280
#define USB_30_HUB_DESCRIPTOR_TYPE
Definition: usb200.h:281

Referenced by CheckPowerLoss(), and EnterReadingHubDescriptor().

◆ GetHubStatus()

VOID HubMachine::GetHubStatus ( )
private

Definition at line 397 of file hubreq.cpp.

398{
400
402 DPRINT("Hub %p reading hub status\n", m_Hub);
404}
USB_HUB_STATUS_AND_CHANGE m_PreviousHubStatus
Definition: fdo.h:424
USB_HUB_STATUS_AND_CHANGE m_HubStatus
Definition: fdo.h:423
#define HUB_REQUEST_GET_STATUS
Definition: hubreq.h:85

Referenced by ReadStatus().

◆ GetParentInfo()

VOID HubMachine::GetParentInfo ( )
private

Definition at line 378 of file upstream.cpp.

379{
380 WDFREQUEST Request;
381
383 {
384 m_Hub->Post(HubEvent::IoctlFailed);
385 return;
386 }
387
389 {
391 m_Hub->Post(HubEvent::IoctlFailed);
392 }
393}
HubParentInfo m_ParentInfo
Definition: fdo.h:360
#define IOCTL_UCXHUB_GET_HUB_INFO
Definition: hubucx.h:64
static BOOLEAN NTAPI HubSendToParent(_In_ HubFdo *Hub, _In_ WDFREQUEST Request, _In_ ULONG IoControlCode, _In_ PVOID Payload, _In_ PFN_WDF_REQUEST_COMPLETION_ROUTINE Completion, _In_ WDFCONTEXT Context)
Definition: upstream.cpp:31
static EVT_WDF_REQUEST_COMPLETION_ROUTINE HubParentInfoComplete
Definition: upstream.cpp:25
static NTSTATUS NTAPI HubCreateParentRequest(_In_ HubFdo *Hub, _Out_ WDFREQUEST *Request)
Definition: upstream.cpp:64
WdfObjectDelete(String)

Referenced by EnterQueryingParentInfo().

◆ GetPortStatus()

VOID HubMachine::GetPortStatus ( )
private

Definition at line 790 of file hubreq.cpp.

791{
793 BOOLEAN Extended = Port->HasProperty(PortProperty::EnhancedSuperSpeed);
794 USHORT Length = Extended ? sizeof(Port->m_Current) : sizeof(Port->m_Current.StatusChange);
795
796 m_Hub->m_Control.SetSetup(0xA3, HUB_REQUEST_GET_STATUS, Extended ? 2 : 0, Port->Number(), Length);
797 HubSendControl(m_Hub, &Port->m_Current, Length, FALSE);
798}
CPPORT Port[4]
Definition: headless.c:38

Referenced by ReadPortStatus().

◆ GetRootHub20Ports()

VOID HubMachine::GetRootHub20Ports ( )
private

Definition at line 212 of file ucxlink.cpp.

213{
215 WDFIOTARGET Target = WdfDeviceGetIoTarget(m_Hub->m_Device);
217 PROOTHUB_20PORTS_INFO Payload;
219 WDFMEMORY Block = NULL;
220 WDFMEMORY PayloadMemory;
221 WDFREQUEST Request;
223 ULONG Index;
224
225 if (Count == 0)
226 {
228 m_Hub->Post(HubEvent::IoctlDone);
229 return;
230 }
231
233 {
234 m_Hub->Post(HubEvent::IoctlFailed);
235 return;
236 }
237
239 Attributes.ParentObject = m_Hub->m_Device;
240
241 if (!NT_SUCCESS(WdfMemoryCreate(&Attributes,
244 Count * (sizeof(ROOTHUB_20PORT_INFO) + sizeof(PVOID)),
245 &Block,
246 &Buffer)))
247 {
248 DPRINT1("Hub %p no memory for %lu root 2.0 ports\n", m_Hub, Count);
249 goto Failed;
250 }
251
254
255 for (Index = 0; Index < Count; Index++)
256 {
258 Entries[Index].MinorRevision = 0;
259 Entries[Index].HubDepth = 0;
260 }
261
263 Attributes.ParentObject = Request;
264
265 if (!NT_SUCCESS(WdfMemoryCreate(&Attributes,
268 sizeof(*Payload),
269 &PayloadMemory,
270 (PVOID*)&Payload)))
271 {
272 DPRINT1("Hub %p no memory for the 2.0 port info request\n", m_Hub);
273 goto Failed;
274 }
275
276 Payload->Size = sizeof(*Payload);
277 Payload->NumberOfPorts = (USHORT)Count;
278 Payload->PortInfoSize = sizeof(*Entries);
279 Payload->PortInfoArray = m_Hub->m_Root20Ports;
280
282 return;
283
284Failed:
286 if (Block != NULL)
287 {
290 }
291 m_Hub->Post(HubEvent::IoctlFailed);
292}
UCXHUB_ROOTHUB_INFO m_RootHubInfo
Definition: fdo.h:374
PROOTHUB_20PORT_INFO * m_Root20Ports
Definition: fdo.h:375
_In_ ULONG Attributes
Definition: dispmprt.h:1077
#define IOCTL_UCXHUB_ROOTHUB_GET_20PORT_INFO
Definition: hubucx.h:51
#define HUB_TAG_PORT
Definition: hubutil.h:14
static const ENTRY Entries[]
@ Failed
Definition: arc.h:88
USHORT NumberOf20Ports
Definition: ucxroothub.h:41
ROOTHUB_INFO Info
Definition: hubucx.h:119
struct _ROOTHUB_20PORT_INFO * PROOTHUB_20PORT_INFO
PUSBUSER_REQUEST_HEADER Block
Definition: userreq.cpp:697
_In_ WDFCOLLECTION _In_ ULONG Index
FORCEINLINE VOID WDF_OBJECT_ATTRIBUTES_INIT(_Out_ PWDF_OBJECT_ATTRIBUTES Attributes)
Definition: wdfobject.h:147
_In_ WDFIOTARGET Target
Definition: wdfrequest.h:306

Referenced by EnterReadingRootHub20Ports().

◆ GetRootHub30Ports()

VOID HubMachine::GetRootHub30Ports ( )
private

Definition at line 296 of file ucxlink.cpp.

297{
299 WDFIOTARGET Target = WdfDeviceGetIoTarget(m_Hub->m_Device);
301 PROOTHUB_30PORTS_INFO Payload;
304 WDFMEMORY Block = NULL;
305 WDFMEMORY PayloadMemory;
306 WDFREQUEST Request;
308 ULONG Index;
309
310 if (Count == 0)
311 {
313 m_Hub->Post(HubEvent::IoctlDone);
314 return;
315 }
316
318 {
319 m_Hub->Post(HubEvent::IoctlFailed);
320 return;
321 }
322
324 Attributes.ParentObject = m_Hub->m_Device;
325
326 if (!NT_SUCCESS(WdfMemoryCreate(&Attributes,
329 Count * (sizeof(PVOID) + sizeof(ROOTHUB_30PORT_INFO_EX) +
330 HUB_ROOT_PORT_MAX_SPEEDS * sizeof(*Speeds)),
331 &Block,
332 &Buffer)))
333 {
334 DPRINT1("Hub %p no memory for %lu root 3.0 ports\n", m_Hub, Count);
335 goto Failed;
336 }
337
341
342 for (Index = 0; Index < Count; Index++)
343 {
345 Entries[Index].Info.MinorRevision = 0;
346 Entries[Index].Info.HubDepth = 0;
347 Entries[Index].Speeds = &Speeds[Index * HUB_ROOT_PORT_MAX_SPEEDS];
348 Entries[Index].SpeedsCount = 0;
349 Entries[Index].MaxSpeedsCount = HUB_ROOT_PORT_MAX_SPEEDS;
350 }
351
353 Attributes.ParentObject = Request;
354
355 if (!NT_SUCCESS(WdfMemoryCreate(&Attributes,
358 sizeof(*Payload),
359 &PayloadMemory,
360 (PVOID*)&Payload)))
361 {
362 DPRINT1("Hub %p no memory for the 3.0 port info request\n", m_Hub);
363 goto Failed;
364 }
365
366 Payload->Size = sizeof(*Payload);
367 Payload->NumberOfPorts = (USHORT)Count;
368 Payload->PortInfoSize = sizeof(*Entries);
369 Payload->PortInfoArray = (PROOTHUB_30PORT_INFO*)m_Hub->m_Root30Ports;
370
372 return;
373
374Failed:
376 if (Block != NULL)
377 {
380 }
381 m_Hub->Post(HubEvent::IoctlFailed);
382}
PROOTHUB_30PORT_INFO_EX * m_Root30Ports
Definition: fdo.h:376
#define IOCTL_UCXHUB_ROOTHUB_GET_30PORT_INFO
Definition: hubucx.h:52
USHORT NumberOf30Ports
Definition: ucxroothub.h:42
struct _ROOTHUB_30PORT_INFO_EX * PROOTHUB_30PORT_INFO_EX
union _USB_DEVICE_CAPABILITY_SUPERSPEEDPLUS_SPEED * PUSB_DEVICE_CAPABILITY_SUPERSPEEDPLUS_SPEED

Referenced by EnterReadingRootHub30Ports().

◆ GetRootHubInfo()

VOID HubMachine::GetRootHubInfo ( )
private

Definition at line 189 of file ucxlink.cpp.

190{
191 WDFIOTARGET Target = WdfDeviceGetIoTarget(m_Hub->m_Device);
192 WDFREQUEST Request;
193
195 {
196 m_Hub->Post(HubEvent::IoctlFailed);
197 return;
198 }
199
201
203 Target,
206 Request,
208}
#define IOCTL_UCXHUB_ROOTHUB_GET_INFO
Definition: hubucx.h:50

Referenced by EnterReadingRootHubInfo().

◆ GetStandardStatus()

VOID HubMachine::GetStandardStatus ( )
private

Definition at line 388 of file hubreq.cpp.

389{
391 DPRINT("Hub %p reading device status\n", m_Hub);
393}
USB_DEVICE_STATUS m_DeviceStatus
Definition: fdo.h:422
#define USB_REQUEST_GET_STATUS
Definition: usb100.h:78

Referenced by EnterReadingStandardStatus().

◆ HandleHubChange()

SM_RESULT HubMachine::HandleHubChange ( _In_ HubChange  Change)
private

None comes only from the lost change query, Error only from the pending one.

Definition at line 1050 of file hubsm.cpp.

1052{
1053 switch (Change)
1054 {
1055 case HubChange::OverCurrent:
1058
1059 case HubChange::OverCurrentCleared:
1061
1062 case HubChange::Error:
1063 return HandleHubStatusFault();
1064
1065 default:
1066 return SendInterrupt(TRUE);
1067 }
1068}
SM_RESULT SendInterrupt(_In_ BOOLEAN ClearPipeResets)
Definition: hubsm.cpp:966
SM_RESULT HandleHubStatusFault()
Definition: hubsm.cpp:1071
SM_RESULT QuiesceWithoutInterrupt(_In_ Teardown Reason)
Definition: hubsm.cpp:1138
VOID ArmOverCurrentTimer()
Definition: fdo.cpp:1324
static const State AwaitingOverCurrentTimer
Definition: hubsm.h:175

Referenced by OnAckingHubChange(), and OnReadingHubStatus().

◆ HandleHubStatusFault()

SM_RESULT HubMachine::HandleHubStatusFault ( )
private

Definition at line 1071 of file hubsm.cpp.

1072{
1073 if (IsErrorFatal())
1075
1076 return SendInterrupt(TRUE);
1077}
BOOLEAN IsErrorFatal()
Definition: hubreq.cpp:651

Referenced by HandleHubChange(), OnListening(), and OnReadingHubStatus().

◆ Hub()

HubFdo * HubMachine::Hub ( ) const
inline

Definition at line 100 of file hubsm.h.

101 {
102 return m_Hub;
103 }

Referenced by Initialize().

◆ Initialize()

VOID HubMachine::Initialize ( _In_ HubFdo *  Hub,
_In_ HubKind  Kind 
)

Definition at line 253 of file hubsm.cpp.

256{
257 m_Hub = Hub;
258 m_Kind = Kind;
265 m_DromPollStart = 0;
266 m_DromIndex = 0;
267 m_DromWords = 0;
270
272}
const State * m_PortStatusReturn
Definition: hubsm.h:579
PowerUp m_PowerUp
Definition: hubsm.h:577
static const State NotListening
Definition: hubsm.h:171
static const State AwaitingAddDevice
Definition: hubsm.h:148
static const State QueryingErrata
Definition: hubsm.h:159
HubFdo * Hub() const
Definition: hubsm.h:100
StatusRead m_StatusRead
Definition: hubsm.h:578
VOID SmInitialize(_In_ const State *Initial)
Definition: smengine.h:349

◆ InitializeDescriptorRetries()

VOID HubMachine::InitializeDescriptorRetries ( )
private

Definition at line 1350 of file fdo.cpp.

1351{
1353}

Referenced by StartHubConfiguration().

◆ InitializeResetCount()

VOID HubMachine::InitializeResetCount ( )
private

Definition at line 1338 of file fdo.cpp.

1339{
1340 m_Hub->m_ResetCount = 0;
1341}

Referenced by EnterCheckingRecoveryLimit(), and OnPortsResetting().

◆ IsDepthZero()

BOOLEAN HubMachine::IsDepthZero ( )
private

Definition at line 1310 of file fdo.cpp.

1311{
1312 return m_Hub->IsRootHub();
1313}
BOOLEAN IsRootHub() const
Definition: fdo.h:174

Referenced by OnListening().

◆ IsDromReadWanted()

BOOLEAN HubMachine::IsDromReadWanted ( )
private

Definition at line 114 of file hubdrom.cpp.

115{
116 return m_Hub->m_Parent.HubDepth != 0 && m_Hub->m_FwUpdateProtocol == 1;
117}
ULONG m_FwUpdateProtocol
Definition: fdo.h:453

Referenced by StartDromOrSkip().

◆ IsErrorFatal()

BOOLEAN HubMachine::IsErrorFatal ( )
private

Definition at line 651 of file hubreq.cpp.

652{
653 return TRUE;
654}

Referenced by HandleHubStatusFault(), and OverCurrentError().

◆ IsInBootPath()

BOOLEAN HubMachine::IsInBootPath ( )
private

Definition at line 1304 of file fdo.cpp.

1305{
1306 return m_Hub->HasFlag(HubFlag::InBootOrPagingPath);
1307}
BOOLEAN HasFlag(_In_ HubFlag Flag) const
Definition: fdo.h:153

Referenced by EnterCheckingRecoveryLimit().

◆ LogResetOnResume()

VOID HubMachine::LogResetOnResume ( )
private

Definition at line 1298 of file fdo.cpp.

1299{
1300 DPRINT1("Hub %p was reset on resume\n", m_Hub->m_Device);
1301}

Referenced by ResumeResetFailed(), and StartPowerUp().

◆ LogResetRecovery()

VOID HubMachine::LogResetRecovery ( )
private

Definition at line 1266 of file fdo.cpp.

1267{
1268 DECLARE_CONST_UNICODE_STRING(CountName, L"HardResetCount");
1269 DECLARE_CONST_UNICODE_STRING(StatusName, L"LastHubResetPortStatus");
1270 WDFKEY Key;
1271
1273
1274 DPRINT1("Hub %p reset recovery %lu, last port status 0x%lx\n",
1276
1281 &Key)))
1282 {
1283 return;
1284 }
1285
1286 WdfRegistryAssignULong(Key, &CountName, m_Hub->m_LifetimeRecoveryCount);
1287
1288 if (m_Hub->m_LastResetPortStatus != 0)
1289 {
1290 WdfRegistryAssignULong(Key, &StatusName, m_Hub->m_LastResetPortStatus);
1292 }
1293
1295}
ULONG m_LastResetPortStatus
Definition: fdo.h:438
ULONG m_LifetimeRecoveryCount
Definition: fdo.h:436
#define L(x)
Definition: resources.c:13
WdfRegistryClose(HardwareKey)
return WdfDeviceOpenRegistryKey(Child->m_Pdo->m_Device, PLUGPLAY_REGKEY_DEVICE, Access, WDF_NO_OBJECT_ATTRIBUTES, Key)
#define KEY_SET_VALUE
Definition: nt_native.h:1020
#define DECLARE_CONST_UNICODE_STRING(_variablename, _string)
Definition: wdfcore.h:161
#define WDF_NO_OBJECT_ATTRIBUTES
Definition: wdftypes.h:105
#define PLUGPLAY_REGKEY_DEVICE
Definition: iofuncs.h:2812

Referenced by EnterLoggingReset(), and EnterReconfiguringAfterReset().

◆ LostHubChange()

HubChange HubMachine::LostHubChange ( )
private

Definition at line 639 of file hubreq.cpp.

640{
641 return HubChange::None;
642}

Referenced by OnReadingHubStatus().

◆ MailboxValue()

ULONG HubMachine::MailboxValue ( )
private

Definition at line 120 of file hubdrom.cpp.

121{
122 return m_Hub->m_DromMailbox;
123}
ULONG m_DromMailbox
Definition: fdo.h:460

Referenced by CheckDromStatus(), and OnDromReadingFirstStatus().

◆ OnAckingHubChange()

SM_RESULT HubMachine::OnAckingHubChange ( _In_ HubEvent  Event)
private

Definition at line 1029 of file hubsm.cpp.

1031{
1032 switch (Event)
1033 {
1034 case HubEvent::TransferDone:
1036
1037 case HubEvent::TransferFailed:
1039
1040 default:
1041 return SmUnhandled();
1042 }
1043}
SM_RESULT HandleHubChange(_In_ HubChange Change)
None comes only from the lost change query, Error only from the pending one.
Definition: hubsm.cpp:1050
HubChange PendingHubChange()
Definition: hubreq.cpp:632
static SM_RESULT SmUnhandled()
Definition: smengine.h:188
_Check_return_ _In_ DXGK_EVENT_TYPE _In_ ULONG Event
Definition: dispmprt.h:1287

◆ OnAsleep()

SM_RESULT HubMachine::OnAsleep ( _In_ HubEvent  Event)
private

Definition at line 1493 of file hubsm.cpp.

1495{
1496 switch (Event)
1497 {
1498 case HubEvent::PortStatusRequest:
1500 return SmHandled();
1501
1502 case HubEvent::ResetRequested:
1503 return SmHandled();
1504
1505 case HubEvent::ReleaseHardware:
1508
1509 default:
1510 return SmUnhandled();
1511 }
1512}
static const State AwaitingStopAfterSuspend
Definition: hubsm.h:198
VOID FailPortStatus(_In_ BOOLEAN HardwareError)
Definition: hubreq.cpp:884
VOID QueueStopAfterSuspendToDevices()
Definition: fanout.cpp:944

◆ OnAwaitingAddDevice()

SM_RESULT HubMachine::OnAwaitingAddDevice ( _In_ HubEvent  Event)
private

Definition at line 295 of file hubsm.cpp.

297{
298 if (Event != HubEvent::DeviceAdded)
299 return SmUnhandled();
300
302 return SmTransition(&Unconfigured);
303}
static const State Unconfigured
Definition: hubsm.h:149

◆ OnAwaitingD0()

SM_RESULT HubMachine::OnAwaitingD0 ( _In_ HubEvent  Event)
private

Definition at line 444 of file hubsm.cpp.

446{
447 switch (Event)
448 {
449 case HubEvent::PortStatusRequest:
451 return SmHandled();
452
453 case HubEvent::D0Entry:
456
457 case HubEvent::ReleaseHardware:
459 return SmTransition(&Stopped);
460
461 default:
462 return SmUnhandled();
463 }
464}
static const State Stopped
Definition: hubsm.h:162

◆ OnAwaitingDescriptorRetry()

SM_RESULT HubMachine::OnAwaitingDescriptorRetry ( _In_ HubEvent  Event)
private

Definition at line 1624 of file hubsm.cpp.

1626{
1627 if (Event == HubEvent::TimerFired)
1629
1630 return SmUnhandled();
1631}
static const State ReadingHubDescriptor
Definition: hubsm.h:201

◆ OnAwaitingInterruptEnable()

SM_RESULT HubMachine::OnAwaitingInterruptEnable ( _In_ HubEvent  Event)
private

Definition at line 1211 of file hubsm.cpp.

1213{
1214 if (Event == HubEvent::PortsEnableInterrupt)
1216
1217 return SmUnhandled();
1218}

◆ OnAwaitingInterruptRefs()

SM_RESULT HubMachine::OnAwaitingInterruptRefs ( _In_ HubEvent  Event)
private

Definition at line 1201 of file hubsm.cpp.

1203{
1204 if (Event == HubEvent::PortsInterruptReleased)
1205 return AfterInterruptQuiet();
1206
1207 return SmUnhandled();
1208}
SM_RESULT AfterInterruptQuiet()
Definition: hubsm.cpp:1153

◆ OnAwaitingOverCurrentTimer()

SM_RESULT HubMachine::OnAwaitingOverCurrentTimer ( _In_ HubEvent  Event)
private

Definition at line 1089 of file hubsm.cpp.

1091{
1092 if (Event == HubEvent::TimerFired)
1094
1095 return SmUnhandled();
1096}
NTSTATUS ReadStatus
Definition: bootdev.cpp:134

◆ OnAwaitingReleaseAfterFailure()

SM_RESULT HubMachine::OnAwaitingReleaseAfterFailure ( _In_ HubEvent  Event)
private

Definition at line 720 of file hubsm.cpp.

722{
723 if (Event != HubEvent::ReleaseHardware)
724 return SmUnhandled();
725
728}

◆ OnAwaitingReleaseHardware()

SM_RESULT HubMachine::OnAwaitingReleaseHardware ( _In_ HubEvent  Event)
private

Definition at line 709 of file hubsm.cpp.

711{
712 if (Event != HubEvent::ReleaseHardware)
713 return SmUnhandled();
714
716 return SmTransition(&Stopped);
717}

◆ OnAwaitingResetRetry()

SM_RESULT HubMachine::OnAwaitingResetRetry ( _In_ HubEvent  Event)
private

Definition at line 1355 of file hubsm.cpp.

1357{
1358 switch (Event)
1359 {
1360 case HubEvent::TimerFired:
1361 if (ResetLimitReached())
1363
1364 return SmTransition(&HubResetting);
1365
1366 case HubEvent::PortStatusRequest:
1368 return SmHandled();
1369
1370 case HubEvent::ResetRequested:
1371 return SmHandled();
1372
1373 default:
1374 return SmUnhandled();
1375 }
1376}
BOOLEAN ResetLimitReached()
Definition: fdo.cpp:1356

◆ OnAwaitingStop()

SM_RESULT HubMachine::OnAwaitingStop ( _In_ HubEvent  Event)
private

Definition at line 732 of file hubsm.cpp.

734{
735 switch (Event)
736 {
737 case HubEvent::D0Exit:
741
742 case HubEvent::D0ExitFinal:
747
748 default:
749 return SmUnhandled();
750 }
751}
VOID ReleasePowerReference()
Definition: fdo.cpp:1216
static const State RecycleSuspended
Definition: hubsm.h:196

◆ OnAwaitingStopAfterSuspend()

SM_RESULT HubMachine::OnAwaitingStopAfterSuspend ( _In_ HubEvent  Event)
private

Definition at line 1575 of file hubsm.cpp.

1577{
1578 if (Event == HubEvent::DevicesStoppedAfterSuspend)
1580
1581 return SmUnhandled();
1582}
static const State SurpriseRemoved
Definition: hubsm.h:166

◆ OnCancelingInterrupt()

SM_RESULT HubMachine::OnCancelingInterrupt ( _In_ HubEvent  Event)
private

Definition at line 1191 of file hubsm.cpp.

1193{
1194 if ((Event == HubEvent::InterruptDone) || (Event == HubEvent::InterruptFailed))
1195 return AfterInterruptQuiet();
1196
1197 return SmUnhandled();
1198}

◆ OnCheckingPowerLoss()

SM_RESULT HubMachine::OnCheckingPowerLoss ( _In_ HubEvent  Event)
private

Definition at line 1474 of file hubsm.cpp.

1476{
1477 switch (Event)
1478 {
1479 case HubEvent::TransferDone:
1481
1482 case HubEvent::TransferFailed:
1484
1485 default:
1486 return SmUnhandled();
1487 }
1488}
static const State ResettingOnResume
Definition: hubsm.h:191

◆ OnConfiguring()

SM_RESULT HubMachine::OnConfiguring ( _In_ HubEvent  Event)
private

Definition at line 362 of file hubsm.cpp.

364{
365 switch (Event)
366 {
367 case HubEvent::CallSucceeded:
369
370 case HubEvent::CallFailed:
371 return FailStart(TRUE);
372
373 default:
374 return SmUnhandled();
375 }
376}
SM_RESULT StartDromOrSkip(_In_ const State *Next)
Reads the router DROM through the vendor mailbox; no failure here fails the start.
Definition: hubsm.cpp:473

◆ OnDevicesAcquiring()

SM_RESULT HubMachine::OnDevicesAcquiring ( _In_ HubEvent  Event)
private

Definition at line 829 of file hubsm.cpp.

831{
832 if (Event != HubEvent::DevicesAcquired)
833 return SmUnhandled();
834
835 switch (m_PowerUp)
836 {
837 case PowerUp::Start:
840
844 return SmTransition(&NotListening);
845
850
851 default:
853 }
854}
VOID QueueFakeStatusChangeToPorts()
Definition: fanout.cpp:926

◆ OnDevicesReleasing()

SM_RESULT HubMachine::OnDevicesReleasing ( _In_ HubEvent  Event)
private

Definition at line 1221 of file hubsm.cpp.

1223{
1224 if (Event != HubEvent::DevicesReleased)
1225 return SmUnhandled();
1226
1227 switch (m_Teardown)
1228 {
1229 case Teardown::Stop:
1232
1233 case Teardown::Suspend:
1236
1237 default:
1239 }
1240}
VOID QueueSuspendToPorts()
Definition: fanout.cpp:902
static const State AwaitingReleaseHardware
Definition: hubsm.h:163

◆ OnDown()

SM_RESULT HubMachine::OnDown ( _In_ HubEvent  Event)
private

Definition at line 674 of file hubsm.cpp.

676{
677 switch (Event)
678 {
679 case HubEvent::PortStatusRequest:
681 return SmHandled();
682
683 case HubEvent::ResetRequested:
684 return SmHandled();
685
686 default:
687 return SmUnhandled();
688 }
689}

◆ OnDrainingInterruptRefs()

SM_RESULT HubMachine::OnDrainingInterruptRefs ( _In_ HubEvent  Event)
private

Definition at line 1172 of file hubsm.cpp.

1174{
1175 switch (Event)
1176 {
1177 case HubEvent::InterruptDone:
1178 case HubEvent::InterruptFailed:
1180
1181 case HubEvent::PortsInterruptReleased:
1184
1185 default:
1186 return SmUnhandled();
1187 }
1188}
static const State AwaitingInterruptRefs
Definition: hubsm.h:179
static const State CancelingInterrupt
Definition: hubsm.h:178
VOID CancelStatusChangeRead()
Definition: hubreq.cpp:757

◆ OnDromRead()

SM_RESULT HubMachine::OnDromRead ( _In_ HubEvent  Event)
private

Definition at line 490 of file hubsm.cpp.

492{
493 if (Event == HubEvent::TransferFailed)
494 return FinishDrom();
495
496 return SmUnhandled();
497}

◆ OnDromReadingFirstStatus()

SM_RESULT HubMachine::OnDromReadingFirstStatus ( _In_ HubEvent  Event)
private

Definition at line 508 of file hubsm.cpp.

510{
511 switch (Event)
512 {
513 case HubEvent::TransferDone:
514 DPRINT("Hub %p router mailbox status 0x%02lx\n", m_Hub, (MailboxValue() >> 24) & 0x3F);
516
517 case HubEvent::TransferFailed:
519
520 default:
521 return SmUnhandled();
522 }
523}
static const State DromWritingMetadata
Definition: hubsm.h:155

◆ OnDromReadingStatus()

SM_RESULT HubMachine::OnDromReadingStatus ( _In_ HubEvent  Event)
private

Definition at line 572 of file hubsm.cpp.

574{
575 if (Event == HubEvent::TransferDone)
576 return CheckDromStatus();
577
578 return SmUnhandled();
579}
SM_RESULT CheckDromStatus()
Definition: hubsm.cpp:583

◆ OnDromReadingWord()

SM_RESULT HubMachine::OnDromReadingWord ( _In_ HubEvent  Event)
private

Definition at line 629 of file hubsm.cpp.

631{
632 if (Event == HubEvent::TransferDone)
634
635 return SmUnhandled();
636}
SM_RESULT StoreDromWordAndContinue()
Definition: hubsm.cpp:640

◆ OnDromSendingCommand()

SM_RESULT HubMachine::OnDromSendingCommand ( _In_ HubEvent  Event)
private

Definition at line 554 of file hubsm.cpp.

556{
557 if (Event != HubEvent::TransferDone)
558 return SmUnhandled();
559
562}

◆ OnDromWritingMetadata()

SM_RESULT HubMachine::OnDromWritingMetadata ( _In_ HubEvent  Event)
private

Definition at line 537 of file hubsm.cpp.

539{
540 if (Event == HubEvent::TransferDone)
542
543 return SmUnhandled();
544}
static const State DromSendingCommand
Definition: hubsm.h:156

◆ OnFinishingConfiguration()

SM_RESULT HubMachine::OnFinishingConfiguration ( _In_ HubEvent  Event)
private

Definition at line 1753 of file hubsm.cpp.

1755{
1756 if ((Event == HubEvent::CallSucceeded) || (Event == HubEvent::CallFailed))
1757 return SmReturn(Event);
1758
1759 return SmUnhandled();
1760}
static SM_RESULT SmReturn(_In_ HubEvent Ev)
Definition: smengine.h:217

◆ OnHubResetting()

SM_RESULT HubMachine::OnHubResetting ( _In_ HubEvent  Event)
private

Definition at line 1325 of file hubsm.cpp.

1327{
1328 switch (Event)
1329 {
1330 case HubEvent::ResetDone:
1332
1333 case HubEvent::ResetFailed:
1334 return SmTransition(&LoggingReset);
1335
1336 case HubEvent::ResetFailedOnRemoval:
1339
1340 default:
1341 return SmUnhandled();
1342 }
1343}
static const State LoggingReset
Definition: hubsm.h:188
static const State ReconfiguringAfterReset
Definition: hubsm.h:190

◆ OnListening()

SM_RESULT HubMachine::OnListening ( _In_ HubEvent  Event)
private

Definition at line 859 of file hubsm.cpp.

861{
862 switch (Event)
863 {
864 case HubEvent::ResetRequested:
867
868 case HubEvent::D0Exit:
870
871 case HubEvent::D0ExitFinal:
873
874 case HubEvent::InterruptDone:
876 switch (CheckHubChangeBit())
877 {
878 case HubCheck::Yes:
880
881 case HubCheck::Error:
882 return HandleHubStatusFault();
883
884 default:
886 return SmTransition(&NotListening);
887 }
888
889 case HubEvent::InterruptFailed:
893
896
897 case HubEvent::PortStatusRequest:
898 return ReadPortStatus(&Listening);
899
900 default:
901 return SmUnhandled();
902 }
903}
static const State Listening
Definition: hubsm.h:170
VOID QueueStatusChangeToPorts()
Definition: fanout.cpp:920
static const State ResettingPipe
Definition: hubsm.h:176
HubCheck CheckHubChangeBit()
Definition: hubreq.cpp:765
SM_RESULT QuiesceWithInterrupt(_In_ Teardown Reason)
Definition: hubsm.cpp:1119
VOID ResetStatusChangePipe()
Definition: upstream.cpp:247
SM_RESULT ReadPortStatus(_In_ const State *ReturnTo)
Definition: hubsm.cpp:938
BOOLEAN PipeResetLimitReached()
Definition: fdo.cpp:1369
BOOLEAN IsDepthZero()
Definition: fdo.cpp:1310

◆ OnNotListening()

SM_RESULT HubMachine::OnNotListening ( _In_ HubEvent  Event)
private

Definition at line 907 of file hubsm.cpp.

909{
910 switch (Event)
911 {
912 case HubEvent::ResetRequested:
915
916 case HubEvent::D0Exit:
920
921 case HubEvent::D0ExitFinal:
925
926 case HubEvent::PortsEnableInterrupt:
927 return SendInterrupt(TRUE);
928
929 case HubEvent::PortStatusRequest:
931
932 default:
933 return SmUnhandled();
934 }
935}
static const State AwaitingInterruptEnable
Definition: hubsm.h:180

◆ OnPortsAcquiring()

SM_RESULT HubMachine::OnPortsAcquiring ( _In_ HubEvent  Event)
private

Definition at line 795 of file hubsm.cpp.

797{
798 if (Event != HubEvent::PortsAcquired)
799 return SmUnhandled();
800
801 switch (m_PowerUp)
802 {
805
806 case PowerUp::Resume:
809 break;
810
813 break;
814
818 break;
819
820 default:
822 break;
823 }
824
826}
VOID QueueResumeInS0ToDevices()
Definition: fanout.cpp:962
VOID QueueResumeToDevices()
Definition: fanout.cpp:956
VOID QueueStartToDevices()
Definition: fanout.cpp:950
VOID QueueResumeWithResetToDevices()
Definition: fanout.cpp:968
static const State DevicesAcquiring
Definition: hubsm.h:169

◆ OnPortsReleasing()

SM_RESULT HubMachine::OnPortsReleasing ( _In_ HubEvent  Event)
private

Definition at line 1243 of file hubsm.cpp.

1245{
1246 if (Event != HubEvent::PortsReleased)
1247 return SmUnhandled();
1248
1249 switch (m_Teardown)
1250 {
1251 case Teardown::Stop:
1253
1254 case Teardown::Suspend:
1256 return SmTransition(&Suspended);
1257
1258 default:
1261 }
1262}
static const State PortsResetting
Definition: hubsm.h:183
VOID QueueResetToPorts()
Definition: fanout.cpp:914
static const State Suspended
Definition: hubsm.h:195

◆ OnPortsResetting()

SM_RESULT HubMachine::OnPortsResetting ( _In_ HubEvent  Event)
private

Definition at line 1265 of file hubsm.cpp.

1267{
1268 if (Event != HubEvent::PortsResetReleased)
1269 return SmUnhandled();
1270
1271 switch (m_Teardown)
1272 {
1273 case Teardown::Fatal:
1275
1279 return SmTransition(&HubResetting);
1280
1281 default:
1283 }
1284}
static const State CheckingRecoveryLimit
Definition: hubsm.h:184

◆ OnProgrammingHubDepth()

SM_RESULT HubMachine::OnProgrammingHubDepth ( _In_ HubEvent  Event)
private

Definition at line 1847 of file hubsm.cpp.

1849{
1850 switch (Event)
1851 {
1852 case HubEvent::TransferDone:
1853 return SmReturn(HubEvent::CallSucceeded);
1854
1855 case HubEvent::TransferFailed:
1856 return SmReturn(HubEvent::CallFailed);
1857
1858 default:
1859 return SmUnhandled();
1860 }
1861}

◆ OnQueryingParentInfo()

SM_RESULT HubMachine::OnQueryingParentInfo ( _In_ HubEvent  Event)
private

Definition at line 334 of file hubsm.cpp.

336{
337 switch (Event)
338 {
339 case HubEvent::IoctlDone:
340 return SmTransition(&Configuring);
341
342 case HubEvent::IoctlFailed:
343 return FailStart(TRUE);
344
345 default:
346 return SmUnhandled();
347 }
348}
static const State Configuring
Definition: hubsm.h:151

◆ OnReadingConfigDescriptor()

SM_RESULT HubMachine::OnReadingConfigDescriptor ( _In_ HubEvent  Event)
private

Definition at line 1670 of file hubsm.cpp.

1672{
1673 switch (Event)
1674 {
1675 case HubEvent::TransferDone:
1677 {
1680 }
1681
1682 if (!CacheConfigDescriptor())
1683 return SmReturn(HubEvent::CallFailed);
1684
1686
1687 case HubEvent::TransferFailed:
1688 return SmReturn(HubEvent::CallFailed);
1689
1690 default:
1691 return SmUnhandled();
1692 }
1693}
static const State ReadingConfigDescriptor
Definition: hubsm.h:204
BOOLEAN CacheConfigDescriptor()
Definition: hubreq.cpp:489
BOOLEAN ConfigDescriptorTruncated()
Definition: hubreq.cpp:478
static const State UpdatingController
Definition: hubsm.h:205

◆ OnReadingHubDescriptor()

SM_RESULT HubMachine::OnReadingHubDescriptor ( _In_ HubEvent  Event)
private

Definition at line 1594 of file hubsm.cpp.

1596{
1597 switch (Event)
1598 {
1599 case HubEvent::TransferDone:
1600 if (!ParseHubDescriptor())
1601 return SmReturn(HubEvent::CallFailed);
1602
1604
1605 case HubEvent::TransferFailed:
1607 return SmReturn(HubEvent::CallFailed);
1608
1610
1611 default:
1612 return SmUnhandled();
1613 }
1614}
BOOLEAN DescriptorRetriesExhausted()
Definition: fdo.cpp:1380
static const State ReadingStandardStatus
Definition: hubsm.h:203
BOOLEAN ParseHubDescriptor()
Definition: hubreq.cpp:552
static const State AwaitingDescriptorRetry
Definition: hubsm.h:202

◆ OnReadingHubStatus()

SM_RESULT HubMachine::OnReadingHubStatus ( _In_ HubEvent  Event)
private

Definition at line 987 of file hubsm.cpp.

989{
990 switch (Event)
991 {
992 case HubEvent::TransferDone:
995
997 {
998 if (OverCurrentCleared())
1000
1001 return OverCurrentError();
1002 }
1003
1004 switch (SelectHubChange())
1005 {
1006 case HubCheck::Yes:
1007 AckHubChange();
1009
1010 case HubCheck::Error:
1011 return HandleHubStatusFault();
1012
1013 default:
1014 return SendInterrupt(TRUE);
1015 }
1016
1017 case HubEvent::TransferFailed:
1019 return OverCurrentError();
1020
1022
1023 default:
1024 return SmUnhandled();
1025 }
1026}
HubChange LostHubChange()
Definition: hubreq.cpp:639
VOID AckHubChange()
Definition: hubreq.cpp:348
static const State AckingHubChange
Definition: hubsm.h:174
HubCheck SelectHubChange()
Definition: hubreq.cpp:603
BOOLEAN OverCurrentCleared()
Definition: hubreq.cpp:645
SM_RESULT OverCurrentError()
Definition: hubsm.cpp:1080

◆ OnReadingPortStatus()

SM_RESULT HubMachine::OnReadingPortStatus ( _In_ HubEvent  Event)
private

Definition at line 947 of file hubsm.cpp.

949{
950 switch (Event)
951 {
952 case HubEvent::TransferDone:
955
956 case HubEvent::TransferFailed:
959
960 default:
961 return SmUnhandled();
962 }
963}
VOID ReplyPortStatus()
Definition: hubreq.cpp:818

◆ OnReadingRootHub20Ports()

SM_RESULT HubMachine::OnReadingRootHub20Ports ( _In_ HubEvent  Event)
private

Definition at line 1797 of file hubsm.cpp.

1799{
1800 switch (Event)
1801 {
1802 case HubEvent::IoctlDone:
1804
1805 case HubEvent::IoctlFailed:
1806 return SmReturn(HubEvent::CallFailed);
1807
1808 default:
1809 return SmUnhandled();
1810 }
1811}
static const State ReadingRootHub30Ports
Definition: hubsm.h:212

◆ OnReadingRootHub30Ports()

SM_RESULT HubMachine::OnReadingRootHub30Ports ( _In_ HubEvent  Event)
private

Definition at line 1821 of file hubsm.cpp.

1823{
1824 switch (Event)
1825 {
1826 case HubEvent::IoctlDone:
1827 return SmReturn(HubEvent::CallSucceeded);
1828
1829 case HubEvent::IoctlFailed:
1830 return SmReturn(HubEvent::CallFailed);
1831
1832 default:
1833 return SmUnhandled();
1834 }
1835}

◆ OnReadingRootHubInfo()

SM_RESULT HubMachine::OnReadingRootHubInfo ( _In_ HubEvent  Event)
private

Definition at line 1773 of file hubsm.cpp.

1775{
1776 switch (Event)
1777 {
1778 case HubEvent::IoctlDone:
1780
1781 case HubEvent::IoctlFailed:
1782 return SmReturn(HubEvent::CallFailed);
1783
1784 default:
1785 return SmUnhandled();
1786 }
1787}
static const State ReadingRootHub20Ports
Definition: hubsm.h:211

◆ OnReadingStandardStatus()

SM_RESULT HubMachine::OnReadingStandardStatus ( _In_ HubEvent  Event)
private

Definition at line 1641 of file hubsm.cpp.

1643{
1644 switch (Event)
1645 {
1646 case HubEvent::TransferDone:
1647 if (!ParsePowerStatus())
1648 return SmReturn(HubEvent::CallFailed);
1649
1652
1653 case HubEvent::TransferFailed:
1654 return SmReturn(HubEvent::CallFailed);
1655
1656 default:
1657 return SmUnhandled();
1658 }
1659}
BOOLEAN ParsePowerStatus()
Definition: hubreq.cpp:596

◆ OnReconfiguring()

SM_RESULT HubMachine::OnReconfiguring ( _In_ HubEvent  Event)
private

Definition at line 388 of file hubsm.cpp.

390{
391 switch (Event)
392 {
393 /* A restart reads the DROM again, as the first start does */
394 case HubEvent::CallSucceeded:
396
397 case HubEvent::CallFailed:
398 return FailStart(FALSE);
399
400 default:
401 return SmUnhandled();
402 }
403}

◆ OnReconfiguringAfterReset()

SM_RESULT HubMachine::OnReconfiguringAfterReset ( _In_ HubEvent  Event)
private

Definition at line 1396 of file hubsm.cpp.

1398{
1399 switch (Event)
1400 {
1401 case HubEvent::CallSucceeded:
1403
1404 case HubEvent::CallFailed:
1406
1407 default:
1408 return SmUnhandled();
1409 }
1410}

◆ OnReconfiguringAfterResume()

SM_RESULT HubMachine::OnReconfiguringAfterResume ( _In_ HubEvent  Event)
private

Definition at line 1446 of file hubsm.cpp.

1448{
1449 switch (Event)
1450 {
1451 case HubEvent::CallSucceeded:
1453
1454 case HubEvent::CallFailed:
1455 return ResumeResetFailed();
1456
1457 default:
1458 return SmUnhandled();
1459 }
1460}

◆ OnRecycleSuspended()

SM_RESULT HubMachine::OnRecycleSuspended ( _In_ HubEvent  Event)
private

Definition at line 1544 of file hubsm.cpp.

1546{
1547 if ((Event != HubEvent::D0Entry) && (Event != HubEvent::D0EntryFromSx))
1548 return SmUnhandled();
1549
1552 return SmTransition(&AwaitingStop);
1553}

◆ OnResettingOnResume()

SM_RESULT HubMachine::OnResettingOnResume ( _In_ HubEvent  Event)
private

Definition at line 1413 of file hubsm.cpp.

1415{
1416 switch (Event)
1417 {
1418 case HubEvent::ResetDone:
1420
1421 case HubEvent::ResetFailed:
1422 case HubEvent::ResetFailedOnRemoval:
1423 return ResumeResetFailed();
1424
1425 default:
1426 return SmUnhandled();
1427 }
1428}
static const State ReconfiguringAfterResume
Definition: hubsm.h:192

◆ OnResettingPipe()

SM_RESULT HubMachine::OnResettingPipe ( _In_ HubEvent  Event)
private

Definition at line 1099 of file hubsm.cpp.

1101{
1102 switch (Event)
1103 {
1104 case HubEvent::PipeResetDone:
1105 return SendInterrupt(FALSE);
1106
1107 case HubEvent::PipeResetFailed:
1109
1110 default:
1111 return SmUnhandled();
1112 }
1113}

◆ OnSettingConfiguration()

SM_RESULT HubMachine::OnSettingConfiguration ( _In_ HubEvent  Event)
private

Definition at line 1727 of file hubsm.cpp.

1729{
1730 switch (Event)
1731 {
1732 case HubEvent::ConfigurationSet:
1733 if (m_Kind == HubKind::Usb30)
1735
1736 return SmReturn(HubEvent::CallSucceeded);
1737
1738 case HubEvent::ConfigurationFailed:
1739 return SmReturn(HubEvent::CallFailed);
1740
1741 default:
1742 return SmUnhandled();
1743 }
1744}
static const State FinishingConfiguration
Definition: hubsm.h:207

◆ OnStopped()

SM_RESULT HubMachine::OnStopped ( _In_ HubEvent  Event)
private

Definition at line 692 of file hubsm.cpp.

694{
695 switch (Event)
696 {
697 case HubEvent::PrepareHardware:
699
700 case HubEvent::DeviceCleanup:
701 return SmTransition(&Deleted);
702
703 default:
704 return SmUnhandled();
705 }
706}
static const State Deleted
Definition: hubsm.h:167
static const State Reconfiguring
Definition: hubsm.h:152

◆ OnSurpriseRemoved()

SM_RESULT HubMachine::OnSurpriseRemoved ( _In_ HubEvent  Event)
private

Definition at line 754 of file hubsm.cpp.

756{
757 if (Event == HubEvent::DeviceCleanup)
758 return SmTransition(&Deleted);
759
760 return SmUnhandled();
761}

◆ OnSuspended()

SM_RESULT HubMachine::OnSuspended ( _In_ HubEvent  Event)
private

Definition at line 1515 of file hubsm.cpp.

1517{
1518 switch (Event)
1519 {
1520 case HubEvent::ResetRequested:
1522
1523 case HubEvent::PortStatusRequest:
1525 return SmHandled();
1526
1527 case HubEvent::D0Entry:
1530
1531 case HubEvent::D0EntryFromSx:
1533 if (WasResetByParent())
1535
1536 return CheckPowerLoss();
1537
1538 default:
1539 return SmUnhandled();
1540 }
1541}
BOOLEAN WasResetByParent()
Definition: upstream.cpp:400
static const State SuspendedResetPending
Definition: hubsm.h:197
SM_RESULT CheckPowerLoss()
Definition: hubsm.cpp:1464

◆ OnSuspendedResetPending()

SM_RESULT HubMachine::OnSuspendedResetPending ( _In_ HubEvent  Event)
private

Definition at line 1564 of file hubsm.cpp.

1566{
1567 if ((Event != HubEvent::D0Entry) && (Event != HubEvent::D0EntryFromSx))
1568 return SmUnhandled();
1569
1572}
#define VOID
Definition: acefi.h:82

◆ OnUnconfigured()

SM_RESULT HubMachine::OnUnconfigured ( _In_ HubEvent  Event)
private

Definition at line 306 of file hubsm.cpp.

308{
309 switch (Event)
310 {
311 case HubEvent::PrepareHardware:
312 /* The root hub has no parent to ask */
313 if (m_Kind == HubKind::Root)
314 return SmTransition(&Configuring);
315
317
318 case HubEvent::DeviceCleanup:
319 return SmTransition(&Deleted);
320
321 default:
322 return SmUnhandled();
323 }
324}
static const State QueryingParentInfo
Definition: hubsm.h:150

◆ OnUpdatingController()

SM_RESULT HubMachine::OnUpdatingController ( _In_ HubEvent  Event)
private

Definition at line 1703 of file hubsm.cpp.

1705{
1706 switch (Event)
1707 {
1708 case HubEvent::IoctlDone:
1710
1711 case HubEvent::IoctlFailed:
1712 return SmReturn(HubEvent::CallFailed);
1713
1714 default:
1715 return SmUnhandled();
1716 }
1717}
static const State SettingConfiguration
Definition: hubsm.h:206

◆ OverCurrentCleared()

BOOLEAN HubMachine::OverCurrentCleared ( )
private

Definition at line 645 of file hubreq.cpp.

646{
648}
#define HS_OVER_CURRENT
Definition: hubreq.h:147
USB_HUB_STATUS HubStatus
Definition: usb200.h:273
USHORT AsUshort16
Definition: usb200.h:249

Referenced by OnReadingHubStatus().

◆ OverCurrentError()

SM_RESULT HubMachine::OverCurrentError ( )
private

Definition at line 1080 of file hubsm.cpp.

1081{
1082 if (IsErrorFatal())
1084
1086}

Referenced by OnReadingHubStatus().

◆ ParseDromIdentity()

VOID HubMachine::ParseDromIdentity ( )
private

Finds the router identity entry of a version 1 DROM, bounds checking each entry.

Definition at line 201 of file hubdrom.cpp.

202{
204 const UCHAR* Drom = (const UCHAR*)m_Hub->m_DromPool;
205 const UCHAR* Entry;
208
209 if (Drom == NULL || Drom[DROM_VERSION_OFFSET] != 1)
210 return;
211
213 {
214 Entry = &Drom[Offset];
215
216 if (Entry[0] == 0)
217 {
218 DPRINT1("Hub %p router DROM has a zero length entry at %lu\n", m_Hub, Offset);
219 return;
220 }
221
222 if (Entry[0] > Length - Offset)
223 {
224 DPRINT1("Hub %p router DROM entry at %lu overruns the DROM\n", m_Hub, Offset);
225 return;
226 }
227
229 continue;
230
232 {
233 DPRINT1("Hub %p router DROM identity entry is only %u bytes\n", m_Hub, Entry[0]);
234 return;
235 }
236
237 /* QUIRK: a later read that fails keeps this identity */
242 Identity->Known = TRUE;
243
244 DPRINT("Hub %p router VID %04X PID %04X BCD %04X REV %04X\n",
245 m_Hub, Identity->VendorId, Identity->ProductId, Identity->BcdDevice, Identity->Revision);
246 return;
247 }
248
249 DPRINT1("Hub %p router DROM has no identity entry\n", m_Hub);
250}
HubRouterIdentity m_RouterIdentity
Definition: fdo.h:461
PLIST_ENTRY Entry
Definition: devhcd.cpp:1262
static GLfloat Identity[16]
Definition: matrix.c:127
#define DROM_FIRST_ENTRY
Definition: hubdrom.cpp:27
#define DROM_ENTRY_TYPE_MASK
Definition: hubdrom.cpp:30
#define DROM_IDENTITY_LENGTH
Definition: hubdrom.cpp:38
#define DROM_ENTRY_ADAPTER
Definition: hubdrom.cpp:29
#define DROM_IDENTITY_VENDOR
Definition: hubdrom.cpp:34
#define DROM_ENTRY_TYPE_IDENTITY
Definition: hubdrom.cpp:31
#define DROM_VERSION_OFFSET
Definition: hubdrom.cpp:24
#define DROM_IDENTITY_REVISION
Definition: hubdrom.cpp:37
#define DROM_IDENTITY_PRODUCT
Definition: hubdrom.cpp:35
#define DROM_ENTRY_HEADER
Definition: hubdrom.cpp:28
#define DROM_IDENTITY_BCD
Definition: hubdrom.cpp:36
if(dx< 0)
Definition: linetemp.h:194
_In_ ULONG _In_ ULONG Offset
Definition: ntddpcm.h:101

Referenced by FinishDrom().

◆ ParseHubDescriptor()

BOOLEAN HubMachine::ParseHubDescriptor ( )
private

Definition at line 552 of file hubreq.cpp.

553{
554 USHORT Characteristics;
555 ULONG OverCurrentMode;
556
557 switch (m_Hub->m_Parent.HubSpeed)
558 {
559 case UsbFullSpeed:
560 case UsbHighSpeed:
562 return FALSE;
563
566
567 if (Characteristics & 0x0001)
568 m_Hub->SetFlag(HubFlag::PerPortPower);
569 if (Characteristics & 0x0008)
570 m_Hub->SetFlag(HubFlag::PerPortOverCurrent);
571 return TRUE;
572
573 case UsbSuperSpeed:
575 return FALSE;
576
579 OverCurrentMode = (Characteristics >> 3) & 0x3;
580
581 if (Characteristics & 0x0001)
582 m_Hub->SetFlag(HubFlag::PerPortPower);
583 if (OverCurrentMode == 1)
584 m_Hub->SetFlag(HubFlag::PerPortOverCurrent);
585 else if (OverCurrentMode >= 2)
586 m_Hub->SetFlag(HubFlag::NoOverCurrentProtection);
587 return TRUE;
588
589 default:
590 DPRINT1("Hub %p of speed %lu has no hub descriptor to parse\n", m_Hub, (ULONG)m_Hub->m_Parent.HubSpeed);
591 return FALSE;
592 }
593}
VOID SetFlag(_In_ HubFlag Flag)
Definition: fdo.h:160
ULONG m_PortCount
Definition: fdo.h:379
BOOLEAN NTAPI HubCheckUsb2HubDescriptor(_In_ HubFdo *Hub, _In_reads_bytes_(Length) PUSB_HUB_DESCRIPTOR Descriptor, _In_ ULONG Length)
Definition: hubdescval.cpp:59
BOOLEAN NTAPI HubCheckUsb3HubDescriptor(_In_ HubFdo *Hub, _In_reads_bytes_(Length) PUSB_30_HUB_DESCRIPTOR Descriptor, _In_ ULONG Length)
Definition: hubdescval.cpp:72
USHORT wHubCharacteristics
Definition: usb300.h:288
USHORT wHubCharacteristics
Definition: usb100.h:174
UCHAR bNumberOfPorts
Definition: usb100.h:173

Referenced by OnReadingHubDescriptor().

◆ ParsePowerStatus()

BOOLEAN HubMachine::ParsePowerStatus ( )
private

Definition at line 596 of file hubreq.cpp.

597{
599 return TRUE;
600}
ULONG m_MaxPortPower
Definition: fdo.h:384
USHORT SelfPowered
Definition: usb300.h:82

Referenced by OnReadingStandardStatus().

◆ PendingHubChange()

HubChange HubMachine::PendingHubChange ( )
private

Definition at line 632 of file hubreq.cpp.

633{
634 return m_Hub->m_SelectedChange;
635}
HubChange m_SelectedChange
Definition: fdo.h:428

Referenced by OnAckingHubChange().

◆ PipeResetLimitReached()

BOOLEAN HubMachine::PipeResetLimitReached ( )
private

Definition at line 1369 of file fdo.cpp.

1370{
1372 return FALSE;
1373
1374 DPRINT1("Hub %p interrupt pipe reset limit reached\n", m_Hub->m_Device);
1375 return TRUE;
1376}

Referenced by OnListening().

◆ PortInterruptRefsReleased()

BOOLEAN HubMachine::PortInterruptRefsReleased ( )
private

Definition at line 859 of file fanout.cpp.

860{
862}
BOOLEAN PortInterruptRefsReleased()
Definition: fanout.cpp:472

Referenced by QuiesceWithInterrupt(), and QuiesceWithoutInterrupt().

◆ QueryControllerInfo()

VOID HubMachine::QueryControllerInfo ( )
private

Definition at line 150 of file ucxlink.cpp.

151{
152 /* A hub with the full size stack interface gets the 8 byte aligned layout */
154}
UCXHUB_CONTROLLER_INFO_V2 m_ControllerInfo
Definition: fdo.h:371
UCXHUB_STACK_INTERFACE m_Stack
Definition: fdo.h:356
PFN_UCXHUB_CONTROLLER_GET_INFO QueryControllerBus
Definition: hubucx.h:456

Referenced by EnterConfiguring(), and EnterReadingRootHubInfo().

◆ QueryErrataFlags()

VOID HubMachine::QueryErrataFlags ( )
private

Definition at line 825 of file hubregistry.cpp.

826{
829
830 if (m_Hub->IsRootHub())
832 else
834
835 HubQueryVerifierFlags(&m_Hub->m_ParentInfo.DeviceDescriptor, &Ids, L"hub", &m_Hub->m_VerifierFlags);
836
837 Status = HubQueryHubErrata(m_Hub, &Ids);
838 if (!NT_SUCCESS(Status))
839 DPRINT1("Hub %p usbflags query failed 0x%lx\n", m_Hub, Status);
840}
ULONG m_VerifierFlags
Definition: fdo.h:443
_In_ const HubIdStrings * Ids
VOID NTAPI HubFormatIdStrings(_In_ const USB_DEVICE_DESCRIPTOR *Descriptor, _Out_ HubIdStrings *Ids)
Definition: hubregistry.cpp:59
static VOID NTAPI HubFormatControllerIds(_In_ const UCXHUB_CONTROLLER_INFO_V2 *Info, _Out_ HubIdStrings *Ids)
Definition: hubregistry.cpp:72
USB_DEVICE_DESCRIPTOR DeviceDescriptor
Definition: fdo.h:89

Referenced by EnterQueryingErrata().

◆ QueueFakeStatusChangeToPorts()

VOID HubMachine::QueueFakeStatusChangeToPorts ( )
private

Definition at line 926 of file fanout.cpp.

927{
929}
VOID QueueFakeStatusChangeToPorts()
Definition: fanout.cpp:425

Referenced by OnDevicesAcquiring().

◆ QueuePassiveWork()

VOID HubMachine::QueuePassiveWork ( )
private

Definition at line 1202 of file fdo.cpp.

1203{
1205}
static UCXHUB_WORKITEM_ROUTINE MachineWorkItem
Definition: fdo.h:541
VOID EnqueueWorkItem(_In_ PUCXHUB_WORKITEM WorkItem, _In_ PUCXHUB_WORKITEM_ROUTINE Routine, _In_ PVOID Context, _In_ BOOLEAN ForwardProgress)
Definition: fdo.cpp:54
PUCXHUB_WORKITEM m_WorkItem
Definition: fdo.h:411
BOOLEAN m_NeedsForwardProgress
Definition: fdo.h:412

Referenced by SmQueuePassive().

◆ QueueResetToPorts()

VOID HubMachine::QueueResetToPorts ( )
private

Definition at line 914 of file fanout.cpp.

915{
917}
VOID QueueResetToPorts()
Definition: fanout.cpp:361

Referenced by OnPortsReleasing().

◆ QueueResumeInS0ToDevices()

VOID HubMachine::QueueResumeInS0ToDevices ( )
private

Definition at line 962 of file fanout.cpp.

963{
964 m_Hub->QueuePowerUpToDevices(DsmEvent::HubResumedInS0);
965}
VOID QueuePowerUpToDevices(_In_ DsmEvent Event)
Definition: fanout.cpp:733

Referenced by OnPortsAcquiring().

◆ QueueResumeInS0ToPorts()

VOID HubMachine::QueueResumeInS0ToPorts ( )
private

Definition at line 884 of file fanout.cpp.

885{
886 m_Hub->QueuePowerUpToPorts(PortEvent::HubResumedInS0);
887}
VOID QueuePowerUpToPorts(_In_ PortEvent Event)
Definition: fanout.cpp:269

Referenced by StartPowerUp().

◆ QueueResumeToDevices()

VOID HubMachine::QueueResumeToDevices ( )
private

Definition at line 956 of file fanout.cpp.

957{
958 m_Hub->QueuePowerUpToDevices(DsmEvent::HubResumed);
959}

Referenced by OnPortsAcquiring().

◆ QueueResumeToPorts()

VOID HubMachine::QueueResumeToPorts ( )
private

Definition at line 878 of file fanout.cpp.

879{
880 m_Hub->QueuePowerUpToPorts(PortEvent::HubResumed);
881}

Referenced by StartPowerUp().

◆ QueueResumeWithResetToDevices()

VOID HubMachine::QueueResumeWithResetToDevices ( )
private

Definition at line 968 of file fanout.cpp.

969{
970 m_Hub->QueuePowerUpToDevices(DsmEvent::HubResumedWithReset);
971}

Referenced by OnPortsAcquiring(), and ResumeResetFailed().

◆ QueueResumeWithResetToPorts()

VOID HubMachine::QueueResumeWithResetToPorts ( )
private

Definition at line 890 of file fanout.cpp.

891{
892 m_Hub->QueuePowerUpToPorts(PortEvent::HubResumedWithReset);
893}

Referenced by StartPowerUp().

◆ QueueStartToDevices()

VOID HubMachine::QueueStartToDevices ( )
private

Definition at line 950 of file fanout.cpp.

951{
952 m_Hub->QueuePowerUpToDevices(DsmEvent::HubStarted);
953}

Referenced by OnPortsAcquiring().

◆ QueueStartToPorts()

VOID HubMachine::QueueStartToPorts ( )
private

Definition at line 871 of file fanout.cpp.

872{
874 m_Hub->QueuePowerUpToPorts(PortEvent::HubStarted);
875}
#define InterlockedExchange
Definition: armddk.h:54
HubMux m_Mux
Definition: fdo.h:407
volatile LONG HubResetInProgress
Definition: fdo.h:82

Referenced by StartPowerUp().

◆ QueueStatusChangeToPorts()

VOID HubMachine::QueueStatusChangeToPorts ( )
private

Definition at line 920 of file fanout.cpp.

921{
923}
VOID QueueStatusChangeToPorts()
Definition: fanout.cpp:385

Referenced by OnListening().

◆ QueueStopAfterSuspendToDevices()

VOID HubMachine::QueueStopAfterSuspendToDevices ( )
private

Definition at line 944 of file fanout.cpp.

945{
946 m_Hub->QueuePowerDownToDevices(DsmEvent::HubStoppingAfterSuspend, HubDeviceFanOut::StopWhileSuspended);
947}
VOID QueuePowerDownToDevices(_In_ DsmEvent Event, _In_ HubDeviceFanOut FanOut)
Definition: fanout.cpp:676

Referenced by OnAsleep().

◆ QueueStopToDevices()

VOID HubMachine::QueueStopToDevices ( )
private

Definition at line 932 of file fanout.cpp.

933{
934 m_Hub->QueuePowerDownToDevices(DsmEvent::HubStopping, HubDeviceFanOut::PowerDown);
935}

Referenced by AfterInterruptQuiet(), and OnAwaitingStop().

◆ QueueStopToPorts()

VOID HubMachine::QueueStopToPorts ( )
private

Definition at line 896 of file fanout.cpp.

897{
899}
VOID QueueStopToPorts()
Definition: fanout.cpp:300

Referenced by AfterInterruptQuiet(), OnDevicesAcquiring(), and OnDevicesReleasing().

◆ QueueSurpriseRemovalToPorts()

VOID HubMachine::QueueSurpriseRemovalToPorts ( )
private

Definition at line 908 of file fanout.cpp.

909{
911}
VOID QueueSurpriseRemovalToPorts()
Definition: fanout.cpp:351

Referenced by QuiesceWithInterrupt(), and QuiesceWithoutInterrupt().

◆ QueueSuspendToDevices()

VOID HubMachine::QueueSuspendToDevices ( )
private

Definition at line 938 of file fanout.cpp.

939{
940 m_Hub->QueuePowerDownToDevices(DsmEvent::HubSuspending, HubDeviceFanOut::PowerDown);
941}

Referenced by AfterInterruptQuiet().

◆ QueueSuspendToPorts()

VOID HubMachine::QueueSuspendToPorts ( )
private

Definition at line 902 of file fanout.cpp.

903{
905}
VOID QueueSuspendToPorts()
Definition: fanout.cpp:329

Referenced by OnDevicesReleasing().

◆ QuiesceWithInterrupt()

SM_RESULT HubMachine::QuiesceWithInterrupt ( _In_ Teardown  Reason)
private

Definition at line 1119 of file hubsm.cpp.

1121{
1123
1126
1128
1129 if (!released)
1131
1134}
BOOLEAN PortInterruptRefsReleased()
Definition: fanout.cpp:859
VOID QueueSurpriseRemovalToPorts()
Definition: fanout.cpp:908
static const State DrainingInterruptRefs
Definition: hubsm.h:177
PVOID PVOID PWCHAR PVOID USHORT PULONG Reason
Definition: env.c:47

Referenced by OnListening().

◆ QuiesceWithoutInterrupt()

◆ ReadDromRegister()

VOID HubMachine::ReadDromRegister ( _In_ USHORT  Register)
private

Definition at line 134 of file hubdrom.cpp.

136{
138}
static VOID NTAPI HubMailboxTransfer(_In_ HubFdo *Hub, _In_ BOOLEAN Write, _In_ USHORT Register)
Definition: hubdrom.cpp:75
Config Register
Definition: hubwmi.cpp:126

Referenced by EnterDromReadingFirstStatus(), EnterDromReadingStatus(), and EnterDromReadingWord().

◆ ReadPortStatus()

SM_RESULT HubMachine::ReadPortStatus ( _In_ const State *  ReturnTo)
private

Definition at line 938 of file hubsm.cpp.

940{
942 m_PortStatusReturn = ReturnTo;
944}
static const State ReadingPortStatus
Definition: hubsm.h:172
VOID GetPortStatus()
Definition: hubreq.cpp:790

Referenced by OnListening(), and OnNotListening().

◆ ReadStatus()

SM_RESULT HubMachine::ReadStatus ( _In_ StatusRead  Purpose)
private

Definition at line 978 of file hubsm.cpp.

980{
981 GetHubStatus();
982 m_StatusRead = Purpose;
984}
VOID GetHubStatus()
Definition: hubreq.cpp:397
static const State ReadingHubStatus
Definition: hubsm.h:173

◆ RecoveryLimitReached()

BOOLEAN HubMachine::RecoveryLimitReached ( )
private

Definition at line 1391 of file fdo.cpp.

1392{
1394
1396
1398 {
1401 return FALSE;
1402 }
1403
1405 return FALSE;
1406
1407 DPRINT1("Hub %p too many resets in a minute\n", m_Hub->m_Device);
1409 return TRUE;
1410}
ULONG m_RecoveryCount
Definition: fdo.h:435
ULONG m_FailureMessageId
Definition: fdo.h:402
LARGE_INTEGER m_FirstRecoveryTime
Definition: fdo.h:437
#define KeQuerySystemTime(t)
Definition: env_spec_w32.h:570
struct tm * Now
Definition: output.c:19
LONGLONG QuadPart
Definition: typedefs.h:114
#define HUB_MSG_HUB_RESET_FAILED
Definition: fdo.cpp:27
#define HUB_RECOVERY_LIMIT
Definition: fdo.cpp:23
#define HUB_RECOVERY_WINDOW
Definition: fdo.cpp:24

Referenced by EnterCheckingRecoveryLimit().

◆ ReferenceHub()

VOID HubMachine::ReferenceHub ( )
private

Definition at line 1190 of file fdo.cpp.

1191{
1193}
#define WdfObjectReference(Handle)
Definition: wdfobject.h:803

Referenced by SmReference().

◆ ReleaseDromBuffer()

VOID HubMachine::ReleaseDromBuffer ( )
private

Definition at line 178 of file hubdrom.cpp.

Referenced by FinishDrom().

◆ ReleasePowerReference()

VOID HubMachine::ReleasePowerReference ( )
private

Definition at line 1216 of file fdo.cpp.

1217{
1219}
VOID ReleasePowerReference()
Definition: fdo.cpp:123

Referenced by OnAwaitingStop(), OnNotListening(), and SendInterrupt().

◆ ReplyPortStatus()

VOID HubMachine::ReplyPortStatus ( )
private

Definition at line 818 of file hubreq.cpp.

819{
821 USHORT Status = Port->m_Current.StatusChange.PortStatus.AsUshort16;
822 USHORT Change = Port->m_Current.StatusChange.PortChange.AsUshort16;
825 WDFMEMORY Memory;
827 PULONG Bits;
828 HubPdo* Pdo;
829
830 switch (Params.Parameters.DeviceIoControl.IoControlCode)
831 {
833 Result = WdfRequestRetrieveOutputMemory(Request, &Memory);
834 if (!NT_SUCCESS(Result))
835 {
836 DPRINT1("Hub %p port %u status output buffer missing 0x%lx\n", m_Hub, Port->Number(), Result);
837 WdfRequestComplete(Request, Result);
838 return;
839 }
840
841 *(PUSHORT)((PUCHAR)WdfMemoryGetBuffer(Memory, NULL) + HUB_USER_PORT_STATUS_OFFSET) = Status;
843 return;
844
846 Bits = (PULONG)Params.Parameters.Others.Arg1;
847 Pdo = (HubPdo*)Params.Parameters.Others.Arg2;
849
850 if (Status & PS_CONNECTED)
851 *Bits |= USBD_PORT_CONNECTED;
852 else
854
855 if (Status & PS_ENABLED)
856 {
857 if (Pdo->m_Flags & (LONG)PdoFlag::ReportPortDisabled)
858 InterlockedAnd(&Pdo->m_Flags, ~(LONG)PdoFlag::ReportPortDisabled);
859 else
860 *Bits |= USBD_PORT_ENABLED;
861 }
862
863 if (Change & PC_CONNECT)
865
866 if (!NT_SUCCESS(Result))
867 {
868 DPRINT1("Hub %p port %u status 0x%x change 0x%x reported as no device\n",
869 m_Hub, Port->Number(), Status, Change);
870 }
871
872 WdfRequestComplete(Request, Result);
873 return;
874
875 default:
876 DPRINT1("Hub %p port status request with IOCTL 0x%lx\n",
877 m_Hub, Params.Parameters.DeviceIoControl.IoControlCode);
878 WdfRequestComplete(Request, STATUS_ADAPTER_HARDWARE_ERROR);
879 return;
880 }
881}
#define HUB_USER_PORT_STATUS_SIZE
Definition: hubreq.cpp:287
#define HUB_USER_PORT_STATUS_OFFSET
Definition: hubreq.cpp:286
#define PC_CONNECT
Definition: hubreq.h:136
#define PS_CONNECTED
Definition: hubreq.h:126
#define PS_ENABLED
Definition: hubreq.h:127
_In_ UCXUSBDEVICE _In_ PDEVICE_OBJECT Pdo
Definition: hubucx.h:280
#define InterlockedAnd
Definition: interlocked.h:77
long LONG
Definition: pedump.c:60
#define STATUS_SUCCESS
Definition: shellext.h:65
uint16_t * PUSHORT
Definition: typedefs.h:56
unsigned char * PUCHAR
Definition: typedefs.h:53
#define IOCTL_USB_GET_PORT_STATUS
Definition: usbioctl.h:672
#define USBD_PORT_ENABLED
Definition: usbioctl.h:41
#define USBD_PORT_CONNECTED
Definition: usbioctl.h:42
WdfRequestCompleteWithInformation(Request, STATUS_SUCCESS, ActualLength)
_Must_inspect_result_ _In_opt_ PWDF_OBJECT_ATTRIBUTES _In_ _Strict_type_match_ POOL_TYPE _In_opt_ ULONG _In_ _Out_ WDFMEMORY * Memory
Definition: wdfmemory.h:169

Referenced by OnReadingPortStatus(), and OnSuspended().

◆ ReportFailureToPnp()

VOID HubMachine::ReportFailureToPnp ( )
private

Definition at line 1241 of file fdo.cpp.

1242{
1243 DPRINT1("Hub %p failed in state %s, message 0x%lx\n",
1245
1246 if (m_Hub->m_FailureMessageId != 0)
1247 HubReportPnpProblem(m_Hub->m_Device, m_Hub->m_FailureMessageId);
1248
1249 WdfDeviceSetFailed(m_Hub->m_Device, WdfDeviceFailedNoRestart);
1250}
const State * SmCurrent() const
Definition: smengine.h:130
LPWSTR Name
Definition: desk.c:124
@ WdfDeviceFailedNoRestart
Definition: wdfdevice.h:470

Referenced by EnterReportingFailure().

◆ ResetHub()

VOID HubMachine::ResetHub ( )
private

Definition at line 301 of file upstream.cpp.

302{
303 WDFREQUEST Request;
304
306 {
307 m_Hub->Post(HubEvent::ResetFailed);
308 return;
309 }
310
311 m_Hub->m_ResetFlags = 0;
312 DPRINT("Hub %p asking parent for a reset\n", m_Hub);
313
315 {
317 m_Hub->Post(HubEvent::ResetFailed);
318 }
319}
ULONG m_ResetFlags
Definition: fdo.h:364
#define IOCTL_UCXHUB_RESET_PORT_ASYNC
Definition: hubucx.h:78
static EVT_WDF_REQUEST_COMPLETION_ROUTINE HubResetComplete
Definition: upstream.cpp:24

Referenced by EnterHubResetting().

◆ ResetLimitReached()

BOOLEAN HubMachine::ResetLimitReached ( )
private

Definition at line 1356 of file fdo.cpp.

1357{
1359
1361 return FALSE;
1362
1363 DPRINT1("Hub %p reset failed %lu times\n", m_Hub->m_Device, (ULONG)Previous + 1);
1365 return TRUE;
1366}

Referenced by OnAwaitingResetRetry().

◆ ResetStatusChangePipe()

VOID HubMachine::ResetStatusChangePipe ( )
private

Definition at line 247 of file upstream.cpp.

248{
250
251 RtlZeroMemory(Urb, sizeof(*Urb));
252 Urb->Hdr.Length = sizeof(*Urb);
254 Urb->Hdr.UsbdDeviceHandle = m_Hub->UsbDevice();
255 Urb->PipeHandle = m_Hub->m_Interrupt.Pipe;
256
258 {
260 m_Hub->Post(HubEvent::PipeResetFailed);
261 }
262}
struct _URB_PIPE_REQUEST m_PipeUrb
Definition: fdo.h:365
WDFREQUEST Request
Definition: hubreq.h:19
USBD_PIPE_HANDLE Pipe
Definition: hubreq.h:72
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:262
static EVT_WDF_REQUEST_COMPLETION_ROUTINE HubPipeResetComplete
Definition: upstream.cpp:23
#define URB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALL
Definition: usb.h:116
_In_opt_ PUSB_CONFIGURATION_DESCRIPTOR _Inout_ PUSBD_INTERFACE_LIST_ENTRY _Outptr_ PURB * Urb
Definition: usbdlib.h:333
#define IOCTL_INTERNAL_USB_SUBMIT_URB
Definition: usbioctl.h:32

Referenced by OnListening().

◆ ResumeResetFailed()

SM_RESULT HubMachine::ResumeResetFailed ( )
private

Definition at line 1431 of file hubsm.cpp.

Referenced by OnReconfiguringAfterResume(), and OnResettingOnResume().

◆ SelectHubChange()

HubCheck HubMachine::SelectHubChange ( )
private

Definition at line 603 of file hubreq.cpp.

604{
607
609 {
610 DPRINT1("Hub %p over current change, hub status 0x%x\n", m_Hub, Status);
611 HubNoteHubOverCurrent(m_Hub);
612 m_Hub->m_SelectedChange = (Status & HS_OVER_CURRENT) ? HubChange::OverCurrent : HubChange::OverCurrentCleared;
614 return HubCheck::Yes;
615 }
616
618 {
619 DPRINT("Hub %p local power change, hub status 0x%x\n", m_Hub, Status);
620 m_Hub->m_SelectedChange = (Status & HS_LOCAL_POWER_LOST) ? HubChange::PowerLost : HubChange::PowerGood;
622 return HubCheck::Yes;
623 }
624
625 if (Change != 0)
626 DPRINT1("Hub %p reports unknown hub change 0x%x\n", m_Hub, Change);
627
628 return (Change != 0) ? HubCheck::Error : HubCheck::No;
629}
#define HUB_C_LOCAL_POWER
Definition: hubreq.h:94
#define HUB_C_OVER_CURRENT
Definition: hubreq.h:95
#define HS_LOCAL_POWER_LOST
Definition: hubreq.h:146
USHORT AsUshort16
Definition: usb200.h:260
USB_HUB_CHANGE HubChange
Definition: usb200.h:274

Referenced by OnReadingHubStatus().

◆ SelectHubConfiguration()

VOID HubMachine::SelectHubConfiguration ( )
private

Definition at line 128 of file upstream.cpp.

129{
132 WDFREQUEST Request = NULL;
133 PURB Urb = NULL;
134
136 if (Interface == NULL ||
137 Interface->bInterfaceClass != HUB_CLASS_CODE ||
138 Interface->bNumEndpoints == 0)
139 {
140 DPRINT1("Hub %p has no usable hub interface\n", m_Hub);
141 goto Failed;
142 }
143
144 RtlZeroMemory(List, sizeof(List));
145 List[0].InterfaceDescriptor = Interface;
146
148 if (Urb == NULL)
149 {
150 DPRINT1("Hub %p select configuration URB not built\n", m_Hub);
151 goto Failed;
152 }
153
154 DPRINT("Hub %p selecting interface %u protocol %u\n",
155 m_Hub, Interface->bInterfaceNumber, Interface->bInterfaceProtocol);
156
158 goto Failed;
159
161 return;
162
163Failed:
164 if (Request != NULL)
166 if (Urb != NULL)
168
169 m_Hub->Post(HubEvent::ConfigurationFailed);
170}
#define ExFreePool(addr)
Definition: env_spec_w32.h:352
Definition: usb.h:565
Definition: usbdlib.h:7
_In_ UCXUSBDEVICE _In_ ULONG Interface
Definition: ucxusbdevice.h:428
#define HUB_CLASS_CODE
Definition: upstream.cpp:14
static EVT_WDF_REQUEST_COMPLETION_ROUTINE HubConfigurationComplete
Definition: upstream.cpp:22
static PUSB_INTERFACE_DESCRIPTOR NTAPI HubFindHubInterface(_In_ HubFdo *Hub)
Definition: upstream.cpp:88
PURB NTAPI USBD_CreateConfigurationRequestEx(PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor, PUSBD_INTERFACE_LIST_ENTRY InterfaceList)
Definition: usbd.c:311
_Must_inspect_result_ _In_ WDFCMRESLIST List
Definition: wdfresource.h:550

Referenced by EnterSettingConfiguration().

◆ SendInterrupt()

SM_RESULT HubMachine::SendInterrupt ( _In_ BOOLEAN  ClearPipeResets)
private

Definition at line 966 of file hubsm.cpp.

968{
971 if (ClearPipeResets)
973
974 return SmTransition(&Listening);
975}
VOID ClearPipeResetCount()
Definition: fdo.cpp:1344
VOID StartStatusChangeRead()
Definition: hubreq.cpp:705

Referenced by HandleHubChange(), HandleHubStatusFault(), OnNotListening(), OnReadingHubStatus(), and OnResettingPipe().

◆ SetHubDepth()

VOID HubMachine::SetHubDepth ( )
private

Definition at line 408 of file hubreq.cpp.

409{
411 DPRINT("Hub %p setting hub depth %lu\n", m_Hub, (ULONG)m_Hub->m_Parent.HubDepth - 1);
413}
#define HUB_REQUEST_SET_HUB_DEPTH
Definition: hubreq.h:91

Referenced by EnterProgrammingHubDepth().

◆ SignalPnpEvent()

VOID HubMachine::SignalPnpEvent ( )
private

Definition at line 1222 of file fdo.cpp.

1223{
1224 DPRINT("Hub %p PnP event done in %s\n", m_Hub->m_Device, SmCurrent()->Name);
1225
1228}
KEVENT m_PnpEvent
Definition: fdo.h:388
NTSTATUS m_PnpStatus
Definition: fdo.h:389
#define KeSetEvent(pEvt, foo, foo2)
Definition: env_spec_w32.h:476
#define IO_NO_INCREMENT
Definition: iotypes.h:598

Referenced by EnterSignalPnp(), OnAwaitingAddDevice(), OnAwaitingD0(), OnAwaitingReleaseAfterFailure(), OnAwaitingReleaseHardware(), OnAwaitingStop(), OnDevicesAcquiring(), OnPortsAcquiring(), OnPortsReleasing(), OnPortsResetting(), and OnRecycleSuspended().

◆ SignalPnpFailure()

VOID HubMachine::SignalPnpFailure ( )
private

Definition at line 1231 of file fdo.cpp.

1232{
1233 DPRINT1("Hub %p start failed in state %s, depth %lu\n",
1235
1238}
#define STATUS_UNSUCCESSFUL
Definition: udferr_usr.h:132

Referenced by FailStart().

◆ SmDereference()

VOID HubMachine::SmDereference ( )
private

Definition at line 281 of file hubsm.cpp.

282{
284}
VOID DereferenceHub()
Definition: fdo.cpp:1196

◆ SmQueuePassive()

VOID HubMachine::SmQueuePassive ( )
private

Definition at line 287 of file hubsm.cpp.

288{
290}
VOID QueuePassiveWork()
Definition: fdo.cpp:1202

◆ SmReference()

VOID HubMachine::SmReference ( )
private

Definition at line 275 of file hubsm.cpp.

276{
277 ReferenceHub();
278}
VOID ReferenceHub()
Definition: fdo.cpp:1190

◆ StartDescriptorRetryTimer()

VOID HubMachine::StartDescriptorRetryTimer ( )
private

Definition at line 1330 of file fdo.cpp.

1331{
1333}
#define HUB_DESCRIPTOR_RETRY_TIME
Definition: fdo.cpp:16

Referenced by EnterAwaitingDescriptorRetry().

◆ StartDromOrSkip()

SM_RESULT HubMachine::StartDromOrSkip ( _In_ const State *  Next)
private

Reads the router DROM through the vendor mailbox; no failure here fails the start.

Definition at line 473 of file hubsm.cpp.

475{
477
478 if (!IsDromReadWanted())
479 return SmTransition(Next);
480
482 m_DromIndex = 0;
485
487}
BOOLEAN IsDromReadWanted()
Definition: hubdrom.cpp:114
static const State DromReadingFirstStatus
Definition: hubsm.h:154
VOID UseDromHeaderBuffer()
Definition: hubdrom.cpp:150
static const ULONG HubDromHeaderWords
Definition: hubsm.cpp:27
PACPI_METHOD_ARGUMENT Next
Definition: slotdev.cpp:96

Referenced by OnConfiguring(), and OnReconfiguring().

◆ StartDromWords()

SM_RESULT HubMachine::StartDromWords ( )
private

The DWORD count is rounded up from the total size, not from the length field.

Definition at line 600 of file hubsm.cpp.

601{
604
606 {
607 DPRINT1("Hub %p router DROM length %lu is too short\n", m_Hub, DataLength);
608 return FinishDrom();
609 }
610
613 return FinishDrom();
614
616 m_DromIndex = 0;
617 m_DromWords = (TotalBytes + sizeof(ULONG) - 1) / sizeof(ULONG);
619}
ULONG DromDataLength()
Definition: hubdrom.cpp:126
BOOLEAN AllocateDromBuffer(_In_ ULONG Length)
Definition: hubdrom.cpp:158
_In_ D3DDDI_VIDEO_PRESENT_TARGET_ID _In_ ULONG _In_ ULONG DataLength
Definition: dispmprt.h:233
static const ULONG HubDromMinimumLength
Definition: hubsm.cpp:31
static const ULONG HubDromLengthBias
Definition: hubsm.cpp:30
_Must_inspect_result_ _In_ PHYSICAL_ADDRESS _In_ PHYSICAL_ADDRESS _In_ SIZE_T TotalBytes
Definition: mmfuncs.h:228

Referenced by StoreDromWordAndContinue().

◆ StartHubConfiguration()

SM_RESULT HubMachine::StartHubConfiguration ( )
private

Definition at line 406 of file hubsm.cpp.

407{
410}
VOID InitializeDescriptorRetries()
Definition: fdo.cpp:1350

Referenced by EnterConfiguring(), and EnterReconfiguring().

◆ StartPowerUp()

SM_RESULT HubMachine::StartPowerUp ( _In_ PowerUp  Kind)
private

Definition at line 766 of file hubsm.cpp.

768{
769 switch (Kind)
770 {
771 case PowerUp::Resume:
773 break;
774
777 break;
778
782 break;
783
784 default:
787 break;
788 }
789
790 m_PowerUp = Kind;
792}
static const State PortsAcquiring
Definition: hubsm.h:168
VOID QueueResumeToPorts()
Definition: fanout.cpp:878
VOID AllowHubReset()
Definition: fanout.cpp:865
VOID QueueStartToPorts()
Definition: fanout.cpp:871
VOID QueueResumeInS0ToPorts()
Definition: fanout.cpp:884
VOID QueueResumeWithResetToPorts()
Definition: fanout.cpp:890

Referenced by CallHubDepthOr(), CheckPowerLoss(), OnAwaitingD0(), OnCheckingPowerLoss(), OnReconfiguringAfterReset(), OnReconfiguringAfterResume(), and OnSuspended().

◆ StartStatusChangeRead()

VOID HubMachine::StartStatusChangeRead ( )
private

Definition at line 705 of file hubreq.cpp.

706{
711
713 WdfRequestReuse(Interrupt->Request, &Reuse);
714
715 RtlZeroMemory(&Interrupt->Urb, sizeof(Interrupt->Urb));
716 Interrupt->Urb.Hdr.Length = sizeof(Interrupt->Urb);
718 Interrupt->Urb.Hdr.UsbdDeviceHandle = m_Hub->UsbDevice();
719 Interrupt->Urb.TransferFlags = USBD_SHORT_TRANSFER_OK;
721 Interrupt->Urb.TransferFlags |= USB3_URB_RESERVED_RESOURCES;
722
723 Interrupt->Urb.TransferBuffer = Interrupt->BitmapBuffer;
724 Interrupt->Urb.TransferBufferLength = m_Hub->IsRootHub() ? Interrupt->BitmapMaxBytes : m_Hub->m_InterruptMaxPacket;
725 Interrupt->Urb.PipeHandle = Interrupt->Pipe;
726
727 if (Interrupt->LastInterruptWasEmpty)
728 {
729 Interrupt->Urb.Hdr.UsbdFlags |= UCXHUB_URB_FLAG_PEND_INTERRUPT_TX;
730 Interrupt->LastInterruptWasEmpty = FALSE;
731 }
732
733 RtlZeroMemory(&Stack, sizeof(Stack));
735 Stack.Parameters.DeviceIoControl.IoControlCode = IOCTL_INTERNAL_USB_SUBMIT_URB;
736 Stack.Parameters.Others.Argument1 = &Interrupt->Urb;
737 WdfRequestWdmFormatUsingStackLocation(Interrupt->Request, &Stack);
738
739 WdfRequestSetCompletionRoutine(Interrupt->Request, HubInterruptComplete, m_Hub);
740
741 if (WdfRequestSend(Interrupt->Request, WdfDeviceGetIoTarget(m_Hub->m_Device), WDF_NO_SEND_OPTIONS))
742 return;
743
744 /* A refused send with a success status posts nothing */
745 Status = WdfRequestGetStatus(Interrupt->Request);
746 WdfRequestReuse(Interrupt->Request, &Reuse);
747
748 if (!NT_SUCCESS(Status))
749 {
750 DPRINT1("Hub %p status change read not sent 0x%lx\n", m_Hub, Status);
751 m_Hub->Post(HubEvent::InterruptFailed);
752 }
753}
USHORT m_InterruptMaxPacket
Definition: fdo.h:429
return pRequest Reuse(ReuseParams)
static EVT_WDF_REQUEST_COMPLETION_ROUTINE HubInterruptComplete
Definition: hubreq.cpp:290
#define USB3_URB_RESERVED_RESOURCES
Definition: hubreq.cpp:15
#define UCXHUB_URB_FLAG_PEND_INTERRUPT_TX
Definition: hubucx.h:100
#define USBD_SHORT_TRANSFER_OK
Definition: usb.h:161
#define URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER
Definition: usb.h:95
_Must_inspect_result_ FORCEINLINE BOOLEAN WdfRequestSend(_In_ WDFREQUEST Request, _In_ WDFIOTARGET Target, _In_opt_ PWDF_REQUEST_SEND_OPTIONS Options)
Definition: wdfrequest.h:677
@ WDF_REQUEST_REUSE_NO_FLAGS
Definition: wdfrequest.h:92
_In_ WDFREQUEST _In_ PIO_STACK_LOCATION Stack
Definition: wdfrequest.h:639
FORCEINLINE VOID WDF_REQUEST_REUSE_PARAMS_INIT(_Out_ PWDF_REQUEST_REUSE_PARAMS Params, _In_ ULONG Flags, _In_ NTSTATUS Status)
Definition: wdfrequest.h:364
#define WDF_NO_SEND_OPTIONS
Definition: wdftypes.h:109
#define IRP_MJ_INTERNAL_DEVICE_CONTROL

Referenced by SendInterrupt().

◆ StoreDromWord()

VOID HubMachine::StoreDromWord ( _In_ ULONG  Index)
private

Definition at line 189 of file hubdrom.cpp.

191{
194}
#define NT_ASSERT
Definition: rtlfuncs.h:3334

Referenced by StoreDromWordAndContinue().

◆ StoreDromWordAndContinue()

SM_RESULT HubMachine::StoreDromWordAndContinue ( )
private

Definition at line 640 of file hubsm.cpp.

641{
643 m_DromIndex += 1;
644
647
649 return StartDromWords();
650
653
654 return FinishDrom();
655}
SM_RESULT StartDromWords()
The DWORD count is rounded up from the total size, not from the length field.
Definition: hubsm.cpp:600
VOID StoreDromWord(_In_ ULONG Index)
Definition: hubdrom.cpp:189

Referenced by OnDromReadingWord().

◆ UpdateControllerHubInfo()

VOID HubMachine::UpdateControllerHubInfo ( )
private

Definition at line 421 of file ucxlink.cpp.

422{
424 PUSBDEVICE_HUB_INFO Payload;
425 WDFMEMORY PayloadMemory;
426 WDFREQUEST Request;
428
430 {
431 m_Hub->Post(HubEvent::IoctlFailed);
432 return;
433 }
434
436 Attributes.ParentObject = Request;
437
438 if (!NT_SUCCESS(WdfMemoryCreate(&Attributes,
441 sizeof(*Payload),
442 &PayloadMemory,
443 (PVOID*)&Payload)))
444 {
445 DPRINT1("Hub %p no memory for the UCX hub info request\n", m_Hub);
447 m_Hub->Post(HubEvent::IoctlFailed);
448 return;
449 }
450
451 RtlZeroMemory(Payload, sizeof(*Payload));
452 Payload->Header.Size = sizeof(*Payload);
453 Payload->Header.Hub = m_Hub->UsbDevice();
454 Payload->Header.UsbDevice = m_Hub->UsbDevice();
455 Payload->NumberOfPorts = Ports;
456
458 {
459 m_Hub->SetFlag(HubFlag::TtHub);
460 Payload->NumberOfTTs = 1;
461
463 {
464 m_Hub->SetFlag(HubFlag::MultiTtHub);
465 Payload->NumberOfTTs = Ports;
466 }
467
468 Payload->TTThinkTime = (m_Hub->m_HubDescriptor.Usb20.wHubCharacteristics >> 5) & 0x3;
469 }
470
471 DPRINT("Hub %p telling UCX of %lu ports, %lu TTs\n", m_Hub, Ports, (ULONG)Payload->NumberOfTTs);
475 Payload,
476 Request,
478}
#define IOCTL_UCXHUB_DEVICE_HUB_INFO
Definition: hubucx.h:57
static PS2_PORT Ports[PS2_PORTS]
Definition: ps2.c:52

Referenced by EnterUpdatingController().

◆ UseDromHeaderBuffer()

VOID HubMachine::UseDromHeaderBuffer ( )
private

Definition at line 150 of file hubdrom.cpp.

Referenced by StartDromOrSkip().

◆ WasResetByParent()

BOOLEAN HubMachine::WasResetByParent ( )
private

Definition at line 400 of file upstream.cpp.

401{
403
405 return FALSE;
406
408 {
409 DPRINT("Hub %p lost controller programming on resume\n", m_Hub);
411 }
412
413 return TRUE;
414}
VOID MarkDevicesProgrammingLost()
Definition: fanout.cpp:840
_In_ PIRP _In_ PIO_COMPLETION_ROUTINE _In_ PVOID Context
Definition: kse.h:81
PVOID Context
Definition: miniport.h:123
PFN_UCXHUB_WAS_HUB_RESET ParentResetDuringResume
Definition: hubucx.h:507
PFN_UCXHUB_WAS_PROGRAMMING_LOST ParentLostStateDuringResume
Definition: hubucx.h:508

Referenced by OnSuspended(), and OnSuspendedResetPending().

◆ WriteDromRegister()

VOID HubMachine::WriteDromRegister ( _In_ USHORT  Register,
_In_ ULONG  Value 
)
private

Definition at line 141 of file hubdrom.cpp.

144{
147}
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
Definition: wdfregistry.h:413

Referenced by EnterDromSendingCommand(), and EnterDromWritingMetadata().

Friends And Related Function Documentation

◆ SmMachine< HubMachine, HubEvent >

friend class SmMachine< HubMachine, HubEvent >
friend

Definition at line 1 of file hubsm.h.

Member Data Documentation

◆ AckingHubChange

const M::State M::AckingHubChange
staticprivate
Initial value:
=
{ NULL, "AckingHubChange", 0, &M::OnAckingHubChange, NULL }
SM_RESULT OnAckingHubChange(_In_ HubEvent Event)
Definition: hubsm.cpp:1029

Definition at line 174 of file hubsm.h.

Referenced by OnReadingHubStatus().

◆ Asleep

const M::State M::Asleep
staticprivate
Initial value:
=
{ NULL, "Asleep", HSM_REQ, &M::OnAsleep, NULL }
SM_RESULT OnAsleep(_In_ HubEvent Event)
Definition: hubsm.cpp:1493
#define HSM_REQ
Definition: hubsm.cpp:79

Definition at line 194 of file hubsm.h.

◆ AwaitingAddDevice

const M::State M::AwaitingAddDevice
staticprivate
Initial value:
=
{ NULL, "AwaitingAddDevice", HSM_REQ, &M::OnAwaitingAddDevice, NULL }
SM_RESULT OnAwaitingAddDevice(_In_ HubEvent Event)
Definition: hubsm.cpp:295

Definition at line 148 of file hubsm.h.

Referenced by Initialize().

◆ AwaitingD0

const M::State M::AwaitingD0
staticprivate
Initial value:
=
SM_RESULT EnterSignalPnp()
Definition: hubsm.cpp:437
SM_RESULT OnAwaitingD0(_In_ HubEvent Event)
Definition: hubsm.cpp:444

Definition at line 160 of file hubsm.h.

Referenced by EnterQueryingErrata(), EnterReconfiguring(), and OnReconfiguring().

◆ AwaitingDescriptorRetry

const M::State M::AwaitingDescriptorRetry
staticprivate
Initial value:
=
{ NULL, "AwaitingDescriptorRetry", 0,
SM_RESULT OnAwaitingDescriptorRetry(_In_ HubEvent Event)
Definition: hubsm.cpp:1624
SM_RESULT EnterAwaitingDescriptorRetry()
Definition: hubsm.cpp:1617

Definition at line 202 of file hubsm.h.

Referenced by OnReadingHubDescriptor().

◆ AwaitingInterruptEnable

const M::State M::AwaitingInterruptEnable
staticprivate
Initial value:
=
{ NULL, "AwaitingInterruptEnable", 0, &M::OnAwaitingInterruptEnable, NULL }
SM_RESULT OnAwaitingInterruptEnable(_In_ HubEvent Event)
Definition: hubsm.cpp:1211

Definition at line 180 of file hubsm.h.

Referenced by OnNotListening().

◆ AwaitingInterruptRefs

const M::State M::AwaitingInterruptRefs
staticprivate
Initial value:
=
{ NULL, "AwaitingInterruptRefs", 0, &M::OnAwaitingInterruptRefs, NULL }
SM_RESULT OnAwaitingInterruptRefs(_In_ HubEvent Event)
Definition: hubsm.cpp:1201

Definition at line 179 of file hubsm.h.

Referenced by OnDrainingInterruptRefs(), and QuiesceWithoutInterrupt().

◆ AwaitingOverCurrentTimer

const M::State M::AwaitingOverCurrentTimer
staticprivate
Initial value:
=
{ NULL, "AwaitingOverCurrentTimer", 0, &M::OnAwaitingOverCurrentTimer, NULL }
SM_RESULT OnAwaitingOverCurrentTimer(_In_ HubEvent Event)
Definition: hubsm.cpp:1089

Definition at line 175 of file hubsm.h.

Referenced by HandleHubChange().

◆ AwaitingReleaseAfterFailure

const M::State M::AwaitingReleaseAfterFailure
staticprivate
Initial value:
=
{ &Down, "AwaitingReleaseAfterFailure", 0, &M::OnAwaitingReleaseAfterFailure, NULL }
static const State Down
Definition: hubsm.h:161
SM_RESULT OnAwaitingReleaseAfterFailure(_In_ HubEvent Event)
Definition: hubsm.cpp:720

Definition at line 164 of file hubsm.h.

Referenced by FailStart().

◆ AwaitingReleaseHardware

const M::State M::AwaitingReleaseHardware
staticprivate
Initial value:
=
{ &Down, "AwaitingReleaseHardware", 0, &M::OnAwaitingReleaseHardware,
SM_RESULT OnAwaitingReleaseHardware(_In_ HubEvent Event)
Definition: hubsm.cpp:709
static const HubEvent ResetDiscards[]
Definition: hubsm.h:217

Definition at line 163 of file hubsm.h.

Referenced by OnDevicesReleasing(), and OnPortsReleasing().

◆ AwaitingResetRetry

const M::State M::AwaitingResetRetry
staticprivate
Initial value:
=
{ NULL, "AwaitingResetRetry", 0, &M::OnAwaitingResetRetry, NULL }
SM_RESULT OnAwaitingResetRetry(_In_ HubEvent Event)
Definition: hubsm.cpp:1355

Definition at line 189 of file hubsm.h.

Referenced by EnterLoggingReset(), and OnHubResetting().

◆ AwaitingStop

const M::State M::AwaitingStop
staticprivate
Initial value:
=
{ &Down, "AwaitingStop", 0, &M::OnAwaitingStop, NULL, ResetDiscards }
SM_RESULT OnAwaitingStop(_In_ HubEvent Event)
Definition: hubsm.cpp:732

Definition at line 165 of file hubsm.h.

Referenced by EnterReportingFailure(), and OnRecycleSuspended().

◆ AwaitingStopAfterSuspend

const M::State M::AwaitingStopAfterSuspend
staticprivate
Initial value:
=
{ NULL, "AwaitingStopAfterSuspend", 0, &M::OnAwaitingStopAfterSuspend, NULL }
SM_RESULT OnAwaitingStopAfterSuspend(_In_ HubEvent Event)
Definition: hubsm.cpp:1575

Definition at line 198 of file hubsm.h.

Referenced by OnAsleep().

◆ CancelingInterrupt

const M::State M::CancelingInterrupt
staticprivate
Initial value:
=
{ NULL, "CancelingInterrupt", 0, &M::OnCancelingInterrupt, NULL }
SM_RESULT OnCancelingInterrupt(_In_ HubEvent Event)
Definition: hubsm.cpp:1191

Definition at line 178 of file hubsm.h.

Referenced by OnDrainingInterruptRefs(), and QuiesceWithInterrupt().

◆ CheckingPowerLoss

const M::State M::CheckingPowerLoss
staticprivate
Initial value:
=
{ NULL, "CheckingPowerLoss", 0, &M::OnCheckingPowerLoss, NULL }
SM_RESULT OnCheckingPowerLoss(_In_ HubEvent Event)
Definition: hubsm.cpp:1474

Definition at line 193 of file hubsm.h.

Referenced by CheckPowerLoss().

◆ CheckingRecoveryLimit

const M::State M::CheckingRecoveryLimit
staticprivate
Initial value:
=
{ NULL, "CheckingRecoveryLimit", HSM_PASSIVE, NULL, &M::EnterCheckingRecoveryLimit }
SM_RESULT EnterCheckingRecoveryLimit()
Definition: hubsm.cpp:1287
#define HSM_PASSIVE
Definition: hubsm.cpp:80

Definition at line 184 of file hubsm.h.

Referenced by OnPortsResetting().

◆ Configuring

const M::State M::Configuring
staticprivate
Initial value:
=
{ NULL, "Configuring", 0, &M::OnConfiguring, &M::EnterConfiguring }
SM_RESULT EnterConfiguring()
Definition: hubsm.cpp:351
SM_RESULT OnConfiguring(_In_ HubEvent Event)
Definition: hubsm.cpp:362

Definition at line 151 of file hubsm.h.

Referenced by OnQueryingParentInfo(), and OnUnconfigured().

◆ Deleted

const M::State M::Deleted
staticprivate
Initial value:
=
{ NULL, "Deleted", 0, NULL, &M::EnterSignalPnp }

Definition at line 167 of file hubsm.h.

Referenced by OnStopped(), OnSurpriseRemoved(), and OnUnconfigured().

◆ DevicesAcquiring

const M::State M::DevicesAcquiring
staticprivate
Initial value:
=
{ NULL, "DevicesAcquiring", 0, &M::OnDevicesAcquiring, NULL }
SM_RESULT OnDevicesAcquiring(_In_ HubEvent Event)
Definition: hubsm.cpp:829

Definition at line 169 of file hubsm.h.

Referenced by OnPortsAcquiring(), and ResumeResetFailed().

◆ DevicesReleasing

const M::State M::DevicesReleasing
staticprivate
Initial value:
=
{ NULL, "DevicesReleasing", 0, &M::OnDevicesReleasing, NULL }
SM_RESULT OnDevicesReleasing(_In_ HubEvent Event)
Definition: hubsm.cpp:1221

Definition at line 181 of file hubsm.h.

Referenced by AfterInterruptQuiet(), and OnAwaitingStop().

◆ Down

const M::State M::Down
staticprivate
Initial value:
=
{ NULL, "Down", HSM_REQ, &M::OnDown, NULL }
SM_RESULT OnDown(_In_ HubEvent Event)
Definition: hubsm.cpp:674

Definition at line 161 of file hubsm.h.

◆ DrainingInterruptRefs

const M::State M::DrainingInterruptRefs
staticprivate
Initial value:
=
{ NULL, "DrainingInterruptRefs", 0, &M::OnDrainingInterruptRefs, NULL }
SM_RESULT OnDrainingInterruptRefs(_In_ HubEvent Event)
Definition: hubsm.cpp:1172

Definition at line 177 of file hubsm.h.

Referenced by QuiesceWithInterrupt().

◆ DromRead

const M::State M::DromRead
staticprivate
Initial value:
=
{ NULL, "DromRead", 0, &M::OnDromRead, NULL }
SM_RESULT OnDromRead(_In_ HubEvent Event)
Definition: hubsm.cpp:490

Definition at line 153 of file hubsm.h.

◆ DromReadingFirstStatus

const M::State M::DromReadingFirstStatus
staticprivate
Initial value:
=
{ &DromRead, "DromReadingFirstStatus", HSM_PASSIVE,
static const State DromRead
Definition: hubsm.h:153
SM_RESULT EnterDromReadingFirstStatus()
Definition: hubsm.cpp:501
SM_RESULT OnDromReadingFirstStatus(_In_ HubEvent Event)
Definition: hubsm.cpp:508

Definition at line 154 of file hubsm.h.

Referenced by StartDromOrSkip().

◆ DromReadingStatus

const M::State M::DromReadingStatus
staticprivate
Initial value:
=
{ &DromRead, "DromReadingStatus", HSM_PASSIVE,
SM_RESULT EnterDromReadingStatus()
Definition: hubsm.cpp:565
SM_RESULT OnDromReadingStatus(_In_ HubEvent Event)
Definition: hubsm.cpp:572

Definition at line 157 of file hubsm.h.

Referenced by CheckDromStatus(), and OnDromSendingCommand().

◆ DromReadingWord

const M::State M::DromReadingWord
staticprivate
Initial value:
=
{ &DromRead, "DromReadingWord", HSM_PASSIVE,
SM_RESULT EnterDromReadingWord()
Definition: hubsm.cpp:622
SM_RESULT OnDromReadingWord(_In_ HubEvent Event)
Definition: hubsm.cpp:629

Definition at line 158 of file hubsm.h.

Referenced by CheckDromStatus(), and StoreDromWordAndContinue().

◆ DromSendingCommand

const M::State M::DromSendingCommand
staticprivate
Initial value:
=
{ &DromRead, "DromSendingCommand", HSM_PASSIVE,
SM_RESULT OnDromSendingCommand(_In_ HubEvent Event)
Definition: hubsm.cpp:554
SM_RESULT EnterDromSendingCommand()
Definition: hubsm.cpp:547

Definition at line 156 of file hubsm.h.

Referenced by OnDromWritingMetadata().

◆ DromWritingMetadata

const M::State M::DromWritingMetadata
staticprivate
Initial value:
=
{ &DromRead, "DromWritingMetadata", HSM_PASSIVE,
SM_RESULT EnterDromWritingMetadata()
Definition: hubsm.cpp:527
SM_RESULT OnDromWritingMetadata(_In_ HubEvent Event)
Definition: hubsm.cpp:537

Definition at line 155 of file hubsm.h.

Referenced by OnDromReadingFirstStatus(), StartDromWords(), and StoreDromWordAndContinue().

◆ EventInfo

const SM_EVENT_INFO HubMachine::EventInfo
static

Definition at line 105 of file hubsm.h.

◆ FinishingConfiguration

const M::State M::FinishingConfiguration
staticprivate
Initial value:
=
{ NULL, "FinishingConfiguration", 0,
SM_RESULT EnterFinishingConfiguration()
Definition: hubsm.cpp:1747
SM_RESULT OnFinishingConfiguration(_In_ HubEvent Event)
Definition: hubsm.cpp:1753

Definition at line 207 of file hubsm.h.

Referenced by OnSettingConfiguration().

◆ Halted

const M::State M::Halted
staticprivate
Initial value:
=
{ NULL, "Halted", 0, NULL, &M::EnterHalted }
SM_RESULT EnterHalted()
Definition: hubsm.cpp:1309

Definition at line 186 of file hubsm.h.

Referenced by EnterCheckingRecoveryLimit().

◆ HubResetting

const M::State M::HubResetting
staticprivate
Initial value:
=
SM_RESULT OnHubResetting(_In_ HubEvent Event)
Definition: hubsm.cpp:1325
SM_RESULT EnterHubResetting()
Definition: hubsm.cpp:1318

Definition at line 187 of file hubsm.h.

Referenced by EnterCheckingRecoveryLimit(), OnAwaitingResetRetry(), and OnPortsResetting().

◆ Listening

const M::State M::Listening
staticprivate
Initial value:
=
{ NULL, "Listening", HSM_REQ, &M::OnListening, NULL }
SM_RESULT OnListening(_In_ HubEvent Event)
Definition: hubsm.cpp:859

Definition at line 170 of file hubsm.h.

Referenced by OnListening(), and SendInterrupt().

◆ LoggingReset

const M::State M::LoggingReset
staticprivate
Initial value:
=
{ NULL, "LoggingReset", HSM_PASSIVE, NULL, &M::EnterLoggingReset }
SM_RESULT EnterLoggingReset()
Definition: hubsm.cpp:1346

Definition at line 188 of file hubsm.h.

Referenced by OnHubResetting().

◆ m_DromIndex

◆ m_DromNext

const State* HubMachine::m_DromNext
private

Definition at line 586 of file hubsm.h.

Referenced by FinishDrom(), Initialize(), and StartDromOrSkip().

◆ m_DromPhase

DromPhase HubMachine::m_DromPhase
private

◆ m_DromPollStart

ULONGLONG HubMachine::m_DromPollStart
private

Definition at line 582 of file hubsm.h.

Referenced by CheckDromStatus(), Initialize(), and OnDromSendingCommand().

◆ m_DromWords

ULONG HubMachine::m_DromWords
private

◆ m_FullConfigRead

BOOLEAN HubMachine::m_FullConfigRead
private

◆ m_Hub

HubFdo* HubMachine::m_Hub
private

Definition at line 574 of file hubsm.h.

Referenced by AckHubChange(), AcquirePowerReference(), AllocateDromBuffer(), AllowHubReset(), ArmOverCurrentTimer(), ArmResetRetryTimer(), BugcheckBootHub(), CacheConfigDescriptor(), CancelStatusChangeRead(), CheckDromStatus(), CheckHubChangeBit(), ClearPipeResetCount(), ConfigDescriptorTruncated(), CreateChildPorts(), DereferenceHub(), DescriptorRetriesExhausted(), DromDataLength(), FailPortStatus(), GetConfigDescriptor(), GetHubDescriptor(), GetHubStatus(), GetParentInfo(), GetPortStatus(), GetRootHub20Ports(), GetRootHub30Ports(), GetRootHubInfo(), GetStandardStatus(), Hub(), Initialize(), InitializeDescriptorRetries(), InitializeResetCount(), IsDepthZero(), IsDromReadWanted(), IsInBootPath(), LogResetOnResume(), LogResetRecovery(), MailboxValue(), OnDromReadingFirstStatus(), OverCurrentCleared(), ParseDromIdentity(), ParseHubDescriptor(), ParsePowerStatus(), PendingHubChange(), PipeResetLimitReached(), PortInterruptRefsReleased(), QueryControllerInfo(), QueryErrataFlags(), QueueFakeStatusChangeToPorts(), QueuePassiveWork(), QueueResetToPorts(), QueueResumeInS0ToDevices(), QueueResumeInS0ToPorts(), QueueResumeToDevices(), QueueResumeToPorts(), QueueResumeWithResetToDevices(), QueueResumeWithResetToPorts(), QueueStartToDevices(), QueueStartToPorts(), QueueStatusChangeToPorts(), QueueStopAfterSuspendToDevices(), QueueStopToDevices(), QueueStopToPorts(), QueueSurpriseRemovalToPorts(), QueueSuspendToDevices(), QueueSuspendToPorts(), ReadDromRegister(), RecoveryLimitReached(), ReferenceHub(), ReleaseDromBuffer(), ReleasePowerReference(), ReplyPortStatus(), ReportFailureToPnp(), ResetHub(), ResetLimitReached(), ResetStatusChangePipe(), SelectHubChange(), SelectHubConfiguration(), SetHubDepth(), SignalPnpEvent(), SignalPnpFailure(), StartDescriptorRetryTimer(), StartDromWords(), StartStatusChangeRead(), StoreDromWord(), UpdateControllerHubInfo(), UseDromHeaderBuffer(), WasResetByParent(), and WriteDromRegister().

◆ m_Kind

◆ m_PortStatusReturn

const State* HubMachine::m_PortStatusReturn
private

Definition at line 579 of file hubsm.h.

Referenced by Initialize(), OnReadingPortStatus(), and ReadPortStatus().

◆ m_PowerUp

PowerUp HubMachine::m_PowerUp
private

◆ m_ReleaseToUnconfigured

BOOLEAN HubMachine::m_ReleaseToUnconfigured
private

Definition at line 580 of file hubsm.h.

Referenced by FailStart(), Initialize(), and OnAwaitingReleaseAfterFailure().

◆ m_StatusRead

StatusRead HubMachine::m_StatusRead
private

Definition at line 578 of file hubsm.h.

Referenced by Initialize(), OnReadingHubStatus(), and ReadStatus().

◆ m_Teardown

◆ NotListening

const M::State M::NotListening
staticprivate
Initial value:
=
{ NULL, "NotListening", HSM_REQ, &M::OnNotListening, NULL }
SM_RESULT OnNotListening(_In_ HubEvent Event)
Definition: hubsm.cpp:907

Definition at line 171 of file hubsm.h.

Referenced by Initialize(), OnDevicesAcquiring(), OnListening(), and OnNotListening().

◆ PortsAcquiring

const M::State M::PortsAcquiring
staticprivate
Initial value:
=
{ NULL, "PortsAcquiring", 0, &M::OnPortsAcquiring, NULL }
SM_RESULT OnPortsAcquiring(_In_ HubEvent Event)
Definition: hubsm.cpp:795

Definition at line 168 of file hubsm.h.

Referenced by StartPowerUp().

◆ PortsReleasing

const M::State M::PortsReleasing
staticprivate
Initial value:
=
{ NULL, "PortsReleasing", 0, &M::OnPortsReleasing, NULL }
SM_RESULT OnPortsReleasing(_In_ HubEvent Event)
Definition: hubsm.cpp:1243

Definition at line 182 of file hubsm.h.

Referenced by AfterInterruptQuiet(), OnDevicesAcquiring(), and OnDevicesReleasing().

◆ PortsResetting

const M::State M::PortsResetting
staticprivate
Initial value:
=
{ NULL, "PortsResetting", 0, &M::OnPortsResetting, NULL }
SM_RESULT OnPortsResetting(_In_ HubEvent Event)
Definition: hubsm.cpp:1265

Definition at line 183 of file hubsm.h.

Referenced by OnPortsReleasing().

◆ ProgrammingHubDepth

const M::State M::ProgrammingHubDepth
staticprivate
Initial value:
=
{ NULL, "ProgrammingHubDepth", 0, &M::OnProgrammingHubDepth, &M::EnterProgrammingHubDepth }
SM_RESULT OnProgrammingHubDepth(_In_ HubEvent Event)
Definition: hubsm.cpp:1847
SM_RESULT EnterProgrammingHubDepth()
Definition: hubsm.cpp:1840

Definition at line 215 of file hubsm.h.

Referenced by CallHubDepthOr(), and EnterFinishingConfiguration().

◆ QueryingErrata

const M::State M::QueryingErrata
staticprivate
Initial value:
=
{ NULL, "QueryingErrata", HSM_PASSIVE, NULL, &M::EnterQueryingErrata }
SM_RESULT EnterQueryingErrata()
Definition: hubsm.cpp:426

Definition at line 159 of file hubsm.h.

Referenced by Initialize(), and OnConfiguring().

◆ QueryingParentInfo

const M::State M::QueryingParentInfo
staticprivate
Initial value:
=
{ NULL, "QueryingParentInfo", 0, &M::OnQueryingParentInfo, &M::EnterQueryingParentInfo }
SM_RESULT EnterQueryingParentInfo()
Definition: hubsm.cpp:327
SM_RESULT OnQueryingParentInfo(_In_ HubEvent Event)
Definition: hubsm.cpp:334

Definition at line 150 of file hubsm.h.

Referenced by OnUnconfigured().

◆ ReadingConfigDescriptor

const M::State M::ReadingConfigDescriptor
staticprivate
Initial value:
=
{ NULL, "ReadingConfigDescriptor", 0,
SM_RESULT OnReadingConfigDescriptor(_In_ HubEvent Event)
Definition: hubsm.cpp:1670
SM_RESULT EnterReadingConfigDescriptor()
Definition: hubsm.cpp:1662

Definition at line 204 of file hubsm.h.

Referenced by OnReadingConfigDescriptor(), and OnReadingStandardStatus().

◆ ReadingHubDescriptor

const M::State M::ReadingHubDescriptor
staticprivate
Initial value:
=
{ NULL, "ReadingHubDescriptor", 0, &M::OnReadingHubDescriptor, &M::EnterReadingHubDescriptor }
SM_RESULT EnterReadingHubDescriptor()
Definition: hubsm.cpp:1587
SM_RESULT OnReadingHubDescriptor(_In_ HubEvent Event)
Definition: hubsm.cpp:1594

Definition at line 201 of file hubsm.h.

Referenced by OnAwaitingDescriptorRetry(), and StartHubConfiguration().

◆ ReadingHubStatus

const M::State M::ReadingHubStatus
staticprivate
Initial value:
=
{ NULL, "ReadingHubStatus", 0, &M::OnReadingHubStatus, NULL }
SM_RESULT OnReadingHubStatus(_In_ HubEvent Event)
Definition: hubsm.cpp:987

Definition at line 173 of file hubsm.h.

Referenced by ReadStatus().

◆ ReadingPortStatus

const M::State M::ReadingPortStatus
staticprivate
Initial value:
=
{ NULL, "ReadingPortStatus", HSM_CRIT, &M::OnReadingPortStatus, NULL }
SM_RESULT OnReadingPortStatus(_In_ HubEvent Event)
Definition: hubsm.cpp:947
#define HSM_CRIT
Definition: hubsm.cpp:81

Definition at line 172 of file hubsm.h.

Referenced by ReadPortStatus().

◆ ReadingRootHub20Ports

const M::State M::ReadingRootHub20Ports
staticprivate
Initial value:
=
{ NULL, "ReadingRootHub20Ports", 0,
SM_RESULT OnReadingRootHub20Ports(_In_ HubEvent Event)
Definition: hubsm.cpp:1797
SM_RESULT EnterReadingRootHub20Ports()
Definition: hubsm.cpp:1790

Definition at line 211 of file hubsm.h.

Referenced by OnReadingRootHubInfo().

◆ ReadingRootHub30Ports

const M::State M::ReadingRootHub30Ports
staticprivate
Initial value:
=
{ NULL, "ReadingRootHub30Ports", 0,
SM_RESULT EnterReadingRootHub30Ports()
Definition: hubsm.cpp:1814
SM_RESULT OnReadingRootHub30Ports(_In_ HubEvent Event)
Definition: hubsm.cpp:1821

Definition at line 212 of file hubsm.h.

Referenced by OnReadingRootHub20Ports().

◆ ReadingRootHubInfo

const M::State M::ReadingRootHubInfo
staticprivate
Initial value:
=
{ NULL, "ReadingRootHubInfo", 0, &M::OnReadingRootHubInfo, &M::EnterReadingRootHubInfo }
SM_RESULT EnterReadingRootHubInfo()
Definition: hubsm.cpp:1765
SM_RESULT OnReadingRootHubInfo(_In_ HubEvent Event)
Definition: hubsm.cpp:1773

Definition at line 210 of file hubsm.h.

Referenced by EnterConfiguring().

◆ ReadingStandardStatus

const M::State M::ReadingStandardStatus
staticprivate
Initial value:
=
{ NULL, "ReadingStandardStatus", 0,
SM_RESULT EnterReadingStandardStatus()
Definition: hubsm.cpp:1634
SM_RESULT OnReadingStandardStatus(_In_ HubEvent Event)
Definition: hubsm.cpp:1641

Definition at line 203 of file hubsm.h.

Referenced by OnReadingHubDescriptor().

◆ Reconfiguring

const M::State M::Reconfiguring
staticprivate
Initial value:
=
{ NULL, "Reconfiguring", 0, &M::OnReconfiguring, &M::EnterReconfiguring }
SM_RESULT EnterReconfiguring()
Definition: hubsm.cpp:379
SM_RESULT OnReconfiguring(_In_ HubEvent Event)
Definition: hubsm.cpp:388

Definition at line 152 of file hubsm.h.

Referenced by OnStopped().

◆ ReconfiguringAfterReset

const M::State M::ReconfiguringAfterReset
staticprivate
Initial value:
=
{ NULL, "ReconfiguringAfterReset", HSM_PASSIVE,
SM_RESULT EnterReconfiguringAfterReset()
Definition: hubsm.cpp:1389
SM_RESULT OnReconfiguringAfterReset(_In_ HubEvent Event)
Definition: hubsm.cpp:1396

Definition at line 190 of file hubsm.h.

Referenced by OnHubResetting().

◆ ReconfiguringAfterResume

const M::State M::ReconfiguringAfterResume
staticprivate
Initial value:
=
{ NULL, "ReconfiguringAfterResume", 0,
SM_RESULT EnterReconfiguringAfterResume()
Definition: hubsm.cpp:1440
SM_RESULT OnReconfiguringAfterResume(_In_ HubEvent Event)
Definition: hubsm.cpp:1446

Definition at line 192 of file hubsm.h.

Referenced by OnResettingOnResume(), and OnSuspended().

◆ RecycleSuspended

const M::State M::RecycleSuspended
staticprivate
Initial value:
=
{ &Asleep, "RecycleSuspended", 0, &M::OnRecycleSuspended, NULL }
static const State Asleep
Definition: hubsm.h:194
SM_RESULT OnRecycleSuspended(_In_ HubEvent Event)
Definition: hubsm.cpp:1544

Definition at line 196 of file hubsm.h.

Referenced by OnAwaitingStop().

◆ ReportingFailure

const M::State M::ReportingFailure
staticprivate
Initial value:
=
{ NULL, "ReportingFailure", HSM_PASSIVE, NULL, &M::EnterReportingFailure }
SM_RESULT EnterReportingFailure()
Definition: hubsm.cpp:1302

Definition at line 185 of file hubsm.h.

Referenced by EnterCheckingRecoveryLimit(), OnAwaitingResetRetry(), and OnPortsResetting().

◆ ResetDiscards

const HubEvent HubMachine::ResetDiscards = { HubEvent::ResetRequested, HubEvent::Count }
staticprivate

Definition at line 217 of file hubsm.h.

◆ ResettingOnResume

const M::State M::ResettingOnResume
staticprivate
Initial value:
=
{ NULL, "ResettingOnResume", 0, &M::OnResettingOnResume, &M::EnterHubResetting }
SM_RESULT OnResettingOnResume(_In_ HubEvent Event)
Definition: hubsm.cpp:1413

Definition at line 191 of file hubsm.h.

Referenced by OnCheckingPowerLoss(), and OnSuspendedResetPending().

◆ ResettingPipe

const M::State M::ResettingPipe
staticprivate
Initial value:
=
{ NULL, "ResettingPipe", HSM_CRIT, &M::OnResettingPipe, NULL }
SM_RESULT OnResettingPipe(_In_ HubEvent Event)
Definition: hubsm.cpp:1099

Definition at line 176 of file hubsm.h.

Referenced by OnListening().

◆ SettingConfiguration

const M::State M::SettingConfiguration
staticprivate
Initial value:
=
{ NULL, "SettingConfiguration", 0,
SM_RESULT EnterSettingConfiguration()
Definition: hubsm.cpp:1720
SM_RESULT OnSettingConfiguration(_In_ HubEvent Event)
Definition: hubsm.cpp:1727

Definition at line 206 of file hubsm.h.

Referenced by OnUpdatingController().

◆ SmCompletionsFirst

const BOOLEAN HubMachine::SmCompletionsFirst = FALSE
staticprivate

Definition at line 145 of file hubsm.h.

◆ Stopped

const M::State M::Stopped
staticprivate
Initial value:
=
{ &Down, "Stopped", 0, &M::OnStopped, NULL }
SM_RESULT OnStopped(_In_ HubEvent Event)
Definition: hubsm.cpp:692

Definition at line 162 of file hubsm.h.

Referenced by OnAwaitingD0(), OnAwaitingReleaseAfterFailure(), and OnAwaitingReleaseHardware().

◆ SurpriseRemoved

const M::State M::SurpriseRemoved
staticprivate
Initial value:
=
{ &Down, "SurpriseRemoved", 0, &M::OnSurpriseRemoved, &M::EnterSignalPnp, ResetDiscards }
SM_RESULT OnSurpriseRemoved(_In_ HubEvent Event)
Definition: hubsm.cpp:754

Definition at line 166 of file hubsm.h.

Referenced by OnAwaitingStopAfterSuspend().

◆ Suspended

const M::State M::Suspended
staticprivate
Initial value:
=
{ &Asleep, "Suspended", 0, &M::OnSuspended, NULL }
SM_RESULT OnSuspended(_In_ HubEvent Event)
Definition: hubsm.cpp:1515

Definition at line 195 of file hubsm.h.

Referenced by OnPortsReleasing().

◆ SuspendedResetPending

const M::State M::SuspendedResetPending
staticprivate
Initial value:
=
{ &Asleep, "SuspendedResetPending", 0,
SM_RESULT OnSuspendedResetPending(_In_ HubEvent Event)
Definition: hubsm.cpp:1564
SM_RESULT EnterSuspendedResetPending()
Definition: hubsm.cpp:1556

Definition at line 197 of file hubsm.h.

Referenced by OnSuspended().

◆ Unconfigured

const M::State M::Unconfigured
staticprivate
Initial value:
=
{ NULL, "Unconfigured", HSM_REQ, &M::OnUnconfigured, NULL }
SM_RESULT OnUnconfigured(_In_ HubEvent Event)
Definition: hubsm.cpp:306

Definition at line 149 of file hubsm.h.

Referenced by OnAwaitingAddDevice(), and OnAwaitingReleaseAfterFailure().

◆ UpdatingController

const M::State M::UpdatingController
staticprivate
Initial value:
=
{ NULL, "UpdatingController", 0, &M::OnUpdatingController, &M::EnterUpdatingController }
SM_RESULT OnUpdatingController(_In_ HubEvent Event)
Definition: hubsm.cpp:1703
SM_RESULT EnterUpdatingController()
Definition: hubsm.cpp:1696

Definition at line 205 of file hubsm.h.

Referenced by OnReadingConfigDescriptor().


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