/*++

  Copyright (c) 2000  Microsoft Corporation
  
  Module Name:
  
     processor.mof
  
  Abstract:


--*/
#pragma classflags("forceupdate")
#pragma namespace("\\\\.\\Root\\WMI")

[abstract]
class MSProcessorClass
{
};

[WMI,
 Description("Processor Performance State"):amended,
 localeid("MS\\0x409"),
 guid("{FDD21E6F-7381-4048-B085-4CE47EDCA2A4}")]
class PerformanceState
{
  [WmiDataId(1),
   read,
   DisplayName("Processor Speed"):amended,
   Description("Processor Frequency in Megahertz"):amended
  ] uint32 Frequency;

  [WmiDataId(2),
   read,
   DisplayName("Flags"):amended,
   Description("Processor State Flags"):amended
  ] uint32 Flags;

  [WmiDataId(3),
   read,
   DisplayName("Performance Percentage"):amended,
   Description("Percentage of Highest Frequency"):amended
  ] uint32 PercentFrequency;

};

[WMI,
 Description("Processor Performance States"):amended,
 localeid("MS\\0x409"),
 guid("{0F23F5FA-0223-48e3-ADBC-9B56B201E0CD}")]
class PerformanceStates
{
  [WmiDataId(1),
   read,
   DisplayName("Reserved"):amended,
   Description("Reserved for future use"):amended
  ] uint32 TransitionFunction;

  [WmiDataId(2),
   read,
   DisplayName("Transition Latency"):amended,
   Description("Worst-case transition latency in microseconds"):amended
  ] uint32 TransitionLatency;

  [WmiDataId(3),
   read,
   DisplayName("Current Performance State"):amended,
   Description("Current Performance State"):amended
  ] uint32 Current;

  [WmiDataId(4),
   read,
   DisplayName("Number of Performance States"):amended,
   Description("Total number of Performance States"):amended
  ] uint32 Count;

  [WmiDataId(5),
   read,
   DisplayName("Performance States"):amended,
   Description("Array of Performance States"):amended,
   WmiSizeIs("Count")
  ] PerformanceState State[];

};

[WMI, 
 Dynamic,
 Provider("WMIProv"),
 Description("Processor Performance Information"):amended,
 localeid("MS\\0x409"),
 guid("{ee751f9d-cec5-4686-9816-ff6d1ca2261c}")]
class ProcessorStatus:MSProcessorClass
{
  [key, read] string InstanceName;
  [read] boolean Active;
  
  [WmiDataId(1),
   read,
   DisplayName("Current Performance State"):amended,
   Description("Current Processor Performance State"):amended
  ] uint32 CurrentPerfState;

  [WmiDataId(2),
   read,
   DisplayName("Last requested throttle"):amended,
   Description("Last requested throttle percentage"):amended
  ] uint32 LastRequestedThrottle;

  [WmiDataId(3),
   read,
   DisplayName("Last transition result"):amended,
   Description("Last transition result"):amended
  ] uint32 LastTransitionResult;
  
  [WmiDataId(4),
   read,
   DisplayName("Current stop-clock throttle value"):amended,
   Description("Current stop-clock throttle value"):amended
  ] uint32 ThrottleValue;

  [WmiDataId(5),
   read,
   DisplayName("Lowest Processor Performance State"):amended,
   Description("Lowest Processor Performance State"):amended
  ] uint32 LowestPerfState;

  [WmiDataId(6),
   read,
   DisplayName("Is Legacy Interface Enabled"):amended,
   Description("Is Legacy Interface Enabled"):amended
  ] uint32 UsingLegacyInterface;

  [WmiDataId(7),
   read,
   DisplayName("Processor Performance States"):amended,
   Description("Processor Performance States"):amended
  ] PerformanceStates PerfStates;
  
};

[WMI, 
 Dynamic,
 Provider("WmiProv"),
 Locale("MS\\0x409"),
 Description("Methods to alter Processor Performance States"):amended,
 guid("{590C82FC-98A3-48e1-BE04-FE11441A11E7}")]
class ProcessorMethods
{
  [key, read] string InstanceName;
  [read] boolean Active;
  
  [WmiMethodId(1),
   Implemented,
   DisplayName("Set Current Processor Performance State"):amended,
   Description("Change Processor Performance State"):amended
  ]void WmiSetProcessorPerfState([in,
                                  Description("New Performance State"):amended
                                 ] uint32 PerformanceState,
                                 [out,
                                  Description("Transition Result"):amended
                                 ] uint32 TransitionResult);

};


[WMI, 
 Dynamic,
 Provider("WmiProv"),
 Locale("MS\\0x409"),
 Description("Processor Performance State Change Event"),
 guid("{66A9B302-F9DB-4864-B0F1-843905E8080F}")]
class ProcessorPerfStateEvent:WmiEvent
{
  [key, read] string InstanceName;
  [read] boolean Active;
  
  [WmiDataId(1),
   read,
   DisplayName("Highest Available Processor Performance State"):amended,
   Description("Highest Available Processor Performance State"):amended
  ] uint32 HighestState;
  
};

[WMI, 
 Dynamic,
 Provider("WmiProv"),
 Locale("MS\\0x409"),
 Description("Processor CStates Event"),
 guid("{1C9D482E-93CE-4b9e-BDEC-23653CE0CE28}")]
class ProcessorCStateEvent:WmiEvent
{
  [key, read] string InstanceName;
  [read] boolean Active;
   
};

[WMI, 
 Dynamic,
 Provider("WmiProv"),
 Locale("MS\\0x409"),
 Description("Processor Transition Event"),
 guid("{A5B32DDD-7F39-4abc-B892-900E43B59EBB}")]
class ProcessorTransitionEvent:WmiEvent
{
  [key, read] string InstanceName;
  [read] boolean Active;

  [WmiDataId(1),
   read,
   DisplayName("State"):amended,
   Description("State"):amended
  ] uint32 State;
  
  [WmiDataId(2),
   read,
   DisplayName("Status"):amended,
   Description("Status"):amended
  ] uint32 Status;

  [WmiDataId(3),
   read,
   DisplayName("Transition Latency"):amended,
   Description("Total Time taken to transition to the new performance state"):amended
  ] uint32 Latency;

  [WmiDataId(4),
   read,
   DisplayName("Cpu Speed"):amended,
   Description("Cpu Speed"):amended
  ] uint32 Speed;
  
};


[WMI,
 Description("Processor Trace Information"):amended,
 localeid("MS\\0x409"),
 guid("{08213901-B301-4a4c-B1DD-177238110F9F}")]
class ProcessorTrace:EventTrace
{
  [WmiDataId(1),
   read,
   DisplayName("Processor Event String"):amended,
   Description("Processor Event String"):amended
  ] string EventString;

};


//
// Define schema for performance counters to be displayed by perfmon
//
// All perf counter classes must derived from Win32_PerfRawData and
// have the hiperf qualifier.
// 
// Each property within the class must have the following qualifiers:
//
//        CounterType - This defines the type of counter. See winperf.h
//                      for more information on what values to place in this
//                      qualifier.
//
//        PerfDetail  - The amount of detail supplied by the counter. 
//            PERF_DETAIL_NOVICE          100 // The uninformed can understand it
//            PERF_DETAIL_ADVANCED        200 // For the advanced user
//            PERF_DETAIL_EXPERT          300 // For the expert user
//            PERF_DETAIL_WIZARD          400 // For the system designer
//
//        DefaultScale - Power if 10 by which to scale chart line if 
//                       vertical axis is 100. 0 ==> 1, 1 ==> 10,
//                       -1 ==> 1/10. Used for purposes display only.
//
// Also property may have the following optional qualifiers
//
//        PerfDefault  - Denotes the property that is the default counter
//                       as displayed by the Sysmon list box. Only one
//                       property may have this qualifier.
//
//        Costly       - Indicates that the value for the property may 
//                       be costly to obtain
//        
//
// Only int32, uint32, int64 and uint64 properties will be displayed in sysmon
//
// All performance counter classes should be localizable, which means that 
// they should include ammended DisplayName and Description class and property
// qualifiers.
//

[WMI, 
 Dynamic,
 Provider("WMIProv"),
 Description("Processor Information"):amended,
 localeid("MS\\0x409"),
 guid("{7FD18652-0CFE-40d2-B0A1-0B066A87759E}"),
 PerfDetail(100),
 HiPerf
]
class ProcessorPerformance:Win32_PerfRawData
{
  [key, read] string InstanceName;
  [read] boolean Active;
  
  [WmiDataId(1),
   read,
   DisplayName("Processor Frequency"):amended,
   Description("Current Processor Frequency in megahertz"):amended,
   PerfDefault,
   CounterType(0x00000000),
   DefaultScale(0),
   PerfDetail(100)
  ] uint32 frequency;

  [WmiDataId(2),
   read,
   DisplayName("Power Consumption"):amended,
   Description("Current Power Consumption in milliwatts"):amended,
   CounterType(0x00000000),
   DefaultScale(0),
   PerfDetail(100)
  ] uint32 power;             

  [WmiDataId(3),
   read,
   DisplayName("% of Maximum Frequency"):amended,
   Description("Percentage of maximum processor frequency"):amended,
   CounterType(0x00000000),
   DefaultScale(0),
   PerfDetail(100)
  ] uint32 percentage;
  
};
