summaryrefslogtreecommitdiff
path: root/kc/core/task.h
blob: 86e262f42627f666106140c1cbdc69bbeaf34932 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#pragma once

#include <stdint.h>

enum kc_thread_status
{
    READY,
    STARTED,
    YIELDED,
    BLOCKED,
    TERMINATED
};

struct kc_thread_state
{
    uint64_t stack;
    uint64_t stack_top;
    uint64_t page_map;
};

struct kc_thread
{
    struct kc_thread *prev;
    struct kc_thread *next;
    enum kc_thread_status status;
    struct kc_thread_state state;
};

extern void cpu_set_thread(
        struct kc_thread_state *current,
        struct kc_thread_state *next,
        uint64_t *cpu_tss_rsp0);