/** @file\r
ACPI Support 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
\r
This program and the accompanying materials\r
are licensed and made available under the terms and conditions\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
- AcpiSupportInstance->Fadt3->FirmwareCtrl = (UINT32) (UINTN) AcpiSupportInstance->Facs3;\r
- Buffer64 = (UINT64) (UINTN) AcpiSupportInstance->Facs3;\r
- CopyMem (\r
- &AcpiSupportInstance->Fadt3->XFirmwareCtrl,\r
- &Buffer64,\r
- sizeof (UINT64)\r
- );\r
+ if ((UINT64)(UINTN)AcpiSupportInstance->Facs3 < BASE_4GB) {\r
+ AcpiSupportInstance->Fadt3->FirmwareCtrl = (UINT32) (UINTN) AcpiSupportInstance->Facs3;\r
+ ZeroMem (\r
+ &AcpiSupportInstance->Fadt3->XFirmwareCtrl,\r
+ sizeof (UINT64)\r
+ );\r
+ } else {\r
+ AcpiSupportInstance->Fadt3->FirmwareCtrl = 0;\r
+ Buffer64 = (UINT64) (UINTN) AcpiSupportInstance->Facs3;\r
+ CopyMem (\r
+ &AcpiSupportInstance->Fadt3->XFirmwareCtrl,\r
+ &Buffer64,\r
+ sizeof (UINT64)\r
+ );\r
+ }\r
AcpiSupportInstance->Fadt3->Dsdt = (UINT32) (UINTN) AcpiSupportInstance->Dsdt3;\r
Buffer64 = (UINT64) (UINTN) AcpiSupportInstance->Dsdt3;\r
CopyMem (\r
// If FADT already exists, update table pointers.\r
//\r
if (AcpiSupportInstance->Fadt3 != NULL) {\r
- AcpiSupportInstance->Fadt3->FirmwareCtrl = (UINT32) (UINTN) AcpiSupportInstance->Facs3;\r
- Buffer64 = (UINT64) (UINTN) AcpiSupportInstance->Facs3;\r
- CopyMem (\r
- &AcpiSupportInstance->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
+ AcpiSupportInstance->Fadt3->FirmwareCtrl = (UINT32) (UINTN) AcpiSupportInstance->Facs3;\r
+ } else {\r
+ Buffer64 = (UINT64) (UINTN) AcpiSupportInstance->Facs3;\r
+ CopyMem (\r
+ &AcpiSupportInstance->Fadt3->XFirmwareCtrl,\r
+ &Buffer64,\r
+ sizeof (UINT64)\r
+ );\r
+ }\r
\r
//\r
// Checksum FADT table\r