diff options
author | Reiko Asakura | 2020-07-05 20:40:42 -0400 |
---|---|---|
committer | Reiko Asakura | 2020-07-05 20:40:42 -0400 |
commit | f76c812b926e199a60657fd5e2331802b5b0521b (patch) | |
tree | 1c6622a0aa006b51fefc3cd15e6c8d04cfc034d9 /include/common | |
parent | Add CPU constants (diff) | |
download | vds-libraries-f76c812b926e199a60657fd5e2331802b5b0521b.tar.gz |
Add threadmgr constants and prototypes
Diffstat (limited to 'include/common')
-rw-r--r-- | include/common/kernel/threadmgr.h | 273 |
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 |