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.
30 #define POWER_PERF_SCALE 100
31 #define PERF_LEVEL_TO_PERCENT(x) (((x) * 1000) / (POWER_PERF_SCALE * 10))
32 #define PERCENT_TO_PERF_LEVEL(x) (((x) * POWER_PERF_SCALE * 10) / 1000)
37 } BATTERY_REPORTING_SCALE
, *PBATTERY_REPORTING_SCALE
;
39 typedef struct _PROCESSOR_IDLE_TIMES
{
42 ULONG IdleHandlerReserved
[4];
43 } PROCESSOR_IDLE_TIMES
, *PPROCESSOR_IDLE_TIMES
;
46 (FASTCALL
*PPROCESSOR_IDLE_HANDLER
)(
47 IN OUT PPROCESSOR_IDLE_TIMES IdleTimes
);
49 typedef struct _PROCESSOR_IDLE_HANDLER_INFO
{
50 ULONG HardwareLatency
;
51 PPROCESSOR_IDLE_HANDLER Handler
;
52 } PROCESSOR_IDLE_HANDLER_INFO
, *PPROCESSOR_IDLE_HANDLER_INFO
;
55 (FASTCALL
*PSET_PROCESSOR_THROTTLE
)(
59 (FASTCALL
*PSET_PROCESSOR_THROTTLE2
)(
62 #define MAX_IDLE_HANDLERS 3
64 typedef struct _PROCESSOR_STATE_HANDLER
{
66 BOOLEAN ThrottleOnIdle
;
67 PSET_PROCESSOR_THROTTLE SetThrottle
;
68 ULONG NumIdleHandlers
;
69 PROCESSOR_IDLE_HANDLER_INFO IdleHandler
[MAX_IDLE_HANDLERS
];
70 } PROCESSOR_STATE_HANDLER
, *PPROCESSOR_STATE_HANDLER
;
72 typedef enum _POWER_STATE_HANDLER_TYPE
{
77 PowerStateSleeping4Firmware
,
78 PowerStateShutdownReset
,
79 PowerStateShutdownOff
,
81 } POWER_STATE_HANDLER_TYPE
, *PPOWER_STATE_HANDLER_TYPE
;
84 (NTAPI
*PENTER_STATE_SYSTEM_HANDLER
)(
85 IN PVOID SystemContext
);
88 (NTAPI
*PENTER_STATE_HANDLER
)(
90 IN PENTER_STATE_SYSTEM_HANDLER SystemHandler OPTIONAL
,
91 IN PVOID SystemContext
,
92 IN LONG NumberProcessors
,
93 IN LONG
volatile *Number
);
95 typedef struct _POWER_STATE_HANDLER
{
96 POWER_STATE_HANDLER_TYPE Type
;
99 PENTER_STATE_HANDLER Handler
;
101 } POWER_STATE_HANDLER
, *PPOWER_STATE_HANDLER
;
104 (NTAPI
*PENTER_STATE_NOTIFY_HANDLER
)(
105 IN POWER_STATE_HANDLER_TYPE State
,
107 IN BOOLEAN Entering
);
109 typedef struct _POWER_STATE_NOTIFY_HANDLER
{
110 PENTER_STATE_NOTIFY_HANDLER Handler
;
112 } POWER_STATE_NOTIFY_HANDLER
, *PPOWER_STATE_NOTIFY_HANDLER
;
118 IN POWER_INFORMATION_LEVEL InformationLevel
,
119 IN PVOID InputBuffer OPTIONAL
,
120 IN ULONG InputBufferLength
,
121 OUT PVOID OutputBuffer OPTIONAL
,
122 IN ULONG OutputBufferLength
);
124 #define PROCESSOR_STATE_TYPE_PERFORMANCE 1
125 #define PROCESSOR_STATE_TYPE_THROTTLE 2
127 typedef struct _PROCESSOR_PERF_LEVEL
{
128 UCHAR PercentFrequency
;
131 } PROCESSOR_PERF_LEVEL
, *PPROCESSOR_PERF_LEVEL
;
133 typedef struct _PROCESSOR_PERF_STATE
{
134 UCHAR PercentFrequency
;
144 ULONGLONG PerformanceTime
;
145 } PROCESSOR_PERF_STATE
, *PPROCESSOR_PERF_STATE
;
147 typedef struct _PROCESSOR_STATE_HANDLER2
{
148 ULONG NumIdleHandlers
;
149 PROCESSOR_IDLE_HANDLER_INFO IdleHandler
[MAX_IDLE_HANDLERS
];
150 PSET_PROCESSOR_THROTTLE2 SetPerfLevel
;
151 ULONG HardwareLatency
;
153 PROCESSOR_PERF_LEVEL PerfLevel
[1];
154 } PROCESSOR_STATE_HANDLER2
, *PPROCESSOR_STATE_HANDLER2
;
159 NtSetThreadExecutionState(
160 IN EXECUTION_STATE esFlags
,
161 OUT EXECUTION_STATE
*PreviousFlags
);
166 NtRequestWakeupLatency(
167 IN LATENCY_TIME latency
);
172 NtInitiatePowerAction(
173 IN POWER_ACTION SystemAction
,
174 IN SYSTEM_POWER_STATE MinSystemState
,
176 IN BOOLEAN Asynchronous
);
181 NtSetSystemPowerState(
182 IN POWER_ACTION SystemAction
,
183 IN SYSTEM_POWER_STATE MinSystemState
,
189 NtGetDevicePowerState(
191 OUT DEVICE_POWER_STATE
*State
);
196 NtCancelDeviceWakeupRequest(
202 NtIsSystemResumeAutomatic(
208 NtRequestDeviceWakeup(
211 #define WINLOGON_LOCK_ON_SLEEP 0x00000001
214 BOOLEAN PowerButtonPresent
;
215 BOOLEAN SleepButtonPresent
;
222 BOOLEAN HiberFilePresent
;
224 BOOLEAN VideoDimPresent
;
227 BOOLEAN ThermalControl
;
228 BOOLEAN ProcessorThrottle
;
229 UCHAR ProcessorMinThrottle
;
230 #if (NTDDI_VERSION < NTDDI_WINXP)
231 UCHAR ProcessorThrottleScale
;
234 UCHAR ProcessorMaxThrottle
;
235 BOOLEAN FastSystemS4
;
237 #endif // (NTDDI_VERSION < NTDDI_WINXP)
238 BOOLEAN DiskSpinDown
;
240 BOOLEAN SystemBatteriesPresent
;
241 BOOLEAN BatteriesAreShortTerm
;
242 BATTERY_REPORTING_SCALE BatteryScale
[3];
243 SYSTEM_POWER_STATE AcOnLineWake
;
244 SYSTEM_POWER_STATE SoftLidWake
;
245 SYSTEM_POWER_STATE RtcWake
;
246 SYSTEM_POWER_STATE MinDeviceWakeState
;
247 SYSTEM_POWER_STATE DefaultLowLatencyWake
;
248 } SYSTEM_POWER_CAPABILITIES
, *PSYSTEM_POWER_CAPABILITIES
;
252 BOOLEAN BatteryPresent
;
257 ULONG RemainingCapacity
;
262 } SYSTEM_BATTERY_STATE
, *PSYSTEM_BATTERY_STATE
;
264 typedef struct _PROCESSOR_POWER_INFORMATION
{
270 ULONG CurrentIdleState
;
271 } PROCESSOR_POWER_INFORMATION
, *PPROCESSOR_POWER_INFORMATION
;
277 #endif /* __NTPOAPI_H */