lindows/lcrash/efi/memmap.c

34 lines
1.1 KiB
C

#include "memmap.h"
struct EfiMemoryDescription *StoredMemoryMap;
u32 StoredMemoryMapEntryCount = 0;
u32 StoredMemoryMapEntrySize = 0;
void EfiLoadStoredMemoryMap(
struct EfiMemoryDescription* MemoryMap,
u32 MemoryMapEntryCount,
u32 MemoryMapEntrySize
) {
StoredMemoryMap = MemoryMap;
StoredMemoryMapEntryCount = MemoryMapEntryCount;
StoredMemoryMapEntrySize = MemoryMapEntrySize;
}
/**
* Translate a pointer using what we can recover from the UEFI memory map, may return something invalid.
*/
void* EfiTranslatePointer(void* FirmwarePointer) {
// Scan the memory map for where our thing is
for (int i = 0; i < StoredMemoryMapEntryCount; i++) {
struct EfiMemoryDescription* Entry = (struct EfiMemoryDescription*)((void*)StoredMemoryMap + i * StoredMemoryMapEntrySize);
if (FirmwarePointer >= Entry->VirtualStart &&
FirmwarePointer < Entry->VirtualStart + 0x1000 * Entry->NumberOfPages) {
return FirmwarePointer - Entry->VirtualStart + Entry->PhysicalStart;
}
}
// Well, we tried
return -1;
}