/** @file\r
OVMF ACPI QEMU support\r
\r
- Copyright (c) 2008 - 2012, Intel Corporation. All rights reserved.<BR>\r
+ Copyright (c) 2008 - 2014, Intel Corporation. All rights reserved.<BR>\r
\r
- Copyright (C) 2012, Red Hat, Inc.\r
+ Copyright (C) 2012-2014, Red Hat, Inc.\r
\r
This program and the accompanying materials\r
are licensed and made available under the terms and conditions of the BSD License\r
#include <Library/QemuFwCfgLib.h>\r
#include <Library/DxeServicesTableLib.h>\r
#include <Library/PcdLib.h>\r
+#include <Library/OrderedCollectionLib.h>\r
#include <IndustryStandard/Acpi.h>\r
\r
BOOLEAN\r
} FIRMWARE_DATA;\r
\r
typedef struct {\r
- UINT8 NameOp;\r
- UINT8 RootChar;\r
- UINT8 NameChar[4];\r
- UINT8 PackageOp;\r
- UINT8 PkgLength;\r
- UINT8 NumElements;\r
- UINT8 DWordPrefix;\r
- UINT8 Pm1aCntSlpTyp;\r
- UINT8 Pm1bCntSlpTyp;\r
- UINT8 Reserved[2];\r
+ UINT8 BytePrefix;\r
+ UINT8 ByteValue;\r
+} AML_BYTE;\r
+\r
+typedef struct {\r
+ UINT8 NameOp;\r
+ UINT8 RootChar;\r
+ UINT8 NameChar[4];\r
+ UINT8 PackageOp;\r
+ UINT8 PkgLength;\r
+ UINT8 NumElements;\r
+ AML_BYTE Pm1aCntSlpTyp;\r
+ AML_BYTE Pm1bCntSlpTyp;\r
+ AML_BYTE Reserved[2];\r
} SYSTEM_STATE_PACKAGE;\r
\r
#pragma pack()\r
Desc = &AllDesc[CurDesc];\r
ExclTop = Desc->BaseAddress + Desc->Length;\r
\r
- if (ExclTop <= BASE_4GB) {\r
+ if (ExclTop <= (UINT64) PcdGet32 (PcdOvmfFdBaseAddress)) {\r
switch (Desc->GcdMemoryType) {\r
case EfiGcdMemoryTypeNonExistent:\r
break;\r
'\\', // RootChar\r
{ '_', 'S', 'x', '_' }, // NameChar[4]\r
0x12, // PackageOp\r
- 0x07, // PkgLength\r
- 0x01, // NumElements\r
- 0x0c, // DWordPrefix\r
- 0x00, // Pm1aCntSlpTyp\r
- 0x00, // Pm1bCntSlpTyp -- we don't support it\r
- { 0x00, 0x00 } // Reserved\r
+ 0x0A, // PkgLength\r
+ 0x04, // NumElements\r
+ { 0x0A, 0x00 }, // Pm1aCntSlpTyp\r
+ { 0x0A, 0x00 }, // Pm1bCntSlpTyp -- we don't support it\r
+ { // Reserved[2]\r
+ { 0x0A, 0x00 },\r
+ { 0x0A, 0x00 }\r
+ }\r
};\r
RETURN_STATUS Status;\r
FIRMWARE_CONFIG_ITEM FwCfgItem;\r
//\r
*SuspendToRamSize = sizeof Template;\r
CopyMem (SuspendToRam, &Template, sizeof Template);\r
- SuspendToRam->NameChar[2] = '3'; // S3\r
- SuspendToRam->Pm1aCntSlpTyp = 1; // PIIX4: STR\r
+ SuspendToRam->NameChar[2] = '3'; // S3\r
+ SuspendToRam->Pm1aCntSlpTyp.ByteValue = 1; // PIIX4: STR\r
\r
*SuspendToDiskSize = sizeof Template;\r
CopyMem (SuspendToDisk, &Template, sizeof Template);\r
- SuspendToDisk->NameChar[2] = '4'; // S4\r
- SuspendToDisk->Pm1aCntSlpTyp = 2; // PIIX4: POSCL\r
+ SuspendToDisk->NameChar[2] = '4'; // S4\r
+ SuspendToDisk->Pm1aCntSlpTyp.ByteValue = 2; // PIIX4: POSCL\r
\r
//\r
// check for overrides\r
// value to be written to the PM control register's SUS_TYP bits.\r
//\r
if (SystemStates[3] & BIT7) {\r
- SuspendToRam->Pm1aCntSlpTyp = SystemStates[3] & (BIT2 | BIT1 | BIT0);\r
- DEBUG ((DEBUG_INFO, "ACPI S3 value: %d\n", SuspendToRam->Pm1aCntSlpTyp));\r
+ SuspendToRam->Pm1aCntSlpTyp.ByteValue =\r
+ SystemStates[3] & (BIT2 | BIT1 | BIT0);\r
+ DEBUG ((DEBUG_INFO, "ACPI S3 value: %d\n",\r
+ SuspendToRam->Pm1aCntSlpTyp.ByteValue));\r
} else {\r
*SuspendToRamSize = 0;\r
DEBUG ((DEBUG_INFO, "ACPI S3 disabled\n"));\r
}\r
\r
if (SystemStates[4] & BIT7) {\r
- SuspendToDisk->Pm1aCntSlpTyp = SystemStates[4] & (BIT2 | BIT1 | BIT0);\r
- DEBUG ((DEBUG_INFO, "ACPI S4 value: %d\n", SuspendToDisk->Pm1aCntSlpTyp));\r
+ SuspendToDisk->Pm1aCntSlpTyp.ByteValue =\r
+ SystemStates[4] & (BIT2 | BIT1 | BIT0);\r
+ DEBUG ((DEBUG_INFO, "ACPI S4 value: %d\n",\r
+ SuspendToDisk->Pm1aCntSlpTyp.ByteValue));\r
} else {\r
*SuspendToDiskSize = 0;\r
DEBUG ((DEBUG_INFO, "ACPI S4 disabled\n"));\r
TableKey\r
);\r
}\r
-\r