PI1.4: Updates DxeCore to add all EfiGcdMemoryTypeReserved memory
into UEFI memory map.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Liming Gao <liming....@intel.com>
Reviewed-by: Star Zeng <star.z...@intel.com>
---
 MdeModulePkg/Core/Dxe/Mem/Page.c | 63 +++++++++++++++++++---------------------
 1 file changed, 30 insertions(+), 33 deletions(-)

diff --git a/MdeModulePkg/Core/Dxe/Mem/Page.c b/MdeModulePkg/Core/Dxe/Mem/Page.c
index 84ebbca..bf3be96 100644
--- a/MdeModulePkg/Core/Dxe/Mem/Page.c
+++ b/MdeModulePkg/Core/Dxe/Mem/Page.c
@@ -1526,11 +1526,11 @@ CoreGetMemoryMap (
   )
 {
   EFI_STATUS                        Status;
   UINTN                             Size;
   UINTN                             BufferSize;
-  UINTN                             NumberOfRuntimeEntries;
+  UINTN                             NumberOfEntries;
   LIST_ENTRY                        *Link;
   MEMORY_MAP                        *Entry;
   EFI_GCD_MAP_ENTRY                 *GcdMapEntry;
   EFI_MEMORY_TYPE                   Type;
   EFI_MEMORY_DESCRIPTOR             *MemoryMapStart;
@@ -1543,20 +1543,19 @@ CoreGetMemoryMap (
   }
 
   CoreAcquireGcdMemoryLock ();
 
   //
-  // Count the number of Reserved and MMIO entries that are marked for runtime 
use
+  // Count the number of Reserved and runtime MMIO entries
   //
-  NumberOfRuntimeEntries = 0;
+  NumberOfEntries = 0;
   for (Link = mGcdMemorySpaceMap.ForwardLink; Link != &mGcdMemorySpaceMap; 
Link = Link->ForwardLink) {
     GcdMapEntry = CR (Link, EFI_GCD_MAP_ENTRY, Link, EFI_GCD_MAP_SIGNATURE);
     if ((GcdMapEntry->GcdMemoryType == EfiGcdMemoryTypeReserved) ||
-        (GcdMapEntry->GcdMemoryType == EfiGcdMemoryTypeMemoryMappedIo)) {
-      if ((GcdMapEntry->Attributes & EFI_MEMORY_RUNTIME) == 
EFI_MEMORY_RUNTIME) {
-        NumberOfRuntimeEntries++;
-      }
+        ((GcdMapEntry->GcdMemoryType == EfiGcdMemoryTypeMemoryMappedIo) &&
+        ((GcdMapEntry->Attributes & EFI_MEMORY_RUNTIME) == 
EFI_MEMORY_RUNTIME))) {
+      NumberOfEntries++;
     }
   }
 
   Size = sizeof (EFI_MEMORY_DESCRIPTOR);
 
@@ -1578,11 +1577,11 @@ CoreGetMemoryMap (
   CoreAcquireMemoryLock ();
 
   //
   // Compute the buffer size needed to fit the entire map
   //
-  BufferSize = Size * NumberOfRuntimeEntries;
+  BufferSize = Size * NumberOfEntries;
   for (Link = gMemoryMap.ForwardLink; Link != &gMemoryMap; Link = 
Link->ForwardLink) {
     BufferSize += Size;
   }
 
   if (*MemoryMapSize < BufferSize) {
@@ -1643,37 +1642,35 @@ CoreGetMemoryMap (
   }
 
   for (Link = mGcdMemorySpaceMap.ForwardLink; Link != &mGcdMemorySpaceMap; 
Link = Link->ForwardLink) {
     GcdMapEntry = CR (Link, EFI_GCD_MAP_ENTRY, Link, EFI_GCD_MAP_SIGNATURE);
     if ((GcdMapEntry->GcdMemoryType == EfiGcdMemoryTypeReserved) ||
-        (GcdMapEntry->GcdMemoryType == EfiGcdMemoryTypeMemoryMappedIo)) {
-      if ((GcdMapEntry->Attributes & EFI_MEMORY_RUNTIME) == 
EFI_MEMORY_RUNTIME) {
-        // 
-        // Create EFI_MEMORY_DESCRIPTOR for every Reserved and MMIO GCD entries
-        // that are marked for runtime use
-        //
-        MemoryMap->PhysicalStart = GcdMapEntry->BaseAddress;
-        MemoryMap->VirtualStart  = 0;
-        MemoryMap->NumberOfPages = RShiftU64 ((GcdMapEntry->EndAddress - 
GcdMapEntry->BaseAddress + 1), EFI_PAGE_SHIFT);
-        MemoryMap->Attribute     = GcdMapEntry->Attributes & 
~EFI_MEMORY_PORT_IO;
-
-        if (GcdMapEntry->GcdMemoryType == EfiGcdMemoryTypeReserved) {
-          MemoryMap->Type = EfiReservedMemoryType;
-        } else if (GcdMapEntry->GcdMemoryType == 
EfiGcdMemoryTypeMemoryMappedIo) {
-          if ((GcdMapEntry->Attributes & EFI_MEMORY_PORT_IO) == 
EFI_MEMORY_PORT_IO) {
-            MemoryMap->Type = EfiMemoryMappedIOPortSpace;
-          } else {
-            MemoryMap->Type = EfiMemoryMappedIO;
-          }
+        ((GcdMapEntry->GcdMemoryType == EfiGcdMemoryTypeMemoryMappedIo) &&
+        ((GcdMapEntry->Attributes & EFI_MEMORY_RUNTIME) == 
EFI_MEMORY_RUNTIME))) {
+      // 
+      // Create EFI_MEMORY_DESCRIPTOR for every Reserved and runtime MMIO GCD 
entries
+      //
+      MemoryMap->PhysicalStart = GcdMapEntry->BaseAddress;
+      MemoryMap->VirtualStart  = 0;
+      MemoryMap->NumberOfPages = RShiftU64 ((GcdMapEntry->EndAddress - 
GcdMapEntry->BaseAddress + 1), EFI_PAGE_SHIFT);
+      MemoryMap->Attribute     = GcdMapEntry->Attributes & ~EFI_MEMORY_PORT_IO;
+
+      if (GcdMapEntry->GcdMemoryType == EfiGcdMemoryTypeReserved) {
+        MemoryMap->Type = EfiReservedMemoryType;
+      } else if (GcdMapEntry->GcdMemoryType == EfiGcdMemoryTypeMemoryMappedIo) 
{
+        if ((GcdMapEntry->Attributes & EFI_MEMORY_PORT_IO) == 
EFI_MEMORY_PORT_IO) {
+          MemoryMap->Type = EfiMemoryMappedIOPortSpace;
+        } else {
+          MemoryMap->Type = EfiMemoryMappedIO;
         }
-
-        //
-        // Check to see if the new Memory Map Descriptor can be merged with an 
-        // existing descriptor if they are adjacent and have the same 
attributes
-        //
-        MemoryMap = MergeMemoryMapDescriptor (MemoryMapStart, MemoryMap, Size);
       }
+
+      //
+      // Check to see if the new Memory Map Descriptor can be merged with an 
+      // existing descriptor if they are adjacent and have the same attributes
+      //
+      MemoryMap = MergeMemoryMapDescriptor (MemoryMapStart, MemoryMap, Size);
     }
   }
 
   //
   // Compute the size of the buffer actually used after all memory map 
descriptor merge operations
-- 
1.9.5.msysgit.0



------------------------------------------------------------------------------
One dashboard for servers and applications across Physical-Virtual-Cloud 
Widest out-of-the-box monitoring support with 50+ applications
Performance metrics, stats and reports that give you Actionable Insights
Deep dive visibility with transaction tracing using APM Insight.
http://ad.doubleclick.net/ddm/clk/290420510;117567292;y
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-devel

Reply via email to