Adds an AmlAddIntegerToNamedPackage() API to generate AML code, which adds an integer value to the package node. Cc: Pierre Gondois <pierre.gondois@arm.com> Cc: Sami Mujawar <sami.mujawar@arm.com> Signed-off-by: Abdul Lateef Attar <AbdulLateef.Attar@amd.com> Reviewed-by: Pierre Gondois <pierre.gondois@arm.com> Reviewed-by: Sami Mujawar <sami.mujawar@arm.com>
		
			
				
	
	
		
			1881 lines
		
	
	
		
			73 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			1881 lines
		
	
	
		
			73 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
  AML Lib.
 | 
						|
 | 
						|
  Copyright (c) 2019 - 2023, Arm Limited. All rights reserved.<BR>
 | 
						|
  Copyright (C) 2023 - 2024, Advanced Micro Devices, Inc. All rights reserved.<BR>
 | 
						|
 | 
						|
  SPDX-License-Identifier: BSD-2-Clause-Patent
 | 
						|
**/
 | 
						|
 | 
						|
#ifndef AML_LIB_H_
 | 
						|
#define AML_LIB_H_
 | 
						|
 | 
						|
/**
 | 
						|
  @mainpage Dynamic AML Generation
 | 
						|
  @{
 | 
						|
    @par Summary
 | 
						|
    @{
 | 
						|
    ACPI tables are categorized as data tables and definition block
 | 
						|
    tables. Dynamic Tables Framework currently supports generation of ACPI
 | 
						|
    data tables. Generation of definition block tables is difficult as these
 | 
						|
    tables are encoded in ACPI Machine Language (AML), which has a complex
 | 
						|
    grammar.
 | 
						|
 | 
						|
    Dynamic AML Generation is an extension to the Dynamic tables Framework.
 | 
						|
    One of the techniques used to simplify definition block generation is to
 | 
						|
    fixup a template SSDT table.
 | 
						|
 | 
						|
    Dynamic AML aims to provide a framework that allows fixing up of an ACPI
 | 
						|
    SSDT template with appropriate information about the hardware.
 | 
						|
 | 
						|
    This framework consists of an:
 | 
						|
    - AMLLib core that implements a rich set of interfaces to parse, traverse
 | 
						|
      and update AML data.
 | 
						|
    - AMLLib library APIs that provides interfaces to search and updates nodes
 | 
						|
      in the AML namespace.
 | 
						|
    @}
 | 
						|
  @}
 | 
						|
*/
 | 
						|
 | 
						|
#include <AcpiObjects.h>
 | 
						|
#include <IndustryStandard/Acpi.h>
 | 
						|
 | 
						|
#ifndef AML_HANDLE
 | 
						|
 | 
						|
/** Node handle.
 | 
						|
*/
 | 
						|
typedef void *AML_NODE_HANDLE;
 | 
						|
 | 
						|
/** Root Node handle.
 | 
						|
*/
 | 
						|
typedef void *AML_ROOT_NODE_HANDLE;
 | 
						|
 | 
						|
/** Object Node handle.
 | 
						|
*/
 | 
						|
typedef void *AML_OBJECT_NODE_HANDLE;
 | 
						|
 | 
						|
/** Data Node handle.
 | 
						|
*/
 | 
						|
typedef void *AML_DATA_NODE_HANDLE;
 | 
						|
 | 
						|
#endif // AML_HANDLE
 | 
						|
 | 
						|
/** Memory attributes, _MEM (2 bits)
 | 
						|
 | 
						|
  Possible values are:
 | 
						|
    0-The memory is non-cacheable
 | 
						|
    1-The memory is cacheable (DEPRECATED)
 | 
						|
    2-The memory is cacheable and supports
 | 
						|
      write combining (DEPRECATED)
 | 
						|
    3-The memory is cacheable and prefetchable
 | 
						|
 | 
						|
  @par Reference(s):
 | 
						|
  - ACPI 6.5, s6.4.3.5.5 "Resource Type Specific Flags"
 | 
						|
 | 
						|
**/
 | 
						|
typedef enum {
 | 
						|
  AmlMemoryNonCacheable          = 0,
 | 
						|
  AmlMemoryCacheable             = 1,
 | 
						|
  AmlMemoryCacheableWriteCombine = 2,
 | 
						|
  AmlMemoryCacheablePrefetch     = 3,
 | 
						|
  AmlMemoryCacheablityMax        = 4
 | 
						|
} AML_MEMORY_ATTRIBUTES_MEM;
 | 
						|
 | 
						|
/** Memory attributes, _MTP (2 bits)
 | 
						|
 | 
						|
  Possible values are:
 | 
						|
    0-AddressRangeMemory
 | 
						|
    1-AddressRangeReserved
 | 
						|
    2-AddressRangeACPI
 | 
						|
    3-AddressRangeNVS
 | 
						|
 | 
						|
  @par Reference(s):
 | 
						|
  - ACPI 6.5, s6.4.3.5.5 "Resource Type Specific Flags"
 | 
						|
 | 
						|
**/
 | 
						|
typedef enum {
 | 
						|
  AmlAddressRangeMemory   = 0,
 | 
						|
  AmlAddressRangeReserved = 1,
 | 
						|
  AmlAddressRangeACPI     = 2,
 | 
						|
  AmlAddressRangeNVS      = 3,
 | 
						|
  AmlAddressRangeMax      = 4
 | 
						|
} AML_MEMORY_ATTRIBUTES_MTP;
 | 
						|
 | 
						|
/** Method parameter types
 | 
						|
 | 
						|
  Possible values are:
 | 
						|
    0 - AmlMethodParamTypeInteger
 | 
						|
    1 - AmlMethodParamTypeString
 | 
						|
    2 - AmlMethodParamTypeArg
 | 
						|
    3 - AmlMethodParamTypeLocal
 | 
						|
 | 
						|
  @par Reference(s)
 | 
						|
  - ACPI 6.5, s20.2.5 "Term Objects Encoding"
 | 
						|
 | 
						|
**/
 | 
						|
typedef enum {
 | 
						|
  AmlMethodParamTypeInteger = 0,
 | 
						|
  AmlMethodParamTypeString  = 1,
 | 
						|
  AmlMethodParamTypeArg     = 2,
 | 
						|
  AmlMethodParamTypeLocal   = 3
 | 
						|
} AML_METHOD_PARAM_TYPE;
 | 
						|
 | 
						|
/** AML Method parameter data
 | 
						|
  holds the AML method parameter data.
 | 
						|
**/
 | 
						|
typedef union {
 | 
						|
  UINT8     Arg;
 | 
						|
  UINT8     Local;
 | 
						|
  UINT64    Integer;
 | 
						|
  VOID      *Buffer;
 | 
						|
} AML_METHOD_PARAM_DATA;
 | 
						|
 | 
						|
/** structure to hold AML method parameter types
 | 
						|
  Type  -   Type of parameter
 | 
						|
  Data  -   holds data of parameter
 | 
						|
            if Type is AmlMethodParamTypeInteger
 | 
						|
              then Data is of type Integer to hold integer value.
 | 
						|
            if Type is AmlMethodParamTypeString
 | 
						|
              then Data contains null terminated string.
 | 
						|
            If Type is AmlMethodParamTypeArg
 | 
						|
              then Data contains the Argument number,
 | 
						|
              0 to 6 are supported value.
 | 
						|
            If Type is AmlMethodParamTypeLocal
 | 
						|
              then Data contains the Local variable number,
 | 
						|
              0 to 7 are supported value.
 | 
						|
  DataSize - for future use
 | 
						|
**/
 | 
						|
typedef struct {
 | 
						|
  AML_METHOD_PARAM_TYPE    Type;
 | 
						|
  AML_METHOD_PARAM_DATA    Data;
 | 
						|
  UINTN                    DataSize;
 | 
						|
} AML_METHOD_PARAM;
 | 
						|
 | 
						|
/** Parse the definition block.
 | 
						|
 | 
						|
  The function parses the whole AML blob. It starts with the ACPI DSDT/SSDT
 | 
						|
  header and then parses the AML bytestream.
 | 
						|
  A tree structure is returned via the RootPtr.
 | 
						|
  The tree must be deleted with the AmlDeleteTree function.
 | 
						|
 | 
						|
  @ingroup UserApis
 | 
						|
 | 
						|
  @param  [in]  DefinitionBlock   Pointer to the definition block.
 | 
						|
  @param  [out] RootPtr           Pointer to the root node of the AML tree.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             The function completed successfully.
 | 
						|
  @retval EFI_BUFFER_TOO_SMALL    No space left in the buffer.
 | 
						|
  @retval EFI_INVALID_PARAMETER   Invalid parameter.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES    Could not allocate memory.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
AmlParseDefinitionBlock (
 | 
						|
  IN  CONST EFI_ACPI_DESCRIPTION_HEADER  *DefinitionBlock,
 | 
						|
  OUT       AML_ROOT_NODE_HANDLE         *RootPtr
 | 
						|
  );
 | 
						|
 | 
						|
/** Serialize an AML definition block.
 | 
						|
 | 
						|
  This functions allocates memory with the "AllocateZeroPool ()"
 | 
						|
  function. This memory is used to serialize the AML tree and is
 | 
						|
  returned in the Table.
 | 
						|
 | 
						|
  @ingroup UserApis
 | 
						|
 | 
						|
  @param [in]  RootNode         Root node of the tree.
 | 
						|
  @param [out] Table            On return, hold the serialized
 | 
						|
                                definition block.
 | 
						|
 | 
						|
  @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
 | 
						|
AmlSerializeDefinitionBlock (
 | 
						|
  IN  AML_ROOT_NODE_HANDLE         RootNode,
 | 
						|
  OUT EFI_ACPI_DESCRIPTION_HEADER  **Table
 | 
						|
  );
 | 
						|
 | 
						|
/** Clone a node and its children (clone a tree branch).
 | 
						|
 | 
						|
  The cloned branch returned is not attached to any tree.
 | 
						|
 | 
						|
  @ingroup UserApis
 | 
						|
 | 
						|
  @param  [in]  Node        Pointer to a node.
 | 
						|
                            Node is the head of the branch to clone.
 | 
						|
  @param  [out] ClonedNode  Pointer holding the head of the created cloned
 | 
						|
                            branch.
 | 
						|
 | 
						|
  @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
 | 
						|
AmlCloneTree (
 | 
						|
  IN  AML_NODE_HANDLE  Node,
 | 
						|
  OUT AML_NODE_HANDLE  *ClonedNode
 | 
						|
  );
 | 
						|
 | 
						|
/** Delete a Node and its children.
 | 
						|
 | 
						|
  The Node must be removed from the tree first,
 | 
						|
  or must be the root node.
 | 
						|
 | 
						|
  @ingroup UserApis
 | 
						|
 | 
						|
  @param  [in]  Node  Pointer to the node to delete.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             The function completed successfully.
 | 
						|
  @retval EFI_INVALID_PARAMETER   Invalid parameter.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
AmlDeleteTree (
 | 
						|
  IN  AML_NODE_HANDLE  Node
 | 
						|
  );
 | 
						|
 | 
						|
/** Detach the Node from the tree.
 | 
						|
 | 
						|
  The function will fail if the Node is in its parent's fixed
 | 
						|
  argument list.
 | 
						|
  The Node is not deleted. The deletion is done separately
 | 
						|
  from the removal.
 | 
						|
 | 
						|
  @ingroup UserApis
 | 
						|
 | 
						|
  @param  [in]  Node  Pointer to a Node.
 | 
						|
                      Must be a data node or an object node.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             The function completed successfully.
 | 
						|
  @retval EFI_INVALID_PARAMETER   Invalid parameter.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
AmlDetachNode (
 | 
						|
  IN  AML_NODE_HANDLE  Node
 | 
						|
  );
 | 
						|
 | 
						|
/** Attach a node in an AML tree.
 | 
						|
 | 
						|
  The node will be added as the last statement of the ParentNode.
 | 
						|
  E.g.:
 | 
						|
  ASL code corresponding to NewNode:
 | 
						|
  Name (_UID, 0)
 | 
						|
 | 
						|
  ASL code corresponding to ParentNode:
 | 
						|
  Device (PCI0) {
 | 
						|
    Name(_HID, EISAID("PNP0A08"))
 | 
						|
  }
 | 
						|
 | 
						|
  "AmlAttachNode (ParentNode, NewNode)" will result in:
 | 
						|
  ASL code:
 | 
						|
  Device (PCI0) {
 | 
						|
    Name(_HID, EISAID("PNP0A08"))
 | 
						|
    Name (_UID, 0)
 | 
						|
  }
 | 
						|
 | 
						|
  @param  [in]  ParentNode  Pointer to the parent node.
 | 
						|
                            Must be a root or an object node.
 | 
						|
  @param  [in]  NewNode     Pointer to the node to add.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             The function completed successfully.
 | 
						|
  @retval EFI_INVALID_PARAMETER   Invalid parameter.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
AmlAttachNode (
 | 
						|
  IN  AML_NODE_HANDLE  ParentNode,
 | 
						|
  IN  AML_NODE_HANDLE  NewNode
 | 
						|
  );
 | 
						|
 | 
						|
/** Find a node in the AML namespace, given an ASL path and a reference Node.
 | 
						|
 | 
						|
   - The AslPath can be an absolute path, or a relative path from the
 | 
						|
     reference Node;
 | 
						|
   - Node must be a root node or a namespace node;
 | 
						|
   - A root node is expected to be at the top of the tree.
 | 
						|
 | 
						|
  E.g.:
 | 
						|
  For the following AML namespace, with the ReferenceNode being the node with
 | 
						|
  the name "AAAA":
 | 
						|
   - the node with the name "BBBB" can be found by looking for the ASL
 | 
						|
     path "BBBB";
 | 
						|
   - the root node can be found by looking for the ASL relative path "^",
 | 
						|
      or the absolute path "\\".
 | 
						|
 | 
						|
  AML namespace:
 | 
						|
  \
 | 
						|
  \-AAAA      <- ReferenceNode
 | 
						|
    \-BBBB
 | 
						|
 | 
						|
  @ingroup NameSpaceApis
 | 
						|
 | 
						|
  @param  [in]  ReferenceNode   Reference node.
 | 
						|
                                If a relative path is given, the
 | 
						|
                                search is done from this node. If
 | 
						|
                                an absolute path is given, the
 | 
						|
                                search is done from the root node.
 | 
						|
                                Must be a root node or an object
 | 
						|
                                node which is part of the
 | 
						|
                                namespace.
 | 
						|
  @param  [in]  AslPath         ASL path to the searched node in
 | 
						|
                                the namespace. An ASL path name is
 | 
						|
                                NULL terminated. Can be a relative
 | 
						|
                                or absolute path.
 | 
						|
                                E.g.: "\\_SB.CLU0.CPU0" or "^CPU0"
 | 
						|
  @param  [out] OutNode         Pointer to the found node.
 | 
						|
                                Contains NULL if not found.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             The function completed successfully.
 | 
						|
  @retval EFI_BUFFER_TOO_SMALL    No space left in the buffer.
 | 
						|
  @retval EFI_INVALID_PARAMETER   Invalid parameter.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES    Out of memory.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
AmlFindNode (
 | 
						|
  IN  AML_NODE_HANDLE  ReferenceNode,
 | 
						|
  IN  CHAR8            *AslPath,
 | 
						|
  OUT AML_NODE_HANDLE  *OutNode
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  @defgroup UserApis User APIs
 | 
						|
  @{
 | 
						|
    User APIs are implemented to ease most common actions that might be done
 | 
						|
    using the AmlLib. They allow to find specific objects like "_UID" or
 | 
						|
    "_CRS" and to update their value. It also shows what can be done using
 | 
						|
    AmlLib functions.
 | 
						|
  @}
 | 
						|
*/
 | 
						|
 | 
						|
/** Update the name of a DeviceOp object node.
 | 
						|
 | 
						|
  @ingroup UserApis
 | 
						|
 | 
						|
  @param  [in] DeviceOpNode   Object node representing a Device.
 | 
						|
                              Must have an OpCode=AML_NAME_OP, SubOpCode=0.
 | 
						|
                              OpCode/SubOpCode.
 | 
						|
                              DeviceOp object nodes are defined in ASL
 | 
						|
                              using the "Device ()" function.
 | 
						|
  @param  [in] NewNameString  The new Device's name.
 | 
						|
                              Must be a NULL-terminated ASL NameString
 | 
						|
                              e.g.: "DEV0", "DV15.DEV0", etc.
 | 
						|
                              The input string is copied.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             The function completed successfully.
 | 
						|
  @retval EFI_INVALID_PARAMETER   Invalid parameter.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
AmlDeviceOpUpdateName (
 | 
						|
  IN  AML_OBJECT_NODE_HANDLE  DeviceOpNode,
 | 
						|
  IN  CHAR8                   *NewNameString
 | 
						|
  );
 | 
						|
 | 
						|
/** Update an integer value defined by a NameOp object node.
 | 
						|
 | 
						|
  For compatibility reasons, the NameOpNode must initially
 | 
						|
  contain an integer.
 | 
						|
 | 
						|
  @ingroup UserApis
 | 
						|
 | 
						|
  @param  [in] NameOpNode   NameOp object node.
 | 
						|
                            Must have an OpCode=AML_NAME_OP, SubOpCode=0.
 | 
						|
                            NameOp object nodes are defined in ASL
 | 
						|
                            using the "Name ()" function.
 | 
						|
  @param  [in] NewInt       New Integer value to assign.
 | 
						|
                            Must be a UINT64.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             The function completed successfully.
 | 
						|
  @retval EFI_INVALID_PARAMETER   Invalid parameter.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
AmlNameOpUpdateInteger (
 | 
						|
  IN  AML_OBJECT_NODE_HANDLE  NameOpNode,
 | 
						|
  IN  UINT64                  NewInt
 | 
						|
  );
 | 
						|
 | 
						|
/** Update a string value defined by a NameOp object node.
 | 
						|
 | 
						|
  The NameOpNode must initially contain a string.
 | 
						|
  The EISAID ASL macro converts a string to an integer. This, it is
 | 
						|
  not accepted.
 | 
						|
 | 
						|
  @ingroup UserApis
 | 
						|
 | 
						|
  @param  [in] NameOpNode   NameOp object node.
 | 
						|
                            Must have an OpCode=AML_NAME_OP, SubOpCode=0.
 | 
						|
                            NameOp object nodes are defined in ASL
 | 
						|
                            using the "Name ()" function.
 | 
						|
  @param  [in] NewName      New NULL terminated string to assign to
 | 
						|
                            the NameOpNode.
 | 
						|
                            The input string is copied.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             The function completed successfully.
 | 
						|
  @retval EFI_INVALID_PARAMETER   Invalid parameter.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
AmlNameOpUpdateString (
 | 
						|
  IN        AML_OBJECT_NODE_HANDLE  NameOpNode,
 | 
						|
  IN  CONST CHAR8                   *NewName
 | 
						|
  );
 | 
						|
 | 
						|
/** Get the first Resource Data element contained in a named object.
 | 
						|
 | 
						|
  In the following ASL code, the function will return the Resource Data
 | 
						|
  node corresponding to the "QWordMemory ()" ASL macro.
 | 
						|
  Name (_CRS, ResourceTemplate() {
 | 
						|
      QWordMemory (...) {...},
 | 
						|
      Interrupt (...) {...}
 | 
						|
    }
 | 
						|
  )
 | 
						|
 | 
						|
  Note:
 | 
						|
  "_CRS" names defined as methods are not handled by this function.
 | 
						|
  They must be defined as names, using the "Name ()" statement.
 | 
						|
 | 
						|
  @ingroup UserApis
 | 
						|
 | 
						|
  @param  [in] NameOpNode   NameOp object node defining a named object.
 | 
						|
                            Must have an OpCode=AML_NAME_OP, SubOpCode=0.
 | 
						|
                            NameOp object nodes are defined in ASL
 | 
						|
                            using the "Name ()" function.
 | 
						|
  @param  [out] OutRdNode   Pointer to the first Resource Data element of
 | 
						|
                            the named object. A Resource Data element
 | 
						|
                            is stored in a data node.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             The function completed successfully.
 | 
						|
  @retval EFI_INVALID_PARAMETER   Invalid parameter.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
AmlNameOpGetFirstRdNode (
 | 
						|
  IN  AML_OBJECT_NODE_HANDLE  NameOpNode,
 | 
						|
  OUT AML_DATA_NODE_HANDLE    *OutRdNode
 | 
						|
  );
 | 
						|
 | 
						|
/** Get the Resource Data element following the CurrRdNode Resource Data.
 | 
						|
 | 
						|
  In the following ASL code, if CurrRdNode corresponds to the first
 | 
						|
  "QWordMemory ()" ASL macro, the function will return the Resource Data
 | 
						|
  node corresponding to the "Interrupt ()" ASL macro.
 | 
						|
  Name (_CRS, ResourceTemplate() {
 | 
						|
      QwordMemory (...) {...},
 | 
						|
      Interrupt (...) {...}
 | 
						|
    }
 | 
						|
  )
 | 
						|
 | 
						|
  Note:
 | 
						|
  "_CRS" names defined as methods are not handled by this function.
 | 
						|
  They must be defined as names, using the "Name ()" statement.
 | 
						|
 | 
						|
  @ingroup UserApis
 | 
						|
 | 
						|
  @param  [in]  CurrRdNode   Pointer to the current Resource Data element of
 | 
						|
                             the named object.
 | 
						|
  @param  [out] OutRdNode    Pointer to the Resource Data element following
 | 
						|
                             the CurrRdNode.
 | 
						|
                             Contain a NULL pointer if CurrRdNode is the
 | 
						|
                             last Resource Data element in the list.
 | 
						|
                             The "End Tag" is not considered as a resource
 | 
						|
                             data element and is not returned.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             The function completed successfully.
 | 
						|
  @retval EFI_INVALID_PARAMETER   Invalid parameter.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
AmlNameOpGetNextRdNode (
 | 
						|
  IN  AML_DATA_NODE_HANDLE  CurrRdNode,
 | 
						|
  OUT AML_DATA_NODE_HANDLE  *OutRdNode
 | 
						|
  );
 | 
						|
 | 
						|
/** Update the first interrupt of an Interrupt resource data node.
 | 
						|
 | 
						|
  The flags of the Interrupt resource data are left unchanged.
 | 
						|
 | 
						|
  The InterruptRdNode corresponds to the Resource Data created by the
 | 
						|
  "Interrupt ()" ASL macro. It is an Extended Interrupt Resource Data.
 | 
						|
  See ACPI 6.3 specification, s6.4.3.6 "Extended Interrupt Descriptor"
 | 
						|
  for more information about Extended Interrupt Resource Data.
 | 
						|
 | 
						|
  @ingroup UserApis
 | 
						|
 | 
						|
  @param  [in]  InterruptRdNode   Pointer to the an extended interrupt
 | 
						|
                                  resource data node.
 | 
						|
  @param  [in]  Irq               Interrupt value to update.
 | 
						|
 | 
						|
  @retval  EFI_SUCCESS            The function completed successfully.
 | 
						|
  @retval  EFI_INVALID_PARAMETER  Invalid parameter.
 | 
						|
  @retval  EFI_OUT_OF_RESOURCES   Out of resources.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
AmlUpdateRdInterrupt (
 | 
						|
  IN  AML_DATA_NODE_HANDLE  InterruptRdNode,
 | 
						|
  IN  UINT32                Irq
 | 
						|
  );
 | 
						|
 | 
						|
/** Update the base address and length of a QWord resource data node.
 | 
						|
 | 
						|
  @ingroup UserApis
 | 
						|
 | 
						|
  @param  [in] QWordRdNode         Pointer a QWord resource data
 | 
						|
                                   node.
 | 
						|
  @param  [in] BaseAddress         Base address.
 | 
						|
  @param  [in] BaseAddressLength   Base address length.
 | 
						|
 | 
						|
  @retval  EFI_SUCCESS            The function completed successfully.
 | 
						|
  @retval  EFI_INVALID_PARAMETER  Invalid parameter.
 | 
						|
  @retval  EFI_OUT_OF_RESOURCES   Out of resources.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
AmlUpdateRdQWord (
 | 
						|
  IN  AML_DATA_NODE_HANDLE  QWordRdNode,
 | 
						|
  IN  UINT64                BaseAddress,
 | 
						|
  IN  UINT64                BaseAddressLength
 | 
						|
  );
 | 
						|
 | 
						|
/** Code generation for the "DWordIO ()" ASL function.
 | 
						|
 | 
						|
  The Resource Data effectively created is a DWord Address Space Resource
 | 
						|
  Data. Cf ACPI 6.4:
 | 
						|
   - s6.4.3.5.2 "DWord Address Space Descriptor".
 | 
						|
   - s19.6.34 "DWordIO".
 | 
						|
 | 
						|
  The created resource data node can be:
 | 
						|
   - appended to the list of resource data elements of the NameOpNode.
 | 
						|
     In such case NameOpNode must be defined by a the "Name ()" ASL statement
 | 
						|
     and initially contain a "ResourceTemplate ()".
 | 
						|
   - returned through the NewRdNode parameter.
 | 
						|
 | 
						|
  See ACPI 6.4 spec, s19.6.34 for more.
 | 
						|
 | 
						|
  @param [in]  IsResourceConsumer   ResourceUsage parameter.
 | 
						|
  @param [in]  IsMinFixed           Minimum address is fixed.
 | 
						|
  @param [in]  IsMaxFixed           Maximum address is fixed.
 | 
						|
  @param [in]  IsPosDecode          Decode parameter
 | 
						|
  @param [in]  IsaRanges            Possible values are:
 | 
						|
                                     0-Reserved
 | 
						|
                                     1-NonISAOnly
 | 
						|
                                     2-ISAOnly
 | 
						|
                                     3-EntireRange
 | 
						|
  @param [in]  AddressGranularity   Address granularity.
 | 
						|
  @param [in]  AddressMinimum       Minimum address.
 | 
						|
  @param [in]  AddressMaximum       Maximum address.
 | 
						|
  @param [in]  AddressTranslation   Address translation.
 | 
						|
  @param [in]  RangeLength          Range length.
 | 
						|
  @param [in]  ResourceSourceIndex  Resource Source index.
 | 
						|
                                    Not supported. Must be 0.
 | 
						|
  @param [in]  ResourceSource       Resource Source.
 | 
						|
                                    Not supported. Must be NULL.
 | 
						|
  @param [in]  IsDenseTranslation   TranslationDensity parameter.
 | 
						|
  @param [in]  IsTypeStatic         TranslationType parameter.
 | 
						|
  @param [in]  NameOpNode           NameOp object node defining a named object.
 | 
						|
                                    If provided, append the new resource data
 | 
						|
                                    node to the list of resource data elements
 | 
						|
                                    of this node.
 | 
						|
  @param [out] NewRdNode            If provided and success,
 | 
						|
                                    contain the created node.
 | 
						|
 | 
						|
  @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
 | 
						|
AmlCodeGenRdDWordIo (
 | 
						|
  IN        BOOLEAN IsResourceConsumer,
 | 
						|
  IN        BOOLEAN IsMinFixed,
 | 
						|
  IN        BOOLEAN IsMaxFixed,
 | 
						|
  IN        BOOLEAN IsPosDecode,
 | 
						|
  IN        UINT8 IsaRanges,
 | 
						|
  IN        UINT32 AddressGranularity,
 | 
						|
  IN        UINT32 AddressMinimum,
 | 
						|
  IN        UINT32 AddressMaximum,
 | 
						|
  IN        UINT32 AddressTranslation,
 | 
						|
  IN        UINT32 RangeLength,
 | 
						|
  IN        UINT8 ResourceSourceIndex,
 | 
						|
  IN  CONST CHAR8 *ResourceSource,
 | 
						|
  IN        BOOLEAN IsDenseTranslation,
 | 
						|
  IN        BOOLEAN IsTypeStatic,
 | 
						|
  IN        AML_OBJECT_NODE_HANDLE NameOpNode, OPTIONAL
 | 
						|
  OUT       AML_DATA_NODE_HANDLE    *NewRdNode  OPTIONAL
 | 
						|
  );
 | 
						|
 | 
						|
/** Code generation for the "DWordMemory ()" ASL function.
 | 
						|
 | 
						|
  The Resource Data effectively created is a DWord Address Space Resource
 | 
						|
  Data. Cf ACPI 6.4:
 | 
						|
   - s6.4.3.5.2 "DWord Address Space Descriptor".
 | 
						|
   - s19.6.35 "DWordMemory".
 | 
						|
 | 
						|
  The created resource data node can be:
 | 
						|
   - appended to the list of resource data elements of the NameOpNode.
 | 
						|
     In such case NameOpNode must be defined by a the "Name ()" ASL statement
 | 
						|
     and initially contain a "ResourceTemplate ()".
 | 
						|
   - returned through the NewRdNode parameter.
 | 
						|
 | 
						|
  See ACPI 6.4 spec, s19.6.35 for more.
 | 
						|
 | 
						|
  @param [in]  IsResourceConsumer   ResourceUsage parameter.
 | 
						|
  @param [in]  IsPosDecode          Decode parameter
 | 
						|
  @param [in]  IsMinFixed           Minimum address is fixed.
 | 
						|
  @param [in]  IsMaxFixed           Maximum address is fixed.
 | 
						|
  @param [in]  Cacheable            Possible values are:
 | 
						|
                                    0-The memory is non-cacheable
 | 
						|
                                    1-The memory is cacheable
 | 
						|
                                    2-The memory is cacheable and supports
 | 
						|
                                      write combining
 | 
						|
                                    3-The memory is cacheable and prefetchable
 | 
						|
  @param [in]  IsReadWrite          ReadAndWrite parameter.
 | 
						|
  @param [in]  AddressGranularity   Address granularity.
 | 
						|
  @param [in]  AddressMinimum       Minimum address.
 | 
						|
  @param [in]  AddressMaximum       Maximum address.
 | 
						|
  @param [in]  AddressTranslation   Address translation.
 | 
						|
  @param [in]  RangeLength          Range length.
 | 
						|
  @param [in]  ResourceSourceIndex  Resource Source index.
 | 
						|
                                    Not supported. Must be 0.
 | 
						|
  @param [in]  ResourceSource       Resource Source.
 | 
						|
                                    Not supported. Must be NULL.
 | 
						|
  @param [in]  MemoryRangeType      Possible values are:
 | 
						|
                                      0-AddressRangeMemory
 | 
						|
                                      1-AddressRangeReserved
 | 
						|
                                      2-AddressRangeACPI
 | 
						|
                                      3-AddressRangeNVS
 | 
						|
  @param [in]  IsTypeStatic         TranslationType parameter.
 | 
						|
  @param [in]  NameOpNode           NameOp object node defining a named object.
 | 
						|
                                    If provided, append the new resource data
 | 
						|
                                    node to the list of resource data elements
 | 
						|
                                    of this node.
 | 
						|
  @param [out] NewRdNode            If provided and success,
 | 
						|
                                    contain the created node.
 | 
						|
 | 
						|
  @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
 | 
						|
AmlCodeGenRdDWordMemory (
 | 
						|
  IN        BOOLEAN IsResourceConsumer,
 | 
						|
  IN        BOOLEAN IsPosDecode,
 | 
						|
  IN        BOOLEAN IsMinFixed,
 | 
						|
  IN        BOOLEAN IsMaxFixed,
 | 
						|
  IN        AML_MEMORY_ATTRIBUTES_MEM Cacheable,
 | 
						|
  IN        BOOLEAN IsReadWrite,
 | 
						|
  IN        UINT32 AddressGranularity,
 | 
						|
  IN        UINT32 AddressMinimum,
 | 
						|
  IN        UINT32 AddressMaximum,
 | 
						|
  IN        UINT32 AddressTranslation,
 | 
						|
  IN        UINT32 RangeLength,
 | 
						|
  IN        UINT8 ResourceSourceIndex,
 | 
						|
  IN  CONST CHAR8 *ResourceSource,
 | 
						|
  IN        AML_MEMORY_ATTRIBUTES_MTP MemoryRangeType,
 | 
						|
  IN        BOOLEAN IsTypeStatic,
 | 
						|
  IN        AML_OBJECT_NODE_HANDLE NameOpNode, OPTIONAL
 | 
						|
  OUT       AML_DATA_NODE_HANDLE    *NewRdNode  OPTIONAL
 | 
						|
  );
 | 
						|
 | 
						|
/** Code generation for the "Memory32Fixed ()" ASL macro.
 | 
						|
 | 
						|
  The Resource Data effectively created is a 32-bit Memory Resource
 | 
						|
  Data. Cf ACPI 6.4:
 | 
						|
   - s19.6.83 "Memory Resource Descriptor Macro".
 | 
						|
   - s19.2.8 "Memory32FixedTerm".
 | 
						|
 | 
						|
  See ACPI 6.4 spec, s19.2.8 for more.
 | 
						|
 | 
						|
  @param [in]  IsReadWrite          ReadAndWrite parameter.
 | 
						|
  @param [in]  Address              AddressBase parameter.
 | 
						|
  @param [in]  RangeLength          Range length.
 | 
						|
  @param [in]  NameOpNode           NameOp object node defining a named object.
 | 
						|
                                    If provided, append the new resource data
 | 
						|
                                    node to the list of resource data elements
 | 
						|
                                    of this node.
 | 
						|
  @param [out] NewMemNode           If provided and success,
 | 
						|
                                    contain the created node.
 | 
						|
 | 
						|
  @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
 | 
						|
AmlCodeGenRdMemory32Fixed (
 | 
						|
  BOOLEAN                 IsReadWrite,
 | 
						|
  UINT32                  Address,
 | 
						|
  UINT32                  RangeLength,
 | 
						|
  AML_OBJECT_NODE_HANDLE  NameOpNode,
 | 
						|
  AML_DATA_NODE_HANDLE    *NewMemNode
 | 
						|
  );
 | 
						|
 | 
						|
/** Code generation for the "WordBusNumber ()" ASL function.
 | 
						|
 | 
						|
  The Resource Data effectively created is a Word Address Space Resource
 | 
						|
  Data. Cf ACPI 6.4:
 | 
						|
   - s6.4.3.5.3 "Word Address Space Descriptor".
 | 
						|
   - s19.6.149 "WordBusNumber".
 | 
						|
 | 
						|
  The created resource data node can be:
 | 
						|
   - appended to the list of resource data elements of the NameOpNode.
 | 
						|
     In such case NameOpNode must be defined by a the "Name ()" ASL statement
 | 
						|
     and initially contain a "ResourceTemplate ()".
 | 
						|
   - returned through the NewRdNode parameter.
 | 
						|
 | 
						|
  See ACPI 6.4 spec, s19.6.149 for more.
 | 
						|
 | 
						|
  @param [in]  IsResourceConsumer   ResourceUsage parameter.
 | 
						|
  @param [in]  IsMinFixed           Minimum address is fixed.
 | 
						|
  @param [in]  IsMaxFixed           Maximum address is fixed.
 | 
						|
  @param [in]  IsPosDecode          Decode parameter
 | 
						|
  @param [in]  AddressGranularity   Address granularity.
 | 
						|
  @param [in]  AddressMinimum       Minimum address.
 | 
						|
  @param [in]  AddressMaximum       Maximum address.
 | 
						|
  @param [in]  AddressTranslation   Address translation.
 | 
						|
  @param [in]  RangeLength          Range length.
 | 
						|
  @param [in]  ResourceSourceIndex  Resource Source index.
 | 
						|
                                    Not supported. Must be 0.
 | 
						|
  @param [in]  ResourceSource       Resource Source.
 | 
						|
                                    Not supported. Must be NULL.
 | 
						|
  @param [in]  NameOpNode           NameOp object node defining a named object.
 | 
						|
                                    If provided, append the new resource data
 | 
						|
                                    node to the list of resource data elements
 | 
						|
                                    of this node.
 | 
						|
  @param [out] NewRdNode            If provided and success,
 | 
						|
                                    contain the created node.
 | 
						|
 | 
						|
  @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
 | 
						|
AmlCodeGenRdWordBusNumber (
 | 
						|
  IN        BOOLEAN IsResourceConsumer,
 | 
						|
  IN        BOOLEAN IsMinFixed,
 | 
						|
  IN        BOOLEAN IsMaxFixed,
 | 
						|
  IN        BOOLEAN IsPosDecode,
 | 
						|
  IN        UINT16 AddressGranularity,
 | 
						|
  IN        UINT16 AddressMinimum,
 | 
						|
  IN        UINT16 AddressMaximum,
 | 
						|
  IN        UINT16 AddressTranslation,
 | 
						|
  IN        UINT16 RangeLength,
 | 
						|
  IN        UINT8 ResourceSourceIndex,
 | 
						|
  IN  CONST CHAR8 *ResourceSource,
 | 
						|
  IN        AML_OBJECT_NODE_HANDLE NameOpNode, OPTIONAL
 | 
						|
  OUT       AML_DATA_NODE_HANDLE    *NewRdNode  OPTIONAL
 | 
						|
  );
 | 
						|
 | 
						|
/** Code generation for the "WordIO ()" ASL function.
 | 
						|
 | 
						|
  The Resource Data effectively created is a Word Address Space Resource
 | 
						|
  Data. Cf ACPI 6.5:
 | 
						|
   - s6.4.3.5.3 "Word Address Space Descriptor".
 | 
						|
 | 
						|
  The created resource data node can be:
 | 
						|
   - appended to the list of resource data elements of the NameOpNode.
 | 
						|
     In such case NameOpNode must be defined by a the "Name ()" ASL statement
 | 
						|
     and initially contain a "ResourceTemplate ()".
 | 
						|
   - returned through the NewRdNode parameter.
 | 
						|
 | 
						|
  @param [in]  IsResourceConsumer   ResourceUsage parameter.
 | 
						|
  @param [in]  IsMinFixed           Minimum address is fixed.
 | 
						|
  @param [in]  IsMaxFixed           Maximum address is fixed.
 | 
						|
  @param [in]  IsPosDecode          Decode parameter
 | 
						|
  @param [in]  IsaRanges            Possible values are:
 | 
						|
                                     0-Reserved
 | 
						|
                                     1-NonISAOnly
 | 
						|
                                     2-ISAOnly
 | 
						|
                                     3-EntireRange
 | 
						|
  @param [in]  AddressGranularity   Address granularity.
 | 
						|
  @param [in]  AddressMinimum       Minimum address.
 | 
						|
  @param [in]  AddressMaximum       Maximum address.
 | 
						|
  @param [in]  AddressTranslation   Address translation.
 | 
						|
  @param [in]  RangeLength          Range length.
 | 
						|
  @param [in]  ResourceSourceIndex  Resource Source index.
 | 
						|
                                    Not supported. Must be 0.
 | 
						|
  @param [in]  ResourceSource       Resource Source.
 | 
						|
                                    Not supported. Must be NULL.
 | 
						|
  @param [in]  IsDenseTranslation   TranslationDensity parameter.
 | 
						|
  @param [in]  IsTypeStatic         TranslationType parameter.
 | 
						|
  @param [in]  NameOpNode           NameOp object node defining a named object.
 | 
						|
                                    If provided, append the new resource data
 | 
						|
                                    node to the list of resource data elements
 | 
						|
                                    of this node.
 | 
						|
  @param [out] NewRdNode            If provided and success,
 | 
						|
                                    contain the created node.
 | 
						|
 | 
						|
  @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
 | 
						|
AmlCodeGenRdWordIo (
 | 
						|
  IN        BOOLEAN IsResourceConsumer,
 | 
						|
  IN        BOOLEAN IsMinFixed,
 | 
						|
  IN        BOOLEAN IsMaxFixed,
 | 
						|
  IN        BOOLEAN IsPosDecode,
 | 
						|
  IN        UINT8 IsaRanges,
 | 
						|
  IN        UINT16 AddressGranularity,
 | 
						|
  IN        UINT16 AddressMinimum,
 | 
						|
  IN        UINT16 AddressMaximum,
 | 
						|
  IN        UINT16 AddressTranslation,
 | 
						|
  IN        UINT16 RangeLength,
 | 
						|
  IN        UINT8 ResourceSourceIndex,
 | 
						|
  IN  CONST CHAR8 *ResourceSource,
 | 
						|
  IN        BOOLEAN IsDenseTranslation,
 | 
						|
  IN        BOOLEAN IsTypeStatic,
 | 
						|
  IN        AML_OBJECT_NODE_HANDLE NameOpNode, OPTIONAL
 | 
						|
  OUT       AML_DATA_NODE_HANDLE    *NewRdNode  OPTIONAL
 | 
						|
  );
 | 
						|
 | 
						|
/** Code generation for the "QWordIO ()" ASL function.
 | 
						|
 | 
						|
  The Resource Data effectively created is a QWord Address Space Resource
 | 
						|
  Data. Cf ACPI 6.4:
 | 
						|
   - s6.4.3.5.1 "QWord Address Space Descriptor".
 | 
						|
   - s19.6.109 "QWordIO".
 | 
						|
 | 
						|
  The created resource data node can be:
 | 
						|
   - appended to the list of resource data elements of the NameOpNode.
 | 
						|
     In such case NameOpNode must be defined by a the "Name ()" ASL statement
 | 
						|
     and initially contain a "ResourceTemplate ()".
 | 
						|
   - returned through the NewRdNode parameter.
 | 
						|
 | 
						|
  See ACPI 6.4 spec, s19.6.109 for more.
 | 
						|
 | 
						|
  @param [in]  IsResourceConsumer   ResourceUsage parameter.
 | 
						|
  @param [in]  IsMinFixed           Minimum address is fixed.
 | 
						|
  @param [in]  IsMaxFixed           Maximum address is fixed.
 | 
						|
  @param [in]  IsPosDecode          Decode parameter
 | 
						|
  @param [in]  IsaRanges            Possible values are:
 | 
						|
                                     0-Reserved
 | 
						|
                                     1-NonISAOnly
 | 
						|
                                     2-ISAOnly
 | 
						|
                                     3-EntireRange
 | 
						|
  @param [in]  AddressGranularity   Address granularity.
 | 
						|
  @param [in]  AddressMinimum       Minimum address.
 | 
						|
  @param [in]  AddressMaximum       Maximum address.
 | 
						|
  @param [in]  AddressTranslation   Address translation.
 | 
						|
  @param [in]  RangeLength          Range length.
 | 
						|
  @param [in]  ResourceSourceIndex  Resource Source index.
 | 
						|
                                    Unused. Must be 0.
 | 
						|
  @param [in]  ResourceSource       Resource Source.
 | 
						|
                                    Unused. Must be NULL.
 | 
						|
  @param [in]  IsDenseTranslation   TranslationDensity parameter.
 | 
						|
  @param [in]  IsTypeStatic         TranslationType parameter.
 | 
						|
  @param [in]  NameOpNode           NameOp object node defining a named object.
 | 
						|
                                    If provided, append the new resource data
 | 
						|
                                    node to the list of resource data elements
 | 
						|
                                    of this node.
 | 
						|
  @param [out] NewRdNode            If provided and success,
 | 
						|
                                    contain the created node.
 | 
						|
 | 
						|
  @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
 | 
						|
AmlCodeGenRdQWordIo (
 | 
						|
  IN        BOOLEAN IsResourceConsumer,
 | 
						|
  IN        BOOLEAN IsMinFixed,
 | 
						|
  IN        BOOLEAN IsMaxFixed,
 | 
						|
  IN        BOOLEAN IsPosDecode,
 | 
						|
  IN        UINT8 IsaRanges,
 | 
						|
  IN        UINT64 AddressGranularity,
 | 
						|
  IN        UINT64 AddressMinimum,
 | 
						|
  IN        UINT64 AddressMaximum,
 | 
						|
  IN        UINT64 AddressTranslation,
 | 
						|
  IN        UINT64 RangeLength,
 | 
						|
  IN        UINT8 ResourceSourceIndex,
 | 
						|
  IN  CONST CHAR8 *ResourceSource,
 | 
						|
  IN        BOOLEAN IsDenseTranslation,
 | 
						|
  IN        BOOLEAN IsTypeStatic,
 | 
						|
  IN        AML_OBJECT_NODE_HANDLE NameOpNode, OPTIONAL
 | 
						|
  OUT       AML_DATA_NODE_HANDLE    *NewRdNode  OPTIONAL
 | 
						|
  );
 | 
						|
 | 
						|
/** Code generation for the "QWordMemory ()" ASL function.
 | 
						|
 | 
						|
  The Resource Data effectively created is a QWord Address Space Resource
 | 
						|
  Data. Cf ACPI 6.4:
 | 
						|
   - s6.4.3.5.1 "QWord Address Space Descriptor".
 | 
						|
   - s19.6.110 "QWordMemory".
 | 
						|
 | 
						|
  The created resource data node can be:
 | 
						|
   - appended to the list of resource data elements of the NameOpNode.
 | 
						|
     In such case NameOpNode must be defined by a the "Name ()" ASL statement
 | 
						|
     and initially contain a "ResourceTemplate ()".
 | 
						|
   - returned through the NewRdNode parameter.
 | 
						|
 | 
						|
  See ACPI 6.4 spec, s19.6.110 for more.
 | 
						|
 | 
						|
  @param [in]  IsResourceConsumer   ResourceUsage parameter.
 | 
						|
  @param [in]  IsPosDecode          Decode parameter.
 | 
						|
  @param [in]  IsMinFixed           Minimum address is fixed.
 | 
						|
  @param [in]  IsMaxFixed           Maximum address is fixed.
 | 
						|
  @param [in]  Cacheable            Possible values are:
 | 
						|
                                    0-The memory is non-cacheable
 | 
						|
                                    1-The memory is cacheable
 | 
						|
                                    2-The memory is cacheable and supports
 | 
						|
                                      write combining
 | 
						|
                                    3-The memory is cacheable and prefetchable
 | 
						|
  @param [in]  IsReadWrite          ReadAndWrite parameter.
 | 
						|
  @param [in]  AddressGranularity   Address granularity.
 | 
						|
  @param [in]  AddressMinimum       Minimum address.
 | 
						|
  @param [in]  AddressMaximum       Maximum address.
 | 
						|
  @param [in]  AddressTranslation   Address translation.
 | 
						|
  @param [in]  RangeLength          Range length.
 | 
						|
  @param [in]  ResourceSourceIndex  Resource Source index.
 | 
						|
                                    Not supported. Must be 0.
 | 
						|
  @param [in]  ResourceSource       Resource Source.
 | 
						|
                                    Not supported. Must be NULL.
 | 
						|
  @param [in]  MemoryRangeType      Possible values are:
 | 
						|
                                      0-AddressRangeMemory
 | 
						|
                                      1-AddressRangeReserved
 | 
						|
                                      2-AddressRangeACPI
 | 
						|
                                      3-AddressRangeNVS
 | 
						|
  @param [in]  IsTypeStatic         TranslationType parameter.
 | 
						|
  @param [in]  NameOpNode           NameOp object node defining a named object.
 | 
						|
                                    If provided, append the new resource data
 | 
						|
                                    node to the list of resource data elements
 | 
						|
                                    of this node.
 | 
						|
  @param [out] NewRdNode            If provided and success,
 | 
						|
                                    contain the created node.
 | 
						|
 | 
						|
  @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
 | 
						|
AmlCodeGenRdQWordMemory (
 | 
						|
  IN        BOOLEAN IsResourceConsumer,
 | 
						|
  IN        BOOLEAN IsPosDecode,
 | 
						|
  IN        BOOLEAN IsMinFixed,
 | 
						|
  IN        BOOLEAN IsMaxFixed,
 | 
						|
  IN        AML_MEMORY_ATTRIBUTES_MEM Cacheable,
 | 
						|
  IN        BOOLEAN IsReadWrite,
 | 
						|
  IN        UINT64 AddressGranularity,
 | 
						|
  IN        UINT64 AddressMinimum,
 | 
						|
  IN        UINT64 AddressMaximum,
 | 
						|
  IN        UINT64 AddressTranslation,
 | 
						|
  IN        UINT64 RangeLength,
 | 
						|
  IN        UINT8 ResourceSourceIndex,
 | 
						|
  IN  CONST CHAR8 *ResourceSource,
 | 
						|
  IN        AML_MEMORY_ATTRIBUTES_MTP MemoryRangeType,
 | 
						|
  IN        BOOLEAN IsTypeStatic,
 | 
						|
  IN        AML_OBJECT_NODE_HANDLE NameOpNode, OPTIONAL
 | 
						|
  OUT       AML_DATA_NODE_HANDLE    *NewRdNode  OPTIONAL
 | 
						|
  );
 | 
						|
 | 
						|
/** Code generation for the "Interrupt ()" ASL function.
 | 
						|
 | 
						|
  The Resource Data effectively created is an Extended Interrupt Resource
 | 
						|
  Data. Cf ACPI 6.4:
 | 
						|
   - s6.4.3.6 "Extended Interrupt Descriptor"
 | 
						|
   - s19.6.64 "Interrupt (Interrupt Resource Descriptor Macro)"
 | 
						|
 | 
						|
  The created resource data node can be:
 | 
						|
   - appended to the list of resource data elements of the NameOpNode.
 | 
						|
     In such case NameOpNode must be defined by a the "Name ()" ASL statement
 | 
						|
     and initially contain a "ResourceTemplate ()".
 | 
						|
   - returned through the NewRdNode parameter.
 | 
						|
 | 
						|
  @ingroup CodeGenApis
 | 
						|
 | 
						|
  @param  [in]  ResourceConsumer The device consumes the specified interrupt
 | 
						|
                                 or produces it for use by a child device.
 | 
						|
  @param  [in]  EdgeTriggered    The interrupt is edge triggered or
 | 
						|
                                 level triggered.
 | 
						|
  @param  [in]  ActiveLow        The interrupt is active-high or active-low.
 | 
						|
  @param  [in]  Shared           The interrupt can be shared with other
 | 
						|
                                 devices or not (Exclusive).
 | 
						|
  @param  [in]  IrqList          Interrupt list. Must be non-NULL.
 | 
						|
  @param  [in]  IrqCount         Interrupt count. Must be non-zero.
 | 
						|
  @param  [in]  NameOpNode       NameOp object node defining a named object.
 | 
						|
                                 If provided, append the new resource data node
 | 
						|
                                 to the list of resource data elements of this
 | 
						|
                                 node.
 | 
						|
  @param  [out] NewRdNode        If provided and success,
 | 
						|
                                 contain the created node.
 | 
						|
 | 
						|
  @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
 | 
						|
AmlCodeGenRdInterrupt (
 | 
						|
  IN  BOOLEAN                 ResourceConsumer,
 | 
						|
  IN  BOOLEAN                 EdgeTriggered,
 | 
						|
  IN  BOOLEAN                 ActiveLow,
 | 
						|
  IN  BOOLEAN                 Shared,
 | 
						|
  IN  UINT32                  *IrqList,
 | 
						|
  IN  UINT8                   IrqCount,
 | 
						|
  IN  AML_OBJECT_NODE_HANDLE  NameOpNode  OPTIONAL,
 | 
						|
  OUT AML_DATA_NODE_HANDLE    *NewRdNode  OPTIONAL
 | 
						|
  );
 | 
						|
 | 
						|
/** AML code generation for DefinitionBlock.
 | 
						|
 | 
						|
  Create a Root Node handle.
 | 
						|
  It is the caller's responsibility to free the allocated memory
 | 
						|
  with the AmlDeleteTree function.
 | 
						|
 | 
						|
  AmlCodeGenDefinitionBlock (TableSignature, OemId, TableID, OEMRevision) is
 | 
						|
  equivalent to the following ASL code:
 | 
						|
    DefinitionBlock (AMLFileName, TableSignature, ComplianceRevision,
 | 
						|
      OemId, TableID, OEMRevision) {}
 | 
						|
  with the ComplianceRevision set to 2 and the AMLFileName is ignored.
 | 
						|
 | 
						|
  @ingroup CodeGenApis
 | 
						|
 | 
						|
  @param[in]  TableSignature       4-character ACPI signature.
 | 
						|
                                   Must be 'DSDT' or 'SSDT'.
 | 
						|
  @param[in]  OemId                6-character string OEM identifier.
 | 
						|
  @param[in]  OemTableId           8-character string OEM table identifier.
 | 
						|
  @param[in]  OemRevision          OEM revision number.
 | 
						|
  @param[out] DefinitionBlockTerm  The ASL Term handle representing a
 | 
						|
                                   Definition Block.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             Success.
 | 
						|
  @retval EFI_INVALID_PARAMETER   Invalid parameter.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES    Failed to allocate memory.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
AmlCodeGenDefinitionBlock (
 | 
						|
  IN  CONST CHAR8                 *TableSignature,
 | 
						|
  IN  CONST CHAR8                 *OemId,
 | 
						|
  IN  CONST CHAR8                 *OemTableId,
 | 
						|
  IN        UINT32                OemRevision,
 | 
						|
  OUT       AML_ROOT_NODE_HANDLE  *NewRootNode
 | 
						|
  );
 | 
						|
 | 
						|
/** AML code generation for a Name object node, containing a String.
 | 
						|
 | 
						|
  AmlCodeGenNameString ("_HID", "HID0000", ParentNode, NewObjectNode) is
 | 
						|
  equivalent of the following ASL code:
 | 
						|
    Name(_HID, "HID0000")
 | 
						|
 | 
						|
  @ingroup CodeGenApis
 | 
						|
 | 
						|
  @param  [in] NameString     The new variable name.
 | 
						|
                              Must be a NULL-terminated ASL NameString
 | 
						|
                              e.g.: "DEV0", "DV15.DEV0", etc.
 | 
						|
                              The input string is copied.
 | 
						|
  @param [in]  String         NULL terminated String to associate to the
 | 
						|
                              NameString.
 | 
						|
  @param [in]  ParentNode     If provided, set ParentNode as the parent
 | 
						|
                              of the node created.
 | 
						|
  @param [out] NewObjectNode  If success, contains the created node.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             Success.
 | 
						|
  @retval EFI_INVALID_PARAMETER   Invalid parameter.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES    Failed to allocate memory.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
AmlCodeGenNameString (
 | 
						|
  IN  CONST CHAR8                   *NameString,
 | 
						|
  IN        CHAR8                   *String,
 | 
						|
  IN        AML_NODE_HANDLE         ParentNode      OPTIONAL,
 | 
						|
  OUT       AML_OBJECT_NODE_HANDLE  *NewObjectNode   OPTIONAL
 | 
						|
  );
 | 
						|
 | 
						|
/** AML code generation for a Name object node, containing an Integer.
 | 
						|
 | 
						|
  AmlCodeGenNameInteger ("_UID", 1, ParentNode, NewObjectNode) is
 | 
						|
  equivalent of the following ASL code:
 | 
						|
    Name(_UID, One)
 | 
						|
 | 
						|
  @ingroup CodeGenApis
 | 
						|
 | 
						|
  @param  [in] NameString     The new variable name.
 | 
						|
                              Must be a NULL-terminated ASL NameString
 | 
						|
                              e.g.: "DEV0", "DV15.DEV0", etc.
 | 
						|
                              The input string is copied.
 | 
						|
  @param [in]  Integer        Integer to associate to the NameString.
 | 
						|
  @param [in]  ParentNode     If provided, set ParentNode as the parent
 | 
						|
                              of the node created.
 | 
						|
  @param [out] NewObjectNode  If success, contains the created node.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             Success.
 | 
						|
  @retval EFI_INVALID_PARAMETER   Invalid parameter.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES    Failed to allocate memory.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
AmlCodeGenNameInteger (
 | 
						|
  IN  CONST CHAR8                   *NameString,
 | 
						|
  IN        UINT64                  Integer,
 | 
						|
  IN        AML_NODE_HANDLE         ParentNode      OPTIONAL,
 | 
						|
  OUT       AML_OBJECT_NODE_HANDLE  *NewObjectNode   OPTIONAL
 | 
						|
  );
 | 
						|
 | 
						|
/** AML code generation for a Name object node, containing a Package.
 | 
						|
 | 
						|
  AmlCodeGenNamePackage ("PKG0", ParentNode, NewObjectNode) is
 | 
						|
  equivalent of the following ASL code:
 | 
						|
    Name(PKG0, Package () {})
 | 
						|
 | 
						|
  @ingroup CodeGenApis
 | 
						|
 | 
						|
  @param [in]  NameString     The new variable name.
 | 
						|
                              Must be a NULL-terminated ASL NameString
 | 
						|
                              e.g.: "DEV0", "DV15.DEV0", etc.
 | 
						|
                              The input string is copied.
 | 
						|
  @param [in]  ParentNode     If provided, set ParentNode as the parent
 | 
						|
                              of the node created.
 | 
						|
  @param [out] NewObjectNode  If success, contains the created node.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             Success.
 | 
						|
  @retval EFI_INVALID_PARAMETER   Invalid parameter.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES    Failed to allocate memory.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
AmlCodeGenNamePackage (
 | 
						|
  IN  CONST CHAR8 *NameString,
 | 
						|
  IN        AML_NODE_HANDLE ParentNode, OPTIONAL
 | 
						|
  OUT       AML_OBJECT_NODE_HANDLE  *NewObjectNode   OPTIONAL
 | 
						|
  );
 | 
						|
 | 
						|
/** AML code generation for a Name object node, containing a ResourceTemplate.
 | 
						|
 | 
						|
  AmlCodeGenNameResourceTemplate ("PRS0", ParentNode, NewObjectNode) is
 | 
						|
  equivalent of the following ASL code:
 | 
						|
    Name(PRS0, ResourceTemplate () {})
 | 
						|
 | 
						|
  @ingroup CodeGenApis
 | 
						|
 | 
						|
  @param [in]  NameString     The new variable name.
 | 
						|
                              Must be a NULL-terminated ASL NameString
 | 
						|
                              e.g.: "DEV0", "DV15.DEV0", etc.
 | 
						|
                              The input string is copied.
 | 
						|
  @param [in]  ParentNode     If provided, set ParentNode as the parent
 | 
						|
                              of the node created.
 | 
						|
  @param [out] NewObjectNode  If success, contains the created node.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             Success.
 | 
						|
  @retval EFI_INVALID_PARAMETER   Invalid parameter.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES    Failed to allocate memory.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
AmlCodeGenNameResourceTemplate (
 | 
						|
  IN  CONST CHAR8 *NameString,
 | 
						|
  IN        AML_NODE_HANDLE ParentNode, OPTIONAL
 | 
						|
  OUT       AML_OBJECT_NODE_HANDLE  *NewObjectNode   OPTIONAL
 | 
						|
  );
 | 
						|
 | 
						|
/** AML code generation for a Name object node, containing a String.
 | 
						|
 | 
						|
  AmlCodeGenNameUnicodeString ("_STR", L"String", ParentNode, NewObjectNode) is
 | 
						|
  equivalent of the following ASL code:
 | 
						|
    Name(_STR, Unicode ("String"))
 | 
						|
 | 
						|
  @ingroup CodeGenApis
 | 
						|
 | 
						|
  @param  [in] NameString     The new variable name.
 | 
						|
                              Must be a NULL-terminated ASL NameString
 | 
						|
                              e.g.: "DEV0", "DV15.DEV0", etc.
 | 
						|
                              The input string is copied.
 | 
						|
  @param [in]  String         NULL terminated Unicode String to associate to the
 | 
						|
                              NameString.
 | 
						|
  @param [in]  ParentNode     If provided, set ParentNode as the parent
 | 
						|
                              of the node created.
 | 
						|
  @param [out] NewObjectNode  If success, contains the created node.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             Success.
 | 
						|
  @retval EFI_INVALID_PARAMETER   Invalid parameter.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES    Failed to allocate memory.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
AmlCodeGenNameUnicodeString (
 | 
						|
  IN  CONST CHAR8                   *NameString,
 | 
						|
  IN        CHAR16                  *String,
 | 
						|
  IN        AML_NODE_HANDLE         ParentNode      OPTIONAL,
 | 
						|
  OUT       AML_OBJECT_NODE_HANDLE  *NewObjectNode   OPTIONAL
 | 
						|
  );
 | 
						|
 | 
						|
/** Add a _PRT entry.
 | 
						|
 | 
						|
  AmlCodeGenPrtEntry (0x0FFFF, 0, "LNKA", 0, PrtNameNode) is
 | 
						|
  equivalent of the following ASL code:
 | 
						|
    Package (4) {
 | 
						|
      0x0FFFF, // Address: Device address (([Device Id] << 16) | 0xFFFF).
 | 
						|
      0,       // Pin: PCI pin number of the device (0-INTA, ...).
 | 
						|
      LNKA     // Source: Name of the device that allocates the interrupt
 | 
						|
               // to which the above pin is connected.
 | 
						|
      0        // Source Index: Source is assumed to only describe one
 | 
						|
               // interrupt, so let it to index 0.
 | 
						|
    }
 | 
						|
 | 
						|
  The package is added at the tail of the list of the input _PRT node
 | 
						|
  name:
 | 
						|
    Name (_PRT, Package () {
 | 
						|
      [Pre-existing _PRT entries],
 | 
						|
      [Newly created _PRT entry]
 | 
						|
    })
 | 
						|
 | 
						|
  Cf. ACPI 6.4, s6.2.13 "_PRT (PCI Routing Table)"
 | 
						|
 | 
						|
  @ingroup CodeGenApis
 | 
						|
 | 
						|
  @param [in]  Address        Address. Cf ACPI 6.4 specification, Table 6.2:
 | 
						|
                              "ADR Object Address Encodings":
 | 
						|
                              High word-Device #, Low word-Function #. (for
 | 
						|
                              example, device 3, function 2 is 0x00030002).
 | 
						|
                              To refer to all the functions on a device #,
 | 
						|
                              use a function number of FFFF).
 | 
						|
  @param [in]  Pin            PCI pin number of the device (0-INTA ... 3-INTD).
 | 
						|
                              Must be between 0-3.
 | 
						|
  @param [in]  LinkName       Link Name, i.e. device in the AML NameSpace
 | 
						|
                              describing the interrupt used.
 | 
						|
                              The input string is copied.
 | 
						|
  @param [in]  SourceIndex    Source index or GSIV.
 | 
						|
  @param [in]  PrtNameNode    Prt Named node to add the object to ....
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             Success.
 | 
						|
  @retval EFI_INVALID_PARAMETER   Invalid parameter.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES    Failed to allocate memory.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
AmlAddPrtEntry (
 | 
						|
  IN        UINT32                  Address,
 | 
						|
  IN        UINT8                   Pin,
 | 
						|
  IN  CONST CHAR8                   *LinkName,
 | 
						|
  IN        UINT32                  SourceIndex,
 | 
						|
  IN        AML_OBJECT_NODE_HANDLE  PrtNameNode
 | 
						|
  );
 | 
						|
 | 
						|
/** AML code generation for a Device object node.
 | 
						|
 | 
						|
  AmlCodeGenDevice ("COM0", ParentNode, NewObjectNode) is
 | 
						|
  equivalent of the following ASL code:
 | 
						|
    Device(COM0) {}
 | 
						|
 | 
						|
  @ingroup CodeGenApis
 | 
						|
 | 
						|
  @param  [in] NameString     The new Device's name.
 | 
						|
                              Must be a NULL-terminated ASL NameString
 | 
						|
                              e.g.: "DEV0", "DV15.DEV0", etc.
 | 
						|
                              The input string is copied.
 | 
						|
  @param [in]  ParentNode     If provided, set ParentNode as the parent
 | 
						|
                              of the node created.
 | 
						|
  @param [out] NewObjectNode  If success, contains the created node.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             Success.
 | 
						|
  @retval EFI_INVALID_PARAMETER   Invalid parameter.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES    Failed to allocate memory.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
AmlCodeGenDevice (
 | 
						|
  IN  CONST CHAR8                   *NameString,
 | 
						|
  IN        AML_NODE_HANDLE         ParentNode      OPTIONAL,
 | 
						|
  OUT       AML_OBJECT_NODE_HANDLE  *NewObjectNode   OPTIONAL
 | 
						|
  );
 | 
						|
 | 
						|
/** AML code generation for a ThermalZone object node.
 | 
						|
 | 
						|
  AmlCodeGenThermalZone ("TZ00", ParentNode, NewObjectNode) is
 | 
						|
  equivalent of the following ASL code:
 | 
						|
    ThermalZone(TZ00) {}
 | 
						|
 | 
						|
  @ingroup CodeGenApis
 | 
						|
 | 
						|
  @param  [in] NameString     The new ThermalZone's name.
 | 
						|
                              Must be a NULL-terminated ASL NameString
 | 
						|
                              e.g.: "DEV0", "DV15.DEV0", etc.
 | 
						|
                              The input string is copied.
 | 
						|
  @param [in]  ParentNode     If provided, set ParentNode as the parent
 | 
						|
                              of the node created.
 | 
						|
  @param [out] NewObjectNode  If success, contains the created node.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             Success.
 | 
						|
  @retval EFI_INVALID_PARAMETER   Invalid parameter.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES    Failed to allocate memory.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
AmlCodeGenThermalZone (
 | 
						|
  IN  CONST CHAR8                   *NameString,
 | 
						|
  IN        AML_NODE_HANDLE         ParentNode      OPTIONAL,
 | 
						|
  OUT       AML_OBJECT_NODE_HANDLE  *NewObjectNode   OPTIONAL
 | 
						|
  );
 | 
						|
 | 
						|
/** AML code generation for a Scope object node.
 | 
						|
 | 
						|
  AmlCodeGenScope ("_SB", ParentNode, NewObjectNode) is
 | 
						|
  equivalent of the following ASL code:
 | 
						|
    Scope(_SB) {}
 | 
						|
 | 
						|
  @ingroup CodeGenApis
 | 
						|
 | 
						|
  @param  [in] NameString     The new Scope's name.
 | 
						|
                              Must be a NULL-terminated ASL NameString
 | 
						|
                              e.g.: "DEV0", "DV15.DEV0", etc.
 | 
						|
                              The input string is copied.
 | 
						|
  @param [in]  ParentNode     If provided, set ParentNode as the parent
 | 
						|
                              of the node created.
 | 
						|
  @param [out] NewObjectNode  If success, contains the created node.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             Success.
 | 
						|
  @retval EFI_INVALID_PARAMETER   Invalid parameter.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES    Failed to allocate memory.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
AmlCodeGenScope (
 | 
						|
  IN  CONST CHAR8                   *NameString,
 | 
						|
  IN        AML_NODE_HANDLE         ParentNode      OPTIONAL,
 | 
						|
  OUT       AML_OBJECT_NODE_HANDLE  *NewObjectNode   OPTIONAL
 | 
						|
  );
 | 
						|
 | 
						|
/** AML code generation for a method returning a NameString.
 | 
						|
 | 
						|
  AmlCodeGenMethodRetNameString (
 | 
						|
    "MET0", "_CRS", 1, TRUE, 3, ParentNode, NewObjectNode
 | 
						|
    );
 | 
						|
  is equivalent of the following ASL code:
 | 
						|
    Method(MET0, 1, Serialized, 3) {
 | 
						|
      Return (_CRS)
 | 
						|
    }
 | 
						|
 | 
						|
  The ASL parameters "ReturnType" and "ParameterTypes" are not asked
 | 
						|
  in this function. They are optional parameters in ASL.
 | 
						|
 | 
						|
  @ingroup CodeGenApis
 | 
						|
 | 
						|
  @param [in]  MethodNameString     The new Method's name.
 | 
						|
                                    Must be a NULL-terminated ASL NameString
 | 
						|
                                    e.g.: "MET0", "_SB.MET0", etc.
 | 
						|
                                    The input string is copied.
 | 
						|
  @param [in]  ReturnedNameString   The name of the object returned by the
 | 
						|
                                    method. Optional parameter, can be:
 | 
						|
                                     - NULL (ignored).
 | 
						|
                                     - A NULL-terminated ASL NameString.
 | 
						|
                                       e.g.: "MET0", "_SB.MET0", etc.
 | 
						|
                                       The input string is copied.
 | 
						|
  @param [in]  NumArgs              Number of arguments.
 | 
						|
                                    Must be 0 <= NumArgs <= 6.
 | 
						|
  @param [in]  IsSerialized         TRUE is equivalent to Serialized.
 | 
						|
                                    FALSE is equivalent to NotSerialized.
 | 
						|
                                    Default is NotSerialized in ASL spec.
 | 
						|
  @param [in]  SyncLevel            Synchronization level for the method.
 | 
						|
                                    Must be 0 <= SyncLevel <= 15.
 | 
						|
                                    Default is 0 in ASL.
 | 
						|
  @param [in]  ParentNode           If provided, set ParentNode as the parent
 | 
						|
                                    of the node created.
 | 
						|
  @param [out] NewObjectNode        If success, contains the created node.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             Success.
 | 
						|
  @retval EFI_INVALID_PARAMETER   Invalid parameter.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES    Failed to allocate memory.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
AmlCodeGenMethodRetNameString (
 | 
						|
  IN  CONST CHAR8                   *MethodNameString,
 | 
						|
  IN  CONST CHAR8                   *ReturnedNameString   OPTIONAL,
 | 
						|
  IN        UINT8                   NumArgs,
 | 
						|
  IN        BOOLEAN                 IsSerialized,
 | 
						|
  IN        UINT8                   SyncLevel,
 | 
						|
  IN        AML_NODE_HANDLE         ParentNode           OPTIONAL,
 | 
						|
  OUT       AML_OBJECT_NODE_HANDLE  *NewObjectNode        OPTIONAL
 | 
						|
  );
 | 
						|
 | 
						|
/** AML code generation for a method returning an Integer.
 | 
						|
 | 
						|
  AmlCodeGenMethodRetInteger (
 | 
						|
    "_CBA", 0, 1, TRUE, 3, ParentNode, NewObjectNode
 | 
						|
    );
 | 
						|
  is equivalent of the following ASL code:
 | 
						|
    Method(_CBA, 1, Serialized, 3) {
 | 
						|
      Return (0)
 | 
						|
    }
 | 
						|
 | 
						|
  The ASL parameters "ReturnType" and "ParameterTypes" are not asked
 | 
						|
  in this function. They are optional parameters in ASL.
 | 
						|
 | 
						|
  @param [in]  MethodNameString     The new Method's name.
 | 
						|
                                    Must be a NULL-terminated ASL NameString
 | 
						|
                                    e.g.: "MET0", "_SB.MET0", etc.
 | 
						|
                                    The input string is copied.
 | 
						|
  @param [in]  ReturnedInteger      The value of the integer returned by the
 | 
						|
                                    method.
 | 
						|
  @param [in]  NumArgs              Number of arguments.
 | 
						|
                                    Must be 0 <= NumArgs <= 6.
 | 
						|
  @param [in]  IsSerialized         TRUE is equivalent to Serialized.
 | 
						|
                                    FALSE is equivalent to NotSerialized.
 | 
						|
                                    Default is NotSerialized in ASL spec.
 | 
						|
  @param [in]  SyncLevel            Synchronization level for the method.
 | 
						|
                                    Must be 0 <= SyncLevel <= 15.
 | 
						|
                                    Default is 0 in ASL.
 | 
						|
  @param [in]  ParentNode           If provided, set ParentNode as the parent
 | 
						|
                                    of the node created.
 | 
						|
  @param [out] NewObjectNode        If success, contains the created node.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             Success.
 | 
						|
  @retval EFI_INVALID_PARAMETER   Invalid parameter.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES    Failed to allocate memory.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
AmlCodeGenMethodRetInteger (
 | 
						|
  IN  CONST CHAR8                   *MethodNameString,
 | 
						|
  IN        UINT64                  ReturnedInteger,
 | 
						|
  IN        UINT8                   NumArgs,
 | 
						|
  IN        BOOLEAN                 IsSerialized,
 | 
						|
  IN        UINT8                   SyncLevel,
 | 
						|
  IN        AML_NODE_HANDLE         ParentNode           OPTIONAL,
 | 
						|
  OUT       AML_OBJECT_NODE_HANDLE  *NewObjectNode        OPTIONAL
 | 
						|
  );
 | 
						|
 | 
						|
/** AML code generation for a method returning a NameString that takes an
 | 
						|
    integer argument.
 | 
						|
 | 
						|
  AmlCodeGenMethodRetNameStringIntegerArgument (
 | 
						|
    "MET0", "MET1", 1, TRUE, 3, 5, ParentNode, NewObjectNode
 | 
						|
    );
 | 
						|
  is equivalent of the following ASL code:
 | 
						|
    Method(MET0, 1, Serialized, 3) {
 | 
						|
      Return (MET1 (5))
 | 
						|
    }
 | 
						|
 | 
						|
  The ASL parameters "ReturnType" and "ParameterTypes" are not asked
 | 
						|
  in this function. They are optional parameters in ASL.
 | 
						|
 | 
						|
  @param [in]  MethodNameString     The new Method's name.
 | 
						|
                                    Must be a NULL-terminated ASL NameString
 | 
						|
                                    e.g.: "MET0", "_SB.MET0", etc.
 | 
						|
                                    The input string is copied.
 | 
						|
  @param [in]  ReturnedNameString   The name of the object returned by the
 | 
						|
                                    method. Optional parameter, can be:
 | 
						|
                                     - NULL (ignored).
 | 
						|
                                     - A NULL-terminated ASL NameString.
 | 
						|
                                       e.g.: "MET0", "_SB.MET0", etc.
 | 
						|
                                       The input string is copied.
 | 
						|
  @param [in]  NumArgs              Number of arguments.
 | 
						|
                                    Must be 0 <= NumArgs <= 6.
 | 
						|
  @param [in]  IsSerialized         TRUE is equivalent to Serialized.
 | 
						|
                                    FALSE is equivalent to NotSerialized.
 | 
						|
                                    Default is NotSerialized in ASL spec.
 | 
						|
  @param [in]  SyncLevel            Synchronization level for the method.
 | 
						|
                                    Must be 0 <= SyncLevel <= 15.
 | 
						|
                                    Default is 0 in ASL.
 | 
						|
  @param [in]  IntegerArgument      Argument to pass to the NameString.
 | 
						|
  @param [in]  ParentNode           If provided, set ParentNode as the parent
 | 
						|
                                    of the node created.
 | 
						|
  @param [out] NewObjectNode        If success, contains the created node.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             Success.
 | 
						|
  @retval EFI_INVALID_PARAMETER   Invalid parameter.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES    Failed to allocate memory.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
AmlCodeGenMethodRetNameStringIntegerArgument (
 | 
						|
  IN  CONST CHAR8                   *MethodNameString,
 | 
						|
  IN  CONST CHAR8                   *ReturnedNameString   OPTIONAL,
 | 
						|
  IN        UINT8                   NumArgs,
 | 
						|
  IN        BOOLEAN                 IsSerialized,
 | 
						|
  IN        UINT8                   SyncLevel,
 | 
						|
  IN        UINT64                  IntegerArgument,
 | 
						|
  IN        AML_NODE_HANDLE         ParentNode           OPTIONAL,
 | 
						|
  OUT       AML_OBJECT_NODE_HANDLE  *NewObjectNode        OPTIONAL
 | 
						|
  );
 | 
						|
 | 
						|
/** Create a _LPI name.
 | 
						|
 | 
						|
  AmlCreateLpiNode ("_LPI", 0, 1, ParentNode, &LpiNode) is
 | 
						|
  equivalent of the following ASL code:
 | 
						|
    Name (_LPI, Package (
 | 
						|
                  0,  // Revision
 | 
						|
                  1,  // LevelId
 | 
						|
                  0   // Count
 | 
						|
                  ))
 | 
						|
 | 
						|
  This function doesn't define any LPI state. As shown above, the count
 | 
						|
  of _LPI state is set to 0.
 | 
						|
  The AmlAddLpiState () function must be used to add LPI states.
 | 
						|
 | 
						|
  Cf ACPI 6.3 specification, s8.4.4 "Lower Power Idle States".
 | 
						|
 | 
						|
  @ingroup CodeGenApis
 | 
						|
 | 
						|
  @param [in]  LpiNameString  The new LPI 's object name.
 | 
						|
                              Must be a NULL-terminated ASL NameString
 | 
						|
                              e.g.: "_LPI", "DEV0.PLPI", etc.
 | 
						|
                              The input string is copied.
 | 
						|
  @param [in]  Revision       Revision number of the _LPI states.
 | 
						|
  @param [in]  LevelId        A platform defined number that identifies the
 | 
						|
                              level of hierarchy of the processor node to
 | 
						|
                              which the LPI states apply.
 | 
						|
  @param [in]  ParentNode     If provided, set ParentNode as the parent
 | 
						|
                              of the node created.
 | 
						|
  @param [out] NewLpiNode     If success, contains the created node.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             The function completed successfully.
 | 
						|
  @retval EFI_INVALID_PARAMETER   Invalid parameter.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES    Failed to allocate memory.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
AmlCreateLpiNode (
 | 
						|
  IN  CONST CHAR8                   *LpiNameString,
 | 
						|
  IN        UINT16                  Revision,
 | 
						|
  IN        UINT64                  LevelId,
 | 
						|
  IN        AML_NODE_HANDLE         ParentNode   OPTIONAL,
 | 
						|
  OUT       AML_OBJECT_NODE_HANDLE  *NewLpiNode   OPTIONAL
 | 
						|
  );
 | 
						|
 | 
						|
/** Add an _LPI state to a LPI node created using AmlCreateLpiNode ().
 | 
						|
 | 
						|
  AmlAddLpiState () increments the Count of LPI states in the LPI node by one,
 | 
						|
  and adds the following package:
 | 
						|
    Package() {
 | 
						|
      MinResidency,
 | 
						|
      WorstCaseWakeLatency,
 | 
						|
      Flags,
 | 
						|
      ArchFlags,
 | 
						|
      ResCntFreq,
 | 
						|
      EnableParentState,
 | 
						|
      (GenericRegisterDescriptor != NULL) ?           // Entry method. If a
 | 
						|
        ResourceTemplate(GenericRegisterDescriptor) : // Register is given,
 | 
						|
        Integer,                                      // use it. Use the
 | 
						|
                                                      // Integer otherwise.
 | 
						|
      ResourceTemplate() {                            // NULL Residency Counter
 | 
						|
        Register (SystemMemory, 0, 0, 0, 0)
 | 
						|
      },
 | 
						|
      ResourceTemplate() {                            // NULL Usage Counter
 | 
						|
        Register (SystemMemory, 0, 0, 0, 0)
 | 
						|
      },
 | 
						|
      ""                                              // NULL State Name
 | 
						|
    },
 | 
						|
 | 
						|
  Cf ACPI 6.3 specification, s8.4.4 "Lower Power Idle States".
 | 
						|
 | 
						|
  @ingroup CodeGenApis
 | 
						|
 | 
						|
  @param [in]  MinResidency               Minimum Residency.
 | 
						|
  @param [in]  WorstCaseWakeLatency       Worst case wake-up latency.
 | 
						|
  @param [in]  Flags                      Flags.
 | 
						|
  @param [in]  ArchFlags                  Architectural flags.
 | 
						|
  @param [in]  ResCntFreq                 Residency Counter Frequency.
 | 
						|
  @param [in]  EnableParentState          Enabled Parent State.
 | 
						|
  @param [in]  GenericRegisterDescriptor  Entry Method.
 | 
						|
                                          If not NULL, use this Register to
 | 
						|
                                          describe the entry method address.
 | 
						|
  @param [in]  Integer                    Entry Method.
 | 
						|
                                          If GenericRegisterDescriptor is NULL,
 | 
						|
                                          take this value.
 | 
						|
  @param [in]  ResidencyCounterRegister   If not NULL, use it to populate the
 | 
						|
                                          residency counter register.
 | 
						|
  @param [in]  UsageCounterRegister       If not NULL, use it to populate the
 | 
						|
                                          usage counter register.
 | 
						|
  @param [in]  StateName                  If not NULL, use it to populate the
 | 
						|
                                          state name.
 | 
						|
  @param [in]  LpiNode                    Lpi node created with the function
 | 
						|
                                          AmlCreateLpiNode to which the new LPI
 | 
						|
                                          state is appended.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             The function completed successfully.
 | 
						|
  @retval EFI_INVALID_PARAMETER   Invalid parameter.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES    Failed to allocate memory.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
AmlAddLpiState (
 | 
						|
  IN  UINT32                                  MinResidency,
 | 
						|
  IN  UINT32                                  WorstCaseWakeLatency,
 | 
						|
  IN  UINT32                                  Flags,
 | 
						|
  IN  UINT32                                  ArchFlags,
 | 
						|
  IN  UINT32                                  ResCntFreq,
 | 
						|
  IN  UINT32                                  EnableParentState,
 | 
						|
  IN  EFI_ACPI_6_3_GENERIC_ADDRESS_STRUCTURE  *GenericRegisterDescriptor   OPTIONAL,
 | 
						|
  IN  UINT64                                  Integer                     OPTIONAL,
 | 
						|
  IN  EFI_ACPI_6_3_GENERIC_ADDRESS_STRUCTURE  *ResidencyCounterRegister    OPTIONAL,
 | 
						|
  IN  EFI_ACPI_6_3_GENERIC_ADDRESS_STRUCTURE  *UsageCounterRegister        OPTIONAL,
 | 
						|
  IN  CHAR8                                   *StateName                   OPTIONAL,
 | 
						|
  IN  AML_OBJECT_NODE_HANDLE                  LpiNode
 | 
						|
  );
 | 
						|
 | 
						|
/** AML code generation for a _DSD device data object.
 | 
						|
 | 
						|
  AmlAddDeviceDataDescriptorPackage (Uuid, DsdNode, PackageNode) is
 | 
						|
  equivalent of the following ASL code:
 | 
						|
    ToUUID(Uuid),
 | 
						|
    Package () {}
 | 
						|
 | 
						|
  Cf ACPI 6.4 specification, s6.2.5 "_DSD (Device Specific Data)".
 | 
						|
 | 
						|
  _DSD (Device Specific Data) Implementation Guide
 | 
						|
  https://github.com/UEFI/DSD-Guide
 | 
						|
  Per s3. "'Well-Known _DSD UUIDs and Data Structure Formats'"
 | 
						|
  If creating a Device Properties data then UUID daffd814-6eba-4d8c-8a91-bc9bbf4aa301 should be used.
 | 
						|
 | 
						|
  @param [in]  Uuid           The Uuid of the descriptor to be created
 | 
						|
  @param [in]  DsdNode        Node of the DSD Package.
 | 
						|
  @param [out] PackageNode    If success, contains the created package node.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             Success.
 | 
						|
  @retval EFI_INVALID_PARAMETER   Invalid parameter.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES    Failed to allocate memory.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
AmlAddDeviceDataDescriptorPackage (
 | 
						|
  IN  CONST EFI_GUID                *Uuid,
 | 
						|
  IN        AML_OBJECT_NODE_HANDLE  DsdNode,
 | 
						|
  OUT       AML_OBJECT_NODE_HANDLE  *PackageNode
 | 
						|
  );
 | 
						|
 | 
						|
/** AML code generation to add a package with a name and value,
 | 
						|
    to a parent package.
 | 
						|
    This is useful to build the _DSD package but can be used in other cases.
 | 
						|
 | 
						|
  AmlAddNameIntegerPackage ("Name", Value, PackageNode) is
 | 
						|
  equivalent of the following ASL code:
 | 
						|
    Package (2) {"Name", Value}
 | 
						|
 | 
						|
  Cf ACPI 6.4 specification, s6.2.5 "_DSD (Device Specific Data)".
 | 
						|
 | 
						|
  @param [in]  Name           String to place in first entry of package
 | 
						|
  @param [in]  Value          Integer to place in second entry of package
 | 
						|
  @param [in]  PackageNode    Package to add new sub package to.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             Success.
 | 
						|
  @retval EFI_INVALID_PARAMETER   Invalid parameter.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES    Failed to allocate memory.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
AmlAddNameIntegerPackage (
 | 
						|
  IN CHAR8                   *Name,
 | 
						|
  IN UINT64                  Value,
 | 
						|
  IN AML_OBJECT_NODE_HANDLE  PackageNode
 | 
						|
  );
 | 
						|
 | 
						|
/** Create a _CPC node.
 | 
						|
 | 
						|
  Creates and optionally adds the following node
 | 
						|
   Name(_CPC, Package()
 | 
						|
   {
 | 
						|
    NumEntries,                              // Integer
 | 
						|
    Revision,                                // Integer
 | 
						|
    HighestPerformance,                      // Integer or Buffer (Resource Descriptor)
 | 
						|
    NominalPerformance,                      // Integer or Buffer (Resource Descriptor)
 | 
						|
    LowestNonlinearPerformance,              // Integer or Buffer (Resource Descriptor)
 | 
						|
    LowestPerformance,                       // Integer or Buffer (Resource Descriptor)
 | 
						|
    GuaranteedPerformanceRegister,           // Buffer (Resource Descriptor)
 | 
						|
    DesiredPerformanceRegister ,             // Buffer (Resource Descriptor)
 | 
						|
    MinimumPerformanceRegister ,             // Buffer (Resource Descriptor)
 | 
						|
    MaximumPerformanceRegister ,             // Buffer (Resource Descriptor)
 | 
						|
    PerformanceReductionToleranceRegister,   // Buffer (Resource Descriptor)
 | 
						|
    TimeWindowRegister,                      // Buffer (Resource Descriptor)
 | 
						|
    CounterWraparoundTime,                   // Integer or Buffer (Resource Descriptor)
 | 
						|
    ReferencePerformanceCounterRegister,     // Buffer (Resource Descriptor)
 | 
						|
    DeliveredPerformanceCounterRegister,     // Buffer (Resource Descriptor)
 | 
						|
    PerformanceLimitedRegister,              // Buffer (Resource Descriptor)
 | 
						|
    CPPCEnableRegister                       // Buffer (Resource Descriptor)
 | 
						|
    AutonomousSelectionEnable,               // Integer or Buffer (Resource Descriptor)
 | 
						|
    AutonomousActivityWindowRegister,        // Buffer (Resource Descriptor)
 | 
						|
    EnergyPerformancePreferenceRegister,     // Buffer (Resource Descriptor)
 | 
						|
    ReferencePerformance                     // Integer or Buffer (Resource Descriptor)
 | 
						|
    LowestFrequency,                         // Integer or Buffer (Resource Descriptor)
 | 
						|
    NominalFrequency                         // Integer or Buffer (Resource Descriptor)
 | 
						|
  })
 | 
						|
 | 
						|
  If resource buffer is NULL then integer will be used.
 | 
						|
 | 
						|
  Cf. ACPI 6.4, s8.4.7.1 _CPC (Continuous Performance Control)
 | 
						|
 | 
						|
  @ingroup CodeGenApis
 | 
						|
 | 
						|
  @param [in]  CpcInfo               CpcInfo object
 | 
						|
  @param [in]  ParentNode            If provided, set ParentNode as the parent
 | 
						|
                                     of the node created.
 | 
						|
  @param [out] NewCpcNode            If success and provided, contains the created node.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             The function completed successfully.
 | 
						|
  @retval EFI_INVALID_PARAMETER   Invalid parameter.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES    Failed to allocate memory.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
AmlCreateCpcNode (
 | 
						|
  IN  AML_CPC_INFO            *CpcInfo,
 | 
						|
  IN  AML_NODE_HANDLE         ParentNode   OPTIONAL,
 | 
						|
  OUT AML_OBJECT_NODE_HANDLE  *NewCpcNode   OPTIONAL
 | 
						|
  );
 | 
						|
 | 
						|
/** AML code generation to add a NameString to the package in a named node.
 | 
						|
 | 
						|
 | 
						|
  @param [in]  NameString     NameString to add
 | 
						|
  @param [in]  NamedNode      Node to add the string to the included package.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             Success.
 | 
						|
  @retval EFI_INVALID_PARAMETER   Invalid parameter.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES    Failed to allocate memory.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
AmlAddNameStringToNamedPackage (
 | 
						|
  IN CHAR8                   *NameString,
 | 
						|
  IN AML_OBJECT_NODE_HANDLE  NamedNode
 | 
						|
  );
 | 
						|
 | 
						|
/** Add an integer value to the named package node.
 | 
						|
 | 
						|
  AmlCodeGenNamePackage ("_CID", NULL, &PackageNode);
 | 
						|
  AmlGetEisaIdFromString ("PNP0A03", &EisaId);
 | 
						|
  AmlAddIntegerToNamedPackage (EisaId, NameNode);
 | 
						|
  AmlGetEisaIdFromString ("PNP0A08", &EisaId);
 | 
						|
  AmlAddIntegerToNamedPackage (EisaId, NameNode);
 | 
						|
 | 
						|
  equivalent of the following ASL code:
 | 
						|
  Name (_CID, Package (0x02)  // _CID: Compatible ID
 | 
						|
  {
 | 
						|
      EisaId ("PNP0A03"),
 | 
						|
      EisaId ("PNP0A08")
 | 
						|
  })
 | 
						|
 | 
						|
  The package is added at the tail of the list of the input package node
 | 
						|
  name:
 | 
						|
    Name ("NamePackageNode", Package () {
 | 
						|
      [Pre-existing package entries],
 | 
						|
      [Newly created integer entry]
 | 
						|
    })
 | 
						|
 | 
						|
 | 
						|
  @ingroup CodeGenApis
 | 
						|
 | 
						|
  @param [in]       Integer       Integer value that need to be added to package node.
 | 
						|
  @param [in, out]  NameNode      Package named node to add the object to.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             Success.
 | 
						|
  @retval EFI_INVALID_PARAMETER   Invalid parameter.
 | 
						|
  @retval Others                  Error occurred during the operation.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
AmlAddIntegerToNamedPackage (
 | 
						|
  IN        UINT32                  Integer,
 | 
						|
  IN  OUT   AML_OBJECT_NODE_HANDLE  NameNode
 | 
						|
  );
 | 
						|
 | 
						|
/** AML code generation to invoke/call another method.
 | 
						|
 | 
						|
  This method is a subset implementation of MethodInvocation
 | 
						|
  defined in the ACPI specification 6.5,
 | 
						|
  section 20.2.5 "Term Objects Encoding".
 | 
						|
  Added integer, string, ArgObj and LocalObj support.
 | 
						|
 | 
						|
  Example 1:
 | 
						|
    AmlCodeGenInvokeMethod ("MET0", 0, NULL, ParentNode);
 | 
						|
    is equivalent to the following ASL code:
 | 
						|
      MET0 ();
 | 
						|
 | 
						|
  Example 2:
 | 
						|
    AML_METHOD_PARAM  Param[4];
 | 
						|
    Param[0].Data.Integer = 0x100;
 | 
						|
    Param[0].Type = AmlMethodParamTypeInteger;
 | 
						|
    Param[1].Data.Buffer = "TEST";
 | 
						|
    Param[1].Type = AmlMethodParamTypeString;
 | 
						|
    Param[2].Data.Arg = 0;
 | 
						|
    Param[2].Type = AmlMethodParamTypeArg;
 | 
						|
    Param[3].Data.Local = 2;
 | 
						|
    Param[3].Type = AmlMethodParamTypeLocal;
 | 
						|
    AmlCodeGenInvokeMethod ("MET0", 4, Param, ParentNode);
 | 
						|
 | 
						|
    is equivalent to the following ASL code:
 | 
						|
      MET0 (0x100, "TEST", Arg0, Local2);
 | 
						|
 | 
						|
  Example 3:
 | 
						|
    AML_METHOD_PARAM  Param[2];
 | 
						|
    Param[0].Data.Arg = 0;
 | 
						|
    Param[0].Type = AmlMethodParamTypeArg;
 | 
						|
    Param[1].Data.Integer = 0x100;
 | 
						|
    Param[1].Type = AmlMethodParamTypeInteger;
 | 
						|
    AmlCodeGenMethodRetNameString ("MET2", NULL, 2, TRUE, 0, ParentNode, &MethodNode);
 | 
						|
    AmlCodeGenInvokeMethod ("MET3", 2, Param, MethodNode);
 | 
						|
 | 
						|
    is equivalent to the following ASL code:
 | 
						|
    Method (MET2, 2, Serialized)
 | 
						|
    {
 | 
						|
      MET3 (Arg0, 0x0100)
 | 
						|
    }
 | 
						|
 | 
						|
  @param [in] MethodNameString  The method name to be called or invoked.
 | 
						|
  @param [in] NumArgs           Number of arguments to be passed,
 | 
						|
                                0 to 7 are permissible values.
 | 
						|
  @param [in] Parameters        Contains the parameter data.
 | 
						|
  @param [in] ParentNode        The parent node to which the method invocation
 | 
						|
                                nodes are attached.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             Success.
 | 
						|
  @retval EFI_INVALID_PARAMETER   Invalid parameter.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES    Failed to allocate memory.
 | 
						|
 **/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
AmlCodeGenInvokeMethod (
 | 
						|
  IN  CONST CHAR8             *MethodNameString,
 | 
						|
  IN        UINT8             NumArgs,
 | 
						|
  IN        AML_METHOD_PARAM  *Parameters   OPTIONAL,
 | 
						|
  IN        AML_NODE_HANDLE   ParentNode
 | 
						|
  );
 | 
						|
 | 
						|
/** Create a _PSD node.
 | 
						|
 | 
						|
  Creates and optionally adds the following node
 | 
						|
   Name(_PSD, Package()
 | 
						|
   {
 | 
						|
    NumEntries,  // Integer
 | 
						|
    Revision,    // Integer
 | 
						|
    Domain,      // Integer
 | 
						|
    CoordType,   // Integer
 | 
						|
    NumProc,     // Integer
 | 
						|
  })
 | 
						|
 | 
						|
  Cf. ACPI 6.5, s8.4.5.5 _PSD (P-State Dependency)
 | 
						|
 | 
						|
  @ingroup CodeGenApis
 | 
						|
 | 
						|
  @param [in]  PsdInfo      PsdInfo object
 | 
						|
  @param [in]  ParentNode   If provided, set ParentNode as the parent
 | 
						|
                            of the node created.
 | 
						|
  @param [out] NewPsdNode   If success and provided, contains the created node.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             The function completed successfully.
 | 
						|
  @retval EFI_INVALID_PARAMETER   Invalid parameter.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES    Failed to allocate memory.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
AmlCreatePsdNode (
 | 
						|
  IN  AML_PSD_INFO            *PsdInfo,
 | 
						|
  IN  AML_NODE_HANDLE         ParentNode    OPTIONAL,
 | 
						|
  OUT AML_OBJECT_NODE_HANDLE  *NewPsdNode   OPTIONAL
 | 
						|
  );
 | 
						|
 | 
						|
#endif // AML_LIB_H_
 |