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

407
doc/source/html/io.html Normal file
View File

@@ -0,0 +1,407 @@
<!-- 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: Io, the Io Server</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('io.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><div class="header">
<div class="headertitle"><div class="title">Io, the Io Server </div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>The Io server handles all platform devices and resources such as I/O memory, ports (on x86) and interrupts, and grants access to those to clients.</p>
<p>Upon startup Io discovers all platform devices using available means on the system, e.g. on x86 the PCI bus is scanned and the ACPI subsystem initialised. Available I/O resource can also be configured via configuration scripts.</p>
<p>Io's configuration consists of two parts:</p><ul>
<li>the description of the real hardware</li>
<li>the description of virtual buses</li>
</ul>
<p>Both descriptions represent a hierarchical (tree) structure of device nodes. Where each device has a set of resources attached to it. And a device that has child devices can be considered a bus.</p>
<h2>Hardware Description </h2>
<p>The hardware description represents the devices that are available on the particular platform including their resource descriptions, such as MMIO regions, IO-Port regions, IRQs, bus numbers etc.</p>
<p>The root of the hardware devices is formed by a system bus device (accessible in the configuration via Io.system_bus()). As mentioned before, platforms that support methods for device discovery may populate the hardware description automatically, for example from ACPI. On platforms that do not have support for such methods you have to specify the hardware description by hand. A simple example for this is <span class="tt">x86-legacy.devs</span>.</p>
<h2>Virtual Bus Description<a class="anchor" id="vbus_desc"></a></h2>
<p>Each Io server client is provided with its own virtual bus which it can iterate to find devices. A virtual PCI bus may be a part of this virtual bus.</p>
<div class="image">
<img src="io-overview.png" alt=""/>
<div class="caption">
IO Service Architecture Overview</div></div>
<p>The Io server must be configured to create virtual buses for its clients.</p>
<p>This is done with at least one configuration file specifying static resources as well as virtual buses for clients. The configuration may be split across several configuration files passed to Io through the command line.</p>
<p>To allow clients access to available devices, a virtual system bus needs to be created that lists the devices and their resources that should be available to that client. The names of the buses correspond to the capabilities given to Io in its launch configuration.</p>
<p>A very simple configuration for Io could look like this:</p>
<div class="fragment"><div class="line">-- vim:ft=lua</div>
<div class="line">-- Example configuration for io</div>
<div class="line"> </div>
<div class="line">-- Configure two platform devices to be known to io</div>
<div class="line">Io.Dt.add_children(Io.system_bus(), function()</div>
<div class="line"> </div>
<div class="line"> -- create a new hardware device called &quot;FOODEVICE&quot;</div>
<div class="line"> FOODEVICE = Io.Hw.Device(function()</div>
<div class="line"> -- set the compatibility IDs for this device</div>
<div class="line"> -- a client tries to match against these IDs and configures</div>
<div class="line"> -- itself accordingly</div>
<div class="line"> -- the list should be sorted from specific to less specific IDs</div>
<div class="line"> compatible = {&quot;dev-foo,mmio&quot;, &quot;dev-foo&quot;};</div>
<div class="line"> </div>
<div class="line"> -- set the &#39;hid&#39; property of the device, the hid can also be used</div>
<div class="line"> -- as a compatible ID when matching clients</div>
<div class="line"> Property.hid = &quot;dev-foo,Example&quot;;</div>
<div class="line"> </div>
<div class="line"> -- note: names for resources are truncated to 4 letters and a client</div>
<div class="line"> -- can determine the name from the ID field of a l4vbus_resource_t</div>
<div class="line"> -- add two resources &#39;irq0&#39; and &#39;reg0&#39; to the device</div>
<div class="line"> Resource.irq0 = Io.Res.irq(17);</div>
<div class="line"> Resource.reg0 = Io.Res.mmio(0x6f000000, 0x6f007fff);</div>
<div class="line"> end);</div>
<div class="line"> </div>
<div class="line"> -- create a new hardware device called &quot;BARDEVICE&quot;</div>
<div class="line"> BARDEVICE = Io.Hw.Device(function()</div>
<div class="line"> -- set the compatibility IDs for this device</div>
<div class="line"> -- a client tries to match against these IDs and configures</div>
<div class="line"> -- itself accordingly</div>
<div class="line"> -- the list should be sorted from specific to less specific IDs</div>
<div class="line"> compatible = {&quot;dev-bar,mmio&quot;, &quot;dev-bar&quot;};</div>
<div class="line"> </div>
<div class="line"> -- set the &#39;hid&#39; property of the device, the hid can also be used</div>
<div class="line"> -- as a compatible ID when matching clients</div>
<div class="line"> Property.hid = &quot;dev-bar,Example&quot;;</div>
<div class="line"> </div>
<div class="line"> -- Specify that this device is able to use direct memory access (DMA).</div>
<div class="line"> -- This is needed to allow clients to gain access to DMA addresses</div>
<div class="line"> -- used by this device to directly access memory.</div>
<div class="line"> Property.flags = Io.Hw_device_DF_dma_supported;</div>
<div class="line"> </div>
<div class="line"> -- note: names for resources are truncated to 4 letters and a client</div>
<div class="line"> -- can determine the name from the ID field of a l4vbus_resource_t</div>
<div class="line"> -- add three resources &#39;irq0&#39;, &#39;irq1&#39;, and &#39;reg0&#39; to the device</div>
<div class="line"> Resource.irq0 = Io.Res.irq(19);</div>
<div class="line"> Resource.irq1 = Io.Res.irq(20);</div>
<div class="line"> Resource.reg0 = Io.Res.mmio(0x6f100000, 0x6f100fff);</div>
<div class="line"> end);</div>
<div class="line">end);</div>
<div class="line"> </div>
<div class="line"> </div>
<div class="line">Io.add_vbusses</div>
<div class="line">{</div>
<div class="line">-- Create a virtual bus for a client and give access to FOODEVICE</div>
<div class="line"> client1 = Io.Vi.System_bus(function ()</div>
<div class="line"> dev = wrap(Io.system_bus():match(&quot;dev-foo,mmio&quot;));</div>
<div class="line"> end);</div>
<div class="line"> </div>
<div class="line">-- Create a virtual bus for another client and give it access to BARDEVICE</div>
<div class="line"> client2 = Io.Vi.System_bus(function ()</div>
<div class="line"> dev = wrap(Io.system_bus():match(&quot;dev-bar,Example&quot;));</div>
<div class="line"> end);</div>
<div class="line">}</div>
</div><!-- fragment --><p>Each device supports a 'compatible' property. It is a list of compatibility strings. A client matches itself against one (or multiple) compatibility IDs and configures itself accordingly. All other device members are handled according to their type. If the type is a resource (Io.Res) it is added as a named resource. Note that resource names are truncated to 4 letters and are stored in the ID field of a <a class="el" href="structl4vbus__resource__t.html" title="Description of a single vbus resource.">l4vbus_resource_t</a>. If the type is a device it is added as a child device to the current one. All other types are treated as a device property which can be used to configure a device driver. Right now, device properties are internal to Io only.</p>
<h2>Matching and Assigning PCI Devices </h2>
<p>Assigning clients PCI devices could look like this:</p>
<div class="fragment"><div class="line">-- This is a configuration snippet for PCI device selection</div>
<div class="line"> </div>
<div class="line">local hw = Io.system_bus();</div>
<div class="line"> </div>
<div class="line">Io.add_vbusses</div>
<div class="line">{</div>
<div class="line"> pciclient = Io.Vi.System_bus(function ()</div>
<div class="line"> PCI = Io.Vi.PCI_bus(function ()</div>
<div class="line"> pci_mm = wrap(hw:match(&quot;PCI/CC_04&quot;));</div>
<div class="line"> pci_net = wrap(hw:match(&quot;PCI/CC_02&quot;));</div>
<div class="line"> pci_storage = wrap(hw:match(&quot;PCI/CC_01&quot;));</div>
<div class="line"> end)</div>
<div class="line"> end)</div>
<div class="line">}</div>
</div><!-- fragment --><p>The "PCI/" is followed by a bus-specific ID string. The format of the PCI ID string may be one of the following:</p><ul>
<li>PCI/CC_cc</li>
<li>PCI/CC_ccss</li>
<li>PCI/CC_ccsspp</li>
<li>PCI/VEN_vvvv</li>
<li>PCI/DEV_dddd</li>
<li>PCI/SUBSYS_ssssssss</li>
<li>PCI/REV_rr</li>
<li>PCI/ADR_xxxx:xx:xx.x</li>
</ul>
<p>Where:</p><ul>
<li><span class="tt">cc</span> is the hexadecimal representation of the class code byte</li>
<li><span class="tt">ss</span> is the hexadecimal representation of the subclass code byte</li>
<li><span class="tt">pp</span> is the hexadecimal representation of the programming interface byte</li>
<li><span class="tt">vvvv</span> is the hexadecimal representation of the vendor ID</li>
<li><span class="tt">dddd</span> is the hexadecimal representation of the device ID</li>
<li><span class="tt">ssssssss</span> is the hexadecimal representation of the subsystem ID</li>
<li><span class="tt">rr</span> is the hexadecimal representation of the revision byte</li>
<li><span class="tt">xxxx:xx:xx.x</span> is the bus address in PCI nomenclature</li>
</ul>
<p>As a special extension Io supports replacing the ID string with a human-readable common PCI class name. The following table gives an overview of the names known to Io and their respective PCI class and subclass.</p>
<table class="markdownTable">
<tr class="markdownTableHead">
<th class="markdownTableHeadNone">Common Name </th><th class="markdownTableHeadNone">Description </th><th class="markdownTableHeadNone">PCI ID string </th></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">storage </td><td class="markdownTableBodyNone">Mass storage controller </td><td class="markdownTableBodyNone">CC_01 </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone">scsi </td><td class="markdownTableBodyNone">SCSI storage controller </td><td class="markdownTableBodyNone">CC_0100 </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">ide </td><td class="markdownTableBodyNone">IDE interface </td><td class="markdownTableBodyNone">CC_0101 </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone">floppy </td><td class="markdownTableBodyNone">Floppy disk controller </td><td class="markdownTableBodyNone">CC_0102 </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">raid </td><td class="markdownTableBodyNone">RAID bus controller </td><td class="markdownTableBodyNone">CC_0104 </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone">ata </td><td class="markdownTableBodyNone">ATA controller </td><td class="markdownTableBodyNone">CC_0105 </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">sata </td><td class="markdownTableBodyNone">SATA controller </td><td class="markdownTableBodyNone">CC_0106 </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone">sas </td><td class="markdownTableBodyNone">Serial attached SCSI controller </td><td class="markdownTableBodyNone">CC_0107 </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">nvm </td><td class="markdownTableBodyNone">Non-volatile memory controller </td><td class="markdownTableBodyNone">CC_0108 </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone">- </td><td class="markdownTableBodyNone">- </td><td class="markdownTableBodyNone">- </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">network </td><td class="markdownTableBodyNone">Network controller </td><td class="markdownTableBodyNone">CC_02 </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone">ethernet </td><td class="markdownTableBodyNone">Ethernet controller </td><td class="markdownTableBodyNone">CC_0200 </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">token_ring </td><td class="markdownTableBodyNone">Token ring network controller </td><td class="markdownTableBodyNone">CC_0201 </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone">fddi </td><td class="markdownTableBodyNone">FDDI network controller </td><td class="markdownTableBodyNone">CC_0202 </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">atm </td><td class="markdownTableBodyNone">ATM network controller </td><td class="markdownTableBodyNone">CC_0203 </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone">isdn </td><td class="markdownTableBodyNone">ISDN controller </td><td class="markdownTableBodyNone">CC_0204 </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">picmg </td><td class="markdownTableBodyNone">PICMG controller </td><td class="markdownTableBodyNone">CC_0206 </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone">net_infiniband </td><td class="markdownTableBodyNone">Infiniband controller </td><td class="markdownTableBodyNone">CC_0207 </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">fabric </td><td class="markdownTableBodyNone">Fabric controller </td><td class="markdownTableBodyNone">CC_0208 </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone">network_nw </td><td class="markdownTableBodyNone">Network controller e.g. Wifi </td><td class="markdownTableBodyNone">CC_0280 </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">- </td><td class="markdownTableBodyNone">- </td><td class="markdownTableBodyNone">- </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone">display </td><td class="markdownTableBodyNone">Display controller </td><td class="markdownTableBodyNone">CC_03 </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">vga </td><td class="markdownTableBodyNone">VGA compatible controller </td><td class="markdownTableBodyNone">CC_0300 </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone">xga </td><td class="markdownTableBodyNone">XGA compatible controller </td><td class="markdownTableBodyNone">CC_0301 </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">- </td><td class="markdownTableBodyNone">- </td><td class="markdownTableBodyNone">- </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone">media </td><td class="markdownTableBodyNone">Multimedia controller </td><td class="markdownTableBodyNone">CC_04 </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">mm_video </td><td class="markdownTableBodyNone">Multimedia video controller </td><td class="markdownTableBodyNone">CC_0400 </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone">mm_audio </td><td class="markdownTableBodyNone">Multimedia audio controller </td><td class="markdownTableBodyNone">CC_0401 </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">telephony </td><td class="markdownTableBodyNone">Computer telephony device </td><td class="markdownTableBodyNone">CC_0402 </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone">audio </td><td class="markdownTableBodyNone">Audio device </td><td class="markdownTableBodyNone">CC_0403 </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">- </td><td class="markdownTableBodyNone">- </td><td class="markdownTableBodyNone">- </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone">bridge </td><td class="markdownTableBodyNone">Bridge </td><td class="markdownTableBodyNone">CC_06 </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">br_host </td><td class="markdownTableBodyNone">Host bridge </td><td class="markdownTableBodyNone">CC_0600 </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone">br_isa </td><td class="markdownTableBodyNone">ISA bridge </td><td class="markdownTableBodyNone">CC_0601 </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">br_eisa </td><td class="markdownTableBodyNone">EISA bridge </td><td class="markdownTableBodyNone">CC_0602 </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone">br_microchannel </td><td class="markdownTableBodyNone">MicroChannel bridge </td><td class="markdownTableBodyNone">CC_0603 </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">br_pci </td><td class="markdownTableBodyNone">PCI bridge </td><td class="markdownTableBodyNone">CC_0604 </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone">br_pcmcia </td><td class="markdownTableBodyNone">PCMCIA bridge </td><td class="markdownTableBodyNone">CC_0605 </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">br_nubus </td><td class="markdownTableBodyNone">NuBus bridge </td><td class="markdownTableBodyNone">CC_0606 </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone">br_cardbus </td><td class="markdownTableBodyNone">CardBus bridge </td><td class="markdownTableBodyNone">CC_0607 </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">br_raceway </td><td class="markdownTableBodyNone">RACEway bridge </td><td class="markdownTableBodyNone">CC_0608 </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone">br_semi_pci </td><td class="markdownTableBodyNone">Semi-transparent PCI-to-PCI bridge </td><td class="markdownTableBodyNone">CC_0609 </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">br_infiniband_to_pci </td><td class="markdownTableBodyNone">InfiniBand to PCI host bridge </td><td class="markdownTableBodyNone">CC_060a </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone">- </td><td class="markdownTableBodyNone">- </td><td class="markdownTableBodyNone">- </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">com </td><td class="markdownTableBodyNone">Communication controller </td><td class="markdownTableBodyNone">CC_07 </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone">com_serial </td><td class="markdownTableBodyNone">Serial controller </td><td class="markdownTableBodyNone">CC_0700 </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">com_parallel </td><td class="markdownTableBodyNone">Parallel controller </td><td class="markdownTableBodyNone">CC_0701 </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone">com_multiport_ser </td><td class="markdownTableBodyNone">Multiport serial controller </td><td class="markdownTableBodyNone">CC_0702 </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">com_modem </td><td class="markdownTableBodyNone">Modem </td><td class="markdownTableBodyNone">CC_0703 </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone">com_gpib </td><td class="markdownTableBodyNone">GPIB controller </td><td class="markdownTableBodyNone">CC_0704 </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">com_smart_card </td><td class="markdownTableBodyNone">Smart card controller </td><td class="markdownTableBodyNone">CC_0705 </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone">- </td><td class="markdownTableBodyNone">- </td><td class="markdownTableBodyNone">- </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">serial_bus </td><td class="markdownTableBodyNone">Serial bus controller </td><td class="markdownTableBodyNone">CC_0c </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone">firewire </td><td class="markdownTableBodyNone">FireWire (IEEE 1394) </td><td class="markdownTableBodyNone">CC_0c00 </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">access_bus </td><td class="markdownTableBodyNone">ACCESS bus </td><td class="markdownTableBodyNone">CC_0c01 </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone">ssa </td><td class="markdownTableBodyNone">SSA </td><td class="markdownTableBodyNone">CC_0c02 </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">usb </td><td class="markdownTableBodyNone">USB controller </td><td class="markdownTableBodyNone">CC_0c03 </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone">fibre_channel </td><td class="markdownTableBodyNone">Fibre channel </td><td class="markdownTableBodyNone">CC_0c04 </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">smbus </td><td class="markdownTableBodyNone">SMBus </td><td class="markdownTableBodyNone">CC_0c05 </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone">bus_infiniband </td><td class="markdownTableBodyNone">InfiniBand </td><td class="markdownTableBodyNone">CC_0c06 </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">ipmi_smic </td><td class="markdownTableBodyNone">IPMI SMIC interface </td><td class="markdownTableBodyNone">CC_0c07 </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone">sercos </td><td class="markdownTableBodyNone">SERCOS interface </td><td class="markdownTableBodyNone">CC_0c08 </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">canbus </td><td class="markdownTableBodyNone">CAN bus </td><td class="markdownTableBodyNone">CC_0c09 </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone">- </td><td class="markdownTableBodyNone">- </td><td class="markdownTableBodyNone">- </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">wireless </td><td class="markdownTableBodyNone">Wireless controller </td><td class="markdownTableBodyNone">CC_0d </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone">bluetooth </td><td class="markdownTableBodyNone">Bluetooth </td><td class="markdownTableBodyNone">CC_0d11 </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">w_8021a </td><td class="markdownTableBodyNone">802.1a controller </td><td class="markdownTableBodyNone">CC_0d20 </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone">w_8021b </td><td class="markdownTableBodyNone">802.1b controller </td><td class="markdownTableBodyNone">CC_0d21 </td></tr>
</table>
<h3>Strong Matching of PCI Devices</h3>
<p>If more specific matching of PCI devices is required it is possible to concatenate multiple ID strings using <span class="tt">&amp;</span>. An example where a specific device from a specific vendor at a fixed bus address is matched would use the string <span class="tt">PCI/VEN_vvvv&amp;DEV_dddd&amp;ADR_xxxx:xx:xx.x</span>.</p>
<h3>Isolation of PCIe devices</h3>
<p>PCIe encodes device communication with a network-like protocol with destination headers and packet fragmentation allowing a devices to talk directly to other devices. This potentially works against security boundaries for a system. E.g. two network cards could exchange packets and thereby leak information from one security domain to the other without involvement of the OS.</p>
<p>PCIe introduced an optional capability named PCI Access Control Services (PCI/ACS) to control communication between PCIe devices.</p>
<p>With PCI/ACS it is possible to restrict inter-device communication between PCIe devices.</p>
<p>PCI/ACS is optional and for Intel chipsets, it is usually only implemented on high-end PCI platform controller hubs (PCHs), and is missing on low-end and mobile PCHs. On some Intel-PCHs there exist facilities that allow for similar isolation.</p>
<p>If IO encounters a supported PCH, it will enable those facilities in order to enforce device isolation.</p>
<h2>Command Line Options </h2>
<p>The Io Server supports the following optional parameters: </p><pre class="fragment">[--verbose|v] [--transparent-msi] [--trace &lt;trace_mask&gt;] [--acpi-debug-level &lt;debug_level&gt;] [config_files]
</pre><ul>
<li><p class="startli"><b>verbose|v</b></p>
<p class="startli">By default, error debug messages are enabled. This option increments the verboseness level, and can be applied multiple times to reach the desired debug level. The available debug levels are ordered as: <span class="tt">DBG_ERR</span> (default, level 1), <span class="tt">DBG_WARN</span>, <span class="tt">DBG_INFO</span>, <span class="tt">DBG_DEBUG</span>, <span class="tt">DBG_DEBUG2</span> and <span class="tt">DBG_ALL</span> (level 6).</p>
</li>
<li><p class="startli"><b>transparent-msi</b></p>
<p class="startli">Enable MSI on PCI devices which support this feature. This is transparent to clients, as there are no changes in the API used to interact with PCI device via interrupts.</p>
</li>
<li><p class="startli"><b>acpi-debug-level &lt;level_mask&gt;</b></p>
<p class="startli">Set the ACPI debug level. The <span class="tt">&lt;level_mask&gt;</span> is a mask that selects components of interest for debugging. It can be constructed from the ACPI debug constants defined in the linux kernel, see <a href="https://www.kernel.org/doc/html/latest/firmware-guide/acpi/debug.html" target="_blank">ACPI Debug Output</a> for details. By default, the ACPI debug level is set to <span class="tt">ACPI_LV_INIT | ACPI_LV_TABLES | ACPI_LV_VERBOSE_INFO</span>.</p>
</li>
<li><p class="startli"><b>trace &lt;trace_mask&gt;</b></p>
<p class="startli">Enable tracing of events matching <span class="tt">trace_mask</span>. The only supported trace mask is <span class="tt">1</span> and this matches ACPI events.</p>
</li>
<li><p class="startli"><b>config_files</b></p>
<p class="startli">Space separated list of Lua configuration files specifying real hardware and virtual buses. See example on <a class="el" href="#vbus_desc">Virtual Bus Description</a>. </p>
</li>
</ul>
</div></div><!-- contents -->
</div><!-- PageDoc -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- HTML footer for doxygen 1.9.1-->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a href="l4re_servers.html">L4Re Servers</a></li>
<li class="footer">Generated on <span class="timestamp"></span> for L4Re Operating System Framework by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.15.0 </li>
</ul>
</div>
</body>
</html>