OvmfPkg: Add section of memory to use for PEI on S3 resume
[mirror_edk2.git] / OvmfPkg / PlatformPei / MemDetect.c
index 29df5370b05e68ca00c0ebd98239c22778991876..11c79687c435da5fcccaa962660b5119540aba39 100644 (file)
@@ -99,16 +99,21 @@ PublishPeiMemory (
   UINT64                      MemorySize;\r
   UINT64                      LowerMemorySize;\r
 \r
-  LowerMemorySize = GetSystemMemorySizeBelow4gb ();\r
-\r
-  //\r
-  // Determine the range of memory to use during PEI\r
-  //\r
-  MemoryBase = PcdGet32 (PcdOvmfDxeMemFvBase) + PcdGet32 (PcdOvmfDxeMemFvSize);\r
-  MemorySize = LowerMemorySize - MemoryBase;\r
-  if (MemorySize > SIZE_64MB) {\r
-    MemoryBase = LowerMemorySize - SIZE_64MB;\r
-    MemorySize = SIZE_64MB;\r
+  if (mBootMode == BOOT_ON_S3_RESUME) {\r
+    MemoryBase = PcdGet32 (PcdS3AcpiReservedMemoryBase);\r
+    MemorySize = PcdGet32 (PcdS3AcpiReservedMemorySize);\r
+  } else {\r
+    LowerMemorySize = GetSystemMemorySizeBelow4gb ();\r
+\r
+    //\r
+    // Determine the range of memory to use during PEI\r
+    //\r
+    MemoryBase = PcdGet32 (PcdOvmfDxeMemFvBase) + PcdGet32 (PcdOvmfDxeMemFvSize);\r
+    MemorySize = LowerMemorySize - MemoryBase;\r
+    if (MemorySize > SIZE_64MB) {\r
+      MemoryBase = LowerMemorySize - SIZE_64MB;\r
+      MemorySize = SIZE_64MB;\r
+    }\r
   }\r
 \r
   //\r
@@ -173,4 +178,15 @@ InitializeRamRegions (
   } else {\r
     XenPublishRamRegions ();\r
   }\r
+\r
+  if (mS3Supported && mBootMode != BOOT_ON_S3_RESUME) {\r
+    //\r
+    // This is the memory range that will be used for PEI on S3 resume\r
+    //\r
+    BuildMemoryAllocationHob (\r
+      (EFI_PHYSICAL_ADDRESS)(UINTN) PcdGet32 (PcdS3AcpiReservedMemoryBase),\r
+      (UINT64)(UINTN) PcdGet32 (PcdS3AcpiReservedMemorySize),\r
+      EfiACPIMemoryNVS\r
+      );\r
+  }\r
 }\r