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#define THREAD_STATE_LEFT_IN_KERNEL 6
45#define THREAD_STATE_PENDING_SIGNAL 7
46#define THREAD_STATE_RUNNING 8
47
51
52#define THREAD_LEVEL_KERNEL (1<<0)
53#define THREAD_LEVEL_USER (1<<1)
54#define THREAD_LEVEL_SUBTHREAD (1<<2)
55#define THREAD_LEVEL_MAIN_THREAD (1<<3)
56
57//#pragma pack(push,1)
58/* AuUserEntry structure */
59typedef struct _uentry_ {
64 int num_args;
65 uint64_t argvaddr; /* user-space VA of argv[] page (for crt0 via stack) */
66 uint64_t argvkernel; /* kernel-space VA of argv[] page (for EL1 writes) */
67 char** argvs;
70//#pragma pack(pop)
71
72
73#define MAX_SIGNAL_ENTRY 10
74
75
76typedef struct _gp_context_ {
77 uint64_t x[31];
78 uint64_t sp_el0;
79 uint64_t elr_el1;
80 uint64_t spsr_el1;
81}_gp_context_t;
82
83typedef struct _signal_frame_ {
84 AA64Registers regs;
85 uint64_t elr_el1;
86 uint64_t sigret_address;
87}_signal_frame_t;
88
89
90//#pragma pack(push,1)
91typedef struct _aa64_task_ {
92 uint64_t x19; //0
93 uint64_t x20; //8
94 uint64_t x21; //16
95 uint64_t x22; //24
96 uint64_t x23; //32
97 uint64_t x24; //40
98 uint64_t x25; //48
99 uint64_t x26; //56
100 uint64_t x27; //64
101 uint64_t x28; //72
102 uint64_t x29; //80
103 uint64_t x30; //88
104 uint64_t sp; //96
105 uint64_t elr_el1; //104
106 uint64_t spsr_el1;//112
107 uint64_t x0; //120
108 uint64_t x1; //128
109 uint64_t x2; //136
110 uint64_t x3; //144
111 uint64_t x4; //152
112 uint64_t x5; //160
113 uint64_t x6; //168
114 uint64_t x7; //176
115 uint64_t x8; //184
116 uint8_t state; //192
117 uint8_t threadType; //193
118 uint64_t pml; //186
119 char name[8]; //130
120 void *procSlot; //138
121 AuUserEntry* uentry; //146
122 bool first_run; //206
123 uint64_t thread_id; //207
124 uint64_t sleepQuanta; //215
125 uint64_t originalKSp; //223
126 bool returnFromSyscall;
127 bool justStored;
128 void* data;
129 AU_ALIGN(16) uint8_t fp_regs[512];
130 uint64_t fpcr;
131 uint64_t fpsr;
132 uint32_t syscallNum;
133 uint64_t sig_pending;
134 _signal_frame_t signal;
135 uint64_t start_time_us;
136 uint64_t* sigs[21];
137 struct _aa64_task_* next;
138 struct _aa64_task_* prev;
139}AA64Thread;
140
141
142//#pragma pack(pop)
143extern void AuSchedulerInitialize();
145AU_EXTERN AU_EXPORT AA64Thread* AuCreateKthread(void(*entry) (uint64_t),uint64_t* pml, char* name);
154AU_EXTERN AU_EXPORT AA64Thread* AuCreateSubKthread(void(*entry) (uint64_t), uint64_t stack, uint64_t* pml, char* name);
155
156extern void AuScheduleThread(AA64Registers*regs);
157extern void AuScheduleNext();
158extern void AuSchedulerStart();
159extern AA64Thread* AuGetIdleThread();
160extern AA64Thread* AuGetCurrentThread();
161
166AU_EXTERN AU_EXPORT void AuBlockThread(AA64Thread* thread);
167
173AU_EXTERN AU_EXPORT void AuUnblockThread(AA64Thread* thread);
179
185AU_EXTERN AU_EXPORT void AuSleepThread(AA64Thread* thread, uint64_t ms);
186
193
200
206AU_EXTERN AU_EXPORT void AuThreadMoveToTrash(AA64Thread* t);
207
212extern void AuThreadCleanTrash(AA64Thread* t);
213
219
224extern void AuHandleSleepThreads();
225
231extern void AuThreadMakeReady(AA64Thread* thread);
232
233#endif
234
235#endif
#define AU_ALIGN(x)
Definition aurora.h:43
#define AU_EXTERN
Definition aurora.h:55
#define AU_EXPORT
Definition aurora.h:41
#define signal(signum, handler)
signal – register a signal handler to a specific signal number
Definition signal.h:43
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
void(* entry)(void *)
Definition process.h:98
AA64Thread * AuGetIdleThread()
Definition sched.c:585
uint64_t thread_id
Definition sched.c:71
void AuSchedulerInitialize()
AuSchedulerInitialize – initialize the scheduler.
Definition sched.c:553
void AuScheduleThread(AA64Registers *regs)
AuScheduleThread – the core of multi-tasking. It schedules threads next to be runned.
Definition sched.c:413
AA64Thread * AuCreateSubKthread(void(*entry)(uint64_t), uint64_t stack, uint64_t *pml, char *name)
AuCreateSubKthread – create sub kernel thread of parent kthread.
Definition sched.c:310
void AuThreadMakeReady(AA64Thread *thread)
AuThreadMakeReady – make a thread forcefully ready for next.
Definition sched.c:650
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:519
void AuScheduleNext()
AuScheduleNext – forcefully schedule to idle thread.
Definition sched.c:500
Definition aa64cpu.h:50
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
void AuHandleSleepThreads()
Definition x86_64_sched.cpp:380
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
void AuThreadCleanTrash(AuThread *t)
Definition x86_64_sched.cpp:587
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