#ifndef TASK_H #define TASK_H #include <stdint.h> #include <lib/task/message.h> extern void initTasking(); typedef struct __attribute__ ((packed)) { uint32_t eax, ebx, ecx, edx, esi, edi, esp, ebp, eip, eflags, cr3; } Registers; typedef struct Task { Registers registers; // the register states for the task struct Task *nextTask; // linked list of tasks that need to be done void* stack; Message* message; } Task; extern void initTasking(); extern void createTask(Task *task, uint32_t mainFunction, uint32_t flags, uint32_t *pagedir); extern void yield(); extern void yields(); // yield, but schedule the currently running task extern void switchTask(Registers *old, Registers *new); extern void schedule(Task* task); // schedule a task to be run in the future extern void destroyCurrentTask(); extern void setRunningTask(Task* task); // set the task currently executed extern void sendMessage(Task* task, Message* message); extern Message* popMessage(Task* task); #endif