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
13 typedef void (*gen_result_cont_fn)(errval_t, void*);
14 struct result_closure {
15 gen_result_cont_fn handler;
18 #define MKRESCONT(h,a) ((struct result_closure){ .handler = (h), .arg = (a) })
19 #define CALLRESCONT(c,e) ((c).handler((e), (c).arg))
21 #define malloce(size, ret) \
22 (*(ret) = malloc(size), \
23 *(ret) ? SYS_ERR_OK : LIB_ERR_MALLOC_FAIL)
25 #define calloce(n, size, ret) \
26 (*(ret) = calloc(n, size), \
27 *(ret) ? SYS_ERR_OK : LIB_ERR_MALLOC_FAIL)
29 #define GOTO_IF_ERR(err, label) do { \
30 if (err_is_fail(err)) { \
35 #define PANIC_IF_ERR(err, msg) do { \
36 errval_t tmp_err__ = (err); \
37 if (err_is_fail(tmp_err__)) { \
38 USER_PANIC_ERR(tmp_err__, (msg)); \
42 #define PANIC_IF_ERR2(err2, msg2, err, msg) do { \
43 errval_t tmp_err2__ = (err2); \
44 if (err_is_fail(tmp_err2__)) { \
45 DEBUG_ERR((err), (msg)); \
46 USER_PANIC_ERR(tmp_err2__, (msg2)); \
50 #define DEBUG_IF_ERR(err, msg) do { \
51 errval_t tmp_err__ = (err); \
52 if (err_is_fail(tmp_err__)) { \
53 DEBUG_ERR(tmp_err__, (msg)); \
57 void find_cap__rx_handler(struct intermon_binding *b, intermon_caprep_t caprep,
59 void find_cap_result__rx_handler(struct intermon_binding *b, errval_t result,
61 void find_descendants__rx_handler(struct intermon_binding *b,
62 intermon_caprep_t caprep, genvaddr_t st);
63 void find_descendants_result__rx_handler(struct intermon_binding *b,
64 errval_t status, genvaddr_t st);
65 void owner_updated__rx_handler(struct intermon_binding *b, genvaddr_t st);
66 void update_owner__rx_handler(struct intermon_binding *b,
67 intermon_caprep_t caprep, genvaddr_t st);
68 void recv_copy_result__rx(struct intermon_binding *b, errval_t status,
69 capaddr_t capaddr, uint8_t vbits, cslot_t slot,
71 void recv_copy__rx(struct intermon_binding *b, intermon_caprep_t caprep,
72 uint8_t owner_relations, genvaddr_t st);
73 void request_copy__rx(struct intermon_binding *b, coreid_t dest,
74 intermon_caprep_t caprep, genvaddr_t st);
75 void delete_remote__rx(struct intermon_binding *b,
76 intermon_caprep_t caprep, genvaddr_t st);
77 void delete_remote_result__rx(struct intermon_binding *b,
78 errval_t status, genvaddr_t st);
79 void move_request__rx_handler(struct intermon_binding *b,
80 intermon_caprep_t caprep, uint8_t relations,
82 void move_result__rx_handler(struct intermon_binding *b, errval_t status,
84 void retype_request__rx(struct intermon_binding *b, intermon_caprep_t srcrep,
85 int desttype, uint32_t destbits, genvaddr_t st);
86 void retype_response__rx(struct intermon_binding *b, errval_t status,
88 void request_revoke__rx_handler(struct intermon_binding *b,
89 intermon_caprep_t caprep, genvaddr_t st);
90 void revoke_result__rx_handler(struct intermon_binding *b, errval_t status,