]> git.proxmox.com Git - mirror_edk2.git/blobdiff - OvmfPkg/AcpiPlatformDxe/Qemu.c
MdeModulePkg: introduce non-discoverable device protocol
[mirror_edk2.git] / OvmfPkg / AcpiPlatformDxe / Qemu.c
index 35d667fe3aca6c63edb82a882ec645dffec6f640..90f06bba6399427af9bb8028efa3a2503a982cfd 100644 (file)
@@ -1,9 +1,9 @@
 /** @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
 **/\r
 \r
 #include "AcpiPlatform.h"\r
+#include "QemuLoader.h"\r
 #include <Library/BaseMemoryLib.h>\r
 #include <Library/MemoryAllocationLib.h>\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
@@ -200,16 +202,20 @@ typedef struct {
 } 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
@@ -246,7 +252,7 @@ PopulateFwData(
       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
@@ -326,12 +332,14 @@ GetSuspendStates (
     '\\',                   // 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
@@ -343,13 +351,13 @@ GetSuspendStates (
   //\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
@@ -368,16 +376,20 @@ GetSuspendStates (
   // 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
@@ -504,4 +516,3 @@ QemuInstallAcpiTable (
            TableKey\r
            );\r
 }\r
-\r