2 * PROJECT: ReactOS Kernel
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: ntoskrnl/include/po.h
5 * PURPOSE: Internal header for the Power Manager
6 * PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org)
13 // Define this if you want debugging support
15 #define _PO_DEBUG_ 0x00
18 // These define the Debug Masks Supported
20 #define PO_STATE_DEBUG 0x01
23 // Debug/Tracing support
26 #ifdef NEW_DEBUG_SYSTEM_IMPLEMENTED // enable when Debug Filters are implemented
27 #define POTRACE DbgPrintEx
29 #define POTRACE(x, ...) \
30 if (x & PopTraceLevel) DbgPrint(__VA_ARGS__)
33 #define POTRACE(x, fmt, ...) DPRINT(fmt, ##__VA_ARGS__)
36 typedef struct _PO_HIBER_PERF
51 } PO_HIBER_PERF
, *PPO_HIBER_PERF
;
53 typedef struct _PO_MEMORY_IMAGE
62 LARGE_INTEGER SystemTime
;
63 ULONGLONG InterruptTime
;
69 PHYSICAL_ADDRESS HiberPte
;
73 PFN_NUMBER TotalPages
;
74 PFN_NUMBER FirstTablePage
;
75 PFN_NUMBER LastFilePage
;
76 PO_HIBER_PERF PerfInfo
;
77 } PO_MEMORY_IMAGE
, *PPO_MEMORY_IMAGE
;
79 typedef struct _PO_MEMORY_RANGE_ARRAY_RANGE
85 } PO_MEMORY_RANGE_ARRAY_RANGE
;
87 typedef struct _PO_MEMORY_RANGE_ARRAY_LINK
89 struct _PO_MEMORY_RANGE_ARRAY
*Next
;
93 } PO_MEMORY_RANGE_ARRAY_LINK
;
95 typedef struct _PO_MEMORY_RANGE_ARRAY
99 PO_MEMORY_RANGE_ARRAY_RANGE Range
;
100 PO_MEMORY_RANGE_ARRAY_LINK Link
;
102 } PO_MEMORY_RANGE_ARRAY
, *PPO_MEMORY_RANGE_ARRAY
;
104 typedef struct _POP_HIBER_CONTEXT
107 BOOLEAN ReserveLoaderMemory
;
108 BOOLEAN ReserveFreeMemory
;
109 BOOLEAN VerifyOnWake
;
113 HANDLE LinkFileHandle
;
116 RTL_BITMAP MemoryMap
;
117 LIST_ENTRY ClonedRanges
;
118 ULONG ClonedRangeCount
;
119 PLIST_ENTRY NextCloneRange
;
120 PFN_NUMBER NextPreserve
;
130 PKPROCESSOR_STATE WakeState
;
133 PHYSICAL_ADDRESS HiberPte
;
135 PPO_MEMORY_IMAGE MemoryImage
;
136 PPO_MEMORY_RANGE_ARRAY TableHead
;
137 PVOID CompressionWorkspace
;
138 PUCHAR CompressedWriteBuffer
;
139 PULONG PerformanceStats
;
140 PVOID CompressionBlock
;
143 PO_HIBER_PERF PerfInfo
;
144 } POP_HIBER_CONTEXT
, *PPOP_HIBER_CONTEXT
;
146 typedef struct _PO_NOTIFY_ORDER_LEVEL
151 LIST_ENTRY WaitSleep
;
152 LIST_ENTRY ReadySleep
;
157 } PO_NOTIFY_ORDER_LEVEL
, *PPO_NOTIFY_ORDER_LEVEL
;
159 typedef struct _POP_SHUTDOWN_BUG_CHECK
165 ULONG_PTR Parameter1
;
166 ULONG_PTR Parameter2
;
167 ULONG_PTR Parameter3
;
168 ULONG_PTR Parameter4
;
169 } POP_SHUTDOWN_BUG_CHECK
, *PPOP_SHUTDOWN_BUG_CHECK
;
171 typedef struct _POP_DEVICE_POWER_IRP
173 SINGLE_LIST_ENTRY Free
;
175 PPO_DEVICE_NOTIFY Notify
;
180 } POP_DEVICE_POWER_IRP
, *PPOP_DEVICE_POWER_IRP
;
182 typedef struct _PO_DEVICE_NOTIFY_ORDER
184 ULONG DevNodeSequence
;
185 PDEVICE_OBJECT
*WarmEjectPdoPointer
;
186 PO_NOTIFY_ORDER_LEVEL OrderLevel
[8];
187 } PO_DEVICE_NOTIFY_ORDER
, *PPO_DEVICE_NOTIFY_ORDER
;
189 typedef struct _POP_DEVICE_SYS_STATE
192 SYSTEM_POWER_STATE SystemState
;
196 BOOLEAN GetNewDeviceList
;
197 PO_DEVICE_NOTIFY_ORDER Order
;
199 PDEVICE_OBJECT FailedDevice
;
202 BOOLEAN IgnoreErrors
;
203 BOOLEAN IgnoreNotImplemented
;
206 LIST_ENTRY PresentIrpQueue
;
207 POP_DEVICE_POWER_IRP Head
;
208 POP_DEVICE_POWER_IRP PowerIrpState
[20];
209 } POP_DEVICE_SYS_STATE
, *PPOP_DEVICE_SYS_STATE
;
211 typedef struct _POP_POWER_ACTION
217 SYSTEM_POWER_STATE LightestState
;
221 SYSTEM_POWER_STATE SystemState
;
222 SYSTEM_POWER_STATE NextSystemState
;
223 PPOP_SHUTDOWN_BUG_CHECK ShutdownBugCode
;
224 PPOP_DEVICE_SYS_STATE DevState
;
225 PPOP_HIBER_CONTEXT HiberContext
;
228 } POP_POWER_ACTION
, *PPOP_POWER_ACTION
;
230 typedef enum _POP_DEVICE_IDLE_TYPE
234 } POP_DEVICE_IDLE_TYPE
, *PPOP_DEVICE_IDLE_TYPE
;
236 typedef struct _POWER_CHANNEL_SUMMARY
241 LIST_ENTRY NotifyList
;
242 } POWER_CHANNEL_SUMMARY
, *PPOWER_CHANNEL_SUMMARY
;
244 typedef struct _DEVICE_OBJECT_POWER_EXTENSION
247 ULONG ConservationIdleTime
;
248 ULONG PerformanceIdleTime
;
249 PDEVICE_OBJECT DeviceObject
;
251 DEVICE_POWER_STATE State
;
252 LIST_ENTRY NotifySourceList
;
253 LIST_ENTRY NotifyTargetList
;
254 POWER_CHANNEL_SUMMARY PowerChannelSummary
;
256 } DEVICE_OBJECT_POWER_EXTENSION
, *PDEVICE_OBJECT_POWER_EXTENSION
;
259 // Initialization routines
278 PoInitializeDeviceObject(
279 IN OUT PDEVOBJ_EXTENSION DeviceObjectExtension
285 IN PDEVICE_OBJECT DeviceObject
289 // Power State routines
293 PopSetSystemPowerState(
294 SYSTEM_POWER_STATE PowerState
,
295 POWER_ACTION PowerAction
300 PopCleanupPowerState(
301 IN PPOWER_STATE PowerState
306 PopAddRemoveSysCapsCallback(
307 IN PVOID NotificationStructure
,
316 PoNotifySystemTimeSet(
325 PopReadShutdownPolicy(
338 IN BOOLEAN ShuttingDown
342 // Global data inside the Power Manager
344 extern PDEVICE_NODE PopSystemPowerDeviceNode
;
345 extern KGUARDED_MUTEX PopVolumeLock
;
346 extern LIST_ENTRY PopVolumeDevices
;
347 extern KSPIN_LOCK PopDopeGlobalLock
;
348 extern POP_POWER_ACTION PopAction
;