Naveen Neel / shedskin
Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers ntpoapi.h Source File

ntpoapi.h

00001 /*
00002  * ntpoapi.h
00003  *
00004  * APIs for power management.
00005  *
00006  * This file is part of the w32api package.
00007  *
00008  * Contributors:
00009  *   Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
00010  *
00011  * THIS SOFTWARE IS NOT COPYRIGHTED
00012  *
00013  * This source code is offered for use in the public domain. You may
00014  * use, modify or distribute it freely.
00015  *
00016  * This code is distributed in the hope that it will be useful but
00017  * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
00018  * DISCLAIMED. This includes but is not limited to warranties of
00019  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
00020  *
00021  */
00022 
00023 #ifndef __NTPOAPI_H
00024 #define __NTPOAPI_H
00025 
00026 #if __GNUC__ >=3
00027 #pragma GCC system_header
00028 #endif
00029 
00030 #ifdef __cplusplus
00031 extern "C" {
00032 #endif
00033 
00034 #include "ntddk.h"
00035 #include "batclass.h"
00036 
00037 #define POWER_PERF_SCALE                  100
00038 #define PERF_LEVEL_TO_PERCENT(x)          (((x) * 1000) / (POWER_PERF_SCALE * 10))
00039 #define PERCENT_TO_PERF_LEVEL(x)          (((x) * POWER_PERF_SCALE * 10) / 1000)
00040 
00041 typedef struct _PROCESSOR_IDLE_TIMES {
00042     ULONGLONG  StartTime;
00043     ULONGLONG  EndTime;
00044     ULONG  IdleHandlerReserved[4];
00045 } PROCESSOR_IDLE_TIMES, *PPROCESSOR_IDLE_TIMES;
00046 
00047 typedef BOOLEAN DDKFASTAPI
00048 (*PPROCESSOR_IDLE_HANDLER)(
00049   /*IN OUT*/ PPROCESSOR_IDLE_TIMES IdleTimes);
00050 
00051 typedef struct _PROCESSOR_IDLE_HANDLER_INFO {
00052   ULONG  HardwareLatency;
00053   PPROCESSOR_IDLE_HANDLER  Handler;
00054 } PROCESSOR_IDLE_HANDLER_INFO, *PPROCESSOR_IDLE_HANDLER_INFO;
00055 
00056 typedef VOID DDKFASTAPI
00057 (*PSET_PROCESSOR_THROTTLE)(
00058   /*IN*/ UCHAR  Throttle);
00059 
00060 typedef NTSTATUS DDKFASTAPI
00061 (*PSET_PROCESSOR_THROTTLE2)(
00062   /*IN*/ UCHAR  Throttle);
00063 
00064 #define MAX_IDLE_HANDLERS                 3
00065 
00066 typedef struct _PROCESSOR_STATE_HANDLER {
00067     UCHAR  ThrottleScale;
00068     BOOLEAN  ThrottleOnIdle;
00069     PSET_PROCESSOR_THROTTLE  SetThrottle;
00070     ULONG  NumIdleHandlers;
00071     PROCESSOR_IDLE_HANDLER_INFO  IdleHandler[MAX_IDLE_HANDLERS];
00072 } PROCESSOR_STATE_HANDLER, *PPROCESSOR_STATE_HANDLER;
00073 
00074 typedef enum _POWER_STATE_HANDLER_TYPE {
00075     PowerStateSleeping1,
00076     PowerStateSleeping2,
00077     PowerStateSleeping3,
00078     PowerStateSleeping4,
00079     PowerStateSleeping4Firmware,
00080     PowerStateShutdownReset,
00081     PowerStateShutdownOff,
00082     PowerStateMaximum
00083 } POWER_STATE_HANDLER_TYPE, *PPOWER_STATE_HANDLER_TYPE;
00084 
00085 typedef NTSTATUS DDKAPI
00086 (*PENTER_STATE_SYSTEM_HANDLER)(
00087   /*IN*/ PVOID  SystemContext);
00088 
00089 typedef NTSTATUS DDKAPI
00090 (*PENTER_STATE_HANDLER)(
00091   /*IN*/ PVOID  Context,
00092   /*IN*/ PENTER_STATE_SYSTEM_HANDLER  SystemHandler  /*OPTIONAL*/,
00093   /*IN*/ PVOID  SystemContext,
00094   /*IN*/ LONG  NumberProcessors,
00095   /*IN*/ VOLATILE PLONG  Number);
00096 
00097 typedef struct _POWER_STATE_HANDLER {
00098     POWER_STATE_HANDLER_TYPE  Type;
00099     BOOLEAN  RtcWake;
00100     UCHAR  Spare[3];
00101     PENTER_STATE_HANDLER  Handler;
00102     PVOID  Context;
00103 } POWER_STATE_HANDLER, *PPOWER_STATE_HANDLER;
00104 
00105 typedef NTSTATUS STDCALL
00106 (*PENTER_STATE_NOTIFY_HANDLER)(
00107   /*IN*/ POWER_STATE_HANDLER_TYPE  State,
00108   /*IN*/ PVOID  Context,
00109   /*IN*/ BOOLEAN  Entering);
00110 
00111 typedef struct _POWER_STATE_NOTIFY_HANDLER {
00112     PENTER_STATE_NOTIFY_HANDLER  Handler;
00113     PVOID  Context;
00114 } POWER_STATE_NOTIFY_HANDLER, *PPOWER_STATE_NOTIFY_HANDLER;
00115 
00116 NTOSAPI
00117 NTSTATUS
00118 DDKAPI
00119 NtPowerInformation(
00120   /*IN*/ POWER_INFORMATION_LEVEL  InformationLevel,
00121   /*IN*/ PVOID  InputBuffer /*OPTIONAL*/,
00122   /*IN*/ ULONG  InputBufferLength,
00123   /*OUT*/ PVOID  OutputBuffer /*OPTIONAL*/,
00124   /*IN*/ ULONG  OutputBufferLength);
00125 
00126 #define PROCESSOR_STATE_TYPE_PERFORMANCE  1
00127 #define PROCESSOR_STATE_TYPE_THROTTLE     2
00128 
00129 typedef struct _PROCESSOR_PERF_LEVEL {
00130   UCHAR  PercentFrequency;
00131   UCHAR  Reserved;
00132   USHORT  Flags;
00133 } PROCESSOR_PERF_LEVEL, *PPROCESSOR_PERF_LEVEL;
00134 
00135 typedef struct _PROCESSOR_PERF_STATE {
00136   UCHAR  PercentFrequency;
00137   UCHAR  MinCapacity;
00138   USHORT  Power;
00139   UCHAR  IncreaseLevel;
00140   UCHAR  DecreaseLevel;
00141   USHORT  Flags;
00142   ULONG  IncreaseTime;
00143   ULONG  DecreaseTime;
00144   ULONG  IncreaseCount;
00145   ULONG  DecreaseCount;
00146   ULONGLONG  PerformanceTime;
00147 } PROCESSOR_PERF_STATE, *PPROCESSOR_PERF_STATE;
00148 
00149 typedef struct _PROCESSOR_STATE_HANDLER2 {
00150     ULONG  NumIdleHandlers;
00151     PROCESSOR_IDLE_HANDLER_INFO  IdleHandler[MAX_IDLE_HANDLERS];
00152     PSET_PROCESSOR_THROTTLE2  SetPerfLevel;
00153     ULONG  HardwareLatency;
00154     UCHAR  NumPerfStates;
00155     PROCESSOR_PERF_LEVEL  PerfLevel[1];
00156 } PROCESSOR_STATE_HANDLER2, *PPROCESSOR_STATE_HANDLER2;
00157 
00158 
00159 NTOSAPI
00160 NTSTATUS
00161 DDKAPI
00162 NtSetThreadExecutionState(
00163   /*IN*/ EXECUTION_STATE  esFlags,
00164   /*OUT*/ EXECUTION_STATE  *PreviousFlags);
00165 
00166 NTOSAPI
00167 NTSTATUS
00168 DDKAPI
00169 NtRequestWakeupLatency(
00170   /*IN*/ LATENCY_TIME  latency);
00171 
00172 NTOSAPI
00173 NTSTATUS
00174 DDKAPI
00175 NtInitiatePowerAction(
00176   /*IN*/ POWER_ACTION  SystemAction,
00177   /*IN*/ SYSTEM_POWER_STATE  MinSystemState,
00178   /*IN*/ ULONG  Flags,
00179   /*IN*/ BOOLEAN  Asynchronous);
00180 
00181 NTOSAPI
00182 NTSTATUS
00183 DDKAPI
00184 NtSetSystemPowerState(
00185   /*IN*/ POWER_ACTION SystemAction,
00186   /*IN*/ SYSTEM_POWER_STATE MinSystemState,
00187   /*IN*/ ULONG Flags);
00188 
00189 NTOSAPI
00190 NTSTATUS
00191 DDKAPI
00192 NtGetDevicePowerState(
00193   /*IN*/ HANDLE  Device,
00194   /*OUT*/ DEVICE_POWER_STATE  *State);
00195 
00196 NTOSAPI
00197 NTSTATUS
00198 DDKAPI
00199 NtCancelDeviceWakeupRequest(
00200   /*IN*/ HANDLE  Device);
00201 
00202 NTOSAPI
00203 BOOLEAN
00204 DDKAPI
00205 NtIsSystemResumeAutomatic(
00206   VOID);
00207 
00208 NTOSAPI
00209 NTSTATUS
00210 DDKAPI
00211 NtRequestDeviceWakeup(
00212   /*IN*/ HANDLE  Device);
00213 
00214 #define WINLOGON_LOCK_ON_SLEEP            0x00000001
00215 
00216 typedef struct _PROCESSOR_POWER_INFORMATION {
00217   ULONG  Number;
00218   ULONG  MaxMhz;
00219   ULONG  CurrentMhz;
00220   ULONG  MhzLimit;
00221   ULONG  MaxIdleState;
00222   ULONG  CurrentIdleState;
00223 } PROCESSOR_POWER_INFORMATION, *PPROCESSOR_POWER_INFORMATION;
00224 
00225 #ifdef __cplusplus
00226 }
00227 #endif
00228 
00229 #endif /* __NTPOAPI_H */