Import w32api version 2.5 include files
[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 #pragma pack(push,4)
35
36 #include "ntddk.h"
37 #include "batclass.h"
38
39 #define POWER_PERF_SCALE 100
40 #define PERF_LEVEL_TO_PERCENT(x) (((x) * 1000) / (POWER_PERF_SCALE * 10))
41 #define PERCENT_TO_PERF_LEVEL(x) (((x) * POWER_PERF_SCALE * 10) / 1000)
42
43 typedef struct _PROCESSOR_IDLE_TIMES {
44 ULONGLONG StartTime;
45 ULONGLONG EndTime;
46 ULONG IdleHandlerReserved[4];
47 } PROCESSOR_IDLE_TIMES, *PPROCESSOR_IDLE_TIMES;
48
49 typedef BOOLEAN DDKFASTAPI
50 (*PPROCESSOR_IDLE_HANDLER)(
51 IN OUT PPROCESSOR_IDLE_TIMES IdleTimes);
52
53 typedef struct _PROCESSOR_IDLE_HANDLER_INFO {
54 ULONG HardwareLatency;
55 PPROCESSOR_IDLE_HANDLER Handler;
56 } PROCESSOR_IDLE_HANDLER_INFO, *PPROCESSOR_IDLE_HANDLER_INFO;
57
58 typedef VOID DDKFASTAPI
59 (*PSET_PROCESSOR_THROTTLE)(
60 IN UCHAR Throttle);
61
62 typedef NTSTATUS DDKFASTAPI
63 (*PSET_PROCESSOR_THROTTLE2)(
64 IN UCHAR Throttle);
65
66 #define MAX_IDLE_HANDLERS 3
67
68 typedef struct _PROCESSOR_STATE_HANDLER {
69 UCHAR ThrottleScale;
70 BOOLEAN ThrottleOnIdle;
71 PSET_PROCESSOR_THROTTLE SetThrottle;
72 ULONG NumIdleHandlers;
73 PROCESSOR_IDLE_HANDLER_INFO IdleHandler[MAX_IDLE_HANDLERS];
74 } PROCESSOR_STATE_HANDLER, *PPROCESSOR_STATE_HANDLER;
75
76 typedef enum _POWER_STATE_HANDLER_TYPE {
77 PowerStateSleeping1,
78 PowerStateSleeping2,
79 PowerStateSleeping3,
80 PowerStateSleeping4,
81 PowerStateSleeping4Firmware,
82 PowerStateShutdownReset,
83 PowerStateShutdownOff,
84 PowerStateMaximum
85 } POWER_STATE_HANDLER_TYPE, *PPOWER_STATE_HANDLER_TYPE;
86
87 typedef NTSTATUS DDKAPI
88 (*PENTER_STATE_SYSTEM_HANDLER)(
89 IN PVOID SystemContext);
90
91 typedef NTSTATUS DDKAPI
92 (*PENTER_STATE_HANDLER)(
93 IN PVOID Context,
94 IN PENTER_STATE_SYSTEM_HANDLER SystemHandler OPTIONAL,
95 IN PVOID SystemContext,
96 IN LONG NumberProcessors,
97 IN VOLATILE PLONG Number);
98
99 typedef struct _POWER_STATE_HANDLER {
100 POWER_STATE_HANDLER_TYPE Type;
101 BOOLEAN RtcWake;
102 UCHAR Spare[3];
103 PENTER_STATE_HANDLER Handler;
104 PVOID Context;
105 } POWER_STATE_HANDLER, *PPOWER_STATE_HANDLER;
106
107 typedef NTSTATUS STDCALL
108 (*PENTER_STATE_NOTIFY_HANDLER)(
109 IN POWER_STATE_HANDLER_TYPE State,
110 IN PVOID Context,
111 IN BOOLEAN Entering);
112
113 typedef struct _POWER_STATE_NOTIFY_HANDLER {
114 PENTER_STATE_NOTIFY_HANDLER Handler;
115 PVOID Context;
116 } POWER_STATE_NOTIFY_HANDLER, *PPOWER_STATE_NOTIFY_HANDLER;
117
118 NTOSAPI
119 NTSTATUS
120 DDKAPI
121 NtPowerInformation(
122 IN POWER_INFORMATION_LEVEL InformationLevel,
123 IN PVOID InputBuffer OPTIONAL,
124 IN ULONG InputBufferLength,
125 OUT PVOID OutputBuffer OPTIONAL,
126 IN ULONG OutputBufferLength);
127
128 #define PROCESSOR_STATE_TYPE_PERFORMANCE 1
129 #define PROCESSOR_STATE_TYPE_THROTTLE 2
130
131 typedef struct _PROCESSOR_PERF_LEVEL {
132 UCHAR PercentFrequency;
133 UCHAR Reserved;
134 USHORT Flags;
135 } PROCESSOR_PERF_LEVEL, *PPROCESSOR_PERF_LEVEL;
136
137 typedef struct _PROCESSOR_PERF_STATE {
138 UCHAR PercentFrequency;
139 UCHAR MinCapacity;
140 USHORT Power;
141 UCHAR IncreaseLevel;
142 UCHAR DecreaseLevel;
143 USHORT Flags;
144 ULONG IncreaseTime;
145 ULONG DecreaseTime;
146 ULONG IncreaseCount;
147 ULONG DecreaseCount;
148 ULONGLONG PerformanceTime;
149 } PROCESSOR_PERF_STATE, *PPROCESSOR_PERF_STATE;
150
151 typedef struct _PROCESSOR_STATE_HANDLER2 {
152 ULONG NumIdleHandlers;
153 PROCESSOR_IDLE_HANDLER_INFO IdleHandler[MAX_IDLE_HANDLERS];
154 PSET_PROCESSOR_THROTTLE2 SetPerfLevel;
155 ULONG HardwareLatency;
156 UCHAR NumPerfStates;
157 PROCESSOR_PERF_LEVEL PerfLevel[1];
158 } PROCESSOR_STATE_HANDLER2, *PPROCESSOR_STATE_HANDLER2;
159
160
161 NTOSAPI
162 NTSTATUS
163 DDKAPI
164 NtSetThreadExecutionState(
165 IN EXECUTION_STATE esFlags,
166 OUT EXECUTION_STATE *PreviousFlags);
167
168 NTOSAPI
169 NTSTATUS
170 DDKAPI
171 NtRequestWakeupLatency(
172 IN LATENCY_TIME latency);
173
174 NTOSAPI
175 NTSTATUS
176 DDKAPI
177 NtInitiatePowerAction(
178 IN POWER_ACTION SystemAction,
179 IN SYSTEM_POWER_STATE MinSystemState,
180 IN ULONG Flags,
181 IN BOOLEAN Asynchronous);
182
183 NTOSAPI
184 NTSTATUS
185 DDKAPI
186 NtSetSystemPowerState(
187 IN POWER_ACTION SystemAction,
188 IN SYSTEM_POWER_STATE MinSystemState,
189 IN ULONG Flags);
190
191 NTOSAPI
192 NTSTATUS
193 DDKAPI
194 NtGetDevicePowerState(
195 IN HANDLE Device,
196 OUT DEVICE_POWER_STATE *State);
197
198 NTOSAPI
199 NTSTATUS
200 DDKAPI
201 NtCancelDeviceWakeupRequest(
202 IN HANDLE Device);
203
204 NTOSAPI
205 BOOLEAN
206 DDKAPI
207 NtIsSystemResumeAutomatic(
208 VOID);
209
210 NTOSAPI
211 NTSTATUS
212 DDKAPI
213 NtRequestDeviceWakeup(
214 IN HANDLE Device);
215
216 #define WINLOGON_LOCK_ON_SLEEP 0x00000001
217
218 typedef struct _PROCESSOR_POWER_INFORMATION {
219 ULONG Number;
220 ULONG MaxMhz;
221 ULONG CurrentMhz;
222 ULONG MhzLimit;
223 ULONG MaxIdleState;
224 ULONG CurrentIdleState;
225 } PROCESSOR_POWER_INFORMATION, *PPROCESSOR_POWER_INFORMATION;
226
227
228 #pragma pack(pop)
229
230 #ifdef __cplusplus
231 }
232 #endif
233
234 #endif /* __NTPOAPI_H */