mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-27 15:44:04 +02:00
DynamicTablesPkg: AML Code generation to add _CPC entries
_CPC entries can describe CPU performance information. The object is described in ACPI 6.4 s8.4.7.1. "_CPC (Continuous Performance Control)". Add AmlCreateCpcNode() helper function to add _CPC entries to an existing CPU object. Signed-off-by: Jeff Brasen <jbrasen@nvidia.com> Reviewed-by: Pierre Gondois <pierre.gondois@arm.com> Reviewed-by: Sami Mujawar <sami.mujawar@arm.com>
This commit is contained in:
parent
09c90532e7
commit
58350c0055
@ -36,6 +36,7 @@
|
|||||||
@}
|
@}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <AmlCpcInfo.h>
|
||||||
#include <IndustryStandard/Acpi.h>
|
#include <IndustryStandard/Acpi.h>
|
||||||
|
|
||||||
#ifndef AML_HANDLE
|
#ifndef AML_HANDLE
|
||||||
@ -1336,6 +1337,59 @@ AmlAddNameIntegerPackage (
|
|||||||
IN AML_OBJECT_NODE_HANDLE PackageNode
|
IN AML_OBJECT_NODE_HANDLE PackageNode
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/** Create a _CPC node.
|
||||||
|
|
||||||
|
Creates and optionally adds the following node
|
||||||
|
Name(_CPC, Package()
|
||||||
|
{
|
||||||
|
NumEntries, // Integer
|
||||||
|
Revision, // Integer
|
||||||
|
HighestPerformance, // Integer or Buffer (Resource Descriptor)
|
||||||
|
NominalPerformance, // Integer or Buffer (Resource Descriptor)
|
||||||
|
LowestNonlinearPerformance, // Integer or Buffer (Resource Descriptor)
|
||||||
|
LowestPerformance, // Integer or Buffer (Resource Descriptor)
|
||||||
|
GuaranteedPerformanceRegister, // Buffer (Resource Descriptor)
|
||||||
|
DesiredPerformanceRegister , // Buffer (Resource Descriptor)
|
||||||
|
MinimumPerformanceRegister , // Buffer (Resource Descriptor)
|
||||||
|
MaximumPerformanceRegister , // Buffer (Resource Descriptor)
|
||||||
|
PerformanceReductionToleranceRegister, // Buffer (Resource Descriptor)
|
||||||
|
TimeWindowRegister, // Buffer (Resource Descriptor)
|
||||||
|
CounterWraparoundTime, // Integer or Buffer (Resource Descriptor)
|
||||||
|
ReferencePerformanceCounterRegister, // Buffer (Resource Descriptor)
|
||||||
|
DeliveredPerformanceCounterRegister, // Buffer (Resource Descriptor)
|
||||||
|
PerformanceLimitedRegister, // Buffer (Resource Descriptor)
|
||||||
|
CPPCEnableRegister // Buffer (Resource Descriptor)
|
||||||
|
AutonomousSelectionEnable, // Integer or Buffer (Resource Descriptor)
|
||||||
|
AutonomousActivityWindowRegister, // Buffer (Resource Descriptor)
|
||||||
|
EnergyPerformancePreferenceRegister, // Buffer (Resource Descriptor)
|
||||||
|
ReferencePerformance // Integer or Buffer (Resource Descriptor)
|
||||||
|
LowestFrequency, // Integer or Buffer (Resource Descriptor)
|
||||||
|
NominalFrequency // Integer or Buffer (Resource Descriptor)
|
||||||
|
})
|
||||||
|
|
||||||
|
If resource buffer is NULL then integer will be used.
|
||||||
|
|
||||||
|
Cf. ACPI 6.4, s8.4.7.1 _CPC (Continuous Performance Control)
|
||||||
|
|
||||||
|
@ingroup CodeGenApis
|
||||||
|
|
||||||
|
@param [in] CpcInfo CpcInfo object
|
||||||
|
@param [in] ParentNode If provided, set ParentNode as the parent
|
||||||
|
of the node created.
|
||||||
|
@param [out] NewCpcNode If success and provided, contains the created node.
|
||||||
|
|
||||||
|
@retval EFI_SUCCESS The function completed successfully.
|
||||||
|
@retval EFI_INVALID_PARAMETER Invalid parameter.
|
||||||
|
@retval EFI_OUT_OF_RESOURCES Failed to allocate memory.
|
||||||
|
**/
|
||||||
|
EFI_STATUS
|
||||||
|
EFIAPI
|
||||||
|
AmlCreateCpcNode (
|
||||||
|
IN AML_CPC_INFO *CpcInfo,
|
||||||
|
IN AML_NODE_HANDLE ParentNode OPTIONAL,
|
||||||
|
OUT AML_OBJECT_NODE_HANDLE *NewCpcNode OPTIONAL
|
||||||
|
);
|
||||||
|
|
||||||
// DEPRECATED APIS
|
// DEPRECATED APIS
|
||||||
#ifndef DISABLE_NEW_DEPRECATED_INTERFACES
|
#ifndef DISABLE_NEW_DEPRECATED_INTERFACES
|
||||||
|
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
#include <AcpiTableGenerator.h>
|
#include <AcpiTableGenerator.h>
|
||||||
|
|
||||||
#include <AmlCoreInterface.h>
|
#include <AmlCoreInterface.h>
|
||||||
|
#include <AmlCpcInfo.h>
|
||||||
#include <AmlEncoding/Aml.h>
|
#include <AmlEncoding/Aml.h>
|
||||||
#include <Api/AmlApiHelper.h>
|
#include <Api/AmlApiHelper.h>
|
||||||
#include <CodeGen/AmlResourceDataCodeGen.h>
|
#include <CodeGen/AmlResourceDataCodeGen.h>
|
||||||
@ -2850,3 +2851,477 @@ error_handler:
|
|||||||
|
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Adds a register to the package
|
||||||
|
|
||||||
|
@ingroup CodeGenApis
|
||||||
|
|
||||||
|
@param [in] Register If provided, register that will be added to package.
|
||||||
|
otherwise NULL register will be added
|
||||||
|
@param [in] PackageNode Package to add value to
|
||||||
|
|
||||||
|
@retval EFI_SUCCESS The function completed successfully.
|
||||||
|
@retval EFI_INVALID_PARAMETER Invalid parameter.
|
||||||
|
@retval EFI_OUT_OF_RESOURCES Failed to allocate memory.
|
||||||
|
**/
|
||||||
|
STATIC
|
||||||
|
EFI_STATUS
|
||||||
|
EFIAPI
|
||||||
|
AmlAddRegisterToPackage (
|
||||||
|
IN EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE *Register OPTIONAL,
|
||||||
|
IN AML_OBJECT_NODE_HANDLE PackageNode
|
||||||
|
)
|
||||||
|
{
|
||||||
|
EFI_STATUS Status;
|
||||||
|
AML_DATA_NODE_HANDLE RdNode;
|
||||||
|
AML_OBJECT_NODE_HANDLE ResourceTemplateNode;
|
||||||
|
|
||||||
|
RdNode = NULL;
|
||||||
|
|
||||||
|
Status = AmlCodeGenResourceTemplate (&ResourceTemplateNode);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Register != NULL) {
|
||||||
|
Status = AmlCodeGenRdRegister (
|
||||||
|
Register->AddressSpaceId,
|
||||||
|
Register->RegisterBitWidth,
|
||||||
|
Register->RegisterBitOffset,
|
||||||
|
Register->Address,
|
||||||
|
Register->AccessSize,
|
||||||
|
NULL,
|
||||||
|
&RdNode
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
Status = AmlCodeGenRdRegister (
|
||||||
|
EFI_ACPI_6_4_SYSTEM_MEMORY,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
NULL,
|
||||||
|
&RdNode
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
goto error_handler;
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = AmlAppendRdNode (ResourceTemplateNode, RdNode);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
goto error_handler;
|
||||||
|
}
|
||||||
|
|
||||||
|
RdNode = NULL;
|
||||||
|
|
||||||
|
Status = AmlVarListAddTail (
|
||||||
|
(AML_NODE_HANDLE)PackageNode,
|
||||||
|
(AML_NODE_HANDLE)ResourceTemplateNode
|
||||||
|
);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
goto error_handler;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Status;
|
||||||
|
|
||||||
|
error_handler:
|
||||||
|
if (RdNode != NULL) {
|
||||||
|
AmlDeleteTree ((AML_NODE_HANDLE)RdNode);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ResourceTemplateNode != NULL) {
|
||||||
|
AmlDeleteTree ((AML_NODE_HANDLE)ResourceTemplateNode);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Utility function to check if generic address points to NULL
|
||||||
|
|
||||||
|
@param [in] Address Pointer to the Generic address
|
||||||
|
|
||||||
|
@retval TRUE Address is system memory with an Address of 0.
|
||||||
|
@retval FALSE Address does not point to NULL.
|
||||||
|
**/
|
||||||
|
STATIC
|
||||||
|
BOOLEAN
|
||||||
|
EFIAPI
|
||||||
|
IsNullGenericAddress (
|
||||||
|
IN EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE *Address
|
||||||
|
)
|
||||||
|
{
|
||||||
|
if ((Address == NULL) ||
|
||||||
|
((Address->AddressSpaceId == EFI_ACPI_6_4_SYSTEM_MEMORY) &&
|
||||||
|
(Address->Address == 0x0)))
|
||||||
|
{
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Adds an integer or register to the package
|
||||||
|
|
||||||
|
@ingroup CodeGenApis
|
||||||
|
|
||||||
|
@param [in] Register If provided, register that will be added to package
|
||||||
|
@param [in] Integer If Register is NULL, integer that will be added to the package
|
||||||
|
@param [in] PackageNode Package to add value to
|
||||||
|
|
||||||
|
@retval EFI_SUCCESS The function completed successfully.
|
||||||
|
@retval EFI_INVALID_PARAMETER Invalid parameter.
|
||||||
|
@retval EFI_OUT_OF_RESOURCES Failed to allocate memory.
|
||||||
|
**/
|
||||||
|
STATIC
|
||||||
|
EFI_STATUS
|
||||||
|
EFIAPI
|
||||||
|
AmlAddRegisterOrIntegerToPackage (
|
||||||
|
IN EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE *Register OPTIONAL,
|
||||||
|
IN UINT32 Integer,
|
||||||
|
IN AML_OBJECT_NODE_HANDLE PackageNode
|
||||||
|
)
|
||||||
|
{
|
||||||
|
EFI_STATUS Status;
|
||||||
|
AML_OBJECT_NODE_HANDLE IntegerNode;
|
||||||
|
|
||||||
|
IntegerNode = NULL;
|
||||||
|
|
||||||
|
if (!IsNullGenericAddress (Register)) {
|
||||||
|
Status = AmlAddRegisterToPackage (Register, PackageNode);
|
||||||
|
} else {
|
||||||
|
Status = AmlCodeGenInteger (Integer, &IntegerNode);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = AmlVarListAddTail (
|
||||||
|
(AML_NODE_HANDLE)PackageNode,
|
||||||
|
(AML_NODE_HANDLE)IntegerNode
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
if (IntegerNode != NULL) {
|
||||||
|
AmlDeleteTree ((AML_NODE_HANDLE)IntegerNode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Create a _CPC node.
|
||||||
|
|
||||||
|
Creates and optionally adds the following node
|
||||||
|
Name(_CPC, Package()
|
||||||
|
{
|
||||||
|
NumEntries, // Integer
|
||||||
|
Revision, // Integer
|
||||||
|
HighestPerformance, // Integer or Buffer (Resource Descriptor)
|
||||||
|
NominalPerformance, // Integer or Buffer (Resource Descriptor)
|
||||||
|
LowestNonlinearPerformance, // Integer or Buffer (Resource Descriptor)
|
||||||
|
LowestPerformance, // Integer or Buffer (Resource Descriptor)
|
||||||
|
GuaranteedPerformanceRegister, // Buffer (Resource Descriptor)
|
||||||
|
DesiredPerformanceRegister , // Buffer (Resource Descriptor)
|
||||||
|
MinimumPerformanceRegister , // Buffer (Resource Descriptor)
|
||||||
|
MaximumPerformanceRegister , // Buffer (Resource Descriptor)
|
||||||
|
PerformanceReductionToleranceRegister, // Buffer (Resource Descriptor)
|
||||||
|
TimeWindowRegister, // Buffer (Resource Descriptor)
|
||||||
|
CounterWraparoundTime, // Integer or Buffer (Resource Descriptor)
|
||||||
|
ReferencePerformanceCounterRegister, // Buffer (Resource Descriptor)
|
||||||
|
DeliveredPerformanceCounterRegister, // Buffer (Resource Descriptor)
|
||||||
|
PerformanceLimitedRegister, // Buffer (Resource Descriptor)
|
||||||
|
CPPCEnableRegister // Buffer (Resource Descriptor)
|
||||||
|
AutonomousSelectionEnable, // Integer or Buffer (Resource Descriptor)
|
||||||
|
AutonomousActivityWindowRegister, // Buffer (Resource Descriptor)
|
||||||
|
EnergyPerformancePreferenceRegister, // Buffer (Resource Descriptor)
|
||||||
|
ReferencePerformance // Integer or Buffer (Resource Descriptor)
|
||||||
|
LowestFrequency, // Integer or Buffer (Resource Descriptor)
|
||||||
|
NominalFrequency // Integer or Buffer (Resource Descriptor)
|
||||||
|
})
|
||||||
|
|
||||||
|
If resource buffer is NULL then integer will be used.
|
||||||
|
|
||||||
|
Cf. ACPI 6.4, s8.4.7.1 _CPC (Continuous Performance Control)
|
||||||
|
|
||||||
|
@ingroup CodeGenApis
|
||||||
|
|
||||||
|
@param [in] CpcInfo CpcInfo object
|
||||||
|
@param [in] ParentNode If provided, set ParentNode as the parent
|
||||||
|
of the node created.
|
||||||
|
@param [out] NewCpcNode If success and provided, contains the created node.
|
||||||
|
|
||||||
|
@retval EFI_SUCCESS The function completed successfully.
|
||||||
|
@retval EFI_INVALID_PARAMETER Invalid parameter.
|
||||||
|
@retval EFI_OUT_OF_RESOURCES Failed to allocate memory.
|
||||||
|
**/
|
||||||
|
EFI_STATUS
|
||||||
|
EFIAPI
|
||||||
|
AmlCreateCpcNode (
|
||||||
|
IN AML_CPC_INFO *CpcInfo,
|
||||||
|
IN AML_NODE_HANDLE ParentNode OPTIONAL,
|
||||||
|
OUT AML_OBJECT_NODE_HANDLE *NewCpcNode OPTIONAL
|
||||||
|
)
|
||||||
|
{
|
||||||
|
EFI_STATUS Status;
|
||||||
|
AML_OBJECT_NODE_HANDLE CpcNode;
|
||||||
|
AML_OBJECT_NODE_HANDLE CpcPackage;
|
||||||
|
UINT32 NumberOfEntries;
|
||||||
|
|
||||||
|
if ((CpcInfo == NULL) ||
|
||||||
|
((ParentNode == NULL) && (NewCpcNode == NULL)))
|
||||||
|
{
|
||||||
|
ASSERT (0);
|
||||||
|
return EFI_INVALID_PARAMETER;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Revision 3 per ACPI 6.4 specification
|
||||||
|
if (CpcInfo->Revision == 3) {
|
||||||
|
// NumEntries 23 per ACPI 6.4 specification
|
||||||
|
NumberOfEntries = 23;
|
||||||
|
} else {
|
||||||
|
ASSERT (0);
|
||||||
|
return EFI_INVALID_PARAMETER;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((IsNullGenericAddress (&CpcInfo->HighestPerformanceBuffer) &&
|
||||||
|
(CpcInfo->HighestPerformanceInteger == 0)) ||
|
||||||
|
(IsNullGenericAddress (&CpcInfo->NominalPerformanceBuffer) &&
|
||||||
|
(CpcInfo->NominalPerformanceInteger == 0)) ||
|
||||||
|
(IsNullGenericAddress (&CpcInfo->LowestNonlinearPerformanceBuffer) &&
|
||||||
|
(CpcInfo->LowestNonlinearPerformanceInteger == 0)) ||
|
||||||
|
(IsNullGenericAddress (&CpcInfo->LowestPerformanceBuffer) &&
|
||||||
|
(CpcInfo->LowestPerformanceInteger == 0)) ||
|
||||||
|
IsNullGenericAddress (&CpcInfo->DesiredPerformanceRegister) ||
|
||||||
|
IsNullGenericAddress (&CpcInfo->ReferencePerformanceCounterRegister) ||
|
||||||
|
IsNullGenericAddress (&CpcInfo->DeliveredPerformanceCounterRegister) ||
|
||||||
|
IsNullGenericAddress (&CpcInfo->PerformanceLimitedRegister))
|
||||||
|
{
|
||||||
|
ASSERT (0);
|
||||||
|
return EFI_INVALID_PARAMETER;
|
||||||
|
}
|
||||||
|
|
||||||
|
CpcPackage = NULL;
|
||||||
|
|
||||||
|
Status = AmlCodeGenNamePackage ("_CPC", NULL, &CpcNode);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the Package object node of the _CPC node,
|
||||||
|
// which is the 2nd fixed argument (i.e. index 1).
|
||||||
|
CpcPackage = (AML_OBJECT_NODE_HANDLE)AmlGetFixedArgument (
|
||||||
|
CpcNode,
|
||||||
|
EAmlParseIndexTerm1
|
||||||
|
);
|
||||||
|
if ((CpcPackage == NULL) ||
|
||||||
|
(AmlGetNodeType ((AML_NODE_HANDLE)CpcPackage) != EAmlNodeObject) ||
|
||||||
|
(!AmlNodeHasOpCode (CpcPackage, AML_PACKAGE_OP, 0)))
|
||||||
|
{
|
||||||
|
ASSERT (0);
|
||||||
|
Status = EFI_INVALID_PARAMETER;
|
||||||
|
goto error_handler;
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = AmlAddRegisterOrIntegerToPackage (
|
||||||
|
NULL,
|
||||||
|
NumberOfEntries,
|
||||||
|
CpcPackage
|
||||||
|
);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
goto error_handler;
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = AmlAddRegisterOrIntegerToPackage (
|
||||||
|
NULL,
|
||||||
|
CpcInfo->Revision,
|
||||||
|
CpcPackage
|
||||||
|
);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
goto error_handler;
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = AmlAddRegisterOrIntegerToPackage (
|
||||||
|
&CpcInfo->HighestPerformanceBuffer,
|
||||||
|
CpcInfo->HighestPerformanceInteger,
|
||||||
|
CpcPackage
|
||||||
|
);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
goto error_handler;
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = AmlAddRegisterOrIntegerToPackage (
|
||||||
|
&CpcInfo->NominalPerformanceBuffer,
|
||||||
|
CpcInfo->NominalPerformanceInteger,
|
||||||
|
CpcPackage
|
||||||
|
);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
goto error_handler;
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = AmlAddRegisterOrIntegerToPackage (
|
||||||
|
&CpcInfo->LowestNonlinearPerformanceBuffer,
|
||||||
|
CpcInfo->LowestNonlinearPerformanceInteger,
|
||||||
|
CpcPackage
|
||||||
|
);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
goto error_handler;
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = AmlAddRegisterOrIntegerToPackage (
|
||||||
|
&CpcInfo->LowestPerformanceBuffer,
|
||||||
|
CpcInfo->LowestPerformanceInteger,
|
||||||
|
CpcPackage
|
||||||
|
);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
goto error_handler;
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = AmlAddRegisterToPackage (&CpcInfo->GuaranteedPerformanceRegister, CpcPackage);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
goto error_handler;
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = AmlAddRegisterToPackage (&CpcInfo->DesiredPerformanceRegister, CpcPackage);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
goto error_handler;
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = AmlAddRegisterToPackage (&CpcInfo->MinimumPerformanceRegister, CpcPackage);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
goto error_handler;
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = AmlAddRegisterToPackage (&CpcInfo->MaximumPerformanceRegister, CpcPackage);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
goto error_handler;
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = AmlAddRegisterToPackage (&CpcInfo->PerformanceReductionToleranceRegister, CpcPackage);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
goto error_handler;
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = AmlAddRegisterToPackage (&CpcInfo->TimeWindowRegister, CpcPackage);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
goto error_handler;
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = AmlAddRegisterOrIntegerToPackage (
|
||||||
|
&CpcInfo->CounterWraparoundTimeBuffer,
|
||||||
|
CpcInfo->CounterWraparoundTimeInteger,
|
||||||
|
CpcPackage
|
||||||
|
);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
goto error_handler;
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = AmlAddRegisterToPackage (&CpcInfo->ReferencePerformanceCounterRegister, CpcPackage);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
goto error_handler;
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = AmlAddRegisterToPackage (&CpcInfo->DeliveredPerformanceCounterRegister, CpcPackage);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
goto error_handler;
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = AmlAddRegisterToPackage (&CpcInfo->PerformanceLimitedRegister, CpcPackage);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
goto error_handler;
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = AmlAddRegisterToPackage (&CpcInfo->CPPCEnableRegister, CpcPackage);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
goto error_handler;
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = AmlAddRegisterOrIntegerToPackage (
|
||||||
|
&CpcInfo->AutonomousSelectionEnableBuffer,
|
||||||
|
CpcInfo->AutonomousSelectionEnableInteger,
|
||||||
|
CpcPackage
|
||||||
|
);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
goto error_handler;
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = AmlAddRegisterToPackage (&CpcInfo->AutonomousActivityWindowRegister, CpcPackage);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
goto error_handler;
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = AmlAddRegisterToPackage (&CpcInfo->EnergyPerformancePreferenceRegister, CpcPackage);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
goto error_handler;
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = AmlAddRegisterOrIntegerToPackage (
|
||||||
|
&CpcInfo->ReferencePerformanceBuffer,
|
||||||
|
CpcInfo->ReferencePerformanceInteger,
|
||||||
|
CpcPackage
|
||||||
|
);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
goto error_handler;
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = AmlAddRegisterOrIntegerToPackage (
|
||||||
|
&CpcInfo->LowestFrequencyBuffer,
|
||||||
|
CpcInfo->LowestFrequencyInteger,
|
||||||
|
CpcPackage
|
||||||
|
);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
goto error_handler;
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = AmlAddRegisterOrIntegerToPackage (
|
||||||
|
&CpcInfo->NominalFrequencyBuffer,
|
||||||
|
CpcInfo->NominalFrequencyInteger,
|
||||||
|
CpcPackage
|
||||||
|
);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
goto error_handler;
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = LinkNode (CpcNode, ParentNode, NewCpcNode);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
goto error_handler;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Status;
|
||||||
|
|
||||||
|
error_handler:
|
||||||
|
AmlDeleteTree ((AML_NODE_HANDLE)CpcNode);
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user