⛏️ index : haiku.git

author PulkoMandy <pulkomandy@pulkomandy.tk> 2025-11-29 21:52:39.0 +01:00:00
committer Adrien Destugues <pulkomandy@pulkomandy.tk> 2025-12-01 16:01:16.0 +00:00:00
commit
772e0a03ef10a1eaf175012c247919671818ef2d [patch]
tree
b4680b817d46b5a1ed580eea9312ea32a42fbf3b
parent
51c5d2370a3ad4cb57458891747b104c3c9e6533
download
772e0a03ef10a1eaf175012c247919671818ef2d.tar.gz

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(-)

diff --git a/src/system/boot/platform/efi/arch/x86_64/Jamfile b/src/system/boot/platform/efi/arch/x86_64/Jamfile
index 86bb048..df48f7c 100644
--- a/src/system/boot/platform/efi/arch/x86_64/Jamfile
+++ b/src/system/boot/platform/efi/arch/x86_64/Jamfile
@@ -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 ] ;
	}
}
diff --git a/src/system/boot/platform/efi/arch/x86_64/arch_start.cpp b/src/system/boot/platform/efi/arch/x86_64/arch_start.cpp
index a82bd34..7a5df03 100644
--- a/src/system/boot/platform/efi/arch/x86_64/arch_start.cpp
+++ b/src/system/boot/platform/efi/arch/x86_64/arch_start.cpp
@@ -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"


// From entry.S
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);

// From arch_mmu.cpp
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";
	}
}