Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*++
Copyright (c) 2000 Microsoft Corporation
Module Name:
crusoe.h
Author:
Todd Carpenter (10/31/00) - create file
Environment:
Kernel mode
Notes:
Revision History:
--*/ #ifndef _CRUSOE_H
#define _CRUSOE_H
#include "..\lib\processor.h"
#include "..\eventmsg.h"
#include <pshpack1.h>
//
// CPUID
//
#define LONGRUN_CPUID_MAXFUNCTION 0x80860000 // Max supported CPUID function, (ie 0x80860007)
#define LONGRUN_CPUID_PROCESSOR_INFO 0x80860001
#define LONGRUN_CPUID_GETSTATE 0x80860007 // Current Speed, Voltage, and State
//
// read: upper:lower bound of current performance percentage window
// write: set the upper:lower bound of desired performance percentage window
// Correct:
// if EDX == EAX == 100d, then full performance (ie LongRun disabled)
// if EDX == EAX, then fixed performance
// if EDX > EAX, the performance within upper:lower window
//
// Incorrect: (results in #GP(0))
// if (EDX > 100d) or (EAX > 100d)
// if (EDX < EAX)
//
//
// CMS4.1 MSR
//
#define LONGRUN_CONTROL_STATUS_MSR 0x80868010
//
// CMS4.2 Longrun Table Interface MSR's
//
#define LONGRUN_FLAGS_REGISTER_MSR 0x80868011
#define LONGRUN_TI_READOUT_MSR 0x80868018
#define LONGRUN_TI_PERFORMANCE_INDEX_MSR 0x80868019
#define LONGRUN_TI_VOLTAGE_FREQUENCY_MSR 0x8086801A
#define LONGRUN_TI_MEMORY_DIVISORS_MSR 0x8086801B
#define LONGRUN_TI_IO_DIVISORS_MSR 0x8086801C
#define LONGRUN_TI_GATE_DELAY_MSR 0x8086801D
//
// Processor Feature Flags
//
#define FEATURE_LONGRUN_ENALBED 0x2
#define FEATURE_LRTI_ENABLED 0x8
#define INVALID_LONGRUN_STATE (ULONG)-1
#define MAX_LONGRUN_VALUE 100
#define MAX_LONGRUN_STATES 4
#define CRUSOE_TRANSITION_LATENCY 20 // microseconds
typedef struct _STATE_INFO {
ULONG CpuSpeed; ULONG Voltage; ULONG LongRunValue;
} STATE_INFO, *PSTATE_INFO;
typedef struct _LEGACY_INTERFACE_INFO {
ULONG CurrentState; ULONG MaxSupportedStates; ULONG CurrentlyAvailableStates; } LEGACY_INTERFACE_INFO, *PLEGACY_INTERFACE_INFO;
typedef struct _LONGRUN_STATES {
ULONG MaxState; STATE_INFO States[MAX_LONGRUN_STATES]; } LONGRUN_STATES, *PLONGRUN_STATES;
//
// Acpi 2.0 stuff
//
typedef struct { union { struct { ULONG Min:16; // 15:0 LongRun Lower Bound
ULONG Max:16; // 31:16 LongRun Upper Bound
}; ULONG AsDWord; }; } CRUSOE_PSS_VALUE;
//
// crusoe.c
//
NTSTATUS AdjustLegacyProcessorPerformanceStates( IN OUT PPROCESSOR_PERFORMANCE_STATES PerfStates );
//
// longrun.c
//
NTSTATUS InitializeLegacyInterface( IN PFDO_DATA DeviceExtension );
NTSTATUS SetCurrentStateMSR( IN ULONG State, IN BOOLEAN InitPhase );
ULONG ConvertLongRunValueToPerfState( IN PLONGRUN_STATES PerfStates, IN ULONG LongRunValue ); NTSTATUS GetCurrentCpuSpeed( OUT PULONG CpuSpeed ); NTSTATUS GetMaxCpuSpeed( OUT PULONG CpuSpeed );
VOID GetProcessorFeatureFlags( OUT PULONG Flags ); NTSTATUS GetCurrentStateInfo( OUT PSTATE_INFO StateInfo );
ULONGLONG GetCurrentPerformanceRange( VOID );
VOID SetCurrentPerformanceRange( IN ULONG Min, IN ULONG Max );
NTSTATUS CalculateLongRunPerfStates( IN PLONGRUN_STATES PerfStates );
NTSTATUS BuildAcpi2PerformanceStates( IN PACPI_PSS_PACKAGE PerfStates ); NTSTATUS BuildLongRunPerfStatesCMS41( OUT PACPI_PSS_PACKAGE *PssPackage ); NTSTATUS BuildLongRunPerfStatesCMS42( OUT PACPI_PSS_PACKAGE *PssPackage );
ULONG LRTI_GetMaxSupportedLevel( VOID );
VOID LRTI_SetCurrentLevel ( ULONG LongRunLevel );
ULONG LRTI_GetPerformanceIndex ( VOID );
ULONG LRTI_GetVoltage ( VOID );
ULONG LRTI_GetFrequency ( VOID );
ULONG GetLongRunFlagsRegister ( VOID );
VOID SetLongRunEconomyMode ( VOID );
VOID SetLongRunPerformanceMode ( VOID );
#if DBG
VOID DisplayStateInfo( IN PSTATE_INFO State );
VOID DisplayLongRunStates( IN PLONGRUN_STATES States ); #else
#define DisplayStateInfo(_x_)
#define DisplayLongRunStates(_x_)
#endif
#endif
|