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