From: "PierreGondois" <pierre.gondois@arm.com>
To: devel@edk2.groups.io, Sami Mujawar <sami.mujawar@arm.com>,
Alexei.Fedorov@arm.com, Joey Gouly <joey.gouly@arm.com>
Subject: [PATCH v2 09/10] DynamicTablesPkg: Deprecate Crs specific methods in AmlLib
Date: Thu, 30 Sep 2021 08:48:20 +0100 [thread overview]
Message-ID: <20210930074821.12546-10-Pierre.Gondois@arm.com> (raw)
In-Reply-To: <20210930074821.12546-1-Pierre.Gondois@arm.com>
From: Pierre Gondois <Pierre.Gondois@arm.com>
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>
---
Notes:
v2:
- List deprecated APIs in commit message. [Sami]
.../Include/Library/AmlLib/AmlLib.h | 189 +++++++++++++++---
.../SsdtCmn600Generator.c | 6 +-
.../Library/Common/AmlLib/Api/AmlApi.c | 147 +++++++++++---
.../AmlLib/CodeGen/AmlResourceDataCodeGen.c | 105 ++++++++--
.../SsdtSerialPortFixupLib.c | 4 +-
5 files changed, 371 insertions(+), 80 deletions(-)
diff --git a/DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h b/DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h
index 1dcb93861436..c40808343fce 100644
--- a/DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h
+++ b/DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h
@@ -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_
diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCmn600LibArm/SsdtCmn600Generator.c b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCmn600LibArm/SsdtCmn600Generator.c
index cc730cd90fea..fb93a5d2e70c 100644
--- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCmn600LibArm/SsdtCmn600Generator.c
+++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCmn600LibArm/SsdtCmn600Generator.c
@@ -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),
diff --git a/DynamicTablesPkg/Library/Common/AmlLib/Api/AmlApi.c b/DynamicTablesPkg/Library/Common/AmlLib/Api/AmlApi.c
index fdf04acc6212..6f9e3f6f2805 100644
--- a/DynamicTablesPkg/Library/Common/AmlLib/Api/AmlApi.c
+++ b/DynamicTablesPkg/Library/Common/AmlLib/Api/AmlApi.c
@@ -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
diff --git a/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlResourceDataCodeGen.c b/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlResourceDataCodeGen.c
index d40a27410dd6..c7348aa5daf7 100644
--- a/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlResourceDataCodeGen.c
+++ b/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlResourceDataCodeGen.c
@@ -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,7 +161,7 @@ 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 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
@@ -175,12 +175,12 @@ AmlCodeGenInterrupt (
- 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 () {
- ...
- }
+ 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] 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.
@@ -201,8 +201,8 @@ AmlCodeGenInterrupt (
**/
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,
@@ -215,18 +215,17 @@ AmlCodeGenCrsAddRdInterrupt (
AML_OBJECT_NODE_HANDLE BufferOpNode;
- if ((IrqList == NULL) ||
- (IrqCount == 0) ||
- (!AmlNodeHasOpCode (NameOpCrsNode, AML_NAME_OP, 0)) ||
- (!AmlNameOpCompareName (NameOpCrsNode, "_CRS"))) {
+ if ((IrqList == NULL) ||
+ (IrqCount == 0) ||
+ (!AmlNodeHasOpCode (NameOpNode, AML_NAME_OP, 0))) {
ASSERT (0);
return EFI_INVALID_PARAMETER;
}
- // Get the _CRS value which is represented as a BufferOp object node
+ // 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 (
- NameOpCrsNode,
+ NameOpNode,
EAmlParseIndexTerm1
);
if ((BufferOpNode == NULL) ||
@@ -254,3 +253,79 @@ AmlCodeGenCrsAddRdInterrupt (
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.
+
+ 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 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 [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
+ )
+{
+ return AmlCodeGenAddRdInterrupt (
+ NameOpCrsNode,
+ NameOpNode,
+ ResourceConsumer,
+ EdgeTriggered,
+ ActiveLow,
+ Shared,
+ IrqList,
+ IrqCount
+ );
+}
+
+#endif // DISABLE_NEW_DEPRECATED_INTERFACES
diff --git a/DynamicTablesPkg/Library/Common/SsdtSerialPortFixupLib/SsdtSerialPortFixupLib.c b/DynamicTablesPkg/Library/Common/SsdtSerialPortFixupLib/SsdtSerialPortFixupLib.c
index 8c77f172b795..6966410b2c34 100644
--- a/DynamicTablesPkg/Library/Common/SsdtSerialPortFixupLib/SsdtSerialPortFixupLib.c
+++ b/DynamicTablesPkg/Library/Common/SsdtSerialPortFixupLib/SsdtSerialPortFixupLib.c
@@ -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;
}
--
2.17.1
next prev parent reply other threads:[~2021-09-30 7:48 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-09-30 7:48 [PATCH v2 00/10] Various DynamicTablesPkg modifications PierreGondois
2021-09-30 7:48 ` [PATCH v2 01/10] DynamicTablesPkg: Extract AcpiHelperLib from TableHelperLib PierreGondois
2021-09-30 7:48 ` [PATCH v2 02/10] DynamicTablesPkg: Update TableHelperLib.inf PierreGondois
2021-09-30 7:48 ` [PATCH v2 03/10] DynamicTablesPkg: Rename single char input parameter PierreGondois
2021-09-30 7:48 ` [PATCH v2 04/10] DynamicTablesPkg: Add HexFromAscii() to AcpiHelperLib PierreGondois
2021-09-30 7:48 ` [PATCH v2 05/10] DynamicTablesPkg: Add AmlGetEisaIdFromString() " PierreGondois
2021-09-30 7:48 ` [PATCH v2 06/10] DynamicTablesPkg: Add Configuration Manager Object parser PierreGondois
2021-09-30 7:48 ` [PATCH v2 07/10] DynamicTablesPkg: Use %a formatter in AmlDbgPrint PierreGondois
2021-09-30 7:48 ` [PATCH v2 08/10] DynamicTablesPkg: Update DynamicTablesPkg.ci.yaml PierreGondois
2021-09-30 7:48 ` PierreGondois [this message]
2021-09-30 7:48 ` [PATCH v2 10/10] DynamicTablesPkg: Rework AmlResourceDataCodegen.c/h PierreGondois
2021-10-01 12:04 ` [PATCH v2 00/10] Various DynamicTablesPkg modifications Sami Mujawar
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210930074821.12546-10-Pierre.Gondois@arm.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox