/** @file\r
ACPI Table Protocol Implementation\r
\r
- Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>\r
+ Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved.<BR>\r
This program and the accompanying materials\r
are licensed and made available under the terms and conditions of the BSD License\r
which accompanies this distribution. The full text of the license may be found at\r
CurrentRsdtEntry = (UINT32 *) ((UINT8 *) AcpiTableInstance->Rsdt1 + sizeof (EFI_ACPI_DESCRIPTION_HEADER));\r
*CurrentRsdtEntry = (UINT32) (UINTN) AcpiTableInstance->Fadt1;\r
}\r
- if ((Version & EFI_ACPI_TABLE_VERSION_2_0) != 0 ||\r
- (Version & EFI_ACPI_TABLE_VERSION_3_0) != 0) {\r
+ if ((Version & ACPI_TABLE_VERSION_GTE_2_0) != 0) {\r
CurrentRsdtEntry = (UINT32 *) ((UINT8 *) AcpiTableInstance->Rsdt3 + sizeof (EFI_ACPI_DESCRIPTION_HEADER));\r
*CurrentRsdtEntry = (UINT32) (UINTN) AcpiTableInstance->Fadt3;\r
CurrentXsdtEntry = (VOID *) ((UINT8 *) AcpiTableInstance->Xsdt + sizeof (EFI_ACPI_DESCRIPTION_HEADER));\r
// Add the RSD_PTR to the system table and store that we have installed the\r
// tables.\r
//\r
- if (((Version & EFI_ACPI_TABLE_VERSION_1_0B) != 0) &&\r
- !AcpiTableInstance->TablesInstalled1) {\r
+ if ((Version & EFI_ACPI_TABLE_VERSION_1_0B) != 0) {\r
Status = gBS->InstallConfigurationTable (&gEfiAcpi10TableGuid, AcpiTableInstance->Rsdp1);\r
if (EFI_ERROR (Status)) {\r
return EFI_ABORTED;\r
}\r
-\r
- AcpiTableInstance->TablesInstalled1 = TRUE;\r
}\r
\r
- if (((Version & EFI_ACPI_TABLE_VERSION_2_0) != 0 ||\r
- (Version & EFI_ACPI_TABLE_VERSION_3_0) != 0) &&\r
- !AcpiTableInstance->TablesInstalled3) {\r
+ if ((Version & ACPI_TABLE_VERSION_GTE_2_0) != 0) {\r
Status = gBS->InstallConfigurationTable (&gEfiAcpiTableGuid, AcpiTableInstance->Rsdp3);\r
if (EFI_ERROR (Status)) {\r
return EFI_ABORTED;\r
}\r
-\r
- AcpiTableInstance->TablesInstalled3= TRUE;\r
}\r
\r
return EFI_SUCCESS;\r
AcpiTableInstance,\r
AcpiTableBufferConst,\r
TRUE,\r
- EFI_ACPI_TABLE_VERSION_1_0B | EFI_ACPI_TABLE_VERSION_2_0 | EFI_ACPI_TABLE_VERSION_3_0,\r
+ EFI_ACPI_TABLE_VERSION_1_0B | ACPI_TABLE_VERSION_GTE_2_0,\r
TableKey\r
);\r
if (!EFI_ERROR (Status)) {\r
Status = PublishTables (\r
AcpiTableInstance,\r
- EFI_ACPI_TABLE_VERSION_1_0B | EFI_ACPI_TABLE_VERSION_2_0 | EFI_ACPI_TABLE_VERSION_3_0\r
+ EFI_ACPI_TABLE_VERSION_1_0B | ACPI_TABLE_VERSION_GTE_2_0\r
);\r
}\r
FreePool (AcpiTableBufferConst);\r
if (!EFI_ERROR (Status)) {\r
SdtNotifyAcpiList (\r
AcpiTableInstance,\r
- EFI_ACPI_TABLE_VERSION_1_0B | EFI_ACPI_TABLE_VERSION_2_0 | EFI_ACPI_TABLE_VERSION_3_0,\r
+ EFI_ACPI_TABLE_VERSION_1_0B | ACPI_TABLE_VERSION_GTE_2_0,\r
*TableKey\r
);\r
}\r
//\r
Status = RemoveTableFromList (\r
AcpiTableInstance,\r
- EFI_ACPI_TABLE_VERSION_1_0B | EFI_ACPI_TABLE_VERSION_2_0 | EFI_ACPI_TABLE_VERSION_3_0,\r
+ EFI_ACPI_TABLE_VERSION_1_0B | ACPI_TABLE_VERSION_GTE_2_0,\r
TableKey\r
);\r
if (!EFI_ERROR (Status)) {\r
Status = PublishTables (\r
AcpiTableInstance,\r
- EFI_ACPI_TABLE_VERSION_1_0B | EFI_ACPI_TABLE_VERSION_2_0 | EFI_ACPI_TABLE_VERSION_3_0\r
+ EFI_ACPI_TABLE_VERSION_1_0B | ACPI_TABLE_VERSION_GTE_2_0\r
);\r
}\r
\r
// Check that the table has not been previously added.\r
//\r
if (((Version & EFI_ACPI_TABLE_VERSION_1_0B) != 0 && AcpiTableInstance->Fadt1 != NULL) ||\r
- ((Version & EFI_ACPI_TABLE_VERSION_2_0) != 0 && AcpiTableInstance->Fadt3 != NULL) ||\r
- ((Version & EFI_ACPI_TABLE_VERSION_3_0) != 0 && AcpiTableInstance->Fadt3 != NULL)\r
+ ((Version & ACPI_TABLE_VERSION_GTE_2_0) != 0 && AcpiTableInstance->Fadt3 != NULL)\r
) {\r
gBS->FreePages (CurrentTableList->PageAddress, CurrentTableList->NumberOfPages);\r
gBS->FreePool (CurrentTableList);\r
AcpiTableInstance->Rsdt1->OemRevision = AcpiTableInstance->Fadt1->Header.OemRevision;\r
}\r
\r
- if ((Version & EFI_ACPI_TABLE_VERSION_2_0) != 0 ||\r
- (Version & EFI_ACPI_TABLE_VERSION_3_0) != 0) {\r
+ if ((Version & ACPI_TABLE_VERSION_GTE_2_0) != 0) {\r
//\r
// Save a pointer to the table\r
//\r
//\r
if ((UINT64)(UINTN)AcpiTableInstance->Facs3 < BASE_4GB) {\r
AcpiTableInstance->Fadt3->FirmwareCtrl = (UINT32) (UINTN) AcpiTableInstance->Facs3;\r
+ ZeroMem (&AcpiTableInstance->Fadt3->XFirmwareCtrl, sizeof (UINT64));\r
} else {\r
Buffer64 = (UINT64) (UINTN) AcpiTableInstance->Facs3;\r
CopyMem (\r
&Buffer64,\r
sizeof (UINT64)\r
);\r
+ AcpiTableInstance->Fadt3->FirmwareCtrl = 0;\r
}\r
AcpiTableInstance->Fadt3->Dsdt = (UINT32) (UINTN) AcpiTableInstance->Dsdt3;\r
Buffer64 = (UINT64) (UINTN) AcpiTableInstance->Dsdt3;\r
// Check that the table has not been previously added.\r
//\r
if (((Version & EFI_ACPI_TABLE_VERSION_1_0B) != 0 && AcpiTableInstance->Facs1 != NULL) ||\r
- ((Version & EFI_ACPI_TABLE_VERSION_2_0) != 0 && AcpiTableInstance->Facs3 != NULL) ||\r
- ((Version & EFI_ACPI_TABLE_VERSION_3_0) != 0 && AcpiTableInstance->Facs3 != NULL)\r
+ ((Version & ACPI_TABLE_VERSION_GTE_2_0) != 0 && AcpiTableInstance->Facs3 != NULL)\r
) {\r
gBS->FreePages (CurrentTableList->PageAddress, CurrentTableList->NumberOfPages);\r
gBS->FreePool (CurrentTableList);\r
}\r
}\r
\r
- if ((Version & EFI_ACPI_TABLE_VERSION_2_0) != 0 ||\r
- (Version & EFI_ACPI_TABLE_VERSION_3_0) != 0) {\r
+ if ((Version & ACPI_TABLE_VERSION_GTE_2_0) != 0) {\r
//\r
// Save a pointer to the table\r
//\r
//\r
if ((UINT64)(UINTN)AcpiTableInstance->Facs3 < BASE_4GB) {\r
AcpiTableInstance->Fadt3->FirmwareCtrl = (UINT32) (UINTN) AcpiTableInstance->Facs3;\r
+ ZeroMem (&AcpiTableInstance->Fadt3->XFirmwareCtrl, sizeof (UINT64));\r
} else {\r
Buffer64 = (UINT64) (UINTN) AcpiTableInstance->Facs3;\r
CopyMem (\r
&Buffer64,\r
sizeof (UINT64)\r
);\r
+ AcpiTableInstance->Fadt3->FirmwareCtrl = 0;\r
}\r
\r
//\r
// Check that the table has not been previously added.\r
//\r
if (((Version & EFI_ACPI_TABLE_VERSION_1_0B) != 0 && AcpiTableInstance->Dsdt1 != NULL) ||\r
- ((Version & EFI_ACPI_TABLE_VERSION_2_0) != 0 && AcpiTableInstance->Dsdt3 != NULL) ||\r
- ((Version & EFI_ACPI_TABLE_VERSION_3_0) != 0 && AcpiTableInstance->Dsdt3 != NULL)\r
+ ((Version & ACPI_TABLE_VERSION_GTE_2_0) != 0 && AcpiTableInstance->Dsdt3 != NULL)\r
) {\r
gBS->FreePages (CurrentTableList->PageAddress, CurrentTableList->NumberOfPages);\r
gBS->FreePool (CurrentTableList);\r
}\r
}\r
\r
- if ((Version & EFI_ACPI_TABLE_VERSION_2_0) != 0 ||\r
- (Version & EFI_ACPI_TABLE_VERSION_3_0) != 0) {\r
+ if ((Version & ACPI_TABLE_VERSION_GTE_2_0) != 0) {\r
//\r
// Save a pointer to the table\r
//\r
//\r
// Add to ACPI 2.0/3.0 table tree\r
//\r
- if ((Version & EFI_ACPI_TABLE_VERSION_2_0) != 0 ||\r
- (Version & EFI_ACPI_TABLE_VERSION_3_0) != 0) {\r
+ if ((Version & ACPI_TABLE_VERSION_GTE_2_0) != 0) {\r
if (AddToRsdt) {\r
//\r
// If the table number exceed the gEfiAcpiMaxNumTables, enlarge the table buffer\r
}\r
}\r
\r
- if ((Version & EFI_ACPI_TABLE_VERSION_2_0 & Table->Version) ||\r
- (Version & EFI_ACPI_TABLE_VERSION_3_0 & Table->Version)) {\r
+ if (Version & ACPI_TABLE_VERSION_GTE_2_0 & Table->Version) {\r
//\r
// Remove this version from the table\r
//\r
- if (Version & EFI_ACPI_TABLE_VERSION_2_0 & Table->Version) {\r
- Table->Version = Table->Version &~EFI_ACPI_TABLE_VERSION_2_0;\r
- } \r
- if (Version & EFI_ACPI_TABLE_VERSION_3_0 & Table->Version) {\r
- Table->Version = Table->Version &~EFI_ACPI_TABLE_VERSION_3_0;\r
- }\r
+ Table->Version = Table->Version &~(Version & ACPI_TABLE_VERSION_GTE_2_0);\r
\r
//\r
// Remove from Rsdt and Xsdt. We don't care about the return value\r
AcpiTableInstance->Fadt1 = NULL;\r
}\r
\r
- if ((Version & EFI_ACPI_TABLE_VERSION_2_0) != 0 ||\r
- (Version & EFI_ACPI_TABLE_VERSION_3_0) != 0) {\r
+ if ((Version & ACPI_TABLE_VERSION_GTE_2_0) != 0) {\r
AcpiTableInstance->Fadt3 = NULL;\r
}\r
break;\r
}\r
}\r
\r
- if ((Version & EFI_ACPI_TABLE_VERSION_2_0) != 0 ||\r
- (Version & EFI_ACPI_TABLE_VERSION_3_0) != 0) {\r
+ if ((Version & ACPI_TABLE_VERSION_GTE_2_0) != 0) {\r
AcpiTableInstance->Facs3 = NULL;\r
\r
//\r
}\r
\r
\r
- if ((Version & EFI_ACPI_TABLE_VERSION_2_0) != 0 ||\r
- (Version & EFI_ACPI_TABLE_VERSION_3_0) != 0) {\r
+ if ((Version & ACPI_TABLE_VERSION_GTE_2_0) != 0) {\r
AcpiTableInstance->Dsdt3 = NULL;\r
\r
//\r