L4Re Operating System Framework – Interface and Usage Documentation
Loading...
Searching...
No Matches
ipc_legacy
1// vi:set ft=cpp: -*- Mode: C++ -*-
2/*
3 * Copyright (C) 2015, 2017 Kernkonzept GmbH.
4 * Author(s): Alexander Warg <alexander.warg@kernkonzept.com>
5 *
6 * This file is distributed under the terms of the GNU General Public
7 * License, version 2. Please see the COPYING-GPL-2 file for details.
8 *
9 * As a special exception, you may use this file as part of a free software
10 * library without restriction. Specifically, if other files instantiate
11 * templates or use macros or inline functions from this file, or you compile
12 * this file and link it with other files to produce an executable, this
13 * file does not by itself cause the resulting executable to be covered by
14 * the GNU General Public License. This exception does not however
15 * invalidate any other reasons why the executable file might be covered by
16 * the GNU General Public License.
17 */
18#pragma once
19
20#include <l4/sys/cxx/ipc_epiface>
21#ifndef L4_RPC_DISABLE_LEGACY_DISPATCH
22#define L4_RPC_LEGACY_DISPATCH(IFACE) \
23 template<typename IOS> \
24 int dispatch(unsigned rights, IOS &ios) \
25 { \
26 typedef ::L4::Ipc::Detail::Dispatch<IFACE> Dispatch; \
27 l4_msgtag_t r = Dispatch::f(this, ios.tag(), rights, ios.utcb()); \
28 ios.set_ipc_params(r); \
29 return r.label(); \
30 } \
31 \
32 template<typename IOS> \
33 int p_dispatch(IFACE *, unsigned rights, IOS &ios) \
34 { \
35 using ::L4::Ipc::Msg::dispatch_call; \
36 l4_msgtag_t r; \
37 r = dispatch_call<typename IFACE::Rpcs>(this, ios.utcb(), \
38 ios.tag(), rights); \
39 ios.set_ipc_params(r); \
40 return r.label(); \
41 }
42
43#define L4_RPC_LEGACY_USING(IFACE) \
44 using IFACE::p_dispatch
45
46#else
47#define L4_RPC_LEGACY_DISPATCH(IFACE)
48#define L4_RPC_LEGACY_USING(IFACE)
49#endif