diff options
author | red031000 <rubenru09@aol.com> | 2020-06-10 02:25:43 +0100 |
---|---|---|
committer | red031000 <rubenru09@aol.com> | 2020-06-10 02:25:59 +0100 |
commit | 70d1600ef2607ecb112ca270f5982b4829e44c19 (patch) | |
tree | 63850e04719ff78998fd22d985aba08d5745d425 /arm9/lib/include/OS_thread.h | |
parent | caba1031233657d89f3c35079e664551a07cd72f (diff) |
arm9 OS_thread
Diffstat (limited to 'arm9/lib/include/OS_thread.h')
-rw-r--r-- | arm9/lib/include/OS_thread.h | 59 |
1 files changed, 57 insertions, 2 deletions
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 |