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>
		
			
				
	
	
		
			196 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			196 lines
		
	
	
		
			5.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
 | |
| **/
 | |
| 
 | |
| #ifndef AML_RESOURCE_DATA_H_
 | |
| #define AML_RESOURCE_DATA_H_
 | |
| 
 | |
| /* This header file does not include internal Node definition,
 | |
|    i.e. AML_ROOT_NODE, AML_OBJECT_NODE, etc. The node definitions
 | |
|    must be included by the caller file. The function prototypes must
 | |
|    only expose AML_NODE_HANDLE, AML_ROOT_NODE_HANDLE, etc. node
 | |
|    definitions.
 | |
|    This allows to keep the functions defined here both internal and
 | |
|    potentially external. If necessary, any function of this file can
 | |
|    be exposed externally.
 | |
|    The Api folder is internal to the AmlLib, but should only use these
 | |
|    functions. They provide a "safe" way to interact with the AmlLib.
 | |
| */
 | |
| 
 | |
| #include <AmlInclude.h>
 | |
| #include <IndustryStandard/Acpi.h>
 | |
| 
 | |
| /**
 | |
|   @defgroup ResourceDataLibrary Resource data library
 | |
|   @ingroup AMLLib
 | |
|   @{
 | |
|     Resource data are defined in the ACPI 6.3 specification,
 | |
|     s6.4 "Resource Data Types for ACPI". They can be created in ASL via the
 | |
|     ResourceTemplate () statement, cf s19.3.3 "ASL Resource Templates".
 | |
| 
 | |
|     Resource data can be of the small or large type. The difference between
 | |
|     small and large resource data elements is their encoding.
 | |
| 
 | |
|     Resource data are stored in the variable list of arguments of object
 | |
|     nodes.
 | |
|   @}
 | |
| */
 | |
| 
 | |
| /** Resource Descriptor header for Small/Large Resource Data Object.
 | |
|     This is the first byte of a Small/Large Resource Data element.
 | |
| 
 | |
|   Can be a ACPI_SMALL_RESOURCE_HEADER or ACPI_LARGE_RESOURCE_HEADER.
 | |
| 
 | |
|   @ingroup ResourceDataStructures
 | |
| */
 | |
| typedef UINT8 AML_RD_HEADER;
 | |
| 
 | |
| /** Mask for the small resource data size.
 | |
| 
 | |
|   @ingroup ResourceDataStructures
 | |
| */
 | |
| #define AML_RD_SMALL_SIZE_MASK  (0x7U)
 | |
| 
 | |
| /** Mask for the small resource data ID.
 | |
| 
 | |
|   @ingroup ResourceDataStructures
 | |
| */
 | |
| #define AML_RD_SMALL_ID_MASK  (0xFU << 3)
 | |
| 
 | |
| /** Mask for the large resource data ID.
 | |
| 
 | |
|   @ingroup ResourceDataStructures
 | |
| */
 | |
| #define AML_RD_LARGE_ID_MASK  (0x7FU)
 | |
| 
 | |
| /**
 | |
|   @defgroup ResourceDataApis Resource data APIs
 | |
|   @ingroup ResourceDataLibrary
 | |
|   @{
 | |
|     Resource data APIs allow to manipulate/decode resource data elements.
 | |
|   @}
 | |
| */
 | |
| 
 | |
| /** Check whether a resource data is of the large type.
 | |
| 
 | |
|   @ingroup ResourceDataApis
 | |
| 
 | |
|   @param  [in]  Header  Pointer to the first byte of a resource data.
 | |
| 
 | |
|   @retval TRUE  If the resource data is of the large type.
 | |
|   @retval FALSE Otherwise.
 | |
| **/
 | |
| #define AML_RD_IS_LARGE(Header)                                               \
 | |
|           (((ACPI_SMALL_RESOURCE_HEADER*)Header)->Bits.Type ==                \
 | |
|           ACPI_LARGE_ITEM_FLAG)
 | |
| 
 | |
| /** Build a small resource data descriptor Id.
 | |
|     The small/large bit is included in the descriptor Id,
 | |
|     but the size bits are not included.
 | |
| 
 | |
|   @ingroup ResourceDataApis
 | |
| 
 | |
|   @param  [in]  Id  Descriptor Id.
 | |
| 
 | |
|   @return A descriptor Id.
 | |
| **/
 | |
| #define AML_RD_BUILD_SMALL_DESC_ID(Id)  ((AML_RD_HEADER)((Id & 0xF) << 3))
 | |
| 
 | |
| /** Build a large resource data descriptor Id.
 | |
|     The small/large bit is included in the descriptor Id.
 | |
| 
 | |
|   @ingroup ResourceDataApis
 | |
| 
 | |
|   @param  [in]  Id  Id of the descriptor.
 | |
| 
 | |
|   @return A descriptor Id.
 | |
| **/
 | |
| #define AML_RD_BUILD_LARGE_DESC_ID(Id)  ((AML_RD_HEADER)((BIT7) | Id))
 | |
| 
 | |
| /** 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.
 | |
| 
 | |
|   @ingroup ResourceDataApis
 | |
| 
 | |
|   @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
 | |
|   );
 | |
| 
 | |
| /** 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.
 | |
| 
 | |
|   @ingroup ResourceDataApis
 | |
| 
 | |
|   @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
 | |
|   );
 | |
| 
 | |
| /** 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.
 | |
| 
 | |
|   @ingroup ResourceDataApis
 | |
| 
 | |
|   @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
 | |
|   );
 | |
| 
 | |
| /** 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
 | |
|   );
 | |
| 
 | |
| #endif // AML_RESOURCE_DATA_H_
 |