REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3737 Apply uncrustify changes to .c/.h files in the DynamicTablesPkg package Cc: Andrew Fish <afish@apple.com> Cc: Leif Lindholm <leif@nuviainc.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com> Reviewed-by: Sami Mujawar <sami.mujawar@arm.com>
		
			
				
	
	
		
			139 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			139 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
  AML Resource Data.
 | 
						|
 | 
						|
  Copyright (c) 2019 - 2020, Arm Limited. All rights reserved.<BR>
 | 
						|
 | 
						|
  SPDX-License-Identifier: BSD-2-Clause-Patent
 | 
						|
 | 
						|
  @par Glossary:
 | 
						|
  - Rd or RD   - Resource Data
 | 
						|
  - Rds or RDS - Resource Data Small
 | 
						|
  - Rdl or RDL - Resource Data Large
 | 
						|
**/
 | 
						|
 | 
						|
#include <ResourceData/AmlResourceData.h>
 | 
						|
 | 
						|
/** Check whether the resource data has the input descriptor Id.
 | 
						|
 | 
						|
  The small/large bit is included in the descriptor Id,
 | 
						|
  but the size bits are not included for small resource data elements.
 | 
						|
 | 
						|
  @param  [in]  Header        Pointer to the first byte of a resource data
 | 
						|
                              element.
 | 
						|
  @param  [in]  DescriptorId  The descriptor to check against.
 | 
						|
 | 
						|
  @retval TRUE    The resource data has the descriptor Id.
 | 
						|
  @retval FALSE   Otherwise.
 | 
						|
**/
 | 
						|
BOOLEAN
 | 
						|
EFIAPI
 | 
						|
AmlRdCompareDescId (
 | 
						|
  IN  CONST AML_RD_HEADER  *Header,
 | 
						|
  IN        AML_RD_HEADER  DescriptorId
 | 
						|
  )
 | 
						|
{
 | 
						|
  if (Header == NULL) {
 | 
						|
    ASSERT (0);
 | 
						|
    return FALSE;
 | 
						|
  }
 | 
						|
 | 
						|
  if (AML_RD_IS_LARGE (Header)) {
 | 
						|
    return ((*Header ^ DescriptorId) == 0);
 | 
						|
  } else {
 | 
						|
    return (((*Header & AML_RD_SMALL_ID_MASK) ^ DescriptorId) == 0);
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
/** Get the descriptor Id of the resource data.
 | 
						|
 | 
						|
  The small/large bit is included in the descriptor Id,
 | 
						|
  but the size bits are not included for small resource data elements.
 | 
						|
 | 
						|
  @param  [in]  Header  Pointer to the first byte of a resource data.
 | 
						|
 | 
						|
  @return A descriptor Id.
 | 
						|
**/
 | 
						|
AML_RD_HEADER
 | 
						|
EFIAPI
 | 
						|
AmlRdGetDescId (
 | 
						|
  IN  CONST AML_RD_HEADER  *Header
 | 
						|
  )
 | 
						|
{
 | 
						|
  if (Header == NULL) {
 | 
						|
    ASSERT (0);
 | 
						|
    return FALSE;
 | 
						|
  }
 | 
						|
 | 
						|
  if (AML_RD_IS_LARGE (Header)) {
 | 
						|
    return *Header;
 | 
						|
  }
 | 
						|
 | 
						|
  // Header is a small resource data element.
 | 
						|
  return *Header & AML_RD_SMALL_ID_MASK;
 | 
						|
}
 | 
						|
 | 
						|
/** Get the size of a resource data element.
 | 
						|
 | 
						|
  If the resource data element is of the large type, the Header
 | 
						|
  is expected to be at least 3 bytes long.
 | 
						|
 | 
						|
  @param  [in]  Header  Pointer to the first byte of a resource data.
 | 
						|
 | 
						|
  @return The size of the resource data element.
 | 
						|
**/
 | 
						|
UINT32
 | 
						|
EFIAPI
 | 
						|
AmlRdGetSize (
 | 
						|
  IN  CONST AML_RD_HEADER  *Header
 | 
						|
  )
 | 
						|
{
 | 
						|
  if (Header == NULL) {
 | 
						|
    ASSERT (0);
 | 
						|
    return FALSE;
 | 
						|
  }
 | 
						|
 | 
						|
  if (AML_RD_IS_LARGE (Header)) {
 | 
						|
    return ((ACPI_LARGE_RESOURCE_HEADER *)Header)->Length +
 | 
						|
           sizeof (ACPI_LARGE_RESOURCE_HEADER);
 | 
						|
  }
 | 
						|
 | 
						|
  // Header is a small resource data element.
 | 
						|
  return ((ACPI_SMALL_RESOURCE_HEADER *)Header)->Bits.Length +
 | 
						|
         sizeof (ACPI_SMALL_RESOURCE_HEADER);
 | 
						|
}
 | 
						|
 | 
						|
/** Set the Checksum of an EndTag resource data.
 | 
						|
 | 
						|
  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."
 | 
						|
 | 
						|
  @param  [in]  Header     Pointer to the first byte of a resource data.
 | 
						|
  @param  [in]  CheckSum   Checksum value to set.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             The function completed successfully.
 | 
						|
  @retval EFI_INVALID_PARAMETER   Invalid parameter.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
AmlRdSetEndTagChecksum (
 | 
						|
  IN  CONST AML_RD_HEADER  *Header,
 | 
						|
  IN        UINT8          CheckSum
 | 
						|
  )
 | 
						|
{
 | 
						|
  if ((Header == NULL)  ||
 | 
						|
      !AmlRdCompareDescId (
 | 
						|
         Header,
 | 
						|
         AML_RD_BUILD_SMALL_DESC_ID (ACPI_SMALL_END_TAG_DESCRIPTOR_NAME)
 | 
						|
         ))
 | 
						|
  {
 | 
						|
    ASSERT (0);
 | 
						|
    return EFI_INVALID_PARAMETER;
 | 
						|
  }
 | 
						|
 | 
						|
  ((EFI_ACPI_END_TAG_DESCRIPTOR *)Header)->Checksum = CheckSum;
 | 
						|
  return EFI_SUCCESS;
 | 
						|
}
 |