|
wut v1.9.1
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. | |
| typedef uint32_t | OSThreadRequest |
| A value from enum OS_THREAD_REQUEST. | |
| typedef uint8_t | OSThreadAttributes |
| A bitfield of enum OS_THREAD_ATTRIB. | |
| typedef uint32_t | OSThreadType |
| A bitfield of enum OS_THREAD_TYPE. | |
| 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. | |
| 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. | |
| void | OSDetachThread (OSThread *thread) |
| Detach thread. | |
| void | OSExitThread (int32_t result) |
| Exit the current thread with a exit code. | |
| void | OSGetActiveThreadLink (OSThread *thread, OSThreadLink *link) |
| Get the next and previous thread in the thread's active queue. | |
| OSThread * | OSGetCurrentThread () |
| Return pointer to OSThread object for the current thread. | |
| OSThread * | OSGetDefaultThread (uint32_t coreID) |
| Returns the default thread for a specific core. | |
| 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. | |
| BOOL | OSIsThreadSuspended (OSThread *thread) |
| Returns TRUE if a thread is suspended. | |
| BOOL | OSIsThreadTerminated (OSThread *thread) |
| Returns TRUE if a thread is terminated. | |
| BOOL | OSJoinThread (OSThread *thread, int *threadResult) |
| Wait until thread is terminated. | |
| int32_t | OSResumeThread (OSThread *thread) |
| Resumes a thread. | |
| BOOL | OSRunThread (OSThread *thread, OSThreadEntryPointFn entry, int argc, const char **argv) |
| Run a function on an already created thread. | |
| BOOL | OSSetThreadAffinity (OSThread *thread, uint32_t affinity) |
| Set a thread's affinity. | |
| BOOL | OSSetThreadCancelState (BOOL state) |
| Set a thread's cancellation state. | |
| 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. | |
| BOOL | OSSetThreadPriority (OSThread *thread, int32_t priority) |
| Set a thread's priority. | |
| BOOL | OSSetThreadRunQuantum (OSThread *thread, uint32_t quantum) |
| Set a thread's run quantum. | |
| void | OSSetThreadSpecific (OSThreadSpecificID id, void *value) |
| Set a thread specific value. | |
| BOOL | OSSetThreadStackUsage (OSThread *thread) |
| Set thread stack usage tracking. | |
| void | OSSleepThread (OSThreadQueue *queue) |
| Sleep the current thread and add it to a thread queue. | |
| void | OSSleepTicks (OSTime ticks) |
| Sleep the current thread for a period of time. | |
| uint32_t | OSSuspendThread (OSThread *thread) |
| Suspend a thread. | |
| void | __OSSuspendThreadNolock (OSThread *thread) |
| void | OSTestThreadCancel () |
| Check to see if the current thread should be cancelled or suspended. | |
| void | OSWakeupThread (OSThreadQueue *queue) |
| Wake up all threads in queue. | |
| void | OSYieldThread () |
| Yield execution to waiting threads with same priority. | |
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.