From 33cf55c0f5855a55e54a83eb3fee58776e789ed8 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Sat, 7 Mar 2026 19:50:39 +0100 Subject: [CHORE] KernelTask system for DDK drivers. Signed-off-by: Amlal El Mahrouss --- src/kernel/KernelKit/CodeMgr.h | 6 ++-- src/kernel/KernelKit/KernelTask.h | 49 ++++++++++++++++++++++++++++ src/kernel/KernelKit/KernelTaskScheduler.h | 52 ------------------------------ src/kernel/KernelKit/ProcessScheduler.h | 2 +- 4 files changed, 54 insertions(+), 55 deletions(-) create mode 100644 src/kernel/KernelKit/KernelTask.h delete mode 100644 src/kernel/KernelKit/KernelTaskScheduler.h (limited to 'src/kernel/KernelKit') 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/KernelTask.h b/src/kernel/KernelKit/KernelTask.h new file mode 100644 index 00000000..1b94a9fc --- /dev/null +++ b/src/kernel/KernelKit/KernelTask.h @@ -0,0 +1,49 @@ +// 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 + +#ifndef KERNELKIT_KERNELTASKSCHEDULER_H +#define KERNELKIT_KERNELTASKSCHEDULER_H + +/// @file KernelTaskScheduler.h +/// @brief Kernel Task Scheduler backend file. +/// @author Amlal El Mahrouss (amlal@nekernel.org) + +#include +#include +#include + +namespace Kernel { + +class KernelTaskHelper; + +using KID = ProcessID; + +/// @brief Equivalent of UserProcess, but for kernel tasks. +/// @author Amlal +class KernelTask final { + public: + Char Name[kSchedNameLen] = {"KernelTask"}; + ProcessSubsystem SubSystem{ProcessSubsystem::kProcessSubsystemKernel}; + HAL::StackFramePtr StackFrame{nullptr}; + UInt8* StackReserve{nullptr}; + SizeT StackSize{kSchedMaxStackSz}; + ProcessImage Image{}; + + /// @brief a KID is a Kernel ID, it is used to find a task running within the kernel. + KID Kid{}; + + NE_NON_VETTABLE; +}; + +/// @brief Equivalent of UserProcessHelper, but for kernel tasks. +/// @author Amlal +class KernelTaskHelper final { + public: + STATIC Bool Start(KernelTask& task_ref, const KID& kid); + STATIC Bool CanBeStarted(const KernelTask& task_ref); +}; + +} // namespace Kernel + +#endif diff --git a/src/kernel/KernelKit/KernelTaskScheduler.h b/src/kernel/KernelKit/KernelTaskScheduler.h deleted file mode 100644 index cdd65522..00000000 --- a/src/kernel/KernelKit/KernelTaskScheduler.h +++ /dev/null @@ -1,52 +0,0 @@ -// 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 - -#ifndef KERNELKIT_KERNELTASKSCHEDULER_H -#define KERNELKIT_KERNELTASKSCHEDULER_H - -/// @file KernelTaskScheduler.h -/// @brief Kernel Task Scheduler backend file. -/// @author Amlal El Mahrouss (amlal@nekernel.org) - -#include -#include -#include - -namespace Kernel { - -class KernelTaskHelper; - -using KID = ProcessID; - -/// @brief Equivalent of UserProcess, but for kernel tasks. -/// @author Amlal -class KernelTask final { - public: - Char Name[kSchedNameLen] = {"KernelTask"}; - ProcessSubsystem SubSystem{ProcessSubsystem::kProcessSubsystemKernel}; - HAL::StackFramePtr StackFrame{nullptr}; - UInt8* StackReserve{nullptr}; - SizeT StackSize{kSchedMaxStackSz}; - ProcessImage Image{}; - - /// @brief a KID is a Kernel ID, it is used to find a task running within the kernel. - KID Kid{}; - - NE_NON_VETTABLE; -}; - -/// @brief Equivalent of UserProcessHelper, but for kernel tasks. -/// @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 TheCurrentKID(); - STATIC SizeT StartScheduling(); -}; - -} // namespace Kernel - -#endif 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 +#include #include #ifdef __NEOSKRNL__ -- cgit v1.2.3