summaryrefslogtreecommitdiff
path: root/arm9/lib/include
diff options
context:
space:
mode:
Diffstat (limited to 'arm9/lib/include')
-rw-r--r--arm9/lib/include/MI_memory.h14
-rw-r--r--arm9/lib/include/OS_alarm.h5
-rw-r--r--arm9/lib/include/OS_context.h4
-rw-r--r--arm9/lib/include/OS_mutex.h2
-rw-r--r--arm9/lib/include/OS_thread.h59
-rw-r--r--arm9/lib/include/OS_tick.h6
-rw-r--r--arm9/lib/include/consts.h8
7 files changed, 95 insertions, 3 deletions
diff --git a/arm9/lib/include/MI_memory.h b/arm9/lib/include/MI_memory.h
index 0ebb3560..bf6c0ca5 100644
--- a/arm9/lib/include/MI_memory.h
+++ b/arm9/lib/include/MI_memory.h
@@ -1,6 +1,8 @@
#ifndef NITRO_MI_MEMORY_H_
#define NITRO_MI_MEMORY_H_
+#include "nitro/types.h"
+
void MI_CpuFill8(void *dest, u8 data, u32 size);
void MI_CpuCopy8(void const *src, void *dest, u32 size);
static inline void MI_CpuClear8(void *dest, u32 size) {
@@ -8,4 +10,16 @@ static inline void MI_CpuClear8(void *dest, u32 size) {
}
void MIi_CpuCopy16(const void *src, void *dst, u32 size);
+void MIi_CpuClear32(u32 data, void *destp, u32 size);
+
+static inline void MI_CpuFill32(void *dest, u32 data, u32 size)
+{
+ MIi_CpuClear32(data, dest, size);
+}
+
+static inline void MI_CpuClear32(void *dest, u32 size)
+{
+ MI_CpuFill32(dest, 0, size);
+}
+
#endif //NITRO_MI_MEMORY_H_
diff --git a/arm9/lib/include/OS_alarm.h b/arm9/lib/include/OS_alarm.h
index d6b0c210..a9734d1b 100644
--- a/arm9/lib/include/OS_alarm.h
+++ b/arm9/lib/include/OS_alarm.h
@@ -3,6 +3,7 @@
#include "nitro/types.h"
#include "OS_thread.h"
+#include "OS_tick.h"
typedef void (*OSAlarmHandler) (void *);
@@ -20,4 +21,8 @@ struct OSiAlarm
OSTick start;
};
+void OS_CancelAlarm(OSAlarm *alarm);
+void OS_CreateAlarm(OSAlarm *alarm);
+void OS_SetAlarm(OSAlarm *alarm, OSTick tick, OSAlarmHandler handler, void *arg);
+
#endif //POKEDIAMOND_OS_ALARM_H
diff --git a/arm9/lib/include/OS_context.h b/arm9/lib/include/OS_context.h
index cded1acb..7a58a2b1 100644
--- a/arm9/lib/include/OS_context.h
+++ b/arm9/lib/include/OS_context.h
@@ -15,4 +15,8 @@ typedef struct OSContext
CPContext cp_context;
} OSContext;
+extern u32 OS_SaveContext(OSContext *context);
+extern void OS_LoadContext(OSContext *context);
+extern void OS_InitContext(OSContext *context, u32 func, u32 stack);
+
#endif //POKEDIAMOND_OS_CONTEXT_H
diff --git a/arm9/lib/include/OS_mutex.h b/arm9/lib/include/OS_mutex.h
index a2cdff23..0fc261a4 100644
--- a/arm9/lib/include/OS_mutex.h
+++ b/arm9/lib/include/OS_mutex.h
@@ -11,4 +11,6 @@ struct OSMutex {
OSMutexLink link;
};
+void OSi_UnlockAllMutex(OSThread * thread);
+
#endif //POKEDIAMOND_OS_MUTEX_H
diff --git a/arm9/lib/include/OS_thread.h b/arm9/lib/include/OS_thread.h
index bf62e66b..a80a3b96 100644
--- a/arm9/lib/include/OS_thread.h
+++ b/arm9/lib/include/OS_thread.h
@@ -52,6 +52,8 @@ typedef enum {
OS_THREAD_STATE_TERMINATED = 2
} OSThreadState;
+typedef void (*OSSwitchThreadCallback) (OSThread *from, OSThread *to);
+
typedef void (*OSThreadDestructor) (void *);
struct _OSThread
@@ -83,14 +85,67 @@ struct _OSThread
u32 systemErrno;
};
+static s32 OSi_GetUnusedThreadId(void);
+static void OSi_InsertLinkToQueue(OSThreadQueue *queue, OSThread *thread);
+static OSThread *OSi_RemoveLinkFromQueue(OSThreadQueue *queue);
+static OSThread *OSi_RemoveSpecifiedLinkFromQueue(OSThreadQueue *queue, OSThread *thread);
+OSMutex *OSi_RemoveMutexLinkFromQueue(OSMutexQueue *queue);
+static void OSi_InsertThreadToList(OSThread *thread);
+static void OSi_RemoveThreadFromList(OSThread *thread);
+void OS_InitThread(void);
+BOOL OS_IsThreadAvailable(void);
+void OS_CreateThread(OSThread *thread, void (*func) (void *), void *arg, void *stack, u32 stackSize, u32 prio);
+void OS_ExitThread(void);
+static void OSi_ExitThread_ArgSpecified(OSThread *thread, void *arg);
+static void OSi_ExitThread(void *arg);
+static void OSi_ExitThread_Destroy(void);
+void OS_DestroyThread(OSThread *thread);
+static void OSi_CancelThreadAlarmForSleep(OSThread *thread);
+void OS_JoinThread(OSThread *thread);
+BOOL OS_IsThreadTerminated(const OSThread *thread);
+void OS_SleepThread(OSThreadQueue *queue);
+void OS_WakeupThread(OSThreadQueue *queue);
+void OS_WakeupThreadDirect(OSThread *thread);
+OSThread *OS_SelectThread(void);
+void OS_RescheduleThread(void);
+void OS_YieldThread(void);
+BOOL OS_SetThreadPriority(OSThread *thread, u32 prio);
+u32 OS_GetThreadPriority(const OSThread *thread);
+void OS_Sleep(u32 msec);
+static void OSi_SleepAlarmCallback(void *arg);
+OSSwitchThreadCallback OS_SetSwitchThreadCallback(OSSwitchThreadCallback callback);
+static void OSi_IdleThreadProc(void *);
+u32 OS_DisableScheduler(void);
+u32 OS_EnableScheduler(void);
+void OS_SetThreadDestructor(OSThread *thread, OSThreadDestructor dtor);
+
extern OSThreadInfo OSi_ThreadInfo;
-void OS_SleepThread(OSThreadQueue * queue);
-void OS_WakeupThread(OSThreadQueue * queue);
+static inline OSThreadInfo *OS_GetThreadInfo(void)
+{
+ return &OSi_ThreadInfo;
+}
+
+static inline BOOL OS_IsThreadRunnable(const OSThread *thread)
+{
+ return thread->state == OS_THREAD_STATE_READY;
+}
static inline void OS_InitThreadQueue(OSThreadQueue * queue)
{
queue->head = queue->tail = NULL;
}
+static inline OSThread *OS_GetCurrentThread(void)
+{
+ return OS_GetThreadInfo()->current;
+}
+
+static inline void OS_SetCurrentThread(OSThread *thread)
+{
+ OS_GetThreadInfo()->current = thread;
+}
+
+#define OSi_GetCurrentThread() (*OSi_CurrentThreadPtr)
+
#endif //POKEDIAMOND_OS_THREAD_H
diff --git a/arm9/lib/include/OS_tick.h b/arm9/lib/include/OS_tick.h
index fb4ce7e6..f1c7145d 100644
--- a/arm9/lib/include/OS_tick.h
+++ b/arm9/lib/include/OS_tick.h
@@ -1,8 +1,12 @@
#ifndef POKEDIAMOND_OS_TICK_H
#define POKEDIAMOND_OS_TICK_H
-#include "nitro/types.h"
+#include "consts.h"
typedef u64 OSTick;
+#define OS_SYSTEM_CLOCK HW_SYSTEM_CLOCK
+
+#define OS_MilliSecondsToTicks(msec) ((OSTick)(((OS_SYSTEM_CLOCK/1000) * (u64)(msec)) / 64))
+
#endif //POKEDIAMOND_OS_TICK_H
diff --git a/arm9/lib/include/consts.h b/arm9/lib/include/consts.h
index 885deff0..c09e8cd9 100644
--- a/arm9/lib/include/consts.h
+++ b/arm9/lib/include/consts.h
@@ -27,6 +27,8 @@
#define HW_C6_PR_2GB 0x3c
#define HW_C6_PR_4GB 0x3e
+#define HW_SYSTEM_CLOCK 33514000
+
#define PXI_PROC_ARM7 0x01
#define OSi_CONSOLE_NOT_DETECT 0xffffffff
@@ -36,6 +38,12 @@
#define OS_CONSOLE_SIZE_MASK 0x00000003
#define OS_CONSOLE_SIZE_4MB 0x00000001
+#define OS_THREAD_LAUNCHER_PRIORITY 0x10
+#define OS_THREAD_PRIORITY_MIN 0x00
+#define OS_THREAD_PRIORITY_MAX 0x1F
+
+#define OS_THREAD_SPECIFIC_MAX 0x03
+
#define OSi_TCM_REGION_BASE_MASK 0xfffff000
#define OSi_TRUNC(n, a) (((u32) (n)) & ~((a) - 1))