From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by mx.groups.io with SMTP id smtpd.web08.9228.1632988137399396500 for ; Thu, 30 Sep 2021 00:48:57 -0700 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: arm.com, ip: 217.140.110.172, mailfrom: pierre.gondois@arm.com) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id F1A57D6E; Thu, 30 Sep 2021 00:48:56 -0700 (PDT) Received: from e120189.home (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id B558B3F70D; Thu, 30 Sep 2021 00:48:55 -0700 (PDT) From: "PierreGondois" To: devel@edk2.groups.io, Sami Mujawar , Alexei.Fedorov@arm.com, Joey Gouly Subject: [PATCH v2 09/10] DynamicTablesPkg: Deprecate Crs specific methods in AmlLib Date: Thu, 30 Sep 2021 08:48:20 +0100 Message-Id: <20210930074821.12546-10-Pierre.Gondois@arm.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210930074821.12546-1-Pierre.Gondois@arm.com> References: <20210930074821.12546-1-Pierre.Gondois@arm.com> From: Pierre Gondois 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 Signed-off-by: Pierre Gondois --- 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.
+ Copyright (c) 2019 - 2021, Arm Limited. All rights reserved.
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.
+ Copyright (c) 2020 - 2021, Arm Limited. All rights reserved.
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.
+ Copyright (c) 2020 - 2021, Arm Limited. All rights reserved.
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