summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSami Mujawar <sami.mujawar@arm.com>2019-02-14 11:01:20 +0000
committerSami Mujawar <sami.mujawar@arm.com>2019-02-25 14:46:17 +0000
commitc788bdaba47536447ae37518a96d92e0da54aad7 (patch)
treeebc70f7aa7617a08d682f45ccaa24d69673369b4
parent1d49a75367ef6827b8b8f77f61e9ce245d1bdee3 (diff)
downloadedk2-c788bdaba47536447ae37518a96d92e0da54aad7.tar.gz
edk2-c788bdaba47536447ae37518a96d92e0da54aad7.tar.bz2
edk2-c788bdaba47536447ae37518a96d92e0da54aad7.zip
DynamicTablesPkg: Add OEM Info
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 <sami.mujawar@arm.com> Reviewed-by: Alexei Fedorov <alexei.fedorov@arm.com>
-rw-r--r--DynamicTablesPkg/Include/Library/TableHelperLib.h4
-rw-r--r--DynamicTablesPkg/Include/StandardNameSpaceObjects.h18
-rw-r--r--DynamicTablesPkg/Library/Acpi/Arm/AcpiDbg2LibArm/Dbg2Generator.c2
-rw-r--r--DynamicTablesPkg/Library/Acpi/Arm/AcpiFadtLibArm/FadtGenerator.c2
-rw-r--r--DynamicTablesPkg/Library/Acpi/Arm/AcpiGtdtLibArm/GtdtGenerator.c2
-rw-r--r--DynamicTablesPkg/Library/Acpi/Arm/AcpiIortLibArm/IortGenerator.c2
-rw-r--r--DynamicTablesPkg/Library/Acpi/Arm/AcpiMadtLibArm/MadtGenerator.c2
-rw-r--r--DynamicTablesPkg/Library/Acpi/Arm/AcpiMcfgLibArm/McfgGenerator.c2
-rw-r--r--DynamicTablesPkg/Library/Acpi/Arm/AcpiSpcrLibArm/SpcrGenerator.c2
-rw-r--r--DynamicTablesPkg/Library/Common/TableHelperLib/TableHelper.c26
10 files changed, 46 insertions, 16 deletions
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;