39 lines
703 B
C
39 lines
703 B
C
#pragma once
|
|
#include "interrupts/Context.h"
|
|
|
|
struct Task
|
|
{
|
|
enum TaskState
|
|
{
|
|
Idle,
|
|
Running,
|
|
Sleeping,
|
|
Exited
|
|
};
|
|
|
|
uint64_t id;
|
|
Context regs;
|
|
|
|
int64_t task_sleep = 0;
|
|
int64_t task_time = 0;
|
|
|
|
Task* next_task = nullptr;
|
|
Task* prev_task = nullptr;
|
|
|
|
uint64_t allocated_stack = 0;
|
|
|
|
TaskState state;
|
|
|
|
uint64_t cpu_time = 0;
|
|
|
|
char floating_region[512] __attribute__((aligned(16)));
|
|
bool floating_saved = false;
|
|
|
|
bool is_user_task();
|
|
};
|
|
|
|
void set_context_from_task(Task& task, Context* ctx);
|
|
void get_context_to_task(Task& task, Context* ctx);
|
|
|
|
void task_save_floating(Task& task);
|
|
void task_restore_floating(Task& task); |