Files
moslab-code/doc/source/html/group__l4virtio__transport.html
2025-09-12 15:55:45 +02:00

791 lines
58 KiB
HTML

<!-- HTML header for doxygen 1.9.1-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.15.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>L4Re Operating System Framework: L4 VIRTIO Transport Layer</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="doxygen-awesome.css" rel="stylesheet" type="text/css"/>
<link href="l4re-awesome.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="L4Re_rgb_logo_quer_hg_h55.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">L4Re Operating System Framework
</div>
<div id="projectbrief">Interface and Usage Documentation</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.15.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(function(){initNavTree('group__l4virtio__transport.html','',''); });
</script>
<div id="container">
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="headertitle"><div class="title">L4 VIRTIO Transport Layer <div class="ingroups"><a class="el" href="group__l4virtio.html">L4 VIRTIO Interface</a></div></div></div>
</div><!--header-->
<div class="contents">
<p><a class="el" href="namespaceL4.html" title="L4 low-level kernel interface.">L4</a> specific VIRTIO Transport layer.
<a href="#details">More...</a></p>
<div id="dynsection-0" onclick="return dynsection.toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;"><span class="dynarrow"><span class="arrowhead closed"></span></span>Collaboration diagram for L4 VIRTIO Transport Layer:</div>
<div id="dynsection-0-summary" class="dynsummary" style="display:block;">
</div>
<div id="dynsection-0-content" class="dyncontent" style="display:none;">
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="group__l4virtio__transport.svg" width="354" height="51"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
</div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-namespaces" class="groupheader"><a id="namespaces" name="namespaces"></a>
Namespaces</h2></td></tr>
<tr class="memitem:L4virtio" id="r_L4virtio"><td class="memItemLeft" align="right" valign="top">namespace &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceL4virtio.html">L4virtio</a></td></tr>
<tr class="memdesc:namespaceL4virtio"><td class="mdescLeft">&#160;</td><td class="mdescRight">L4-VIRTIO Transport C++ API. <br /></td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-nested-classes" class="groupheader"><a id="nested-classes" name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr class="memitem:l4virtio_5Fconfig_5Fhdr_5Ft" id="r_l4virtio_5Fconfig_5Fhdr_5Ft"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structl4virtio__config__hdr__t.html">l4virtio_config_hdr_t</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">L4-VIRTIO config header, provided in shared data space. <a href="structl4virtio__config__hdr__t.html#details">More...</a><br /></td></tr>
<tr class="memitem:l4virtio_5Fconfig_5Fqueue_5Ft" id="r_l4virtio_5Fconfig_5Fqueue_5Ft"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structl4virtio__config__queue__t.html">l4virtio_config_queue_t</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Queue configuration entry. <a href="structl4virtio__config__queue__t.html#details">More...</a><br /></td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-typedef-members" class="groupheader"><a id="typedef-members" name="typedef-members"></a>
Typedefs</h2></td></tr>
<tr class="memitem:gab22e6bdca7adff7ee73de2b7d8bece5d" id="r_gab22e6bdca7adff7ee73de2b7d8bece5d"><td class="memItemLeft" align="right" valign="top"><a id="gab22e6bdca7adff7ee73de2b7d8bece5d" name="gab22e6bdca7adff7ee73de2b7d8bece5d"></a>
typedef struct l4virtio_config_hdr_t&#160;</td><td class="memItemRight" valign="bottom"><b>l4virtio_config_hdr_t</b></td></tr>
<tr class="memdesc:gab22e6bdca7adff7ee73de2b7d8bece5d"><td class="mdescLeft">&#160;</td><td class="mdescRight">L4-VIRTIO config header, provided in shared data space. <br /></td></tr>
<tr class="memitem:ga738ec0ed2cd231a13db4314eb40752b0" id="r_ga738ec0ed2cd231a13db4314eb40752b0"><td class="memItemLeft" align="right" valign="top">typedef struct l4virtio_config_queue_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga738ec0ed2cd231a13db4314eb40752b0">l4virtio_config_queue_t</a></td></tr>
<tr class="memdesc:ga738ec0ed2cd231a13db4314eb40752b0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Queue configuration entry. <br /></td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-enum-members" class="groupheader"><a id="enum-members" name="enum-members"></a>
Enumerations</h2></td></tr>
<tr class="memitem:ga87b6bfdc2335f1d364a5819c6aeef6f9" id="r_ga87b6bfdc2335f1d364a5819c6aeef6f9"><td class="memItemLeft" align="right" valign="top"><a id="ga87b6bfdc2335f1d364a5819c6aeef6f9" name="ga87b6bfdc2335f1d364a5819c6aeef6f9"></a>enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga87b6bfdc2335f1d364a5819c6aeef6f9">L4_virtio_protocol</a> </td></tr>
<tr class="memdesc:ga87b6bfdc2335f1d364a5819c6aeef6f9"><td class="mdescLeft">&#160;</td><td class="mdescRight">L4-VIRTIO protocol number. <br /></td></tr>
<tr class="memitem:ga2022e1e0e041558008a92a4cfe3efe6a" id="r_ga2022e1e0e041558008a92a4cfe3efe6a"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga2022e1e0e041558008a92a4cfe3efe6a">L4_virtio_opcodes</a> { <br />
&#160;&#160;<a class="el" href="#gga2022e1e0e041558008a92a4cfe3efe6aa014d4fd31494f662b0840502d875dbd3">L4VIRTIO_OP_SET_STATUS</a> = 0
, <a class="el" href="#gga2022e1e0e041558008a92a4cfe3efe6aa402baac6222a46ad64de04aee95f1fdd">L4VIRTIO_OP_CONFIG_QUEUE</a> = 1
, <a class="el" href="#gga2022e1e0e041558008a92a4cfe3efe6aa851241cc70d9d9619fb9203a6f043af9">L4VIRTIO_OP_REGISTER_DS</a> = 3
, <a class="el" href="#gga2022e1e0e041558008a92a4cfe3efe6aa0777199de23f1eac9a5ee8b28ca9af06">L4VIRTIO_OP_DEVICE_CONFIG</a> = 4
, <br />
&#160;&#160;<a class="el" href="#gga2022e1e0e041558008a92a4cfe3efe6aa02de33b7e0f1d1095546bed52c7ffbee">L4VIRTIO_OP_GET_DEVICE_IRQ</a> = 5
<br />
}</td></tr>
<tr class="memdesc:ga2022e1e0e041558008a92a4cfe3efe6a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Opcodes to setup and configure a device. <a href="#ga2022e1e0e041558008a92a4cfe3efe6a">More...</a><br /></td></tr>
<tr class="memitem:gaa3812d621d81dd6a7101d739153b6c3b" id="r_gaa3812d621d81dd6a7101d739153b6c3b"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#gaa3812d621d81dd6a7101d739153b6c3b">L4virtio_device_ids</a> { <br />
&#160;&#160;<a class="el" href="#ggaa3812d621d81dd6a7101d739153b6c3ba4e47a6e039bd8a60f2ffa5c4752cbd1c">L4VIRTIO_ID_NET</a> = 1
, <a class="el" href="#ggaa3812d621d81dd6a7101d739153b6c3ba10cc3c1991081bd51ac54a45f0d407c8">L4VIRTIO_ID_BLOCK</a> = 2
, <a class="el" href="#ggaa3812d621d81dd6a7101d739153b6c3ba3209479ecc025e24194aa8bae2b75d6c">L4VIRTIO_ID_CONSOLE</a> = 3
, <a class="el" href="#ggaa3812d621d81dd6a7101d739153b6c3ba3bd730f13d6c8d5acc01c0be8366c304">L4VIRTIO_ID_RNG</a> = 4
, <br />
&#160;&#160;<a class="el" href="#ggaa3812d621d81dd6a7101d739153b6c3ba12021df2503f59b88e7bb01b5c962811">L4VIRTIO_ID_BALLOON</a> = 5
, <a class="el" href="#ggaa3812d621d81dd6a7101d739153b6c3ba2c408a52e76bd0da2b5baf3be9584c9d">L4VIRTIO_ID_RPMSG</a> = 7
, <a class="el" href="#ggaa3812d621d81dd6a7101d739153b6c3ba0c41792f122576634267b0dfd2dcc89c">L4VIRTIO_ID_SCSI</a> = 8
, <a class="el" href="#ggaa3812d621d81dd6a7101d739153b6c3bacaef4a5a32e3319b7a3731404b890b73">L4VIRTIO_ID_9P</a> = 9
, <br />
&#160;&#160;<a class="el" href="#ggaa3812d621d81dd6a7101d739153b6c3ba3099fa815b8927a2ab6ce9e2b96b8a36">L4VIRTIO_ID_RPROC_SERIAL</a> = 11
, <a class="el" href="#ggaa3812d621d81dd6a7101d739153b6c3bade79bd8f44ff224d030f8eaad47dbd16">L4VIRTIO_ID_CAIF</a> = 12
, <a class="el" href="#ggaa3812d621d81dd6a7101d739153b6c3ba9c7eaab1aceb5a350eb0cfb067b90f77">L4VIRTIO_ID_GPU</a> = 16
, <a class="el" href="#ggaa3812d621d81dd6a7101d739153b6c3ba2eed7028892d18ab2de38088e9629c3e">L4VIRTIO_ID_INPUT</a> = 18
, <br />
&#160;&#160;<a class="el" href="#ggaa3812d621d81dd6a7101d739153b6c3ba9141e5daa50f788329b582da5b27a566">L4VIRTIO_ID_VSOCK</a> = 19
, <a class="el" href="#ggaa3812d621d81dd6a7101d739153b6c3ba69e8f45c8ec90665b223cf4b31f2dd91">L4VIRTIO_ID_CRYPTO</a> = 20
, <a class="el" href="#ggaa3812d621d81dd6a7101d739153b6c3ba35e879f04c2865e14f57f6c95f273540">L4VIRTIO_ID_FS</a> = 26
, <a class="el" href="#ggaa3812d621d81dd6a7101d739153b6c3bafb836828701ac35995cff37c1f9a2399">L4VIRTIO_ID_SCMI</a> = 32
, <br />
&#160;&#160;<a class="el" href="#ggaa3812d621d81dd6a7101d739153b6c3baa244c71f0cb8ddbe685b37ea19ef805c">L4VIRTIO_ID_I2C</a> = 34
, <a class="el" href="#ggaa3812d621d81dd6a7101d739153b6c3ba85161b427dd03a3e71bcedfe0ada385e">L4VIRTIO_ID_GPIO</a> = 41
, <a class="el" href="#ggaa3812d621d81dd6a7101d739153b6c3ba5f77be549027e3ed6d8287e62b6df2af">L4VIRTIO_ID_SOCK</a> = 0x9999
<br />
}</td></tr>
<tr class="memdesc:gaa3812d621d81dd6a7101d739153b6c3b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Virtio device IDs as reported in the driver's config space. <a href="#gaa3812d621d81dd6a7101d739153b6c3b">More...</a><br /></td></tr>
<tr class="memitem:ga04d41de4eccf6a17dec99cade7eeeef3" id="r_ga04d41de4eccf6a17dec99cade7eeeef3"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga04d41de4eccf6a17dec99cade7eeeef3">L4virtio_device_status</a> { <br />
&#160;&#160;<a class="el" href="#gga04d41de4eccf6a17dec99cade7eeeef3a225e3a6f7f06eb28e5e420a9b4b709a0">L4VIRTIO_STATUS_ACKNOWLEDGE</a> = 1
, <a class="el" href="#gga04d41de4eccf6a17dec99cade7eeeef3a0247a950583f983f0e9b84da44d0d66c">L4VIRTIO_STATUS_DRIVER</a> = 2
, <a class="el" href="#gga04d41de4eccf6a17dec99cade7eeeef3af125ea36199e52dbee0f8b67c4787496">L4VIRTIO_STATUS_DRIVER_OK</a> = 4
, <a class="el" href="#gga04d41de4eccf6a17dec99cade7eeeef3a721e61e1e260f44191a711e7c7fe2a7f">L4VIRTIO_STATUS_FEATURES_OK</a> = 8
, <br />
&#160;&#160;<a class="el" href="#gga04d41de4eccf6a17dec99cade7eeeef3afe9c96c7f5d601c2cca07b72fb2bdcfc">L4VIRTIO_STATUS_DEVICE_NEEDS_RESET</a> = 0x40
, <a class="el" href="#gga04d41de4eccf6a17dec99cade7eeeef3a10d14737c37af4077f3966c0b773d60b">L4VIRTIO_STATUS_FAILED</a> = 0x80
<br />
}</td></tr>
<tr class="memdesc:ga04d41de4eccf6a17dec99cade7eeeef3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Virtio device status bits. <a href="#ga04d41de4eccf6a17dec99cade7eeeef3">More...</a><br /></td></tr>
<tr class="memitem:ga01d1e713668a8ee48f1e34f428cea8d0" id="r_ga01d1e713668a8ee48f1e34f428cea8d0"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga01d1e713668a8ee48f1e34f428cea8d0">L4virtio_feature_bits</a> { <a class="el" href="#gga01d1e713668a8ee48f1e34f428cea8d0ab8ea6c40b0611434c90ffee0bb729342">L4VIRTIO_FEATURE_VERSION_1</a> = 32
, <a class="el" href="#gga01d1e713668a8ee48f1e34f428cea8d0a81ff4f8fef9e7133bee4d49587c65740">L4VIRTIO_FEATURE_CMD_CONFIG</a> = 160
}</td></tr>
<tr class="memdesc:ga01d1e713668a8ee48f1e34f428cea8d0"><td class="mdescLeft">&#160;</td><td class="mdescRight">L4virtio-specific feature bits. <a href="#ga01d1e713668a8ee48f1e34f428cea8d0">More...</a><br /></td></tr>
<tr class="memitem:gafc85528edcc3d740233740766f759fdd" id="r_gafc85528edcc3d740233740766f759fdd"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#gafc85528edcc3d740233740766f759fdd">L4_virtio_irq_status</a> { <a class="el" href="#ggafc85528edcc3d740233740766f759fdda764bdaf5cff15bd8cd27f402f6e273b2">L4VIRTIO_IRQ_STATUS_VRING</a> = 1
, <a class="el" href="#ggafc85528edcc3d740233740766f759fdda7e21836e79756a2e357e1cbc2509090d">L4VIRTIO_IRQ_STATUS_CONFIG</a> = 2
}</td></tr>
<tr class="memdesc:gafc85528edcc3d740233740766f759fdd"><td class="mdescLeft">&#160;</td><td class="mdescRight">VIRTIO IRQ status codes (l4virtio_config_hdr_t::irq_status). <a href="#gafc85528edcc3d740233740766f759fdd">More...</a><br /></td></tr>
<tr class="memitem:ga4783b17d00ec949f63c11c7bda0eed07" id="r_ga4783b17d00ec949f63c11c7bda0eed07"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga4783b17d00ec949f63c11c7bda0eed07">L4_virtio_cmd</a> { <br />
&#160;&#160;<a class="el" href="#gga4783b17d00ec949f63c11c7bda0eed07a75d93c5324dbbedd7c9bc30b32dccf93">L4VIRTIO_CMD_NONE</a> = 0x00000000
, <a class="el" href="#gga4783b17d00ec949f63c11c7bda0eed07a8927996ae9cb218bf390cb0fb058902f">L4VIRTIO_CMD_SET_STATUS</a> = 0x01000000
, <a class="el" href="#gga4783b17d00ec949f63c11c7bda0eed07aa9e85fa86a4d204f1da9616c6c8198a7">L4VIRTIO_CMD_CFG_QUEUE</a> = 0x02000000
, <a class="el" href="#gga4783b17d00ec949f63c11c7bda0eed07af09ad9e572febac6e79eb2faa157bc2a">L4VIRTIO_CMD_CFG_CHANGED</a> = 0x04000000
, <br />
&#160;&#160;<a class="el" href="#gga4783b17d00ec949f63c11c7bda0eed07a16616d64d533e999edfefbf490b7720a">L4VIRTIO_CMD_NOTIFY_QUEUE</a> = 0x08000000
, <a class="el" href="#gga4783b17d00ec949f63c11c7bda0eed07abcd4953e2ca2d46a2d3789e8edac4d6b">L4VIRTIO_CMD_MASK</a> = 0xff000000
<br />
}</td></tr>
<tr class="memdesc:ga4783b17d00ec949f63c11c7bda0eed07"><td class="mdescLeft">&#160;</td><td class="mdescRight">Virtio commands for device configuration. <a href="#ga4783b17d00ec949f63c11c7bda0eed07">More...</a><br /></td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-func-members" class="groupheader"><a id="func-members" name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:gaa63feff9b6fc10f3cd11e68da6511a4f" id="r_gaa63feff9b6fc10f3cd11e68da6511a4f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__l4sys__defines.html#ga5f022ce5422df9cc6ed415e2bfc90f59">L4_BEGIN_DECLS</a> <a class="el" href="structl4virtio__config__queue__t.html">l4virtio_config_queue_t</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#gaa63feff9b6fc10f3cd11e68da6511a4f">l4virtio_config_queues</a> (<a class="el" href="structl4virtio__config__hdr__t.html">l4virtio_config_hdr_t</a> const *cfg)</td></tr>
<tr class="memdesc:gaa63feff9b6fc10f3cd11e68da6511a4f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the pointer to the first queue config. <br /></td></tr>
<tr class="memitem:gaa54e6e4ef7d8a9ae2ebf288e75aca8df" id="r_gaa54e6e4ef7d8a9ae2ebf288e75aca8df"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#gaa54e6e4ef7d8a9ae2ebf288e75aca8df">l4virtio_device_config</a> (<a class="el" href="structl4virtio__config__hdr__t.html">l4virtio_config_hdr_t</a> const *cfg)</td></tr>
<tr class="memdesc:gaa54e6e4ef7d8a9ae2ebf288e75aca8df"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the pointer to the device configuration. <br /></td></tr>
<tr class="memitem:gabbe70d7b16bf836b95729f581c047cad" id="r_gabbe70d7b16bf836b95729f581c047cad"><td class="memItemLeft" align="right" valign="top"><a id="gabbe70d7b16bf836b95729f581c047cad" name="gabbe70d7b16bf836b95729f581c047cad"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>l4virtio_set_feature</b> (<a class="el" href="group__l4__basic__types.html#gac1d09f3e382e711b776931f10e6e1e5a">l4_uint32_t</a> *feature_map, unsigned feat)</td></tr>
<tr class="memdesc:gabbe70d7b16bf836b95729f581c047cad"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the given feature bit in a feature map. <br /></td></tr>
<tr class="memitem:gaa9e2b594dd8763023221b2a4d2455dab" id="r_gaa9e2b594dd8763023221b2a4d2455dab"><td class="memItemLeft" align="right" valign="top"><a id="gaa9e2b594dd8763023221b2a4d2455dab" name="gaa9e2b594dd8763023221b2a4d2455dab"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>l4virtio_clear_feature</b> (<a class="el" href="group__l4__basic__types.html#gac1d09f3e382e711b776931f10e6e1e5a">l4_uint32_t</a> *feature_map, unsigned feat)</td></tr>
<tr class="memdesc:gaa9e2b594dd8763023221b2a4d2455dab"><td class="mdescLeft">&#160;</td><td class="mdescRight">Clear the given feature bit in a feature map. <br /></td></tr>
<tr class="memitem:gae37bcd45875b27b302320e6b9580191d" id="r_gae37bcd45875b27b302320e6b9580191d"><td class="memItemLeft" align="right" valign="top"><a id="gae37bcd45875b27b302320e6b9580191d" name="gae37bcd45875b27b302320e6b9580191d"></a>
unsigned&#160;</td><td class="memItemRight" valign="bottom"><b>l4virtio_get_feature</b> (<a class="el" href="group__l4__basic__types.html#gac1d09f3e382e711b776931f10e6e1e5a">l4_uint32_t</a> *feature_map, unsigned feat)</td></tr>
<tr class="memdesc:gae37bcd45875b27b302320e6b9580191d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check if the given bit in a feature map is set. <br /></td></tr>
<tr class="memitem:ga0cf50f73a4c4be6798e198610d2107db" id="r_ga0cf50f73a4c4be6798e198610d2107db"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga0cf50f73a4c4be6798e198610d2107db">l4virtio_set_status</a> (<a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a> cap, unsigned status) <a class="el" href="group__l4sys__defines.html#ga362dfa378e662dd04f710a23fc7ea931">L4_NOTHROW</a></td></tr>
<tr class="memitem:ga96afc130bc89a48b91b2c9a7e924fd7d" id="r_ga96afc130bc89a48b91b2c9a7e924fd7d"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga96afc130bc89a48b91b2c9a7e924fd7d">l4virtio_config_queue</a> (<a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a> cap, unsigned queue) <a class="el" href="group__l4sys__defines.html#ga362dfa378e662dd04f710a23fc7ea931">L4_NOTHROW</a></td></tr>
<tr class="memitem:gac7b1a00cc07164eb51e0fa1599ee2c90" id="r_gac7b1a00cc07164eb51e0fa1599ee2c90"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#gac7b1a00cc07164eb51e0fa1599ee2c90">l4virtio_register_ds</a> (<a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a> cap, <a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a> ds_cap, <a class="el" href="group__l4__basic__types.html#gaf3331c485014bd12a9e4f9d27a55e689">l4_uint64_t</a> base, <a class="el" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a> offset, <a class="el" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a> size) <a class="el" href="group__l4sys__defines.html#ga362dfa378e662dd04f710a23fc7ea931">L4_NOTHROW</a></td></tr>
<tr class="memitem:ga9f7c8688033893f787027125f6422ad8" id="r_ga9f7c8688033893f787027125f6422ad8"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga9f7c8688033893f787027125f6422ad8">l4virtio_device_config_ds</a> (<a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a> cap, <a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a> config_ds, <a class="el" href="group__l4__basic__types.html#ga4087b991c40c0d2fcde9ca331049a4d4">l4_addr_t</a> *ds_offset) <a class="el" href="group__l4sys__defines.html#ga362dfa378e662dd04f710a23fc7ea931">L4_NOTHROW</a></td></tr>
<tr class="memitem:ga1e34a8e5216ae325a51f11a68f3dc760" id="r_ga1e34a8e5216ae325a51f11a68f3dc760"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga1e34a8e5216ae325a51f11a68f3dc760">l4virtio_device_notification_irq</a> (<a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a> cap, unsigned index, <a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a> irq) <a class="el" href="group__l4sys__defines.html#ga362dfa378e662dd04f710a23fc7ea931">L4_NOTHROW</a></td></tr>
</table>
<a name="details" id="details"></a><h2 id="header-details" class="groupheader">Detailed Description</h2>
<p><a class="el" href="namespaceL4.html" title="L4 low-level kernel interface.">L4</a> specific VIRTIO Transport layer. </p>
<p>The <a class="el" href="namespaceL4.html" title="L4 low-level kernel interface.">L4</a> specific VIRTIO Transport layer is based on <a class="el" href="classL4Re_1_1Dataspace.html" title="Interface for memory-like objects.">L4Re::Dataspace</a> as shared memory and <a class="el" href="classL4_1_1Irq.html" title="C++ Irq interface, see IRQs for the C interface.">L4::Irq</a> for signaling. The VIRTIO configuration space is mostly based on a shared memory implementation too and accompanied by two IPC functions to synchronize the configuration between device and driver. </p>
<a name="doc-typedef-members" id="doc-typedef-members"></a><h2 id="header-doc-typedef-members" class="groupheader">Typedef Documentation</h2>
<a id="ga738ec0ed2cd231a13db4314eb40752b0" name="ga738ec0ed2cd231a13db4314eb40752b0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga738ec0ed2cd231a13db4314eb40752b0">&#9670;&#160;</a></span>l4virtio_config_queue_t</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef struct l4virtio_config_queue_t l4virtio_config_queue_t</td>
</tr>
</table>
</div><div class="memdoc">
<p>Queue configuration entry. </p>
<p>An array of such entries is available at the <a class="el" href="structl4virtio__config__hdr__t.html#a4da93c2cef05149a4fb6b4bd06a768d8" title="offset of virtqueue config array">l4virtio_config_hdr_t::queues_offset</a> in the config data space.</p>
<p>Consistency rules for the queue config are:</p><ul>
<li>A driver might read <span class="tt">num_max</span> at any time.</li>
<li>A driver must write to <span class="tt">num</span>, <span class="tt">desc_addr</span>, <span class="tt">avail_addr</span>, and <span class="tt">used_addr</span> only when <span class="tt">ready</span> is zero (0). Values in these fields are validated and used by the device only after successfully setting <span class="tt">ready</span> to one (1), either by the IPC or by L4VIRTIO_CMD_CFG_QUEUE.</li>
<li>The value of <span class="tt">device_notify_index</span> is valid only when <span class="tt">ready</span> is one.</li>
<li>The driver might write to <span class="tt">device_notify_index</span> at any time, however the change is guaranteed to take effect after a successful L4VIRTIO_CMD_CFG_QUEUE or after a config_queue IPC. Note, the change might also have immediate effect, depending on the device implementation. </li>
</ul>
</div>
</div>
<a name="doc-enum-members" id="doc-enum-members"></a><h2 id="header-doc-enum-members" class="groupheader">Enumeration Type Documentation</h2>
<a id="ga4783b17d00ec949f63c11c7bda0eed07" name="ga4783b17d00ec949f63c11c7bda0eed07"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga4783b17d00ec949f63c11c7bda0eed07">&#9670;&#160;</a></span>L4_virtio_cmd</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="#ga4783b17d00ec949f63c11c7bda0eed07">L4_virtio_cmd</a></td>
</tr>
</table>
</div><div class="memdoc">
<p>Virtio commands for device configuration. </p>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga4783b17d00ec949f63c11c7bda0eed07a75d93c5324dbbedd7c9bc30b32dccf93" name="gga4783b17d00ec949f63c11c7bda0eed07a75d93c5324dbbedd7c9bc30b32dccf93"></a>L4VIRTIO_CMD_NONE&#160;</td><td class="fielddoc"><p>No command pending. </p>
</td></tr>
<tr><td class="fieldname"><a id="gga4783b17d00ec949f63c11c7bda0eed07a8927996ae9cb218bf390cb0fb058902f" name="gga4783b17d00ec949f63c11c7bda0eed07a8927996ae9cb218bf390cb0fb058902f"></a>L4VIRTIO_CMD_SET_STATUS&#160;</td><td class="fielddoc"><p>Set the status register. </p>
</td></tr>
<tr><td class="fieldname"><a id="gga4783b17d00ec949f63c11c7bda0eed07aa9e85fa86a4d204f1da9616c6c8198a7" name="gga4783b17d00ec949f63c11c7bda0eed07aa9e85fa86a4d204f1da9616c6c8198a7"></a>L4VIRTIO_CMD_CFG_QUEUE&#160;</td><td class="fielddoc"><p>Configure a queue. </p>
</td></tr>
<tr><td class="fieldname"><a id="gga4783b17d00ec949f63c11c7bda0eed07af09ad9e572febac6e79eb2faa157bc2a" name="gga4783b17d00ec949f63c11c7bda0eed07af09ad9e572febac6e79eb2faa157bc2a"></a>L4VIRTIO_CMD_CFG_CHANGED&#160;</td><td class="fielddoc"><p>Device config changed. </p>
</td></tr>
<tr><td class="fieldname"><a id="gga4783b17d00ec949f63c11c7bda0eed07a16616d64d533e999edfefbf490b7720a" name="gga4783b17d00ec949f63c11c7bda0eed07a16616d64d533e999edfefbf490b7720a"></a>L4VIRTIO_CMD_NOTIFY_QUEUE&#160;</td><td class="fielddoc"><p>Configure a queue. </p>
</td></tr>
<tr><td class="fieldname"><a id="gga4783b17d00ec949f63c11c7bda0eed07abcd4953e2ca2d46a2d3789e8edac4d6b" name="gga4783b17d00ec949f63c11c7bda0eed07abcd4953e2ca2d46a2d3789e8edac4d6b"></a>L4VIRTIO_CMD_MASK&#160;</td><td class="fielddoc"><p>Mask to get command bits. </p>
</td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="virtio_8h_source.html#l00119">119</a> of file <a class="el" href="virtio_8h_source.html">virtio.h</a>.</p>
</div>
</div>
<a id="gafc85528edcc3d740233740766f759fdd" name="gafc85528edcc3d740233740766f759fdd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gafc85528edcc3d740233740766f759fdd">&#9670;&#160;</a></span>L4_virtio_irq_status</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="#gafc85528edcc3d740233740766f759fdd">L4_virtio_irq_status</a></td>
</tr>
</table>
</div><div class="memdoc">
<p>VIRTIO IRQ status codes (l4virtio_config_hdr_t::irq_status). </p>
<dl class="section note"><dt>Note</dt><dd>l4virtio_config_hdr_t::irq_status is currently unused. </dd></dl>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ggafc85528edcc3d740233740766f759fdda764bdaf5cff15bd8cd27f402f6e273b2" name="ggafc85528edcc3d740233740766f759fdda764bdaf5cff15bd8cd27f402f6e273b2"></a>L4VIRTIO_IRQ_STATUS_VRING&#160;</td><td class="fielddoc"><p>VRING IRQ pending flag. </p>
</td></tr>
<tr><td class="fieldname"><a id="ggafc85528edcc3d740233740766f759fdda7e21836e79756a2e357e1cbc2509090d" name="ggafc85528edcc3d740233740766f759fdda7e21836e79756a2e357e1cbc2509090d"></a>L4VIRTIO_IRQ_STATUS_CONFIG&#160;</td><td class="fielddoc"><p>CONFIG IRQ pending flag. </p>
</td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="virtio_8h_source.html#l00110">110</a> of file <a class="el" href="virtio_8h_source.html">virtio.h</a>.</p>
</div>
</div>
<a id="ga2022e1e0e041558008a92a4cfe3efe6a" name="ga2022e1e0e041558008a92a4cfe3efe6a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga2022e1e0e041558008a92a4cfe3efe6a">&#9670;&#160;</a></span>L4_virtio_opcodes</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="#ga2022e1e0e041558008a92a4cfe3efe6a">L4_virtio_opcodes</a></td>
</tr>
</table>
</div><div class="memdoc">
<p>Opcodes to setup and configure a device. </p>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga2022e1e0e041558008a92a4cfe3efe6aa014d4fd31494f662b0840502d875dbd3" name="gga2022e1e0e041558008a92a4cfe3efe6aa014d4fd31494f662b0840502d875dbd3"></a>L4VIRTIO_OP_SET_STATUS&#160;</td><td class="fielddoc"><p>Write device status register. </p>
</td></tr>
<tr><td class="fieldname"><a id="gga2022e1e0e041558008a92a4cfe3efe6aa402baac6222a46ad64de04aee95f1fdd" name="gga2022e1e0e041558008a92a4cfe3efe6aa402baac6222a46ad64de04aee95f1fdd"></a>L4VIRTIO_OP_CONFIG_QUEUE&#160;</td><td class="fielddoc"><p>Configure queue. </p>
</td></tr>
<tr><td class="fieldname"><a id="gga2022e1e0e041558008a92a4cfe3efe6aa851241cc70d9d9619fb9203a6f043af9" name="gga2022e1e0e041558008a92a4cfe3efe6aa851241cc70d9d9619fb9203a6f043af9"></a>L4VIRTIO_OP_REGISTER_DS&#160;</td><td class="fielddoc"><p>Register shared memory with device. </p>
</td></tr>
<tr><td class="fieldname"><a id="gga2022e1e0e041558008a92a4cfe3efe6aa0777199de23f1eac9a5ee8b28ca9af06" name="gga2022e1e0e041558008a92a4cfe3efe6aa0777199de23f1eac9a5ee8b28ca9af06"></a>L4VIRTIO_OP_DEVICE_CONFIG&#160;</td><td class="fielddoc"><p>Get device config page. </p>
</td></tr>
<tr><td class="fieldname"><a id="gga2022e1e0e041558008a92a4cfe3efe6aa02de33b7e0f1d1095546bed52c7ffbee" name="gga2022e1e0e041558008a92a4cfe3efe6aa02de33b7e0f1d1095546bed52c7ffbee"></a>L4VIRTIO_OP_GET_DEVICE_IRQ&#160;</td><td class="fielddoc"><p>Retrieve device notification IRQ. </p>
</td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="virtio_8h_source.html#l00052">52</a> of file <a class="el" href="virtio_8h_source.html">virtio.h</a>.</p>
</div>
</div>
<a id="gaa3812d621d81dd6a7101d739153b6c3b" name="gaa3812d621d81dd6a7101d739153b6c3b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaa3812d621d81dd6a7101d739153b6c3b">&#9670;&#160;</a></span>L4virtio_device_ids</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="#gaa3812d621d81dd6a7101d739153b6c3b">L4virtio_device_ids</a></td>
</tr>
</table>
</div><div class="memdoc">
<p>Virtio device IDs as reported in the driver's config space. </p>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ggaa3812d621d81dd6a7101d739153b6c3ba4e47a6e039bd8a60f2ffa5c4752cbd1c" name="ggaa3812d621d81dd6a7101d739153b6c3ba4e47a6e039bd8a60f2ffa5c4752cbd1c"></a>L4VIRTIO_ID_NET&#160;</td><td class="fielddoc"><p>Virtual ethernet card. </p>
</td></tr>
<tr><td class="fieldname"><a id="ggaa3812d621d81dd6a7101d739153b6c3ba10cc3c1991081bd51ac54a45f0d407c8" name="ggaa3812d621d81dd6a7101d739153b6c3ba10cc3c1991081bd51ac54a45f0d407c8"></a>L4VIRTIO_ID_BLOCK&#160;</td><td class="fielddoc"><p>General block device. </p>
</td></tr>
<tr><td class="fieldname"><a id="ggaa3812d621d81dd6a7101d739153b6c3ba3209479ecc025e24194aa8bae2b75d6c" name="ggaa3812d621d81dd6a7101d739153b6c3ba3209479ecc025e24194aa8bae2b75d6c"></a>L4VIRTIO_ID_CONSOLE&#160;</td><td class="fielddoc"><p>Simple device for data IO via ports. </p>
</td></tr>
<tr><td class="fieldname"><a id="ggaa3812d621d81dd6a7101d739153b6c3ba3bd730f13d6c8d5acc01c0be8366c304" name="ggaa3812d621d81dd6a7101d739153b6c3ba3bd730f13d6c8d5acc01c0be8366c304"></a>L4VIRTIO_ID_RNG&#160;</td><td class="fielddoc"><p>Entropy source. </p>
</td></tr>
<tr><td class="fieldname"><a id="ggaa3812d621d81dd6a7101d739153b6c3ba12021df2503f59b88e7bb01b5c962811" name="ggaa3812d621d81dd6a7101d739153b6c3ba12021df2503f59b88e7bb01b5c962811"></a>L4VIRTIO_ID_BALLOON&#160;</td><td class="fielddoc"><p>Memory ballooning device. </p>
</td></tr>
<tr><td class="fieldname"><a id="ggaa3812d621d81dd6a7101d739153b6c3ba2c408a52e76bd0da2b5baf3be9584c9d" name="ggaa3812d621d81dd6a7101d739153b6c3ba2c408a52e76bd0da2b5baf3be9584c9d"></a>L4VIRTIO_ID_RPMSG&#160;</td><td class="fielddoc"><p>Device using rpmsg protocol. </p>
</td></tr>
<tr><td class="fieldname"><a id="ggaa3812d621d81dd6a7101d739153b6c3ba0c41792f122576634267b0dfd2dcc89c" name="ggaa3812d621d81dd6a7101d739153b6c3ba0c41792f122576634267b0dfd2dcc89c"></a>L4VIRTIO_ID_SCSI&#160;</td><td class="fielddoc"><p>SCSI host device. </p>
</td></tr>
<tr><td class="fieldname"><a id="ggaa3812d621d81dd6a7101d739153b6c3bacaef4a5a32e3319b7a3731404b890b73" name="ggaa3812d621d81dd6a7101d739153b6c3bacaef4a5a32e3319b7a3731404b890b73"></a>L4VIRTIO_ID_9P&#160;</td><td class="fielddoc"><p>Device using 9P transport protocol. </p>
</td></tr>
<tr><td class="fieldname"><a id="ggaa3812d621d81dd6a7101d739153b6c3ba3099fa815b8927a2ab6ce9e2b96b8a36" name="ggaa3812d621d81dd6a7101d739153b6c3ba3099fa815b8927a2ab6ce9e2b96b8a36"></a>L4VIRTIO_ID_RPROC_SERIAL&#160;</td><td class="fielddoc"><p>Rproc serial device. </p>
</td></tr>
<tr><td class="fieldname"><a id="ggaa3812d621d81dd6a7101d739153b6c3bade79bd8f44ff224d030f8eaad47dbd16" name="ggaa3812d621d81dd6a7101d739153b6c3bade79bd8f44ff224d030f8eaad47dbd16"></a>L4VIRTIO_ID_CAIF&#160;</td><td class="fielddoc"><p>Device using CAIF network protocol. </p>
</td></tr>
<tr><td class="fieldname"><a id="ggaa3812d621d81dd6a7101d739153b6c3ba9c7eaab1aceb5a350eb0cfb067b90f77" name="ggaa3812d621d81dd6a7101d739153b6c3ba9c7eaab1aceb5a350eb0cfb067b90f77"></a>L4VIRTIO_ID_GPU&#160;</td><td class="fielddoc"><p>GPU. </p>
</td></tr>
<tr><td class="fieldname"><a id="ggaa3812d621d81dd6a7101d739153b6c3ba2eed7028892d18ab2de38088e9629c3e" name="ggaa3812d621d81dd6a7101d739153b6c3ba2eed7028892d18ab2de38088e9629c3e"></a>L4VIRTIO_ID_INPUT&#160;</td><td class="fielddoc"><p>Input. </p>
</td></tr>
<tr><td class="fieldname"><a id="ggaa3812d621d81dd6a7101d739153b6c3ba9141e5daa50f788329b582da5b27a566" name="ggaa3812d621d81dd6a7101d739153b6c3ba9141e5daa50f788329b582da5b27a566"></a>L4VIRTIO_ID_VSOCK&#160;</td><td class="fielddoc"><p>Vsock transport. </p>
</td></tr>
<tr><td class="fieldname"><a id="ggaa3812d621d81dd6a7101d739153b6c3ba69e8f45c8ec90665b223cf4b31f2dd91" name="ggaa3812d621d81dd6a7101d739153b6c3ba69e8f45c8ec90665b223cf4b31f2dd91"></a>L4VIRTIO_ID_CRYPTO&#160;</td><td class="fielddoc"><p>Crypto. </p>
</td></tr>
<tr><td class="fieldname"><a id="ggaa3812d621d81dd6a7101d739153b6c3ba35e879f04c2865e14f57f6c95f273540" name="ggaa3812d621d81dd6a7101d739153b6c3ba35e879f04c2865e14f57f6c95f273540"></a>L4VIRTIO_ID_FS&#160;</td><td class="fielddoc"><p>FS. </p>
</td></tr>
<tr><td class="fieldname"><a id="ggaa3812d621d81dd6a7101d739153b6c3bafb836828701ac35995cff37c1f9a2399" name="ggaa3812d621d81dd6a7101d739153b6c3bafb836828701ac35995cff37c1f9a2399"></a>L4VIRTIO_ID_SCMI&#160;</td><td class="fielddoc"><p>Scmi device. </p>
</td></tr>
<tr><td class="fieldname"><a id="ggaa3812d621d81dd6a7101d739153b6c3baa244c71f0cb8ddbe685b37ea19ef805c" name="ggaa3812d621d81dd6a7101d739153b6c3baa244c71f0cb8ddbe685b37ea19ef805c"></a>L4VIRTIO_ID_I2C&#160;</td><td class="fielddoc"><p>I2C device. </p>
</td></tr>
<tr><td class="fieldname"><a id="ggaa3812d621d81dd6a7101d739153b6c3ba85161b427dd03a3e71bcedfe0ada385e" name="ggaa3812d621d81dd6a7101d739153b6c3ba85161b427dd03a3e71bcedfe0ada385e"></a>L4VIRTIO_ID_GPIO&#160;</td><td class="fielddoc"><p>Gpio device. </p>
</td></tr>
<tr><td class="fieldname"><a id="ggaa3812d621d81dd6a7101d739153b6c3ba5f77be549027e3ed6d8287e62b6df2af" name="ggaa3812d621d81dd6a7101d739153b6c3ba5f77be549027e3ed6d8287e62b6df2af"></a>L4VIRTIO_ID_SOCK&#160;</td><td class="fielddoc"><p>Unofficial socket device. </p>
</td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="virtio_8h_source.html#l00062">62</a> of file <a class="el" href="virtio_8h_source.html">virtio.h</a>.</p>
</div>
</div>
<a id="ga04d41de4eccf6a17dec99cade7eeeef3" name="ga04d41de4eccf6a17dec99cade7eeeef3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga04d41de4eccf6a17dec99cade7eeeef3">&#9670;&#160;</a></span>L4virtio_device_status</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="#ga04d41de4eccf6a17dec99cade7eeeef3">L4virtio_device_status</a></td>
</tr>
</table>
</div><div class="memdoc">
<p>Virtio device status bits. </p>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga04d41de4eccf6a17dec99cade7eeeef3a225e3a6f7f06eb28e5e420a9b4b709a0" name="gga04d41de4eccf6a17dec99cade7eeeef3a225e3a6f7f06eb28e5e420a9b4b709a0"></a>L4VIRTIO_STATUS_ACKNOWLEDGE&#160;</td><td class="fielddoc"><p>Guest OS has found device. </p>
</td></tr>
<tr><td class="fieldname"><a id="gga04d41de4eccf6a17dec99cade7eeeef3a0247a950583f983f0e9b84da44d0d66c" name="gga04d41de4eccf6a17dec99cade7eeeef3a0247a950583f983f0e9b84da44d0d66c"></a>L4VIRTIO_STATUS_DRIVER&#160;</td><td class="fielddoc"><p>Guest OS knows how to drive device. </p>
</td></tr>
<tr><td class="fieldname"><a id="gga04d41de4eccf6a17dec99cade7eeeef3af125ea36199e52dbee0f8b67c4787496" name="gga04d41de4eccf6a17dec99cade7eeeef3af125ea36199e52dbee0f8b67c4787496"></a>L4VIRTIO_STATUS_DRIVER_OK&#160;</td><td class="fielddoc"><p>Driver is set up. </p>
</td></tr>
<tr><td class="fieldname"><a id="gga04d41de4eccf6a17dec99cade7eeeef3a721e61e1e260f44191a711e7c7fe2a7f" name="gga04d41de4eccf6a17dec99cade7eeeef3a721e61e1e260f44191a711e7c7fe2a7f"></a>L4VIRTIO_STATUS_FEATURES_OK&#160;</td><td class="fielddoc"><p>Driver has acknowledged feature set. </p>
</td></tr>
<tr><td class="fieldname"><a id="gga04d41de4eccf6a17dec99cade7eeeef3afe9c96c7f5d601c2cca07b72fb2bdcfc" name="gga04d41de4eccf6a17dec99cade7eeeef3afe9c96c7f5d601c2cca07b72fb2bdcfc"></a>L4VIRTIO_STATUS_DEVICE_NEEDS_RESET&#160;</td><td class="fielddoc"><p>Device detected fatal error. </p>
</td></tr>
<tr><td class="fieldname"><a id="gga04d41de4eccf6a17dec99cade7eeeef3a10d14737c37af4077f3966c0b773d60b" name="gga04d41de4eccf6a17dec99cade7eeeef3a10d14737c37af4077f3966c0b773d60b"></a>L4VIRTIO_STATUS_FAILED&#160;</td><td class="fielddoc"><p>Driver detected fatal error. </p>
</td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="virtio_8h_source.html#l00087">87</a> of file <a class="el" href="virtio_8h_source.html">virtio.h</a>.</p>
</div>
</div>
<a id="ga01d1e713668a8ee48f1e34f428cea8d0" name="ga01d1e713668a8ee48f1e34f428cea8d0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga01d1e713668a8ee48f1e34f428cea8d0">&#9670;&#160;</a></span>L4virtio_feature_bits</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="#ga01d1e713668a8ee48f1e34f428cea8d0">L4virtio_feature_bits</a></td>
</tr>
</table>
</div><div class="memdoc">
<p>L4virtio-specific feature bits. </p>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga01d1e713668a8ee48f1e34f428cea8d0ab8ea6c40b0611434c90ffee0bb729342" name="gga01d1e713668a8ee48f1e34f428cea8d0ab8ea6c40b0611434c90ffee0bb729342"></a>L4VIRTIO_FEATURE_VERSION_1&#160;</td><td class="fielddoc"><p>Virtio protocol version 1 supported. Must be 1 for <a class="el" href="namespaceL4virtio.html" title="L4-VIRTIO Transport C++ API.">L4virtio</a>. </p>
</td></tr>
<tr><td class="fieldname"><a id="gga01d1e713668a8ee48f1e34f428cea8d0a81ff4f8fef9e7133bee4d49587c65740" name="gga01d1e713668a8ee48f1e34f428cea8d0a81ff4f8fef9e7133bee4d49587c65740"></a>L4VIRTIO_FEATURE_CMD_CONFIG&#160;</td><td class="fielddoc"><p>Status and queue config are set via cmd field instead of via IPC. </p>
</td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="virtio_8h_source.html#l00098">98</a> of file <a class="el" href="virtio_8h_source.html">virtio.h</a>.</p>
</div>
</div>
<a name="doc-func-members" id="doc-func-members"></a><h2 id="header-doc-func-members" class="groupheader">Function Documentation</h2>
<a id="ga96afc130bc89a48b91b2c9a7e924fd7d" name="ga96afc130bc89a48b91b2c9a7e924fd7d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga96afc130bc89a48b91b2c9a7e924fd7d">&#9670;&#160;</a></span>l4virtio_config_queue()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int l4virtio_config_queue </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a></td> <td class="paramname"><span class="paramname"><em>cap</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned</td> <td class="paramname"><span class="paramname"><em>queue</em></span>&#160;)</td>
</tr>
</table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">cap</td><td>Capability to the VIRTIO host.</td></tr>
</table>
</dd>
</dl>
<p>Trigger queue configuration of the given queue. </p>
<p>Usually all queues are configured when the status is written to running. However, in some cases queues shall be disabled or enabled dynamically, in this case this function triggers a reconfiguration from the shared memory register of the queue config.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">queue</td><td>Queue index for the queue to be configured.</td></tr>
</table>
</dd>
</dl>
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">0</td><td>on success. </td></tr>
<tr><td class="paramname">-L4_EIO</td><td>The queue's status is invalid. </td></tr>
<tr><td class="paramname">-L4_ERANGE</td><td>The queue index exceeds the number of queues. </td></tr>
<tr><td class="paramname">-L4_EINVAL</td><td>Otherwise. </td></tr>
</table>
</dd>
</dl>
<p class="reference">References <a class="el" href="arm_2l4_2sys_2linkage_8h_source.html#l00033">L4_CV</a>, and <a class="el" href="compiler_8h_source.html#l00161">L4_NOTHROW</a>.</p>
</div>
</div>
<a id="gaa63feff9b6fc10f3cd11e68da6511a4f" name="gaa63feff9b6fc10f3cd11e68da6511a4f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaa63feff9b6fc10f3cd11e68da6511a4f">&#9670;&#160;</a></span>l4virtio_config_queues()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__l4sys__defines.html#ga5f022ce5422df9cc6ed415e2bfc90f59">L4_BEGIN_DECLS</a> <a class="el" href="structl4virtio__config__queue__t.html">l4virtio_config_queue_t</a> * l4virtio_config_queues </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structl4virtio__config__hdr__t.html">l4virtio_config_hdr_t</a> const *</td> <td class="paramname"><span class="paramname"><em>cfg</em></span></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel inline">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Get the pointer to the first queue config. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">cfg</td><td>Pointer to the config header. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>pointer to queue config of queue 0. </dd></dl>
<p class="definition">Definition at line <a class="el" href="virtio_8h_source.html#l00252">252</a> of file <a class="el" href="virtio_8h_source.html">virtio.h</a>.</p>
<p class="reference">References <a class="el" href="virtio_8h_source.html#l00151">l4virtio_config_hdr_t::queues_offset</a>.</p>
</div>
</div>
<a id="gaa54e6e4ef7d8a9ae2ebf288e75aca8df" name="gaa54e6e4ef7d8a9ae2ebf288e75aca8df"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaa54e6e4ef7d8a9ae2ebf288e75aca8df">&#9670;&#160;</a></span>l4virtio_device_config()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void * l4virtio_device_config </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structl4virtio__config__hdr__t.html">l4virtio_config_hdr_t</a> const *</td> <td class="paramname"><span class="paramname"><em>cfg</em></span></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel inline">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Get the pointer to the device configuration. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">cfg</td><td>Pointer to the config header. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>pointer to device configuration structure. </dd></dl>
<p class="definition">Definition at line <a class="el" href="virtio_8h_source.html#l00263">263</a> of file <a class="el" href="virtio_8h_source.html">virtio.h</a>.</p>
</div>
</div>
<a id="ga9f7c8688033893f787027125f6422ad8" name="ga9f7c8688033893f787027125f6422ad8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga9f7c8688033893f787027125f6422ad8">&#9670;&#160;</a></span>l4virtio_device_config_ds()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int l4virtio_device_config_ds </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a></td> <td class="paramname"><span class="paramname"><em>cap</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a></td> <td class="paramname"><span class="paramname"><em>config_ds</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__l4__basic__types.html#ga4087b991c40c0d2fcde9ca331049a4d4">l4_addr_t</a> *</td> <td class="paramname"><span class="paramname"><em>ds_offset</em></span>&#160;)</td>
</tr>
</table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">cap</td><td>Capability to the L4-VIRTIO host</td></tr>
</table>
</dd>
</dl>
<p>Get the dataspace with the <a class="el" href="namespaceL4virtio.html" title="L4-VIRTIO Transport C++ API.">L4virtio</a> configuration page. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">config_ds</td><td>Capability for receiving the dataspace capability for the shared L4-VIRTIO config data space. </td></tr>
<tr><td class="paramname">ds_offset</td><td>Offset into the dataspace where the device configuration structure starts. </td></tr>
</table>
</dd>
</dl>
<p class="reference">References <a class="el" href="arm_2l4_2sys_2linkage_8h_source.html#l00033">L4_CV</a>, and <a class="el" href="compiler_8h_source.html#l00161">L4_NOTHROW</a>.</p>
</div>
</div>
<a id="ga1e34a8e5216ae325a51f11a68f3dc760" name="ga1e34a8e5216ae325a51f11a68f3dc760"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga1e34a8e5216ae325a51f11a68f3dc760">&#9670;&#160;</a></span>l4virtio_device_notification_irq()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int l4virtio_device_notification_irq </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a></td> <td class="paramname"><span class="paramname"><em>cap</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned</td> <td class="paramname"><span class="paramname"><em>index</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a></td> <td class="paramname"><span class="paramname"><em>irq</em></span>&#160;)</td>
</tr>
</table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">cap</td><td>Capability to the L4-VIRTIO host</td></tr>
</table>
</dd>
</dl>
<p>Get the notification interrupt corresponding to the given index. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir"></td><td class="paramname">index</td><td>Index of the interrupt. </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">irq</td><td>Triggerable for the given index.</td></tr>
</table>
</dd>
</dl>
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">L4_EOK</td><td>Success. </td></tr>
<tr><td class="paramname">L4_ENOSYS</td><td>IRQ notification not supported by device. </td></tr>
<tr><td class="paramname">&lt;0</td><td>Other error.</td></tr>
</table>
</dd>
</dl>
<p>An index is only guaranteed to return an IRQ object when the index is set in one of the device notify index fields. The device must return the same interrupt for a given index as long as the index is in use. If an index disappears as a result of a configuration change and then is reused later, the interrupt is not guaranteed to be the same.</p>
<p>Interrupts must always be rerequested after a device reset. </p>
<p class="reference">References <a class="el" href="compiler_8h_source.html#l00166">L4_END_DECLS</a>, and <a class="el" href="compiler_8h_source.html#l00161">L4_NOTHROW</a>.</p>
</div>
</div>
<a id="gac7b1a00cc07164eb51e0fa1599ee2c90" name="gac7b1a00cc07164eb51e0fa1599ee2c90"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gac7b1a00cc07164eb51e0fa1599ee2c90">&#9670;&#160;</a></span>l4virtio_register_ds()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int l4virtio_register_ds </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a></td> <td class="paramname"><span class="paramname"><em>cap</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a></td> <td class="paramname"><span class="paramname"><em>ds_cap</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__l4__basic__types.html#gaf3331c485014bd12a9e4f9d27a55e689">l4_uint64_t</a></td> <td class="paramname"><span class="paramname"><em>base</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a></td> <td class="paramname"><span class="paramname"><em>offset</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a></td> <td class="paramname"><span class="paramname"><em>size</em></span>&#160;)</td>
</tr>
</table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">cap</td><td>Capability to the VIRTIO host</td></tr>
</table>
</dd>
</dl>
<p>Register a shared data space with VIRTIO host. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">ds_cap</td><td>Dataspace capability to register. The lower 8 bits determine the rights mask with which the guest's rights are masked during the registration of the dataspace at the VIRTIO host. </td></tr>
<tr><td class="paramname">base</td><td>VIRTIO guest physical start address of shared memory region </td></tr>
<tr><td class="paramname">offset</td><td>Offset within the data space that is attached to the given <span class="tt">base</span> in the guest physical memory. </td></tr>
<tr><td class="paramname">size</td><td>Size of the memory region in the guest</td></tr>
</table>
</dd>
</dl>
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">L4_EOK</td><td>Operation successful. </td></tr>
<tr><td class="paramname">-L4_EINVAL</td><td>The <span class="tt">ds_cap</span> capability is invalid, does not refer to a valid dataspace, is not a trusted dataspace if trusted dataspace validation is enabled, or <span class="tt">size</span> and <span class="tt">offset</span> specify an invalid region. </td></tr>
<tr><td class="paramname">-L4_ENOMEM</td><td>The limit of dataspaces that can be registered has been reached or no capability slot could be allocated. </td></tr>
<tr><td class="paramname">-L4_ERANGE</td><td><span class="tt">offset</span> is lager than the size of the dataspace. </td></tr>
<tr><td class="paramname">&lt;0</td><td>Any error returned by the dataspace when queried for information during setup or any error returned by the region manager from attaching the dataspace. </td></tr>
</table>
</dd>
</dl>
<p class="reference">References <a class="el" href="arm_2l4_2sys_2linkage_8h_source.html#l00033">L4_CV</a>, and <a class="el" href="compiler_8h_source.html#l00161">L4_NOTHROW</a>.</p>
</div>
</div>
<a id="ga0cf50f73a4c4be6798e198610d2107db" name="ga0cf50f73a4c4be6798e198610d2107db"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga0cf50f73a4c4be6798e198610d2107db">&#9670;&#160;</a></span>l4virtio_set_status()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int l4virtio_set_status </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a></td> <td class="paramname"><span class="paramname"><em>cap</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned</td> <td class="paramname"><span class="paramname"><em>status</em></span>&#160;)</td>
</tr>
</table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">cap</td><td>Capability to the VIRTIO host</td></tr>
</table>
</dd>
</dl>
<p>Write the VIRTIO status register. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">status</td><td>Status word to write to the VIRTIO status.</td></tr>
</table>
</dd>
</dl>
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">0</td><td>on success.</td></tr>
</table>
</dd>
</dl>
<dl class="section note"><dt>Note</dt><dd>All other registers are accessed via shared memory. </dd></dl>
<p class="reference">References <a class="el" href="arm_2l4_2sys_2linkage_8h_source.html#l00033">L4_CV</a>, and <a class="el" href="compiler_8h_source.html#l00161">L4_NOTHROW</a>.</p>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- HTML footer for doxygen 1.9.1-->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated on <span class="timestamp"></span> for L4Re Operating System Framework by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.15.0 </li>
</ul>
</div>
</body>
</html>