summaryrefslogtreecommitdiff
path: root/include/common/kernel/threadmgr.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--include/common/kernel/threadmgr.h273
1 files changed, 273 insertions, 0 deletions
diff --git a/include/common/kernel/threadmgr.h b/include/common/kernel/threadmgr.h
new file mode 100644
index 0000000..0dc8b31
--- /dev/null
+++ b/include/common/kernel/threadmgr.h
@@ -0,0 +1,273 @@
+#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)
+#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