FrostWing
A lightweight raw-control operating system.
Loading...
Searching...
No Matches
multitasking.h
1#ifndef MULTITASKING_H
2#define MULTITASKING_H
3
4#include <basics.h>
5#include <stdint.h>
6#include <stdbool.h>
7
8typedef enum {
9 TASK_TYPE_KERNEL = 0,
10 TASK_TYPE_USERLAND = 1
11} task_type_t;
12
13typedef enum {
14 TASK_STATE_READY = 0,
15 TASK_STATE_RUNNING = 1,
16 TASK_STATE_EXITED = 2
17} task_state_t;
18
19typedef struct task_info {
20 uint32_t pid;
21 task_type_t type;
22 task_state_t state;
23 int exit_code;
24 uint64_t runtime_ticks;
25 const char* name;
26} task_info_t;
27
28typedef struct user_task_spec {
29 const char* path;
30 int argc;
31 const char* argv[32];
32} user_task_spec_t;
33
34typedef bool (*task_iter_cb_t)(const task_info_t* info, void* ctx);
35typedef bool (*kernel_task_fn_t)(uint32_t pid, uint64_t now_ticks, void* ctx, int* exit_code);
36
37void multitasking_init(void);
38void multitasking_on_pit_tick(uint64_t now_ticks);
39void multitasking_pump(void);
40
41uint32_t multitasking_spawn_kernel(const char* name, kernel_task_fn_t fn, void* ctx);
42uint32_t multitasking_spawn_userland(const char* name, const user_task_spec_t* spec);
43
44bool multitasking_exit_task(uint32_t pid, int exit_code);
45bool multitasking_get_task(uint32_t pid, task_info_t* out_info);
46uint32_t multitasking_current_pid(void);
47
48uint32_t multitasking_count_tasks(void);
49uint32_t multitasking_count_running(void);
50
51bool multitasking_for_each_task(task_iter_cb_t cb, void* ctx);
52
53void multitasking_start_cursor_blink_task(void);
54
55#endif
This is a basic header files with FrostWing specific short forms and basically a good for life header...
void info(cstring message, cstring file)
Display an informational message.