summaryrefslogtreecommitdiff
path: root/arm9/lib/include
diff options
context:
space:
mode:
authorPikalaxALT <PikalaxALT@users.noreply.github.com>2020-05-19 13:38:28 -0400
committerGitHub <noreply@github.com>2020-05-19 13:38:28 -0400
commit28588d4a447def7794c3bb2a8dc6bb7ed60c44e5 (patch)
tree0d390f46bea9248cbe3135c8c934510b5fc6cfec /arm9/lib/include
parent567c5518602e9977e26cf61218f629fa149c6c35 (diff)
parent57724b2acd34b70c1cbd0f4a9c786b08c0ffef5e (diff)
Merge branch 'master' into master
Diffstat (limited to 'arm9/lib/include')
-rw-r--r--arm9/lib/include/CP_context.h18
-rw-r--r--arm9/lib/include/OS_alarm.h27
-rw-r--r--arm9/lib/include/OS_context.h22
-rw-r--r--arm9/lib/include/OS_init.h4
-rw-r--r--arm9/lib/include/OS_mutex.h18
-rw-r--r--arm9/lib/include/OS_thread.h63
-rw-r--r--arm9/lib/include/OS_tick.h12
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