/* ------------------------------------------- Copyright (C) 2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. ------------------------------------------- */ #pragma once /// @file KernelTaskScheduler.h /// @brief Kernel Task Scheduler header file. /// @author Amlal El Mahrouss (amlal@nekernel.org) #include #include #include namespace Kernel { class KernelTaskHelper; typedef ProcessID KID; /// @brief Equivalent of USER_PROCESS, but for kernel tasks. /// @author Amlal class KERNEL_TASK final { public: Char Name[kSchedNameLen] = {"KERNEL_TASK"}; 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{0}; }; /// @brief Equivalent of UserProcessHelper, but for kernel tasks. /// @author Amlal class KernelTaskHelper final { public: STATIC Bool Switch(HAL::StackFramePtr frame_ptr, ProcessID new_kid); STATIC Bool CanBeScheduled(const KERNEL_TASK& process); STATIC ErrorOr TheCurrentKID(); STATIC SizeT StartScheduling(); }; } // namespace Kernel