summaryrefslogtreecommitdiff
path: root/IntelFrameworkModulePkg
diff options
context:
space:
mode:
authorStar Zeng <star.zeng@intel.com>2014-05-06 02:11:23 +0000
committerlzeng14 <lzeng14@6f19259b-4bc3-4df7-8a09-765794883524>2014-05-06 02:11:23 +0000
commit5966402ed51c5b611bf437c812047dc9c432a47e (patch)
treec6fa2a7aabd067fe170813ff84dd9cbfb7fe89d3 /IntelFrameworkModulePkg
parenta06ec3e2af16c64709a77c8a354d6cec92185f1f (diff)
MdeModulePkg/IntelFrameworkModulePkg ACPI: Follow the new UEFI 2.4a spec to return EFI_ACCESS_DENIED for duplicated FADT, FACS or DSDT installation.
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@15496 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'IntelFrameworkModulePkg')
-rw-r--r--IntelFrameworkModulePkg/Universal/Acpi/AcpiSupportDxe/AcpiSupportAcpiSupportProtocol.c42
1 files changed, 22 insertions, 20 deletions
diff --git a/IntelFrameworkModulePkg/Universal/Acpi/AcpiSupportDxe/AcpiSupportAcpiSupportProtocol.c b/IntelFrameworkModulePkg/Universal/Acpi/AcpiSupportDxe/AcpiSupportAcpiSupportProtocol.c
index 3bcff22dcf..6443c3acd0 100644
--- a/IntelFrameworkModulePkg/Universal/Acpi/AcpiSupportDxe/AcpiSupportAcpiSupportProtocol.c
+++ b/IntelFrameworkModulePkg/Universal/Acpi/AcpiSupportDxe/AcpiSupportAcpiSupportProtocol.c
@@ -1,7 +1,7 @@
/** @file
ACPI Support Protocol implementation
-Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions
@@ -375,6 +375,9 @@ PublishTables (
and the size field embedded in the ACPI table pointed to by AcpiTableBuffer
are not in sync.
@return EFI_OUT_OF_RESOURCES Insufficient resources exist to complete the request.
+ @retval EFI_ACCESS_DENIED The table signature matches a table already
+ present in the system and platform policy
+ does not allow duplicate tables of this type.
**/
EFI_STATUS
@@ -410,13 +413,13 @@ InstallAcpiTable (
//
AcpiTableBufferConst = AllocateCopyPool (AcpiTableBufferSize, AcpiTableBuffer);
*TableKey = 0;
- Status = AcpiSupport->SetAcpiTable (
- AcpiSupport,
- AcpiTableBufferConst,
- TRUE,
- EFI_ACPI_TABLE_VERSION_1_0B | EFI_ACPI_TABLE_VERSION_2_0 | EFI_ACPI_TABLE_VERSION_3_0,
- TableKey
- );
+ Status = AddTableToList (
+ AcpiSupportInstance,
+ AcpiTableBufferConst,
+ TRUE,
+ EFI_ACPI_TABLE_VERSION_1_0B | EFI_ACPI_TABLE_VERSION_2_0 | EFI_ACPI_TABLE_VERSION_3_0,
+ TableKey
+ );
if (!EFI_ERROR (Status)) {
Status = AcpiSupport->PublishTables (
AcpiSupport,
@@ -457,13 +460,11 @@ UninstallAcpiTable (
//
// Uninstall the ACPI table by using ACPI support protocol
//
- Status = AcpiSupport->SetAcpiTable (
- AcpiSupport,
- NULL,
- FALSE,
- EFI_ACPI_TABLE_VERSION_1_0B | EFI_ACPI_TABLE_VERSION_2_0 | EFI_ACPI_TABLE_VERSION_3_0,
- &TableKey
- );
+ Status = RemoveTableFromList (
+ AcpiSupportInstance,
+ EFI_ACPI_TABLE_VERSION_1_0B | EFI_ACPI_TABLE_VERSION_2_0 | EFI_ACPI_TABLE_VERSION_3_0,
+ TableKey
+ );
if (!EFI_ERROR (Status)) {
Status = AcpiSupport->PublishTables (
AcpiSupport,
@@ -588,8 +589,9 @@ ReallocateAcpiTableBuffer (
@return EFI_SUCCESS The function completed successfully.
@return EFI_OUT_OF_RESOURCES Could not allocate a required resource.
- @return EFI_ABORTED The table is a duplicate of a table that is required
- to be unique.
+ @retval EFI_ACCESS_DENIED The table signature matches a table already
+ present in the system and platform policy
+ does not allow duplicate tables of this type.
**/
EFI_STATUS
AddTableToList (
@@ -724,7 +726,7 @@ AddTableToList (
) {
gBS->FreePages (CurrentTableList->PageAddress, CurrentTableList->NumberOfPages);
gBS->FreePool (CurrentTableList);
- return EFI_ABORTED;
+ return EFI_ACCESS_DENIED;
}
//
// Add the table to the appropriate table version
@@ -865,7 +867,7 @@ AddTableToList (
) {
gBS->FreePages (CurrentTableList->PageAddress, CurrentTableList->NumberOfPages);
gBS->FreePool (CurrentTableList);
- return EFI_ABORTED;
+ return EFI_ACCESS_DENIED;
}
//
// FACS is referenced by FADT and is not part of RSDT
@@ -949,7 +951,7 @@ AddTableToList (
) {
gBS->FreePages (CurrentTableList->PageAddress, CurrentTableList->NumberOfPages);
gBS->FreePool (CurrentTableList);
- return EFI_ABORTED;
+ return EFI_ACCESS_DENIED;
}
//
// DSDT is referenced by FADT and is not part of RSDT