diff options
author | Cleverking2003 <30466983+Cleverking2003@users.noreply.github.com> | 2020-05-18 22:26:48 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-05-18 22:26:48 +0300 |
commit | 00b5f23f454d1cc64d6ca04224925797ebc7d1e7 (patch) | |
tree | b2a3cf8c66fc00bc77a34755e25ac54d44097455 | |
parent | 4c3e5d526588c546d20cd82613ea57396bebb64b (diff) | |
parent | d8dcd1fef93929fc8905ee62c2bf627cb8e8db25 (diff) |
Merge pull request #95 from red031000/master
fill out _OSThread
-rw-r--r-- | arm9/lib/include/CP_context.h | 18 | ||||
-rw-r--r-- | arm9/lib/include/OS_alarm.h | 27 | ||||
-rw-r--r-- | arm9/lib/include/OS_context.h | 22 | ||||
-rw-r--r-- | arm9/lib/include/OS_init.h | 4 | ||||
-rw-r--r-- | arm9/lib/include/OS_mutex.h | 18 | ||||
-rw-r--r-- | arm9/lib/include/OS_thread.h | 63 | ||||
-rw-r--r-- | arm9/lib/include/OS_tick.h | 12 |
7 files changed, 162 insertions, 2 deletions
diff --git a/arm9/lib/include/CP_context.h b/arm9/lib/include/CP_context.h new file mode 100644 index 00000000..d1e0062c --- /dev/null +++ b/arm9/lib/include/CP_context.h @@ -0,0 +1,18 @@ +// +// Created by red031000 on 2020-05-17. +// + +#ifndef POKEDIAMOND_CP_CONTEXT_H +#define POKEDIAMOND_CP_CONTEXT_H + +#include "types.h" + +typedef struct CPContext { + u64 div_numer; + u64 div_denom; + u64 sqrt; + u16 div_mode; + u16 sqrt_mode; +} CPContext; + +#endif //POKEDIAMOND_CP_CONTEXT_H diff --git a/arm9/lib/include/OS_alarm.h b/arm9/lib/include/OS_alarm.h new file mode 100644 index 00000000..6971248a --- /dev/null +++ b/arm9/lib/include/OS_alarm.h @@ -0,0 +1,27 @@ +// +// Created by red031000 on 2020-05-17. +// + +#ifndef POKEDIAMOND_OS_ALARM_H +#define POKEDIAMOND_OS_ALARM_H + +#include "types.h" +#include "OS_thread.h" + +typedef void (*OSAlarmHandler) (void *); + +struct OSiAlarm +{ + OSAlarmHandler handler; + void *arg; + + u32 tag; + OSTick fire; + OSAlarm *prev; + OSAlarm *next; + + OSTick period; + OSTick start; +}; + +#endif //POKEDIAMOND_OS_ALARM_H diff --git a/arm9/lib/include/OS_context.h b/arm9/lib/include/OS_context.h new file mode 100644 index 00000000..c0ab62f1 --- /dev/null +++ b/arm9/lib/include/OS_context.h @@ -0,0 +1,22 @@ +// +// Created by red031000 on 2020-05-17. +// + +#ifndef POKEDIAMOND_OS_CONTEXT_H +#define POKEDIAMOND_OS_CONTEXT_H + +#include "types.h" +#include "CP_context.h" + +typedef struct OSContext +{ + u32 cpsr; + u32 r[13]; + u32 sp; + u32 lr; + u32 pc_plus4; + u32 sp_svc; + CPContext cp_context; +} OSContext; + +#endif //POKEDIAMOND_OS_CONTEXT_H diff --git a/arm9/lib/include/OS_init.h b/arm9/lib/include/OS_init.h index dd2b20c7..a998b45e 100644 --- a/arm9/lib/include/OS_init.h +++ b/arm9/lib/include/OS_init.h @@ -9,6 +9,10 @@ #include "consts.h" #include "OS_tcm.h" #include "OS_spinLock.h" +#include "OS_context.h" +#include "OS_tick.h" +#include "OS_alarm.h" +#include "OS_mutex.h" #include "OS_thread.h" #include "OS_protectionRegion.h" #include "OS_entropy.h" diff --git a/arm9/lib/include/OS_mutex.h b/arm9/lib/include/OS_mutex.h new file mode 100644 index 00000000..5db66fbe --- /dev/null +++ b/arm9/lib/include/OS_mutex.h @@ -0,0 +1,18 @@ +// +// Created by red031000 on 2020-05-17. +// + +#ifndef POKEDIAMOND_OS_MUTEX_H +#define POKEDIAMOND_OS_MUTEX_H + +#include "types.h" +#include "OS_thread.h" + +struct OSMutex { + OSThreadQueue queue; + OSThread *thread; + s32 count; + OSMutexLink link; +}; + +#endif //POKEDIAMOND_OS_MUTEX_H diff --git a/arm9/lib/include/OS_thread.h b/arm9/lib/include/OS_thread.h index 15cec0c9..adcadf2e 100644 --- a/arm9/lib/include/OS_thread.h +++ b/arm9/lib/include/OS_thread.h @@ -5,15 +5,42 @@ #ifndef POKEDIAMOND_OS_THREAD_H #define POKEDIAMOND_OS_THREAD_H +#include "types.h" +#include "OS_context.h" + +typedef struct OSiAlarm OSAlarm; + typedef struct _OSThread OSThread; +typedef struct _OSThreadQueue OSThreadQueue; +typedef struct _OSThreadLink OSThreadLink; +typedef struct _OSMutexQueue OSMutexQueue; +typedef struct _OSMutexLink OSMutexLink; +typedef struct OSMutex OSMutex; + struct _OSThreadQueue { OSThread *head; OSThread *tail; }; -typedef struct _OSThreadQueue OSThreadQueue; +struct _OSThreadLink +{ + OSThread *prev; + OSThread *next; +}; + +struct _OSMutexQueue +{ + OSMutex *head; + OSMutex *tail; +}; + +struct _OSMutexLink +{ + OSMutex *next; + OSMutex *prev; +}; typedef struct OSThreadInfo { u16 isNeedRescheduling; @@ -23,9 +50,41 @@ typedef struct OSThreadInfo { void* switchCallback; // type: OSSwitchThreadCallback } OSThreadInfo; +typedef enum { + OS_THREAD_STATE_WAITING = 0, + OS_THREAD_STATE_READY = 1, + OS_THREAD_STATE_TERMINATED = 2 +} OSThreadState; + +typedef void (*OSThreadDestructor) (void *); + struct _OSThread { - u8 padding[0x80]; //todo: not the correct size but idfk + OSContext context; + OSThreadState state; + OSThread *next; + u32 id; + u32 priority; + void *profiler; + + OSThreadQueue *queue; + OSThreadLink link; + + OSMutex *mutex; + OSMutexQueue mutexQueue; + + u32 stackTop; + u32 stackBottom; + u32 stackWarningOffset; + + OSThreadQueue joinQueue; + + void *specific[3]; + OSAlarm *alarmForSleep; + OSThreadDestructor destructor; + void *userParameter; + + u32 systemErrno; }; void OS_SleepThread(OSThreadQueue * queue); diff --git a/arm9/lib/include/OS_tick.h b/arm9/lib/include/OS_tick.h new file mode 100644 index 00000000..fbb8ce9e --- /dev/null +++ b/arm9/lib/include/OS_tick.h @@ -0,0 +1,12 @@ +// +// Created by red031000 on 2020-05-17. +// + +#ifndef POKEDIAMOND_OS_TICK_H +#define POKEDIAMOND_OS_TICK_H + +#include "types.h" + +typedef u64 OSTick; + +#endif //POKEDIAMOND_OS_TICK_H |