coreinit: Add missing fields and enum definitions to OSThread and OSContext

This commit is contained in:
Maschell
2023-02-09 13:55:41 +01:00
committed by fincs
parent 55b1cd7f2c
commit 73bb4dcbcc
2 changed files with 26 additions and 4 deletions

View File

@@ -12,6 +12,14 @@
extern "C" {
#endif
//! A bitfield of enum OS_CONTEXT_STATE.
typedef uint16_t OSContextState;
enum OS_CONTEXT_STATE {
OS_CONTEXT_STATE_OSCALLBACK = 1 << 3,
OS_CONTEXT_STATE_USERMODE_SAVED = 1 << 4
};
typedef struct OSContext OSContext;
#define OS_CONTEXT_TAG 0x4F53436F6E747874ull
@@ -34,9 +42,10 @@ struct WUT_ALIGNAS(8) OSContext
uint32_t fpscr;
double fpr[32];
uint16_t spinLockCount;
uint16_t state;
OSContextState state;
uint32_t gqr[8];
WUT_UNKNOWN_BYTES(4);
//! Current core index
uint32_t upir;
double psf[32];
uint64_t coretime[3];
uint64_t starttime;
@@ -64,6 +73,7 @@ WUT_CHECK_OFFSET(OSContext, 0xb8, fpr);
WUT_CHECK_OFFSET(OSContext, 0x1b8, spinLockCount);
WUT_CHECK_OFFSET(OSContext, 0x1ba, state);
WUT_CHECK_OFFSET(OSContext, 0x1bc, gqr);
WUT_CHECK_OFFSET(OSContext, 0x1dc, upir);
WUT_CHECK_OFFSET(OSContext, 0x1e0, psf);
WUT_CHECK_OFFSET(OSContext, 0x2e0, coretime);
WUT_CHECK_OFFSET(OSContext, 0x2f8, starttime);

View File

@@ -45,6 +45,9 @@ typedef uint32_t OSThreadRequest;
//! A bitfield of enum OS_THREAD_ATTRIB.
typedef uint8_t OSThreadAttributes;
//! A bitfield of enum OS_THREAD_TYPE.
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);
@@ -91,7 +94,15 @@ enum OS_THREAD_ATTRIB
OS_THREAD_ATTRIB_DETACHED = 1 << 3,
//! Enables tracking of stack usage.
OS_THREAD_ATTRIB_STACK_USAGE = 1 << 5
OS_THREAD_ATTRIB_STACK_USAGE = 1 << 5,
OS_THREAD_ATTRIB_UNKNOWN = 1 << 7
};
enum OS_THREAD_TYPE {
OS_THREAD_TYPE_DRIVER = 0,
OS_THREAD_TYPE_IO = 1,
OS_THREAD_TYPE_APP = 2
};
struct OSMutexQueue
@@ -179,7 +190,7 @@ struct WUT_ALIGNAS(8) OSThread
//! Thread specific values, accessed with OSSetThreadSpecific and OSGetThreadSpecific.
void *specific[0x10];
WUT_UNKNOWN_BYTES(0x5c0 - 0x5bc);
OSThreadType type;
//! Thread name, accessed with OSSetThreadName and OSGetThreadName.
const char *name;
@@ -231,6 +242,7 @@ WUT_CHECK_OFFSET(OSThread, 0x394, stackStart);
WUT_CHECK_OFFSET(OSThread, 0x398, stackEnd);
WUT_CHECK_OFFSET(OSThread, 0x39c, entryPoint);
WUT_CHECK_OFFSET(OSThread, 0x57c, specific);
WUT_CHECK_OFFSET(OSThread, 0x5bc, type);
WUT_CHECK_OFFSET(OSThread, 0x5c0, name);
WUT_CHECK_OFFSET(OSThread, 0x5c8, userStackPointer);
WUT_CHECK_OFFSET(OSThread, 0x5cc, cleanupCallback);