Remove last hardcode string I have check the soure 3more time after I found some...
[reactos.git] / reactos / w32api / include / ddk / ntpoapi.h
1 /*
2 * ntpoapi.h
3 *
4 * APIs for power management.
5 *
6 * This file is part of the w32api package.
7 *
8 * Contributors:
9 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
10 *
11 * THIS SOFTWARE IS NOT COPYRIGHTED
12 *
13 * This source code is offered for use in the public domain. You may
14 * use, modify or distribute it freely.
15 *
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.
20 *
21 */
22
23 #ifndef __NTPOAPI_H
24 #define __NTPOAPI_H
25
26 #if __GNUC__ >=3
27 #pragma GCC system_header
28 #endif
29
30 #ifdef __cplusplus
31 extern "C" {
32 #endif
33
34 #include "ntddk.h"
35 #include "batclass.h"
36
37 #define POWER_PERF_SCALE 100
38 #define PERF_LEVEL_TO_PERCENT(x) (((x) * 1000) / (POWER_PERF_SCALE * 10))
39 #define PERCENT_TO_PERF_LEVEL(x) (((x) * POWER_PERF_SCALE * 10) / 1000)
40
41 typedef struct _PROCESSOR_IDLE_TIMES {
42 ULONGLONG StartTime;
43 ULONGLONG EndTime;
44 ULONG IdleHandlerReserved[4];
45 } PROCESSOR_IDLE_TIMES, *PPROCESSOR_IDLE_TIMES;
46
47 typedef BOOLEAN DDKFASTAPI
48 (*PPROCESSOR_IDLE_HANDLER)(
49 IN OUT PPROCESSOR_IDLE_TIMES IdleTimes);
50
51 typedef struct _PROCESSOR_IDLE_HANDLER_INFO {
52 ULONG HardwareLatency;
53 PPROCESSOR_IDLE_HANDLER Handler;
54 } PROCESSOR_IDLE_HANDLER_INFO, *PPROCESSOR_IDLE_HANDLER_INFO;
55
56 typedef VOID DDKFASTAPI
57 (*PSET_PROCESSOR_THROTTLE)(
58 IN UCHAR Throttle);
59
60 typedef NTSTATUS DDKFASTAPI
61 (*PSET_PROCESSOR_THROTTLE2)(
62 IN UCHAR Throttle);
63
64 #define MAX_IDLE_HANDLERS 3
65
66 typedef struct _PROCESSOR_STATE_HANDLER {
67 UCHAR ThrottleScale;
68 BOOLEAN ThrottleOnIdle;
69 PSET_PROCESSOR_THROTTLE SetThrottle;
70 ULONG NumIdleHandlers;
71 PROCESSOR_IDLE_HANDLER_INFO IdleHandler[MAX_IDLE_HANDLERS];
72 } PROCESSOR_STATE_HANDLER, *PPROCESSOR_STATE_HANDLER;
73
74 typedef enum _POWER_STATE_HANDLER_TYPE {
75 PowerStateSleeping1,
76 PowerStateSleeping2,
77 PowerStateSleeping3,
78 PowerStateSleeping4,
79 PowerStateSleeping4Firmware,
80 PowerStateShutdownReset,
81 PowerStateShutdownOff,
82 PowerStateMaximum
83 } POWER_STATE_HANDLER_TYPE, *PPOWER_STATE_HANDLER_TYPE;
84
85 typedef NTSTATUS DDKAPI
86 (*PENTER_STATE_SYSTEM_HANDLER)(
87 IN PVOID SystemContext);
88
89 typedef NTSTATUS DDKAPI
90 (*PENTER_STATE_HANDLER)(
91 IN PVOID Context,
92 IN PENTER_STATE_SYSTEM_HANDLER SystemHandler OPTIONAL,
93 IN PVOID SystemContext,
94 IN LONG NumberProcessors,
95 IN VOLATILE PLONG Number);
96
97 typedef struct _POWER_STATE_HANDLER {
98 POWER_STATE_HANDLER_TYPE Type;
99 BOOLEAN RtcWake;
100 UCHAR Spare[3];
101 PENTER_STATE_HANDLER Handler;
102 PVOID Context;
103 } POWER_STATE_HANDLER, *PPOWER_STATE_HANDLER;
104
105 typedef NTSTATUS STDCALL
106 (*PENTER_STATE_NOTIFY_HANDLER)(
107 IN POWER_STATE_HANDLER_TYPE State,
108 IN PVOID Context,
109 IN BOOLEAN Entering);
110
111 typedef struct _POWER_STATE_NOTIFY_HANDLER {
112 PENTER_STATE_NOTIFY_HANDLER Handler;
113 PVOID Context;
114 } POWER_STATE_NOTIFY_HANDLER, *PPOWER_STATE_NOTIFY_HANDLER;
115
116 NTOSAPI
117 NTSTATUS
118 DDKAPI
119 NtPowerInformation(
120 IN POWER_INFORMATION_LEVEL InformationLevel,
121 IN PVOID InputBuffer OPTIONAL,
122 IN ULONG InputBufferLength,
123 OUT PVOID OutputBuffer OPTIONAL,
124 IN ULONG OutputBufferLength);
125
126 #define PROCESSOR_STATE_TYPE_PERFORMANCE 1
127 #define PROCESSOR_STATE_TYPE_THROTTLE 2
128
129 typedef struct _PROCESSOR_PERF_LEVEL {
130 UCHAR PercentFrequency;
131 UCHAR Reserved;
132 USHORT Flags;
133 } PROCESSOR_PERF_LEVEL, *PPROCESSOR_PERF_LEVEL;
134
135 typedef struct _PROCESSOR_PERF_STATE {
136 UCHAR PercentFrequency;
137 UCHAR MinCapacity;
138 USHORT Power;
139 UCHAR IncreaseLevel;
140 UCHAR DecreaseLevel;
141 USHORT Flags;
142 ULONG IncreaseTime;
143 ULONG DecreaseTime;
144 ULONG IncreaseCount;
145 ULONG DecreaseCount;
146 ULONGLONG PerformanceTime;
147 } PROCESSOR_PERF_STATE, *PPROCESSOR_PERF_STATE;
148
149 typedef struct _PROCESSOR_STATE_HANDLER2 {
150 ULONG NumIdleHandlers;
151 PROCESSOR_IDLE_HANDLER_INFO IdleHandler[MAX_IDLE_HANDLERS];
152 PSET_PROCESSOR_THROTTLE2 SetPerfLevel;
153 ULONG HardwareLatency;
154 UCHAR NumPerfStates;
155 PROCESSOR_PERF_LEVEL PerfLevel[1];
156 } PROCESSOR_STATE_HANDLER2, *PPROCESSOR_STATE_HANDLER2;
157
158 typedef struct _PROCESSOR_POWER_STATE {
159 PVOID IdleFunction;
160 ULONG Idle0KernelTimeLimit;
161 ULONG Idle0LastTime;
162 PVOID IdleHandlers;
163 PVOID IdleState;
164 ULONG IdleHandlersCount;
165 ULONGLONG LastCheck;
166 PROCESSOR_IDLE_TIMES IdleTimes;
167 ULONG IdleTime1;
168 ULONG PromotionCheck;
169 ULONG IdleTime2;
170 UCHAR CurrentThrottle;
171 UCHAR ThermalThrottleLimit;
172 UCHAR CurrentThrottleIndex;
173 UCHAR ThermalThrottleIndex;
174 ULONG LastKernelUserTime;
175 ULONG PerfIdleTime;
176 ULONG DebugDelta;
177 ULONG DebugCount;
178 ULONG LastSysTime;
179 ULONG TotalIdleStateTime[3];
180 ULONG TotalIdleTransitions[3];
181 ULONGLONG PreviousC3StateTime;
182 UCHAR KneeThrottleIndex;
183 UCHAR ThrottleLimitIndex;
184 UCHAR PerfStatesCount;
185 UCHAR ProcessorMinThrottle;
186 UCHAR ProcessorMaxThrottle;
187 UCHAR LastBusyPercentage;
188 UCHAR LastC3Percentage;
189 UCHAR LastAdjustedBusyPercentage;
190 ULONG PromotionCount;
191 ULONG DemotionCount;
192 ULONG ErrorCount;
193 ULONG RetryCount;
194 ULONG Flags;
195 LARGE_INTEGER PerfCounterFrequency;
196 ULONG PerfTickCount;
197 KTIMER PerfTimer;
198 KDPC PerfDpc;
199 PROCESSOR_PERF_STATE *PerfStates;
200 PVOID PerfSetThrottle;
201 ULONG LastC3KernelUserTime;
202 ULONG Spare1[1];
203 } PROCESSOR_POWER_STATE, *PPROCESSOR_POWER_STATE;
204
205 NTOSAPI
206 NTSTATUS
207 DDKAPI
208 NtSetThreadExecutionState(
209 IN EXECUTION_STATE esFlags,
210 OUT EXECUTION_STATE *PreviousFlags);
211
212 NTOSAPI
213 NTSTATUS
214 DDKAPI
215 NtRequestWakeupLatency(
216 IN LATENCY_TIME latency);
217
218 NTOSAPI
219 NTSTATUS
220 DDKAPI
221 NtInitiatePowerAction(
222 IN POWER_ACTION SystemAction,
223 IN SYSTEM_POWER_STATE MinSystemState,
224 IN ULONG Flags,
225 IN BOOLEAN Asynchronous);
226
227 NTOSAPI
228 NTSTATUS
229 DDKAPI
230 NtSetSystemPowerState(
231 IN POWER_ACTION SystemAction,
232 IN SYSTEM_POWER_STATE MinSystemState,
233 IN ULONG Flags);
234
235 NTOSAPI
236 NTSTATUS
237 DDKAPI
238 NtGetDevicePowerState(
239 IN HANDLE Device,
240 OUT DEVICE_POWER_STATE *State);
241
242 NTOSAPI
243 NTSTATUS
244 DDKAPI
245 NtCancelDeviceWakeupRequest(
246 IN HANDLE Device);
247
248 NTOSAPI
249 BOOLEAN
250 DDKAPI
251 NtIsSystemResumeAutomatic(
252 VOID);
253
254 NTOSAPI
255 NTSTATUS
256 DDKAPI
257 NtRequestDeviceWakeup(
258 IN HANDLE Device);
259
260 #define WINLOGON_LOCK_ON_SLEEP 0x00000001
261
262 typedef struct _PROCESSOR_POWER_INFORMATION {
263 ULONG Number;
264 ULONG MaxMhz;
265 ULONG CurrentMhz;
266 ULONG MhzLimit;
267 ULONG MaxIdleState;
268 ULONG CurrentIdleState;
269 } PROCESSOR_POWER_INFORMATION, *PPROCESSOR_POWER_INFORMATION;
270
271 #ifdef __cplusplus
272 }
273 #endif
274
275 #endif /* __NTPOAPI_H */