123 lines
4.1 KiB
C
123 lines
4.1 KiB
C
/*++ BUILD Version: 0000 // Increment this if a change has global effects
|
|
|
|
Copyright (c) 2000 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
procpowr.h
|
|
|
|
Abstract:
|
|
|
|
This module contains the public (external) header file for the processor
|
|
power states required by the PRCB.
|
|
|
|
Author:
|
|
|
|
Stephane Plante (splante) 17-Oct-2000
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
#ifndef _PROCPOWR_H_
|
|
#define _PROCPOWR_H_
|
|
|
|
//
|
|
// Power structure in each processors PRCB
|
|
//
|
|
struct _PROCESSOR_POWER_STATE; // forward ref
|
|
|
|
typedef
|
|
VOID
|
|
(FASTCALL *PPROCESSOR_IDLE_FUNCTION) (
|
|
struct _PROCESSOR_POWER_STATE *PState
|
|
);
|
|
|
|
//
|
|
// Note: this data structure must contain a number of ULONG such that the
|
|
// next structure in the PRCB is aligned on an 16 byte boundary. Currently,
|
|
// this means that this structure must have a size that ends on the odd
|
|
// eight-byte boundary. In other words, the size of this structure must
|
|
// end in 0x8...
|
|
//
|
|
|
|
typedef struct _PROCESSOR_POWER_STATE {
|
|
PPROCESSOR_IDLE_FUNCTION IdleFunction;
|
|
ULONG Idle0KernelTimeLimit;
|
|
ULONG Idle0LastTime;
|
|
|
|
PVOID IdleHandlers;
|
|
PVOID IdleState;
|
|
ULONG IdleHandlersCount;
|
|
|
|
ULONGLONG LastCheck;
|
|
PROCESSOR_IDLE_TIMES IdleTimes;
|
|
|
|
ULONG IdleTime1;
|
|
ULONG PromotionCheck;
|
|
ULONG IdleTime2;
|
|
|
|
UCHAR CurrentThrottle; // current throttle setting
|
|
UCHAR ThermalThrottleLimit; // max available throttle setting
|
|
UCHAR CurrentThrottleIndex;
|
|
UCHAR ThermalThrottleIndex;
|
|
|
|
ULONG PerfSystemTime;
|
|
ULONG PerfIdleTime;
|
|
|
|
// temp for debugging
|
|
ULONGLONG DebugDelta;
|
|
ULONG DebugCount;
|
|
|
|
ULONG LastSysTime;
|
|
ULONGLONG TotalIdleStateTime[3];
|
|
ULONG TotalIdleTransitions[3];
|
|
ULONGLONG PreviousC3StateTime;
|
|
UCHAR KneeThrottleIndex;
|
|
UCHAR ThrottleLimitIndex;
|
|
UCHAR PerfStatesCount;
|
|
UCHAR ProcessorMinThrottle;
|
|
UCHAR ProcessorMaxThrottle;
|
|
UCHAR LastBusyPercentage;
|
|
UCHAR LastC3Percentage;
|
|
UCHAR LastAdjustedBusyPercentage;
|
|
ULONG PromotionCount;
|
|
ULONG DemotionCount;
|
|
ULONG ErrorCount;
|
|
ULONG RetryCount;
|
|
ULONG Flags;
|
|
LARGE_INTEGER PerfCounterFrequency;
|
|
ULONG PerfTickCount;
|
|
KTIMER PerfTimer;
|
|
KDPC PerfDpc;
|
|
PPROCESSOR_PERF_STATE PerfStates;
|
|
PSET_PROCESSOR_THROTTLE2 PerfSetThrottle;
|
|
ULONG Spare1[2];
|
|
} PROCESSOR_POWER_STATE, *PPROCESSOR_POWER_STATE;
|
|
|
|
//
|
|
// Processor Power State Flags
|
|
//
|
|
#define PSTATE_SUPPORTS_THROTTLE 0x01
|
|
#define PSTATE_ADAPTIVE_THROTTLE 0x02
|
|
#define PSTATE_DEGRADED_THROTTLE 0x04
|
|
#define PSTATE_CONSTANT_THROTTLE 0x08
|
|
#define PSTATE_NOT_INITIALIZED 0x10
|
|
#define PSTATE_DISABLE_THROTTLE_NTAPI 0x20
|
|
#define PSTATE_DISABLE_THROTTLE_INRUSH 0x40
|
|
#define PSTATE_DISABLE_CSTATES 0x80
|
|
#define PSTATE_THERMAL_THROTTLE_APPLIED 0x100
|
|
|
|
//
|
|
// Useful masks
|
|
//
|
|
#define PSTATE_THROTTLE_MASK (PSTATE_ADAPTIVE_THROTTLE | \
|
|
PSTATE_DEGRADED_THROTTLE | \
|
|
PSTATE_CONSTANT_THROTTLE)
|
|
#define PSTATE_CLEAR_MASK (PSTATE_SUPPORTS_THROTTLE | \
|
|
PSTATE_THROTTLE_MASK)
|
|
#define PSTATE_DISABLE_THROTTLE (PSTATE_DISABLE_THROTTLE_NTAPI | \
|
|
PSTATE_DISABLE_THROTTLE_INRUSH)
|
|
|
|
#endif // _PROCPOWR_H_
|