62263036e7d24defb4880d9bb1e752df8b86ba9f
[archipelago] / xseg / peers / user / mpeer.h
1 #include <stddef.h>
2 /* main mpeer structs */
3 struct peer_req {
4         struct peerd *peer;
5         struct xseg_request *req;
6         ssize_t retval;
7         void *priv;
8 };
9
10 struct peerd {
11         struct xseg *xseg;
12         struct xseg_port *xport;
13         uint32_t portno;
14         long nr_ops;
15         uint32_t nr_threads;
16         uint32_t defer_portno;
17         struct thread *thread;
18         struct peer_req *peer_reqs;
19         struct xq free_reqs;
20         struct xq threads;
21         void *priv;
22         void (*interactive_func)(void);
23 };
24
25
26 void fail(struct peerd *peer, struct peer_req *pr);
27 void complete(struct peerd *peer, struct peer_req *pr);
28 void defer_request(struct peerd *peer, struct peer_req *pr);
29 void pending(struct peerd *peer, struct peer_req *req);
30 void log_pr(char *msg, struct peer_req *pr);
31 int canDefer(struct peerd *peer);
32 int submit_peer_req(struct peerd *peer, struct peer_req *pr);
33 struct peer_req *alloc_peer_req(struct peerd *peer);
34 void free_peer_req(struct peerd *peer, struct peer_req *pr);
35 int thread_execute(struct peerd *peer, void (*func)(void *arg), void *arg);
36 void get_submits_stats();
37 void get_responds_stats();
38
39 static inline struct peerd * __get_peerd(void * custom_peerd)
40 {
41         return (struct peerd *) ((unsigned long) custom_peerd  - offsetof(struct peerd, priv));
42 }
43
44 /********************************
45  *   mandatory peer functions   *
46  ********************************/
47
48 /* peer main function */
49 int custom_peer_init(struct peerd *peer, int argc, char *argv[]);
50
51 /* dispatch function that cannot block
52  * defers blocking calls to helper threads
53  */
54 int dispatch(struct peerd *peer, struct peer_req *pr, struct xseg_request *xseg);
55
56 void usage();