mirror of
				https://github.com/acidanthera/audk.git
				synced 2025-11-03 21:17:23 +01:00 
			
		
		
		
	DynamicTablesPkg: Deprecate Crs specific methods in AmlLib
Some functions in the AmlLib have 'Crs' in their name and can only be applied to '_CRS' AML objects. To re-use them on AML objects that have different names: - Rename them and remove the '_CRS' name check. - Create aliases having of the 'Crs' function prototypes. These aliases are available when DISABLE_NEW_DEPRECATED_INTERFACES is not defined. They will be deprecated in a near future. The deprecated functions are: - AmlNameOpCrsGetFirstRdNode() - AmlNameOpCrsGetNextRdNode() - AmlCodeGenCrsAddRdInterrupt() Reviewed-by: Sami Mujawar <sami.mujawar@arm.com> Signed-off-by: Pierre Gondois <Pierre.Gondois@arm.com>
This commit is contained in:
		
							parent
							
								
									7a8c037e9e
								
							
						
					
					
						commit
						691c5f7762
					
				@ -1,7 +1,7 @@
 | 
			
		||||
/** @file
 | 
			
		||||
  AML Lib.
 | 
			
		||||
 | 
			
		||||
  Copyright (c) 2019 - 2020, Arm Limited. All rights reserved.<BR>
 | 
			
		||||
  Copyright (c) 2019 - 2021, Arm Limited. All rights reserved.<BR>
 | 
			
		||||
 | 
			
		||||
  SPDX-License-Identifier: BSD-2-Clause-Patent
 | 
			
		||||
**/
 | 
			
		||||
@ -301,7 +301,7 @@ AmlNameOpUpdateString (
 | 
			
		||||
  IN  CONST CHAR8                   * NewName
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
/** Get the first Resource Data element contained in a "_CRS" object.
 | 
			
		||||
/** 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.
 | 
			
		||||
@ -312,27 +312,26 @@ AmlNameOpUpdateString (
 | 
			
		||||
  )
 | 
			
		||||
 | 
			
		||||
  Note:
 | 
			
		||||
   - The "_CRS" object must be declared using ASL "Name (Declare Named Object)".
 | 
			
		||||
   - "_CRS" declared using ASL "Method (Declare Control Method)" is not
 | 
			
		||||
     supported.
 | 
			
		||||
  "_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] NameOpCrsNode  NameOp object node defining a "_CRS" 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 "_CRS" object. A Resource Data element
 | 
			
		||||
                              is stored in a data node.
 | 
			
		||||
  @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
 | 
			
		||||
AmlNameOpCrsGetFirstRdNode (
 | 
			
		||||
  IN  AML_OBJECT_NODE_HANDLE   NameOpCrsNode,
 | 
			
		||||
AmlNameOpGetFirstRdNode (
 | 
			
		||||
  IN  AML_OBJECT_NODE_HANDLE   NameOpNode,
 | 
			
		||||
  OUT AML_DATA_NODE_HANDLE   * OutRdNode
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
@ -347,13 +346,14 @@ AmlNameOpCrsGetFirstRdNode (
 | 
			
		||||
    }
 | 
			
		||||
  )
 | 
			
		||||
 | 
			
		||||
  The CurrRdNode Resource Data node must be defined in an object named "_CRS"
 | 
			
		||||
  and defined by a "Name ()" ASL function.
 | 
			
		||||
  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 "_CRS" variable.
 | 
			
		||||
                             the named object.
 | 
			
		||||
  @param  [out] OutRdNode    Pointer to the Resource Data element following
 | 
			
		||||
                             the CurrRdNode.
 | 
			
		||||
                             Contain a NULL pointer if CurrRdNode is the
 | 
			
		||||
@ -366,7 +366,7 @@ AmlNameOpCrsGetFirstRdNode (
 | 
			
		||||
**/
 | 
			
		||||
EFI_STATUS
 | 
			
		||||
EFIAPI
 | 
			
		||||
AmlNameOpCrsGetNextRdNode (
 | 
			
		||||
AmlNameOpGetNextRdNode (
 | 
			
		||||
  IN  AML_DATA_NODE_HANDLE    CurrRdNode,
 | 
			
		||||
  OUT AML_DATA_NODE_HANDLE  * OutRdNode
 | 
			
		||||
  );
 | 
			
		||||
@ -423,7 +423,7 @@ AmlUpdateRdQWord (
 | 
			
		||||
  This function creates a Resource Data element corresponding to the
 | 
			
		||||
  "Interrupt ()" ASL function, stores it in an AML Data Node.
 | 
			
		||||
 | 
			
		||||
  It then adds it after the input CurrRdNode in the list of resource data
 | 
			
		||||
  It then adds it after the input NameOpNode in the list of resource data
 | 
			
		||||
  element.
 | 
			
		||||
 | 
			
		||||
  The Resource Data effectively created is an Extended Interrupt Resource
 | 
			
		||||
@ -437,14 +437,9 @@ AmlUpdateRdQWord (
 | 
			
		||||
   - attach this node to an AML tree;
 | 
			
		||||
   - delete this node.
 | 
			
		||||
 | 
			
		||||
  Note: The _CRS node must be defined using the ASL Name () function.
 | 
			
		||||
        e.g. Name (_CRS, ResourceTemplate () {
 | 
			
		||||
               ...
 | 
			
		||||
             }
 | 
			
		||||
  @ingroup CodeGenApis
 | 
			
		||||
 | 
			
		||||
  @ingroup UserApis
 | 
			
		||||
 | 
			
		||||
  @param  [in]  NameOpCrsNode    NameOp object node defining a "_CRS" object.
 | 
			
		||||
  @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.
 | 
			
		||||
@ -465,8 +460,8 @@ AmlUpdateRdQWord (
 | 
			
		||||
**/
 | 
			
		||||
EFI_STATUS
 | 
			
		||||
EFIAPI
 | 
			
		||||
AmlCodeGenCrsAddRdInterrupt (
 | 
			
		||||
  IN  AML_OBJECT_NODE_HANDLE  NameOpCrsNode,
 | 
			
		||||
AmlCodeGenAddRdInterrupt (
 | 
			
		||||
  IN  AML_OBJECT_NODE_HANDLE  NameOpNode,
 | 
			
		||||
  IN  BOOLEAN                 ResourceConsumer,
 | 
			
		||||
  IN  BOOLEAN                 EdgeTriggered,
 | 
			
		||||
  IN  BOOLEAN                 ActiveLow,
 | 
			
		||||
@ -628,4 +623,142 @@ AmlCodeGenScope (
 | 
			
		||||
  OUT       AML_OBJECT_NODE_HANDLE  * NewObjectNode   OPTIONAL
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
// DEPRECATED APIS
 | 
			
		||||
#ifndef DISABLE_NEW_DEPRECATED_INTERFACES
 | 
			
		||||
 | 
			
		||||
/** DEPRECATED API
 | 
			
		||||
 | 
			
		||||
  Get the first Resource Data element contained in a "_CRS" 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:
 | 
			
		||||
   - The "_CRS" object must be declared using ASL "Name (Declare Named Object)".
 | 
			
		||||
   - "_CRS" declared using ASL "Method (Declare Control Method)" is not
 | 
			
		||||
     supported.
 | 
			
		||||
 | 
			
		||||
  @ingroup UserApis
 | 
			
		||||
 | 
			
		||||
  @param  [in] NameOpCrsNode  NameOp object node defining a "_CRS" 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 "_CRS" 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
 | 
			
		||||
AmlNameOpCrsGetFirstRdNode (
 | 
			
		||||
  IN  AML_OBJECT_NODE_HANDLE   NameOpCrsNode,
 | 
			
		||||
  OUT AML_DATA_NODE_HANDLE   * OutRdNode
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
/** DEPRECATED API
 | 
			
		||||
 | 
			
		||||
  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 (...) {...}
 | 
			
		||||
    }
 | 
			
		||||
  )
 | 
			
		||||
 | 
			
		||||
  The CurrRdNode Resource Data node must be defined in an object named "_CRS"
 | 
			
		||||
  and defined by a "Name ()" ASL function.
 | 
			
		||||
 | 
			
		||||
  @ingroup UserApis
 | 
			
		||||
 | 
			
		||||
  @param  [in]  CurrRdNode   Pointer to the current Resource Data element of
 | 
			
		||||
                             the "_CRS" variable.
 | 
			
		||||
  @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
 | 
			
		||||
AmlNameOpCrsGetNextRdNode (
 | 
			
		||||
  IN  AML_DATA_NODE_HANDLE    CurrRdNode,
 | 
			
		||||
  OUT AML_DATA_NODE_HANDLE  * OutRdNode
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
/** DEPRECATED API
 | 
			
		||||
 | 
			
		||||
  Add an Interrupt Resource Data node.
 | 
			
		||||
 | 
			
		||||
  This function creates a Resource Data element corresponding to the
 | 
			
		||||
  "Interrupt ()" ASL function, stores it in an AML Data Node.
 | 
			
		||||
 | 
			
		||||
  It then adds it after the input CurrRdNode in the list of resource data
 | 
			
		||||
  element.
 | 
			
		||||
 | 
			
		||||
  The Resource Data effectively created 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.
 | 
			
		||||
 | 
			
		||||
  The Extended Interrupt contains one single interrupt.
 | 
			
		||||
 | 
			
		||||
  This function allocates memory to create a data node. It is the caller's
 | 
			
		||||
  responsibility to either:
 | 
			
		||||
   - attach this node to an AML tree;
 | 
			
		||||
   - delete this node.
 | 
			
		||||
 | 
			
		||||
  Note: The _CRS node must be defined using the ASL Name () function.
 | 
			
		||||
        e.g. Name (_CRS, ResourceTemplate () {
 | 
			
		||||
               ...
 | 
			
		||||
             }
 | 
			
		||||
 | 
			
		||||
  @ingroup CodeGenApis
 | 
			
		||||
 | 
			
		||||
  @param  [in]  NameOpCrsNode    NameOp object node defining a "_CRS" object.
 | 
			
		||||
                                 Must have an OpCode=AML_NAME_OP, SubOpCode=0.
 | 
			
		||||
                                 NameOp object nodes are defined in ASL
 | 
			
		||||
                                 using the "Name ()" function.
 | 
			
		||||
  @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.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  @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
 | 
			
		||||
AmlCodeGenCrsAddRdInterrupt (
 | 
			
		||||
  IN  AML_OBJECT_NODE_HANDLE  NameOpCrsNode,
 | 
			
		||||
  IN  BOOLEAN                 ResourceConsumer,
 | 
			
		||||
  IN  BOOLEAN                 EdgeTriggered,
 | 
			
		||||
  IN  BOOLEAN                 ActiveLow,
 | 
			
		||||
  IN  BOOLEAN                 Shared,
 | 
			
		||||
  IN  UINT32                * IrqList,
 | 
			
		||||
  IN  UINT8                   IrqCount
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
#endif // DISABLE_NEW_DEPRECATED_INTERFACES
 | 
			
		||||
 | 
			
		||||
#endif // AML_LIB_H_
 | 
			
		||||
 | 
			
		||||
@ -286,7 +286,7 @@ FixupCmn600Info (
 | 
			
		||||
 | 
			
		||||
  // Get the first Rd node in the "_CRS" object.
 | 
			
		||||
  // This is the PERIPHBASE node.
 | 
			
		||||
  Status = AmlNameOpCrsGetFirstRdNode (NameOpCrsNode, &CmnPeriphBaseRdNode);
 | 
			
		||||
  Status = AmlNameOpGetFirstRdNode (NameOpCrsNode, &CmnPeriphBaseRdNode);
 | 
			
		||||
  if (EFI_ERROR (Status)) {
 | 
			
		||||
    goto error_handler;
 | 
			
		||||
  }
 | 
			
		||||
@ -309,7 +309,7 @@ FixupCmn600Info (
 | 
			
		||||
  // Get the QWord node corresponding to the ROOTNODEBASE.
 | 
			
		||||
  // It is the second Resource Data element in the BufferNode's
 | 
			
		||||
  // variable list of arguments.
 | 
			
		||||
  Status = AmlNameOpCrsGetNextRdNode (
 | 
			
		||||
  Status = AmlNameOpGetNextRdNode (
 | 
			
		||||
             CmnPeriphBaseRdNode,
 | 
			
		||||
             &CmnRootNodeBaseRdNode
 | 
			
		||||
             );
 | 
			
		||||
@ -338,7 +338,7 @@ FixupCmn600Info (
 | 
			
		||||
  // Resource Data nodes.
 | 
			
		||||
  for (Index = 0; Index < Cmn600Info->DtcCount; Index++) {
 | 
			
		||||
    DtcInt = &Cmn600Info->DtcInterrupt[Index];
 | 
			
		||||
    Status = AmlCodeGenCrsAddRdInterrupt (
 | 
			
		||||
    Status = AmlCodeGenAddRdInterrupt (
 | 
			
		||||
               NameOpCrsNode,
 | 
			
		||||
               ((DtcInt->Flags &
 | 
			
		||||
                 EFI_ACPI_EXTENDED_INTERRUPT_FLAG_PRODUCER_CONSUMER_MASK) != 0),
 | 
			
		||||
 | 
			
		||||
@ -1,7 +1,7 @@
 | 
			
		||||
/** @file
 | 
			
		||||
  AML Api.
 | 
			
		||||
 | 
			
		||||
  Copyright (c) 2020, Arm Limited. All rights reserved.<BR>
 | 
			
		||||
  Copyright (c) 2020 - 2021, Arm Limited. All rights reserved.<BR>
 | 
			
		||||
 | 
			
		||||
  SPDX-License-Identifier: BSD-2-Clause-Patent
 | 
			
		||||
**/
 | 
			
		||||
@ -222,7 +222,7 @@ AmlNameOpUpdateString (
 | 
			
		||||
  return Status;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Get the first Resource Data element contained in a "_CRS" object.
 | 
			
		||||
/** 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.
 | 
			
		||||
@ -233,35 +233,33 @@ AmlNameOpUpdateString (
 | 
			
		||||
  )
 | 
			
		||||
 | 
			
		||||
  Note:
 | 
			
		||||
   - The "_CRS" object must be declared using ASL "Name (Declare Named Object)".
 | 
			
		||||
   - "_CRS" declared using ASL "Method (Declare Control Method)" is not
 | 
			
		||||
     supported.
 | 
			
		||||
  "_CRS" names defined as methods are not handled by this function.
 | 
			
		||||
  They must be defined as names, using the "Name ()" statement.
 | 
			
		||||
 | 
			
		||||
  @param  [in] NameOpCrsNode  NameOp object node defining a "_CRS" 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 "_CRS" object. A Resource Data element
 | 
			
		||||
                              is stored in a data node.
 | 
			
		||||
  @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
 | 
			
		||||
AmlNameOpCrsGetFirstRdNode (
 | 
			
		||||
  IN  AML_OBJECT_NODE_HANDLE   NameOpCrsNode,
 | 
			
		||||
AmlNameOpGetFirstRdNode (
 | 
			
		||||
  IN  AML_OBJECT_NODE_HANDLE   NameOpNode,
 | 
			
		||||
  OUT AML_DATA_NODE_HANDLE   * OutRdNode
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  AML_OBJECT_NODE_HANDLE  BufferOpNode;
 | 
			
		||||
  AML_DATA_NODE_HANDLE    FirstRdNode;
 | 
			
		||||
 | 
			
		||||
  if ((NameOpCrsNode == NULL)                                              ||
 | 
			
		||||
      (AmlGetNodeType ((AML_NODE_HANDLE)NameOpCrsNode) != EAmlNodeObject)  ||
 | 
			
		||||
      (!AmlNodeHasOpCode (NameOpCrsNode, AML_NAME_OP, 0))                  ||
 | 
			
		||||
      (!AmlNameOpCompareName (NameOpCrsNode, "_CRS"))                      ||
 | 
			
		||||
  if ((NameOpNode == NULL)                                              ||
 | 
			
		||||
      (AmlGetNodeType ((AML_NODE_HANDLE)NameOpNode) != EAmlNodeObject)  ||
 | 
			
		||||
      (!AmlNodeHasOpCode (NameOpNode, AML_NAME_OP, 0))                  ||
 | 
			
		||||
      (OutRdNode == NULL)) {
 | 
			
		||||
    ASSERT (0);
 | 
			
		||||
    return EFI_INVALID_PARAMETER;
 | 
			
		||||
@ -269,10 +267,10 @@ AmlNameOpCrsGetFirstRdNode (
 | 
			
		||||
 | 
			
		||||
  *OutRdNode = NULL;
 | 
			
		||||
 | 
			
		||||
  // Get the _CRS value which is represented as a BufferOp object node
 | 
			
		||||
  // which is the 2nd fixed argument (i.e. index 1).
 | 
			
		||||
  // Get the value of the variable which is represented as a BufferOp object
 | 
			
		||||
  // node which is the 2nd fixed argument (i.e. index 1).
 | 
			
		||||
  BufferOpNode = (AML_OBJECT_NODE_HANDLE)AmlGetFixedArgument (
 | 
			
		||||
                                           NameOpCrsNode,
 | 
			
		||||
                                           NameOpNode,
 | 
			
		||||
                                           EAmlParseIndexTerm1
 | 
			
		||||
                                           );
 | 
			
		||||
  if ((BufferOpNode == NULL)                                             ||
 | 
			
		||||
@ -310,11 +308,12 @@ AmlNameOpCrsGetFirstRdNode (
 | 
			
		||||
    }
 | 
			
		||||
  )
 | 
			
		||||
 | 
			
		||||
  The CurrRdNode Resource Data node must be defined in an object named "_CRS"
 | 
			
		||||
  and defined by a "Name ()" ASL function.
 | 
			
		||||
  Note:
 | 
			
		||||
  "_CRS" names defined as methods are not handled by this function.
 | 
			
		||||
  They must be defined as names, using the "Name ()" statement.
 | 
			
		||||
 | 
			
		||||
  @param  [in]  CurrRdNode   Pointer to the current Resource Data element of
 | 
			
		||||
                             the "_CRS" object.
 | 
			
		||||
                             the named object.
 | 
			
		||||
  @param  [out] OutRdNode    Pointer to the Resource Data element following
 | 
			
		||||
                             the CurrRdNode.
 | 
			
		||||
                             Contain a NULL pointer if CurrRdNode is the
 | 
			
		||||
@ -327,12 +326,12 @@ AmlNameOpCrsGetFirstRdNode (
 | 
			
		||||
**/
 | 
			
		||||
EFI_STATUS
 | 
			
		||||
EFIAPI
 | 
			
		||||
AmlNameOpCrsGetNextRdNode (
 | 
			
		||||
AmlNameOpGetNextRdNode (
 | 
			
		||||
  IN  AML_DATA_NODE_HANDLE    CurrRdNode,
 | 
			
		||||
  OUT AML_DATA_NODE_HANDLE  * OutRdNode
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  AML_OBJECT_NODE_HANDLE     NameOpCrsNode;
 | 
			
		||||
  AML_OBJECT_NODE_HANDLE     NameOpNode;
 | 
			
		||||
  AML_OBJECT_NODE_HANDLE     BufferOpNode;
 | 
			
		||||
 | 
			
		||||
  if ((CurrRdNode == NULL)                                              ||
 | 
			
		||||
@ -356,12 +355,11 @@ AmlNameOpCrsGetNextRdNode (
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // The parent of the BufferOpNode must be a NameOp node.
 | 
			
		||||
  NameOpCrsNode = (AML_OBJECT_NODE_HANDLE)AmlGetParent (
 | 
			
		||||
                                            (AML_NODE_HANDLE)BufferOpNode
 | 
			
		||||
                                            );
 | 
			
		||||
  if ((NameOpCrsNode == NULL)                             ||
 | 
			
		||||
      (!AmlNodeHasOpCode (NameOpCrsNode, AML_NAME_OP, 0)) ||
 | 
			
		||||
      (!AmlNameOpCompareName (NameOpCrsNode, "_CRS"))) {
 | 
			
		||||
  NameOpNode = (AML_OBJECT_NODE_HANDLE)AmlGetParent (
 | 
			
		||||
                                         (AML_NODE_HANDLE)BufferOpNode
 | 
			
		||||
                                         );
 | 
			
		||||
  if ((NameOpNode == NULL)  ||
 | 
			
		||||
      (!AmlNodeHasOpCode (NameOpNode, AML_NAME_OP, 0))) {
 | 
			
		||||
    ASSERT (0);
 | 
			
		||||
    return EFI_INVALID_PARAMETER;
 | 
			
		||||
  }
 | 
			
		||||
@ -380,3 +378,88 @@ AmlNameOpCrsGetNextRdNode (
 | 
			
		||||
 | 
			
		||||
  return EFI_SUCCESS;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// DEPRECATED APIS
 | 
			
		||||
#ifndef DISABLE_NEW_DEPRECATED_INTERFACES
 | 
			
		||||
 | 
			
		||||
/** DEPRECATED API
 | 
			
		||||
 | 
			
		||||
  Get the first Resource Data element contained in a "_CRS" 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:
 | 
			
		||||
   - The "_CRS" object must be declared using ASL "Name (Declare Named Object)".
 | 
			
		||||
   - "_CRS" declared using ASL "Method (Declare Control Method)" is not
 | 
			
		||||
     supported.
 | 
			
		||||
 | 
			
		||||
  @ingroup UserApis
 | 
			
		||||
 | 
			
		||||
  @param  [in] NameOpCrsNode  NameOp object node defining a "_CRS" 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 "_CRS" 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
 | 
			
		||||
AmlNameOpCrsGetFirstRdNode (
 | 
			
		||||
  IN  AML_OBJECT_NODE_HANDLE   NameOpCrsNode,
 | 
			
		||||
  OUT AML_DATA_NODE_HANDLE   * OutRdNode
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  return AmlNameOpGetFirstRdNode (NameOpCrsNode, OutRdNode);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** DEPRECATED API
 | 
			
		||||
 | 
			
		||||
  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 (...) {...}
 | 
			
		||||
    }
 | 
			
		||||
  )
 | 
			
		||||
 | 
			
		||||
  The CurrRdNode Resource Data node must be defined in an object named "_CRS"
 | 
			
		||||
  and defined by a "Name ()" ASL function.
 | 
			
		||||
 | 
			
		||||
  @ingroup UserApis
 | 
			
		||||
 | 
			
		||||
  @param  [in]  CurrRdNode   Pointer to the current Resource Data element of
 | 
			
		||||
                             the "_CRS" variable.
 | 
			
		||||
  @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
 | 
			
		||||
AmlNameOpCrsGetNextRdNode (
 | 
			
		||||
  IN  AML_DATA_NODE_HANDLE    CurrRdNode,
 | 
			
		||||
  OUT AML_DATA_NODE_HANDLE  * OutRdNode
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  return AmlNameOpGetNextRdNode (CurrRdNode, OutRdNode);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif // DISABLE_NEW_DEPRECATED_INTERFACES
 | 
			
		||||
 | 
			
		||||
@ -1,7 +1,7 @@
 | 
			
		||||
/** @file
 | 
			
		||||
  AML Resource Data Code Generation.
 | 
			
		||||
 | 
			
		||||
  Copyright (c) 2020, Arm Limited. All rights reserved.<BR>
 | 
			
		||||
  Copyright (c) 2020 - 2021, Arm Limited. All rights reserved.<BR>
 | 
			
		||||
 | 
			
		||||
  SPDX-License-Identifier: BSD-2-Clause-Patent
 | 
			
		||||
 | 
			
		||||
@ -161,6 +161,109 @@ AmlCodeGenInterrupt (
 | 
			
		||||
  This function creates a Resource Data element corresponding to the
 | 
			
		||||
  "Interrupt ()" ASL function, stores it in an AML Data Node.
 | 
			
		||||
 | 
			
		||||
  It then adds it after the input NameOpNode in the list of resource data
 | 
			
		||||
  element.
 | 
			
		||||
 | 
			
		||||
  The Resource Data effectively created 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.
 | 
			
		||||
 | 
			
		||||
  The Extended Interrupt contains one single interrupt.
 | 
			
		||||
 | 
			
		||||
  This function allocates memory to create a data node. It is the caller's
 | 
			
		||||
  responsibility to either:
 | 
			
		||||
   - attach this node to an AML tree;
 | 
			
		||||
   - delete this node.
 | 
			
		||||
 | 
			
		||||
  Note:
 | 
			
		||||
  The named node must be defined using the ASL "Name ()" statement.
 | 
			
		||||
  E.g. Name (_CRS, ResourceTemplate () { ... })
 | 
			
		||||
  Methods cannot be modified with this function.
 | 
			
		||||
 | 
			
		||||
  @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  [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.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  @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
 | 
			
		||||
AmlCodeGenAddRdInterrupt (
 | 
			
		||||
  IN  AML_OBJECT_NODE_HANDLE  NameOpNode,
 | 
			
		||||
  IN  BOOLEAN                 ResourceConsumer,
 | 
			
		||||
  IN  BOOLEAN                 EdgeTriggered,
 | 
			
		||||
  IN  BOOLEAN                 ActiveLow,
 | 
			
		||||
  IN  BOOLEAN                 Shared,
 | 
			
		||||
  IN  UINT32                * IrqList,
 | 
			
		||||
  IN  UINT8                   IrqCount
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  EFI_STATUS              Status;
 | 
			
		||||
 | 
			
		||||
  AML_OBJECT_NODE_HANDLE  BufferOpNode;
 | 
			
		||||
 | 
			
		||||
  if ((IrqList == NULL)                                   ||
 | 
			
		||||
      (IrqCount == 0)                                     ||
 | 
			
		||||
      (!AmlNodeHasOpCode (NameOpNode, AML_NAME_OP, 0))) {
 | 
			
		||||
    ASSERT (0);
 | 
			
		||||
    return EFI_INVALID_PARAMETER;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // Get the value which is represented as a BufferOp object node
 | 
			
		||||
  // which is the 2nd fixed argument (i.e. index 1).
 | 
			
		||||
  BufferOpNode = (AML_OBJECT_NODE_HANDLE)AmlGetFixedArgument (
 | 
			
		||||
                                           NameOpNode,
 | 
			
		||||
                                           EAmlParseIndexTerm1
 | 
			
		||||
                                           );
 | 
			
		||||
  if ((BufferOpNode == NULL)                                             ||
 | 
			
		||||
      (AmlGetNodeType ((AML_NODE_HANDLE)BufferOpNode) != EAmlNodeObject) ||
 | 
			
		||||
      (!AmlNodeHasOpCode (BufferOpNode, AML_BUFFER_OP, 0))) {
 | 
			
		||||
    ASSERT (0);
 | 
			
		||||
    return EFI_INVALID_PARAMETER;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // Generate the Extended Interrupt Resource Data node,
 | 
			
		||||
  // and attach it as the last variable argument of the BufferOpNode.
 | 
			
		||||
  Status = AmlCodeGenInterrupt (
 | 
			
		||||
             ResourceConsumer,
 | 
			
		||||
             EdgeTriggered,
 | 
			
		||||
             ActiveLow,
 | 
			
		||||
             Shared,
 | 
			
		||||
             IrqList,
 | 
			
		||||
             IrqCount,
 | 
			
		||||
             BufferOpNode,
 | 
			
		||||
             NULL
 | 
			
		||||
             );
 | 
			
		||||
  if (EFI_ERROR (Status)) {
 | 
			
		||||
    ASSERT (0);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return Status;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// DEPRECATED APIS
 | 
			
		||||
#ifndef DISABLE_NEW_DEPRECATED_INTERFACES
 | 
			
		||||
 | 
			
		||||
/** DEPRECATED API
 | 
			
		||||
 | 
			
		||||
  Add an Interrupt Resource Data node.
 | 
			
		||||
 | 
			
		||||
  This function creates a Resource Data element corresponding to the
 | 
			
		||||
  "Interrupt ()" ASL function, stores it in an AML Data Node.
 | 
			
		||||
 | 
			
		||||
  It then adds it after the input CurrRdNode in the list of resource data
 | 
			
		||||
  element.
 | 
			
		||||
 | 
			
		||||
@ -180,6 +283,8 @@ AmlCodeGenInterrupt (
 | 
			
		||||
               ...
 | 
			
		||||
             }
 | 
			
		||||
 | 
			
		||||
  @ingroup UserApis
 | 
			
		||||
 | 
			
		||||
  @param  [in]  NameOpCrsNode    NameOp object node defining a "_CRS" object.
 | 
			
		||||
                                 Must have an OpCode=AML_NAME_OP, SubOpCode=0.
 | 
			
		||||
                                 NameOp object nodes are defined in ASL
 | 
			
		||||
@ -211,46 +316,16 @@ AmlCodeGenCrsAddRdInterrupt (
 | 
			
		||||
  IN  UINT8                   IrqCount
 | 
			
		||||
  )
 | 
			
		||||
{
 | 
			
		||||
  EFI_STATUS              Status;
 | 
			
		||||
 | 
			
		||||
  AML_OBJECT_NODE_HANDLE  BufferOpNode;
 | 
			
		||||
 | 
			
		||||
  if ((IrqList == NULL)                                                   ||
 | 
			
		||||
      (IrqCount == 0)                                                     ||
 | 
			
		||||
      (!AmlNodeHasOpCode (NameOpCrsNode, AML_NAME_OP, 0))                 ||
 | 
			
		||||
      (!AmlNameOpCompareName (NameOpCrsNode, "_CRS"))) {
 | 
			
		||||
    ASSERT (0);
 | 
			
		||||
    return EFI_INVALID_PARAMETER;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // Get the _CRS value which is represented as a BufferOp object node
 | 
			
		||||
  // which is the 2nd fixed argument (i.e. index 1).
 | 
			
		||||
  BufferOpNode = (AML_OBJECT_NODE_HANDLE)AmlGetFixedArgument (
 | 
			
		||||
                                           NameOpCrsNode,
 | 
			
		||||
                                           EAmlParseIndexTerm1
 | 
			
		||||
                                           );
 | 
			
		||||
  if ((BufferOpNode == NULL)                                             ||
 | 
			
		||||
      (AmlGetNodeType ((AML_NODE_HANDLE)BufferOpNode) != EAmlNodeObject) ||
 | 
			
		||||
      (!AmlNodeHasOpCode (BufferOpNode, AML_BUFFER_OP, 0))) {
 | 
			
		||||
    ASSERT (0);
 | 
			
		||||
    return EFI_INVALID_PARAMETER;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // Generate the Extended Interrupt Resource Data node,
 | 
			
		||||
  // and attach it as the last variable argument of the BufferOpNode.
 | 
			
		||||
  Status = AmlCodeGenInterrupt (
 | 
			
		||||
             ResourceConsumer,
 | 
			
		||||
             EdgeTriggered,
 | 
			
		||||
             ActiveLow,
 | 
			
		||||
             Shared,
 | 
			
		||||
             IrqList,
 | 
			
		||||
             IrqCount,
 | 
			
		||||
             BufferOpNode,
 | 
			
		||||
             NULL
 | 
			
		||||
             );
 | 
			
		||||
  if (EFI_ERROR (Status)) {
 | 
			
		||||
    ASSERT (0);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return Status;
 | 
			
		||||
  return AmlCodeGenAddRdInterrupt (
 | 
			
		||||
           NameOpCrsNode,
 | 
			
		||||
           NameOpNode,
 | 
			
		||||
           ResourceConsumer,
 | 
			
		||||
           EdgeTriggered,
 | 
			
		||||
           ActiveLow,
 | 
			
		||||
           Shared,
 | 
			
		||||
           IrqList,
 | 
			
		||||
           IrqCount
 | 
			
		||||
           );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif // DISABLE_NEW_DEPRECATED_INTERFACES
 | 
			
		||||
 | 
			
		||||
@ -275,7 +275,7 @@ FixupCrs (
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // Get the first Rd node in the "_CRS" object.
 | 
			
		||||
  Status = AmlNameOpCrsGetFirstRdNode (NameOpCrsNode, &QWordRdNode);
 | 
			
		||||
  Status = AmlNameOpGetFirstRdNode (NameOpCrsNode, &QWordRdNode);
 | 
			
		||||
  if (EFI_ERROR (Status)) {
 | 
			
		||||
    return Status;
 | 
			
		||||
  }
 | 
			
		||||
@ -298,7 +298,7 @@ FixupCrs (
 | 
			
		||||
  // Get the Interrupt node.
 | 
			
		||||
  // It is the second Resource Data element in the NameOpCrsNode's
 | 
			
		||||
  // variable list of arguments.
 | 
			
		||||
  Status = AmlNameOpCrsGetNextRdNode (QWordRdNode, &InterruptRdNode);
 | 
			
		||||
  Status = AmlNameOpGetNextRdNode (QWordRdNode, &InterruptRdNode);
 | 
			
		||||
  if (EFI_ERROR (Status)) {
 | 
			
		||||
    return Status;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user