l4re-base-25.08.0

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

View File

@@ -0,0 +1,607 @@
<!-- HTML header for doxygen 1.9.1-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.15.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>L4Re Operating System Framework: l4/sys/cxx/ipc_iface Source File</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('ipc__iface_source.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">ipc_iface</div></div>
</div><!--header-->
<div class="contents">
<a href="ipc__iface.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">// vi:set ft=cpp: -*- Mode: C++ -*-</span></div>
<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment">/*</span></div>
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment"> * (c) 2014 Alexander Warg &lt;alexander.warg@kernkonzept.com&gt;</span></div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"> *</span></div>
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment"> * License: see LICENSE.spdx (in this directory or the directories above)</span></div>
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"> */</span></div>
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="preprocessor">#pragma once</span></div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="preprocessor">#pragma GCC system_header</span></div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span> </div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="preprocessor">#include &lt;l4/sys/cxx/ipc_basics&gt;</span></div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="preprocessor">#include &lt;<a class="code" href="ipc__types.html">l4/sys/cxx/ipc_types</a>&gt;</span></div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="preprocessor">#include &lt;<a class="code" href="____typeinfo_8h.html">l4/sys/__typeinfo.h</a>&gt;</span></div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span></div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span></div>
<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> </div>
<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span><span class="comment">// TODO: add some more documentation</span></div>
<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespaceL4.html">L4</a> { <span class="keyword">namespace </span><a class="code hl_namespace" href="namespaceL4_1_1Ipc.html">Ipc</a> {</div>
<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span></div>
<div class="foldopen" id="foldopen00239" data-start="{" data-end="};">
<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"><a class="line" href="structL4_1_1Ipc_1_1Call.html"> 239</a></span><span class="keyword">struct </span><a class="code hl_define" href="group__l4sys__defines.html#ga63e7f1ab50a1b3049bdd0a34e97423c2">L4_EXPORT</a> <a class="code hl_struct" href="structL4_1_1Ipc_1_1Call.html">Call</a></div>
<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span>{</div>
<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span> <span class="keyword">enum</span> { Is_call = <span class="keyword">true</span> };</div>
<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span> <span class="keyword">enum</span> { Rights = 0 };</div>
<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span> <span class="keyword">static</span> <a class="code hl_union" href="unionl4__timeout__t.html">l4_timeout_t</a> timeout() { <span class="keywordflow">return</span> <a class="code hl_define" href="group__l4__timeout__api.html#gaf01c5e1475efc4f33bc7d1985f7320d3">L4_IPC_NEVER</a>; }</div>
<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span>};</div>
</div>
<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span></div>
<div class="foldopen" id="foldopen00249" data-start="{" data-end="};">
<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"><a class="line" href="structL4_1_1Ipc_1_1Call__zero__send__timeout.html"> 249</a></span><span class="keyword">struct </span><a class="code hl_define" href="group__l4sys__defines.html#ga63e7f1ab50a1b3049bdd0a34e97423c2">L4_EXPORT</a> <a class="code hl_struct" href="structL4_1_1Ipc_1_1Call__zero__send__timeout.html">Call_zero_send_timeout</a> : <a class="code hl_struct" href="structL4_1_1Ipc_1_1Call.html">Call</a></div>
<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span>{</div>
<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span> <span class="keyword">static</span> <a class="code hl_union" href="unionl4__timeout__t.html">l4_timeout_t</a> timeout() { <span class="keywordflow">return</span> <a class="code hl_define" href="group__l4__timeout__api.html#ga22a6a662679f6baaa0ae931d8bb443ea">L4_IPC_SEND_TIMEOUT_0</a>; }</div>
<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span>};</div>
</div>
<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span></div>
<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span><span class="keyword">template</span>&lt;<span class="keywordtype">unsigned</span> RIGHTS&gt;</div>
<div class="foldopen" id="foldopen00270" data-start="{" data-end="};">
<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"><a class="line" href="structL4_1_1Ipc_1_1Call__t.html"> 270</a></span><span class="keyword">struct </span><a class="code hl_define" href="group__l4sys__defines.html#ga63e7f1ab50a1b3049bdd0a34e97423c2">L4_EXPORT</a> <a class="code hl_struct" href="structL4_1_1Ipc_1_1Call__t.html">Call_t</a> : <a class="code hl_struct" href="structL4_1_1Ipc_1_1Call.html">Call</a></div>
<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span>{</div>
<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span> <span class="keyword">enum</span> { Rights = RIGHTS };</div>
<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span>};</div>
</div>
<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span></div>
<div class="foldopen" id="foldopen00287" data-start="{" data-end="};">
<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"><a class="line" href="structL4_1_1Ipc_1_1Send__only.html"> 287</a></span><span class="keyword">struct </span><a class="code hl_define" href="group__l4sys__defines.html#ga63e7f1ab50a1b3049bdd0a34e97423c2">L4_EXPORT</a> <a class="code hl_struct" href="structL4_1_1Ipc_1_1Send__only.html">Send_only</a></div>
<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span>{</div>
<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"> 289</span> <span class="keyword">enum</span> { Is_call = <span class="keyword">false</span> };</div>
<div class="line"><a id="l00290" name="l00290"></a><span class="lineno"> 290</span> <span class="keyword">enum</span> { Rights = 0 };</div>
<div class="line"><a id="l00291" name="l00291"></a><span class="lineno"> 291</span> <span class="keyword">static</span> <a class="code hl_union" href="unionl4__timeout__t.html">l4_timeout_t</a> timeout() { <span class="keywordflow">return</span> <a class="code hl_define" href="group__l4__timeout__api.html#gaf01c5e1475efc4f33bc7d1985f7320d3">L4_IPC_NEVER</a>; }</div>
<div class="line"><a id="l00292" name="l00292"></a><span class="lineno"> 292</span>};</div>
</div>
<div class="line"><a id="l00293" name="l00293"></a><span class="lineno"> 293</span> </div>
<div class="line"><a id="l00294" name="l00294"></a><span class="lineno"> 294</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespaceL4_1_1Ipc_1_1Msg.html">Msg</a> {</div>
<div class="line"><a id="l00295" name="l00295"></a><span class="lineno"> 295</span></div>
<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> OP, <span class="keyword">typename</span> CLASS, <span class="keyword">typename</span> SIG, <span class="keyword">typename</span> FLAGS = Call&gt;</div>
<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"> 307</span><span class="keyword">struct </span><a class="code hl_define" href="group__l4sys__defines.html#ga63e7f1ab50a1b3049bdd0a34e97423c2">L4_EXPORT</a> Rpc_inline_call;</div>
<div class="line"><a id="l00308" name="l00308"></a><span class="lineno"> 308</span></div>
<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"> 313</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> OP, <span class="keyword">typename</span> CLASS, <span class="keyword">typename</span> FLAGS, <span class="keyword">typename</span> R,</div>
<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"> 314</span> <span class="keyword">typename</span> ...ARGS&gt;</div>
<div class="line"><a id="l00315" name="l00315"></a><span class="lineno"> 315</span><span class="keyword">struct </span><a class="code hl_define" href="group__l4sys__defines.html#ga63e7f1ab50a1b3049bdd0a34e97423c2">L4_EXPORT</a> Rpc_inline_call&lt;OP, CLASS, R (ARGS...), FLAGS&gt;</div>
<div class="line"><a id="l00316" name="l00316"></a><span class="lineno"> 316</span>{</div>
<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"> 317</span> <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keyword">struct </span>Result { <span class="keyword">typedef</span> T result_type; };</div>
<div class="line"><a id="l00318" name="l00318"></a><span class="lineno"> 318</span> <span class="keyword">enum</span></div>
<div class="line"><a id="l00319" name="l00319"></a><span class="lineno"> 319</span> {</div>
<div class="line"><a id="l00320" name="l00320"></a><span class="lineno"> 320</span> Return_tag = L4::Types::Same&lt;R, l4_msgtag_t&gt;::value</div>
<div class="line"><a id="l00321" name="l00321"></a><span class="lineno"> 321</span> };</div>
<div class="line"><a id="l00322" name="l00322"></a><span class="lineno"> 322</span></div>
<div class="line"><a id="l00324" name="l00324"></a><span class="lineno"> 324</span> <span class="keyword">typedef</span> Rpc_inline_call type;</div>
<div class="line"><a id="l00326" name="l00326"></a><span class="lineno"> 326</span> <span class="keyword">typedef</span> OP op_type;</div>
<div class="line"><a id="l00328" name="l00328"></a><span class="lineno"> 328</span> <span class="keyword">typedef</span> CLASS class_type;</div>
<div class="line"><a id="l00330" name="l00330"></a><span class="lineno"> 330</span> <span class="keyword">typedef</span> <span class="keyword">typename</span> Result&lt;R&gt;::result_type result_type;</div>
<div class="line"><a id="l00332" name="l00332"></a><span class="lineno"> 332</span> <span class="keyword">typedef</span> R ipc_type (ARGS...);</div>
<div class="line"><a id="l00334" name="l00334"></a><span class="lineno"> 334</span> <span class="keyword">typedef</span> result_type func_type (<span class="keyword">typename</span> _Elem&lt;ARGS&gt;::arg_type...);</div>
<div class="line"><a id="l00335" name="l00335"></a><span class="lineno"> 335</span></div>
<div class="line"><a id="l00337" name="l00337"></a><span class="lineno"> 337</span> <span class="keyword">typedef</span> FLAGS flags_type;</div>
<div class="line"><a id="l00338" name="l00338"></a><span class="lineno"> 338</span> </div>
<div class="line"><a id="l00339" name="l00339"></a><span class="lineno"> 339</span> <span class="keyword">template</span>&lt;<span class="keyword">typename</span> RES&gt;</div>
<div class="line"><a id="l00340" name="l00340"></a><span class="lineno"> 340</span> <span class="keyword">static</span> <span class="keyword">typename</span> L4::Types::Enable_if&lt; Return_tag, RES &gt;::type</div>
<div class="line"><a id="l00341" name="l00341"></a><span class="lineno"> 341</span> return_err(<span class="keywordtype">long</span> err) <span class="keyword">noexcept</span> { <span class="keywordflow">return</span> <a class="code hl_function" href="group__l4__msgtag__api.html#ga661d71acad9d096fa990f7c94943bc78">l4_msgtag</a>(err, 0, 0, 0); }</div>
<div class="line"><a id="l00342" name="l00342"></a><span class="lineno"> 342</span> </div>
<div class="line"><a id="l00343" name="l00343"></a><span class="lineno"> 343</span> <span class="keyword">template</span>&lt;<span class="keyword">typename</span> RES&gt;</div>
<div class="line"><a id="l00344" name="l00344"></a><span class="lineno"> 344</span> <span class="keyword">static</span> <span class="keyword">typename</span> L4::Types::Enable_if&lt; Return_tag, RES &gt;::type</div>
<div class="line"><a id="l00345" name="l00345"></a><span class="lineno"> 345</span> return_ipc_err(<a class="code hl_typedef" href="group__l4__msgtag__api.html#gad2c28384485a82490cab17ac929f05e9">l4_msgtag_t</a> tag, <a class="code hl_typedef" href="group__l4__utcb__api.html#ga89be8a86d11c1d532b636cc2df1330fb">l4_utcb_t</a> <span class="keyword">const</span> *) <span class="keyword">noexcept</span> { <span class="keywordflow">return</span> tag; }</div>
<div class="line"><a id="l00346" name="l00346"></a><span class="lineno"> 346</span> </div>
<div class="line"><a id="l00347" name="l00347"></a><span class="lineno"> 347</span> <span class="keyword">template</span>&lt;<span class="keyword">typename</span> RES&gt;</div>
<div class="line"><a id="l00348" name="l00348"></a><span class="lineno"> 348</span> <span class="keyword">static</span> <span class="keyword">typename</span> L4::Types::Enable_if&lt; Return_tag, RES &gt;::type</div>
<div class="line"><a id="l00349" name="l00349"></a><span class="lineno"> 349</span> return_code(<a class="code hl_typedef" href="group__l4__msgtag__api.html#gad2c28384485a82490cab17ac929f05e9">l4_msgtag_t</a> tag) <span class="keyword">noexcept</span> { <span class="keywordflow">return</span> tag; }</div>
<div class="line"><a id="l00350" name="l00350"></a><span class="lineno"> 350</span> </div>
<div class="line"><a id="l00351" name="l00351"></a><span class="lineno"> 351</span> <span class="keyword">template</span>&lt;<span class="keyword">typename</span> RES&gt;</div>
<div class="line"><a id="l00352" name="l00352"></a><span class="lineno"> 352</span> <span class="keyword">static</span> <span class="keyword">typename</span> L4::Types::Enable_if&lt; !Return_tag, RES &gt;::type</div>
<div class="line"><a id="l00353" name="l00353"></a><span class="lineno"> 353</span> return_err(<span class="keywordtype">long</span> err) <span class="keyword">noexcept</span> { <span class="keywordflow">return</span> err; }</div>
<div class="line"><a id="l00354" name="l00354"></a><span class="lineno"> 354</span> </div>
<div class="line"><a id="l00355" name="l00355"></a><span class="lineno"> 355</span> <span class="keyword">template</span>&lt;<span class="keyword">typename</span> RES&gt;</div>
<div class="line"><a id="l00356" name="l00356"></a><span class="lineno"> 356</span> <span class="keyword">static</span> <span class="keyword">typename</span> L4::Types::Enable_if&lt; !Return_tag, RES &gt;::type</div>
<div class="line"><a id="l00357" name="l00357"></a><span class="lineno"> 357</span> return_ipc_err(<a class="code hl_typedef" href="group__l4__msgtag__api.html#gad2c28384485a82490cab17ac929f05e9">l4_msgtag_t</a>, <a class="code hl_typedef" href="group__l4__utcb__api.html#ga89be8a86d11c1d532b636cc2df1330fb">l4_utcb_t</a> *utcb) <span class="keyword">noexcept</span></div>
<div class="line"><a id="l00358" name="l00358"></a><span class="lineno"> 358</span> { <span class="keywordflow">return</span> <a class="code hl_function" href="l4_2sys_2ipc_8h.html#a92b8e935d6fa1222f0358a477f539367">l4_ipc_to_errno</a>(<a class="code hl_function" href="group__l4__ipc__err__api.html#ga3b77d0d9d3794278bf464824e076c6b8">l4_ipc_error_code</a>(utcb)); }</div>
<div class="line"><a id="l00359" name="l00359"></a><span class="lineno"> 359</span> </div>
<div class="line"><a id="l00360" name="l00360"></a><span class="lineno"> 360</span> <span class="keyword">template</span>&lt;<span class="keyword">typename</span> RES&gt;</div>
<div class="line"><a id="l00361" name="l00361"></a><span class="lineno"> 361</span> <span class="keyword">static</span> <span class="keyword">typename</span> L4::Types::Enable_if&lt; !Return_tag, RES &gt;::type</div>
<div class="line"><a id="l00362" name="l00362"></a><span class="lineno"> 362</span> return_code(<a class="code hl_typedef" href="group__l4__msgtag__api.html#gad2c28384485a82490cab17ac929f05e9">l4_msgtag_t</a> tag) <span class="keyword">noexcept</span> { <span class="keywordflow">return</span> tag.label(); }</div>
<div class="line"><a id="l00363" name="l00363"></a><span class="lineno"> 363</span> </div>
<div class="line"><a id="l00364" name="l00364"></a><span class="lineno"> 364</span> <span class="keyword">static</span> R call(L4::Cap&lt;class_type&gt; cap,</div>
<div class="line"><a id="l00365" name="l00365"></a><span class="lineno"> 365</span> <span class="keyword">typename</span> _Elem&lt;ARGS&gt;::arg_type ...a,</div>
<div class="line"><a id="l00366" name="l00366"></a><span class="lineno"> 366</span> <a class="code hl_typedef" href="group__l4__utcb__api.html#ga89be8a86d11c1d532b636cc2df1330fb">l4_utcb_t</a> *utcb = <a class="code hl_function" href="group__l4__utcb__api.html#gadc099b4a59e1d99638c72c11a8c8b644">l4_utcb</a>()) noexcept;</div>
<div class="line"><a id="l00367" name="l00367"></a><span class="lineno"> 367</span>};</div>
<div class="line"><a id="l00368" name="l00368"></a><span class="lineno"> 368</span></div>
<div class="line"><a id="l00373" name="l00373"></a><span class="lineno"> 373</span>template&lt;typename OP, typename CLASS, typename SIG, typename FLAGS = Call&gt;</div>
<div class="line"><a id="l00374" name="l00374"></a><span class="lineno"> 374</span>struct <a class="code hl_define" href="group__l4sys__defines.html#ga63e7f1ab50a1b3049bdd0a34e97423c2">L4_EXPORT</a> Rpc_call;</div>
<div class="line"><a id="l00375" name="l00375"></a><span class="lineno"> 375</span></div>
<div class="line"><a id="l00383" name="l00383"></a><span class="lineno"> 383</span>template&lt;typename IPC, typename SIG&gt; struct _Call;</div>
<div class="line"><a id="l00384" name="l00384"></a><span class="lineno"> 384</span></div>
<div class="line"><a id="l00386" name="l00386"></a><span class="lineno"> 386</span>template&lt;typename IPC, typename R, typename ...ARGS&gt;</div>
<div class="line"><a id="l00387" name="l00387"></a><span class="lineno"> 387</span>struct _Call&lt;IPC, R (ARGS...)&gt;</div>
<div class="line"><a id="l00388" name="l00388"></a><span class="lineno"> 388</span>{</div>
<div class="line"><a id="l00389" name="l00389"></a><span class="lineno"> 389</span><span class="keyword">public</span>:</div>
<div class="line"><a id="l00390" name="l00390"></a><span class="lineno"> 390</span> <span class="keyword">typedef</span> <span class="keyword">typename</span> IPC::class_type class_type;</div>
<div class="line"><a id="l00391" name="l00391"></a><span class="lineno"> 391</span> <span class="keyword">typedef</span> <span class="keyword">typename</span> IPC::result_type result_type;</div>
<div class="line"><a id="l00392" name="l00392"></a><span class="lineno"> 392</span> </div>
<div class="line"><a id="l00393" name="l00393"></a><span class="lineno"> 393</span><span class="keyword">private</span>:</div>
<div class="line"><a id="l00394" name="l00394"></a><span class="lineno"> 394</span> L4::Cap&lt;class_type&gt; cap() const noexcept</div>
<div class="line"><a id="l00395" name="l00395"></a><span class="lineno"> 395</span> {</div>
<div class="line"><a id="l00396" name="l00396"></a><span class="lineno"> 396</span> <span class="keywordflow">return</span> L4::Cap&lt;class_type&gt;(<span class="keyword">reinterpret_cast&lt;</span><a class="code hl_typedef" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a><span class="keyword">&gt;</span>(<span class="keyword">this</span>)</div>
<div class="line"><a id="l00397" name="l00397"></a><span class="lineno"> 397</span> &amp; <a class="code hl_enumvalue" href="group__l4__cap__api.html#ggafee0421c2fe0e5cfc59f17f16ea10879aba3e1dbcc462d842d56df9fc928e796b">L4_CAP_MASK</a>);</div>
<div class="line"><a id="l00398" name="l00398"></a><span class="lineno"> 398</span> }</div>
<div class="line"><a id="l00399" name="l00399"></a><span class="lineno"> 399</span> </div>
<div class="line"><a id="l00400" name="l00400"></a><span class="lineno"> 400</span><span class="keyword">public</span>:</div>
<div class="line"><a id="l00402" name="l00402"></a><span class="lineno"> 402</span> result_type operator () (ARGS ...a, <a class="code hl_typedef" href="group__l4__utcb__api.html#ga89be8a86d11c1d532b636cc2df1330fb">l4_utcb_t</a> *utcb = <a class="code hl_function" href="group__l4__utcb__api.html#gadc099b4a59e1d99638c72c11a8c8b644">l4_utcb</a>()) const noexcept</div>
<div class="line"><a id="l00403" name="l00403"></a><span class="lineno"> 403</span> { <span class="keywordflow">return</span> IPC::call(cap(), a..., utcb); }</div>
<div class="line"><a id="l00404" name="l00404"></a><span class="lineno"> 404</span>};</div>
<div class="line"><a id="l00405" name="l00405"></a><span class="lineno"> 405</span></div>
<div class="line"><a id="l00412" name="l00412"></a><span class="lineno"> 412</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> IPC&gt; <span class="keyword">struct </span>Call : _Call&lt;IPC, typename IPC::func_type&gt; {};</div>
<div class="line"><a id="l00413" name="l00413"></a><span class="lineno"> 413</span></div>
<div class="line"><a id="l00418" name="l00418"></a><span class="lineno"> 418</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> OP,</div>
<div class="line"><a id="l00419" name="l00419"></a><span class="lineno"> 419</span> <span class="keyword">typename</span> CLASS,</div>
<div class="line"><a id="l00420" name="l00420"></a><span class="lineno"> 420</span> <span class="keyword">typename</span> FLAGS,</div>
<div class="line"><a id="l00421" name="l00421"></a><span class="lineno"> 421</span> <span class="keyword">typename</span> R,</div>
<div class="line"><a id="l00422" name="l00422"></a><span class="lineno"> 422</span> <span class="keyword">typename</span> ...ARGS&gt;</div>
<div class="line"><a id="l00423" name="l00423"></a><span class="lineno"> 423</span><span class="keyword">struct </span><a class="code hl_define" href="group__l4sys__defines.html#ga63e7f1ab50a1b3049bdd0a34e97423c2">L4_EXPORT</a> Rpc_call&lt;OP, CLASS, R (ARGS...), FLAGS&gt; :</div>
<div class="line"><a id="l00424" name="l00424"></a><span class="lineno"> 424</span> Rpc_inline_call&lt;OP, CLASS, R (ARGS...), FLAGS&gt;</div>
<div class="line"><a id="l00425" name="l00425"></a><span class="lineno"> 425</span>{</div>
<div class="line"><a id="l00426" name="l00426"></a><span class="lineno"> 426</span> <span class="keyword">static</span> R call(L4::Cap&lt;CLASS&gt; cap,</div>
<div class="line"><a id="l00427" name="l00427"></a><span class="lineno"> 427</span> <span class="keyword">typename</span> _Elem&lt;ARGS&gt;::arg_type ...a,</div>
<div class="line"><a id="l00428" name="l00428"></a><span class="lineno"> 428</span> <a class="code hl_typedef" href="group__l4__utcb__api.html#ga89be8a86d11c1d532b636cc2df1330fb">l4_utcb_t</a> *utcb = <a class="code hl_function" href="group__l4__utcb__api.html#gadc099b4a59e1d99638c72c11a8c8b644">l4_utcb</a>()) noexcept;</div>
<div class="line"><a id="l00429" name="l00429"></a><span class="lineno"> 429</span>};</div>
<div class="line"><a id="l00430" name="l00430"></a><span class="lineno"> 430</span> </div>
<div class="line"><a id="l00431" name="l00431"></a><span class="lineno"> 431</span><span class="preprocessor">#define L4_INLINE_RPC_SRV_FORWARD(name) \</span></div>
<div class="line"><a id="l00432" name="l00432"></a><span class="lineno"> 432</span><span class="preprocessor"> template&lt;typename OBJ&gt; struct fwd \</span></div>
<div class="line"><a id="l00433" name="l00433"></a><span class="lineno"> 433</span><span class="preprocessor"> { \</span></div>
<div class="line"><a id="l00434" name="l00434"></a><span class="lineno"> 434</span><span class="preprocessor"> OBJ *o; \</span></div>
<div class="line"><a id="l00435" name="l00435"></a><span class="lineno"> 435</span><span class="preprocessor"> fwd(OBJ *o) noexcept : o(o) {} \</span></div>
<div class="line"><a id="l00436" name="l00436"></a><span class="lineno"> 436</span><span class="preprocessor"> template&lt;typename ...ARGS&gt; long call(ARGS ...a) noexcept(noexcept(o-&gt;op_##name(a...))) \</span></div>
<div class="line"><a id="l00437" name="l00437"></a><span class="lineno"> 437</span><span class="preprocessor"> { return o-&gt;op_##name(a...); } \</span></div>
<div class="line"><a id="l00438" name="l00438"></a><span class="lineno"> 438</span><span class="preprocessor"> }</span></div>
<div class="line"><a id="l00439" name="l00439"></a><span class="lineno"> 439</span> </div>
<div class="line"><a id="l00440" name="l00440"></a><span class="lineno"> 440</span></div>
<div class="foldopen" id="foldopen00453" data-start="" data-end="">
<div class="line"><a id="l00453" name="l00453"></a><span class="lineno"><a class="line" href="ipc__iface.html#a7bc5bdbe269ef0598c166ed1dd923549"> 453</a></span><span class="preprocessor">#define L4_INLINE_RPC_NF(res, name, args...) \</span></div>
<div class="line"><a id="l00454" name="l00454"></a><span class="lineno"> 454</span><span class="preprocessor"> struct name##_t : L4::Ipc::Msg::Rpc_inline_call&lt;name##_t, Class, res args&gt; \</span></div>
<div class="line"><a id="l00455" name="l00455"></a><span class="lineno"> 455</span><span class="preprocessor"> { \</span></div>
<div class="line"><a id="l00456" name="l00456"></a><span class="lineno"> 456</span><span class="preprocessor"> typedef L4::Ipc::Msg::Rpc_inline_call&lt;name##_t, Class, res args&gt; type; \</span></div>
<div class="line"><a id="l00457" name="l00457"></a><span class="lineno"> 457</span><span class="preprocessor"> L4_INLINE_RPC_SRV_FORWARD(name); \</span></div>
<div class="line"><a id="l00458" name="l00458"></a><span class="lineno"> 458</span><span class="preprocessor"> }</span></div>
</div>
<div class="line"><a id="l00459" name="l00459"></a><span class="lineno"> 459</span></div>
<div class="foldopen" id="foldopen00466" data-start="" data-end="">
<div class="line"><a id="l00466" name="l00466"></a><span class="lineno"><a class="line" href="ipc__iface.html#a9c231340e92b2868f1b85b302fb2b159"> 466</a></span><span class="preprocessor">#define L4_INLINE_RPC_NF_OP(op, res, name, args...) \</span></div>
<div class="line"><a id="l00467" name="l00467"></a><span class="lineno"> 467</span><span class="preprocessor"> struct name##_t : L4::Ipc::Msg::Rpc_inline_call&lt;name##_t, Class, res args&gt; \</span></div>
<div class="line"><a id="l00468" name="l00468"></a><span class="lineno"> 468</span><span class="preprocessor"> { \</span></div>
<div class="line"><a id="l00469" name="l00469"></a><span class="lineno"> 469</span><span class="preprocessor"> typedef L4::Ipc::Msg::Rpc_inline_call&lt;name##_t, Class, res args&gt; type; \</span></div>
<div class="line"><a id="l00470" name="l00470"></a><span class="lineno"> 470</span><span class="preprocessor"> enum { Opcode = (op) }; \</span></div>
<div class="line"><a id="l00471" name="l00471"></a><span class="lineno"> 471</span><span class="preprocessor"> L4_INLINE_RPC_SRV_FORWARD(name); \</span></div>
<div class="line"><a id="l00472" name="l00472"></a><span class="lineno"> 472</span><span class="preprocessor"> }</span></div>
</div>
<div class="line"><a id="l00473" name="l00473"></a><span class="lineno"> 473</span> </div>
<div class="line"><a id="l00474" name="l00474"></a><span class="lineno"> 474</span><span class="preprocessor">#ifdef DOXYGEN</span><span class="preprocessor"></span></div>
<div class="line"><a id="l00482" name="l00482"></a><span class="lineno"><a class="line" href="ipc__iface.html#a5772eb61b611f8f17bbc89e02e534ca1"> 482</a></span><span class="preprocessor">#define L4_INLINE_RPC(res, name, args, attr...) res name args</span></div>
<div class="line"><a id="l00483" name="l00483"></a><span class="lineno"> 483</span><span class="preprocessor">#else</span></div>
<div class="line"><a id="l00484" name="l00484"></a><span class="lineno"> 484</span><span class="preprocessor">#define L4_INLINE_RPC(res, name, args...) \</span></div>
<div class="line"><a id="l00485" name="l00485"></a><span class="lineno"> 485</span><span class="preprocessor"> L4_INLINE_RPC_NF(res, name, args); L4::Ipc::Msg::Call&lt;name##_t&gt; name</span></div>
<div class="line"><a id="l00486" name="l00486"></a><span class="lineno"> 486</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00487" name="l00487"></a><span class="lineno"> 487</span> </div>
<div class="line"><a id="l00488" name="l00488"></a><span class="lineno"> 488</span><span class="preprocessor">#ifdef DOXYGEN</span><span class="preprocessor"></span></div>
<div class="line"><a id="l00497" name="l00497"></a><span class="lineno"><a class="line" href="ipc__iface.html#afd77fe126e97c4d046e3842d948ec91d"> 497</a></span><span class="preprocessor">#define L4_INLINE_RPC_OP(op, res, name, args, attr...) res name args</span></div>
<div class="line"><a id="l00498" name="l00498"></a><span class="lineno"> 498</span><span class="preprocessor">#else</span></div>
<div class="line"><a id="l00499" name="l00499"></a><span class="lineno"> 499</span><span class="preprocessor">#define L4_INLINE_RPC_OP(op, res, name, args...) \</span></div>
<div class="line"><a id="l00500" name="l00500"></a><span class="lineno"> 500</span><span class="preprocessor"> L4_INLINE_RPC_NF_OP(op, res, name, args); L4::Ipc::Msg::Call&lt;name##_t&gt; name</span></div>
<div class="line"><a id="l00501" name="l00501"></a><span class="lineno"> 501</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00502" name="l00502"></a><span class="lineno"> 502</span></div>
<div class="foldopen" id="foldopen00510" data-start="" data-end="">
<div class="line"><a id="l00510" name="l00510"></a><span class="lineno"><a class="line" href="ipc__iface.html#ada755c1db9f58471fc483ccfbed1f518"> 510</a></span><span class="preprocessor">#define L4_RPC_NF(res, name, args...) \</span></div>
<div class="line"><a id="l00511" name="l00511"></a><span class="lineno"> 511</span><span class="preprocessor"> struct name##_t : L4::Ipc::Msg::Rpc_call&lt;name##_t, Class, res args&gt; \</span></div>
<div class="line"><a id="l00512" name="l00512"></a><span class="lineno"> 512</span><span class="preprocessor"> { \</span></div>
<div class="line"><a id="l00513" name="l00513"></a><span class="lineno"> 513</span><span class="preprocessor"> typedef L4::Ipc::Msg::Rpc_call&lt;name##_t, Class, res args&gt; type; \</span></div>
<div class="line"><a id="l00514" name="l00514"></a><span class="lineno"> 514</span><span class="preprocessor"> L4_INLINE_RPC_SRV_FORWARD(name); \</span></div>
<div class="line"><a id="l00515" name="l00515"></a><span class="lineno"> 515</span><span class="preprocessor"> }</span></div>
</div>
<div class="line"><a id="l00516" name="l00516"></a><span class="lineno"> 516</span></div>
<div class="foldopen" id="foldopen00525" data-start="" data-end="">
<div class="line"><a id="l00525" name="l00525"></a><span class="lineno"><a class="line" href="ipc__iface.html#aaf74b7e287f17aa9629ac694bbe6bc39"> 525</a></span><span class="preprocessor">#define L4_RPC_NF_OP(op, res, name, args...) \</span></div>
<div class="line"><a id="l00526" name="l00526"></a><span class="lineno"> 526</span><span class="preprocessor"> struct name##_t : L4::Ipc::Msg::Rpc_call&lt;name##_t, Class, res args&gt; \</span></div>
<div class="line"><a id="l00527" name="l00527"></a><span class="lineno"> 527</span><span class="preprocessor"> { \</span></div>
<div class="line"><a id="l00528" name="l00528"></a><span class="lineno"> 528</span><span class="preprocessor"> typedef L4::Ipc::Msg::Rpc_call&lt;name##_t, Class, res args&gt; type; \</span></div>
<div class="line"><a id="l00529" name="l00529"></a><span class="lineno"> 529</span><span class="preprocessor"> enum { Opcode = (op) }; \</span></div>
<div class="line"><a id="l00530" name="l00530"></a><span class="lineno"> 530</span><span class="preprocessor"> L4_INLINE_RPC_SRV_FORWARD(name); \</span></div>
<div class="line"><a id="l00531" name="l00531"></a><span class="lineno"> 531</span><span class="preprocessor"> }</span></div>
</div>
<div class="line"><a id="l00532" name="l00532"></a><span class="lineno"> 532</span> </div>
<div class="line"><a id="l00533" name="l00533"></a><span class="lineno"> 533</span><span class="preprocessor">#ifdef DOXYGEN</span><span class="preprocessor"></span></div>
<div class="line"><a id="l00541" name="l00541"></a><span class="lineno"><a class="line" href="ipc__iface.html#a5e5588cacb2659f18f48ae49c2beb800"> 541</a></span><span class="preprocessor">#define L4_RPC(res, name, args, attr...) res name args</span></div>
<div class="line"><a id="l00542" name="l00542"></a><span class="lineno"> 542</span><span class="preprocessor">#else</span></div>
<div class="line"><a id="l00543" name="l00543"></a><span class="lineno"> 543</span><span class="preprocessor">#define L4_RPC(res, name, args...) \</span></div>
<div class="line"><a id="l00544" name="l00544"></a><span class="lineno"> 544</span><span class="preprocessor"> L4_RPC_NF(res, name, args); L4::Ipc::Msg::Call&lt;name##_t&gt; name</span></div>
<div class="line"><a id="l00545" name="l00545"></a><span class="lineno"> 545</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00546" name="l00546"></a><span class="lineno"> 546</span> </div>
<div class="line"><a id="l00547" name="l00547"></a><span class="lineno"> 547</span><span class="preprocessor">#ifdef DOXYGEN</span><span class="preprocessor"></span></div>
<div class="line"><a id="l00556" name="l00556"></a><span class="lineno"><a class="line" href="ipc__iface.html#a0264d26151de8ed0903379a035c223bb"> 556</a></span><span class="preprocessor">#define L4_RPC_OP(op, res, name, args, attr...) res name args</span></div>
<div class="line"><a id="l00557" name="l00557"></a><span class="lineno"> 557</span><span class="preprocessor">#else</span></div>
<div class="line"><a id="l00558" name="l00558"></a><span class="lineno"> 558</span><span class="preprocessor">#define L4_RPC_OP(op, res, name, args...) \</span></div>
<div class="line"><a id="l00559" name="l00559"></a><span class="lineno"> 559</span><span class="preprocessor"> L4_RPC_NF_OP(op, res, name, args); L4::Ipc::Msg::Call&lt;name##_t&gt; name</span></div>
<div class="line"><a id="l00560" name="l00560"></a><span class="lineno"> 560</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00561" name="l00561"></a><span class="lineno"> 561</span> </div>
<div class="line"><a id="l00562" name="l00562"></a><span class="lineno"> 562</span></div>
<div class="line"><a id="l00567" name="l00567"></a><span class="lineno"> 567</span><span class="keyword">namespace </span>Detail {</div>
<div class="line"><a id="l00568" name="l00568"></a><span class="lineno"> 568</span></div>
<div class="line"><a id="l00572" name="l00572"></a><span class="lineno"> 572</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> ...ARGS&gt;</div>
<div class="line"><a id="l00573" name="l00573"></a><span class="lineno"> 573</span><span class="keyword">struct </span>Buf</div>
<div class="line"><a id="l00574" name="l00574"></a><span class="lineno"> 574</span>{</div>
<div class="line"><a id="l00575" name="l00575"></a><span class="lineno"> 575</span><span class="keyword">public</span>:</div>
<div class="line"><a id="l00576" name="l00576"></a><span class="lineno"> 576</span> <span class="keyword">template</span>&lt;<span class="keyword">typename</span> DIR&gt;</div>
<div class="line"><a id="l00577" name="l00577"></a><span class="lineno"> 577</span> <span class="keyword">static</span> <span class="keyword">constexpr</span> <span class="keywordtype">int</span> write(<span class="keywordtype">char</span> *, <span class="keywordtype">int</span> offset, <span class="keywordtype">int</span>) <span class="keyword">noexcept</span></div>
<div class="line"><a id="l00578" name="l00578"></a><span class="lineno"> 578</span> { <span class="keywordflow">return</span> offset; }</div>
<div class="line"><a id="l00579" name="l00579"></a><span class="lineno"> 579</span> </div>
<div class="line"><a id="l00580" name="l00580"></a><span class="lineno"> 580</span> <span class="keyword">template</span>&lt;<span class="keyword">typename</span> DIR&gt;</div>
<div class="line"><a id="l00581" name="l00581"></a><span class="lineno"> 581</span> <span class="keyword">static</span> <span class="keyword">constexpr</span> <span class="keywordtype">int</span> read(<span class="keywordtype">char</span> *, <span class="keywordtype">int</span> offset, <span class="keywordtype">int</span>, <span class="keywordtype">long</span>) <span class="keyword">noexcept</span></div>
<div class="line"><a id="l00582" name="l00582"></a><span class="lineno"> 582</span> { <span class="keywordflow">return</span> offset; }</div>
<div class="line"><a id="l00583" name="l00583"></a><span class="lineno"> 583</span> </div>
<div class="line"><a id="l00584" name="l00584"></a><span class="lineno"> 584</span> <span class="keyword">typedef</span> <span class="keywordtype">void</span> Base;</div>
<div class="line"><a id="l00585" name="l00585"></a><span class="lineno"> 585</span>};</div>
<div class="line"><a id="l00586" name="l00586"></a><span class="lineno"> 586</span> </div>
<div class="line"><a id="l00587" name="l00587"></a><span class="lineno"> 587</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A, <span class="keyword">typename</span> ...M&gt;</div>
<div class="line"><a id="l00588" name="l00588"></a><span class="lineno"> 588</span><span class="keyword">struct </span>Buf&lt;A, M...&gt; : Buf&lt;M...&gt;</div>
<div class="line"><a id="l00589" name="l00589"></a><span class="lineno"> 589</span>{</div>
<div class="line"><a id="l00590" name="l00590"></a><span class="lineno"> 590</span> <span class="keyword">typedef</span> Buf&lt;M...&gt; Base;</div>
<div class="line"><a id="l00591" name="l00591"></a><span class="lineno"> 591</span> </div>
<div class="line"><a id="l00592" name="l00592"></a><span class="lineno"> 592</span> <span class="keyword">typedef</span> Clnt_xmit&lt;A&gt; xmit;</div>
<div class="line"><a id="l00593" name="l00593"></a><span class="lineno"> 593</span> <span class="keyword">typedef</span> <span class="keyword">typename</span> _Elem&lt;A&gt;::arg_type arg_type;</div>
<div class="line"><a id="l00594" name="l00594"></a><span class="lineno"> 594</span> <span class="keyword">typedef</span> Detail::_Plain&lt;arg_type&gt; plain;</div>
<div class="line"><a id="l00595" name="l00595"></a><span class="lineno"> 595</span> </div>
<div class="line"><a id="l00596" name="l00596"></a><span class="lineno"> 596</span> <span class="keyword">template</span>&lt;<span class="keyword">typename</span> DIR&gt;</div>
<div class="line"><a id="l00597" name="l00597"></a><span class="lineno"> 597</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
<div class="line"><a id="l00598" name="l00598"></a><span class="lineno"> 598</span> write(<span class="keywordtype">char</span> *base, <span class="keywordtype">int</span> offset, <span class="keywordtype">int</span> limit,</div>
<div class="line"><a id="l00599" name="l00599"></a><span class="lineno"> 599</span> arg_type a, <span class="keyword">typename</span> _Elem&lt;M&gt;::arg_type ...m) <span class="keyword">noexcept</span></div>
<div class="line"><a id="l00600" name="l00600"></a><span class="lineno"> 600</span> {</div>
<div class="line"><a id="l00601" name="l00601"></a><span class="lineno"> 601</span> offset = xmit::to_msg(base, offset, limit, plain::deref(a),</div>
<div class="line"><a id="l00602" name="l00602"></a><span class="lineno"> 602</span> <span class="keyword">typename</span> DIR::dir(), <span class="keyword">typename</span> DIR::cls());</div>
<div class="line"><a id="l00603" name="l00603"></a><span class="lineno"> 603</span> <span class="keywordflow">return</span> Base::template write&lt;DIR&gt;(base, offset, limit, m...);</div>
<div class="line"><a id="l00604" name="l00604"></a><span class="lineno"> 604</span> }</div>
<div class="line"><a id="l00605" name="l00605"></a><span class="lineno"> 605</span> </div>
<div class="line"><a id="l00606" name="l00606"></a><span class="lineno"> 606</span> <span class="keyword">template</span>&lt;<span class="keyword">typename</span> DIR&gt;</div>
<div class="line"><a id="l00607" name="l00607"></a><span class="lineno"> 607</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
<div class="line"><a id="l00608" name="l00608"></a><span class="lineno"> 608</span> read(<span class="keywordtype">char</span> *base, <span class="keywordtype">int</span> offset, <span class="keywordtype">int</span> limit, <span class="keywordtype">long</span> ret,</div>
<div class="line"><a id="l00609" name="l00609"></a><span class="lineno"> 609</span> arg_type a, <span class="keyword">typename</span> _Elem&lt;M&gt;::arg_type ...m) <span class="keyword">noexcept</span></div>
<div class="line"><a id="l00610" name="l00610"></a><span class="lineno"> 610</span> {</div>
<div class="line"><a id="l00611" name="l00611"></a><span class="lineno"> 611</span> <span class="keywordtype">int</span> r = xmit::from_msg(base, offset, limit, ret, plain::deref(a),</div>
<div class="line"><a id="l00612" name="l00612"></a><span class="lineno"> 612</span> <span class="keyword">typename</span> DIR::dir(), <span class="keyword">typename</span> DIR::cls());</div>
<div class="line"><a id="l00613" name="l00613"></a><span class="lineno"> 613</span> <span class="keywordflow">if</span> (<a class="code hl_define" href="group__l4sys__defines.html#gac76599eba5afa89a12c44176cbfa90cb">L4_LIKELY</a>(r &gt;= 0))</div>
<div class="line"><a id="l00614" name="l00614"></a><span class="lineno"> 614</span> <span class="keywordflow">return</span> Base::template read&lt;DIR&gt;(base, r, limit, ret, m...);</div>
<div class="line"><a id="l00615" name="l00615"></a><span class="lineno"> 615</span> </div>
<div class="line"><a id="l00616" name="l00616"></a><span class="lineno"> 616</span> <span class="keywordflow">if</span> (_Elem&lt;A&gt;::Is_optional)</div>
<div class="line"><a id="l00617" name="l00617"></a><span class="lineno"> 617</span> <span class="keywordflow">return</span> Base::template read&lt;DIR&gt;(base, offset, limit, ret, m...);</div>
<div class="line"><a id="l00618" name="l00618"></a><span class="lineno"> 618</span> </div>
<div class="line"><a id="l00619" name="l00619"></a><span class="lineno"> 619</span> <span class="keywordflow">return</span> r;</div>
<div class="line"><a id="l00620" name="l00620"></a><span class="lineno"> 620</span> }</div>
<div class="line"><a id="l00621" name="l00621"></a><span class="lineno"> 621</span>};</div>
<div class="line"><a id="l00622" name="l00622"></a><span class="lineno"> 622</span> </div>
<div class="line"><a id="l00623" name="l00623"></a><span class="lineno"> 623</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> ...ARGS&gt; <span class="keyword">struct </span>_Part</div>
<div class="line"><a id="l00624" name="l00624"></a><span class="lineno"> 624</span>{</div>
<div class="line"><a id="l00626" name="l00626"></a><span class="lineno"> 626</span> <span class="keyword">typedef</span> Buf&lt;ARGS...&gt; Data;</div>
<div class="line"><a id="l00627" name="l00627"></a><span class="lineno"> 627</span> </div>
<div class="line"><a id="l00628" name="l00628"></a><span class="lineno"> 628</span> <span class="keyword">template</span>&lt;<span class="keyword">typename</span> DIR&gt;</div>
<div class="line"><a id="l00629" name="l00629"></a><span class="lineno"> 629</span> <span class="keyword">static</span> <span class="keywordtype">int</span> write(<span class="keywordtype">void</span> *b, <span class="keywordtype">int</span> offset, <span class="keywordtype">int</span> limit,</div>
<div class="line"><a id="l00630" name="l00630"></a><span class="lineno"> 630</span> <span class="keyword">typename</span> _Elem&lt;ARGS&gt;::arg_type ...m) <span class="keyword">noexcept</span></div>
<div class="line"><a id="l00631" name="l00631"></a><span class="lineno"> 631</span> {</div>
<div class="line"><a id="l00632" name="l00632"></a><span class="lineno"> 632</span> <span class="keywordtype">char</span> *buf = <span class="keyword">static_cast&lt;</span><span class="keywordtype">char</span> *<span class="keyword">&gt;</span>(b);</div>
<div class="line"><a id="l00633" name="l00633"></a><span class="lineno"> 633</span> <span class="keywordtype">int</span> r = Data::template write&lt;DIR&gt;(buf, offset, limit, m...);</div>
<div class="line"><a id="l00634" name="l00634"></a><span class="lineno"> 634</span> <span class="keywordflow">if</span> (<a class="code hl_define" href="group__l4sys__defines.html#gac76599eba5afa89a12c44176cbfa90cb">L4_LIKELY</a>(r &gt;= offset))</div>
<div class="line"><a id="l00635" name="l00635"></a><span class="lineno"> 635</span> <span class="keywordflow">return</span> r - offset;</div>
<div class="line"><a id="l00636" name="l00636"></a><span class="lineno"> 636</span> <span class="keywordflow">return</span> r;</div>
<div class="line"><a id="l00637" name="l00637"></a><span class="lineno"> 637</span> }</div>
<div class="line"><a id="l00638" name="l00638"></a><span class="lineno"> 638</span> </div>
<div class="line"><a id="l00639" name="l00639"></a><span class="lineno"> 639</span> <span class="keyword">template</span>&lt;<span class="keyword">typename</span> DIR&gt;</div>
<div class="line"><a id="l00640" name="l00640"></a><span class="lineno"> 640</span> <span class="keyword">static</span> <span class="keywordtype">int</span> read(<span class="keywordtype">void</span> *b, <span class="keywordtype">int</span> offset, <span class="keywordtype">int</span> limit, <span class="keywordtype">long</span> ret,</div>
<div class="line"><a id="l00641" name="l00641"></a><span class="lineno"> 641</span> <span class="keyword">typename</span> _Elem&lt;ARGS&gt;::arg_type ...m) <span class="keyword">noexcept</span></div>
<div class="line"><a id="l00642" name="l00642"></a><span class="lineno"> 642</span> {</div>
<div class="line"><a id="l00643" name="l00643"></a><span class="lineno"> 643</span> <span class="keywordtype">char</span> *buf = <span class="keyword">static_cast&lt;</span><span class="keywordtype">char</span> *<span class="keyword">&gt;</span>(b);</div>
<div class="line"><a id="l00644" name="l00644"></a><span class="lineno"> 644</span> <span class="keywordtype">int</span> r = Data::template read&lt;DIR&gt;(buf, offset, limit, ret, m...);</div>
<div class="line"><a id="l00645" name="l00645"></a><span class="lineno"> 645</span> <span class="keywordflow">if</span> (<a class="code hl_define" href="group__l4sys__defines.html#gac76599eba5afa89a12c44176cbfa90cb">L4_LIKELY</a>(r &gt;= offset))</div>
<div class="line"><a id="l00646" name="l00646"></a><span class="lineno"> 646</span> <span class="keywordflow">return</span> r - offset;</div>
<div class="line"><a id="l00647" name="l00647"></a><span class="lineno"> 647</span> <span class="keywordflow">return</span> r;</div>
<div class="line"><a id="l00648" name="l00648"></a><span class="lineno"> 648</span> }</div>
<div class="line"><a id="l00649" name="l00649"></a><span class="lineno"> 649</span>};</div>
<div class="line"><a id="l00650" name="l00650"></a><span class="lineno"> 650</span></div>
<div class="line"><a id="l00657" name="l00657"></a><span class="lineno"> 657</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> IPC_TYPE, <span class="keyword">typename</span> OPCODE = <span class="keywordtype">void</span>&gt;</div>
<div class="line"><a id="l00658" name="l00658"></a><span class="lineno"> 658</span><span class="keyword">struct </span>Part;</div>
<div class="line"><a id="l00659" name="l00659"></a><span class="lineno"> 659</span> </div>
<div class="line"><a id="l00660" name="l00660"></a><span class="lineno"> 660</span><span class="comment">// The version without an op-code</span></div>
<div class="line"><a id="l00661" name="l00661"></a><span class="lineno"> 661</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> R, <span class="keyword">typename</span> ...ARGS&gt;</div>
<div class="line"><a id="l00662" name="l00662"></a><span class="lineno"> 662</span><span class="keyword">struct </span>Part&lt;R (ARGS...), void&gt; : _Part&lt;ARGS...&gt;</div>
<div class="line"><a id="l00663" name="l00663"></a><span class="lineno"> 663</span>{</div>
<div class="line"><a id="l00665" name="l00665"></a><span class="lineno"> 665</span> <span class="keyword">typedef</span> Buf&lt;ARGS...&gt; Data;</div>
<div class="line"><a id="l00666" name="l00666"></a><span class="lineno"> 666</span> </div>
<div class="line"><a id="l00667" name="l00667"></a><span class="lineno"> 667</span> <span class="comment">// write arguments, skipping the dummy opcode</span></div>
<div class="line"><a id="l00668" name="l00668"></a><span class="lineno"> 668</span> <span class="keyword">template</span>&lt;<span class="keyword">typename</span> DIR&gt;</div>
<div class="line"><a id="l00669" name="l00669"></a><span class="lineno"> 669</span> <span class="keyword">static</span> <span class="keywordtype">int</span> write_op(<span class="keywordtype">void</span> *b, <span class="keywordtype">int</span> offset, <span class="keywordtype">int</span> limit,</div>
<div class="line"><a id="l00670" name="l00670"></a><span class="lineno"> 670</span> <span class="keywordtype">int</span> <span class="comment">/*placeholder for op*/</span>,</div>
<div class="line"><a id="l00671" name="l00671"></a><span class="lineno"> 671</span> <span class="keyword">typename</span> _Elem&lt;ARGS&gt;::arg_type ...m) <span class="keyword">noexcept</span></div>
<div class="line"><a id="l00672" name="l00672"></a><span class="lineno"> 672</span> {</div>
<div class="line"><a id="l00673" name="l00673"></a><span class="lineno"> 673</span> <span class="keywordtype">char</span> *buf = <span class="keyword">static_cast&lt;</span><span class="keywordtype">char</span> *<span class="keyword">&gt;</span>(b);</div>
<div class="line"><a id="l00674" name="l00674"></a><span class="lineno"> 674</span> <span class="keywordtype">int</span> r = Data::template write&lt;DIR&gt;(buf, offset, limit, m...);</div>
<div class="line"><a id="l00675" name="l00675"></a><span class="lineno"> 675</span> <span class="keywordflow">if</span> (<a class="code hl_define" href="group__l4sys__defines.html#gac76599eba5afa89a12c44176cbfa90cb">L4_LIKELY</a>(r &gt;= offset))</div>
<div class="line"><a id="l00676" name="l00676"></a><span class="lineno"> 676</span> <span class="keywordflow">return</span> r - offset;</div>
<div class="line"><a id="l00677" name="l00677"></a><span class="lineno"> 677</span> <span class="keywordflow">return</span> r;</div>
<div class="line"><a id="l00678" name="l00678"></a><span class="lineno"> 678</span> }</div>
<div class="line"><a id="l00679" name="l00679"></a><span class="lineno"> 679</span>};</div>
<div class="line"><a id="l00680" name="l00680"></a><span class="lineno"> 680</span> </div>
<div class="line"><a id="l00681" name="l00681"></a><span class="lineno"> 681</span><span class="comment">// Message part with additional opcode</span></div>
<div class="line"><a id="l00682" name="l00682"></a><span class="lineno"> 682</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> OPCODE, <span class="keyword">typename</span> R, <span class="keyword">typename</span> ...ARGS&gt;</div>
<div class="line"><a id="l00683" name="l00683"></a><span class="lineno"> 683</span><span class="keyword">struct </span>Part&lt;R (ARGS...), OPCODE&gt; : _Part&lt;ARGS...&gt;</div>
<div class="line"><a id="l00684" name="l00684"></a><span class="lineno"> 684</span>{</div>
<div class="line"><a id="l00685" name="l00685"></a><span class="lineno"> 685</span> <span class="keyword">typedef</span> OPCODE opcode_type;</div>
<div class="line"><a id="l00687" name="l00687"></a><span class="lineno"> 687</span> <span class="keyword">typedef</span> Buf&lt;opcode_type, ARGS...&gt; Data;</div>
<div class="line"><a id="l00688" name="l00688"></a><span class="lineno"> 688</span> </div>
<div class="line"><a id="l00689" name="l00689"></a><span class="lineno"> 689</span> <span class="comment">// write arguments, including the opcode</span></div>
<div class="line"><a id="l00690" name="l00690"></a><span class="lineno"> 690</span> <span class="keyword">template</span>&lt;<span class="keyword">typename</span> DIR&gt;</div>
<div class="line"><a id="l00691" name="l00691"></a><span class="lineno"> 691</span> <span class="keyword">static</span> <span class="keywordtype">int</span> write_op(<span class="keywordtype">void</span> *b, <span class="keywordtype">int</span> offset, <span class="keywordtype">int</span> limit,</div>
<div class="line"><a id="l00692" name="l00692"></a><span class="lineno"> 692</span> opcode_type op, <span class="keyword">typename</span> _Elem&lt;ARGS&gt;::arg_type ...m) <span class="keyword">noexcept</span></div>
<div class="line"><a id="l00693" name="l00693"></a><span class="lineno"> 693</span> {</div>
<div class="line"><a id="l00694" name="l00694"></a><span class="lineno"> 694</span> <span class="keywordtype">char</span> *buf = <span class="keyword">static_cast&lt;</span><span class="keywordtype">char</span> *<span class="keyword">&gt;</span>(b);</div>
<div class="line"><a id="l00695" name="l00695"></a><span class="lineno"> 695</span> <span class="keywordtype">int</span> r = Data::template write&lt;DIR&gt;(buf, offset, limit, op, m...);</div>
<div class="line"><a id="l00696" name="l00696"></a><span class="lineno"> 696</span> <span class="keywordflow">if</span> (<a class="code hl_define" href="group__l4sys__defines.html#gac76599eba5afa89a12c44176cbfa90cb">L4_LIKELY</a>(r &gt;= offset))</div>
<div class="line"><a id="l00697" name="l00697"></a><span class="lineno"> 697</span> <span class="keywordflow">return</span> r - offset;</div>
<div class="line"><a id="l00698" name="l00698"></a><span class="lineno"> 698</span> <span class="keywordflow">return</span> r;</div>
<div class="line"><a id="l00699" name="l00699"></a><span class="lineno"> 699</span> }</div>
<div class="line"><a id="l00700" name="l00700"></a><span class="lineno"> 700</span>};</div>
<div class="line"><a id="l00701" name="l00701"></a><span class="lineno"> 701</span> </div>
<div class="line"><a id="l00702" name="l00702"></a><span class="lineno"> 702</span> </div>
<div class="line"><a id="l00703" name="l00703"></a><span class="lineno"> 703</span>} <span class="comment">// namespace Detail</span></div>
<div class="line"><a id="l00704" name="l00704"></a><span class="lineno"> 704</span> </div>
<div class="line"><a id="l00705" name="l00705"></a><span class="lineno"> 705</span><span class="comment">//----------------------------------------------------</span></div>
<div class="line"><a id="l00706" name="l00706"></a><span class="lineno"> 706</span><span class="comment">// Implementation of the RPC call</span></div>
<div class="line"><a id="l00707" name="l00707"></a><span class="lineno"> 707</span><span class="comment">// TODO: Add support for timeout via special RPC argument</span></div>
<div class="line"><a id="l00708" name="l00708"></a><span class="lineno"> 708</span><span class="comment">// TODO: Add support for passing the UTCB pointer as argument</span></div>
<div class="line"><a id="l00709" name="l00709"></a><span class="lineno"> 709</span><span class="comment">//</span></div>
<div class="line"><a id="l00710" name="l00710"></a><span class="lineno"> 710</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> OP, <span class="keyword">typename</span> CLASS, <span class="keyword">typename</span> FLAGS, <span class="keyword">typename</span> R,</div>
<div class="line"><a id="l00711" name="l00711"></a><span class="lineno"> 711</span> <span class="keyword">typename</span> ...ARGS&gt;</div>
<div class="line"><a id="l00712" name="l00712"></a><span class="lineno"> 712</span><span class="keyword">inline</span> R</div>
<div class="line"><a id="l00713" name="l00713"></a><span class="lineno"> 713</span>Rpc_inline_call&lt;OP, CLASS, R (ARGS...), FLAGS&gt;::</div>
<div class="line"><a id="l00714" name="l00714"></a><span class="lineno"> 714</span> call(L4::Cap&lt;CLASS&gt; cap,</div>
<div class="line"><a id="l00715" name="l00715"></a><span class="lineno"> 715</span> <span class="keyword">typename</span> _Elem&lt;ARGS&gt;::arg_type ...a,</div>
<div class="line"><a id="l00716" name="l00716"></a><span class="lineno"> 716</span> <a class="code hl_typedef" href="group__l4__utcb__api.html#ga89be8a86d11c1d532b636cc2df1330fb">l4_utcb_t</a> *utcb) <span class="keyword">noexcept</span></div>
<div class="line"><a id="l00717" name="l00717"></a><span class="lineno"> 717</span>{</div>
<div class="line"><a id="l00718" name="l00718"></a><span class="lineno"> 718</span> <span class="keyword">using namespace </span>Ipc::Msg;</div>
<div class="line"><a id="l00719" name="l00719"></a><span class="lineno"> 719</span> </div>
<div class="line"><a id="l00720" name="l00720"></a><span class="lineno"> 720</span> <span class="keyword">typedef</span> <span class="keyword">typename</span> Kobject_typeid&lt;CLASS&gt;::Iface::Rpcs Rpcs;</div>
<div class="line"><a id="l00721" name="l00721"></a><span class="lineno"> 721</span> <span class="keyword">typedef</span> <span class="keyword">typename</span> Rpcs::template Rpc&lt;OP&gt; Opt;</div>
<div class="line"><a id="l00722" name="l00722"></a><span class="lineno"> 722</span> <span class="keyword">typedef</span> Detail::Part&lt;ipc_type, typename Rpcs::opcode_type&gt; Args;</div>
<div class="line"><a id="l00723" name="l00723"></a><span class="lineno"> 723</span> </div>
<div class="line"><a id="l00724" name="l00724"></a><span class="lineno"> 724</span> <a class="code hl_typedef" href="group__l4__utcb__mr__api.html#ga3501fc9601dfb2fd7b49d04607d2ac84">l4_msg_regs_t</a> *mrs = l4_utcb_mr_u(utcb);</div>
<div class="line"><a id="l00725" name="l00725"></a><span class="lineno"> 725</span> </div>
<div class="line"><a id="l00726" name="l00726"></a><span class="lineno"> 726</span> <span class="comment">// handle in-data part of the arguments</span></div>
<div class="line"><a id="l00727" name="l00727"></a><span class="lineno"> 727</span> <span class="keywordtype">int</span> send_bytes =</div>
<div class="line"><a id="l00728" name="l00728"></a><span class="lineno"> 728</span> Args::template write_op&lt;Do_in_data&gt;(mrs-&gt;<a class="code hl_variable" href="unionl4__msg__regs__t.html#ad7d601b3b3808afaefe4c09d42de8b99">mr</a>, 0, Mr_bytes,</div>
<div class="line"><a id="l00729" name="l00729"></a><span class="lineno"> 729</span> Opt::Opcode, a...);</div>
<div class="line"><a id="l00730" name="l00730"></a><span class="lineno"> 730</span> </div>
<div class="line"><a id="l00731" name="l00731"></a><span class="lineno"> 731</span> <span class="keywordflow">if</span> (<a class="code hl_define" href="group__l4sys__defines.html#ga3df4200910f2664b97397c23693beeb0">L4_UNLIKELY</a>(send_bytes &lt; 0))</div>
<div class="line"><a id="l00732" name="l00732"></a><span class="lineno"> 732</span> <span class="keywordflow">return</span> return_err&lt;R&gt;(send_bytes);</div>
<div class="line"><a id="l00733" name="l00733"></a><span class="lineno"> 733</span> </div>
<div class="line"><a id="l00734" name="l00734"></a><span class="lineno"> 734</span> send_bytes = align_to&lt;l4_umword_t&gt;(send_bytes);</div>
<div class="line"><a id="l00735" name="l00735"></a><span class="lineno"> 735</span> <span class="keywordtype">int</span> <span class="keyword">const</span> send_words = send_bytes / <a class="code hl_enumvalue" href="namespaceL4_1_1Ipc_1_1Msg.html#a501c5434eab6d3adb40373258136884cab909157795890260363573ff7587d68d">Word_bytes</a>;</div>
<div class="line"><a id="l00736" name="l00736"></a><span class="lineno"> 736</span> <span class="comment">// write the in-items part of the message if there is one</span></div>
<div class="line"><a id="l00737" name="l00737"></a><span class="lineno"> 737</span> <span class="keywordtype">int</span> item_bytes =</div>
<div class="line"><a id="l00738" name="l00738"></a><span class="lineno"> 738</span> Args::template write&lt;Do_in_items&gt;(&amp;mrs-&gt;<a class="code hl_variable" href="unionl4__msg__regs__t.html#ad7d601b3b3808afaefe4c09d42de8b99">mr</a>[send_words], 0,</div>
<div class="line"><a id="l00739" name="l00739"></a><span class="lineno"> 739</span> Mr_bytes - send_bytes, a...);</div>
<div class="line"><a id="l00740" name="l00740"></a><span class="lineno"> 740</span> </div>
<div class="line"><a id="l00741" name="l00741"></a><span class="lineno"> 741</span> <span class="keywordflow">if</span> (<a class="code hl_define" href="group__l4sys__defines.html#ga3df4200910f2664b97397c23693beeb0">L4_UNLIKELY</a>(item_bytes &lt; 0))</div>
<div class="line"><a id="l00742" name="l00742"></a><span class="lineno"> 742</span> <span class="keywordflow">return</span> return_err&lt;R&gt;(item_bytes);</div>
<div class="line"><a id="l00743" name="l00743"></a><span class="lineno"> 743</span> </div>
<div class="line"><a id="l00744" name="l00744"></a><span class="lineno"> 744</span> <span class="keywordtype">int</span> send_items = item_bytes / <a class="code hl_enumvalue" href="namespaceL4_1_1Ipc_1_1Msg.html#a501c5434eab6d3adb40373258136884cab0b521544e0087a9c30951d1c426a01f">Item_bytes</a>;</div>
<div class="line"><a id="l00745" name="l00745"></a><span class="lineno"> 745</span> </div>
<div class="line"><a id="l00746" name="l00746"></a><span class="lineno"> 746</span> {</div>
<div class="line"><a id="l00747" name="l00747"></a><span class="lineno"> 747</span> <span class="comment">// setup the receive buffers for the RPC call</span></div>
<div class="line"><a id="l00748" name="l00748"></a><span class="lineno"> 748</span> <a class="code hl_typedef" href="group__l4__utcb__br__api.html#gae166f923e400efff8f39be3425641fc5">l4_buf_regs_t</a> *brs = l4_utcb_br_u(utcb);</div>
<div class="line"><a id="l00749" name="l00749"></a><span class="lineno"> 749</span> <span class="comment">// XXX: we currently support only one type of receive buffers per call</span></div>
<div class="line"><a id="l00750" name="l00750"></a><span class="lineno"> 750</span> brs-&gt;<a class="code hl_variable" href="structl4__buf__regs__t.html#a852ae37fbb64d4a2f71cbd4c0ba905d1">bdr</a> = 0; <span class="comment">// we always start at br[0]</span></div>
<div class="line"><a id="l00751" name="l00751"></a><span class="lineno"> 751</span> </div>
<div class="line"><a id="l00752" name="l00752"></a><span class="lineno"> 752</span> <span class="comment">// the limit leaves us at least one register for the zero terminator</span></div>
<div class="line"><a id="l00753" name="l00753"></a><span class="lineno"> 753</span> <span class="comment">// add the buffers given as arguments to the buffer registers</span></div>
<div class="line"><a id="l00754" name="l00754"></a><span class="lineno"> 754</span> <span class="keywordtype">int</span> bytes =</div>
<div class="line"><a id="l00755" name="l00755"></a><span class="lineno"> 755</span> Args::template write&lt;Do_rcv_buffers&gt;(brs-&gt;<a class="code hl_variable" href="structl4__buf__regs__t.html#a716f3f2090e6d861415e3386bfa3037d">br</a>, 0, Br_bytes - Word_bytes,</div>
<div class="line"><a id="l00756" name="l00756"></a><span class="lineno"> 756</span> a...);</div>
<div class="line"><a id="l00757" name="l00757"></a><span class="lineno"> 757</span> </div>
<div class="line"><a id="l00758" name="l00758"></a><span class="lineno"> 758</span> <span class="keywordflow">if</span> (<a class="code hl_define" href="group__l4sys__defines.html#ga3df4200910f2664b97397c23693beeb0">L4_UNLIKELY</a>(bytes &lt; 0))</div>
<div class="line"><a id="l00759" name="l00759"></a><span class="lineno"> 759</span> <span class="keywordflow">return</span> return_err&lt;R&gt;(bytes);</div>
<div class="line"><a id="l00760" name="l00760"></a><span class="lineno"> 760</span> </div>
<div class="line"><a id="l00761" name="l00761"></a><span class="lineno"> 761</span> brs-&gt;<a class="code hl_variable" href="structl4__buf__regs__t.html#a716f3f2090e6d861415e3386bfa3037d">br</a>[bytes / <a class="code hl_enumvalue" href="namespaceL4_1_1Ipc_1_1Msg.html#a501c5434eab6d3adb40373258136884cab909157795890260363573ff7587d68d">Word_bytes</a>] = 0;</div>
<div class="line"><a id="l00762" name="l00762"></a><span class="lineno"> 762</span> }</div>
<div class="line"><a id="l00763" name="l00763"></a><span class="lineno"> 763</span> </div>
<div class="line"><a id="l00764" name="l00764"></a><span class="lineno"> 764</span> </div>
<div class="line"><a id="l00765" name="l00765"></a><span class="lineno"> 765</span> <span class="comment">// here we do the actual IPC ---------------------------------</span></div>
<div class="line"><a id="l00766" name="l00766"></a><span class="lineno"> 766</span> <a class="code hl_typedef" href="group__l4__msgtag__api.html#gad2c28384485a82490cab17ac929f05e9">l4_msgtag_t</a> t;</div>
<div class="line"><a id="l00767" name="l00767"></a><span class="lineno"> 767</span> t = <a class="code hl_function" href="group__l4__msgtag__api.html#ga661d71acad9d096fa990f7c94943bc78">l4_msgtag</a>(CLASS::Protocol, send_words, send_items, 0);</div>
<div class="line"><a id="l00768" name="l00768"></a><span class="lineno"> 768</span> <span class="comment">// do the call (Q: do we need support for timeouts?)</span></div>
<div class="line"><a id="l00769" name="l00769"></a><span class="lineno"> 769</span> <span class="keywordflow">if</span> (flags_type::Is_call)</div>
<div class="line"><a id="l00770" name="l00770"></a><span class="lineno"> 770</span> t = <a class="code hl_function" href="group__l4__ipc__api.html#gab96d1669dcd54657237ee27b7f6862c6">l4_ipc_call</a>(cap.<a class="code hl_function" href="classL4_1_1Cap__base.html#a90ff089ca2442b128c2b2b0e1c22c6d7">cap</a>(), utcb, t, flags_type::timeout());</div>
<div class="line"><a id="l00771" name="l00771"></a><span class="lineno"> 771</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00772" name="l00772"></a><span class="lineno"> 772</span> {</div>
<div class="line"><a id="l00773" name="l00773"></a><span class="lineno"> 773</span> t = <a class="code hl_function" href="group__l4__ipc__api.html#ga7de45eb59ce852466362ea85da00299e">l4_ipc_send</a>(cap.<a class="code hl_function" href="classL4_1_1Cap__base.html#a90ff089ca2442b128c2b2b0e1c22c6d7">cap</a>(), utcb, t, flags_type::timeout());</div>
<div class="line"><a id="l00774" name="l00774"></a><span class="lineno"> 774</span> <span class="keywordflow">if</span> (<a class="code hl_define" href="group__l4sys__defines.html#ga3df4200910f2664b97397c23693beeb0">L4_UNLIKELY</a>(t.<a class="code hl_function" href="structl4__msgtag__t.html#a433eb16b19202d09cc98b40a139b3c29">has_error</a>()))</div>
<div class="line"><a id="l00775" name="l00775"></a><span class="lineno"> 775</span> <span class="keywordflow">return</span> return_ipc_err&lt;R&gt;(t, utcb);</div>
<div class="line"><a id="l00776" name="l00776"></a><span class="lineno"> 776</span> </div>
<div class="line"><a id="l00777" name="l00777"></a><span class="lineno"> 777</span> <span class="keywordflow">return</span> return_code&lt;R&gt;(<a class="code hl_function" href="group__l4__msgtag__api.html#ga661d71acad9d096fa990f7c94943bc78">l4_msgtag</a>(0, 0, 0, t.<a class="code hl_function" href="structl4__msgtag__t.html#af6b9564a9a16427cec0e81a4628996b8">flags</a>()));</div>
<div class="line"><a id="l00778" name="l00778"></a><span class="lineno"> 778</span> }</div>
<div class="line"><a id="l00779" name="l00779"></a><span class="lineno"> 779</span> </div>
<div class="line"><a id="l00780" name="l00780"></a><span class="lineno"> 780</span> <span class="comment">// unmarshalling starts here ---------------------------------</span></div>
<div class="line"><a id="l00781" name="l00781"></a><span class="lineno"> 781</span> </div>
<div class="line"><a id="l00782" name="l00782"></a><span class="lineno"> 782</span> <span class="comment">// bail out early in the case of an IPC error</span></div>
<div class="line"><a id="l00783" name="l00783"></a><span class="lineno"> 783</span> <span class="keywordflow">if</span> (<a class="code hl_define" href="group__l4sys__defines.html#ga3df4200910f2664b97397c23693beeb0">L4_UNLIKELY</a>(t.<a class="code hl_function" href="structl4__msgtag__t.html#a433eb16b19202d09cc98b40a139b3c29">has_error</a>()))</div>
<div class="line"><a id="l00784" name="l00784"></a><span class="lineno"> 784</span> <span class="keywordflow">return</span> return_ipc_err&lt;R&gt;(t, utcb);</div>
<div class="line"><a id="l00785" name="l00785"></a><span class="lineno"> 785</span> </div>
<div class="line"><a id="l00786" name="l00786"></a><span class="lineno"> 786</span> <span class="comment">// take the label as return value</span></div>
<div class="line"><a id="l00787" name="l00787"></a><span class="lineno"> 787</span> <span class="keywordtype">long</span> r = t.<a class="code hl_function" href="structl4__msgtag__t.html#a002076380a3f6e4f29a1f6b50ce2bde2">label</a>();</div>
<div class="line"><a id="l00788" name="l00788"></a><span class="lineno"> 788</span> </div>
<div class="line"><a id="l00789" name="l00789"></a><span class="lineno"> 789</span> <span class="comment">// bail out on negative error codes too</span></div>
<div class="line"><a id="l00790" name="l00790"></a><span class="lineno"> 790</span> <span class="keywordflow">if</span> (<a class="code hl_define" href="group__l4sys__defines.html#ga3df4200910f2664b97397c23693beeb0">L4_UNLIKELY</a>(r &lt; 0))</div>
<div class="line"><a id="l00791" name="l00791"></a><span class="lineno"> 791</span> <span class="keywordflow">return</span> return_err&lt;R&gt;(r);</div>
<div class="line"><a id="l00792" name="l00792"></a><span class="lineno"> 792</span> </div>
<div class="line"><a id="l00793" name="l00793"></a><span class="lineno"> 793</span> <span class="keywordtype">int</span> <span class="keyword">const</span> rcv_bytes = t.<a class="code hl_function" href="structl4__msgtag__t.html#a98577ea730d9abcd938b89d5c7adb18c">words</a>() * <a class="code hl_enumvalue" href="namespaceL4_1_1Ipc_1_1Msg.html#a501c5434eab6d3adb40373258136884cab909157795890260363573ff7587d68d">Word_bytes</a>;</div>
<div class="line"><a id="l00794" name="l00794"></a><span class="lineno"> 794</span> </div>
<div class="line"><a id="l00795" name="l00795"></a><span class="lineno"> 795</span> <span class="comment">// read the static out-data values to the arguments</span></div>
<div class="line"><a id="l00796" name="l00796"></a><span class="lineno"> 796</span> <span class="keywordtype">int</span> err = Args::template read&lt;Do_out_data&gt;(mrs-&gt;<a class="code hl_variable" href="unionl4__msg__regs__t.html#ad7d601b3b3808afaefe4c09d42de8b99">mr</a>, 0, rcv_bytes, r, a...);</div>
<div class="line"><a id="l00797" name="l00797"></a><span class="lineno"> 797</span> </div>
<div class="line"><a id="l00798" name="l00798"></a><span class="lineno"> 798</span> <span class="keywordtype">int</span> <span class="keyword">const</span> item_limit = t.<a class="code hl_function" href="structl4__msgtag__t.html#ad014e4a9f4509b068ddda678f6f8d568">items</a>() * <a class="code hl_enumvalue" href="namespaceL4_1_1Ipc_1_1Msg.html#a501c5434eab6d3adb40373258136884cab0b521544e0087a9c30951d1c426a01f">Item_bytes</a>;</div>
<div class="line"><a id="l00799" name="l00799"></a><span class="lineno"> 799</span> </div>
<div class="line"><a id="l00800" name="l00800"></a><span class="lineno"> 800</span> <span class="keywordflow">if</span> (<a class="code hl_define" href="group__l4sys__defines.html#ga3df4200910f2664b97397c23693beeb0">L4_UNLIKELY</a>(err &lt; 0 || item_limit &gt; Mr_bytes))</div>
<div class="line"><a id="l00801" name="l00801"></a><span class="lineno"> 801</span> <span class="keywordflow">return</span> return_err&lt;R&gt;(-<a class="code hl_enumvalue" href="group__l4__error__api.html#ggab4c8abc71ffa221a25c1ca5840a354f9af9925caf2489bbd5c97705fe0ee7b698">L4_EMSGTOOSHORT</a>);</div>
<div class="line"><a id="l00802" name="l00802"></a><span class="lineno"> 802</span> </div>
<div class="line"><a id="l00803" name="l00803"></a><span class="lineno"> 803</span> <span class="comment">// read the static out-items to the arguments</span></div>
<div class="line"><a id="l00804" name="l00804"></a><span class="lineno"> 804</span> err = Args::template read&lt;Do_out_items&gt;(&amp;mrs-&gt;<a class="code hl_variable" href="unionl4__msg__regs__t.html#ad7d601b3b3808afaefe4c09d42de8b99">mr</a>[t.<a class="code hl_function" href="structl4__msgtag__t.html#a98577ea730d9abcd938b89d5c7adb18c">words</a>()], 0, item_limit,</div>
<div class="line"><a id="l00805" name="l00805"></a><span class="lineno"> 805</span> r, a...);</div>
<div class="line"><a id="l00806" name="l00806"></a><span class="lineno"> 806</span> </div>
<div class="line"><a id="l00807" name="l00807"></a><span class="lineno"> 807</span> <span class="keywordflow">if</span> (<a class="code hl_define" href="group__l4sys__defines.html#ga3df4200910f2664b97397c23693beeb0">L4_UNLIKELY</a>(err &lt; 0))</div>
<div class="line"><a id="l00808" name="l00808"></a><span class="lineno"> 808</span> <span class="keywordflow">return</span> return_err&lt;R&gt;(-<a class="code hl_enumvalue" href="group__l4__error__api.html#ggab4c8abc71ffa221a25c1ca5840a354f9af9925caf2489bbd5c97705fe0ee7b698">L4_EMSGTOOSHORT</a>);</div>
<div class="line"><a id="l00809" name="l00809"></a><span class="lineno"> 809</span> </div>
<div class="line"><a id="l00810" name="l00810"></a><span class="lineno"> 810</span> <span class="keywordflow">return</span> return_code&lt;R&gt;(t);</div>
<div class="line"><a id="l00811" name="l00811"></a><span class="lineno"> 811</span>}</div>
<div class="line"><a id="l00812" name="l00812"></a><span class="lineno"> 812</span> </div>
<div class="line"><a id="l00813" name="l00813"></a><span class="lineno"> 813</span>} <span class="comment">// namespace Msg</span></div>
<div class="line"><a id="l00814" name="l00814"></a><span class="lineno"> 814</span>} <span class="comment">// namespace Ipc</span></div>
<div class="line"><a id="l00815" name="l00815"></a><span class="lineno"> 815</span>} <span class="comment">// namespace L4</span></div>
<div class="ttc" id="a____typeinfo_8h_html"><div class="ttname"><a href="____typeinfo_8h.html">__typeinfo.h</a></div><div class="ttdoc">Type information handling.</div></div>
<div class="ttc" id="aclassL4_1_1Cap__base_html_a90ff089ca2442b128c2b2b0e1c22c6d7"><div class="ttname"><a href="classL4_1_1Cap__base.html#a90ff089ca2442b128c2b2b0e1c22c6d7">L4::Cap_base::cap</a></div><div class="ttdeci">l4_cap_idx_t cap() const noexcept</div><div class="ttdoc">Return capability selector.</div><div class="ttdef"><b>Definition</b> <a href="capability_8h_source.html#l00049">capability.h:49</a></div></div>
<div class="ttc" id="agroup__l4__cap__api_html_ga1445e923ce73029130d569d6e69a4dd8"><div class="ttname"><a href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a></div><div class="ttdeci">unsigned long l4_cap_idx_t</div><div class="ttdoc">Capability selector type.</div><div class="ttdef"><b>Definition</b> <a href="l4_2sys_2types_8h_source.html#l00336">types.h:336</a></div></div>
<div class="ttc" id="agroup__l4__cap__api_html_ggafee0421c2fe0e5cfc59f17f16ea10879aba3e1dbcc462d842d56df9fc928e796b"><div class="ttname"><a href="group__l4__cap__api.html#ggafee0421c2fe0e5cfc59f17f16ea10879aba3e1dbcc462d842d56df9fc928e796b">L4_CAP_MASK</a></div><div class="ttdeci">@ L4_CAP_MASK</div><div class="ttdoc">Mask to get only the relevant bits of an l4_cap_idx_t.</div><div class="ttdef"><b>Definition</b> <a href="l4_2sys_2consts_8h_source.html#l00151">consts.h:151</a></div></div>
<div class="ttc" id="agroup__l4__error__api_html_ggab4c8abc71ffa221a25c1ca5840a354f9af9925caf2489bbd5c97705fe0ee7b698"><div class="ttname"><a href="group__l4__error__api.html#ggab4c8abc71ffa221a25c1ca5840a354f9af9925caf2489bbd5c97705fe0ee7b698">L4_EMSGTOOSHORT</a></div><div class="ttdeci">@ L4_EMSGTOOSHORT</div><div class="ttdoc">Message too short.</div><div class="ttdef"><b>Definition</b> <a href="err_8h_source.html#l00056">err.h:56</a></div></div>
<div class="ttc" id="agroup__l4__ipc__api_html_ga7de45eb59ce852466362ea85da00299e"><div class="ttname"><a href="group__l4__ipc__api.html#ga7de45eb59ce852466362ea85da00299e">l4_ipc_send</a></div><div class="ttdeci">l4_msgtag_t l4_ipc_send(l4_cap_idx_t dest, l4_utcb_t *utcb, l4_msgtag_t tag, l4_timeout_t timeout) L4_NOTHROW</div><div class="ttdoc">Send a message to an object (do not wait for a reply).</div><div class="ttdef"><b>Definition</b> <a href="l4_2sys_2ipc_8h_source.html#l00586">ipc.h:586</a></div></div>
<div class="ttc" id="agroup__l4__ipc__api_html_gab96d1669dcd54657237ee27b7f6862c6"><div class="ttname"><a href="group__l4__ipc__api.html#gab96d1669dcd54657237ee27b7f6862c6">l4_ipc_call</a></div><div class="ttdeci">l4_msgtag_t l4_ipc_call(l4_cap_idx_t object, l4_utcb_t *utcb, l4_msgtag_t tag, l4_timeout_t timeout) L4_NOTHROW</div><div class="ttdoc">Object call (usual invocation).</div><div class="ttdef"><b>Definition</b> <a href="l4_2sys_2ipc_8h_source.html#l00565">ipc.h:565</a></div></div>
<div class="ttc" id="agroup__l4__ipc__err__api_html_ga3b77d0d9d3794278bf464824e076c6b8"><div class="ttname"><a href="group__l4__ipc__err__api.html#ga3b77d0d9d3794278bf464824e076c6b8">l4_ipc_error_code</a></div><div class="ttdeci">int l4_ipc_error_code(l4_utcb_t *utcb) L4_NOTHROW</div><div class="ttdoc">Get the error condition of the last invocation from the TCR.</div><div class="ttdef"><b>Definition</b> <a href="l4_2sys_2ipc_8h_source.html#l00658">ipc.h:658</a></div></div>
<div class="ttc" id="agroup__l4__msgtag__api_html_ga661d71acad9d096fa990f7c94943bc78"><div class="ttname"><a href="group__l4__msgtag__api.html#ga661d71acad9d096fa990f7c94943bc78">l4_msgtag</a></div><div class="ttdeci">l4_msgtag_t l4_msgtag(long label, unsigned words, unsigned items, unsigned flags) L4_NOTHROW</div><div class="ttdoc">Create a message tag from the specified values.</div><div class="ttdef"><b>Definition</b> <a href="l4_2sys_2types_8h_source.html#l00405">types.h:405</a></div></div>
<div class="ttc" id="agroup__l4__msgtag__api_html_gad2c28384485a82490cab17ac929f05e9"><div class="ttname"><a href="group__l4__msgtag__api.html#gad2c28384485a82490cab17ac929f05e9">l4_msgtag_t</a></div><div class="ttdeci">struct l4_msgtag_t l4_msgtag_t</div><div class="ttdoc">Message tag data structure.</div></div>
<div class="ttc" id="agroup__l4__timeout__api_html_ga22a6a662679f6baaa0ae931d8bb443ea"><div class="ttname"><a href="group__l4__timeout__api.html#ga22a6a662679f6baaa0ae931d8bb443ea">L4_IPC_SEND_TIMEOUT_0</a></div><div class="ttdeci">#define L4_IPC_SEND_TIMEOUT_0</div><div class="ttdoc">0 send timeout</div><div class="ttdef"><b>Definition</b> <a href="____timeout_8h_source.html#l00078">__timeout.h:78</a></div></div>
<div class="ttc" id="agroup__l4__timeout__api_html_gaf01c5e1475efc4f33bc7d1985f7320d3"><div class="ttname"><a href="group__l4__timeout__api.html#gaf01c5e1475efc4f33bc7d1985f7320d3">L4_IPC_NEVER</a></div><div class="ttdeci">#define L4_IPC_NEVER</div><div class="ttdoc">never timeout</div><div class="ttdef"><b>Definition</b> <a href="____timeout_8h_source.html#l00076">__timeout.h:76</a></div></div>
<div class="ttc" id="agroup__l4__utcb__api_html_ga89be8a86d11c1d532b636cc2df1330fb"><div class="ttname"><a href="group__l4__utcb__api.html#ga89be8a86d11c1d532b636cc2df1330fb">l4_utcb_t</a></div><div class="ttdeci">struct l4_utcb_t l4_utcb_t</div><div class="ttdoc">Opaque type for the UTCB.</div><div class="ttdef"><b>Definition</b> <a href="l4_2sys_2utcb_8h_source.html#l00056">utcb.h:56</a></div></div>
<div class="ttc" id="agroup__l4__utcb__api_html_gadc099b4a59e1d99638c72c11a8c8b644"><div class="ttname"><a href="group__l4__utcb__api.html#gadc099b4a59e1d99638c72c11a8c8b644">l4_utcb</a></div><div class="ttdeci">l4_utcb_t * l4_utcb(void) L4_NOTHROW L4_PURE</div><div class="ttdoc">Get the UTCB address.</div><div class="ttdef"><b>Definition</b> <a href="l4_2sys_2utcb_8h_source.html#l00346">utcb.h:346</a></div></div>
<div class="ttc" id="agroup__l4__utcb__br__api_html_gae166f923e400efff8f39be3425641fc5"><div class="ttname"><a href="group__l4__utcb__br__api.html#gae166f923e400efff8f39be3425641fc5">l4_buf_regs_t</a></div><div class="ttdeci">struct l4_buf_regs_t l4_buf_regs_t</div><div class="ttdoc">Encapsulation of the buffer-registers block in the UTCB.</div></div>
<div class="ttc" id="agroup__l4__utcb__mr__api_html_ga3501fc9601dfb2fd7b49d04607d2ac84"><div class="ttname"><a href="group__l4__utcb__mr__api.html#ga3501fc9601dfb2fd7b49d04607d2ac84">l4_msg_regs_t</a></div><div class="ttdeci">union l4_msg_regs_t l4_msg_regs_t</div><div class="ttdoc">Encapsulation of the message-register block in the UTCB.</div></div>
<div class="ttc" id="agroup__l4sys__defines_html_ga3df4200910f2664b97397c23693beeb0"><div class="ttname"><a href="group__l4sys__defines.html#ga3df4200910f2664b97397c23693beeb0">L4_UNLIKELY</a></div><div class="ttdeci">#define L4_UNLIKELY(x)</div><div class="ttdoc">Expression is unlikely to execute.</div><div class="ttdef"><b>Definition</b> <a href="compiler_8h_source.html#l00284">compiler.h:284</a></div></div>
<div class="ttc" id="agroup__l4sys__defines_html_ga63e7f1ab50a1b3049bdd0a34e97423c2"><div class="ttname"><a href="group__l4sys__defines.html#ga63e7f1ab50a1b3049bdd0a34e97423c2">L4_EXPORT</a></div><div class="ttdeci">#define L4_EXPORT</div><div class="ttdoc">Attribute to mark functions, variables, and data types as being exported from a library.</div><div class="ttdef"><b>Definition</b> <a href="compiler_8h_source.html#l00214">compiler.h:214</a></div></div>
<div class="ttc" id="agroup__l4sys__defines_html_gac76599eba5afa89a12c44176cbfa90cb"><div class="ttname"><a href="group__l4sys__defines.html#gac76599eba5afa89a12c44176cbfa90cb">L4_LIKELY</a></div><div class="ttdeci">#define L4_LIKELY(x)</div><div class="ttdoc">Expression is likely to execute.</div><div class="ttdef"><b>Definition</b> <a href="compiler_8h_source.html#l00283">compiler.h:283</a></div></div>
<div class="ttc" id="aipc__types_html"><div class="ttname"><a href="ipc__types.html">ipc_types</a></div></div>
<div class="ttc" id="al4_2sys_2ipc_8h_html_a92b8e935d6fa1222f0358a477f539367"><div class="ttname"><a href="l4_2sys_2ipc_8h.html#a92b8e935d6fa1222f0358a477f539367">l4_ipc_to_errno</a></div><div class="ttdeci">long l4_ipc_to_errno(unsigned long ipc_error_code) L4_NOTHROW</div><div class="ttdoc">Get a negative error code for the given IPC error code.</div><div class="ttdef"><b>Definition</b> <a href="l4_2sys_2ipc_8h_source.html#l00561">ipc.h:561</a></div></div>
<div class="ttc" id="anamespaceL4_1_1Ipc_1_1Msg_html"><div class="ttname"><a href="namespaceL4_1_1Ipc_1_1Msg.html">L4::Ipc::Msg</a></div><div class="ttdoc">IPC Message related functionality.</div><div class="ttdef"><b>Definition</b> <a href="ipc__array_source.html#l00154">ipc_array:154</a></div></div>
<div class="ttc" id="anamespaceL4_1_1Ipc_1_1Msg_html_a501c5434eab6d3adb40373258136884cab0b521544e0087a9c30951d1c426a01f"><div class="ttname"><a href="namespaceL4_1_1Ipc_1_1Msg.html#a501c5434eab6d3adb40373258136884cab0b521544e0087a9c30951d1c426a01f">L4::Ipc::Msg::Item_bytes</a></div><div class="ttdeci">@ Item_bytes</div><div class="ttdoc">number of bytes for one message item</div><div class="ttdef"><b>Definition</b> <a href="ipc__basics_source.html#l00092">ipc_basics:92</a></div></div>
<div class="ttc" id="anamespaceL4_1_1Ipc_1_1Msg_html_a501c5434eab6d3adb40373258136884cab909157795890260363573ff7587d68d"><div class="ttname"><a href="namespaceL4_1_1Ipc_1_1Msg.html#a501c5434eab6d3adb40373258136884cab909157795890260363573ff7587d68d">L4::Ipc::Msg::Word_bytes</a></div><div class="ttdeci">@ Word_bytes</div><div class="ttdoc">number of bytes for one message word</div><div class="ttdef"><b>Definition</b> <a href="ipc__basics_source.html#l00088">ipc_basics:88</a></div></div>
<div class="ttc" id="anamespaceL4_1_1Ipc_html"><div class="ttname"><a href="namespaceL4_1_1Ipc.html">L4::Ipc</a></div><div class="ttdoc">IPC related functionality.</div><div class="ttdef"><b>Definition</b> <a href="ipc__array_source.html#l00013">ipc_array:13</a></div></div>
<div class="ttc" id="anamespaceL4_html"><div class="ttname"><a href="namespaceL4.html">L4</a></div><div class="ttdoc">L4 low-level kernel interface.</div><div class="ttdef"><b>Definition</b> <a href="l4sys-l4f-groups_8dox_source.html#l00050">l4sys-l4f-groups.dox:50</a></div></div>
<div class="ttc" id="astructL4_1_1Ipc_1_1Call__t_html"><div class="ttname"><a href="structL4_1_1Ipc_1_1Call__t.html">L4::Ipc::Call_t</a></div><div class="ttdoc">RPC attribute for an RPC call with required rights.</div><div class="ttdef"><b>Definition</b> <a href="#l00270">ipc_iface:271</a></div></div>
<div class="ttc" id="astructL4_1_1Ipc_1_1Call__zero__send__timeout_html"><div class="ttname"><a href="structL4_1_1Ipc_1_1Call__zero__send__timeout.html">L4::Ipc::Call_zero_send_timeout</a></div><div class="ttdoc">RPC attribute for an RPC call, with zero send timeout.</div><div class="ttdef"><b>Definition</b> <a href="#l00249">ipc_iface:250</a></div></div>
<div class="ttc" id="astructL4_1_1Ipc_1_1Call_html"><div class="ttname"><a href="structL4_1_1Ipc_1_1Call.html">L4::Ipc::Call</a></div><div class="ttdoc">RPC attribute for a standard RPC call.</div><div class="ttdef"><b>Definition</b> <a href="#l00239">ipc_iface:240</a></div></div>
<div class="ttc" id="astructL4_1_1Ipc_1_1Send__only_html"><div class="ttname"><a href="structL4_1_1Ipc_1_1Send__only.html">L4::Ipc::Send_only</a></div><div class="ttdoc">RPC attribute for a send-only RPC.</div><div class="ttdef"><b>Definition</b> <a href="#l00287">ipc_iface:288</a></div></div>
<div class="ttc" id="astructl4__buf__regs__t_html_a716f3f2090e6d861415e3386bfa3037d"><div class="ttname"><a href="structl4__buf__regs__t.html#a716f3f2090e6d861415e3386bfa3037d">l4_buf_regs_t::br</a></div><div class="ttdeci">l4_umword_t br[L4_UTCB_GENERIC_BUFFERS_SIZE]</div><div class="ttdoc">Buffer registers.</div><div class="ttdef"><b>Definition</b> <a href="l4_2sys_2utcb_8h_source.html#l00088">utcb.h:88</a></div></div>
<div class="ttc" id="astructl4__buf__regs__t_html_a852ae37fbb64d4a2f71cbd4c0ba905d1"><div class="ttname"><a href="structl4__buf__regs__t.html#a852ae37fbb64d4a2f71cbd4c0ba905d1">l4_buf_regs_t::bdr</a></div><div class="ttdeci">l4_umword_t bdr</div><div class="ttdoc">Buffer descriptor.</div><div class="ttdef"><b>Definition</b> <a href="l4_2sys_2utcb_8h_source.html#l00085">utcb.h:85</a></div></div>
<div class="ttc" id="astructl4__msgtag__t_html_a002076380a3f6e4f29a1f6b50ce2bde2"><div class="ttname"><a href="structl4__msgtag__t.html#a002076380a3f6e4f29a1f6b50ce2bde2">l4_msgtag_t::label</a></div><div class="ttdeci">long label() const L4_NOTHROW</div><div class="ttdoc">Get the protocol value.</div><div class="ttdef"><b>Definition</b> <a href="l4_2sys_2types_8h_source.html#l00158">types.h:158</a></div></div>
<div class="ttc" id="astructl4__msgtag__t_html_a433eb16b19202d09cc98b40a139b3c29"><div class="ttname"><a href="structl4__msgtag__t.html#a433eb16b19202d09cc98b40a139b3c29">l4_msgtag_t::has_error</a></div><div class="ttdeci">bool has_error() const L4_NOTHROW</div><div class="ttdoc">Test if flags indicate an error.</div><div class="ttdef"><b>Definition</b> <a href="l4_2sys_2types_8h_source.html#l00191">types.h:191</a></div></div>
<div class="ttc" id="astructl4__msgtag__t_html_a98577ea730d9abcd938b89d5c7adb18c"><div class="ttname"><a href="structl4__msgtag__t.html#a98577ea730d9abcd938b89d5c7adb18c">l4_msgtag_t::words</a></div><div class="ttdeci">unsigned words() const L4_NOTHROW</div><div class="ttdoc">Get the number of untyped words.</div><div class="ttdef"><b>Definition</b> <a href="l4_2sys_2types_8h_source.html#l00169">types.h:169</a></div></div>
<div class="ttc" id="astructl4__msgtag__t_html_ad014e4a9f4509b068ddda678f6f8d568"><div class="ttname"><a href="structl4__msgtag__t.html#ad014e4a9f4509b068ddda678f6f8d568">l4_msgtag_t::items</a></div><div class="ttdeci">unsigned items() const L4_NOTHROW</div><div class="ttdoc">Get the number of typed items.</div><div class="ttdef"><b>Definition</b> <a href="l4_2sys_2types_8h_source.html#l00171">types.h:171</a></div></div>
<div class="ttc" id="astructl4__msgtag__t_html_af6b9564a9a16427cec0e81a4628996b8"><div class="ttname"><a href="structl4__msgtag__t.html#af6b9564a9a16427cec0e81a4628996b8">l4_msgtag_t::flags</a></div><div class="ttdeci">unsigned flags() const L4_NOTHROW</div><div class="ttdoc">Get the flags value.</div><div class="ttdef"><b>Definition</b> <a href="l4_2sys_2types_8h_source.html#l00178">types.h:178</a></div></div>
<div class="ttc" id="aunionl4__msg__regs__t_html_ad7d601b3b3808afaefe4c09d42de8b99"><div class="ttname"><a href="unionl4__msg__regs__t.html#ad7d601b3b3808afaefe4c09d42de8b99">l4_msg_regs_t::mr</a></div><div class="ttdeci">l4_umword_t mr[L4_UTCB_GENERIC_DATA_SIZE]</div><div class="ttdoc">Message registers.</div><div class="ttdef"><b>Definition</b> <a href="l4_2sys_2utcb_8h_source.html#l00069">utcb.h:69</a></div></div>
<div class="ttc" id="aunionl4__timeout__t_html"><div class="ttname"><a href="unionl4__timeout__t.html">l4_timeout_t</a></div><div class="ttdoc">Timeout pair.</div><div class="ttdef"><b>Definition</b> <a href="____timeout_8h_source.html#l00052">__timeout.h:53</a></div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
</div><!-- container -->
<!-- HTML footer for doxygen 1.9.1-->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><b>l4</b></li><li class="navelem"><b>sys</b></li><li class="navelem"><b>cxx</b></li><li class="navelem"><a href="ipc__iface.html">ipc_iface</a></li>
<li class="footer">Generated on <span class="timestamp"></span> for L4Re Operating System Framework by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.15.0 </li>
</ul>
</div>
</body>
</html>