summaryrefslogtreecommitdiffhomepage
path: root/dev
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2025-11-17 16:41:51 +0100
committerGitHub <noreply@github.com>2025-11-17 16:41:51 +0100
commit31a2d2897b213eb37fe5b1d94fd096deaae7b2c2 (patch)
tree2ac3c95db59ea825cb7639ba7e8f589a090ae902 /dev
parent062c4bb508bf6ec7334d374fef2e0e10623b2df9 (diff)
parent00b182203540d6632f87700aad501faccbf2394d (diff)
Merge pull request #70 from nekernel-org/dev
dev: kernel_task_scheduler & ne_launch
Diffstat (limited to 'dev')
-rw-r--r--dev/kernel/KernelKit/CodeMgr.h2
-rw-r--r--dev/kernel/KernelKit/KernelTaskScheduler.h3
-rw-r--r--dev/kernel/src/CodeMgr.cc12
-rw-r--r--dev/kernel/src/GUIDWizard.cc12
-rw-r--r--dev/kernel/src/KernelTaskScheduler.cc10
5 files changed, 28 insertions, 11 deletions
diff --git a/dev/kernel/KernelKit/CodeMgr.h b/dev/kernel/KernelKit/CodeMgr.h
index 2569b064..70e977e9 100644
--- a/dev/kernel/KernelKit/CodeMgr.h
+++ b/dev/kernel/KernelKit/CodeMgr.h
@@ -38,7 +38,7 @@ typedef void (*rtl_cxx_dtor_kind)(void);
/// accessible.
/// @param main the start of the process.
/// @return The team's process id.
-ProcessID rtl_create_kernel_process(rtl_main_kind main, const Char* task_name) noexcept;
+BOOL rtl_create_kernel_task(HAL::StackFramePtr main, const KID kid) noexcept;
/// @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/dev/kernel/KernelKit/KernelTaskScheduler.h b/dev/kernel/KernelKit/KernelTaskScheduler.h
index 6fd626b4..e92a91b7 100644
--- a/dev/kernel/KernelKit/KernelTaskScheduler.h
+++ b/dev/kernel/KernelKit/KernelTaskScheduler.h
@@ -38,7 +38,8 @@ class KERNEL_TASK final {
/// @author Amlal
class KernelTaskHelper final {
public:
- STATIC Bool Switch(HAL::StackFramePtr frame_ptr, ProcessID new_kid);
+ STATIC Bool Add(HAL::StackFramePtr frame_ptr, ProcessID new_kid);
+ STATIC Bool Remove(const KID kid);
STATIC Bool CanBeScheduled(const KERNEL_TASK& process);
STATIC ErrorOr<KID> TheCurrentKID();
STATIC SizeT StartScheduling();
diff --git a/dev/kernel/src/CodeMgr.cc b/dev/kernel/src/CodeMgr.cc
index 7f85d547..02ed4c62 100644
--- a/dev/kernel/src/CodeMgr.cc
+++ b/dev/kernel/src/CodeMgr.cc
@@ -9,6 +9,17 @@
#include <NeKit/Utils.h>
namespace Kernel {
+
+/// @brief Executes a new process from a function. Kernel code only.
+/// @note This sets up a new stack, anything on the main function that calls the Kernel will not be
+/// accessible.
+/// @param main the start of the process.
+/// @return The team's process id.
+BOOL rtl_create_kernel_task(HAL::StackFramePtr task, const KID kid) noexcept {
+ if (!kid || task == nullptr) return FALSE;
+ return KernelTaskHelper::Add(task, kid);
+}
+
/***********************************************************************************/
/// @brief Executes a new process from a function. Kernel code only.
/// @note This sets up a new stack, anything on the main function that calls the Kernel will not be
@@ -19,7 +30,6 @@ namespace Kernel {
ProcessID rtl_create_user_process(rtl_main_kind main, const Char* process_name) noexcept {
if (!process_name || *process_name == 0) return kSchedInvalidPID;
-
return UserProcessScheduler::The().Spawn(process_name, reinterpret_cast<VoidPtr>(main), nullptr);
}
} // namespace Kernel
diff --git a/dev/kernel/src/GUIDWizard.cc b/dev/kernel/src/GUIDWizard.cc
index 81bf3293..e4608497 100644
--- a/dev/kernel/src/GUIDWizard.cc
+++ b/dev/kernel/src/GUIDWizard.cc
@@ -13,9 +13,9 @@
#include <NeKit/Ref.h>
// begin of ascii 'readable' characters. (A, C, C, 1, 2)
-#define kUUIDAsciiBegin 47
+#define kGUIDAsciiBegin 47
// @brief Size of UUID.
-#define kUUIDSize 37
+#define kGUIDSize 37
namespace Kernel::CF::XRN::Version1 {
auto cf_make_sequence(const ArrayList<UInt32>& uuidSeq) -> Ref<GUIDSequence*> {
@@ -44,18 +44,18 @@ auto cf_make_sequence(const ArrayList<UInt32>& uuidSeq) -> Ref<GUIDSequence*> {
// @brief Tries to make a guid out of a string.
// This function is not complete for now
auto cf_try_guid_to_string(Ref<GUIDSequence*>& seq) -> ErrorOr<Ref<KString>> {
- Char buf[kUUIDSize];
+ Char buf[kGUIDSize];
for (SizeT index = 0; index < 16; ++index) {
- buf[index] = seq.Leak()->fU8[index] + kUUIDAsciiBegin;
+ buf[index] = seq.Leak()->fU8[index] + kGUIDAsciiBegin;
}
for (SizeT index = 16; index < 24; ++index) {
- buf[index] = seq.Leak()->fU16[index] + kUUIDAsciiBegin;
+ buf[index] = seq.Leak()->fU16[index] + kGUIDAsciiBegin;
}
for (SizeT index = 24; index < 28; ++index) {
- buf[index] = seq.Leak()->fU32[index] + kUUIDAsciiBegin;
+ buf[index] = seq.Leak()->fU32[index] + kGUIDAsciiBegin;
}
auto view = KStringBuilder::Construct(buf);
diff --git a/dev/kernel/src/KernelTaskScheduler.cc b/dev/kernel/src/KernelTaskScheduler.cc
index b6cea3bc..0f21ecdd 100644
--- a/dev/kernel/src/KernelTaskScheduler.cc
+++ b/dev/kernel/src/KernelTaskScheduler.cc
@@ -16,15 +16,21 @@
/***********************************************************************************/
namespace Kernel {
-EXTERN_C Void hal_switch_kernel_task(HAL::StackFramePtr frame, ProcessID kid);
+EXTERN_C Void hal_switch_kernel_task(HAL::StackFramePtr frame, KID kid);
-Bool KernelTaskHelper::Switch(HAL::StackFramePtr frame_ptr, ProcessID new_kid) {
+Bool KernelTaskHelper::Add(HAL::StackFramePtr frame_ptr, KID new_kid) {
NE_UNUSED(frame_ptr);
NE_UNUSED(new_kid);
return NO;
}
+Bool KernelTaskHelper::Remove(const KID kid) {
+ NE_UNUSED(kid);
+
+ return NO;
+}
+
Bool KernelTaskHelper::CanBeScheduled(const KERNEL_TASK& task) {
return task.Kid > 0 && task.Image.HasCode();
}