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, Universitaetstrasse 6, CH-8092 Zurich. Attn: Systems Group.
8 */
9
10#ifndef CAPOPS_TRANSPORT_H
11#define CAPOPS_TRANSPORT_H
12
13#include <barrelfish/types.h>
14#include <barrelfish/caddr.h>
15#include <if/intermon_defs.h>
16#include "queue.h"
17#include "domcap.h"
18
19struct capsend_mc_msg_st;
20struct capsend_mc_st;
21
22typedef errval_t (*capsend_send_fn)(struct intermon_binding* /*binding*/,
23                                    intermon_caprep_t* /*caprep*/,
24                                    struct capsend_mc_st* /*user_st*/);
25
26bool capsend_handle_mc_reply(struct capsend_mc_st *mc_st); /* returns true if was last reply */
27
28struct capsend_destset {
29    coreid_t *set;
30    size_t count;
31    size_t capacity;
32};
33
34struct capsend_mc_st {
35    struct capsend_mc_msg_st *msg_st_arr;
36    int num_pending;
37    int num_queued;
38    bool do_send;
39    intermon_caprep_t caprep;
40    capsend_send_fn send_fn;
41};
42
43errval_t capsend_target(coreid_t dest,
44                        struct msg_queue_elem *queue_elem);
45
46errval_t capsend_owner(struct domcapref capref,
47                       struct msg_queue_elem *queue_elem);
48
49errval_t capsend_update_owner(struct domcapref capref,
50                              struct event_closure continuation);
51
52errval_t capsend_copies(struct capability *cap,
53                        capsend_send_fn send_fn,
54                        struct capsend_mc_st *mc_st);
55
56errval_t capsend_relations(struct capability *cap,
57                           capsend_send_fn send_fn,
58                           struct capsend_mc_st *mc_st,
59                           struct capsend_destset *dests);
60
61typedef void (*capsend_find_cap_result_fn)(errval_t, coreid_t, void*);
62
63errval_t capsend_find_cap(struct capability *cap,
64                          capsend_find_cap_result_fn result_fn,
65                          void *st);
66
67typedef void (*capsend_result_fn)(errval_t, void*);
68
69errval_t capsend_find_descendants(struct domcapref src,
70                                  capsend_result_fn result_fn,
71                                  void *st);
72
73errval_t capsend_check_retypeable(struct domcapref src, gensize_t offset,
74                                  gensize_t objsize, size_t count,
75                                  capsend_result_fn result_fn, void *st);
76
77#endif
78