matos/core/kthread.h

48 lines
1.1 KiB
C
Raw Normal View History

2020-04-23 00:49:09 +02:00
#pragma once
#include "cpu_context.h"
#include "mem.h"
#define KTHREAD_NAME_MAX_LENGTH 32
#define KTHREAD_DEFAULT_STACK_SIZE PAGE_SIZE
2020-05-03 14:45:26 +02:00
typedef enum {
RUNNING,
READY,
SLEEPING,
2020-07-08 23:08:50 +02:00
WAITING,
2020-05-03 14:45:26 +02:00
EXITING
} kthread_state;
2021-10-30 14:08:12 +02:00
struct thread {
char name[KTHREAD_NAME_MAX_LENGTH];
struct cpu_state *cpuState;
2020-05-03 14:45:26 +02:00
kthread_state state;
vaddr_t stackAddr;
size_t stackSize;
2020-05-03 14:45:26 +02:00
unsigned long jiffiesSleeping;
2020-08-18 14:12:45 +02:00
int sleepHaveTimeouted;
2021-10-30 14:08:12 +02:00
struct thread *next;
struct thread *prev;
struct thread*timeNext;
struct thread *timePrev;
2020-04-23 00:49:09 +02:00
};
int kthreadSetup(vaddr_t mainStack, size_t mainStackSize);
2020-04-24 00:12:12 +02:00
void kthreadExit();
2020-04-23 00:49:09 +02:00
2021-10-30 14:08:12 +02:00
struct thread *kthreadCreate(const char *name, cpu_kstate_function_arg1_t func, void *args);
void kthreadDelete(struct thread *thread);
2020-04-23 00:49:09 +02:00
2021-10-30 14:08:12 +02:00
struct thread *kthreadSelectNext();
2020-04-27 23:08:36 +02:00
struct cpu_state *kthreadSwitch(struct cpu_state *prevCpu);
2020-04-24 23:34:34 +02:00
int kthreadYield();
2021-10-30 14:08:12 +02:00
int kthreadWait(struct thread *current, struct thread *next, unsigned long msec);
int kthreadUnsched(struct thread *th);
2020-05-03 14:45:26 +02:00
int kthreadMsleep(unsigned long msec);
int kthreadOnJieffiesTick();
2021-10-30 14:08:12 +02:00
struct thread *getCurrentThread();
int kthreadAddThread(struct thread *th);