Blame


1 f7012583 2003-11-25 devnull #ifndef _THREAD_H_
2 f7012583 2003-11-25 devnull #define _THREAD_H_ 1
3 f7012583 2003-11-25 devnull #if defined(__cplusplus)
4 f7012583 2003-11-25 devnull extern "C" {
5 f7012583 2003-11-25 devnull #endif
6 b2cfc4e2 2003-09-30 devnull
7 3286afda 2004-12-25 devnull /*
8 3286afda 2004-12-25 devnull * basic procs and threads
9 3286afda 2004-12-25 devnull */
10 3286afda 2004-12-25 devnull int proccreate(void (*f)(void *arg), void *arg, unsigned int stacksize);
11 3286afda 2004-12-25 devnull int threadcreate(void (*f)(void *arg), void *arg, unsigned int stacksize);
12 3286afda 2004-12-25 devnull void threadexits(char *);
13 3286afda 2004-12-25 devnull void threadexitsall(char *);
14 3286afda 2004-12-25 devnull void threadsetname(char*, ...);
15 3286afda 2004-12-25 devnull void threadsetstate(char*, ...);
16 678ede7e 2004-12-27 devnull void threadyield(void);
17 3286afda 2004-12-25 devnull void _threadready(_Thread*);
18 3286afda 2004-12-25 devnull void _threadswitch(void);
19 3286afda 2004-12-25 devnull void _threadsetsysproc(void);
20 3286afda 2004-12-25 devnull void _threadsleep(Rendez*);
21 3286afda 2004-12-25 devnull _Thread *_threadwakeup(Rendez*);
22 678ede7e 2004-12-27 devnull #define yield threadyield
23 b2cfc4e2 2003-09-30 devnull
24 3286afda 2004-12-25 devnull /*
25 3286afda 2004-12-25 devnull * per proc and thread data
26 3286afda 2004-12-25 devnull */
27 3286afda 2004-12-25 devnull void **procdata(void);
28 b2cfc4e2 2003-09-30 devnull
29 3286afda 2004-12-25 devnull /*
30 3286afda 2004-12-25 devnull * supplied by user instead of main.
31 3286afda 2004-12-25 devnull * mainstacksize is size of stack allocated to run threadmain
32 b2cfc4e2 2003-09-30 devnull */
33 3286afda 2004-12-25 devnull void threadmain(int argc, char *argv[]);
34 3286afda 2004-12-25 devnull extern int mainstacksize;
35 b2cfc4e2 2003-09-30 devnull
36 3286afda 2004-12-25 devnull /*
37 3286afda 2004-12-25 devnull * channel communication
38 3286afda 2004-12-25 devnull */
39 3286afda 2004-12-25 devnull typedef struct Alt Alt;
40 3286afda 2004-12-25 devnull typedef struct _Altarray _Altarray;
41 3286afda 2004-12-25 devnull typedef struct Channel Channel;
42 b2cfc4e2 2003-09-30 devnull
43 3286afda 2004-12-25 devnull enum
44 3286afda 2004-12-25 devnull {
45 b2cfc4e2 2003-09-30 devnull CHANEND,
46 b2cfc4e2 2003-09-30 devnull CHANSND,
47 b2cfc4e2 2003-09-30 devnull CHANRCV,
48 b2cfc4e2 2003-09-30 devnull CHANNOP,
49 b2cfc4e2 2003-09-30 devnull CHANNOBLK,
50 3286afda 2004-12-25 devnull };
51 b2cfc4e2 2003-09-30 devnull
52 3286afda 2004-12-25 devnull struct Alt
53 3286afda 2004-12-25 devnull {
54 3286afda 2004-12-25 devnull void *v;
55 3286afda 2004-12-25 devnull Channel *c;
56 3286afda 2004-12-25 devnull uint op;
57 3286afda 2004-12-25 devnull _Thread *thread;
58 3286afda 2004-12-25 devnull Alt *xalt;
59 3286afda 2004-12-25 devnull };
60 b2cfc4e2 2003-09-30 devnull
61 3286afda 2004-12-25 devnull struct _Altarray
62 3286afda 2004-12-25 devnull {
63 3286afda 2004-12-25 devnull Alt **a;
64 3286afda 2004-12-25 devnull uint n;
65 3286afda 2004-12-25 devnull uint m;
66 b2cfc4e2 2003-09-30 devnull };
67 b2cfc4e2 2003-09-30 devnull
68 3286afda 2004-12-25 devnull struct Channel
69 3286afda 2004-12-25 devnull {
70 3286afda 2004-12-25 devnull uint bufsize;
71 3286afda 2004-12-25 devnull uint elemsize;
72 3286afda 2004-12-25 devnull uchar *buf;
73 3286afda 2004-12-25 devnull uint nbuf;
74 3286afda 2004-12-25 devnull uint off;
75 3286afda 2004-12-25 devnull _Altarray asend;
76 3286afda 2004-12-25 devnull _Altarray arecv;
77 3286afda 2004-12-25 devnull char *name;
78 b2cfc4e2 2003-09-30 devnull };
79 b2cfc4e2 2003-09-30 devnull
80 3286afda 2004-12-25 devnull /* [Edit .+1,./^$/ |cfn -h $PLAN9/src/libthread/channel.c] */
81 3286afda 2004-12-25 devnull int chanalt(Alt *alts);
82 3286afda 2004-12-25 devnull Channel* chancreate(int elemsize, int elemcnt);
83 b2cfc4e2 2003-09-30 devnull void chanfree(Channel *c);
84 3286afda 2004-12-25 devnull int chaninit(Channel *c, int elemsize, int elemcnt);
85 3286afda 2004-12-25 devnull int channbrecv(Channel *c, void *v);
86 3286afda 2004-12-25 devnull void* channbrecvp(Channel *c);
87 3286afda 2004-12-25 devnull ulong channbrecvul(Channel *c);
88 3286afda 2004-12-25 devnull int channbsend(Channel *c, void *v);
89 3286afda 2004-12-25 devnull int channbsendp(Channel *c, void *v);
90 3286afda 2004-12-25 devnull int channbsendul(Channel *c, ulong v);
91 3286afda 2004-12-25 devnull int chanrecv(Channel *c, void *v);
92 3286afda 2004-12-25 devnull void* chanrecvp(Channel *c);
93 3286afda 2004-12-25 devnull ulong chanrecvul(Channel *c);
94 3286afda 2004-12-25 devnull int chansend(Channel *c, void *v);
95 3286afda 2004-12-25 devnull int chansendp(Channel *c, void *v);
96 3286afda 2004-12-25 devnull int chansendul(Channel *c, ulong v);
97 a3ad5254 2004-06-09 devnull
98 3286afda 2004-12-25 devnull #define alt chanalt
99 3286afda 2004-12-25 devnull #define nbrecv channbrecv
100 3286afda 2004-12-25 devnull #define nbrecvp channbrecvp
101 3286afda 2004-12-25 devnull #define nvrecvul channbrecvul
102 3286afda 2004-12-25 devnull #define nbsend channbsend
103 3286afda 2004-12-25 devnull #define nbsendp channbsendp
104 3286afda 2004-12-25 devnull #define nbsendul channbsendul
105 3286afda 2004-12-25 devnull #define recv chanrecv
106 3286afda 2004-12-25 devnull #define recvp chanrecvp
107 3286afda 2004-12-25 devnull #define recvul chanrecvul
108 3286afda 2004-12-25 devnull #define send chansend
109 3286afda 2004-12-25 devnull #define sendp chansendp
110 3286afda 2004-12-25 devnull #define sendul chansendul
111 b2cfc4e2 2003-09-30 devnull
112 3286afda 2004-12-25 devnull /*
113 3286afda 2004-12-25 devnull * reference counts
114 3286afda 2004-12-25 devnull */
115 3286afda 2004-12-25 devnull typedef struct Ref Ref;
116 b2cfc4e2 2003-09-30 devnull
117 3286afda 2004-12-25 devnull struct Ref {
118 3286afda 2004-12-25 devnull Lock lock;
119 3286afda 2004-12-25 devnull long ref;
120 3286afda 2004-12-25 devnull };
121 b2cfc4e2 2003-09-30 devnull
122 3286afda 2004-12-25 devnull long decref(Ref *r);
123 3286afda 2004-12-25 devnull long incref(Ref *r);
124 3286afda 2004-12-25 devnull
125 3286afda 2004-12-25 devnull /*
126 3286afda 2004-12-25 devnull * slave i/o processes
127 3286afda 2004-12-25 devnull */
128 b2cfc4e2 2003-09-30 devnull typedef struct Ioproc Ioproc;
129 b2cfc4e2 2003-09-30 devnull
130 3286afda 2004-12-25 devnull /* [Edit .+1,/^$/ |cfn -h $PLAN9/src/libthread/io*.c] */
131 3286afda 2004-12-25 devnull void closeioproc(Ioproc *io);
132 3286afda 2004-12-25 devnull long iocall(Ioproc *io, long (*op)(va_list*), ...);
133 3286afda 2004-12-25 devnull int ioclose(Ioproc *io, int fd);
134 3286afda 2004-12-25 devnull int iodial(Ioproc *io, char *addr, char *local, char *dir, int *cdfp);
135 3286afda 2004-12-25 devnull void iointerrupt(Ioproc *io);
136 3286afda 2004-12-25 devnull int ioopen(Ioproc *io, char *path, int mode);
137 3286afda 2004-12-25 devnull Ioproc* ioproc(void);
138 3286afda 2004-12-25 devnull long ioread(Ioproc *io, int fd, void *a, long n);
139 3286afda 2004-12-25 devnull int ioread9pmsg(Ioproc*, int, void*, int);
140 3286afda 2004-12-25 devnull long ioreadn(Ioproc *io, int fd, void *a, long n);
141 3286afda 2004-12-25 devnull int iorecvfd(Ioproc *, int);
142 3286afda 2004-12-25 devnull int iosendfd(Ioproc*, int, int);
143 3286afda 2004-12-25 devnull int iosleep(Ioproc *io, long n);
144 3286afda 2004-12-25 devnull long iowrite(Ioproc *io, int fd, void *a, long n);
145 b2cfc4e2 2003-09-30 devnull
146 3286afda 2004-12-25 devnull /*
147 3286afda 2004-12-25 devnull * exec external programs
148 3286afda 2004-12-25 devnull */
149 3286afda 2004-12-25 devnull void threadexec(Channel*, int[3], char*, char *[]);
150 3286afda 2004-12-25 devnull void threadexecl(Channel*, int[3], char*, ...);
151 3286afda 2004-12-25 devnull int threadspawn(int[3], char*, char*[]);
152 3286afda 2004-12-25 devnull Channel* threadwaitchan(void);
153 b2cfc4e2 2003-09-30 devnull
154 f7012583 2003-11-25 devnull #if defined(__cplusplus)
155 f7012583 2003-11-25 devnull }
156 f7012583 2003-11-25 devnull #endif
157 b2cfc4e2 2003-09-30 devnull #endif /* _THREADH_ */