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" {
7 1a0954ab 2005-01-04 devnull AUTOLIB(mux)
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;
13 d3df3087 2003-12-06 devnull struct Muxrpc
15 c02bc16b 2006-06-25 devnull Mux *mux;
16 d3df3087 2003-12-06 devnull Muxrpc *next;
17 d3df3087 2003-12-06 devnull Muxrpc *prev;
18 d3df3087 2003-12-06 devnull Rendez r;
19 d3df3087 2003-12-06 devnull uint tag;
21 c02bc16b 2006-06-25 devnull int waiting;
24 d3df3087 2003-12-06 devnull struct Mux
26 d3df3087 2003-12-06 devnull uint mintag; /* to be filled by client */
27 d3df3087 2003-12-06 devnull uint maxtag;
28 d3df3087 2003-12-06 devnull int (*send)(Mux*, void*);
29 d3df3087 2003-12-06 devnull void *(*recv)(Mux*);
30 c02bc16b 2006-06-25 devnull void *(*nbrecv)(Mux*);
31 d3df3087 2003-12-06 devnull int (*gettag)(Mux*, void*);
32 d3df3087 2003-12-06 devnull int (*settag)(Mux*, void*, uint);
33 d3df3087 2003-12-06 devnull void *aux; /* for private use by client */
35 d3df3087 2003-12-06 devnull /* private */
36 b214663d 2004-01-09 devnull QLock lk; /* must be first for muxinit */
37 d3df3087 2003-12-06 devnull QLock inlk;
38 d3df3087 2003-12-06 devnull QLock outlk;
39 d3df3087 2003-12-06 devnull Rendez tagrend;
40 d3df3087 2003-12-06 devnull Rendez rpcfork;
41 d3df3087 2003-12-06 devnull Muxqueue *readq;
42 d3df3087 2003-12-06 devnull Muxqueue *writeq;
43 d3df3087 2003-12-06 devnull uint nwait;
44 d3df3087 2003-12-06 devnull uint mwait;
45 d3df3087 2003-12-06 devnull uint freetag;
46 d3df3087 2003-12-06 devnull Muxrpc **wait;
47 c02bc16b 2006-06-25 devnull Muxrpc *muxer;
48 d3df3087 2003-12-06 devnull Muxrpc sleep;
51 d3df3087 2003-12-06 devnull void muxinit(Mux*);
52 d3df3087 2003-12-06 devnull void* muxrpc(Mux*, void*);
53 c02bc16b 2006-06-25 devnull void muxprocs(Mux*);
54 c02bc16b 2006-06-25 devnull Muxrpc* muxrpcstart(Mux*, void*);
55 c02bc16b 2006-06-25 devnull void* muxrpccanfinish(Muxrpc*);
57 d3df3087 2003-12-06 devnull /* private */
58 d3df3087 2003-12-06 devnull int _muxsend(Mux*, void*);
59 c02bc16b 2006-06-25 devnull void* _muxrecv(Mux*, int);
60 d3df3087 2003-12-06 devnull void _muxsendproc(void*);
61 d3df3087 2003-12-06 devnull void _muxrecvproc(void*);
62 d3df3087 2003-12-06 devnull Muxqueue *_muxqalloc(void);
63 d3df3087 2003-12-06 devnull int _muxqsend(Muxqueue*, void*);
64 d3df3087 2003-12-06 devnull void *_muxqrecv(Muxqueue*);
65 d3df3087 2003-12-06 devnull void _muxqhangup(Muxqueue*);
66 d3df3087 2003-12-06 devnull void *_muxnbqrecv(Muxqueue*);
68 1a0954ab 2005-01-04 devnull #if defined(__cplusplus)