]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Core/PiSmmCore/Pool.c
MdeModulePkg PiSmmCore: Update comments in InitializeMemoryServices
[mirror_edk2.git] / MdeModulePkg / Core / PiSmmCore / Pool.c
index 53ef3e07797387590aad169136f36b0704d66842..aae6a6e2173088a7c055f485a7ae598d7b8024f2 100644 (file)
@@ -42,12 +42,12 @@ SmmInitializeMemoryServices (
   //\r
   // Initialize Pool list\r
   //\r
-  for (Index = sizeof (mSmmPoolLists) / sizeof (*mSmmPoolLists); Index > 0;) {\r
+  for (Index = ARRAY_SIZE (mSmmPoolLists); Index > 0;) {\r
     InitializeListHead (&mSmmPoolLists[--Index]);\r
   }\r
   CurrentSmramRangesIndex = 0;\r
   //\r
-  // If Loadding Module At fixed Address feature is enabled, cache the SMRAM base here\r
+  // If Loading Module At fixed Address feature is enabled, cache the SMRAM base here\r
   //\r
   if (PcdGet64(PcdLoadModuleAtFixAddressEnable) != 0) {\r
     //\r
@@ -85,9 +85,28 @@ SmmInitializeMemoryServices (
     SmramRanges[CurrentSmramRangesIndex].PhysicalSize = SmramRanges[CurrentSmramRangesIndex].PhysicalSize - SmmCodeSize;\r
   }\r
   //\r
-  // Initialize free SMRAM regions\r
+  // Add Free SMRAM regions\r
+  // Need add Free memory at first, to let gSmmMemoryMap record data\r
   //\r
   for (Index = 0; Index < SmramRangeCount; Index++) {\r
+    if ((SmramRanges[Index].RegionState & (EFI_ALLOCATED | EFI_NEEDS_TESTING | EFI_NEEDS_ECC_INITIALIZATION)) != 0) {\r
+      continue;\r
+    }\r
+    SmmAddMemoryRegion (\r
+      SmramRanges[Index].CpuStart,\r
+      SmramRanges[Index].PhysicalSize,\r
+      EfiConventionalMemory,\r
+      SmramRanges[Index].RegionState\r
+      );\r
+  }\r
+\r
+  //\r
+  // Add the allocated SMRAM regions\r
+  //\r
+  for (Index = 0; Index < SmramRangeCount; Index++) {\r
+    if ((SmramRanges[Index].RegionState & (EFI_ALLOCATED | EFI_NEEDS_TESTING | EFI_NEEDS_ECC_INITIALIZATION)) == 0) {\r
+      continue;\r
+    }\r
     SmmAddMemoryRegion (\r
       SmramRanges[Index].CpuStart,\r
       SmramRanges[Index].PhysicalSize,\r