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

980 lines
76 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: IRQs</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="doxygen-awesome.css" rel="stylesheet" type="text/css"/>
<link href="l4re-awesome.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="L4Re_rgb_logo_quer_hg_h55.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">L4Re Operating System Framework
</div>
<div id="projectbrief">Interface and Usage Documentation</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.15.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(function(){initNavTree('group__l4__irq__api.html','',''); });
</script>
<div id="container">
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="headertitle"><div class="title">IRQs <div class="ingroups"><a class="el" href="group__l4__api.html">Base API</a> &raquo; <a class="el" href="group__l4__kernel__object__api.html">Kernel Objects</a></div></div></div>
</div><!--header-->
<div class="contents">
<p>C IRQ interface, see <a class="el" href="classL4_1_1Irq.html" title="C++ Irq interface, see IRQs for the C interface.">L4::Irq</a> for the C++ interface.
<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 IRQs:</div>
<div id="dynsection-0-summary" class="dynsummary" style="display:block;">
</div>
<div id="dynsection-0-content" class="dyncontent" style="display:none;">
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="group__l4__irq__api.svg" width="227" height="36"><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-enum-members" class="groupheader"><a id="enum-members" name="enum-members"></a>
Enumerations</h2></td></tr>
<tr class="memitem:gac862068761c98665b621f946aecef120" id="r_gac862068761c98665b621f946aecef120"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#gac862068761c98665b621f946aecef120">L4_irq_mode</a> { <br />
&#160;&#160;<a class="el" href="#ggac862068761c98665b621f946aecef120ad97671d7c71ffadef2eebd80fb54eb36">L4_IRQ_F_NONE</a> = 0
, <a class="el" href="#ggac862068761c98665b621f946aecef120a5d35035a0a828bc5a4621794b8b78279">L4_IRQ_F_SET_MODE</a> = 0x1
, <a class="el" href="#ggac862068761c98665b621f946aecef120a2cae3ce7133ab5fe3edef86febdfe85c">L4_IRQ_F_LEVEL</a> = 0x2
, <a class="el" href="#ggac862068761c98665b621f946aecef120ac2d781c73b8d8e2287d64d527dc291f0">L4_IRQ_F_EDGE</a> = 0x0
, <br />
&#160;&#160;<a class="el" href="#ggac862068761c98665b621f946aecef120ae0c23c9a2dfaf04327596aa0c5f8154c">L4_IRQ_F_POS</a> = 0x0
, <a class="el" href="#ggac862068761c98665b621f946aecef120afeafdd159bd50fb1c2b28dc6ea12fc80">L4_IRQ_F_NEG</a> = 0x4
, <a class="el" href="#ggac862068761c98665b621f946aecef120a3f7d507fc39426a62ba3bc961eaf13c2">L4_IRQ_F_BOTH</a> = 0x8
, <a class="el" href="#ggac862068761c98665b621f946aecef120a657ed8ffc16c46edeae57740c51d637e">L4_IRQ_F_LEVEL_HIGH</a> = L4_IRQ_F_SET_MODE | L4_IRQ_F_LEVEL | L4_IRQ_F_POS
, <br />
&#160;&#160;<a class="el" href="#ggac862068761c98665b621f946aecef120af518c46b3c5c6b94626f09ddc20941fc">L4_IRQ_F_LEVEL_LOW</a> = L4_IRQ_F_SET_MODE | L4_IRQ_F_LEVEL | L4_IRQ_F_NEG
, <a class="el" href="#ggac862068761c98665b621f946aecef120aa3f2311b782cf60324c8be13f050c81d">L4_IRQ_F_POS_EDGE</a> = L4_IRQ_F_SET_MODE | L4_IRQ_F_EDGE | L4_IRQ_F_POS
, <a class="el" href="#ggac862068761c98665b621f946aecef120a37c72a6d57befe05d97eca3ef200c9fc">L4_IRQ_F_NEG_EDGE</a> = L4_IRQ_F_SET_MODE | L4_IRQ_F_EDGE | L4_IRQ_F_NEG
, <a class="el" href="#ggac862068761c98665b621f946aecef120a8766b7f12e588df7328357795dccabbe">L4_IRQ_F_BOTH_EDGE</a> = L4_IRQ_F_SET_MODE | L4_IRQ_F_EDGE | L4_IRQ_F_BOTH
, <br />
&#160;&#160;<a class="el" href="#ggac862068761c98665b621f946aecef120a0a65484f81a88de7849285775b10f397">L4_IRQ_F_MASK</a> = 0xf
, <a class="el" href="#ggac862068761c98665b621f946aecef120a6003c23692c0ebf83c85891e3e44482b">L4_IRQ_F_SET_WAKEUP</a> = 0x10
, <a class="el" href="#ggac862068761c98665b621f946aecef120a478b4f3d492228c84aa3c7959501133a">L4_IRQ_F_CLEAR_WAKEUP</a> = 0x20
<br />
}</td></tr>
<tr class="memdesc:gac862068761c98665b621f946aecef120"><td class="mdescLeft">&#160;</td><td class="mdescRight">Interrupt attributes. <a href="#gac862068761c98665b621f946aecef120">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:ga1d9b0812f3bc01d6d5ff7010df231e56" id="r_ga1d9b0812f3bc01d6d5ff7010df231e56"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga1d9b0812f3bc01d6d5ff7010df231e56">l4_irq_detach</a> (<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>
<tr class="memdesc:ga1d9b0812f3bc01d6d5ff7010df231e56"><td class="mdescLeft">&#160;</td><td class="mdescRight">Detach from an interrupt source. <br /></td></tr>
<tr class="memitem:ga52ad27a5a0d6a21bc7449a69a820db71" id="r_ga52ad27a5a0d6a21bc7449a69a820db71"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga52ad27a5a0d6a21bc7449a69a820db71">l4_irq_detach_u</a> (<a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a> irq, <a class="el" href="group__l4__utcb__api.html#ga89be8a86d11c1d532b636cc2df1330fb">l4_utcb_t</a> *utcb) <a class="el" href="group__l4sys__defines.html#ga362dfa378e662dd04f710a23fc7ea931">L4_NOTHROW</a></td></tr>
<tr class="memdesc:ga52ad27a5a0d6a21bc7449a69a820db71"><td class="mdescLeft">&#160;</td><td class="mdescRight">Detach from this interrupt. <br /></td></tr>
<tr class="memitem:gab0e8143bf2fc59bccaab2941026b698c" id="r_gab0e8143bf2fc59bccaab2941026b698c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#gab0e8143bf2fc59bccaab2941026b698c">l4_irq_bind_vcpu</a> (<a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a> irq, <a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a> thread, <a class="el" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a> cfg) <a class="el" href="group__l4sys__defines.html#ga362dfa378e662dd04f710a23fc7ea931">L4_NOTHROW</a></td></tr>
<tr class="memdesc:gab0e8143bf2fc59bccaab2941026b698c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Bind a thread to this Irq for vCPU interrupt forwarding. <br /></td></tr>
<tr class="memitem:ga3e8a49d0eef3b31d977de724ef8071f4" id="r_ga3e8a49d0eef3b31d977de724ef8071f4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga3e8a49d0eef3b31d977de724ef8071f4">l4_irq_bind_vcpu_u</a> (<a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a> irq, <a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a> thread, <a class="el" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a> cfg, <a class="el" href="group__l4__utcb__api.html#ga89be8a86d11c1d532b636cc2df1330fb">l4_utcb_t</a> *utcb) <a class="el" href="group__l4sys__defines.html#ga362dfa378e662dd04f710a23fc7ea931">L4_NOTHROW</a></td></tr>
<tr class="memdesc:ga3e8a49d0eef3b31d977de724ef8071f4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Bind a thread to this Irq for vCPU interrupt forwarding. <br /></td></tr>
<tr class="memitem:gab24e0fc21a207fd566ece1e6fafbac48" id="r_gab24e0fc21a207fd566ece1e6fafbac48"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#gab24e0fc21a207fd566ece1e6fafbac48">l4_irq_trigger</a> (<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>
<tr class="memdesc:gab24e0fc21a207fd566ece1e6fafbac48"><td class="mdescLeft">&#160;</td><td class="mdescRight">Trigger an IRQ. <br /></td></tr>
<tr class="memitem:ga180cfaf342ce9ff484a6aa7c276e1597" id="r_ga180cfaf342ce9ff484a6aa7c276e1597"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga180cfaf342ce9ff484a6aa7c276e1597">l4_irq_trigger_u</a> (<a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a> irq, <a class="el" href="group__l4__utcb__api.html#ga89be8a86d11c1d532b636cc2df1330fb">l4_utcb_t</a> *utcb) <a class="el" href="group__l4sys__defines.html#ga362dfa378e662dd04f710a23fc7ea931">L4_NOTHROW</a></td></tr>
<tr class="memdesc:ga180cfaf342ce9ff484a6aa7c276e1597"><td class="mdescLeft">&#160;</td><td class="mdescRight">Trigger the object. <br /></td></tr>
<tr class="memitem:ga997f18b89d6235214d2f9c381ed6c6a5" id="r_ga997f18b89d6235214d2f9c381ed6c6a5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga997f18b89d6235214d2f9c381ed6c6a5">l4_irq_receive</a> (<a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a> irq, <a class="el" href="unionl4__timeout__t.html">l4_timeout_t</a> to) <a class="el" href="group__l4sys__defines.html#ga362dfa378e662dd04f710a23fc7ea931">L4_NOTHROW</a></td></tr>
<tr class="memdesc:ga997f18b89d6235214d2f9c381ed6c6a5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Unmask and wait for specified IRQ. <br /></td></tr>
<tr class="memitem:ga430999e1f8f6eb5f7e3f957b854b7446" id="r_ga430999e1f8f6eb5f7e3f957b854b7446"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga430999e1f8f6eb5f7e3f957b854b7446">l4_irq_receive_u</a> (<a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a> irq, <a class="el" href="unionl4__timeout__t.html">l4_timeout_t</a> timeout, <a class="el" href="group__l4__utcb__api.html#ga89be8a86d11c1d532b636cc2df1330fb">l4_utcb_t</a> *utcb) <a class="el" href="group__l4sys__defines.html#ga362dfa378e662dd04f710a23fc7ea931">L4_NOTHROW</a></td></tr>
<tr class="memdesc:ga430999e1f8f6eb5f7e3f957b854b7446"><td class="mdescLeft">&#160;</td><td class="mdescRight">Unmask and wait for this IRQ. <br /></td></tr>
<tr class="memitem:gaa9151a0a16974ccc5685965fdee62b02" id="r_gaa9151a0a16974ccc5685965fdee62b02"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#gaa9151a0a16974ccc5685965fdee62b02">l4_irq_wait</a> (<a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a> irq, <a class="el" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a> *label, <a class="el" href="unionl4__timeout__t.html">l4_timeout_t</a> to) <a class="el" href="group__l4sys__defines.html#ga362dfa378e662dd04f710a23fc7ea931">L4_NOTHROW</a></td></tr>
<tr class="memdesc:gaa9151a0a16974ccc5685965fdee62b02"><td class="mdescLeft">&#160;</td><td class="mdescRight">Unmask IRQ and wait for any message. <br /></td></tr>
<tr class="memitem:ga1690f577bd2896ec9b1e5a24d00af874" id="r_ga1690f577bd2896ec9b1e5a24d00af874"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga1690f577bd2896ec9b1e5a24d00af874">l4_irq_wait_u</a> (<a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a> irq, <a class="el" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a> *label, <a class="el" href="unionl4__timeout__t.html">l4_timeout_t</a> timeout, <a class="el" href="group__l4__utcb__api.html#ga89be8a86d11c1d532b636cc2df1330fb">l4_utcb_t</a> *utcb) <a class="el" href="group__l4sys__defines.html#ga362dfa378e662dd04f710a23fc7ea931">L4_NOTHROW</a></td></tr>
<tr class="memdesc:ga1690f577bd2896ec9b1e5a24d00af874"><td class="mdescLeft">&#160;</td><td class="mdescRight">Unmask IRQ and (open) wait for any message. <br /></td></tr>
<tr class="memitem:ga213b7c4fe4d690ec2aec84fd226883c4" id="r_ga213b7c4fe4d690ec2aec84fd226883c4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga213b7c4fe4d690ec2aec84fd226883c4">l4_irq_unmask</a> (<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>
<tr class="memdesc:ga213b7c4fe4d690ec2aec84fd226883c4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Unmask IRQ. <br /></td></tr>
<tr class="memitem:ga1dd27341b8d2a6cd09e9784188109b7c" id="r_ga1dd27341b8d2a6cd09e9784188109b7c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ga1dd27341b8d2a6cd09e9784188109b7c">l4_irq_unmask_u</a> (<a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a> irq, <a class="el" href="group__l4__utcb__api.html#ga89be8a86d11c1d532b636cc2df1330fb">l4_utcb_t</a> *utcb) <a class="el" href="group__l4sys__defines.html#ga362dfa378e662dd04f710a23fc7ea931">L4_NOTHROW</a></td></tr>
<tr class="memdesc:ga1dd27341b8d2a6cd09e9784188109b7c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Unmask this IRQ. <br /></td></tr>
</table>
<a name="details" id="details"></a><h2 id="header-details" class="groupheader">Detailed Description</h2>
<p>C IRQ interface, see <a class="el" href="classL4_1_1Irq.html" title="C++ Irq interface, see IRQs for the C interface.">L4::Irq</a> for the C++ interface. </p>
<p>The IRQ interface provides access to abstract interrupts provided by the microkernel. Interrupts may be</p><ul>
<li>hardware interrupts provided by the platform interrupt controller,</li>
<li>virtual device interrupts provided by the microkernel's virtual devices (virtual serial or trace buffer) or</li>
<li>virtual interrupts that can be triggered by user programs (IRQs) via <a class="el" href="#gab24e0fc21a207fd566ece1e6fafbac48" title="Trigger an IRQ.">l4_irq_trigger()</a>.</li>
</ul>
<p>For hardware and virtual device interrupts the Irq object must be bound to an interrupt source, see <a class="el" href="group__l4__icu__api.html">Interrupt controller</a>. To receive interrupts, the Irq object must be bound to a thread, see <a class="el" href="group__l4__kernel__object__gate__api.html#gad3ab8fc6f519189a50d8b25b0c9ea3e6" title="Bind the IPC receive endpoint to a thread.">l4_rcv_ep_bind_thread()</a> and <a class="el" href="group__l4__kernel__object__gate__api.html#gadb03d49fcf42b9fc167338fa1cd72fb4" title="Bind the IPC receive endpoint to a send destination (a thread).">l4_rcv_ep_bind_snd_destination()</a>.</p>
<p>IRQ objects can be created using a factory, see the <a class="el" href="group__l4__factory__api.html">Factory</a> API (use <a class="el" href="group__l4__factory__api.html#ga31a4707e4932e045960ad18b4fa07c66" title="Create a new IRQ sender.">l4_factory_create_irq()</a>).</p>
<dl class="section user"><dt>Include File</dt><dd><div class="fragment"><div class="line"><span class="preprocessor">#include &lt;<a class="code" href="l4_2sys_2irq_8h.html">l4/sys/irq.h</a>&gt;</span> </div>
<div class="ttc" id="al4_2sys_2irq_8h_html"><div class="ttname"><a href="l4_2sys_2irq_8h.html">irq.h</a></div><div class="ttdoc">C Irq interface.</div></div>
</div><!-- fragment --></dd></dl>
<p>For the C++ interface refer to the <a class="el" href="classL4_1_1Irq.html" title="C++ Irq interface, see IRQs for the C interface.">L4::Irq</a> API for an overview. </p>
<a name="doc-enum-members" id="doc-enum-members"></a><h2 id="header-doc-enum-members" class="groupheader">Enumeration Type Documentation</h2>
<a id="gac862068761c98665b621f946aecef120" name="gac862068761c98665b621f946aecef120"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gac862068761c98665b621f946aecef120">&#9670;&#160;</a></span>L4_irq_mode</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="#gac862068761c98665b621f946aecef120">L4_irq_mode</a></td>
</tr>
</table>
</div><div class="memdoc">
<p>Interrupt attributes. </p>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ggac862068761c98665b621f946aecef120ad97671d7c71ffadef2eebd80fb54eb36" name="ggac862068761c98665b621f946aecef120ad97671d7c71ffadef2eebd80fb54eb36"></a>L4_IRQ_F_NONE&#160;</td><td class="fielddoc"><p>Flow types. </p>
<p>None </p>
</td></tr>
<tr><td class="fieldname"><a id="ggac862068761c98665b621f946aecef120a5d35035a0a828bc5a4621794b8b78279" name="ggac862068761c98665b621f946aecef120a5d35035a0a828bc5a4621794b8b78279"></a>L4_IRQ_F_SET_MODE&#160;</td><td class="fielddoc"><p>Valid flag, if not set, the set_mode operation does nothing. </p>
</td></tr>
<tr><td class="fieldname"><a id="ggac862068761c98665b621f946aecef120a2cae3ce7133ab5fe3edef86febdfe85c" name="ggac862068761c98665b621f946aecef120a2cae3ce7133ab5fe3edef86febdfe85c"></a>L4_IRQ_F_LEVEL&#160;</td><td class="fielddoc"><p>Level triggered. </p>
</td></tr>
<tr><td class="fieldname"><a id="ggac862068761c98665b621f946aecef120ac2d781c73b8d8e2287d64d527dc291f0" name="ggac862068761c98665b621f946aecef120ac2d781c73b8d8e2287d64d527dc291f0"></a>L4_IRQ_F_EDGE&#160;</td><td class="fielddoc"><p>Edge triggered. </p>
</td></tr>
<tr><td class="fieldname"><a id="ggac862068761c98665b621f946aecef120ae0c23c9a2dfaf04327596aa0c5f8154c" name="ggac862068761c98665b621f946aecef120ae0c23c9a2dfaf04327596aa0c5f8154c"></a>L4_IRQ_F_POS&#160;</td><td class="fielddoc"><p>Positive trigger. </p>
</td></tr>
<tr><td class="fieldname"><a id="ggac862068761c98665b621f946aecef120afeafdd159bd50fb1c2b28dc6ea12fc80" name="ggac862068761c98665b621f946aecef120afeafdd159bd50fb1c2b28dc6ea12fc80"></a>L4_IRQ_F_NEG&#160;</td><td class="fielddoc"><p>Negative trigger. </p>
</td></tr>
<tr><td class="fieldname"><a id="ggac862068761c98665b621f946aecef120a3f7d507fc39426a62ba3bc961eaf13c2" name="ggac862068761c98665b621f946aecef120a3f7d507fc39426a62ba3bc961eaf13c2"></a>L4_IRQ_F_BOTH&#160;</td><td class="fielddoc"><p>Both edges trigger. </p>
</td></tr>
<tr><td class="fieldname"><a id="ggac862068761c98665b621f946aecef120a657ed8ffc16c46edeae57740c51d637e" name="ggac862068761c98665b621f946aecef120a657ed8ffc16c46edeae57740c51d637e"></a>L4_IRQ_F_LEVEL_HIGH&#160;</td><td class="fielddoc"><p>Level high trigger. </p>
</td></tr>
<tr><td class="fieldname"><a id="ggac862068761c98665b621f946aecef120af518c46b3c5c6b94626f09ddc20941fc" name="ggac862068761c98665b621f946aecef120af518c46b3c5c6b94626f09ddc20941fc"></a>L4_IRQ_F_LEVEL_LOW&#160;</td><td class="fielddoc"><p>Level low trigger. </p>
</td></tr>
<tr><td class="fieldname"><a id="ggac862068761c98665b621f946aecef120aa3f2311b782cf60324c8be13f050c81d" name="ggac862068761c98665b621f946aecef120aa3f2311b782cf60324c8be13f050c81d"></a>L4_IRQ_F_POS_EDGE&#160;</td><td class="fielddoc"><p>Positive edge trigger. </p>
</td></tr>
<tr><td class="fieldname"><a id="ggac862068761c98665b621f946aecef120a37c72a6d57befe05d97eca3ef200c9fc" name="ggac862068761c98665b621f946aecef120a37c72a6d57befe05d97eca3ef200c9fc"></a>L4_IRQ_F_NEG_EDGE&#160;</td><td class="fielddoc"><p>Negative edge trigger. </p>
</td></tr>
<tr><td class="fieldname"><a id="ggac862068761c98665b621f946aecef120a8766b7f12e588df7328357795dccabbe" name="ggac862068761c98665b621f946aecef120a8766b7f12e588df7328357795dccabbe"></a>L4_IRQ_F_BOTH_EDGE&#160;</td><td class="fielddoc"><p>Both edges trigger. </p>
</td></tr>
<tr><td class="fieldname"><a id="ggac862068761c98665b621f946aecef120a0a65484f81a88de7849285775b10f397" name="ggac862068761c98665b621f946aecef120a0a65484f81a88de7849285775b10f397"></a>L4_IRQ_F_MASK&#160;</td><td class="fielddoc"><p>Mask. </p>
</td></tr>
<tr><td class="fieldname"><a id="ggac862068761c98665b621f946aecef120a6003c23692c0ebf83c85891e3e44482b" name="ggac862068761c98665b621f946aecef120a6003c23692c0ebf83c85891e3e44482b"></a>L4_IRQ_F_SET_WAKEUP&#160;</td><td class="fielddoc"><p>Wakeup source? </p>
<p>Use irq as wakeup source </p>
</td></tr>
<tr><td class="fieldname"><a id="ggac862068761c98665b621f946aecef120a478b4f3d492228c84aa3c7959501133a" name="ggac862068761c98665b621f946aecef120a478b4f3d492228c84aa3c7959501133a"></a>L4_IRQ_F_CLEAR_WAKEUP&#160;</td><td class="fielddoc"><p>Do not use irq as wakeup source. </p>
</td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="icu_8h_source.html#l00070">70</a> of file <a class="el" href="icu_8h_source.html">icu.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="gab0e8143bf2fc59bccaab2941026b698c" name="gab0e8143bf2fc59bccaab2941026b698c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gab0e8143bf2fc59bccaab2941026b698c">&#9670;&#160;</a></span>l4_irq_bind_vcpu()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> l4_irq_bind_vcpu </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>, </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>thread</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>cfg</em></span>&#160;)</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>Bind a thread to this Irq for vCPU interrupt forwarding. </p>
<p>If the interrupt is triggered, the kernel will directly inject the interrupt into the guest. This requires that the thread is currently in extended vCPU user mode. Otherwise the interrupt will stay pending and gets injected on the next vCPU user mode transition. Optionally a doorbell Irq can be registered on the thread (see Thread::register_doorbell_irq()) that is triggered in this case.</p>
<p>If a guest has acknowledged the interrupt but has not yet issued an EOI (i.e. the interrupt is in "active" state), it is not possible to bind the Irq to a new thread object. Either wait for the guest to issue the EOI or detach() from the current thread. In this case the interrupt will stay active in the guest and it is the responsibility of the VMM to handle the eventual EOI of the guest.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">irq</td><td>The IRQ object that shall be bound. </td></tr>
<tr><td class="paramname">thread</td><td>Thread object this Irq shall be bound to. </td></tr>
<tr><td class="paramname">cfg</td><td>Architecture specific interrupt configuration.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Syscall return tag</dd></dl>
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">-L4_EPERM</td><td>Insufficient permissions; see precondition. </td></tr>
<tr><td class="paramname">-L4_EBUSY</td><td>Cannot bind to new thread because interrupt is active on previous thread and guest has to issue end-of-interrupt first. </td></tr>
<tr><td class="paramname">-L4_ENOSYS</td><td>The kernel does not support direct interrupt forwarding.</td></tr>
</table>
</dd>
</dl>
<dl class="section pre"><dt>Precondition</dt><dd>The capabilities <span class="tt">irq</span> and <span class="tt">thread</span> both must have the permission <a class="el" href="group__l4__fpage__api.html#ggaee60789a48cab2782f5a368237591b39acb2b2e95f6be245f64937ac48a068066" title="Interface specific &#39;S&#39; right for capability flexpages.">L4_CAP_FPAGE_S</a>. </dd></dl>
<p class="definition">Definition at line <a class="el" href="l4_2sys_2irq_8h_source.html#l00300">300</a> of file <a class="el" href="l4_2sys_2irq_8h_source.html">irq.h</a>.</p>
<p class="reference">References <a class="el" href="l4_2sys_2irq_8h_source.html#l00250">l4_irq_bind_vcpu_u()</a>, <a class="el" href="compiler_8h_source.html#l00161">L4_NOTHROW</a>, and <a class="el" href="l4_2sys_2utcb_8h_source.html#l00346">l4_utcb()</a>.</p>
<div id="dynsection-1" onclick="return dynsection.toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;"><span class="dynarrow"><span class="arrowhead closed"></span></span>Here is the call graph for this function:</div>
<div id="dynsection-1-summary" class="dynsummary" style="display:block;">
</div>
<div id="dynsection-1-content" class="dyncontent" style="display:none;">
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="group__l4__irq__api_gab0e8143bf2fc59bccaab2941026b698c_cgraph.svg" width="704" height="184"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
</div>
</div>
</div>
<a id="ga3e8a49d0eef3b31d977de724ef8071f4" name="ga3e8a49d0eef3b31d977de724ef8071f4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga3e8a49d0eef3b31d977de724ef8071f4">&#9670;&#160;</a></span>l4_irq_bind_vcpu_u()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> l4_irq_bind_vcpu_u </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>, </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>thread</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>cfg</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__l4__utcb__api.html#ga89be8a86d11c1d532b636cc2df1330fb">l4_utcb_t</a> *</td> <td class="paramname"><span class="paramname"><em>utcb</em></span>&#160;)</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>Bind a thread to this Irq for vCPU interrupt forwarding. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">irq</td><td>The IRQ object that shall be bound. If the interrupt is triggered, the kernel will directly inject the interrupt into the guest. This requires that the thread is currently in extended vCPU user mode. Otherwise the interrupt will stay pending and gets injected on the next vCPU user mode transition. Optionally a doorbell Irq can be registered on the thread (see Thread::register_doorbell_irq()) that is triggered in this case.</td></tr>
</table>
</dd>
</dl>
<p>If a guest has acknowledged the interrupt but has not yet issued an EOI (i.e. the interrupt is in "active" state), it is not possible to bind the Irq to a new thread object. Either wait for the guest to issue the EOI or detach() from the current thread. In this case the interrupt will stay active in the guest and it is the responsibility of the VMM to handle the eventual EOI of the guest.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">thread</td><td>Thread object this Irq shall be bound to. </td></tr>
<tr><td class="paramname">cfg</td><td>Architecture specific interrupt configuration. </td></tr>
<tr><td class="paramname">utcb</td><td>UTCB to be used for this operation, shall be the UTCB of the calling thread. See <a class="el" href="group__l4__utcb__api.html#gadc099b4a59e1d99638c72c11a8c8b644" title="Get the UTCB address.">l4_utcb</a>.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Syscall return tag</dd></dl>
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">-L4_EPERM</td><td>Insufficient permissions; see precondition. </td></tr>
<tr><td class="paramname">-L4_EBUSY</td><td>Cannot bind to the new thread because interrupt is active on previous thread and guest has to issue end-of-interrupt first. </td></tr>
<tr><td class="paramname">-L4_ENOSYS</td><td>The kernel does not support direct interrupt forwarding.</td></tr>
</table>
</dd>
</dl>
<dl class="section pre"><dt>Precondition</dt><dd>The invoked Irq capability and the capability <span class="tt">thread</span> both must have the permission <a class="el" href="group__l4__fpage__api.html#ggaee60789a48cab2782f5a368237591b39acb2b2e95f6be245f64937ac48a068066" title="Interface specific &#39;S&#39; right for capability flexpages.">L4_CAP_FPAGE_S</a>. </dd></dl>
<p class="definition">Definition at line <a class="el" href="l4_2sys_2irq_8h_source.html#l00250">250</a> of file <a class="el" href="l4_2sys_2irq_8h_source.html">irq.h</a>.</p>
<p class="reference">References <a class="el" href="____l4__fpage_8h_source.html#l00206">L4_CAP_FPAGE_RWS</a>, <a class="el" href="l4_2sys_2ipc_8h_source.html#l00565">l4_ipc_call()</a>, <a class="el" href="____timeout_8h_source.html#l00076">L4_IPC_NEVER</a>, <a class="el" href="____l4__fpage_8h_source.html#l00749">l4_map_obj_control()</a>, <a class="el" href="l4_2sys_2types_8h_source.html#l00405">l4_msgtag()</a>, <a class="el" href="compiler_8h_source.html#l00161">L4_NOTHROW</a>, <a class="el" href="____l4__fpage_8h_source.html#l00715">l4_obj_fpage()</a>, <a class="el" href="l4_2sys_2types_8h_source.html#l00060">L4_PROTO_IRQ_SENDER</a>, <a class="el" href="l4_2sys_2utcb_8h_source.html#l00069">l4_msg_regs_t::mr</a>, and <a class="el" href="____l4__fpage_8h_source.html#l00078">l4_fpage_t::raw</a>.</p>
<p class="reference">Referenced by <a class="el" href="irq_source.html#l00158">L4::Irq::bind_vcpu()</a>, and <a class="el" href="l4_2sys_2irq_8h_source.html#l00300">l4_irq_bind_vcpu()</a>.</p>
<div id="dynsection-2" onclick="return dynsection.toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;"><span class="dynarrow"><span class="arrowhead closed"></span></span>Here is the call graph for this function:</div>
<div id="dynsection-2-summary" class="dynsummary" style="display:block;">
</div>
<div id="dynsection-2-content" class="dyncontent" style="display:none;">
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="group__l4__irq__api_ga3e8a49d0eef3b31d977de724ef8071f4_cgraph.svg" width="526" height="184"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
</div>
<div id="dynsection-3" onclick="return dynsection.toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;"><span class="dynarrow"><span class="arrowhead closed"></span></span>Here is the caller graph for this function:</div>
<div id="dynsection-3-summary" class="dynsummary" style="display:block;">
</div>
<div id="dynsection-3-content" class="dyncontent" style="display:none;">
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="group__l4__irq__api_ga3e8a49d0eef3b31d977de724ef8071f4_icgraph.svg" width="342" height="86"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
</div>
</div>
</div>
<a id="ga1d9b0812f3bc01d6d5ff7010df231e56" name="ga1d9b0812f3bc01d6d5ff7010df231e56"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga1d9b0812f3bc01d6d5ff7010df231e56">&#9670;&#160;</a></span>l4_irq_detach()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> l4_irq_detach </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></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>Detach from an interrupt source. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">irq</td><td>The IRQ object that shall be detached.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Syscall return tag</dd></dl>
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">0</td><td>Successfully detached, there was no interrupt pending. </td></tr>
<tr><td class="paramname">1</td><td>Successfully detached, there was an interrupt pending. </td></tr>
<tr><td class="paramname">2</td><td>Successfully detached, an active vIRQ was abandoned. </td></tr>
<tr><td class="paramname">-L4_EPERM</td><td>Insufficient permissions; see precondition.</td></tr>
</table>
</dd>
</dl>
<dl class="section pre"><dt>Precondition</dt><dd>The capability <span class="tt">irq</span> must have the permission <a class="el" href="group__l4__fpage__api.html#ggaee60789a48cab2782f5a368237591b39acb2b2e95f6be245f64937ac48a068066" title="Interface specific &#39;S&#39; right for capability flexpages.">L4_CAP_FPAGE_S</a>. </dd></dl>
<dl class="section examples"><dt>Examples</dt><dd><a class="el" href="examples_2sys_2isr_2main_8c-example.html#a18">examples/sys/isr/main.c</a>.</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="l4_2sys_2irq_8h_source.html#l00294">294</a> of file <a class="el" href="l4_2sys_2irq_8h_source.html">irq.h</a>.</p>
<p class="reference">References <a class="el" href="l4_2sys_2irq_8h_source.html#l00242">l4_irq_detach_u()</a>, <a class="el" href="compiler_8h_source.html#l00161">L4_NOTHROW</a>, and <a class="el" href="l4_2sys_2utcb_8h_source.html#l00346">l4_utcb()</a>.</p>
<div id="dynsection-4" onclick="return dynsection.toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;"><span class="dynarrow"><span class="arrowhead closed"></span></span>Here is the call graph for this function:</div>
<div id="dynsection-4-summary" class="dynsummary" style="display:block;">
</div>
<div id="dynsection-4-content" class="dyncontent" style="display:none;">
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="group__l4__irq__api_ga1d9b0812f3bc01d6d5ff7010df231e56_cgraph.svg" width="539" height="110"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
</div>
</div>
</div>
<a id="ga52ad27a5a0d6a21bc7449a69a820db71" name="ga52ad27a5a0d6a21bc7449a69a820db71"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga52ad27a5a0d6a21bc7449a69a820db71">&#9670;&#160;</a></span>l4_irq_detach_u()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> l4_irq_detach_u </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>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__l4__utcb__api.html#ga89be8a86d11c1d532b636cc2df1330fb">l4_utcb_t</a> *</td> <td class="paramname"><span class="paramname"><em>utcb</em></span>&#160;)</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>Detach from this interrupt. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">irq</td><td>The IRQ object that shall be detached. </td></tr>
<tr><td class="paramname">utcb</td><td>UTCB to be used for this operation, shall be the UTCB of the calling thread. See <a class="el" href="group__l4__utcb__api.html#gadc099b4a59e1d99638c72c11a8c8b644" title="Get the UTCB address.">l4_utcb</a>.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Syscall return tag</dd></dl>
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">0</td><td>Successfully detached, there was no interrupt pending. </td></tr>
<tr><td class="paramname">1</td><td>Successfully detached, there was an interrupt pending. </td></tr>
<tr><td class="paramname">2</td><td>Successfully detached, an active vIRQ was abandoned. </td></tr>
<tr><td class="paramname">-L4_EPERM</td><td>Insufficient permissions; see precondition.</td></tr>
</table>
</dd>
</dl>
<dl class="section pre"><dt>Precondition</dt><dd>The invoked Irq capability must have the permission <a class="el" href="group__l4__fpage__api.html#ggaee60789a48cab2782f5a368237591b39acb2b2e95f6be245f64937ac48a068066" title="Interface specific &#39;S&#39; right for capability flexpages.">L4_CAP_FPAGE_S</a>. </dd></dl>
<p class="definition">Definition at line <a class="el" href="l4_2sys_2irq_8h_source.html#l00242">242</a> of file <a class="el" href="l4_2sys_2irq_8h_source.html">irq.h</a>.</p>
<p class="reference">References <a class="el" href="l4_2sys_2ipc_8h_source.html#l00565">l4_ipc_call()</a>, <a class="el" href="____timeout_8h_source.html#l00076">L4_IPC_NEVER</a>, <a class="el" href="l4_2sys_2types_8h_source.html#l00405">l4_msgtag()</a>, <a class="el" href="compiler_8h_source.html#l00161">L4_NOTHROW</a>, and <a class="el" href="l4_2sys_2types_8h_source.html#l00060">L4_PROTO_IRQ_SENDER</a>.</p>
<p class="reference">Referenced by <a class="el" href="irq_source.html#l00176">L4::Irq::detach()</a>, and <a class="el" href="l4_2sys_2irq_8h_source.html#l00294">l4_irq_detach()</a>.</p>
<div id="dynsection-5" onclick="return dynsection.toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;"><span class="dynarrow"><span class="arrowhead closed"></span></span>Here is the call graph for this function:</div>
<div id="dynsection-5-summary" class="dynsummary" style="display:block;">
</div>
<div id="dynsection-5-content" class="dyncontent" style="display:none;">
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="group__l4__irq__api_ga52ad27a5a0d6a21bc7449a69a820db71_cgraph.svg" width="382" height="86"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
</div>
<div id="dynsection-6" onclick="return dynsection.toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;"><span class="dynarrow"><span class="arrowhead closed"></span></span>Here is the caller graph for this function:</div>
<div id="dynsection-6-summary" class="dynsummary" style="display:block;">
</div>
<div id="dynsection-6-content" class="dyncontent" style="display:none;">
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="group__l4__irq__api_ga52ad27a5a0d6a21bc7449a69a820db71_icgraph.svg" width="298" height="86"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
</div>
</div>
</div>
<a id="ga997f18b89d6235214d2f9c381ed6c6a5" name="ga997f18b89d6235214d2f9c381ed6c6a5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga997f18b89d6235214d2f9c381ed6c6a5">&#9670;&#160;</a></span>l4_irq_receive()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> l4_irq_receive </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a></td> <td class="paramname"><span class="paramname"><em>irq</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="unionl4__timeout__t.html">l4_timeout_t</a></td> <td class="paramname"><span class="paramname"><em>to</em></span>&#160;)</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>Unmask and wait for specified IRQ. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">irq</td><td>The IRQ object that shall be unmasked. </td></tr>
<tr><td class="paramname">to</td><td>Timeout.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Syscall return tag </dd></dl>
<p class="definition">Definition at line <a class="el" href="l4_2sys_2irq_8h_source.html#l00313">313</a> of file <a class="el" href="l4_2sys_2irq_8h_source.html">irq.h</a>.</p>
<p class="reference">References <a class="el" href="l4_2sys_2irq_8h_source.html#l00270">l4_irq_receive_u()</a>, <a class="el" href="compiler_8h_source.html#l00161">L4_NOTHROW</a>, and <a class="el" href="l4_2sys_2utcb_8h_source.html#l00346">l4_utcb()</a>.</p>
<p class="reference">Referenced by <a class="el" href="event__buffer_source.html#l00115">L4Re::Util::Event_buffer_consumer_t&lt; Default_event_payload &gt;::process()</a>.</p>
<div id="dynsection-7" onclick="return dynsection.toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;"><span class="dynarrow"><span class="arrowhead closed"></span></span>Here is the call graph for this function:</div>
<div id="dynsection-7-summary" class="dynsummary" style="display:block;">
</div>
<div id="dynsection-7-content" class="dyncontent" style="display:none;">
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="group__l4__irq__api_ga997f18b89d6235214d2f9c381ed6c6a5_cgraph.svg" width="547" height="110"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
</div>
<div id="dynsection-8" onclick="return dynsection.toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;"><span class="dynarrow"><span class="arrowhead closed"></span></span>Here is the caller graph for this function:</div>
<div id="dynsection-8-summary" class="dynsummary" style="display:block;">
</div>
<div id="dynsection-8-content" class="dyncontent" style="display:none;">
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="group__l4__irq__api_ga997f18b89d6235214d2f9c381ed6c6a5_icgraph.svg" width="384" height="66"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
</div>
</div>
</div>
<a id="ga430999e1f8f6eb5f7e3f957b854b7446" name="ga430999e1f8f6eb5f7e3f957b854b7446"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga430999e1f8f6eb5f7e3f957b854b7446">&#9670;&#160;</a></span>l4_irq_receive_u()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> l4_irq_receive_u </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>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="unionl4__timeout__t.html">l4_timeout_t</a></td> <td class="paramname"><span class="paramname"><em>timeout</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__l4__utcb__api.html#ga89be8a86d11c1d532b636cc2df1330fb">l4_utcb_t</a> *</td> <td class="paramname"><span class="paramname"><em>utcb</em></span>&#160;)</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>Unmask and wait for this IRQ. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">irq</td><td>The IRQ object that shall be unmasked. </td></tr>
<tr><td class="paramname">timeout</td><td>Timeout. </td></tr>
<tr><td class="paramname">utcb</td><td>UTCB to be used for this operation, shall be the UTCB of the calling thread. See <a class="el" href="group__l4__utcb__api.html#gadc099b4a59e1d99638c72c11a8c8b644" title="Get the UTCB address.">l4_utcb</a>.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Syscall return tag</dd></dl>
<dl class="section note"><dt>Note</dt><dd>If this is the function normally used for your IRQs consider using <a class="el" href="structL4_1_1Semaphore.html" title="C++ Kernel-provided semaphore interface, see Kernel-provided semaphore for the C interface.">L4::Semaphore</a> instead of <a class="el" href="classL4_1_1Irq.html" title="C++ Irq interface, see IRQs for the C interface.">L4::Irq</a>. </dd></dl>
<p class="definition">Definition at line <a class="el" href="l4_2sys_2irq_8h_source.html#l00270">270</a> of file <a class="el" href="l4_2sys_2irq_8h_source.html">irq.h</a>.</p>
<p class="reference">References <a class="el" href="l4_2sys_2ipc_8h_source.html#l00565">l4_ipc_call()</a>, <a class="el" href="l4_2sys_2types_8h_source.html#l00405">l4_msgtag()</a>, <a class="el" href="compiler_8h_source.html#l00161">L4_NOTHROW</a>, and <a class="el" href="l4_2sys_2types_8h_source.html#l00044">L4_PROTO_IRQ</a>.</p>
<p class="reference">Referenced by <a class="el" href="l4_2sys_2irq_8h_source.html#l00313">l4_irq_receive()</a>, and <a class="el" href="irq_source.html#l00191">L4::Irq::receive()</a>.</p>
<div id="dynsection-9" onclick="return dynsection.toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;"><span class="dynarrow"><span class="arrowhead closed"></span></span>Here is the call graph for this function:</div>
<div id="dynsection-9-summary" class="dynsummary" style="display:block;">
</div>
<div id="dynsection-9-content" class="dyncontent" style="display:none;">
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="group__l4__irq__api_ga430999e1f8f6eb5f7e3f957b854b7446_cgraph.svg" width="386" height="86"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
</div>
<div id="dynsection-10" onclick="return dynsection.toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;"><span class="dynarrow"><span class="arrowhead closed"></span></span>Here is the caller graph for this function:</div>
<div id="dynsection-10-summary" class="dynsummary" style="display:block;">
</div>
<div id="dynsection-10-content" class="dyncontent" style="display:none;">
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="group__l4__irq__api_ga430999e1f8f6eb5f7e3f957b854b7446_icgraph.svg" width="566" height="100"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
</div>
</div>
</div>
<a id="gab24e0fc21a207fd566ece1e6fafbac48" name="gab24e0fc21a207fd566ece1e6fafbac48"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gab24e0fc21a207fd566ece1e6fafbac48">&#9670;&#160;</a></span>l4_irq_trigger()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> l4_irq_trigger </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></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>Trigger an IRQ. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">irq</td><td>The IRQ object that shall be triggered.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Syscall return tag.</dd></dl>
<p>Note that this function is a send only operation, i.e. there is no return value except for a failed send operation. Especially <a class="el" href="group__l4__ipc__err__api.html#ga05c11e3e10b6c2aa941396ac2018899f" title="Get IPC error code if any or message tag label otherwise for an IPC call.">l4_error()</a> will return an error value from the message tag which still contains the IRQ protocol used for the send operation.</p>
<p>Use <a class="el" href="group__l4__ipc__err__api.html#gad40f404217497793e95a10d77a47db39" title="Get the IPC error code for an IPC operation.">l4_ipc_error()</a> to check for (send) errors. </p>
<p class="definition">Definition at line <a class="el" href="l4_2sys_2irq_8h_source.html#l00307">307</a> of file <a class="el" href="l4_2sys_2irq_8h_source.html">irq.h</a>.</p>
<p class="reference">References <a class="el" href="l4_2sys_2irq_8h_source.html#l00263">l4_irq_trigger_u()</a>, <a class="el" href="compiler_8h_source.html#l00161">L4_NOTHROW</a>, and <a class="el" href="l4_2sys_2utcb_8h_source.html#l00346">l4_utcb()</a>.</p>
<p class="reference">Referenced by <a class="el" href="semaphore_8h_source.html#l00045">l4_semaphore_up()</a>.</p>
<div id="dynsection-11" onclick="return dynsection.toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;"><span class="dynarrow"><span class="arrowhead closed"></span></span>Here is the call graph for this function:</div>
<div id="dynsection-11-summary" class="dynsummary" style="display:block;">
</div>
<div id="dynsection-11-content" class="dyncontent" style="display:none;">
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="group__l4__irq__api_gab24e0fc21a207fd566ece1e6fafbac48_cgraph.svg" width="544" height="110"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
</div>
<div id="dynsection-12" onclick="return dynsection.toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;"><span class="dynarrow"><span class="arrowhead closed"></span></span>Here is the caller graph for this function:</div>
<div id="dynsection-12-summary" class="dynsummary" style="display:block;">
</div>
<div id="dynsection-12-content" class="dyncontent" style="display:none;">
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="group__l4__irq__api_gab24e0fc21a207fd566ece1e6fafbac48_icgraph.svg" width="304" height="36"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
</div>
</div>
</div>
<a id="ga180cfaf342ce9ff484a6aa7c276e1597" name="ga180cfaf342ce9ff484a6aa7c276e1597"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga180cfaf342ce9ff484a6aa7c276e1597">&#9670;&#160;</a></span>l4_irq_trigger_u()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> l4_irq_trigger_u </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>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__l4__utcb__api.html#ga89be8a86d11c1d532b636cc2df1330fb">l4_utcb_t</a> *</td> <td class="paramname"><span class="paramname"><em>utcb</em></span>&#160;)</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>Trigger the object. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">irq</td><td>The IRQ object that shall be triggered. </td></tr>
<tr><td class="paramname">utcb</td><td>UTCB to be used for this operation, shall be the UTCB of the calling thread. See <a class="el" href="group__l4__utcb__api.html#gadc099b4a59e1d99638c72c11a8c8b644" title="Get the UTCB address.">l4_utcb</a>.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Syscall return tag for a send-only operation, this means there is no return value except <a class="el" href="group__l4__msgtag__api.html#gga16589e963a73c13aefd2760ce418e053aad1669664171cc979970b1e2300bd463" title="Error indicator flag.">L4_MSGTAG_ERROR</a> indicating success or failure of the send operation. Use <a class="el" href="group__l4__ipc__err__api.html#gad40f404217497793e95a10d77a47db39" title="Get the IPC error code for an IPC operation.">l4_ipc_error()</a> to check for errors and <b>do not</b> use <a class="el" href="group__l4__ipc__err__api.html#ga05c11e3e10b6c2aa941396ac2018899f" title="Get IPC error code if any or message tag label otherwise for an IPC call.">l4_error()</a>. </dd></dl>
<p class="definition">Definition at line <a class="el" href="l4_2sys_2irq_8h_source.html#l00263">263</a> of file <a class="el" href="l4_2sys_2irq_8h_source.html">irq.h</a>.</p>
<p class="reference">References <a class="el" href="____timeout_8h_source.html#l00079">L4_IPC_BOTH_TIMEOUT_0</a>, <a class="el" href="l4_2sys_2ipc_8h_source.html#l00586">l4_ipc_send()</a>, <a class="el" href="l4_2sys_2types_8h_source.html#l00405">l4_msgtag()</a>, <a class="el" href="compiler_8h_source.html#l00161">L4_NOTHROW</a>, and <a class="el" href="l4_2sys_2types_8h_source.html#l00044">L4_PROTO_IRQ</a>.</p>
<p class="reference">Referenced by <a class="el" href="l4_2sys_2irq_8h_source.html#l00307">l4_irq_trigger()</a>, and <a class="el" href="irq_source.html#l00091">L4::Triggerable::trigger()</a>.</p>
<div id="dynsection-13" onclick="return dynsection.toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;"><span class="dynarrow"><span class="arrowhead closed"></span></span>Here is the call graph for this function:</div>
<div id="dynsection-13-summary" class="dynsummary" style="display:block;">
</div>
<div id="dynsection-13-content" class="dyncontent" style="display:none;">
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="group__l4__irq__api_ga180cfaf342ce9ff484a6aa7c276e1597_cgraph.svg" width="388" height="86"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
</div>
<div id="dynsection-14" onclick="return dynsection.toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;"><span class="dynarrow"><span class="arrowhead closed"></span></span>Here is the caller graph for this function:</div>
<div id="dynsection-14-summary" class="dynsummary" style="display:block;">
</div>
<div id="dynsection-14-content" class="dyncontent" style="display:none;">
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="group__l4__irq__api_ga180cfaf342ce9ff484a6aa7c276e1597_icgraph.svg" width="540" height="86"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
</div>
</div>
</div>
<a id="ga213b7c4fe4d690ec2aec84fd226883c4" name="ga213b7c4fe4d690ec2aec84fd226883c4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga213b7c4fe4d690ec2aec84fd226883c4">&#9670;&#160;</a></span>l4_irq_unmask()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> l4_irq_unmask </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></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>Unmask IRQ. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">irq</td><td>The IRQ object that shall be unmasked.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Syscall return tag</dd></dl>
<dl class="section note"><dt>Note</dt><dd><a class="el" href="#gaa9151a0a16974ccc5685965fdee62b02" title="Unmask IRQ and wait for any message.">l4_irq_wait()</a> and <a class="el" href="#ga997f18b89d6235214d2f9c381ed6c6a5" title="Unmask and wait for specified IRQ.">l4_irq_receive()</a> are doing the unmask themselves. </dd></dl>
<p class="definition">Definition at line <a class="el" href="l4_2sys_2irq_8h_source.html#l00326">326</a> of file <a class="el" href="l4_2sys_2irq_8h_source.html">irq.h</a>.</p>
<p class="reference">References <a class="el" href="l4_2sys_2irq_8h_source.html#l00286">l4_irq_unmask_u()</a>, <a class="el" href="compiler_8h_source.html#l00161">L4_NOTHROW</a>, and <a class="el" href="l4_2sys_2utcb_8h_source.html#l00346">l4_utcb()</a>.</p>
<div id="dynsection-15" onclick="return dynsection.toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;"><span class="dynarrow"><span class="arrowhead closed"></span></span>Here is the call graph for this function:</div>
<div id="dynsection-15-summary" class="dynsummary" style="display:block;">
</div>
<div id="dynsection-15-content" class="dyncontent" style="display:none;">
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="group__l4__irq__api_ga213b7c4fe4d690ec2aec84fd226883c4_cgraph.svg" width="563" height="110"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
</div>
</div>
</div>
<a id="ga1dd27341b8d2a6cd09e9784188109b7c" name="ga1dd27341b8d2a6cd09e9784188109b7c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga1dd27341b8d2a6cd09e9784188109b7c">&#9670;&#160;</a></span>l4_irq_unmask_u()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> l4_irq_unmask_u </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>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__l4__utcb__api.html#ga89be8a86d11c1d532b636cc2df1330fb">l4_utcb_t</a> *</td> <td class="paramname"><span class="paramname"><em>utcb</em></span>&#160;)</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>Unmask this IRQ. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">irq</td><td>The IRQ object that shall be unmasked. </td></tr>
<tr><td class="paramname">utcb</td><td>UTCB to be used for this operation, shall be the UTCB of the calling thread. See <a class="el" href="group__l4__utcb__api.html#gadc099b4a59e1d99638c72c11a8c8b644" title="Get the UTCB address.">l4_utcb</a>.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Syscall return tag for a send-only operation, this means there is no return value except <a class="el" href="group__l4__msgtag__api.html#gga16589e963a73c13aefd2760ce418e053aad1669664171cc979970b1e2300bd463" title="Error indicator flag.">L4_MSGTAG_ERROR</a> indicating success or failure of the send operation. Use <a class="el" href="group__l4__ipc__err__api.html#gad40f404217497793e95a10d77a47db39" title="Get the IPC error code for an IPC operation.">l4_ipc_error()</a> to check for errors and <b>do not</b> use <a class="el" href="group__l4__ipc__err__api.html#ga05c11e3e10b6c2aa941396ac2018899f" title="Get IPC error code if any or message tag label otherwise for an IPC call.">l4_error()</a>.</dd></dl>
<p>Irq::wait() and Irq::receive() operations already include an unmask(), do not use an extra unmask() in these cases. </p>
<p class="definition">Definition at line <a class="el" href="l4_2sys_2irq_8h_source.html#l00286">286</a> of file <a class="el" href="l4_2sys_2irq_8h_source.html">irq.h</a>.</p>
<p class="reference">References <a class="el" href="____timeout_8h_source.html#l00076">L4_IPC_NEVER</a>, <a class="el" href="l4_2sys_2ipc_8h_source.html#l00586">l4_ipc_send()</a>, <a class="el" href="l4_2sys_2types_8h_source.html#l00405">l4_msgtag()</a>, <a class="el" href="compiler_8h_source.html#l00161">L4_NOTHROW</a>, and <a class="el" href="l4_2sys_2types_8h_source.html#l00044">L4_PROTO_IRQ</a>.</p>
<p class="reference">Referenced by <a class="el" href="l4_2sys_2irq_8h_source.html#l00326">l4_irq_unmask()</a>.</p>
<div id="dynsection-16" onclick="return dynsection.toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;"><span class="dynarrow"><span class="arrowhead closed"></span></span>Here is the call graph for this function:</div>
<div id="dynsection-16-summary" class="dynsummary" style="display:block;">
</div>
<div id="dynsection-16-content" class="dyncontent" style="display:none;">
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="group__l4__irq__api_ga1dd27341b8d2a6cd09e9784188109b7c_cgraph.svg" width="398" height="86"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
</div>
<div id="dynsection-17" onclick="return dynsection.toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;"><span class="dynarrow"><span class="arrowhead closed"></span></span>Here is the caller graph for this function:</div>
<div id="dynsection-17-summary" class="dynsummary" style="display:block;">
</div>
<div id="dynsection-17-content" class="dyncontent" style="display:none;">
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="group__l4__irq__api_ga1dd27341b8d2a6cd09e9784188109b7c_icgraph.svg" width="308" height="36"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
</div>
</div>
</div>
<a id="gaa9151a0a16974ccc5685965fdee62b02" name="gaa9151a0a16974ccc5685965fdee62b02"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaa9151a0a16974ccc5685965fdee62b02">&#9670;&#160;</a></span>l4_irq_wait()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> l4_irq_wait </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a></td> <td class="paramname"><span class="paramname"><em>irq</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a> *</td> <td class="paramname"><span class="paramname"><em>label</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="unionl4__timeout__t.html">l4_timeout_t</a></td> <td class="paramname"><span class="paramname"><em>to</em></span>&#160;)</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>Unmask IRQ and wait for any message. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">irq</td><td>The IRQ object that shall be unmasked. </td></tr>
<tr><td class="paramname">label</td><td>Receive label. </td></tr>
<tr><td class="paramname">to</td><td>Timeout.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Syscall return tag </dd></dl>
<dl class="section examples"><dt>Examples</dt><dd><a class="el" href="examples_2sys_2isr_2main_8c-example.html#a15">examples/sys/isr/main.c</a>.</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="l4_2sys_2irq_8h_source.html#l00319">319</a> of file <a class="el" href="l4_2sys_2irq_8h_source.html">irq.h</a>.</p>
<p class="reference">References <a class="el" href="l4_2sys_2irq_8h_source.html#l00277">l4_irq_wait_u()</a>, <a class="el" href="compiler_8h_source.html#l00161">L4_NOTHROW</a>, and <a class="el" href="l4_2sys_2utcb_8h_source.html#l00346">l4_utcb()</a>.</p>
<div id="dynsection-18" onclick="return dynsection.toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;"><span class="dynarrow"><span class="arrowhead closed"></span></span>Here is the call graph for this function:</div>
<div id="dynsection-18-summary" class="dynsummary" style="display:block;">
</div>
<div id="dynsection-18-content" class="dyncontent" style="display:none;">
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="group__l4__irq__api_gaa9151a0a16974ccc5685965fdee62b02_cgraph.svg" width="580" height="110"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
</div>
</div>
</div>
<a id="ga1690f577bd2896ec9b1e5a24d00af874" name="ga1690f577bd2896ec9b1e5a24d00af874"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga1690f577bd2896ec9b1e5a24d00af874">&#9670;&#160;</a></span>l4_irq_wait_u()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> l4_irq_wait_u </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>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a> *</td> <td class="paramname"><span class="paramname"><em>label</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="unionl4__timeout__t.html">l4_timeout_t</a></td> <td class="paramname"><span class="paramname"><em>timeout</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__l4__utcb__api.html#ga89be8a86d11c1d532b636cc2df1330fb">l4_utcb_t</a> *</td> <td class="paramname"><span class="paramname"><em>utcb</em></span>&#160;)</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>Unmask IRQ and (open) wait for any message. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">irq</td><td>The IRQ object that shall be unmasked. </td></tr>
<tr><td class="paramname">label</td><td>The <em>protected label</em> shall be received here. </td></tr>
<tr><td class="paramname">timeout</td><td>Timeout. </td></tr>
<tr><td class="paramname">utcb</td><td>UTCB to be used for this operation, shall be the UTCB of the calling thread. See <a class="el" href="group__l4__utcb__api.html#gadc099b4a59e1d99638c72c11a8c8b644" title="Get the UTCB address.">l4_utcb</a>.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Syscall return tag </dd></dl>
<p class="definition">Definition at line <a class="el" href="l4_2sys_2irq_8h_source.html#l00277">277</a> of file <a class="el" href="l4_2sys_2irq_8h_source.html">irq.h</a>.</p>
<p class="reference">References <a class="el" href="l4_2sys_2ipc_8h_source.html#l00579">l4_ipc_send_and_wait()</a>, <a class="el" href="l4_2sys_2types_8h_source.html#l00405">l4_msgtag()</a>, <a class="el" href="compiler_8h_source.html#l00161">L4_NOTHROW</a>, and <a class="el" href="l4_2sys_2types_8h_source.html#l00044">L4_PROTO_IRQ</a>.</p>
<p class="reference">Referenced by <a class="el" href="l4_2sys_2irq_8h_source.html#l00319">l4_irq_wait()</a>.</p>
<div id="dynsection-19" onclick="return dynsection.toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;"><span class="dynarrow"><span class="arrowhead closed"></span></span>Here is the call graph for this function:</div>
<div id="dynsection-19-summary" class="dynsummary" style="display:block;">
</div>
<div id="dynsection-19-content" class="dyncontent" style="display:none;">
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="group__l4__irq__api_ga1690f577bd2896ec9b1e5a24d00af874_cgraph.svg" width="439" height="86"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
</div>
<div id="dynsection-20" onclick="return dynsection.toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;"><span class="dynarrow"><span class="arrowhead closed"></span></span>Here is the caller graph for this function:</div>
<div id="dynsection-20-summary" class="dynsummary" style="display:block;">
</div>
<div id="dynsection-20-content" class="dyncontent" style="display:none;">
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="group__l4__irq__api_ga1690f577bd2896ec9b1e5a24d00af874_icgraph.svg" width="260" height="36"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
</div>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- HTML footer for doxygen 1.9.1-->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated on <span class="timestamp"></span> for L4Re Operating System Framework by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.15.0 </li>
</ul>
</div>
</body>
</html>