diff options
Diffstat (limited to 'arm9/lib/include')
-rw-r--r-- | arm9/lib/include/MI_memory.h | 14 | ||||
-rw-r--r-- | arm9/lib/include/OS_alarm.h | 5 | ||||
-rw-r--r-- | arm9/lib/include/OS_arena.h | 27 | ||||
-rw-r--r-- | arm9/lib/include/OS_context.h | 4 | ||||
-rw-r--r-- | arm9/lib/include/OS_mutex.h | 2 | ||||
-rw-r--r-- | arm9/lib/include/OS_reset.h | 5 | ||||
-rw-r--r-- | arm9/lib/include/OS_thread.h | 59 | ||||
-rw-r--r-- | arm9/lib/include/OS_tick.h | 6 | ||||
-rw-r--r-- | arm9/lib/include/consts.h | 9 | ||||
-rw-r--r-- | arm9/lib/include/mmap.h | 13 |
10 files changed, 106 insertions, 38 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_arena.h b/arm9/lib/include/OS_arena.h index 7608835a..a26cf3bd 100644 --- a/arm9/lib/include/OS_arena.h +++ b/arm9/lib/include/OS_arena.h @@ -1,27 +1,8 @@ -#ifndef POKEDIAMOND_OS_ARENA_H -#define POKEDIAMOND_OS_ARENA_H +#ifndef POKEDIAMOND_ARM9_OS_ARENA_H +#define POKEDIAMOND_ARM9_OS_ARENA_H #include "nitro/types.h" - -typedef enum { - OS_ARENA_MAIN = 0, - OS_ARENA_MAIN_SUBPRIV = 1, - OS_ARENA_MAINEX = 2, - OS_ARENA_ITCM = 3, - OS_ARENA_DTCM = 4, - OS_ARENA_SHARED = 5, - OS_ARENA_WRAM_MAIN = 6, - OS_ARENA_WRAM_SUB = 7, - OS_ARENA_WRAM_SUBPRIV = 8, - OS_ARENA_MAX = 9 -} OSArenaId; - -typedef struct { - void* lo[OS_ARENA_MAX]; - void* hi[OS_ARENA_MAX]; - u16 initialized; - u8 padding[2]; -} OSArenaInfo; +#include "nitro/OS_arena_shared.h" void OS_InitArena(void); void OS_InitArenaEx(void); @@ -34,4 +15,4 @@ void OS_SetArenaLo(OSArenaId id, void *newLo); void* OS_AllocFromArenaLo(OSArenaId id, u32 size, u32 align); void* OS_AllocFromArenaHi(OSArenaId id, u32 size, u32 align); -#endif //POKEDIAMOND_OS_ARENA_H +#endif //POKEDIAMOND_ARM9_OS_ARENA_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_reset.h b/arm9/lib/include/OS_reset.h index fd918370..cb7680d1 100644 --- a/arm9/lib/include/OS_reset.h +++ b/arm9/lib/include/OS_reset.h @@ -16,10 +16,11 @@ void OS_InitReset(void); static void OSi_CommonCallback(PXIFifoTag tag, u32 data, BOOL err); static void OSi_SendToPxi(u16 data); void OS_ResetSystem(u32 parameter); +static void OSi_DoResetSystem(void); void OSi_DoBoot(void); static void OSi_CpuClear32(register u32 data, register void *destp, register u32 size); -void OSi_ReloadRomData(void); -void OSi_ReadCardRom32(u32 src, void *dst, s32 len); +static void OSi_ReloadRomData(void); +static void OSi_ReadCardRom32(u32 src, void *dst, s32 len); static inline u32 OS_GetResetParameter(void) { 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 6c83bce8..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,9 +38,14 @@ #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_GetArenaInfo() (*(OSArenaInfo*)HW_ARENA_INFO_BUF) #define OSi_TRUNC(n, a) (((u32) (n)) & ~((a) - 1)) #define OSi_ROUND(n, a) (((u32) (n) + (a) - 1) & ~((a) - 1)) diff --git a/arm9/lib/include/mmap.h b/arm9/lib/include/mmap.h index 8f9d8dcd..d0e73aec 100644 --- a/arm9/lib/include/mmap.h +++ b/arm9/lib/include/mmap.h @@ -1,15 +1,12 @@ -#ifndef NITRO_MMAP_H -#define NITRO_MMAP_H +#ifndef POKEDIAMOND_ARM9_MMAP_H +#define POKEDIAMOND_ARM9_MMAP_H #include "nitro/types.h" +#include "nitro/mmap_shared.h" extern u32 SDK_AUTOLOAD_DTCM_START[]; -#define HW_MAIN_MEM 0x02000000 -#define HW_MAIN_MEM_SIZE 0x00400000 #define HW_MAIN_MEM_EX_SIZE 0x00800000 -#define HW_MAIN_MEM_MAIN_SIZE 0x003E0000 -#define HW_MAIN_MEM_SHARED_SIZE 0x00001000 #define HW_MAIN_MEM_DEBUGGER_OFFSET 0x00700000 #define HW_ITCM_IMAGE 0x01000000 @@ -31,11 +28,9 @@ extern u32 SDK_AUTOLOAD_DTCM_START[]; #define HW_RESET_PARAMETER_BUF (HW_MAIN_MEM + 0x007ffc20) #define HW_ROM_BASE_OFFSET_BUF (HW_MAIN_MEM + 0x007ffc2c) #define HW_WM_BOOT_BUF (HW_MAIN_MEM + 0x007ffc40) -#define HW_ARENA_INFO_BUF (HW_MAIN_MEM + 0x007ffda0) // Arena data structure #define HW_ROM_HEADER_BUF (HW_MAIN_MEM + 0x007ffe00) // ROM registration area data buffer #define HW_RED_RESERVED (HW_MAIN_MEM + 0x007ff800) // Some kind of reserved data for shared memory #define HW_MAIN_MEM_SYSTEM (HW_MAIN_MEM + 0x007ffc00) -#define HW_MAIN_MEM_MAIN_END (HW_MAIN_MEM + HW_MAIN_MEM_MAIN_SIZE) #define HW_MAIN_MEM_EX_END (HW_MAIN_MEM + HW_MAIN_MEM_EX_SIZE) #define HW_MAIN_MEM_SHARED (HW_MAIN_MEM_EX_END - HW_MAIN_MEM_SHARED_SIZE) #define HW_DTCM_SVC_STACK_END (HW_DTCM + 0x00003fc0) @@ -115,4 +110,4 @@ typedef struct { #define OS_GetSystemWork() ((OSSystemWork *)HW_MAIN_MEM_SYSTEM) -#endif
\ No newline at end of file +#endif //POKEDIAMOND_ARM9_MMAP_H
\ No newline at end of file |