| /** @file | |
| AML Utility. | |
| Copyright (c) 2019 - 2021, 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 | |
| ); | |
| /** Get the value contained in an integer node. | |
| @param [in] Node Pointer to an integer node. | |
| Must be an object node. | |
| @param [out] Value Value contained in the integer node. | |
| @retval EFI_SUCCESS The function completed successfully. | |
| @retval EFI_INVALID_PARAMETER Invalid parameter. | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| AmlNodeGetIntegerValue ( | |
| IN AML_OBJECT_NODE *Node, | |
| OUT UINT64 *Value | |
| ); | |
| /** 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 | |
| ); | |
| /** 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 | |
| ); | |
| #endif // AML_UTILITY_H_ |