mirror of
				https://git.proxmox.com/git/mirror_edk2
				synced 2025-10-31 17:09:09 +00:00 
			
		
		
		
	 731c67e1d7
			
		
	
	
		731c67e1d7
		
	
	
	
	
		
			
			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>
		
			
				
	
	
		
			402 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			402 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
|   AML String.
 | |
| 
 | |
|   Copyright (c) 2010 - 2018, Intel Corporation. All rights reserved. <BR>
 | |
|   Copyright (c) 2019 - 2020, Arm Limited. All rights reserved.<BR>
 | |
| 
 | |
|   SPDX-License-Identifier: BSD-2-Clause-Patent
 | |
| **/
 | |
| 
 | |
| #ifndef AML_STRING_H_
 | |
| #define AML_STRING_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>
 | |
| 
 | |
| /** Check NameString/path information is valid.
 | |
| 
 | |
|   Root, ParentPrefix and SegCount cannot be 0 at the same time.
 | |
|   This function works for ASL and AML name strings.
 | |
| 
 | |
|   @param [in]   Root          Number of root char.
 | |
|                               Must be 0 or 1.
 | |
|   @param [in]   ParentPrefix  Number of carets char ('^').
 | |
|                               Must be [0-255].
 | |
|   @param [in]   SegCount      Number of NameSeg (s).
 | |
|                               Must be [0-255].
 | |
| 
 | |
|   @retval TRUE id the input information is in the right boundaries.
 | |
|           FALSE otherwise.
 | |
| **/
 | |
| BOOLEAN
 | |
| EFIAPI
 | |
| AmlIsNameString (
 | |
|   IN  UINT32  Root,
 | |
|   IN  UINT32  ParentPrefix,
 | |
|   IN  UINT32  SegCount
 | |
|   );
 | |
| 
 | |
| /** Copy bytes from SrcBuffer to DstBuffer and convert to upper case.
 | |
|     Don't copy more than MaxDstBufferSize bytes.
 | |
| 
 | |
|   @param  [out] DstBuffer         Destination buffer.
 | |
|   @param  [in]  MaxDstBufferSize  Maximum size of DstBuffer.
 | |
|                                   Must be non-zero.
 | |
|   @param  [in]  SrcBuffer         Source buffer.
 | |
|   @param  [in]  Count             Count of bytes to copy from SrcBuffer.
 | |
|                                   Return success if 0.
 | |
| 
 | |
|   @retval EFI_SUCCESS             The function completed successfully.
 | |
|   @retval EFI_INVALID_PARAMETER   Invalid parameter.
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| AmlUpperCaseMemCpyS (
 | |
|   OUT       CHAR8   *DstBuffer,
 | |
|   IN        UINT32  MaxDstBufferSize,
 | |
|   IN  CONST CHAR8   *SrcBuffer,
 | |
|   IN        UINT32  Count
 | |
|   );
 | |
| 
 | |
| /** Check whether Buffer is a root path ('\').
 | |
| 
 | |
|   This function works for both ASL and AML pathnames.
 | |
|   Buffer must be at least 2 bytes long.
 | |
| 
 | |
|   @param  [in]  Buffer   An ASL/AML path.
 | |
| 
 | |
|   @retval TRUE    Buffer is a root path
 | |
|   @retval FALSE   Buffer is not a root path.
 | |
| **/
 | |
| BOOLEAN
 | |
| EFIAPI
 | |
| AmlIsRootPath (
 | |
|   IN  CONST  CHAR8  *Buffer
 | |
|   );
 | |
| 
 | |
| /** Check whether Ch is an ASL/AML LeadName.
 | |
| 
 | |
|   This function works for both ASL and AML pathnames.
 | |
| 
 | |
|   ACPI 6.3 specification, s19.2.2. "ASL Name and Pathname Terms":
 | |
|   LeadNameChar := 'A'-'Z' | 'a'-'z' | '_'
 | |
| 
 | |
|   ACPI 6.3 specification, s20.2.2. "Name Objects Encoding":
 | |
|   LeadNameChar := 'A'-'Z' | 'a'-'z' | '_'
 | |
| 
 | |
|   @param  [in]  Ch    The char to test.
 | |
| 
 | |
|   @retval TRUE    Ch is an ASL/AML LeadName.
 | |
|   @retval FALSE   Ch is not an ASL/AML LeadName.
 | |
| **/
 | |
| BOOLEAN
 | |
| EFIAPI
 | |
| AmlIsLeadNameChar (
 | |
|   IN  CHAR8  Ch
 | |
|   );
 | |
| 
 | |
| /** Check whether Ch is an ASL/AML NameChar.
 | |
| 
 | |
|   This function works for both ASL and AML pathnames.
 | |
| 
 | |
|   ACPI 6.3 specification, s19.2.2. "ASL Name and Pathname Terms":
 | |
|   NameChar := DigitChar | LeadNameChar
 | |
|   LeadNameChar := 'A'-'Z' | 'a'-'z' | '_'
 | |
|   DigitChar := '0'-'9'
 | |
| 
 | |
|   ACPI 6.3 specification, s20.2.2. "Name Objects Encoding":
 | |
|   NameChar := DigitChar | LeadNameChar
 | |
|   LeadNameChar := 'A'-'Z' | 'a'-'z' | '_'
 | |
|   DigitChar := '0'-'9'
 | |
| 
 | |
|   @param  [in]  Ch    The char to test.
 | |
| 
 | |
|   @retval TRUE    Ch is an ASL/AML NameChar.
 | |
|   @retval FALSE   Ch is not an ASL/AML NameChar.
 | |
| **/
 | |
| BOOLEAN
 | |
| EFIAPI
 | |
| AmlIsNameChar (
 | |
|   IN  CHAR8  Ch
 | |
|   );
 | |
| 
 | |
| /** Check whether AslBuffer is an ASL NameSeg.
 | |
| 
 | |
|   This function only works for ASL NameStrings/pathnames.
 | |
|   ASL NameStrings/pathnames are at most 4 chars long.
 | |
| 
 | |
|   @param [in]   AslBuffer   Pointer in an ASL NameString/pathname.
 | |
|   @param [out]  Size        Size of the NameSeg.
 | |
| 
 | |
|   @retval TRUE    AslBuffer is an ASL NameSeg.
 | |
|   @retval FALSE   AslBuffer is not an ASL NameSeg.
 | |
| **/
 | |
| BOOLEAN
 | |
| EFIAPI
 | |
| AslIsNameSeg (
 | |
|   IN  CONST  CHAR8   *AslBuffer,
 | |
|   OUT        UINT32  *Size
 | |
|   );
 | |
| 
 | |
| /** Check whether AmlBuffer is an AML NameSeg.
 | |
| 
 | |
|   This function only works for AML NameStrings/pathnames.
 | |
|   AML NameStrings/pathnames must be 4 chars long.
 | |
| 
 | |
|   @param [in] AmlBuffer   Pointer in an AML NameString/pathname.
 | |
| 
 | |
|   @retval TRUE    AmlBuffer is an AML NameSeg.
 | |
|   @retval FALSE   AmlBuffer is not an AML NameSeg.
 | |
| **/
 | |
| BOOLEAN
 | |
| EFIAPI
 | |
| AmlIsNameSeg (
 | |
|   IN  CONST  CHAR8  *AmlBuffer
 | |
|   );
 | |
| 
 | |
| /** Parse an ASL NameString/path.
 | |
| 
 | |
|   An ASL NameString/path must be NULL terminated.
 | |
|   Information found in the ASL NameString/path is returned via pointers:
 | |
|   Root, ParentPrefix, SegCount.
 | |
| 
 | |
|   @param [in]    Buffer       ASL NameString/path.
 | |
|   @param [out]   Root         Pointer holding the number of root char.
 | |
|                               Can be 0 or 1.
 | |
|   @param [out]   ParentPrefix Pointer holding the number of carets char ('^').
 | |
|                               Can be [0-255].
 | |
|   @param [out]   SegCount     Pointer holding the number of NameSeg (s).
 | |
|                               Can be [0-255].
 | |
| 
 | |
|   @retval EFI_SUCCESS             The function completed successfully.
 | |
|   @retval EFI_INVALID_PARAMETER   Invalid parameter.
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| AslParseNameStringInfo (
 | |
|   IN  CONST CHAR8   *Buffer,
 | |
|   OUT       UINT32  *Root,
 | |
|   OUT       UINT32  *ParentPrefix,
 | |
|   OUT       UINT32  *SegCount
 | |
|   );
 | |
| 
 | |
| /** Parse an AML NameString/path.
 | |
| 
 | |
|   It is possible to determine the size of an AML NameString/path just
 | |
|   by sight reading it. So no overflow can occur.
 | |
|   Information found in the AML NameString/path is returned via pointers:
 | |
|   Root, ParentPrefix, SegCount.
 | |
| 
 | |
|   @param [in]    Buffer         AML NameString/path.
 | |
|   @param [out]   Root           Pointer holding the number of root char.
 | |
|                                 Can be 0 or 1.
 | |
|   @param [out]   ParentPrefix   Pointer holding the number of carets char ('^').
 | |
|                                 Can be [0-255].
 | |
|   @param [out]   SegCount       Pointer holding the number of NameSeg(s).
 | |
|                                 Can be [0-255].
 | |
| 
 | |
|   @retval EFI_SUCCESS             The function completed successfully.
 | |
|   @retval EFI_INVALID_PARAMETER   Invalid parameter.
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| AmlParseNameStringInfo (
 | |
|   IN  CONST CHAR8   *Buffer,
 | |
|   OUT       UINT32  *Root,
 | |
|   OUT       UINT32  *ParentPrefix,
 | |
|   OUT       UINT32  *SegCount
 | |
|   );
 | |
| 
 | |
| /** Compute the ASL NameString/path size from NameString
 | |
|     information (Root, ParentPrefix, SegCount).
 | |
| 
 | |
|   @param [in] Root          Number of root char.
 | |
|                             Can be 0 or 1.
 | |
|   @param [in] ParentPrefix  Number of carets char ('^').
 | |
|                             Can be [0-255].
 | |
|   @param [in] SegCount      Pointer holding the number of NameSeg(s).
 | |
|                             Can be [0-255].
 | |
| 
 | |
|   @return Size of the ASL NameString/path.
 | |
| **/
 | |
| UINT32
 | |
| EFIAPI
 | |
| AslComputeNameStringSize (
 | |
|   IN  UINT32  Root,
 | |
|   IN  UINT32  ParentPrefix,
 | |
|   IN  UINT32  SegCount
 | |
|   );
 | |
| 
 | |
| /** Compute the AML NameString/path size from NameString
 | |
|     information (Root, ParentPrefix, SegCount).
 | |
| 
 | |
|   @param [in] Root          Number of root char.
 | |
|                             Can be 0 or 1.
 | |
|   @param [in] ParentPrefix  Number of carets char ('^').
 | |
|                             Can be [0-255].
 | |
|   @param [in] SegCount      Pointer holding the number of NameSeg(s).
 | |
|                             Can be [0-255].
 | |
| 
 | |
|   @return Size of the AML NameString/path.
 | |
| **/
 | |
| UINT32
 | |
| EFIAPI
 | |
| AmlComputeNameStringSize (
 | |
|   IN  UINT32  Root,
 | |
|   IN  UINT32  ParentPrefix,
 | |
|   IN  UINT32  SegCount
 | |
|   );
 | |
| 
 | |
| /** Get the ASL NameString/path size.
 | |
| 
 | |
|   @param [in]   AslPath         An ASL NameString/path.
 | |
|   @param [out]  AslPathSizePtr  Pointer holding the ASL NameString/path size.
 | |
| 
 | |
|   @retval EFI_SUCCESS             Success.
 | |
|   @retval EFI_INVALID_PARAMETER   Invalid parameter.
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| AslGetNameStringSize (
 | |
|   IN  CONST CHAR8   *AslPath,
 | |
|   OUT       UINT32  *AslPathSizePtr
 | |
|   );
 | |
| 
 | |
| /** Get the AML NameString/path size.
 | |
| 
 | |
|   @param [in]   AmlPath         An AML NameString/path.
 | |
|   @param [out]  AmlPathSizePtr  Pointer holding the AML NameString/path size.
 | |
| 
 | |
|   @retval EFI_SUCCESS             Success.
 | |
|   @retval EFI_INVALID_PARAMETER   Invalid parameter.
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| AmlGetNameStringSize (
 | |
|   IN   CONST  CHAR8   *AmlPath,
 | |
|   OUT         UINT32  *AmlPathSizePtr
 | |
|   );
 | |
| 
 | |
| /** Convert an ASL NameString/path to an AML NameString/path.
 | |
|     The caller must free the memory allocated in this function
 | |
|     for AmlPath using FreePool ().
 | |
| 
 | |
|   @param  [in]  AslPath     An ASL NameString/path.
 | |
|   @param  [out] OutAmlPath  Buffer containing the AML path.
 | |
| 
 | |
|   @retval EFI_SUCCESS             Success.
 | |
|   @retval EFI_INVALID_PARAMETER   Invalid parameter.
 | |
|   @retval EFI_OUT_OF_RESOURCES    Failed to allocate memory.
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| ConvertAslNameToAmlName (
 | |
|   IN  CONST  CHAR8  *AslPath,
 | |
|   OUT        CHAR8  **OutAmlPath
 | |
|   );
 | |
| 
 | |
| /** Convert an AML NameString/path to an ASL NameString/path.
 | |
|     The caller must free the memory allocated in this function.
 | |
|     using FreePool ().
 | |
| 
 | |
|   @param  [in]  AmlPath     An AML NameString/path.
 | |
|   @param  [out] OutAslPath  Buffer containing the ASL path.
 | |
| 
 | |
|   @retval EFI_SUCCESS             Success.
 | |
|   @retval EFI_INVALID_PARAMETER   Invalid parameter.
 | |
|   @retval EFI_OUT_OF_RESOURCES    Failed to allocate memory.
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| ConvertAmlNameToAslName (
 | |
|   IN  CONST CHAR8  *AmlPath,
 | |
|   OUT       CHAR8  **OutAslPath
 | |
|   );
 | |
| 
 | |
| /** Compare two ASL NameStrings.
 | |
| 
 | |
|   @param [in] AslName1    First NameString to compare.
 | |
|   @param [in] AslName2    Second NameString to compare.
 | |
| 
 | |
|   @retval TRUE if the two strings are identical.
 | |
|   @retval FALSE otherwise, or if error.
 | |
| **/
 | |
| BOOLEAN
 | |
| EFIAPI
 | |
| AslCompareNameString (
 | |
|   IN  CONST CHAR8  *AslName1,
 | |
|   IN  CONST CHAR8  *AslName2
 | |
|   );
 | |
| 
 | |
| /** Compare two AML NameStrings.
 | |
| 
 | |
|   @param [in] AmlName1    First NameString to compare.
 | |
|   @param [in] AmlName2    Second NameString to compare.
 | |
| 
 | |
|   @retval TRUE if the two strings are identical.
 | |
|   @retval FALSE otherwise, or if error.
 | |
| **/
 | |
| BOOLEAN
 | |
| EFIAPI
 | |
| AmlCompareNameString (
 | |
|   IN  CONST CHAR8  *AmlName1,
 | |
|   IN  CONST CHAR8  *AmlName2
 | |
|   );
 | |
| 
 | |
| /** Compare an AML NameString and an ASL NameString.
 | |
| 
 | |
|   The ASL NameString is converted to an AML NameString before
 | |
|   being compared with the ASL NameString. This allows to expand
 | |
|   NameSegs shorter than 4 chars.
 | |
|   E.g.: AslName: "DEV" will be expanded to "DEV_" before being
 | |
|         compared.
 | |
| 
 | |
|   @param [in] AmlName1   AML NameString to compare.
 | |
|   @param [in] AslName2   ASL NameString to compare.
 | |
| 
 | |
|   @retval TRUE if the two strings are identical.
 | |
|   @retval FALSE otherwise, or if error.
 | |
| **/
 | |
| BOOLEAN
 | |
| EFIAPI
 | |
| CompareAmlWithAslNameString (
 | |
|   IN  CONST CHAR8  *AmlName1,
 | |
|   IN  CONST CHAR8  *AslName2
 | |
|   );
 | |
| 
 | |
| /** Given an AmlPath, return the address of the first NameSeg.
 | |
| 
 | |
|   It is possible to determine the size of an AML NameString/path just
 | |
|   by sight reading it. So no overflow can occur.
 | |
| 
 | |
|   @param  [in]  AmlPath       The AML pathname.
 | |
|   @param  [in]  Root          The AML pathname starts with a root char.
 | |
|                               It is an absolute path.
 | |
|   @param  [in]  ParentPrefix  The AML pathname has ParentPrefix
 | |
|                               carets in its name.
 | |
| 
 | |
|   @return Pointer to the first NameSeg of the NameString.
 | |
|           Return NULL if AmlPath is NULL.
 | |
| **/
 | |
| CONST
 | |
| CHAR8 *
 | |
| EFIAPI
 | |
| AmlGetFirstNameSeg (
 | |
|   IN  CONST  CHAR8   *AmlPath,
 | |
|   IN         UINT32  Root,
 | |
|   IN         UINT32  ParentPrefix
 | |
|   );
 | |
| 
 | |
| #endif // AML_STRING_H_
 |