2 * Internal Threading header
3 * - Only for use by stuff that needs access to the thread type.
5 #ifndef _THREADS_INT_H_
6 #define _THREADS_INT_H_
14 typedef struct sMessage
16 struct sMessage *Next; //!< Next message in thread's inbox
17 tTID Source; //!< Source thread ID
18 Uint Length; //!< Length of message data in bytes
19 Uint8 Data[]; //!< Message data
23 * \brief Core threading structure
26 typedef struct sThread
30 * \brief Next thread in current list
31 * \note Required to be first for linked list hacks to work
34 struct sThread *GlobalNext; //!< Next thread in global list
35 struct sThread *GlobalPrev; //!< Previous thread in global list
36 tShortSpinlock IsLocked; //!< Thread's spinlock
37 volatile int Status; //!< Thread Status
38 void *WaitPointer; //!< What (Mutex/Thread/other) is the thread waiting on
39 int RetStatus; //!< Return Status
41 Uint TID; //!< Thread ID
42 Uint TGID; //!< Thread Group (Process)
43 struct sThread *Parent; //!< Parent Thread
44 Uint UID, GID; //!< User and Group
45 char *ThreadName; //!< Name of thread
47 // --- arch/proc.c's responsibility
51 //! Memory Manager State
52 tMemoryState MemState;
54 //! State on task switch
55 tTaskState SavedState;
58 int CurFaultNum; //!< Current fault number, 0: none
59 tVAddr FaultHandler; //!< Fault Handler
61 tMsg * volatile Messages; //!< Message Queue
62 tMsg *LastMessage; //!< Last Message (speeds up insertion)
64 int Quantum, Remaining; //!< Quantum Size and remaining timesteps
65 int Priority; //!< Priority - 0: Realtime, higher means less time
67 Uint Config[NUM_CFG_ENTRIES]; //!< Per-process configuration
76 THREAD_STAT_NULL, // Invalid process
77 THREAD_STAT_ACTIVE, // Running and schedulable process
78 THREAD_STAT_SLEEPING, // Message Sleep
79 THREAD_STAT_MUTEXSLEEP, // Mutex Sleep
80 THREAD_STAT_SEMAPHORESLEEP, // Semaphore Sleep
81 THREAD_STAT_WAITING, // ??? (Waiting for a thread)
82 THREAD_STAT_PREINIT, // Being created
83 THREAD_STAT_ZOMBIE, // Died/Killed, but parent not informed
84 THREAD_STAT_DEAD, // Awaiting burial (free)
85 THREAD_STAT_BURIED // If it's still on the list here, something's wrong
87 static const char * const casTHREAD_STAT[] = {
90 "THREAD_STAT_SLEEPING",
91 "THREAD_STAT_MUTEXSLEEP",
92 "THREAD_STAT_SEMAPHORESLEEP",
93 "THREAD_STAT_WAITING",
94 "THREAD_STAT_PREINIT",
101 extern BOOL gaThreads_NoTaskSwitch[MAX_CPUS];
104 extern tThread *Proc_GetCurThread(void);
106 extern tThread *Threads_GetThread(Uint TID);
107 extern void Threads_SetPriority(tThread *Thread, int Pri);
108 extern int Threads_Wake(tThread *Thread);
109 extern void Threads_Kill(tThread *Thread, int Status);
110 extern void Threads_AddActive(tThread *Thread);
111 extern tThread *Threads_RemActive(void);
112 extern tThread *Threads_GetNextToRun(int CPU, tThread *Last);
114 extern tThread *Threads_CloneTCB(Uint *Err, Uint Flags);
115 extern tThread *Threads_CloneThreadZero(void);