#ifndef _DOLCESDK_PSP2COMMON_KERNEL_THREADMGR_H_ #define _DOLCESDK_PSP2COMMON_KERNEL_THREADMGR_H_ #include #include #include #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(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(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) #define SCE_KERNEL_ATTR_MS_PRIO (0x00000000U) #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) #if defined(_LANGUAGE_C_PLUS_PLUS)||defined(__cplusplus)||defined(c_plusplus) } #endif #endif