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