diff options
| author | Amlal El Mahrouss <amlal@nekernel.org> | 2026-03-07 19:50:39 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal@nekernel.org> | 2026-03-07 19:50:39 +0100 |
| commit | 33cf55c0f5855a55e54a83eb3fee58776e789ed8 (patch) | |
| tree | 2ebdb1f2b7715e80a74b670c44e9e76c41a09a7e /src | |
| parent | b7d4f9943ca6d2561a31fc212b8e074e4984b850 (diff) | |
[CHORE] KernelTask system for DDK drivers.kernel-task-scheduler-impl
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'src')
| -rw-r--r-- | src/kernel/KernelKit/CodeMgr.h | 6 | ||||
| -rw-r--r-- | src/kernel/KernelKit/KernelTask.h (renamed from src/kernel/KernelKit/KernelTaskScheduler.h) | 7 | ||||
| -rw-r--r-- | src/kernel/KernelKit/ProcessScheduler.h | 2 | ||||
| -rw-r--r-- | src/kernel/NeKit/Stream.h | 2 | ||||
| -rw-r--r-- | src/kernel/src/ACPIFactoryInterface.cpp | 2 | ||||
| -rw-r--r-- | src/kernel/src/CodeMgr.cpp | 8 | ||||
| -rw-r--r-- | src/kernel/src/KernelTask.cpp | 35 | ||||
| -rw-r--r-- | src/kernel/src/KernelTaskScheduler.cpp | 32 |
8 files changed, 48 insertions, 46 deletions
diff --git a/src/kernel/KernelKit/CodeMgr.h b/src/kernel/KernelKit/CodeMgr.h index 85c2a44f..c74d3a5e 100644 --- a/src/kernel/KernelKit/CodeMgr.h +++ b/src/kernel/KernelKit/CodeMgr.h @@ -1,4 +1,4 @@ -// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Copyright 2024-2026, Amlal El Mahrouss (amlal@nekernel.org) // Licensed under the Apache License, Version 2.0 (see LICENSE file) // Official repository: https://github.com/ne-foss-org/nekernel @@ -18,6 +18,8 @@ namespace Kernel { /// @brief Image process entrypoint. typedef void (*rtl_start_kind)(void); +typedef void (*rtl_kstart_kind)(VoidPtr); + /// @brief C++ Constructor entrypoint. typedef void (*rtl_cxx_ctor_kind)(void); @@ -29,7 +31,7 @@ typedef void (*rtl_cxx_dtor_kind)(void); /// accessible. /// @param main the start of the process. /// @return The team's process id. -BOOL rtl_create_kernel_task(HAL::StackFramePtr main, const KID kid); +BOOL rtl_create_kernel_task(KernelTask& main, const KID& kid); /// @brief Executes a new process from a function. User code only. /// @note This sets up a new stack, anything on the main function that calls the Kernel will not be diff --git a/src/kernel/KernelKit/KernelTaskScheduler.h b/src/kernel/KernelKit/KernelTask.h index cdd65522..1b94a9fc 100644 --- a/src/kernel/KernelKit/KernelTaskScheduler.h +++ b/src/kernel/KernelKit/KernelTask.h @@ -40,11 +40,8 @@ class KernelTask final { /// @author Amlal class KernelTaskHelper final { public: - STATIC Bool Add(HAL::StackFramePtr frame_ptr, KID kid); - STATIC Bool Remove(const KID kid); - STATIC Bool CanBeScheduled(const KernelTask& process); - STATIC ErrorOr<KID> TheCurrentKID(); - STATIC SizeT StartScheduling(); + STATIC Bool Start(KernelTask& task_ref, const KID& kid); + STATIC Bool CanBeStarted(const KernelTask& task_ref); }; } // namespace Kernel diff --git a/src/kernel/KernelKit/ProcessScheduler.h b/src/kernel/KernelKit/ProcessScheduler.h index b568c290..c5ef6b5d 100644 --- a/src/kernel/KernelKit/ProcessScheduler.h +++ b/src/kernel/KernelKit/ProcessScheduler.h @@ -5,7 +5,7 @@ #ifndef KERNELKIT_PROCESS_SCHEDULER_H #define KERNELKIT_PROCESS_SCHEDULER_H -#include <KernelKit/KernelTaskScheduler.h> +#include <KernelKit/KernelTask.h> #include <KernelKit/UserProcessScheduler.h> #ifdef __NEOSKRNL__ diff --git a/src/kernel/NeKit/Stream.h b/src/kernel/NeKit/Stream.h index ad458d5a..8ef82e6c 100644 --- a/src/kernel/NeKit/Stream.h +++ b/src/kernel/NeKit/Stream.h @@ -27,7 +27,7 @@ class Stream final { template <typename Data> friend Stream<StreamTrait, Kind>& operator<<(Stream<StreamTrait, Kind>& Ks, Ref<Data>& Buf) { - *Ks = Ks.fStream->Out(Buf.Leak()); + *Ks = Ks.fStream->Out(Buf.Leak()); Ks.fKind = Buf; return *Ks; } diff --git a/src/kernel/src/ACPIFactoryInterface.cpp b/src/kernel/src/ACPIFactoryInterface.cpp index 14c5bc0e..348e800f 100644 --- a/src/kernel/src/ACPIFactoryInterface.cpp +++ b/src/kernel/src/ACPIFactoryInterface.cpp @@ -78,7 +78,7 @@ bool ACPIFactoryInterface::Checksum(const Char* checksum, SSizeT len) { Char chr = 0; - for (SSizeT index = 0L; index < len; ++index) { + for (SSizeT index{}; index < len; ++index) { chr += checksum[index]; } diff --git a/src/kernel/src/CodeMgr.cpp b/src/kernel/src/CodeMgr.cpp index 0a8cb944..f6f7e920 100644 --- a/src/kernel/src/CodeMgr.cpp +++ b/src/kernel/src/CodeMgr.cpp @@ -1,4 +1,4 @@ -// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Copyright 2024-2026, Amlal El Mahrouss (amlal@nekernel.org) // Licensed under the Apache License, Version 2.0 (see LICENSE file) // Official repository: https://github.com/ne-foss-org/nekernel @@ -14,9 +14,9 @@ namespace Kernel { /// @param main the start of the process. /// @param kid the Kernel ID of the new task. /// @return The process started or not. -BOOL rtl_create_kernel_task(HAL::StackFramePtr task, const KID kid) { - if (!kid || task == nullptr) return FALSE; - return KernelTaskHelper::Add(task, kid); +BOOL rtl_create_kernel_task(KernelTask& task, const KID& kid) { + if (!kid) return FALSE; + return KernelTaskHelper::Start(task, kid); } /***********************************************************************************/ diff --git a/src/kernel/src/KernelTask.cpp b/src/kernel/src/KernelTask.cpp new file mode 100644 index 00000000..f415b114 --- /dev/null +++ b/src/kernel/src/KernelTask.cpp @@ -0,0 +1,35 @@ +// Copyright 2024-2026, Amlal El Mahrouss (amlal@nekernel.org) +// Licensed under the Apache License, Version 2.0 (see LICENSE file) +// Official repository: https://github.com/ne-foss-org/nekernel + +#include <KernelKit/KernelTask.h> +#include <KernelKit/CodeMgr.h> + +/***********************************************************************************/ +/// @file KernelTaskScheduler.cc +/// @brief Kernel Task scheduler. +/// @author Amlal El Mahrouss (amlal@nekernel.org) +/***********************************************************************************/ + +namespace Kernel { + +/// @internal @brief Calls the DDK stub to initialize the stack_frame of the driver. +EXTERN_C Int32 kt_kernel_task_start(HAL::StackFramePtr stack_frame, VoidPtr code) { + MUST_PASS(stack_frame && code); + ((rtl_kstart_kind)(code))(stack_frame); + + return stack_frame->R8; +} + +Bool KernelTaskHelper::Start(KernelTask& task_ptr, const KID& kid) { + if (!kid) return NO; + + auto ret = kt_kernel_task_start(task_ptr.StackFrame, task_ptr.Image.LeakImage().Leak().Leak()); + return ret == kErrorSuccess; +} + +Bool KernelTaskHelper::CanBeStarted(const KernelTask& task) { + return task.StackSize > 0 && task.Image.HasCode(); +} + +} // namespace Kernel diff --git a/src/kernel/src/KernelTaskScheduler.cpp b/src/kernel/src/KernelTaskScheduler.cpp deleted file mode 100644 index 9f9fa9d3..00000000 --- a/src/kernel/src/KernelTaskScheduler.cpp +++ /dev/null @@ -1,32 +0,0 @@ -// 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/ne-foss-org/nekernel - -#include <KernelKit/KernelTaskScheduler.h> - -/***********************************************************************************/ -/// @file KernelTaskScheduler.cc -/// @brief Kernel Task scheduler. -/// @author Amlal El Mahrouss (amlal@nekernel.org) -/***********************************************************************************/ - -namespace Kernel { - -Bool KernelTaskHelper::Add(HAL::StackFramePtr frame_ptr, KID kid) { - NE_UNUSED(frame_ptr); - NE_UNUSED(kid); - - return NO; -} - -Bool KernelTaskHelper::Remove(const KID kid) { - NE_UNUSED(kid); - - return NO; -} - -Bool KernelTaskHelper::CanBeScheduled(const KernelTask& task) { - return task.Kid > 0 && task.Image.HasCode(); -} - -} // namespace Kernel |
