monitor: bugfixes in the revocation protocol
[barrelfish] / usr / monitor / capops / internal.h
1 /*
2  * Copyright (c) 2012 ETH Zurich.
3  * All rights reserved.
4  *
5  * This file is distributed under the terms in the attached LICENSE file.
6  * If you do not find this file, copies can be found by writing to:
7  * ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
8  */
9
10 #ifndef CAPOPS_INTERNAL_H
11 #define CAPOPS_INTERNAL_H
12
13 #include <stdlib.h>
14 #include <errors/errno.h>
15 #include <barrelfish/waitset.h>
16 #include <barrelfish/debug.h>
17 #include <capops.h>
18 #include <if/intermon_defs.h>
19
20 typedef void (*gen_result_cont_fn)(errval_t, void*);
21 struct result_closure {
22     gen_result_cont_fn handler;
23     void *arg;
24 };
25 #define MKRESCONT(h,a) ((struct result_closure){ .handler = (h), .arg = (a) })
26 #define CALLRESCONT(c,e) ((c).handler((e), (c).arg))
27
28 #define malloce(size, ret) \
29     ((*(ret) = malloc(size)) \
30      ? SYS_ERR_OK \
31      : LIB_ERR_MALLOC_FAIL)
32
33 #define calloce(n, size, ret) \
34     ((*(ret) = calloc(n, size)) \
35      ? SYS_ERR_OK \
36      : LIB_ERR_MALLOC_FAIL)
37
38 #define GOTO_IF_ERR(err, label) do { \
39     if (err_is_fail(err)) { \
40         DEBUG_ERR(err, "%s:%u -> goto err\n", __FUNCTION__, __LINE__); \
41         goto label; \
42     } \
43 } while (0)
44
45 #define PANIC_IF_ERR(err, msg) do { \
46     errval_t tmp_err__ = (err); \
47     if (err_is_fail(tmp_err__)) { \
48         USER_PANIC_ERR(tmp_err__, (msg)); \
49     } \
50 } while (0)
51
52 #define PANIC_IF_ERR2(err2, msg2, err, msg) do { \
53     errval_t tmp_err2__ = (err2); \
54     if (err_is_fail(tmp_err2__)) { \
55         DEBUG_ERR((err), (msg)); \
56         USER_PANIC_ERR(tmp_err2__, (msg2)); \
57     } \
58 } while (0)
59
60 #define DEBUG_IF_ERR(err, msg) do { \
61     errval_t tmp_err__ = (err); \
62     if (err_is_fail(tmp_err__)) { \
63         DEBUG_ERR(tmp_err__, (msg)); \
64     } \
65 } while (0)
66
67 void find_cap__rx_handler(struct intermon_binding *b, intermon_caprep_t caprep,
68                           genvaddr_t st);
69 void find_cap_result__rx_handler(struct intermon_binding *b, errval_t result,
70                                  genvaddr_t st);
71 void find_descendants__rx_handler(struct intermon_binding *b,
72                                   intermon_caprep_t caprep, genvaddr_t st);
73 void find_descendants_result__rx_handler(struct intermon_binding *b,
74                                          errval_t status, genvaddr_t st);
75 void owner_updated__rx_handler(struct intermon_binding *b, genvaddr_t st);
76 void update_owner__rx_handler(struct intermon_binding *b,
77                               intermon_caprep_t caprep, genvaddr_t st);
78 void recv_copy_result__rx(struct intermon_binding *b, errval_t status,
79                           capaddr_t capaddr, uint8_t vbits, cslot_t slot,
80                           genvaddr_t st);
81 void recv_copy__rx(struct intermon_binding *b, intermon_caprep_t caprep,
82                    uint8_t owner_relations, genvaddr_t st);
83 void request_copy__rx(struct intermon_binding *b, coreid_t dest,
84                       intermon_caprep_t caprep, genvaddr_t st);
85 void delete_remote__rx(struct intermon_binding *b,
86                                intermon_caprep_t caprep, genvaddr_t st);
87 void delete_remote_result__rx(struct intermon_binding *b,
88                                       errval_t status, genvaddr_t st);
89 void move_request__rx_handler(struct intermon_binding *b,
90                               intermon_caprep_t caprep, uint8_t relations,
91                               genvaddr_t st);
92 void move_result__rx_handler(struct intermon_binding *b, errval_t status,
93                              genvaddr_t st);
94 void retrieve_request__rx(struct intermon_binding *b,
95                           intermon_caprep_t caprep,
96                           genvaddr_t st);
97 void retrieve_result__rx(struct intermon_binding *b,
98                          errval_t status, uint8_t relations,
99                          genvaddr_t st);
100 void retype_request__rx(struct intermon_binding *b, intermon_caprep_t srcrep,
101                         uint32_t desttype, uint32_t destbits, genvaddr_t st);
102 void retype_response__rx(struct intermon_binding *b, errval_t status,
103                                  genvaddr_t st);
104 void revoke_mark__rx(struct intermon_binding *b,
105                      intermon_caprep_t caprep,
106                      genvaddr_t st);
107 void revoke_ready__rx(struct intermon_binding *b, genvaddr_t st);
108 void revoke_commit__rx(struct intermon_binding *b, genvaddr_t st);
109 void revoke_done__rx(struct intermon_binding *b, genvaddr_t st);
110
111 size_t num_monitors_online(void);
112
113 #endif