diff options
author | Star Zeng <star.zeng@intel.com> | 2014-05-06 02:11:23 +0000 |
---|---|---|
committer | lzeng14 <lzeng14@6f19259b-4bc3-4df7-8a09-765794883524> | 2014-05-06 02:11:23 +0000 |
commit | 5966402ed51c5b611bf437c812047dc9c432a47e (patch) | |
tree | c6fa2a7aabd067fe170813ff84dd9cbfb7fe89d3 /IntelFrameworkModulePkg | |
parent | a06ec3e2af16c64709a77c8a354d6cec92185f1f (diff) | |
download | edk2-5966402ed51c5b611bf437c812047dc9c432a47e.tar.gz edk2-5966402ed51c5b611bf437c812047dc9c432a47e.tar.bz2 edk2-5966402ed51c5b611bf437c812047dc9c432a47e.zip |
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.c | 42 |
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
|