1003 lines
90 KiB
HTML
1003 lines
90 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: Object Invocation</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__ipc__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">Object Invocation <div class="ingroups"><a class="el" href="group__l4__api.html">Base API</a></div></div></div>
|
|
</div><!--header-->
|
|
<div class="contents">
|
|
|
|
<p>API for <a class="el" href="namespaceL4.html" title="L4 low-level kernel interface.">L4</a> object invocation.
|
|
<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 Object Invocation:</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__ipc__api.svg" width="456" height="299"><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-groups" class="groupheader"><a id="groups" name="groups"></a>
|
|
Topics</h2></td></tr>
|
|
<tr class="memitem:l4_5Fmsgitem_5Fapi" id="r_l4_5Fmsgitem_5Fapi"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__l4__msgitem__api.html">Message Items </a></td></tr>
|
|
<tr class="memdesc:group__l4__msgitem__api"><td class="mdescLeft"> </td><td class="mdescRight">Message-item-related functionality. <br /></td></tr>
|
|
<tr class="memitem:l4_5Ftimeout_5Fapi" id="r_l4_5Ftimeout_5Fapi"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__l4__timeout__api.html">Timeouts </a></td></tr>
|
|
<tr class="memdesc:group__l4__timeout__api"><td class="mdescLeft"> </td><td class="mdescRight">All kinds of timeouts and time related functions. <br /></td></tr>
|
|
<tr class="memitem:l4_5Fipc_5Ferr_5Fapi" id="r_l4_5Fipc_5Ferr_5Fapi"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__l4__ipc__err__api.html">Error Handling </a></td></tr>
|
|
<tr class="memdesc:group__l4__ipc__err__api"><td class="mdescLeft"> </td><td class="mdescRight">Error handling for <a class="el" href="namespaceL4.html" title="L4 low-level kernel interface.">L4</a> object invocation. <br /></td></tr>
|
|
<tr class="memitem:l4_5Fipc_5Frt_5Fapi" id="r_l4_5Fipc_5Frt_5Fapi"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__l4__ipc__rt__api.html">Realtime API </a></td></tr>
|
|
<tr class="memitem:l4_5Fmsgtag_5Fapi" id="r_l4_5Fmsgtag_5Fapi"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__l4__msgtag__api.html">Message Tag </a></td></tr>
|
|
<tr class="memdesc:group__l4__msgtag__api"><td class="mdescLeft"> </td><td class="mdescRight">API related to the message tag data type. <br /></td></tr>
|
|
<tr class="memitem:l4_5Futcb_5Fapi" id="r_l4_5Futcb_5Fapi"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__l4__utcb__api.html">Virtual Registers (UTCBs) </a></td></tr>
|
|
<tr class="memdesc:group__l4__utcb__api"><td class="mdescLeft"> </td><td class="mdescRight"><a class="el" href="namespaceL4.html" title="L4 low-level kernel interface.">L4</a> Virtual Registers (UTCB). <br /></td></tr>
|
|
</table><table class="memberdecls">
|
|
<tr class="heading"><td colspan="2"><h2 id="header-files" class="groupheader"><a id="files" name="files"></a>
|
|
Files</h2></td></tr>
|
|
<tr class="memitem:utcb_2Eh" id="r_utcb_2Eh"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="l4_2sys_2utcb_8h.html">utcb.h</a></td></tr>
|
|
<tr class="memdesc:l4_2sys_2utcb_8h"><td class="mdescLeft"> </td><td class="mdescRight">UTCB definitions. <br /></td></tr>
|
|
</table><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:gaecfdf101783a02772b67b94793f3a915" id="r_gaecfdf101783a02772b67b94793f3a915"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="#gaecfdf101783a02772b67b94793f3a915">l4_syscall_flags_t</a> { <br />
|
|
  <a class="el" href="#ggaecfdf101783a02772b67b94793f3a915af3417d5154b332f728f7ed44e18c37ea">L4_SYSF_NONE</a>
|
|
, <a class="el" href="#ggaecfdf101783a02772b67b94793f3a915a5b352c0582c47836abceacaa0ecb8f2e">L4_SYSF_SEND</a>
|
|
, <a class="el" href="#ggaecfdf101783a02772b67b94793f3a915ad2c6caeec90ece83786de0596f06af70">L4_SYSF_RECV</a>
|
|
, <a class="el" href="#ggaecfdf101783a02772b67b94793f3a915ad5a30ca5d080abeafb2752878672b14f">L4_SYSF_OPEN_WAIT</a>
|
|
, <br />
|
|
  <a class="el" href="#ggaecfdf101783a02772b67b94793f3a915a21d07c1e159b0e4b2bd824ac052e4508">L4_SYSF_REPLY</a>
|
|
, <a class="el" href="#ggaecfdf101783a02772b67b94793f3a915a57ba98e147a7c3a2fc1a8c965318c7dd">L4_SYSF_CALL</a>
|
|
, <a class="el" href="#ggaecfdf101783a02772b67b94793f3a915a1b844f72513ee26b6be1981be55d6100">L4_SYSF_WAIT</a>
|
|
, <a class="el" href="#ggaecfdf101783a02772b67b94793f3a915a104ca377e4e5d54863de31b8c407b120">L4_SYSF_SEND_AND_WAIT</a>
|
|
, <br />
|
|
  <a class="el" href="#ggaecfdf101783a02772b67b94793f3a915a78cc6dbf0779a89d6fe6683394082a29">L4_SYSF_REPLY_AND_WAIT</a>
|
|
<br />
|
|
}</td></tr>
|
|
<tr class="memdesc:gaecfdf101783a02772b67b94793f3a915"><td class="mdescLeft"> </td><td class="mdescRight">Capability selector flags. <a href="#gaecfdf101783a02772b67b94793f3a915">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:ga7de45eb59ce852466362ea85da00299e" id="r_ga7de45eb59ce852466362ea85da00299e"><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="#ga7de45eb59ce852466362ea85da00299e">l4_ipc_send</a> (<a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a> dest, <a class="el" href="group__l4__utcb__api.html#ga89be8a86d11c1d532b636cc2df1330fb">l4_utcb_t</a> *utcb, <a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> tag, <a class="el" href="unionl4__timeout__t.html">l4_timeout_t</a> timeout) <a class="el" href="group__l4sys__defines.html#ga362dfa378e662dd04f710a23fc7ea931">L4_NOTHROW</a></td></tr>
|
|
<tr class="memdesc:ga7de45eb59ce852466362ea85da00299e"><td class="mdescLeft"> </td><td class="mdescRight">Send a message to an object (do <b>not</b> wait for a reply). <br /></td></tr>
|
|
<tr class="memitem:gade81ef7ed9cb9e08bec716e640eabe04" id="r_gade81ef7ed9cb9e08bec716e640eabe04"><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="#gade81ef7ed9cb9e08bec716e640eabe04">l4_ipc_wait</a> (<a class="el" href="group__l4__utcb__api.html#ga89be8a86d11c1d532b636cc2df1330fb">l4_utcb_t</a> *utcb, <a class="el" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a> *label, <a class="el" href="unionl4__timeout__t.html">l4_timeout_t</a> timeout) <a class="el" href="group__l4sys__defines.html#ga362dfa378e662dd04f710a23fc7ea931">L4_NOTHROW</a></td></tr>
|
|
<tr class="memdesc:gade81ef7ed9cb9e08bec716e640eabe04"><td class="mdescLeft"> </td><td class="mdescRight">Wait for an incoming message from any possible sender. <br /></td></tr>
|
|
<tr class="memitem:ga3a8617092651c67f9ef1670b53fce66c" id="r_ga3a8617092651c67f9ef1670b53fce66c"><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="#ga3a8617092651c67f9ef1670b53fce66c">l4_ipc_receive</a> (<a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a> object, <a class="el" href="group__l4__utcb__api.html#ga89be8a86d11c1d532b636cc2df1330fb">l4_utcb_t</a> *utcb, <a class="el" href="unionl4__timeout__t.html">l4_timeout_t</a> timeout) <a class="el" href="group__l4sys__defines.html#ga362dfa378e662dd04f710a23fc7ea931">L4_NOTHROW</a></td></tr>
|
|
<tr class="memdesc:ga3a8617092651c67f9ef1670b53fce66c"><td class="mdescLeft"> </td><td class="mdescRight">Wait for a message from a specific source. <br /></td></tr>
|
|
<tr class="memitem:gab96d1669dcd54657237ee27b7f6862c6" id="r_gab96d1669dcd54657237ee27b7f6862c6"><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="#gab96d1669dcd54657237ee27b7f6862c6">l4_ipc_call</a> (<a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a> object, <a class="el" href="group__l4__utcb__api.html#ga89be8a86d11c1d532b636cc2df1330fb">l4_utcb_t</a> *utcb, <a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> tag, <a class="el" href="unionl4__timeout__t.html">l4_timeout_t</a> timeout) <a class="el" href="group__l4sys__defines.html#ga362dfa378e662dd04f710a23fc7ea931">L4_NOTHROW</a></td></tr>
|
|
<tr class="memdesc:gab96d1669dcd54657237ee27b7f6862c6"><td class="mdescLeft"> </td><td class="mdescRight">Object call (usual invocation). <br /></td></tr>
|
|
<tr class="memitem:ga1bd93bc08f402cc149bf62cba3ba9905" id="r_ga1bd93bc08f402cc149bf62cba3ba9905"><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="#ga1bd93bc08f402cc149bf62cba3ba9905">l4_ipc_reply_and_wait</a> (<a class="el" href="group__l4__utcb__api.html#ga89be8a86d11c1d532b636cc2df1330fb">l4_utcb_t</a> *utcb, <a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> tag, <a class="el" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a> *label, <a class="el" href="unionl4__timeout__t.html">l4_timeout_t</a> timeout) <a class="el" href="group__l4sys__defines.html#ga362dfa378e662dd04f710a23fc7ea931">L4_NOTHROW</a></td></tr>
|
|
<tr class="memdesc:ga1bd93bc08f402cc149bf62cba3ba9905"><td class="mdescLeft"> </td><td class="mdescRight">Reply and wait operation (uses the <em>reply</em> capability). <br /></td></tr>
|
|
<tr class="memitem:ga72ee1f322b3f633fb885905ce213e2b5" id="r_ga72ee1f322b3f633fb885905ce213e2b5"><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="#ga72ee1f322b3f633fb885905ce213e2b5">l4_ipc_send_and_wait</a> (<a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a> dest, <a class="el" href="group__l4__utcb__api.html#ga89be8a86d11c1d532b636cc2df1330fb">l4_utcb_t</a> *utcb, <a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> tag, <a class="el" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a> *label, <a class="el" href="unionl4__timeout__t.html">l4_timeout_t</a> timeout) <a class="el" href="group__l4sys__defines.html#ga362dfa378e662dd04f710a23fc7ea931">L4_NOTHROW</a></td></tr>
|
|
<tr class="memdesc:ga72ee1f322b3f633fb885905ce213e2b5"><td class="mdescLeft"> </td><td class="mdescRight">Send a message and do an open wait. <br /></td></tr>
|
|
<tr class="memitem:ga1caa56d45e0453b3002e7f5cfdb0dec7" id="r_ga1caa56d45e0453b3002e7f5cfdb0dec7"><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="#ga1caa56d45e0453b3002e7f5cfdb0dec7">l4_ipc</a> (<a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a> dest, <a class="el" href="group__l4__utcb__api.html#ga89be8a86d11c1d532b636cc2df1330fb">l4_utcb_t</a> *utcb, <a class="el" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a> flags, <a class="el" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a> slabel, <a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> tag, <a class="el" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a> *rlabel, <a class="el" href="unionl4__timeout__t.html">l4_timeout_t</a> timeout) <a class="el" href="group__l4sys__defines.html#ga362dfa378e662dd04f710a23fc7ea931">L4_NOTHROW</a></td></tr>
|
|
<tr class="memdesc:ga1caa56d45e0453b3002e7f5cfdb0dec7"><td class="mdescLeft"> </td><td class="mdescRight">Generic <a class="el" href="namespaceL4.html" title="L4 low-level kernel interface.">L4</a> object invocation. <br /></td></tr>
|
|
<tr class="memitem:gac3b4a3b13e77b799dc154c57a04cdd9b" id="r_gac3b4a3b13e77b799dc154c57a04cdd9b"><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="#gac3b4a3b13e77b799dc154c57a04cdd9b">l4_ipc_sleep</a> (<a class="el" href="unionl4__timeout__t.html">l4_timeout_t</a> timeout) <a class="el" href="group__l4sys__defines.html#ga362dfa378e662dd04f710a23fc7ea931">L4_NOTHROW</a></td></tr>
|
|
<tr class="memdesc:gac3b4a3b13e77b799dc154c57a04cdd9b"><td class="mdescLeft"> </td><td class="mdescRight">Sleep for an amount of time. <br /></td></tr>
|
|
<tr class="memitem:gaf7beb30ebd9a71fbafeda9d1be057d88" id="r_gaf7beb30ebd9a71fbafeda9d1be057d88"><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="#gaf7beb30ebd9a71fbafeda9d1be057d88">l4_ipc_sleep_ms</a> (<a class="el" href="group__l4__basic__types.html#gac1d09f3e382e711b776931f10e6e1e5a">l4_uint32_t</a> ms) <a class="el" href="group__l4sys__defines.html#ga362dfa378e662dd04f710a23fc7ea931">L4_NOTHROW</a></td></tr>
|
|
<tr class="memdesc:gaf7beb30ebd9a71fbafeda9d1be057d88"><td class="mdescLeft"> </td><td class="mdescRight">Sleep for a certain amount of milliseconds. <br /></td></tr>
|
|
<tr class="memitem:ga5a466a7ca3fa167baadbd824238ad7cc" id="r_ga5a466a7ca3fa167baadbd824238ad7cc"><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="#ga5a466a7ca3fa167baadbd824238ad7cc">l4_ipc_sleep_us</a> (<a class="el" href="group__l4__basic__types.html#gaf3331c485014bd12a9e4f9d27a55e689">l4_uint64_t</a> us) <a class="el" href="group__l4sys__defines.html#ga362dfa378e662dd04f710a23fc7ea931">L4_NOTHROW</a></td></tr>
|
|
<tr class="memdesc:ga5a466a7ca3fa167baadbd824238ad7cc"><td class="mdescLeft"> </td><td class="mdescRight">Sleep for a certain amount of microseconds. <br /></td></tr>
|
|
<tr class="memitem:gad2fef5fd3d173495d89c122883e909d6" id="r_gad2fef5fd3d173495d89c122883e909d6"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="#gad2fef5fd3d173495d89c122883e909d6">l4_sndfpage_add</a> (<a class="el" href="unionl4__fpage__t.html">l4_fpage_t</a> const snd_fpage, unsigned long snd_base, <a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> *tag) <a class="el" href="group__l4sys__defines.html#ga362dfa378e662dd04f710a23fc7ea931">L4_NOTHROW</a></td></tr>
|
|
<tr class="memdesc:gad2fef5fd3d173495d89c122883e909d6"><td class="mdescLeft"> </td><td class="mdescRight">Add a flexpage to be sent to the UTCB. <br /></td></tr>
|
|
</table>
|
|
<a name="details" id="details"></a><h2 id="header-details" class="groupheader">Detailed Description</h2>
|
|
<p>API for <a class="el" href="namespaceL4.html" title="L4 low-level kernel interface.">L4</a> object invocation. </p>
|
|
<dl class="section user"><dt>Include File</dt><dd><div class="fragment"><div class="line"><span class="preprocessor">#include <l4/sys/ipc.h></span> </div>
|
|
</div><!-- fragment --></dd></dl>
|
|
<p>General abstractions for <a class="el" href="namespaceL4.html" title="L4 low-level kernel interface.">L4</a> object invocation. The basic principle is that all objects are denoted by a capability that is accessed via a capability selector (see <a class="el" href="group__l4__cap__api.html">Capabilities </a>).</p>
|
|
<p>This set of functions is common to all kinds of objects provided by the <a class="el" href="namespaceL4.html" title="L4 low-level kernel interface.">L4</a> micro kernel. The concrete semantics of an invocation depends on the object that shall be invoked.</p>
|
|
<p>Objects may be invoked in various ways, the most common way is to use a <em>call</em> operation (<a class="el" href="#gab96d1669dcd54657237ee27b7f6862c6" title="Object call (usual invocation).">l4_ipc_call()</a>). However, there are a lot more flavours available that have a semantics depending on the object.</p>
|
|
<dl class="section see"><dt>See also</dt><dd><a class="el" href="group__l4__kernel__object__gate__api.html">IPC-Gate API</a> </dd>
|
|
<dd>
|
|
<a class="el" href="l4re_concepts_ipc.html">L4 Inter-Process Communication (IPC)</a></dd></dl>
|
|
<h1 class="doxsection"><a class="anchor" id="ipc_timeouts"></a>
|
|
Timeouts during IPC</h1>
|
|
<p>IPC operation between two communication partners may consist of up to two phases (send phase and receive phase). For both phases, a timeout may be specified (send timeout and receive timeout).</p>
|
|
<dl class="section note"><dt>Note</dt><dd>When IPC communication happens across CPU cores and a timeout is specified, then the counting of the timeout only begins after the target thread has been scheduled at least once. In particular, this means that an IPC timeout, including a timeout of zero, may be delayed depending on the scheduling on the target CPU core. If a higher priority thread on the target core is executing a busy loop, that delay may even be indefinitely.</dd></dl>
|
|
<dl class="section see"><dt>See also</dt><dd><a class="el" href="group__l4__timeout__api.html">Timeouts</a> </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="gaecfdf101783a02772b67b94793f3a915" name="gaecfdf101783a02772b67b94793f3a915"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#gaecfdf101783a02772b67b94793f3a915">◆ </a></span>l4_syscall_flags_t</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">enum <a class="el" href="#gaecfdf101783a02772b67b94793f3a915">l4_syscall_flags_t</a></td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p>Capability selector flags. </p>
|
|
<p>These flags determine the concrete operation when a kernel object is invoked.</p>
|
|
<p>The following combinations of flags are supported when invoking IPC (see <a class="el" href="#ga1caa56d45e0453b3002e7f5cfdb0dec7" title="Generic L4 object invocation.">l4_ipc()</a>); with other combinations, behavior is undefined:</p>
|
|
<ul>
|
|
<li><a class="el" href="#ggaecfdf101783a02772b67b94793f3a915a5b352c0582c47836abceacaa0ecb8f2e" title="Send-phase flag.">L4_SYSF_SEND</a>: send to specified partner</li>
|
|
<li><a class="el" href="#ggaecfdf101783a02772b67b94793f3a915ad2c6caeec90ece83786de0596f06af70" title="Receive-phase flag.">L4_SYSF_RECV</a>: receive from specified partner</li>
|
|
<li><a class="el" href="#ggaecfdf101783a02772b67b94793f3a915ad2c6caeec90ece83786de0596f06af70" title="Receive-phase flag.">L4_SYSF_RECV</a> | <a class="el" href="#ggaecfdf101783a02772b67b94793f3a915ad5a30ca5d080abeafb2752878672b14f" title="Open-wait flag.">L4_SYSF_OPEN_WAIT</a>: receive from any sending partner; see <a class="el" href="#ggaecfdf101783a02772b67b94793f3a915a1b844f72513ee26b6be1981be55d6100" title="Wait flags (combines receive and open wait).">L4_SYSF_WAIT</a></li>
|
|
<li><a class="el" href="#ggaecfdf101783a02772b67b94793f3a915a5b352c0582c47836abceacaa0ecb8f2e" title="Send-phase flag.">L4_SYSF_SEND</a> | <a class="el" href="#ggaecfdf101783a02772b67b94793f3a915ad2c6caeec90ece83786de0596f06af70" title="Receive-phase flag.">L4_SYSF_RECV</a>: call specified partner; see <a class="el" href="#ggaecfdf101783a02772b67b94793f3a915a57ba98e147a7c3a2fc1a8c965318c7dd" title="Call flags (combines send and receive).">L4_SYSF_CALL</a></li>
|
|
<li><a class="el" href="#ggaecfdf101783a02772b67b94793f3a915a5b352c0582c47836abceacaa0ecb8f2e" title="Send-phase flag.">L4_SYSF_SEND</a> | <a class="el" href="#ggaecfdf101783a02772b67b94793f3a915ad2c6caeec90ece83786de0596f06af70" title="Receive-phase flag.">L4_SYSF_RECV</a> | <a class="el" href="#ggaecfdf101783a02772b67b94793f3a915ad5a30ca5d080abeafb2752878672b14f" title="Open-wait flag.">L4_SYSF_OPEN_WAIT</a>: send to specified partner and receive from any sending partner; see <a class="el" href="#ggaecfdf101783a02772b67b94793f3a915a104ca377e4e5d54863de31b8c407b120" title="Send-and-wait flags.">L4_SYSF_SEND_AND_WAIT</a></li>
|
|
<li><a class="el" href="#ggaecfdf101783a02772b67b94793f3a915a21d07c1e159b0e4b2bd824ac052e4508" title="Reply flag.">L4_SYSF_REPLY</a> | <a class="el" href="#ggaecfdf101783a02772b67b94793f3a915a5b352c0582c47836abceacaa0ecb8f2e" title="Send-phase flag.">L4_SYSF_SEND</a>: reply to caller</li>
|
|
<li><a class="el" href="#ggaecfdf101783a02772b67b94793f3a915a21d07c1e159b0e4b2bd824ac052e4508" title="Reply flag.">L4_SYSF_REPLY</a> | <a class="el" href="#ggaecfdf101783a02772b67b94793f3a915a5b352c0582c47836abceacaa0ecb8f2e" title="Send-phase flag.">L4_SYSF_SEND</a> | <a class="el" href="#ggaecfdf101783a02772b67b94793f3a915ad2c6caeec90ece83786de0596f06af70" title="Receive-phase flag.">L4_SYSF_RECV</a>: call the caller</li>
|
|
<li><a class="el" href="#ggaecfdf101783a02772b67b94793f3a915a21d07c1e159b0e4b2bd824ac052e4508" title="Reply flag.">L4_SYSF_REPLY</a> | <a class="el" href="#ggaecfdf101783a02772b67b94793f3a915a5b352c0582c47836abceacaa0ecb8f2e" title="Send-phase flag.">L4_SYSF_SEND</a> | <a class="el" href="#ggaecfdf101783a02772b67b94793f3a915ad2c6caeec90ece83786de0596f06af70" title="Receive-phase flag.">L4_SYSF_RECV</a> | <a class="el" href="#ggaecfdf101783a02772b67b94793f3a915ad5a30ca5d080abeafb2752878672b14f" title="Open-wait flag.">L4_SYSF_OPEN_WAIT</a>: reply to caller and receive from any sending partner; see <a class="el" href="#ggaecfdf101783a02772b67b94793f3a915a78cc6dbf0779a89d6fe6683394082a29" title="Reply-and-wait flags.">L4_SYSF_REPLY_AND_WAIT</a> </li>
|
|
</ul>
|
|
<table class="fieldtable">
|
|
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ggaecfdf101783a02772b67b94793f3a915af3417d5154b332f728f7ed44e18c37ea" name="ggaecfdf101783a02772b67b94793f3a915af3417d5154b332f728f7ed44e18c37ea"></a>L4_SYSF_NONE </td><td class="fielddoc"><p>Empty set of flags. </p>
|
|
</td></tr>
|
|
<tr><td class="fieldname"><a id="ggaecfdf101783a02772b67b94793f3a915a5b352c0582c47836abceacaa0ecb8f2e" name="ggaecfdf101783a02772b67b94793f3a915a5b352c0582c47836abceacaa0ecb8f2e"></a>L4_SYSF_SEND </td><td class="fielddoc"><p>Send-phase flag. </p>
|
|
<p>Setting this flag in a capability selector induces a send phase, this means a message is sent to the object denoted by the capability. For receive phase see <a class="el" href="#ggaecfdf101783a02772b67b94793f3a915ad2c6caeec90ece83786de0596f06af70" title="Receive-phase flag.">L4_SYSF_RECV</a>.</p>
|
|
<p>In <a class="el" href="structl4__vcpu__state__t.html#ade963d62e21e225390c94f8e24a6bec1" title="User task to use.">l4_vcpu_state_t::user_task</a> this flag means that the kernel has cached the user task capability internally, see <a class="el" href="group__l4__thread__api.html#gaaf8bb1c28a014326dd381bc2d3478da8" title="Commit vCPU resume.">l4_thread_vcpu_resume_commit()</a>. </p>
|
|
</td></tr>
|
|
<tr><td class="fieldname"><a id="ggaecfdf101783a02772b67b94793f3a915ad2c6caeec90ece83786de0596f06af70" name="ggaecfdf101783a02772b67b94793f3a915ad2c6caeec90ece83786de0596f06af70"></a>L4_SYSF_RECV </td><td class="fielddoc"><p>Receive-phase flag. </p>
|
|
<p>Setting this flag in a capability selector induces a receive phase, this means the invoking thread waits for a message from the object denoted by the capability. For a send phase see <a class="el" href="#ggaecfdf101783a02772b67b94793f3a915a5b352c0582c47836abceacaa0ecb8f2e" title="Send-phase flag.">L4_SYSF_SEND</a>. </p>
|
|
</td></tr>
|
|
<tr><td class="fieldname"><a id="ggaecfdf101783a02772b67b94793f3a915ad5a30ca5d080abeafb2752878672b14f" name="ggaecfdf101783a02772b67b94793f3a915ad5a30ca5d080abeafb2752878672b14f"></a>L4_SYSF_OPEN_WAIT </td><td class="fielddoc"><p>Open-wait flag. </p>
|
|
<p>This flag indicates that the receive operation (see <a class="el" href="#ggaecfdf101783a02772b67b94793f3a915ad2c6caeec90ece83786de0596f06af70" title="Receive-phase flag.">L4_SYSF_RECV</a>) shall be an <em>open</em> <em>wait</em>. <em>Open</em> <em>wait</em> means that the invoking thread shall wait for a message from any possible sender and <em>not</em> from the sender denoted by the capability. </p>
|
|
</td></tr>
|
|
<tr><td class="fieldname"><a id="ggaecfdf101783a02772b67b94793f3a915a21d07c1e159b0e4b2bd824ac052e4508" name="ggaecfdf101783a02772b67b94793f3a915a21d07c1e159b0e4b2bd824ac052e4508"></a>L4_SYSF_REPLY </td><td class="fielddoc"><p>Reply flag. </p>
|
|
<p>This flag indicates that the send phase shall use the in-kernel reply capability instead of the capability denoted by the selector index. </p>
|
|
</td></tr>
|
|
<tr><td class="fieldname"><a id="ggaecfdf101783a02772b67b94793f3a915a57ba98e147a7c3a2fc1a8c965318c7dd" name="ggaecfdf101783a02772b67b94793f3a915a57ba98e147a7c3a2fc1a8c965318c7dd"></a>L4_SYSF_CALL </td><td class="fielddoc"><p>Call flags (combines send and receive). </p>
|
|
<p>Combines <a class="el" href="#ggaecfdf101783a02772b67b94793f3a915a5b352c0582c47836abceacaa0ecb8f2e" title="Send-phase flag.">L4_SYSF_SEND</a> and <a class="el" href="#ggaecfdf101783a02772b67b94793f3a915ad2c6caeec90ece83786de0596f06af70" title="Receive-phase flag.">L4_SYSF_RECV</a>. </p>
|
|
</td></tr>
|
|
<tr><td class="fieldname"><a id="ggaecfdf101783a02772b67b94793f3a915a1b844f72513ee26b6be1981be55d6100" name="ggaecfdf101783a02772b67b94793f3a915a1b844f72513ee26b6be1981be55d6100"></a>L4_SYSF_WAIT </td><td class="fielddoc"><p>Wait flags (combines receive and open wait). </p>
|
|
<p>Combines <a class="el" href="#ggaecfdf101783a02772b67b94793f3a915ad2c6caeec90ece83786de0596f06af70" title="Receive-phase flag.">L4_SYSF_RECV</a> and <a class="el" href="#ggaecfdf101783a02772b67b94793f3a915ad5a30ca5d080abeafb2752878672b14f" title="Open-wait flag.">L4_SYSF_OPEN_WAIT</a>. </p>
|
|
</td></tr>
|
|
<tr><td class="fieldname"><a id="ggaecfdf101783a02772b67b94793f3a915a104ca377e4e5d54863de31b8c407b120" name="ggaecfdf101783a02772b67b94793f3a915a104ca377e4e5d54863de31b8c407b120"></a>L4_SYSF_SEND_AND_WAIT </td><td class="fielddoc"><p>Send-and-wait flags. </p>
|
|
<p>Combines <a class="el" href="#ggaecfdf101783a02772b67b94793f3a915a5b352c0582c47836abceacaa0ecb8f2e" title="Send-phase flag.">L4_SYSF_SEND</a> and <a class="el" href="#ggaecfdf101783a02772b67b94793f3a915a1b844f72513ee26b6be1981be55d6100" title="Wait flags (combines receive and open wait).">L4_SYSF_WAIT</a>. </p>
|
|
</td></tr>
|
|
<tr><td class="fieldname"><a id="ggaecfdf101783a02772b67b94793f3a915a78cc6dbf0779a89d6fe6683394082a29" name="ggaecfdf101783a02772b67b94793f3a915a78cc6dbf0779a89d6fe6683394082a29"></a>L4_SYSF_REPLY_AND_WAIT </td><td class="fielddoc"><p>Reply-and-wait flags. </p>
|
|
<p>Combines <a class="el" href="#ggaecfdf101783a02772b67b94793f3a915a5b352c0582c47836abceacaa0ecb8f2e" title="Send-phase flag.">L4_SYSF_SEND</a>, <a class="el" href="#ggaecfdf101783a02772b67b94793f3a915a21d07c1e159b0e4b2bd824ac052e4508" title="Reply flag.">L4_SYSF_REPLY</a>, and <a class="el" href="#ggaecfdf101783a02772b67b94793f3a915a1b844f72513ee26b6be1981be55d6100" title="Wait flags (combines receive and open wait).">L4_SYSF_WAIT</a>. </p>
|
|
</td></tr>
|
|
</table>
|
|
|
|
<p class="definition">Definition at line <a class="el" href="l4_2sys_2consts_8h_source.html#l00050">50</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="ga1caa56d45e0453b3002e7f5cfdb0dec7" name="ga1caa56d45e0453b3002e7f5cfdb0dec7"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#ga1caa56d45e0453b3002e7f5cfdb0dec7">◆ </a></span>l4_ipc()</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_ipc </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>dest</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>, </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>flags</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>slabel</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a></td> <td class="paramname"><span class="paramname"><em>tag</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>rlabel</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype"><a class="el" href="unionl4__timeout__t.html">l4_timeout_t</a></td> <td class="paramname"><span class="paramname"><em>timeout</em></span> )</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>Generic <a class="el" href="namespaceL4.html" title="L4 low-level kernel interface.">L4</a> object invocation. </p>
|
|
<dl class="params"><dt>Parameters</dt><dd>
|
|
<table class="params">
|
|
<tr><td class="paramdir"></td><td class="paramname">dest</td><td>Destination object. <a class="el" href="group__l4__cap__api.html#ggafee0421c2fe0e5cfc59f17f16ea10879aff9320ed307e76cebfca6c2871136102" title="Invalid capability selector.">L4_INVALID_CAP</a> denotes the current thread. An IPC to the current thread will always abort after the specified timeout and can be used for sleeping without busy waiting. </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. See <a class="el" href="group__l4__utcb__api.html#gadc099b4a59e1d99638c72c11a8c8b644" title="Get the UTCB address.">l4_utcb</a>. </td></tr>
|
|
<tr><td class="paramdir"></td><td class="paramname">flags</td><td>Invocation flags (see <a class="el" href="#gaecfdf101783a02772b67b94793f3a915" title="Capability selector flags.">l4_syscall_flags_t</a>). </td></tr>
|
|
<tr><td class="paramdir"></td><td class="paramname">slabel</td><td>Send label if applicable (may be seen by the receiver). </td></tr>
|
|
<tr><td class="paramdir"></td><td class="paramname">tag</td><td>Sending message tag. </td></tr>
|
|
<tr><td class="paramdir">[out]</td><td class="paramname">rlabel</td><td>Receiving label. </td></tr>
|
|
<tr><td class="paramdir"></td><td class="paramname">timeout</td><td>Timeout pair (see <a class="el" href="unionl4__timeout__t.html" title="Timeout pair.">l4_timeout_t</a>).</td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<dl class="section return"><dt>Returns</dt><dd>return tag</dd></dl>
|
|
<dl class="section see"><dt>See also</dt><dd><a class="el" href="l4re_concepts_ipc.html">L4 Inter-Process Communication (IPC)</a> </dd></dl>
|
|
|
|
<p class="definition">Definition at line <a class="el" href="arm_2l4f_2l4_2sys_2ipc_8h_source.html#l00023">23</a> of file <a class="el" href="arm_2l4f_2l4_2sys_2ipc_8h_source.html">ipc.h</a>.</p>
|
|
|
|
<p class="reference">References <a class="el" href="compiler_8h_source.html#l00161">L4_NOTHROW</a>.</p>
|
|
|
|
<p class="reference">Referenced by <a class="el" href="l4_2sys_2ipc_8h_source.html#l00565">l4_ipc_call()</a>, <a class="el" href="l4_2sys_2ipc_8h_source.html#l00602">l4_ipc_receive()</a>, <a class="el" href="l4_2sys_2ipc_8h_source.html#l00572">l4_ipc_reply_and_wait()</a>, <a class="el" href="l4_2sys_2ipc_8h_source.html#l00586">l4_ipc_send()</a>, <a class="el" href="l4_2sys_2ipc_8h_source.html#l00579">l4_ipc_send_and_wait()</a>, and <a class="el" href="l4_2sys_2ipc_8h_source.html#l00593">l4_ipc_wait()</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 caller 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__ipc__api_ga1caa56d45e0453b3002e7f5cfdb0dec7_icgraph.svg" width="1094" height="2683"><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="gab96d1669dcd54657237ee27b7f6862c6" name="gab96d1669dcd54657237ee27b7f6862c6"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#gab96d1669dcd54657237ee27b7f6862c6">◆ </a></span>l4_ipc_call()</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_ipc_call </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>object</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>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a></td> <td class="paramname"><span class="paramname"><em>tag</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype"><a class="el" href="unionl4__timeout__t.html">l4_timeout_t</a></td> <td class="paramname"><span class="paramname"><em>timeout</em></span> )</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>Object call (usual invocation). </p>
|
|
<dl class="params"><dt>Parameters</dt><dd>
|
|
<table class="params">
|
|
<tr><td class="paramname">object</td><td>Capability selector for the object to call. A value of <a class="el" href="group__l4__cap__api.html#ggafee0421c2fe0e5cfc59f17f16ea10879aff9320ed307e76cebfca6c2871136102" title="Invalid capability selector.">L4_INVALID_CAP</a> denotes the current thread and will abort the IPC after the time specified in the <code>snd</code> part of the <code>timeout</code> parameter has expired. </td></tr>
|
|
<tr><td class="paramname">utcb</td><td>UTCB to be used for this operation, shall be the UTCB of the calling thread. See <a class="el" href="group__l4__utcb__api.html#gadc099b4a59e1d99638c72c11a8c8b644" title="Get the UTCB address.">l4_utcb</a>. </td></tr>
|
|
<tr><td class="paramname">tag</td><td>Message tag to describe the message to be sent. </td></tr>
|
|
<tr><td class="paramname">timeout</td><td>Timeout pair for send an receive phase (see <a class="el" href="unionl4__timeout__t.html" title="Timeout pair.">l4_timeout_t</a>).</td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<dl class="section return"><dt>Returns</dt><dd>result tag</dd></dl>
|
|
<p>A message is sent to the object and the invoker waits for a reply from the object. Messages from other sources are not accepted.</p>
|
|
<dl class="section note"><dt>Note</dt><dd>The send-to-receive transition needs no time, the object can reply with a send timeout of zero.</dd>
|
|
<dd>
|
|
If a finite receive timeout is specified, the IPC receive operation could abort before the partner was able to send the reply message. Under certain circumstances the partner may still have the temporary reply capability to the calling thread and may use this capability to reply to the caller at a later, unexpected time specifying an arbitrary IPC label. This case is relevant for servers which call another, possibly untrusted, server while serving a client request.</dd></dl>
|
|
<dl class="section see"><dt>See also</dt><dd><a class="el" href="l4re_concepts_ipc.html">L4 Inter-Process Communication (IPC)</a> </dd></dl>
|
|
<dl class="section examples"><dt>Examples</dt><dd><a class="el" href="examples_2sys_2aliens_2main_8c-example.html#a15">examples/sys/aliens/main.c</a>, <a class="el" href="examples_2sys_2ipc_2ipc_example_8c-example.html#a3">examples/sys/ipc/ipc_example.c</a>, and <a class="el" href="examples_2sys_2singlestep_2main_8c-example.html#a40">examples/sys/singlestep/main.c</a>.</dd>
|
|
</dl>
|
|
|
|
<p class="definition">Definition at line <a class="el" href="l4_2sys_2ipc_8h_source.html#l00565">565</a> of file <a class="el" href="l4_2sys_2ipc_8h_source.html">ipc.h</a>.</p>
|
|
|
|
<p class="reference">References <a class="el" href="amd64_2l4f_2l4_2sys_2ipc_8h_source.html#l00021">l4_ipc()</a>, <a class="el" href="compiler_8h_source.html#l00161">L4_NOTHROW</a>, and <a class="el" href="l4_2sys_2consts_8h_source.html#l00108">L4_SYSF_CALL</a>.</p>
|
|
|
|
<p class="reference">Referenced by <a class="el" href="kdebug_8h_source.html#l00139">__kdebug_3_text()</a>, <a class="el" href="kdebug_8h_source.html#l00068">__kdebug_op()</a>, <a class="el" href="kdebug_8h_source.html#l00176">__kdebug_op_1()</a>, <a class="el" href="kdebug_8h_source.html#l00098">__kdebug_text()</a>, <a class="el" href="ipc__stream_source.html#l00966">L4::Ipc::Iostream::call()</a>, <a class="el" href="kdebug_8h_source.html#l00204">enter_kdebug()</a>, <a class="el" href="amd64_2l4_2sys_2segment_8h_source.html#l00175">fiasco_amd64_segment_info()</a>, <a class="el" href="amd64_2l4f_2l4_2sys_2segment_8h_source.html#l00024">fiasco_amd64_set_fs()</a>, <a class="el" href="amd64_2l4f_2l4_2sys_2segment_8h_source.html#l00032">fiasco_amd64_set_segment_base()</a>, <a class="el" href="amd64_2l4_2sys_2segment_8h_source.html#l00166">fiasco_gdt_get_entry_offset()</a>, <a class="el" href="amd64_2l4f_2l4_2sys_2segment_8h_source.html#l00041">fiasco_gdt_set()</a>, <a class="el" href="amd64_2l4_2sys_2segment_8h_source.html#l00153">fiasco_ldt_set()</a>, <a class="el" href="icu_8h_source.html#l00396">l4_icu_bind_u()</a>, <a class="el" href="icu_8h_source.html#l00420">l4_icu_info_u()</a>, <a class="el" href="icu_8h_source.html#l00434">l4_icu_msi_info_u()</a>, <a class="el" href="icu_8h_source.html#l00457">l4_icu_set_mode_u()</a>, <a class="el" href="icu_8h_source.html#l00408">l4_icu_unbind_u()</a>, <a class="el" href="l4_2sys_2irq_8h_source.html#l00250">l4_irq_bind_vcpu_u()</a>, <a class="el" href="l4_2sys_2irq_8h_source.html#l00242">l4_irq_detach_u()</a>, <a class="el" href="l4_2sys_2irq_8h_source.html#l00270">l4_irq_receive_u()</a>, <a class="el" href="l4_2sys_2thread_8h_source.html#l00812">l4_thread_ex_regs_u()</a>, <a class="el" href="l4_2sys_2thread_8h_source.html#l01059">l4_thread_vcpu_control_ext_u()</a>, <a class="el" href="l4_2sys_2thread_8h_source.html#l01044">l4_thread_vcpu_control_u()</a>, <a class="el" href="vcon_8h_source.html#l00417">l4_vcon_get_attr_u()</a>, <a class="el" href="vcon_8h_source.html#l00397">l4_vcon_set_attr_u()</a>, <a class="el" href="x86_2l4f_2l4_2util_2port__io_8h_source.html#l00054">l4util_ioport_map()</a>, and <a class="el" href="sys_2thread_source.html#l00525">L4::Thread::modify_senders()</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__ipc__api_gab96d1669dcd54657237ee27b7f6862c6_cgraph.svg" width="210" 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-3" 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-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__ipc__api_gab96d1669dcd54657237ee27b7f6862c6_icgraph.svg" width="1139" height="2152"><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="ga3a8617092651c67f9ef1670b53fce66c" name="ga3a8617092651c67f9ef1670b53fce66c"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#ga3a8617092651c67f9ef1670b53fce66c">◆ </a></span>l4_ipc_receive()</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_ipc_receive </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>object</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>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype"><a class="el" href="unionl4__timeout__t.html">l4_timeout_t</a></td> <td class="paramname"><span class="paramname"><em>timeout</em></span> )</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>Wait for a message from a specific source. </p>
|
|
<dl class="params"><dt>Parameters</dt><dd>
|
|
<table class="params">
|
|
<tr><td class="paramname">object</td><td>Object to receive a message from. A value of <a class="el" href="group__l4__cap__api.html#ggafee0421c2fe0e5cfc59f17f16ea10879aff9320ed307e76cebfca6c2871136102" title="Invalid capability selector.">L4_INVALID_CAP</a> denotes the current thread. It could be used for sleeping without busy waiting for the time specified in the <code>rcv</code> part of the <code>timeout</code> parameter. </td></tr>
|
|
<tr><td class="paramname">utcb</td><td>UTCB to be used for this operation, shall be the UTCB of the calling thread. See <a class="el" href="group__l4__utcb__api.html#gadc099b4a59e1d99638c72c11a8c8b644" title="Get the UTCB address.">l4_utcb</a>. </td></tr>
|
|
<tr><td class="paramname">timeout</td><td>Timeout pair (see <a class="el" href="unionl4__timeout__t.html" title="Timeout pair.">l4_timeout_t</a>, only the receive part matters).</td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<dl class="section return"><dt>Returns</dt><dd>result tag.</dd></dl>
|
|
<p>This operation waits for a message from the specified object. Messages from other sources are not accepted by this operation. The operation does not include a send phase, this means no message is sent to the object.</p>
|
|
<dl class="section note"><dt>Note</dt><dd>This operation is usually used to receive messages from a specific IRQ or thread. However, it is not common to use this operation for normal applications.</dd></dl>
|
|
<dl class="section see"><dt>See also</dt><dd><a class="el" href="l4re_concepts_ipc.html">L4 Inter-Process Communication (IPC)</a> </dd></dl>
|
|
<dl class="section examples"><dt>Examples</dt><dd><a class="el" href="examples_2sys_2aliens_2main_8c-example.html#a43">examples/sys/aliens/main.c</a>, <a class="el" href="examples_2sys_2singlestep_2main_8c-example.html#a24">examples/sys/singlestep/main.c</a>, <a class="el" href="examples_2sys_2start-with-exc_2main_8c-example.html#a23">examples/sys/start-with-exc/main.c</a>, and <a class="el" href="examples_2sys_2utcb-ipc_2main_8c-example.html#a13">examples/sys/utcb-ipc/main.c</a>.</dd>
|
|
</dl>
|
|
|
|
<p class="definition">Definition at line <a class="el" href="l4_2sys_2ipc_8h_source.html#l00602">602</a> of file <a class="el" href="l4_2sys_2ipc_8h_source.html">ipc.h</a>.</p>
|
|
|
|
<p class="reference">References <a class="el" href="amd64_2l4f_2l4_2sys_2ipc_8h_source.html#l00021">l4_ipc()</a>, <a class="el" href="compiler_8h_source.html#l00161">L4_NOTHROW</a>, <a class="el" href="l4_2sys_2consts_8h_source.html#l00080">L4_SYSF_RECV</a>, and <a class="el" href="l4_2sys_2types_8h_source.html#l00155">l4_msgtag_t::raw</a>.</p>
|
|
|
|
<p class="reference">Referenced by <a class="el" href="l4_2sys_2ipc_8h_source.html#l00611">l4_ipc_sleep()</a>, and <a class="el" href="l4_2sys_2thread_8h_source.html#l00891">l4_thread_yield()</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__ipc__api_ga3a8617092651c67f9ef1670b53fce66c_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-5" 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-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__ipc__api_ga3a8617092651c67f9ef1670b53fce66c_icgraph.svg" width="475" height="135"><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="ga1bd93bc08f402cc149bf62cba3ba9905" name="ga1bd93bc08f402cc149bf62cba3ba9905"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#ga1bd93bc08f402cc149bf62cba3ba9905">◆ </a></span>l4_ipc_reply_and_wait()</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_ipc_reply_and_wait </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>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a></td> <td class="paramname"><span class="paramname"><em>tag</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype"><a class="el" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a> *</td> <td class="paramname"><span class="paramname"><em>label</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype"><a class="el" href="unionl4__timeout__t.html">l4_timeout_t</a></td> <td class="paramname"><span class="paramname"><em>timeout</em></span> )</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>Reply and wait operation (uses the <em>reply</em> capability). </p>
|
|
<dl class="params"><dt>Parameters</dt><dd>
|
|
<table class="params">
|
|
<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. See <a class="el" href="group__l4__utcb__api.html#gadc099b4a59e1d99638c72c11a8c8b644" title="Get the UTCB address.">l4_utcb</a>. </td></tr>
|
|
<tr><td class="paramdir"></td><td class="paramname">tag</td><td>Describes the message to be sent as reply. </td></tr>
|
|
<tr><td class="paramdir">[out]</td><td class="paramname">label</td><td>Label assigned to the source object of the received message. </td></tr>
|
|
<tr><td class="paramdir"></td><td class="paramname">timeout</td><td>Timeout pair (see <a class="el" href="unionl4__timeout__t.html" title="Timeout pair.">l4_timeout_t</a>).</td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<dl class="section return"><dt>Returns</dt><dd>result tag</dd></dl>
|
|
<p>A message is sent to the previous caller using the implicit reply capability. Afterwards the invoking thread waits for a message from any source. </p><dl class="section note"><dt>Note</dt><dd>This is the standard server operation: it sends a reply to the actual client and waits for the next incoming request, which may come from any other client.</dd>
|
|
<dd>
|
|
In case of multiple senders trying to send to the thread performing this system call, the thread receives from a sender with the highest priority. In this respect, IRQ sources have the highest priority 255.</dd></dl>
|
|
<dl class="section see"><dt>See also</dt><dd><a class="el" href="l4re_concepts_ipc.html">L4 Inter-Process Communication (IPC)</a> </dd></dl>
|
|
<dl class="section examples"><dt>Examples</dt><dd><a class="el" href="examples_2sys_2ipc_2ipc_example_8c-example.html#a10">examples/sys/ipc/ipc_example.c</a>.</dd>
|
|
</dl>
|
|
|
|
<p class="definition">Definition at line <a class="el" href="l4_2sys_2ipc_8h_source.html#l00572">572</a> of file <a class="el" href="l4_2sys_2ipc_8h_source.html">ipc.h</a>.</p>
|
|
|
|
<p class="reference">References <a class="el" href="l4_2sys_2consts_8h_source.html#l00153">L4_INVALID_CAP</a>, <a class="el" href="amd64_2l4f_2l4_2sys_2ipc_8h_source.html#l00021">l4_ipc()</a>, <a class="el" href="compiler_8h_source.html#l00161">L4_NOTHROW</a>, and <a class="el" href="l4_2sys_2consts_8h_source.html#l00132">L4_SYSF_REPLY_AND_WAIT</a>.</p>
|
|
|
|
<p class="reference">Referenced by <a class="el" href="ipc__stream_source.html#l00981">L4::Ipc::Iostream::reply_and_wait()</a>, and <a class="el" href="ipc__server__loop_source.html#l00381">L4::Server< LOOP_HOOKS >::reply_n_wait()</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="group__l4__ipc__api_ga1bd93bc08f402cc149bf62cba3ba9905_cgraph.svg" width="286" 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-7" 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-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__ipc__api_ga1bd93bc08f402cc149bf62cba3ba9905_icgraph.svg" width="871" 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="ga7de45eb59ce852466362ea85da00299e" name="ga7de45eb59ce852466362ea85da00299e"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#ga7de45eb59ce852466362ea85da00299e">◆ </a></span>l4_ipc_send()</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_ipc_send </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>dest</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>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a></td> <td class="paramname"><span class="paramname"><em>tag</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype"><a class="el" href="unionl4__timeout__t.html">l4_timeout_t</a></td> <td class="paramname"><span class="paramname"><em>timeout</em></span> )</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>Send a message to an object (do <b>not</b> wait for a reply). </p>
|
|
<dl class="params"><dt>Parameters</dt><dd>
|
|
<table class="params">
|
|
<tr><td class="paramname">dest</td><td>Capability selector for the destination object. A value of <a class="el" href="group__l4__cap__api.html#ggafee0421c2fe0e5cfc59f17f16ea10879aff9320ed307e76cebfca6c2871136102" title="Invalid capability selector.">L4_INVALID_CAP</a> denotes the current thread and could be used for sleeping without busy waiting for the time specified in the <code>snd</code> part of the <code>timeout</code> parameter. </td></tr>
|
|
<tr><td class="paramname">utcb</td><td>UTCB to be used for this operation, shall be the UTCB of the calling thread. See <a class="el" href="group__l4__utcb__api.html#gadc099b4a59e1d99638c72c11a8c8b644" title="Get the UTCB address.">l4_utcb</a>. </td></tr>
|
|
<tr><td class="paramname">tag</td><td>Descriptor for the message to be sent. </td></tr>
|
|
<tr><td class="paramname">timeout</td><td>Timeout pair (see <a class="el" href="unionl4__timeout__t.html" title="Timeout pair.">l4_timeout_t</a>) only send part is relevant.</td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<dl class="section return"><dt>Returns</dt><dd>Syscall return tag for the send-only operation, this means there is no return value except <a class="el" href="group__l4__msgtag__api.html#gga16589e963a73c13aefd2760ce418e053aad1669664171cc979970b1e2300bd463" title="Error indicator flag.">L4_MSGTAG_ERROR</a> indicating success or failure of the send operation. Use <a class="el" href="group__l4__ipc__err__api.html#gad40f404217497793e95a10d77a47db39" title="Get the IPC error code for an IPC operation.">l4_ipc_error()</a> to check for errors and <b>do not</b> use <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>.</dd></dl>
|
|
<p>A message is sent to the destination object. There is no receive phase included. The invoker continues working after sending the message.</p>
|
|
<dl class="section note"><dt>Note</dt><dd>This is a special-purpose message transfer. Objects usually support only invocation via <a class="el" href="#gab96d1669dcd54657237ee27b7f6862c6" title="Object call (usual invocation).">l4_ipc_call()</a> consisting of a send phase and a receive phase for returning the result of the object invocation. For example, <a class="el" href="group__l4__icu__api.html#gaab0c2827a3cf3eccf79a87f8069aa167" title="Unmask an IRQ line.">l4_icu_unmask()</a>, <a class="el" href="group__l4__icu__api.html#ga69bc4ec5786b0356779e746f5828b530" title="Mask an IRQ line.">l4_icu_mask()</a> and <a class="el" href="group__l4__irq__api.html#gab24e0fc21a207fd566ece1e6fafbac48" title="Trigger an IRQ.">l4_irq_trigger()</a> use send-only IPC operations for object invocation.</dd></dl>
|
|
<dl class="section see"><dt>See also</dt><dd><a class="el" href="l4re_concepts_ipc.html">L4 Inter-Process Communication (IPC)</a> </dd></dl>
|
|
<dl class="section examples"><dt>Examples</dt><dd><a class="el" href="examples_2sys_2start-with-exc_2main_8c-example.html#a40">examples/sys/start-with-exc/main.c</a>, and <a class="el" href="examples_2sys_2utcb-ipc_2main_8c-example.html#a11">examples/sys/utcb-ipc/main.c</a>.</dd>
|
|
</dl>
|
|
|
|
<p class="definition">Definition at line <a class="el" href="l4_2sys_2ipc_8h_source.html#l00586">586</a> of file <a class="el" href="l4_2sys_2ipc_8h_source.html">ipc.h</a>.</p>
|
|
|
|
<p class="reference">References <a class="el" href="amd64_2l4f_2l4_2sys_2ipc_8h_source.html#l00021">l4_ipc()</a>, <a class="el" href="compiler_8h_source.html#l00161">L4_NOTHROW</a>, and <a class="el" href="l4_2sys_2consts_8h_source.html#l00069">L4_SYSF_SEND</a>.</p>
|
|
|
|
<p class="reference">Referenced by <a class="el" href="l4_2sys_2irq_8h_source.html#l00263">l4_irq_trigger_u()</a>, <a class="el" href="l4_2sys_2irq_8h_source.html#l00286">l4_irq_unmask_u()</a>, <a class="el" href="vcon_8h_source.html#l00302">l4_vcon_send_u()</a>, <a class="el" href="ipc__server__loop_source.html#l00381">L4::Server< LOOP_HOOKS >::reply_n_wait()</a>, and <a class="el" href="ipc__stream_source.html#l00959">L4::Ipc::Ostream::send()</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__ipc__api_ga7de45eb59ce852466362ea85da00299e_cgraph.svg" width="218" 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__ipc__api_ga7de45eb59ce852466362ea85da00299e_icgraph.svg" width="803" height="427"><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="ga72ee1f322b3f633fb885905ce213e2b5" name="ga72ee1f322b3f633fb885905ce213e2b5"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#ga72ee1f322b3f633fb885905ce213e2b5">◆ </a></span>l4_ipc_send_and_wait()</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_ipc_send_and_wait </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>dest</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>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a></td> <td class="paramname"><span class="paramname"><em>tag</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype"><a class="el" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a> *</td> <td class="paramname"><span class="paramname"><em>label</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype"><a class="el" href="unionl4__timeout__t.html">l4_timeout_t</a></td> <td class="paramname"><span class="paramname"><em>timeout</em></span> )</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>Send a message and do an open wait. </p>
|
|
<dl class="params"><dt>Parameters</dt><dd>
|
|
<table class="params">
|
|
<tr><td class="paramdir"></td><td class="paramname">dest</td><td>Object to send a message to. A value of <a class="el" href="group__l4__cap__api.html#ggafee0421c2fe0e5cfc59f17f16ea10879aff9320ed307e76cebfca6c2871136102" title="Invalid capability selector.">L4_INVALID_CAP</a> denotes the current thread and will abort the IPC after the time specified in the <code>snd</code> part of the <code>timeout</code> parameter has expired. </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. See <a class="el" href="group__l4__utcb__api.html#gadc099b4a59e1d99638c72c11a8c8b644" title="Get the UTCB address.">l4_utcb</a>. </td></tr>
|
|
<tr><td class="paramdir"></td><td class="paramname">tag</td><td>Describes the message that shall be sent. </td></tr>
|
|
<tr><td class="paramdir">[out]</td><td class="paramname">label</td><td>Label assigned to the source object of the receive phase. </td></tr>
|
|
<tr><td class="paramdir"></td><td class="paramname">timeout</td><td>Timeout pair (see <a class="el" href="unionl4__timeout__t.html" title="Timeout pair.">l4_timeout_t</a>).</td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<dl class="section return"><dt>Returns</dt><dd>result tag</dd></dl>
|
|
<p>A message is sent to the destination object and the invoking thread waits for a reply from any source.</p>
|
|
<dl class="section note"><dt>Note</dt><dd>This is a special-purpose operation and shall not be used in general applications.</dd>
|
|
<dd>
|
|
In case of multiple senders trying to send to the thread performing this system call, the thread receives from a sender with the highest priority. In this respect, IRQ sources have the highest priority 255.</dd></dl>
|
|
<dl class="section see"><dt>See also</dt><dd><a class="el" href="l4re_concepts_ipc.html">L4 Inter-Process Communication (IPC)</a> </dd></dl>
|
|
|
|
<p class="definition">Definition at line <a class="el" href="l4_2sys_2ipc_8h_source.html#l00579">579</a> of file <a class="el" href="l4_2sys_2ipc_8h_source.html">ipc.h</a>.</p>
|
|
|
|
<p class="reference">References <a class="el" href="amd64_2l4f_2l4_2sys_2ipc_8h_source.html#l00021">l4_ipc()</a>, <a class="el" href="compiler_8h_source.html#l00161">L4_NOTHROW</a>, and <a class="el" href="l4_2sys_2consts_8h_source.html#l00124">L4_SYSF_SEND_AND_WAIT</a>.</p>
|
|
|
|
<p class="reference">Referenced by <a class="el" href="l4_2sys_2irq_8h_source.html#l00277">l4_irq_wait_u()</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__ipc__api_ga72ee1f322b3f633fb885905ce213e2b5_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 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 caller 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__ipc__api_ga72ee1f322b3f633fb885905ce213e2b5_icgraph.svg" width="472" 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="gac3b4a3b13e77b799dc154c57a04cdd9b" name="gac3b4a3b13e77b799dc154c57a04cdd9b"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#gac3b4a3b13e77b799dc154c57a04cdd9b">◆ </a></span>l4_ipc_sleep()</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_ipc_sleep </td>
|
|
<td>(</td>
|
|
<td class="paramtype"><a class="el" href="unionl4__timeout__t.html">l4_timeout_t</a></td> <td class="paramname"><span class="paramname"><em>timeout</em></span></td><td>)</td>
|
|
<td></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>Sleep for an amount of time. </p>
|
|
<dl class="params"><dt>Parameters</dt><dd>
|
|
<table class="params">
|
|
<tr><td class="paramname">timeout</td><td>Timeout pair (see <a class="el" href="unionl4__timeout__t.html" title="Timeout pair.">l4_timeout_t</a>, the receive part matters).</td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<dl class="section return"><dt>Returns</dt><dd>error code:<ul>
|
|
<li><a class="el" href="group__l4__ipc__err__api.html#gga896e67446a2348545f520c46a775c3c3ae6969a577896d63af5ab754eafbcd349" title="Timeout during receive operation.">L4_IPC_RETIMEOUT</a>: success</li>
|
|
<li><a class="el" href="group__l4__ipc__err__api.html#gga896e67446a2348545f520c46a775c3c3a1e8c9ffe50b84ac34aec53e4dc25eb71" title="Receive operation canceled.">L4_IPC_RECANCELED</a> woken up by a different thread (<a class="el" href="group__l4__thread__api.html#ga1ea29499c679caeae810516d16f4347c" title="Exchange basic thread registers.">l4_thread_ex_regs()</a>).</li>
|
|
</ul>
|
|
</dd></dl>
|
|
<p>The invoking thread waits until the timeout is expired or the wait was aborted by another thread by <a class="el" href="group__l4__thread__api.html#ga1ea29499c679caeae810516d16f4347c" title="Exchange basic thread registers.">l4_thread_ex_regs()</a>.</p>
|
|
<dl class="section see"><dt>See also</dt><dd><a class="el" href="l4re_concepts_ipc.html">L4 Inter-Process Communication (IPC)</a> </dd></dl>
|
|
|
|
<p class="definition">Definition at line <a class="el" href="l4_2sys_2ipc_8h_source.html#l00611">611</a> of file <a class="el" href="l4_2sys_2ipc_8h_source.html">ipc.h</a>.</p>
|
|
|
|
<p class="reference">References <a class="el" href="l4_2sys_2consts_8h_source.html#l00153">L4_INVALID_CAP</a>, <a class="el" href="l4_2sys_2ipc_8h_source.html#l00602">l4_ipc_receive()</a>, and <a class="el" href="compiler_8h_source.html#l00161">L4_NOTHROW</a>.</p>
|
|
|
|
<p class="reference">Referenced by <a class="el" href="l4_2sys_2ipc_8h_source.html#l00615">l4_ipc_sleep_ms()</a>, <a class="el" href="l4_2sys_2ipc_8h_source.html#l00622">l4_ipc_sleep_us()</a>, and <a class="el" href="util_8h_source.html#l00085">l4_sleep_forever()</a>.</p>
|
|
<div id="dynsection-12" 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-12-summary" class="dynsummary" style="display:block;">
|
|
</div>
|
|
<div id="dynsection-12-content" class="dyncontent" style="display:none;">
|
|
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="group__l4__ipc__api_gac3b4a3b13e77b799dc154c57a04cdd9b_cgraph.svg" width="384" 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-13" 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-13-summary" class="dynsummary" style="display:block;">
|
|
</div>
|
|
<div id="dynsection-13-content" class="dyncontent" style="display:none;">
|
|
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="group__l4__ipc__api_gac3b4a3b13e77b799dc154c57a04cdd9b_icgraph.svg" width="292" height="135"><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="gaf7beb30ebd9a71fbafeda9d1be057d88" name="gaf7beb30ebd9a71fbafeda9d1be057d88"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#gaf7beb30ebd9a71fbafeda9d1be057d88">◆ </a></span>l4_ipc_sleep_ms()</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_ipc_sleep_ms </td>
|
|
<td>(</td>
|
|
<td class="paramtype"><a class="el" href="group__l4__basic__types.html#gac1d09f3e382e711b776931f10e6e1e5a">l4_uint32_t</a></td> <td class="paramname"><span class="paramname"><em>ms</em></span></td><td>)</td>
|
|
<td></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>Sleep for a certain amount of milliseconds. </p>
|
|
<dl class="params"><dt>Parameters</dt><dd>
|
|
<table class="params">
|
|
<tr><td class="paramname">ms</td><td>Number of milliseconds to wait.</td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<dl class="section return"><dt>Returns</dt><dd>error code:<ul>
|
|
<li><a class="el" href="group__l4__ipc__err__api.html#gga896e67446a2348545f520c46a775c3c3ae6969a577896d63af5ab754eafbcd349" title="Timeout during receive operation.">L4_IPC_RETIMEOUT</a>: success</li>
|
|
<li><a class="el" href="group__l4__ipc__err__api.html#gga896e67446a2348545f520c46a775c3c3a1e8c9ffe50b84ac34aec53e4dc25eb71" title="Receive operation canceled.">L4_IPC_RECANCELED</a> woken up by a different thread (<a class="el" href="group__l4__thread__api.html#ga1ea29499c679caeae810516d16f4347c" title="Exchange basic thread registers.">l4_thread_ex_regs()</a>).</li>
|
|
</ul>
|
|
</dd></dl>
|
|
<p>The invoking thread waits until the timeout is expired or the wait was aborted by another thread by <a class="el" href="group__l4__thread__api.html#ga1ea29499c679caeae810516d16f4347c" title="Exchange basic thread registers.">l4_thread_ex_regs()</a>.</p>
|
|
<dl class="section see"><dt>See also</dt><dd><a class="el" href="l4re_concepts_ipc.html">L4 Inter-Process Communication (IPC)</a> </dd></dl>
|
|
|
|
<p class="definition">Definition at line <a class="el" href="l4_2sys_2ipc_8h_source.html#l00615">615</a> of file <a class="el" href="l4_2sys_2ipc_8h_source.html">ipc.h</a>.</p>
|
|
|
|
<p class="reference">References <a class="el" href="l4_2sys_2ipc_8h_source.html#l00611">l4_ipc_sleep()</a>, <a class="el" href="____timeout_8h_source.html#l00074">L4_IPC_TIMEOUT_NEVER</a>, <a class="el" href="compiler_8h_source.html#l00161">L4_NOTHROW</a>, and <a class="el" href="____timeout_8h_source.html#l00213">l4_timeout()</a>.</p>
|
|
<div id="dynsection-14" 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-14-summary" class="dynsummary" style="display:block;">
|
|
</div>
|
|
<div id="dynsection-14-content" class="dyncontent" style="display:none;">
|
|
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="group__l4__ipc__api_gaf7beb30ebd9a71fbafeda9d1be057d88_cgraph.svg" width="562" 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="ga5a466a7ca3fa167baadbd824238ad7cc" name="ga5a466a7ca3fa167baadbd824238ad7cc"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#ga5a466a7ca3fa167baadbd824238ad7cc">◆ </a></span>l4_ipc_sleep_us()</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_ipc_sleep_us </td>
|
|
<td>(</td>
|
|
<td class="paramtype"><a class="el" href="group__l4__basic__types.html#gaf3331c485014bd12a9e4f9d27a55e689">l4_uint64_t</a></td> <td class="paramname"><span class="paramname"><em>us</em></span></td><td>)</td>
|
|
<td></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>Sleep for a certain amount of microseconds. </p>
|
|
<dl class="params"><dt>Parameters</dt><dd>
|
|
<table class="params">
|
|
<tr><td class="paramname">us</td><td>Number of microseconds to wait.</td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<dl class="section return"><dt>Returns</dt><dd>error code:<ul>
|
|
<li><a class="el" href="group__l4__ipc__err__api.html#gga896e67446a2348545f520c46a775c3c3ae6969a577896d63af5ab754eafbcd349" title="Timeout during receive operation.">L4_IPC_RETIMEOUT</a>: success</li>
|
|
<li><a class="el" href="group__l4__ipc__err__api.html#gga896e67446a2348545f520c46a775c3c3a1e8c9ffe50b84ac34aec53e4dc25eb71" title="Receive operation canceled.">L4_IPC_RECANCELED</a> woken up by a different thread (<a class="el" href="group__l4__thread__api.html#ga1ea29499c679caeae810516d16f4347c" title="Exchange basic thread registers.">l4_thread_ex_regs()</a>).</li>
|
|
</ul>
|
|
</dd></dl>
|
|
<p>The invoking thread waits until the timeout is expired or the wait was aborted by another thread by <a class="el" href="group__l4__thread__api.html#ga1ea29499c679caeae810516d16f4347c" title="Exchange basic thread registers.">l4_thread_ex_regs()</a>.</p>
|
|
<dl class="section see"><dt>See also</dt><dd><a class="el" href="l4re_concepts_ipc.html">L4 Inter-Process Communication (IPC)</a> </dd></dl>
|
|
|
|
<p class="definition">Definition at line <a class="el" href="l4_2sys_2ipc_8h_source.html#l00622">622</a> of file <a class="el" href="l4_2sys_2ipc_8h_source.html">ipc.h</a>.</p>
|
|
|
|
<p class="reference">References <a class="el" href="l4_2sys_2ipc_8h_source.html#l00611">l4_ipc_sleep()</a>, <a class="el" href="____timeout_8h_source.html#l00074">L4_IPC_TIMEOUT_NEVER</a>, <a class="el" href="compiler_8h_source.html#l00161">L4_NOTHROW</a>, and <a class="el" href="____timeout_8h_source.html#l00213">l4_timeout()</a>.</p>
|
|
<div id="dynsection-15" 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-15-summary" class="dynsummary" style="display:block;">
|
|
</div>
|
|
<div id="dynsection-15-content" class="dyncontent" style="display:none;">
|
|
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="group__l4__ipc__api_ga5a466a7ca3fa167baadbd824238ad7cc_cgraph.svg" width="556" 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="gade81ef7ed9cb9e08bec716e640eabe04" name="gade81ef7ed9cb9e08bec716e640eabe04"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#gade81ef7ed9cb9e08bec716e640eabe04">◆ </a></span>l4_ipc_wait()</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_ipc_wait </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>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype"><a class="el" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a> *</td> <td class="paramname"><span class="paramname"><em>label</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype"><a class="el" href="unionl4__timeout__t.html">l4_timeout_t</a></td> <td class="paramname"><span class="paramname"><em>timeout</em></span> )</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>Wait for an incoming message from any possible sender. </p>
|
|
<dl class="params"><dt>Parameters</dt><dd>
|
|
<table class="params">
|
|
<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. See <a class="el" href="group__l4__utcb__api.html#gadc099b4a59e1d99638c72c11a8c8b644" title="Get the UTCB address.">l4_utcb</a>. </td></tr>
|
|
<tr><td class="paramdir">[out]</td><td class="paramname">label</td><td>Label assigned to the source object (IPC gate or IRQ). </td></tr>
|
|
<tr><td class="paramdir"></td><td class="paramname">timeout</td><td>Timeout pair (see <a class="el" href="unionl4__timeout__t.html" title="Timeout pair.">l4_timeout_t</a>, only the receive part is used).</td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<dl class="section return"><dt>Returns</dt><dd>return tag</dd></dl>
|
|
<p>This operation does an open wait, and therefore needs no capability to denote the possible source of a message. This means the calling thread waits for an incoming message from any possible source. There is no send phase included in this operation.</p>
|
|
<p>The usual usage of this function is to call that function when entering a server loop in a user-level server that implements user-level objects, see also <a class="el" href="#ga1bd93bc08f402cc149bf62cba3ba9905" title="Reply and wait operation (uses the reply capability).">l4_ipc_reply_and_wait()</a>.</p>
|
|
<dl class="section note"><dt>Note</dt><dd>In case of multiple senders trying to send to the thread performing this system call, the thread receives from a sender with the highest priority. In this respect, IRQ sources have the highest priority 255.</dd></dl>
|
|
<dl class="section see"><dt>See also</dt><dd><a class="el" href="l4re_concepts_ipc.html">L4 Inter-Process Communication (IPC)</a> </dd></dl>
|
|
<dl class="section examples"><dt>Examples</dt><dd><a class="el" href="examples_2sys_2ipc_2ipc_example_8c-example.html#a9">examples/sys/ipc/ipc_example.c</a>.</dd>
|
|
</dl>
|
|
|
|
<p class="definition">Definition at line <a class="el" href="l4_2sys_2ipc_8h_source.html#l00593">593</a> of file <a class="el" href="l4_2sys_2ipc_8h_source.html">ipc.h</a>.</p>
|
|
|
|
<p class="reference">References <a class="el" href="l4_2sys_2consts_8h_source.html#l00153">L4_INVALID_CAP</a>, <a class="el" href="amd64_2l4f_2l4_2sys_2ipc_8h_source.html#l00021">l4_ipc()</a>, <a class="el" href="compiler_8h_source.html#l00161">L4_NOTHROW</a>, <a class="el" href="l4_2sys_2consts_8h_source.html#l00116">L4_SYSF_WAIT</a>, and <a class="el" href="l4_2sys_2types_8h_source.html#l00155">l4_msgtag_t::raw</a>.</p>
|
|
|
|
<p class="reference">Referenced by <a class="el" href="ipc__server__loop_source.html#l00381">L4::Server< LOOP_HOOKS >::reply_n_wait()</a>, and <a class="el" href="ipc__stream_source.html#l01013">L4::Ipc::Istream::wait()</a>.</p>
|
|
<div id="dynsection-16" 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-16-summary" class="dynsummary" style="display:block;">
|
|
</div>
|
|
<div id="dynsection-16-content" class="dyncontent" style="display:none;">
|
|
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="group__l4__ipc__api_gade81ef7ed9cb9e08bec716e640eabe04_cgraph.svg" width="214" 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-17" 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-17-summary" class="dynsummary" style="display:block;">
|
|
</div>
|
|
<div id="dynsection-17-content" class="dyncontent" style="display:none;">
|
|
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="group__l4__ipc__api_gade81ef7ed9cb9e08bec716e640eabe04_icgraph.svg" width="799" 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="gad2fef5fd3d173495d89c122883e909d6" name="gad2fef5fd3d173495d89c122883e909d6"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#gad2fef5fd3d173495d89c122883e909d6">◆ </a></span>l4_sndfpage_add()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="mlabels">
|
|
<tr>
|
|
<td class="mlabels-left">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">int l4_sndfpage_add </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">unsigned long</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="structl4__msgtag__t.html">l4_msgtag_t</a> *</td> <td class="paramname"><span class="paramname"><em>tag</em></span> )</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 a flexpage to be sent to the UTCB. </p>
|
|
<dl class="params"><dt>Parameters</dt><dd>
|
|
<table class="params">
|
|
<tr><td class="paramdir"></td><td class="paramname">snd_fpage</td><td>Flexpage. </td></tr>
|
|
<tr><td class="paramdir"></td><td class="paramname">snd_base</td><td>Send base. </td></tr>
|
|
<tr><td class="paramdir">[in,out]</td><td class="paramname">tag</td><td>Tag to be updated. Only the number of items is incremented in the updated tag, all other members remain unmodified.</td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<dl class="section return"><dt>Returns</dt><dd>0 on success, negative error code otherwise</dd></dl>
|
|
<dl class="section see"><dt>See also</dt><dd><a class="el" href="l4re_concepts_ipc.html">L4 Inter-Process Communication (IPC)</a> </dd></dl>
|
|
|
|
<p class="definition">Definition at line <a class="el" href="l4_2sys_2ipc_8h_source.html#l00685">685</a> of file <a class="el" href="l4_2sys_2ipc_8h_source.html">ipc.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-18" 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-18-summary" class="dynsummary" style="display:block;">
|
|
</div>
|
|
<div id="dynsection-18-content" class="dyncontent" style="display:none;">
|
|
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="group__l4__ipc__api_gad2fef5fd3d173495d89c122883e909d6_cgraph.svg" width="260" 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>
|