diff options
| author | Amlal EL Mahrouss <amlalelmahrouss@icloud.com> | 2024-08-08 14:19:42 +0200 |
|---|---|---|
| committer | Amlal EL Mahrouss <amlalelmahrouss@icloud.com> | 2024-08-08 14:19:42 +0200 |
| commit | df8393cebbae61ed7686be17a28d80c657f49b7e (patch) | |
| tree | 96a67cbbe80a69f2b3c59a94a517741b6583a88b /Kernel | |
| parent | 209ebb8caa774c8d73ead8e0eba3bd65d138930f (diff) | |
[IMP] Code cleanup and improvements of the bootloader, still trying to
figure what is going wrong on the kernel's DLL.
Signed-off-by: Amlal EL Mahrouss <amlalelmahrouss@icloud.com>
Diffstat (limited to 'Kernel')
| -rw-r--r-- | Kernel/HALKit/AMD64/HalBoot.asm | 13 | ||||
| -rw-r--r-- | Kernel/HALKit/AMD64/HalCoreMultiProcessingAMD64.cxx | 18 | ||||
| -rw-r--r-- | Kernel/HALKit/AMD64/HalKernelMain.cxx | 29 | ||||
| -rw-r--r-- | Kernel/Sources/KernelCheck.cxx | 14 | ||||
| -rw-r--r-- | Kernel/amd64-efi.make | 2 |
5 files changed, 21 insertions, 55 deletions
diff --git a/Kernel/HALKit/AMD64/HalBoot.asm b/Kernel/HALKit/AMD64/HalBoot.asm index 7bda9635..aee837a0 100644 --- a/Kernel/HALKit/AMD64/HalBoot.asm +++ b/Kernel/HALKit/AMD64/HalBoot.asm @@ -20,16 +20,3 @@ section .ldr HandoverMagic: dq kHandoverMagic HandoverType: dw kTypeKernel -HandoverArch: dw kArchAmd64 -;; This NewBootStart points to Main. -HandoverStart: dq hal_init_platform - -section .start - -[global ke_startup_platform] - -ke_startup_platform: - push rax - jmp hal_init_platform - pop rax - ret
\ No newline at end of file diff --git a/Kernel/HALKit/AMD64/HalCoreMultiProcessingAMD64.cxx b/Kernel/HALKit/AMD64/HalCoreMultiProcessingAMD64.cxx index dd912d2b..5c1a4323 100644 --- a/Kernel/HALKit/AMD64/HalCoreMultiProcessingAMD64.cxx +++ b/Kernel/HALKit/AMD64/HalCoreMultiProcessingAMD64.cxx @@ -183,8 +183,8 @@ namespace Kernel::HAL struct PROCESS_CONTROL_BLOCK final { - PROCESS_HEADER_BLOCK* f_Header; - HAL::StackFramePtr f_StackFrame; + PROCESS_HEADER_BLOCK* f_Header; + HAL::StackFramePtr f_StackFrame; } fBlocks[cMaxPCBBlocks] = {0}; STATIC Void hal_switch_context(HAL::StackFramePtr stackFrame) @@ -198,7 +198,7 @@ namespace Kernel::HAL cFramePtr = stackFrame; - fBlocks[ProcessScheduler::The().Leak().TheCurrent().Leak().ProcessId % cMaxPCBBlocks].f_Header = &ProcessScheduler::The().Leak().TheCurrent().Leak(); + fBlocks[ProcessScheduler::The().Leak().TheCurrent().Leak().ProcessId % cMaxPCBBlocks].f_Header = &ProcessScheduler::The().Leak().TheCurrent().Leak(); fBlocks[ProcessScheduler::The().Leak().TheCurrent().Leak().ProcessId % cMaxPCBBlocks].f_StackFrame = stackFrame; sem.Unlock(); @@ -234,15 +234,9 @@ namespace Kernel::HAL auto acpi = ACPIFactoryInterface(rsdPtr); kApicMadt = acpi.Find(kApicSignature).Leak().Leak(); - if (kApicMadt != nullptr) - { - kApicInfoBlock = (MadtType*)kApicMadt; - } - else - { - kcout << "newoskrnl: APIC is not present! it is a vital component to enable SMP.\r"; - ke_stop(RUNTIME_CHECK_FAILED); - } + MUST_PASS(kApicMadt); + + kApicInfoBlock = (MadtType*)kApicMadt; } } // namespace Kernel::HAL diff --git a/Kernel/HALKit/AMD64/HalKernelMain.cxx b/Kernel/HALKit/AMD64/HalKernelMain.cxx index 3cefe1d3..bf63b388 100644 --- a/Kernel/HALKit/AMD64/HalKernelMain.cxx +++ b/Kernel/HALKit/AMD64/HalKernelMain.cxx @@ -89,11 +89,16 @@ EXTERN_C void hal_init_platform( void hal_real_init(void) { + // get page size. kKernelVirtualSize = kHandoverHeader->f_VirtualSize; + + // get virtual address start. kKernelVirtualStart = reinterpret_cast<Kernel::VoidPtr>( - reinterpret_cast<Kernel::UIntPtr>(kHandoverHeader->f_VirtualStart) + cHeapStartOffset); + reinterpret_cast<Kernel::UIntPtr>(kHandoverHeader->f_VirtualStart)); - kKernelPhysicalStart = kHandoverHeader->f_PhysicalStart; + // get physical address start. + kKernelPhysicalStart = reinterpret_cast<Kernel::VoidPtr>( + reinterpret_cast<Kernel::UIntPtr>(kHandoverHeader->f_PhysicalStart)); kTextOffsetY += 10; cg_write_text("LOADING INTERRUPTS...", kTextOffsetY, 10, RGB(0x00, 0x00, 0x00)); @@ -116,10 +121,7 @@ void hal_real_init(void) CONST Kernel::HAL::IDTLoader cIDT; cIDT.Load(idtBase); - // Register the basic SCI functions. - - kTextOffsetY += 10; - cg_write_text("LOADING SYSCALLS...", kTextOffsetY, 10, RGB(0x00, 0x00, 0x00)); + // Register the basic system calls. constexpr auto cVGAWrite = 0x10; constexpr auto cTlsInterrupt = 0x11; @@ -230,20 +232,7 @@ void hal_real_init(void) kSyscalls[cRebootInterrupt].Leak().Leak()->fHooked = true; kSyscalls[cLPCSanitizeMsg].Leak().Leak()->fHooked = true; - kTextOffsetY += 10; - cg_write_text("LOADING SMP...", kTextOffsetY, 10, RGB(0x00, 0x00, 0x00)); - - for (Kernel::SizeT i = 0; i < kHandoverMaxCmdLine; i++) - { - if (Kernel::rt_string_cmp(kHandoverHeader->f_CommandLine[i], "/AutoFormat", Kernel::rt_string_len("/AutoFormat")) == 0) - { - cAutoFormatDisk.GetValue() = Yes; - break; - } - } - - kTextOffsetY += 10; - cg_write_text("LOADING SECURITY SUBSYSTEM...", kTextOffsetY, 10, RGB(0x00, 0x00, 0x00)); + Kernel::HAL::hal_system_get_cores(kHandoverHeader->f_HardwareTables.f_VendorPtr); Kernel::ke_stop(RUNTIME_CHECK_BOOTSTRAP); } diff --git a/Kernel/Sources/KernelCheck.cxx b/Kernel/Sources/KernelCheck.cxx index b9843cd0..4752024d 100644 --- a/Kernel/Sources/KernelCheck.cxx +++ b/Kernel/Sources/KernelCheck.cxx @@ -19,7 +19,7 @@ #define CopyMem(dst, src, sz) Kernel::rt_copy_memory((Kernel::VoidPtr)src, (Kernel::VoidPtr)dst, sz) #define MoveMem(dst, src, sz) Kernel::rt_copy_memory((Kernel::VoidPtr)src, (Kernel::VoidPtr)dst, sz) -#define cWebsiteMacro "https://zka-tech.nl/hulp" +#define cWebsiteMacro "https://zka.ma/help" #include <BootKit/Vendor/Qr.hxx> @@ -134,8 +134,10 @@ namespace Kernel Void RecoveryFactory::Recover() noexcept { - PowerFactoryInterface powerInterface(kHandoverHeader->f_HardwareTables.f_VendorPtr); - powerInterface.Shutdown(); + while (true) + { + asm volatile ("cli; hlt"); + } } @@ -143,12 +145,6 @@ namespace Kernel { if (!expr) { -#ifdef __DEBUG__ - kcout << "newoskrnl: FILE: " << file << "\r"; - kcout << "newoskrnl: LINE: " << line << "\r"; - -#endif // __DEBUG__ - ke_stop(RUNTIME_CHECK_FAILED); // Runtime Check failed } } diff --git a/Kernel/amd64-efi.make b/Kernel/amd64-efi.make index 52532223..55517b2f 100644 --- a/Kernel/amd64-efi.make +++ b/Kernel/amd64-efi.make @@ -35,7 +35,7 @@ COPY = cp ASMFLAGS = -f win64 # Kernel subsystem is 17 and entrypoint is __ImageStart -LDFLAGS = -e ke_startup_platform --subsystem=17 --image-base 0x10000000 +LDFLAGS = -e hal_init_platform --subsystem=17 --image-base 0x10000000 LDOBJ = Objects/*.obj # This file is the kernel, responsible of task management and memory. |
