blob: 65a8ec463894c182e66ed50ce48eb9be31c80a6a [file] [log] [blame]
/** @file
Copyright (c) 2022, NVIDIA CORPORATION & AFFILIATES. All rights reserved.<BR>
Copyright (c) 2022 - 2023, Arm Limited. All rights reserved.<BR>
Copyright (C) 2025 Advanced Micro Devices, Inc. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef AML_CPC_INFO_H_
#define AML_CPC_INFO_H_
#include <IndustryStandard/Acpi.h>
#pragma pack(1)
/** A structure that describes the Cpc information.
Continuous Performance Control is described in DSDT/SSDT and associated
to cpus/clusters in the cpu topology.
Unsupported Optional registers should be encoded with NULL resource
Register {(SystemMemory, 0, 0, 0, 0)}
For values that support Integer or Buffer, integer will be used
if buffer is NULL resource.
If resource is not NULL then Integer must be 0
Cf. ACPI 6.4, s8.4.7.1 _CPC (Continuous Performance Control)
**/
typedef struct AmlCpcInfo {
/// The revision number of the _CPC package format.
UINT32 Revision;
/// Indicates the highest level of performance the processor
/// is theoretically capable of achieving.
EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE HighestPerformanceBuffer;
UINT32 HighestPerformanceInteger;
/// Indicates the highest sustained performance level of the processor.
EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE NominalPerformanceBuffer;
UINT32 NominalPerformanceInteger;
/// Indicates the lowest performance level of the processor with non-linear power savings.
EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE LowestNonlinearPerformanceBuffer;
UINT32 LowestNonlinearPerformanceInteger;
/// Indicates the lowest performance level of the processor..
EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE LowestPerformanceBuffer;
UINT32 LowestPerformanceInteger;
/// Guaranteed Performance Register Buffer.
/// Optional
EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE GuaranteedPerformanceRegister;
/// Desired Performance Register Buffer.
EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE DesiredPerformanceRegister;
/// Minimum Performance Register Buffer.
/// Optional
EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE MinimumPerformanceRegister;
/// Maximum Performance Register Buffer.
/// Optional
EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE MaximumPerformanceRegister;
/// Performance Reduction Tolerance Register.
/// Optional
EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE PerformanceReductionToleranceRegister;
/// Time Window Register.
/// Optional
EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE TimeWindowRegister;
/// Counter Wraparound Time
/// Optional
EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE CounterWraparoundTimeBuffer;
UINT32 CounterWraparoundTimeInteger;
/// Reference Performance Counter Register
EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE ReferencePerformanceCounterRegister;
/// Delivered Performance Counter Register
EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE DeliveredPerformanceCounterRegister;
/// Performance Limited Register
EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE PerformanceLimitedRegister;
/// CPPC EnableRegister
/// Optional
EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE CPPCEnableRegister;
/// Autonomous Selection Enable
/// Optional
EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE AutonomousSelectionEnableBuffer;
UINT32 AutonomousSelectionEnableInteger;
/// AutonomousActivity-WindowRegister
/// Optional
EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE AutonomousActivityWindowRegister;
/// EnergyPerformance-PreferenceRegister
/// Optional
EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE EnergyPerformancePreferenceRegister;
/// Reference Performance
/// Optional
EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE ReferencePerformanceBuffer;
UINT32 ReferencePerformanceInteger;
/// Lowest Frequency
/// Optional
EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE LowestFrequencyBuffer;
UINT32 LowestFrequencyInteger;
/// Nominal Frequency
/// Optional
EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE NominalFrequencyBuffer;
UINT32 NominalFrequencyInteger;
} AML_CPC_INFO;
/** A structure that describes a
P-State Dependency (PSD) Info.
Cf. ACPI 6.5, s8.4.5.5 _PSD (P-State Dependency).
*/
typedef struct AmlPsdInfo {
/// Revision.
UINT8 Revision;
/// Domain Id.
UINT32 Domain;
/// Coordination type.
UINT32 CoordType;
/// Number of processors belonging to the Domain.
UINT32 NumProc;
} AML_PSD_INFO;
/** A structure that describes a
processor power state control package Info.
Cf. ACPI 6.5, s8.4.1.1 _CST (Processor Power State Control).
Package {
Register // Buffer (Resource Descriptor)
Type // Integer (BYTE)
Latency // Integer (WORD)
Power // Integer (DWORD)
}
*/
typedef struct AmlCstInfo {
/// Information about the C-State register.
EFI_ACPI_6_5_GENERIC_ADDRESS_STRUCTURE Register;
/// Type of C-State, such as c1, c2, c3, etc.
UINT8 Type;
/// Worst case latency for entering and exiting the C-State, in milliseconds.
UINT16 Latency;
/// C-State power consumption in mW.
UINT32 Power;
} AML_CST_INFO;
/** A structure that describes a
C-State Dependency (_CSD) Info.
Cf. ACPI 6.5, s8.4.1.2 _CSD (C-State Dependency).
Package {
NumEntries // Integer, updated based on Revision
Revision // Integer (BYTE)
Domain // Integer (DWORD)
CoordType // Integer (DWORD)
NumProcessors // Integer (DWORD)
Index // Integer (DWORD)
}
*/
typedef struct AmlCsdInfo {
/// The revision of the C-State dependency table.
UINT8 Revision;
/// The domain ID.
UINT32 Domain;
/// The coordination type.
UINT32 CoordType;
/// The number of processors in the domain.
UINT32 NumProcessors;
/// The index of the C-State entry in _CST.
UINT32 Index;
} AML_CSD_INFO;
/** A structure that describes a
Processor Performance control (_PCT) Info.
Cf. ACPI 6.5, s8.4.5.1 _PCT (Processor Control).
Package
{
ControlRegister // Buffer (Resource Descriptor (Register))
StatusRegister // Buffer (Resource Descriptor (Register))
}
*/
typedef struct AmlPctInfo {
/// The performance control register for the processor.
EFI_ACPI_6_5_GENERIC_ADDRESS_STRUCTURE ControlRegister;
/// The performance status register for the processor.
EFI_ACPI_6_5_GENERIC_ADDRESS_STRUCTURE StatusRegister;
} AML_PCT_INFO;
/** A structure that describes a
Processor Supported Performance States (_PSS) Info.
Cf. ACPI 6.5, s8.4.5.2 _PSS (Processor Supported Performance States).
Package {
CoreFrequency // Integer (DWORD)
Power // Integer (DWORD)
Latency // Integer (DWORD)
BusMasterLatency // Integer (DWORD)
Control // Integer (DWORD)
Status // Integer (DWORD)
}
*/
typedef struct AmlPssInfo {
/// Processor core frequency in MHz.
UINT32 CoreFrequency;
/// Processor power consumption in mW.
UINT32 Power;
/// Processor latency in microseconds.
UINT32 Latency;
/// Processor bus master latency in microseconds.
UINT32 BusMasterLatency;
/// Value to write to the performance control register (_PCT).
UINT32 Control;
/// Value to compare with the read value performance status register (_PCT).
UINT32 Status;
} AML_PSS_INFO;
#pragma pack()
#endif //AML_CPC_INFO_H_