2020-08-04 10:01:18 +02:00
|
|
|
/** @file
|
|
|
|
AML Utility.
|
|
|
|
|
|
|
|
Copyright (c) 2019 - 2020, Arm Limited. All rights reserved.<BR>
|
|
|
|
|
|
|
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
|
|
**/
|
|
|
|
|
|
|
|
#ifndef AML_UTILITY_H_
|
|
|
|
#define AML_UTILITY_H_
|
|
|
|
|
|
|
|
#include <AmlNodeDefines.h>
|
|
|
|
|
|
|
|
/** This function computes and updates the ACPI table checksum.
|
|
|
|
|
|
|
|
@param [in] AcpiTable Pointer to an Acpi table.
|
|
|
|
|
|
|
|
@retval EFI_SUCCESS The function completed successfully.
|
|
|
|
@retval EFI_INVALID_PARAMETER Invalid parameter.
|
|
|
|
**/
|
|
|
|
EFI_STATUS
|
|
|
|
EFIAPI
|
|
|
|
AcpiPlatformChecksum (
|
|
|
|
IN EFI_ACPI_DESCRIPTION_HEADER * AcpiTable
|
|
|
|
);
|
|
|
|
|
|
|
|
/** Compute the size of a tree/sub-tree.
|
|
|
|
|
|
|
|
@param [in] Node Node to compute the size.
|
|
|
|
@param [in, out] Size Pointer holding the computed size.
|
|
|
|
|
|
|
|
@retval EFI_SUCCESS The function completed successfully.
|
|
|
|
@retval EFI_INVALID_PARAMETER Invalid parameter.
|
|
|
|
**/
|
|
|
|
EFI_STATUS
|
|
|
|
EFIAPI
|
|
|
|
AmlComputeSize (
|
|
|
|
IN CONST AML_NODE_HEADER * Node,
|
|
|
|
IN OUT UINT32 * Size
|
|
|
|
);
|
|
|
|
|
|
|
|
/** Set the value contained in an integer node.
|
|
|
|
|
|
|
|
The OpCode is updated accordingly to the new value
|
|
|
|
(e.g.: If the original value was a UINT8 value, then the OpCode
|
|
|
|
would be AML_BYTE_PREFIX. If it the new value is a UINT16
|
|
|
|
value then the OpCode will be updated to AML_WORD_PREFIX).
|
|
|
|
|
|
|
|
@param [in] Node Pointer to an integer node.
|
|
|
|
Must be an object node.
|
|
|
|
@param [in] NewValue New value to write in the integer node.
|
|
|
|
@param [out] ValueWidthDiff Difference in number of bytes used to store
|
|
|
|
the new value.
|
|
|
|
Can be negative.
|
|
|
|
|
|
|
|
@retval EFI_SUCCESS The function completed successfully.
|
|
|
|
@retval EFI_INVALID_PARAMETER Invalid parameter.
|
|
|
|
@retval EFI_OUT_OF_RESOURCES Could not allocate memory.
|
|
|
|
**/
|
|
|
|
EFI_STATUS
|
|
|
|
EFIAPI
|
|
|
|
AmlNodeSetIntegerValue (
|
|
|
|
IN AML_OBJECT_NODE * Node,
|
|
|
|
IN UINT64 NewValue,
|
|
|
|
OUT INT8 * ValueWidthDiff
|
|
|
|
);
|
|
|
|
|
|
|
|
/** Propagate information up the tree.
|
|
|
|
|
|
|
|
The information can be a new size, a new number of arguments.
|
|
|
|
|
|
|
|
@param [in] Node Pointer to a node.
|
|
|
|
Must be a root node or an object node.
|
|
|
|
@param [in] IsIncrement Choose the operation to do:
|
|
|
|
- TRUE: Increment the Node's size and
|
|
|
|
the Node's count;
|
|
|
|
- FALSE: Decrement the Node's size and
|
|
|
|
the Node's count.
|
|
|
|
@param [in] Diff Value to add/subtract to the Node's size.
|
|
|
|
@param [in] NodeCount Number of nodes added/removed.
|
|
|
|
|
|
|
|
@retval EFI_SUCCESS The function completed successfully.
|
|
|
|
@retval EFI_INVALID_PARAMETER Invalid parameter.
|
|
|
|
**/
|
|
|
|
EFI_STATUS
|
|
|
|
EFIAPI
|
|
|
|
AmlPropagateInformation (
|
|
|
|
IN AML_NODE_HEADER * Node,
|
|
|
|
IN BOOLEAN IsIncrement,
|
|
|
|
IN UINT32 Diff,
|
|
|
|
IN UINT8 NodeCount
|
|
|
|
);
|
|
|
|
|
2021-10-08 16:46:16 +02:00
|
|
|
/** Find and set the EndTag's Checksum of a list of Resource Data elements.
|
|
|
|
|
|
|
|
Lists of Resource Data elements end with an EndTag (most of the time). This
|
|
|
|
function finds the EndTag (if present) in a list of Resource Data elements
|
|
|
|
and sets the checksum.
|
|
|
|
|
|
|
|
ACPI 6.4, s6.4.2.9 "End Tag":
|
|
|
|
"This checksum is generated such that adding it to the sum of all the data
|
|
|
|
bytes will produce a zero sum."
|
|
|
|
"If the checksum field is zero, the resource data is treated as if the
|
|
|
|
checksum operation succeeded. Configuration proceeds normally."
|
|
|
|
|
|
|
|
To avoid re-computing checksums, if a new resource data elements is
|
|
|
|
added/removed/modified in a list of resource data elements, the AmlLib
|
|
|
|
resets the checksum to 0.
|
|
|
|
|
|
|
|
@param [in] BufferOpNode Node having a list of Resource Data elements.
|
|
|
|
@param [in] CheckSum CheckSum to store in the EndTag.
|
|
|
|
To ignore/avoid computing the checksum,
|
|
|
|
give 0.
|
|
|
|
|
|
|
|
@retval EFI_SUCCESS The function completed successfully.
|
|
|
|
@retval EFI_INVALID_PARAMETER Invalid parameter.
|
|
|
|
@retval EFI_NOT_FOUND No EndTag found.
|
|
|
|
**/
|
|
|
|
EFI_STATUS
|
|
|
|
EFIAPI
|
|
|
|
AmlSetRdListCheckSum (
|
|
|
|
IN AML_OBJECT_NODE * BufferOpNode,
|
|
|
|
IN UINT8 CheckSum
|
|
|
|
);
|
|
|
|
|
2020-08-04 10:01:18 +02:00
|
|
|
#endif // AML_UTILITY_H_
|
|
|
|
|