OSDN Git Service

2002-10-06 Casper Hornstrup <chorns@it.dk>
[pf3gnuchains/pf3gnuchains3x.git] / winsup / w32api / include / ddk / ntpoapi.h
1 /*
2  * ntpoapi.h
3  *
4  * APIs for power management.
5  *
6  * This file is part of the MinGW 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  * DISCLAMED. 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
40 #define ES_SYSTEM_REQUIRED                0x00000001
41 #define ES_DISPLAY_REQUIRED               0x00000002
42 #define ES_USER_PRESENT                   0x00000004
43 #define ES_CONTINUOUS                     0x80000000
44
45 typedef enum _LATENCY_TIME {
46         LT_DONT_CARE,
47         LT_LOWEST_LATENCY
48 } LATENCY_TIME, *PLATENCY_TIME;
49
50 #define POWER_SYSTEM_MAXIMUM              PowerSystemMaximum
51
52 typedef enum _POWER_INFORMATION_LEVEL {
53         SystemPowerPolicyAc,
54         SystemPowerPolicyDc,
55         VerifySystemPolicyAc,
56         VerifySystemPolicyDc,
57         SystemPowerCapabilities,
58         SystemBatteryState,
59         SystemPowerStateHandler,
60         ProcessorStateHandler,
61         SystemPowerPolicyCurrent,
62         AdministratorPowerPolicy,
63         SystemReserveHiberFile,
64         ProcessorInformation,
65         SystemPowerInformation,
66         ProcessorStateHandler2,
67         LastWakeTime,
68         LastSleepTime,
69         SystemExecutionState,
70         SystemPowerStateNotifyHandler,
71         ProcessorPowerPolicyAc,
72         ProcessorPowerPolicyDc,
73         VerifyProcessorPowerPolicyAc,
74         VerifyProcessorPowerPolicyDc,
75         ProcessorPowerPolicyCurrent
76 } POWER_INFORMATION_LEVEL;
77
78 #define POWER_PERF_SCALE                  100
79 #define PERF_LEVEL_TO_PERCENT(x)          (((x) * 1000) / (POWER_PERF_SCALE * 10))
80 #define PERCENT_TO_PERF_LEVEL(x)          (((x) * POWER_PERF_SCALE * 10) / 1000)
81
82 typedef struct _PROCESSOR_IDLE_TIMES {
83         ULONGLONG  StartTime;
84         ULONGLONG  EndTime;
85         ULONG  IdleHandlerReserved[4];
86 } PROCESSOR_IDLE_TIMES, *PPROCESSOR_IDLE_TIMES;
87
88 typedef BOOLEAN DDKFASTAPI
89 (*PPROCESSOR_IDLE_HANDLER)(
90   IN OUT PPROCESSOR_IDLE_TIMES IdleTimes);
91
92 typedef struct _PROCESSOR_IDLE_HANDLER_INFO {
93   ULONG  HardwareLatency;
94   PPROCESSOR_IDLE_HANDLER  Handler;
95 } PROCESSOR_IDLE_HANDLER_INFO, *PPROCESSOR_IDLE_HANDLER_INFO;
96
97 typedef VOID DDKFASTAPI
98 (*PSET_PROCESSOR_THROTTLE)(
99   IN UCHAR  Throttle);
100
101 typedef NTSTATUS DDKFASTAPI
102 (*PSET_PROCESSOR_THROTTLE2)(
103   IN UCHAR  Throttle);
104
105 #define MAX_IDLE_HANDLERS                 3
106
107 typedef struct _PROCESSOR_STATE_HANDLER {
108         UCHAR  ThrottleScale;
109         BOOLEAN  ThrottleOnIdle;
110         PSET_PROCESSOR_THROTTLE  SetThrottle;
111         ULONG  NumIdleHandlers;
112         PROCESSOR_IDLE_HANDLER_INFO  IdleHandler[MAX_IDLE_HANDLERS];
113 } PROCESSOR_STATE_HANDLER, *PPROCESSOR_STATE_HANDLER;
114
115 typedef enum _POWER_STATE_HANDLER_TYPE {
116         PowerStateSleeping1,
117         PowerStateSleeping2,
118         PowerStateSleeping3,
119         PowerStateSleeping4,
120         PowerStateSleeping4Firmware,
121         PowerStateShutdownReset,
122         PowerStateShutdownOff,
123         PowerStateMaximum
124 } POWER_STATE_HANDLER_TYPE, *PPOWER_STATE_HANDLER_TYPE;
125
126 typedef NTSTATUS DDKAPI
127 (*PENTER_STATE_SYSTEM_HANDLER)(
128   IN PVOID  SystemContext);
129
130 typedef NTSTATUS DDKAPI
131 (*PENTER_STATE_HANDLER)(
132   IN PVOID  Context,
133   IN PENTER_STATE_SYSTEM_HANDLER  SystemHandler  OPTIONAL,
134   IN PVOID  SystemContext,
135   IN LONG  NumberProcessors,
136   IN VOLATILE PLONG  Number);
137
138 typedef struct _POWER_STATE_HANDLER {
139         POWER_STATE_HANDLER_TYPE  Type;
140         BOOLEAN  RtcWake;
141         UCHAR  Spare[3];
142         PENTER_STATE_HANDLER  Handler;
143         PVOID  Context;
144 } POWER_STATE_HANDLER, *PPOWER_STATE_HANDLER;
145
146 typedef NTSTATUS STDCALL
147 (*PENTER_STATE_NOTIFY_HANDLER)(
148   IN POWER_STATE_HANDLER_TYPE  State,
149   IN PVOID  Context,
150   IN BOOLEAN  Entering);
151
152 typedef struct _POWER_STATE_NOTIFY_HANDLER {
153         PENTER_STATE_NOTIFY_HANDLER  Handler;
154         PVOID  Context;
155 } POWER_STATE_NOTIFY_HANDLER, *PPOWER_STATE_NOTIFY_HANDLER;
156
157 NTOSAPI
158 NTSTATUS
159 DDKAPI
160 NtPowerInformation(
161   IN POWER_INFORMATION_LEVEL  InformationLevel,
162   IN PVOID  InputBuffer OPTIONAL,
163   IN ULONG  InputBufferLength,
164   OUT PVOID  OutputBuffer OPTIONAL,
165   IN ULONG  OutputBufferLength);
166
167 #define PROCESSOR_STATE_TYPE_PERFORMANCE  1
168 #define PROCESSOR_STATE_TYPE_THROTTLE     2
169
170 typedef struct _PROCESSOR_PERF_LEVEL {
171   UCHAR  PercentFrequency;
172   UCHAR  Reserved;
173   USHORT  Flags;
174 } PROCESSOR_PERF_LEVEL, *PPROCESSOR_PERF_LEVEL;
175
176 typedef struct _PROCESSOR_PERF_STATE {
177   UCHAR  PercentFrequency;
178   UCHAR  MinCapacity;
179   USHORT  Power;
180   UCHAR  IncreaseLevel;
181   UCHAR  DecreaseLevel;
182   USHORT  Flags;
183   ULONG  IncreaseTime;
184   ULONG  DecreaseTime;
185   ULONG  IncreaseCount;
186   ULONG  DecreaseCount;
187   ULONGLONG  PerformanceTime;
188 } PROCESSOR_PERF_STATE, *PPROCESSOR_PERF_STATE;
189
190 typedef struct _PROCESSOR_STATE_HANDLER2 {
191         ULONG  NumIdleHandlers;
192         PROCESSOR_IDLE_HANDLER_INFO  IdleHandler[MAX_IDLE_HANDLERS];
193         PSET_PROCESSOR_THROTTLE2  SetPerfLevel;
194         ULONG  HardwareLatency;
195         UCHAR  NumPerfStates;
196         PROCESSOR_PERF_LEVEL  PerfLevel[1];
197 } PROCESSOR_STATE_HANDLER2, *PPROCESSOR_STATE_HANDLER2;
198
199 /* POWER_ACTION_POLICY.Flags constants */
200 #define POWER_ACTION_QUERY_ALLOWED        0x00000001
201 #define POWER_ACTION_UI_ALLOWED           0x00000002
202 #define POWER_ACTION_OVERRIDE_APPS        0x00000004
203 #define POWER_ACTION_LIGHTEST_FIRST       0x10000000
204 #define POWER_ACTION_LOCK_CONSOLE         0x20000000
205 #define POWER_ACTION_DISABLE_WAKES        0x40000000
206 #define POWER_ACTION_CRITICAL             0x80000000
207
208 /* POWER_ACTION_POLICY.EventCode constants */
209 #define POWER_LEVEL_USER_NOTIFY_TEXT      0x00000001
210 #define POWER_LEVEL_USER_NOTIFY_SOUND     0x00000002
211 #define POWER_LEVEL_USER_NOTIFY_EXEC      0x00000004
212 #define POWER_USER_NOTIFY_BUTTON          0x00000008
213 #define POWER_USER_NOTIFY_SHUTDOWN        0x00000010
214 #define POWER_FORCE_TRIGGER_RESET         0x80000000
215
216 typedef struct _POWER_ACTION_POLICY {
217         POWER_ACTION  Action;
218         ULONG  Flags;
219         ULONG  EventCode;
220 } POWER_ACTION_POLICY, *PPOWER_ACTION_POLICY;
221
222 typedef struct _SYSTEM_POWER_LEVEL {
223         BOOLEAN  Enable;
224         UCHAR  Spare[3];
225         ULONG  BatteryLevel;
226         POWER_ACTION_POLICY  PowerPolicy;
227         SYSTEM_POWER_STATE  MinSystemState;
228 } SYSTEM_POWER_LEVEL, *PSYSTEM_POWER_LEVEL;
229
230 #define DISCHARGE_POLICY_CRITICAL         0
231 #define DISCHARGE_POLICY_LOW              1
232 #define NUM_DISCHARGE_POLICIES            4
233
234 #define PO_THROTTLE_NONE                  0
235 #define PO_THROTTLE_CONSTANT              1
236 #define PO_THROTTLE_DEGRADE               2
237 #define PO_THROTTLE_ADAPTIVE              3
238 #define PO_THROTTLE_MAXIMUM               4
239
240 typedef struct _SYSTEM_POWER_POLICY {
241         ULONG  Revision;
242         POWER_ACTION_POLICY  PowerButton;
243         POWER_ACTION_POLICY  SleepButton;
244         POWER_ACTION_POLICY  LidClose;
245         SYSTEM_POWER_STATE  LidOpenWake;
246         ULONG  Reserved;
247         POWER_ACTION_POLICY  Idle;
248         ULONG  IdleTimeout;
249         UCHAR  IdleSensitivity;
250         UCHAR  DynamicThrottle;
251         UCHAR  Spare2[2];
252         SYSTEM_POWER_STATE  MinSleep;
253         SYSTEM_POWER_STATE  MaxSleep;
254         SYSTEM_POWER_STATE  ReducedLatencySleep;
255         ULONG  WinLogonFlags;
256         ULONG  Spare3;
257         ULONG  DozeS4Timeout;
258         ULONG  BroadcastCapacityResolution;
259         SYSTEM_POWER_LEVEL  DischargePolicy[NUM_DISCHARGE_POLICIES];
260         ULONG  VideoTimeout;
261         BOOLEAN  VideoDimDisplay;
262         ULONG  VideoReserved[3];
263         ULONG  SpindownTimeout;
264         BOOLEAN  OptimizeForPower;
265         UCHAR  FanThrottleTolerance;
266         UCHAR  ForcedThrottle;
267         UCHAR  MinThrottle;
268         POWER_ACTION_POLICY  OverThrottled;
269 } SYSTEM_POWER_POLICY, *PSYSTEM_POWER_POLICY;
270
271 typedef struct _PROCESSOR_POWER_POLICY_INFO {
272         ULONG  TimeCheck;
273         ULONG  DemoteLimit;
274         ULONG  PromoteLimit;
275         UCHAR  DemotePercent;
276         UCHAR  PromotePercent;
277         UCHAR  Spare[2];
278         ULONG  AllowDemotion : 1;
279         ULONG  AllowPromotion : 1;
280         ULONG  Reserved : 30;
281 } PROCESSOR_POWER_POLICY_INFO, *PPROCESSOR_POWER_POLICY_INFO;
282
283 typedef struct _PROCESSOR_POWER_POLICY {
284         ULONG  Revision;
285         UCHAR  DynamicThrottle;
286         UCHAR  Spare[3];
287         ULONG  Reserved;
288         ULONG  PolicyCount;
289         PROCESSOR_POWER_POLICY_INFO  Policy[3];
290 } PROCESSOR_POWER_POLICY, *PPROCESSOR_POWER_POLICY;
291
292 typedef struct _ADMINISTRATOR_POWER_POLICY {
293   SYSTEM_POWER_STATE  MinSleep;
294   SYSTEM_POWER_STATE  MaxSleep;
295   ULONG  MinVideoTimeout;
296   ULONG  MaxVideoTimeout;
297   ULONG  MinSpindownTimeout;
298   ULONG  MaxSpindownTimeout;
299 } ADMINISTRATOR_POWER_POLICY, *PADMINISTRATOR_POWER_POLICY;
300
301 NTOSAPI
302 NTSTATUS
303 DDKAPI
304 NtSetThreadExecutionState(
305   IN EXECUTION_STATE  esFlags,
306   OUT EXECUTION_STATE  *PreviousFlags);
307
308 NTOSAPI
309 NTSTATUS
310 DDKAPI
311 NtRequestWakeupLatency(
312   IN LATENCY_TIME  latency);
313
314 NTOSAPI
315 NTSTATUS
316 DDKAPI
317 NtInitiatePowerAction(
318   IN POWER_ACTION  SystemAction,
319   IN SYSTEM_POWER_STATE  MinSystemState,
320   IN ULONG  Flags,
321   IN BOOLEAN  Asynchronous);
322
323 NTOSAPI
324 NTSTATUS
325 DDKAPI
326 NtSetSystemPowerState(
327   IN POWER_ACTION SystemAction,
328   IN SYSTEM_POWER_STATE MinSystemState,
329   IN ULONG Flags);
330
331 NTOSAPI
332 NTSTATUS
333 DDKAPI
334 NtGetDevicePowerState(
335   IN HANDLE  Device,
336   OUT DEVICE_POWER_STATE  *State);
337
338 NTOSAPI
339 NTSTATUS
340 DDKAPI
341 NtCancelDeviceWakeupRequest(
342   IN HANDLE  Device);
343
344 NTOSAPI
345 BOOLEAN
346 DDKAPI
347 NtIsSystemResumeAutomatic(
348   VOID);
349
350 NTOSAPI
351 NTSTATUS
352 DDKAPI
353 NtRequestDeviceWakeup(
354   IN HANDLE  Device);
355
356 #define WINLOGON_LOCK_ON_SLEEP            0x00000001
357
358 typedef struct _SYSTEM_POWER_INFORMATION {
359   ULONG  MaxIdlenessAllowed;
360   ULONG  Idleness;
361   ULONG  TimeRemaining;
362   UCHAR  CoolingMode;
363 } SYSTEM_POWER_INFORMATION, *PSYSTEM_POWER_INFORMATION;
364
365 typedef struct _PROCESSOR_POWER_INFORMATION {
366   ULONG  Number;
367   ULONG  MaxMhz;
368   ULONG  CurrentMhz;
369   ULONG  MhzLimit;
370   ULONG  MaxIdleState;
371   ULONG  CurrentIdleState;
372 } PROCESSOR_POWER_INFORMATION, *PPROCESSOR_POWER_INFORMATION;
373
374 typedef struct _SYSTEM_BATTERY_STATE {
375   BOOLEAN  AcOnLine;
376   BOOLEAN  BatteryPresent;
377   BOOLEAN  Charging;
378   BOOLEAN  Discharging;
379   BOOLEAN  Spare1[4];
380   ULONG  MaxCapacity;
381   ULONG  RemainingCapacity;
382   ULONG  Rate;
383   ULONG  EstimatedTime;
384   ULONG  DefaultAlert1;
385   ULONG  DefaultAlert2;
386 } SYSTEM_BATTERY_STATE, *PSYSTEM_BATTERY_STATE;
387
388 typedef struct _SYSTEM_POWER_CAPABILITIES {
389   BOOLEAN  PowerButtonPresent;
390   BOOLEAN  SleepButtonPresent;
391   BOOLEAN  LidPresent;
392   BOOLEAN  SystemS1;
393   BOOLEAN  SystemS2;
394   BOOLEAN  SystemS3;
395   BOOLEAN  SystemS4;
396   BOOLEAN  SystemS5;
397   BOOLEAN  HiberFilePresent;
398   BOOLEAN  FullWake;
399   BOOLEAN  VideoDimPresent;
400   BOOLEAN  ApmPresent;
401   BOOLEAN  UpsPresent;
402   BOOLEAN  ThermalControl;
403   BOOLEAN  ProcessorThrottle;
404   UCHAR  ProcessorMinThrottle;
405   UCHAR  ProcessorMaxThrottle;
406   UCHAR  spare2[4];
407   BOOLEAN  DiskSpinDown;
408   UCHAR  spare3[8];
409   BOOLEAN  SystemBatteriesPresent;
410   BOOLEAN  BatteriesAreShortTerm;
411   BATTERY_REPORTING_SCALE  BatteryScale[3];
412   SYSTEM_POWER_STATE  AcOnLineWake;
413   SYSTEM_POWER_STATE  SoftLidWake;
414   SYSTEM_POWER_STATE  RtcWake;
415   SYSTEM_POWER_STATE  MinDeviceWakeState;
416   SYSTEM_POWER_STATE  DefaultLowLatencyWake;
417 } SYSTEM_POWER_CAPABILITIES, *PSYSTEM_POWER_CAPABILITIES;
418
419 #pragma pack(pop)
420
421 #ifdef __cplusplus
422 }
423 #endif
424
425 #endif /* __NTPOAPI_H */