mirror of https://github.com/acidanthera/audk.git
DynamicTablesPkg: Add ThermalZone CodeGen function
Add API to generate a ThermalZone object to AmlLib. 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
28a267af40
commit
8f5505a4c9
|
@ -1038,6 +1038,34 @@ AmlCodeGenDevice (
|
|||
OUT AML_OBJECT_NODE_HANDLE *NewObjectNode OPTIONAL
|
||||
);
|
||||
|
||||
/** AML code generation for a ThermalZone object node.
|
||||
|
||||
AmlCodeGenThermalZone ("TZ00", ParentNode, NewObjectNode) is
|
||||
equivalent of the following ASL code:
|
||||
ThermalZone(TZ00) {}
|
||||
|
||||
@ingroup CodeGenApis
|
||||
|
||||
@param [in] NameString The new ThermalZone's name.
|
||||
Must be a NULL-terminated ASL NameString
|
||||
e.g.: "DEV0", "DV15.DEV0", etc.
|
||||
The input string is copied.
|
||||
@param [in] ParentNode If provided, set ParentNode as the parent
|
||||
of the node created.
|
||||
@param [out] NewObjectNode If success, contains the created node.
|
||||
|
||||
@retval EFI_SUCCESS Success.
|
||||
@retval EFI_INVALID_PARAMETER Invalid parameter.
|
||||
@retval EFI_OUT_OF_RESOURCES Failed to allocate memory.
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
AmlCodeGenThermalZone (
|
||||
IN CONST CHAR8 *NameString,
|
||||
IN AML_NODE_HANDLE ParentNode OPTIONAL,
|
||||
OUT AML_OBJECT_NODE_HANDLE *NewObjectNode OPTIONAL
|
||||
);
|
||||
|
||||
/** AML code generation for a Scope object node.
|
||||
|
||||
AmlCodeGenScope ("_SB", ParentNode, NewObjectNode) is
|
||||
|
|
|
@ -1218,6 +1218,122 @@ error_handler1:
|
|||
return Status;
|
||||
}
|
||||
|
||||
/** AML code generation for a ThermalZone object node.
|
||||
|
||||
AmlCodeGenThermalZone ("TZ00", ParentNode, NewObjectNode) is
|
||||
equivalent of the following ASL code:
|
||||
ThermalZone(TZ00) {}
|
||||
|
||||
@ingroup CodeGenApis
|
||||
|
||||
@param [in] NameString The new ThermalZone's name.
|
||||
Must be a NULL-terminated ASL NameString
|
||||
e.g.: "DEV0", "DV15.DEV0", etc.
|
||||
The input string is copied.
|
||||
@param [in] ParentNode If provided, set ParentNode as the parent
|
||||
of the node created.
|
||||
@param [out] NewObjectNode If success, contains the created node.
|
||||
|
||||
@retval EFI_SUCCESS Success.
|
||||
@retval EFI_INVALID_PARAMETER Invalid parameter.
|
||||
@retval EFI_OUT_OF_RESOURCES Failed to allocate memory.
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
AmlCodeGenThermalZone (
|
||||
IN CONST CHAR8 *NameString,
|
||||
IN AML_NODE_HANDLE ParentNode OPTIONAL,
|
||||
OUT AML_OBJECT_NODE_HANDLE *NewObjectNode OPTIONAL
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
AML_OBJECT_NODE *ObjectNode;
|
||||
AML_DATA_NODE *DataNode;
|
||||
CHAR8 *AmlNameString;
|
||||
UINT32 AmlNameStringSize;
|
||||
|
||||
if ((NameString == NULL) ||
|
||||
((ParentNode == NULL) && (NewObjectNode == NULL)))
|
||||
{
|
||||
ASSERT (0);
|
||||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
ObjectNode = NULL;
|
||||
DataNode = NULL;
|
||||
AmlNameString = NULL;
|
||||
|
||||
Status = ConvertAslNameToAmlName (NameString, &AmlNameString);
|
||||
if (EFI_ERROR (Status)) {
|
||||
ASSERT (0);
|
||||
return Status;
|
||||
}
|
||||
|
||||
Status = AmlGetNameStringSize (AmlNameString, &AmlNameStringSize);
|
||||
if (EFI_ERROR (Status)) {
|
||||
ASSERT (0);
|
||||
goto error_handler1;
|
||||
}
|
||||
|
||||
Status = AmlCreateObjectNode (
|
||||
AmlGetByteEncodingByOpCode (AML_EXT_OP, AML_EXT_THERMAL_ZONE_OP),
|
||||
AmlNameStringSize + AmlComputePkgLengthWidth (AmlNameStringSize),
|
||||
&ObjectNode
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
ASSERT (0);
|
||||
goto error_handler1;
|
||||
}
|
||||
|
||||
Status = AmlCreateDataNode (
|
||||
EAmlNodeDataTypeNameString,
|
||||
(UINT8 *)AmlNameString,
|
||||
AmlNameStringSize,
|
||||
&DataNode
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
ASSERT (0);
|
||||
goto error_handler2;
|
||||
}
|
||||
|
||||
Status = AmlSetFixedArgument (
|
||||
ObjectNode,
|
||||
EAmlParseIndexTerm0,
|
||||
(AML_NODE_HEADER *)DataNode
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
ASSERT (0);
|
||||
AmlDeleteTree ((AML_NODE_HEADER *)DataNode);
|
||||
goto error_handler2;
|
||||
}
|
||||
|
||||
Status = LinkNode (
|
||||
ObjectNode,
|
||||
ParentNode,
|
||||
NewObjectNode
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
ASSERT (0);
|
||||
goto error_handler2;
|
||||
}
|
||||
|
||||
// Free AmlNameString before returning as it is copied
|
||||
// in the call to AmlCreateDataNode().
|
||||
goto error_handler1;
|
||||
|
||||
error_handler2:
|
||||
if (ObjectNode != NULL) {
|
||||
AmlDeleteTree ((AML_NODE_HEADER *)ObjectNode);
|
||||
}
|
||||
|
||||
error_handler1:
|
||||
if (AmlNameString != NULL) {
|
||||
FreePool (AmlNameString);
|
||||
}
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
/** AML code generation for a Scope object node.
|
||||
|
||||
AmlCodeGenScope ("_SB", ParentNode, NewObjectNode) is
|
||||
|
|
Loading…
Reference in New Issue