From e159d3895e29f38ec1345d396a593a04b7475b92 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Sat, 27 Dec 2025 08:55:09 +0100 Subject: kernel! giant source code refactor. Signed-off-by: Amlal El Mahrouss --- src/kernel/HALKit/AMD64/CPUID.h | 15 +- src/kernel/HALKit/AMD64/CxxAbi.cc | 8 +- src/kernel/HALKit/AMD64/HalACPIFactoryInterface.cc | 8 +- src/kernel/HALKit/AMD64/HalAPICDmaWrapper.cc | 8 +- src/kernel/HALKit/AMD64/HalApplicationProcessor.cc | 9 +- src/kernel/HALKit/AMD64/HalCoreInterruptHandler.cc | 8 +- src/kernel/HALKit/AMD64/HalCoreSystemCalls.cc | 8 +- src/kernel/HALKit/AMD64/HalDebugOutput.cc | 8 +- src/kernel/HALKit/AMD64/HalDebugProtocol.cc | 11 +- src/kernel/HALKit/AMD64/HalDescriptorLoader.cc | 8 +- src/kernel/HALKit/AMD64/HalKernelMain.cc | 8 +- src/kernel/HALKit/AMD64/HalKernelPanic.cc | 8 +- src/kernel/HALKit/AMD64/HalPagingMgr.cc | 11 +- src/kernel/HALKit/AMD64/HalProcessor.cc | 11 +- .../HALKit/AMD64/HalSchedulerCorePrimitives.cc | 8 +- src/kernel/HALKit/AMD64/HalTimer.cc | 193 +++++++------- src/kernel/HALKit/AMD64/Hypervisor.h | 8 +- .../HALKit/AMD64/Network/Generic+Basic+RTL8139.cc | 8 +- src/kernel/HALKit/AMD64/PCI/DMA.cc | 8 +- src/kernel/HALKit/AMD64/PCI/Database.cc | 8 +- src/kernel/HALKit/AMD64/PCI/Device.cc | 8 +- src/kernel/HALKit/AMD64/PCI/Express.cc | 8 +- src/kernel/HALKit/AMD64/PCI/IO.cc | 8 +- src/kernel/HALKit/AMD64/PCI/Iterator.cc | 8 +- src/kernel/HALKit/AMD64/PCI/PCI.cc | 8 +- src/kernel/HALKit/AMD64/Paging.h | 8 +- src/kernel/HALKit/AMD64/Processor.h | 15 +- src/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc | 19 +- src/kernel/HALKit/AMD64/Storage/DMA+Generic.cc | 19 +- src/kernel/HALKit/AMD64/Storage/NVME+Generic.cc | 8 +- src/kernel/HALKit/AMD64/Storage/PIO+Generic.cc | 19 +- src/kernel/HALKit/AMD64/Storage/SCSI+Generic.cc | 8 +- src/kernel/HALKit/ARM64/APM/APM+IO.cc | 8 +- src/kernel/HALKit/ARM64/ApplicationProcessor.h | 8 +- src/kernel/HALKit/ARM64/CxxAbi.cc | 8 +- src/kernel/HALKit/ARM64/HalACPIFactoryInterface.cc | 8 +- src/kernel/HALKit/ARM64/HalApplicationProcessor.cc | 276 ++++++++++----------- src/kernel/HALKit/ARM64/HalCoreInterruptHandler.cc | 8 +- src/kernel/HALKit/ARM64/HalDebugOutput.cc | 8 +- src/kernel/HALKit/ARM64/HalKernelMain.cc | 8 +- src/kernel/HALKit/ARM64/HalKernelPanic.cc | 8 +- src/kernel/HALKit/ARM64/HalPagingMgr.cc | 11 +- src/kernel/HALKit/ARM64/HalSchedulerCore.cc | 8 +- .../HALKit/ARM64/HalSchedulerCorePrimitives.cc | 58 +++-- src/kernel/HALKit/ARM64/HalTimer.cc | 15 +- src/kernel/HALKit/ARM64/Paging.h | 8 +- src/kernel/HALKit/ARM64/Processor.h | 8 +- src/kernel/HALKit/ARM64/Storage/SCSI+Generic.cc | 8 +- src/kernel/HALKit/ARM64/Storage/UFS+Generic.cc | 11 +- src/kernel/HALKit/POWER/AP.h | 15 +- src/kernel/HALKit/POWER/HalApplicationProcessor.cc | 8 +- src/kernel/HALKit/POWER/HalDebugOutput.cc | 8 +- src/kernel/HALKit/POWER/HalHardwareThread.cc | 8 +- src/kernel/HALKit/POWER/HalVirtualMemory.cc | 8 +- src/kernel/HALKit/POWER/Processor.h | 10 +- src/kernel/HALKit/RISCV/AP.h | 15 +- src/kernel/HALKit/RISCV/HalApplicationProcessor.cc | 76 +++--- 57 files changed, 453 insertions(+), 660 deletions(-) (limited to 'src/kernel/HALKit') diff --git a/src/kernel/HALKit/AMD64/CPUID.h b/src/kernel/HALKit/AMD64/CPUID.h index c8d26a2f..fadf2da5 100644 --- a/src/kernel/HALKit/AMD64/CPUID.h +++ b/src/kernel/HALKit/AMD64/CPUID.h @@ -1,15 +1,6 @@ -/* ======================================== - - Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - - File: CPUID.h - Purpose: CPUID flags. - - Revision History: - - 30/01/24: Added file (amlel) - -======================================== */ +// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Licensed under the Apache License, Version 2.0 (see LICENSE file) +// Official repository: https://github.com/nekernel-org/nekernel #ifndef HALKIT_CPUID_H #define HALKIT_CPUID_H diff --git a/src/kernel/HALKit/AMD64/CxxAbi.cc b/src/kernel/HALKit/AMD64/CxxAbi.cc index 9049457b..f0f18266 100644 --- a/src/kernel/HALKit/AMD64/CxxAbi.cc +++ b/src/kernel/HALKit/AMD64/CxxAbi.cc @@ -1,8 +1,6 @@ -/* ======================================== - - Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - -======================================== */ +// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Licensed under the Apache License, Version 2.0 (see LICENSE file) +// Official repository: https://github.com/nekernel-org/nekernel #include #include diff --git a/src/kernel/HALKit/AMD64/HalACPIFactoryInterface.cc b/src/kernel/HALKit/AMD64/HalACPIFactoryInterface.cc index 83545df8..7368ea10 100644 --- a/src/kernel/HALKit/AMD64/HalACPIFactoryInterface.cc +++ b/src/kernel/HALKit/AMD64/HalACPIFactoryInterface.cc @@ -1,8 +1,6 @@ -/* ======================================== - - Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - -======================================== */ +// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Licensed under the Apache License, Version 2.0 (see LICENSE file) +// Official repository: https://github.com/nekernel-org/nekernel #include #include diff --git a/src/kernel/HALKit/AMD64/HalAPICDmaWrapper.cc b/src/kernel/HALKit/AMD64/HalAPICDmaWrapper.cc index 79013b26..b262f2b3 100644 --- a/src/kernel/HALKit/AMD64/HalAPICDmaWrapper.cc +++ b/src/kernel/HALKit/AMD64/HalAPICDmaWrapper.cc @@ -1,8 +1,6 @@ -/* ======================================== - - Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - -======================================== */ +// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Licensed under the Apache License, Version 2.0 (see LICENSE file) +// Official repository: https://github.com/nekernel-org/nekernel #include #include diff --git a/src/kernel/HALKit/AMD64/HalApplicationProcessor.cc b/src/kernel/HALKit/AMD64/HalApplicationProcessor.cc index 9b352dcc..9286af57 100644 --- a/src/kernel/HALKit/AMD64/HalApplicationProcessor.cc +++ b/src/kernel/HALKit/AMD64/HalApplicationProcessor.cc @@ -1,10 +1,7 @@ -/* ======================================== +// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Licensed under the Apache License, Version 2.0 (see LICENSE file) +// Official repository: https://github.com/nekernel-org/nekernel - Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - -======================================== */ - -/// Different than the MADT, might be confusing to some. #define APIC_MAG "APIC" #define APIC_ICR_LOW 0x300 diff --git a/src/kernel/HALKit/AMD64/HalCoreInterruptHandler.cc b/src/kernel/HALKit/AMD64/HalCoreInterruptHandler.cc index 02931daf..c4209870 100644 --- a/src/kernel/HALKit/AMD64/HalCoreInterruptHandler.cc +++ b/src/kernel/HALKit/AMD64/HalCoreInterruptHandler.cc @@ -1,8 +1,6 @@ -/* ======================================== - - Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - -======================================== */ +// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Licensed under the Apache License, Version 2.0 (see LICENSE file) +// Official repository: https://github.com/nekernel-org/nekernel #include #include diff --git a/src/kernel/HALKit/AMD64/HalCoreSystemCalls.cc b/src/kernel/HALKit/AMD64/HalCoreSystemCalls.cc index f50e4abd..4e089de0 100644 --- a/src/kernel/HALKit/AMD64/HalCoreSystemCalls.cc +++ b/src/kernel/HALKit/AMD64/HalCoreSystemCalls.cc @@ -1,8 +1,6 @@ -/* ======================================== - - Copyright (C) 2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - - ======================================== */ +// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Licensed under the Apache License, Version 2.0 (see LICENSE file) +// Official repository: https://github.com/nekernel-org/nekernel #include diff --git a/src/kernel/HALKit/AMD64/HalDebugOutput.cc b/src/kernel/HALKit/AMD64/HalDebugOutput.cc index 71e20ce6..dbddd092 100644 --- a/src/kernel/HALKit/AMD64/HalDebugOutput.cc +++ b/src/kernel/HALKit/AMD64/HalDebugOutput.cc @@ -1,8 +1,6 @@ -/* ======================================== - - Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - -======================================== */ +// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Licensed under the Apache License, Version 2.0 (see LICENSE file) +// Official repository: https://github.com/nekernel-org/nekernel #include #include diff --git a/src/kernel/HALKit/AMD64/HalDebugProtocol.cc b/src/kernel/HALKit/AMD64/HalDebugProtocol.cc index 1adfff3e..e7a2881b 100644 --- a/src/kernel/HALKit/AMD64/HalDebugProtocol.cc +++ b/src/kernel/HALKit/AMD64/HalDebugProtocol.cc @@ -1,11 +1,6 @@ -/* ======================================== - - Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - -======================================== */ - -//! @file DebuggerPort.cc -//! @brief UART debug via packets. +// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Licensed under the Apache License, Version 2.0 (see LICENSE file) +// Official repository: https://github.com/nekernel-org/nekernel #include #include diff --git a/src/kernel/HALKit/AMD64/HalDescriptorLoader.cc b/src/kernel/HALKit/AMD64/HalDescriptorLoader.cc index 65bf0b1e..e803f7a8 100644 --- a/src/kernel/HALKit/AMD64/HalDescriptorLoader.cc +++ b/src/kernel/HALKit/AMD64/HalDescriptorLoader.cc @@ -1,8 +1,6 @@ -/* ======================================== - - Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - -======================================== */ +// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Licensed under the Apache License, Version 2.0 (see LICENSE file) +// Official repository: https://github.com/nekernel-org/nekernel #include #include diff --git a/src/kernel/HALKit/AMD64/HalKernelMain.cc b/src/kernel/HALKit/AMD64/HalKernelMain.cc index 3a30bb04..2e2cca44 100644 --- a/src/kernel/HALKit/AMD64/HalKernelMain.cc +++ b/src/kernel/HALKit/AMD64/HalKernelMain.cc @@ -1,8 +1,6 @@ -/* ======================================== - - Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - -======================================== */ +// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Licensed under the Apache License, Version 2.0 (see LICENSE file) +// Official repository: https://github.com/nekernel-org/nekernel #include #include diff --git a/src/kernel/HALKit/AMD64/HalKernelPanic.cc b/src/kernel/HALKit/AMD64/HalKernelPanic.cc index 73121cbc..ed6a190b 100644 --- a/src/kernel/HALKit/AMD64/HalKernelPanic.cc +++ b/src/kernel/HALKit/AMD64/HalKernelPanic.cc @@ -1,8 +1,6 @@ -/* ======================================== - - Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - -======================================== */ +// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Licensed under the Apache License, Version 2.0 (see LICENSE file) +// Official repository: https://github.com/nekernel-org/nekernel #include #include diff --git a/src/kernel/HALKit/AMD64/HalPagingMgr.cc b/src/kernel/HALKit/AMD64/HalPagingMgr.cc index 4043da96..52561b5c 100644 --- a/src/kernel/HALKit/AMD64/HalPagingMgr.cc +++ b/src/kernel/HALKit/AMD64/HalPagingMgr.cc @@ -1,11 +1,6 @@ -/* ======================================== - - Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - - File: HalPagingMgr.cc - Purpose: Platform Paging Manager. - -======================================== */ +// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Licensed under the Apache License, Version 2.0 (see LICENSE file) +// Official repository: https://github.com/nekernel-org/nekernel #include #include diff --git a/src/kernel/HALKit/AMD64/HalProcessor.cc b/src/kernel/HALKit/AMD64/HalProcessor.cc index cebf5e38..50c2ca53 100644 --- a/src/kernel/HALKit/AMD64/HalProcessor.cc +++ b/src/kernel/HALKit/AMD64/HalProcessor.cc @@ -1,11 +1,6 @@ -/* ======================================== - - Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - - File: HalCPU.cc - Purpose: Platform processor routines. - -======================================== */ +// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Licensed under the Apache License, Version 2.0 (see LICENSE file) +// Official repository: https://github.com/nekernel-org/nekernel #include #include diff --git a/src/kernel/HALKit/AMD64/HalSchedulerCorePrimitives.cc b/src/kernel/HALKit/AMD64/HalSchedulerCorePrimitives.cc index f120bd39..3571d2af 100644 --- a/src/kernel/HALKit/AMD64/HalSchedulerCorePrimitives.cc +++ b/src/kernel/HALKit/AMD64/HalSchedulerCorePrimitives.cc @@ -1,8 +1,6 @@ -/* ======================================== - - Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - -======================================== */ +// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Licensed under the Apache License, Version 2.0 (see LICENSE file) +// Official repository: https://github.com/nekernel-org/nekernel #include #include diff --git a/src/kernel/HALKit/AMD64/HalTimer.cc b/src/kernel/HALKit/AMD64/HalTimer.cc index 8d5c0737..275c1ece 100644 --- a/src/kernel/HALKit/AMD64/HalTimer.cc +++ b/src/kernel/HALKit/AMD64/HalTimer.cc @@ -1,101 +1,92 @@ -/* ======================================== - - Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - - File: HalTimer.cc - Purpose: HAL timer - - Revision History: - - 07/07/24: Added file (amlel) - -======================================== */ - -#include -#include -#include - -/// ================================================================================ -/// @note timer slot 0 -/// ================================================================================ - -#define kHPETSignature ("HPET") - -#define kHPETCounterRegValue (0x00) -#define kHPETConfigRegValue (0x20) -#define kHPETCompRegValue (0x24) -#define kHPETInterruptRegValue (0x2C) - -/// ================================================================================ -///! BUGS: 0 -///! @file HalTimer.cc -///! @brief Hardware Timer (HPET) -/// ================================================================================ - -namespace Kernel::Detail { -struct HPET_BLOCK : public Kernel::SDT { - Kernel::UInt8 hardware_rev_id; - Kernel::UInt8 comparator_count : 5; - Kernel::UInt8 counter_size : 1; - Kernel::UInt8 reserved : 1; - Kernel::UInt8 legacy_replacement : 1; - Kernel::UInt16 pci_vendor_id; - ACPI_ADDRESS address; - Kernel::UInt8 hpet_number; - Kernel::UInt16 minimum_tick; - Kernel::UInt8 page_protection; -} PACKED; -} // namespace Kernel::Detail - -using namespace Kernel; - -HardwareTimer::HardwareTimer(UInt64 ms) : fWaitFor(ms) { - auto power = PowerFactoryInterface(kHandoverHeader->f_HardwareTables.f_VendorPtr); - - auto hpet = (Detail::HPET_BLOCK*) power.Find(kHPETSignature).Leak().Leak(); - MUST_PASS(hpet); - - fDigitalTimer = (UInt8*) hpet->address.Address; - - if (hpet->page_protection) { - HAL::mm_map_page((VoidPtr) fDigitalTimer, (VoidPtr) fDigitalTimer, - HAL::kMMFlagsWr | HAL::kMMFlagsPCD | HAL::kMMFlagsPwt); - } - - // if not enabled yet. - if (!(*((volatile UInt64*) ((UInt8*) fDigitalTimer + kHPETConfigRegValue)) & (1 << 0))) { - *((volatile UInt64*) ((UInt8*) fDigitalTimer + kHPETConfigRegValue)) = - *((volatile UInt64*) ((UInt8*) fDigitalTimer + kHPETConfigRegValue)) | (1 << 0) | - (1 << 3); // enable timer & one shot conf - } -} - -HardwareTimer::~HardwareTimer() { - fDigitalTimer = nullptr; - fWaitFor = 0; -} - -/***********************************************************************************/ -/// @brief Wait for the timer to stop spinning. -/***********************************************************************************/ - -BOOL HardwareTimer::Wait() { - if (fWaitFor < 1) return NO; - if (fWaitFor > 1'000'000) return NO; // max 1000s = 16 minutes - - UInt64 hpet_cap = *((volatile UInt64*) (fDigitalTimer)); - UInt64 femtoseconds_per_tick = (hpet_cap >> 32); - - if (femtoseconds_per_tick == 0) return NO; - - volatile UInt64* timer = (volatile UInt64*) (fDigitalTimer + kHPETCounterRegValue); - - UInt64 now = *timer; - - UInt64 fs_wait = fWaitFor * 1'000'000'000'000ULL; - UInt64 stop_at = now + (fs_wait / femtoseconds_per_tick); - - while (*timer < (stop_at)) asm volatile("pause"); - - return YES; -} +// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Licensed under the Apache License, Version 2.0 (see LICENSE file) +// Official repository: https://github.com/nekernel-org/nekernel + +#include +#include +#include + +/// ================================================================================ +/// @note timer slot 0 +/// ================================================================================ + +#define kHPETSignature ("HPET") + +#define kHPETCounterRegValue (0x00) +#define kHPETConfigRegValue (0x20) +#define kHPETCompRegValue (0x24) +#define kHPETInterruptRegValue (0x2C) + +/// ================================================================================ +///! BUGS: 0 +///! @file HalTimer.cc +///! @brief Hardware Timer (HPET) +/// ================================================================================ + +namespace Kernel::Detail { +struct HPET_BLOCK : public Kernel::SDT { + Kernel::UInt8 hardware_rev_id; + Kernel::UInt8 comparator_count : 5; + Kernel::UInt8 counter_size : 1; + Kernel::UInt8 reserved : 1; + Kernel::UInt8 legacy_replacement : 1; + Kernel::UInt16 pci_vendor_id; + ACPI_ADDRESS address; + Kernel::UInt8 hpet_number; + Kernel::UInt16 minimum_tick; + Kernel::UInt8 page_protection; +} PACKED; +} // namespace Kernel::Detail + +using namespace Kernel; + +HardwareTimer::HardwareTimer(UInt64 ms) : fWaitFor(ms) { + auto power = PowerFactoryInterface(kHandoverHeader->f_HardwareTables.f_VendorPtr); + + auto hpet = (Detail::HPET_BLOCK*) power.Find(kHPETSignature).Leak().Leak(); + MUST_PASS(hpet); + + fDigitalTimer = (UInt8*) hpet->address.Address; + + if (hpet->page_protection) { + HAL::mm_map_page((VoidPtr) fDigitalTimer, (VoidPtr) fDigitalTimer, + HAL::kMMFlagsWr | HAL::kMMFlagsPCD | HAL::kMMFlagsPwt); + } + + // if not enabled yet. + if (!(*((volatile UInt64*) ((UInt8*) fDigitalTimer + kHPETConfigRegValue)) & (1 << 0))) { + *((volatile UInt64*) ((UInt8*) fDigitalTimer + kHPETConfigRegValue)) = + *((volatile UInt64*) ((UInt8*) fDigitalTimer + kHPETConfigRegValue)) | (1 << 0) | + (1 << 3); // enable timer & one shot conf + } +} + +HardwareTimer::~HardwareTimer() { + fDigitalTimer = nullptr; + fWaitFor = 0; +} + +/***********************************************************************************/ +/// @brief Wait for the timer to stop spinning. +/***********************************************************************************/ + +BOOL HardwareTimer::Wait() { + if (fWaitFor < 1) return NO; + if (fWaitFor > 1'000'000) return NO; // max 1000s = 16 minutes + + UInt64 hpet_cap = *((volatile UInt64*) (fDigitalTimer)); + UInt64 femtoseconds_per_tick = (hpet_cap >> 32); + + if (femtoseconds_per_tick == 0) return NO; + + volatile UInt64* timer = (volatile UInt64*) (fDigitalTimer + kHPETCounterRegValue); + + UInt64 now = *timer; + + UInt64 fs_wait = fWaitFor * 1'000'000'000'000ULL; + UInt64 stop_at = now + (fs_wait / femtoseconds_per_tick); + + while (*timer < (stop_at)) asm volatile("pause"); + + return YES; +} diff --git a/src/kernel/HALKit/AMD64/Hypervisor.h b/src/kernel/HALKit/AMD64/Hypervisor.h index 70b2111a..6bb0b058 100644 --- a/src/kernel/HALKit/AMD64/Hypervisor.h +++ b/src/kernel/HALKit/AMD64/Hypervisor.h @@ -1,8 +1,6 @@ -/* ======================================== - - Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - -======================================== */ +// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Licensed under the Apache License, Version 2.0 (see LICENSE file) +// Official repository: https://github.com/nekernel-org/nekernel #ifndef HALKIT_HYPERVISOR_H #define HALKIT_HYPERVISOR_H diff --git a/src/kernel/HALKit/AMD64/Network/Generic+Basic+RTL8139.cc b/src/kernel/HALKit/AMD64/Network/Generic+Basic+RTL8139.cc index db839994..2f6cc6da 100644 --- a/src/kernel/HALKit/AMD64/Network/Generic+Basic+RTL8139.cc +++ b/src/kernel/HALKit/AMD64/Network/Generic+Basic+RTL8139.cc @@ -1,8 +1,6 @@ -/* ======================================== - -Copyright (C) 2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - -======================================== */ +// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Licensed under the Apache License, Version 2.0 (see LICENSE file) +// Official repository: https://github.com/nekernel-org/nekernel #include #include diff --git a/src/kernel/HALKit/AMD64/PCI/DMA.cc b/src/kernel/HALKit/AMD64/PCI/DMA.cc index dfbc1f68..73e5e401 100644 --- a/src/kernel/HALKit/AMD64/PCI/DMA.cc +++ b/src/kernel/HALKit/AMD64/PCI/DMA.cc @@ -1,8 +1,6 @@ -/* ======================================== - - Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - -======================================== */ +// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Licensed under the Apache License, Version 2.0 (see LICENSE file) +// Official repository: https://github.com/nekernel-org/nekernel #include #include diff --git a/src/kernel/HALKit/AMD64/PCI/Database.cc b/src/kernel/HALKit/AMD64/PCI/Database.cc index ba3e946c..7eb098da 100644 --- a/src/kernel/HALKit/AMD64/PCI/Database.cc +++ b/src/kernel/HALKit/AMD64/PCI/Database.cc @@ -1,8 +1,6 @@ -/* ======================================== - - Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - -======================================== */ +// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Licensed under the Apache License, Version 2.0 (see LICENSE file) +// Official repository: https://github.com/nekernel-org/nekernel #include diff --git a/src/kernel/HALKit/AMD64/PCI/Device.cc b/src/kernel/HALKit/AMD64/PCI/Device.cc index 65af2f25..dcc16e6a 100644 --- a/src/kernel/HALKit/AMD64/PCI/Device.cc +++ b/src/kernel/HALKit/AMD64/PCI/Device.cc @@ -1,8 +1,6 @@ -/* ======================================== - - Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - -======================================== */ +// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Licensed under the Apache License, Version 2.0 (see LICENSE file) +// Official repository: https://github.com/nekernel-org/nekernel #include #include diff --git a/src/kernel/HALKit/AMD64/PCI/Express.cc b/src/kernel/HALKit/AMD64/PCI/Express.cc index 2b6ba8d3..e0264d9e 100644 --- a/src/kernel/HALKit/AMD64/PCI/Express.cc +++ b/src/kernel/HALKit/AMD64/PCI/Express.cc @@ -1,8 +1,6 @@ -/* ======================================== - - Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - -======================================== */ +// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Licensed under the Apache License, Version 2.0 (see LICENSE file) +// Official repository: https://github.com/nekernel-org/nekernel #include diff --git a/src/kernel/HALKit/AMD64/PCI/IO.cc b/src/kernel/HALKit/AMD64/PCI/IO.cc index 233c8ef2..8cc9c83a 100644 --- a/src/kernel/HALKit/AMD64/PCI/IO.cc +++ b/src/kernel/HALKit/AMD64/PCI/IO.cc @@ -1,7 +1,5 @@ -/* ======================================== - - Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - -======================================== */ +// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Licensed under the Apache License, Version 2.0 (see LICENSE file) +// Official repository: https://github.com/nekernel-org/nekernel #include diff --git a/src/kernel/HALKit/AMD64/PCI/Iterator.cc b/src/kernel/HALKit/AMD64/PCI/Iterator.cc index 103ddb2c..8216befa 100644 --- a/src/kernel/HALKit/AMD64/PCI/Iterator.cc +++ b/src/kernel/HALKit/AMD64/PCI/Iterator.cc @@ -1,8 +1,6 @@ -/* ======================================== - - Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - -======================================== */ +// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Licensed under the Apache License, Version 2.0 (see LICENSE file) +// Official repository: https://github.com/nekernel-org/nekernel #include diff --git a/src/kernel/HALKit/AMD64/PCI/PCI.cc b/src/kernel/HALKit/AMD64/PCI/PCI.cc index a8c48fb9..b8a1302d 100644 --- a/src/kernel/HALKit/AMD64/PCI/PCI.cc +++ b/src/kernel/HALKit/AMD64/PCI/PCI.cc @@ -1,7 +1,5 @@ -/* ======================================== - - Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - -======================================== */ +// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Licensed under the Apache License, Version 2.0 (see LICENSE file) +// Official repository: https://github.com/nekernel-org/nekernel #include diff --git a/src/kernel/HALKit/AMD64/Paging.h b/src/kernel/HALKit/AMD64/Paging.h index 162e5fd3..41543f5d 100644 --- a/src/kernel/HALKit/AMD64/Paging.h +++ b/src/kernel/HALKit/AMD64/Paging.h @@ -1,8 +1,6 @@ -/* ======================================== - - Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - -======================================== */ +// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Licensed under the Apache License, Version 2.0 (see LICENSE file) +// Official repository: https://github.com/nekernel-org/nekernel #ifndef HALKIT_PAGING_H #define HALKIT_PAGING_H diff --git a/src/kernel/HALKit/AMD64/Processor.h b/src/kernel/HALKit/AMD64/Processor.h index 352af95f..7501ec63 100644 --- a/src/kernel/HALKit/AMD64/Processor.h +++ b/src/kernel/HALKit/AMD64/Processor.h @@ -1,15 +1,6 @@ -/* ======================================== - - Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - - File: Prcoessor.h - Purpose: AMD64 processor abstraction. - - Revision History: - - 30/01/24: Added file (amlel) - -======================================== */ +// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Licensed under the Apache License, Version 2.0 (see LICENSE file) +// Official repository: https://github.com/nekernel-org/nekernel #ifndef HALKIT_PROCESSOR_H #define HALKIT_PROCESSOR_H diff --git a/src/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc b/src/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc index 561b03cb..28969475 100644 --- a/src/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc +++ b/src/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc @@ -1,19 +1,6 @@ -/* ======================================== - - Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - -======================================== */ - -/** - * @file AHCI+Generic.cc - * @author Amlal El Mahrouss (amlal@nekernel.org) - * @brief AHCI Generic driver. - * @version 0.1 - * @date 2024-02-02 - * - * @copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - * - */ +// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Licensed under the Apache License, Version 2.0 (see LICENSE file) +// Official repository: https://github.com/nekernel-org/nekernel #include #include diff --git a/src/kernel/HALKit/AMD64/Storage/DMA+Generic.cc b/src/kernel/HALKit/AMD64/Storage/DMA+Generic.cc index 5a51d685..8bf7b161 100644 --- a/src/kernel/HALKit/AMD64/Storage/DMA+Generic.cc +++ b/src/kernel/HALKit/AMD64/Storage/DMA+Generic.cc @@ -1,19 +1,6 @@ -/* ======================================== - - Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - -======================================== */ - -/** - * @file DMA+Generic.cc - * @author Amlal El Mahrouss (amlal@nekernel.org) - * @brief ATA driver (DMA mode). - * @version 0.1 - * @date 2024-02-02 - * - * @copyright Copyright (c) Amlal El Mahrouss - * - */ +// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Licensed under the Apache License, Version 2.0 (see LICENSE file) +// Official repository: https://github.com/nekernel-org/nekernel #include #include diff --git a/src/kernel/HALKit/AMD64/Storage/NVME+Generic.cc b/src/kernel/HALKit/AMD64/Storage/NVME+Generic.cc index 88f95a86..7b0726e7 100644 --- a/src/kernel/HALKit/AMD64/Storage/NVME+Generic.cc +++ b/src/kernel/HALKit/AMD64/Storage/NVME+Generic.cc @@ -1,8 +1,6 @@ -/* ======================================== - - Copyright (C) 2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - -======================================== */ +// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Licensed under the Apache License, Version 2.0 (see LICENSE file) +// Official repository: https://github.com/nekernel-org/nekernel #include diff --git a/src/kernel/HALKit/AMD64/Storage/PIO+Generic.cc b/src/kernel/HALKit/AMD64/Storage/PIO+Generic.cc index a62884f9..19497b5f 100644 --- a/src/kernel/HALKit/AMD64/Storage/PIO+Generic.cc +++ b/src/kernel/HALKit/AMD64/Storage/PIO+Generic.cc @@ -1,19 +1,6 @@ -/* ======================================== - - Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - -======================================== */ - -/** - * @file PIO+Generic.cc - * @author Amlal El Mahrouss (amlal@nekernel.org) - * @brief ATA driver (PIO mode). - * @version 0.1 - * @date 2024-02-02 - * - * @copyright Copyright (c) Amlal El Mahrouss - * - */ +// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Licensed under the Apache License, Version 2.0 (see LICENSE file) +// Official repository: https://github.com/nekernel-org/nekernel #include #include diff --git a/src/kernel/HALKit/AMD64/Storage/SCSI+Generic.cc b/src/kernel/HALKit/AMD64/Storage/SCSI+Generic.cc index 0200ec5a..f73946d7 100644 --- a/src/kernel/HALKit/AMD64/Storage/SCSI+Generic.cc +++ b/src/kernel/HALKit/AMD64/Storage/SCSI+Generic.cc @@ -1,8 +1,6 @@ -/* ======================================== - - Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - -======================================== */ +// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Licensed under the Apache License, Version 2.0 (see LICENSE file) +// Official repository: https://github.com/nekernel-org/nekernel #include diff --git a/src/kernel/HALKit/ARM64/APM/APM+IO.cc b/src/kernel/HALKit/ARM64/APM/APM+IO.cc index c4d0154b..91b8255e 100644 --- a/src/kernel/HALKit/ARM64/APM/APM+IO.cc +++ b/src/kernel/HALKit/ARM64/APM/APM+IO.cc @@ -1,8 +1,6 @@ -/* ======================================== - - Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - -======================================== */ +// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Licensed under the Apache License, Version 2.0 (see LICENSE file) +// Official repository: https://github.com/nekernel-org/nekernel #include #include diff --git a/src/kernel/HALKit/ARM64/ApplicationProcessor.h b/src/kernel/HALKit/ARM64/ApplicationProcessor.h index 2ce60dd1..11903786 100644 --- a/src/kernel/HALKit/ARM64/ApplicationProcessor.h +++ b/src/kernel/HALKit/ARM64/ApplicationProcessor.h @@ -1,8 +1,6 @@ -/* ======================================== - - Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - -======================================== */ +// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Licensed under the Apache License, Version 2.0 (see LICENSE file) +// Official repository: https://github.com/nekernel-org/nekernel #ifndef HALKIT_APPLICATIONPROCESSOR_H #define HALKIT_APPLICATIONPROCESSOR_H diff --git a/src/kernel/HALKit/ARM64/CxxAbi.cc b/src/kernel/HALKit/ARM64/CxxAbi.cc index 7b4eca20..7b19aa71 100644 --- a/src/kernel/HALKit/ARM64/CxxAbi.cc +++ b/src/kernel/HALKit/ARM64/CxxAbi.cc @@ -1,8 +1,6 @@ -/* ======================================== - - Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - -======================================== */ +// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Licensed under the Apache License, Version 2.0 (see LICENSE file) +// Official repository: https://github.com/nekernel-org/nekernel #include #include diff --git a/src/kernel/HALKit/ARM64/HalACPIFactoryInterface.cc b/src/kernel/HALKit/ARM64/HalACPIFactoryInterface.cc index 9a8661cd..544d1ee1 100644 --- a/src/kernel/HALKit/ARM64/HalACPIFactoryInterface.cc +++ b/src/kernel/HALKit/ARM64/HalACPIFactoryInterface.cc @@ -1,8 +1,6 @@ -/* ======================================== - - Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - -======================================== */ +// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Licensed under the Apache License, Version 2.0 (see LICENSE file) +// Official repository: https://github.com/nekernel-org/nekernel #include #include diff --git a/src/kernel/HALKit/ARM64/HalApplicationProcessor.cc b/src/kernel/HALKit/ARM64/HalApplicationProcessor.cc index fff4282f..33921a56 100644 --- a/src/kernel/HALKit/ARM64/HalApplicationProcessor.cc +++ b/src/kernel/HALKit/ARM64/HalApplicationProcessor.cc @@ -1,140 +1,138 @@ -/* ======================================== - - Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - -======================================== */ - -#define GICD_BASE 0x08000000 -#define GICC_BASE 0x08010000 - -#define GICD_CTLR 0x000 -#define GICD_ISENABLER 0x100 -#define GICD_ICENABLER 0x180 -#define GICD_ISPENDR 0x200 -#define GICD_ICPENDR 0x280 -#define GICD_IPRIORITYR 0x400 -#define GICD_ITARGETSR 0x800 -#define GICD_ICFGR 0xC00 - -#define GICC_CTLR 0x000 -#define GICC_PMR 0x004 -#define GICC_IAR 0x00C -#define GICC_EOIR 0x010 - -#include -#include -#include -#include -#include -#include - -// ================================================================= // - -namespace Kernel { -struct HAL_HARDWARE_THREAD final { - HAL::StackFramePtr mFramePtr; - ProcessID mThreadID{0}; -}; - -STATIC HAL_HARDWARE_THREAD kHWThread[kMaxAPInsideSched] = {{nullptr}}; - -namespace Detail { - STATIC BOOL kGICEnabled = NO; - - /***********************************************************************************/ - /// @brief Enables the GIC with EL0 configuration. - /// @internal - /***********************************************************************************/ - STATIC Void mp_setup_gic_el0(Void) { - ke_dma_write(GICD_BASE, GICD_CTLR, YES); - - UInt32 gicc_ctlr = ke_dma_read(GICC_BASE, GICC_CTLR); - - const UInt8 kEnableSignalInt = 0x1; - - gicc_ctlr |= kEnableSignalInt; - gicc_ctlr |= (kEnableSignalInt << 0x1); - - ke_dma_write(GICC_BASE, GICC_CTLR, gicc_ctlr); - - ke_dma_write(GICC_BASE, GICC_PMR, 0xFF); - - UInt32 icfgr = ke_dma_read(GICD_BASE, GICD_ICFGR + (0x20 / 0x10) * 4); - - icfgr |= (0x2 << ((32 % 16) * 2)); - - ke_dma_write(GICD_BASE, GICD_ICFGR + (0x20 / 0x10) * 4, icfgr); - ke_dma_write(GICD_BASE, GICD_ITARGETSR + (0x20 / 0x04) * 4, 0x2 << ((32 % 4) * 8)); - ke_dma_write(GICD_BASE, GICD_IPRIORITYR + (0x20 / 0x04) * 4, 0xFF << ((32 % 4) * 8)); - ke_dma_write(GICD_BASE, GICD_ISENABLER + 4, 0x01); - } - - EXTERN_C BOOL mp_handle_gic_interrupt_el0(Void) { - UInt32 interrupt_id = ke_dma_read(GICC_BASE, GICC_IAR); - - if ((interrupt_id & 0x3FF) < 1020) { - auto interrupt = interrupt_id & 0x3FF; - - const UInt16 kInterruptScheduler = 0x20; - - (Void)(kout << "SMP: AP: " << hex_number(interrupt) << kendl); - - switch (interrupt) { - case kInterruptScheduler: { - ke_dma_write(GICC_BASE, GICC_EOIR, interrupt_id); - UserProcessHelper::StartScheduling(); - break; - } - default: { - ke_dma_write(GICC_BASE, GICC_EOIR, interrupt_id); - break; - } - } - - return YES; - } - - return NO; - } -} // namespace Detail - -/***********************************************************************************/ -/// @brief Get current stack frame for a thread. -/// @param thrdid The thread ID. -/***********************************************************************************/ - -EXTERN_C HAL::StackFramePtr mp_get_current_task(ProcessID thrdid) { - return kHWThread[thrdid].mFramePtr; -} - -/***********************************************************************************/ -/// @brief Register current stack frame for a thread. -/// @param stack_frame The current stack frame. -/// @param thrdid The thread ID. -/***********************************************************************************/ - -EXTERN_C Bool mp_register_task(HAL::StackFramePtr stack_frame, ProcessID thrdid) { - MUST_PASS(Detail::kGICEnabled); - - if (!stack_frame) return NO; - if (thrdid > kMaxAPInsideSched) return NO; - - const auto process_index = thrdid; - - kHWThread[process_index].mFramePtr = stack_frame; - kHWThread[process_index].mThreadID = thrdid; - - return YES; -} - -/***********************************************************************************/ -/// @brief Initialize the Global Interrupt Controller. -/// @internal -/***********************************************************************************/ -Void mp_init_cores(Void) { - if (!Detail::kGICEnabled) { - Detail::kGICEnabled = YES; - Detail::mp_setup_gic_el0(); - } -} +// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Licensed under the Apache License, Version 2.0 (see LICENSE file) +// Official repository: https://github.com/nekernel-org/nekernel + +#define GICD_BASE 0x08000000 +#define GICC_BASE 0x08010000 + +#define GICD_CTLR 0x000 +#define GICD_ISENABLER 0x100 +#define GICD_ICENABLER 0x180 +#define GICD_ISPENDR 0x200 +#define GICD_ICPENDR 0x280 +#define GICD_IPRIORITYR 0x400 +#define GICD_ITARGETSR 0x800 +#define GICD_ICFGR 0xC00 + +#define GICC_CTLR 0x000 +#define GICC_PMR 0x004 +#define GICC_IAR 0x00C +#define GICC_EOIR 0x010 + +#include +#include +#include +#include +#include +#include + +// ================================================================= // + +namespace Kernel { +struct HAL_HARDWARE_THREAD final { + HAL::StackFramePtr mFramePtr; + ProcessID mThreadID{0}; +}; + +STATIC HAL_HARDWARE_THREAD kHWThread[kMaxAPInsideSched] = {{nullptr}}; + +namespace Detail { + STATIC BOOL kGICEnabled = NO; + + /***********************************************************************************/ + /// @brief Enables the GIC with EL0 configuration. + /// @internal + /***********************************************************************************/ + STATIC Void mp_setup_gic_el0(Void) { + ke_dma_write(GICD_BASE, GICD_CTLR, YES); + + UInt32 gicc_ctlr = ke_dma_read(GICC_BASE, GICC_CTLR); + + const UInt8 kEnableSignalInt = 0x1; + + gicc_ctlr |= kEnableSignalInt; + gicc_ctlr |= (kEnableSignalInt << 0x1); + + ke_dma_write(GICC_BASE, GICC_CTLR, gicc_ctlr); + + ke_dma_write(GICC_BASE, GICC_PMR, 0xFF); + + UInt32 icfgr = ke_dma_read(GICD_BASE, GICD_ICFGR + (0x20 / 0x10) * 4); + + icfgr |= (0x2 << ((32 % 16) * 2)); + + ke_dma_write(GICD_BASE, GICD_ICFGR + (0x20 / 0x10) * 4, icfgr); + ke_dma_write(GICD_BASE, GICD_ITARGETSR + (0x20 / 0x04) * 4, 0x2 << ((32 % 4) * 8)); + ke_dma_write(GICD_BASE, GICD_IPRIORITYR + (0x20 / 0x04) * 4, 0xFF << ((32 % 4) * 8)); + ke_dma_write(GICD_BASE, GICD_ISENABLER + 4, 0x01); + } + + EXTERN_C BOOL mp_handle_gic_interrupt_el0(Void) { + UInt32 interrupt_id = ke_dma_read(GICC_BASE, GICC_IAR); + + if ((interrupt_id & 0x3FF) < 1020) { + auto interrupt = interrupt_id & 0x3FF; + + const UInt16 kInterruptScheduler = 0x20; + + (Void)(kout << "SMP: AP: " << hex_number(interrupt) << kendl); + + switch (interrupt) { + case kInterruptScheduler: { + ke_dma_write(GICC_BASE, GICC_EOIR, interrupt_id); + UserProcessHelper::StartScheduling(); + break; + } + default: { + ke_dma_write(GICC_BASE, GICC_EOIR, interrupt_id); + break; + } + } + + return YES; + } + + return NO; + } +} // namespace Detail + +/***********************************************************************************/ +/// @brief Get current stack frame for a thread. +/// @param thrdid The thread ID. +/***********************************************************************************/ + +EXTERN_C HAL::StackFramePtr mp_get_current_task(ProcessID thrdid) { + return kHWThread[thrdid].mFramePtr; +} + +/***********************************************************************************/ +/// @brief Register current stack frame for a thread. +/// @param stack_frame The current stack frame. +/// @param thrdid The thread ID. +/***********************************************************************************/ + +EXTERN_C Bool mp_register_task(HAL::StackFramePtr stack_frame, ProcessID thrdid) { + MUST_PASS(Detail::kGICEnabled); + + if (!stack_frame) return NO; + if (thrdid > kMaxAPInsideSched) return NO; + + const auto process_index = thrdid; + + kHWThread[process_index].mFramePtr = stack_frame; + kHWThread[process_index].mThreadID = thrdid; + + return YES; +} + +/***********************************************************************************/ +/// @brief Initialize the Global Interrupt Controller. +/// @internal +/***********************************************************************************/ +Void mp_init_cores(Void) { + if (!Detail::kGICEnabled) { + Detail::kGICEnabled = YES; + Detail::mp_setup_gic_el0(); + } +} } // namespace Kernel \ No newline at end of file diff --git a/src/kernel/HALKit/ARM64/HalCoreInterruptHandler.cc b/src/kernel/HALKit/ARM64/HalCoreInterruptHandler.cc index a9bbb044..bb735ffb 100644 --- a/src/kernel/HALKit/ARM64/HalCoreInterruptHandler.cc +++ b/src/kernel/HALKit/ARM64/HalCoreInterruptHandler.cc @@ -1,8 +1,6 @@ -/* ======================================== - - Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - -======================================== */ +// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Licensed under the Apache License, Version 2.0 (see LICENSE file) +// Official repository: https://github.com/nekernel-org/nekernel #include #include diff --git a/src/kernel/HALKit/ARM64/HalDebugOutput.cc b/src/kernel/HALKit/ARM64/HalDebugOutput.cc index 2a49bb56..4e47d38e 100644 --- a/src/kernel/HALKit/ARM64/HalDebugOutput.cc +++ b/src/kernel/HALKit/ARM64/HalDebugOutput.cc @@ -1,8 +1,6 @@ -/* ======================================== - - Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - -======================================== */ +// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Licensed under the Apache License, Version 2.0 (see LICENSE file) +// Official repository: https://github.com/nekernel-org/nekernel #include #include diff --git a/src/kernel/HALKit/ARM64/HalKernelMain.cc b/src/kernel/HALKit/ARM64/HalKernelMain.cc index 1cd10838..3a6e4085 100644 --- a/src/kernel/HALKit/ARM64/HalKernelMain.cc +++ b/src/kernel/HALKit/ARM64/HalKernelMain.cc @@ -1,8 +1,6 @@ -/* ======================================== - - Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - -======================================== */ +// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Licensed under the Apache License, Version 2.0 (see LICENSE file) +// Official repository: https://github.com/nekernel-org/nekernel #include #include diff --git a/src/kernel/HALKit/ARM64/HalKernelPanic.cc b/src/kernel/HALKit/ARM64/HalKernelPanic.cc index 6c3afe83..59397611 100644 --- a/src/kernel/HALKit/ARM64/HalKernelPanic.cc +++ b/src/kernel/HALKit/ARM64/HalKernelPanic.cc @@ -1,8 +1,6 @@ -/* ======================================== - - Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - -======================================== */ +// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Licensed under the Apache License, Version 2.0 (see LICENSE file) +// Official repository: https://github.com/nekernel-org/nekernel #include #include diff --git a/src/kernel/HALKit/ARM64/HalPagingMgr.cc b/src/kernel/HALKit/ARM64/HalPagingMgr.cc index d597ccce..0fe4d759 100644 --- a/src/kernel/HALKit/ARM64/HalPagingMgr.cc +++ b/src/kernel/HALKit/ARM64/HalPagingMgr.cc @@ -1,11 +1,6 @@ -/* ======================================== - - Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - - File: HalPagingMgr.cc - Purpose: Platform Paging Manager. - -======================================== */ +// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Licensed under the Apache License, Version 2.0 (see LICENSE file) +// Official repository: https://github.com/nekernel-org/nekernel #include #include diff --git a/src/kernel/HALKit/ARM64/HalSchedulerCore.cc b/src/kernel/HALKit/ARM64/HalSchedulerCore.cc index 467547b0..ecf666e8 100644 --- a/src/kernel/HALKit/ARM64/HalSchedulerCore.cc +++ b/src/kernel/HALKit/ARM64/HalSchedulerCore.cc @@ -1,8 +1,6 @@ -/* ======================================== - - Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - -======================================== */ +// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Licensed under the Apache License, Version 2.0 (see LICENSE file) +// Official repository: https://github.com/nekernel-org/nekernel #include diff --git a/src/kernel/HALKit/ARM64/HalSchedulerCorePrimitives.cc b/src/kernel/HALKit/ARM64/HalSchedulerCorePrimitives.cc index 87fa1ab6..960dbc6d 100644 --- a/src/kernel/HALKit/ARM64/HalSchedulerCorePrimitives.cc +++ b/src/kernel/HALKit/ARM64/HalSchedulerCorePrimitives.cc @@ -1,30 +1,28 @@ -/* ======================================== - - Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - -======================================== */ - -#include -#include - -namespace Kernel { -/***********************************************************************************/ -/// @brief Unimplemented function (crashes by default) -/// @param process The process handle. -/***********************************************************************************/ - -EXTERN_C Void __ne_pure_call(UserProcess* process) { - if (process) process->Crash(); -} - -/***********************************************************************************/ -/// @brief Validate user stack. -/// @param stack_ptr the frame pointer. -/***********************************************************************************/ - -EXTERN_C Bool hal_check_task(HAL::StackFramePtr stack_ptr) { - if (!stack_ptr) return No; - - return stack_ptr->SP != 0 && stack_ptr->IP != 0; -} -} // namespace Kernel +// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Licensed under the Apache License, Version 2.0 (see LICENSE file) +// Official repository: https://github.com/nekernel-org/nekernel + +#include +#include + +namespace Kernel { +/***********************************************************************************/ +/// @brief Unimplemented function (crashes by default) +/// @param process The process handle. +/***********************************************************************************/ + +EXTERN_C Void __ne_pure_call(UserProcess* process) { + if (process) process->Crash(); +} + +/***********************************************************************************/ +/// @brief Validate user stack. +/// @param stack_ptr the frame pointer. +/***********************************************************************************/ + +EXTERN_C Bool hal_check_task(HAL::StackFramePtr stack_ptr) { + if (!stack_ptr) return No; + + return stack_ptr->SP != 0 && stack_ptr->IP != 0; +} +} // namespace Kernel diff --git a/src/kernel/HALKit/ARM64/HalTimer.cc b/src/kernel/HALKit/ARM64/HalTimer.cc index 2f524a1b..3084838d 100644 --- a/src/kernel/HALKit/ARM64/HalTimer.cc +++ b/src/kernel/HALKit/ARM64/HalTimer.cc @@ -1,15 +1,6 @@ -/* ======================================== - - Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - - File: HalTimer.cc - Purpose: HAL timer - - Revision History: - - 07/07/24: Added file (amlel) - -======================================== */ +// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Licensed under the Apache License, Version 2.0 (see LICENSE file) +// Official repository: https://github.com/nekernel-org/nekernel #include #include \ No newline at end of file diff --git a/src/kernel/HALKit/ARM64/Paging.h b/src/kernel/HALKit/ARM64/Paging.h index 7526b640..8dedf65f 100644 --- a/src/kernel/HALKit/ARM64/Paging.h +++ b/src/kernel/HALKit/ARM64/Paging.h @@ -1,8 +1,6 @@ -/* ======================================== - - Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - -======================================== */ +// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Licensed under the Apache License, Version 2.0 (see LICENSE file) +// Official repository: https://github.com/nekernel-org/nekernel #ifndef HALKIT_PAGING_H #define HALKIT_PAGING_H diff --git a/src/kernel/HALKit/ARM64/Processor.h b/src/kernel/HALKit/ARM64/Processor.h index f4df9a92..ca69fc19 100644 --- a/src/kernel/HALKit/ARM64/Processor.h +++ b/src/kernel/HALKit/ARM64/Processor.h @@ -1,8 +1,6 @@ -/* ======================================== - - Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - -======================================== */ +// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Licensed under the Apache License, Version 2.0 (see LICENSE file) +// Official repository: https://github.com/nekernel-org/nekernel #ifndef HALKIT_PROCESSOR_H #define HALKIT_PROCESSOR_H diff --git a/src/kernel/HALKit/ARM64/Storage/SCSI+Generic.cc b/src/kernel/HALKit/ARM64/Storage/SCSI+Generic.cc index 0200ec5a..f73946d7 100644 --- a/src/kernel/HALKit/ARM64/Storage/SCSI+Generic.cc +++ b/src/kernel/HALKit/ARM64/Storage/SCSI+Generic.cc @@ -1,8 +1,6 @@ -/* ======================================== - - Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - -======================================== */ +// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Licensed under the Apache License, Version 2.0 (see LICENSE file) +// Official repository: https://github.com/nekernel-org/nekernel #include diff --git a/src/kernel/HALKit/ARM64/Storage/UFS+Generic.cc b/src/kernel/HALKit/ARM64/Storage/UFS+Generic.cc index 9971b2a8..ba8d285b 100644 --- a/src/kernel/HALKit/ARM64/Storage/UFS+Generic.cc +++ b/src/kernel/HALKit/ARM64/Storage/UFS+Generic.cc @@ -1,8 +1,3 @@ -/* ======================================== - - Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - -======================================== */ - -/// @file UFS.cc -/// @brief UFS Flash Memory support. +// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Licensed under the Apache License, Version 2.0 (see LICENSE file) +// Official repository: https://github.com/nekernel-org/nekernel diff --git a/src/kernel/HALKit/POWER/AP.h b/src/kernel/HALKit/POWER/AP.h index 2699d9f0..f5af585c 100644 --- a/src/kernel/HALKit/POWER/AP.h +++ b/src/kernel/HALKit/POWER/AP.h @@ -1,15 +1,6 @@ -/* ======================================== - - Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - - File: AP.h - Purpose: POWER hardware threads. - - Revision History: - - 14/04/24: Added file (amlel) - -======================================== */ +// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Licensed under the Apache License, Version 2.0 (see LICENSE file) +// Official repository: https://github.com/nekernel-org/nekernel #ifndef HALKIT_AP_H #define HALKIT_AP_H diff --git a/src/kernel/HALKit/POWER/HalApplicationProcessor.cc b/src/kernel/HALKit/POWER/HalApplicationProcessor.cc index fa65deae..64333086 100644 --- a/src/kernel/HALKit/POWER/HalApplicationProcessor.cc +++ b/src/kernel/HALKit/POWER/HalApplicationProcessor.cc @@ -1,8 +1,6 @@ -/* ======================================== - - Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - -======================================== */ +// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Licensed under the Apache License, Version 2.0 (see LICENSE file) +// Official repository: https://github.com/nekernel-org/nekernel #include #include diff --git a/src/kernel/HALKit/POWER/HalDebugOutput.cc b/src/kernel/HALKit/POWER/HalDebugOutput.cc index 0c4be809..c43e575d 100644 --- a/src/kernel/HALKit/POWER/HalDebugOutput.cc +++ b/src/kernel/HALKit/POWER/HalDebugOutput.cc @@ -1,8 +1,6 @@ -/* ======================================== - - Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - -======================================== */ +// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Licensed under the Apache License, Version 2.0 (see LICENSE file) +// Official repository: https://github.com/nekernel-org/nekernel #include #include diff --git a/src/kernel/HALKit/POWER/HalHardwareThread.cc b/src/kernel/HALKit/POWER/HalHardwareThread.cc index c77040f7..fff5b68b 100644 --- a/src/kernel/HALKit/POWER/HalHardwareThread.cc +++ b/src/kernel/HALKit/POWER/HalHardwareThread.cc @@ -1,8 +1,6 @@ -/* ======================================== - - Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - -======================================== */ +// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Licensed under the Apache License, Version 2.0 (see LICENSE file) +// Official repository: https://github.com/nekernel-org/nekernel #include #include diff --git a/src/kernel/HALKit/POWER/HalVirtualMemory.cc b/src/kernel/HALKit/POWER/HalVirtualMemory.cc index cd9511c9..0c954f29 100644 --- a/src/kernel/HALKit/POWER/HalVirtualMemory.cc +++ b/src/kernel/HALKit/POWER/HalVirtualMemory.cc @@ -1,8 +1,6 @@ -/* ======================================== - - Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - -======================================== */ +// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Licensed under the Apache License, Version 2.0 (see LICENSE file) +// Official repository: https://github.com/nekernel-org/nekernel #include #include diff --git a/src/kernel/HALKit/POWER/Processor.h b/src/kernel/HALKit/POWER/Processor.h index decdfc38..a02b99d1 100644 --- a/src/kernel/HALKit/POWER/Processor.h +++ b/src/kernel/HALKit/POWER/Processor.h @@ -1,10 +1,6 @@ -/* ======================================== - - Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - - Purpose: POWER processor header. - -======================================== */ +// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Licensed under the Apache License, Version 2.0 (see LICENSE file) +// Official repository: https://github.com/nekernel-org/nekernel #ifndef HALKIT_PROCESSOR_H #define HALKIT_PROCESSOR_H diff --git a/src/kernel/HALKit/RISCV/AP.h b/src/kernel/HALKit/RISCV/AP.h index 0d8fbd94..4c9e17cb 100644 --- a/src/kernel/HALKit/RISCV/AP.h +++ b/src/kernel/HALKit/RISCV/AP.h @@ -1,15 +1,6 @@ -/* ======================================== - - Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - - File: AP.h - Purpose: RISC-V hardware threads. - - Revision History: - - 30/01/24: Added file (amlel) - -======================================== */ +// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Licensed under the Apache License, Version 2.0 (see LICENSE file) +// Official repository: https://github.com/nekernel-org/nekernel #ifndef HALKIT_AP_H #define HALKIT_AP_H diff --git a/src/kernel/HALKit/RISCV/HalApplicationProcessor.cc b/src/kernel/HALKit/RISCV/HalApplicationProcessor.cc index 16c9e33f..68242f97 100644 --- a/src/kernel/HALKit/RISCV/HalApplicationProcessor.cc +++ b/src/kernel/HALKit/RISCV/HalApplicationProcessor.cc @@ -1,39 +1,37 @@ -/* ======================================== - - Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - -======================================== */ - -#include -#include -#include - -using namespace Kernel; - -namespace Kernel { -namespace Detail { - STATIC void mp_hang_fn(void) { - while (YES); - } - -} // namespace Detail - -/// @brief wakes up thread. -/// wakes up thread from hang. -void mp_wakeup_thread(HAL::StackFramePtr stack) { - if (!stack) return; - - hal_set_pc_to_hart(reinterpret_cast(stack->R15), - reinterpret_cast(stack->IP)); -} - -/// @brief makes thread sleep. -/// hooks and hangs thread to prevent code from executing. -void mp_hang_thread(HAL::StackFramePtr stack) { - if (!stack) return; - - hal_set_pc_to_hart(reinterpret_cast(stack->R15), - reinterpret_cast(Kernel::Detail::mp_hang_fn)); -} - -} // namespace Kernel +// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Licensed under the Apache License, Version 2.0 (see LICENSE file) +// Official repository: https://github.com/nekernel-org/nekernel + +#include +#include +#include + +using namespace Kernel; + +namespace Kernel { +namespace Detail { + STATIC void mp_hang_fn(void) { + while (YES); + } + +} // namespace Detail + +/// @brief wakes up thread. +/// wakes up thread from hang. +void mp_wakeup_thread(HAL::StackFramePtr stack) { + if (!stack) return; + + hal_set_pc_to_hart(reinterpret_cast(stack->R15), + reinterpret_cast(stack->IP)); +} + +/// @brief makes thread sleep. +/// hooks and hangs thread to prevent code from executing. +void mp_hang_thread(HAL::StackFramePtr stack) { + if (!stack) return; + + hal_set_pc_to_hart(reinterpret_cast(stack->R15), + reinterpret_cast(Kernel::Detail::mp_hang_fn)); +} + +} // namespace Kernel -- cgit v1.2.3