diff options
Diffstat (limited to 'include/common/kernel')
-rw-r--r-- | include/common/kernel/cpu.h | 19 | ||||
-rw-r--r-- | include/common/kernel/iofilemgr.h | 74 | ||||
-rw-r--r-- | include/common/kernel/iofilemgr/async.h | 21 | ||||
-rw-r--r-- | include/common/kernel/iofilemgr/dirent.h | 23 | ||||
-rw-r--r-- | include/common/kernel/iofilemgr/stat.h | 48 | ||||
-rw-r--r-- | include/common/kernel/threadmgr.h | 286 |
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 |