Anonymous user
Detecting Memory (x86): Difference between revisions
Jump to navigation
Jump to search
→Getting an UEFI Memory Map
[unchecked revision] | [unchecked revision] |
m (Added UEFI Memory Map code example) |
|||
Line 527:
===Getting an UEFI Memory Map===
<source lang="c">
EFI_STATUS Status = EFI_SUCCESS;
EFI_MEMORY_DESCRIPTOR
UINTN EfiMemoryMapSize;▼
UINTN
UINTN EfiMapKey;
UINTN EfiDescriptorSize;▼
UINTN EfiDescriptorSize;
UINT32 EfiDescriptorVersion;▼
UINT32 EfiDescriptorVersion;
EfiMemoryMapSize = sizeof(EFI_MEMORY_DESCRIPTOR) * 31;
//▼
get_map:
EfiMemoryMapSize += sizeof(EFI_MEMORY_DESCRIPTOR);
Status = uefi_call_wrapper(BS->AllocatePool, 3, EfiLoaderData, EfiMemoryMapSize, (void
if (Status != EFI_SUCCESS) {
Print(L"ERROR: Failed to allocate pool for memory map");
Status = gBS->GetMemoryMap (▼
return Status;
&
ASSERT (Status == EFI_BUFFER_TOO_SMALL);▼
if (Status != EFI_SUCCESS) {
uefi_call_wrapper(BS->FreePool, 1, (void *) EfiMemoryMap);▼
goto get_map;
}
Print(L"ERROR: Failed to get memory map");
▲ &EfiDescriptorSize,
▲ &EfiDescriptorVersion
▲ FreePool (EfiMemoryMap);
}
//
// Get descriptors
//
EFI_MEMORY_DESCRIPTOR
do {
// ... do something with EfiEntry ...
EfiEntry
} while ((UINT8 *) EfiEntry < (UINT8 *) EfiMemoryMap + EfiMemoryMapSize);
return Status;
}
</source>
|