Loading...
Searching...
No Matches
L4::Rcv_endpoint Class Reference

Interface for kernel objects that allow to receive IPC from them. More...

`#include <rcv_endpoint>`

Inheritance diagram for L4::Rcv_endpoint:
Collaboration diagram for L4::Rcv_endpoint:

## Public Member Functions

l4_msgtag_t | bind_thread (Ipc::Cap< Thread > t, l4_umword_t label)
| Bind the IPC receive endpoint to a thread.
l4_msgtag_t | bind_snd_destination (Cap< Snd_destination > snd_dst, l4_umword_t label)
| Bind a send destination (a thread or thread group) to an IPC receive endpoint.
Public Member Functions inherited from L4::Kobject
l4_msgtag_t | dec_refcnt (l4_mword_t diff, l4_utcb_t *utcb=l4_utcb())
| Decrement the in kernel reference counter for the object.

## Additional Inherited Members

Protected Types inherited from L4::Kobject_t< Rcv_endpoint, Kobject, L4_PROTO_KOBJECT, Type_info::Demand_t< 1 > >
typedef Rcv_endpoint | Class
| The target interface type (inheriting from Kobject_t).
typedef Typeid::Iface< PROTO, Rcv_endpoint > | __Iface
| The interface description for the derived class.
typedef Typeid::Merge_list< Typeid::Iface_list< __Iface >, typename Kobject::__Iface_list > | __Iface_list
| The list of all RPC interfaces provided directly or through inheritance.
Protected Member Functions inherited from L4::Kobject_t< Rcv_endpoint, Kobject, L4_PROTO_KOBJECT, Type_info::Demand_t< 1 > >
L4::Cap< Class > | c () const noexcept
| Get the capability to ourselves.
Protected Member Functions inherited from L4::Kobject
l4_cap_idx_t | cap () const noexcept
| Return capability selector.
Static Protected Member Functions inherited from L4::Kobject_t< Rcv_endpoint, Kobject, L4_PROTO_KOBJECT, Type_info::Demand_t< 1 > >
static void | __check_protocols__ () noexcept
| Helper to check for protocol conflicts.

## Detailed Description

Interface for kernel objects that allow to receive IPC from them.

Such an object is for example an Ipc_gate (with server rights) or an Irq. Those objects can be bound to a thread that shall receive IPC from these objects via bind_thread() or bind_snd_destination().

Definition at line 30 of file rcv_endpoint.

## Member Function Documentation

## bind_snd_destination()

l4_msgtag_t L4::Rcv_endpoint::bind_snd_destination | ( | Cap< Snd_destination > | snd_dst,
|  | l4_umword_t | label )

inline

Bind a send destination (a thread or thread group) to an IPC receive endpoint.

Parameters

  snd_dst | Snd_destination object (a thread or thread group) that shall be bound to this receive endpoint. See bind_thread() and bind_snd_destination() for binding a thread or thread group object.
  label | Label to assign to this receive endpoint. For IPC gates, the two least significant bits must be set to zero.

Returns
  Syscall return tag containing one of the following return codes.

Return values

  L4_EOK | Operation successful.
  -L4_EINVAL | snd_dst is not a thread or thread group object or other arguments were malformed.
  -L4_EPERM | No L4_CAP_FPAGE_S right on snd_dst or the capability used to invoke this operation.

Precondition
  If this operation is invoked using an IPC gate capability without the L4_FPAGE_C_IPCGATE_SVR right, the kernel will not perform the operation. Instead, the underlying IPC message will be forwarded to the thread bound to the IPC gate, blocking the caller if no thread or thread group is bound yet.

The specified label is passed to the receiver of the incoming IPC. It is possible to re-bind a receive endpoint to the same or a different thread or thread group. In this case, IPC already in flight will be delivered with the old label to the previously bound thread or thread group unless L4::Thread::modify_senders() is used to change these labels.

Definition at line 101 of file rcv_endpoint.

References L4::Cap_base::cap(), L4::Kobject::cap(), and l4_rcv_ep_bind_snd_destination().

Here is the call graph for this function:

## bind_thread()

l4_msgtag_t L4::Rcv_endpoint::bind_thread | ( | Ipc::Cap< Thread > | t,
|  | l4_umword_t | label )

Bind the IPC receive endpoint to a thread.

Parameters

  t | Thread object this receive endpoint shall be bound to.
  label | Label to assign to this receive endpoint. For IPC gates, the two least significant bits must be set to zero.

Returns
  Syscall return tag containing one of the following return codes.

Return values

  L4_EOK | Operation successful.
  -L4_EINVAL | t is not a thread object or other arguments were malformed.
  -L4_EPERM | Insufficient permissions; see precondition.

Precondition
  The invoked capability and the capability t both must have the permission L4_CAP_FPAGE_S.

Deprecated
  Use bind_snd_destination() instead.

Precondition
  If this operation is invoked using an IPC gate capability without the L4_FPAGE_C_IPCGATE_SVR right, the kernel will not perform the operation. Instead, the underlying IPC message will be forwarded to the thread the IPC gate is bound to, blocking the caller if the IPC gate was not bound yet.

The specified label is passed to the receiver of the incoming IPC. It is possible to re-bind a receive endpoint to the same or a different thread. In this case, IPC already in flight will be delivered with the old label to the previously bound thread unless L4::Thread::modify_senders() is used to change these labels.

References bind_thread().

Referenced by bind_thread().

Here is the call graph for this function:
Here is the caller graph for this function:

The documentation for this class was generated from the following file:

- l4/sys/rcv_endpoint