SceKernelThreadMgr

From Vita Development Wiki
Jump to navigation Jump to search

PSVita supports multi-threading in the non-secure kernel but not the secure kernel. There is no user/POSIX threads; all threads are implemented as kernel threads and processes are the functionally the same as threads. Threads can be specified to run on a specific core with the CPU affinity mask option when creating the thread and by default, threads can run on any core. The kernel process can also run on any core. Additionally, the secure kernel can also run on any core.

Module

This module exists only in non-secure world. The SELF can be found in os0:kd/threadmgr.skprx.

Known NIDs

Version Name World Privilege NID
1.69 SceKernelThreadMgr Non-secure Kernel 0xA09CFA5C
3.57 SceKernelThreadMgr Non-secure Kernel 0x21530BE9
3.60 SceKernelThreadMgr Non-secure Kernel 0xF46ED7B2
3.65 SceKernelThreadMgr Non-secure Kernel 0x23A1B482

Libraries

This module is accessible by usermode.

Known NIDs

Version Name World Visibility NID
1.69 SceThreadmgrForDriver Non-secure Kernel 0xE2C40624
3.60 SceThreadmgrForDriver Non-secure Kernel 0xE2C40624
1.69 SceThreadmgrForKernel Non-secure Kernel 0xA8CA0EFD
3.60 SceThreadmgrForKernel Non-secure Kernel 0xA8CA0EFD
3.65 SceThreadmgrForKernel Non-secure Kernel 0x7F8593BA
3.67 SceThreadmgrForKernel Non-secure Kernel 0x7F8593BA
3.60 SceThreadmgrCoredumpTime Non-secure User 0x5E8D0E22
1.69 SceThreadmgr Non-secure User 0x859A24B1
3.60 SceThreadmgr Non-secure User 0x859A24B1

Possible function names according to SceTestBridge

sceTestBridgeThreadMgrCallCoredumpHandler -> ??
sceTestBridgeThreadMgrClearThreadMgrTestMode -> ??
sceTestBridgeThreadMgrDeleteStopThreadEvf -> ??
sceTestBridgeThreadMgrExitDeleteThreadInSyscall -> sceKernelExitDeleteThread
sceTestBridgeThreadMgrFastMutexLockUnlock -> ??
sceTestBridgeThreadMgrFastMutexShowStat -> ??
sceTestBridgeThreadMgrFastMutexStart -> ??
sceTestBridgeThreadMgrFastMutexStop -> ??
sceTestBridgeThreadMgrGetLwMutexInfoAll -> looks like _sceKernelGetLwMutexInfoById
sceTestBridgeThreadMgrIsCoredumpHandlerRegistered
sceTestBridgeThreadMgrRegisterCoredumpHandler -> sceCoredumpRegisterCoredumpHandler
sceTestBridgeThreadMgrResumeThread -> sceKernelResumeThreadForVM
sceTestBridgeThreadMgrRunningInSyscall -> ??
sceTestBridgeThreadMgrSetAndDeleteSuspendThreadEvf -> ??
sceTestBridgeThreadMgrSetThreadMgrTestMode -> ??
sceTestBridgeThreadMgrSpawnPriorityThread -> ??
sceTestBridgeThreadMgrStopThread -> ??
sceTestBridgeThreadMgrSuspendThread -> sceKernelSuspendThreadForVM
sceTestBridgeThreadMgrUnregisterCoredumpHandler -> sceCoredumpUnregisterCoredumpHandler
sceTestBridgeThreadMgrWaitInSyscall -> ??
sceTestBridgeThreadMgrWaitInSyscall2 -> ??
sceTestbridgeApi -> ??

SceThreadmgrForDriver

sceKernelGetThreadIdListForDriver

Version NID
3.60 0xEA7B8AEF

This function is used to query and obtain the number of thread within a process.

/**
 * @brief       Retreive a list of all threads belonging to a process.
 * @param[in]   pid         The process to query.
 * @param[out]  ids         The list of thread ids. Can be NULL if output is not required.
 * @param[in]   n           The max number of thread ids to copy out.
 * @param[out]  copy_count  The number of thread ids copied.
 * @return      The number of threads within the process, else < 0 on error.
 */
int sceKernelGetThreadIdListForDriver(SceUID pid, SceUID *ids, int n, int *copy_count);

sceKernelGetThreadCpuRegistersForDriver

Version NID
3.60 0x5022689D

This function is used to get the state of the registers for a SUSPENDED thread. It returns the registers in a two part structure. It's uncertian what the difference is between the two parts. It seems like its a user/kernel separation, but it's uncertain. It could also be a current/exception difference, but it is unconvincing. In normal usage on a suspended thread it seems to be the user aspect that contains valid values. When you query a suspended thread that has no had the opportunity to start yet, the kernel side is filled.

/** Structure representing all ARM registers */
typedef struct ArmCpuRegisters
{
    uint32_t    r0;
    uint32_t    r1;
    uint32_t    r2;
    uint32_t    r3;
    uint32_t    r4;
    uint32_t    r5;
    uint32_t    r6;
    uint32_t    r7;
    uint32_t    r8;
    uint32_t    r9;
    uint32_t    r10;
    uint32_t    r11;
    uint32_t    r12;
    uint32_t    sp;
    uint32_t    lr;
    uint32_t    pc;
    uint32_t    cpsr;
    uint32_t    unk;
} ArmCpuRegisters;

/** Structure containing a threads register states. */
typedef struct ThreadCpuRegisters
{
    /** Set of registers used for user mode. */
    ArmCpuRegisters user;
     /** Set of registers used for kernel mode. */
    ArmCpuRegisters kernel;
} ThreadCpuRegisters;

/**
 * @brief       Query the state of the registers for a suspended thread.
 *
 * The registers returned are the user/kernel set for the requested thread.
 * It's not certain that user/kernel is correct representation, instead it could be current/exception.
 * The thread provided must be suspended for this function to succeed.
 *
 * @param[in]   thid        The thread to query.
 * @param[out]  registers   The set of registers belonging to the thread.
 * @return      Zero on success, else < 0 on error.
 */
int sceKernelGetThreadCpuRegistersForDriver(SceUID thid, ThreadCpuRegisters *registers);

sceKernelChangeThreadSuspendStatusForDriver

Version NID
3.60 0x04C6764B

This function allows you to change the status of a suspended thread. Most of the valid suspend bits are unknown, but some can be used to prevent the kernel rethrowing exceptions or pull threads into the running/ready state.

/**
 * @brief       Change the thread suspension status to another value.
 *
 * More research needs to be done to find out exactly what each status actually means. Some examples of useful scenarios:
 * When handling an exception changing the status to 0x1002 (on a newly suspended thread) will stop the kernel rethrowing the same exception.
 * When resuming a suspended thread changing the status to 2 will allow it to resume.
 *
 * @param[in]   thid    The thread to change.
 * @param[in]   status  The new status for suspension.
 * @return      Zero on success, else < 0 on error.
 */
int sceKernelChangeThreadSuspendStatusForDriver(SceUID thid, int status);

sceKernelChangeActiveCpuMaskForDriver

Version NID
1.69 0x001173F8
3.60 0x001173F8

sceKernelGetThreadCurrentPriorityForDriver

Version NID
1.69 0x01414F0B
3.60 0x01414F0B

sceKernelCreateCallbackForDriver

Version NID
1.69 0x1C41614C
3.60 0x1C41614C

sceKernelWaitThreadEndCB_089ForDriver

Version NID
1.69 0x0373C5E3
3.60 0x0373C5E3

sceKernelDeleteCallbackForDriver

Version NID
1.69 0x3A7E17F6
3.60 0x3A7E17F6

sceKernelExitThreadForDriver

Version NID
1.69 0x0C8A38E1
3.60 0x0C8A38E1

sceKernelLockMutex_089ForDriver

Version NID
1.69 0x16AC80C5
3.60 0x16AC80C5
int sceKernelLockMutex_089ForDriver(SceUID mutex_id, int unk1, int unk2);

sceKernelExitDeleteThreadForDriver

Version NID
1.69 0x1D17DECF
3.60 0x1D17DECF

sceKernelUnlockMutex_089ForDriver

Version NID
1.69 0x1E82E5D0
3.60 0x1E82E5D0
int sceKernelUnlockMutex_089ForDriver(SceUID mutex_id, int unk1);

sceKernelStartThread_089ForDriver

Version NID
1.69 0x21F5419B
3.60 0x21F5419B

sceKernelTryLockMutex_089ForDriver

Version NID
1.69 0x270993A6
3.60 0x270993A6

sceKernelGetSystemTimeLowForDriver

Version NID
1.69 0x47F6DE49
3.60 0x47F6DE49

sceKernelDelayThreadForDriver

Version NID
1.69 0x4B675D05
3.60 0x4B675D05

sceKernelGetMutexInfo_089ForDriver

Version NID
1.69 0x69B78A12
3.60 0x69B78A12
int sceKernelGetMutexInfo_089ForDriver(SceUID mutexid, SceKernelMutexInfo *info);

sceKernelCancelMutex_089ForDriver

Version NID
1.69 0x7204B846
3.60 0x7204B846

sceKernelChangeCurrentThreadAttrForDriver

Version NID
1.69 0x751C9B7A
3.60 0x751C9B7A

sceKernelDelayThreadCBForDriver

Version NID
1.69 0x9C0180E1
3.60 0x9C0180E1

sceKernelLockMutexCB_089ForDriver

Version NID
1.69 0xD06F2886
3.60 0xD06F2886

sceKernelCheckWaitableStatusForDriver

Version NID
1.69 0xD9BD74EB
3.60 0xD9BD74EB

sceKernelCheckCallbackForDriver

Version NID
1.69 0xE53E41F6
3.60 0xE53E41F6

sceKernelWaitThreadEnd_089ForDriver

Version NID
1.69 0xF3489EF4
3.60 0xF3489EF4

sceKernelGetSystemTimeWideForDriver

Version NID
1.69 0xF4EE4FA9
3.60 0xF4EE4FA9

sceKernelGetThreadInfoForDriver

Version NID
1.69 0x283807E2
3.60 0x283807E2
int sceKernelGetThreadInfoForDriver(SceUID thid, SceKernelThreadInfo *info)

sceKernelInitializeFastMutexForDriver

Version NID
1.69 0xAF8E1266
3.60 0xAF8E1266
int sceKernelInitializeFastMutexForDriver(void* mutex, const char* name, int unk0, int unk1)

sceKernelLockFastMutexForDriver

Version NID
1.69 0x70627F3A
3.60 0x70627F3A
int sceKernelLockFastMutexForDriver(void* mutex)

sceKernelUnlockFastMutexForDriver

Version NID
1.69 0xDB395782
3.60 0xDB395782
int sceKernelUnlockFastMutexForDriver(void* mutex)

sceKernelDeleteFastMutexForDriver

Version NID
1.69 0x11FE84A1
3.60 0x11FE84A1
int sceKernelDeleteFastMutexForDriver(void* mutex)

sceKernelSignalCondToForDriver

Version NID
1.69 0x61533DA9
3.60 0x61533DA9
int sceKernelSignalCondToForDriver(SceUID condId, SceUID threadId)

sceKernelCreateCondForDriver

Version NID
1.69 0xDB6CD34A
3.60 0xDB6CD34A
SceUID sceKernelCreateCondForDriver(const char *name, SceUInt attr, SceUID mutexId, const SceKernelCondOptParam *option)

sceKernelWaitCondForDriver

Version NID
1.69 0xCC7E027D
3.60 0xCC7E027D
int sceKernelWaitCondForDriver(SceUID condId, unsigned int *timeout)

sceKernelReceiveMsgPipeVectorForDriver

Version NID
1.69 0xDA1F256B
3.60 0xDA1F256B

sceKernelReceiveMsgPipeVectorCBForDriver

Version NID
1.69 0xDA5C9AC6
3.60 0xDA5C9AC6

sceKernelGetThreadIdForDriver

Version NID
1.69 0x59D06540
3.60 0x59D06540
SceUID sceKernelGetThreadIdForDriver(void);

sceKernelDeleteCondForDriver

Version NID
1.69 0xAEE0D27C
3.60 0xAEE0D27C
int sceKernelDeleteCondForDriver(SceUID cid);

sceKernelCreateSemaForDriver

Version NID
1.69 0x30E93C31
3.60 0x30E93C31
/**
 * Creates a new semaphore
 *
 * @par Example:
 * @code
 * int semaid;
 * semaid = sceKernelCreateSemaForDriver("MySema", 0, 1, 1, 0);
 * @endcode
 *
 * @param name - Specifies the name of the sema
 * @param attr - Sema attribute flags (normally set to 0)
 * @param initVal - Sema initial value
 * @param maxVal - Sema maximum value
 * @param option - Sema options (normally set to 0)
 * @return A semaphore id
 */
SceUID sceKernelCreateSemaForDriver(const char *name, SceUInt attr, int initVal, int maxVal, SceKernelSemaOptParam *option);

?sceKernelWaitSemaCBForDriver?

Version NID
1.69 0xF55E4D86
3.60 0xF55E4D86

sceKernelWaitSemaCBForDriver

Version NID
1.69 0x3C8B55A9
3.60 0x3C8B55A9
/**
 * Lock a semaphore
 *
 * @par Example:
 * @code
 * sceKernelWaitSemaCBForDriver(sema_id, 1, 0);
 * @endcode
 *
 * @param sema_id - The sema id returned from ::sceKernelCreateSemaForDriver
 * @param signal - The value to wait for (i.e. if 1 then wait till reaches a signal state of 1)
 * @param timeout - Timeout in microseconds (assumed).
 *
 * @return < 0 on error.
 */
int sceKernelWaitSemaCBForDriver(SceUID sema_id, int signal, SceUInt *timeout);

sceKernelSignalCondForDriver

Version NID
1.69 0xAC616150
3.60 0xAC616150
int sceKernelSignalCondForDriver(SceUID condId);

sceKernelChangeThreadCpuAffinityMaskForDriver

Version NID
1.69 0x6D0733A8
3.60 0x6D0733A8

derived from sceKernelChangeThreadCpuAffinityMask

//uid - thread uid
int sceKernelChangeThreadCpuAffinityMaskForDriver(SceUID uid, int mask);

sceKernelSetPermissionForDriver

Version NID
1.69 0x02EEDF17
3.60 0x02EEDF17
// return value is previous value
int sceKernelSetPermissionForDriver(int value);

sceKernelGetProcessIdForDriver

Version NID
1.69 0x9DCB4B7A
3.60 0x9DCB4B7A

Returns the process ID.

SceUID sceKernelGetProcessIdForDriver(void);

sceKernelSetProcessIdToTLSForDriver

Version NID
1.69 0x0486F239
3.60 0x0486F239

Sets given pid into TLS.

// return value is previous value
SceUID sceKernelSetProcessIdToTLSForDriver(SceUID pid);

sceKernelGetProcessIdFromTLSForDriver

Version NID
1.69 0xFA54D49A
3.60 0xFA54D49A

Gets pid from TLS.

// return value is previous value
SceUID sceKernelGetProcessIdFromTLSForDriver();

sceKernelRegisterTimerForDriver

Version NID
3.60 0xC58DF384

// seen: unk = 2 so maybe UDCD bus

int sceKernelRegisterTimerForDriver(char *name, void *function, int unk);

SceThreadmgrForKernel

sceKernelGetProcessIdForKernel

Version NID
1.69 0x9DCB4B7A
3.60 0x9DCB4B7A

Returns the process ID.

SceUID sceKernelGetProcessIdForKernel(void);

sceKernelChangeActiveCpuMaskForKernel

Version NID
1.69 0x1173F8

sceKernelGetThreadCurrentPriorityForKernel

Version NID
1.69 0x1414F0B

sceKernelWaitThreadEndCB_089ForKernel

Version NID
1.69 0x373C5E3

sceKernelExitThreadForKernel

Version NID
1.69 0xC8A38E1

sceKernelLockMutex_089ForKernel

Version NID
1.69 0x16AC80C5
3.60 0x16AC80C5
int sceKernelLockMutex_089ForKernel(SceUID mutex_id, int unk1, int unk2);

sceKernelExitDeleteThreadForKernel

Version NID
1.69 0x1D17DECF

sceKernelUnlockMutex_089ForKernel

Version NID
1.69 0x1E82E5D0
3.60 0x1E82E5D0
int sceKernelUnlockMutex_089ForKernel(SceUID mutex_id, int unk1);

sceKernelStartThread_089ForKernel

Version NID
1.69 0x21F5419B

sceKernelTryLockMutex_089ForKernel

Version NID
1.69 0x270993A6

sceKernelDelayThreadForKernel

Version NID
1.69 0x4B675D05

sceKernelGetMutexInfo_089ForKernel

Version NID
1.69 0x69B78A12

sceKernelCancelMutex_089ForKernel

Version NID
1.69 0x7204B846

sceKernelChangeCurrentThreadAttrForKernel

Version NID
1.69 0x751C9B7A

sceKernelDelayThreadCBForKernel

Version NID
1.69 0x9C0180E1

sceKernelLockMutexCB_089ForKernel

Version NID
1.69 0xD06F2886

sceKernelCheckWaitableStatusForKernel

Version NID
1.69 0xD9BD74EB

sceKernelCheckCallbackForKernel

Version NID
1.69 0xE53E41F6

sceKernelWaitThreadEnd_089ForKernel

Version NID
1.69 0xF3489EF4

sceKernelCreateMutexForKernelForKernel

Version NID
1.69 0xFBAA026E
3.60 0xFBAA026E
int sceKernelCreateMutexForKernel(const char *name, SceUInt attr, int initCount, SceKernelMutexOptParam *option);

sceKernelDeleteMutexForKernel

Version NID
1.69 0x0A912340
3.60 0x0A912340
int sceKernelDeleteMutexForKernel(SceUID mutexid);

Run Exclusively

Version NID
1.69 0xE54FD746
3.60 0xE54FD746

This takes a function and runs it exclusively on the current core on its own stack.

// stack_size should be 0x2000
int run_exclusively(int stack_size, void *func, void *args);

Run Exclusively 2

Version NID
3.60 0xA2C801A5
// stack_size should be 0x2000
int run_exclusively_2(int stack_size, void *func, void *args);

sceKernelWaitSemaCBForKernel

Version NID
3.60 0x3c8b55a9

sceKernelGetFaultingProcessForKernel

Version NID
3.60 0xD8B9AC8D
3.65-3.67 0x6C1F092F

SceThreadmgrForKernel_E0833C77

Version NID
3.57 not present, added on 3.60
3.60 0xE0833C77

SceThreadmgr

sceKernelChangeActiveCpuMask

Version NID
1.69 0x1173F8

sceKernelGetThreadCurrentPriority

Version NID
1.69 0x1414F0B

sceKernelWaitThreadEndCB_089

Version NID
1.69 0x373C5E3

sceKernelGetCallbackCount

Version NID
1.69 0x38644D5

_sceKernelTryReceiveMsgPipeVector

Version NID
1.69 0x3CFCF00

sceKernelCloseMutex

Version NID
1.69 0x3E23AF6

_sceKernelGetSemaInfo

Version NID
1.69 0x402C633

_sceKernelWaitCond

Version NID
1.69 0x40795C7

_sceKernelWaitMultipleEventsCB

Version NID
1.69 0x558B7C1

_sceKernelGetCondInfo

Version NID
1.69 0x5C51CE1

_sceKernelSignalLwCondAll

Version NID
1.69 0x7D2584A

sceKernelGetActiveCpuMask

Version NID
1.69 0xC3CBB8B

sceKernelExitThread

Version NID
1.69 0xC8A38E1

_sceKernelCreateSema

Version NID
1.69 0xD76458E

sceKernelOpenMsgPipe

Version NID
1.69 0xE1CB9F6

_sceKernelSignalCondAll

Version NID
1.69 0xF11545D

_sceKernelGetEventFlagInfo

Version NID
1.69 0x106C216F

_sceKernelSetEventWithNotifyCallback

Version NID
1.69 0x118F646E

sceKernelSignalCondTo

Version NID
1.69 0x1269F4EC

_sceKernelUnlockMutex

Version NID
1.69 0x12948A63

sceKernelCloseMsgPipe

Version NID
1.69 0x1305A065

_sceKernelCancelTimer

Version NID
1.69 0x13117B21

sceKernelChangeThreadCpuAffinityMask

Version NID
1.69 0x15129174

_sceKernelDeleteThread

Version NID
1.69 0x151E0020

sceKernelCloseCond

Version NID
1.69 0x15C690E0

sceKernelLockMutex_089

Version NID
1.69 0x16AC80C5
3.60 0x16AC80C5
int sceKernelLockMutex_089(SceUID mutex_id, int unk1, int unk2);

_sceKernelDeleteEventFlag

Version NID
1.69 0x16C93704

_sceKernelOpenMsgPipe

Version NID
1.69 0x16EC5B7C

sceKernelUnregisterCallbackFromEvent

Version NID
1.69 0x18462B11

_sceKernelWaitLwCond

Version NID
1.69 0x18C65756

_sceKernelCancelCallback

Version NID
1.69 0x19A0C1B6

sceKernelUnlockMutex

Version NID
1.69 0x1A372EC8

_sceKernelCancelMutex

Version NID
1.69 0x1B74CB89

sceKernelDeleteThread

Version NID
1.69 0x1BBDE3D9

_sceKernelCancelSema

Version NID
1.69 0x1CAF805D

sceKernelExitDeleteThread

Version NID
1.69 0x1D17DECF

sceKernelUnlockMutex_089

Version NID
1.69 0x1E82E5D0
3.60 0x1E82E5D0
int sceKernelUnlockMutex_089(SceUID mutex_id, int unk1);

_sceKernelWaitMultipleEvents

Version NID
1.69 0x200CC503

sceKernelTryLockWriteRWLock

Version NID
1.69 0x206CBB66

sceKernelDeleteSimpleEvent

Version NID
1.69 0x208CFE28

_sceKernelPollSema

Version NID
1.69 0x20AF286A

_sceKernelGetThreadCpuAffinityMask

Version NID
1.69 0x212E6C35

_sceKernelGetTimerEventRemainingTime

Version NID
1.69 0x215FD24D

_sceKernelCloseMutex

Version NID
1.69 0x21716C81

_sceKernelPollEvent

Version NID
1.69 0x21C7913E

sceKernelStartThread_089

Version NID
1.69 0x21F5419B

_sceKernelCloseTimer

Version NID
1.69 0x22605E63

_sceKernelExitCallback

Version NID
1.69 0x2682E6ED

sceKernelTryLockMutex_089

Version NID
1.69 0x270993A6

sceKernelSetTimerTimeWide

Version NID
1.69 0x273B4A4D

_sceKernelOpenCond

Version NID
1.69 0x27DD11EA

_sceKernelGetThreadmgrUIDClass

Version NID
1.69 0x27EE191B

sceKernelOpenMutex_089

Version NID
1.69 0x2928D2EC

_sceKernelCancelEvent

Version NID
1.69 0x29483405

_sceKernelCreateMsgPipeWithLR

Version NID
1.69 0x2AAC8BFD

_sceKernelUnlockLwMutex

Version NID
1.69 0x2ABC41DF

_sceKernelGetMsgPipeCreatorId

Version NID
1.69 0x2B751F95

sceKernelCancelCallback

Version NID
1.69 0x30741EF2

sceKernelSetEvent

Version NID
1.69 0x324218CD

_sceKernelGetTimerBaseWide

Version NID
1.69 0x370E147B

_sceKernelGetThreadContextForVM

Version NID
1.69 0x377094D5

_sceKernelCreateEventFlag

Version NID
1.69 0x38AA5E8E

_sceKernelSetTimerTimeWide

Version NID
1.69 0x39364623

_sceKernelWaitThreadEndCB_0910

Version NID
1.69 0x394BCCF2

_sceKernelSignalCondTo

Version NID
1.69 0x3C00071F

_sceKernelReceiveMsgPipeVector

Version NID
1.69 0x3DD9E4AB

_sceKernelPulseEventWithNotifyCallback

Version NID
1.69 0x3E49D3F1

sceKernelUnlockReadRWLock

Version NID
1.69 0x3EF91145

sceKernelGetTimerTimeWide

Version NID
1.69 0x3EFD3165

_sceKernelCreateCallback

Version NID
1.69 0x3F42E175

_sceKernelWaitEventFlagCB

Version NID
1.69 0x401E0C68

_sceKernelSetEventFlag

Version NID
1.69 0x438917E4

_sceKernelWaitCondCB

Version NID
1.69 0x452B0AB3

_sceKernelWaitSema

Version NID
1.69 0x45389B6B

sceKernelGetSystemTimeLow

Version NID
1.69 0x47F6DE49

sceKernelStartTimer

Version NID
1.69 0x48091E0C

sceKernelDelayThread

Version NID
1.69 0x4B675D05

_sceKernelClearEvent

Version NID
1.69 0x4B7F47DC

__sceKernelCreateLwMutex

Version NID
1.69 0x4BB3154A
3.60 0x4BB3154A
typedef struct sceKernelCreateLwMutex_opt //size is 0x10
{
  int initCount;
  const SceKernelLwMutexOptParam* pOptParam;
  uint32_t unk_8;
  uint32_t unk_C;
} sceKernelCreateLwMutex_opt;

int __sceKernelCreateLwMutex(SceKernelLwMutexWork *pWork, const char *pName, unsigned int attr, sceKernelCreateLwMutex_opt* opt);

sceKernelClearEventFlag

Version NID
1.69 0x4CB87CA7

_sceKernelReceiveMsgPipeVectorCB

Version NID
1.69 0x4DBF648E

_sceKernelNotifyCallback

Version NID
1.69 0x4DF8B624

_sceKernelWaitEvent

Version NID
1.69 0x4E0EA70D

sceKernelOpenSimpleEvent

Version NID
1.69 0x4E1E4DF8

sceKernelGetThreadStackFreeSize

Version NID
1.69 0x4F8A3DA0

_sceKernelWaitSignal

Version NID
1.69 0x50407BF4

_sceKernelTryLockWriteRWLock

Version NID
1.69 0x52DD3322

sceKernelOpenMutex

Version NID
1.69 0x52E17182

sceKernelDeleteEventFlag

Version NID
1.69 0x5840162C

_sceKernelUnregisterCallbackFromEventAll

Version NID
1.69 0x5B5650C7

_sceKernelUnlockWriteRWLock

Version NID
1.69 0x5B746A69

_sceKernelGetCallbackCount

Version NID
1.69 0x5D06FF09

_sceKernelLockReadRWLockCB

Version NID
1.69 0x5D86D763

sceKernelGetTimerBaseWide

Version NID
1.69 0x5DBC1960

_sceKernelSendMsgPipeVector

Version NID
1.69 0x5E65E454

_sceKernelWaitExceptionCB

Version NID
1.69 0x5E7876F2

sceKernelResumeThreadForVM

Version NID
1.69 0x5E93840E

_sceKernelCloseCond

Version NID
1.69 0x650CE348

_sceKernelPMonCpuGetCounter

Version NID
1.69 0x667A4649

_sceKernelGetActiveCpuMask

Version NID
1.69 0x67FDA21B

_sceKernelDeleteCallback

Version NID
1.69 0x68D0FA79

sceKernelGetMutexInfo_089

Version NID
1.69 0x69B78A12

_sceKernelPMonThreadGetCounter

Version NID
1.69 0x6B9711AC

_sceKernelGetLwCondInfo

Version NID
1.69 0x6C79F2F2

sceKernelSignalCond

Version NID
1.69 0x6ED2E2DC
3.60 0x6ED2E2DC

_sceKernelSignalLwCondTo

Version NID
1.69 0x6F1A4A2E

_sceKernelGetTimerTime

Version NID
1.69 0x6F2C41BA

_sceKernelWaitException

Version NID
1.69 0x6F7C4DE6

_sceKernelGetEventPattern

Version NID
1.69 0x70358258

sceKernelGetMsgPipeCreatorId

Version NID
1.69 0x70E2A6D2

_sceKernelSuspendThreadForVM

Version NID
1.69 0x7192B01C

sceKernelCancelMutex_089

Version NID
1.69 0x7204B846

_sceKernelWaitLwCondCB

Version NID
1.69 0x72DBB96B

sceKernelTryLockMutex

Version NID
1.69 0x72FC1F54

sceKernelChangeCurrentThreadAttr

Version NID
1.69 0x751C9B7A

_sceKernelDeleteLwCond

Version NID
1.69 0x75FCF058

sceKernelOpenCond

Version NID
1.69 0x76BDA02F

sceKernelRegisterCallbackToEvent

Version NID
1.69 0x76FB37E9

_sceKernelSignalCond

Version NID
1.69 0x79889DAC

_sceKernelCreateTimer

Version NID
1.69 0x79BA0A6D

_sceKernelGetMsgPipeInfo

Version NID
1.69 0x7AE31060

sceKernelClearEvent

Version NID
1.69 0x7B2A4B28

_sceKernelUnlockReadRWLock

Version NID
1.69 0x7D16FB3B

_sceKernelWaitEventCB

Version NID
1.69 0x7D483C33

_sceKernelLockReadRWLock

Version NID
1.69 0x7EB9E8B5

_sceKernelLockMutex

Version NID
1.69 0x7FA945AD

_sceKernelGetThreadExitStatus_0940

Version NID
1.69 0x800BB137

_sceKernelLockWriteRWLock

Version NID
1.69 0x80191FAA

_sceKernelGetSystemInfo

Version NID
1.69 0x80544E0C

_sceKernelDeleteSema

Version NID
1.69 0x855F49D5

_sceKernelOpenTimer

Version NID
1.69 0x8564E008

_sceKernelGetTimerBase

Version NID
1.69 0x865DA482

sceKernelPollSema

Version NID
1.69 0x866EF048

_sceKernelGetCallbackInfo

Version NID
1.69 0x86761234

sceKernelStopTimer

Version NID
1.69 0x869E9F20

sceKernelDeleteCond

Version NID
1.69 0x879E6EBD

sceKernelUnregisterCallbackFromEventAll

Version NID
1.69 0x888A7361

_sceKernelGetRWLockInfo

Version NID
1.69 0x8CE3AFC7

sceKernelPulseEvent

Version NID
1.69 0x8D27BAD6

_sceKernelCancelEventWithSetPattern

Version NID
1.69 0x8E68E870

_sceKernelSignalSema

Version NID
1.69 0x8E9A0400

_sceKernelDeleteLwMutex

Version NID
1.69 0x91262C5F

_sceKernelDeleteTimer

Version NID
1.69 0x921A043D

_sceKernelCreateMutex

Version NID
1.69 0x92667AE5

_sceKernelCreateLwCond

Version NID
1.69 0x940B9EBE

sceKernelCloseEventFlag

Version NID
1.69 0x9A68F547

_sceKernelSetEvent

Version NID
1.69 0x9A92C33F

_sceKernelDeleteRWLock

Version NID
1.69 0x9AA387DF

_sceKernelGetTimerTimeWide

Version NID
1.69 0x9AC39954

_sceKernelRegisterCallbackToEvent

Version NID
1.69 0x9B1922F2

sceKernelDelayThreadCB

Version NID
1.69 0x9C0180E1

_sceKernelCreateSimpleEvent

Version NID
1.69 0x9C187FAD

_sceKernelLockLwMutex

Version NID
1.69 0x9C572180

_sceKernelChangeThreadCpuAffinityMask

Version NID
1.69 0x9C921F8D

_sceKernelOpenMutex

Version NID
1.69 0x9D291788

sceKernelGetProcessId

Version NID
1.69 0x9DCB4B7A

sceKernelCloseSema

Version NID
1.69 0xA2D81F9E

sceKernelCloseMutex_089

Version NID
1.69 0xA35427EE

sceKernelNotifyCallback

Version NID
1.69 0xA4683592

_sceKernelCloseMsgPipe

Version NID
1.69 0xAA888831

sceKernelDeleteTimer

Version NID
1.69 0xAB1E42C4

_sceKernelGetTimerInfo

Version NID
1.69 0xAC7FE4F3

sceKernelCloseTimer

Version NID
1.69 0xACE60E4A

_sceKernelCreateRWLock

Version NID
1.69 0xB1877F5E

sceKernelCreateCallback

Version NID
1.69 0xB19CF7E9

_sceKernelGetThreadInfo

Version NID
1.69 0xB373D8A1
3.60 0xB373D8A1
typedef struct get_thread_info_opt
{
   uint32_t size; // size of SceKernelThreadInfo
   uint32_t unk;
}get_thread_info_opt;

int _sceKernelGetThreadInfo(SceUID thid, SceKernelThreadInfo *info, get_thread_info_opt* opt)

_sceKernelTrySendMsgPipeVector

Version NID
1.69 0xB3D600AB

sceKernelUnlockWriteRWLock

Version NID
1.69 0xB4151397

_sceKernelGetThreadStackFreeSize

Version NID
1.69 0xB5EC061A

_sceKernelDeleteMsgPipe

Version NID
1.69 0xB6D50FCC

sceKernelOpenTimer

Version NID
1.69 0xB6E286E7

_sceKernelGetSystemTime

Version NID
1.69 0xB70EBAE9

_sceKernelChangeThreadVfpException

Version NID
1.69 0xB8F165B4

_sceKernelOpenSema

Version NID
1.69 0xB96FED7D

_sceKernelGetThreadTLSAddr

Version NID
1.69 0xBACA6891

sceKernelOpenEventFlag

Version NID
1.69 0xBC19F8A1

_sceKernelTryLockMutex

Version NID
1.69 0xBCFB867F

sceKernelChangeThreadPriority

Version NID
1.69 0xBD0139F2

sceKernelCreateThreadForUser

Version NID
1.69 0xC0FAF6A3

_sceKernelSendSignal

Version NID
1.69 0xC21FC992

_sceKernelCloseRWLock

Version NID
1.69 0xC239DBCC

sceKernelSignalCondAll

Version NID
1.69 0xC2E7AC22

_sceKernelStartThread

Version NID
1.69 0xC30B1745

_sceKernelSignalLwCond

Version NID
1.69 0xC37F6983

_sceKernelStartTimer

Version NID
1.69 0xC3ED6E4A

_sceKernelCloseSimpleEvent

Version NID
1.69 0xC6FFE335

_sceKernelGetThreadRunStatus

Version NID
1.69 0xC7FB5497

sceKernelGetThreadmgrUIDClass

Version NID
1.69 0xC9678F7F

_sceKernelStopTimer

Version NID
1.69 0xC96F4269

sceKernelDeleteMutex

Version NID
1.69 0xCB78710D

sceKernelOpenSema

Version NID
1.69 0xCBE235C7

_sceKernelCreateCond

Version NID
1.69 0xCC14FA59

sceKernelChangeThreadVfpException

Version NID
1.69 0xCC18FBAE

sceKernelOpenRWLock

Version NID
1.69 0xCE510196

_sceKernelCancelMsgPipe

Version NID
1.69 0xCE769C83

_sceKernelWaitSignalCB

Version NID
1.69 0xCEA3FC52

_sceKernelCancelRWLock

Version NID
1.69 0xD004EA15

sceKernelLockMutexCB_089

Version NID
1.69 0xD06F2886

_sceKernelGetThreadExitStatus

Version NID
1.69 0xD3210C08

_sceKernelWaitThreadEnd_0910

Version NID
1.69 0xD38231C9

sceKernelDeleteCallback

Version NID
1.69 0xD469676B

_sceKernelSetThreadContextForVM

Version NID
1.69 0xD4785C41

sceKernelSendSignal

Version NID
1.69 0xD4C367B2

_sceKernelDeleteCond

Version NID
1.69 0xD99F51D3

sceKernelCheckWaitableStatus

Version NID
1.69 0xD9BD74EB

_sceKernelGetLwCondInfoById

Version NID
1.69 0xD9E78D30

_sceKernelPollEventFlag

Version NID
1.69 0xDAB1B1C8

sceKernelDeleteSema

Version NID
1.69 0xDB32948A

_sceKernelLockMutexCB

Version NID
1.69 0xDB9F5333

_sceKernelLockWriteRWLockCB

Version NID
1.69 0xDBD09B09

_sceKernelOpenRWLock

Version NID
1.69 0xDFCEE5AB

_sceKernelDeleteMutex

Version NID
1.69 0xE0A6D759

_sceKernelSetTimerEvent

Version NID
1.69 0xE2C0BFEF

_sceKernelOpenSimpleEvent

Version NID
1.69 0xE326EA7A

sceKernelCheckCallback

Version NID
1.69 0xE53E41F6

_sceKernelChangeThreadPriority

Version NID
1.69 0xE61C2B06

sceKernelSignalSema

Version NID
1.69 0xE6B761D1

sceKernelDeleteRWLock

Version NID
1.69 0xE73649CA

sceKernelDeleteMsgPipe

Version NID
1.69 0xE78BCCF7

_sceKernelCloseSema

Version NID
1.69 0xE8C03447

_sceKernelGetMutexInfo

Version NID
1.69 0xE8CC3DF0
3.60 0xE8CC3DF0
typedef struct _sceKernelGetMutexInfo_opt
{
  int unk_0;
  int unk_4;
}_sceKernelGetMutexInfo_opt;

int _sceKernelGetMutexInfo(SceUID mutexid, SceKernelMutexInfo *info, _sceKernelGetMutexInfo_opt* opt);

_sceKernelWaitThreadEnd

Version NID
1.69 0xEA5C52F5

_sceKernelTryLockReadRWLock

Version NID
1.69 0xEB9054B2

sceKernelSetEventFlag

Version NID
1.69 0xEC94DFF7

sceKernelTryLockReadRWLock

Version NID
1.69 0xEFDDA456

_sceKernelClearEventFlag

Version NID
1.69 0xF0526CE2

sceKernelGetThreadCpuAffinityMask

Version NID
1.69 0xF1AE5654

sceKernelWaitThreadEnd_089

Version NID
1.69 0xF3489EF4

sceKernelGetSystemTimeWide

Version NID
1.69 0xF4EE4FA9

_sceKernelPulseEvent

Version NID
1.69 0xF6A0FE84

_sceKernelCloseEventFlag

Version NID
1.69 0xF6CFB4F1

_sceKernelSendMsgPipeVectorCB

Version NID
1.69 0xF6D515DC

_sceKernelDeleteSimpleEvent

Version NID
1.69 0xF7413EC7

_sceKernelCancelEventFlag

Version NID
1.69 0xF76F3056

_sceKernelWaitSemaCB

Version NID
1.69 0xF8E06784

_sceKernelWaitThreadEndCB

Version NID
1.69 0xFA3D4491

_sceKernelOpenEventFlag

Version NID
1.69 0xFA64FB37

_sceKernelUnregisterCallbackFromEvent

Version NID
1.69 0xFB66565E

_sceKernelWaitEventFlag

Version NID
1.69 0xFCE2F728

sceKernelCloseRWLock

Version NID
1.69 0xFD5BD5C1

_sceKernelGetLwMutexInfoById

Version NID
1.69 0xFEC9E946

sceKernelCloseSimpleEvent

Version NID
1.69 0xFEF4CA53

_sceKernelSetTimerTime

Version NID
1.69 0xFF738CD9

_sceKernelRegisterThreadEventHandler

Version NID
3.60 0xCE6B49D8
struct sceKernelRegisterThreadEventHandlerOpt
{
  void *handler;
  int num1;
  int reserved0;
  int reserved1;
};

int _sceKernelRegisterThreadEventHandler(char *name, SceUID uid, uint32_t num0, sceKernelRegisterThreadEventHandlerOpt *opt);

SceThreadmgrCoredumpTime

sceKernelExitThread

Version NID
3.60 0x0C8A38E1