X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Kernel%2Finclude%2Fthreads.h;h=9ff7b629c72dda39bce063054bd5c78712031932;hb=7eb6db3530ddbc4443e92ffc0e1e9d5a50acee47;hp=0af38a510dfbed1f54be9c31e5456d34d44da01d;hpb=c353842438969359632b8580e903c8faaa525bb2;p=tpg%2Facess2.git diff --git a/Kernel/include/threads.h b/Kernel/include/threads.h index 0af38a51..9ff7b629 100644 --- a/Kernel/include/threads.h +++ b/Kernel/include/threads.h @@ -1,83 +1,12 @@ /* + * Acess2 Kernel */ #ifndef _THREADS_H_ #define _THREADS_H_ #include #include -#include - -/** - * \brief IPC Message - */ -typedef struct sMessage -{ - struct sMessage *Next; //!< Next message in thread's inbox - tTID Source; //!< Source thread ID - Uint Length; //!< Length of message data in bytes - Uint8 Data[]; //!< Message data -} tMsg; - -/** - * \brief Core threading structure - * - */ -typedef struct sThread -{ - // --- threads.c's - /** - * \brief Next thread in current list - * \note Required to be first for linked list hacks to work - */ - struct sThread *Next; - struct sThread *GlobalNext; //!< Next thread in global list - struct sThread *GlobalPrev; //!< Previous thread in global list - tShortSpinlock IsLocked; //!< Thread's spinlock - volatile int Status; //!< Thread Status - int RetStatus; //!< Return Status - - Uint TID; //!< Thread ID - Uint TGID; //!< Thread Group (Process) - struct sThread *Parent; //!< Parent Thread - Uint UID, GID; //!< User and Group - char *ThreadName; //!< Name of thread - - // --- arch/proc.c's responsibility - //! Kernel Stack Base - tVAddr KernelStack; - - //! Memory Manager State - tMemoryState MemState; - - //! State on task switch - tTaskState SavedState; - - // --- threads.c's - int CurFaultNum; //!< Current fault number, 0: none - tVAddr FaultHandler; //!< Fault Handler - - tMsg * volatile Messages; //!< Message Queue - tMsg *LastMessage; //!< Last Message (speeds up insertion) - - int Quantum, Remaining; //!< Quantum Size and remaining timesteps - int Priority; //!< Priority - 0: Realtime, higher means less time - - Uint Config[NUM_CFG_ENTRIES]; //!< Per-process configuration - - volatile int CurCPU; -} tThread; - - -enum { - THREAD_STAT_NULL, // Invalid process - THREAD_STAT_ACTIVE, // Running and schedulable process - THREAD_STAT_SLEEPING, // Message Sleep - THREAD_STAT_OFFSLEEP, // Mutex Sleep (or waiting on a thread) - THREAD_STAT_WAITING, // ??? - THREAD_STAT_PREINIT, // Being created - THREAD_STAT_ZOMBIE, // Died, just not removed - THREAD_STAT_DEAD // Why do we care about these??? -}; +//#include enum eFaultNumbers { @@ -91,15 +20,21 @@ enum eFaultNumbers #define GETMSG_IGNORE ((void*)-1) -// === GLOBALS === -extern BOOL gaThreads_NoTaskSwitch[MAX_CPUS]; +typedef struct sThread tThread; // === FUNCTIONS === -extern tThread *Proc_GetCurThread(void); -extern tThread *Threads_GetThread(Uint TID); -extern void Threads_SetPriority(tThread *Thread, int Pri); -extern int Threads_Wake(tThread *Thread); -extern void Threads_AddActive(tThread *Thread); -extern tThread *Threads_GetNextToRun(int CPU, tThread *Last); +extern void Threads_SetFaultHandler(Uint Handler); + +extern int Threads_SetUID(tUID ID); +extern int Threads_SetGID(tUID ID); +extern tTID Threads_WaitTID(int TID, int *Status); + + +extern int *Threads_GetMaxFD(void); +extern char **Threads_GetCWD(void); +extern char **Threads_GetChroot(void); + +extern int Proc_SendMessage(Uint Dest, int Length, void *Data); +extern int Proc_GetMessage(Uint *Source, void *Buffer); #endif