Merge pull request #438 from s4Ys369/revert-434-patch-1
[sm64pc.git] / include / PR / os_thread.h
blob76e528b5064b55a17106c9c08831ba3fac1e343b
1 #ifndef _ULTRA64_THREAD_H_
2 #define _ULTRA64_THREAD_H_
3 #include "ultratypes.h"
4 /* Recommended priorities for system threads */
5 #define OS_PRIORITY_MAX 255
6 #define OS_PRIORITY_VIMGR 254
7 #define OS_PRIORITY_RMON 250
8 #define OS_PRIORITY_RMONSPIN 200
9 #define OS_PRIORITY_PIMGR 150
10 #define OS_PRIORITY_SIMGR 140
11 #define OS_PRIORITY_APPMAX 127
12 #define OS_PRIORITY_IDLE 0
14 #define OS_STATE_STOPPED 1
15 #define OS_STATE_RUNNABLE 2
16 #define OS_STATE_RUNNING 4
17 #define OS_STATE_WAITING 8
19 /* Types */
21 typedef s32 OSPri;
22 typedef s32 OSId;
24 typedef union
26 struct {f32 f_odd; f32 f_even;} f;
27 } __OSfp;
29 typedef struct
31 /* registers */
32 /*0x20*/ u64 at, v0, v1, a0, a1, a2, a3;
33 /*0x58*/ u64 t0, t1, t2, t3, t4, t5, t6, t7;
34 /*0x98*/ u64 s0, s1, s2, s3, s4, s5, s6, s7;
35 /*0xD8*/ u64 t8, t9, gp, sp, s8, ra;
36 /*0x108*/ u64 lo, hi;
37 /*0x118*/ u32 sr, pc, cause, badvaddr, rcp;
38 /*0x12C*/ u32 fpcsr;
39 __OSfp fp0, fp2, fp4, fp6, fp8, fp10, fp12, fp14;
40 __OSfp fp16, fp18, fp20, fp22, fp24, fp26, fp28, fp30;
41 } __OSThreadContext;
43 typedef struct
45 u32 flag;
46 u32 count;
47 u64 time;
48 } __OSThreadprofile_s;
50 typedef struct OSThread_s
52 /*0x00*/ struct OSThread_s *next;
53 /*0x04*/ OSPri priority;
54 /*0x08*/ struct OSThread_s **queue;
55 /*0x0C*/ struct OSThread_s *tlnext;
56 /*0x10*/ u16 state;
57 /*0x12*/ u16 flags;
58 /*0x14*/ OSId id;
59 /*0x18*/ int fp;
60 /*0x1C*/ __OSThreadprofile_s *thprof;
61 /*0x20*/ __OSThreadContext context;
62 } OSThread;
65 /* Functions */
67 void osCreateThread(OSThread *thread, OSId id, void (*entry)(void *),
68 void *arg, void *sp, OSPri pri);
69 OSId osGetThreadId(OSThread *thread);
70 OSPri osGetThreadPri(OSThread *thread);
71 void osSetThreadPri(OSThread *thread, OSPri pri);
72 void osStartThread(OSThread *thread);
73 void osStopThread(OSThread *thread);
75 #endif