L4Re - L4 Runtime Environment
rcv_endpoint
Go to the documentation of this file.
1 // vi:set ft=cpp: -*- Mode: C++ -*-
2 /**
3  * \file
4  * The C++ Receive endpoint interface.
5  */
6 /*
7  * (c) 2017 Alexander Warg <alexander.warg@kernkonzept.com>
8  *
9  * This file is part of TUD:OS and distributed under the terms of the
10  * GNU General Public License 2.
11  * Please see the COPYING-GPL-2 file for details.
12  *
13  * As a special exception, you may use this file as part of a free software
14  * library without restriction. Specifically, if other files instantiate
15  * templates or use macros or inline functions from this file, or you compile
16  * this file and link it with other files to produce an executable, this
17  * file does not by itself cause the resulting executable to be covered by
18  * the GNU General Public License. This exception does not however
19  * invalidate any other reasons why the executable file might be covered by
20  * the GNU General Public License.
21  */
22 #pragma once
23 
24 #include <l4/sys/rcv_endpoint.h>
25 #include <l4/sys/types.h>
26 #include <l4/sys/capability>
27 #include <l4/sys/cxx/ipc_iface>
28 
29 namespace L4 {
30 
31 class Thread;
32 
33 /**
34  * Interface for kernel objects that allow to receive IPC from them.
35  *
36  * Such an object is for example an Ipc_gate (with server rights) or an
37  * Irq_sender. Those objects allow to bind a thread that shall receive IPC from
38  * these object via bind_thread().
39  */
40 class L4_EXPORT Rcv_endpoint :
41  public Kobject_t<Rcv_endpoint, Kobject, L4_PROTO_KOBJECT,
42  Type_info::Demand_t<1> >
43 {
44 public:
45  /**
46  * Bind a thread to an IPC receive endpoint.
47  *
48  * \param t Thread object that shall be bound to this receive endpoint.
49  * \param label Label to assign to `this` receive endpoint. The two least
50  * significant bits should usually be set to zero.
51  *
52  * \return Syscall return tag containing one of the following return codes.
53  *
54  * \retval L4_EOK Operation successful.
55  * \retval -L4_EINVAL `t` is not a thread object or other arguments were
56  * malformed.
57  * \retval -L4_EPERM `t` is missing #L4_CAP_FPAGE_S right.
58  */
59  L4_INLINE_RPC_OP(L4_RCV_EP_BIND_OP,
60  l4_msgtag_t, bind_thread, (Ipc::Opt<Ipc::Cap<Thread> > t, l4_umword_t label));
61 
62  typedef L4::Typeid::Rpcs_sys<bind_thread_t> Rpcs;
63 };
64 
65 }