L4Re Operating System Framework
Interface and Usage Documentation
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
ipc_legacy
1// vi:set ft=cpp: -*- Mode: C++ -*-
2/*
3 * Copyright (C) 2015, 2017, 2024 Kernkonzept GmbH.
4 * Author(s): Alexander Warg <alexander.warg@kernkonzept.com>
5 *
6 * License: see LICENSE.spdx (in this directory or the directories above)
7 */
8#pragma once
9
10#include <l4/sys/cxx/ipc_epiface>
11#ifndef L4_RPC_DISABLE_LEGACY_DISPATCH
12#define L4_RPC_LEGACY_DISPATCH(IFACE) \
13 template<typename IOS> \
14 int dispatch(unsigned rights, IOS &ios) \
15 { \
16 typedef ::L4::Ipc::Detail::Dispatch<IFACE> Dispatch; \
17 l4_msgtag_t r = Dispatch::f(this, ios.tag(), rights, ios.utcb()); \
18 ios.set_ipc_params(r); \
19 return r.label(); \
20 } \
21 \
22 template<typename IOS> \
23 int p_dispatch(IFACE *, unsigned rights, IOS &ios) \
24 { \
25 using ::L4::Ipc::Msg::dispatch_call; \
26 l4_msgtag_t r; \
27 r = dispatch_call<typename IFACE::Rpcs>(this, ios.utcb(), \
28 ios.tag(), rights); \
29 ios.set_ipc_params(r); \
30 return r.label(); \
31 }
32
33#define L4_RPC_LEGACY_USING(IFACE) \
34 using IFACE::p_dispatch
35
36#else
37#define L4_RPC_LEGACY_DISPATCH(IFACE)
38#define L4_RPC_LEGACY_USING(IFACE)
39#endif