|
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 |
|
159 NTOSAPI |
|
160 NTSTATUS |
|
161 DDKAPI |
|
162 NtSetThreadExecutionState( |
|
163 /*IN*/ EXECUTION_STATE esFlags, |
|
164 /*OUT*/ EXECUTION_STATE *PreviousFlags); |
|
165 |
|
166 NTOSAPI |
|
167 NTSTATUS |
|
168 DDKAPI |
|
169 NtRequestWakeupLatency( |
|
170 /*IN*/ LATENCY_TIME latency); |
|
171 |
|
172 NTOSAPI |
|
173 NTSTATUS |
|
174 DDKAPI |
|
175 NtInitiatePowerAction( |
|
176 /*IN*/ POWER_ACTION SystemAction, |
|
177 /*IN*/ SYSTEM_POWER_STATE MinSystemState, |
|
178 /*IN*/ ULONG Flags, |
|
179 /*IN*/ BOOLEAN Asynchronous); |
|
180 |
|
181 NTOSAPI |
|
182 NTSTATUS |
|
183 DDKAPI |
|
184 NtSetSystemPowerState( |
|
185 /*IN*/ POWER_ACTION SystemAction, |
|
186 /*IN*/ SYSTEM_POWER_STATE MinSystemState, |
|
187 /*IN*/ ULONG Flags); |
|
188 |
|
189 NTOSAPI |
|
190 NTSTATUS |
|
191 DDKAPI |
|
192 NtGetDevicePowerState( |
|
193 /*IN*/ HANDLE Device, |
|
194 /*OUT*/ DEVICE_POWER_STATE *State); |
|
195 |
|
196 NTOSAPI |
|
197 NTSTATUS |
|
198 DDKAPI |
|
199 NtCancelDeviceWakeupRequest( |
|
200 /*IN*/ HANDLE Device); |
|
201 |
|
202 NTOSAPI |
|
203 BOOLEAN |
|
204 DDKAPI |
|
205 NtIsSystemResumeAutomatic( |
|
206 VOID); |
|
207 |
|
208 NTOSAPI |
|
209 NTSTATUS |
|
210 DDKAPI |
|
211 NtRequestDeviceWakeup( |
|
212 /*IN*/ HANDLE Device); |
|
213 |
|
214 #define WINLOGON_LOCK_ON_SLEEP 0x00000001 |
|
215 |
|
216 typedef struct _PROCESSOR_POWER_INFORMATION { |
|
217 ULONG Number; |
|
218 ULONG MaxMhz; |
|
219 ULONG CurrentMhz; |
|
220 ULONG MhzLimit; |
|
221 ULONG MaxIdleState; |
|
222 ULONG CurrentIdleState; |
|
223 } PROCESSOR_POWER_INFORMATION, *PPROCESSOR_POWER_INFORMATION; |
|
224 |
|
225 #ifdef __cplusplus |
|
226 } |
|
227 #endif |
|
228 |
|
229 #endif /* __NTPOAPI_H */ |