5#ifndef THREADMAN_KERNEL_H
6#define THREADMAN_KERNEL_H
8#include "common_header.h"
9#include "threadman_user.h"
13typedef s32 (*SceKernelThreadEntry)(SceSize args,
void *argp);
15typedef s32 (*SceKernelRebootKernelThreadEntry)(s32 arg1, u32 arg2, s32 arg3, s32 arg4);
20} SceKernelThreadOptParam;
22#define SCE_KERNEL_THREAD_ID_SELF (0)
27#define SCE_KERNEL_INVALID_PRIORITY (0)
28#define SCE_KERNEL_HIGHEST_PRIORITY_KERNEL (1)
29#define SCE_KERNEL_HIGHEST_PRIORITY_USER (16)
30#define SCE_KERNEL_MODULE_INIT_PRIORITY (32)
31#define SCE_KERNEL_LOWEST_PRIORITY_USER (111)
32#define SCE_KERNEL_LOWEST_PRIORITY_KERNEL (126)
35#define SCE_KERNEL_TH_KERNEL_DEFAULT_STACKSIZE (4 * 1024)
36#define SCE_KERNEL_TH_USER_DEFAULT_STACKSIZE (256 * 1024)
39#define SCE_KERNEL_TH_VSH_MODE (0xC0000000)
40#define SCE_KERNEL_TH_APP_MODE (0xB0000000)
41#define SCE_KERNEL_TH_USB_WLAN_MODE (0xA0000000)
42#define SCE_KERNEL_TH_MS_MODE (0x90000000)
43#define SCE_KERNEL_TH_USER_MODE (0x80000000)
44#define SCE_KERNEL_TH_NO_FILLSTACK (0x00100000)
45#define SCE_KERNEL_TH_CLEAR_STACK (0x00200000)
46#define SCE_KERNEL_TH_LOW_STACK (0x00400000)
47#define SCE_KERNEL_TH_UNK_800000 (0x00800000)
48#define SCE_KERNEL_TH_USE_VFPU (0x00004000)
49#define SCE_KERNEL_TH_NEVERUSE_FPU (0x00002000)
51#define SCE_KERNEL_TH_DEFAULT_ATTR (0)
53#define SCE_KERNEL_AT_THFIFO (0x00000000)
54#define SCE_KERNEL_AT_THPRI (0x00000100)
56SceUID sceKernelCreateThread(
const char *name, SceKernelThreadEntry entry, s32 initPriority,
57 SceSize stackSize, SceUInt attr, SceKernelThreadOptParam *option);
58int sceKernelDeleteThread(SceUID thid);
59int sceKernelStartThread(SceUID thid, SceSize arglen,
void *argp);
60int sceKernelSuspendThread(SceUID thid);
61int sceKernelExitThread(s32 status);
62s32 sceKernelExitDeleteThread(s32 exitStatus);
63int sceKernelTerminateDeleteThread(SceUID thid);
64int sceKernelDelayThread(SceUInt delay);
65int sceKernelChangeThreadPriority(SceUID thid,
int priority);
66int sceKernelGetThreadCurrentPriority(
void);
67s32 sceKernelGetThreadId(
void);
68int sceKernelIsUserModeThread(
void);
69int sceKernelWaitThreadEnd(SceUID thid, SceUInt *timeout);
70int sceKernelWaitThreadEndCB(SceUID thid, SceUInt *timeout);
71int sceKernelReleaseWaitThread(SceUID thid);
72int sceKernelSuspendAllUserThreads(
void);
74int sceKernelExtendKernelStack(
int type, s32 (*cb)(
void*),
void *arg);
76unsigned int sceKernelGetSystemTimeLow(
void);
79 SCE_USER_LEVEL_MS = 1,
80 SCE_USER_LEVEL_USBWLAN = 2,
81 SCE_USER_LEVEL_APP = 3,
82 SCE_USER_LEVEL_VSH = 4,
84int sceKernelGetUserLevel(
void);
87 SCE_KERNEL_TMID_Thread = 1,
88 SCE_KERNEL_TMID_Semaphore = 2,
89 SCE_KERNEL_TMID_EventFlag = 3,
90 SCE_KERNEL_TMID_Mbox = 4,
91 SCE_KERNEL_TMID_Vpl = 5,
92 SCE_KERNEL_TMID_Fpl = 6,
93 SCE_KERNEL_TMID_Mpipe = 7,
94 SCE_KERNEL_TMID_Callback = 8,
95 SCE_KERNEL_TMID_ThreadEventHandler = 9,
96 SCE_KERNEL_TMID_Alarm = 10,
97 SCE_KERNEL_TMID_VTimer = 11,
98 SCE_KERNEL_TMID_SleepThread = 64,
99 SCE_KERNEL_TMID_DelayThread = 65,
100 SCE_KERNEL_TMID_SuspendThread = 66,
101 SCE_KERNEL_TMID_DormantThread = 67,
102} SceKernelIdListType;
104SceKernelIdListType sceKernelGetThreadmanIdType(SceUID uid);
110} SceKernelMutexOptParam;
114 char name[SCE_UID_NAME_LEN + 1];
123#define SCE_KERNEL_MUTEX_ATTR_TH_FIFO (SCE_KERNEL_AT_THFIFO)
124#define SCE_KERNEL_MUTEX_ATTR_TH_PRI (SCE_KERNEL_AT_THPRI)
125#define SCE_KERNEL_MUTEX_ATTR_RECURSIVE (0x0200)
127s32 sceKernelCreateMutex(
char *name, s32 attr, s32 initCount,
const SceKernelMutexOptParam *pOption);
128s32 sceKernelDeleteMutex(SceUID mutexId);
129s32 sceKernelLockMutex(SceUID mutexId, s32 lockCount, u32 *pTimeout);
130s32 sceKernelLockMutexCB(SceUID mutexId, s32 lockCount, u32 *pTimeout);
131s32 sceKernelTryLockMutex(SceUID mutexId, s32 lockCount);
132s32 sceKernelUnlockMutex(SceUID mutexId, s32 unlockCount);
133s32 sceKernelCancelMutex(SceUID mutexId, s32 newLockCount, s32 *pNumWaitThreads);
134s32 sceKernelReferMutexStatus(SceUID mutexId, SceKernelMutexInfo *pInfo);
140 char name[SCE_UID_NAME_LEN + 1];
143 SceUInt currentPattern;
145} SceKernelEventFlagInfo;
149} SceKernelEventFlagOptParam;
152#define SCE_KERNEL_EA_SINGLE (0x0000)
153#define SCE_KERNEL_EA_MULTI (0x0200)
156#define SCE_KERNEL_EW_AND (0x00)
157#define SCE_KERNEL_EW_OR (0x01)
158#define SCE_KERNEL_EW_CLEAR_ALL (0x10)
159#define SCE_KERNEL_EW_CLEAR_PAT (0x20)
160#define SCE_KERNEL_EW_CLEAR SCE_KERNEL_EW_CLEAR_ALL
162SceUID sceKernelCreateEventFlag(
const char *name,
int attr,
int bits, SceKernelEventFlagOptParam *opt);
163int sceKernelSetEventFlag(SceUID evid, u32 bits);
164int sceKernelClearEventFlag(SceUID evid, u32 bits);
165int sceKernelPollEventFlag(
int evid, u32 bits, u32 wait, u32 *outBits);
166int sceKernelWaitEventFlag(
int evid, u32 bits, u32 wait, u32 *outBits, SceUInt *timeout);
167int sceKernelWaitEventFlagCB(
int evid, u32 bits, u32 wait, u32 *outBits, SceUInt *timeout);
168int sceKernelCancelEventFlag(SceUID evid, SceUInt setpattern, s32 *numWaitThreads);
169int sceKernelDeleteEventFlag(
int evid);
170int sceKernelReferEventFlagStatus(SceUID event, SceKernelEventFlagInfo *status);
173SceUID sceKernelCreateMsgPipe(
const char *name,
int part,
int attr,
void *unk1,
void *opt);
174int sceKernelDeleteMsgPipe(SceUID uid);
175int sceKernelSendMsgPipe(SceUID uid,
void *message,
unsigned int size,
int unk1,
void *unk2,
unsigned int *timeout);
176int sceKernelSendMsgPipeCB(SceUID uid,
void *message,
unsigned int size,
int unk1,
void *unk2,
unsigned int *timeout);
177int sceKernelTrySendMsgPipe(SceUID uid,
void *message,
unsigned int size,
int unk1,
void *unk2);
178int sceKernelReceiveMsgPipe(SceUID uid,
void *message,
unsigned int size,
int unk1,
void *unk2,
unsigned int *timeout);
179int sceKernelReceiveMsgPipeCB(SceUID uid,
void *message,
unsigned int size,
int unk1,
void *unk2,
unsigned int *timeout);
180int sceKernelTryReceiveMsgPipe(SceUID uid,
void *message,
unsigned int size,
int unk1,
void *unk2);
181int sceKernelCancelMsgPipe(SceUID uid,
int *psend,
int *precv);
185 char name[SCE_UID_NAME_LEN + 1];
189 int numSendWaitThreads;
190 int numReceiveWaitThreads;
193int sceKernelReferMsgPipeStatus(SceUID uid, SceKernelMppInfo *info);
199} SceKernelSemaOptParam;
203 char name[SCE_UID_NAME_LEN + 1];
211#define SCE_KERNEL_SA_THFIFO (0x0000)
212#define SCE_KERNEL_SA_THPRI (0x0100)
214SceUID sceKernelCreateSema(
const char *name, SceUInt attr,
int initVal,
int maxVal, SceKernelSemaOptParam *option);
215int sceKernelDeleteSema(SceUID semaid);
216int sceKernelSignalSema(SceUID semaid,
int signal);
217int sceKernelWaitSema(SceUID semaid,
int signal, SceUInt *timeout);
218int sceKernelWaitSemaCB(SceUID semaid,
int signal, SceUInt *timeout);
219int sceKernelPollSema(SceUID semaid,
int signal);
220int sceKernelReferSemaStatus(SceUID semaid, SceKernelSemaInfo *info);
223int sceKernelAllocateKTLS(
int id,
int (*cb)(
unsigned int *size,
void *arg),
void *arg);
224int sceKernelFreeKTLS(
int id);
225void *sceKernelGetKTLS(
int id);
226void *sceKernelGetThreadKTLS(
int id, SceUID thid,
int mode);
230typedef SceUInt (*SceKernelAlarmHandler)(
void *common);
239 SceKernelSysClock schedule;
240 SceKernelAlarmHandler handler;
244SceUID sceKernelSetAlarm(SceUInt clock, SceKernelAlarmHandler handler,
void *common);
245SceUID sceKernelSetSysClockAlarm(SceKernelSysClock *clock, SceKernelAlarmHandler handler,
void *common);
246int sceKernelCancelAlarm(SceUID alarmid);
247int sceKernelReferAlarmStatus(SceUID alarmid, SceKernelAlarmInfo *info);
250typedef s32 (*SceKernelCallbackFunction)(s32 arg1, s32 arg2,
void *arg);
254 char name[SCE_UID_NAME_LEN + 1];
256 SceKernelCallbackFunction callback;
260} SceKernelCallbackInfo;
262int sceKernelNotifyCallback(SceUID cb,
int arg2);
263int sceKernelReferCallbackStatus(SceUID cb, SceKernelCallbackInfo *status);
269} SceKernelVplOptParam;
272SceUID sceKernelCreateVpl(
const char *name,
int part,
int attr,
unsigned int size, SceKernelVplOptParam *opt);
274int sceKernelDeleteVpl(SceUID uid);
275int sceKernelAllocateVpl(SceUID uid,
unsigned int size,
void **data,
unsigned int *timeout);
276int sceKernelAllocateVplCB(SceUID uid,
unsigned int size,
void **data,
unsigned int *timeout);
277int sceKernelTryAllocateVpl(SceUID uid,
unsigned int size,
void **data);
278int sceKernelFreeVpl(SceUID uid,
void *data);
279int sceKernelCancelVpl(SceUID uid,
int *pnum);
283 char name[SCE_UID_NAME_LEN + 1];
290int sceKernelReferVplStatus(SceUID uid, SceKernelVplInfo *info);
296} SceKernelFplOptParam;
298int sceKernelCreateFpl(
const char *name,
int part,
int attr,
unsigned int size,
unsigned int blocks, SceKernelFplOptParam *opt);
299int sceKernelDeleteFpl(SceUID uid);
300int sceKernelAllocateFpl(SceUID uid,
void **data,
unsigned int *timeout);
301int sceKernelAllocateFplCB(SceUID uid,
void **data,
unsigned int *timeout);
302int sceKernelTryAllocateFpl(SceUID uid,
void **data);
303int sceKernelFreeFpl(SceUID uid,
void *data);
304int sceKernelCancelFpl(SceUID uid,
int *pnum);
308 char name[SCE_UID_NAME_LEN + 1];
316int sceKernelReferFplStatus(SceUID uid, SceKernelFplInfo *info);
318s64 sceKernelGetSystemTimeWide(
void);