X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Kernel%2Finclude%2Fthreads.h;h=d138cf01684eccd45f843b89937b359d1a5c15bc;hb=881a49e0164c582d24db527e474f587a8b5e0c32;hp=b55fe0e066a8498afadcc9c8a263d3c5be9ea13d;hpb=775bf8013abe9fe4ef3d4883ea2e43bba2a84da1;p=tpg%2Facess2.git diff --git a/Kernel/include/threads.h b/Kernel/include/threads.h index b55fe0e0..d138cf01 100644 --- a/Kernel/include/threads.h +++ b/Kernel/include/threads.h @@ -5,67 +5,28 @@ #include #include +#include -typedef struct sMessage +enum eFaultNumbers { - struct sMessage *Next; - Uint Source; - Uint Length; - Uint8 Data[]; -} tMsg; // sizeof = 12+ + FAULT_MISC, + FAULT_PAGE, + FAULT_ACCESS, + FAULT_DIV0, + FAULT_OPCODE, + FAULT_FLOAT +}; -typedef struct sThread -{ - // --- threads.c's - struct sThread *Next; //!< Next thread in list - tSpinlock IsLocked; //!< Thread's spinlock - volatile int Status; //!< Thread Status - int RetStatus; //!< Return Status - - Uint TID; //!< Thread ID - Uint TGID; //!< Thread Group (Process) - Uint PTID; //!< Parent Thread ID - 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 CurSignal; //!< Signal currently being handled (0 for none) - tVAddr SignalHandlers[NSIG]; //!< Signal Handler List - tTaskState SignalState; //!< Saved state for signal handler - - tMsg * volatile Messages; //!< Message Queue - tMsg *LastMessage; //!< Last Message (speeds up insertion) - - int Quantum, Remaining; //!< Quantum Size and remaining timesteps - int NumTickets; //!< Priority - Chance of gaining CPU - - Uint Config[NUM_CFG_ENTRIES]; //!< Per-process configuration -} tThread; +#define GETMSG_IGNORE ((void*)-1) +// === FUNCTIONS === +extern void Threads_SetFaultHandler(Uint Handler); -enum { - THREAD_STAT_NULL, - THREAD_STAT_ACTIVE, - THREAD_STAT_SLEEPING, - THREAD_STAT_WAITING, - THREAD_STAT_ZOMBIE, - THREAD_STAT_DEAD -}; +extern int Threads_SetUID(Uint *Errno, tUID ID); +extern int Threads_SetGID(Uint *Errno, tUID ID); +extern int Threads_WaitTID(int TID, int *Status); -// === FUNCTIONS === -extern tThread *Proc_GetCurThread(); -extern tThread *Threads_GetThread(Uint TID); -extern void Threads_Wake(tThread *Thread); -extern void Threads_AddActive(tThread *Thread); +extern int Proc_SendMessage(Uint *Err, Uint Dest, int Length, void *Data); +extern int Proc_GetMessage(Uint *Err, Uint *Source, void *Buffer); #endif