| /* |
| * ntpoapi.h |
| * |
| * APIs for power management. |
| * |
| * This file is part of the w32api package. |
| * |
| * Contributors: |
| * Created by Casper S. Hornstrup <chorns@users.sourceforge.net> |
| * |
| * THIS SOFTWARE IS NOT COPYRIGHTED |
| * |
| * This source code is offered for use in the public domain. You may |
| * use, modify or distribute it freely. |
| * |
| * This code is distributed in the hope that it will be useful but |
| * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY |
| * DISCLAIMED. This includes but is not limited to warranties of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
| * |
| */ |
| |
| #ifndef __NTPOAPI_H |
| #define __NTPOAPI_H |
| |
| #if __GNUC__ >=3 |
| #pragma GCC system_header |
| #endif |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| #include "ntddk.h" |
| #include "batclass.h" |
| |
| #define POWER_PERF_SCALE 100 |
| #define PERF_LEVEL_TO_PERCENT(x) (((x) * 1000) / (POWER_PERF_SCALE * 10)) |
| #define PERCENT_TO_PERF_LEVEL(x) (((x) * POWER_PERF_SCALE * 10) / 1000) |
| |
| typedef struct _PROCESSOR_IDLE_TIMES { |
| ULONGLONG StartTime; |
| ULONGLONG EndTime; |
| ULONG IdleHandlerReserved[4]; |
| } PROCESSOR_IDLE_TIMES, *PPROCESSOR_IDLE_TIMES; |
| |
| typedef BOOLEAN DDKFASTAPI |
| (*PPROCESSOR_IDLE_HANDLER)( |
| /*IN OUT*/ PPROCESSOR_IDLE_TIMES IdleTimes); |
| |
| typedef struct _PROCESSOR_IDLE_HANDLER_INFO { |
| ULONG HardwareLatency; |
| PPROCESSOR_IDLE_HANDLER Handler; |
| } PROCESSOR_IDLE_HANDLER_INFO, *PPROCESSOR_IDLE_HANDLER_INFO; |
| |
| typedef VOID DDKFASTAPI |
| (*PSET_PROCESSOR_THROTTLE)( |
| /*IN*/ UCHAR Throttle); |
| |
| typedef NTSTATUS DDKFASTAPI |
| (*PSET_PROCESSOR_THROTTLE2)( |
| /*IN*/ UCHAR Throttle); |
| |
| #define MAX_IDLE_HANDLERS 3 |
| |
| typedef struct _PROCESSOR_STATE_HANDLER { |
| UCHAR ThrottleScale; |
| BOOLEAN ThrottleOnIdle; |
| PSET_PROCESSOR_THROTTLE SetThrottle; |
| ULONG NumIdleHandlers; |
| PROCESSOR_IDLE_HANDLER_INFO IdleHandler[MAX_IDLE_HANDLERS]; |
| } PROCESSOR_STATE_HANDLER, *PPROCESSOR_STATE_HANDLER; |
| |
| typedef enum _POWER_STATE_HANDLER_TYPE { |
| PowerStateSleeping1, |
| PowerStateSleeping2, |
| PowerStateSleeping3, |
| PowerStateSleeping4, |
| PowerStateSleeping4Firmware, |
| PowerStateShutdownReset, |
| PowerStateShutdownOff, |
| PowerStateMaximum |
| } POWER_STATE_HANDLER_TYPE, *PPOWER_STATE_HANDLER_TYPE; |
| |
| typedef NTSTATUS DDKAPI |
| (*PENTER_STATE_SYSTEM_HANDLER)( |
| /*IN*/ PVOID SystemContext); |
| |
| typedef NTSTATUS DDKAPI |
| (*PENTER_STATE_HANDLER)( |
| /*IN*/ PVOID Context, |
| /*IN*/ PENTER_STATE_SYSTEM_HANDLER SystemHandler /*OPTIONAL*/, |
| /*IN*/ PVOID SystemContext, |
| /*IN*/ LONG NumberProcessors, |
| /*IN*/ VOLATILE PLONG Number); |
| |
| typedef struct _POWER_STATE_HANDLER { |
| POWER_STATE_HANDLER_TYPE Type; |
| BOOLEAN RtcWake; |
| UCHAR Spare[3]; |
| PENTER_STATE_HANDLER Handler; |
| PVOID Context; |
| } POWER_STATE_HANDLER, *PPOWER_STATE_HANDLER; |
| |
| typedef NTSTATUS STDCALL |
| (*PENTER_STATE_NOTIFY_HANDLER)( |
| /*IN*/ POWER_STATE_HANDLER_TYPE State, |
| /*IN*/ PVOID Context, |
| /*IN*/ BOOLEAN Entering); |
| |
| typedef struct _POWER_STATE_NOTIFY_HANDLER { |
| PENTER_STATE_NOTIFY_HANDLER Handler; |
| PVOID Context; |
| } POWER_STATE_NOTIFY_HANDLER, *PPOWER_STATE_NOTIFY_HANDLER; |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| NtPowerInformation( |
| /*IN*/ POWER_INFORMATION_LEVEL InformationLevel, |
| /*IN*/ PVOID InputBuffer /*OPTIONAL*/, |
| /*IN*/ ULONG InputBufferLength, |
| /*OUT*/ PVOID OutputBuffer /*OPTIONAL*/, |
| /*IN*/ ULONG OutputBufferLength); |
| |
| #define PROCESSOR_STATE_TYPE_PERFORMANCE 1 |
| #define PROCESSOR_STATE_TYPE_THROTTLE 2 |
| |
| typedef struct _PROCESSOR_PERF_LEVEL { |
| UCHAR PercentFrequency; |
| UCHAR Reserved; |
| USHORT Flags; |
| } PROCESSOR_PERF_LEVEL, *PPROCESSOR_PERF_LEVEL; |
| |
| typedef struct _PROCESSOR_PERF_STATE { |
| UCHAR PercentFrequency; |
| UCHAR MinCapacity; |
| USHORT Power; |
| UCHAR IncreaseLevel; |
| UCHAR DecreaseLevel; |
| USHORT Flags; |
| ULONG IncreaseTime; |
| ULONG DecreaseTime; |
| ULONG IncreaseCount; |
| ULONG DecreaseCount; |
| ULONGLONG PerformanceTime; |
| } PROCESSOR_PERF_STATE, *PPROCESSOR_PERF_STATE; |
| |
| typedef struct _PROCESSOR_STATE_HANDLER2 { |
| ULONG NumIdleHandlers; |
| PROCESSOR_IDLE_HANDLER_INFO IdleHandler[MAX_IDLE_HANDLERS]; |
| PSET_PROCESSOR_THROTTLE2 SetPerfLevel; |
| ULONG HardwareLatency; |
| UCHAR NumPerfStates; |
| PROCESSOR_PERF_LEVEL PerfLevel[1]; |
| } PROCESSOR_STATE_HANDLER2, *PPROCESSOR_STATE_HANDLER2; |
| |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| NtSetThreadExecutionState( |
| /*IN*/ EXECUTION_STATE esFlags, |
| /*OUT*/ EXECUTION_STATE *PreviousFlags); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| NtRequestWakeupLatency( |
| /*IN*/ LATENCY_TIME latency); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| NtInitiatePowerAction( |
| /*IN*/ POWER_ACTION SystemAction, |
| /*IN*/ SYSTEM_POWER_STATE MinSystemState, |
| /*IN*/ ULONG Flags, |
| /*IN*/ BOOLEAN Asynchronous); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| NtSetSystemPowerState( |
| /*IN*/ POWER_ACTION SystemAction, |
| /*IN*/ SYSTEM_POWER_STATE MinSystemState, |
| /*IN*/ ULONG Flags); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| NtGetDevicePowerState( |
| /*IN*/ HANDLE Device, |
| /*OUT*/ DEVICE_POWER_STATE *State); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| NtCancelDeviceWakeupRequest( |
| /*IN*/ HANDLE Device); |
| |
| NTOSAPI |
| BOOLEAN |
| DDKAPI |
| NtIsSystemResumeAutomatic( |
| VOID); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| NtRequestDeviceWakeup( |
| /*IN*/ HANDLE Device); |
| |
| #define WINLOGON_LOCK_ON_SLEEP 0x00000001 |
| |
| typedef struct _PROCESSOR_POWER_INFORMATION { |
| ULONG Number; |
| ULONG MaxMhz; |
| ULONG CurrentMhz; |
| ULONG MhzLimit; |
| ULONG MaxIdleState; |
| ULONG CurrentIdleState; |
| } PROCESSOR_POWER_INFORMATION, *PPROCESSOR_POWER_INFORMATION; |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif /* __NTPOAPI_H */ |