/** @file\r
ACPI Table Protocol Implementation\r
\r
- Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>\r
+ Copyright (c) 2006 - 2012, 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
\r
//\r
// Update pointers in FADT. If tables don't exist this will put NULL pointers there.\r
+ // Note: If the FIRMWARE_CTRL is non-zero, then X_FIRMWARE_CTRL must be zero, and \r
+ // vice-versa.\r
//\r
- AcpiTableInstance->Fadt3->FirmwareCtrl = (UINT32) (UINTN) AcpiTableInstance->Facs3;\r
- Buffer64 = (UINT64) (UINTN) AcpiTableInstance->Facs3;\r
- CopyMem (\r
- &AcpiTableInstance->Fadt3->XFirmwareCtrl,\r
- &Buffer64,\r
- sizeof (UINT64)\r
- );\r
+ if ((UINT64)(UINTN)AcpiSupportInstance->Facs3 < BASE_4GB) {\r
+ AcpiTableInstance->Fadt3->FirmwareCtrl = (UINT32) (UINTN) AcpiTableInstance->Facs3;\r
+ } else {\r
+ Buffer64 = (UINT64) (UINTN) AcpiTableInstance->Facs3;\r
+ CopyMem (\r
+ &AcpiTableInstance->Fadt3->XFirmwareCtrl,\r
+ &Buffer64,\r
+ sizeof (UINT64)\r
+ );\r
+ }\r
AcpiTableInstance->Fadt3->Dsdt = (UINT32) (UINTN) AcpiTableInstance->Dsdt3;\r
Buffer64 = (UINT64) (UINTN) AcpiTableInstance->Dsdt3;\r
CopyMem (\r
// If FADT already exists, update table pointers.\r
//\r
if (AcpiTableInstance->Fadt3 != NULL) {\r
- AcpiTableInstance->Fadt3->FirmwareCtrl = (UINT32) (UINTN) AcpiTableInstance->Facs3;\r
- Buffer64 = (UINT64) (UINTN) AcpiTableInstance->Facs3;\r
- CopyMem (\r
- &AcpiTableInstance->Fadt3->XFirmwareCtrl,\r
- &Buffer64,\r
- sizeof (UINT64)\r
- );\r
+ //\r
+ // Note: If the FIRMWARE_CTRL is non-zero, then X_FIRMWARE_CTRL must be zero, and \r
+ // vice-versa.\r
+ //\r
+ if ((UINT64)(UINTN)AcpiSupportInstance->Facs3 < BASE_4GB) {\r
+ AcpiTableInstance->Fadt3->FirmwareCtrl = (UINT32) (UINTN) AcpiTableInstance->Facs3;\r
+ } else {\r
+ Buffer64 = (UINT64) (UINTN) AcpiTableInstance->Facs3;\r
+ CopyMem (\r
+ &AcpiTableInstance->Fadt3->XFirmwareCtrl,\r
+ &Buffer64,\r
+ sizeof (UINT64)\r
+ );\r
+ }\r
\r
//\r
// Checksum FADT table\r