X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Kernel%2Finclude%2Fthreads.h;h=f23c5b5656540b53d2976ec40a29b442d9022aa4;hb=33bcf4b3feb0e5e4548548bf3d2a50c52ffb6115;hp=b55fe0e066a8498afadcc9c8a263d3c5be9ea13d;hpb=049de1f2533477716a12a708c097b199eaa8fb6c;p=tpg%2Facess2.git diff --git a/Kernel/include/threads.h b/Kernel/include/threads.h index b55fe0e0..f23c5b56 100644 --- a/Kernel/include/threads.h +++ b/Kernel/include/threads.h @@ -5,6 +5,7 @@ #include #include +#include typedef struct sMessage { @@ -17,11 +18,13 @@ typedef struct sMessage typedef struct sThread { // --- threads.c's + // 0 struct sThread *Next; //!< Next thread in list tSpinlock IsLocked; //!< Thread's spinlock volatile int Status; //!< Thread Status int RetStatus; //!< Return Status + // 16 Uint TID; //!< Thread ID Uint TGID; //!< Thread Group (Process) Uint PTID; //!< Parent Thread ID @@ -29,19 +32,22 @@ typedef struct sThread char *ThreadName; //!< Name of thread // --- arch/proc.c's responsibility + // 40 //! Kernel Stack Base tVAddr KernelStack; + // 44 (x86) //! Memory Manager State tMemoryState MemState; + // 48 (x86) //! 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 + // 60 + int CurFaultNum; //!< Current fault number, 0: none + tVAddr FaultHandler; //!< Fault Handler tMsg * volatile Messages; //!< Message Queue tMsg *LastMessage; //!< Last Message (speeds up insertion) @@ -62,6 +68,18 @@ enum { THREAD_STAT_DEAD }; +enum eFaultNumbers +{ + FAULT_MISC, + FAULT_PAGE, + FAULT_ACCESS, + FAULT_DIV0, + FAULT_OPCODE, + FAULT_FLOAT +}; + +#define GETMSG_IGNORE ((void*)-1) + // === FUNCTIONS === extern tThread *Proc_GetCurThread(); extern tThread *Threads_GetThread(Uint TID);