1/**
2 * \file
3 * \brief IDC declarations common to all transports
4 */
5
6/*
7 * Copyright (c) 2010, ETH Zurich.
8 * All rights reserved.
9 *
10 * This file is distributed under the terms in the attached LICENSE file.
11 * If you do not find this file, copies can be found by writing to:
12 * ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
13 */
14
15#ifndef BARRELFISH_IDC_H
16#define BARRELFISH_IDC_H
17
18#include <sys/cdefs.h>
19
20__BEGIN_DECLS
21
22/// Generic control operations on an established IDC binding
23typedef enum idc_control {
24    IDC_CONTROL_TEARDOWN,   ///< Initiate connection teardown
25    IDC_CONTROL_SET_SYNC,   ///< Enable synchronous optimisations
26    IDC_CONTROL_CLEAR_SYNC, ///< Disable synchronous optimisations
27} idc_control_t;
28
29/// Flags on an IDC export/service
30typedef enum idc_export_flags {
31    // Do not block on receipt notifications even if transport supports it
32    IDC_EXPORT_FLAG_NO_NOTIFY = 1 << 0,
33} idc_export_flags_t;
34
35#define IDC_EXPORT_FLAGS_DEFAULT 0
36
37/// Flags on an IDC bind
38typedef enum idc_bind_flags {
39    /// signals that binding will use RPCs involving capability transfer
40    /// in practice, this results in a new monitor binding for non-LMP transports
41    IDC_BIND_FLAG_RPC_CAP_TRANSFER = 1 << 0,
42    // Do not block on receipt notifications even if transport supports it
43    IDC_BIND_FLAG_NO_NOTIFY = 1 << 1,
44
45    // request a multi-hop channel
46    IDC_BIND_FLAG_MULTIHOP = 1 << 2,
47} idc_bind_flags_t;
48
49#define IDC_BIND_FLAGS_DEFAULT 0
50
51#ifdef CONFIG_INTERCONNECT_DRIVER_LMP
52#include <barrelfish/lmp_chan.h>
53#endif
54
55#ifdef CONFIG_INTERCONNECT_DRIVER_UMP
56#include <barrelfish/ump_chan.h>
57#endif
58
59#if defined(CONFIG_FLOUNDER_BACKEND_UMP_IPI)
60#include <arch/x86/barrelfish/ipi_notify.h>
61#endif
62
63#ifdef CONFIG_INTERCONNECT_DRIVER_MULTIHOP
64#include <barrelfish/multihop_chan.h>
65#endif
66
67void idc_init(void);
68
69__END_DECLS
70
71#endif // BARRELFISH_IDC_H
72