x86_64 efi bootloader: use generic function instead of copying it
Change-Id: I4bddc86c1e19f7654db62be52e04056e9e858513
Reviewed-on: https://review.haiku-os.org/c/haiku/+/10037
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
Reviewed-by: Adrien Destugues <pulkomandy@pulkomandy.tk>
Diff
src/system/boot/platform/efi/arch/x86_64/Jamfile | 9 +++++++++
src/system/boot/platform/efi/arch/x86_64/arch_start.cpp | 52 +++++++++-------------------------------------------
2 files changed, 14 insertions(+), 47 deletions(-)
@@ -1,6 +1,7 @@
SubDir HAIKU_TOP src system boot platform efi arch x86_64 ;
SubDirHdrs $(HAIKU_TOP) src system boot platform efi ;
SubDirHdrs $(HAIKU_TOP) src system boot platform efi arch generic ;
UsePrivateHeaders [ FDirName kernel platform ] ;
UsePrivateHeaders [ FDirName kernel boot platform efi ] ;
@@ -27,11 +28,19 @@
arch_timer.cpp
;
local generic_src =
generic_mmu.cpp
;
BootMergeObject boot_platform_efi_x86_64.o :
$(arch_src)
$(generic_src)
;
SEARCH on [ FGristFiles arch_smp.cpp ]
= [ FDirName $(HAIKU_TOP) src system boot platform efi arch x86 ] ;
SEARCH on [ FGristFiles $(generic_src) ]
= [ FDirName $(SUBDIR) $(DOTDOT) generic ] ;
}
}
@@ -14,24 +14,22 @@
#include <boot/stage2.h>
#include <boot/stdio.h>
#include "efi_platform.h"
#include "generic_mmu.h"
#include "mmu.h"
#include "serial.h"
#include "smp.h"
#include "efi_platform.h"
extern "C" void arch_enter_kernel(uint64 pml4, uint64 entry_point,
uint64 stackTop);
extern "C" void arch_enter_kernel(uint64 pml4, uint64 entry_point, uint64 stackTop);
extern void arch_mmu_post_efi_setup(size_t memory_map_size,
efi_memory_descriptor *memory_map, size_t descriptor_size,
uint32_t descriptor_version);
efi_memory_descriptor *memory_map, size_t descriptor_size, uint32_t descriptor_version);
extern uint64_t arch_mmu_generate_post_efi_page_tables(size_t memory_map_size,
efi_memory_descriptor *memory_map, size_t descriptor_size,
uint32_t descriptor_version);
efi_memory_descriptor *memory_map, size_t descriptor_size, uint32_t descriptor_version);
void
@@ -40,46 +38,6 @@
fix_address(gKernelArgs.ucode_data);
fix_address(gKernelArgs.arch_args.apic);
fix_address(gKernelArgs.arch_args.hpet);
}
static const char*
memory_region_type_str(int type)
{
switch (type) {
case EfiReservedMemoryType:
return "EfiReservedMemoryType";
case EfiLoaderCode:
return "EfiLoaderCode";
case EfiLoaderData:
return "EfiLoaderData";
case EfiBootServicesCode:
return "EfiBootServicesCode";
case EfiBootServicesData:
return "EfiBootServicesData";
case EfiRuntimeServicesCode:
return "EfiRuntimeServicesCode";
case EfiRuntimeServicesData:
return "EfiRuntimeServicesData";
case EfiConventionalMemory:
return "EfiConventionalMemory";
case EfiUnusableMemory:
return "EfiUnusableMemory";
case EfiACPIReclaimMemory:
return "EfiACPIReclaimMemory";
case EfiACPIMemoryNVS:
return "EfiACPIMemoryNVS";
case EfiMemoryMappedIO:
return "EfiMemoryMappedIO";
case EfiMemoryMappedIOPortSpace:
return "EfiMemoryMappedIOPortSpace";
case EfiPalCode:
return "EfiPalCode";
case EfiPersistentMemory:
return "EfiPersistentMemory";
default:
return "unknown";
}
}