SSBM Decomp
Loading...
Searching...
No Matches
OSThread.h
Go to the documentation of this file.
1// https://github.com/kiwi515/open_rvl/blob/fe0742f3ed2090041d5a3c98b98da5ff3546338a/include/OS/OSThread.h
2
3#ifndef _OSTHREAD_H_
4#define _OSTHREAD_H_
5
6#include <platform.h>
7
9
10#define OS_PRIORITY_MIN 0
11#define OS_PRIORITY_MAX 31
12
13#define OS_THREAD_ATTR_DETACH 0x0001u
14
15#define OS_THREAD_STACK_MAGIC 0xDEADBABE
16
17#define OS_THREAD_SPECIFIC_MAX 2
18
19typedef s32 OSPriority; // 0 highest, 31 lowest
20
21typedef struct OSThread OSThread;
22typedef struct OSThreadQueue OSThreadQueue;
23typedef struct OSThreadLink OSThreadLink;
24
25typedef struct OSMutex OSMutex;
26typedef struct OSMutexQueue OSMutexQueue;
27typedef struct OSMutexLink OSMutexLink;
28typedef struct OSCond OSCond;
29
37
38typedef enum {
39 OS_THREAD_DETACHED = (1 << 0)
41
43 OSThread* head; // at 0x0
44 OSThread* tail; // at 0x4
45};
46
51
53 OSMutex* head; // at 0x0
54 OSMutex* tail; // at 0x4
55};
56
58 OSMutex* next; // at 0x0
59 OSMutex* prev; // at 0x4
60};
61
81
82typedef void (*OSSwitchThreadCallback)(OSThread* from, OSThread* to);
83
84extern OSThreadQueue OS_THREAD_QUEUE AT_ADDRESS(0x800000DC);
85extern OSThread* OS_CURRENT_THREAD AT_ADDRESS(0x800000E4);
86
88void __OSThreadInit(void);
98void __OSReschedule(void);
99void OSYieldThread(void);
100bool OSCreateThread(OSThread* thread, void* (*func)(void*), void* param,
101 void* stack, u32 stackSize, OSPriority priority, u16 attr);
104bool OSJoinThread(OSThread*, void*);
113
114void CheckThreadQueue(void);
115void UnsetRun(OSThread* thread);
116void OSCheckActiveThreads(void);
117void SetEffectivePriority(void);
118
119#endif
void OSClearStack(u8)
void OSInitMutexQueue(OSMutexQueue *)
void OSExitThread(OSThread *)
Definition OSThread.c:121
void OSCancelThread(OSThread *)
Definition OSThread.c:126
s32 __OSGetEffectivePriority(OSThread *)
Definition OSThread.c:79
OSThread * OSGetCurrentThread(void)
Definition OSThread.c:23
void OSWakeupThread(OSThreadQueue *)
Definition OSThread.c:146
void __OSReschedule(void)
Definition OSThread.c:106
bool OSJoinThread(OSThread *, void *)
OSThreadState
Definition OSThread.h:30
@ OS_THREAD_STATE_MORIBUND
Definition OSThread.h:35
@ OS_THREAD_STATE_WAITING
Definition OSThread.h:34
@ OS_THREAD_STATE_EXITED
Definition OSThread.h:31
@ OS_THREAD_STATE_READY
Definition OSThread.h:32
@ OS_THREAD_STATE_RUNNING
Definition OSThread.h:33
#define OS_THREAD_SPECIFIC_MAX
Definition OSThread.h:17
void UnsetRun(OSThread *thread)
Definition OSThread.c:50
void OSInitThreadQueue(OSThreadQueue *)
Definition OSThread.c:17
void SetEffectivePriority(void)
Definition OSThread.c:96
void OSYieldThread(void)
struct OSCond OSCond
Definition OSThread.h:28
s32 OSPriority
Definition OSThread.h:19
bool OSCreateThread(OSThread *thread, void *(*func)(void *), void *param, void *stack, u32 stackSize, OSPriority priority, u16 attr)
Definition OSThread.c:115
s32 OSDisableScheduler(void)
Definition OSThread.c:28
void OSSleepTicks(s64)
void OSSleepThread(OSThreadQueue *)
Definition OSThread.c:141
void(* OSSwitchThreadCallback)(OSThread *from, OSThread *to)
Definition OSThread.h:82
void OSCheckActiveThreads(void)
Definition OSThread.c:156
OSThreadFlag
Definition OSThread.h:38
@ OS_THREAD_DETACHED
Definition OSThread.h:39
void OSDetachThread(OSThread *)
void __OSPromoteThread(OSThread *, s32)
void CheckThreadQueue(void)
Definition OSThread.c:151
void __OSThreadInit(void)
Definition OSThread.c:12
s32 OSEnableScheduler(void)
Definition OSThread.c:39
bool OSSetThreadPriority(OSThread *, s32)
s32 OSSuspendThread(OSThread *)
Definition OSThread.c:136
s32 OSResumeThread(OSThread *)
Definition OSThread.c:131
bool OSIsThreadTerminated(OSThread *)
void OSSetCurrentThread(OSThread *)
OSSwitchThreadCallback OSSetSwitchThreadCallback(OSSwitchThreadCallback)
unsigned long u32
An unsigned 32-bit integer.
Definition platform.h:26
signed long long s64
A signed 64-bit integer.
Definition platform.h:17
unsigned short u16
An unsigned 16-bit integer.
Definition platform.h:23
#define AT_ADDRESS(x)
Definition platform.h:122
signed long s32
A signed 32-bit integer.
Definition platform.h:14
unsigned char u8
An unsigned 8-bit integer.
Definition platform.h:20
void(* func)(void)
Definition state.c:134
Definition OSContext.h:133
Definition OSThread.h:52
OSMutex * tail
Definition OSThread.h:54
OSMutex * head
Definition OSThread.h:53
Definition OSMutex.h:8
Definition OSThread.h:42
OSThread * tail
Definition OSThread.h:44
OSThread * head
Definition OSThread.h:43
Definition OSThread.h:62
OSThreadLink linkActive
Definition OSThread.h:75
void * specific[OS_THREAD_SPECIFIC_MAX]
Definition OSThread.h:79
u16 state
Definition OSThread.h:64
OSPriority priority
Definition OSThread.h:67
OSMutex * mutex
Definition OSThread.h:73
OSPriority base
Definition OSThread.h:68
s32 suspend
Definition OSThread.h:66
u8 * stackBase
Definition OSThread.h:76
OSMutexQueue queueMutex
Definition OSThread.h:74
OSThreadQueue queueJoin
Definition OSThread.h:72
u32 * stackEnd
Definition OSThread.h:77
void * val
Definition OSThread.h:69
OSThreadLink link
Definition OSThread.h:71
OSThreadQueue * queue
Definition OSThread.h:70
s32 error
Definition OSThread.h:78
u16 attr
Definition OSThread.h:65
OSContext context
Definition OSThread.h:63