holdingarea/llvm/llvm-gcc4.2-2.7-x86-mingw32/include/ddk/ntpoapi.h
branchbug235_bringup_0
changeset 20 d2d6724aef32
equal deleted inserted replaced
19:da7c1a80df0d 20:d2d6724aef32
       
     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 */