4 * APIs for power management.
6 * This file is part of the MinGW 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 * DISCLAMED. This includes but is not limited to warranties of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
27 #pragma GCC system_header
40 #define ES_SYSTEM_REQUIRED 0x00000001
41 #define ES_DISPLAY_REQUIRED 0x00000002
42 #define ES_USER_PRESENT 0x00000004
43 #define ES_CONTINUOUS 0x80000000
45 typedef enum _LATENCY_TIME {
48 } LATENCY_TIME, *PLATENCY_TIME;
50 #define POWER_SYSTEM_MAXIMUM PowerSystemMaximum
52 typedef enum _POWER_INFORMATION_LEVEL {
57 SystemPowerCapabilities,
59 SystemPowerStateHandler,
60 ProcessorStateHandler,
61 SystemPowerPolicyCurrent,
62 AdministratorPowerPolicy,
63 SystemReserveHiberFile,
65 SystemPowerInformation,
66 ProcessorStateHandler2,
70 SystemPowerStateNotifyHandler,
71 ProcessorPowerPolicyAc,
72 ProcessorPowerPolicyDc,
73 VerifyProcessorPowerPolicyAc,
74 VerifyProcessorPowerPolicyDc,
75 ProcessorPowerPolicyCurrent
76 } POWER_INFORMATION_LEVEL;
78 #define POWER_PERF_SCALE 100
79 #define PERF_LEVEL_TO_PERCENT(x) (((x) * 1000) / (POWER_PERF_SCALE * 10))
80 #define PERCENT_TO_PERF_LEVEL(x) (((x) * POWER_PERF_SCALE * 10) / 1000)
82 typedef struct _PROCESSOR_IDLE_TIMES {
85 ULONG IdleHandlerReserved[4];
86 } PROCESSOR_IDLE_TIMES, *PPROCESSOR_IDLE_TIMES;
88 typedef BOOLEAN DDKFASTAPI
89 (*PPROCESSOR_IDLE_HANDLER)(
90 IN OUT PPROCESSOR_IDLE_TIMES IdleTimes);
92 typedef struct _PROCESSOR_IDLE_HANDLER_INFO {
93 ULONG HardwareLatency;
94 PPROCESSOR_IDLE_HANDLER Handler;
95 } PROCESSOR_IDLE_HANDLER_INFO, *PPROCESSOR_IDLE_HANDLER_INFO;
97 typedef VOID DDKFASTAPI
98 (*PSET_PROCESSOR_THROTTLE)(
101 typedef NTSTATUS DDKFASTAPI
102 (*PSET_PROCESSOR_THROTTLE2)(
105 #define MAX_IDLE_HANDLERS 3
107 typedef struct _PROCESSOR_STATE_HANDLER {
109 BOOLEAN ThrottleOnIdle;
110 PSET_PROCESSOR_THROTTLE SetThrottle;
111 ULONG NumIdleHandlers;
112 PROCESSOR_IDLE_HANDLER_INFO IdleHandler[MAX_IDLE_HANDLERS];
113 } PROCESSOR_STATE_HANDLER, *PPROCESSOR_STATE_HANDLER;
115 typedef enum _POWER_STATE_HANDLER_TYPE {
120 PowerStateSleeping4Firmware,
121 PowerStateShutdownReset,
122 PowerStateShutdownOff,
124 } POWER_STATE_HANDLER_TYPE, *PPOWER_STATE_HANDLER_TYPE;
126 typedef NTSTATUS DDKAPI
127 (*PENTER_STATE_SYSTEM_HANDLER)(
128 IN PVOID SystemContext);
130 typedef NTSTATUS DDKAPI
131 (*PENTER_STATE_HANDLER)(
133 IN PENTER_STATE_SYSTEM_HANDLER SystemHandler OPTIONAL,
134 IN PVOID SystemContext,
135 IN LONG NumberProcessors,
136 IN VOLATILE PLONG Number);
138 typedef struct _POWER_STATE_HANDLER {
139 POWER_STATE_HANDLER_TYPE Type;
142 PENTER_STATE_HANDLER Handler;
144 } POWER_STATE_HANDLER, *PPOWER_STATE_HANDLER;
146 typedef NTSTATUS STDCALL
147 (*PENTER_STATE_NOTIFY_HANDLER)(
148 IN POWER_STATE_HANDLER_TYPE State,
150 IN BOOLEAN Entering);
152 typedef struct _POWER_STATE_NOTIFY_HANDLER {
153 PENTER_STATE_NOTIFY_HANDLER Handler;
155 } POWER_STATE_NOTIFY_HANDLER, *PPOWER_STATE_NOTIFY_HANDLER;
161 IN POWER_INFORMATION_LEVEL InformationLevel,
162 IN PVOID InputBuffer OPTIONAL,
163 IN ULONG InputBufferLength,
164 OUT PVOID OutputBuffer OPTIONAL,
165 IN ULONG OutputBufferLength);
167 #define PROCESSOR_STATE_TYPE_PERFORMANCE 1
168 #define PROCESSOR_STATE_TYPE_THROTTLE 2
170 typedef struct _PROCESSOR_PERF_LEVEL {
171 UCHAR PercentFrequency;
174 } PROCESSOR_PERF_LEVEL, *PPROCESSOR_PERF_LEVEL;
176 typedef struct _PROCESSOR_PERF_STATE {
177 UCHAR PercentFrequency;
187 ULONGLONG PerformanceTime;
188 } PROCESSOR_PERF_STATE, *PPROCESSOR_PERF_STATE;
190 typedef struct _PROCESSOR_STATE_HANDLER2 {
191 ULONG NumIdleHandlers;
192 PROCESSOR_IDLE_HANDLER_INFO IdleHandler[MAX_IDLE_HANDLERS];
193 PSET_PROCESSOR_THROTTLE2 SetPerfLevel;
194 ULONG HardwareLatency;
196 PROCESSOR_PERF_LEVEL PerfLevel[1];
197 } PROCESSOR_STATE_HANDLER2, *PPROCESSOR_STATE_HANDLER2;
199 /* POWER_ACTION_POLICY.Flags constants */
200 #define POWER_ACTION_QUERY_ALLOWED 0x00000001
201 #define POWER_ACTION_UI_ALLOWED 0x00000002
202 #define POWER_ACTION_OVERRIDE_APPS 0x00000004
203 #define POWER_ACTION_LIGHTEST_FIRST 0x10000000
204 #define POWER_ACTION_LOCK_CONSOLE 0x20000000
205 #define POWER_ACTION_DISABLE_WAKES 0x40000000
206 #define POWER_ACTION_CRITICAL 0x80000000
208 /* POWER_ACTION_POLICY.EventCode constants */
209 #define POWER_LEVEL_USER_NOTIFY_TEXT 0x00000001
210 #define POWER_LEVEL_USER_NOTIFY_SOUND 0x00000002
211 #define POWER_LEVEL_USER_NOTIFY_EXEC 0x00000004
212 #define POWER_USER_NOTIFY_BUTTON 0x00000008
213 #define POWER_USER_NOTIFY_SHUTDOWN 0x00000010
214 #define POWER_FORCE_TRIGGER_RESET 0x80000000
216 typedef struct _POWER_ACTION_POLICY {
220 } POWER_ACTION_POLICY, *PPOWER_ACTION_POLICY;
222 typedef struct _SYSTEM_POWER_LEVEL {
226 POWER_ACTION_POLICY PowerPolicy;
227 SYSTEM_POWER_STATE MinSystemState;
228 } SYSTEM_POWER_LEVEL, *PSYSTEM_POWER_LEVEL;
230 #define DISCHARGE_POLICY_CRITICAL 0
231 #define DISCHARGE_POLICY_LOW 1
232 #define NUM_DISCHARGE_POLICIES 4
234 #define PO_THROTTLE_NONE 0
235 #define PO_THROTTLE_CONSTANT 1
236 #define PO_THROTTLE_DEGRADE 2
237 #define PO_THROTTLE_ADAPTIVE 3
238 #define PO_THROTTLE_MAXIMUM 4
240 typedef struct _SYSTEM_POWER_POLICY {
242 POWER_ACTION_POLICY PowerButton;
243 POWER_ACTION_POLICY SleepButton;
244 POWER_ACTION_POLICY LidClose;
245 SYSTEM_POWER_STATE LidOpenWake;
247 POWER_ACTION_POLICY Idle;
249 UCHAR IdleSensitivity;
250 UCHAR DynamicThrottle;
252 SYSTEM_POWER_STATE MinSleep;
253 SYSTEM_POWER_STATE MaxSleep;
254 SYSTEM_POWER_STATE ReducedLatencySleep;
258 ULONG BroadcastCapacityResolution;
259 SYSTEM_POWER_LEVEL DischargePolicy[NUM_DISCHARGE_POLICIES];
261 BOOLEAN VideoDimDisplay;
262 ULONG VideoReserved[3];
263 ULONG SpindownTimeout;
264 BOOLEAN OptimizeForPower;
265 UCHAR FanThrottleTolerance;
266 UCHAR ForcedThrottle;
268 POWER_ACTION_POLICY OverThrottled;
269 } SYSTEM_POWER_POLICY, *PSYSTEM_POWER_POLICY;
271 typedef struct _PROCESSOR_POWER_POLICY_INFO {
276 UCHAR PromotePercent;
278 ULONG AllowDemotion : 1;
279 ULONG AllowPromotion : 1;
281 } PROCESSOR_POWER_POLICY_INFO, *PPROCESSOR_POWER_POLICY_INFO;
283 typedef struct _PROCESSOR_POWER_POLICY {
285 UCHAR DynamicThrottle;
289 PROCESSOR_POWER_POLICY_INFO Policy[3];
290 } PROCESSOR_POWER_POLICY, *PPROCESSOR_POWER_POLICY;
292 typedef struct _ADMINISTRATOR_POWER_POLICY {
293 SYSTEM_POWER_STATE MinSleep;
294 SYSTEM_POWER_STATE MaxSleep;
295 ULONG MinVideoTimeout;
296 ULONG MaxVideoTimeout;
297 ULONG MinSpindownTimeout;
298 ULONG MaxSpindownTimeout;
299 } ADMINISTRATOR_POWER_POLICY, *PADMINISTRATOR_POWER_POLICY;
304 NtSetThreadExecutionState(
305 IN EXECUTION_STATE esFlags,
306 OUT EXECUTION_STATE *PreviousFlags);
311 NtRequestWakeupLatency(
312 IN LATENCY_TIME latency);
317 NtInitiatePowerAction(
318 IN POWER_ACTION SystemAction,
319 IN SYSTEM_POWER_STATE MinSystemState,
321 IN BOOLEAN Asynchronous);
326 NtSetSystemPowerState(
327 IN POWER_ACTION SystemAction,
328 IN SYSTEM_POWER_STATE MinSystemState,
334 NtGetDevicePowerState(
336 OUT DEVICE_POWER_STATE *State);
341 NtCancelDeviceWakeupRequest(
347 NtIsSystemResumeAutomatic(
353 NtRequestDeviceWakeup(
356 #define WINLOGON_LOCK_ON_SLEEP 0x00000001
358 typedef struct _SYSTEM_POWER_INFORMATION {
359 ULONG MaxIdlenessAllowed;
363 } SYSTEM_POWER_INFORMATION, *PSYSTEM_POWER_INFORMATION;
365 typedef struct _PROCESSOR_POWER_INFORMATION {
371 ULONG CurrentIdleState;
372 } PROCESSOR_POWER_INFORMATION, *PPROCESSOR_POWER_INFORMATION;
374 typedef struct _SYSTEM_BATTERY_STATE {
376 BOOLEAN BatteryPresent;
381 ULONG RemainingCapacity;
386 } SYSTEM_BATTERY_STATE, *PSYSTEM_BATTERY_STATE;
388 typedef struct _SYSTEM_POWER_CAPABILITIES {
389 BOOLEAN PowerButtonPresent;
390 BOOLEAN SleepButtonPresent;
397 BOOLEAN HiberFilePresent;
399 BOOLEAN VideoDimPresent;
402 BOOLEAN ThermalControl;
403 BOOLEAN ProcessorThrottle;
404 UCHAR ProcessorMinThrottle;
405 UCHAR ProcessorMaxThrottle;
407 BOOLEAN DiskSpinDown;
409 BOOLEAN SystemBatteriesPresent;
410 BOOLEAN BatteriesAreShortTerm;
411 BATTERY_REPORTING_SCALE BatteryScale[3];
412 SYSTEM_POWER_STATE AcOnLineWake;
413 SYSTEM_POWER_STATE SoftLidWake;
414 SYSTEM_POWER_STATE RtcWake;
415 SYSTEM_POWER_STATE MinDeviceWakeState;
416 SYSTEM_POWER_STATE DefaultLowLatencyWake;
417 } SYSTEM_POWER_CAPABILITIES, *PSYSTEM_POWER_CAPABILITIES;
425 #endif /* __NTPOAPI_H */