NT4/private/ntos/po/podata.c
2020-09-30 17:12:29 +02:00

156 lines
3.7 KiB
C
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*++
Copyright (c) 1995 Microsoft Corporation
Module Name:
podata.c
Abstract:
This module contains the global read/write data for the I/O system.
Author:
N. Yoshiyama [IBM Corp] 07-April-1994 ( Depends on Microsoft's design )
Revision History:
--*/
#ifdef _PNP_POWER_
#include "pop.h"
//
// Define the global data for the Power Management.
//
//
// Power Management enabled/disabled
//
BOOLEAN PoEnabled;
//
// PopStateLock - Lock to syncrohonize power state changes
//
KSPIN_LOCK PopStateLock;
//
// PoPowerSequence - The current power sequence value. Forever counts
// up each time the machine is resumed from a suspend or hibernate
//
ULONG PoPowerSequence;
//
// PopDeviceList - Global list of all device objects in the system.
//
LIST_ENTRY PopDeviceList;
//
// PopSyncStateChangeQueue - devices waiting for synchronous state changes
// PopAsyncStateChangeQueue - devices waiting for asynchronous state changes
// PopStateChangeInProgress - devices processing state changes
// PopStateChangeWorkerList - state change IRPs which are enqueued to be sent at PASSIVE_LEVEL
// PopSyncChangeInProgress - true if a sync state change is currently in progress
//
LIST_ENTRY PopSyncStateChangeQueue;
LIST_ENTRY PopAsyncStateChangeQueue;
LIST_ENTRY PopStateChangeInProgress;
LIST_ENTRY PopStateChangeWorkerList;
BOOLEAN PopSyncChangeInProgress;
//
// PopStateChangeDpc - Deferred procedure call to process all state changes.
// PopStateChangeDpcActive - True is state change dpc is in progress
// PopStateChangeTimer - Used to try again later
// PopWorkI
//
KTIMER PopStateChangeTimer;
KDPC PopStateChangeDpc;
BOOLEAN PopStateChangeDpcActive;
WORK_QUEUE_ITEM PopStateChangeWorkItem;
//
// PopStateDatabaseIdle -
//
KEVENT PopStateDatabaseIdle;
//
// PopActiveIdleScanQueue - A queue of devices which are currently powered
// on, and automatically get powered down by non-use.
//
// ActiveIdleQueue, but are currently not powered on.
//
LIST_ENTRY PopActiveIdleScanQueue;
//
// A timer & deferfed procedure call to process idle scans
//
KTIMER PopIdleScanTimer;
KDPC PopIdleScanDpc;
LARGE_INTEGER PopIdleScanTime;
ULONG PopIdleScanTimeInSeconds;
//
// SuspendHibernateCallback - Notified with a suspend or hibernate
// is going to take place. Argument1 is the notification pass. Pass 0
// is notified at Irql < DISPATCH_LEVEL and proceedes any suspend/hibernate
// work being performed. Pass 1 is called when the susend/hibernate has
// completed, Arument2 contains the status of the suspend operation. A
// non-sucessfull status may indicate that the operation was aborted.
//
// ExCallback.SupendHibernateSystem
//
// PopNewPendingState - Table to yield new pending state from
// device's pending state and newly requested pending state
//
#define VUp VerifyUp
#define Up PowerUp
#define Qry PowerQuery
#define Stby PowerStandby
#define Spnd PowerSuspend
#define Hbnt PowerHibernate
#define Down PowerDown
#define Remv PowerDownRemove
UCHAR PopNewPendingState[MaximumPowerState][MaximumPowerState] = {
{0, Up, Qry, Stby, Spnd, Hbnt, Down, Remv }, // unspec
{Up, Up, Qry, Stby, Spnd, Hbnt, Down, Remv }, // Up
{Qry, VUp, Qry, Stby, Spnd, Hbnt, Down, Remv }, // Query
{Stby, Up, Qry, Stby, Spnd, Hbnt, Down, Remv }, // Standyby
{Spnd, VUp, Spnd, Spnd, Spnd, Hbnt, Spnd, Remv }, // Suspend
{Hbnt, VUp, Hbnt, Hbnt, Spnd, Hbnt, Hbnt, Remv }, // Hibernate
{Down, VUp, Down, Down, Spnd, Hbnt, Down, Remv }, // Down
{Remv, Remv, Remv, Remv, Remv, Remv, Remv, Remv } // Remove
};
#if DBG
//
// PoDebug - Debug level
//
ULONG PoDebug = 1;
#endif
#endif // _PNP_POWER_