18#define DEVICE_ENUM_RETRY_TIME 500
19#define DEVICE_POST_RESET_TIME_20 32
20#define DEVICE_POST_RESET_TIME_LONG 100
21#define DEVICE_POST_RESET_TIME_30 15
22#define DEVICE_POST_ADDRESS_TIME 10
23#define DEVICE_DUPLICATE_POLL_TIME 500
26#define DEVICE_DEFAULT_LANGUAGE 0x0409
32 return HubGetChildContext(
Object);
113 DPRINT1(
"Port %u device object creation failed 0x%lx\n",
Port->Number(),
Status);
124 if (!
Port->HasProperty(PortProperty::Removable))
125 Child->SetProperty(ChildProperty::NotRemovable);
127 Child->ClearProperty(ChildProperty::NotRemovable);
129 DPRINT(
"Hub %p port %u enumeration starting\n",
Hub,
Port->Number());
149 Child->m_ValidationBitmap.Buffer =
Child->m_ValidationBits;
173 DPRINT1(
"Device %p work item allocation failed\n",
Child);
184 &
Child->m_UcxPayloadMemory,
217 Child->m_Hub->FlushAndDeleteWorkItem(&
Child->m_WorkItem);
235 Child->m_Timer.Cancel();
VOID StartSuperSpeedPostResetTimer()
VOID StartPostResetTimer()
VOID ArmPostAddressTimer()
VOID StartLongPostResetTimer()
BOOLEAN CancelStateTimer()
VOID ArmDuplicateDeviceTimer()
VOID MarkAttachSucceeded()
VOID ClearState(_In_ ChildState Flag)
USB_DEVICE_SPEED Speed() const
PUCXHUB_WORKITEM m_WorkItem
static EVT_WDF_OBJECT_CONTEXT_DESTROY EvtDestroy
BOOLEAN m_NeedsForwardProgress
VOID SetState(_In_ ChildState Flag)
static VOID NTAPI TimerFired(_In_ PVOID Context)
static HubChild * Create(_In_ HubPort *Port)
static UCXHUB_WORKITEM_ROUTINE MachineWorkItem
static HubChild * FromObject(_In_ WDFOBJECT Object)
PUCXHUB_WORKITEM AllocateWorkItem()
VOID EnqueueWorkItem(_In_ PUCXHUB_WORKITEM WorkItem, _In_ PUCXHUB_WORKITEM_ROUTINE Routine, _In_ PVOID Context, _In_ BOOLEAN ForwardProgress)
VOID Start(_In_ ULONG Milliseconds)
VOID NTAPI HubReleaseTransferState(_In_ HubChild *Child)
#define DSM_KIND_SUPER_SPEED
#define DSM_KIND_LOW_SPEED
#define DSM_KIND_HIGH_SPEED
#define NT_SUCCESS(StatCode)
#define KeInitializeEvent(pEvt, foo, foo2)
#define KeInitializeSpinLock(sl)
static const char HubTagDevice[]
#define DEVICE_POST_RESET_TIME_30
#define DEVICE_DUPLICATE_POLL_TIME
static NTSTATUS NTAPI HubCreateDeviceRequest(_In_ HubPort *Port, _Out_ WDFREQUEST *Request)
#define DEVICE_ENUM_RETRY_TIME
#define DEVICE_POST_RESET_TIME_LONG
static VOID NTAPI HubFreeIfPresent(_In_opt_ PVOID Buffer)
#define DEVICE_DEFAULT_LANGUAGE
#define DEVICE_POST_ADDRESS_TIME
static const char HubTagDeviceCreate[]
#define DEVICE_POST_RESET_TIME_20
static VOID NTAPI HubDropDeviceObject(_Inout_ WDFOBJECT *Object)
VOID NTAPI HubIdFreeDeviceIds(_In_ HubChild *Child)
VOID NTAPI HubReleaseRegistryState(_In_ HubChild *Child)
EVT_WDF_TIMER HubEvtBandwidthRetryTimer
_In_opt_ PVOID _In_ PUCXHUB_WORKITEM WorkItem
FORCEINLINE VOID NTAPI HubDereferenceDeferred(_In_ WDFOBJECT Object)
_In_ PIRP _In_ PIO_COMPLETION_ROUTINE _In_ PVOID Context
#define ExFreePoolWithTag(_P, _T)
#define RTL_BITS_OF(sizeOfArg)
#define UNREFERENCED_PARAMETER(P)
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFREQUEST Request
enum _USB_DEVICE_SPEED USB_DEVICE_SPEED
_Must_inspect_result_ _In_ WDFCOLLECTION _In_ WDFOBJECT Object
_In_ PDEVICE_OBJECT DeviceObject
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFDEVICE Child
#define WdfObjectDereferenceWithTag(Handle, Tag)
FORCEINLINE VOID WDF_OBJECT_ATTRIBUTES_INIT(_Out_ PWDF_OBJECT_ATTRIBUTES Attributes)
#define WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(_attributes, _contexttype)
@ WdfExecutionLevelPassive
#define WdfObjectReference(Handle)
#define WdfObjectReferenceWithTag(Handle, Tag)
FORCEINLINE VOID WDF_TIMER_CONFIG_INIT(_Out_ PWDF_TIMER_CONFIG Config, _In_ PFN_WDF_TIMER EvtTimerFunc)