Added "retrieve" operation for revoke.
[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 <errors/errno.h>
14 #include <barrelfish/waitset.h>
15 #include <capops.h>
16
17 typedef void (*gen_result_cont_fn)(errval_t, void*);
18 struct result_closure {
19     gen_result_cont_fn handler;
20     void *arg;
21 };
22 #define MKRESCONT(h,a) ((struct result_closure){ .handler = (h), .arg = (a) })
23 #define CALLRESCONT(c,e) ((c).handler((e), (c).arg))
24
25 #define malloce(size, ret) \
26     (*(ret) = malloc(size), \
27      *(ret) ? SYS_ERR_OK : LIB_ERR_MALLOC_FAIL)
28
29 #define calloce(n, size, ret) \
30     (*(ret) = calloc(n, size), \
31      *(ret) ? SYS_ERR_OK : LIB_ERR_MALLOC_FAIL)
32
33 #define GOTO_IF_ERR(err, label) do { \
34     if (err_is_fail(err)) { \
35         goto label; \
36     } \
37 } while (0)
38
39 #define PANIC_IF_ERR(err, msg) do { \
40     errval_t tmp_err__ = (err); \
41     if (err_is_fail(tmp_err__)) { \
42         USER_PANIC_ERR(tmp_err__, (msg)); \
43     } \
44 } while (0)
45
46 #define PANIC_IF_ERR2(err2, msg2, err, msg) do { \
47     errval_t tmp_err2__ = (err2); \
48     if (err_is_fail(tmp_err2__)) { \
49         DEBUG_ERR((err), (msg)); \
50         USER_PANIC_ERR(tmp_err2__, (msg2)); \
51     } \
52 } while (0)
53
54 #define DEBUG_IF_ERR(err, msg) do { \
55     errval_t tmp_err__ = (err); \
56     if (err_is_fail(tmp_err__)) { \
57         DEBUG_ERR(tmp_err__, (msg)); \
58     } \
59 } while (0)
60
61 void find_cap__rx_handler(struct intermon_binding *b, intermon_caprep_t caprep,
62                           genvaddr_t st);
63 void find_cap_result__rx_handler(struct intermon_binding *b, errval_t result,
64                                  genvaddr_t st);
65 void find_descendants__rx_handler(struct intermon_binding *b,
66                                   intermon_caprep_t caprep, genvaddr_t st);
67 void find_descendants_result__rx_handler(struct intermon_binding *b,
68                                          errval_t status, genvaddr_t st);
69 void owner_updated__rx_handler(struct intermon_binding *b, genvaddr_t st);
70 void update_owner__rx_handler(struct intermon_binding *b,
71                               intermon_caprep_t caprep, genvaddr_t st);
72 void recv_copy_result__rx(struct intermon_binding *b, errval_t status,
73                           capaddr_t capaddr, uint8_t vbits, cslot_t slot,
74                           genvaddr_t st);
75 void recv_copy__rx(struct intermon_binding *b, intermon_caprep_t caprep,
76                    uint8_t owner_relations, genvaddr_t st);
77 void request_copy__rx(struct intermon_binding *b, coreid_t dest,
78                       intermon_caprep_t caprep, genvaddr_t st);
79 void delete_remote__rx(struct intermon_binding *b,
80                                intermon_caprep_t caprep, genvaddr_t st);
81 void delete_remote_result__rx(struct intermon_binding *b,
82                                       errval_t status, genvaddr_t st);
83 void move_request__rx_handler(struct intermon_binding *b,
84                               intermon_caprep_t caprep, uint8_t relations,
85                               genvaddr_t st);
86 void move_result__rx_handler(struct intermon_binding *b, errval_t status,
87                              genvaddr_t st);
88 void retrieve_request__rx(struct intermon_binding *b,
89                           intermon_caprep_t caprep,
90                           genvaddr_t st);
91 void retrieve_result__rx(struct intermon_binding *b,
92                          errval_t status, uint8_t relations,
93                          genvaddr_t st);
94 void retype_request__rx(struct intermon_binding *b, intermon_caprep_t srcrep,
95                         int desttype, uint32_t destbits, genvaddr_t st);
96 void retype_response__rx(struct intermon_binding *b, errval_t status,
97                                  genvaddr_t st);
98 void request_revoke__rx_handler(struct intermon_binding *b,
99                                 intermon_caprep_t caprep, genvaddr_t st);
100 void revoke_result__rx_handler(struct intermon_binding *b, errval_t status,
101                                genvaddr_t st);
102
103 #endif