diff options
| author | Amlal El Mahrouss <amlal@nekernel.org> | 2025-04-01 13:29:29 +0200 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal@nekernel.org> | 2025-04-01 13:29:29 +0200 |
| commit | e2b41947cde11c870d96970712dcfb3aa76eb0cf (patch) | |
| tree | 1fac60e9955a3d8d380e17b5665d89703a32a3c3 /dev/kernel/HALKit | |
| parent | 1c3b37123cef3fa9c69099bc6228d7b4a082ee90 (diff) | |
kernel/wip: SMP tweaks, and code cleanup.
Diffstat (limited to 'dev/kernel/HALKit')
| -rw-r--r-- | dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc | 15 | ||||
| -rw-r--r-- | dev/kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc | 3 | ||||
| -rw-r--r-- | dev/kernel/HALKit/AMD64/HalDescriptorLoader.cc | 3 | ||||
| -rw-r--r-- | dev/kernel/HALKit/AMD64/HalKernelMain.cc | 11 | ||||
| -rw-r--r-- | dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc | 1 | ||||
| -rw-r--r-- | dev/kernel/HALKit/AMD64/Storage/PIO+Generic.cc | 1 |
6 files changed, 20 insertions, 14 deletions
diff --git a/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc b/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc index 10361d8e..c7e639e4 100644 --- a/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc +++ b/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc @@ -210,16 +210,25 @@ namespace Kernel::HAL if (kMADTBlock) { - SizeT index = 0; + SizeT index = 1; kSMPInterrupt = 0; kSMPCount = 0; + UInt32 eax, edx; kout << "SMP: Starting APs...\r"; - UInt32 eax, edx; kApicBaseAddress = kMADTBlock->Address; + constexpr auto kMemoryAPStart = 0x7C000; + Char* ptr_ap_code = reinterpret_cast<Char*>(kMemoryAPStart); + + mm_map_page(ptr_ap_code, ptr_ap_code, kMMFlagsWr); + + SizeT hal_ap_blob_len = hal_ap_blob_end - hal_ap_blob_start; + + rt_copy_memory((Char*)hal_ap_blob_start, ptr_ap_code, hal_ap_blob_len); + while (Yes) { if (kMADTBlock->List[index].Type > 9 || @@ -244,7 +253,7 @@ namespace Kernel::HAL /// TODO: HAL helper to create an address. - hal_send_sipi(kApicBaseAddress, kAPICLocales[kSMPCount], (UInt8)(((UIntPtr)hal_ap_blob_start) >> 12)); + hal_send_sipi(kApicBaseAddress, kAPICLocales[kSMPCount], (UInt8)(((UIntPtr)ptr_ap_code) >> 12)); ++kSMPCount; break; diff --git a/dev/kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc b/dev/kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc index 3c2939b6..7de5bb0b 100644 --- a/dev/kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc +++ b/dev/kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc @@ -115,10 +115,7 @@ EXTERN_C void idt_handle_generic(Kernel::UIntPtr rsp) auto process = Kernel::UserProcessScheduler::The().CurrentProcess(); if (process.Leak().Status != Kernel::ProcessStatusKind::kRunning) - { - kout << "Getting here.\r"; return; - } kIsScheduling = NO; diff --git a/dev/kernel/HALKit/AMD64/HalDescriptorLoader.cc b/dev/kernel/HALKit/AMD64/HalDescriptorLoader.cc index d3ac8e7e..96276964 100644 --- a/dev/kernel/HALKit/AMD64/HalDescriptorLoader.cc +++ b/dev/kernel/HALKit/AMD64/HalDescriptorLoader.cc @@ -4,6 +4,7 @@ ------------------------------------------- */ +#include <FSKit/NeFS.h> #include <ArchKit/ArchKit.h> #include <HALKit/AMD64/Processor.h> @@ -109,6 +110,8 @@ namespace Kernel::HAL hal_load_idt(idt); + NeFS::fs_init_nefs(); + Detail::hal_enable_pit(kPITTickForScheduler); rt_sti(); diff --git a/dev/kernel/HALKit/AMD64/HalKernelMain.cc b/dev/kernel/HALKit/AMD64/HalKernelMain.cc index f4dbc16e..0ebba546 100644 --- a/dev/kernel/HALKit/AMD64/HalKernelMain.cc +++ b/dev/kernel/HALKit/AMD64/HalKernelMain.cc @@ -94,7 +94,9 @@ EXTERN_C void hal_init_platform( EXTERN_C Kernel::Void hal_real_init(Kernel::Void) noexcept { - Kernel::NeFS::fs_init_nefs(); + kEndTim = hal_rdtsc_fn(); + + kout << "Boot Time: " << Kernel::number(kEndTim - kStartTim) << kendl; Kernel::HAL::mp_get_cores(kHandoverHeader->f_HardwareTables.f_VendorPtr); @@ -106,12 +108,9 @@ EXTERN_C Kernel::Void hal_real_init(Kernel::Void) noexcept kEndTim = hal_rdtsc_fn(); - kout << "Cycles Spent Before Userland: " << Kernel::number(kEndTim - kStartTim) << kendl; + kout << "Init Time: " << Kernel::number(kEndTim - kStartTim) << kendl; idt_loader.Load(idt_reg); - while (YES) - { - continue; - } + dbg_break_point(); } diff --git a/dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc b/dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc index 2a360e60..21d95b5d 100644 --- a/dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc +++ b/dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc @@ -15,7 +15,6 @@ * */ -#include "NewKit/Defines.h" #include <KernelKit/DeviceMgr.h> #include <KernelKit/DriveMgr.h> #include <KernelKit/ProcessScheduler.h> diff --git a/dev/kernel/HALKit/AMD64/Storage/PIO+Generic.cc b/dev/kernel/HALKit/AMD64/Storage/PIO+Generic.cc index c6eee7f7..aa3b50c4 100644 --- a/dev/kernel/HALKit/AMD64/Storage/PIO+Generic.cc +++ b/dev/kernel/HALKit/AMD64/Storage/PIO+Generic.cc @@ -15,7 +15,6 @@ * */ -#include "NewKit/Defines.h" #include <modules/ATA/ATA.h> #include <ArchKit/ArchKit.h> #include <KernelKit/DriveMgr.h> |
