From: Sami Mujawar Date: Thu, 14 Feb 2019 11:01:20 +0000 (+0000) Subject: DynamicTablesPkg: Add OEM Info X-Git-Tag: edk2-stable201905~441 X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=commitdiff_plain;h=e12bdeb1c2ad6e3354e16309284aae6313a1fb43 DynamicTablesPkg: Add OEM Info This patch originally merged in edk2 master at c788bdaba47536447ae37518a96d92e0da54aad7. However, this was later reverted at bdbbedea949eb4b10d24110c0e559b03c7a6bce4 as it was merged during the Soft Feature Freeze for edk2-stable201903. Resubmitting this patch as the edk2 merge window is now open. Added option for OEMs to provide OEM Table ID and OEM Revision for ACPI tables. Cc: Laszlo Ersek Cc: Alexei Fedorov Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Sami Mujawar Reviewed-by: Alexei Fedorov --- diff --git a/DynamicTablesPkg/Include/Library/TableHelperLib.h b/DynamicTablesPkg/Include/Library/TableHelperLib.h index 3c4e1d23d2..0f872bc3d0 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 4377ee8f78..58503858b2 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 e21e2b6606..697cfc46ab 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 62927b51d6..6699901b42 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 70f52507bc..d58794ee3e 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 b53c4bb477..2bac7a59ea 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 0679475830..1ee0b9e006 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 29eb72bd91..2131683a35 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 a4654acb39..6778d7673e 100644 --- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSpcrLibArm/SpcrGenerator.c +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSpcrLibArm/SpcrGenerator.c @@ -211,7 +211,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 02860ddf23..203207bac2 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;