28 "EventInfo must have one entry per IdleEvent");
156 Post(IdleEvent::ClientCallbackFinished,
NULL);
163 if (finished !=
NULL)
247 if (
Event != IdleEvent::Start)
258 if (
Event == IdleEvent::PoweredUp ||
Event == IdleEvent::PoweringDown)
268 if (
Event == IdleEvent::Cleanup)
280 case IdleEvent::RequestSubmitted:
293 case IdleEvent::RequestCanceled:
294 case IdleEvent::WorkItemRan:
306 if (
Event != IdleEvent::RequestSubmitted)
323 case IdleEvent::RequestSubmitted:
327 case IdleEvent::RequestCanceled:
331 case IdleEvent::Cleanup:
345 case IdleEvent::RequestSubmitted:
349 case IdleEvent::WorkItemRan:
363 case IdleEvent::RequestCanceled:
367 case IdleEvent::PoweredUp:
370 case IdleEvent::PoweringDown:
373 case IdleEvent::Cleanup:
385 if (
Event != IdleEvent::WorkItemRan)
400 case IdleEvent::ClientCallbackFinished:
403 case IdleEvent::PoweredUp:
404 case IdleEvent::PoweringDown:
409 case IdleEvent::RequestCanceled:
417 case IdleEvent::Cleanup:
431 case IdleEvent::RequestCanceled:
435 case IdleEvent::Cleanup:
449 case IdleEvent::RequestSubmitted:
453 case IdleEvent::RequestCanceled:
454 case IdleEvent::WorkItemRan:
467 if (
Event == IdleEvent::ClientCallbackFinished)
477 if (
Event != IdleEvent::RequestCanceled)
static const State AwaitingCancelRemoved
static const SM_EVENT_INFO EventInfo[]
NTSTATUS m_FollowUpStatus
SM_RESULT OnCallbackRunning(_In_ IdleEvent Event)
BOOLEAN m_SuspendSupported
IDLE_POWER_CHANGE m_PowerChange
static const State CallbackRemoved
BOOLEAN DisarmCancel(_In_ PIRP Irp)
SM_RESULT OnSuspendUnsupported(_In_ IdleEvent Event)
static const State AwaitingCancel
static const State Holding
SM_RESULT Release(_In_ NTSTATUS Status)
SM_RESULT OnAwaitingCancelRemoved(_In_ IdleEvent Event)
VOID Initialize(_In_ HubPdo *Pdo)
NTSTATUS Post(_In_ IdleEvent Event, _In_opt_ PIRP Irp)
Irp is the new idle IRP for RequestSubmitted, else NULL.
static const State Pending
SM_RESULT OnAwaitingWorkItem(_In_ IdleEvent Event)
SM_RESULT OnStarting(_In_ IdleEvent Event)
SM_RESULT OnRemoved(_In_ IdleEvent Event)
SM_RESULT OnCallbackRemoved(_In_ IdleEvent Event)
BOOLEAN SelectiveSuspendSupported()
static const State Parked
static const State CallbackDone
SM_RESULT OnPresent(_In_ IdleEvent Event)
SM_RESULT ReleaseForRemoval()
VOID FinishHeld(_In_ NTSTATUS Status)
IDLE_FOLLOW_UP m_FollowUp
SM_RESULT OnPending(_In_ IdleEvent Event)
VOID CompleteIdleRequest(_In_ PIRP Irp, _In_ NTSTATUS Status)
static const State CallbackRunning
VOID MarkRequestPending(_In_ PIRP Irp)
VOID RejectNew(_In_ NTSTATUS Status)
BOOLEAN ArmCancel(_In_ PIRP Irp)
SM_RESULT OnParked(_In_ IdleEvent Event)
SM_RESULT OnAwaitingCancel(_In_ IdleEvent Event)
SM_RESULT OnReady(_In_ IdleEvent Event)
static const State Present
static const State SuspendUnsupported
static const State Removed
SM_RESULT OnNoRequest(_In_ IdleEvent Event)
VOID InvokeIdleCallback(_In_ PIRP Irp)
static const State Starting
SM_RESULT OnHolding(_In_ IdleEvent Event)
static const State NoRequest
static const State AwaitingWorkItem
VOID SmInitialize(_In_ const State *Initial)
static SM_RESULT SmTransition(_In_ const State *Target)
static SM_RESULT SmHandled()
static SM_RESULT SmUnhandled()
BOOLEAN SmPost(_In_ IdleEvent Ev)
_Check_return_ _In_ DXGK_EVENT_TYPE _In_ ULONG Event
#define KeReleaseSpinLock(sl, irql)
#define KeAcquireSpinLock(sl, irql)
#define KeInitializeSpinLock(sl)
_In_ PCWSTR _Out_ PULONG _Out_ PBOOLEAN Present
_In_ UCXUSBDEVICE _In_ PDEVICE_OBJECT Pdo
#define STATUS_POWER_STATE_INVALID
One state. Handler gets every event the state sees.
#define STATUS_NO_SUCH_DEVICE
#define STATUS_DEVICE_BUSY