blob: f10617a4e644775d8b07b25a83c749837626a0fa (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
|
#ifndef _DOLCESDK_PSP2COMMON_KERNEL_THREADMGR_H_
#define _DOLCESDK_PSP2COMMON_KERNEL_THREADMGR_H_
#include <psp2common/kernel/constants.h>
#include <psp2common/kernel/cpu.h>
#include <psp2common/kernel/types.h>
#if defined(_LANGUAGE_C_PLUS_PLUS)||defined(__cplusplus)||defined(c_plusplus)
extern "C" {
#endif
// Thread priority
#define SCE_KERNEL_HIGHEST_PRIORITY_USER (64)
#define SCE_KERNEL_LOWEST_PRIORITY_USER (191)
#define SCE_KERNEL_INDIVIDUAL_QUEUE_HIGHEST_PRIORITY (64)
#define SCE_KERNEL_INDIVIDUAL_QUEUE_LOWEST_PRIORITY (127)
#define SCE_KERNEL_COMMON_QUEUE_HIGHEST_PRIORITY (128)
#define SCE_KERNEL_COMMON_QUEUE_LOWEST_PRIORITY (191)
#if defined(_LANGUAGE_C_PLUS_PLUS)||defined(__cplusplus)||defined(c_plusplus)
#define SCE_KERNEL_DEFAULT_PRIORITY (static_cast<SceInt32>(0x10000100))
#else
#define SCE_KERNEL_DEFAULT_PRIORITY ((SceInt32)0x10000100)
#endif
#define SCE_KERNEL_DEFAULT_PRIORITY_USER SCE_KERNEL_DEFAULT_PRIORITY
#define SCE_KERNEL_CURRENT_THREAD_PRIORITY (0)
// Thread stack size
#define SCE_KERNEL_THREAD_STACK_SIZE_MAX SCE_KERNEL_32MiB
#define SCE_KERNEL_THREAD_STACK_SIZE_MIN SCE_KERNEL_4KiB
#define SCE_KERNEL_THREAD_STACK_SIZE_DEFAULT SCE_KERNEL_THREAD_STACK_SIZE_MIN
#define SCE_KERNEL_THREAD_STACK_SIZE_DEFAULT_USER_MAIN SCE_KERNEL_256KiB
#define SCE_KERNEL_STACK_SIZE_MAX SCE_KERNEL_1MiB
#define SCE_KERNEL_STACK_SIZE_MIN SCE_KERNEL_4KiB
#define SCE_KERNEL_STACK_SIZE_DEFAULT SCE_KERNEL_STACK_SIZE_MIN
#define SCE_KERNEL_STACK_SIZE_DEFAULT_USER_MAIN (0x00040000U)
// Thread status
#define SCE_KERNEL_THREAD_STATUS_RUNNING (0x00000001U)
#define SCE_KERNEL_THREAD_STATUS_READY (0x00000002U)
#define SCE_KERNEL_THREAD_STATUS_STANDBY (0x00000004U)
#define SCE_KERNEL_THREAD_STATUS_WAITING (0x00000008U)
#define SCE_KERNEL_THREAD_STATUS_DORMANT (0x00000010U)
#define SCE_KERNEL_THREAD_STATUS_DELETED (0x00000020U)
#define SCE_KERNEL_THREAD_STATUS_DEAD (0x00000040U)
#define SCE_KERNEL_THREAD_STATUS_STAGNANT (0x00000080U)
#define SCE_KERNEL_THREAD_STATUS_SUSPENDED (0x00000100U)
#define SCE_KERNEL_THREAD_STATUS_MASK (0x0000ffffU)
// Thread wait type
#define SCE_KERNEL_WAITTYPE_DELAY (0x00000001U)
#define SCE_KERNEL_WAITTYPE_WAITTHEND (0x00000002U)
#define SCE_KERNEL_WAITTYPE_SIGNAL (0x00000004U)
#define SCE_KERNEL_WAITTYPE_WAITTHSUSPEND (0x00000008U)
#define SCE_KERNEL_WAITTYPE_EVENTFLAG (0x00000010U)
#define SCE_KERNEL_WAITTYPE_SEMAPHORE (0x00000020U)
#define SCE_KERNEL_WAITTYPE_MUTEX (0x00000040U)
#define SCE_KERNEL_WAITTYPE_RW_LOCK (0x00000080U)
#define SCE_KERNEL_WAITTYPE_COND_SIGNAL (0x00000100U)
#define SCE_KERNEL_WAITTYPE_COND_MUTEX (0x00000200U)
#define SCE_KERNEL_WAITTYPE_FAST_MUTEX (0x00001000U)
#define SCE_KERNEL_WAITTYPE_FAST_MUTEX_SPIN (0x00002000U)
#define SCE_KERNEL_WAITTYPE_EVENT (0x00010000U)
#define SCE_KERNEL_WAITTYPE_MP_EVENTS (0x00020000U)
#define SCE_KERNEL_WAITTYPE_MSG_PIPE (0x00040000U)
#define SCE_KERNEL_WAITTYPE_LW_MUTEX (0x00100000U)
#define SCE_KERNEL_WAITTYPE_LW_COND_SIGNAL (0x00200000U)
#define SCE_KERNEL_WAITTYPE_LW_COND_LW_MUTEX (0x00400000U)
#define SCE_KERNEL_WAITTYPE_DELAY_CB (0x80000001U)
#define SCE_KERNEL_WAITTYPE_WAITTHEND_CB (0x80000002U)
#define SCE_KERNEL_WAITTYPE_SIGNAL_CB (0x80000004U)
#define SCE_KERNEL_WAITTYPE_WAITTHSUSPEND_CB (0x80000008U)
#define SCE_KERNEL_WAITTYPE_EVENTFLAG_CB (0x80000010U)
#define SCE_KERNEL_WAITTYPE_SEMAPHORE_CB (0x80000020U)
#define SCE_KERNEL_WAITTYPE_MUTEX_CB (0x80000040U)
#define SCE_KERNEL_WAITTYPE_RW_LOCK_CB (0x80000080U)
#define SCE_KERNEL_WAITTYPE_COND_SIGNAL_CB (0x80000100U)
#define SCE_KERNEL_WAITTYPE_COND_MUTEX_CB (0x80000200U)
#define SCE_KERNEL_WAITTYPE_FAST_MUTEX_CB (0x80001000U)
#define SCE_KERNEL_WAITTYPE_FAST_MUTEX_SPIN_CB (0x80002000U)
#define SCE_KERNEL_WAITTYPE_EVENT_CB (0x80010000U)
#define SCE_KERNEL_WAITTYPE_MP_EVENTS_CB (0x80020000U)
#define SCE_KERNEL_WAITTYPE_MSG_PIPE_CB (0x80040000U)
#define SCE_KERNEL_WAITTYPE_LW_MUTEX_CB (0x80100000U)
#define SCE_KERNEL_WAITTYPE_LW_COND_SIGNAL_CB (0x80200000U)
#define SCE_KERNEL_WAITTYPE_LW_COND_LW_MUTEX_CB (0x80400000U)
// Thread UID
#define SCE_KERNEL_THREAD_ID_SELF (0)
#if defined(_LANGUAGE_C_PLUS_PLUS)||defined(__cplusplus)||defined(c_plusplus)
#define SCE_KERNEL_THREAD_ID_USER (static_cast<SceUID>(0xfffffff0))
#else
#define SCE_KERNEL_THREAD_ID_USER ((SceUID)0xfffffff0)
#endif
// Thread synchronisation object UID class
#define SCE_KERNEL_THREADMGR_UID_CLASS_THREAD (1)
#define SCE_KERNEL_THREADMGR_UID_CLASS_SEMA (2)
#define SCE_KERNEL_THREADMGR_UID_CLASS_EVENT_FLAG (3)
#define SCE_KERNEL_THREADMGR_UID_CLASS_MUTEX (4)
#define SCE_KERNEL_THREADMGR_UID_CLASS_COND (5)
#define SCE_KERNEL_THREADMGR_UID_CLASS_TIMER (6)
#define SCE_KERNEL_THREADMGR_UID_CLASS_MSG_PIPE (7)
#define SCE_KERNEL_THREADMGR_UID_CLASS_CALLBACK (8)
#define SCE_KERNEL_THREADMGR_UID_CLASS_THREAD_EVENT (9)
#define SCE_KERNEL_THREADMGR_UID_CLASS_LW_MUTEX (10)
#define SCE_KERNEL_THREADMGR_UID_CLASS_LW_COND (11)
#define SCE_KERNEL_THREADMGR_UID_CLASS_RW_LOCK (12)
#define SCE_KERNEL_THREADMGR_UID_CLASS_SIMPLE_EVENT (13)
// Thread CPU affinity
#define SCE_KERNEL_THREAD_CPU_AFFINITY_MASK_DEFAULT (0)
// Thread function type
typedef SceInt32 (*SceKernelThreadEntry)(SceSize argSize, void *pArgBlock);
// Thread VFP exception mask
#define SCE_KERNEL_VFP_EXCEPTION_MASK_QCE (0x08000000U)
#define SCE_KERNEL_VFP_EXCEPTION_MASK_IDE (0x00000080U)
#define SCE_KERNEL_VFP_EXCEPTION_MASK_IXE (0x00000010U)
#define SCE_KERNEL_VFP_EXCEPTION_MASK_UFE (0x00000008U)
#define SCE_KERNEL_VFP_EXCEPTION_MASK_OFE (0x00000004U)
#define SCE_KERNEL_VFP_EXCEPTION_MASK_DZE (0x00000002U)
#define SCE_KERNEL_VFP_EXCEPTION_MASK_IOE (0x00000001U)
#define SCE_KERNEL_VFP_EXCEPTION_MASK_ALL \
(SCE_KERNEL_VFP_EXCEPTION_MASK_QCE | SCE_KERNEL_VFP_EXCEPTION_MASK_IDE | \
SCE_KERNEL_VFP_EXCEPTION_MASK_IXE | SCE_KERNEL_VFP_EXCEPTION_MASK_UFE | \
SCE_KERNEL_VFP_EXCEPTION_MASK_OFE | SCE_KERNEL_VFP_EXCEPTION_MASK_DZE | \
SCE_KERNEL_VFP_EXCEPTION_MASK_IOE)
// Thread synchronisation object attribute
#define SCE_KERNEL_ATTR_SINGLE (0x00000000U)
#define SCE_KERNEL_ATTR_MULTI (0x00001000U)
#define SCE_KERNEL_ATTR_TH_FIFO (0x00000000U)
#define SCE_KERNEL_ATTR_TH_PRIO (0x00002000U)
#define SCE_KERNEL_ATTR_MS_FIFO (0x00000000U) // Unused
#define SCE_KERNEL_ATTR_MS_PRIO (0x00000000U) // Unused
#define SCE_KERNEL_ATTR_OPENABLE (0x00000080U)
#define SCE_KERNEL_OPEN_LIMIT_MAX (127)
// Thread event
#define SCE_KERNEL_THREAD_EVENT_TYPE_START (0x04)
#define SCE_KERNEL_THREAD_EVENT_TYPE_EXIT (0x08)
#define SCE_KERNEL_THREAD_EVENT_TYPE_ALL \
(SCE_KERNEL_THREAD_EVENT_TYPE_START | SCE_KERNEL_THREAD_EVENT_TYPE_EXIT)
#define SCE_KERNEL_EVENT_ATTR_MANUAL_RESET (0x00000000U)
#define SCE_KERNEL_EVENT_ATTR_AUTO_RESET (0x00000100U)
#define SCE_KERNEL_ATTR_NOTIFY_CB_ALL (0x00000000U)
#define SCE_KERNEL_ATTR_NOTIFY_CB_WAKEUP_ONLY (0x00000800U)
#define SCE_KERNEL_EVENT_IN (0x00000001U)
#define SCE_KERNEL_EVENT_OUT (0x00000002U)
#define SCE_KERNEL_EVENT_CREATE (0x00000004U)
#define SCE_KERNEL_EVENT_DELETE (0x00000008U)
#define SCE_KERNEL_EVENT_ERROR (0x00000010U)
#define SCE_KERNEL_EVENT_OPEN (0x00000100U)
#define SCE_KERNEL_EVENT_CLOSE (0x00000200U)
#define SCE_KERNEL_EVENT_TIMER (0x00008000U)
#define SCE_KERNEL_EVENT_DATA_EXIST (0x00010000U)
#define SCE_KERNEL_EVENT_USER_DEFINED_MASK (0xff000000U)
#define SCE_KERNEL_EVENT_WAIT_MODE_OR (0x00000001U)
#define SCE_KERNEL_EVENT_WAIT_MODE_AND (0x00000002U)
// Thread timer
#define SCE_KERNEL_TIMER_TYPE_SET_EVENT (0)
#define SCE_KERNEL_TIMER_TYPE_PULSE_EVENT (1)
// Thread message pipe
#define SCE_KERNEL_MSG_PIPE_ATTR_TH_PRIO_S (0x00000001U)
#define SCE_KERNEL_MSG_PIPE_ATTR_TH_PRIO_R (0x00000002U)
#define SCE_KERNEL_MSG_PIPE_ATTR_TH_PRIO \
(SCE_KERNEL_MSG_PIPE_ATTR_TH_PRIO_S | SCE_KERNEL_MSG_PIPE_ATTR_TH_PRIO_R)
#define SCE_KERNEL_MSG_PIPE_ATTR_TH_FIFO_S (0x00000004U)
#define SCE_KERNEL_MSG_PIPE_ATTR_TH_FIFO_R (0x00000008U)
#define SCE_KERNEL_MSG_PIPE_ATTR_TH_FIFO \
(SCE_KERNEL_MSG_PIPE_ATTR_TH_FIFO_S | SCE_KERNEL_MSG_PIPE_ATTR_TH_FIFO_R)
#define SCE_KERNEL_MSG_PIPE_MODE_ASAP (0x00000000U)
#define SCE_KERNEL_MSG_PIPE_MODE_FULL (0x00000001U)
#define SCE_KERNEL_MSG_PIPE_MODE_WAIT (0x00000000U)
#define SCE_KERNEL_MSG_PIPE_MODE_DONT_WAIT (0x00000010U)
#define SCE_KERNEL_MSG_PIPE_MODE_DONT_REMOVE (0x00000100U)
#define SCE_KERNEL_MSG_PIPE_TYPE_USER_MAIN (64)
#define SCE_KERNEL_MSG_PIPE_TYPE_USER_CDRAM (66)
#define SCE_KERNEL_MSG_PIPE_OPT_ATTR_OPEN_LIMITATION (0x00000100U)
// Thread event flag
#define SCE_KERNEL_EVF_ATTR_TH_FIFO SCE_KERNEL_ATTR_TH_FIFO
#define SCE_KERNEL_EVF_ATTR_TH_PRIO SCE_KERNEL_ATTR_TH_PRIO
#define SCE_KERNEL_EVF_ATTR_SINGLE SCE_KERNEL_ATTR_SINGLE
#define SCE_KERNEL_EVF_ATTR_MULTI SCE_KERNEL_ATTR_MULTI
#define SCE_KERNEL_EVF_WAITMODE_AND (0x00000000U)
#define SCE_KERNEL_EVF_WAITMODE_OR (0x00000001U)
#define SCE_KERNEL_EVF_WAITMODE_CLEAR_ALL (0x00000002U)
#define SCE_KERNEL_EVF_WAITMODE_CLEAR_PAT (0x00000004U)
// Thread semaphore
#define SCE_KERNEL_SEMA_ATTR_TH_FIFO SCE_KERNEL_ATTR_TH_FIFO
#define SCE_KERNEL_SEMA_ATTR_TH_PRIO SCE_KERNEL_ATTR_TH_PRIO
// Thread mutex
#define SCE_KERNEL_MUTEX_ATTR_TH_FIFO SCE_KERNEL_ATTR_TH_FIFO
#define SCE_KERNEL_MUTEX_ATTR_TH_PRIO SCE_KERNEL_ATTR_TH_PRIO
#define SCE_KERNEL_MUTEX_ATTR_RECURSIVE (0x00000002U)
#define SCE_KERNEL_MUTEX_ATTR_CEILING (0x00000004U)
// Thread condition
#define SCE_KERNEL_COND_ATTR_TH_FIFO SCE_KERNEL_ATTR_TH_FIFO
#define SCE_KERNEL_COND_ATTR_TH_PRIO SCE_KERNEL_ATTR_TH_PRIO
// Thread lightweight mutex
#define SCE_KERNEL_LW_MUTEX_ATTR_TH_FIFO SCE_KERNEL_ATTR_TH_FIFO
#define SCE_KERNEL_LW_MUTEX_ATTR_TH_PRIO SCE_KERNEL_ATTR_TH_PRIO
#define SCE_KERNEL_LW_MUTEX_ATTR_RECURSIVE (0x00000002U)
// Thread lightweight condition
#define SCE_KERNEL_LW_COND_ATTR_TH_FIFO SCE_KERNEL_ATTR_TH_FIFO
#define SCE_KERNEL_LW_COND_ATTR_TH_PRIO SCE_KERNEL_ATTR_TH_PRIO
// Thread reader/writer lock
#define SCE_KERNEL_RW_LOCK_ATTR_TH_FIFO SCE_KERNEL_ATTR_TH_FIFO
#define SCE_KERNEL_RW_LOCK_ATTR_TH_PRIO SCE_KERNEL_ATTR_TH_PRIO
#define SCE_KERNEL_RW_LOCK_ATTR_RECURSIVE (0x00000002U)
#define SCE_KERNEL_RW_LOCK_ATTR_CEILING (0x00000004U)
#define SCE_KERNEL_RW_LOCK_CANCEL_WITH_WRITE_LOCK (1)
// Types
typedef struct _SceKernelThreadOptParam {
/** Size of the ::SceKernelThreadOptParam structure. */
SceSize size;
SceUInt32 attr;
SceKernelMemBlockType memType1;
SceKernelMemBlockType memType2;
SceInt32 unk0x10;
SceInt32 unk0x14;
SceInt32 unk0x1C;
} SceKernelThreadOptParam;
#if defined(_LANGUAGE_C_PLUS_PLUS)||defined(__cplusplus)||defined(c_plusplus)
}
#endif
#endif
|