XenevaOS
Loading...
Searching...
No Matches
sched.h
Go to the documentation of this file.
1
32#ifndef __AA64_SCHED_H__
33#define __AA64_SCHED_H__
34
35#include <stdint.h>
36#include <Hal/AA64/aa64cpu.h>
37
38#ifdef ARCH_ARM64
39
40#define THREAD_STATE_READY 1
41#define THREAD_STATE_BLOCKED 3
42#define THREAD_STATE_SLEEP 4
43#define THREAD_STATE_KILLABLE 5
44
48
49#define THREAD_LEVEL_KERNEL (1<<0)
50#define THREAD_LEVEL_USER (1<<1)
51#define THREAD_LEVEL_SUBTHREAD (1<<2)
52#define THREAD_LEVEL_MAIN_THREAD (1<<3)
53
54//#pragma pack(push,1)
55/* AuUserEntry structure */
56typedef struct _uentry_ {
61 int num_args;
63 char** argvs;
66//#pragma pack(pop)
67
68
69
70//#pragma pack(push,1)
71typedef struct _aa64_task_ {
72 uint64_t x19; //0
73 uint64_t x20; //8
74 uint64_t x21; //16
75 uint64_t x22; //24
76 uint64_t x23; //32
77 uint64_t x24; //40
78 uint64_t x25; //48
79 uint64_t x26; //56
80 uint64_t x27; //64
81 uint64_t x28; //72
82 uint64_t x29; //80
83 uint64_t x30; //88
84 uint64_t sp; //96
85 uint64_t elr_el1; //104
86 uint64_t spsr_el1;//112
87 uint64_t x0; //120
88 uint64_t x1; //128
89 uint64_t x2; //136
90 uint64_t x3; //144
91 uint64_t x4; //152
92 uint64_t x5; //160
93 uint64_t x6; //168
94 uint64_t x7; //176
95 uint64_t x8; //184
96 uint8_t state; //192
97 uint8_t threadType; //193
98 uint64_t pml; //186
99 char name[8]; //130
100 void *procSlot; //138
101 AuUserEntry* uentry; //146
102 bool first_run; //206
103 uint64_t thread_id; //207
104 uint64_t sleepQuanta; //215
105 uint64_t originalKSp; //223
106 bool returnFromSyscall;
107 bool justStored;
108 __declspec(align(16)) uint8_t fp_regs[512];
109 uint64_t fpcr;
110 uint64_t fpsr;
111 uint32_t syscallNum;
112 struct _aa64_task_* next;
113 struct _aa64_task_* prev;
114}AA64Thread;
115
116//#pragma pack(pop)
117extern void AuSchedulerInitialize();
119extern AA64Thread* AuCreateKthread(void(*entry) (uint64_t),uint64_t* pml, char* name);
120extern void AuScheduleThread(AA64Registers*regs);
121extern void AuSchedulerStart();
122extern AA64Thread* AuGetIdleThread();
123extern AA64Thread* AuGetCurrentThread();
124
129AU_EXTERN AU_EXPORT void AuBlockThread(AA64Thread* thread);
130
136AU_EXTERN AU_EXPORT void AuUnblockThread(AA64Thread* thread);
142
148AU_EXTERN AU_EXPORT void AuSleepThread(AA64Thread* thread, uint64_t ms);
149
156
163
169AU_EXTERN AU_EXPORT void AuThreadMoveToTrash(AA64Thread* t);
170
176
177#endif
178
179#endif
#define AU_EXTERN
Definition aurora.h:50
#define AU_EXPORT
Definition aurora.h:38
XETime t
Definition main.cpp:53
unsigned int uint32_t
Definition acefiex.h:163
unsigned char uint8_t
Definition acefiex.h:161
COMPILER_DEPENDENT_UINT64 uint64_t
Definition acefiex.h:165
__declspec(align(2)) typedef struct _icmp_head_
Definition icmp.h:37
void(* entry)(void *)
Definition process.h:91
AA64Thread * AuGetIdleThread()
Definition sched.c:513
uint64_t thread_id
Definition sched.c:68
void AuSchedulerInitialize()
AuSchedulerInitialize – initialize the scheduler.
Definition sched.c:481
void AuScheduleThread(AA64Registers *regs)
AuScheduleThread – the core of multi-tasking. It schedules threads next to be runned.
Definition sched.c:392
uint64_t AuCreateKernelStack(uint64_t *pml)
AuCreateKernelStack – maps kernel stack and return the top of the stack, it only maps 4KiB of stack.
Definition sched.c:467
Definition aa64cpu.h:49
Definition x86_64_sched.h:98
uint64_t ss
Definition x86_64_sched.h:102
char ** argvs
Definition x86_64_sched.h:105
uint64_t stackBase
Definition x86_64_sched.h:106
uint64_t argvaddr
Definition x86_64_sched.h:104
uint64_t entrypoint
Definition x86_64_sched.h:99
uint64_t rsp
Definition x86_64_sched.h:100
int num_args
Definition x86_64_sched.h:103
uint64_t cs
Definition x86_64_sched.h:101
AU_EXTERN AU_EXPORT void AuForceScheduler()
AuForceScheduler – force the scheduler to switch next thread.
Definition x86_64_sched.cpp:621
AU_EXTERN AU_EXPORT void AuUnblockThread(AuThread *t)
Definition x86_64_sched.cpp:541
void AuSchedulerStart()
AuSchedulerStart – start the scheduler.
Definition x86_64_sched.cpp:485
AU_EXTERN AU_EXPORT AuThread * AuThreadFindByIDBlockList(uint16_t id)
Definition x86_64_sched.cpp:609
AU_EXTERN AU_EXPORT AuThread * AuGetCurrentThread()
Definition x86_64_sched.cpp:505
AU_EXTERN AU_EXPORT void AuSleepThread(AuThread *thread, uint64_t ms)
Definition x86_64_sched.cpp:523
AU_EXTERN AU_EXPORT AuThread * AuThreadFindByID(uint16_t id)
Definition x86_64_sched.cpp:596
struct _uentry_ AuUserEntry
AU_EXTERN AU_EXPORT void AuBlockThread(AuThread *thread)
Definition x86_64_sched.cpp:514
void AuThreadMoveToTrash(AuThread *t)
Definition x86_64_sched.cpp:560
AU_EXTERN AU_EXPORT uint64_t AuGetSystemTimerTick()
AuGetSystemTimerTick – return the current system timer tick.
Definition x86_64_sched.cpp:634
AU_EXTERN AU_EXPORT AuThread * AuCreateKthread(void(*entry)(uint64_t), uint64_t stack, uint64_t cr3, char *name)
Definition x86_64_sched.cpp:253