1pub mod scheduler;
4pub mod task;
5pub mod thread;
6
7use hal::Schedable;
8
9use crate::utils::KernelError;
10
11pub fn reschedule() {
13 hal::Machine::trigger_reschedule();
14}
15
16pub fn create_task(desc: task::TaskDescriptor) -> Result<task::TaskId, KernelError> {
24 enable_scheduler(false);
25 let res = scheduler::SCHEDULER.lock().create_task(desc);
26 enable_scheduler(true);
27
28 res
29}
30
31pub fn create_thread(
32 task_id: task::TaskId,
33 entry: extern "C" fn(),
34 fin: Option<extern "C" fn() -> !>,
35 timing: thread::Timing,
36) -> Result<thread::ThreadUId, KernelError> {
37 enable_scheduler(false);
38 let res = scheduler::SCHEDULER
39 .lock()
40 .create_thread(entry, fin, timing, task_id);
41 enable_scheduler(true);
42
43 res
44}
45
46pub fn enable_scheduler(enable: bool) {
47 scheduler::set_enabled(enable);
48}
49
50pub fn tick_scheduler() -> bool {
51 if !scheduler::enabled() {
52 return false;
53 }
54
55 scheduler::SCHEDULER.lock().tick()
56}