diff options
Diffstat (limited to 'dev/kernel')
| -rw-r--r-- | dev/kernel/KernelKit/CodeMgr.h | 2 | ||||
| -rw-r--r-- | dev/kernel/KernelKit/KernelTaskScheduler.h | 3 | ||||
| -rw-r--r-- | dev/kernel/src/CodeMgr.cc | 12 |
3 files changed, 14 insertions, 3 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 |
