diff --git a/boot/xtldr/arch/amd64/memory.cc b/boot/xtldr/arch/amd64/memory.cc index 3f8f049..ebe6f0b 100644 --- a/boot/xtldr/arch/amd64/memory.cc +++ b/boot/xtldr/arch/amd64/memory.cc @@ -45,7 +45,7 @@ Memory::BuildPageMap(IN PXTBL_PAGE_MAPPING PageMap, } /* Add new memory mapping for the page map itself */ - Status = MapVirtualMemory(PageMap, (PVOID)(UINT_PTR)Address, (PVOID)(UINT_PTR)Address, 1, LoaderMemoryData); + Status = MapVirtualMemory(PageMap, Address, Address, 1, LoaderMemoryData); if(Status != STATUS_EFI_SUCCESS) { /* Memory mapping failure */ @@ -65,7 +65,7 @@ Memory::BuildPageMap(IN PXTBL_PAGE_MAPPING PageMap, } /* Map the trampoline code area */ - Status = MapVirtualMemory(PageMap, (PVOID)MM_TRAMPOLINE_ADDRESS,(PVOID)MM_TRAMPOLINE_ADDRESS, + Status = MapVirtualMemory(PageMap, MM_TRAMPOLINE_ADDRESS,MM_TRAMPOLINE_ADDRESS, 1, LoaderFirmwareTemporary); if(Status != STATUS_EFI_SUCCESS) { @@ -82,7 +82,7 @@ Memory::BuildPageMap(IN PXTBL_PAGE_MAPPING PageMap, ModuleInfo = CONTAIN_RECORD(ModulesListEntry, XTBL_MODULE_INFO, Flink); /* Map module code */ - Status = MapVirtualMemory(PageMap, ModuleInfo->ModuleBase, ModuleInfo->ModuleBase, + Status = MapVirtualMemory(PageMap, (ULONGLONG)ModuleInfo->ModuleBase, (ULONGLONG)ModuleInfo->ModuleBase, EFI_SIZE_TO_PAGES(ModuleInfo->ModuleSize), LoaderFirmwareTemporary); /* Check if mapping succeeded */ @@ -103,7 +103,7 @@ Memory::BuildPageMap(IN PXTBL_PAGE_MAPPING PageMap, if(LoaderBase && LoaderSize) { /* Map boot loader code as well */ - Status = MapVirtualMemory(PageMap, LoaderBase, LoaderBase, + Status = MapVirtualMemory(PageMap, (ULONGLONG)LoaderBase, (ULONGLONG)LoaderBase, EFI_SIZE_TO_PAGES(LoaderSize), LoaderFirmwareTemporary); if(Status != STATUS_EFI_SUCCESS) { @@ -201,7 +201,7 @@ Memory::GetNextPageTable(IN PXTBL_PAGE_MAPPING PageMap, } /* Add new memory mapping */ - Status = MapVirtualMemory(PageMap, (PVOID)(UINT_PTR)Address, (PVOID)(UINT_PTR)Address, 1, LoaderMemoryData); + Status = MapVirtualMemory(PageMap, Address, Address, 1, LoaderMemoryData); if(Status != STATUS_EFI_SUCCESS) { /* Memory mapping failure */ @@ -247,9 +247,9 @@ Memory::GetNextPageTable(IN PXTBL_PAGE_MAPPING PageMap, XTCDECL EFI_STATUS Memory::MapPage(IN PXTBL_PAGE_MAPPING PageMap, - IN ULONG_PTR VirtualAddress, - IN ULONG_PTR PhysicalAddress, - IN ULONG NumberOfPages) + IN ULONGLONG VirtualAddress, + IN ULONGLONG PhysicalAddress, + IN ULONGLONG NumberOfPages) { PVOID Pml1, Pml2, Pml3, Pml4, Pml5; SIZE_T Pml1Entry, Pml2Entry, Pml3Entry, Pml4Entry, Pml5Entry; diff --git a/boot/xtldr/arch/i686/memory.cc b/boot/xtldr/arch/i686/memory.cc index a194d2d..a6c65da 100644 --- a/boot/xtldr/arch/i686/memory.cc +++ b/boot/xtldr/arch/i686/memory.cc @@ -93,7 +93,7 @@ Memory::BuildPageMap(IN PXTBL_PAGE_MAPPING PageMap, } /* Map the trampoline code area */ - Status = MapVirtualMemory(PageMap, (PVOID)MM_TRAMPOLINE_ADDRESS,(PVOID)MM_TRAMPOLINE_ADDRESS, + Status = MapVirtualMemory(PageMap, MM_TRAMPOLINE_ADDRESS,MM_TRAMPOLINE_ADDRESS, 1, LoaderFirmwareTemporary); if(Status != STATUS_EFI_SUCCESS) { @@ -110,7 +110,7 @@ Memory::BuildPageMap(IN PXTBL_PAGE_MAPPING PageMap, ModuleInfo = CONTAIN_RECORD(ModulesListEntry, XTBL_MODULE_INFO, Flink); /* Map module code */ - Status = MapVirtualMemory(PageMap, ModuleInfo->ModuleBase, ModuleInfo->ModuleBase, + Status = MapVirtualMemory(PageMap, (ULONGLONG)ModuleInfo->ModuleBase, (ULONGLONG)ModuleInfo->ModuleBase, EFI_SIZE_TO_PAGES(ModuleInfo->ModuleSize), LoaderFirmwareTemporary); /* Check if mapping succeeded */ @@ -131,7 +131,7 @@ Memory::BuildPageMap(IN PXTBL_PAGE_MAPPING PageMap, if(LoaderBase && LoaderSize) { /* Map boot loader code as well */ - Status = MapVirtualMemory(PageMap, LoaderBase, LoaderBase, + Status = MapVirtualMemory(PageMap, (ULONGLONG)LoaderBase, (ULONGLONG)LoaderBase, EFI_SIZE_TO_PAGES(LoaderSize), LoaderFirmwareTemporary); if(Status != STATUS_EFI_SUCCESS) { @@ -252,7 +252,7 @@ Memory::GetNextPageTable(IN PXTBL_PAGE_MAPPING PageMap, } /* Add new memory mapping */ - Status = MapVirtualMemory(PageMap, NULLPTR, (PVOID)(UINT_PTR)Address, 1, LoaderMemoryData); + Status = MapVirtualMemory(PageMap, (ULONGLONG)NULLPTR, Address, 1, LoaderMemoryData); if(Status != STATUS_EFI_SUCCESS) { /* Memory mapping failure */ @@ -313,9 +313,9 @@ Memory::GetNextPageTable(IN PXTBL_PAGE_MAPPING PageMap, XTCDECL EFI_STATUS Memory::MapPage(IN PXTBL_PAGE_MAPPING PageMap, - IN ULONG_PTR VirtualAddress, - IN ULONG_PTR PhysicalAddress, - IN ULONG NumberOfPages) + IN ULONGLONG VirtualAddress, + IN ULONGLONG PhysicalAddress, + IN ULONGLONG NumberOfPages) { SIZE_T PageFrameNumber; PVOID Pml1, Pml2, Pml3; diff --git a/boot/xtldr/includes/xtldr.hh b/boot/xtldr/includes/xtldr.hh index c8f71bd..cb91068 100644 --- a/boot/xtldr/includes/xtldr.hh +++ b/boot/xtldr/includes/xtldr.hh @@ -180,12 +180,12 @@ class Memory IN OUT PVOID *MemoryMapAddress, IN PBL_GET_MEMTYPE_ROUTINE GetMemoryTypeRoutine); STATIC XTCDECL EFI_STATUS MapPage(IN PXTBL_PAGE_MAPPING PageMap, - IN ULONG_PTR VirtualAddress, - IN ULONG_PTR PhysicalAddress, - IN ULONG NumberOfPages); + IN ULONGLONG VirtualAddress, + IN ULONGLONG PhysicalAddress, + IN ULONGLONG NumberOfPages); STATIC XTCDECL EFI_STATUS MapVirtualMemory(IN OUT PXTBL_PAGE_MAPPING PageMap, - IN PVOID VirtualAddress, - IN PVOID PhysicalAddress, + IN ULONGLONG VirtualAddress, + IN ULONGLONG PhysicalAddress, IN ULONGLONG NumberOfPages, IN LOADER_MEMORY_TYPE MemoryType); STATIC XTCDECL PVOID PhysicalAddressToVirtual(IN PVOID PhysicalAddress, diff --git a/boot/xtldr/memory.cc b/boot/xtldr/memory.cc index 91ff66d..89b9809 100644 --- a/boot/xtldr/memory.cc +++ b/boot/xtldr/memory.cc @@ -334,20 +334,10 @@ Memory::MapEfiMemory(IN OUT PXTBL_PAGE_MAPPING PageMap, LOADER_MEMORY_TYPE MemoryType; PEFI_MEMORY_MAP MemoryMap; SIZE_T DescriptorCount; - PUCHAR VirtualAddress; + ULONGLONG MaxAddress; EFI_STATUS Status; SIZE_T Index; - /* Set virtual address as specified in argument */ - VirtualAddress = (PUCHAR)*MemoryMapAddress; - - /* Check if custom memory type routine is specified */ - if(GetMemoryTypeRoutine == NULLPTR) - { - /* Use default memory type routine */ - GetMemoryTypeRoutine = GetLoaderMemoryType; - } - /* Allocate and zero-fill buffer for EFI memory map */ AllocatePool(sizeof(EFI_MEMORY_MAP), (PVOID*)&MemoryMap); RTL::Memory::ZeroMemory(MemoryMap, sizeof(EFI_MEMORY_MAP)); @@ -367,8 +357,37 @@ Memory::MapEfiMemory(IN OUT PXTBL_PAGE_MAPPING PageMap, /* Iterate through all descriptors from the memory map */ for(Index = 0; Index < DescriptorCount; Index++) { - /* Make sure descriptor does not start beyond lowest physical page */ - if(Descriptor->PhysicalStart <= MAXUINT_PTR) + /* Check page map level */ + if(PageMap->PageMapLevel == 2) + { + /* Limit physical address to 4GB in legacy mode */ + MaxAddress = 0xFFFFFFFF; + } + else if(PageMap->PageMapLevel == 3) + { + /* Limit physical address to 64GB in PAE mode */ + MaxAddress = 0xFFFFFFFFF; + } + + /* Check page map level */ + if(PageMap->PageMapLevel == 2 || PageMap->PageMapLevel == 3) + { + /* Check if physical address starts beyond 4GB */ + if(Descriptor->PhysicalStart > MaxAddress) + { + /* Go to the next descriptor */ + Descriptor = (PEFI_MEMORY_DESCRIPTOR)((PUCHAR)Descriptor + MemoryMap->DescriptorSize); + continue; + } + + /* Check if memory descriptor exceeds the lowest physical page */ + if(Descriptor->PhysicalStart + (Descriptor->NumberOfPages << EFI_PAGE_SHIFT) > MaxAddress) + { + /* Truncate memory descriptor to the 4GB */ + Descriptor->NumberOfPages = (((ULONGLONG)MaxAddress) - Descriptor->PhysicalStart) >> EFI_PAGE_SHIFT; + } + } + { /* Skip EFI reserved memory */ if(Descriptor->Type == EfiReservedMemoryType) @@ -378,48 +397,26 @@ Memory::MapEfiMemory(IN OUT PXTBL_PAGE_MAPPING PageMap, continue; } - /* Check if preparing page map level 2 (non-PAE i686) */ - if(PageMap->PageMapLevel == 2) - { - /* Check if physical address starts beyond 4GB */ - if(Descriptor->PhysicalStart > 0xFFFFFFFF) - { - /* Go to the next descriptor */ - Descriptor = (PEFI_MEMORY_DESCRIPTOR)((PUCHAR)Descriptor + MemoryMap->DescriptorSize); - continue; - } - - /* Check if memory descriptor exceeds the lowest physical page */ - if(Descriptor->PhysicalStart + (Descriptor->NumberOfPages << EFI_PAGE_SHIFT) > MAXULONG) - { - /* Truncate memory descriptor to the 4GB */ - Descriptor->NumberOfPages = (((ULONGLONG)MAXULONG + 1) - Descriptor->PhysicalStart) >> EFI_PAGE_SHIFT; - } - } - /* Convert EFI memory type into XTLDR memory type */ - MemoryType = GetMemoryTypeRoutine((EFI_MEMORY_TYPE)Descriptor->Type); + MemoryType = GetLoaderMemoryType((EFI_MEMORY_TYPE)Descriptor->Type); /* Do memory mappings depending on memory type */ if(MemoryType == LoaderFirmwareTemporary) { /* Map EFI firmware code */ - Status = MapVirtualMemory(PageMap, (PVOID)Descriptor->PhysicalStart, - (PVOID)Descriptor->PhysicalStart, Descriptor->NumberOfPages, MemoryType); + Status = MapVirtualMemory(PageMap, Descriptor->PhysicalStart, + Descriptor->PhysicalStart, Descriptor->NumberOfPages, MemoryType); } else if(MemoryType != LoaderFree) { /* Add any non-free memory mapping */ - Status = MapVirtualMemory(PageMap, VirtualAddress, (PVOID)Descriptor->PhysicalStart, + Status = MapVirtualMemory(PageMap, KSEG0_BASE + Descriptor->PhysicalStart, Descriptor->PhysicalStart, Descriptor->NumberOfPages, MemoryType); - - /* Calculate next valid virtual address */ - VirtualAddress += Descriptor->NumberOfPages * EFI_PAGE_SIZE; } else { /* Map all other memory as loader free */ - Status = MapVirtualMemory(PageMap, NULLPTR, (PVOID)Descriptor->PhysicalStart, + Status = MapVirtualMemory(PageMap, (ULONGLONG)NULLPTR, Descriptor->PhysicalStart, Descriptor->NumberOfPages, LoaderFree); } @@ -436,7 +433,7 @@ Memory::MapEfiMemory(IN OUT PXTBL_PAGE_MAPPING PageMap, } /* Always map first page */ - Status = MapVirtualMemory(PageMap, NULLPTR, (PVOID)0, 1, LoaderFirmwarePermanent); + Status = MapVirtualMemory(PageMap, (ULONGLONG)NULLPTR, 0, 1, LoaderFirmwarePermanent); if(Status != STATUS_EFI_SUCCESS) { /* Mapping failed */ @@ -444,7 +441,7 @@ Memory::MapEfiMemory(IN OUT PXTBL_PAGE_MAPPING PageMap, } /* Map BIOS ROM and VRAM */ - Status = MapVirtualMemory(PageMap, NULLPTR, (PVOID)0xA0000, 0x60, LoaderFirmwarePermanent); + Status = MapVirtualMemory(PageMap, (ULONGLONG)NULLPTR, 0xA0000, 0x60, LoaderFirmwarePermanent); if(Status != STATUS_EFI_SUCCESS) { /* Mapping failed */ @@ -452,7 +449,6 @@ Memory::MapEfiMemory(IN OUT PXTBL_PAGE_MAPPING PageMap, } /* Store next valid virtual address and return success */ - *MemoryMapAddress = VirtualAddress; return STATUS_EFI_SUCCESS; } @@ -481,13 +477,13 @@ Memory::MapEfiMemory(IN OUT PXTBL_PAGE_MAPPING PageMap, XTCDECL EFI_STATUS Memory::MapVirtualMemory(IN OUT PXTBL_PAGE_MAPPING PageMap, - IN PVOID VirtualAddress, - IN PVOID PhysicalAddress, + IN ULONGLONG VirtualAddress, + IN ULONGLONG PhysicalAddress, IN ULONGLONG NumberOfPages, IN LOADER_MEMORY_TYPE MemoryType) { PXTBL_MEMORY_MAPPING Mapping1, Mapping2, Mapping3; - PVOID PhysicalAddressEnd, PhysicalAddress2End; + ULONGLONG PhysicalAddressEnd, PhysicalAddress2End; PLIST_ENTRY ListEntry, MappingListEntry; SIZE_T NumberOfMappedPages; EFI_STATUS Status; @@ -507,7 +503,7 @@ Memory::MapVirtualMemory(IN OUT PXTBL_PAGE_MAPPING PageMap, Mapping1->MemoryType = MemoryType; /* Calculate the end of the physical address */ - PhysicalAddressEnd = (PVOID)((ULONG_PTR)PhysicalAddress + (NumberOfPages * EFI_PAGE_SIZE) - 1); + PhysicalAddressEnd = PhysicalAddress + (NumberOfPages * EFI_PAGE_SIZE) - 1; /* Iterate through all the mappings already set to insert new mapping at the correct place */ ListEntry = PageMap->MemoryMap.Flink; @@ -515,7 +511,7 @@ Memory::MapVirtualMemory(IN OUT PXTBL_PAGE_MAPPING PageMap, { /* Take a mapping from the list and calculate its end of physical address */ Mapping2 = CONTAIN_RECORD(ListEntry, XTBL_MEMORY_MAPPING, ListEntry); - PhysicalAddress2End = (PVOID)((ULONG_PTR)Mapping2->PhysicalAddress + (Mapping2->NumberOfPages * EFI_PAGE_SIZE) - 1); + PhysicalAddress2End = Mapping2->PhysicalAddress + (Mapping2->NumberOfPages * EFI_PAGE_SIZE) - 1; /* Check if new mapping is a subset of an existing mapping */ if(Mapping1->PhysicalAddress >= Mapping2->PhysicalAddress && PhysicalAddressEnd <= PhysicalAddress2End) @@ -539,7 +535,7 @@ Memory::MapVirtualMemory(IN OUT PXTBL_PAGE_MAPPING PageMap, } /* Calculate number of pages for this mapping */ - NumberOfMappedPages = ((PUCHAR)PhysicalAddress2End - (PUCHAR)PhysicalAddressEnd) / EFI_PAGE_SIZE; + NumberOfMappedPages = (PhysicalAddress2End - PhysicalAddressEnd) / EFI_PAGE_SIZE; if(NumberOfMappedPages > 0) { /* Pages associated to the mapping, allocate memory for it */ @@ -551,8 +547,8 @@ Memory::MapVirtualMemory(IN OUT PXTBL_PAGE_MAPPING PageMap, } /* Set mapping fields and insert it on the top */ - Mapping3->PhysicalAddress = (PUCHAR)PhysicalAddressEnd + 1; - Mapping3->VirtualAddress = NULLPTR; + Mapping3->PhysicalAddress = PhysicalAddressEnd + 1; + Mapping3->VirtualAddress = (ULONGLONG)NULLPTR; Mapping3->NumberOfPages = NumberOfMappedPages; Mapping3->MemoryType = Mapping2->MemoryType; RTL::LinkedList::InsertHeadList(&Mapping2->ListEntry, &Mapping3->ListEntry); @@ -561,7 +557,7 @@ Memory::MapVirtualMemory(IN OUT PXTBL_PAGE_MAPPING PageMap, /* Calculate number of pages and the end of the physical address */ Mapping2->NumberOfPages = ((PUCHAR)PhysicalAddressEnd + 1 - (PUCHAR)Mapping2->PhysicalAddress) / EFI_PAGE_SIZE; - PhysicalAddress2End = (PVOID)((ULONG_PTR)Mapping2->PhysicalAddress + (Mapping2->NumberOfPages * EFI_PAGE_SIZE) - 1); + PhysicalAddress2End = Mapping2->PhysicalAddress + (Mapping2->NumberOfPages * EFI_PAGE_SIZE) - 1; } /* Check if they overlap */ @@ -588,7 +584,7 @@ Memory::MapVirtualMemory(IN OUT PXTBL_PAGE_MAPPING PageMap, /* Set mapping fields and insert it on the top */ Mapping3->PhysicalAddress = Mapping1->PhysicalAddress; - Mapping3->VirtualAddress = NULLPTR; + Mapping3->VirtualAddress = (ULONGLONG)NULLPTR; Mapping3->NumberOfPages = NumberOfMappedPages; Mapping3->MemoryType = Mapping2->MemoryType; RTL::LinkedList::InsertHeadList(&Mapping2->ListEntry, &Mapping3->ListEntry); @@ -597,7 +593,7 @@ Memory::MapVirtualMemory(IN OUT PXTBL_PAGE_MAPPING PageMap, /* Calculate number of pages and the end of the physical address */ Mapping2->NumberOfPages = ((PUCHAR)Mapping1->PhysicalAddress - (PUCHAR)Mapping2->PhysicalAddress) / EFI_PAGE_SIZE; - PhysicalAddress2End = (PVOID)((ULONG_PTR)Mapping2->PhysicalAddress + (Mapping2->NumberOfPages * EFI_PAGE_SIZE) - 1); + PhysicalAddress2End = Mapping2->PhysicalAddress + (Mapping2->NumberOfPages * EFI_PAGE_SIZE) - 1; } /* Check if mapping is really needed */ diff --git a/boot/xtldr/modules/xtos_o/xtos.cc b/boot/xtldr/modules/xtos_o/xtos.cc index 2003161..3482003 100644 --- a/boot/xtldr/modules/xtos_o/xtos.cc +++ b/boot/xtldr/modules/xtos_o/xtos.cc @@ -206,7 +206,7 @@ Xtos::GetMemoryDescriptorList(IN PXTBL_PAGE_MAPPING PageMap, return Status; } - Status = XtLdrProtocol->Memory.MapVirtualMemory(PageMap, *VirtualAddress, (PVOID)Address, Pages, LoaderMemoryData); + Status = XtLdrProtocol->Memory.MapVirtualMemory(PageMap, (ULONGLONG)*VirtualAddress, Address, Pages, LoaderMemoryData); if(Status != STATUS_EFI_SUCCESS) { XtLdrProtocol->Memory.FreePages(Address, Pages); @@ -266,7 +266,7 @@ Xtos::GetSystemResourcesList(IN PXTBL_PAGE_MAPPING PageMap, { return Status; } - Status = XtLdrProtocol->Memory.MapVirtualMemory(PageMap, *VirtualAddress, (PVOID)Address, Pages, LoaderFirmwarePermanent); + Status = XtLdrProtocol->Memory.MapVirtualMemory(PageMap, (ULONGLONG)*VirtualAddress, Address, Pages, LoaderFirmwarePermanent); if(Status != STATUS_EFI_SUCCESS) { XtLdrProtocol->Memory.FreePages(Address, Pages); @@ -336,8 +336,8 @@ Xtos::GetSystemResourcesList(IN PXTBL_PAGE_MAPPING PageMap, FrameBufferResource->Header.VirtualAddress = *VirtualAddress; /* Map frame buffer memory */ - XtLdrProtocol->Memory.MapVirtualMemory(PageMap, FrameBufferResource->Header.VirtualAddress, - FrameBufferResource->Header.PhysicalAddress, + XtLdrProtocol->Memory.MapVirtualMemory(PageMap, (ULONGLONG)FrameBufferResource->Header.VirtualAddress, + (ULONGLONG)FrameBufferResource->Header.PhysicalAddress, FrameBufferPages, LoaderFirmwarePermanent); /* Close FrameBuffer protocol */ @@ -389,7 +389,7 @@ Xtos::InitializeApicBase(IN PXTBL_PAGE_MAPPING PageMap) } /* Map APIC base address */ - XtLdrProtocol->Memory.MapVirtualMemory(PageMap, (PVOID)APIC_BASE, ApicBaseAddress, 1, LoaderFirmwarePermanent); + XtLdrProtocol->Memory.MapVirtualMemory(PageMap, APIC_BASE, (ULONGLONG)ApicBaseAddress, 1, LoaderFirmwarePermanent); return STATUS_EFI_SUCCESS; } @@ -456,7 +456,7 @@ Xtos::InitializeLoaderBlock(IN PXTBL_PAGE_MAPPING PageMap, ParametersSize); /* Map kernel initialization block */ - XtLdrProtocol->Memory.MapVirtualMemory(PageMap, *VirtualAddress, (PVOID)LoaderBlock, + XtLdrProtocol->Memory.MapVirtualMemory(PageMap, (ULONGLONG)*VirtualAddress, (ULONGLONG)LoaderBlock, BlockPages, LoaderSystemBlock); /* Calculate next valid virtual address */ @@ -650,8 +650,8 @@ Xtos::RunBootSequence(IN PEFI_FILE_HANDLE BootDir, } /* Add kernel image memory mapping */ - Status = XtLdrProtocol->Memory.MapVirtualMemory(&PageMap, ImageContext->VirtualAddress, - ImageContext->PhysicalAddress, ImageContext->ImagePages, + Status = XtLdrProtocol->Memory.MapVirtualMemory(&PageMap, (ULONGLONG)ImageContext->VirtualAddress, + (ULONGLONG)ImageContext->PhysicalAddress, ImageContext->ImagePages, LoaderSystemCode); if(Status != STATUS_EFI_SUCCESS) { diff --git a/sdk/xtdk/bltypes.h b/sdk/xtdk/bltypes.h index 3ea3355..1f7f948 100644 --- a/sdk/xtdk/bltypes.h +++ b/sdk/xtdk/bltypes.h @@ -101,8 +101,8 @@ typedef VOID (XTCDECL *PBL_LLIST_INSERT_HEAD)(IN OUT PLIST_ENTRY ListHead, IN PL typedef VOID (XTCDECL *PBL_LLIST_INSERT_TAIL)(IN OUT PLIST_ENTRY ListHead, IN PLIST_ENTRY Entry); typedef VOID (XTCDECL *PBL_LLIST_REMOVE_ENTRY)(IN PLIST_ENTRY Entry); typedef EFI_STATUS (XTCDECL *PBL_MAP_EFI_MEMORY)(IN OUT PXTBL_PAGE_MAPPING PageMap, IN OUT PVOID *MemoryMapAddress, IN PBL_GET_MEMTYPE_ROUTINE GetMemoryTypeRoutine); -typedef EFI_STATUS (XTCDECL *PBL_MAP_PAGE)(IN PXTBL_PAGE_MAPPING PageMap, IN ULONG_PTR VirtualAddress, IN ULONG_PTR PhysicalAddress, IN ULONG NumberOfPages); -typedef EFI_STATUS (XTCDECL *PBL_MAP_VIRTUAL_MEMORY)(IN OUT PXTBL_PAGE_MAPPING PageMap, IN PVOID VirtualAddress, IN PVOID PhysicalAddress, IN ULONGLONG NumberOfPages, IN LOADER_MEMORY_TYPE MemoryType); +typedef EFI_STATUS (XTCDECL *PBL_MAP_PAGE)(IN PXTBL_PAGE_MAPPING PageMap, IN ULONGLONG VirtualAddress, IN ULONGLONG PhysicalAddress, IN ULONGLONG NumberOfPages); +typedef EFI_STATUS (XTCDECL *PBL_MAP_VIRTUAL_MEMORY)(IN OUT PXTBL_PAGE_MAPPING PageMap, IN ULONGLONG VirtualAddress, IN ULONGLONG PhysicalAddress, IN ULONGLONG NumberOfPages, IN LOADER_MEMORY_TYPE MemoryType); typedef VOID (XTAPI *PBL_MOVE_MEMORY)(IN OUT PVOID Destination, IN PCVOID Source, IN SIZE_T Length); typedef EFI_STATUS (XTCDECL *PBL_OPEN_VOLUME)(IN PEFI_DEVICE_PATH_PROTOCOL DevicePath, OUT PEFI_HANDLE DiskHandle, OUT PEFI_FILE_HANDLE *FsHandle); typedef EFI_STATUS (XTCDECL *PBL_OPEN_PROTOCOL)(OUT PEFI_HANDLE Handle, OUT PVOID *ProtocolHandler, IN PEFI_GUID ProtocolGuid); @@ -232,8 +232,8 @@ typedef struct _XTBL_KNOWN_BOOT_PROTOCOL typedef struct _XTBL_MEMORY_MAPPING { LIST_ENTRY ListEntry; - PVOID VirtualAddress; - PVOID PhysicalAddress; + ULONGLONG VirtualAddress; + ULONGLONG PhysicalAddress; ULONGLONG NumberOfPages; LOADER_MEMORY_TYPE MemoryType; } XTBL_MEMORY_MAPPING, *PXTBL_MEMORY_MAPPING;