1// vi:set ft=cpp: -*- Mode: C++ -*- 2/* 3 * Copyright (C) 2015 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 50