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
;
45 #define POWER_SYSTEM_MAXIMUM PowerSystemMaximum
47 typedef enum _DEVICE_POWER_STATE
{
48 PowerDeviceUnspecified
,
54 } DEVICE_POWER_STATE
, *PDEVICE_POWER_STATE
;
56 typedef union _POWER_STATE
{
57 SYSTEM_POWER_STATE SystemState
;
58 DEVICE_POWER_STATE DeviceState
;
59 } POWER_STATE
, *PPOWER_STATE
;
61 typedef enum _POWER_STATE_TYPE
{
64 } POWER_STATE_TYPE
, *PPOWER_STATE_TYPE
;
66 typedef enum _POWER_INFORMATION_LEVEL
{
71 SystemPowerCapabilities
,
73 SystemPowerStateHandler
,
74 ProcessorStateHandler
,
75 SystemPowerPolicyCurrent
,
76 AdministratorPowerPolicy
,
77 SystemReserveHiberFile
,
79 SystemPowerInformation
,
80 ProcessorStateHandler2
,
84 SystemPowerStateNotifyHandler
,
85 ProcessorPowerPolicyAc
,
86 ProcessorPowerPolicyDc
,
87 VerifyProcessorPowerPolicyAc
,
88 VerifyProcessorPowerPolicyDc
,
89 ProcessorPowerPolicyCurrent
,
90 SystemPowerStateLogging
,
91 SystemPowerLoggingEntry
,
93 NotifyUserPowerSetting
,
94 PowerInformationLevelUnused0
,
95 PowerInformationLevelUnused1
,
97 TraceApplicationPowerMessage
,
98 TraceApplicationPowerMessageEnd
,
103 SystemHiberFileInformation
,
104 TraceServicePowerMessage
,
106 PowerShutdownNotification
,
113 ProcessorInformationEx
,
114 NotifyUserModeLegacyPowerEvent
,
116 ProcessorIdleDomains
,
119 PowerInformationLevelMaximum
120 } POWER_INFORMATION_LEVEL
;
126 PowerActionHibernate
,
128 PowerActionShutdownReset
,
129 PowerActionShutdownOff
,
131 } POWER_ACTION
, *PPOWER_ACTION
;
133 #if (NTDDI_VERSION >= NTDDI_WINXP) || !defined(_BATCLASS_)
137 } BATTERY_REPORTING_SCALE
, *PBATTERY_REPORTING_SCALE
;
138 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) || !defined(_BATCLASS_) */
141 #endif /* _PO_DDK_ */
143 #define POWER_PERF_SCALE 100
144 #define PERF_LEVEL_TO_PERCENT(x) (((x) * 1000) / (POWER_PERF_SCALE * 10))
145 #define PERCENT_TO_PERF_LEVEL(x) (((x) * POWER_PERF_SCALE * 10) / 1000)
147 typedef struct _PROCESSOR_IDLE_TIMES
{
150 ULONG IdleHandlerReserved
[4];
151 } PROCESSOR_IDLE_TIMES
, *PPROCESSOR_IDLE_TIMES
;
154 (FASTCALL
*PPROCESSOR_IDLE_HANDLER
)(
155 IN OUT PPROCESSOR_IDLE_TIMES IdleTimes
);
157 typedef struct _PROCESSOR_IDLE_HANDLER_INFO
{
158 ULONG HardwareLatency
;
159 PPROCESSOR_IDLE_HANDLER Handler
;
160 } PROCESSOR_IDLE_HANDLER_INFO
, *PPROCESSOR_IDLE_HANDLER_INFO
;
163 (FASTCALL
*PSET_PROCESSOR_THROTTLE
)(
167 (FASTCALL
*PSET_PROCESSOR_THROTTLE2
)(
170 #define MAX_IDLE_HANDLERS 3
172 typedef struct _PROCESSOR_STATE_HANDLER
{
174 BOOLEAN ThrottleOnIdle
;
175 PSET_PROCESSOR_THROTTLE SetThrottle
;
176 ULONG NumIdleHandlers
;
177 PROCESSOR_IDLE_HANDLER_INFO IdleHandler
[MAX_IDLE_HANDLERS
];
178 } PROCESSOR_STATE_HANDLER
, *PPROCESSOR_STATE_HANDLER
;
180 typedef enum _POWER_STATE_HANDLER_TYPE
{
185 PowerStateSleeping4Firmware
,
186 PowerStateShutdownReset
,
187 PowerStateShutdownOff
,
189 } POWER_STATE_HANDLER_TYPE
, *PPOWER_STATE_HANDLER_TYPE
;
192 (NTAPI
*PENTER_STATE_SYSTEM_HANDLER
)(
193 IN PVOID SystemContext
);
196 (NTAPI
*PENTER_STATE_HANDLER
)(
198 IN PENTER_STATE_SYSTEM_HANDLER SystemHandler OPTIONAL
,
199 IN PVOID SystemContext
,
200 IN LONG NumberProcessors
,
201 IN LONG
volatile *Number
);
203 typedef struct _POWER_STATE_HANDLER
{
204 POWER_STATE_HANDLER_TYPE Type
;
207 PENTER_STATE_HANDLER Handler
;
209 } POWER_STATE_HANDLER
, *PPOWER_STATE_HANDLER
;
212 (NTAPI
*PENTER_STATE_NOTIFY_HANDLER
)(
213 IN POWER_STATE_HANDLER_TYPE State
,
215 IN BOOLEAN Entering
);
217 typedef struct _POWER_STATE_NOTIFY_HANDLER
{
218 PENTER_STATE_NOTIFY_HANDLER Handler
;
220 } POWER_STATE_NOTIFY_HANDLER
, *PPOWER_STATE_NOTIFY_HANDLER
;
226 IN POWER_INFORMATION_LEVEL InformationLevel
,
227 IN PVOID InputBuffer OPTIONAL
,
228 IN ULONG InputBufferLength
,
229 OUT PVOID OutputBuffer OPTIONAL
,
230 IN ULONG OutputBufferLength
);
232 #define PROCESSOR_STATE_TYPE_PERFORMANCE 1
233 #define PROCESSOR_STATE_TYPE_THROTTLE 2
235 typedef struct _PROCESSOR_PERF_LEVEL
{
236 UCHAR PercentFrequency
;
239 } PROCESSOR_PERF_LEVEL
, *PPROCESSOR_PERF_LEVEL
;
241 typedef struct _PROCESSOR_PERF_STATE
{
242 UCHAR PercentFrequency
;
252 ULONGLONG PerformanceTime
;
253 } PROCESSOR_PERF_STATE
, *PPROCESSOR_PERF_STATE
;
255 typedef struct _PROCESSOR_STATE_HANDLER2
{
256 ULONG NumIdleHandlers
;
257 PROCESSOR_IDLE_HANDLER_INFO IdleHandler
[MAX_IDLE_HANDLERS
];
258 PSET_PROCESSOR_THROTTLE2 SetPerfLevel
;
259 ULONG HardwareLatency
;
261 PROCESSOR_PERF_LEVEL PerfLevel
[1];
262 } PROCESSOR_STATE_HANDLER2
, *PPROCESSOR_STATE_HANDLER2
;
267 NtSetThreadExecutionState(
268 IN EXECUTION_STATE esFlags
,
269 OUT EXECUTION_STATE
*PreviousFlags
);
274 NtRequestWakeupLatency(
275 IN LATENCY_TIME latency
);
280 NtInitiatePowerAction(
281 IN POWER_ACTION SystemAction
,
282 IN SYSTEM_POWER_STATE MinSystemState
,
284 IN BOOLEAN Asynchronous
);
289 NtSetSystemPowerState(
290 IN POWER_ACTION SystemAction
,
291 IN SYSTEM_POWER_STATE MinSystemState
,
297 NtGetDevicePowerState(
299 OUT DEVICE_POWER_STATE
*State
);
304 NtCancelDeviceWakeupRequest(
310 NtIsSystemResumeAutomatic(VOID
);
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 */