From 7764e88cd0032cd57fdc17a2906db9d8af9999e1 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Sun, 20 Oct 2024 17:53:37 +0200 Subject: IMP: New implementations and improvements. - Heap class allocation have been fixed. - Scheduler allocation has been fixed. - A new better flow for the kernel has been designed. Signed-off-by: Amlal El Mahrouss --- .../HALKit/AMD64/HalCoreInterruptHandlerAMD64.cxx | 4 ++-- dev/zka/HALKit/AMD64/HalDescriptorLoader.cxx | 7 +++---- dev/zka/HALKit/AMD64/HalKernelMain.cxx | 24 ++++++++++++++-------- dev/zka/HALKit/AMD64/Processor.hxx | 6 +++--- dev/zka/HALKit/ARM64/HalKernelMain.cxx | 4 +++- dev/zka/HALKit/ARM64/HalPagingMgr.cxx | 1 - dev/zka/HALKit/ARM64/HalSchedulerCore.cxx | 4 ++-- dev/zka/HALKit/ARM64/Processor.hxx | 1 - 8 files changed, 28 insertions(+), 23 deletions(-) (limited to 'dev/zka/HALKit') diff --git a/dev/zka/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cxx b/dev/zka/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cxx index 292aea4d..a76fde89 100644 --- a/dev/zka/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cxx +++ b/dev/zka/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cxx @@ -92,7 +92,7 @@ EXTERN_C void idt_handle_ud(Kernel::UIntPtr rsp) /// @return nothing. EXTERN_C Kernel::Void hal_system_call_enter(Kernel::UIntPtr rcx, Kernel::UIntPtr rdx) { - Kernel::HAL::Out8(0x20, 0x20); // Acknowledge interrupt to master PIC + Kernel::HAL::Out8(0x20, 0x20); // Acknowledge interrupt to master PIC if (rcx <= (kSyscalls.Count() - 1)) { @@ -110,7 +110,7 @@ EXTERN_C Kernel::Void hal_system_call_enter(Kernel::UIntPtr rcx, Kernel::UIntPtr /// @return nothing. EXTERN_C Kernel::Void hal_kernel_call_enter(Kernel::UIntPtr rcx, Kernel::UIntPtr rdx, Kernel::UIntPtr r8, Kernel::UIntPtr r9) { - Kernel::HAL::Out8(0x20, 0x20); // Acknowledge interrupt to master PIC + Kernel::HAL::Out8(0x20, 0x20); // Acknowledge interrupt to master PIC if (rcx <= (kSyscalls.Count() - 1)) { diff --git a/dev/zka/HALKit/AMD64/HalDescriptorLoader.cxx b/dev/zka/HALKit/AMD64/HalDescriptorLoader.cxx index d554771c..343ac9ab 100644 --- a/dev/zka/HALKit/AMD64/HalDescriptorLoader.cxx +++ b/dev/zka/HALKit/AMD64/HalDescriptorLoader.cxx @@ -100,10 +100,9 @@ namespace Kernel::HAL hal_load_idt(idt); Detail::hal_enable_pit(cPITTickForScheduler); - Detail::hal_clear_irq_mask(32); - - rt_sti(); - } + + rt_sti(); + } void GDTLoader::Load(Ref& gdt) { diff --git a/dev/zka/HALKit/AMD64/HalKernelMain.cxx b/dev/zka/HALKit/AMD64/HalKernelMain.cxx index ea8049c5..e836a239 100644 --- a/dev/zka/HALKit/AMD64/HalKernelMain.cxx +++ b/dev/zka/HALKit/AMD64/HalKernelMain.cxx @@ -83,19 +83,25 @@ EXTERN_C void hal_init_platform( EXTERN_C Kernel::Void hal_real_init(Kernel::Void) noexcept { - Kernel::HAL::Register64 idt_reg; - idt_reg.Base = (Kernel::UIntPtr)kInterruptVectorTable; - - Kernel::HAL::IDTLoader idt_loader; - idt_loader.Load(idt_reg); + /* Initialize filesystem. */ + Kernel::NeFileSystemMgr* mgr = Kernel::mm_new_class(); + Kernel::NeFileSystemMgr::Mount(mgr); + + /* Initialize scheduler. */ + Kernel::UserProcessHelper::InitializeScheduler(); + /* Start any cores. */ if (kHandoverHeader->f_HardwareTables.f_MultiProcessingEnabled) Kernel::HAL::mp_get_cores(kHandoverHeader->f_HardwareTables.f_VendorPtr); + + /* Load System.exe here (TODO) */ + + Kernel::HAL::Register64 idt_reg; + idt_reg.Base = (Kernel::UIntPtr)kInterruptVectorTable; - Kernel::NeFileSystemMgr* mgr = Kernel::mm_new_class(); - Kernel::NeFileSystemMgr::Mount(mgr); - - Kernel::UserProcessHelper::InitializeScheduler(); + /* Load interrupts. */ + Kernel::HAL::IDTLoader idt_loader; + idt_loader.Load(idt_reg); Kernel::ke_stop(RUNTIME_CHECK_BOOTSTRAP); } diff --git a/dev/zka/HALKit/AMD64/Processor.hxx b/dev/zka/HALKit/AMD64/Processor.hxx index f1de4d49..2fd62820 100644 --- a/dev/zka/HALKit/AMD64/Processor.hxx +++ b/dev/zka/HALKit/AMD64/Processor.hxx @@ -23,10 +23,10 @@ #define kPITChannel0Port 0x40 #define kPITFrequency 1193180 -#define kPICCommand 0x20 -#define kPICData 0x21 +#define kPICCommand 0x20 +#define kPICData 0x21 #define kPIC2Command 0xA0 -#define kPIC2Data 0xA1 +#define kPIC2Data 0xA1 EXTERN_C { diff --git a/dev/zka/HALKit/ARM64/HalKernelMain.cxx b/dev/zka/HALKit/ARM64/HalKernelMain.cxx index 4e445a21..52096158 100644 --- a/dev/zka/HALKit/ARM64/HalKernelMain.cxx +++ b/dev/zka/HALKit/ARM64/HalKernelMain.cxx @@ -40,5 +40,7 @@ EXTERN_C void hal_init_platform( /* INITIALIZE BIT MAP. */ /************************************** */ - while (Yes) {} + while (Yes) + { + } } diff --git a/dev/zka/HALKit/ARM64/HalPagingMgr.cxx b/dev/zka/HALKit/ARM64/HalPagingMgr.cxx index e8a41ff5..ae060af9 100644 --- a/dev/zka/HALKit/ARM64/HalPagingMgr.cxx +++ b/dev/zka/HALKit/ARM64/HalPagingMgr.cxx @@ -36,7 +36,6 @@ namespace Kernel::HAL /// \brief Retrieve the page status of a PTE. STATIC Void mmi_page_status(PTE* pte) { - } STATIC Int32 mmi_map_page_table_entry(VoidPtr virtual_address, UInt32 flags, PTE* pt_entry); diff --git a/dev/zka/HALKit/ARM64/HalSchedulerCore.cxx b/dev/zka/HALKit/ARM64/HalSchedulerCore.cxx index 6f2f356e..e231e0fc 100644 --- a/dev/zka/HALKit/ARM64/HalSchedulerCore.cxx +++ b/dev/zka/HALKit/ARM64/HalSchedulerCore.cxx @@ -8,9 +8,9 @@ namespace Kernel { - EXTERN_C Void __zka_pure_call(void) + EXTERN_C Void __zka_pure_call(void) { - UserProcessScheduler::The().CurrentProcess().Leak().Crash(); + UserProcessScheduler::The().CurrentProcess().Leak().Crash(); } Void UserProcess::SetImageStart(VoidPtr image_start) noexcept diff --git a/dev/zka/HALKit/ARM64/Processor.hxx b/dev/zka/HALKit/ARM64/Processor.hxx index 883ebe5c..93a9141a 100644 --- a/dev/zka/HALKit/ARM64/Processor.hxx +++ b/dev/zka/HALKit/ARM64/Processor.hxx @@ -62,7 +62,6 @@ namespace Kernel::HAL { while (Yes) { - } } -- cgit v1.2.3