Blame


1 1a0954ab 2005-01-04 devnull #ifndef _MUX_H_
2 1a0954ab 2005-01-04 devnull #define _MUX_H_ 1
3 1a0954ab 2005-01-04 devnull #if defined(__cplusplus)
4 1a0954ab 2005-01-04 devnull extern "C" {
5 1a0954ab 2005-01-04 devnull #endif
6 1a0954ab 2005-01-04 devnull
7 1a0954ab 2005-01-04 devnull AUTOLIB(mux)
8 1a0954ab 2005-01-04 devnull
9 d3df3087 2003-12-06 devnull typedef struct Mux Mux;
10 d3df3087 2003-12-06 devnull typedef struct Muxrpc Muxrpc;
11 d3df3087 2003-12-06 devnull typedef struct Muxqueue Muxqueue;
12 d3df3087 2003-12-06 devnull
13 d3df3087 2003-12-06 devnull struct Muxrpc
14 d3df3087 2003-12-06 devnull {
15 d3df3087 2003-12-06 devnull Muxrpc *next;
16 d3df3087 2003-12-06 devnull Muxrpc *prev;
17 d3df3087 2003-12-06 devnull Rendez r;
18 d3df3087 2003-12-06 devnull uint tag;
19 d3df3087 2003-12-06 devnull void *p;
20 d3df3087 2003-12-06 devnull };
21 d3df3087 2003-12-06 devnull
22 d3df3087 2003-12-06 devnull struct Mux
23 d3df3087 2003-12-06 devnull {
24 d3df3087 2003-12-06 devnull uint mintag; /* to be filled by client */
25 d3df3087 2003-12-06 devnull uint maxtag;
26 d3df3087 2003-12-06 devnull int (*send)(Mux*, void*);
27 d3df3087 2003-12-06 devnull void *(*recv)(Mux*);
28 d3df3087 2003-12-06 devnull int (*gettag)(Mux*, void*);
29 d3df3087 2003-12-06 devnull int (*settag)(Mux*, void*, uint);
30 d3df3087 2003-12-06 devnull void *aux; /* for private use by client */
31 d3df3087 2003-12-06 devnull
32 d3df3087 2003-12-06 devnull /* private */
33 b214663d 2004-01-09 devnull QLock lk; /* must be first for muxinit */
34 d3df3087 2003-12-06 devnull QLock inlk;
35 d3df3087 2003-12-06 devnull QLock outlk;
36 d3df3087 2003-12-06 devnull Rendez tagrend;
37 d3df3087 2003-12-06 devnull Rendez rpcfork;
38 d3df3087 2003-12-06 devnull Muxqueue *readq;
39 d3df3087 2003-12-06 devnull Muxqueue *writeq;
40 d3df3087 2003-12-06 devnull uint nwait;
41 d3df3087 2003-12-06 devnull uint mwait;
42 d3df3087 2003-12-06 devnull uint freetag;
43 d3df3087 2003-12-06 devnull Muxrpc **wait;
44 d3df3087 2003-12-06 devnull uint muxer;
45 d3df3087 2003-12-06 devnull Muxrpc sleep;
46 d3df3087 2003-12-06 devnull };
47 d3df3087 2003-12-06 devnull
48 d3df3087 2003-12-06 devnull void muxinit(Mux*);
49 d3df3087 2003-12-06 devnull void* muxrpc(Mux*, void*);
50 d3df3087 2003-12-06 devnull void muxthreads(Mux*);
51 d3df3087 2003-12-06 devnull
52 d3df3087 2003-12-06 devnull /* private */
53 d3df3087 2003-12-06 devnull int _muxsend(Mux*, void*);
54 d3df3087 2003-12-06 devnull void* _muxrecv(Mux*);
55 d3df3087 2003-12-06 devnull void _muxsendproc(void*);
56 d3df3087 2003-12-06 devnull void _muxrecvproc(void*);
57 d3df3087 2003-12-06 devnull Muxqueue *_muxqalloc(void);
58 d3df3087 2003-12-06 devnull int _muxqsend(Muxqueue*, void*);
59 d3df3087 2003-12-06 devnull void *_muxqrecv(Muxqueue*);
60 d3df3087 2003-12-06 devnull void _muxqhangup(Muxqueue*);
61 d3df3087 2003-12-06 devnull void *_muxnbqrecv(Muxqueue*);
62 d3df3087 2003-12-06 devnull
63 1a0954ab 2005-01-04 devnull #if defined(__cplusplus)
64 1a0954ab 2005-01-04 devnull }
65 1a0954ab 2005-01-04 devnull #endif
66 1a0954ab 2005-01-04 devnull #endif