summaryrefslogtreecommitdiff
path: root/include/common/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'include/common/kernel')
-rw-r--r--include/common/kernel/cpu.h19
-rw-r--r--include/common/kernel/iofilemgr.h74
-rw-r--r--include/common/kernel/iofilemgr/async.h21
-rw-r--r--include/common/kernel/iofilemgr/dirent.h23
-rw-r--r--include/common/kernel/iofilemgr/stat.h48
-rw-r--r--include/common/kernel/threadmgr.h286
6 files changed, 471 insertions, 0 deletions
diff --git a/include/common/kernel/cpu.h b/include/common/kernel/cpu.h
new file mode 100644
index 0000000..4b42321
--- /dev/null
+++ b/include/common/kernel/cpu.h
@@ -0,0 +1,19 @@
+#ifndef _DOLCESDK_PSP2COMMON_KERNEL_CPU_H_
+#define _DOLCESDK_PSP2COMMON_KERNEL_CPU_H_
+
+#define SCE_KERNEL_MAX_CPU 4
+#define SCE_KERNEL_CPU_MASK_SHIFT 16
+#define SCE_KERNEL_CPU_MASK_USER_0 (0x01 << SCE_KERNEL_CPU_MASK_SHIFT)
+#define SCE_KERNEL_CPU_MASK_USER_1 (0x02 << SCE_KERNEL_CPU_MASK_SHIFT)
+#define SCE_KERNEL_CPU_MASK_USER_2 (0x04 << SCE_KERNEL_CPU_MASK_SHIFT)
+#define SCE_KERNEL_CPU_MASK_USER_3 (0x08 << SCE_KERNEL_CPU_MASK_SHIFT)
+
+#define SCE_KERNEL_CPU_MASK_USER_ALL \
+ (SCE_KERNEL_CPU_MASK_USER_0 | SCE_KERNEL_CPU_MASK_USER_1 \
+ | SCE_KERNEL_CPU_MASK_USER_2)
+
+#define SCE_KERNEL_CPU_MASK_USER_QUAD \
+ (SCE_KERNEL_CPU_MASK_USER_0 | SCE_KERNEL_CPU_MASK_USER_1 \
+ | SCE_KERNEL_CPU_MASK_USER_2 | SCE_KERNEL_CPU_MASK_USER_3)
+
+#endif // _DOLCESDK_PSP2COMMON_KERNEL_CPU_H_
diff --git a/include/common/kernel/iofilemgr.h b/include/common/kernel/iofilemgr.h
new file mode 100644
index 0000000..ed03d3b
--- /dev/null
+++ b/include/common/kernel/iofilemgr.h
@@ -0,0 +1,74 @@
+#ifndef _DOLCESDK_PSP2COMMON_KERNEL_IOFILEMGR_H_
+#define _DOLCESDK_PSP2COMMON_KERNEL_IOFILEMGR_H_
+
+#include <psp2common/kernel/types.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* device types */
+#define SCE_D_TYPE_NULL 0x0 /* dummy device */
+#define SCE_D_TYPE_CHAR 0x1 /* character device */
+#define SCE_D_TYPE_BLOCK 0x4 /* block device */
+#define SCE_D_TYPE_FS 0x10 /* file system */
+#define SCE_D_TYPE_ALIAS 0x20 /* alias name (device alias) */
+#define SCE_D_TYPE_MOUNTPT 0x40 /* alias name (mount point) */
+
+/* flags */
+#define SCE_FREAD (0x0001) /* readable */
+#define SCE_FWRITE (0x0002) /* writable */
+#define SCE_FNBLOCK (0x0004) /* Reserved: non-blocking reads */
+#define SCE_FDIRO (0x0008) /* internal use for dopen */
+#define SCE_FRLOCK (0x0010) /* Reserved: read locked (non-shared) */
+#define SCE_FWLOCK (0x0020) /* Reserved: write locked (non-shared) */
+#define SCE_FAPPEND (0x0100) /* append on each write */
+#define SCE_FCREAT (0x0200) /* create if nonexistant */
+#define SCE_FTRUNC (0x0400) /* truncate to zero length */
+#define SCE_EXCL (0x0800) /* exclusive create */
+#define SCE_FSCAN (0x1000) /* Reserved: scan type */
+#define SCE_FRCOM (0x2000) /* Reserved: remote command entry */
+#define SCE_FNBUF (0x4000) /* no device buffer */
+#define SCE_FASYNC (0x8000) /* Reserved: asyncronous i/o */
+#define SCE_FFDEXCL (0x01000000) /* exclusive access */
+#define SCE_FGAMEDATA (0x40000000)
+
+/* Flag for sceIoOpen() */
+#define SCE_O_RDONLY (SCE_FREAD)
+#define SCE_O_WRONLY (SCE_FWRITE)
+#define SCE_O_RDWR (SCE_FREAD|SCE_FWRITE)
+#define SCE_O_NBLOCK (SCE_FNBLOCK) /* Reserved: Non-Blocking I/O */
+#define SCE_O_APPEND (SCE_FAPPEND) /* append (writes guaranteed at the end) */
+#define SCE_O_CREAT (SCE_FCREAT) /* open with file create */
+#define SCE_O_TRUNC (SCE_FTRUNC) /* open with truncation */
+#define SCE_O_EXCL (SCE_EXCL) /* exclusive create */
+#define SCE_O_NOBUF (SCE_FNBUF) /* no device buffer */
+#define SCE_O_NOWAIT (SCE_FASYNC) /* Reserved: asyncronous i/o */
+#define SCE_O_FDEXCL (SCE_FFDEXCL) /* exclusive access */
+#define SCE_O_PWLOCK (SCE_FPWLOCK) /* power control lock */
+#define SCE_O_FGAMEDATA (SCE_FGAMEDATA)
+
+/* Flag for sceIoLseek() */
+#define SCE_SEEK_SET (0)
+#define SCE_SEEK_CUR (1)
+#define SCE_SEEK_END (2)
+
+/* Path */
+#define SCE_IO_MAX_PATH_BUFFER_SIZE (1024) /* maximum path buffer size */
+#define SCE_IO_MAX_PATH_LENGTH (200) /* maximum path length */
+
+/**
+ * May be used with sceIoDevctl()
+ */
+typedef struct SceIoDevInfo {
+ SceOff max_size;
+ SceOff free_size;
+ SceSize cluster_size;
+ void *unk;
+} SceIoDevInfo;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _DOLCESDK_PSP2COMMON_KERNEL_IOFILEMGR_H_ */
diff --git a/include/common/kernel/iofilemgr/async.h b/include/common/kernel/iofilemgr/async.h
new file mode 100644
index 0000000..b0c0feb
--- /dev/null
+++ b/include/common/kernel/iofilemgr/async.h
@@ -0,0 +1,21 @@
+#ifndef _DOLCESDK_PSP2COMMON_KERNEL_IOFILEMGR_ASYNC_H_
+#define _DOLCESDK_PSP2COMMON_KERNEL_IOFILEMGR_ASYNC_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct SceIoAsyncParam {
+ int result; // [out] result of the IO operation (e.g. UID, read/wrote size, error code)
+ int unk_04; // [out]
+ int unk_08; // [in]
+ int unk_0C; // [out]
+ int unk_10; // [out]
+ int unk_14; // [out]
+} SceIoAsyncParam;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _DOLCESDK_PSP2COMMON_KERNEL_IOFILEMGR_ASYNC_H_ */
diff --git a/include/common/kernel/iofilemgr/dirent.h b/include/common/kernel/iofilemgr/dirent.h
new file mode 100644
index 0000000..1e28c22
--- /dev/null
+++ b/include/common/kernel/iofilemgr/dirent.h
@@ -0,0 +1,23 @@
+#ifndef _DOLCESDK_PSP2COMMON_KERNEL_IOFILEMGR_DIRENT_H_
+#define _DOLCESDK_PSP2COMMON_KERNEL_IOFILEMGR_DIRENT_H_
+
+#include <psp2common/kernel/types.h>
+#include <psp2common/kernel/iofilemgr/stat.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** Describes a single directory entry */
+typedef struct SceIoDirent {
+ SceIoStat d_stat; //!< File status
+ char d_name[256]; //!< File name (not file path)
+ void *d_private; //!< Reserved (set to 0)
+ int dummy; //!< Padding
+} SceIoDirent;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _DOLCESDK_PSP2COMMON_KERNEL_IOFILEMGR_DIRENT_H_ */
diff --git a/include/common/kernel/iofilemgr/stat.h b/include/common/kernel/iofilemgr/stat.h
new file mode 100644
index 0000000..4afea74
--- /dev/null
+++ b/include/common/kernel/iofilemgr/stat.h
@@ -0,0 +1,48 @@
+#ifndef _DOLCESDK_PSP2COMMON_KERNEL_IOFILEMGR_STAT_H_
+#define _DOLCESDK_PSP2COMMON_KERNEL_IOFILEMGR_STAT_H_
+
+#include <psp2common/kernel/types.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Filetypes and Protection bits */
+#define SCE_STM_FMT (0xf << 12)
+#define SCE_STM_FREG (0x2 << 12) /* regular file */
+#define SCE_STM_FDIR (0x1 << 12) /* directory */
+#define SCE_STM_ISREG(m) (((m) & SCE_STM_FMT) == SCE_STM_FREG)
+#define SCE_STM_ISDIR(m) (((m) & SCE_STM_FMT) == SCE_STM_FDIR)
+
+/* for SceMode */
+#define SCE_STM_RWU 00600
+#define SCE_STM_RU 00400
+#define SCE_STM_RWO 00006
+#define SCE_STM_RO 00004
+
+/* for chstat cbit */
+#define SCE_CST_MODE 0x0001
+#define SCE_CST_ATTR 0x0000 /* not supported */
+#define SCE_CST_SIZE 0x0004
+#define SCE_CST_CT 0x0008
+#define SCE_CST_AT 0x0010
+#define SCE_CST_MT 0x0020
+
+/**
+ * See sceIoChstat(), sceIoGetstat(), sceIoChstatByFd(), sceIoGetstatByFd()
+ */
+typedef struct SceIoStat {
+ SceIoMode st_mode; //!< File access mode
+ unsigned int st_attr; //!< Device-specific attribute
+ SceOff st_size; //!< File size
+ SceDateTime st_ctime; //!< File creation time
+ SceDateTime st_atime; //!< File last accessed time
+ SceDateTime st_mtime; //!< File last modified time
+ unsigned int st_private[6]; //!< Reserved
+} SceIoStat;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _DOLCESDK_PSP2COMMON_KERNEL_IOFILEMGR_STAT_H_ */
diff --git a/include/common/kernel/threadmgr.h b/include/common/kernel/threadmgr.h
new file mode 100644
index 0000000..f8b2924
--- /dev/null
+++ b/include/common/kernel/threadmgr.h
@@ -0,0 +1,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