wut
v1.7.0
Wii U Toolchain
|
Manage and run threads on each of the system's cores. More...
Data Structures | |
struct | OSThreadGHSExceptionHandling |
struct | OSMutexQueue |
struct | OSFastMutexQueue |
struct | OSTLSSection |
struct | OSThread |
Macros | |
#define | OS_THREAD_TAG 0x74487244u |
Typedefs | |
typedef struct OSFastMutex | OSFastMutex |
typedef struct OSFastMutexQueue | OSFastMutexQueue |
typedef struct OSMutex | OSMutex |
typedef struct OSMutexQueue | OSMutexQueue |
typedef struct OSThread | OSThread |
typedef struct OSTLSSection | OSTLSSection |
typedef struct OSThreadGHSExceptionHandling | OSThreadGHSExceptionHandling |
typedef uint8_t | OSThreadState |
A value from enum OS_THREAD_STATE. More... | |
typedef uint32_t | OSThreadRequest |
A value from enum OS_THREAD_REQUEST. More... | |
typedef uint8_t | OSThreadAttributes |
A bitfield of enum OS_THREAD_ATTRIB. More... | |
typedef uint32_t | OSThreadType |
A bitfield of enum OS_THREAD_TYPE. More... | |
typedef int(* | OSThreadEntryPointFn) (int argc, const char **argv) |
typedef void(* | OSThreadCleanupCallbackFn) (OSThread *thread, void *stack) |
typedef void(* | OSThreadDeallocatorFn) (OSThread *thread, void *stack) |
typedef enum OSThreadSpecificID | OSThreadSpecificID |
Functions | |
void | OSCancelThread (OSThread *thread) |
Cancels a thread. More... | |
int32_t | OSCheckActiveThreads () |
Returns the count of active threads. More... | |
int32_t | OSCheckThreadStackUsage (OSThread *thread) |
Get the maximum amount of stack the thread has used. More... | |
void | OSClearThreadStackUsage (OSThread *thread) |
Disable tracking of thread stack usage. More... | |
void | OSContinueThread (OSThread *thread) |
Clears a thread's suspend counter and resumes it. More... | |
BOOL | OSCreateThread (OSThread *thread, OSThreadEntryPointFn entry, int32_t argc, char *argv, void *stack, uint32_t stackSize, int32_t priority, OSThreadAttributes attributes) |
Create a new thread. More... | |
void | OSDetachThread (OSThread *thread) |
Detach thread. More... | |
void | OSExitThread (int32_t result) |
Exit the current thread with a exit code. More... | |
void | OSGetActiveThreadLink (OSThread *thread, OSThreadLink *link) |
Get the next and previous thread in the thread's active queue. More... | |
OSThread * | OSGetCurrentThread () |
Return pointer to OSThread object for the current thread. More... | |
OSThread * | OSGetDefaultThread (uint32_t coreID) |
Returns the default thread for a specific core. More... | |
uint32_t | OSGetStackPointer () |
Return current stack pointer, value of r1 register. More... | |
uint32_t | OSGetThreadAffinity (OSThread *thread) |
Get a thread's affinity. More... | |
const char * | OSGetThreadName (OSThread *thread) |
Get a thread's name. More... | |
int32_t | OSGetThreadPriority (OSThread *thread) |
Get a thread's base priority. More... | |
void * | OSGetThreadSpecific (OSThreadSpecificID id) |
Get a thread's specific value set by OSSetThreadSpecific. More... | |
BOOL | OSIsThreadSuspended (OSThread *thread) |
Returns TRUE if a thread is suspended. More... | |
BOOL | OSIsThreadTerminated (OSThread *thread) |
Returns TRUE if a thread is terminated. More... | |
BOOL | OSJoinThread (OSThread *thread, int *threadResult) |
Wait until thread is terminated. More... | |
int32_t | OSResumeThread (OSThread *thread) |
Resumes a thread. More... | |
BOOL | OSRunThread (OSThread *thread, OSThreadEntryPointFn entry, int argc, const char **argv) |
Run a function on an already created thread. More... | |
BOOL | OSSetThreadAffinity (OSThread *thread, uint32_t affinity) |
Set a thread's affinity. More... | |
BOOL | OSSetThreadCancelState (BOOL state) |
Set a thread's cancellation state. More... | |
OSThreadCleanupCallbackFn | OSSetThreadCleanupCallback (OSThread *thread, OSThreadCleanupCallbackFn callback) |
Set the callback to be called just before a thread is terminated. More... | |
OSThreadDeallocatorFn | OSSetThreadDeallocator (OSThread *thread, OSThreadDeallocatorFn deallocator) |
Set the callback to be called just after a thread is terminated. More... | |
void | OSSetThreadName (OSThread *thread, const char *name) |
Set a thread's name. More... | |
BOOL | OSSetThreadPriority (OSThread *thread, int32_t priority) |
Set a thread's priority. More... | |
BOOL | OSSetThreadRunQuantum (OSThread *thread, uint32_t quantum) |
Set a thread's run quantum. More... | |
void | OSSetThreadSpecific (OSThreadSpecificID id, void *value) |
Set a thread specific value. More... | |
BOOL | OSSetThreadStackUsage (OSThread *thread) |
Set thread stack usage tracking. More... | |
void | OSSleepThread (OSThreadQueue *queue) |
Sleep the current thread and add it to a thread queue. More... | |
void | OSSleepTicks (OSTime ticks) |
Sleep the current thread for a period of time. More... | |
uint32_t | OSSuspendThread (OSThread *thread) |
Suspend a thread. More... | |
void | __OSSuspendThreadNolock (OSThread *thread) |
void | OSTestThreadCancel () |
Check to see if the current thread should be cancelled or suspended. More... | |
void | OSWakeupThread (OSThreadQueue *queue) |
Wake up all threads in queue. More... | |
void | OSYieldThread () |
Yield execution to waiting threads with same priority. More... | |
Manage and run threads on each of the system's cores.
The thread scheduler in the Wii U uses co-operative scheduling, this is different to the usual pre-emptive scheduling that most operating systems use (such as Windows, Linux, etc). In co-operative scheduling threads must voluntarily yield execution to other threads. In pre-emptive threads are switched by the operating system after an amount of time.
With the Wii U's scheduling model the thread with the highest priority which is in a non-waiting state will always be running (where 0 is the highest priority and 31 is the lowest). Execution will only switch to other threads once this thread has been forced to wait, such as when waiting to acquire a mutex, or when the thread voluntarily yields execution to other threads which have the same priority using OSYieldThread. OSYieldThread will never yield to a thread with lower priority than the current thread.
struct OSThreadGHSExceptionHandling |
struct OSMutexQueue |
struct OSFastMutexQueue |
Data Fields | ||
---|---|---|
OSFastMutex * | head | |
OSFastMutex * | tail |
struct OSThread |
Data Fields | ||
---|---|---|
OSContext | context | |
uint32_t | tag | Should always be set to the value OS_THREAD_TAG. |
OSThreadState | state | Bitfield of OS_THREAD_STATE. |
OSThreadAttributes | attr | Bitfield of OS_THREAD_ATTRIB. |
uint16_t | id | Unique thread ID. |
int32_t | suspendCounter | Suspend count (increased by OSSuspendThread). |
int32_t | priority | Actual priority of thread. |
int32_t | basePriority | Base priority of thread, 0 is highest priority, 31 is lowest priority. |
int32_t | exitValue | Exit value. |
OSThreadQueue * | coreRunQueue[3] | Core run queue stuff. |
OSThreadLink | coreRunQueueLink[3] | |
OSThreadQueue * | queue | Queue the thread is currently waiting on. |
OSThreadLink | link | Link used for thread queue. |
OSThreadQueue | joinQueue | Queue of threads waiting to join this thread. |
OSMutex * | mutex | Mutex this thread is waiting to lock. |
OSMutexQueue | mutexQueue | Queue of mutexes this thread owns. |
OSThreadLink | activeLink | Link for global active thread queue. |
void * | stackStart | Stack start (top, highest address) |
void * | stackEnd | Stack end (bottom, lowest address) |
OSThreadEntryPointFn | entryPoint | Thread entry point. |
OSThreadGHSExceptionHandling | ghsExceptionHandling | GHS Exception handling thread-specifics. |
BOOL | alarmCancelled | |
void * | specific[0x10] | Thread specific values, accessed with OSSetThreadSpecific and OSGetThreadSpecific. |
OSThreadType | type | |
const char * | name | Thread name, accessed with OSSetThreadName and OSGetThreadName. |
OSAlarm * | waitEventTimeoutAlarm | |
void * | userStackPointer | The stack pointer passed in OSCreateThread. |
OSThreadCleanupCallbackFn | cleanupCallback | Called just before thread is terminated, set with OSSetThreadCleanupCallback. |
OSThreadDeallocatorFn | deallocator | Called just after a thread is terminated, set with OSSetThreadDeallocator. |
BOOL | cancelState | If TRUE then a thread can be cancelled or suspended, set with OSSetThreadCancelState. |
OSThreadRequest | requestFlag | Current thread request, used for cancelleing and suspending the thread. |
int32_t | needSuspend | Pending suspend request count. |
int32_t | suspendResult | Result of thread suspend. |
OSThreadQueue | suspendQueue | Queue of threads waiting for a thread to be suspended. |
int64_t | runQuantumTicks | How many ticks the thread should run for before suspension. |
uint64_t | coreTimeConsumedNs | The total amount of core time consumed by this thread (Does not include time while Running) |
uint64_t | wakeCount | The number of times this thread has been awoken. |
OSTime | unk0x610 | |
OSTime | unk0x618 | |
OSTime | unk0x620 | |
OSTime | unk0x628 | |
OSExceptionCallbackFn | dsiCallback[3] | Callback for DSI exception. |
OSExceptionCallbackFn | isiCallback[3] | Callback for ISI exception. |
OSExceptionCallbackFn | programCallback[3] | Callback for Program exception. |
OSExceptionCallbackFn | perfMonCallback[3] | Callback for PerfMon exception. |
BOOL | stackSyncObjAllowed | Checks for synchronization objects placed on stack in debug mode when set to true. |
uint16_t | tlsSectionCount | Number of TLS sections. |
OSTLSSection * | tlsSections | TLS Sections. |
OSFastMutex * | fastMutex | The fast mutex we are currently waiting for. |
OSFastMutexQueue | contendedFastMutexes | The fast mutexes we are currently contended on. |
OSFastMutexQueue | fastMutexQueue | The fast mutexes we currently own locks on. |
OSExceptionCallbackFn | alignCallback[3] | Callback for Alignment exception. |
uint32_t | reserved[5] | Cleared on thread creation but never used. |
typedef struct OSFastMutex OSFastMutex |
typedef struct OSFastMutexQueue OSFastMutexQueue |
typedef struct OSMutexQueue OSMutexQueue |
typedef struct OSTLSSection OSTLSSection |
typedef struct OSThreadGHSExceptionHandling OSThreadGHSExceptionHandling |
typedef uint8_t OSThreadState |
typedef uint32_t OSThreadRequest |
typedef uint8_t OSThreadAttributes |
typedef uint32_t OSThreadType |
typedef int(* OSThreadEntryPointFn) (int argc, const char **argv) |
typedef void(* OSThreadCleanupCallbackFn) (OSThread *thread, void *stack) |
typedef void(* OSThreadDeallocatorFn) (OSThread *thread, void *stack) |
typedef enum OSThreadSpecificID OSThreadSpecificID |
enum OSThreadSpecificID |
enum OS_THREAD_STATE |
enum OS_THREAD_REQUEST |
enum OS_THREAD_ATTRIB |
enum OS_THREAD_TYPE |
void OSCancelThread | ( | OSThread * | thread | ) |
Cancels a thread.
This sets the threads requestFlag to OS_THREAD_REQUEST_CANCEL, the thread will be terminated next time OSTestThreadCancel is called.
int32_t OSCheckActiveThreads | ( | ) |
Returns the count of active threads.
int32_t OSCheckThreadStackUsage | ( | OSThread * | thread | ) |
Get the maximum amount of stack the thread has used.
void OSClearThreadStackUsage | ( | OSThread * | thread | ) |
Disable tracking of thread stack usage.
void OSContinueThread | ( | OSThread * | thread | ) |
Clears a thread's suspend counter and resumes it.
BOOL OSCreateThread | ( | OSThread * | thread, |
OSThreadEntryPointFn | entry, | ||
int32_t | argc, | ||
char * | argv, | ||
void * | stack, | ||
uint32_t | stackSize, | ||
int32_t | priority, | ||
OSThreadAttributes | attributes | ||
) |
Create a new thread.
thread | Thread to initialise. |
entry | Thread entry point. |
argc | argc argument passed to entry point. |
argv | argv argument passed to entry point. |
stack | Top of stack (highest address). |
stackSize | Size of stack. |
priority | Thread priority, 0 is highest priorty, 31 is lowest. |
attributes | Thread attributes, see OSThreadAttributes. |
void OSDetachThread | ( | OSThread * | thread | ) |
Detach thread.
void OSExitThread | ( | int32_t | result | ) |
Exit the current thread with a exit code.
This function is implicitly called when the thread entry point returns.
void OSGetActiveThreadLink | ( | OSThread * | thread, |
OSThreadLink * | link | ||
) |
Get the next and previous thread in the thread's active queue.
OSThread* OSGetDefaultThread | ( | uint32_t | coreID | ) |
Returns the default thread for a specific core.
Each core has 1 default thread created before the game boots. The default thread for core 1 calls the RPX entry point, the default threads for core 0 and 2 are suspended and can be used with OSRunThread.
uint32_t OSGetStackPointer | ( | ) |
Return current stack pointer, value of r1 register.
uint32_t OSGetThreadAffinity | ( | OSThread * | thread | ) |
Get a thread's affinity.
const char* OSGetThreadName | ( | OSThread * | thread | ) |
Get a thread's name.
int32_t OSGetThreadPriority | ( | OSThread * | thread | ) |
Get a thread's base priority.
void* OSGetThreadSpecific | ( | OSThreadSpecificID | id | ) |
Get a thread's specific value set by OSSetThreadSpecific.
Wait until thread is terminated.
If the target thread is detached, returns FALSE.
thread | Thread to wait for |
threadResult | Pointer to store thread exit value in. |
int32_t OSResumeThread | ( | OSThread * | thread | ) |
Resumes a thread.
Decrements the thread's suspend counter, if the counter reaches 0 the thread is resumed.
BOOL OSRunThread | ( | OSThread * | thread, |
OSThreadEntryPointFn | entry, | ||
int | argc, | ||
const char ** | argv | ||
) |
Run a function on an already created thread.
Can only be used on idle threads.
Set a thread's cancellation state.
If the state is TRUE then the thread can be suspended or cancelled when OSTestThreadCancel is called.
OSThreadCleanupCallbackFn OSSetThreadCleanupCallback | ( | OSThread * | thread, |
OSThreadCleanupCallbackFn | callback | ||
) |
Set the callback to be called just before a thread is terminated.
OSThreadDeallocatorFn OSSetThreadDeallocator | ( | OSThread * | thread, |
OSThreadDeallocatorFn | deallocator | ||
) |
Set the callback to be called just after a thread is terminated.
void OSSetThreadName | ( | OSThread * | thread, |
const char * | name | ||
) |
Set a thread's name.
Set a thread's run quantum.
This is the maximum amount of time the thread can run for before being forced to yield.
void OSSetThreadSpecific | ( | OSThreadSpecificID | id, |
void * | value | ||
) |
Set a thread specific value.
Can be read with OSGetThreadSpecific.
void OSSleepThread | ( | OSThreadQueue * | queue | ) |
Sleep the current thread and add it to a thread queue.
Will sleep until the thread queue is woken with OSWakeupThread.
void OSSleepTicks | ( | OSTime | ticks | ) |
Sleep the current thread for a period of time.
uint32_t OSSuspendThread | ( | OSThread * | thread | ) |
Suspend a thread.
Increases a thread's suspend counter, if the counter is >0 then the thread is suspended.
void __OSSuspendThreadNolock | ( | OSThread * | thread | ) |
void OSTestThreadCancel | ( | ) |
Check to see if the current thread should be cancelled or suspended.
This is implicitly called in:
void OSWakeupThread | ( | OSThreadQueue * | queue | ) |
Wake up all threads in queue.
Clears the thread queue.
void OSYieldThread | ( | ) |
Yield execution to waiting threads with same priority.
This will never switch to a thread with a lower priority than the current thread.