l4re-base-25.08.0

This commit is contained in:
2025-09-12 15:55:45 +02:00
commit d959eaab98
37938 changed files with 9382688 additions and 0 deletions

View File

@@ -0,0 +1,747 @@
<!-- 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: Task</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('group__l4__task__api.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">Task <div class="ingroups"><a class="el" href="group__l4__api.html">Base API</a> &raquo; <a class="el" href="group__l4__kernel__object__api.html">Kernel Objects</a></div></div></div>
</div><!--header-->
<div class="contents">
<p>C interface of the Task kernel object, see <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> for the C++ interface.
<a href="#details">More...</a></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>Collaboration diagram for Task:</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="group__l4__task__api.svg" width="226" height="36"><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-enum-members" class="groupheader"><a id="enum-members" name="enum-members"></a>
Enumerations</h2></td></tr>
<tr class="memitem:ga3c24e67b976870a3e911c43c83382f66" id="r_ga3c24e67b976870a3e911c43c83382f66"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga3c24e67b976870a3e911c43c83382f66">l4_unmap_flags_t</a> { <a class="el" href="#gga3c24e67b976870a3e911c43c83382f66aa85d4766b182308e5847d543e7d59055">L4_FP_ALL_SPACES</a>
, <a class="el" href="#gga3c24e67b976870a3e911c43c83382f66a49114f3e6952b9448fe776f2ab18813f">L4_FP_DELETE_OBJ</a>
, <a class="el" href="#gga3c24e67b976870a3e911c43c83382f66af5f4ec77edcf5a85ecd79b0ae24e31f0">L4_FP_OTHER_SPACES</a>
}</td></tr>
<tr class="memdesc:ga3c24e67b976870a3e911c43c83382f66"><td class="mdescLeft">&#160;</td><td class="mdescRight">Flags for the unmap operation. <a href="#ga3c24e67b976870a3e911c43c83382f66">More...</a><br /></td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-func-members" class="groupheader"><a id="func-members" name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga2f2c7940a3aa7223a5750562d933d5a4" id="r_ga2f2c7940a3aa7223a5750562d933d5a4"><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="#ga2f2c7940a3aa7223a5750562d933d5a4">l4_task_vgicc_map</a> (<a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a> task, <a class="el" href="unionl4__fpage__t.html">l4_fpage_t</a> vgicc_fpage) <a class="el" href="group__l4sys__defines.html#ga362dfa378e662dd04f710a23fc7ea931">L4_NOTHROW</a></td></tr>
<tr class="memdesc:ga2f2c7940a3aa7223a5750562d933d5a4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Map the GIC virtual CPU interface page to the task in case Fiasco detected a GIC version 2. <br /></td></tr>
<tr class="memitem:ga8ed2ff7ba204de7c01311c22412a2063" id="r_ga8ed2ff7ba204de7c01311c22412a2063"><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="#ga8ed2ff7ba204de7c01311c22412a2063">l4_task_map</a> (<a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a> dst_task, <a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a> src_task, <a class="el" href="unionl4__fpage__t.html">l4_fpage_t</a> snd_fpage, <a class="el" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a> snd_base) <a class="el" href="group__l4sys__defines.html#ga362dfa378e662dd04f710a23fc7ea931">L4_NOTHROW</a></td></tr>
<tr class="memdesc:ga8ed2ff7ba204de7c01311c22412a2063"><td class="mdescLeft">&#160;</td><td class="mdescRight">Map resources available in the source task to a destination task. <br /></td></tr>
<tr class="memitem:gaa5558855716b35c1790b61249cf2974b" id="r_gaa5558855716b35c1790b61249cf2974b"><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="#gaa5558855716b35c1790b61249cf2974b">l4_task_unmap</a> (<a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a> task, <a class="el" href="unionl4__fpage__t.html">l4_fpage_t</a> fpage, <a class="el" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a> map_mask) <a class="el" href="group__l4sys__defines.html#ga362dfa378e662dd04f710a23fc7ea931">L4_NOTHROW</a></td></tr>
<tr class="memdesc:gaa5558855716b35c1790b61249cf2974b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Revoke rights from the task. <br /></td></tr>
<tr class="memitem:ga3632af3a1c0c1b0f011494dd60fabe41" id="r_ga3632af3a1c0c1b0f011494dd60fabe41"><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="#ga3632af3a1c0c1b0f011494dd60fabe41">l4_task_unmap_batch</a> (<a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a> task, <a class="el" href="unionl4__fpage__t.html">l4_fpage_t</a> const *fpages, unsigned num_fpages, <a class="el" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a> map_mask) <a class="el" href="group__l4sys__defines.html#ga362dfa378e662dd04f710a23fc7ea931">L4_NOTHROW</a></td></tr>
<tr class="memdesc:ga3632af3a1c0c1b0f011494dd60fabe41"><td class="mdescLeft">&#160;</td><td class="mdescRight">Revoke rights from a task. <br /></td></tr>
<tr class="memitem:gaf0ce40ee0426a016cb344370d20d2fcd" id="r_gaf0ce40ee0426a016cb344370d20d2fcd"><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="#gaf0ce40ee0426a016cb344370d20d2fcd">l4_task_delete_obj</a> (<a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a> task, <a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a> obj) <a class="el" href="group__l4sys__defines.html#ga362dfa378e662dd04f710a23fc7ea931">L4_NOTHROW</a></td></tr>
<tr class="memdesc:gaf0ce40ee0426a016cb344370d20d2fcd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Release capability and delete object. <br /></td></tr>
<tr class="memitem:gafdf0c8d5d6cd5e9489bf9d205bd3b5dc" id="r_gafdf0c8d5d6cd5e9489bf9d205bd3b5dc"><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="#gafdf0c8d5d6cd5e9489bf9d205bd3b5dc">l4_task_release_cap</a> (<a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a> task, <a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a> cap) <a class="el" href="group__l4sys__defines.html#ga362dfa378e662dd04f710a23fc7ea931">L4_NOTHROW</a></td></tr>
<tr class="memdesc:gafdf0c8d5d6cd5e9489bf9d205bd3b5dc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Release object capability. <br /></td></tr>
<tr class="memitem:ga829a1b5cb4d5dba33ffee57534a505af" id="r_ga829a1b5cb4d5dba33ffee57534a505af"><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="#ga829a1b5cb4d5dba33ffee57534a505af">l4_task_cap_valid</a> (<a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a> task, <a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a> cap) <a class="el" href="group__l4sys__defines.html#ga362dfa378e662dd04f710a23fc7ea931">L4_NOTHROW</a></td></tr>
<tr class="memdesc:ga829a1b5cb4d5dba33ffee57534a505af"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check whether a capability is present (refers to an object). <br /></td></tr>
<tr class="memitem:ga0cadc0abbf54ac249bae17239c9cfb81" id="r_ga0cadc0abbf54ac249bae17239c9cfb81"><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="#ga0cadc0abbf54ac249bae17239c9cfb81">l4_task_cap_equal</a> (<a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a> task, <a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a> cap_a, <a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a> cap_b) <a class="el" href="group__l4sys__defines.html#ga362dfa378e662dd04f710a23fc7ea931">L4_NOTHROW</a></td></tr>
<tr class="memdesc:ga0cadc0abbf54ac249bae17239c9cfb81"><td class="mdescLeft">&#160;</td><td class="mdescRight">Test whether two capabilities point to the same object with the same permissions (only considering selected permissions). <br /></td></tr>
<tr class="memitem:ga433356d17f678aa259c6b616aeb476ef" id="r_ga433356d17f678aa259c6b616aeb476ef"><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="#ga433356d17f678aa259c6b616aeb476ef">l4_task_add_ku_mem</a> (<a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a> task, <a class="el" href="unionl4__fpage__t.html">l4_fpage_t</a> *ku_mem) <a class="el" href="group__l4sys__defines.html#ga362dfa378e662dd04f710a23fc7ea931">L4_NOTHROW</a></td></tr>
<tr class="memdesc:ga433356d17f678aa259c6b616aeb476ef"><td class="mdescLeft">&#160;</td><td class="mdescRight">Add kernel-user memory. <br /></td></tr>
</table>
<a name="details" id="details"></a><h2 id="header-details" class="groupheader">Detailed Description</h2>
<p>C interface of the Task kernel object, see <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> for the C++ interface. </p>
<p>A task represents a combination of the address spaces provided by the <a class="el" href="namespaceL4Re.html" title="L4Re C++ Interfaces.">L4Re</a> micro kernel. A task consists of at least a memory address space and an object address space. On IA32 there is also an IO-port address space.</p>
<p>Task objects are created using the <a class="el" href="group__l4__factory__api.html">Factory</a> interface.</p>
<dl class="section user"><dt>Include File</dt><dd><div class="fragment"><div class="line"><span class="preprocessor">#include &lt;l4/sys/task.h&gt;</span> </div>
</div><!-- fragment --> </dd></dl>
<a name="doc-enum-members" id="doc-enum-members"></a><h2 id="header-doc-enum-members" class="groupheader">Enumeration Type Documentation</h2>
<a id="ga3c24e67b976870a3e911c43c83382f66" name="ga3c24e67b976870a3e911c43c83382f66"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga3c24e67b976870a3e911c43c83382f66">&#9670;&#160;</a></span>l4_unmap_flags_t</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="#ga3c24e67b976870a3e911c43c83382f66">l4_unmap_flags_t</a></td>
</tr>
</table>
</div><div class="memdoc">
<p>Flags for the unmap operation. </p>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="classL4_1_1Task.html#a4b9294cc5d6338a36958df578f092a25" title="Revoke rights from the task.">L4::Task::unmap()</a> and <a class="el" href="#gaa5558855716b35c1790b61249cf2974b" title="Revoke rights from the task.">l4_task_unmap()</a> </dd></dl>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga3c24e67b976870a3e911c43c83382f66aa85d4766b182308e5847d543e7d59055" name="gga3c24e67b976870a3e911c43c83382f66aa85d4766b182308e5847d543e7d59055"></a>L4_FP_ALL_SPACES&#160;</td><td class="fielddoc"><p>Flag to tell the unmap operation to revoke permissions from all child mappings including the mapping in the invoked task. </p>
<dl class="section note"><dt>Note</dt><dd>Object capabilities are not hierarchical &ndash; they have no children. The result of the map operation on an object capability is a copy of that capability in the object space of the destination task. An unmap operation on object capabilities is a no-op if this flag is not specified.</dd></dl>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="classL4_1_1Task.html#a4b9294cc5d6338a36958df578f092a25" title="Revoke rights from the task.">L4::Task::unmap()</a> <a class="el" href="#gaa5558855716b35c1790b61249cf2974b" title="Revoke rights from the task.">l4_task_unmap()</a> </dd></dl>
</td></tr>
<tr><td class="fieldname"><a id="gga3c24e67b976870a3e911c43c83382f66a49114f3e6952b9448fe776f2ab18813f" name="gga3c24e67b976870a3e911c43c83382f66a49114f3e6952b9448fe776f2ab18813f"></a>L4_FP_DELETE_OBJ&#160;</td><td class="fielddoc"><p>Flag that indicates that an unmap operation on object capabilities shall try to delete the corresponding objects immediately. </p>
<p>This flag implies the <a class="el" href="#gga3c24e67b976870a3e911c43c83382f66aa85d4766b182308e5847d543e7d59055" title="Flag to tell the unmap operation to revoke permissions from all child mappings including the mapping ...">L4_FP_ALL_SPACES</a> flag. The concept of deletion is only applicable to kernel objects. Therefore, for memory and I/O port capabilities, this flag has the same effect as <a class="el" href="#gga3c24e67b976870a3e911c43c83382f66aa85d4766b182308e5847d543e7d59055" title="Flag to tell the unmap operation to revoke permissions from all child mappings including the mapping ...">L4_FP_ALL_SPACES</a> alone.</p>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="classL4_1_1Task.html#a4b9294cc5d6338a36958df578f092a25" title="Revoke rights from the task.">L4::Task::unmap()</a> <a class="el" href="#gaa5558855716b35c1790b61249cf2974b" title="Revoke rights from the task.">l4_task_unmap()</a></dd></dl>
<dl class="section note"><dt>Note</dt><dd>Specifying <a class="el" href="#gga3c24e67b976870a3e911c43c83382f66a49114f3e6952b9448fe776f2ab18813f" title="Flag that indicates that an unmap operation on object capabilities shall try to delete the correspond...">L4_FP_DELETE_OBJ</a> ^ <a class="el" href="#gga3c24e67b976870a3e911c43c83382f66aa85d4766b182308e5847d543e7d59055" title="Flag to tell the unmap operation to revoke permissions from all child mappings including the mapping ...">L4_FP_ALL_SPACES</a> is treated as <a class="el" href="#gga3c24e67b976870a3e911c43c83382f66af5f4ec77edcf5a85ecd79b0ae24e31f0" title="Counterpart to L4_FP_ALL_SPACES; revoke permissions from child mappings only.">L4_FP_OTHER_SPACES</a>. </dd></dl>
</td></tr>
<tr><td class="fieldname"><a id="gga3c24e67b976870a3e911c43c83382f66af5f4ec77edcf5a85ecd79b0ae24e31f0" name="gga3c24e67b976870a3e911c43c83382f66af5f4ec77edcf5a85ecd79b0ae24e31f0"></a>L4_FP_OTHER_SPACES&#160;</td><td class="fielddoc"><p>Counterpart to <a class="el" href="#gga3c24e67b976870a3e911c43c83382f66aa85d4766b182308e5847d543e7d59055" title="Flag to tell the unmap operation to revoke permissions from all child mappings including the mapping ...">L4_FP_ALL_SPACES</a>; revoke permissions from child mappings only. </p>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="classL4_1_1Task.html#a4b9294cc5d6338a36958df578f092a25" title="Revoke rights from the task.">L4::Task::unmap()</a> <a class="el" href="#gaa5558855716b35c1790b61249cf2974b" title="Revoke rights from the task.">l4_task_unmap()</a> </dd></dl>
</td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="l4_2sys_2consts_8h_source.html#l00169">169</a> of file <a class="el" href="l4_2sys_2consts_8h_source.html">consts.h</a>.</p>
</div>
</div>
<a name="doc-func-members" id="doc-func-members"></a><h2 id="header-doc-func-members" class="groupheader">Function Documentation</h2>
<a id="ga433356d17f678aa259c6b616aeb476ef" name="ga433356d17f678aa259c6b616aeb476ef"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga433356d17f678aa259c6b616aeb476ef">&#9670;&#160;</a></span>l4_task_add_ku_mem()</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_task_add_ku_mem </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a></td> <td class="paramname"><span class="paramname"><em>task</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>ku_mem</em></span>&#160;)</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel inline">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Add kernel-user memory. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir"></td><td class="paramname">task</td><td>Capability selector of the task to add the memory to. </td></tr>
<tr><td class="paramdir">[in,out]</td><td class="paramname">ku_mem</td><td>Flexpage describing the virtual area the memory goes to. On systems without MMU, the flexpage is adjusted to reflect the acually allocated physical address.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Syscall return tag</dd></dl>
<p>Kernel-user memory (ku_mem) is memory that is shared between the kernel and user-space. It is needed for the UTCB area of threads (see <a class="el" href="group__l4__thread__control__api.html#ga370fd9233ecb6be3c0c697e6f66539ab" title="Bind the thread to a task.">l4_thread_control_bind()</a>) and for (extended) vCPU state. Note that existing kernel-user memory cannot be unmapped or mapped somewhere else.</p>
<dl class="section note"><dt>Note</dt><dd>The amount of kernel-user memory that can be allocated at once is limited by the used kernel implementation. The minimum allocatable amount is one page (<span class="tt"><a class="el" href="group__l4__memory__api.html#gabecf862d8b8f39ad28af45d7fc949dd5" title="Minimal page size (in bytes).">L4_PAGESIZE</a></span>). A portable implementation should not depend on allocations greater than 16KiB to succeed.</dd>
<dd>
This function is only guaranteed to work on <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> objects. It might or might not work on <a class="el" href="classL4_1_1Vm.html" title="Virtual machine host address space.">L4::Vm</a> objects or on <a class="el" href="classL4Re_1_1Dma__space.html" title="Managed DMA Address Space.">L4Re::Dma_space</a> objects but there is no practical use for adding kernel-user memory to <a class="el" href="classL4_1_1Vm.html" title="Virtual machine host address space.">L4::Vm</a> objects or to <a class="el" href="classL4Re_1_1Dma__space.html" title="Managed DMA Address Space.">L4Re::Dma_space</a> objects. </dd></dl>
<p class="definition">Definition at line <a class="el" href="l4_2sys_2task_8h_source.html#l00497">497</a> of file <a class="el" href="l4_2sys_2task_8h_source.html">task.h</a>.</p>
<p class="reference">References <a class="el" href="compiler_8h_source.html#l00161">L4_NOTHROW</a>, and <a class="el" href="l4_2sys_2utcb_8h_source.html#l00346">l4_utcb()</a>.</p>
<div id="dynsection-1" 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-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="group__l4__task__api_ga433356d17f678aa259c6b616aeb476ef_cgraph.svg" width="291" 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="ga0cadc0abbf54ac249bae17239c9cfb81" name="ga0cadc0abbf54ac249bae17239c9cfb81"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga0cadc0abbf54ac249bae17239c9cfb81">&#9670;&#160;</a></span>l4_task_cap_equal()</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_task_cap_equal </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a></td> <td class="paramname"><span class="paramname"><em>task</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a></td> <td class="paramname"><span class="paramname"><em>cap_a</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a></td> <td class="paramname"><span class="paramname"><em>cap_b</em></span>&#160;)</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel inline">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Test whether two capabilities point to the same object with the same permissions (only considering selected permissions). </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">task</td><td>Capability selector for the destination task to do the lookup in. </td></tr>
<tr><td class="paramname">cap_a</td><td>Capability selector for the first capability to compare. </td></tr>
<tr><td class="paramname">cap_b</td><td>Capability selector for the second capability to compare.</td></tr>
</table>
</dd>
</dl>
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">l4_msgtag_t::label() = 1</td><td>The compared capabilities point to the same object with same considered permission. </td></tr>
<tr><td class="paramname">l4_msgtag_t::label() = 0</td><td>The compared capabilities do <b>not</b> point to the same object or differ in the considered permission.</td></tr>
</table>
</dd>
</dl>
<ul>
<li>For <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> objects, only the permissions <a class="el" href="group__l4__fpage__api.html#ggaee60789a48cab2782f5a368237591b39a561054fb4021ff4a22ab1881c7a7de5a" title="Interface specific &#39;W&#39; right for capability flexpages.">L4_CAP_FPAGE_W</a>, <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>, and <a class="el" href="group__l4__msgitem__api.html#ggad142e99a533af52d358f9940fa00966aa6d6eba5513250e9861fe748df4fe0fa5" title="Object-type specific right.">L4_FPAGE_C_OBJ_RIGHT1</a> are considered for the comparison. Differences in other permissions are ignored.</li>
<li>For other objects, only the permissions <a class="el" href="group__l4__fpage__api.html#ggaee60789a48cab2782f5a368237591b39a561054fb4021ff4a22ab1881c7a7de5a" title="Interface specific &#39;W&#39; right for capability flexpages.">L4_CAP_FPAGE_W</a> 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> are considered for the comparison. Differences in other permissions are ignored.</li>
</ul>
<p>Note that having the <a class="el" href="group__l4__fpage__api.html#ggaee60789a48cab2782f5a368237591b39a1cdb82ad70ed42f63968df2f8ce84bf5" title="Read right for capability flexpages.">L4_CAP_FPAGE_R</a> permission is implicit in possessing the capability. </p>
<p class="definition">Definition at line <a class="el" href="l4_2sys_2task_8h_source.html#l00490">490</a> of file <a class="el" href="l4_2sys_2task_8h_source.html">task.h</a>.</p>
<p class="reference">References <a class="el" href="compiler_8h_source.html#l00161">L4_NOTHROW</a>, and <a class="el" href="l4_2sys_2utcb_8h_source.html#l00346">l4_utcb()</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="group__l4__task__api_ga0cadc0abbf54ac249bae17239c9cfb81_cgraph.svg" width="271" 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="ga829a1b5cb4d5dba33ffee57534a505af" name="ga829a1b5cb4d5dba33ffee57534a505af"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga829a1b5cb4d5dba33ffee57534a505af">&#9670;&#160;</a></span>l4_task_cap_valid()</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_task_cap_valid </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a></td> <td class="paramname"><span class="paramname"><em>task</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a></td> <td class="paramname"><span class="paramname"><em>cap</em></span>&#160;)</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel inline">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Check whether a capability is present (refers to an object). </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">task</td><td>Task to check the capability in. </td></tr>
<tr><td class="paramname">cap</td><td>Valid capability to check for presence.</td></tr>
</table>
</dd>
</dl>
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">l4_msgtag_t::label() &gt; 0</td><td>Capability is present (refers to an object). </td></tr>
<tr><td class="paramname">l4_msgtag_t::label() == 0</td><td>No capability present (void object).</td></tr>
</table>
</dd>
</dl>
<p>A capability is considered present when it refers to an existing kernel object.</p>
<dl class="section pre"><dt>Precondition</dt><dd><span class="tt">cap</span> must be a valid capability index (i.e. not L4_INVALID_CAP or the like). </dd></dl>
<p class="definition">Definition at line <a class="el" href="l4_2sys_2task_8h_source.html#l00484">484</a> of file <a class="el" href="l4_2sys_2task_8h_source.html">task.h</a>.</p>
<p class="reference">References <a class="el" href="compiler_8h_source.html#l00161">L4_NOTHROW</a>, and <a class="el" href="l4_2sys_2utcb_8h_source.html#l00346">l4_utcb()</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="group__l4__task__api_ga829a1b5cb4d5dba33ffee57534a505af_cgraph.svg" width="267" 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="gaf0ce40ee0426a016cb344370d20d2fcd" name="gaf0ce40ee0426a016cb344370d20d2fcd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaf0ce40ee0426a016cb344370d20d2fcd">&#9670;&#160;</a></span>l4_task_delete_obj()</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_task_delete_obj </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a></td> <td class="paramname"><span class="paramname"><em>task</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a></td> <td class="paramname"><span class="paramname"><em>obj</em></span>&#160;)</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel inline">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Release capability and delete object. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">task</td><td>Capability selector of destination task. </td></tr>
<tr><td class="paramname">obj</td><td>Capability index of the object to delete.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Syscall return tag</dd></dl>
<p>If <span class="tt">obj</span> has the delete permission, initiates the deletion of the object. This implies that all capabilities for that object are gone afterwards. However, kernel-internally, objects are not destroyed until all other kernel objects holding a reference to it drop the reference. Hence, quota used by that object might not be freed immediately.</p>
<p>If <span class="tt">obj</span> does not have the delete permission, no error will be reported and only the capability <span class="tt">obj</span> is removed. (Note that, depending on the objects reference counter, this might still imply initiation of deletion.)</p>
<p>This operation is equivalent to <a class="el" href="#gaa5558855716b35c1790b61249cf2974b" title="Revoke rights from the task.">l4_task_unmap()</a> with <a class="el" href="#gga3c24e67b976870a3e911c43c83382f66a49114f3e6952b9448fe776f2ab18813f" title="Flag that indicates that an unmap operation on object capabilities shall try to delete the correspond...">L4_FP_DELETE_OBJ</a> flag. </p>
<p class="definition">Definition at line <a class="el" href="l4_2sys_2task_8h_source.html#l00463">463</a> of file <a class="el" href="l4_2sys_2task_8h_source.html">task.h</a>.</p>
<p class="reference">References <a class="el" href="compiler_8h_source.html#l00161">L4_NOTHROW</a>, and <a class="el" href="l4_2sys_2utcb_8h_source.html#l00346">l4_utcb()</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="group__l4__task__api_gaf0ce40ee0426a016cb344370d20d2fcd_cgraph.svg" width="272" 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="ga8ed2ff7ba204de7c01311c22412a2063" name="ga8ed2ff7ba204de7c01311c22412a2063"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga8ed2ff7ba204de7c01311c22412a2063">&#9670;&#160;</a></span>l4_task_map()</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_task_map </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a></td> <td class="paramname"><span class="paramname"><em>dst_task</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a></td> <td class="paramname"><span class="paramname"><em>src_task</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>snd_fpage</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>snd_base</em></span>&#160;)</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel inline">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Map resources available in the source task to a destination task. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">dst_task</td><td>Capability selector of the destination task. </td></tr>
<tr><td class="paramname">src_task</td><td>Capability selector of the source task. </td></tr>
<tr><td class="paramname">snd_fpage</td><td>Send flexpage that describes an area in the address space or object space of the source task. </td></tr>
<tr><td class="paramname">snd_base</td><td>Send base that describes an offset in the receive window of the destination task. The lower bits contain additional map control flags (see <a class="el" href="group__l4__msgitem__api.html#ga547729eef68ea9c0e085c34a66e133fa" title="Cacheability options for memory send items.">l4_fpage_cacheability_opt_t</a> for memory mappings, <a class="el" href="group__l4__msgitem__api.html#gad142e99a533af52d358f9940fa00966a" title="Attributes and additional permissions for object send items.">L4_obj_fpage_ctl</a> for object mappings, and <a class="el" href="group__l4__msgitem__api.html#gga94ecfe2908867c4ed0c13a7a97337f6aa390d5fd9efeb212bfbed501498387c9e" title="Flag as grant instead of map operation.">L4_MAP_ITEM_GRANT</a>; also see <a class="el" href="group__l4__msgitem__api.html#ga1ce1321fd25614e9af43a35819540ba7" title="Create the first word for a map item that is a send item for the memory space.">l4_map_control()</a> and <a class="el" href="group__l4__msgitem__api.html#ga6c9056957ac92e458eaabcbf3223ce6f" title="Create the first word for a map item that is a send item for the object space.">l4_map_obj_control()</a>).</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Syscall return tag. The function <a class="el" href="group__l4__ipc__err__api.html#ga05c11e3e10b6c2aa941396ac2018899f" title="Get IPC error code if any or message tag label otherwise for an IPC call.">l4_error()</a> shall be used to test if the map operation was successful.</dd></dl>
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">L4_EOK</td><td>Operation successful (but see notes below). </td></tr>
<tr><td class="paramname">-L4_EPERM</td><td>Insufficient permissions; see precondition. </td></tr>
<tr><td class="paramname">-L4_EINVAL</td><td>Invalid source task capability. </td></tr>
<tr><td class="paramname">-L4_IPC_SEMAPFAILED</td><td>The map operation failed due to limited quota.</td></tr>
</table>
</dd>
</dl>
<dl class="section pre"><dt>Precondition</dt><dd>The capability <span class="tt">dst_task</span> must have the permission <a class="el" href="group__l4__fpage__api.html#ggaee60789a48cab2782f5a368237591b39a561054fb4021ff4a22ab1881c7a7de5a" title="Interface specific &#39;W&#39; right for capability flexpages.">L4_CAP_FPAGE_W</a>.</dd></dl>
<p>This method allows for asynchronous transfer of capabilities, memory mappings, and IO-port mappings (on IA32) from one task to another. The receive window is the whole address space of <span class="tt">dst_task</span>. By specifying proper rights in <span class="tt">snd_fpage</span> and <span class="tt">snd_base</span>, it is possible to remove rights during transfer.</p>
<dl class="section note"><dt>Note</dt><dd>If the send flexpage is of type <a class="el" href="group__l4__fpage__api.html#ggacbb9260e4a3b77be0fc14df24b838d52aaab489a70d369e24131b1357dec9f037" title="Flexpage for object spaces.">L4_FPAGE_OBJ</a>, the <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> right is removed from the transferred capability unless both the source and destination task capabilities possess the <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> right themselves.</dd>
<dd>
Even with <a class="el" href="group__l4__ipc__err__api.html#ga05c11e3e10b6c2aa941396ac2018899f" title="Get IPC error code if any or message tag label otherwise for an IPC call.">l4_error()</a> returning L4_EOK there might be cases where not all pages of the send flexpage were mapped respectively granted to the destination task, for instance, if the corresponding mapping in the destination task does already exist.</dd></dl>
<p>For more information on spaces and mappings, see <a class="el" href="l4re_concepts_mapping.html">Spaces and Mappings</a>. The flexpage API is described in more detail at <a class="el" href="group__l4__fpage__api.html">Flexpages</a>.</p>
<dl class="section note"><dt>Note</dt><dd>For peculiarities when using grant, see <a class="el" href="group__l4__msgitem__api.html#gga94ecfe2908867c4ed0c13a7a97337f6aa390d5fd9efeb212bfbed501498387c9e" title="Flag as grant instead of map operation.">L4_MAP_ITEM_GRANT</a>. </dd></dl>
<p class="definition">Definition at line <a class="el" href="l4_2sys_2task_8h_source.html#l00433">433</a> of file <a class="el" href="l4_2sys_2task_8h_source.html">task.h</a>.</p>
<p class="reference">References <a class="el" href="compiler_8h_source.html#l00161">L4_NOTHROW</a>, and <a class="el" href="l4_2sys_2utcb_8h_source.html#l00346">l4_utcb()</a>.</p>
<p class="reference">Referenced by <a class="el" href="capability_8h_source.html#l00192">L4::Cap_base::copy()</a>, and <a class="el" href="capability_8h_source.html#l00176">L4::Cap_base::move()</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="group__l4__task__api_ga8ed2ff7ba204de7c01311c22412a2063_cgraph.svg" width="234" 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 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 caller 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="group__l4__task__api_ga8ed2ff7ba204de7c01311c22412a2063_icgraph.svg" width="520" 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="gafdf0c8d5d6cd5e9489bf9d205bd3b5dc" name="gafdf0c8d5d6cd5e9489bf9d205bd3b5dc"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gafdf0c8d5d6cd5e9489bf9d205bd3b5dc">&#9670;&#160;</a></span>l4_task_release_cap()</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_task_release_cap </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a></td> <td class="paramname"><span class="paramname"><em>task</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a></td> <td class="paramname"><span class="paramname"><em>cap</em></span>&#160;)</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel inline">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Release object capability. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">task</td><td>Capability selector of destination task </td></tr>
<tr><td class="paramname">cap</td><td>Capability selector of object to release</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Syscall return tag</dd></dl>
<p>This operation unmaps the capability from the specified task. This operation is equivalent to unmapping a single object capability by specifying all object rights as unmap mask.</p>
<dl class="section note"><dt>Note</dt><dd>If the reference counter of the kernel object referenced by <span class="tt">cap</span> goes down to zero, deletion of the object is initiated. Objects are not destroyed until all other kernel objects holding a reference to it drop the reference. </dd></dl>
<p class="definition">Definition at line <a class="el" href="l4_2sys_2task_8h_source.html#l00478">478</a> of file <a class="el" href="l4_2sys_2task_8h_source.html">task.h</a>.</p>
<p class="reference">References <a class="el" href="compiler_8h_source.html#l00161">L4_NOTHROW</a>, and <a class="el" href="l4_2sys_2utcb_8h_source.html#l00346">l4_utcb()</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="group__l4__task__api_gafdf0c8d5d6cd5e9489bf9d205bd3b5dc_cgraph.svg" width="283" 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="gaa5558855716b35c1790b61249cf2974b" name="gaa5558855716b35c1790b61249cf2974b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaa5558855716b35c1790b61249cf2974b">&#9670;&#160;</a></span>l4_task_unmap()</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_task_unmap </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a></td> <td class="paramname"><span class="paramname"><em>task</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>fpage</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>map_mask</em></span>&#160;)</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel inline">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Revoke rights from the task. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">task</td><td>Capability selector of destination task </td></tr>
<tr><td class="paramname">fpage</td><td>Flexpage that describes an area in one capability space of the destination task and the rights to revoke. </td></tr>
<tr><td class="paramname">map_mask</td><td>Unmap mask, see <a class="el" href="#ga3c24e67b976870a3e911c43c83382f66" title="Flags for the unmap operation.">l4_unmap_flags_t</a></td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Syscall return tag</dd></dl>
<p>This method allows to revoke rights from the destination task. The rights to revoke are specified in the flexpage, see <a class="el" href="group__l4__fpage__api.html#gaad7579a5ab36d5cbda48bbb4fc365cd7" title="Return rights from a flexpage.">l4_fpage_rights()</a>. For a flexpage describing IO ports or memory, it also revokes rights from all the tasks that got the rights delegated from the destination task (i.e., this operation does a recursive rights revocation). The capability is unmapped if certain rights are specified, see below for details. It is guaranteed that the rights revocation is completed before this function returns.</p>
<p>Note that this function cannot be used to revoke the reference counting permission (see <a class="el" href="group__l4__msgitem__api.html#ggad142e99a533af52d358f9940fa00966aae99eaaf78b0f1e2c47aa06bb3ecf75bb" title="Mapping is reference-counted (default).">L4_FPAGE_C_REF_CNT</a>) or the IPC-gate server permission (see <a class="el" href="group__l4__msgitem__api.html#ggad142e99a533af52d358f9940fa00966aa8436980325edd409d8aa71e1ef567bc4" title="The receiver may invoke IPC-gate-specific functions on the capability, e.g.">L4_FPAGE_C_IPCGATE_SVR</a>) from object capabilities.</p>
<p>It depends on the platform and the object type which rights need to be specified in the <span class="tt">rights</span> field of <span class="tt">fpage</span> to unmap a capability:</p><ul>
<li>An object capability is unmapped if and only if the <a class="el" href="group__l4__fpage__api.html#ggaee60789a48cab2782f5a368237591b39a1cdb82ad70ed42f63968df2f8ce84bf5" title="Read right for capability flexpages.">L4_CAP_FPAGE_R</a> right bit is set.</li>
<li>An IO port is unmapped if and only if any right bit is set.</li>
<li>Memory is unmapped if and only if the <a class="el" href="group__l4__fpage__api.html#gga5d4f4972d58f72b2a33b6c139b5950a8a555326b01b4fe72916157bdc90307691" title="Read-only flexpage.">L4_FPAGE_RO</a> right bit is set.</li>
</ul>
<dl class="section note"><dt>Note</dt><dd>Depending on the page-table features supported by the hardware, revocation of certain rights from a memory capability can be a no-op (i.e., the rights are not revoked). Further, revocation of certain rights may grant other rights which were not present before. For instance, on an architecture without support for NX, revoking X does nothing. For another example, revoking only X from an execute-only page grants read permission (because the mapping remains present in the page table).</dd>
<dd>
If the reference counter of a kernel object referenced in <span class="tt">fpage</span> goes down to zero (as a result of deleting capabilities), the deletion of the object is initiated. Objects are not destroyed until all other kernel objects holding a reference to it drop the reference. </dd></dl>
<dl class="section examples"><dt>Examples</dt><dd><a class="el" href="examples_2sys_2utcb-ipc_2main_8c-example.html#a34">examples/sys/utcb-ipc/main.c</a>.</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="l4_2sys_2task_8h_source.html#l00440">440</a> of file <a class="el" href="l4_2sys_2task_8h_source.html">task.h</a>.</p>
<p class="reference">References <a class="el" href="compiler_8h_source.html#l00161">L4_NOTHROW</a>, and <a class="el" href="l4_2sys_2utcb_8h_source.html#l00346">l4_utcb()</a>.</p>
<p class="reference">Referenced by <a class="el" href="bitmap__cap__alloc_source.html#l00081">L4Re::Util::Cap_alloc_base::free()</a>, <a class="el" href="counting__cap__alloc_source.html#l00321">L4Re::Util::Counting_cap_alloc&lt; COUNTERTYPE, Dbg &gt;::free()</a>, and <a class="el" href="counting__cap__alloc_source.html#l00359">L4Re::Util::Counting_cap_alloc&lt; COUNTERTYPE, Dbg &gt;::release()</a>.</p>
<div id="dynsection-8" 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-8-summary" class="dynsummary" style="display:block;">
</div>
<div id="dynsection-8-content" class="dyncontent" style="display:none;">
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="group__l4__task__api_gaa5558855716b35c1790b61249cf2974b_cgraph.svg" width="250" 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 id="dynsection-9" onclick="return dynsection.toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;"><span class="dynarrow"><span class="arrowhead closed"></span></span>Here is the caller graph for this function:</div>
<div id="dynsection-9-summary" class="dynsummary" style="display:block;">
</div>
<div id="dynsection-9-content" class="dyncontent" style="display:none;">
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="group__l4__task__api_gaa5558855716b35c1790b61249cf2974b_icgraph.svg" width="336" height="179"><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="ga3632af3a1c0c1b0f011494dd60fabe41" name="ga3632af3a1c0c1b0f011494dd60fabe41"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga3632af3a1c0c1b0f011494dd60fabe41">&#9670;&#160;</a></span>l4_task_unmap_batch()</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_task_unmap_batch </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a></td> <td class="paramname"><span class="paramname"><em>task</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> const *</td> <td class="paramname"><span class="paramname"><em>fpages</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned</td> <td class="paramname"><span class="paramname"><em>num_fpages</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>map_mask</em></span>&#160;)</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel inline">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Revoke rights from a task. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">task</td><td>Capability selector of destination task </td></tr>
<tr><td class="paramname">fpages</td><td>An array of flexpages. Each item describes an area in one capability space of the destination task. </td></tr>
<tr><td class="paramname">num_fpages</td><td>The size of the fpages array in elements (number of fpages sent). </td></tr>
<tr><td class="paramname">map_mask</td><td>Unmap mask, see <a class="el" href="#ga3c24e67b976870a3e911c43c83382f66" title="Flags for the unmap operation.">l4_unmap_flags_t</a></td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Syscall return tag</dd></dl>
<p>Revoke rights specified in an array of flexpages, see <a class="el" href="#gaa5558855716b35c1790b61249cf2974b" title="Revoke rights from the task.">l4_task_unmap</a> for details.</p>
<dl class="section pre"><dt>Precondition</dt><dd>The caller needs to take care that num_fpages is not bigger than L4_UTCB_GENERIC_DATA_SIZE - 2. </dd></dl>
<p class="definition">Definition at line <a class="el" href="l4_2sys_2task_8h_source.html#l00447">447</a> of file <a class="el" href="l4_2sys_2task_8h_source.html">task.h</a>.</p>
<p class="reference">References <a class="el" href="compiler_8h_source.html#l00161">L4_NOTHROW</a>, and <a class="el" href="l4_2sys_2utcb_8h_source.html#l00346">l4_utcb()</a>.</p>
<div id="dynsection-10" 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-10-summary" class="dynsummary" style="display:block;">
</div>
<div id="dynsection-10-content" class="dyncontent" style="display:none;">
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="group__l4__task__api_ga3632af3a1c0c1b0f011494dd60fabe41_cgraph.svg" width="292" 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="ga2f2c7940a3aa7223a5750562d933d5a4" name="ga2f2c7940a3aa7223a5750562d933d5a4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga2f2c7940a3aa7223a5750562d933d5a4">&#9670;&#160;</a></span>l4_task_vgicc_map()</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_task_vgicc_map </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a></td> <td class="paramname"><span class="paramname"><em>task</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>vgicc_fpage</em></span>&#160;)</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel inline">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Map the GIC virtual CPU interface page to the task in case Fiasco detected a GIC version 2. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">task</td><td>Capability selector of destination task </td></tr>
<tr><td class="paramname">vgicc_fpage</td><td>Flexpage that describes an area in the address space of the destination task to map the vGICC page to</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Syscall return tag </dd></dl>
<p class="definition">Definition at line <a class="el" href="____task-arm_8h_source.html#l00046">46</a> of file <a class="el" href="____task-arm_8h_source.html">__task-arm.h</a>.</p>
<p class="reference">References <a class="el" href="compiler_8h_source.html#l00161">L4_NOTHROW</a>, and <a class="el" href="l4_2sys_2utcb_8h_source.html#l00346">l4_utcb()</a>.</p>
<div id="dynsection-11" 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-11-summary" class="dynsummary" style="display:block;">
</div>
<div id="dynsection-11-content" class="dyncontent" style="display:none;">
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="group__l4__task__api_ga2f2c7940a3aa7223a5750562d933d5a4_cgraph.svg" width="275" 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>
</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="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>