The AML utility interfaces are a collection of helper functions that assist in computing the checksum, size and to propagate the node information as a result of addition or update of AML nodes. Signed-off-by: Pierre Gondois <pierre.gondois@arm.com> Signed-off-by: Sami Mujawar <sami.mujawar@arm.com> Reviewed-by: Alexei Fedorov <Alexei.Fedorov@arm.com>
		
			
				
	
	
		
			96 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @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
 | 
						|
  );
 | 
						|
 | 
						|
#endif // AML_UTILITY_H_
 | 
						|
 |