summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2026-03-07 20:26:27 +0100
committerGitHub <noreply@github.com>2026-03-07 20:26:27 +0100
commitaee6c9ea7689fda46bbd79b9c4c7fd221260340f (patch)
treef60e1396cb102475fc27cb6a1336e7d3080d0b83 /src
parentd36aa93e441f11c8f77ebf4f29dfbc239642a6b3 (diff)
parent33cf55c0f5855a55e54a83eb3fee58776e789ed8 (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.h6
-rw-r--r--src/kernel/KernelKit/KernelTask.h (renamed from src/kernel/KernelKit/KernelTaskScheduler.h)7
-rw-r--r--src/kernel/KernelKit/ProcessScheduler.h2
-rw-r--r--src/kernel/src/ACPIFactoryInterface.cpp2
-rw-r--r--src/kernel/src/CodeMgr.cpp8
-rw-r--r--src/kernel/src/KernelTask.cpp35
-rw-r--r--src/kernel/src/KernelTaskScheduler.cpp32
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