L4Re – L4 Runtime Environment
L4::Factory Class Reference

C++ Factory interface. More...

+ Inheritance diagram for L4::Factory:
+ Collaboration diagram for L4::Factory:

Data Structures

struct  Lstr
 Special type to add a pascal string into the factory create stream. More...
 
struct  Nil
 Special type to add a void argument into the factory create stream. More...
 
class  S
 Stream class for the create() argument stream. More...
 

Public Member Functions

S create (Cap< void > target, long obj, l4_utcb_t *utcb=l4_utcb()) noexcept
 Generic create call to the factory. More...
 
template<typename OBJ >
S create (Cap< OBJ > target, l4_utcb_t *utcb=l4_utcb()) noexcept
 Create call for typed capabilities. More...
 
l4_msgtag_t create_task (Cap< Task > const &target_cap, l4_fpage_t const &utcb_area, l4_utcb_t *utcb=l4_utcb()) noexcept
 Create a new task. More...
 
l4_msgtag_t create_thread (Cap< Thread > const &target_cap, l4_utcb_t *utcb=l4_utcb()) noexcept
 Create a new thread. More...
 
l4_msgtag_t create_factory (Cap< Factory > const &target_cap, unsigned long limit, l4_utcb_t *utcb=l4_utcb()) noexcept
 Create a new factory. More...
 
l4_msgtag_t create_gate (Cap< void > const &target_cap, Cap< Thread > const &thread_cap, l4_umword_t label, l4_utcb_t *utcb=l4_utcb()) noexcept
 Create a new IPC gate. More...
 
l4_msgtag_t create_irq (Cap< Irq >const &target_cap, l4_utcb_t *utcb=l4_utcb()) throw ()
 Create a new IRQ. More...
 
l4_msgtag_t create_vm (Cap< Vm >const &target_cap, l4_utcb_t *utcb=l4_utcb()) noexcept
 Create a new virtual machine. More...
 
- 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. More...
 

Additional Inherited Members

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

Detailed Description

C++ Factory interface.

Factories provide an interface to create objects which are accessed via capabilities.

For additional information about which objects can be created via this interface, see server-specific information in Kernel Factory and L4Re Servers.

Include File
#include <l4/sys/factory>
Common factory related definitions.

For the C interface refer to Factory.

Definition at line 48 of file factory.

Member Function Documentation

◆ create() [1/2]

template<typename OBJ >
S L4::Factory::create ( Cap< OBJ >  target,
l4_utcb_t utcb = l4_utcb() 
)
inlinenoexcept

Create call for typed capabilities.

Template Parameters
OBJCapability type of the object to be created.
Parameters
[out]targetCapability of type OBJ.
utcbUTCB to use.
Returns
A create stream that allows additional arguments to be passed to the create() call via the left-shift (<<) operator.

This method does not directly invoke the factory. The factory is invoked when the create stream returned by this method is converted to an l4_msgtag_t, or otherwise when the stream goes out of scope.

Note
The create stream uses the UTCB to store parameters for the service call. During the lifetime of a create stream or, until it is converted to a l4_msgtag_t, other UTCB-using operations must not be used.

Usage:

factory->create(ds) << l4_mword_t(size_in_bytes);
Interface for memory-like objects.
Definition: dataspace:63
L4::Cap< void > alloc() noexcept
Allocate a new capability slot.
signed long l4_mword_t
Signed machine word.
Definition: l4int.h:48
_Cap_alloc & cap_alloc
Capability allocator.

Definition at line 308 of file factory.

References L4::Kobject::cap().

+ Here is the call graph for this function:

◆ create() [2/2]

S L4::Factory::create ( Cap< void >  target,
long  obj,
l4_utcb_t utcb = l4_utcb() 
)
inlinenoexcept

Generic create call to the factory.

Parameters
[out]targetCapability selector for the new object. The caller must allocate the capability slot. The kernel stores the new objects's capability into this slot.
objThe protocol ID that specifies which kind of object shall be created.
utcbThe UTCB to use for the operation.
Returns
A create stream that allows additional arguments to be passed to the create() call via the left-shift (<<) operator.

This method does not directly invoke the factory. The factory is invoked when the create stream returned by this method is converted to an l4_msgtag_t, or otherwise when the stream goes out of scope.

Note
The create stream uses the UTCB to store parameters for the service call. During the lifetime of a create stream or, until it is converted to a l4_msgtag_t, other UTCB-using operations must not be used.
See also
create(Cap<OBJ>, l4_utcb_t *)

Definition at line 277 of file factory.

References L4::Kobject::cap().

Referenced by L4Re::Mem_alloc::alloc().

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

◆ create_factory()

l4_msgtag_t L4::Factory::create_factory ( Cap< Factory > const &  target_cap,
unsigned long  limit,
l4_utcb_t utcb = l4_utcb() 
)
inlinenoexcept

Create a new factory.

Parameters
[out]target_capThe kernel stores the new factory's capability into this slot.
limitLimit for the new factory in bytes.
utcbThe UTCB to use for the operation.
Returns
Syscall return tag
Note
The limit (quota) of the new factory is subtracted from the limit of the factory invoked on its creation.
This method is only guaranteed to work with the Kernel Factory. For other services, use the generic create() method and consult the service documentation for information on the arguments that need to be passed to the create stream.

Definition at line 383 of file factory.

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

+ Here is the call graph for this function:

◆ create_gate()

l4_msgtag_t L4::Factory::create_gate ( Cap< void > const &  target_cap,
Cap< Thread > const &  thread_cap,
l4_umword_t  label,
l4_utcb_t utcb = l4_utcb() 
)
inlinenoexcept

Create a new IPC gate.

Parameters
[out]target_capThe kernel stores the new IPC gate's capability into this slot.
thread_capOptional capability selector of the thread to bind the gate to. Use L4_INVALID_CAP to create an unbound IPC gate.
labelOptional label of the gate (is used if thread_cap is valid).
utcbThe UTCB to use for the operation.
Returns
Syscall return tag containing one of the following return codes.
Return values
L4_EOKNo error occurred.
-L4_ENOMEMOut-of-memory during allocation of the Ipc_gate object.
-L4_ENOENTthread_cap is void or points to something that is not a thread.
-L4_EPERMNo L4_CAP_FPAGE_S rights on thread_cap.

An unbound IPC gate can be bound to a thread using L4::Ipc_gate::bind_thread().

Note
This method is only guaranteed to work with the Kernel Factory.
See also
L4::Ipc_gate

Definition at line 416 of file factory.

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

+ Here is the call graph for this function:

◆ create_irq()

l4_msgtag_t L4::Factory::create_irq ( Cap< Irq >const &  target_cap,
l4_utcb_t utcb = l4_utcb() 
)
throw (
)
inline

Create a new IRQ.

Parameters
[out]target_capThe kernel stores the new IRQ's capability into this slot.
utcbThe UTCB to use for the operation.
Returns
Syscall return tag
Deprecated:
Use create() with Cap<Irq> as argument instead.
See also
L4::Irq

Definition at line 434 of file factory.

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

+ Here is the call graph for this function:

◆ create_task()

l4_msgtag_t L4::Factory::create_task ( Cap< Task > const &  target_cap,
l4_fpage_t const &  utcb_area,
l4_utcb_t utcb = l4_utcb() 
)
inlinenoexcept

Create a new task.

Parameters
[out]target_capThe kernel stores the new task's capability into this slot.
utcb_areaFlexpage that describes an area in the address space of the new task, where the kernel should map the kernel-allocated kernel-user memory to. The kernel uses the kernel-user memory to store UTCBs and vCPU state-save-areas of the new task.
utcbThe UTCB to use for the operation.
Returns
Syscall return tag
Note
The size of the UTCB area specifies indirectly the number of UTCBs available for this task. Refer to L4::Task::add_ku_mem / l4_task_add_ku_mem() for adding more of this type of memory.
This method is only guaranteed to work with the Kernel Factory.
See also
L4::Task

Definition at line 341 of file factory.

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

+ Here is the call graph for this function:

◆ create_thread()

l4_msgtag_t L4::Factory::create_thread ( Cap< Thread > const &  target_cap,
l4_utcb_t utcb = l4_utcb() 
)
inlinenoexcept

Create a new thread.

Parameters
[out]target_capThe kernel stores the new thread's capability into this slot.
utcbThe UTCB to use for the operation.
Returns
Syscall return tag
Deprecated:
Use create() with Cap<Thread> as argument instead.
See also
L4::Thread

Definition at line 359 of file factory.

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

+ Here is the call graph for this function:

◆ create_vm()

l4_msgtag_t L4::Factory::create_vm ( Cap< Vm >const &  target_cap,
l4_utcb_t utcb = l4_utcb() 
)
inlinenoexcept

Create a new virtual machine.

Parameters
[out]target_capThe kernel stores the new VM's capability into this slot.
utcbThe UTCB to use for the operation.
Returns
Syscall return tag
Deprecated:
Use create() with Cap<Vm> as argument instead.
See also
L4::Vm

Definition at line 452 of file factory.

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

+ Here is the call graph for this function:

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