From 0c691a40e34469b5f20d4036b33d9ff7478a383e Mon Sep 17 00:00:00 2001 From: Rafal Kupiec Date: Mon, 29 Jan 2024 19:31:20 +0100 Subject: [PATCH] Update memory mapping related structures --- sdk/xtdk/bltypes.h | 10 ++++++++++ sdk/xtdk/xtfw.h | 5 ++--- sdk/xtdk/xtstruct.h | 1 + xtldr/arch/amd64/memory.c | 4 ++-- xtldr/memory.c | 14 +++++++------- 5 files changed, 22 insertions(+), 12 deletions(-) diff --git a/sdk/xtdk/bltypes.h b/sdk/xtdk/bltypes.h index b6b3586..91b4220 100644 --- a/sdk/xtdk/bltypes.h +++ b/sdk/xtdk/bltypes.h @@ -169,6 +169,16 @@ typedef struct _XTBL_KNOWN_BOOT_PROTOCOL EFI_GUID Guid; } XTBL_KNOWN_BOOT_PROTOCOL, *PXTBL_KNOWN_BOOT_PROTOCOL; +/* Boot Loader memory mapping information */ +typedef struct _XTBL_MEMORY_MAPPING +{ + LIST_ENTRY ListEntry; + PVOID VirtualAddress; + PVOID PhysicalAddress; + ULONGLONG NumberOfPages; + LOADER_MEMORY_TYPE MemoryType; +} XTBL_MEMORY_MAPPING, *PXTBL_MEMORY_MAPPING; + /* XTLDR Module dependencies data */ typedef struct _XTBL_MODULE_DEPS { diff --git a/sdk/xtdk/xtfw.h b/sdk/xtdk/xtfw.h index fc4ed5b..ec490e3 100644 --- a/sdk/xtdk/xtfw.h +++ b/sdk/xtdk/xtfw.h @@ -115,10 +115,9 @@ typedef struct _LOADER_INFORMATION_BLOCK typedef struct _LOADER_MEMORY_MAPPING { LIST_ENTRY ListEntry; - PVOID VirtualAddress; - PVOID PhysicalAddress; - ULONGLONG NumberOfPages; LOADER_MEMORY_TYPE MemoryType; + ULONG BasePage; + ULONG PageCount; } LOADER_MEMORY_MAPPING, *PLOADER_MEMORY_MAPPING; /* Loader provided information needed by the kernel to initialize */ diff --git a/sdk/xtdk/xtstruct.h b/sdk/xtdk/xtstruct.h index acedf60..a0a135d 100644 --- a/sdk/xtdk/xtstruct.h +++ b/sdk/xtdk/xtstruct.h @@ -281,6 +281,7 @@ typedef struct _XTBL_FRAMEBUFFER_INFORMATION XTBL_FRAMEBUFFER_INFORMATION, *PXTB typedef struct _XTBL_FRAMEBUFFER_PROTOCOL XTBL_FRAMEBUFFER_PROTOCOL, *PXTBL_FRAMEBUFFER_PROTOCOL; typedef struct _XTBL_KNOWN_BOOT_PROTOCOL XTBL_KNOWN_BOOT_PROTOCOL, *PXTBL_KNOWN_BOOT_PROTOCOL; typedef struct _XTBL_LOADER_PROTOCOL XTBL_LOADER_PROTOCOL, *PXTBL_LOADER_PROTOCOL; +typedef struct _XTBL_MEMORY_MAPPING XTBL_MEMORY_MAPPING, *PXTBL_MEMORY_MAPPING; typedef struct _XTBL_MODULE_DEPS XTBL_MODULE_DEPS, *PXTBL_MODULE_DEPS; typedef struct _XTBL_MODULE_INFO XTBL_MODULE_INFO, *PXTBL_MODULE_INFO; typedef struct _XTBL_PAGE_MAPPING XTBL_PAGE_MAPPING, *PXTBL_PAGE_MAPPING; diff --git a/xtldr/arch/amd64/memory.c b/xtldr/arch/amd64/memory.c index 0a56ba8..aa538c8 100644 --- a/xtldr/arch/amd64/memory.c +++ b/xtldr/arch/amd64/memory.c @@ -24,7 +24,7 @@ EFI_STATUS BlBuildPageMap(IN PXTBL_PAGE_MAPPING PageMap) { PLIST_ENTRY ListEntry, ModulesList, ModulesListEntry; - PLOADER_MEMORY_MAPPING Mapping; + PXTBL_MEMORY_MAPPING Mapping; PXTBL_MODULE_INFO ModuleInfo; EFI_PHYSICAL_ADDRESS Address; EFI_STATUS Status; @@ -96,7 +96,7 @@ BlBuildPageMap(IN PXTBL_PAGE_MAPPING PageMap) while(ListEntry != &PageMap->MemoryMap) { /* Take mapping from the list */ - Mapping = CONTAIN_RECORD(ListEntry, LOADER_MEMORY_MAPPING, ListEntry); + Mapping = CONTAIN_RECORD(ListEntry, XTBL_MEMORY_MAPPING, ListEntry); /* Check if virtual address is set */ if(Mapping->VirtualAddress) diff --git a/xtldr/memory.c b/xtldr/memory.c index 0b62b66..efe5952 100644 --- a/xtldr/memory.c +++ b/xtldr/memory.c @@ -194,7 +194,7 @@ PVOID BlGetVirtualAddress(IN PXTBL_PAGE_MAPPING PageMap, IN PVOID PhysicalAddress) { - PLOADER_MEMORY_MAPPING Mapping; + PXTBL_MEMORY_MAPPING Mapping; PLIST_ENTRY ListEntry; /* Iterate over memory mappings in order to find descriptor containing a physical address */ @@ -202,7 +202,7 @@ BlGetVirtualAddress(IN PXTBL_PAGE_MAPPING PageMap, while(ListEntry != &PageMap->MemoryMap) { /* Get mapping from linked list */ - Mapping = CONTAIN_RECORD(ListEntry, LOADER_MEMORY_MAPPING, ListEntry); + Mapping = CONTAIN_RECORD(ListEntry, XTBL_MEMORY_MAPPING, ListEntry); /* Make sure any virtual address is set */ if(Mapping->VirtualAddress) @@ -379,14 +379,14 @@ BlMapVirtualMemory(IN OUT PXTBL_PAGE_MAPPING PageMap, IN ULONGLONG NumberOfPages, IN LOADER_MEMORY_TYPE MemoryType) { - PLOADER_MEMORY_MAPPING Mapping1, Mapping2, Mapping3; + PXTBL_MEMORY_MAPPING Mapping1, Mapping2, Mapping3; PVOID PhysicalAddressEnd, PhysicalAddress2End; PLIST_ENTRY ListEntry, MappingListEntry; SIZE_T NumberOfMappedPages; EFI_STATUS Status; /* Allocate memory for new mapping */ - Status = BlAllocateMemoryPool(sizeof(LOADER_MEMORY_MAPPING), (PVOID *)&Mapping1); + Status = BlAllocateMemoryPool(sizeof(XTBL_MEMORY_MAPPING), (PVOID *)&Mapping1); if(Status != STATUS_EFI_SUCCESS) { /* Memory allocation failure */ @@ -407,7 +407,7 @@ BlMapVirtualMemory(IN OUT PXTBL_PAGE_MAPPING PageMap, while(ListEntry != &PageMap->MemoryMap) { /* Take a mapping from the list and calculate its end of physical address */ - Mapping2 = CONTAIN_RECORD(ListEntry, LOADER_MEMORY_MAPPING, ListEntry); + Mapping2 = CONTAIN_RECORD(ListEntry, XTBL_MEMORY_MAPPING, ListEntry); PhysicalAddress2End = (PUCHAR)Mapping2->PhysicalAddress + (Mapping2->NumberOfPages * EFI_PAGE_SIZE) - 1 ; /* Check if new mapping is a subset of an existing mapping */ @@ -436,7 +436,7 @@ BlMapVirtualMemory(IN OUT PXTBL_PAGE_MAPPING PageMap, if(NumberOfMappedPages > 0) { /* Pages associated to the mapping, allocate memory for it */ - Status = BlAllocateMemoryPool(sizeof(LOADER_MEMORY_MAPPING), (PVOID*)&Mapping3); + Status = BlAllocateMemoryPool(sizeof(XTBL_MEMORY_MAPPING), (PVOID*)&Mapping3); if(Status != STATUS_EFI_SUCCESS) { /* Memory allocation failure */ @@ -472,7 +472,7 @@ BlMapVirtualMemory(IN OUT PXTBL_PAGE_MAPPING PageMap, if(NumberOfMappedPages > 0) { /* Pages associated to the mapping, allocate memory for it */ - Status = BlAllocateMemoryPool(sizeof(LOADER_MEMORY_MAPPING), (PVOID*)&Mapping3); + Status = BlAllocateMemoryPool(sizeof(XTBL_MEMORY_MAPPING), (PVOID*)&Mapping3); if(Status != STATUS_EFI_SUCCESS) { /* Memory allocation failure */