CoreReleaseLock (&mPropertiesTableLock);\r
}\r
\r
-/**\r
- Dump memory map.\r
-\r
- @param MemoryMap A pointer to the buffer in which firmware places\r
- the current memory map.\r
- @param MemoryMapSize Size, in bytes, of the MemoryMap buffer.\r
- @param DescriptorSize Size, in bytes, of an individual EFI_MEMORY_DESCRIPTOR.\r
-**/\r
-VOID\r
-DumpMemoryMap (\r
- IN EFI_MEMORY_DESCRIPTOR *MemoryMap,\r
- IN UINTN MemoryMapSize,\r
- IN UINTN DescriptorSize\r
- )\r
-{\r
- EFI_MEMORY_DESCRIPTOR *MemoryMapEntry;\r
- EFI_MEMORY_DESCRIPTOR *MemoryMapEnd;\r
- UINT64 MemoryBlockLength;\r
-\r
- DEBUG ((EFI_D_VERBOSE, " MemoryMap:\n"));\r
- MemoryMapEntry = MemoryMap;\r
- MemoryMapEnd = (EFI_MEMORY_DESCRIPTOR *) ((UINT8 *) MemoryMap + MemoryMapSize);\r
- while (MemoryMapEntry < MemoryMapEnd) {\r
- MemoryBlockLength = (UINT64) (EfiPagesToSize (MemoryMapEntry->NumberOfPages));\r
- DEBUG ((EFI_D_VERBOSE, " Entry(0x%02x) 0x%016lx - 0x%016lx (0x%016lx)\n", MemoryMapEntry->Type, MemoryMapEntry->PhysicalStart, MemoryMapEntry->PhysicalStart + MemoryBlockLength, MemoryMapEntry->Attribute));\r
- MemoryMapEntry = NEXT_MEMORY_DESCRIPTOR (MemoryMapEntry, DescriptorSize);\r
- }\r
-}\r
-\r
/**\r
Sort memory map entries based upon PhysicalStart, from low to high.\r
\r
return ;\r
}\r
\r
-/**\r
- Sort memory map entries whose type is EfiRuntimeServicesCode/EfiRuntimeServicesData,\r
- from high to low.\r
- This function assumes memory map is already from low to high, so it just reverts them.\r
-\r
- @param MemoryMap A pointer to the buffer in which firmware places\r
- the current memory map.\r
- @param MemoryMapSize Size, in bytes, of the MemoryMap buffer.\r
- @param DescriptorSize Size, in bytes, of an individual EFI_MEMORY_DESCRIPTOR.\r
-**/\r
-VOID\r
-RevertRuntimeMemoryMap (\r
- IN OUT EFI_MEMORY_DESCRIPTOR *MemoryMap,\r
- IN UINTN MemoryMapSize,\r
- IN UINTN DescriptorSize\r
- )\r
-{\r
- EFI_MEMORY_DESCRIPTOR *MemoryMapEntry;\r
- EFI_MEMORY_DESCRIPTOR *MemoryMapEnd;\r
- EFI_MEMORY_DESCRIPTOR TempMemoryMap;\r
-\r
- EFI_MEMORY_DESCRIPTOR *RuntimeMapEntryBegin;\r
- EFI_MEMORY_DESCRIPTOR *RuntimeMapEntryEnd;\r
-\r
- MemoryMapEntry = MemoryMap;\r
- RuntimeMapEntryBegin = NULL;\r
- RuntimeMapEntryEnd = NULL;\r
- MemoryMapEnd = (EFI_MEMORY_DESCRIPTOR *) ((UINT8 *) MemoryMap + MemoryMapSize);\r
- while ((UINTN)MemoryMapEntry < (UINTN)MemoryMapEnd) {\r
- if ((MemoryMapEntry->Type == EfiRuntimeServicesCode) ||\r
- (MemoryMapEntry->Type == EfiRuntimeServicesData)) {\r
- if (RuntimeMapEntryBegin == NULL) {\r
- RuntimeMapEntryBegin = MemoryMapEntry;\r
- }\r
- RuntimeMapEntryEnd = MemoryMapEntry;\r
- }\r
- MemoryMapEntry = NEXT_MEMORY_DESCRIPTOR (MemoryMapEntry, DescriptorSize);\r
- }\r
-\r
- MemoryMapEntry = RuntimeMapEntryBegin;\r
- MemoryMapEnd = RuntimeMapEntryEnd;\r
- while (MemoryMapEntry < MemoryMapEnd) {\r
- CopyMem (&TempMemoryMap, MemoryMapEntry, sizeof(EFI_MEMORY_DESCRIPTOR));\r
- CopyMem (MemoryMapEntry, MemoryMapEnd, sizeof(EFI_MEMORY_DESCRIPTOR));\r
- CopyMem (MemoryMapEnd, &TempMemoryMap, sizeof(EFI_MEMORY_DESCRIPTOR));\r
-\r
- MemoryMapEntry = NEXT_MEMORY_DESCRIPTOR (MemoryMapEntry, DescriptorSize);\r
- MemoryMapEnd = PREVIOUS_MEMORY_DESCRIPTOR (MemoryMapEnd, DescriptorSize);\r
- }\r
-\r
- return ;\r
-}\r
-\r
/**\r
Return the first image record, whose [ImageBase, ImageSize] covered by [Buffer, Length].\r
\r