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)
12 // Define this if you want debugging support
14 #define _PO_DEBUG_ 0x00
17 // These define the Debug Masks Supported
19 #define PO_STATE_DEBUG 0x01
22 // Debug/Tracing support
25 #ifdef NEW_DEBUG_SYSTEM_IMPLEMENTED // enable when Debug Filters are implemented
26 #define POTRACE DbgPrintEx
28 #define POTRACE(x, ...) \
29 if (x & PopTraceLevel) DbgPrint(__VA_ARGS__)
32 #define POTRACE(x, ...) DPRINT(__VA_ARGS__)
35 typedef struct _PO_HIBER_PERF
50 } PO_HIBER_PERF
, *PPO_HIBER_PERF
;
52 typedef struct _PO_MEMORY_IMAGE
61 LARGE_INTEGER SystemTime
;
62 ULONGLONG InterruptTime
;
68 PHYSICAL_ADDRESS HiberPte
;
72 PFN_NUMBER TotalPages
;
73 PFN_NUMBER FirstTablePage
;
74 PFN_NUMBER LastFilePage
;
75 PO_HIBER_PERF PerfInfo
;
76 } PO_MEMORY_IMAGE
, *PPO_MEMORY_IMAGE
;
78 typedef struct _PO_MEMORY_RANGE_ARRAY_RANGE
84 } PO_MEMORY_RANGE_ARRAY_RANGE
;
86 typedef struct _PO_MEMORY_RANGE_ARRAY_LINK
88 struct _PO_MEMORY_RANGE_ARRAY
*Next
;
92 } PO_MEMORY_RANGE_ARRAY_LINK
;
94 typedef struct _PO_MEMORY_RANGE_ARRAY
98 PO_MEMORY_RANGE_ARRAY_RANGE Range
;
99 PO_MEMORY_RANGE_ARRAY_LINK Link
;
101 } PO_MEMORY_RANGE_ARRAY
, *PPO_MEMORY_RANGE_ARRAY
;
103 typedef struct _POP_HIBER_CONTEXT
106 BOOLEAN ReserveLoaderMemory
;
107 BOOLEAN ReserveFreeMemory
;
108 BOOLEAN VerifyOnWake
;
112 HANDLE LinkFileHandle
;
115 RTL_BITMAP MemoryMap
;
116 LIST_ENTRY ClonedRanges
;
117 ULONG ClonedRangeCount
;
118 PLIST_ENTRY NextCloneRange
;
119 PFN_NUMBER NextPreserve
;
129 PKPROCESSOR_STATE WakeState
;
132 PHYSICAL_ADDRESS HiberPte
;
134 PPO_MEMORY_IMAGE MemoryImage
;
135 PPO_MEMORY_RANGE_ARRAY TableHead
;
136 PVOID CompressionWorkspace
;
137 PUCHAR CompressedWriteBuffer
;
138 PULONG PerformanceStats
;
139 PVOID CompressionBlock
;
142 PO_HIBER_PERF PerfInfo
;
143 } POP_HIBER_CONTEXT
, *PPOP_HIBER_CONTEXT
;
145 typedef struct _PO_NOTIFY_ORDER_LEVEL
150 LIST_ENTRY WaitSleep
;
151 LIST_ENTRY ReadySleep
;
156 } PO_NOTIFY_ORDER_LEVEL
, *PPO_NOTIFY_ORDER_LEVEL
;
158 typedef struct _POP_SHUTDOWN_BUG_CHECK
164 ULONG_PTR Parameter1
;
165 ULONG_PTR Parameter2
;
166 ULONG_PTR Parameter3
;
167 ULONG_PTR Parameter4
;
168 } POP_SHUTDOWN_BUG_CHECK
, *PPOP_SHUTDOWN_BUG_CHECK
;
170 typedef struct _POP_DEVICE_POWER_IRP
172 SINGLE_LIST_ENTRY Free
;
174 PPO_DEVICE_NOTIFY Notify
;
179 } POP_DEVICE_POWER_IRP
, *PPOP_DEVICE_POWER_IRP
;
181 typedef struct _PO_DEVICE_NOTIFY_ORDER
183 ULONG DevNodeSequence
;
184 PDEVICE_OBJECT
*WarmEjectPdoPointer
;
185 PO_NOTIFY_ORDER_LEVEL OrderLevel
[8];
186 } PO_DEVICE_NOTIFY_ORDER
, *PPO_DEVICE_NOTIFY_ORDER
;
188 typedef struct _POP_DEVICE_SYS_STATE
191 SYSTEM_POWER_STATE SystemState
;
195 BOOLEAN GetNewDeviceList
;
196 PO_DEVICE_NOTIFY_ORDER Order
;
198 PDEVICE_OBJECT FailedDevice
;
201 BOOLEAN IgnoreErrors
;
202 BOOLEAN IgnoreNotImplemented
;
205 LIST_ENTRY PresentIrpQueue
;
206 POP_DEVICE_POWER_IRP Head
;
207 POP_DEVICE_POWER_IRP PowerIrpState
[20];
208 } POP_DEVICE_SYS_STATE
, *PPOP_DEVICE_SYS_STATE
;
210 typedef struct _POP_POWER_ACTION
216 SYSTEM_POWER_STATE LightestState
;
220 SYSTEM_POWER_STATE SystemState
;
221 SYSTEM_POWER_STATE NextSystemState
;
222 PPOP_SHUTDOWN_BUG_CHECK ShutdownBugCode
;
223 PPOP_DEVICE_SYS_STATE DevState
;
224 PPOP_HIBER_CONTEXT HiberContext
;
227 } POP_POWER_ACTION
, *PPOP_POWER_ACTION
;
229 typedef enum _POP_DEVICE_IDLE_TYPE
233 } POP_DEVICE_IDLE_TYPE
, *PPOP_DEVICE_IDLE_TYPE
;
235 typedef struct _POWER_CHANNEL_SUMMARY
240 LIST_ENTRY NotifyList
;
241 } POWER_CHANNEL_SUMMARY
, *PPOWER_CHANNEL_SUMMARY
;
243 typedef struct _DEVICE_OBJECT_POWER_EXTENSION
246 ULONG ConservationIdleTime
;
247 ULONG PerformanceIdleTime
;
248 PDEVICE_OBJECT DeviceObject
;
250 DEVICE_POWER_STATE State
;
251 LIST_ENTRY NotifySourceList
;
252 LIST_ENTRY NotifyTargetList
;
253 POWER_CHANNEL_SUMMARY PowerChannelSummary
;
255 } DEVICE_OBJECT_POWER_EXTENSION
, *PDEVICE_OBJECT_POWER_EXTENSION
;
258 // Initialization routines
277 PoInitializeDeviceObject(
278 IN OUT PDEVOBJ_EXTENSION DeviceObjectExtension
284 IN PDEVICE_OBJECT DeviceObject
288 // Power State routines
292 PopSetSystemPowerState(
293 SYSTEM_POWER_STATE PowerState
298 PopCleanupPowerState(
299 IN PPOWER_STATE PowerState
304 PopAddRemoveSysCapsCallback(
305 IN PVOID NotificationStructure
,
314 PoNotifySystemTimeSet(
323 PopReadShutdownPolicy(
336 IN BOOLEAN ShuttingDown
340 // Global data inside the Power Manager
342 extern PDEVICE_NODE PopSystemPowerDeviceNode
;
343 extern KGUARDED_MUTEX PopVolumeLock
;
344 extern LIST_ENTRY PopVolumeDevices
;
345 extern KSPIN_LOCK PopDopeGlobalLock
;
346 extern POP_POWER_ACTION PopAction
;