4 * APIs for power management.
6 * This file is part of the w32api package.
9 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
11 * THIS SOFTWARE IS NOT COPYRIGHTED
13 * This source code is offered for use in the public domain. You may
14 * use, modify or distribute it freely.
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.
27 #pragma GCC system_header
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)
43 typedef struct _PROCESSOR_IDLE_TIMES
{
46 ULONG IdleHandlerReserved
[4];
47 } PROCESSOR_IDLE_TIMES
, *PPROCESSOR_IDLE_TIMES
;
49 typedef BOOLEAN DDKFASTAPI
50 (*PPROCESSOR_IDLE_HANDLER
)(
51 IN OUT PPROCESSOR_IDLE_TIMES IdleTimes
);
53 typedef struct _PROCESSOR_IDLE_HANDLER_INFO
{
54 ULONG HardwareLatency
;
55 PPROCESSOR_IDLE_HANDLER Handler
;
56 } PROCESSOR_IDLE_HANDLER_INFO
, *PPROCESSOR_IDLE_HANDLER_INFO
;
58 typedef VOID DDKFASTAPI
59 (*PSET_PROCESSOR_THROTTLE
)(
62 typedef NTSTATUS DDKFASTAPI
63 (*PSET_PROCESSOR_THROTTLE2
)(
66 #define MAX_IDLE_HANDLERS 3
68 typedef struct _PROCESSOR_STATE_HANDLER
{
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
;
76 typedef enum _POWER_STATE_HANDLER_TYPE
{
81 PowerStateSleeping4Firmware
,
82 PowerStateShutdownReset
,
83 PowerStateShutdownOff
,
85 } POWER_STATE_HANDLER_TYPE
, *PPOWER_STATE_HANDLER_TYPE
;
87 typedef NTSTATUS DDKAPI
88 (*PENTER_STATE_SYSTEM_HANDLER
)(
89 IN PVOID SystemContext
);
91 typedef NTSTATUS DDKAPI
92 (*PENTER_STATE_HANDLER
)(
94 IN PENTER_STATE_SYSTEM_HANDLER SystemHandler OPTIONAL
,
95 IN PVOID SystemContext
,
96 IN LONG NumberProcessors
,
97 IN VOLATILE PLONG Number
);
99 typedef struct _POWER_STATE_HANDLER
{
100 POWER_STATE_HANDLER_TYPE Type
;
103 PENTER_STATE_HANDLER Handler
;
105 } POWER_STATE_HANDLER
, *PPOWER_STATE_HANDLER
;
107 typedef NTSTATUS STDCALL
108 (*PENTER_STATE_NOTIFY_HANDLER
)(
109 IN POWER_STATE_HANDLER_TYPE State
,
111 IN BOOLEAN Entering
);
113 typedef struct _POWER_STATE_NOTIFY_HANDLER
{
114 PENTER_STATE_NOTIFY_HANDLER Handler
;
116 } POWER_STATE_NOTIFY_HANDLER
, *PPOWER_STATE_NOTIFY_HANDLER
;
122 IN POWER_INFORMATION_LEVEL InformationLevel
,
123 IN PVOID InputBuffer OPTIONAL
,
124 IN ULONG InputBufferLength
,
125 OUT PVOID OutputBuffer OPTIONAL
,
126 IN ULONG OutputBufferLength
);
128 #define PROCESSOR_STATE_TYPE_PERFORMANCE 1
129 #define PROCESSOR_STATE_TYPE_THROTTLE 2
131 typedef struct _PROCESSOR_PERF_LEVEL
{
132 UCHAR PercentFrequency
;
135 } PROCESSOR_PERF_LEVEL
, *PPROCESSOR_PERF_LEVEL
;
137 typedef struct _PROCESSOR_PERF_STATE
{
138 UCHAR PercentFrequency
;
148 ULONGLONG PerformanceTime
;
149 } PROCESSOR_PERF_STATE
, *PPROCESSOR_PERF_STATE
;
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
;
157 PROCESSOR_PERF_LEVEL PerfLevel
[1];
158 } PROCESSOR_STATE_HANDLER2
, *PPROCESSOR_STATE_HANDLER2
;
164 NtSetThreadExecutionState(
165 IN EXECUTION_STATE esFlags
,
166 OUT EXECUTION_STATE
*PreviousFlags
);
171 NtRequestWakeupLatency(
172 IN LATENCY_TIME latency
);
177 NtInitiatePowerAction(
178 IN POWER_ACTION SystemAction
,
179 IN SYSTEM_POWER_STATE MinSystemState
,
181 IN BOOLEAN Asynchronous
);
186 NtSetSystemPowerState(
187 IN POWER_ACTION SystemAction
,
188 IN SYSTEM_POWER_STATE MinSystemState
,
194 NtGetDevicePowerState(
196 OUT DEVICE_POWER_STATE
*State
);
201 NtCancelDeviceWakeupRequest(
207 NtIsSystemResumeAutomatic(
213 NtRequestDeviceWakeup(
216 #define WINLOGON_LOCK_ON_SLEEP 0x00000001
218 typedef struct _PROCESSOR_POWER_INFORMATION
{
224 ULONG CurrentIdleState
;
225 } PROCESSOR_POWER_INFORMATION
, *PPROCESSOR_POWER_INFORMATION
;
234 #endif /* __NTPOAPI_H */