XTLDR Rewrite #7
@ -38,7 +38,8 @@ XtEnablePaging(IN PLIST_ENTRY MemoryMappings,
|
|||||||
PLOADER_MEMORY_MAPPING Mapping;
|
PLOADER_MEMORY_MAPPING Mapping;
|
||||||
EFI_PHYSICAL_ADDRESS Address;
|
EFI_PHYSICAL_ADDRESS Address;
|
||||||
PEFI_MEMORY_MAP MemoryMap;
|
PEFI_MEMORY_MAP MemoryMap;
|
||||||
PLIST_ENTRY ListEntry;
|
PLIST_ENTRY ListEntry, ModulesList, ModulesListEntry;
|
||||||
|
PXTBL_MODULE_INFO ModuleInfo;
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
|
|
||||||
/* Allocate pages for PML4 */
|
/* Allocate pages for PML4 */
|
||||||
@ -53,6 +54,28 @@ XtEnablePaging(IN PLIST_ENTRY MemoryMappings,
|
|||||||
*PtePointer = (PVOID)(UINT_PTR)Address;
|
*PtePointer = (PVOID)(UINT_PTR)Address;
|
||||||
RtlZeroMemory(*PtePointer, EFI_PAGE_SIZE);
|
RtlZeroMemory(*PtePointer, EFI_PAGE_SIZE);
|
||||||
|
|
||||||
|
/* Get list of XTLDR modules */
|
||||||
|
ModulesList = XtLdrProtocol->Protocol.GetModulesList();
|
||||||
|
ModulesListEntry = ModulesList->Flink;
|
||||||
|
while(ModulesListEntry != ModulesList)
|
||||||
|
{
|
||||||
|
/* Get module info */
|
||||||
|
ModuleInfo = CONTAIN_RECORD(ModulesListEntry, XTBL_MODULE_INFO, Flink);
|
||||||
|
|
||||||
|
/* Map module code */
|
||||||
|
XtAddVirtualMemoryMapping(MemoryMappings, ModuleInfo->ModuleBase, ModuleInfo->ModuleBase,
|
||||||
|
EFI_SIZE_TO_PAGES(ModuleInfo->ModuleSize), LoaderFirmwareTemporary);
|
||||||
|
|
||||||
|
if(Status != STATUS_EFI_SUCCESS)
|
||||||
|
{
|
||||||
|
/* Mapping module code failed */
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Get next module */
|
||||||
|
ModulesListEntry = ModulesListEntry->Flink;
|
||||||
|
}
|
||||||
|
|
||||||
/* Map XTLDR code */
|
/* Map XTLDR code */
|
||||||
Status = XtAddVirtualMemoryMapping(MemoryMappings, ImageProtocol->ImageBase, ImageProtocol->ImageBase,
|
Status = XtAddVirtualMemoryMapping(MemoryMappings, ImageProtocol->ImageBase, ImageProtocol->ImageBase,
|
||||||
EFI_SIZE_TO_PAGES(ImageProtocol->ImageSize), LoaderFirmwareTemporary);
|
EFI_SIZE_TO_PAGES(ImageProtocol->ImageSize), LoaderFirmwareTemporary);
|
||||||
|
@ -41,7 +41,8 @@ XtEnablePaging(IN PLIST_ENTRY MemoryMappings,
|
|||||||
PEFI_MEMORY_DESCRIPTOR Descriptor;
|
PEFI_MEMORY_DESCRIPTOR Descriptor;
|
||||||
PLOADER_MEMORY_MAPPING Mapping;
|
PLOADER_MEMORY_MAPPING Mapping;
|
||||||
PEFI_MEMORY_MAP MemoryMap;
|
PEFI_MEMORY_MAP MemoryMap;
|
||||||
PLIST_ENTRY ListEntry;
|
PLIST_ENTRY ListEntry, ModulesList, ModulesListEntry;
|
||||||
|
PXTBL_MODULE_INFO ModuleInfo;
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
UINT Index;
|
UINT Index;
|
||||||
|
|
||||||
@ -151,6 +152,28 @@ XtEnablePaging(IN PLIST_ENTRY MemoryMappings,
|
|||||||
Address += EFI_PAGE_SIZE;
|
Address += EFI_PAGE_SIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Get list of XTLDR modules */
|
||||||
|
ModulesList = XtLdrProtocol->Protocol.GetModulesList();
|
||||||
|
ModulesListEntry = ModulesList->Flink;
|
||||||
|
while(ModulesListEntry != ModulesList)
|
||||||
|
{
|
||||||
|
/* Get module info */
|
||||||
|
ModuleInfo = CONTAIN_RECORD(ModulesListEntry, XTBL_MODULE_INFO, Flink);
|
||||||
|
|
||||||
|
/* Map module code */
|
||||||
|
XtAddVirtualMemoryMapping(MemoryMappings, ModuleInfo->ModuleBase, ModuleInfo->ModuleBase,
|
||||||
|
EFI_SIZE_TO_PAGES(ModuleInfo->ModuleSize), LoaderFirmwareTemporary);
|
||||||
|
|
||||||
|
if(Status != STATUS_EFI_SUCCESS)
|
||||||
|
{
|
||||||
|
/* Mapping module code failed */
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Get next module */
|
||||||
|
ModulesListEntry = ModulesListEntry->Flink;
|
||||||
|
}
|
||||||
|
|
||||||
/* Map XTLDR code */
|
/* Map XTLDR code */
|
||||||
Status = XtAddVirtualMemoryMapping(MemoryMappings, ImageProtocol->ImageBase, ImageProtocol->ImageBase,
|
Status = XtAddVirtualMemoryMapping(MemoryMappings, ImageProtocol->ImageBase, ImageProtocol->ImageBase,
|
||||||
EFI_SIZE_TO_PAGES(ImageProtocol->ImageSize), LoaderFirmwareTemporary);
|
EFI_SIZE_TO_PAGES(ImageProtocol->ImageSize), LoaderFirmwareTemporary);
|
||||||
|
Loading…
Reference in New Issue
Block a user