]> git.proxmox.com Git - mirror_edk2.git/commitdiff
MdeModulePkg: Add Memory Capabilities for MMIO and Reserved Range
authorLiming Gao <liming.gao@intel.com>
Thu, 25 Jun 2015 03:29:11 +0000 (03:29 +0000)
committerlgao4 <lgao4@Edk2>
Thu, 25 Jun 2015 03:29:11 +0000 (03:29 +0000)
UEFI2.5 spec, GetMemoryMap(), says:
Attribute: Attributes of the memory region that describe the bit mask
of capabilities for that memory region, and not necessarily the current
settings for that memory region.
But, GetMemoryMap() implementation doesn't append memory capabilities
for MMIO and Reserved memory range. This will break UEFI2.5 Properties
Table feature, because Properties Table need return EFI_MEMORY_RO or
EFI_MEMORY_XP capabilities for OS.

This patch appends memory capabilities for those memory range.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Liming Gao <liming.gao@intel.com>
Reviewed-by: Jiewen Yao <jiewen.yao@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@17703 6f19259b-4bc3-4df7-8a09-765794883524

MdeModulePkg/Core/Dxe/Mem/Page.c

index f2efaf12787b072b10e273d40e82f38acc42e772..a28552934f6baba5d2402b241c23edfd60e3e917 100644 (file)
@@ -1665,7 +1665,9 @@ CoreGetMemoryMap (
       MemoryMap->PhysicalStart = GcdMapEntry->BaseAddress;\r
       MemoryMap->VirtualStart  = 0;\r
       MemoryMap->NumberOfPages = RShiftU64 ((GcdMapEntry->EndAddress - GcdMapEntry->BaseAddress + 1), EFI_PAGE_SHIFT);\r
-      MemoryMap->Attribute     = GcdMapEntry->Attributes & ~EFI_MEMORY_PORT_IO;\r
+      MemoryMap->Attribute     = (GcdMapEntry->Attributes & ~EFI_MEMORY_PORT_IO) | \r
+                                (GcdMapEntry->Capabilities & (EFI_MEMORY_RP | EFI_MEMORY_WP | EFI_MEMORY_XP | EFI_MEMORY_RO |\r
+                                EFI_MEMORY_UC | EFI_MEMORY_UCE | EFI_MEMORY_WC | EFI_MEMORY_WT | EFI_MEMORY_WB));\r
 \r
       if (GcdMapEntry->GcdMemoryType == EfiGcdMemoryTypeReserved) {\r
         MemoryMap->Type = EfiReservedMemoryType;\r
@@ -1691,7 +1693,9 @@ CoreGetMemoryMap (
       MemoryMap->PhysicalStart = GcdMapEntry->BaseAddress;\r
       MemoryMap->VirtualStart  = 0;\r
       MemoryMap->NumberOfPages = RShiftU64 ((GcdMapEntry->EndAddress - GcdMapEntry->BaseAddress + 1), EFI_PAGE_SHIFT);\r
-      MemoryMap->Attribute     = GcdMapEntry->Attributes | EFI_MEMORY_NV;\r
+      MemoryMap->Attribute     = GcdMapEntry->Attributes | EFI_MEMORY_NV | \r
+                                (GcdMapEntry->Capabilities & (EFI_MEMORY_RP | EFI_MEMORY_WP | EFI_MEMORY_XP | EFI_MEMORY_RO |\r
+                                EFI_MEMORY_UC | EFI_MEMORY_UCE | EFI_MEMORY_WC | EFI_MEMORY_WT | EFI_MEMORY_WB));\r
       MemoryMap->Type          = EfiPersistentMemory;\r
       \r
       //\r