Files
moslab-code/doc/source/html/classL4_1_1Factory.html
2025-09-12 15:55:45 +02:00

603 lines
54 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!-- HTML header for doxygen 1.9.1-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.15.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>L4Re Operating System Framework: L4::Factory Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="doxygen-awesome.css" rel="stylesheet" type="text/css"/>
<link href="l4re-awesome.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="L4Re_rgb_logo_quer_hg_h55.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">L4Re Operating System Framework
</div>
<div id="projectbrief">Interface and Usage Documentation</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.15.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(function(){initNavTree('classL4_1_1Factory.html','',''); });
</script>
<div id="container">
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="headertitle"><div class="title">L4::Factory Class Reference</div></div>
</div><!--header-->
<div class="contents">
<p>C++ Factory interface, see <a class="el" href="group__l4__factory__api.html">Factory</a> for the C interface.
<a href="#details">More...</a></p>
<p><code>#include &lt;<a class="el" href="factory_source.html">factory</a>&gt;</code></p>
<div id="dynsection-0" onclick="return dynsection.toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;"><span class="dynarrow"><span class="arrowhead closed"></span></span>Inheritance diagram for L4::Factory:</div>
<div id="dynsection-0-summary" class="dynsummary" style="display:block;">
</div>
<div id="dynsection-0-content" class="dyncontent" style="display:none;">
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="classL4_1_1Factory__inherit__graph.svg" width="372" height="815"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
</div>
<div id="dynsection-1" onclick="return dynsection.toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;"><span class="dynarrow"><span class="arrowhead closed"></span></span>Collaboration diagram for L4::Factory:</div>
<div id="dynsection-1-summary" class="dynsummary" style="display:block;">
</div>
<div id="dynsection-1-content" class="dyncontent" style="display:none;">
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="classL4_1_1Factory__coll__graph.svg" width="372" height="516"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
</div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-nested-classes" class="groupheader"><a id="nested-classes" name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr class="memitem:Nil" id="r_Nil"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structL4_1_1Factory_1_1Nil.html">Nil</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Special type to add a void argument into the factory create stream. <a href="structL4_1_1Factory_1_1Nil.html#details">More...</a><br /></td></tr>
<tr class="memitem:Lstr" id="r_Lstr"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structL4_1_1Factory_1_1Lstr.html">Lstr</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Special type to add a pascal string into the factory create stream. <a href="structL4_1_1Factory_1_1Lstr.html#details">More...</a><br /></td></tr>
<tr class="memitem:S" id="r_S"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classL4_1_1Factory_1_1S.html">S</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Stream class for the <a class="el" href="#ab52604d4abed4d6009ce51a59492edd7" title="Generic create call to the factory.">create()</a> argument stream. <a href="classL4_1_1Factory_1_1S.html#details">More...</a><br /></td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-pub-methods" class="groupheader"><a id="pub-methods" name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:ab52604d4abed4d6009ce51a59492edd7" id="r_ab52604d4abed4d6009ce51a59492edd7"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classL4_1_1Factory_1_1S.html">S</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ab52604d4abed4d6009ce51a59492edd7">create</a> (<a class="el" href="classL4_1_1Cap.html">Cap</a>&lt; void &gt; target, long obj, <a class="el" href="group__l4__utcb__api.html#ga89be8a86d11c1d532b636cc2df1330fb">l4_utcb_t</a> *utcb=<a class="el" href="group__l4__utcb__api.html#gadc099b4a59e1d99638c72c11a8c8b644">l4_utcb</a>()) noexcept</td></tr>
<tr class="memdesc:ab52604d4abed4d6009ce51a59492edd7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Generic create call to the factory. <br /></td></tr>
<tr class="memitem:add39d432a64a16aec33abeefcb3ba1cd" id="r_add39d432a64a16aec33abeefcb3ba1cd"><td class="memTemplParams" colspan="2">template&lt;typename OBJ&gt; </td></tr>
<tr class="memitem:add39d432a64a16aec33abeefcb3ba1cd template"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classL4_1_1Factory_1_1S.html">S</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#add39d432a64a16aec33abeefcb3ba1cd">create</a> (<a class="el" href="classL4_1_1Cap.html">Cap</a>&lt; OBJ &gt; target, <a class="el" href="group__l4__utcb__api.html#ga89be8a86d11c1d532b636cc2df1330fb">l4_utcb_t</a> *utcb=<a class="el" href="group__l4__utcb__api.html#gadc099b4a59e1d99638c72c11a8c8b644">l4_utcb</a>()) noexcept</td></tr>
<tr class="memdesc:add39d432a64a16aec33abeefcb3ba1cd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create call for typed capabilities. <br /></td></tr>
<tr class="memitem:a491c8f5113bb68cd402db1eb59ac76ea" id="r_a491c8f5113bb68cd402db1eb59ac76ea"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a491c8f5113bb68cd402db1eb59ac76ea">create_task</a> (<a class="el" href="classL4_1_1Cap.html">Cap</a>&lt; <a class="el" href="classL4_1_1Task.html">Task</a> &gt; const &amp;target_cap, <a class="el" href="unionl4__fpage__t.html">l4_fpage_t</a> *utcb_area, <a class="el" href="group__l4__utcb__api.html#ga89be8a86d11c1d532b636cc2df1330fb">l4_utcb_t</a> *utcb=<a class="el" href="group__l4__utcb__api.html#gadc099b4a59e1d99638c72c11a8c8b644">l4_utcb</a>()) noexcept</td></tr>
<tr class="memdesc:a491c8f5113bb68cd402db1eb59ac76ea"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create a new task. <br /></td></tr>
<tr class="memitem:a014721aec27ad4877555d5f4b7204896" id="r_a014721aec27ad4877555d5f4b7204896"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a014721aec27ad4877555d5f4b7204896">create_factory</a> (<a class="el" href="classL4_1_1Cap.html">Cap</a>&lt; <a class="el" href="classL4_1_1Factory.html">Factory</a> &gt; const &amp;target_cap, unsigned long limit, <a class="el" href="group__l4__utcb__api.html#ga89be8a86d11c1d532b636cc2df1330fb">l4_utcb_t</a> *utcb=<a class="el" href="group__l4__utcb__api.html#gadc099b4a59e1d99638c72c11a8c8b644">l4_utcb</a>()) noexcept</td></tr>
<tr class="memdesc:a014721aec27ad4877555d5f4b7204896"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create a new factory. <br /></td></tr>
<tr class="memitem:a79b67bcf639db7fd92b399d44ab272a8" id="r_a79b67bcf639db7fd92b399d44ab272a8"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a79b67bcf639db7fd92b399d44ab272a8">create_gate</a> (<a class="el" href="classL4_1_1Cap.html">Cap</a>&lt; void &gt; const &amp;target_cap, <a class="el" href="classL4_1_1Cap.html">Cap</a>&lt; Snd_destination &gt; const &amp;snd_dst_cap, <a class="el" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a> label, <a class="el" href="group__l4__utcb__api.html#ga89be8a86d11c1d532b636cc2df1330fb">l4_utcb_t</a> *utcb=<a class="el" href="group__l4__utcb__api.html#gadc099b4a59e1d99638c72c11a8c8b644">l4_utcb</a>()) noexcept</td></tr>
<tr class="memdesc:a79b67bcf639db7fd92b399d44ab272a8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create a new IPC gate, optionally bound to a send destination (a thread or thread group). <br /></td></tr>
<tr class="memitem:a6b0504bc01000ccbeaf137b20e7284c5" id="r_a6b0504bc01000ccbeaf137b20e7284c5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a6b0504bc01000ccbeaf137b20e7284c5">create_thread_group</a> (<a class="el" href="classL4_1_1Cap.html">Cap</a>&lt; <a class="el" href="classL4_1_1Thread__group.html">Thread_group</a> &gt; const &amp;target_cap, unsigned policy, <a class="el" href="group__l4__utcb__api.html#ga89be8a86d11c1d532b636cc2df1330fb">l4_utcb_t</a> *utcb=<a class="el" href="group__l4__utcb__api.html#gadc099b4a59e1d99638c72c11a8c8b644">l4_utcb</a>()) noexcept</td></tr>
<tr class="memdesc:a6b0504bc01000ccbeaf137b20e7284c5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create a new thread group. <br /></td></tr>
<tr class="inherit_header pub_methods_classL4_1_1Kobject"><td colspan="2" onclick="javascript:dynsection.toggleInherit('pub_methods_classL4_1_1Kobject')"><span class="dynarrow"><span class="arrowhead closed"></span></span>Public Member Functions inherited from <a class="el" href="classL4_1_1Kobject.html">L4::Kobject</a></td></tr>
<tr class="memitem:a9fe009599de49f1af438ff49998faec0 inherit pub_methods_classL4_1_1Kobject" id="r_a9fe009599de49f1af438ff49998faec0"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classL4_1_1Kobject.html#a9fe009599de49f1af438ff49998faec0">dec_refcnt</a> (<a class="el" href="group__l4__basic__types.html#ga51d9492e7700d70ed35838154ca9b279">l4_mword_t</a> diff, <a class="el" href="group__l4__utcb__api.html#ga89be8a86d11c1d532b636cc2df1330fb">l4_utcb_t</a> *utcb=<a class="el" href="group__l4__utcb__api.html#gadc099b4a59e1d99638c72c11a8c8b644">l4_utcb</a>())</td></tr>
<tr class="memdesc:a9fe009599de49f1af438ff49998faec0 inherit pub_methods_classL4_1_1Kobject"><td class="mdescLeft">&#160;</td><td class="mdescRight">Decrement the in kernel reference counter for the object. <br /></td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-inherited" class="groupheader"><a id="inherited" name="inherited"></a>
Additional Inherited Members</h2></td></tr>
<tr class="inherit_header pro_types_classL4_1_1Kobject__t"><td colspan="2" onclick="javascript:dynsection.toggleInherit('pro_types_classL4_1_1Kobject__t')"><span class="dynarrow"><span class="arrowhead closed"></span></span>Protected Types inherited from <a class="el" href="classL4_1_1Kobject__t.html">L4::Kobject_t&lt; Factory, Kobject, L4_PROTO_FACTORY &gt;</a></td></tr>
<tr class="memitem:af7df35ba5bf68ef5993e605a6b62328a inherit pro_types_classL4_1_1Kobject__t" id="r_af7df35ba5bf68ef5993e605a6b62328a"><td class="memItemLeft" align="right" valign="top">
typedef <a class="el" href="classL4_1_1Factory.html">Factory</a>&#160;</td><td class="memItemRight" valign="bottom"><b>Class</b></td></tr>
<tr class="memdesc:af7df35ba5bf68ef5993e605a6b62328a inherit pro_types_classL4_1_1Kobject__t"><td class="mdescLeft">&#160;</td><td class="mdescRight">The target interface type (inheriting from <a class="el" href="classL4_1_1Kobject__t.html" title="Helper class to create an L4Re interface class that is derived from a single base class.">Kobject_t</a>). <br /></td></tr>
<tr class="memitem:a0d83157994565e9c01f10006bdda2efa inherit pro_types_classL4_1_1Kobject__t" id="r_a0d83157994565e9c01f10006bdda2efa"><td class="memItemLeft" align="right" valign="top">
typedef Typeid::Iface&lt; PROTO, <a class="el" href="classL4_1_1Factory.html">Factory</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>__Iface</b></td></tr>
<tr class="memdesc:a0d83157994565e9c01f10006bdda2efa inherit pro_types_classL4_1_1Kobject__t"><td class="mdescLeft">&#160;</td><td class="mdescRight">The interface description for the derived class. <br /></td></tr>
<tr class="memitem:afc2feec2f4a15e85286aabfa15c53e06 inherit pro_types_classL4_1_1Kobject__t" id="r_afc2feec2f4a15e85286aabfa15c53e06"><td class="memItemLeft" align="right" valign="top">
typedef Typeid::Merge_list&lt; Typeid::Iface_list&lt; <a class="el" href="classL4_1_1Kobject__t.html#a0d83157994565e9c01f10006bdda2efa">__Iface</a> &gt;, typename Kobject::__Iface_list &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>__Iface_list</b></td></tr>
<tr class="memdesc:afc2feec2f4a15e85286aabfa15c53e06 inherit pro_types_classL4_1_1Kobject__t"><td class="mdescLeft">&#160;</td><td class="mdescRight">The list of all RPC interfaces provided directly or through inheritance. <br /></td></tr>
<tr class="inherit_header pro_methods_classL4_1_1Kobject__t"><td colspan="2" onclick="javascript:dynsection.toggleInherit('pro_methods_classL4_1_1Kobject__t')"><span class="dynarrow"><span class="arrowhead closed"></span></span>Protected Member Functions inherited from <a class="el" href="classL4_1_1Kobject__t.html">L4::Kobject_t&lt; Factory, Kobject, L4_PROTO_FACTORY &gt;</a></td></tr>
<tr class="memitem:a3d80fec7e057d575ec4b393437f05f8a inherit pro_methods_classL4_1_1Kobject__t" id="r_a3d80fec7e057d575ec4b393437f05f8a"><td class="memItemLeft" align="right" valign="top">
<a class="el" href="classL4_1_1Cap.html">L4::Cap</a>&lt; <a class="el" href="classL4_1_1Kobject__t.html#af7df35ba5bf68ef5993e605a6b62328a">Class</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>c</b> () const noexcept</td></tr>
<tr class="memdesc:a3d80fec7e057d575ec4b393437f05f8a inherit pro_methods_classL4_1_1Kobject__t"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the capability to ourselves. <br /></td></tr>
<tr class="inherit_header pro_methods_classL4_1_1Kobject"><td colspan="2" onclick="javascript:dynsection.toggleInherit('pro_methods_classL4_1_1Kobject')"><span class="dynarrow"><span class="arrowhead closed"></span></span>Protected Member Functions inherited from <a class="el" href="classL4_1_1Kobject.html">L4::Kobject</a></td></tr>
<tr class="memitem:a4f2117ae76762f4084e6a1adb915863c inherit pro_methods_classL4_1_1Kobject" id="r_a4f2117ae76762f4084e6a1adb915863c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classL4_1_1Kobject.html#a4f2117ae76762f4084e6a1adb915863c">cap</a> () const noexcept</td></tr>
<tr class="memdesc:a4f2117ae76762f4084e6a1adb915863c inherit pro_methods_classL4_1_1Kobject"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return capability selector. <br /></td></tr>
<tr class="inherit_header pro_static_methods_classL4_1_1Kobject__t"><td colspan="2" onclick="javascript:dynsection.toggleInherit('pro_static_methods_classL4_1_1Kobject__t')"><span class="dynarrow"><span class="arrowhead closed"></span></span>Static Protected Member Functions inherited from <a class="el" href="classL4_1_1Kobject__t.html">L4::Kobject_t&lt; Factory, Kobject, L4_PROTO_FACTORY &gt;</a></td></tr>
<tr class="memitem:a7433b8eed587278821dd496864f75363 inherit pro_static_methods_classL4_1_1Kobject__t" id="r_a7433b8eed587278821dd496864f75363"><td class="memItemLeft" align="right" valign="top">
static void&#160;</td><td class="memItemRight" valign="bottom"><b>__check_protocols__</b> () noexcept</td></tr>
<tr class="memdesc:a7433b8eed587278821dd496864f75363 inherit pro_static_methods_classL4_1_1Kobject__t"><td class="mdescLeft">&#160;</td><td class="mdescRight">Helper to check for protocol conflicts. <br /></td></tr>
</table>
<a name="details" id="details"></a><h2 id="header-details" class="groupheader">Detailed Description</h2>
<div class="textblock"><p>C++ Factory interface, see <a class="el" href="group__l4__factory__api.html">Factory</a> for the C interface. </p>
<p>Factories provide an interface to create objects which are accessed via capabilities.</p>
<p>For additional information about which objects can be created via this interface, see server-specific information in <a class="el" href="l4re_concepts_kernel_factory.html">Kernel Factory</a> and <a class="el" href="l4re_servers.html">L4Re Servers</a>.</p>
<dl class="section user"><dt>Include File</dt><dd><div class="fragment"><div class="line"><span class="preprocessor">#include &lt;<a class="code" href="factory.html">l4/sys/factory</a>&gt;</span> </div>
<div class="ttc" id="afactory_html"><div class="ttname"><a href="factory.html">factory</a></div><div class="ttdoc">Common factory related definitions.</div></div>
</div><!-- fragment --></dd></dl>
<p>For the C interface refer to <a class="el" href="group__l4__factory__api.html">Factory</a>. </p>
<p class="definition">Definition at line <a class="el" href="factory_source.html#l00038">38</a> of file <a class="el" href="factory_source.html">factory</a>.</p>
</div><a name="doc-func-members" id="doc-func-members"></a><h2 id="header-doc-func-members" class="groupheader">Member Function Documentation</h2>
<a id="add39d432a64a16aec33abeefcb3ba1cd" name="add39d432a64a16aec33abeefcb3ba1cd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#add39d432a64a16aec33abeefcb3ba1cd">&#9670;&#160;</a></span>create() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename OBJ&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classL4_1_1Factory_1_1S.html">S</a> L4::Factory::create </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classL4_1_1Cap.html">Cap</a>&lt; OBJ &gt;</td> <td class="paramname"><span class="paramname"><em>target</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__l4__utcb__api.html#ga89be8a86d11c1d532b636cc2df1330fb">l4_utcb_t</a> *</td> <td class="paramname"><span class="paramname"><em>utcb</em></span><span class="paramdefsep"> = </span><span class="paramdefval"><a class="el" href="group__l4__utcb__api.html#gadc099b4a59e1d99638c72c11a8c8b644">l4_utcb</a>()</span>&#160;)</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel inline">inline</span><span class="mlabel noexcept">noexcept</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Create call for typed capabilities. </p>
<dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
<tr><td class="paramname">OBJ</td><td>Capability type of the object to be created. </td></tr>
</table>
</dd>
</dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[out]</td><td class="paramname">target</td><td>Capability of type OBJ. </td></tr>
<tr><td class="paramdir"></td><td class="paramname">utcb</td><td>UTCB to be used for this operation, shall be the UTCB of the calling thread. Defaults to <a class="el" href="group__l4__utcb__api.html#gadc099b4a59e1d99638c72c11a8c8b644" title="Get the UTCB address.">l4_utcb</a>.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>A create stream that allows additional arguments to be passed to the <span class="tt">create()</span> call via the left-shift (&lt;&lt;) operator (see #S::operator &lt;&lt;).</dd></dl>
<p>This method does not directly invoke the factory. The factory is invoked when the create stream returned by this method is converted to an <a class="el" href="structl4__msgtag__t.html" title="Message tag data structure.">l4_msgtag_t</a> (see <a class="el" href="classL4_1_1Factory_1_1S.html#af01d7ba40ace8862c0b670e1fb705810" title="Explicitly commits the operation and returns the result.">S::operator l4_msgtag_t()</a>), or otherwise when the stream goes out of scope (not rcommended; see #S::~S()).</p>
<dl class="section pre"><dt>Precondition</dt><dd>The invoked <a class="el" href="classL4_1_1Factory.html" title="C++ Factory interface, see Factory for the C interface.">Factory</a> capability must have the permission <a class="el" href="group__l4__fpage__api.html#ggaee60789a48cab2782f5a368237591b39acb2b2e95f6be245f64937ac48a068066" title="Interface specific &#39;S&#39; right for capability flexpages.">L4_CAP_FPAGE_S</a>, otherwise the later factory IPC will fail with <a class="el" href="group__l4__error__api.html#ggab4c8abc71ffa221a25c1ca5840a354f9ae679aa95cfccf769e6d8e7ddb746fdc8" title="No permission.">L4_EPERM</a> (see <a class="el" href="classL4_1_1Factory_1_1S.html#af01d7ba40ace8862c0b670e1fb705810" title="Explicitly commits the operation and returns the result.">S::operator l4_msgtag_t()</a>).</dd></dl>
<dl class="section note"><dt>Note</dt><dd>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 an <a class="el" href="structl4__msgtag__t.html" title="Message tag data structure.">l4_msgtag_t</a>, other UTCB-using operations must not be used.</dd></dl>
<p>Usage: </p><div class="fragment"><div class="line"><a class="code hl_class" href="classL4_1_1Cap.html">L4::Cap&lt;L4Re::Dataspace&gt;</a> ds = <a class="code hl_variable" href="group__l4re__cap__api.html#ga29e3dbeb3c8ed0609519c9df212c9c52">L4Re::Util::cap_alloc</a>.alloc&lt;<a class="code hl_class" href="classL4Re_1_1Dataspace.html">L4Re::Dataspace</a>&gt;();</div>
<div class="line">factory-&gt;create(ds) &lt;&lt; <a class="code hl_typedef" href="group__l4__basic__types.html#ga51d9492e7700d70ed35838154ca9b279">l4_mword_t</a>(size_in_bytes);</div>
<div class="ttc" id="aclassL4Re_1_1Dataspace_html"><div class="ttname"><a href="classL4Re_1_1Dataspace.html">L4Re::Dataspace</a></div><div class="ttdoc">Interface for memory-like objects.</div><div class="ttdef"><b>Definition</b> <a href="dataspace_source.html#l00050">dataspace:53</a></div></div>
<div class="ttc" id="aclassL4_1_1Cap_html"><div class="ttname"><a href="classL4_1_1Cap.html">L4::Cap</a></div><div class="ttdoc">C++ interface for capabilities.</div><div class="ttdef"><b>Definition</b> <a href="capability_8h_source.html#l00223">capability.h:224</a></div></div>
<div class="ttc" id="agroup__l4__basic__types_html_ga51d9492e7700d70ed35838154ca9b279"><div class="ttname"><a href="group__l4__basic__types.html#ga51d9492e7700d70ed35838154ca9b279">l4_mword_t</a></div><div class="ttdeci">signed long l4_mword_t</div><div class="ttdoc">Signed machine word.</div><div class="ttdef"><b>Definition</b> <a href="l4_2sys_2l4int_8h_source.html#l00037">l4int.h:37</a></div></div>
<div class="ttc" id="agroup__l4re__cap__api_html_ga29e3dbeb3c8ed0609519c9df212c9c52"><div class="ttname"><a href="group__l4re__cap__api.html#ga29e3dbeb3c8ed0609519c9df212c9c52">L4Re::Util::cap_alloc</a></div><div class="ttdeci">_Cap_alloc &amp; cap_alloc</div><div class="ttdoc">Capability allocator.</div></div>
</div><!-- fragment -->
<p class="definition">Definition at line <a class="el" href="factory_source.html#l00329">329</a> of file <a class="el" href="factory_source.html">factory</a>.</p>
<p class="reference">References <a class="el" href="kobject_source.html#l00069">L4::Kobject::cap()</a>.</p>
<div id="dynsection-2" onclick="return dynsection.toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;"><span class="dynarrow"><span class="arrowhead closed"></span></span>Here is the call graph for this function:</div>
<div id="dynsection-2-summary" class="dynsummary" style="display:block;">
</div>
<div id="dynsection-2-content" class="dyncontent" style="display:none;">
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="classL4_1_1Factory_add39d432a64a16aec33abeefcb3ba1cd_cgraph.svg" width="323" height="36"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
</div>
</div>
</div>
<a id="ab52604d4abed4d6009ce51a59492edd7" name="ab52604d4abed4d6009ce51a59492edd7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab52604d4abed4d6009ce51a59492edd7">&#9670;&#160;</a></span>create() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classL4_1_1Factory_1_1S.html">S</a> L4::Factory::create </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classL4_1_1Cap.html">Cap</a>&lt; void &gt;</td> <td class="paramname"><span class="paramname"><em>target</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">long</td> <td class="paramname"><span class="paramname"><em>obj</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__l4__utcb__api.html#ga89be8a86d11c1d532b636cc2df1330fb">l4_utcb_t</a> *</td> <td class="paramname"><span class="paramname"><em>utcb</em></span><span class="paramdefsep"> = </span><span class="paramdefval"><a class="el" href="group__l4__utcb__api.html#gadc099b4a59e1d99638c72c11a8c8b644">l4_utcb</a>()</span>&#160;)</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel inline">inline</span><span class="mlabel noexcept">noexcept</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Generic create call to the factory. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[out]</td><td class="paramname">target</td><td>Capability selector for the new object. The caller must allocate the capability slot. The kernel stores the new objects's capability into this slot. </td></tr>
<tr><td class="paramdir"></td><td class="paramname">obj</td><td>The protocol ID that specifies which kind of object shall be created. </td></tr>
<tr><td class="paramdir"></td><td class="paramname">utcb</td><td>UTCB to be used for this operation, shall be the UTCB of the calling thread. Defaults to <a class="el" href="group__l4__utcb__api.html#gadc099b4a59e1d99638c72c11a8c8b644" title="Get the UTCB address.">l4_utcb</a>.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>A create stream that allows additional arguments to be passed to the <span class="tt">create()</span> call via the left-shift (&lt;&lt;) operator (see #S::operator &lt;&lt;).</dd></dl>
<p>This method does not directly invoke the factory. The factory is invoked when the create stream returned by this method is converted to an <a class="el" href="structl4__msgtag__t.html" title="Message tag data structure.">l4_msgtag_t</a> (see <a class="el" href="classL4_1_1Factory_1_1S.html#af01d7ba40ace8862c0b670e1fb705810" title="Explicitly commits the operation and returns the result.">S::operator l4_msgtag_t()</a>), or otherwise when the stream goes out of scope (not recommended; see #S::~S()).</p>
<dl class="section pre"><dt>Precondition</dt><dd>The invoked <a class="el" href="classL4_1_1Factory.html" title="C++ Factory interface, see Factory for the C interface.">Factory</a> capability must have the permission <a class="el" href="group__l4__fpage__api.html#ggaee60789a48cab2782f5a368237591b39acb2b2e95f6be245f64937ac48a068066" title="Interface specific &#39;S&#39; right for capability flexpages.">L4_CAP_FPAGE_S</a>, otherwise the later factory IPC will fail with <a class="el" href="group__l4__error__api.html#ggab4c8abc71ffa221a25c1ca5840a354f9ae679aa95cfccf769e6d8e7ddb746fdc8" title="No permission.">L4_EPERM</a> (see <a class="el" href="classL4_1_1Factory_1_1S.html#af01d7ba40ace8862c0b670e1fb705810" title="Explicitly commits the operation and returns the result.">S::operator l4_msgtag_t()</a>).</dd></dl>
<dl class="section note"><dt>Note</dt><dd>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 an <a class="el" href="structl4__msgtag__t.html" title="Message tag data structure.">l4_msgtag_t</a>, other UTCB-using operations must not be used.</dd></dl>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="#add39d432a64a16aec33abeefcb3ba1cd" title="Create call for typed capabilities.">create(Cap&lt;OBJ&gt;, l4_utcb_t *)</a> </dd></dl>
<p class="definition">Definition at line <a class="el" href="factory_source.html#l00292">292</a> of file <a class="el" href="factory_source.html">factory</a>.</p>
<p class="reference">References <a class="el" href="kobject_source.html#l00069">L4::Kobject::cap()</a>.</p>
<div id="dynsection-3" onclick="return dynsection.toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;"><span class="dynarrow"><span class="arrowhead closed"></span></span>Here is the call graph for this function:</div>
<div id="dynsection-3-summary" class="dynsummary" style="display:block;">
</div>
<div id="dynsection-3-content" class="dyncontent" style="display:none;">
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="classL4_1_1Factory_ab52604d4abed4d6009ce51a59492edd7_cgraph.svg" width="323" height="36"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
</div>
</div>
</div>
<a id="a014721aec27ad4877555d5f4b7204896" name="a014721aec27ad4877555d5f4b7204896"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a014721aec27ad4877555d5f4b7204896">&#9670;&#160;</a></span>create_factory()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> L4::Factory::create_factory </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classL4_1_1Cap.html">Cap</a>&lt; <a class="el" href="classL4_1_1Factory.html">Factory</a> &gt; const &amp;</td> <td class="paramname"><span class="paramname"><em>target_cap</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned long</td> <td class="paramname"><span class="paramname"><em>limit</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__l4__utcb__api.html#ga89be8a86d11c1d532b636cc2df1330fb">l4_utcb_t</a> *</td> <td class="paramname"><span class="paramname"><em>utcb</em></span><span class="paramdefsep"> = </span><span class="paramdefval"><a class="el" href="group__l4__utcb__api.html#gadc099b4a59e1d99638c72c11a8c8b644">l4_utcb</a>()</span>&#160;)</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel inline">inline</span><span class="mlabel noexcept">noexcept</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Create a new factory. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[out]</td><td class="paramname">target_cap</td><td>The kernel stores the new factory's capability into this slot. </td></tr>
<tr><td class="paramdir"></td><td class="paramname">limit</td><td>Limit for the new factory in bytes. </td></tr>
<tr><td class="paramdir"></td><td class="paramname">utcb</td><td>UTCB to be used for this operation, shall be the UTCB of the calling thread. Defaults to <a class="el" href="group__l4__utcb__api.html#gadc099b4a59e1d99638c72c11a8c8b644" title="Get the UTCB address.">l4_utcb</a>.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Syscall return tag</dd></dl>
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">L4_EOK</td><td>No error occurred. </td></tr>
<tr><td class="paramname">-L4_EPERM</td><td>Insufficient permissions; see precondition. </td></tr>
<tr><td class="paramname">&lt;0</td><td>Error code.</td></tr>
</table>
</dd>
</dl>
<dl class="section pre"><dt>Precondition</dt><dd>The invoked <a class="el" href="classL4_1_1Factory.html" title="C++ Factory interface, see Factory for the C interface.">Factory</a> capability must have the permission <a class="el" href="group__l4__fpage__api.html#ggaee60789a48cab2782f5a368237591b39acb2b2e95f6be245f64937ac48a068066" title="Interface specific &#39;S&#39; right for capability flexpages.">L4_CAP_FPAGE_S</a>.</dd></dl>
<dl class="section note"><dt>Note</dt><dd>In addition to memory needed for internal data structures, the <span class="tt">limit</span> (quota) of the new factory is counted towards the quota of the creating factory. The <span class="tt">limit</span> must be within <span class="tt">1 ≤ limit ≤ 2^(8 * sizeof(l4_umword_t) 1) 2</span> otherwise the behavior is undefined.</dd>
<dd>
This method is only guaranteed to work with the <a class="el" href="l4re_concepts_kernel_factory.html">Kernel Factory</a>. For other services, use the generic <a class="el" href="#ab52604d4abed4d6009ce51a59492edd7" title="Generic create call to the factory.">create()</a> method and consult the service documentation for information on the arguments that need to be passed to the create stream. </dd></dl>
<p class="definition">Definition at line <a class="el" href="factory_source.html#l00404">404</a> of file <a class="el" href="factory_source.html">factory</a>.</p>
<p class="reference">References <a class="el" href="capability_8h_source.html#l00049">L4::Cap_base::cap()</a>, and <a class="el" href="kobject_source.html#l00069">L4::Kobject::cap()</a>.</p>
<div id="dynsection-4" onclick="return dynsection.toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;"><span class="dynarrow"><span class="arrowhead closed"></span></span>Here is the call graph for this function:</div>
<div id="dynsection-4-summary" class="dynsummary" style="display:block;">
</div>
<div id="dynsection-4-content" class="dyncontent" style="display:none;">
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="classL4_1_1Factory_a014721aec27ad4877555d5f4b7204896_cgraph.svg" width="338" height="86"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
</div>
</div>
</div>
<a id="a79b67bcf639db7fd92b399d44ab272a8" name="a79b67bcf639db7fd92b399d44ab272a8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a79b67bcf639db7fd92b399d44ab272a8">&#9670;&#160;</a></span>create_gate()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> L4::Factory::create_gate </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classL4_1_1Cap.html">Cap</a>&lt; void &gt; const &amp;</td> <td class="paramname"><span class="paramname"><em>target_cap</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classL4_1_1Cap.html">Cap</a>&lt; Snd_destination &gt; const &amp;</td> <td class="paramname"><span class="paramname"><em>snd_dst_cap</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a></td> <td class="paramname"><span class="paramname"><em>label</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__l4__utcb__api.html#ga89be8a86d11c1d532b636cc2df1330fb">l4_utcb_t</a> *</td> <td class="paramname"><span class="paramname"><em>utcb</em></span><span class="paramdefsep"> = </span><span class="paramdefval"><a class="el" href="group__l4__utcb__api.html#gadc099b4a59e1d99638c72c11a8c8b644">l4_utcb</a>()</span>&#160;)</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel inline">inline</span><span class="mlabel noexcept">noexcept</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Create a new IPC gate, optionally bound to a send destination (a thread or thread group). </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[out]</td><td class="paramname">target_cap</td><td>The kernel stores the new IPC gate's capability into this slot. </td></tr>
<tr><td class="paramdir"></td><td class="paramname">snd_dst_cap</td><td>Optional capability selector of a thread or thread group to bind the gate to. Use <a class="el" href="group__l4__cap__api.html#ggafee0421c2fe0e5cfc59f17f16ea10879aff9320ed307e76cebfca6c2871136102" title="Invalid capability selector.">L4_INVALID_CAP</a> to create an unbound IPC gate. </td></tr>
<tr><td class="paramdir"></td><td class="paramname">label</td><td>Optional label of the gate (precisely used if <span class="tt">snd_dst_cap</span> is valid). If <span class="tt">snd_dst_cap</span> is valid, <span class="tt">label</span> must be present. </td></tr>
<tr><td class="paramdir"></td><td class="paramname">utcb</td><td>UTCB to be used for this operation, shall be the UTCB of the calling thread. Defaults to <a class="el" href="group__l4__utcb__api.html#gadc099b4a59e1d99638c72c11a8c8b644" title="Get the UTCB address.">l4_utcb</a>.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Syscall return tag containing one of the following return codes.</dd></dl>
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">L4_EOK</td><td>No error occurred. </td></tr>
<tr><td class="paramname">-L4_ENOMEM</td><td>Out-of-memory during allocation of the <a class="el" href="classL4_1_1Ipc__gate.html" title="The C++ IPC gate interface, see IPC-Gate API for the C interface.">Ipc_gate</a> object. </td></tr>
<tr><td class="paramname">-L4_EINVAL</td><td><span class="tt">snd_dst_cap</span> is void or points to something that is not a thread or thread group. </td></tr>
<tr><td class="paramname">-L4_EPERM</td><td>Insufficient permissions; see precondition.</td></tr>
</table>
</dd>
</dl>
<dl class="section pre"><dt>Precondition</dt><dd>The invoked <a class="el" href="classL4_1_1Factory.html" title="C++ Factory interface, see Factory for the C interface.">Factory</a> capability must have the permission <a class="el" href="group__l4__fpage__api.html#ggaee60789a48cab2782f5a368237591b39acb2b2e95f6be245f64937ac48a068066" title="Interface specific &#39;S&#39; right for capability flexpages.">L4_CAP_FPAGE_S</a>. Also <span class="tt">snd_dst_cap</span> (if <a class="el" href="classL4_1_1Cap__base.html#ab4937bb12579c752564f7250760d0bda">valid</a>) must have the permission <a class="el" href="group__l4__fpage__api.html#ggaee60789a48cab2782f5a368237591b39acb2b2e95f6be245f64937ac48a068066" title="Interface specific &#39;S&#39; right for capability flexpages.">L4_CAP_FPAGE_S</a>.</dd></dl>
<p>An unbound IPC gate can be bound to a thread or thread group using <a class="el" href="classL4_1_1Rcv__endpoint.html#a44d288dd670226f6845b5bd8c973b15e" title="Bind the IPC receive endpoint to a thread.">L4::Ipc_gate::bind_thread()</a> or bind_snd_destination().</p>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="classL4_1_1Ipc__gate.html" title="The C++ IPC gate interface, see IPC-Gate API for the C interface.">L4::Ipc_gate</a> </dd></dl>
<p class="definition">Definition at line <a class="el" href="factory_source.html#l00440">440</a> of file <a class="el" href="factory_source.html">factory</a>.</p>
<p class="reference">References <a class="el" href="capability_8h_source.html#l00049">L4::Cap_base::cap()</a>, and <a class="el" href="kobject_source.html#l00069">L4::Kobject::cap()</a>.</p>
<div id="dynsection-5" onclick="return dynsection.toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;"><span class="dynarrow"><span class="arrowhead closed"></span></span>Here is the call graph for this function:</div>
<div id="dynsection-5-summary" class="dynsummary" style="display:block;">
</div>
<div id="dynsection-5-content" class="dyncontent" style="display:none;">
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="classL4_1_1Factory_a79b67bcf639db7fd92b399d44ab272a8_cgraph.svg" width="374" height="86"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
</div>
</div>
</div>
<a id="a491c8f5113bb68cd402db1eb59ac76ea" name="a491c8f5113bb68cd402db1eb59ac76ea"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a491c8f5113bb68cd402db1eb59ac76ea">&#9670;&#160;</a></span>create_task()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> L4::Factory::create_task </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classL4_1_1Cap.html">Cap</a>&lt; <a class="el" href="classL4_1_1Task.html">Task</a> &gt; const &amp;</td> <td class="paramname"><span class="paramname"><em>target_cap</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="unionl4__fpage__t.html">l4_fpage_t</a> *</td> <td class="paramname"><span class="paramname"><em>utcb_area</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__l4__utcb__api.html#ga89be8a86d11c1d532b636cc2df1330fb">l4_utcb_t</a> *</td> <td class="paramname"><span class="paramname"><em>utcb</em></span><span class="paramdefsep"> = </span><span class="paramdefval"><a class="el" href="group__l4__utcb__api.html#gadc099b4a59e1d99638c72c11a8c8b644">l4_utcb</a>()</span>&#160;)</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel inline">inline</span><span class="mlabel noexcept">noexcept</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Create a new task. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[out]</td><td class="paramname">target_cap</td><td>The kernel stores the new task's capability into this slot. </td></tr>
<tr><td class="paramdir">[in,out]</td><td class="paramname">utcb_area</td><td>Flexpage 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.</td></tr>
</table>
</dd>
</dl>
<p>On systems without MMU, the flexpage is adjusted to reflect the acually allocated physical address. </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">utcb</td><td>UTCB to be used for this operation, shall be the UTCB of the calling thread. Defaults to <a class="el" href="group__l4__utcb__api.html#gadc099b4a59e1d99638c72c11a8c8b644" title="Get the UTCB address.">l4_utcb</a>.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Syscall return tag</dd></dl>
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">L4_EOK</td><td>No error occurred. </td></tr>
<tr><td class="paramname">-L4_EPERM</td><td>Insufficient permissions; see precondition. </td></tr>
<tr><td class="paramname">&lt;0</td><td>Error code.</td></tr>
</table>
</dd>
</dl>
<dl class="section pre"><dt>Precondition</dt><dd>The invoked <a class="el" href="classL4_1_1Factory.html" title="C++ Factory interface, see Factory for the C interface.">Factory</a> capability must have the permission <a class="el" href="group__l4__fpage__api.html#ggaee60789a48cab2782f5a368237591b39acb2b2e95f6be245f64937ac48a068066" title="Interface specific &#39;S&#39; right for capability flexpages.">L4_CAP_FPAGE_S</a>.</dd></dl>
<dl class="section note"><dt>Note</dt><dd>The size of the UTCB area specifies indirectly the number of UTCBs available for this task. Refer to <a class="el" href="classL4_1_1Task.html#a9e741ff1d27ca776c65abaff1de2f139" title="Add kernel-user memory.">L4::Task::add_ku_mem</a> for adding more of this type of memory.</dd></dl>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="classL4_1_1Task.html" title="C++ interface of the Task kernel object, see Task for the C interface.">L4::Task</a> </dd></dl>
<p class="definition">Definition at line <a class="el" href="factory_source.html#l00370">370</a> of file <a class="el" href="factory_source.html">factory</a>.</p>
<p class="reference">References <a class="el" href="capability_8h_source.html#l00049">L4::Cap_base::cap()</a>, and <a class="el" href="kobject_source.html#l00069">L4::Kobject::cap()</a>.</p>
<div id="dynsection-6" onclick="return dynsection.toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;"><span class="dynarrow"><span class="arrowhead closed"></span></span>Here is the call graph for this function:</div>
<div id="dynsection-6-summary" class="dynsummary" style="display:block;">
</div>
<div id="dynsection-6-content" class="dyncontent" style="display:none;">
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="classL4_1_1Factory_a491c8f5113bb68cd402db1eb59ac76ea_cgraph.svg" width="372" height="86"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
</div>
</div>
</div>
<a id="a6b0504bc01000ccbeaf137b20e7284c5" name="a6b0504bc01000ccbeaf137b20e7284c5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6b0504bc01000ccbeaf137b20e7284c5">&#9670;&#160;</a></span>create_thread_group()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> L4::Factory::create_thread_group </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classL4_1_1Cap.html">Cap</a>&lt; <a class="el" href="classL4_1_1Thread__group.html">Thread_group</a> &gt; const &amp;</td> <td class="paramname"><span class="paramname"><em>target_cap</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned</td> <td class="paramname"><span class="paramname"><em>policy</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__l4__utcb__api.html#ga89be8a86d11c1d532b636cc2df1330fb">l4_utcb_t</a> *</td> <td class="paramname"><span class="paramname"><em>utcb</em></span><span class="paramdefsep"> = </span><span class="paramdefval"><a class="el" href="group__l4__utcb__api.html#gadc099b4a59e1d99638c72c11a8c8b644">l4_utcb</a>()</span>&#160;)</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel inline">inline</span><span class="mlabel noexcept">noexcept</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Create a new thread group. </p>
<p>An IPC endpoint can be bound to a thread group. When a message arrives at the IPC endpoint, a specific thread of the thread group is selected to actually receive the message. A thread group is a send destination for an IPC endpoint.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[out]</td><td class="paramname">target_cap</td><td>The kernel stores the new thread group's capability into this slot. </td></tr>
<tr><td class="paramdir"></td><td class="paramname">policy</td><td>Policy parameter for the thread group. See L4_thread_group_policy for a list of supported values.</td></tr>
<tr><td class="paramdir"></td><td class="paramname">utcb</td><td>UTCB to be used for this operation, shall be the UTCB of the calling thread. Defaults to <a class="el" href="group__l4__utcb__api.html#gadc099b4a59e1d99638c72c11a8c8b644" title="Get the UTCB address.">l4_utcb</a>.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Syscall return tag containing one of the following return codes.</dd></dl>
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">L4_EOK</td><td>No error occurred. </td></tr>
<tr><td class="paramname">-L4_ENOMEM</td><td>Out-of-memory during allocation of the <a class="el" href="classL4_1_1Thread__group.html" title="C++ L4 kernel thread group interface, see Thread groups for the C interface.">Thread_group</a> object. </td></tr>
<tr><td class="paramname">-L4_EINVAL</td><td>Invalid policy parameter. </td></tr>
<tr><td class="paramname">-L4_EPERM</td><td>The factory instance requires <a class="el" href="group__l4__fpage__api.html#ggaee60789a48cab2782f5a368237591b39acb2b2e95f6be245f64937ac48a068066" title="Interface specific &#39;S&#39; right for capability flexpages.">L4_CAP_FPAGE_S</a> rights on the invoked capability and <a class="el" href="group__l4__fpage__api.html#ggaee60789a48cab2782f5a368237591b39acb2b2e95f6be245f64937ac48a068066" title="Interface specific &#39;S&#39; right for capability flexpages.">L4_CAP_FPAGE_S</a> is not present. </td></tr>
</table>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="factory_source.html#l00475">475</a> of file <a class="el" href="factory_source.html">factory</a>.</p>
<p class="reference">References <a class="el" href="capability_8h_source.html#l00049">L4::Cap_base::cap()</a>, and <a class="el" href="kobject_source.html#l00069">L4::Kobject::cap()</a>.</p>
<div id="dynsection-7" onclick="return dynsection.toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;"><span class="dynarrow"><span class="arrowhead closed"></span></span>Here is the call graph for this function:</div>
<div id="dynsection-7-summary" class="dynsummary" style="display:block;">
</div>
<div id="dynsection-7-content" class="dyncontent" style="display:none;">
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="classL4_1_1Factory_a6b0504bc01000ccbeaf137b20e7284c5_cgraph.svg" width="338" height="86"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
</div>
</div>
</div>
<hr/>The documentation for this class was generated from the following file:<ul>
<li>l4/sys/<a class="el" href="factory_source.html">factory</a></li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- HTML footer for doxygen 1.9.1-->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a href="namespaceL4.html">L4</a></li><li class="navelem"><a href="classL4_1_1Factory.html">Factory</a></li>
<li class="footer">Generated on <span class="timestamp"></span> for L4Re Operating System Framework by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.15.0 </li>
</ul>
</div>
</body>
</html>