MdeModulePkg AcpiTableDxe: Cover EFI_ACPI_TABLE_VERSION_5_0.

Follow PI 1.4 spec,
1. Cover EFI_ACPI_TABLE_VERSION_5_0.
2. Update TableKey parameter description in the
EFI_ACPI_SDT_PROTOCOL.GetAcpiTable() section.
3. Update EFI_ACPI_SDT_PROTOCOL.GetAcpiTable() description.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Star Zeng <star.zeng@intel.com>
Reviewed-by: Jiewen Yao <jiewen.yao@intel.com>

git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@17649 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
Star Zeng
2015-06-17 02:51:47 +00:00
committed by lzeng14
parent 9fd7ebf973
commit f0071740ec
4 changed files with 41 additions and 74 deletions

View File

@@ -1,7 +1,7 @@
/** @file
ACPI Table Protocol Implementation
Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>
Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at
@@ -134,8 +134,7 @@ PublishTables (
CurrentRsdtEntry = (UINT32 *) ((UINT8 *) AcpiTableInstance->Rsdt1 + sizeof (EFI_ACPI_DESCRIPTION_HEADER));
*CurrentRsdtEntry = (UINT32) (UINTN) AcpiTableInstance->Fadt1;
}
if ((Version & EFI_ACPI_TABLE_VERSION_2_0) != 0 ||
(Version & EFI_ACPI_TABLE_VERSION_3_0) != 0) {
if ((Version & ACPI_TABLE_VERSION_GTE_2_0) != 0) {
CurrentRsdtEntry = (UINT32 *) ((UINT8 *) AcpiTableInstance->Rsdt3 + sizeof (EFI_ACPI_DESCRIPTION_HEADER));
*CurrentRsdtEntry = (UINT32) (UINTN) AcpiTableInstance->Fadt3;
CurrentXsdtEntry = (VOID *) ((UINT8 *) AcpiTableInstance->Xsdt + sizeof (EFI_ACPI_DESCRIPTION_HEADER));
@@ -170,8 +169,7 @@ PublishTables (
AcpiTableInstance->TablesInstalled1 = TRUE;
}
if (((Version & EFI_ACPI_TABLE_VERSION_2_0) != 0 ||
(Version & EFI_ACPI_TABLE_VERSION_3_0) != 0) &&
if ((Version & ACPI_TABLE_VERSION_GTE_2_0) &&
!AcpiTableInstance->TablesInstalled3) {
Status = gBS->InstallConfigurationTable (&gEfiAcpiTableGuid, AcpiTableInstance->Rsdp3);
if (EFI_ERROR (Status)) {
@@ -240,13 +238,13 @@ InstallAcpiTable (
AcpiTableInstance,
AcpiTableBufferConst,
TRUE,
EFI_ACPI_TABLE_VERSION_1_0B | EFI_ACPI_TABLE_VERSION_2_0 | EFI_ACPI_TABLE_VERSION_3_0,
EFI_ACPI_TABLE_VERSION_1_0B | ACPI_TABLE_VERSION_GTE_2_0,
TableKey
);
if (!EFI_ERROR (Status)) {
Status = PublishTables (
AcpiTableInstance,
EFI_ACPI_TABLE_VERSION_1_0B | EFI_ACPI_TABLE_VERSION_2_0 | EFI_ACPI_TABLE_VERSION_3_0
EFI_ACPI_TABLE_VERSION_1_0B | ACPI_TABLE_VERSION_GTE_2_0
);
}
FreePool (AcpiTableBufferConst);
@@ -258,7 +256,7 @@ InstallAcpiTable (
if (!EFI_ERROR (Status)) {
SdtNotifyAcpiList (
AcpiTableInstance,
EFI_ACPI_TABLE_VERSION_1_0B | EFI_ACPI_TABLE_VERSION_2_0 | EFI_ACPI_TABLE_VERSION_3_0,
EFI_ACPI_TABLE_VERSION_1_0B | ACPI_TABLE_VERSION_GTE_2_0,
*TableKey
);
}
@@ -298,13 +296,13 @@ UninstallAcpiTable (
//
Status = RemoveTableFromList (
AcpiTableInstance,
EFI_ACPI_TABLE_VERSION_1_0B | EFI_ACPI_TABLE_VERSION_2_0 | EFI_ACPI_TABLE_VERSION_3_0,
EFI_ACPI_TABLE_VERSION_1_0B | ACPI_TABLE_VERSION_GTE_2_0,
TableKey
);
if (!EFI_ERROR (Status)) {
Status = PublishTables (
AcpiTableInstance,
EFI_ACPI_TABLE_VERSION_1_0B | EFI_ACPI_TABLE_VERSION_2_0 | EFI_ACPI_TABLE_VERSION_3_0
EFI_ACPI_TABLE_VERSION_1_0B | ACPI_TABLE_VERSION_GTE_2_0
);
}
@@ -559,8 +557,7 @@ AddTableToList (
// Check that the table has not been previously added.
//
if (((Version & EFI_ACPI_TABLE_VERSION_1_0B) != 0 && AcpiTableInstance->Fadt1 != NULL) ||
((Version & EFI_ACPI_TABLE_VERSION_2_0) != 0 && AcpiTableInstance->Fadt3 != NULL) ||
((Version & EFI_ACPI_TABLE_VERSION_3_0) != 0 && AcpiTableInstance->Fadt3 != NULL)
((Version & ACPI_TABLE_VERSION_GTE_2_0) != 0 && AcpiTableInstance->Fadt3 != NULL)
) {
gBS->FreePages (CurrentTableList->PageAddress, CurrentTableList->NumberOfPages);
gBS->FreePool (CurrentTableList);
@@ -607,8 +604,7 @@ AddTableToList (
AcpiTableInstance->Rsdt1->OemRevision = AcpiTableInstance->Fadt1->Header.OemRevision;
}
if ((Version & EFI_ACPI_TABLE_VERSION_2_0) != 0 ||
(Version & EFI_ACPI_TABLE_VERSION_3_0) != 0) {
if ((Version & ACPI_TABLE_VERSION_GTE_2_0) != 0) {
//
// Save a pointer to the table
//
@@ -696,8 +692,7 @@ AddTableToList (
// Check that the table has not been previously added.
//
if (((Version & EFI_ACPI_TABLE_VERSION_1_0B) != 0 && AcpiTableInstance->Facs1 != NULL) ||
((Version & EFI_ACPI_TABLE_VERSION_2_0) != 0 && AcpiTableInstance->Facs3 != NULL) ||
((Version & EFI_ACPI_TABLE_VERSION_3_0) != 0 && AcpiTableInstance->Facs3 != NULL)
((Version & ACPI_TABLE_VERSION_GTE_2_0) != 0 && AcpiTableInstance->Facs3 != NULL)
) {
gBS->FreePages (CurrentTableList->PageAddress, CurrentTableList->NumberOfPages);
gBS->FreePool (CurrentTableList);
@@ -735,8 +730,7 @@ AddTableToList (
}
}
if ((Version & EFI_ACPI_TABLE_VERSION_2_0) != 0 ||
(Version & EFI_ACPI_TABLE_VERSION_3_0) != 0) {
if ((Version & ACPI_TABLE_VERSION_GTE_2_0) != 0) {
//
// Save a pointer to the table
//
@@ -782,8 +776,7 @@ AddTableToList (
// Check that the table has not been previously added.
//
if (((Version & EFI_ACPI_TABLE_VERSION_1_0B) != 0 && AcpiTableInstance->Dsdt1 != NULL) ||
((Version & EFI_ACPI_TABLE_VERSION_2_0) != 0 && AcpiTableInstance->Dsdt3 != NULL) ||
((Version & EFI_ACPI_TABLE_VERSION_3_0) != 0 && AcpiTableInstance->Dsdt3 != NULL)
((Version & ACPI_TABLE_VERSION_GTE_2_0) != 0 && AcpiTableInstance->Dsdt3 != NULL)
) {
gBS->FreePages (CurrentTableList->PageAddress, CurrentTableList->NumberOfPages);
gBS->FreePool (CurrentTableList);
@@ -821,8 +814,7 @@ AddTableToList (
}
}
if ((Version & EFI_ACPI_TABLE_VERSION_2_0) != 0 ||
(Version & EFI_ACPI_TABLE_VERSION_3_0) != 0) {
if ((Version & ACPI_TABLE_VERSION_GTE_2_0) != 0) {
//
// Save a pointer to the table
//
@@ -922,8 +914,7 @@ AddTableToList (
//
// Add to ACPI 2.0/3.0 table tree
//
if ((Version & EFI_ACPI_TABLE_VERSION_2_0) != 0 ||
(Version & EFI_ACPI_TABLE_VERSION_3_0) != 0) {
if ((Version & ACPI_TABLE_VERSION_GTE_2_0) != 0) {
if (AddToRsdt) {
//
// If the table number exceed the gEfiAcpiMaxNumTables, enlarge the table buffer
@@ -1255,17 +1246,11 @@ DeleteTable (
}
}
if ((Version & EFI_ACPI_TABLE_VERSION_2_0 & Table->Version) ||
(Version & EFI_ACPI_TABLE_VERSION_3_0 & Table->Version)) {
if (Version & ACPI_TABLE_VERSION_GTE_2_0 & Table->Version) {
//
// Remove this version from the table
//
if (Version & EFI_ACPI_TABLE_VERSION_2_0 & Table->Version) {
Table->Version = Table->Version &~EFI_ACPI_TABLE_VERSION_2_0;
}
if (Version & EFI_ACPI_TABLE_VERSION_3_0 & Table->Version) {
Table->Version = Table->Version &~EFI_ACPI_TABLE_VERSION_3_0;
}
Table->Version = Table->Version &~(Version & ACPI_TABLE_VERSION_GTE_2_0);
//
// Remove from Rsdt and Xsdt. We don't care about the return value
@@ -1291,8 +1276,7 @@ DeleteTable (
AcpiTableInstance->Fadt1 = NULL;
}
if ((Version & EFI_ACPI_TABLE_VERSION_2_0) != 0 ||
(Version & EFI_ACPI_TABLE_VERSION_3_0) != 0) {
if ((Version & ACPI_TABLE_VERSION_GTE_2_0) != 0) {
AcpiTableInstance->Fadt3 = NULL;
}
break;
@@ -1319,8 +1303,7 @@ DeleteTable (
}
}
if ((Version & EFI_ACPI_TABLE_VERSION_2_0) != 0 ||
(Version & EFI_ACPI_TABLE_VERSION_3_0) != 0) {
if ((Version & ACPI_TABLE_VERSION_GTE_2_0) != 0) {
AcpiTableInstance->Facs3 = NULL;
//
@@ -1366,8 +1349,7 @@ DeleteTable (
}
if ((Version & EFI_ACPI_TABLE_VERSION_2_0) != 0 ||
(Version & EFI_ACPI_TABLE_VERSION_3_0) != 0) {
if ((Version & ACPI_TABLE_VERSION_GTE_2_0) != 0) {
AcpiTableInstance->Dsdt3 = NULL;
//