From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=217.140.106.54; helo=cam-smtp0.cambridge.arm.com; envelope-from=sami.mujawar@arm.com; receiver=edk2-devel@lists.01.org Received: from cam-smtp0.cambridge.arm.com (unknown [217.140.106.54]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id A13E3211CCD59 for ; Thu, 21 Feb 2019 10:14:23 -0800 (PST) Received: from E107187.Arm.com (E107187.Arm.com [10.1.195.55]) by cam-smtp0.cambridge.arm.com (8.13.8/8.13.8) with ESMTP id x1LIEKAg030386; Thu, 21 Feb 2019 18:14:21 GMT From: Sami Mujawar To: edk2-devel@lists.01.org Cc: alexei.fedorov@arm.com, leif.lindholm@linaro.org, Matteo.Carlini@arm.com, Stephanie.Hughes-Fitt@arm.com, nd@arm.com Date: Thu, 21 Feb 2019 18:14:11 +0000 Message-Id: <20190221181414.83136-4-sami.mujawar@arm.com> X-Mailer: git-send-email 2.11.0.windows.3 In-Reply-To: <20190221181414.83136-1-sami.mujawar@arm.com> References: <20190221181414.83136-1-sami.mujawar@arm.com> Subject: [PATCH v1 3/6] DynamicTablesPkg: Add OEM Info X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 21 Feb 2019 18:14:25 -0000 X-List-Received-Date: Thu, 21 Feb 2019 18:14:25 -0000 X-List-Received-Date: Thu, 21 Feb 2019 18:14:25 -0000 X-List-Received-Date: Thu, 21 Feb 2019 18:14:25 -0000 X-List-Received-Date: Thu, 21 Feb 2019 18:14:25 -0000 X-List-Received-Date: Thu, 21 Feb 2019 18:14:25 -0000 X-List-Received-Date: Thu, 21 Feb 2019 18:14:25 -0000 X-List-Received-Date: Thu, 21 Feb 2019 18:14:25 -0000 X-List-Received-Date: Thu, 21 Feb 2019 18:14:25 -0000 X-List-Received-Date: Thu, 21 Feb 2019 18:14:25 -0000 X-List-Received-Date: Thu, 21 Feb 2019 18:14:25 -0000 X-List-Received-Date: Thu, 21 Feb 2019 18:14:25 -0000 X-List-Received-Date: Thu, 21 Feb 2019 18:14:25 -0000 X-List-Received-Date: Thu, 21 Feb 2019 18:14:25 -0000 X-List-Received-Date: Thu, 21 Feb 2019 18:14:25 -0000 X-List-Received-Date: Thu, 21 Feb 2019 18:14:25 -0000 X-List-Received-Date: Thu, 21 Feb 2019 18:14:25 -0000 X-List-Received-Date: Thu, 21 Feb 2019 18:14:25 -0000 X-List-Received-Date: Thu, 21 Feb 2019 18:14:25 -0000 X-List-Received-Date: Thu, 21 Feb 2019 18:14:25 -0000 X-List-Received-Date: Thu, 21 Feb 2019 18:14:25 -0000 X-List-Received-Date: Thu, 21 Feb 2019 18:14:25 -0000 X-List-Received-Date: Thu, 21 Feb 2019 18:14:25 -0000 X-List-Received-Date: Thu, 21 Feb 2019 18:14:25 -0000 X-List-Received-Date: Thu, 21 Feb 2019 18:14:25 -0000 X-List-Received-Date: Thu, 21 Feb 2019 18:14:25 -0000 X-List-Received-Date: Thu, 21 Feb 2019 18:14:25 -0000 X-List-Received-Date: Thu, 21 Feb 2019 18:14:25 -0000 X-List-Received-Date: Thu, 21 Feb 2019 18:14:25 -0000 X-List-Received-Date: Thu, 21 Feb 2019 18:14:25 -0000 X-List-Received-Date: Thu, 21 Feb 2019 18:14:25 -0000 X-List-Received-Date: Thu, 21 Feb 2019 18:14:25 -0000 X-List-Received-Date: Thu, 21 Feb 2019 18:14:25 -0000 X-List-Received-Date: Thu, 21 Feb 2019 18:14:25 -0000 X-List-Received-Date: Thu, 21 Feb 2019 18:14:25 -0000 X-List-Received-Date: Thu, 21 Feb 2019 18:14:25 -0000 Added option for OEMs to provide OEM Table ID and OEM Revision for ACPI tables. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Sami Mujawar --- DynamicTablesPkg/Include/Library/TableHelperLib.h | 4 +-- DynamicTablesPkg/Include/StandardNameSpaceObjects.h | 18 ++++++++++++++ DynamicTablesPkg/Library/Acpi/Arm/AcpiDbg2LibArm/Dbg2Generator.c | 2 +- DynamicTablesPkg/Library/Acpi/Arm/AcpiFadtLibArm/FadtGenerator.c | 2 +- DynamicTablesPkg/Library/Acpi/Arm/AcpiGtdtLibArm/GtdtGenerator.c | 2 +- DynamicTablesPkg/Library/Acpi/Arm/AcpiIortLibArm/IortGenerator.c | 2 +- DynamicTablesPkg/Library/Acpi/Arm/AcpiMadtLibArm/MadtGenerator.c | 2 +- DynamicTablesPkg/Library/Acpi/Arm/AcpiMcfgLibArm/McfgGenerator.c | 2 +- DynamicTablesPkg/Library/Acpi/Arm/AcpiSpcrLibArm/SpcrGenerator.c | 2 +- DynamicTablesPkg/Library/Common/TableHelperLib/TableHelper.c | 26 ++++++++++++++------ 10 files changed, 46 insertions(+), 16 deletions(-) diff --git a/DynamicTablesPkg/Include/Library/TableHelperLib.h b/DynamicTablesPkg/Include/Library/TableHelperLib.h index 3c4e1d23d2e6955388ab0b51fb57779f2225beb2..0f872bc3d08bf78e33bd8dab866e7bf57e00cb8c 100644 --- a/DynamicTablesPkg/Include/Library/TableHelperLib.h +++ b/DynamicTablesPkg/Include/Library/TableHelperLib.h @@ -45,7 +45,7 @@ GetCgfMgrInfo ( @param [in] Generator Pointer to the ACPI table Generator. @param [in,out] AcpiHeader Pointer to the ACPI table header to be updated. - @param [in] Revision Revision of the ACPI table. + @param [in] AcpiTableInfo Pointer to the ACPI table info structure. @param [in] Length Length of the ACPI table. @retval EFI_SUCCESS The ACPI table is updated successfully. @@ -61,7 +61,7 @@ AddAcpiHeader ( IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL * CONST CfgMgrProtocol, IN CONST ACPI_TABLE_GENERATOR * CONST Generator, IN OUT EFI_ACPI_DESCRIPTION_HEADER * CONST AcpiHeader, - IN CONST UINT32 Revision, + IN CONST CM_STD_OBJ_ACPI_TABLE_INFO * CONST AcpiTableInfo, IN CONST UINT32 Length ); diff --git a/DynamicTablesPkg/Include/StandardNameSpaceObjects.h b/DynamicTablesPkg/Include/StandardNameSpaceObjects.h index 4377ee8f785399b02fec824f3a34d2f4ed3b1c01..58503858b27141cf7647a410c4b0b3fa574033de 100644 --- a/DynamicTablesPkg/Include/StandardNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/StandardNameSpaceObjects.h @@ -93,6 +93,24 @@ typedef struct CmAStdObjAcpiTableInfo { /// Optional pointer to the ACPI table data EFI_ACPI_DESCRIPTION_HEADER * AcpiTableData; + /// An OEM-supplied string that the OEM uses to identify the particular + /// data table. This field is particularly useful when defining a definition + /// block to distinguish definition block functions. The OEM assigns each + /// dissimilar table a new OEM Table ID. + /// This field could be constructed using the SIGNATURE_64() macro. + /// e.g. SIGNATURE_64 ('A','R','M','H','G','T','D','T') + /// Note: If this field is not populated (has value of Zero), then the + /// Generators shall populate this information using part of the + /// CM_STD_OBJ_CONFIGURATION_MANAGER_INFO.OemId field and the + /// ACPI table signature. + UINT64 OemTableId; + + /// An OEM-supplied revision number. Larger numbers are assumed to be + /// newer revisions. + /// Note: If this field is not populated (has value of Zero), then the + /// Generators shall populate this information using the revision of the + /// Configuration Manager (CM_STD_OBJ_CONFIGURATION_MANAGER_INFO.Revision). + UINT32 OemRevision; } CM_STD_OBJ_ACPI_TABLE_INFO; /** A structure used to describe the SMBIOS table generators to be invoked. diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiDbg2LibArm/Dbg2Generator.c b/DynamicTablesPkg/Library/Acpi/Arm/AcpiDbg2LibArm/Dbg2Generator.c index e21e2b660634b1aedce8167b74573694d6df2a3b..697cfc46abaedf34d30abf26e7ebb2b4d271822a 100644 --- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiDbg2LibArm/Dbg2Generator.c +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiDbg2LibArm/Dbg2Generator.c @@ -342,7 +342,7 @@ BuildDbg2Table ( CfgMgrProtocol, This, (EFI_ACPI_DESCRIPTION_HEADER*)&AcpiDbg2, - AcpiTableInfo->AcpiTableRevision, + AcpiTableInfo, sizeof (DBG2_TABLE) ); if (EFI_ERROR (Status)) { diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiFadtLibArm/FadtGenerator.c b/DynamicTablesPkg/Library/Acpi/Arm/AcpiFadtLibArm/FadtGenerator.c index 62927b51d6d7c1585da1cb0d59785e2382639002..6699901b42a63a152027de59887ed097748ece91 100644 --- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiFadtLibArm/FadtGenerator.c +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiFadtLibArm/FadtGenerator.c @@ -537,7 +537,7 @@ BuildFadtTable ( CfgMgrProtocol, This, (EFI_ACPI_DESCRIPTION_HEADER*)&AcpiFadt, - AcpiTableInfo->AcpiTableRevision, + AcpiTableInfo, sizeof (EFI_ACPI_6_2_FIXED_ACPI_DESCRIPTION_TABLE) ); if (EFI_ERROR (Status)) { diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiGtdtLibArm/GtdtGenerator.c b/DynamicTablesPkg/Library/Acpi/Arm/AcpiGtdtLibArm/GtdtGenerator.c index 70f52507bc7f12a776f76271b3f378bc62e717ba..d58794ee3ef5b72a8b2e3eb930ad5ab5bbb57c38 100644 --- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiGtdtLibArm/GtdtGenerator.c +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiGtdtLibArm/GtdtGenerator.c @@ -518,7 +518,7 @@ BuildGtdtTable ( CfgMgrProtocol, This, &Gtdt->Header, - AcpiTableInfo->AcpiTableRevision, + AcpiTableInfo, TableSize ); if (EFI_ERROR (Status)) { diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiIortLibArm/IortGenerator.c b/DynamicTablesPkg/Library/Acpi/Arm/AcpiIortLibArm/IortGenerator.c index b53c4bb47798d4ad441db1fe1b1e5b180e313403..2bac7a59ea40d6a3cae675b39d5df26ab7783a29 100644 --- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiIortLibArm/IortGenerator.c +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiIortLibArm/IortGenerator.c @@ -1798,7 +1798,7 @@ BuildIortTable ( CfgMgrProtocol, This, &Iort->Header, - AcpiTableInfo->AcpiTableRevision, + AcpiTableInfo, TableSize ); if (EFI_ERROR (Status)) { diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiMadtLibArm/MadtGenerator.c b/DynamicTablesPkg/Library/Acpi/Arm/AcpiMadtLibArm/MadtGenerator.c index 06794758308e028b7d8da06670b1793cbdb3ae81..1ee0b9e006bfa00ea5bbf6aa64209dac244c90a0 100644 --- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiMadtLibArm/MadtGenerator.c +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiMadtLibArm/MadtGenerator.c @@ -569,7 +569,7 @@ BuildMadtTable ( CfgMgrProtocol, This, &Madt->Header, - AcpiTableInfo->AcpiTableRevision, + AcpiTableInfo, TableSize ); if (EFI_ERROR (Status)) { diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiMcfgLibArm/McfgGenerator.c b/DynamicTablesPkg/Library/Acpi/Arm/AcpiMcfgLibArm/McfgGenerator.c index 29eb72bd917227e87b8f126aa098a6e0ff3918cc..2131683a35158f40304892da9ab12e547483a4bc 100644 --- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiMcfgLibArm/McfgGenerator.c +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiMcfgLibArm/McfgGenerator.c @@ -220,7 +220,7 @@ BuildMcfgTable ( CfgMgrProtocol, This, &Mcfg->Header, - AcpiTableInfo->AcpiTableRevision, + AcpiTableInfo, TableSize ); if (EFI_ERROR (Status)) { diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSpcrLibArm/SpcrGenerator.c b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSpcrLibArm/SpcrGenerator.c index 23d3a50713d200321e3d93850c1b42e48da2faeb..5018eb8ebfb4053fe845e5403b0ad1df373255a0 100644 --- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSpcrLibArm/SpcrGenerator.c +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSpcrLibArm/SpcrGenerator.c @@ -209,7 +209,7 @@ BuildSpcrTable ( CfgMgrProtocol, This, (EFI_ACPI_DESCRIPTION_HEADER*)&AcpiSpcr, - AcpiTableInfo->AcpiTableRevision, + AcpiTableInfo, sizeof (EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE) ); if (EFI_ERROR (Status)) { diff --git a/DynamicTablesPkg/Library/Common/TableHelperLib/TableHelper.c b/DynamicTablesPkg/Library/Common/TableHelperLib/TableHelper.c index 02860ddf233b4a44c30450c8c090b416f1e07d81..203207bac2b202f568072b68e8cb25c5c258045f 100644 --- a/DynamicTablesPkg/Library/Common/TableHelperLib/TableHelper.c +++ b/DynamicTablesPkg/Library/Common/TableHelperLib/TableHelper.c @@ -100,7 +100,7 @@ GetCgfMgrInfo ( @param [in] Generator Pointer to the ACPI table Generator. @param [in,out] AcpiHeader Pointer to the ACPI table header to be updated. - @param [in] Revision Revision of the ACPI table. + @param [in] AcpiTableInfo Pointer to the ACPI table info structure. @param [in] Length Length of the ACPI table. @retval EFI_SUCCESS The ACPI table is updated successfully. @@ -116,7 +116,7 @@ AddAcpiHeader ( IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL * CONST CfgMgrProtocol, IN CONST ACPI_TABLE_GENERATOR * CONST Generator, IN OUT EFI_ACPI_DESCRIPTION_HEADER * CONST AcpiHeader, - IN CONST UINT32 Revision, + IN CONST CM_STD_OBJ_ACPI_TABLE_INFO * CONST AcpiTableInfo, IN CONST UINT32 Length ) { @@ -151,7 +151,7 @@ AddAcpiHeader ( // UINT32 Length AcpiHeader->Length = Length; // UINT8 Revision - AcpiHeader->Revision = Revision; + AcpiHeader->Revision = AcpiTableInfo->AcpiTableRevision; // UINT8 Checksum AcpiHeader->Checksum = 0; @@ -159,12 +159,24 @@ AddAcpiHeader ( CopyMem (AcpiHeader->OemId, CfgMfrInfo->OemId, sizeof (AcpiHeader->OemId)); // UINT64 OemTableId - AcpiHeader->OemTableId = Generator->CreatorId; - AcpiHeader->OemTableId <<= 32; - AcpiHeader->OemTableId |= Generator->AcpiTableSignature; + if (AcpiTableInfo->OemTableId != 0) { + AcpiHeader->OemTableId = AcpiTableInfo->OemTableId; + } else { + AcpiHeader->OemTableId = SIGNATURE_32 ( + CfgMfrInfo->OemId[0], + CfgMfrInfo->OemId[1], + CfgMfrInfo->OemId[2], + CfgMfrInfo->OemId[3] + ) | + ((UINT64)Generator->AcpiTableSignature << 32); + } // UINT32 OemRevision - AcpiHeader->OemRevision = CfgMfrInfo->Revision; + if (AcpiTableInfo->OemRevision != 0) { + AcpiHeader->OemRevision = AcpiTableInfo->OemRevision; + } else { + AcpiHeader->OemRevision = CfgMfrInfo->Revision; + } // UINT32 CreatorId AcpiHeader->CreatorId = Generator->CreatorId; -- 'Guid(CE165669-3EF3-493F-B85D-6190EE5B9759)'