Rewrote distributed revoke and delete handling.
[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         goto label; \
41     } \
42 } while (0)
43
44 #define PANIC_IF_ERR(err, msg) do { \
45     errval_t tmp_err__ = (err); \
46     if (err_is_fail(tmp_err__)) { \
47         USER_PANIC_ERR(tmp_err__, (msg)); \
48     } \
49 } while (0)
50
51 #define PANIC_IF_ERR2(err2, msg2, err, msg) do { \
52     errval_t tmp_err2__ = (err2); \
53     if (err_is_fail(tmp_err2__)) { \
54         DEBUG_ERR((err), (msg)); \
55         USER_PANIC_ERR(tmp_err2__, (msg2)); \
56     } \
57 } while (0)
58
59 #define DEBUG_IF_ERR(err, msg) do { \
60     errval_t tmp_err__ = (err); \
61     if (err_is_fail(tmp_err__)) { \
62         DEBUG_ERR(tmp_err__, (msg)); \
63     } \
64 } while (0)
65
66 void find_cap__rx_handler(struct intermon_binding *b, intermon_caprep_t caprep,
67                           genvaddr_t st);
68 void find_cap_result__rx_handler(struct intermon_binding *b, errval_t result,
69                                  genvaddr_t st);
70 void find_descendants__rx_handler(struct intermon_binding *b,
71                                   intermon_caprep_t caprep, genvaddr_t st);
72 void find_descendants_result__rx_handler(struct intermon_binding *b,
73                                          errval_t status, genvaddr_t st);
74 void owner_updated__rx_handler(struct intermon_binding *b, genvaddr_t st);
75 void update_owner__rx_handler(struct intermon_binding *b,
76                               intermon_caprep_t caprep, genvaddr_t st);
77 void recv_copy_result__rx(struct intermon_binding *b, errval_t status,
78                           capaddr_t capaddr, uint8_t vbits, cslot_t slot,
79                           genvaddr_t st);
80 void recv_copy__rx(struct intermon_binding *b, intermon_caprep_t caprep,
81                    uint8_t owner_relations, genvaddr_t st);
82 void request_copy__rx(struct intermon_binding *b, coreid_t dest,
83                       intermon_caprep_t caprep, genvaddr_t st);
84 void delete_remote__rx(struct intermon_binding *b,
85                                intermon_caprep_t caprep, genvaddr_t st);
86 void delete_remote_result__rx(struct intermon_binding *b,
87                                       errval_t status, genvaddr_t st);
88 void move_request__rx_handler(struct intermon_binding *b,
89                               intermon_caprep_t caprep, uint8_t relations,
90                               genvaddr_t st);
91 void move_result__rx_handler(struct intermon_binding *b, errval_t status,
92                              genvaddr_t st);
93 void retrieve_request__rx(struct intermon_binding *b,
94                           intermon_caprep_t caprep,
95                           genvaddr_t st);
96 void retrieve_result__rx(struct intermon_binding *b,
97                          errval_t status, uint8_t relations,
98                          genvaddr_t st);
99 void retype_request__rx(struct intermon_binding *b, intermon_caprep_t srcrep,
100                         int desttype, uint32_t destbits, genvaddr_t st);
101 void retype_response__rx(struct intermon_binding *b, errval_t status,
102                                  genvaddr_t st);
103 void revoke_mark__rx(struct intermon_binding *b,
104                      intermon_caprep_t caprep,
105                      genvaddr_t st);
106 void revoke_ready__rx(struct intermon_binding *b, genvaddr_t st);
107 void revoke_commit__rx(struct intermon_binding *b, genvaddr_t st);
108 void revoke_done__rx(struct intermon_binding *b, genvaddr_t st);
109
110 #endif