677 lines
62 KiB
HTML
677 lines
62 KiB
HTML
<!-- 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::Task 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_1Task.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::Task Class Reference</div></div>
|
||
</div><!--header-->
|
||
<div class="contents">
|
||
|
||
<p>C++ interface of the <a class="el" href="classL4_1_1Task.html" title="C++ interface of the Task kernel object, see Task for the C interface.">Task</a> kernel object, see <a class="el" href="group__l4__task__api.html">Task</a> for the C interface.
|
||
<a href="#details">More...</a></p>
|
||
|
||
<p><code>#include <<a class="el" href="task_source.html">task</a>></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::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="classL4_1_1Task__inherit__graph.svg" width="388" height="855"><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::Task:</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_1Task__coll__graph.svg" width="388" height="591"><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-pub-methods" class="groupheader"><a id="pub-methods" name="pub-methods"></a>
|
||
Public Member Functions</h2></td></tr>
|
||
<tr class="memitem:a2712eda0c02dca9b9e5324e93326f704" id="r_a2712eda0c02dca9b9e5324e93326f704"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="#a2712eda0c02dca9b9e5324e93326f704">map</a> (<a class="el" href="classL4_1_1Cap.html">Cap</a>< <a class="el" href="classL4_1_1Task.html">Task</a> > const &src_task, <a class="el" href="unionl4__fpage__t.html">l4_fpage_t</a> const &snd_fpage, <a class="el" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a> snd_base, <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:a2712eda0c02dca9b9e5324e93326f704"><td class="mdescLeft"> </td><td class="mdescRight">Map resources available in the source task to a destination task. <br /></td></tr>
|
||
<tr class="memitem:a4b9294cc5d6338a36958df578f092a25" id="r_a4b9294cc5d6338a36958df578f092a25"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="#a4b9294cc5d6338a36958df578f092a25">unmap</a> (<a class="el" href="unionl4__fpage__t.html">l4_fpage_t</a> const &fpage, <a class="el" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a> map_mask, <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:a4b9294cc5d6338a36958df578f092a25"><td class="mdescLeft"> </td><td class="mdescRight">Revoke rights from the task. <br /></td></tr>
|
||
<tr class="memitem:aaf697eee4820135193d30e4b0e89535b" id="r_aaf697eee4820135193d30e4b0e89535b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="#aaf697eee4820135193d30e4b0e89535b">unmap_batch</a> (<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__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:aaf697eee4820135193d30e4b0e89535b"><td class="mdescLeft"> </td><td class="mdescRight">Revoke rights from a task. <br /></td></tr>
|
||
<tr class="memitem:a6cc499337ace36c2cec41da182c905fc" id="r_a6cc499337ace36c2cec41da182c905fc"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="#a6cc499337ace36c2cec41da182c905fc">delete_obj</a> (<a class="el" href="classL4_1_1Cap.html">L4::Cap</a>< void > 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:a6cc499337ace36c2cec41da182c905fc"><td class="mdescLeft"> </td><td class="mdescRight">Release capability and delete object. <br /></td></tr>
|
||
<tr class="memitem:a6fd63174fb70beb932b8889e3d644b53" id="r_a6fd63174fb70beb932b8889e3d644b53"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="#a6fd63174fb70beb932b8889e3d644b53">release_cap</a> (<a class="el" href="classL4_1_1Cap.html">L4::Cap</a>< void > <a class="el" href="classL4_1_1Kobject.html#a4f2117ae76762f4084e6a1adb915863c">cap</a>, <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:a6fd63174fb70beb932b8889e3d644b53"><td class="mdescLeft"> </td><td class="mdescRight">Release object capability. <br /></td></tr>
|
||
<tr class="memitem:ac2099a8cdf44b31d8bdcce6d758f8f98" id="r_ac2099a8cdf44b31d8bdcce6d758f8f98"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="#ac2099a8cdf44b31d8bdcce6d758f8f98">cap_valid</a> (<a class="el" href="classL4_1_1Cap.html">Cap</a>< void > const &<a class="el" href="classL4_1_1Kobject.html#a4f2117ae76762f4084e6a1adb915863c">cap</a>, <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:ac2099a8cdf44b31d8bdcce6d758f8f98"><td class="mdescLeft"> </td><td class="mdescRight">Check whether a capability is present (refers to an object). <br /></td></tr>
|
||
<tr class="memitem:ac3a7a5e423b0b47ed028a6616fe74415" id="r_ac3a7a5e423b0b47ed028a6616fe74415"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="#ac3a7a5e423b0b47ed028a6616fe74415">cap_equal</a> (<a class="el" href="classL4_1_1Cap.html">Cap</a>< void > const &cap_a, <a class="el" href="classL4_1_1Cap.html">Cap</a>< void > const &cap_b, <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:ac3a7a5e423b0b47ed028a6616fe74415"><td class="mdescLeft"> </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:a9e741ff1d27ca776c65abaff1de2f139" id="r_a9e741ff1d27ca776c65abaff1de2f139"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="#a9e741ff1d27ca776c65abaff1de2f139">add_ku_mem</a> (<a class="el" href="unionl4__fpage__t.html">l4_fpage_t</a> *fpage, <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:a9e741ff1d27ca776c65abaff1de2f139"><td class="mdescLeft"> </td><td class="mdescRight">Add kernel-user memory. <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> </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"> </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< Task, Kobject, L4_PROTO_TASK, Type_info::Demand_t< 2 > ></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_1Task.html">Task</a> </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"> </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< PROTO, <a class="el" href="classL4_1_1Task.html">Task</a> > </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"> </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< Typeid::Iface_list< <a class="el" href="classL4_1_1Kobject__t.html#a0d83157994565e9c01f10006bdda2efa">__Iface</a> >, typename Kobject::__Iface_list > </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"> </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< Task, Kobject, L4_PROTO_TASK, Type_info::Demand_t< 2 > ></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>< <a class="el" href="classL4_1_1Kobject__t.html#af7df35ba5bf68ef5993e605a6b62328a">Class</a> > </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"> </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> </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"> </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< Task, Kobject, L4_PROTO_TASK, Type_info::Demand_t< 2 > ></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 </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"> </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++ interface of the <a class="el" href="classL4_1_1Task.html" title="C++ interface of the Task kernel object, see Task for the C interface.">Task</a> kernel object, see <a class="el" href="group__l4__task__api.html">Task</a> for the C interface. </p>
|
||
<p>The <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> class 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 associated with an <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>.</p>
|
||
<p><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 are created using the <a class="el" href="classL4_1_1Factory.html" title="C++ Factory interface, see Factory for the C interface.">L4::Factory</a> interface. </p><dl class="section user"><dt>Include File</dt><dd><div class="fragment"><div class="line"><span class="preprocessor">#include <<a class="code" href="task.html">l4/sys/task</a>></span> </div>
|
||
<div class="ttc" id="atask_html"><div class="ttname"><a href="task.html">task</a></div><div class="ttdoc">Common task related definitions.</div></div>
|
||
</div><!-- fragment --> </dd></dl>
|
||
|
||
<p class="definition">Definition at line <a class="el" href="task_source.html#l00033">33</a> of file <a class="el" href="task_source.html">task</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="a9e741ff1d27ca776c65abaff1de2f139" name="a9e741ff1d27ca776c65abaff1de2f139"></a>
|
||
<h2 class="memtitle"><span class="permalink"><a href="#a9e741ff1d27ca776c65abaff1de2f139">◆ </a></span>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="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__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> )</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>Add kernel-user memory. </p>
|
||
<dl class="params"><dt>Parameters</dt><dd>
|
||
<table class="params">
|
||
<tr><td class="paramdir">[in,out]</td><td class="paramname">fpage</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>
|
||
<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>
|
||
<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="classL4_1_1Thread_1_1Attr.html#a858c0a51f7b147c4b2ba21d4a97afdbb" title="Bind the thread to a task.">L4::Thread::Attr::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="task_source.html#l00281">281</a> of file <a class="el" href="task_source.html">task</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_1Task_a9e741ff1d27ca776c65abaff1de2f139_cgraph.svg" width="352" 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="ac3a7a5e423b0b47ed028a6616fe74415" name="ac3a7a5e423b0b47ed028a6616fe74415"></a>
|
||
<h2 class="memtitle"><span class="permalink"><a href="#ac3a7a5e423b0b47ed028a6616fe74415">◆ </a></span>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="classL4_1_1Cap.html">Cap</a>< void > const &</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="classL4_1_1Cap.html">Cap</a>< void > const &</td> <td class="paramname"><span class="paramname"><em>cap_b</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> )</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>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">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>
|
||
<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="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 'W' right for capability flexpages.">L4_CAP_FPAGE_W</a>, <a class="el" href="group__l4__fpage__api.html#ggaee60789a48cab2782f5a368237591b39acb2b2e95f6be245f64937ac48a068066" title="Interface specific 'S' 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 'W' right for capability flexpages.">L4_CAP_FPAGE_W</a> and <a class="el" href="group__l4__fpage__api.html#ggaee60789a48cab2782f5a368237591b39acb2b2e95f6be245f64937ac48a068066" title="Interface specific 'S' 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="task_source.html#l00251">251</a> of file <a class="el" href="task_source.html">task</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-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_1Task_ac3a7a5e423b0b47ed028a6616fe74415_cgraph.svg" width="346" 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="ac2099a8cdf44b31d8bdcce6d758f8f98" name="ac2099a8cdf44b31d8bdcce6d758f8f98"></a>
|
||
<h2 class="memtitle"><span class="permalink"><a href="#ac2099a8cdf44b31d8bdcce6d758f8f98">◆ </a></span>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="classL4_1_1Cap.html">Cap</a>< void > const &</td> <td class="paramname"><span class="paramname"><em>cap</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> )</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>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">cap</td><td>Valid capability to check for presence. </td></tr>
|
||
<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="retval"><dt>Return values</dt><dd>
|
||
<table class="retval">
|
||
<tr><td class="paramname">l4_msgtag_t::label() > 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"><a class="el" href="classL4_1_1Kobject.html#a4f2117ae76762f4084e6a1adb915863c" title="Return capability selector.">cap</a></span> must be a valid capability (i.e. <span class="tt">cap.is_valid() == true</span>). If you are unsure about the validity of your capability use <a class="el" href="classL4_1_1Cap__base.html#ad664436a61346e2c0c473b3f94212523" title="Check whether a capability is present (refers to an object).">L4::Cap.validate()</a> instead. </dd></dl>
|
||
|
||
<p class="definition">Definition at line <a class="el" href="task_source.html#l00222">222</a> of file <a class="el" href="task_source.html">task</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_1Task_ac2099a8cdf44b31d8bdcce6d758f8f98_cgraph.svg" width="342" 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="a6cc499337ace36c2cec41da182c905fc" name="a6cc499337ace36c2cec41da182c905fc"></a>
|
||
<h2 class="memtitle"><span class="permalink"><a href="#a6cc499337ace36c2cec41da182c905fc">◆ </a></span>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="classL4_1_1Cap.html">L4::Cap</a>< void ></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> )</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>Release capability and delete object. </p>
|
||
<dl class="params"><dt>Parameters</dt><dd>
|
||
<table class="params">
|
||
<tr><td class="paramname">obj</td><td>Capability index of the object to delete. </td></tr>
|
||
<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>
|
||
<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 object’s reference counter, this might still imply initiation of deletion.)</p>
|
||
<p>This operation is equivalent to <a class="el" href="#a4b9294cc5d6338a36958df578f092a25" title="Revoke rights from the task.">unmap()</a> with <a class="el" href="group__l4__task__api.html#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="task_source.html#l00180">180</a> of file <a class="el" href="task_source.html">task</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_1Task_a6cc499337ace36c2cec41da182c905fc_cgraph.svg" width="348" 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="a2712eda0c02dca9b9e5324e93326f704" name="a2712eda0c02dca9b9e5324e93326f704"></a>
|
||
<h2 class="memtitle"><span class="permalink"><a href="#a2712eda0c02dca9b9e5324e93326f704">◆ </a></span>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="classL4_1_1Cap.html">Cap</a>< <a class="el" href="classL4_1_1Task.html">Task</a> > const &</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> const &</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>, </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> )</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>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">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>
|
||
<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. 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 invoked <a class="el" href="classL4_1_1Task.html" title="C++ interface of the Task kernel object, see Task for the C interface.">Task</a> capability must have the permission <a class="el" href="group__l4__fpage__api.html#ggaee60789a48cab2782f5a368237591b39a561054fb4021ff4a22ab1881c7a7de5a" title="Interface specific 'W' 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 destination task is the task referenced by the capability on which the map is invoked, and the receive window is the whole address space of that task. By specifying proper rights in the <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 'S' 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 'S' 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="task_source.html#l00085">85</a> of file <a class="el" href="task_source.html">task</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_1Task_a2712eda0c02dca9b9e5324e93326f704_cgraph.svg" width="308" 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="a6fd63174fb70beb932b8889e3d644b53" name="a6fd63174fb70beb932b8889e3d644b53"></a>
|
||
<h2 class="memtitle"><span class="permalink"><a href="#a6fd63174fb70beb932b8889e3d644b53">◆ </a></span>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="classL4_1_1Cap.html">L4::Cap</a>< void ></td> <td class="paramname"><span class="paramname"><em>cap</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> )</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>Release object capability. </p>
|
||
<dl class="params"><dt>Parameters</dt><dd>
|
||
<table class="params">
|
||
<tr><td class="paramname">cap</td><td>Capability selector of the object to release. </td></tr>
|
||
<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>
|
||
<p>This operation unmaps the capability from <span class="tt">this</span> 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"><a class="el" href="classL4_1_1Kobject.html#a4f2117ae76762f4084e6a1adb915863c" title="Return capability selector.">cap</a></span> goes down to zero, 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>
|
||
|
||
<p class="definition">Definition at line <a class="el" href="task_source.html#l00201">201</a> of file <a class="el" href="task_source.html">task</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_1Task_a6fd63174fb70beb932b8889e3d644b53_cgraph.svg" width="358" 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="a4b9294cc5d6338a36958df578f092a25" name="a4b9294cc5d6338a36958df578f092a25"></a>
|
||
<h2 class="memtitle"><span class="permalink"><a href="#a4b9294cc5d6338a36958df578f092a25">◆ </a></span>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="unionl4__fpage__t.html">l4_fpage_t</a> const &</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>, </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> )</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>Revoke rights from the task. </p>
|
||
<dl class="params"><dt>Parameters</dt><dd>
|
||
<table class="params">
|
||
<tr><td class="paramname">fpage</td><td>Flexpage that describes an area in one capability space of <span class="tt">this</span> task and the rights to revoke. </td></tr>
|
||
<tr><td class="paramname">map_mask</td><td>Unmap mask, see <a class="el" href="group__l4__task__api.html#ga3c24e67b976870a3e911c43c83382f66" title="Flags for the unmap operation.">l4_unmap_flags_t</a></td></tr>
|
||
<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>
|
||
<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>
|
||
|
||
<p class="definition">Definition at line <a class="el" href="task_source.html#l00135">135</a> of file <a class="el" href="task_source.html">task</a>.</p>
|
||
|
||
<p class="reference">References <a class="el" href="kobject_source.html#l00069">L4::Kobject::cap()</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="classL4_1_1Task_a4b9294cc5d6338a36958df578f092a25_cgraph.svg" width="310" 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="aaf697eee4820135193d30e4b0e89535b" name="aaf697eee4820135193d30e4b0e89535b"></a>
|
||
<h2 class="memtitle"><span class="permalink"><a href="#aaf697eee4820135193d30e4b0e89535b">◆ </a></span>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="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>, </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> )</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>Revoke rights from a task. </p>
|
||
<dl class="params"><dt>Parameters</dt><dd>
|
||
<table class="params">
|
||
<tr><td class="paramname">fpages</td><td>An array of flexpages. Each item describes an area in one capability space of <span class="tt">this</span> task. </td></tr>
|
||
<tr><td class="paramname">num_fpages</td><td>Number of fpages in the <span class="tt">fpages</span> array. </td></tr>
|
||
<tr><td class="paramname">map_mask</td><td>Unmap mask, see <a class="el" href="group__l4__task__api.html#ga3c24e67b976870a3e911c43c83382f66" title="Flags for the unmap operation.">l4_unmap_flags_t</a>. </td></tr>
|
||
<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>
|
||
<p>Revoke rights for an array of flexpages, see <a class="el" href="#a4b9294cc5d6338a36958df578f092a25" title="Revoke rights from the task.">unmap</a> for details.</p>
|
||
<dl class="section pre"><dt>Precondition</dt><dd>The caller needs to take care that <span class="tt">num_fpages</span> is not bigger than L4_UTCB_GENERIC_DATA_SIZE - 2. </dd></dl>
|
||
|
||
<p class="definition">Definition at line <a class="el" href="task_source.html#l00154">154</a> of file <a class="el" href="task_source.html">task</a>.</p>
|
||
|
||
<p class="reference">References <a class="el" href="kobject_source.html#l00069">L4::Kobject::cap()</a>.</p>
|
||
<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 call 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="classL4_1_1Task_aaf697eee4820135193d30e4b0e89535b_cgraph.svg" width="354" 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>
|
||
<hr/>The documentation for this class was generated from the following file:<ul>
|
||
<li>l4/sys/<a class="el" href="task_source.html">task</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_1Task.html">Task</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>
|