From 6d31d6e0959f224630317d247f489d18e65aa5bc Mon Sep 17 00:00:00 2001 From: Amlal Date: Wed, 11 Sep 2024 22:34:21 +0200 Subject: Did work on lowering overhead and a faster kernel to userspace loading. - Userspace code and stack needs to be mapped to ring-3. - Reworking PML4 from the ground up on AMD64. - Start doing R&D on an ARM64 version of ZKA, running on CoreBoot. Signed-off-by: Amlal --- dev/ZBA/Sources/HEL/AMD64/BootAPI.S | 9 +++++++-- dev/ZBA/Sources/HEL/AMD64/BootMain.cxx | 21 +++++---------------- 2 files changed, 12 insertions(+), 18 deletions(-) (limited to 'dev/ZBA/Sources') diff --git a/dev/ZBA/Sources/HEL/AMD64/BootAPI.S b/dev/ZBA/Sources/HEL/AMD64/BootAPI.S index 9db0961a..47f250f1 100644 --- a/dev/ZBA/Sources/HEL/AMD64/BootAPI.S +++ b/dev/ZBA/Sources/HEL/AMD64/BootAPI.S @@ -40,8 +40,13 @@ wait_gate2: reset_wait: jmp reset_wait -.global write_cr3 +.global boot_write_cr3 +.global boot_read_cr3 -write_cr3: +boot_read_cr3: + mov rax, rax + ret + +boot_write_cr3: mov cr3, rcx ret diff --git a/dev/ZBA/Sources/HEL/AMD64/BootMain.cxx b/dev/ZBA/Sources/HEL/AMD64/BootMain.cxx index 2e20c5d3..55d93c29 100644 --- a/dev/ZBA/Sources/HEL/AMD64/BootMain.cxx +++ b/dev/ZBA/Sources/HEL/AMD64/BootMain.cxx @@ -79,7 +79,10 @@ STATIC Bool CheckBootDevice(BootDeviceATA& ataDev) return true; } -EXTERN_C Void write_cr3(VoidPtr new_cr3); +EXTERN_C VoidPtr boot_read_cr3(); +EXTERN_C Void boot_write_cr3(VoidPtr new_cr3); + +EXTERN EfiBootServices* BS; /// @brief Main EFI entrypoint. /// @param ImageHandle Handle of this image. @@ -135,8 +138,6 @@ EFI_EXTERN_C EFI_API Int Main(EfiHandlePtr ImageHandle, auto guid_mp = EfiGUID(EFI_MP_SERVICES_PROTOCOL_GUID); EfiMpServicesProtocol* mp = nullptr; - EXTERN EfiBootServices* BS; - BS->LocateProtocol(&guid_mp, nullptr, reinterpret_cast(&mp)); handover_hdr->f_HardwareTables.f_MpPtr = reinterpret_cast(mp); @@ -203,19 +204,7 @@ EFI_EXTERN_C EFI_API Int Main(EfiHandlePtr ImageHandle, // Update handover file specific table and phyiscal start field. //-----------------------------------------------------------// - handover_hdr->f_PageStart = - (VoidPtr)Descriptor[cDefaultMemoryMap].PhysicalStart; - - handover_hdr->f_FirmwareSpecific[HEL::kHandoverSpecificAttrib] = - Descriptor[cDefaultMemoryMap].Attribute; - handover_hdr->f_FirmwareSpecific[HEL::kHandoverSpecificKind] = - Descriptor[cDefaultMemoryMap].Kind; - handover_hdr->f_FirmwareSpecific[HEL::kHandoverSpecificMemoryEfi] = - (UIntPtr)Descriptor; - - handover_hdr->f_BitMapStart = - (VoidPtr)Descriptor[cDefaultMemoryMap].VirtualStart; - + handover_hdr->f_BitMapStart = reinterpret_cast(kHandoverBitMapStart); /* # of pages */ handover_hdr->f_BitMapSize = kHandoverBitMapSz; /* # of pages */ handover_hdr->f_FirmwareCustomTables[0] = (VoidPtr)BS; -- cgit v1.2.3