Blame


1 619085f0 2004-12-25 devnull #include <ucontext.h>
2 619085f0 2004-12-25 devnull
3 619085f0 2004-12-25 devnull typedef struct Context Context;
4 619085f0 2004-12-25 devnull typedef struct Proc Proc;
5 619085f0 2004-12-25 devnull typedef struct _Procrendez _Procrendez;
6 619085f0 2004-12-25 devnull
7 619085f0 2004-12-25 devnull enum
8 619085f0 2004-12-25 devnull {
9 619085f0 2004-12-25 devnull STACK = 8192
10 619085f0 2004-12-25 devnull };
11 619085f0 2004-12-25 devnull
12 619085f0 2004-12-25 devnull struct Context
13 619085f0 2004-12-25 devnull {
14 619085f0 2004-12-25 devnull ucontext_t uc;
15 619085f0 2004-12-25 devnull };
16 619085f0 2004-12-25 devnull
17 619085f0 2004-12-25 devnull struct _Thread
18 619085f0 2004-12-25 devnull {
19 619085f0 2004-12-25 devnull _Thread *next;
20 619085f0 2004-12-25 devnull _Thread *prev;
21 619085f0 2004-12-25 devnull _Thread *allnext;
22 619085f0 2004-12-25 devnull _Thread *allprev;
23 619085f0 2004-12-25 devnull Context context;
24 619085f0 2004-12-25 devnull uint id;
25 619085f0 2004-12-25 devnull uchar *stk;
26 619085f0 2004-12-25 devnull uint stksize;
27 619085f0 2004-12-25 devnull int exiting;
28 619085f0 2004-12-25 devnull void (*startfn)(void*);
29 619085f0 2004-12-25 devnull void *startarg;
30 619085f0 2004-12-25 devnull Proc *proc;
31 619085f0 2004-12-25 devnull char name[256];
32 619085f0 2004-12-25 devnull char state[256];
33 619085f0 2004-12-25 devnull };
34 619085f0 2004-12-25 devnull
35 619085f0 2004-12-25 devnull struct _Procrendez
36 619085f0 2004-12-25 devnull {
37 619085f0 2004-12-25 devnull Lock *l;
38 619085f0 2004-12-25 devnull int asleep;
39 619085f0 2004-12-25 devnull pthread_cond_t cond;
40 619085f0 2004-12-25 devnull };
41 619085f0 2004-12-25 devnull
42 619085f0 2004-12-25 devnull extern void _procsleep(_Procrendez*);
43 619085f0 2004-12-25 devnull extern void _procwakeup(_Procrendez*);
44 619085f0 2004-12-25 devnull
45 619085f0 2004-12-25 devnull struct Proc
46 619085f0 2004-12-25 devnull {
47 619085f0 2004-12-25 devnull pthread_t tid;
48 619085f0 2004-12-25 devnull Lock lock;
49 619085f0 2004-12-25 devnull _Thread *thread;
50 619085f0 2004-12-25 devnull _Threadlist runqueue;
51 619085f0 2004-12-25 devnull _Threadlist allthreads;
52 619085f0 2004-12-25 devnull uint nthread;
53 619085f0 2004-12-25 devnull uint sysproc;
54 619085f0 2004-12-25 devnull _Procrendez runrend;
55 619085f0 2004-12-25 devnull Context schedcontext;
56 619085f0 2004-12-25 devnull void *udata;
57 619085f0 2004-12-25 devnull };
58 619085f0 2004-12-25 devnull
59 619085f0 2004-12-25 devnull extern Proc *xxx;
60 619085f0 2004-12-25 devnull #define proc() _threadproc()
61 619085f0 2004-12-25 devnull #define setproc(p) _threadsetproc(p)
62 619085f0 2004-12-25 devnull
63 619085f0 2004-12-25 devnull extern void _procstart(Proc*, void (*fn)(void*));
64 619085f0 2004-12-25 devnull extern _Thread *_threadcreate(Proc*, void(*fn)(void*), void*, uint);
65 619085f0 2004-12-25 devnull extern void _threadexit(void);
66 619085f0 2004-12-25 devnull extern Proc *_threadproc(void);
67 619085f0 2004-12-25 devnull extern void _threadsetproc(Proc*);
68 619085f0 2004-12-25 devnull extern int _threadlock(Lock*, int, ulong);
69 619085f0 2004-12-25 devnull extern void _threadunlock(Lock*, ulong);
70 619085f0 2004-12-25 devnull