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.
27 #pragma GCC system_header
36 #define POWER_PERF_SCALE 100
37 #define PERF_LEVEL_TO_PERCENT(x) (((x) * 1000) / (POWER_PERF_SCALE * 10))
38 #define PERCENT_TO_PERF_LEVEL(x) (((x) * POWER_PERF_SCALE * 10) / 1000)
40 typedef struct _PROCESSOR_IDLE_TIMES
{
43 ULONG IdleHandlerReserved
[4];
44 } PROCESSOR_IDLE_TIMES
, *PPROCESSOR_IDLE_TIMES
;
47 (FASTCALL
*PPROCESSOR_IDLE_HANDLER
)(
48 IN OUT PPROCESSOR_IDLE_TIMES IdleTimes
);
50 typedef struct _PROCESSOR_IDLE_HANDLER_INFO
{
51 ULONG HardwareLatency
;
52 PPROCESSOR_IDLE_HANDLER Handler
;
53 } PROCESSOR_IDLE_HANDLER_INFO
, *PPROCESSOR_IDLE_HANDLER_INFO
;
56 (FASTCALL
*PSET_PROCESSOR_THROTTLE
)(
60 (FASTCALL
*PSET_PROCESSOR_THROTTLE2
)(
63 #define MAX_IDLE_HANDLERS 3
65 typedef struct _PROCESSOR_STATE_HANDLER
{
67 BOOLEAN ThrottleOnIdle
;
68 PSET_PROCESSOR_THROTTLE SetThrottle
;
69 ULONG NumIdleHandlers
;
70 PROCESSOR_IDLE_HANDLER_INFO IdleHandler
[MAX_IDLE_HANDLERS
];
71 } PROCESSOR_STATE_HANDLER
, *PPROCESSOR_STATE_HANDLER
;
73 typedef enum _POWER_STATE_HANDLER_TYPE
{
78 PowerStateSleeping4Firmware
,
79 PowerStateShutdownReset
,
80 PowerStateShutdownOff
,
82 } POWER_STATE_HANDLER_TYPE
, *PPOWER_STATE_HANDLER_TYPE
;
85 (NTAPI
*PENTER_STATE_SYSTEM_HANDLER
)(
86 IN PVOID SystemContext
);
89 (NTAPI
*PENTER_STATE_HANDLER
)(
91 IN PENTER_STATE_SYSTEM_HANDLER SystemHandler OPTIONAL
,
92 IN PVOID SystemContext
,
93 IN LONG NumberProcessors
,
94 IN VOLATILE PLONG Number
);
96 typedef struct _POWER_STATE_HANDLER
{
97 POWER_STATE_HANDLER_TYPE Type
;
100 PENTER_STATE_HANDLER Handler
;
102 } POWER_STATE_HANDLER
, *PPOWER_STATE_HANDLER
;
105 (NTAPI
*PENTER_STATE_NOTIFY_HANDLER
)(
106 IN POWER_STATE_HANDLER_TYPE State
,
108 IN BOOLEAN Entering
);
110 typedef struct _POWER_STATE_NOTIFY_HANDLER
{
111 PENTER_STATE_NOTIFY_HANDLER Handler
;
113 } POWER_STATE_NOTIFY_HANDLER
, *PPOWER_STATE_NOTIFY_HANDLER
;
119 IN POWER_INFORMATION_LEVEL InformationLevel
,
120 IN PVOID InputBuffer OPTIONAL
,
121 IN ULONG InputBufferLength
,
122 OUT PVOID OutputBuffer OPTIONAL
,
123 IN ULONG OutputBufferLength
);
125 #define PROCESSOR_STATE_TYPE_PERFORMANCE 1
126 #define PROCESSOR_STATE_TYPE_THROTTLE 2
128 typedef struct _PROCESSOR_PERF_LEVEL
{
129 UCHAR PercentFrequency
;
132 } PROCESSOR_PERF_LEVEL
, *PPROCESSOR_PERF_LEVEL
;
134 typedef struct _PROCESSOR_PERF_STATE
{
135 UCHAR PercentFrequency
;
145 ULONGLONG PerformanceTime
;
146 } PROCESSOR_PERF_STATE
, *PPROCESSOR_PERF_STATE
;
148 typedef struct _PROCESSOR_STATE_HANDLER2
{
149 ULONG NumIdleHandlers
;
150 PROCESSOR_IDLE_HANDLER_INFO IdleHandler
[MAX_IDLE_HANDLERS
];
151 PSET_PROCESSOR_THROTTLE2 SetPerfLevel
;
152 ULONG HardwareLatency
;
154 PROCESSOR_PERF_LEVEL PerfLevel
[1];
155 } PROCESSOR_STATE_HANDLER2
, *PPROCESSOR_STATE_HANDLER2
;
160 NtSetThreadExecutionState(
161 IN EXECUTION_STATE esFlags
,
162 OUT EXECUTION_STATE
*PreviousFlags
);
167 NtRequestWakeupLatency(
168 IN LATENCY_TIME latency
);
173 NtInitiatePowerAction(
174 IN POWER_ACTION SystemAction
,
175 IN SYSTEM_POWER_STATE MinSystemState
,
177 IN BOOLEAN Asynchronous
);
182 NtSetSystemPowerState(
183 IN POWER_ACTION SystemAction
,
184 IN SYSTEM_POWER_STATE MinSystemState
,
190 NtGetDevicePowerState(
192 OUT DEVICE_POWER_STATE
*State
);
197 NtCancelDeviceWakeupRequest(
203 NtIsSystemResumeAutomatic(
209 NtRequestDeviceWakeup(
212 #define WINLOGON_LOCK_ON_SLEEP 0x00000001
214 typedef struct _PROCESSOR_POWER_INFORMATION
{
220 ULONG CurrentIdleState
;
221 } PROCESSOR_POWER_INFORMATION
, *PPROCESSOR_POWER_INFORMATION
;
227 #endif /* __NTPOAPI_H */