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,568 @@
<!-- 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/l4virtio/server/virtio 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('virtio_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">virtio</div></div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">// vi:ft=cpp</span></div>
<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment">/* SPDX-License-Identifier: MIT */</span></div>
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">/*</span></div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"> * Copyright (C) 2014-2020, 2023-2024 Kernkonzept GmbH.</span></div>
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment"> * Author(s): Alexander Warg &lt;alexander.warg@kernkonzept.com&gt;</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="comment"> */</span></div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="preprocessor">#pragma once</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;<a class="code" href="l4_2sys_2types_8h.html">l4/sys/types.h</a>&gt;</span></div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="preprocessor">#include &lt;l4/cxx/bitfield&gt;</span></div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="preprocessor">#include &lt;l4/cxx/minmax&gt;</span></div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="preprocessor">#include &lt;l4/cxx/utils&gt;</span></div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span> </div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="preprocessor">#include &lt;limits.h&gt;</span></div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="preprocessor">#include &lt;<a class="code" href="string_8h.html">string.h</a>&gt;</span></div>
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#include &lt;stdio.h&gt;</span></div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> </div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#include &quot;../virtqueue&quot;</span></div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span></div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespaceL4virtio.html">L4virtio</a> {</div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="keyword">namespace </span>Svr {</div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span></div>
<div class="foldopen" id="foldopen00032" data-start="{" data-end="};">
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"><a class="line" href="structL4virtio_1_1Svr_1_1Dev__status.html"> 32</a></span><span class="keyword">struct </span>Dev_status</div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span>{</div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"><a class="line" href="structL4virtio_1_1Svr_1_1Dev__status.html#aed2dab7b0f293893bd24e66eeeda5a3b"> 34</a></span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code hl_variable" href="structL4virtio_1_1Svr_1_1Dev__status.html#aed2dab7b0f293893bd24e66eeeda5a3b">raw</a>; </div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> Dev_status() = <span class="keywordflow">default</span>;</div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span></div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"><a class="line" href="structL4virtio_1_1Svr_1_1Dev__status.html#ab2cf42874c47b6ed690ef6bdef7326dd"> 38</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="structL4virtio_1_1Svr_1_1Dev__status.html#ab2cf42874c47b6ed690ef6bdef7326dd">Dev_status</a>(<a class="code hl_typedef" href="group__l4__basic__types.html#gac1d09f3e382e711b776931f10e6e1e5a">l4_uint32_t</a> v) : <a class="code hl_variable" href="structL4virtio_1_1Svr_1_1Dev__status.html#aed2dab7b0f293893bd24e66eeeda5a3b">raw</a>(v) {}</div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> </div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"><a class="line" href="structL4virtio_1_1Svr_1_1Dev__status.html#a7a964d4dab8c8f3812bb2353a4a94dd2"> 40</a></span> CXX_BITFIELD_MEMBER(0, 0, <a class="code hl_function" href="structL4virtio_1_1Svr_1_1Dev__status.html#a7a964d4dab8c8f3812bb2353a4a94dd2">acked</a>, <a class="code hl_variable" href="structL4virtio_1_1Svr_1_1Dev__status.html#aed2dab7b0f293893bd24e66eeeda5a3b">raw</a>);</div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"><a class="line" href="structL4virtio_1_1Svr_1_1Dev__status.html#ac17e8c31bc42f4ddea8781e31d8eac90"> 41</a></span> CXX_BITFIELD_MEMBER(1, 1, <a class="code hl_function" href="structL4virtio_1_1Svr_1_1Dev__status.html#ac17e8c31bc42f4ddea8781e31d8eac90">driver</a>, <a class="code hl_variable" href="structL4virtio_1_1Svr_1_1Dev__status.html#aed2dab7b0f293893bd24e66eeeda5a3b">raw</a>);</div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"><a class="line" href="structL4virtio_1_1Svr_1_1Dev__status.html#a7a8555825acd0b2c42febe37f00b8333"> 42</a></span> CXX_BITFIELD_MEMBER(2, 2, <a class="code hl_function" href="structL4virtio_1_1Svr_1_1Dev__status.html#a7a8555825acd0b2c42febe37f00b8333">driver_ok</a>, <a class="code hl_variable" href="structL4virtio_1_1Svr_1_1Dev__status.html#aed2dab7b0f293893bd24e66eeeda5a3b">raw</a>);</div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"><a class="line" href="structL4virtio_1_1Svr_1_1Dev__status.html#abbeedd7d18bbabaf4463db2706943167"> 43</a></span> CXX_BITFIELD_MEMBER(3, 3, <a class="code hl_function" href="structL4virtio_1_1Svr_1_1Dev__status.html#abbeedd7d18bbabaf4463db2706943167">features_ok</a>, <a class="code hl_variable" href="structL4virtio_1_1Svr_1_1Dev__status.html#aed2dab7b0f293893bd24e66eeeda5a3b">raw</a>);</div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"><a class="line" href="structL4virtio_1_1Svr_1_1Dev__status.html#acfbb0f427399dde712ff5bfc894d1144"> 44</a></span> CXX_BITFIELD_MEMBER(6, 7, <a class="code hl_function" href="structL4virtio_1_1Svr_1_1Dev__status.html#acfbb0f427399dde712ff5bfc894d1144">fail_state</a>, <a class="code hl_variable" href="structL4virtio_1_1Svr_1_1Dev__status.html#aed2dab7b0f293893bd24e66eeeda5a3b">raw</a>);</div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"><a class="line" href="structL4virtio_1_1Svr_1_1Dev__status.html#a3748090616313eb1e9fa86c0e406cbf9"> 45</a></span> CXX_BITFIELD_MEMBER(6, 6, <a class="code hl_function" href="structL4virtio_1_1Svr_1_1Dev__status.html#a3748090616313eb1e9fa86c0e406cbf9">device_needs_reset</a>, <a class="code hl_variable" href="structL4virtio_1_1Svr_1_1Dev__status.html#aed2dab7b0f293893bd24e66eeeda5a3b">raw</a>);</div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"><a class="line" href="structL4virtio_1_1Svr_1_1Dev__status.html#a10c94bb94ebc76be14f5b385576a73f9"> 46</a></span> CXX_BITFIELD_MEMBER(7, 7, <a class="code hl_function" href="structL4virtio_1_1Svr_1_1Dev__status.html#a10c94bb94ebc76be14f5b385576a73f9">failed</a>, <a class="code hl_variable" href="structL4virtio_1_1Svr_1_1Dev__status.html#aed2dab7b0f293893bd24e66eeeda5a3b">raw</a>);</div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span></div>
<div class="foldopen" id="foldopen00057" data-start="{" data-end="}">
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"><a class="line" href="structL4virtio_1_1Svr_1_1Dev__status.html#a6496574b66a392b7813ebaf14d3fe0eb"> 57</a></span> <span class="keywordtype">bool</span> <a class="code hl_function" href="structL4virtio_1_1Svr_1_1Dev__status.html#a6496574b66a392b7813ebaf14d3fe0eb">running</a>()<span class="keyword"> const</span></div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span><span class="keyword"> </span>{</div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> <span class="keywordflow">return</span> (<a class="code hl_variable" href="structL4virtio_1_1Svr_1_1Dev__status.html#aed2dab7b0f293893bd24e66eeeda5a3b">raw</a> == 0xf);</div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> }</div>
</div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span>};</div>
</div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span></div>
<div class="foldopen" id="foldopen00066" data-start="{" data-end="};">
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"><a class="line" href="structL4virtio_1_1Svr_1_1Dev__features.html"> 66</a></span><span class="keyword">struct </span>Dev_features</div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span>{</div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"><a class="line" href="structL4virtio_1_1Svr_1_1Dev__features.html#a01bb482bee85fd60f8685ed5a55fde79"> 68</a></span> <a class="code hl_typedef" href="group__l4__basic__types.html#gac1d09f3e382e711b776931f10e6e1e5a">l4_uint32_t</a> <a class="code hl_variable" href="structL4virtio_1_1Svr_1_1Dev__features.html#a01bb482bee85fd60f8685ed5a55fde79">raw</a>; </div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> Dev_features() = <span class="keywordflow">default</span>;</div>
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span></div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"><a class="line" href="structL4virtio_1_1Svr_1_1Dev__features.html#a735ebbe6c62565fe9c1511e4065445aa"> 72</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="structL4virtio_1_1Svr_1_1Dev__features.html#a735ebbe6c62565fe9c1511e4065445aa">Dev_features</a>(<a class="code hl_typedef" href="group__l4__basic__types.html#gac1d09f3e382e711b776931f10e6e1e5a">l4_uint32_t</a> v) : <a class="code hl_variable" href="structL4virtio_1_1Svr_1_1Dev__features.html#a01bb482bee85fd60f8685ed5a55fde79">raw</a>(v) {}</div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> </div>
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"><a class="line" href="structL4virtio_1_1Svr_1_1Dev__features.html#a0a33e8e5d0b3ef5bf8cfc6e56c7d2d38"> 74</a></span> CXX_BITFIELD_MEMBER(28, 28, <a class="code hl_function" href="structL4virtio_1_1Svr_1_1Dev__features.html#a0a33e8e5d0b3ef5bf8cfc6e56c7d2d38">ring_indirect_desc</a>, <a class="code hl_variable" href="structL4virtio_1_1Svr_1_1Dev__features.html#a01bb482bee85fd60f8685ed5a55fde79">raw</a>);</div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"><a class="line" href="structL4virtio_1_1Svr_1_1Dev__features.html#a69919ccca2c4fbe511ec0b803f3a28b6"> 75</a></span> CXX_BITFIELD_MEMBER(29, 29, <a class="code hl_function" href="structL4virtio_1_1Svr_1_1Dev__features.html#a69919ccca2c4fbe511ec0b803f3a28b6">ring_event_idx</a>, <a class="code hl_variable" href="structL4virtio_1_1Svr_1_1Dev__features.html#a01bb482bee85fd60f8685ed5a55fde79">raw</a>);</div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span>};</div>
</div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> </div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span></div>
<div class="foldopen" id="foldopen00087" data-start="{" data-end="};">
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"><a class="line" href="classL4virtio_1_1Svr_1_1Virtqueue.html"> 87</a></span><span class="keyword">class </span><a class="code hl_function" href="classL4virtio_1_1Virtqueue.html#a7ae2647d7163653bb5a250936f917a50">Virtqueue</a> : <span class="keyword">public</span> <a class="code hl_class" href="classL4virtio_1_1Virtqueue.html">L4virtio::Virtqueue</a></div>
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span>{</div>
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span><span class="keyword">public</span>:</div>
<div class="foldopen" id="foldopen00093" data-start="{" data-end="};">
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"><a class="line" href="classL4virtio_1_1Svr_1_1Virtqueue_1_1Head__desc.html"> 93</a></span> <span class="keyword">class </span>Head_desc</div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> {</div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> <span class="keyword">friend</span> <span class="keyword">class </span>Virtqueue;</div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> <span class="keyword">private</span>:</div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> <a class="code hl_class" href="classL4virtio_1_1Virtqueue_1_1Desc.html">Virtqueue::Desc</a> <span class="keyword">const</span> *_d;</div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> <a class="code hl_function" href="classL4virtio_1_1Svr_1_1Virtqueue_1_1Head__desc.html#a9b1a40d9d9fa011af9aa0b6f01757734">Head_desc</a>(Virtqueue *r, <span class="keywordtype">unsigned</span> i) : _d(r-&gt;<a class="code hl_function" href="classL4virtio_1_1Svr_1_1Virtqueue.html#a9c3e815065cc8cf0c8fe2573c047dbb4">desc</a>(i)) {}</div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> </div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"><a class="line" href="classL4virtio_1_1Svr_1_1Virtqueue_1_1Head__desc.html#a9b1a40d9d9fa011af9aa0b6f01757734"> 102</a></span> <a class="code hl_function" href="classL4virtio_1_1Svr_1_1Virtqueue_1_1Head__desc.html#a9b1a40d9d9fa011af9aa0b6f01757734">Head_desc</a>() : _d(0) {}</div>
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span></div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"><a class="line" href="classL4virtio_1_1Svr_1_1Virtqueue_1_1Head__desc.html#a742c4804e90c696a760b40f1da94bdb0"> 105</a></span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classL4virtio_1_1Svr_1_1Virtqueue_1_1Head__desc.html#a742c4804e90c696a760b40f1da94bdb0">valid</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _d; }</div>
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span></div>
<div class="foldopen" id="foldopen00108" data-start="{" data-end="}">
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"><a class="line" href="classL4virtio_1_1Svr_1_1Virtqueue_1_1Head__desc.html#ac153517ddfa3de25765955ead0d6bf74"> 108</a></span> <span class="keyword">explicit</span> <span class="keyword">operator</span> bool ()<span class="keyword"> const</span></div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span><span class="keyword"> </span>{ <span class="keywordflow">return</span> <a class="code hl_function" href="classL4virtio_1_1Svr_1_1Virtqueue_1_1Head__desc.html#a742c4804e90c696a760b40f1da94bdb0">valid</a>(); }</div>
</div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span></div>
<div class="foldopen" id="foldopen00112" data-start="{" data-end="}">
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"><a class="line" href="classL4virtio_1_1Svr_1_1Virtqueue_1_1Head__desc.html#a98a4cc67f88052754fa54451b3d68e2d"> 112</a></span> <a class="code hl_class" href="classL4virtio_1_1Virtqueue_1_1Desc.html">Desc</a> <span class="keyword">const</span> *<a class="code hl_function" href="classL4virtio_1_1Svr_1_1Virtqueue_1_1Head__desc.html#a98a4cc67f88052754fa54451b3d68e2d">desc</a>()<span class="keyword"> const</span></div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span><span class="keyword"> </span>{ <span class="keywordflow">return</span> _d; }</div>
</div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> };</div>
</div>
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> </div>
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> <span class="keyword">struct </span>Request : Head_desc</div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> {</div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> <a class="code hl_class" href="classL4virtio_1_1Svr_1_1Virtqueue.html">Virtqueue</a> *ring = <span class="keyword">nullptr</span>;</div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> Request() = <span class="keywordflow">default</span>;</div>
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> <span class="keyword">private</span>:</div>
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code hl_class" href="classL4virtio_1_1Svr_1_1Virtqueue.html">Virtqueue</a>;</div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> Request(<a class="code hl_class" href="classL4virtio_1_1Svr_1_1Virtqueue.html">Virtqueue</a> *r, <span class="keywordtype">unsigned</span> i) : <a class="code hl_function" href="classL4virtio_1_1Svr_1_1Virtqueue_1_1Head__desc.html#a9b1a40d9d9fa011af9aa0b6f01757734">Head_desc</a>(r, i), ring(r) {}</div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> };</div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> </div>
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span></div>
<div class="foldopen" id="foldopen00136" data-start="{" data-end="}">
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"><a class="line" href="classL4virtio_1_1Svr_1_1Virtqueue.html#aa7e9493f7fe5bfa9ebaa5d80be8179cf"> 136</a></span> Request <a class="code hl_function" href="classL4virtio_1_1Svr_1_1Virtqueue.html#aa7e9493f7fe5bfa9ebaa5d80be8179cf">next_avail</a>()</div>
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> {</div>
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> <span class="keywordflow">if</span> (<a class="code hl_define" href="group__l4sys__defines.html#gac76599eba5afa89a12c44176cbfa90cb">L4_LIKELY</a>(<a class="code hl_variable" href="classL4virtio_1_1Virtqueue.html#af4c017e70aa977b3d8f7a024ee3473f3">_current_avail</a> != <a class="code hl_variable" href="classL4virtio_1_1Virtqueue.html#ad569bf985c1849caadd7fd7c15d75cec">_avail</a>-&gt;idx))</div>
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> {</div>
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> rmb();</div>
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> <span class="keywordtype">unsigned</span> head = <a class="code hl_variable" href="classL4virtio_1_1Virtqueue.html#af4c017e70aa977b3d8f7a024ee3473f3">_current_avail</a> &amp; <a class="code hl_variable" href="classL4virtio_1_1Virtqueue.html#aa4730e5b53806a3d72164e917c20e91a">_idx_mask</a>;</div>
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> ++<a class="code hl_variable" href="classL4virtio_1_1Virtqueue.html#af4c017e70aa977b3d8f7a024ee3473f3">_current_avail</a>;</div>
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> <span class="keywordflow">return</span> Request(<span class="keyword">this</span>, <a class="code hl_variable" href="classL4virtio_1_1Virtqueue.html#ad569bf985c1849caadd7fd7c15d75cec">_avail</a>-&gt;ring[head]);</div>
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> }</div>
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> <span class="keywordflow">return</span> Request();</div>
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> }</div>
</div>
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span></div>
<div class="foldopen" id="foldopen00160" data-start="{" data-end="}">
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"><a class="line" href="classL4virtio_1_1Svr_1_1Virtqueue.html#af1edfd95bc43193284a4fe54cc260f9c"> 160</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classL4virtio_1_1Svr_1_1Virtqueue.html#af1edfd95bc43193284a4fe54cc260f9c">rewind_avail</a>(<a class="code hl_class" href="classL4virtio_1_1Svr_1_1Virtqueue_1_1Head__desc.html">Head_desc</a> <span class="keyword">const</span> &amp;d)</div>
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> {</div>
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> <span class="keywordtype">unsigned</span> head_idx = d._d - <a class="code hl_variable" href="classL4virtio_1_1Virtqueue.html#ab2dc5f70a0c42fa15e91cd8084d29cd0">_desc</a>;</div>
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> <span class="comment">// Calculate the distance between _current_avail and head_idx, taking into</span></div>
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> <span class="comment">// account that _current_avail might have wrapped around with respect to</span></div>
<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> <span class="comment">// _idx_mask in the meantime.</span></div>
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> <a class="code hl_variable" href="classL4virtio_1_1Virtqueue.html#af4c017e70aa977b3d8f7a024ee3473f3">_current_avail</a> -= (<a class="code hl_variable" href="classL4virtio_1_1Virtqueue.html#af4c017e70aa977b3d8f7a024ee3473f3">_current_avail</a> - head_idx) &amp; <a class="code hl_variable" href="classL4virtio_1_1Virtqueue.html#aa4730e5b53806a3d72164e917c20e91a">_idx_mask</a>;</div>
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> }</div>
</div>
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span></div>
<div class="foldopen" id="foldopen00175" data-start="{" data-end="}">
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"><a class="line" href="classL4virtio_1_1Svr_1_1Virtqueue.html#a17bf1779983cb1471fd3c0ca68641922"> 175</a></span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classL4virtio_1_1Svr_1_1Virtqueue.html#a17bf1779983cb1471fd3c0ca68641922">desc_avail</a>()<span class="keyword"> const</span></div>
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span><span class="keyword"> </span>{</div>
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> <span class="keywordflow">return</span> <a class="code hl_variable" href="classL4virtio_1_1Virtqueue.html#af4c017e70aa977b3d8f7a024ee3473f3">_current_avail</a> != <a class="code hl_variable" href="classL4virtio_1_1Virtqueue.html#ad569bf985c1849caadd7fd7c15d75cec">_avail</a>-&gt;idx;</div>
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> }</div>
</div>
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span></div>
<div class="foldopen" id="foldopen00190" data-start="{" data-end="}">
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"><a class="line" href="classL4virtio_1_1Svr_1_1Virtqueue.html#af6577deb37b3685815f9ae52760390db"> 190</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classL4virtio_1_1Svr_1_1Virtqueue.html#af6577deb37b3685815f9ae52760390db">consumed</a>(<a class="code hl_class" href="classL4virtio_1_1Svr_1_1Virtqueue_1_1Head__desc.html">Head_desc</a> <span class="keyword">const</span> &amp;r, <a class="code hl_typedef" href="group__l4__basic__types.html#gac1d09f3e382e711b776931f10e6e1e5a">l4_uint32_t</a> len = 0)</div>
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> {</div>
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> <a class="code hl_typedef" href="group__l4__basic__types.html#gae8d67914f723bf843df6f311ad2619a2">l4_uint16_t</a> i = <a class="code hl_variable" href="classL4virtio_1_1Virtqueue.html#a287fe9fe8bef92049b4f0163ed39c405">_used</a>-&gt;idx &amp; <a class="code hl_variable" href="classL4virtio_1_1Virtqueue.html#aa4730e5b53806a3d72164e917c20e91a">_idx_mask</a>;</div>
<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> <a class="code hl_variable" href="classL4virtio_1_1Virtqueue.html#a287fe9fe8bef92049b4f0163ed39c405">_used</a>-&gt;ring[i] = <a class="code hl_struct" href="structL4virtio_1_1Virtqueue_1_1Used__elem.html">Used_elem</a>(r._d - <a class="code hl_variable" href="classL4virtio_1_1Virtqueue.html#ab2dc5f70a0c42fa15e91cd8084d29cd0">_desc</a>, len);</div>
<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> wmb();</div>
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> ++<a class="code hl_variable" href="classL4virtio_1_1Virtqueue.html#a287fe9fe8bef92049b4f0163ed39c405">_used</a>-&gt;idx;</div>
<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> }</div>
</div>
<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span></div>
<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span> <span class="keyword">template</span>&lt;<span class="keyword">typename</span> ITER&gt;</div>
<div class="foldopen" id="foldopen00213" data-start="{" data-end="}">
<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"><a class="line" href="classL4virtio_1_1Svr_1_1Virtqueue.html#a57a3a66f78e7f372792ef7f47fde0297"> 213</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classL4virtio_1_1Svr_1_1Virtqueue.html#a57a3a66f78e7f372792ef7f47fde0297">consumed</a>(ITER <span class="keyword">const</span> &amp;begin, ITER <span class="keyword">const</span> &amp;end)</div>
<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> {</div>
<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> <a class="code hl_typedef" href="group__l4__basic__types.html#gae8d67914f723bf843df6f311ad2619a2">l4_uint16_t</a> added = 0;</div>
<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> <a class="code hl_typedef" href="group__l4__basic__types.html#gae8d67914f723bf843df6f311ad2619a2">l4_uint16_t</a> idx = <a class="code hl_variable" href="classL4virtio_1_1Virtqueue.html#a287fe9fe8bef92049b4f0163ed39c405">_used</a>-&gt;idx;</div>
<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> </div>
<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span> elem = begin ; elem != end; ++elem, ++added)</div>
<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> <a class="code hl_variable" href="classL4virtio_1_1Virtqueue.html#a287fe9fe8bef92049b4f0163ed39c405">_used</a>-&gt;ring[(idx + added) &amp; <a class="code hl_variable" href="classL4virtio_1_1Virtqueue.html#aa4730e5b53806a3d72164e917c20e91a">_idx_mask</a>]</div>
<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> = <a class="code hl_struct" href="structL4virtio_1_1Virtqueue_1_1Used__elem.html">Used_elem</a>(elem-&gt;first._d - <a class="code hl_variable" href="classL4virtio_1_1Virtqueue.html#ab2dc5f70a0c42fa15e91cd8084d29cd0">_desc</a>, elem-&gt;second);</div>
<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> </div>
<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> wmb();</div>
<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> <a class="code hl_variable" href="classL4virtio_1_1Virtqueue.html#a287fe9fe8bef92049b4f0163ed39c405">_used</a>-&gt;idx += added;</div>
<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> }</div>
</div>
<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span></div>
<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span> <span class="keyword">template</span>&lt;<span class="keyword">typename</span> QUEUE_OBSERVER&gt;</div>
<div class="foldopen" id="foldopen00240" data-start="{" data-end="}">
<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"><a class="line" href="classL4virtio_1_1Svr_1_1Virtqueue.html#aeba93ed1ee8f9abfe42542187e54cca0"> 240</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classL4virtio_1_1Svr_1_1Virtqueue.html#aeba93ed1ee8f9abfe42542187e54cca0">finish</a>(<a class="code hl_class" href="classL4virtio_1_1Svr_1_1Virtqueue_1_1Head__desc.html">Head_desc</a> &amp;d, QUEUE_OBSERVER *o, <a class="code hl_typedef" href="group__l4__basic__types.html#gac1d09f3e382e711b776931f10e6e1e5a">l4_uint32_t</a> len = 0)</div>
<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span> {</div>
<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span> <a class="code hl_function" href="classL4virtio_1_1Svr_1_1Virtqueue.html#af6577deb37b3685815f9ae52760390db">consumed</a>(d, len);</div>
<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span> o-&gt;notify_queue(<span class="keyword">this</span>);</div>
<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span> d._d = 0;</div>
<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span> }</div>
</div>
<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span></div>
<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span> <span class="keyword">template</span>&lt;<span class="keyword">typename</span> ITER, <span class="keyword">typename</span> QUEUE_OBSERVER&gt;</div>
<div class="foldopen" id="foldopen00262" data-start="{" data-end="}">
<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"><a class="line" href="classL4virtio_1_1Svr_1_1Virtqueue.html#ad7102baa13cc3341a1b559f849f57651"> 262</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classL4virtio_1_1Svr_1_1Virtqueue.html#ad7102baa13cc3341a1b559f849f57651">finish</a>(ITER <span class="keyword">const</span> &amp;begin, ITER <span class="keyword">const</span> &amp;end, QUEUE_OBSERVER *o)</div>
<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span> {</div>
<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span> <a class="code hl_function" href="classL4virtio_1_1Svr_1_1Virtqueue.html#af6577deb37b3685815f9ae52760390db">consumed</a>(begin, end);</div>
<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span> o-&gt;notify_queue(<span class="keyword">this</span>);</div>
<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span> }</div>
</div>
<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span></div>
<div class="foldopen" id="foldopen00273" data-start="{" data-end="}">
<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"><a class="line" href="classL4virtio_1_1Svr_1_1Virtqueue.html#ae47268978d2deb4f22d1b93662710f9b"> 273</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classL4virtio_1_1Svr_1_1Virtqueue.html#ae47268978d2deb4f22d1b93662710f9b">disable_notify</a>()</div>
<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span> {</div>
<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span> <span class="keywordflow">if</span> (<a class="code hl_define" href="group__l4sys__defines.html#gac76599eba5afa89a12c44176cbfa90cb">L4_LIKELY</a>(<a class="code hl_function" href="classL4virtio_1_1Virtqueue.html#aa242e930433e8705c4ee00afaf58f686">ready</a>()))</div>
<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span> <a class="code hl_variable" href="classL4virtio_1_1Virtqueue.html#a287fe9fe8bef92049b4f0163ed39c405">_used</a>-&gt;flags.no_notify() = 1;</div>
<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span> }</div>
</div>
<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span></div>
<div class="foldopen" id="foldopen00284" data-start="{" data-end="}">
<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"><a class="line" href="classL4virtio_1_1Svr_1_1Virtqueue.html#a2bd42bd424a1661a8eca5bad51239522"> 284</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classL4virtio_1_1Svr_1_1Virtqueue.html#a2bd42bd424a1661a8eca5bad51239522">enable_notify</a>()</div>
<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"> 285</span> {</div>
<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"> 286</span> <span class="keywordflow">if</span> (<a class="code hl_define" href="group__l4sys__defines.html#gac76599eba5afa89a12c44176cbfa90cb">L4_LIKELY</a>(<a class="code hl_function" href="classL4virtio_1_1Virtqueue.html#aa242e930433e8705c4ee00afaf58f686">ready</a>()))</div>
<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"> 287</span> <a class="code hl_variable" href="classL4virtio_1_1Virtqueue.html#a287fe9fe8bef92049b4f0163ed39c405">_used</a>-&gt;flags.no_notify() = 0;</div>
<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span> }</div>
</div>
<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"> 289</span></div>
<div class="foldopen" id="foldopen00298" data-start="{" data-end="}">
<div class="line"><a id="l00298" name="l00298"></a><span class="lineno"><a class="line" href="classL4virtio_1_1Svr_1_1Virtqueue.html#a9c3e815065cc8cf0c8fe2573c047dbb4"> 298</a></span> <a class="code hl_class" href="classL4virtio_1_1Virtqueue_1_1Desc.html">Desc</a> <span class="keyword">const</span> *<a class="code hl_function" href="classL4virtio_1_1Svr_1_1Virtqueue.html#a9c3e815065cc8cf0c8fe2573c047dbb4">desc</a>(<span class="keywordtype">unsigned</span> idx)<span class="keyword"> const</span></div>
<div class="line"><a id="l00299" name="l00299"></a><span class="lineno"> 299</span><span class="keyword"> </span>{ <span class="keywordflow">return</span> <a class="code hl_variable" href="classL4virtio_1_1Virtqueue.html#ab2dc5f70a0c42fa15e91cd8084d29cd0">_desc</a> + idx; }</div>
</div>
<div class="line"><a id="l00300" name="l00300"></a><span class="lineno"> 300</span> </div>
<div class="line"><a id="l00301" name="l00301"></a><span class="lineno"> 301</span>};</div>
</div>
<div class="line"><a id="l00302" name="l00302"></a><span class="lineno"> 302</span></div>
<div class="foldopen" id="foldopen00306" data-start="{" data-end="};">
<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"><a class="line" href="structL4virtio_1_1Svr_1_1Data__buffer.html"> 306</a></span><span class="keyword">struct </span>Data_buffer</div>
<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"> 307</span>{</div>
<div class="line"><a id="l00308" name="l00308"></a><span class="lineno"><a class="line" href="structL4virtio_1_1Svr_1_1Data__buffer.html#ac58e770774164d220267be04fb97b551"> 308</a></span> <span class="keywordtype">char</span> *<a class="code hl_variable" href="structL4virtio_1_1Svr_1_1Data__buffer.html#ac58e770774164d220267be04fb97b551">pos</a>; </div>
<div class="line"><a id="l00309" name="l00309"></a><span class="lineno"><a class="line" href="structL4virtio_1_1Svr_1_1Data__buffer.html#a4c105bf354d6663f323efeb81c74ebc2"> 309</a></span> <a class="code hl_typedef" href="group__l4__basic__types.html#gac1d09f3e382e711b776931f10e6e1e5a">l4_uint32_t</a> <a class="code hl_variable" href="structL4virtio_1_1Svr_1_1Data__buffer.html#a4c105bf354d6663f323efeb81c74ebc2">left</a>; </div>
<div class="line"><a id="l00310" name="l00310"></a><span class="lineno"> 310</span> </div>
<div class="line"><a id="l00311" name="l00311"></a><span class="lineno"> 311</span> Data_buffer() = <span class="keywordflow">default</span>;</div>
<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"> 312</span></div>
<div class="line"><a id="l00322" name="l00322"></a><span class="lineno"> 322</span> <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div>
<div class="foldopen" id="foldopen00323" data-start="{" data-end="}">
<div class="line"><a id="l00323" name="l00323"></a><span class="lineno"><a class="line" href="structL4virtio_1_1Svr_1_1Data__buffer.html#afa24b4543e37fe439ce06ff4d12c4641"> 323</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="structL4virtio_1_1Svr_1_1Data__buffer.html#afa24b4543e37fe439ce06ff4d12c4641">Data_buffer</a>(T *p)</div>
<div class="line"><a id="l00324" name="l00324"></a><span class="lineno"> 324</span> : <a class="code hl_variable" href="structL4virtio_1_1Svr_1_1Data__buffer.html#ac58e770774164d220267be04fb97b551">pos</a>(reinterpret_cast&lt;char *&gt;(p)), <a class="code hl_variable" href="structL4virtio_1_1Svr_1_1Data__buffer.html#a4c105bf354d6663f323efeb81c74ebc2">left</a>(sizeof(T))</div>
<div class="line"><a id="l00325" name="l00325"></a><span class="lineno"> 325</span> {}</div>
</div>
<div class="line"><a id="l00326" name="l00326"></a><span class="lineno"> 326</span></div>
<div class="line"><a id="l00336" name="l00336"></a><span class="lineno"> 336</span> <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div>
<div class="foldopen" id="foldopen00337" data-start="{" data-end="}">
<div class="line"><a id="l00337" name="l00337"></a><span class="lineno"><a class="line" href="structL4virtio_1_1Svr_1_1Data__buffer.html#a0a9baefe7242b43e77a344684c141f38"> 337</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="structL4virtio_1_1Svr_1_1Data__buffer.html#a0a9baefe7242b43e77a344684c141f38">set</a>(T *p)</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> <a class="code hl_variable" href="structL4virtio_1_1Svr_1_1Data__buffer.html#ac58e770774164d220267be04fb97b551">pos</a> = <span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">char</span> *<span class="keyword">&gt;</span>(p);</div>
<div class="line"><a id="l00340" name="l00340"></a><span class="lineno"> 340</span> <a class="code hl_variable" href="structL4virtio_1_1Svr_1_1Data__buffer.html#a4c105bf354d6663f323efeb81c74ebc2">left</a> = <span class="keyword">sizeof</span>(T);</div>
<div class="line"><a id="l00341" name="l00341"></a><span class="lineno"> 341</span> }</div>
</div>
<div class="line"><a id="l00342" name="l00342"></a><span class="lineno"> 342</span></div>
<div class="foldopen" id="foldopen00354" data-start="{" data-end="}">
<div class="line"><a id="l00354" name="l00354"></a><span class="lineno"><a class="line" href="structL4virtio_1_1Svr_1_1Data__buffer.html#a0ae0d4405b3a3ae5aa554b3adece0138"> 354</a></span> <a class="code hl_typedef" href="group__l4__basic__types.html#gac1d09f3e382e711b776931f10e6e1e5a">l4_uint32_t</a> <a class="code hl_function" href="structL4virtio_1_1Svr_1_1Data__buffer.html#a0ae0d4405b3a3ae5aa554b3adece0138">copy_to</a>(Data_buffer *dst, <a class="code hl_typedef" href="group__l4__basic__types.html#gac1d09f3e382e711b776931f10e6e1e5a">l4_uint32_t</a> max = UINT_MAX)</div>
<div class="line"><a id="l00355" name="l00355"></a><span class="lineno"> 355</span> {</div>
<div class="line"><a id="l00356" name="l00356"></a><span class="lineno"> 356</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> bytes = cxx::min(cxx::min(<a class="code hl_variable" href="structL4virtio_1_1Svr_1_1Data__buffer.html#a4c105bf354d6663f323efeb81c74ebc2">left</a>, dst-&gt;<a class="code hl_variable" href="structL4virtio_1_1Svr_1_1Data__buffer.html#a4c105bf354d6663f323efeb81c74ebc2">left</a>), max);</div>
<div class="line"><a id="l00357" name="l00357"></a><span class="lineno"> 357</span> memcpy(dst-&gt;<a class="code hl_variable" href="structL4virtio_1_1Svr_1_1Data__buffer.html#ac58e770774164d220267be04fb97b551">pos</a>, <a class="code hl_variable" href="structL4virtio_1_1Svr_1_1Data__buffer.html#ac58e770774164d220267be04fb97b551">pos</a>, bytes);</div>
<div class="line"><a id="l00358" name="l00358"></a><span class="lineno"> 358</span> <a class="code hl_variable" href="structL4virtio_1_1Svr_1_1Data__buffer.html#a4c105bf354d6663f323efeb81c74ebc2">left</a> -= bytes;</div>
<div class="line"><a id="l00359" name="l00359"></a><span class="lineno"> 359</span> <a class="code hl_variable" href="structL4virtio_1_1Svr_1_1Data__buffer.html#ac58e770774164d220267be04fb97b551">pos</a> += bytes;</div>
<div class="line"><a id="l00360" name="l00360"></a><span class="lineno"> 360</span> dst-&gt;<a class="code hl_variable" href="structL4virtio_1_1Svr_1_1Data__buffer.html#a4c105bf354d6663f323efeb81c74ebc2">left</a> -= bytes;</div>
<div class="line"><a id="l00361" name="l00361"></a><span class="lineno"> 361</span> dst-&gt;<a class="code hl_variable" href="structL4virtio_1_1Svr_1_1Data__buffer.html#ac58e770774164d220267be04fb97b551">pos</a> += bytes;</div>
<div class="line"><a id="l00362" name="l00362"></a><span class="lineno"> 362</span> <span class="keywordflow">return</span> bytes;</div>
<div class="line"><a id="l00363" name="l00363"></a><span class="lineno"> 363</span> }</div>
</div>
<div class="line"><a id="l00364" name="l00364"></a><span class="lineno"> 364</span></div>
<div class="foldopen" id="foldopen00375" data-start="{" data-end="}">
<div class="line"><a id="l00375" name="l00375"></a><span class="lineno"><a class="line" href="structL4virtio_1_1Svr_1_1Data__buffer.html#aecd5fb1a25657f4a7b3af2362a74433c"> 375</a></span> <a class="code hl_typedef" href="group__l4__basic__types.html#gac1d09f3e382e711b776931f10e6e1e5a">l4_uint32_t</a> <a class="code hl_function" href="structL4virtio_1_1Svr_1_1Data__buffer.html#aecd5fb1a25657f4a7b3af2362a74433c">skip</a>(<a class="code hl_typedef" href="group__l4__basic__types.html#gac1d09f3e382e711b776931f10e6e1e5a">l4_uint32_t</a> bytes)</div>
<div class="line"><a id="l00376" name="l00376"></a><span class="lineno"> 376</span> {</div>
<div class="line"><a id="l00377" name="l00377"></a><span class="lineno"> 377</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> b = cxx::min(<a class="code hl_variable" href="structL4virtio_1_1Svr_1_1Data__buffer.html#a4c105bf354d6663f323efeb81c74ebc2">left</a>, bytes);</div>
<div class="line"><a id="l00378" name="l00378"></a><span class="lineno"> 378</span> <a class="code hl_variable" href="structL4virtio_1_1Svr_1_1Data__buffer.html#a4c105bf354d6663f323efeb81c74ebc2">left</a> -= b;</div>
<div class="line"><a id="l00379" name="l00379"></a><span class="lineno"> 379</span> <a class="code hl_variable" href="structL4virtio_1_1Svr_1_1Data__buffer.html#ac58e770774164d220267be04fb97b551">pos</a> += b;</div>
<div class="line"><a id="l00380" name="l00380"></a><span class="lineno"> 380</span> <span class="keywordflow">return</span> b;</div>
<div class="line"><a id="l00381" name="l00381"></a><span class="lineno"> 381</span> }</div>
</div>
<div class="line"><a id="l00382" name="l00382"></a><span class="lineno"> 382</span></div>
<div class="foldopen" id="foldopen00388" data-start="{" data-end="}">
<div class="line"><a id="l00388" name="l00388"></a><span class="lineno"><a class="line" href="structL4virtio_1_1Svr_1_1Data__buffer.html#af362e9d1f295b082d20a032c4a8db603"> 388</a></span> <span class="keywordtype">bool</span> <a class="code hl_function" href="structL4virtio_1_1Svr_1_1Data__buffer.html#af362e9d1f295b082d20a032c4a8db603">done</a>()<span class="keyword"> const</span></div>
<div class="line"><a id="l00389" name="l00389"></a><span class="lineno"> 389</span><span class="keyword"> </span>{ <span class="keywordflow">return</span> <a class="code hl_variable" href="structL4virtio_1_1Svr_1_1Data__buffer.html#a4c105bf354d6663f323efeb81c74ebc2">left</a> == 0; }</div>
</div>
<div class="line"><a id="l00390" name="l00390"></a><span class="lineno"> 390</span>};</div>
</div>
<div class="line"><a id="l00391" name="l00391"></a><span class="lineno"> 391</span> </div>
<div class="line"><a id="l00392" name="l00392"></a><span class="lineno"> 392</span><span class="keyword">class </span>Request_processor;</div>
<div class="line"><a id="l00393" name="l00393"></a><span class="lineno"> 393</span></div>
<div class="foldopen" id="foldopen00397" data-start="{" data-end="};">
<div class="line"><a id="l00397" name="l00397"></a><span class="lineno"><a class="line" href="structL4virtio_1_1Svr_1_1Bad__descriptor.html"> 397</a></span><span class="keyword">struct </span><a class="code hl_function" href="structL4virtio_1_1Svr_1_1Bad__descriptor.html#ae82011a511ea644185bceea4956910f3">Bad_descriptor</a></div>
<div class="line"><a id="l00398" name="l00398"></a><span class="lineno"> 398</span>{</div>
<div class="foldopen" id="foldopen00400" data-start="{" data-end="};">
<div class="line"><a id="l00400" name="l00400"></a><span class="lineno"><a class="line" href="structL4virtio_1_1Svr_1_1Bad__descriptor.html#a6d0361d240b52210a4a6bcb5570a6a25"> 400</a></span> <span class="keyword">enum</span> <a class="code hl_enumeration" href="structL4virtio_1_1Svr_1_1Bad__descriptor.html#a6d0361d240b52210a4a6bcb5570a6a25">Error</a></div>
<div class="line"><a id="l00401" name="l00401"></a><span class="lineno"> 401</span> {</div>
<div class="line"><a id="l00402" name="l00402"></a><span class="lineno"><a class="line" href="structL4virtio_1_1Svr_1_1Bad__descriptor.html#a6d0361d240b52210a4a6bcb5570a6a25a0eec6f7ec63c549bd35c05e205d33ecd"> 402</a></span> <a class="code hl_enumvalue" href="structL4virtio_1_1Svr_1_1Bad__descriptor.html#a6d0361d240b52210a4a6bcb5570a6a25a0eec6f7ec63c549bd35c05e205d33ecd">Bad_address</a>, </div>
<div class="line"><a id="l00403" name="l00403"></a><span class="lineno"><a class="line" href="structL4virtio_1_1Svr_1_1Bad__descriptor.html#a6d0361d240b52210a4a6bcb5570a6a25a0ae39f2d3884ab0f4a21a9d157a79db0"> 403</a></span> <a class="code hl_enumvalue" href="structL4virtio_1_1Svr_1_1Bad__descriptor.html#a6d0361d240b52210a4a6bcb5570a6a25a0ae39f2d3884ab0f4a21a9d157a79db0">Bad_rights</a>, </div>
<div class="line"><a id="l00404" name="l00404"></a><span class="lineno"><a class="line" href="structL4virtio_1_1Svr_1_1Bad__descriptor.html#a6d0361d240b52210a4a6bcb5570a6a25a2009f7ae71b65094a237c0437f86eda1"> 404</a></span> <a class="code hl_enumvalue" href="structL4virtio_1_1Svr_1_1Bad__descriptor.html#a6d0361d240b52210a4a6bcb5570a6a25a2009f7ae71b65094a237c0437f86eda1">Bad_flags</a>, </div>
<div class="line"><a id="l00405" name="l00405"></a><span class="lineno"><a class="line" href="structL4virtio_1_1Svr_1_1Bad__descriptor.html#a6d0361d240b52210a4a6bcb5570a6a25abfe460aa0ba29527c4fde6a63224832a"> 405</a></span> <a class="code hl_enumvalue" href="structL4virtio_1_1Svr_1_1Bad__descriptor.html#a6d0361d240b52210a4a6bcb5570a6a25abfe460aa0ba29527c4fde6a63224832a">Bad_next</a>, </div>
<div class="line"><a id="l00406" name="l00406"></a><span class="lineno"><a class="line" href="structL4virtio_1_1Svr_1_1Bad__descriptor.html#a6d0361d240b52210a4a6bcb5570a6a25ad151656f5a2cc0c2ec14792310244f5b"> 406</a></span> <a class="code hl_enumvalue" href="structL4virtio_1_1Svr_1_1Bad__descriptor.html#a6d0361d240b52210a4a6bcb5570a6a25ad151656f5a2cc0c2ec14792310244f5b">Bad_size</a> </div>
<div class="line"><a id="l00407" name="l00407"></a><span class="lineno"> 407</span> };</div>
</div>
<div class="line"><a id="l00408" name="l00408"></a><span class="lineno"> 408</span></div>
<div class="line"><a id="l00410" name="l00410"></a><span class="lineno"><a class="line" href="structL4virtio_1_1Svr_1_1Bad__descriptor.html#a3150820d3477fd80ee02180e4281f5ff"> 410</a></span> <a class="code hl_class" href="classL4virtio_1_1Svr_1_1Request__processor.html">Request_processor</a> <span class="keyword">const</span> *<a class="code hl_variable" href="structL4virtio_1_1Svr_1_1Bad__descriptor.html#a3150820d3477fd80ee02180e4281f5ff">proc</a>;</div>
<div class="line"><a id="l00411" name="l00411"></a><span class="lineno"> 411</span> </div>
<div class="line"><a id="l00412" name="l00412"></a><span class="lineno"> 412</span> <span class="comment">// The error code</span></div>
<div class="line"><a id="l00413" name="l00413"></a><span class="lineno"> 413</span> <a class="code hl_enumeration" href="structL4virtio_1_1Svr_1_1Bad__descriptor.html#a6d0361d240b52210a4a6bcb5570a6a25">Error</a> error;</div>
<div class="line"><a id="l00414" name="l00414"></a><span class="lineno"> 414</span></div>
<div class="foldopen" id="foldopen00421" data-start="{" data-end="}">
<div class="line"><a id="l00421" name="l00421"></a><span class="lineno"><a class="line" href="structL4virtio_1_1Svr_1_1Bad__descriptor.html#ae82011a511ea644185bceea4956910f3"> 421</a></span> <a class="code hl_function" href="structL4virtio_1_1Svr_1_1Bad__descriptor.html#ae82011a511ea644185bceea4956910f3">Bad_descriptor</a>(<a class="code hl_class" href="classL4virtio_1_1Svr_1_1Request__processor.html">Request_processor</a> <span class="keyword">const</span> *<a class="code hl_variable" href="structL4virtio_1_1Svr_1_1Bad__descriptor.html#a3150820d3477fd80ee02180e4281f5ff">proc</a>, <a class="code hl_enumeration" href="structL4virtio_1_1Svr_1_1Bad__descriptor.html#a6d0361d240b52210a4a6bcb5570a6a25">Error</a> e)</div>
<div class="line"><a id="l00422" name="l00422"></a><span class="lineno"> 422</span> : <a class="code hl_variable" href="structL4virtio_1_1Svr_1_1Bad__descriptor.html#a3150820d3477fd80ee02180e4281f5ff">proc</a>(<a class="code hl_variable" href="structL4virtio_1_1Svr_1_1Bad__descriptor.html#a3150820d3477fd80ee02180e4281f5ff">proc</a>), error(e)</div>
<div class="line"><a id="l00423" name="l00423"></a><span class="lineno"> 423</span> {}</div>
</div>
<div class="line"><a id="l00424" name="l00424"></a><span class="lineno"> 424</span></div>
<div class="foldopen" id="foldopen00430" data-start="{" data-end="}">
<div class="line"><a id="l00430" name="l00430"></a><span class="lineno"><a class="line" href="structL4virtio_1_1Svr_1_1Bad__descriptor.html#ae037d0b9592c69ffd63766e51b7e57e1"> 430</a></span> <span class="keywordtype">char</span> <span class="keyword">const</span> *<a class="code hl_function" href="structL4virtio_1_1Svr_1_1Bad__descriptor.html#ae037d0b9592c69ffd63766e51b7e57e1">message</a>()<span class="keyword"> const</span></div>
<div class="line"><a id="l00431" name="l00431"></a><span class="lineno"> 431</span><span class="keyword"> </span>{</div>
<div class="line"><a id="l00432" name="l00432"></a><span class="lineno"> 432</span> <span class="keyword">static</span> <span class="keywordtype">char</span> <span class="keyword">const</span> *<span class="keyword">const</span> err[] =</div>
<div class="line"><a id="l00433" name="l00433"></a><span class="lineno"> 433</span> {</div>
<div class="line"><a id="l00434" name="l00434"></a><span class="lineno"> 434</span> [<a class="code hl_enumvalue" href="structL4virtio_1_1Svr_1_1Bad__descriptor.html#a6d0361d240b52210a4a6bcb5570a6a25a0eec6f7ec63c549bd35c05e205d33ecd">Bad_address</a>] = <span class="stringliteral">&quot;Descriptor address cannot be translated&quot;</span>,</div>
<div class="line"><a id="l00435" name="l00435"></a><span class="lineno"> 435</span> [<a class="code hl_enumvalue" href="structL4virtio_1_1Svr_1_1Bad__descriptor.html#a6d0361d240b52210a4a6bcb5570a6a25a0ae39f2d3884ab0f4a21a9d157a79db0">Bad_rights</a>] = <span class="stringliteral">&quot;Insufficient memory access rights&quot;</span>,</div>
<div class="line"><a id="l00436" name="l00436"></a><span class="lineno"> 436</span> [<a class="code hl_enumvalue" href="structL4virtio_1_1Svr_1_1Bad__descriptor.html#a6d0361d240b52210a4a6bcb5570a6a25a2009f7ae71b65094a237c0437f86eda1">Bad_flags</a>] = <span class="stringliteral">&quot;Invalid descriptor flags&quot;</span>,</div>
<div class="line"><a id="l00437" name="l00437"></a><span class="lineno"> 437</span> [<a class="code hl_enumvalue" href="structL4virtio_1_1Svr_1_1Bad__descriptor.html#a6d0361d240b52210a4a6bcb5570a6a25abfe460aa0ba29527c4fde6a63224832a">Bad_next</a>] = <span class="stringliteral">&quot;The descriptor&#39;s `next` index is invalid&quot;</span>,</div>
<div class="line"><a id="l00438" name="l00438"></a><span class="lineno"> 438</span> [<a class="code hl_enumvalue" href="structL4virtio_1_1Svr_1_1Bad__descriptor.html#a6d0361d240b52210a4a6bcb5570a6a25ad151656f5a2cc0c2ec14792310244f5b">Bad_size</a>] = <span class="stringliteral">&quot;Invalid size of the memory block&quot;</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="line"><a id="l00441" name="l00441"></a><span class="lineno"> 441</span> <span class="keywordflow">if</span> (error &gt;= (<span class="keyword">sizeof</span>(err) / <span class="keyword">sizeof</span>(err[0])) || !err[error])</div>
<div class="line"><a id="l00442" name="l00442"></a><span class="lineno"> 442</span> <span class="keywordflow">return</span> <span class="stringliteral">&quot;Unknown error&quot;</span>;</div>
<div class="line"><a id="l00443" name="l00443"></a><span class="lineno"> 443</span> </div>
<div class="line"><a id="l00444" name="l00444"></a><span class="lineno"> 444</span> <span class="keywordflow">return</span> err[error];</div>
<div class="line"><a id="l00445" name="l00445"></a><span class="lineno"> 445</span> }</div>
</div>
<div class="line"><a id="l00446" name="l00446"></a><span class="lineno"> 446</span>};</div>
</div>
<div class="line"><a id="l00447" name="l00447"></a><span class="lineno"> 447</span> </div>
<div class="line"><a id="l00448" name="l00448"></a><span class="lineno"> 448</span></div>
<div class="foldopen" id="foldopen00472" data-start="{" data-end="};">
<div class="line"><a id="l00472" name="l00472"></a><span class="lineno"><a class="line" href="classL4virtio_1_1Svr_1_1Request__processor.html"> 472</a></span><span class="keyword">class </span><a class="code hl_class" href="classL4virtio_1_1Svr_1_1Request__processor.html">Request_processor</a></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="keyword">private</span>:</div>
<div class="line"><a id="l00476" name="l00476"></a><span class="lineno"> 476</span> <a class="code hl_class" href="classL4virtio_1_1Virtqueue_1_1Desc.html">Virtqueue::Desc</a> <span class="keyword">const</span> *_table;</div>
<div class="line"><a id="l00477" name="l00477"></a><span class="lineno"> 477</span></div>
<div class="line"><a id="l00479" name="l00479"></a><span class="lineno"> 479</span> <a class="code hl_class" href="classL4virtio_1_1Virtqueue_1_1Desc.html">Virtqueue::Desc</a> _current;</div>
<div class="line"><a id="l00480" name="l00480"></a><span class="lineno"> 480</span></div>
<div class="line"><a id="l00482" name="l00482"></a><span class="lineno"> 482</span> <a class="code hl_typedef" href="group__l4__basic__types.html#gae8d67914f723bf843df6f311ad2619a2">l4_uint16_t</a> _num;</div>
<div class="line"><a id="l00483" name="l00483"></a><span class="lineno"> 483</span> </div>
<div class="line"><a id="l00484" name="l00484"></a><span class="lineno"> 484</span><span class="keyword">public</span>:</div>
<div class="line"><a id="l00500" name="l00500"></a><span class="lineno"> 500</span> <span class="keyword">template</span>&lt;<span class="keyword">typename</span> DESC_MAN, <span class="keyword">typename</span> ...ARGS&gt;</div>
<div class="foldopen" id="foldopen00501" data-start="{" data-end="}">
<div class="line"><a id="l00501" name="l00501"></a><span class="lineno"><a class="line" href="classL4virtio_1_1Svr_1_1Request__processor.html#abcf6a6b8bf80e0d73d45b5eb9e817abd"> 501</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classL4virtio_1_1Svr_1_1Request__processor.html#abcf6a6b8bf80e0d73d45b5eb9e817abd">start</a>(DESC_MAN *dm, <a class="code hl_class" href="classL4virtio_1_1Svr_1_1Virtqueue.html">Virtqueue</a> *ring, <a class="code hl_class" href="classL4virtio_1_1Svr_1_1Virtqueue_1_1Head__desc.html">Virtqueue::Head_desc</a> <span class="keyword">const</span> &amp;request, ARGS... args)</div>
<div class="line"><a id="l00502" name="l00502"></a><span class="lineno"> 502</span> {</div>
<div class="line"><a id="l00503" name="l00503"></a><span class="lineno"> 503</span> _current = <a class="code hl_function" href="namespacecxx.html#ab148b2c460eb31462ced9a1eafd9667c">cxx::access_once</a>(request.<a class="code hl_function" href="classL4virtio_1_1Svr_1_1Virtqueue_1_1Head__desc.html#a98a4cc67f88052754fa54451b3d68e2d">desc</a>());</div>
<div class="line"><a id="l00504" name="l00504"></a><span class="lineno"> 504</span> </div>
<div class="line"><a id="l00505" name="l00505"></a><span class="lineno"> 505</span> <span class="keywordflow">if</span> (_current.flags.indirect())</div>
<div class="line"><a id="l00506" name="l00506"></a><span class="lineno"> 506</span> {</div>
<div class="line"><a id="l00507" name="l00507"></a><span class="lineno"> 507</span> dm-&gt;load_desc(_current, <span class="keyword">this</span>, &amp;_table);</div>
<div class="line"><a id="l00508" name="l00508"></a><span class="lineno"> 508</span> _num = _current.len / <span class="keyword">sizeof</span>(<a class="code hl_class" href="classL4virtio_1_1Virtqueue_1_1Desc.html">Virtqueue::Desc</a>);</div>
<div class="line"><a id="l00509" name="l00509"></a><span class="lineno"> 509</span> <span class="keywordflow">if</span> (<a class="code hl_define" href="group__l4sys__defines.html#ga3df4200910f2664b97397c23693beeb0">L4_UNLIKELY</a>(!_num))</div>
<div class="line"><a id="l00510" name="l00510"></a><span class="lineno"> 510</span> <span class="keywordflow">throw</span> <a class="code hl_struct" href="structL4virtio_1_1Svr_1_1Bad__descriptor.html">Bad_descriptor</a>(<span class="keyword">this</span>, <a class="code hl_enumvalue" href="structL4virtio_1_1Svr_1_1Bad__descriptor.html#a6d0361d240b52210a4a6bcb5570a6a25ad151656f5a2cc0c2ec14792310244f5b">Bad_descriptor::Bad_size</a>);</div>
<div class="line"><a id="l00511" name="l00511"></a><span class="lineno"> 511</span> </div>
<div class="line"><a id="l00512" name="l00512"></a><span class="lineno"> 512</span> _current = <a class="code hl_function" href="namespacecxx.html#ab148b2c460eb31462ced9a1eafd9667c">cxx::access_once</a>(_table);</div>
<div class="line"><a id="l00513" name="l00513"></a><span class="lineno"> 513</span> }</div>
<div class="line"><a id="l00514" name="l00514"></a><span class="lineno"> 514</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00515" name="l00515"></a><span class="lineno"> 515</span> {</div>
<div class="line"><a id="l00516" name="l00516"></a><span class="lineno"> 516</span> _table = ring-&gt;<a class="code hl_function" href="classL4virtio_1_1Svr_1_1Virtqueue.html#a9c3e815065cc8cf0c8fe2573c047dbb4">desc</a>(0);</div>
<div class="line"><a id="l00517" name="l00517"></a><span class="lineno"> 517</span> _num = ring-&gt;<a class="code hl_function" href="classL4virtio_1_1Virtqueue.html#af61e3e4e436b93f37f22243a1c0ffe0e">num</a>();</div>
<div class="line"><a id="l00518" name="l00518"></a><span class="lineno"> 518</span> }</div>
<div class="line"><a id="l00519" name="l00519"></a><span class="lineno"> 519</span> </div>
<div class="line"><a id="l00520" name="l00520"></a><span class="lineno"> 520</span> dm-&gt;load_desc(_current, <span class="keyword">this</span>, cxx::forward&lt;ARGS&gt;(args)...);</div>
<div class="line"><a id="l00521" name="l00521"></a><span class="lineno"> 521</span> }</div>
</div>
<div class="line"><a id="l00522" name="l00522"></a><span class="lineno"> 522</span></div>
<div class="line"><a id="l00533" name="l00533"></a><span class="lineno"> 533</span> <span class="keyword">template</span>&lt;<span class="keyword">typename</span> DESC_MAN, <span class="keyword">typename</span> ...ARGS&gt;</div>
<div class="foldopen" id="foldopen00534" data-start="{" data-end="}">
<div class="line"><a id="l00534" name="l00534"></a><span class="lineno"><a class="line" href="classL4virtio_1_1Svr_1_1Request__processor.html#a76dec7903350c50fe5ce0b8f7129f9bd"> 534</a></span> Virtqueue::Request <span class="keyword">const</span> &amp;<a class="code hl_function" href="classL4virtio_1_1Svr_1_1Request__processor.html#a76dec7903350c50fe5ce0b8f7129f9bd">start</a>(DESC_MAN *dm, Virtqueue::Request <span class="keyword">const</span> &amp;request, ARGS... args)</div>
<div class="line"><a id="l00535" name="l00535"></a><span class="lineno"> 535</span> {</div>
<div class="line"><a id="l00536" name="l00536"></a><span class="lineno"> 536</span> <a class="code hl_function" href="classL4virtio_1_1Svr_1_1Request__processor.html#abcf6a6b8bf80e0d73d45b5eb9e817abd">start</a>(dm, request.ring, request, cxx::forward&lt;ARGS&gt;(args)...);</div>
<div class="line"><a id="l00537" name="l00537"></a><span class="lineno"> 537</span> <span class="keywordflow">return</span> request;</div>
<div class="line"><a id="l00538" name="l00538"></a><span class="lineno"> 538</span> }</div>
</div>
<div class="line"><a id="l00539" name="l00539"></a><span class="lineno"> 539</span></div>
<div class="foldopen" id="foldopen00545" data-start="{" data-end="}">
<div class="line"><a id="l00545" name="l00545"></a><span class="lineno"><a class="line" href="classL4virtio_1_1Svr_1_1Request__processor.html#a5812ffd879efda9ed45d3248b21eb0d3"> 545</a></span> <a class="code hl_struct" href="structL4virtio_1_1Virtqueue_1_1Desc_1_1Flags.html">Virtqueue::Desc::Flags</a> <a class="code hl_function" href="classL4virtio_1_1Svr_1_1Request__processor.html#a5812ffd879efda9ed45d3248b21eb0d3">current_flags</a>()<span class="keyword"> const</span></div>
<div class="line"><a id="l00546" name="l00546"></a><span class="lineno"> 546</span><span class="keyword"> </span>{ <span class="keywordflow">return</span> _current.flags; }</div>
</div>
<div class="line"><a id="l00547" name="l00547"></a><span class="lineno"> 547</span></div>
<div class="foldopen" id="foldopen00553" data-start="{" data-end="}">
<div class="line"><a id="l00553" name="l00553"></a><span class="lineno"><a class="line" href="classL4virtio_1_1Svr_1_1Request__processor.html#a9038c26764d07c867d6e70cd6e04157d"> 553</a></span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classL4virtio_1_1Svr_1_1Request__processor.html#a9038c26764d07c867d6e70cd6e04157d">has_more</a>()<span class="keyword"> const</span></div>
<div class="line"><a id="l00554" name="l00554"></a><span class="lineno"> 554</span><span class="keyword"> </span>{ <span class="keywordflow">return</span> _current.flags.next(); }</div>
</div>
<div class="line"><a id="l00555" name="l00555"></a><span class="lineno"> 555</span></div>
<div class="line"><a id="l00569" name="l00569"></a><span class="lineno"> 569</span> <span class="keyword">template</span>&lt;<span class="keyword">typename</span> DESC_MAN, <span class="keyword">typename</span> ...ARGS&gt;</div>
<div class="foldopen" id="foldopen00570" data-start="{" data-end="}">
<div class="line"><a id="l00570" name="l00570"></a><span class="lineno"><a class="line" href="classL4virtio_1_1Svr_1_1Request__processor.html#a0bb9280caa7b899486ccd83bcf0588cd"> 570</a></span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classL4virtio_1_1Svr_1_1Request__processor.html#a0bb9280caa7b899486ccd83bcf0588cd">next</a>(DESC_MAN *dm, ARGS... args)</div>
<div class="line"><a id="l00571" name="l00571"></a><span class="lineno"> 571</span> {</div>
<div class="line"><a id="l00572" name="l00572"></a><span class="lineno"> 572</span> <span class="keywordflow">if</span> (!_current.flags.next())</div>
<div class="line"><a id="l00573" name="l00573"></a><span class="lineno"> 573</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</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="keywordflow">if</span> (<a class="code hl_define" href="group__l4sys__defines.html#ga3df4200910f2664b97397c23693beeb0">L4_UNLIKELY</a>(_current.next &gt;= _num))</div>
<div class="line"><a id="l00576" name="l00576"></a><span class="lineno"> 576</span> <span class="keywordflow">throw</span> <a class="code hl_struct" href="structL4virtio_1_1Svr_1_1Bad__descriptor.html">Bad_descriptor</a>(<span class="keyword">this</span>, <a class="code hl_enumvalue" href="structL4virtio_1_1Svr_1_1Bad__descriptor.html#a6d0361d240b52210a4a6bcb5570a6a25abfe460aa0ba29527c4fde6a63224832a">Bad_descriptor::Bad_next</a>);</div>
<div class="line"><a id="l00577" name="l00577"></a><span class="lineno"> 577</span> </div>
<div class="line"><a id="l00578" name="l00578"></a><span class="lineno"> 578</span> _current = <a class="code hl_function" href="namespacecxx.html#ab148b2c460eb31462ced9a1eafd9667c">cxx::access_once</a>(_table + _current.next);</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="keywordflow">if</span> (0) <span class="comment">// we ignore this for performance reasons</span></div>
<div class="line"><a id="l00581" name="l00581"></a><span class="lineno"> 581</span> <span class="keywordflow">if</span> (<a class="code hl_define" href="group__l4sys__defines.html#ga3df4200910f2664b97397c23693beeb0">L4_UNLIKELY</a>(_current.flags.indirect()))</div>
<div class="line"><a id="l00582" name="l00582"></a><span class="lineno"> 582</span> <span class="keywordflow">throw</span> <a class="code hl_struct" href="structL4virtio_1_1Svr_1_1Bad__descriptor.html">Bad_descriptor</a>(<span class="keyword">this</span>, <a class="code hl_enumvalue" href="structL4virtio_1_1Svr_1_1Bad__descriptor.html#a6d0361d240b52210a4a6bcb5570a6a25a2009f7ae71b65094a237c0437f86eda1">Bad_descriptor::Bad_flags</a>);</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="comment">// must throw an exception in case of a bad descriptor</span></div>
<div class="line"><a id="l00585" name="l00585"></a><span class="lineno"> 585</span> dm-&gt;load_desc(_current, <span class="keyword">this</span>, cxx::forward&lt;ARGS&gt;(args)...);</div>
<div class="line"><a id="l00586" name="l00586"></a><span class="lineno"> 586</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a id="l00587" name="l00587"></a><span class="lineno"> 587</span> }</div>
</div>
<div class="line"><a id="l00588" name="l00588"></a><span class="lineno"> 588</span>};</div>
</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>}</div>
<div class="line"><a id="l00591" name="l00591"></a><span class="lineno"> 591</span>}</div>
<div class="ttc" id="aclassL4virtio_1_1Svr_1_1Request__processor_html"><div class="ttname"><a href="classL4virtio_1_1Svr_1_1Request__processor.html">L4virtio::Svr::Request_processor</a></div><div class="ttdoc">Encapsulate the state for processing a VIRTIO request.</div><div class="ttdef"><b>Definition</b> <a href="#l00472">virtio:473</a></div></div>
<div class="ttc" id="aclassL4virtio_1_1Svr_1_1Request__processor_html_a0bb9280caa7b899486ccd83bcf0588cd"><div class="ttname"><a href="classL4virtio_1_1Svr_1_1Request__processor.html#a0bb9280caa7b899486ccd83bcf0588cd">L4virtio::Svr::Request_processor::next</a></div><div class="ttdeci">bool next(DESC_MAN *dm, ARGS... args)</div><div class="ttdoc">Switch to the next descriptor in a descriptor chain.</div><div class="ttdef"><b>Definition</b> <a href="#l00570">virtio:570</a></div></div>
<div class="ttc" id="aclassL4virtio_1_1Svr_1_1Request__processor_html_a5812ffd879efda9ed45d3248b21eb0d3"><div class="ttname"><a href="classL4virtio_1_1Svr_1_1Request__processor.html#a5812ffd879efda9ed45d3248b21eb0d3">L4virtio::Svr::Request_processor::current_flags</a></div><div class="ttdeci">Virtqueue::Desc::Flags current_flags() const</div><div class="ttdoc">Get the flags of the currently processed descriptor.</div><div class="ttdef"><b>Definition</b> <a href="#l00545">virtio:545</a></div></div>
<div class="ttc" id="aclassL4virtio_1_1Svr_1_1Request__processor_html_a76dec7903350c50fe5ce0b8f7129f9bd"><div class="ttname"><a href="classL4virtio_1_1Svr_1_1Request__processor.html#a76dec7903350c50fe5ce0b8f7129f9bd">L4virtio::Svr::Request_processor::start</a></div><div class="ttdeci">Virtqueue::Request const &amp; start(DESC_MAN *dm, Virtqueue::Request const &amp;request, ARGS... args)</div><div class="ttdoc">Start processing a new request.</div><div class="ttdef"><b>Definition</b> <a href="#l00534">virtio:534</a></div></div>
<div class="ttc" id="aclassL4virtio_1_1Svr_1_1Request__processor_html_a9038c26764d07c867d6e70cd6e04157d"><div class="ttname"><a href="classL4virtio_1_1Svr_1_1Request__processor.html#a9038c26764d07c867d6e70cd6e04157d">L4virtio::Svr::Request_processor::has_more</a></div><div class="ttdeci">bool has_more() const</div><div class="ttdoc">Are there more chained descriptors?</div><div class="ttdef"><b>Definition</b> <a href="#l00553">virtio:553</a></div></div>
<div class="ttc" id="aclassL4virtio_1_1Svr_1_1Request__processor_html_abcf6a6b8bf80e0d73d45b5eb9e817abd"><div class="ttname"><a href="classL4virtio_1_1Svr_1_1Request__processor.html#abcf6a6b8bf80e0d73d45b5eb9e817abd">L4virtio::Svr::Request_processor::start</a></div><div class="ttdeci">void start(DESC_MAN *dm, Virtqueue *ring, Virtqueue::Head_desc const &amp;request, ARGS... args)</div><div class="ttdoc">Start processing a new request.</div><div class="ttdef"><b>Definition</b> <a href="#l00501">virtio:501</a></div></div>
<div class="ttc" id="aclassL4virtio_1_1Svr_1_1Virtqueue_1_1Head__desc_html"><div class="ttname"><a href="classL4virtio_1_1Svr_1_1Virtqueue_1_1Head__desc.html">L4virtio::Svr::Virtqueue::Head_desc</a></div><div class="ttdoc">VIRTIO request, essentially a descriptor from the available ring.</div><div class="ttdef"><b>Definition</b> <a href="#l00093">virtio:94</a></div></div>
<div class="ttc" id="aclassL4virtio_1_1Svr_1_1Virtqueue_1_1Head__desc_html_a742c4804e90c696a760b40f1da94bdb0"><div class="ttname"><a href="classL4virtio_1_1Svr_1_1Virtqueue_1_1Head__desc.html#a742c4804e90c696a760b40f1da94bdb0">L4virtio::Svr::Virtqueue::Head_desc::valid</a></div><div class="ttdeci">bool valid() const</div><div class="ttdef"><b>Definition</b> <a href="#l00105">virtio:105</a></div></div>
<div class="ttc" id="aclassL4virtio_1_1Svr_1_1Virtqueue_1_1Head__desc_html_a98a4cc67f88052754fa54451b3d68e2d"><div class="ttname"><a href="classL4virtio_1_1Svr_1_1Virtqueue_1_1Head__desc.html#a98a4cc67f88052754fa54451b3d68e2d">L4virtio::Svr::Virtqueue::Head_desc::desc</a></div><div class="ttdeci">Desc const * desc() const</div><div class="ttdef"><b>Definition</b> <a href="#l00112">virtio:112</a></div></div>
<div class="ttc" id="aclassL4virtio_1_1Svr_1_1Virtqueue_1_1Head__desc_html_a9b1a40d9d9fa011af9aa0b6f01757734"><div class="ttname"><a href="classL4virtio_1_1Svr_1_1Virtqueue_1_1Head__desc.html#a9b1a40d9d9fa011af9aa0b6f01757734">L4virtio::Svr::Virtqueue::Head_desc::Head_desc</a></div><div class="ttdeci">Head_desc()</div><div class="ttdoc">Make invalid (NULL) request.</div><div class="ttdef"><b>Definition</b> <a href="#l00102">virtio:102</a></div></div>
<div class="ttc" id="aclassL4virtio_1_1Svr_1_1Virtqueue_html"><div class="ttname"><a href="classL4virtio_1_1Svr_1_1Virtqueue.html">L4virtio::Svr::Virtqueue</a></div><div class="ttdoc">Virtqueue implementation for the device.</div><div class="ttdef"><b>Definition</b> <a href="#l00087">virtio:88</a></div></div>
<div class="ttc" id="aclassL4virtio_1_1Svr_1_1Virtqueue_html_a17bf1779983cb1471fd3c0ca68641922"><div class="ttname"><a href="classL4virtio_1_1Svr_1_1Virtqueue.html#a17bf1779983cb1471fd3c0ca68641922">L4virtio::Svr::Virtqueue::desc_avail</a></div><div class="ttdeci">bool desc_avail() const</div><div class="ttdoc">Test for available descriptors.</div><div class="ttdef"><b>Definition</b> <a href="#l00175">virtio:175</a></div></div>
<div class="ttc" id="aclassL4virtio_1_1Svr_1_1Virtqueue_html_a2bd42bd424a1661a8eca5bad51239522"><div class="ttname"><a href="classL4virtio_1_1Svr_1_1Virtqueue.html#a2bd42bd424a1661a8eca5bad51239522">L4virtio::Svr::Virtqueue::enable_notify</a></div><div class="ttdeci">void enable_notify()</div><div class="ttdoc">Clear the &#39;no notify&#39; flag for this queue.</div><div class="ttdef"><b>Definition</b> <a href="#l00284">virtio:284</a></div></div>
<div class="ttc" id="aclassL4virtio_1_1Svr_1_1Virtqueue_html_a57a3a66f78e7f372792ef7f47fde0297"><div class="ttname"><a href="classL4virtio_1_1Svr_1_1Virtqueue.html#a57a3a66f78e7f372792ef7f47fde0297">L4virtio::Svr::Virtqueue::consumed</a></div><div class="ttdeci">void consumed(ITER const &amp;begin, ITER const &amp;end)</div><div class="ttdoc">Put multiple descriptors into the used ring.</div><div class="ttdef"><b>Definition</b> <a href="#l00213">virtio:213</a></div></div>
<div class="ttc" id="aclassL4virtio_1_1Svr_1_1Virtqueue_html_a9c3e815065cc8cf0c8fe2573c047dbb4"><div class="ttname"><a href="classL4virtio_1_1Svr_1_1Virtqueue.html#a9c3e815065cc8cf0c8fe2573c047dbb4">L4virtio::Svr::Virtqueue::desc</a></div><div class="ttdeci">Desc const * desc(unsigned idx) const</div><div class="ttdoc">Get a descriptor from the descriptor list.</div><div class="ttdef"><b>Definition</b> <a href="#l00298">virtio:298</a></div></div>
<div class="ttc" id="aclassL4virtio_1_1Svr_1_1Virtqueue_html_aa7e9493f7fe5bfa9ebaa5d80be8179cf"><div class="ttname"><a href="classL4virtio_1_1Svr_1_1Virtqueue.html#aa7e9493f7fe5bfa9ebaa5d80be8179cf">L4virtio::Svr::Virtqueue::next_avail</a></div><div class="ttdeci">Request next_avail()</div><div class="ttdoc">Get the next available descriptor from the available ring.</div><div class="ttdef"><b>Definition</b> <a href="#l00136">virtio:136</a></div></div>
<div class="ttc" id="aclassL4virtio_1_1Svr_1_1Virtqueue_html_ad7102baa13cc3341a1b559f849f57651"><div class="ttname"><a href="classL4virtio_1_1Svr_1_1Virtqueue.html#ad7102baa13cc3341a1b559f849f57651">L4virtio::Svr::Virtqueue::finish</a></div><div class="ttdeci">void finish(ITER const &amp;begin, ITER const &amp;end, QUEUE_OBSERVER *o)</div><div class="ttdoc">Add a range of descriptors to the used ring, and notify an observer once.</div><div class="ttdef"><b>Definition</b> <a href="#l00262">virtio:262</a></div></div>
<div class="ttc" id="aclassL4virtio_1_1Svr_1_1Virtqueue_html_ae47268978d2deb4f22d1b93662710f9b"><div class="ttname"><a href="classL4virtio_1_1Svr_1_1Virtqueue.html#ae47268978d2deb4f22d1b93662710f9b">L4virtio::Svr::Virtqueue::disable_notify</a></div><div class="ttdeci">void disable_notify()</div><div class="ttdoc">Set the &#39;no notify&#39; flag for this queue.</div><div class="ttdef"><b>Definition</b> <a href="#l00273">virtio:273</a></div></div>
<div class="ttc" id="aclassL4virtio_1_1Svr_1_1Virtqueue_html_aeba93ed1ee8f9abfe42542187e54cca0"><div class="ttname"><a href="classL4virtio_1_1Svr_1_1Virtqueue.html#aeba93ed1ee8f9abfe42542187e54cca0">L4virtio::Svr::Virtqueue::finish</a></div><div class="ttdeci">void finish(Head_desc &amp;d, QUEUE_OBSERVER *o, l4_uint32_t len=0)</div><div class="ttdoc">Add a descriptor to the used ring, and notify an observer.</div><div class="ttdef"><b>Definition</b> <a href="#l00240">virtio:240</a></div></div>
<div class="ttc" id="aclassL4virtio_1_1Svr_1_1Virtqueue_html_af1edfd95bc43193284a4fe54cc260f9c"><div class="ttname"><a href="classL4virtio_1_1Svr_1_1Virtqueue.html#af1edfd95bc43193284a4fe54cc260f9c">L4virtio::Svr::Virtqueue::rewind_avail</a></div><div class="ttdeci">void rewind_avail(Head_desc const &amp;d)</div><div class="ttdoc">Return unfinished descriptors to the available ring, i.e.</div><div class="ttdef"><b>Definition</b> <a href="#l00160">virtio:160</a></div></div>
<div class="ttc" id="aclassL4virtio_1_1Svr_1_1Virtqueue_html_af6577deb37b3685815f9ae52760390db"><div class="ttname"><a href="classL4virtio_1_1Svr_1_1Virtqueue.html#af6577deb37b3685815f9ae52760390db">L4virtio::Svr::Virtqueue::consumed</a></div><div class="ttdeci">void consumed(Head_desc const &amp;r, l4_uint32_t len=0)</div><div class="ttdoc">Put the given descriptor into the used ring.</div><div class="ttdef"><b>Definition</b> <a href="#l00190">virtio:190</a></div></div>
<div class="ttc" id="aclassL4virtio_1_1Virtqueue_1_1Desc_html"><div class="ttname"><a href="classL4virtio_1_1Virtqueue_1_1Desc.html">L4virtio::Virtqueue::Desc</a></div><div class="ttdoc">Descriptor in the descriptor table.</div><div class="ttdef"><b>Definition</b> <a href="virtqueue_source.html#l00086">virtqueue:87</a></div></div>
<div class="ttc" id="aclassL4virtio_1_1Virtqueue_html"><div class="ttname"><a href="classL4virtio_1_1Virtqueue.html">L4virtio::Virtqueue</a></div><div class="ttdoc">Low-level Virtqueue.</div><div class="ttdef"><b>Definition</b> <a href="virtqueue_source.html#l00080">virtqueue:81</a></div></div>
<div class="ttc" id="aclassL4virtio_1_1Virtqueue_html_a287fe9fe8bef92049b4f0163ed39c405"><div class="ttname"><a href="classL4virtio_1_1Virtqueue.html#a287fe9fe8bef92049b4f0163ed39c405">L4virtio::Virtqueue::_used</a></div><div class="ttdeci">Used * _used</div><div class="ttdoc">pointer to used ring.</div><div class="ttdef"><b>Definition</b> <a href="virtqueue_source.html#l00199">virtqueue:199</a></div></div>
<div class="ttc" id="aclassL4virtio_1_1Virtqueue_html_a7ae2647d7163653bb5a250936f917a50"><div class="ttname"><a href="classL4virtio_1_1Virtqueue.html#a7ae2647d7163653bb5a250936f917a50">L4virtio::Virtqueue::Virtqueue</a></div><div class="ttdeci">Virtqueue()=default</div><div class="ttdoc">Create a disabled virtqueue.</div></div>
<div class="ttc" id="aclassL4virtio_1_1Virtqueue_html_aa242e930433e8705c4ee00afaf58f686"><div class="ttname"><a href="classL4virtio_1_1Virtqueue.html#aa242e930433e8705c4ee00afaf58f686">L4virtio::Virtqueue::ready</a></div><div class="ttdeci">bool ready() const</div><div class="ttdoc">Test if this queue is in working state.</div><div class="ttdef"><b>Definition</b> <a href="virtqueue_source.html#l00400">virtqueue:400</a></div></div>
<div class="ttc" id="aclassL4virtio_1_1Virtqueue_html_aa4730e5b53806a3d72164e917c20e91a"><div class="ttname"><a href="classL4virtio_1_1Virtqueue.html#aa4730e5b53806a3d72164e917c20e91a">L4virtio::Virtqueue::_idx_mask</a></div><div class="ttdeci">l4_uint16_t _idx_mask</div><div class="ttdoc">mask used for indexing into the descriptor table and the rings.</div><div class="ttdef"><b>Definition</b> <a href="virtqueue_source.html#l00208">virtqueue:208</a></div></div>
<div class="ttc" id="aclassL4virtio_1_1Virtqueue_html_ab2dc5f70a0c42fa15e91cd8084d29cd0"><div class="ttname"><a href="classL4virtio_1_1Virtqueue.html#ab2dc5f70a0c42fa15e91cd8084d29cd0">L4virtio::Virtqueue::_desc</a></div><div class="ttdeci">Desc * _desc</div><div class="ttdoc">pointer to descriptor table, NULL if queue is off.</div><div class="ttdef"><b>Definition</b> <a href="virtqueue_source.html#l00197">virtqueue:197</a></div></div>
<div class="ttc" id="aclassL4virtio_1_1Virtqueue_html_ad569bf985c1849caadd7fd7c15d75cec"><div class="ttname"><a href="classL4virtio_1_1Virtqueue.html#ad569bf985c1849caadd7fd7c15d75cec">L4virtio::Virtqueue::_avail</a></div><div class="ttdeci">Avail * _avail</div><div class="ttdoc">pointer to available ring.</div><div class="ttdef"><b>Definition</b> <a href="virtqueue_source.html#l00198">virtqueue:198</a></div></div>
<div class="ttc" id="aclassL4virtio_1_1Virtqueue_html_af4c017e70aa977b3d8f7a024ee3473f3"><div class="ttname"><a href="classL4virtio_1_1Virtqueue.html#af4c017e70aa977b3d8f7a024ee3473f3">L4virtio::Virtqueue::_current_avail</a></div><div class="ttdeci">l4_uint16_t _current_avail</div><div class="ttdoc">The life counter for the queue.</div><div class="ttdef"><b>Definition</b> <a href="virtqueue_source.html#l00202">virtqueue:202</a></div></div>
<div class="ttc" id="aclassL4virtio_1_1Virtqueue_html_af61e3e4e436b93f37f22243a1c0ffe0e"><div class="ttname"><a href="classL4virtio_1_1Virtqueue.html#af61e3e4e436b93f37f22243a1c0ffe0e">L4virtio::Virtqueue::num</a></div><div class="ttdeci">unsigned num() const</div><div class="ttdef"><b>Definition</b> <a href="virtqueue_source.html#l00404">virtqueue:404</a></div></div>
<div class="ttc" id="agroup__l4__basic__types_html_gac1d09f3e382e711b776931f10e6e1e5a"><div class="ttname"><a href="group__l4__basic__types.html#gac1d09f3e382e711b776931f10e6e1e5a">l4_uint32_t</a></div><div class="ttdeci">unsigned int l4_uint32_t</div><div class="ttdoc">Unsigned 32bit value.</div><div class="ttdef"><b>Definition</b> <a href="l4_2sys_2l4int_8h_source.html#l00029">l4int.h:29</a></div></div>
<div class="ttc" id="agroup__l4__basic__types_html_gae8d67914f723bf843df6f311ad2619a2"><div class="ttname"><a href="group__l4__basic__types.html#gae8d67914f723bf843df6f311ad2619a2">l4_uint16_t</a></div><div class="ttdeci">unsigned short int l4_uint16_t</div><div class="ttdoc">Unsigned 16bit value.</div><div class="ttdef"><b>Definition</b> <a href="l4_2sys_2l4int_8h_source.html#l00027">l4int.h:27</a></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_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="al4_2sys_2types_8h_html"><div class="ttname"><a href="l4_2sys_2types_8h.html">types.h</a></div><div class="ttdoc">Common L4 ABI Data Types.</div></div>
<div class="ttc" id="anamespaceL4virtio_html"><div class="ttname"><a href="namespaceL4virtio.html">L4virtio</a></div><div class="ttdoc">L4-VIRTIO Transport C++ API.</div><div class="ttdef"><b>Definition</b> <a href="client_2l4virtio_source.html#l00026">l4virtio:26</a></div></div>
<div class="ttc" id="anamespacecxx_html_ab148b2c460eb31462ced9a1eafd9667c"><div class="ttname"><a href="namespacecxx.html#ab148b2c460eb31462ced9a1eafd9667c">cxx::access_once</a></div><div class="ttdeci">T access_once(T const *a)</div><div class="ttdoc">Read the value at an address at most once.</div><div class="ttdef"><b>Definition</b> <a href="utils_source.html#l00040">utils:40</a></div></div>
<div class="ttc" id="astring_8h_html"><div class="ttname"><a href="string_8h.html">string.h</a></div><div class="ttdoc">String.</div></div>
<div class="ttc" id="astructL4virtio_1_1Svr_1_1Bad__descriptor_html"><div class="ttname"><a href="structL4virtio_1_1Svr_1_1Bad__descriptor.html">L4virtio::Svr::Bad_descriptor</a></div><div class="ttdoc">Exception used by Queue to indicate descriptor errors.</div><div class="ttdef"><b>Definition</b> <a href="#l00397">virtio:398</a></div></div>
<div class="ttc" id="astructL4virtio_1_1Svr_1_1Bad__descriptor_html_a3150820d3477fd80ee02180e4281f5ff"><div class="ttname"><a href="structL4virtio_1_1Svr_1_1Bad__descriptor.html#a3150820d3477fd80ee02180e4281f5ff">L4virtio::Svr::Bad_descriptor::proc</a></div><div class="ttdeci">Request_processor const * proc</div><div class="ttdoc">The processor that triggered the exception.</div><div class="ttdef"><b>Definition</b> <a href="#l00410">virtio:410</a></div></div>
<div class="ttc" id="astructL4virtio_1_1Svr_1_1Bad__descriptor_html_a6d0361d240b52210a4a6bcb5570a6a25"><div class="ttname"><a href="structL4virtio_1_1Svr_1_1Bad__descriptor.html#a6d0361d240b52210a4a6bcb5570a6a25">L4virtio::Svr::Bad_descriptor::Error</a></div><div class="ttdeci">Error</div><div class="ttdoc">The error code.</div><div class="ttdef"><b>Definition</b> <a href="#l00400">virtio:401</a></div></div>
<div class="ttc" id="astructL4virtio_1_1Svr_1_1Bad__descriptor_html_a6d0361d240b52210a4a6bcb5570a6a25a0ae39f2d3884ab0f4a21a9d157a79db0"><div class="ttname"><a href="structL4virtio_1_1Svr_1_1Bad__descriptor.html#a6d0361d240b52210a4a6bcb5570a6a25a0ae39f2d3884ab0f4a21a9d157a79db0">L4virtio::Svr::Bad_descriptor::Bad_rights</a></div><div class="ttdeci">@ Bad_rights</div><div class="ttdoc">Missing access rights on memory.</div><div class="ttdef"><b>Definition</b> <a href="#l00403">virtio:403</a></div></div>
<div class="ttc" id="astructL4virtio_1_1Svr_1_1Bad__descriptor_html_a6d0361d240b52210a4a6bcb5570a6a25a0eec6f7ec63c549bd35c05e205d33ecd"><div class="ttname"><a href="structL4virtio_1_1Svr_1_1Bad__descriptor.html#a6d0361d240b52210a4a6bcb5570a6a25a0eec6f7ec63c549bd35c05e205d33ecd">L4virtio::Svr::Bad_descriptor::Bad_address</a></div><div class="ttdeci">@ Bad_address</div><div class="ttdoc">Address cannot be translated.</div><div class="ttdef"><b>Definition</b> <a href="#l00402">virtio:402</a></div></div>
<div class="ttc" id="astructL4virtio_1_1Svr_1_1Bad__descriptor_html_a6d0361d240b52210a4a6bcb5570a6a25a2009f7ae71b65094a237c0437f86eda1"><div class="ttname"><a href="structL4virtio_1_1Svr_1_1Bad__descriptor.html#a6d0361d240b52210a4a6bcb5570a6a25a2009f7ae71b65094a237c0437f86eda1">L4virtio::Svr::Bad_descriptor::Bad_flags</a></div><div class="ttdeci">@ Bad_flags</div><div class="ttdoc">Invalid combination of descriptor flags.</div><div class="ttdef"><b>Definition</b> <a href="#l00404">virtio:404</a></div></div>
<div class="ttc" id="astructL4virtio_1_1Svr_1_1Bad__descriptor_html_a6d0361d240b52210a4a6bcb5570a6a25abfe460aa0ba29527c4fde6a63224832a"><div class="ttname"><a href="structL4virtio_1_1Svr_1_1Bad__descriptor.html#a6d0361d240b52210a4a6bcb5570a6a25abfe460aa0ba29527c4fde6a63224832a">L4virtio::Svr::Bad_descriptor::Bad_next</a></div><div class="ttdeci">@ Bad_next</div><div class="ttdoc">Invalid next index.</div><div class="ttdef"><b>Definition</b> <a href="#l00405">virtio:405</a></div></div>
<div class="ttc" id="astructL4virtio_1_1Svr_1_1Bad__descriptor_html_a6d0361d240b52210a4a6bcb5570a6a25ad151656f5a2cc0c2ec14792310244f5b"><div class="ttname"><a href="structL4virtio_1_1Svr_1_1Bad__descriptor.html#a6d0361d240b52210a4a6bcb5570a6a25ad151656f5a2cc0c2ec14792310244f5b">L4virtio::Svr::Bad_descriptor::Bad_size</a></div><div class="ttdeci">@ Bad_size</div><div class="ttdoc">Invalid size of memory block.</div><div class="ttdef"><b>Definition</b> <a href="#l00406">virtio:406</a></div></div>
<div class="ttc" id="astructL4virtio_1_1Svr_1_1Bad__descriptor_html_ae037d0b9592c69ffd63766e51b7e57e1"><div class="ttname"><a href="structL4virtio_1_1Svr_1_1Bad__descriptor.html#ae037d0b9592c69ffd63766e51b7e57e1">L4virtio::Svr::Bad_descriptor::message</a></div><div class="ttdeci">char const * message() const</div><div class="ttdoc">Get a human readable description of the error code.</div><div class="ttdef"><b>Definition</b> <a href="#l00430">virtio:430</a></div></div>
<div class="ttc" id="astructL4virtio_1_1Svr_1_1Bad__descriptor_html_ae82011a511ea644185bceea4956910f3"><div class="ttname"><a href="structL4virtio_1_1Svr_1_1Bad__descriptor.html#ae82011a511ea644185bceea4956910f3">L4virtio::Svr::Bad_descriptor::Bad_descriptor</a></div><div class="ttdeci">Bad_descriptor(Request_processor const *proc, Error e)</div><div class="ttdoc">Make a bad descriptor exception.</div><div class="ttdef"><b>Definition</b> <a href="#l00421">virtio:421</a></div></div>
<div class="ttc" id="astructL4virtio_1_1Svr_1_1Data__buffer_html_a0a9baefe7242b43e77a344684c141f38"><div class="ttname"><a href="structL4virtio_1_1Svr_1_1Data__buffer.html#a0a9baefe7242b43e77a344684c141f38">L4virtio::Svr::Data_buffer::set</a></div><div class="ttdeci">void set(T *p)</div><div class="ttdoc">Set buffer for object p.</div><div class="ttdef"><b>Definition</b> <a href="#l00337">virtio:337</a></div></div>
<div class="ttc" id="astructL4virtio_1_1Svr_1_1Data__buffer_html_a0ae0d4405b3a3ae5aa554b3adece0138"><div class="ttname"><a href="structL4virtio_1_1Svr_1_1Data__buffer.html#a0ae0d4405b3a3ae5aa554b3adece0138">L4virtio::Svr::Data_buffer::copy_to</a></div><div class="ttdeci">l4_uint32_t copy_to(Data_buffer *dst, l4_uint32_t max=UINT_MAX)</div><div class="ttdoc">Copy contents from this buffer to the destination buffer.</div><div class="ttdef"><b>Definition</b> <a href="#l00354">virtio:354</a></div></div>
<div class="ttc" id="astructL4virtio_1_1Svr_1_1Data__buffer_html_a4c105bf354d6663f323efeb81c74ebc2"><div class="ttname"><a href="structL4virtio_1_1Svr_1_1Data__buffer.html#a4c105bf354d6663f323efeb81c74ebc2">L4virtio::Svr::Data_buffer::left</a></div><div class="ttdeci">l4_uint32_t left</div><div class="ttdoc">Bytes left in buffer.</div><div class="ttdef"><b>Definition</b> <a href="#l00309">virtio:309</a></div></div>
<div class="ttc" id="astructL4virtio_1_1Svr_1_1Data__buffer_html_ac58e770774164d220267be04fb97b551"><div class="ttname"><a href="structL4virtio_1_1Svr_1_1Data__buffer.html#ac58e770774164d220267be04fb97b551">L4virtio::Svr::Data_buffer::pos</a></div><div class="ttdeci">char * pos</div><div class="ttdoc">Current buffer position.</div><div class="ttdef"><b>Definition</b> <a href="#l00308">virtio:308</a></div></div>
<div class="ttc" id="astructL4virtio_1_1Svr_1_1Data__buffer_html_aecd5fb1a25657f4a7b3af2362a74433c"><div class="ttname"><a href="structL4virtio_1_1Svr_1_1Data__buffer.html#aecd5fb1a25657f4a7b3af2362a74433c">L4virtio::Svr::Data_buffer::skip</a></div><div class="ttdeci">l4_uint32_t skip(l4_uint32_t bytes)</div><div class="ttdoc">Skip given number of bytes in this buffer.</div><div class="ttdef"><b>Definition</b> <a href="#l00375">virtio:375</a></div></div>
<div class="ttc" id="astructL4virtio_1_1Svr_1_1Data__buffer_html_af362e9d1f295b082d20a032c4a8db603"><div class="ttname"><a href="structL4virtio_1_1Svr_1_1Data__buffer.html#af362e9d1f295b082d20a032c4a8db603">L4virtio::Svr::Data_buffer::done</a></div><div class="ttdeci">bool done() const</div><div class="ttdoc">Check if there are no more bytes left in the buffer.</div><div class="ttdef"><b>Definition</b> <a href="#l00388">virtio:388</a></div></div>
<div class="ttc" id="astructL4virtio_1_1Svr_1_1Data__buffer_html_afa24b4543e37fe439ce06ff4d12c4641"><div class="ttname"><a href="structL4virtio_1_1Svr_1_1Data__buffer.html#afa24b4543e37fe439ce06ff4d12c4641">L4virtio::Svr::Data_buffer::Data_buffer</a></div><div class="ttdeci">Data_buffer(T *p)</div><div class="ttdoc">Create buffer for object p.</div><div class="ttdef"><b>Definition</b> <a href="#l00323">virtio:323</a></div></div>
<div class="ttc" id="astructL4virtio_1_1Svr_1_1Dev__features_html_a01bb482bee85fd60f8685ed5a55fde79"><div class="ttname"><a href="structL4virtio_1_1Svr_1_1Dev__features.html#a01bb482bee85fd60f8685ed5a55fde79">L4virtio::Svr::Dev_features::raw</a></div><div class="ttdeci">l4_uint32_t raw</div><div class="ttdoc">The raw value of the features bitmap.</div><div class="ttdef"><b>Definition</b> <a href="#l00068">virtio:68</a></div></div>
<div class="ttc" id="astructL4virtio_1_1Svr_1_1Dev__features_html_a0a33e8e5d0b3ef5bf8cfc6e56c7d2d38"><div class="ttname"><a href="structL4virtio_1_1Svr_1_1Dev__features.html#a0a33e8e5d0b3ef5bf8cfc6e56c7d2d38">L4virtio::Svr::Dev_features::ring_indirect_desc</a></div><div class="ttdeci">constexpr ring_indirect_desc_bfm_t::Val ring_indirect_desc() const</div><div class="ttdoc">Get the ring_indirect_desc bits (28 to 28) of raw.</div><div class="ttdef"><b>Definition</b> <a href="#l00074">virtio:74</a></div></div>
<div class="ttc" id="astructL4virtio_1_1Svr_1_1Dev__features_html_a69919ccca2c4fbe511ec0b803f3a28b6"><div class="ttname"><a href="structL4virtio_1_1Svr_1_1Dev__features.html#a69919ccca2c4fbe511ec0b803f3a28b6">L4virtio::Svr::Dev_features::ring_event_idx</a></div><div class="ttdeci">constexpr ring_event_idx_bfm_t::Val ring_event_idx() const</div><div class="ttdoc">Get the ring_event_idx bits (29 to 29) of raw.</div><div class="ttdef"><b>Definition</b> <a href="#l00075">virtio:75</a></div></div>
<div class="ttc" id="astructL4virtio_1_1Svr_1_1Dev__features_html_a735ebbe6c62565fe9c1511e4065445aa"><div class="ttname"><a href="structL4virtio_1_1Svr_1_1Dev__features.html#a735ebbe6c62565fe9c1511e4065445aa">L4virtio::Svr::Dev_features::Dev_features</a></div><div class="ttdeci">Dev_features(l4_uint32_t v)</div><div class="ttdoc">Make Features from a raw bitmap.</div><div class="ttdef"><b>Definition</b> <a href="#l00072">virtio:72</a></div></div>
<div class="ttc" id="astructL4virtio_1_1Svr_1_1Dev__status_html_a10c94bb94ebc76be14f5b385576a73f9"><div class="ttname"><a href="structL4virtio_1_1Svr_1_1Dev__status.html#a10c94bb94ebc76be14f5b385576a73f9">L4virtio::Svr::Dev_status::failed</a></div><div class="ttdeci">constexpr failed_bfm_t::Val failed() const</div><div class="ttdoc">Get the failed bits (7 to 7) of raw.</div><div class="ttdef"><b>Definition</b> <a href="#l00046">virtio:46</a></div></div>
<div class="ttc" id="astructL4virtio_1_1Svr_1_1Dev__status_html_a3748090616313eb1e9fa86c0e406cbf9"><div class="ttname"><a href="structL4virtio_1_1Svr_1_1Dev__status.html#a3748090616313eb1e9fa86c0e406cbf9">L4virtio::Svr::Dev_status::device_needs_reset</a></div><div class="ttdeci">constexpr device_needs_reset_bfm_t::Val device_needs_reset() const</div><div class="ttdoc">Get the device_needs_reset bits (6 to 6) of raw.</div><div class="ttdef"><b>Definition</b> <a href="#l00045">virtio:45</a></div></div>
<div class="ttc" id="astructL4virtio_1_1Svr_1_1Dev__status_html_a6496574b66a392b7813ebaf14d3fe0eb"><div class="ttname"><a href="structL4virtio_1_1Svr_1_1Dev__status.html#a6496574b66a392b7813ebaf14d3fe0eb">L4virtio::Svr::Dev_status::running</a></div><div class="ttdeci">bool running() const</div><div class="ttdoc">Check if the device is in running state.</div><div class="ttdef"><b>Definition</b> <a href="#l00057">virtio:57</a></div></div>
<div class="ttc" id="astructL4virtio_1_1Svr_1_1Dev__status_html_a7a8555825acd0b2c42febe37f00b8333"><div class="ttname"><a href="structL4virtio_1_1Svr_1_1Dev__status.html#a7a8555825acd0b2c42febe37f00b8333">L4virtio::Svr::Dev_status::driver_ok</a></div><div class="ttdeci">constexpr driver_ok_bfm_t::Val driver_ok() const</div><div class="ttdoc">Get the driver_ok bits (2 to 2) of raw.</div><div class="ttdef"><b>Definition</b> <a href="#l00042">virtio:42</a></div></div>
<div class="ttc" id="astructL4virtio_1_1Svr_1_1Dev__status_html_a7a964d4dab8c8f3812bb2353a4a94dd2"><div class="ttname"><a href="structL4virtio_1_1Svr_1_1Dev__status.html#a7a964d4dab8c8f3812bb2353a4a94dd2">L4virtio::Svr::Dev_status::acked</a></div><div class="ttdeci">constexpr acked_bfm_t::Val acked() const</div><div class="ttdoc">Get the acked bits (0 to 0) of raw.</div><div class="ttdef"><b>Definition</b> <a href="#l00040">virtio:40</a></div></div>
<div class="ttc" id="astructL4virtio_1_1Svr_1_1Dev__status_html_ab2cf42874c47b6ed690ef6bdef7326dd"><div class="ttname"><a href="structL4virtio_1_1Svr_1_1Dev__status.html#ab2cf42874c47b6ed690ef6bdef7326dd">L4virtio::Svr::Dev_status::Dev_status</a></div><div class="ttdeci">Dev_status(l4_uint32_t v)</div><div class="ttdoc">Make Status from raw value.</div><div class="ttdef"><b>Definition</b> <a href="#l00038">virtio:38</a></div></div>
<div class="ttc" id="astructL4virtio_1_1Svr_1_1Dev__status_html_abbeedd7d18bbabaf4463db2706943167"><div class="ttname"><a href="structL4virtio_1_1Svr_1_1Dev__status.html#abbeedd7d18bbabaf4463db2706943167">L4virtio::Svr::Dev_status::features_ok</a></div><div class="ttdeci">constexpr features_ok_bfm_t::Val features_ok() const</div><div class="ttdoc">Get the features_ok bits (3 to 3) of raw.</div><div class="ttdef"><b>Definition</b> <a href="#l00043">virtio:43</a></div></div>
<div class="ttc" id="astructL4virtio_1_1Svr_1_1Dev__status_html_ac17e8c31bc42f4ddea8781e31d8eac90"><div class="ttname"><a href="structL4virtio_1_1Svr_1_1Dev__status.html#ac17e8c31bc42f4ddea8781e31d8eac90">L4virtio::Svr::Dev_status::driver</a></div><div class="ttdeci">constexpr driver_bfm_t::Val driver() const</div><div class="ttdoc">Get the driver bits (1 to 1) of raw.</div><div class="ttdef"><b>Definition</b> <a href="#l00041">virtio:41</a></div></div>
<div class="ttc" id="astructL4virtio_1_1Svr_1_1Dev__status_html_acfbb0f427399dde712ff5bfc894d1144"><div class="ttname"><a href="structL4virtio_1_1Svr_1_1Dev__status.html#acfbb0f427399dde712ff5bfc894d1144">L4virtio::Svr::Dev_status::fail_state</a></div><div class="ttdeci">constexpr fail_state_bfm_t::Val fail_state() const</div><div class="ttdoc">Get the fail_state bits (6 to 7) of raw.</div><div class="ttdef"><b>Definition</b> <a href="#l00044">virtio:44</a></div></div>
<div class="ttc" id="astructL4virtio_1_1Svr_1_1Dev__status_html_aed2dab7b0f293893bd24e66eeeda5a3b"><div class="ttname"><a href="structL4virtio_1_1Svr_1_1Dev__status.html#aed2dab7b0f293893bd24e66eeeda5a3b">L4virtio::Svr::Dev_status::raw</a></div><div class="ttdeci">unsigned char raw</div><div class="ttdoc">Raw value of the VIRTIO device status register.</div><div class="ttdef"><b>Definition</b> <a href="#l00034">virtio:34</a></div></div>
<div class="ttc" id="astructL4virtio_1_1Virtqueue_1_1Desc_1_1Flags_html"><div class="ttname"><a href="structL4virtio_1_1Virtqueue_1_1Desc_1_1Flags.html">L4virtio::Virtqueue::Desc::Flags</a></div><div class="ttdoc">Type for descriptor flags.</div><div class="ttdef"><b>Definition</b> <a href="virtqueue_source.html#l00092">virtqueue:93</a></div></div>
<div class="ttc" id="astructL4virtio_1_1Virtqueue_1_1Used__elem_html"><div class="ttname"><a href="structL4virtio_1_1Virtqueue_1_1Used__elem.html">L4virtio::Virtqueue::Used_elem</a></div><div class="ttdoc">Type of an element of the used ring.</div><div class="ttdef"><b>Definition</b> <a href="virtqueue_source.html#l00154">virtqueue:155</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>l4virtio</b></li><li class="navelem"><b>server</b></li><li class="navelem"><b>virtio</b></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>