diff options
| author | Amlal El Mahrouss <amlal@nekernel.org> | 2026-03-07 20:26:27 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-03-07 20:26:27 +0100 |
| commit | aee6c9ea7689fda46bbd79b9c4c7fd221260340f (patch) | |
| tree | f60e1396cb102475fc27cb6a1336e7d3080d0b83 /src | |
| parent | d36aa93e441f11c8f77ebf4f29dfbc239642a6b3 (diff) | |
| parent | 33cf55c0f5855a55e54a83eb3fee58776e789ed8 (diff) | |
Merge pull request #129 from ne-foss-org/kernel-task-scheduler-impl
[CHORE] KernelTask system for DDK drivers.
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/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 |
7 files changed, 47 insertions, 45 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/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 |
