2 * Copyright (c) 2012 ETH Zurich.
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.
10 #ifndef CAPOPS_INTERNAL_H
11 #define CAPOPS_INTERNAL_H
14 #include <errors/errno.h>
15 #include <barrelfish/waitset.h>
16 #include <barrelfish/debug.h>
18 #include <if/intermon_defs.h>
20 typedef void (*gen_result_cont_fn)(errval_t, void*);
21 struct result_closure {
22 gen_result_cont_fn handler;
25 #define MKRESCONT(h,a) ((struct result_closure){ .handler = (h), .arg = (a) })
26 #define CALLRESCONT(c,e) ((c).handler((e), (c).arg))
28 #define malloce(size, ret) \
29 ((*(ret) = malloc(size)) \
31 : LIB_ERR_MALLOC_FAIL)
33 #define calloce(n, size, ret) \
34 ((*(ret) = calloc(n, size)) \
36 : LIB_ERR_MALLOC_FAIL)
38 #define GOTO_IF_ERR(err, label) do { \
39 if (err_is_fail(err)) { \
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)); \
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)); \
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)); \
66 void find_cap__rx_handler(struct intermon_binding *b, intermon_caprep_t caprep,
68 void find_cap_result__rx_handler(struct intermon_binding *b, errval_t result,
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,
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,
91 void move_result__rx_handler(struct intermon_binding *b, errval_t status,
93 void retrieve_request__rx(struct intermon_binding *b,
94 intermon_caprep_t caprep,
96 void retrieve_result__rx(struct intermon_binding *b,
97 errval_t status, uint8_t relations,
99 void retype_request__rx(struct intermon_binding *b, intermon_caprep_t srcrep,
100 uint32_t desttype, uint32_t destbits, genvaddr_t st);
101 void retype_response__rx(struct intermon_binding *b, errval_t status,
103 void revoke_mark__rx(struct intermon_binding *b,
104 intermon_caprep_t caprep,
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);
110 size_t num_monitors_online(void);