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
26 struct {f32 f_odd
; f32 f_even
;} f
;
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
;
37 /*0x118*/ u32 sr
, pc
, cause
, badvaddr
, rcp
;
39 __OSfp fp0
, fp2
, fp4
, fp6
, fp8
, fp10
, fp12
, fp14
;
40 __OSfp fp16
, fp18
, fp20
, fp22
, fp24
, fp26
, fp28
, fp30
;
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
;
60 /*0x1C*/ __OSThreadprofile_s
*thprof
;
61 /*0x20*/ __OSThreadContext context
;
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
);