4 * APIs for power management.
6 * This file is part of the w32api package.
9 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
11 * THIS SOFTWARE IS NOT COPYRIGHTED
13 * This source code is offered for use in the public domain. You may
14 * use, modify or distribute it freely.
16 * This code is distributed in the hope that it will be useful but
17 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
18 * DISCLAIMED. This includes but is not limited to warranties of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
33 /* Power States/Levels */
34 typedef enum _SYSTEM_POWER_STATE
{
35 PowerSystemUnspecified
,
43 } SYSTEM_POWER_STATE
, *PSYSTEM_POWER_STATE
;
44 #define POWER_SYSTEM_MAXIMUM PowerSystemMaximum
46 typedef enum _DEVICE_POWER_STATE
{
47 PowerDeviceUnspecified
,
53 } DEVICE_POWER_STATE
, *PDEVICE_POWER_STATE
;
55 typedef union _POWER_STATE
{
56 SYSTEM_POWER_STATE SystemState
;
57 DEVICE_POWER_STATE DeviceState
;
58 } POWER_STATE
, *PPOWER_STATE
;
60 typedef enum _POWER_STATE_TYPE
{
63 } POWER_STATE_TYPE
, *PPOWER_STATE_TYPE
;
65 typedef enum _POWER_INFORMATION_LEVEL
{
70 SystemPowerCapabilities
,
72 SystemPowerStateHandler
,
73 ProcessorStateHandler
,
74 SystemPowerPolicyCurrent
,
75 AdministratorPowerPolicy
,
76 SystemReserveHiberFile
,
78 SystemPowerInformation
,
79 ProcessorStateHandler2
,
83 SystemPowerStateNotifyHandler
,
84 ProcessorPowerPolicyAc
,
85 ProcessorPowerPolicyDc
,
86 VerifyProcessorPowerPolicyAc
,
87 VerifyProcessorPowerPolicyDc
,
88 ProcessorPowerPolicyCurrent
,
89 SystemPowerStateLogging
,
90 SystemPowerLoggingEntry
,
92 NotifyUserPowerSetting
,
93 PowerInformationLevelUnused0
,
94 PowerInformationLevelUnused1
,
96 TraceApplicationPowerMessage
,
97 TraceApplicationPowerMessageEnd
,
102 SystemHiberFileInformation
,
103 TraceServicePowerMessage
,
105 PowerShutdownNotification
,
112 ProcessorInformationEx
,
113 NotifyUserModeLegacyPowerEvent
,
115 ProcessorIdleDomains
,
118 PowerInformationLevelMaximum
119 } POWER_INFORMATION_LEVEL
;
125 PowerActionHibernate
,
127 PowerActionShutdownReset
,
128 PowerActionShutdownOff
,
130 } POWER_ACTION
, *PPOWER_ACTION
;
132 #if (NTDDI_VERSION >= NTDDI_WINXP) || !defined(_BATCLASS_)
136 } BATTERY_REPORTING_SCALE
, *PBATTERY_REPORTING_SCALE
;
137 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) || !defined(_BATCLASS_) */
140 #endif /* _PO_DDK_ */
142 #define POWER_PERF_SCALE 100
143 #define PERF_LEVEL_TO_PERCENT(x) (((x) * 1000) / (POWER_PERF_SCALE * 10))
144 #define PERCENT_TO_PERF_LEVEL(x) (((x) * POWER_PERF_SCALE * 10) / 1000)
146 typedef struct _PROCESSOR_IDLE_TIMES
{
149 ULONG IdleHandlerReserved
[4];
150 } PROCESSOR_IDLE_TIMES
, *PPROCESSOR_IDLE_TIMES
;
153 (FASTCALL
*PPROCESSOR_IDLE_HANDLER
)(
154 IN OUT PPROCESSOR_IDLE_TIMES IdleTimes
);
156 typedef struct _PROCESSOR_IDLE_HANDLER_INFO
{
157 ULONG HardwareLatency
;
158 PPROCESSOR_IDLE_HANDLER Handler
;
159 } PROCESSOR_IDLE_HANDLER_INFO
, *PPROCESSOR_IDLE_HANDLER_INFO
;
162 (FASTCALL
*PSET_PROCESSOR_THROTTLE
)(
166 (FASTCALL
*PSET_PROCESSOR_THROTTLE2
)(
169 #define MAX_IDLE_HANDLERS 3
171 typedef struct _PROCESSOR_STATE_HANDLER
{
173 BOOLEAN ThrottleOnIdle
;
174 PSET_PROCESSOR_THROTTLE SetThrottle
;
175 ULONG NumIdleHandlers
;
176 PROCESSOR_IDLE_HANDLER_INFO IdleHandler
[MAX_IDLE_HANDLERS
];
177 } PROCESSOR_STATE_HANDLER
, *PPROCESSOR_STATE_HANDLER
;
179 typedef enum _POWER_STATE_HANDLER_TYPE
{
184 PowerStateSleeping4Firmware
,
185 PowerStateShutdownReset
,
186 PowerStateShutdownOff
,
188 } POWER_STATE_HANDLER_TYPE
, *PPOWER_STATE_HANDLER_TYPE
;
191 (NTAPI
*PENTER_STATE_SYSTEM_HANDLER
)(
192 IN PVOID SystemContext
);
195 (NTAPI
*PENTER_STATE_HANDLER
)(
197 IN PENTER_STATE_SYSTEM_HANDLER SystemHandler OPTIONAL
,
198 IN PVOID SystemContext
,
199 IN LONG NumberProcessors
,
200 IN LONG
volatile *Number
);
202 typedef struct _POWER_STATE_HANDLER
{
203 POWER_STATE_HANDLER_TYPE Type
;
206 PENTER_STATE_HANDLER Handler
;
208 } POWER_STATE_HANDLER
, *PPOWER_STATE_HANDLER
;
211 (NTAPI
*PENTER_STATE_NOTIFY_HANDLER
)(
212 IN POWER_STATE_HANDLER_TYPE State
,
214 IN BOOLEAN Entering
);
216 typedef struct _POWER_STATE_NOTIFY_HANDLER
{
217 PENTER_STATE_NOTIFY_HANDLER Handler
;
219 } POWER_STATE_NOTIFY_HANDLER
, *PPOWER_STATE_NOTIFY_HANDLER
;
225 IN POWER_INFORMATION_LEVEL InformationLevel
,
226 IN PVOID InputBuffer OPTIONAL
,
227 IN ULONG InputBufferLength
,
228 OUT PVOID OutputBuffer OPTIONAL
,
229 IN ULONG OutputBufferLength
);
231 #define PROCESSOR_STATE_TYPE_PERFORMANCE 1
232 #define PROCESSOR_STATE_TYPE_THROTTLE 2
234 typedef struct _PROCESSOR_PERF_LEVEL
{
235 UCHAR PercentFrequency
;
238 } PROCESSOR_PERF_LEVEL
, *PPROCESSOR_PERF_LEVEL
;
240 typedef struct _PROCESSOR_PERF_STATE
{
241 UCHAR PercentFrequency
;
251 ULONGLONG PerformanceTime
;
252 } PROCESSOR_PERF_STATE
, *PPROCESSOR_PERF_STATE
;
254 typedef struct _PROCESSOR_STATE_HANDLER2
{
255 ULONG NumIdleHandlers
;
256 PROCESSOR_IDLE_HANDLER_INFO IdleHandler
[MAX_IDLE_HANDLERS
];
257 PSET_PROCESSOR_THROTTLE2 SetPerfLevel
;
258 ULONG HardwareLatency
;
260 PROCESSOR_PERF_LEVEL PerfLevel
[1];
261 } PROCESSOR_STATE_HANDLER2
, *PPROCESSOR_STATE_HANDLER2
;
266 NtSetThreadExecutionState(
267 IN EXECUTION_STATE esFlags
,
268 OUT EXECUTION_STATE
*PreviousFlags
);
273 NtRequestWakeupLatency(
274 IN LATENCY_TIME latency
);
279 NtInitiatePowerAction(
280 IN POWER_ACTION SystemAction
,
281 IN SYSTEM_POWER_STATE MinSystemState
,
283 IN BOOLEAN Asynchronous
);
288 NtSetSystemPowerState(
289 IN POWER_ACTION SystemAction
,
290 IN SYSTEM_POWER_STATE MinSystemState
,
296 NtGetDevicePowerState(
298 OUT DEVICE_POWER_STATE
*State
);
303 NtCancelDeviceWakeupRequest(
309 NtIsSystemResumeAutomatic(
315 NtRequestDeviceWakeup(
318 #define WINLOGON_LOCK_ON_SLEEP 0x00000001
321 BOOLEAN PowerButtonPresent
;
322 BOOLEAN SleepButtonPresent
;
329 BOOLEAN HiberFilePresent
;
331 BOOLEAN VideoDimPresent
;
334 BOOLEAN ThermalControl
;
335 BOOLEAN ProcessorThrottle
;
336 UCHAR ProcessorMinThrottle
;
337 #if (NTDDI_VERSION < NTDDI_WINXP)
338 UCHAR ProcessorThrottleScale
;
341 UCHAR ProcessorMaxThrottle
;
342 BOOLEAN FastSystemS4
;
344 #endif // (NTDDI_VERSION < NTDDI_WINXP)
345 BOOLEAN DiskSpinDown
;
347 BOOLEAN SystemBatteriesPresent
;
348 BOOLEAN BatteriesAreShortTerm
;
349 BATTERY_REPORTING_SCALE BatteryScale
[3];
350 SYSTEM_POWER_STATE AcOnLineWake
;
351 SYSTEM_POWER_STATE SoftLidWake
;
352 SYSTEM_POWER_STATE RtcWake
;
353 SYSTEM_POWER_STATE MinDeviceWakeState
;
354 SYSTEM_POWER_STATE DefaultLowLatencyWake
;
355 } SYSTEM_POWER_CAPABILITIES
, *PSYSTEM_POWER_CAPABILITIES
;
359 BOOLEAN BatteryPresent
;
364 ULONG RemainingCapacity
;
369 } SYSTEM_BATTERY_STATE
, *PSYSTEM_BATTERY_STATE
;
371 typedef struct _PROCESSOR_POWER_INFORMATION
{
377 ULONG CurrentIdleState
;
378 } PROCESSOR_POWER_INFORMATION
, *PPROCESSOR_POWER_INFORMATION
;
380 typedef struct _POWER_ACTION_POLICY
{
384 } POWER_ACTION_POLICY
, *PPOWER_ACTION_POLICY
;
386 /* POWER_ACTION_POLICY.Flags constants */
387 #define POWER_ACTION_QUERY_ALLOWED 0x00000001
388 #define POWER_ACTION_UI_ALLOWED 0x00000002
389 #define POWER_ACTION_OVERRIDE_APPS 0x00000004
390 #define POWER_ACTION_LIGHTEST_FIRST 0x10000000
391 #define POWER_ACTION_LOCK_CONSOLE 0x20000000
392 #define POWER_ACTION_DISABLE_WAKES 0x40000000
393 #define POWER_ACTION_CRITICAL 0x80000000
395 /* POWER_ACTION_POLICY.EventCode constants */
396 #define POWER_LEVEL_USER_NOTIFY_TEXT 0x00000001
397 #define POWER_LEVEL_USER_NOTIFY_SOUND 0x00000002
398 #define POWER_LEVEL_USER_NOTIFY_EXEC 0x00000004
399 #define POWER_USER_NOTIFY_BUTTON 0x00000008
400 #define POWER_USER_NOTIFY_SHUTDOWN 0x00000010
401 #define POWER_FORCE_TRIGGER_RESET 0x80000000
403 #define DISCHARGE_POLICY_CRITICAL 0
404 #define DISCHARGE_POLICY_LOW 1
405 #define NUM_DISCHARGE_POLICIES 4
407 #define PO_THROTTLE_NONE 0
408 #define PO_THROTTLE_CONSTANT 1
409 #define PO_THROTTLE_DEGRADE 2
410 #define PO_THROTTLE_ADAPTIVE 3
411 #define PO_THROTTLE_MAXIMUM 4
417 #endif /* __NTPOAPI_H */