libctru/synchronization_8h.html
2024-11-03 20:36:34 +00:00

1398 lines
81 KiB
HTML

<!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.9.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libctru: include/3ds/synchronization.h File Reference</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="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" />
</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="projectalign" style="padding-left: 0.5em;">
<div id="projectname">libctru
&#160;<span id="projectnumber">v2.4.1</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
<!-- 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">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_d475325f6a9fe3bfc3a495c72a9e475e.html">3ds</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#nested-classes">Data Structures</a> &#124;
<a href="#define-members">Macros</a> &#124;
<a href="#typedef-members">Typedefs</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">synchronization.h File Reference</div> </div>
</div><!--header-->
<div class="contents">
<p>Provides synchronization locks.
<a href="#details">More...</a></p>
<div class="textblock"><code>#include &lt;sys/lock.h&gt;</code><br />
<code>#include &lt;<a class="el" href="svc_8h_source.html">3ds/svc.h</a>&gt;</code><br />
</div>
<p><a href="synchronization_8h_source.html">Go to the source code of this file.</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structLightEvent.html">LightEvent</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A light event. <a href="structLightEvent.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structLightSemaphore.html">LightSemaphore</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A light semaphore. <a href="structLightSemaphore.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:a77f9a3fcb480540a1cfc0891f00963ed"><td class="memItemLeft" align="right" valign="top"><a id="a77f9a3fcb480540a1cfc0891f00963ed"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="synchronization_8h.html#a77f9a3fcb480540a1cfc0891f00963ed">AtomicIncrement</a>(ptr)&#160;&#160;&#160;__atomic_add_fetch((<a class="el" href="types_8h.html#afaa62991928fb9fb18ff0db62a040aba">u32</a>*)(ptr), 1, __ATOMIC_SEQ_CST)</td></tr>
<tr class="memdesc:a77f9a3fcb480540a1cfc0891f00963ed"><td class="mdescLeft">&#160;</td><td class="mdescRight">Performs an atomic pre-increment operation. <br /></td></tr>
<tr class="separator:a77f9a3fcb480540a1cfc0891f00963ed"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a609965cc7d1f801675ef5901dbe07a15"><td class="memItemLeft" align="right" valign="top"><a id="a609965cc7d1f801675ef5901dbe07a15"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="synchronization_8h.html#a609965cc7d1f801675ef5901dbe07a15">AtomicDecrement</a>(ptr)&#160;&#160;&#160;__atomic_sub_fetch((<a class="el" href="types_8h.html#afaa62991928fb9fb18ff0db62a040aba">u32</a>*)(ptr), 1, __ATOMIC_SEQ_CST)</td></tr>
<tr class="memdesc:a609965cc7d1f801675ef5901dbe07a15"><td class="mdescLeft">&#160;</td><td class="mdescRight">Performs an atomic pre-decrement operation. <br /></td></tr>
<tr class="separator:a609965cc7d1f801675ef5901dbe07a15"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a191063fc32cdc8187a24b44cb48ff324"><td class="memItemLeft" align="right" valign="top"><a id="a191063fc32cdc8187a24b44cb48ff324"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="synchronization_8h.html#a191063fc32cdc8187a24b44cb48ff324">AtomicPostIncrement</a>(ptr)&#160;&#160;&#160;__atomic_fetch_add((<a class="el" href="types_8h.html#afaa62991928fb9fb18ff0db62a040aba">u32</a>*)(ptr), 1, __ATOMIC_SEQ_CST)</td></tr>
<tr class="memdesc:a191063fc32cdc8187a24b44cb48ff324"><td class="mdescLeft">&#160;</td><td class="mdescRight">Performs an atomic post-increment operation. <br /></td></tr>
<tr class="separator:a191063fc32cdc8187a24b44cb48ff324"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a76bf51e5d535d5bd3d2f34eee9ca4956"><td class="memItemLeft" align="right" valign="top"><a id="a76bf51e5d535d5bd3d2f34eee9ca4956"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="synchronization_8h.html#a76bf51e5d535d5bd3d2f34eee9ca4956">AtomicPostDecrement</a>(ptr)&#160;&#160;&#160;__atomic_fetch_sub((<a class="el" href="types_8h.html#afaa62991928fb9fb18ff0db62a040aba">u32</a>*)(ptr), 1, __ATOMIC_SEQ_CST)</td></tr>
<tr class="memdesc:a76bf51e5d535d5bd3d2f34eee9ca4956"><td class="mdescLeft">&#160;</td><td class="mdescRight">Performs an atomic post-decrement operation. <br /></td></tr>
<tr class="separator:a76bf51e5d535d5bd3d2f34eee9ca4956"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5bc74ad985f95799e927cc50a4ebd9c3"><td class="memItemLeft" align="right" valign="top"><a id="a5bc74ad985f95799e927cc50a4ebd9c3"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="synchronization_8h.html#a5bc74ad985f95799e927cc50a4ebd9c3">AtomicSwap</a>(ptr, value)&#160;&#160;&#160;__atomic_exchange_n((<a class="el" href="types_8h.html#afaa62991928fb9fb18ff0db62a040aba">u32</a>*)(ptr), (value), __ATOMIC_SEQ_CST)</td></tr>
<tr class="memdesc:a5bc74ad985f95799e927cc50a4ebd9c3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Performs an atomic swap operation. <br /></td></tr>
<tr class="separator:a5bc74ad985f95799e927cc50a4ebd9c3"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
Typedefs</h2></td></tr>
<tr class="memitem:a0d966c33d353bedf60c66a1a75e68c5e"><td class="memItemLeft" align="right" valign="top"><a id="a0d966c33d353bedf60c66a1a75e68c5e"></a>
typedef _LOCK_T&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="synchronization_8h.html#a0d966c33d353bedf60c66a1a75e68c5e">LightLock</a></td></tr>
<tr class="memdesc:a0d966c33d353bedf60c66a1a75e68c5e"><td class="mdescLeft">&#160;</td><td class="mdescRight">A light lock. <br /></td></tr>
<tr class="separator:a0d966c33d353bedf60c66a1a75e68c5e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae161b0db2ef331125217c64729e18179"><td class="memItemLeft" align="right" valign="top"><a id="ae161b0db2ef331125217c64729e18179"></a>
typedef _LOCK_RECURSIVE_T&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="synchronization_8h.html#ae161b0db2ef331125217c64729e18179">RecursiveLock</a></td></tr>
<tr class="memdesc:ae161b0db2ef331125217c64729e18179"><td class="mdescLeft">&#160;</td><td class="mdescRight">A recursive lock. <br /></td></tr>
<tr class="separator:ae161b0db2ef331125217c64729e18179"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7da2ad46c2b89e00508f9220dd877eda"><td class="memItemLeft" align="right" valign="top"><a id="a7da2ad46c2b89e00508f9220dd877eda"></a>
typedef <a class="el" href="types_8h.html#ae9b1af5c037e57a98884758875d3a7c4">s32</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="synchronization_8h.html#a7da2ad46c2b89e00508f9220dd877eda">CondVar</a></td></tr>
<tr class="memdesc:a7da2ad46c2b89e00508f9220dd877eda"><td class="mdescLeft">&#160;</td><td class="mdescRight">A condition variable. <br /></td></tr>
<tr class="separator:a7da2ad46c2b89e00508f9220dd877eda"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:a4f5f4fd74aae52a2310fb2c6a5983e4d"><td class="memItemLeft" align="right" valign="top"><a id="a4f5f4fd74aae52a2310fb2c6a5983e4d"></a>
static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="synchronization_8h.html#a4f5f4fd74aae52a2310fb2c6a5983e4d">__dsb</a> (void)</td></tr>
<tr class="memdesc:a4f5f4fd74aae52a2310fb2c6a5983e4d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Performs a Data Synchronization Barrier operation. <br /></td></tr>
<tr class="separator:a4f5f4fd74aae52a2310fb2c6a5983e4d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab76993c9a7d0327437522dc2e53e770d"><td class="memItemLeft" align="right" valign="top"><a id="ab76993c9a7d0327437522dc2e53e770d"></a>
static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="synchronization_8h.html#ab76993c9a7d0327437522dc2e53e770d">__dmb</a> (void)</td></tr>
<tr class="memdesc:ab76993c9a7d0327437522dc2e53e770d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Performs a Data Memory Barrier operation. <br /></td></tr>
<tr class="separator:ab76993c9a7d0327437522dc2e53e770d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a88917e3c9a446a5d078165af7b9c884c"><td class="memItemLeft" align="right" valign="top"><a id="a88917e3c9a446a5d078165af7b9c884c"></a>
static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="synchronization_8h.html#a88917e3c9a446a5d078165af7b9c884c">__isb</a> (void)</td></tr>
<tr class="memdesc:a88917e3c9a446a5d078165af7b9c884c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Performs an Instruction Synchronization Barrier (officially "flush prefetch buffer") operation. <br /></td></tr>
<tr class="separator:a88917e3c9a446a5d078165af7b9c884c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af5fdce28704bc8d418fe9aaed04d4e90"><td class="memItemLeft" align="right" valign="top"><a id="af5fdce28704bc8d418fe9aaed04d4e90"></a>
static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="synchronization_8h.html#af5fdce28704bc8d418fe9aaed04d4e90">__clrex</a> (void)</td></tr>
<tr class="memdesc:af5fdce28704bc8d418fe9aaed04d4e90"><td class="mdescLeft">&#160;</td><td class="mdescRight">Performs a clrex operation. <br /></td></tr>
<tr class="separator:af5fdce28704bc8d418fe9aaed04d4e90"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9fe83ca3ec3c6ae269203acf367ad5a9"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="types_8h.html#ae9b1af5c037e57a98884758875d3a7c4">s32</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="synchronization_8h.html#a9fe83ca3ec3c6ae269203acf367ad5a9">__ldrex</a> (<a class="el" href="types_8h.html#ae9b1af5c037e57a98884758875d3a7c4">s32</a> *addr)</td></tr>
<tr class="memdesc:a9fe83ca3ec3c6ae269203acf367ad5a9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Performs a ldrex operation. <a href="synchronization_8h.html#a9fe83ca3ec3c6ae269203acf367ad5a9">More...</a><br /></td></tr>
<tr class="separator:a9fe83ca3ec3c6ae269203acf367ad5a9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae5b6bc8b7ae74b57efbb0707c1d6cea9"><td class="memItemLeft" align="right" valign="top">static bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="synchronization_8h.html#ae5b6bc8b7ae74b57efbb0707c1d6cea9">__strex</a> (<a class="el" href="types_8h.html#ae9b1af5c037e57a98884758875d3a7c4">s32</a> *addr, <a class="el" href="types_8h.html#ae9b1af5c037e57a98884758875d3a7c4">s32</a> val)</td></tr>
<tr class="memdesc:ae5b6bc8b7ae74b57efbb0707c1d6cea9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Performs a strex operation. <a href="synchronization_8h.html#ae5b6bc8b7ae74b57efbb0707c1d6cea9">More...</a><br /></td></tr>
<tr class="separator:ae5b6bc8b7ae74b57efbb0707c1d6cea9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac8b9943bc74f25d3efa4c413cd3e5be6"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="types_8h.html#ace9d960e74685e2cd84b36132dbbf8aa">u16</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="synchronization_8h.html#ac8b9943bc74f25d3efa4c413cd3e5be6">__ldrexh</a> (<a class="el" href="types_8h.html#ace9d960e74685e2cd84b36132dbbf8aa">u16</a> *addr)</td></tr>
<tr class="memdesc:ac8b9943bc74f25d3efa4c413cd3e5be6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Performs a ldrexh operation. <a href="synchronization_8h.html#ac8b9943bc74f25d3efa4c413cd3e5be6">More...</a><br /></td></tr>
<tr class="separator:ac8b9943bc74f25d3efa4c413cd3e5be6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a276f8cccf5abeb6b35f067b7a8c9a40c"><td class="memItemLeft" align="right" valign="top">static bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="synchronization_8h.html#a276f8cccf5abeb6b35f067b7a8c9a40c">__strexh</a> (<a class="el" href="types_8h.html#ace9d960e74685e2cd84b36132dbbf8aa">u16</a> *addr, <a class="el" href="types_8h.html#ace9d960e74685e2cd84b36132dbbf8aa">u16</a> val)</td></tr>
<tr class="memdesc:a276f8cccf5abeb6b35f067b7a8c9a40c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Performs a strexh operation. <a href="synchronization_8h.html#a276f8cccf5abeb6b35f067b7a8c9a40c">More...</a><br /></td></tr>
<tr class="separator:a276f8cccf5abeb6b35f067b7a8c9a40c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3edf8cb6c54dca775890c04e57919d73"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="types_8h.html#a92c50087ca0e64fa93fc59402c55f8ca">u8</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="synchronization_8h.html#a3edf8cb6c54dca775890c04e57919d73">__ldrexb</a> (<a class="el" href="types_8h.html#a92c50087ca0e64fa93fc59402c55f8ca">u8</a> *addr)</td></tr>
<tr class="memdesc:a3edf8cb6c54dca775890c04e57919d73"><td class="mdescLeft">&#160;</td><td class="mdescRight">Performs a ldrexb operation. <a href="synchronization_8h.html#a3edf8cb6c54dca775890c04e57919d73">More...</a><br /></td></tr>
<tr class="separator:a3edf8cb6c54dca775890c04e57919d73"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acd9826a3a62cf5190048acde58e69776"><td class="memItemLeft" align="right" valign="top">static bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="synchronization_8h.html#acd9826a3a62cf5190048acde58e69776">__strexb</a> (<a class="el" href="types_8h.html#a92c50087ca0e64fa93fc59402c55f8ca">u8</a> *addr, <a class="el" href="types_8h.html#a92c50087ca0e64fa93fc59402c55f8ca">u8</a> val)</td></tr>
<tr class="memdesc:acd9826a3a62cf5190048acde58e69776"><td class="mdescLeft">&#160;</td><td class="mdescRight">Performs a strexb operation. <a href="synchronization_8h.html#acd9826a3a62cf5190048acde58e69776">More...</a><br /></td></tr>
<tr class="separator:acd9826a3a62cf5190048acde58e69776"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a15f62531caa3fa14f5eac4735d96f9f7"><td class="memItemLeft" align="right" valign="top"><a class="el" href="types_8h.html#ac830bf5a4f2cf8273f61ab99a46cf163">Result</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="synchronization_8h.html#a15f62531caa3fa14f5eac4735d96f9f7">syncArbitrateAddress</a> (<a class="el" href="types_8h.html#ae9b1af5c037e57a98884758875d3a7c4">s32</a> *addr, <a class="el" href="svc_8h.html#a00f5b708129ef172b59197a775b533ec">ArbitrationType</a> type, <a class="el" href="types_8h.html#ae9b1af5c037e57a98884758875d3a7c4">s32</a> value)</td></tr>
<tr class="memdesc:a15f62531caa3fa14f5eac4735d96f9f7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Function used to implement user-mode synchronization primitives. <a href="synchronization_8h.html#a15f62531caa3fa14f5eac4735d96f9f7">More...</a><br /></td></tr>
<tr class="separator:a15f62531caa3fa14f5eac4735d96f9f7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3ce965a644db4534de988a203751c56d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="types_8h.html#ac830bf5a4f2cf8273f61ab99a46cf163">Result</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="synchronization_8h.html#a3ce965a644db4534de988a203751c56d">syncArbitrateAddressWithTimeout</a> (<a class="el" href="types_8h.html#ae9b1af5c037e57a98884758875d3a7c4">s32</a> *addr, <a class="el" href="svc_8h.html#a00f5b708129ef172b59197a775b533ec">ArbitrationType</a> type, <a class="el" href="types_8h.html#ae9b1af5c037e57a98884758875d3a7c4">s32</a> value, <a class="el" href="types_8h.html#a350c6fc928e3bdc6c6486268ac8fb269">s64</a> timeout_ns)</td></tr>
<tr class="memdesc:a3ce965a644db4534de988a203751c56d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Function used to implement user-mode synchronization primitives (with timeout). <a href="synchronization_8h.html#a3ce965a644db4534de988a203751c56d">More...</a><br /></td></tr>
<tr class="separator:a3ce965a644db4534de988a203751c56d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a81f625fde46405c1d539b1581d54fb05"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="synchronization_8h.html#a81f625fde46405c1d539b1581d54fb05">LightLock_Init</a> (<a class="el" href="synchronization_8h.html#a0d966c33d353bedf60c66a1a75e68c5e">LightLock</a> *lock)</td></tr>
<tr class="memdesc:a81f625fde46405c1d539b1581d54fb05"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initializes a light lock. <a href="synchronization_8h.html#a81f625fde46405c1d539b1581d54fb05">More...</a><br /></td></tr>
<tr class="separator:a81f625fde46405c1d539b1581d54fb05"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae75aac6e4bfe30037c8a9de916a6ddb8"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="synchronization_8h.html#ae75aac6e4bfe30037c8a9de916a6ddb8">LightLock_Lock</a> (<a class="el" href="synchronization_8h.html#a0d966c33d353bedf60c66a1a75e68c5e">LightLock</a> *lock)</td></tr>
<tr class="memdesc:ae75aac6e4bfe30037c8a9de916a6ddb8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Locks a light lock. <a href="synchronization_8h.html#ae75aac6e4bfe30037c8a9de916a6ddb8">More...</a><br /></td></tr>
<tr class="separator:ae75aac6e4bfe30037c8a9de916a6ddb8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1a1d677c021a8487d567f832dea9d9db"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="synchronization_8h.html#a1a1d677c021a8487d567f832dea9d9db">LightLock_TryLock</a> (<a class="el" href="synchronization_8h.html#a0d966c33d353bedf60c66a1a75e68c5e">LightLock</a> *lock)</td></tr>
<tr class="memdesc:a1a1d677c021a8487d567f832dea9d9db"><td class="mdescLeft">&#160;</td><td class="mdescRight">Attempts to lock a light lock. <a href="synchronization_8h.html#a1a1d677c021a8487d567f832dea9d9db">More...</a><br /></td></tr>
<tr class="separator:a1a1d677c021a8487d567f832dea9d9db"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a82283ae772ec2eac3a193b1431a681af"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="synchronization_8h.html#a82283ae772ec2eac3a193b1431a681af">LightLock_Unlock</a> (<a class="el" href="synchronization_8h.html#a0d966c33d353bedf60c66a1a75e68c5e">LightLock</a> *lock)</td></tr>
<tr class="memdesc:a82283ae772ec2eac3a193b1431a681af"><td class="mdescLeft">&#160;</td><td class="mdescRight">Unlocks a light lock. <a href="synchronization_8h.html#a82283ae772ec2eac3a193b1431a681af">More...</a><br /></td></tr>
<tr class="separator:a82283ae772ec2eac3a193b1431a681af"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1bbbe87bf212a32850ac9f0b6aa73408"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="synchronization_8h.html#a1bbbe87bf212a32850ac9f0b6aa73408">RecursiveLock_Init</a> (<a class="el" href="synchronization_8h.html#ae161b0db2ef331125217c64729e18179">RecursiveLock</a> *lock)</td></tr>
<tr class="memdesc:a1bbbe87bf212a32850ac9f0b6aa73408"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initializes a recursive lock. <a href="synchronization_8h.html#a1bbbe87bf212a32850ac9f0b6aa73408">More...</a><br /></td></tr>
<tr class="separator:a1bbbe87bf212a32850ac9f0b6aa73408"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afea61e6ff137d96934bb145d44095ccb"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="synchronization_8h.html#afea61e6ff137d96934bb145d44095ccb">RecursiveLock_Lock</a> (<a class="el" href="synchronization_8h.html#ae161b0db2ef331125217c64729e18179">RecursiveLock</a> *lock)</td></tr>
<tr class="memdesc:afea61e6ff137d96934bb145d44095ccb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Locks a recursive lock. <a href="synchronization_8h.html#afea61e6ff137d96934bb145d44095ccb">More...</a><br /></td></tr>
<tr class="separator:afea61e6ff137d96934bb145d44095ccb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8808924fdee80220f83b6992bc5e104d"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="synchronization_8h.html#a8808924fdee80220f83b6992bc5e104d">RecursiveLock_TryLock</a> (<a class="el" href="synchronization_8h.html#ae161b0db2ef331125217c64729e18179">RecursiveLock</a> *lock)</td></tr>
<tr class="memdesc:a8808924fdee80220f83b6992bc5e104d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Attempts to lock a recursive lock. <a href="synchronization_8h.html#a8808924fdee80220f83b6992bc5e104d">More...</a><br /></td></tr>
<tr class="separator:a8808924fdee80220f83b6992bc5e104d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a529b21c4a974abeea24b1dcceb75cf62"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="synchronization_8h.html#a529b21c4a974abeea24b1dcceb75cf62">RecursiveLock_Unlock</a> (<a class="el" href="synchronization_8h.html#ae161b0db2ef331125217c64729e18179">RecursiveLock</a> *lock)</td></tr>
<tr class="memdesc:a529b21c4a974abeea24b1dcceb75cf62"><td class="mdescLeft">&#160;</td><td class="mdescRight">Unlocks a recursive lock. <a href="synchronization_8h.html#a529b21c4a974abeea24b1dcceb75cf62">More...</a><br /></td></tr>
<tr class="separator:a529b21c4a974abeea24b1dcceb75cf62"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab8afa06278ad323a3c80210adef7310b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="synchronization_8h.html#ab8afa06278ad323a3c80210adef7310b">CondVar_Init</a> (<a class="el" href="synchronization_8h.html#a7da2ad46c2b89e00508f9220dd877eda">CondVar</a> *cv)</td></tr>
<tr class="memdesc:ab8afa06278ad323a3c80210adef7310b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initializes a condition variable. <a href="synchronization_8h.html#ab8afa06278ad323a3c80210adef7310b">More...</a><br /></td></tr>
<tr class="separator:ab8afa06278ad323a3c80210adef7310b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9d0a741fa7f5c6be9dc98e296817b293"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="synchronization_8h.html#a9d0a741fa7f5c6be9dc98e296817b293">CondVar_Wait</a> (<a class="el" href="synchronization_8h.html#a7da2ad46c2b89e00508f9220dd877eda">CondVar</a> *cv, <a class="el" href="synchronization_8h.html#a0d966c33d353bedf60c66a1a75e68c5e">LightLock</a> *lock)</td></tr>
<tr class="memdesc:a9d0a741fa7f5c6be9dc98e296817b293"><td class="mdescLeft">&#160;</td><td class="mdescRight">Waits on a condition variable. <a href="synchronization_8h.html#a9d0a741fa7f5c6be9dc98e296817b293">More...</a><br /></td></tr>
<tr class="separator:a9d0a741fa7f5c6be9dc98e296817b293"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa7aabd77eba2813fb5508e726335b211"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="synchronization_8h.html#aa7aabd77eba2813fb5508e726335b211">CondVar_WaitTimeout</a> (<a class="el" href="synchronization_8h.html#a7da2ad46c2b89e00508f9220dd877eda">CondVar</a> *cv, <a class="el" href="synchronization_8h.html#a0d966c33d353bedf60c66a1a75e68c5e">LightLock</a> *lock, <a class="el" href="types_8h.html#a350c6fc928e3bdc6c6486268ac8fb269">s64</a> timeout_ns)</td></tr>
<tr class="memdesc:aa7aabd77eba2813fb5508e726335b211"><td class="mdescLeft">&#160;</td><td class="mdescRight">Waits on a condition variable with a timeout. <a href="synchronization_8h.html#aa7aabd77eba2813fb5508e726335b211">More...</a><br /></td></tr>
<tr class="separator:aa7aabd77eba2813fb5508e726335b211"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a42f864222898c73a1add9d38dc549879"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="synchronization_8h.html#a42f864222898c73a1add9d38dc549879">CondVar_WakeUp</a> (<a class="el" href="synchronization_8h.html#a7da2ad46c2b89e00508f9220dd877eda">CondVar</a> *cv, <a class="el" href="types_8h.html#ae9b1af5c037e57a98884758875d3a7c4">s32</a> num_threads)</td></tr>
<tr class="memdesc:a42f864222898c73a1add9d38dc549879"><td class="mdescLeft">&#160;</td><td class="mdescRight">Wakes up threads waiting on a condition variable. <a href="synchronization_8h.html#a42f864222898c73a1add9d38dc549879">More...</a><br /></td></tr>
<tr class="separator:a42f864222898c73a1add9d38dc549879"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3e098ef4bf7e1fe17f2a3929cd38d20d"><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="synchronization_8h.html#a3e098ef4bf7e1fe17f2a3929cd38d20d">CondVar_Signal</a> (<a class="el" href="synchronization_8h.html#a7da2ad46c2b89e00508f9220dd877eda">CondVar</a> *cv)</td></tr>
<tr class="memdesc:a3e098ef4bf7e1fe17f2a3929cd38d20d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Wakes up a single thread waiting on a condition variable. <a href="synchronization_8h.html#a3e098ef4bf7e1fe17f2a3929cd38d20d">More...</a><br /></td></tr>
<tr class="separator:a3e098ef4bf7e1fe17f2a3929cd38d20d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac7ba47b2c6fee27ddfe7cdda4d9baa91"><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="synchronization_8h.html#ac7ba47b2c6fee27ddfe7cdda4d9baa91">CondVar_Broadcast</a> (<a class="el" href="synchronization_8h.html#a7da2ad46c2b89e00508f9220dd877eda">CondVar</a> *cv)</td></tr>
<tr class="memdesc:ac7ba47b2c6fee27ddfe7cdda4d9baa91"><td class="mdescLeft">&#160;</td><td class="mdescRight">Wakes up all threads waiting on a condition variable. <a href="synchronization_8h.html#ac7ba47b2c6fee27ddfe7cdda4d9baa91">More...</a><br /></td></tr>
<tr class="separator:ac7ba47b2c6fee27ddfe7cdda4d9baa91"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2c159aa9078752dbd82da805539b2041"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="synchronization_8h.html#a2c159aa9078752dbd82da805539b2041">LightEvent_Init</a> (<a class="el" href="structLightEvent.html">LightEvent</a> *event, <a class="el" href="svc_8h.html#adfe6b9db49aa88865e1fff5e559f6fdf">ResetType</a> reset_type)</td></tr>
<tr class="memdesc:a2c159aa9078752dbd82da805539b2041"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initializes a light event. <a href="synchronization_8h.html#a2c159aa9078752dbd82da805539b2041">More...</a><br /></td></tr>
<tr class="separator:a2c159aa9078752dbd82da805539b2041"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6c6fd28b9c7fd324c3e70d30118a06ce"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="synchronization_8h.html#a6c6fd28b9c7fd324c3e70d30118a06ce">LightEvent_Clear</a> (<a class="el" href="structLightEvent.html">LightEvent</a> *event)</td></tr>
<tr class="memdesc:a6c6fd28b9c7fd324c3e70d30118a06ce"><td class="mdescLeft">&#160;</td><td class="mdescRight">Clears a light event. <a href="synchronization_8h.html#a6c6fd28b9c7fd324c3e70d30118a06ce">More...</a><br /></td></tr>
<tr class="separator:a6c6fd28b9c7fd324c3e70d30118a06ce"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3a54526dc1d5f9e1d84b92ce10194a2d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="synchronization_8h.html#a3a54526dc1d5f9e1d84b92ce10194a2d">LightEvent_Pulse</a> (<a class="el" href="structLightEvent.html">LightEvent</a> *event)</td></tr>
<tr class="memdesc:a3a54526dc1d5f9e1d84b92ce10194a2d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Wakes up threads waiting on a sticky light event without signaling it. <a href="synchronization_8h.html#a3a54526dc1d5f9e1d84b92ce10194a2d">More...</a><br /></td></tr>
<tr class="separator:a3a54526dc1d5f9e1d84b92ce10194a2d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acad8ac29952dad0bb22d2453afd38277"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="synchronization_8h.html#acad8ac29952dad0bb22d2453afd38277">LightEvent_Signal</a> (<a class="el" href="structLightEvent.html">LightEvent</a> *event)</td></tr>
<tr class="memdesc:acad8ac29952dad0bb22d2453afd38277"><td class="mdescLeft">&#160;</td><td class="mdescRight">Signals a light event, waking up threads waiting on it. <a href="synchronization_8h.html#acad8ac29952dad0bb22d2453afd38277">More...</a><br /></td></tr>
<tr class="separator:acad8ac29952dad0bb22d2453afd38277"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a347ff040af029b4bbaae6f65f0e48de9"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="synchronization_8h.html#a347ff040af029b4bbaae6f65f0e48de9">LightEvent_TryWait</a> (<a class="el" href="structLightEvent.html">LightEvent</a> *event)</td></tr>
<tr class="memdesc:a347ff040af029b4bbaae6f65f0e48de9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Attempts to wait on a light event. <a href="synchronization_8h.html#a347ff040af029b4bbaae6f65f0e48de9">More...</a><br /></td></tr>
<tr class="separator:a347ff040af029b4bbaae6f65f0e48de9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0cb8fd551e01b94cd6d0ae23da6a1074"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="synchronization_8h.html#a0cb8fd551e01b94cd6d0ae23da6a1074">LightEvent_Wait</a> (<a class="el" href="structLightEvent.html">LightEvent</a> *event)</td></tr>
<tr class="memdesc:a0cb8fd551e01b94cd6d0ae23da6a1074"><td class="mdescLeft">&#160;</td><td class="mdescRight">Waits on a light event. <a href="synchronization_8h.html#a0cb8fd551e01b94cd6d0ae23da6a1074">More...</a><br /></td></tr>
<tr class="separator:a0cb8fd551e01b94cd6d0ae23da6a1074"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aac847c6acd805d89a04984f166349098"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="synchronization_8h.html#aac847c6acd805d89a04984f166349098">LightEvent_WaitTimeout</a> (<a class="el" href="structLightEvent.html">LightEvent</a> *event, <a class="el" href="types_8h.html#a350c6fc928e3bdc6c6486268ac8fb269">s64</a> timeout_ns)</td></tr>
<tr class="memdesc:aac847c6acd805d89a04984f166349098"><td class="mdescLeft">&#160;</td><td class="mdescRight">Waits on a light event until either the event is signaled or the timeout is reached. <a href="synchronization_8h.html#aac847c6acd805d89a04984f166349098">More...</a><br /></td></tr>
<tr class="separator:aac847c6acd805d89a04984f166349098"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acf3e0856c84bcdfd25c389fe5dd8663d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="synchronization_8h.html#acf3e0856c84bcdfd25c389fe5dd8663d">LightSemaphore_Init</a> (<a class="el" href="structLightSemaphore.html">LightSemaphore</a> *semaphore, <a class="el" href="types_8h.html#aa980e2c02ba2305e0f489d5650655425">s16</a> initial_count, <a class="el" href="types_8h.html#aa980e2c02ba2305e0f489d5650655425">s16</a> max_count)</td></tr>
<tr class="memdesc:acf3e0856c84bcdfd25c389fe5dd8663d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initializes a light semaphore. <a href="synchronization_8h.html#acf3e0856c84bcdfd25c389fe5dd8663d">More...</a><br /></td></tr>
<tr class="separator:acf3e0856c84bcdfd25c389fe5dd8663d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad45ead296d3c1a87bd4e4cc0fb271040"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="synchronization_8h.html#ad45ead296d3c1a87bd4e4cc0fb271040">LightSemaphore_Acquire</a> (<a class="el" href="structLightSemaphore.html">LightSemaphore</a> *semaphore, <a class="el" href="types_8h.html#ae9b1af5c037e57a98884758875d3a7c4">s32</a> count)</td></tr>
<tr class="memdesc:ad45ead296d3c1a87bd4e4cc0fb271040"><td class="mdescLeft">&#160;</td><td class="mdescRight">Acquires a light semaphore. <a href="synchronization_8h.html#ad45ead296d3c1a87bd4e4cc0fb271040">More...</a><br /></td></tr>
<tr class="separator:ad45ead296d3c1a87bd4e4cc0fb271040"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a45ee3fb7b594430648015119f0f6c352"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="synchronization_8h.html#a45ee3fb7b594430648015119f0f6c352">LightSemaphore_TryAcquire</a> (<a class="el" href="structLightSemaphore.html">LightSemaphore</a> *semaphore, <a class="el" href="types_8h.html#ae9b1af5c037e57a98884758875d3a7c4">s32</a> count)</td></tr>
<tr class="memdesc:a45ee3fb7b594430648015119f0f6c352"><td class="mdescLeft">&#160;</td><td class="mdescRight">Attempts to acquire a light semaphore. <a href="synchronization_8h.html#a45ee3fb7b594430648015119f0f6c352">More...</a><br /></td></tr>
<tr class="separator:a45ee3fb7b594430648015119f0f6c352"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3f99c1cb0adc57d94823312b81e5518c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="synchronization_8h.html#a3f99c1cb0adc57d94823312b81e5518c">LightSemaphore_Release</a> (<a class="el" href="structLightSemaphore.html">LightSemaphore</a> *semaphore, <a class="el" href="types_8h.html#ae9b1af5c037e57a98884758875d3a7c4">s32</a> count)</td></tr>
<tr class="memdesc:a3f99c1cb0adc57d94823312b81e5518c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Releases a light semaphore. <a href="synchronization_8h.html#a3f99c1cb0adc57d94823312b81e5518c">More...</a><br /></td></tr>
<tr class="separator:a3f99c1cb0adc57d94823312b81e5518c"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Provides synchronization locks. </p>
</div><h2 class="groupheader">Function Documentation</h2>
<a id="a9fe83ca3ec3c6ae269203acf367ad5a9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9fe83ca3ec3c6ae269203acf367ad5a9">&#9670;&nbsp;</a></span>__ldrex()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static <a class="el" href="types_8h.html#ae9b1af5c037e57a98884758875d3a7c4">s32</a> __ldrex </td>
<td>(</td>
<td class="paramtype"><a class="el" href="types_8h.html#ae9b1af5c037e57a98884758875d3a7c4">s32</a> *&#160;</td>
<td class="paramname"><em>addr</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Performs a ldrex operation. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">addr</td><td>Address to perform the operation on. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The resulting value. </dd></dl>
</div>
</div>
<a id="a3edf8cb6c54dca775890c04e57919d73"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3edf8cb6c54dca775890c04e57919d73">&#9670;&nbsp;</a></span>__ldrexb()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static <a class="el" href="types_8h.html#a92c50087ca0e64fa93fc59402c55f8ca">u8</a> __ldrexb </td>
<td>(</td>
<td class="paramtype"><a class="el" href="types_8h.html#a92c50087ca0e64fa93fc59402c55f8ca">u8</a> *&#160;</td>
<td class="paramname"><em>addr</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Performs a ldrexb operation. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">addr</td><td>Address to perform the operation on. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The resulting value. </dd></dl>
</div>
</div>
<a id="ac8b9943bc74f25d3efa4c413cd3e5be6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac8b9943bc74f25d3efa4c413cd3e5be6">&#9670;&nbsp;</a></span>__ldrexh()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static <a class="el" href="types_8h.html#ace9d960e74685e2cd84b36132dbbf8aa">u16</a> __ldrexh </td>
<td>(</td>
<td class="paramtype"><a class="el" href="types_8h.html#ace9d960e74685e2cd84b36132dbbf8aa">u16</a> *&#160;</td>
<td class="paramname"><em>addr</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Performs a ldrexh operation. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">addr</td><td>Address to perform the operation on. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The resulting value. </dd></dl>
</div>
</div>
<a id="ae5b6bc8b7ae74b57efbb0707c1d6cea9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae5b6bc8b7ae74b57efbb0707c1d6cea9">&#9670;&nbsp;</a></span>__strex()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static bool __strex </td>
<td>(</td>
<td class="paramtype"><a class="el" href="types_8h.html#ae9b1af5c037e57a98884758875d3a7c4">s32</a> *&#160;</td>
<td class="paramname"><em>addr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="types_8h.html#ae9b1af5c037e57a98884758875d3a7c4">s32</a>&#160;</td>
<td class="paramname"><em>val</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Performs a strex operation. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">addr</td><td>Address to perform the operation on. </td></tr>
<tr><td class="paramname">val</td><td>Value to store. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Whether the operation was successful. </dd></dl>
</div>
</div>
<a id="acd9826a3a62cf5190048acde58e69776"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acd9826a3a62cf5190048acde58e69776">&#9670;&nbsp;</a></span>__strexb()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static bool __strexb </td>
<td>(</td>
<td class="paramtype"><a class="el" href="types_8h.html#a92c50087ca0e64fa93fc59402c55f8ca">u8</a> *&#160;</td>
<td class="paramname"><em>addr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="types_8h.html#a92c50087ca0e64fa93fc59402c55f8ca">u8</a>&#160;</td>
<td class="paramname"><em>val</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Performs a strexb operation. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">addr</td><td>Address to perform the operation on. </td></tr>
<tr><td class="paramname">val</td><td>Value to store. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Whether the operation was successful. </dd></dl>
</div>
</div>
<a id="a276f8cccf5abeb6b35f067b7a8c9a40c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a276f8cccf5abeb6b35f067b7a8c9a40c">&#9670;&nbsp;</a></span>__strexh()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static bool __strexh </td>
<td>(</td>
<td class="paramtype"><a class="el" href="types_8h.html#ace9d960e74685e2cd84b36132dbbf8aa">u16</a> *&#160;</td>
<td class="paramname"><em>addr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="types_8h.html#ace9d960e74685e2cd84b36132dbbf8aa">u16</a>&#160;</td>
<td class="paramname"><em>val</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Performs a strexh operation. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">addr</td><td>Address to perform the operation on. </td></tr>
<tr><td class="paramname">val</td><td>Value to store. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Whether the operation was successful. </dd></dl>
</div>
</div>
<a id="ac7ba47b2c6fee27ddfe7cdda4d9baa91"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac7ba47b2c6fee27ddfe7cdda4d9baa91">&#9670;&nbsp;</a></span>CondVar_Broadcast()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static void CondVar_Broadcast </td>
<td>(</td>
<td class="paramtype"><a class="el" href="synchronization_8h.html#a7da2ad46c2b89e00508f9220dd877eda">CondVar</a> *&#160;</td>
<td class="paramname"><em>cv</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Wakes up all threads waiting on a condition variable. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">cv</td><td>Pointer to the condition variable. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="ab8afa06278ad323a3c80210adef7310b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab8afa06278ad323a3c80210adef7310b">&#9670;&nbsp;</a></span>CondVar_Init()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void CondVar_Init </td>
<td>(</td>
<td class="paramtype"><a class="el" href="synchronization_8h.html#a7da2ad46c2b89e00508f9220dd877eda">CondVar</a> *&#160;</td>
<td class="paramname"><em>cv</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Initializes a condition variable. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">cv</td><td>Pointer to the condition variable. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a3e098ef4bf7e1fe17f2a3929cd38d20d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3e098ef4bf7e1fe17f2a3929cd38d20d">&#9670;&nbsp;</a></span>CondVar_Signal()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static void CondVar_Signal </td>
<td>(</td>
<td class="paramtype"><a class="el" href="synchronization_8h.html#a7da2ad46c2b89e00508f9220dd877eda">CondVar</a> *&#160;</td>
<td class="paramname"><em>cv</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Wakes up a single thread waiting on a condition variable. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">cv</td><td>Pointer to the condition variable. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a9d0a741fa7f5c6be9dc98e296817b293"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9d0a741fa7f5c6be9dc98e296817b293">&#9670;&nbsp;</a></span>CondVar_Wait()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void CondVar_Wait </td>
<td>(</td>
<td class="paramtype"><a class="el" href="synchronization_8h.html#a7da2ad46c2b89e00508f9220dd877eda">CondVar</a> *&#160;</td>
<td class="paramname"><em>cv</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="synchronization_8h.html#a0d966c33d353bedf60c66a1a75e68c5e">LightLock</a> *&#160;</td>
<td class="paramname"><em>lock</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Waits on a condition variable. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">cv</td><td>Pointer to the condition variable. </td></tr>
<tr><td class="paramname">lock</td><td>Pointer to the lock to atomically unlock/relock during the wait. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="aa7aabd77eba2813fb5508e726335b211"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa7aabd77eba2813fb5508e726335b211">&#9670;&nbsp;</a></span>CondVar_WaitTimeout()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int CondVar_WaitTimeout </td>
<td>(</td>
<td class="paramtype"><a class="el" href="synchronization_8h.html#a7da2ad46c2b89e00508f9220dd877eda">CondVar</a> *&#160;</td>
<td class="paramname"><em>cv</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="synchronization_8h.html#a0d966c33d353bedf60c66a1a75e68c5e">LightLock</a> *&#160;</td>
<td class="paramname"><em>lock</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="types_8h.html#a350c6fc928e3bdc6c6486268ac8fb269">s64</a>&#160;</td>
<td class="paramname"><em>timeout_ns</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Waits on a condition variable with a timeout. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">cv</td><td>Pointer to the condition variable. </td></tr>
<tr><td class="paramname">lock</td><td>Pointer to the lock to atomically unlock/relock during the wait. </td></tr>
<tr><td class="paramname">timeout_ns</td><td>Timeout in nanoseconds. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Zero on success, non-zero on failure. </dd></dl>
</div>
</div>
<a id="a42f864222898c73a1add9d38dc549879"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a42f864222898c73a1add9d38dc549879">&#9670;&nbsp;</a></span>CondVar_WakeUp()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void CondVar_WakeUp </td>
<td>(</td>
<td class="paramtype"><a class="el" href="synchronization_8h.html#a7da2ad46c2b89e00508f9220dd877eda">CondVar</a> *&#160;</td>
<td class="paramname"><em>cv</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="types_8h.html#ae9b1af5c037e57a98884758875d3a7c4">s32</a>&#160;</td>
<td class="paramname"><em>num_threads</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Wakes up threads waiting on a condition variable. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">cv</td><td>Pointer to the condition variable. </td></tr>
<tr><td class="paramname">num_threads</td><td>Maximum number of threads to wake up (or <a class="el" href="svc_8h.html#acca9c678c119f4d1291e09c58f9ccaf5">ARBITRATION_SIGNAL_ALL</a> to wake them all). </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a6c6fd28b9c7fd324c3e70d30118a06ce"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6c6fd28b9c7fd324c3e70d30118a06ce">&#9670;&nbsp;</a></span>LightEvent_Clear()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void LightEvent_Clear </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structLightEvent.html">LightEvent</a> *&#160;</td>
<td class="paramname"><em>event</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Clears a light event. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">event</td><td>Pointer to the event. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a2c159aa9078752dbd82da805539b2041"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2c159aa9078752dbd82da805539b2041">&#9670;&nbsp;</a></span>LightEvent_Init()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void LightEvent_Init </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structLightEvent.html">LightEvent</a> *&#160;</td>
<td class="paramname"><em>event</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="svc_8h.html#adfe6b9db49aa88865e1fff5e559f6fdf">ResetType</a>&#160;</td>
<td class="paramname"><em>reset_type</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Initializes a light event. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">event</td><td>Pointer to the event. </td></tr>
<tr><td class="paramname">reset_type</td><td>Type of reset the event uses (RESET_ONESHOT/RESET_STICKY). </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a3a54526dc1d5f9e1d84b92ce10194a2d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3a54526dc1d5f9e1d84b92ce10194a2d">&#9670;&nbsp;</a></span>LightEvent_Pulse()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void LightEvent_Pulse </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structLightEvent.html">LightEvent</a> *&#160;</td>
<td class="paramname"><em>event</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Wakes up threads waiting on a sticky light event without signaling it. </p>
<p>If the event had been signaled before, it is cleared instead. </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">event</td><td>Pointer to the event. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="acad8ac29952dad0bb22d2453afd38277"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acad8ac29952dad0bb22d2453afd38277">&#9670;&nbsp;</a></span>LightEvent_Signal()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void LightEvent_Signal </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structLightEvent.html">LightEvent</a> *&#160;</td>
<td class="paramname"><em>event</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Signals a light event, waking up threads waiting on it. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">event</td><td>Pointer to the event. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a347ff040af029b4bbaae6f65f0e48de9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a347ff040af029b4bbaae6f65f0e48de9">&#9670;&nbsp;</a></span>LightEvent_TryWait()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int LightEvent_TryWait </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structLightEvent.html">LightEvent</a> *&#160;</td>
<td class="paramname"><em>event</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Attempts to wait on a light event. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">event</td><td>Pointer to the event. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Non-zero if the event was signaled, zero otherwise. </dd></dl>
</div>
</div>
<a id="a0cb8fd551e01b94cd6d0ae23da6a1074"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0cb8fd551e01b94cd6d0ae23da6a1074">&#9670;&nbsp;</a></span>LightEvent_Wait()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void LightEvent_Wait </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structLightEvent.html">LightEvent</a> *&#160;</td>
<td class="paramname"><em>event</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Waits on a light event. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">event</td><td>Pointer to the event. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="aac847c6acd805d89a04984f166349098"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aac847c6acd805d89a04984f166349098">&#9670;&nbsp;</a></span>LightEvent_WaitTimeout()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int LightEvent_WaitTimeout </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structLightEvent.html">LightEvent</a> *&#160;</td>
<td class="paramname"><em>event</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="types_8h.html#a350c6fc928e3bdc6c6486268ac8fb269">s64</a>&#160;</td>
<td class="paramname"><em>timeout_ns</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Waits on a light event until either the event is signaled or the timeout is reached. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">event</td><td>Pointer to the event. </td></tr>
<tr><td class="paramname">timeout_ns</td><td>Timeout in nanoseconds. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Non-zero on timeout, zero otherwise. </dd></dl>
</div>
</div>
<a id="a81f625fde46405c1d539b1581d54fb05"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a81f625fde46405c1d539b1581d54fb05">&#9670;&nbsp;</a></span>LightLock_Init()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void LightLock_Init </td>
<td>(</td>
<td class="paramtype"><a class="el" href="synchronization_8h.html#a0d966c33d353bedf60c66a1a75e68c5e">LightLock</a> *&#160;</td>
<td class="paramname"><em>lock</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Initializes a light lock. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">lock</td><td>Pointer to the lock. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="ae75aac6e4bfe30037c8a9de916a6ddb8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae75aac6e4bfe30037c8a9de916a6ddb8">&#9670;&nbsp;</a></span>LightLock_Lock()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void LightLock_Lock </td>
<td>(</td>
<td class="paramtype"><a class="el" href="synchronization_8h.html#a0d966c33d353bedf60c66a1a75e68c5e">LightLock</a> *&#160;</td>
<td class="paramname"><em>lock</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Locks a light lock. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">lock</td><td>Pointer to the lock. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a1a1d677c021a8487d567f832dea9d9db"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1a1d677c021a8487d567f832dea9d9db">&#9670;&nbsp;</a></span>LightLock_TryLock()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int LightLock_TryLock </td>
<td>(</td>
<td class="paramtype"><a class="el" href="synchronization_8h.html#a0d966c33d353bedf60c66a1a75e68c5e">LightLock</a> *&#160;</td>
<td class="paramname"><em>lock</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Attempts to lock a light lock. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">lock</td><td>Pointer to the lock. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Zero on success, non-zero on failure. </dd></dl>
</div>
</div>
<a id="a82283ae772ec2eac3a193b1431a681af"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a82283ae772ec2eac3a193b1431a681af">&#9670;&nbsp;</a></span>LightLock_Unlock()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void LightLock_Unlock </td>
<td>(</td>
<td class="paramtype"><a class="el" href="synchronization_8h.html#a0d966c33d353bedf60c66a1a75e68c5e">LightLock</a> *&#160;</td>
<td class="paramname"><em>lock</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Unlocks a light lock. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">lock</td><td>Pointer to the lock. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="ad45ead296d3c1a87bd4e4cc0fb271040"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad45ead296d3c1a87bd4e4cc0fb271040">&#9670;&nbsp;</a></span>LightSemaphore_Acquire()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void LightSemaphore_Acquire </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structLightSemaphore.html">LightSemaphore</a> *&#160;</td>
<td class="paramname"><em>semaphore</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="types_8h.html#ae9b1af5c037e57a98884758875d3a7c4">s32</a>&#160;</td>
<td class="paramname"><em>count</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Acquires a light semaphore. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">semaphore</td><td>Pointer to the semaphore. </td></tr>
<tr><td class="paramname">count</td><td>Acquire count </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="acf3e0856c84bcdfd25c389fe5dd8663d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acf3e0856c84bcdfd25c389fe5dd8663d">&#9670;&nbsp;</a></span>LightSemaphore_Init()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void LightSemaphore_Init </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structLightSemaphore.html">LightSemaphore</a> *&#160;</td>
<td class="paramname"><em>semaphore</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="types_8h.html#aa980e2c02ba2305e0f489d5650655425">s16</a>&#160;</td>
<td class="paramname"><em>initial_count</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="types_8h.html#aa980e2c02ba2305e0f489d5650655425">s16</a>&#160;</td>
<td class="paramname"><em>max_count</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Initializes a light semaphore. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">event</td><td>Pointer to the semaphore. </td></tr>
<tr><td class="paramname">max_count</td><td>Initial count of the semaphore. </td></tr>
<tr><td class="paramname">max_count</td><td>Maximum count of the semaphore. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a3f99c1cb0adc57d94823312b81e5518c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3f99c1cb0adc57d94823312b81e5518c">&#9670;&nbsp;</a></span>LightSemaphore_Release()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void LightSemaphore_Release </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structLightSemaphore.html">LightSemaphore</a> *&#160;</td>
<td class="paramname"><em>semaphore</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="types_8h.html#ae9b1af5c037e57a98884758875d3a7c4">s32</a>&#160;</td>
<td class="paramname"><em>count</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Releases a light semaphore. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">semaphore</td><td>Pointer to the semaphore. </td></tr>
<tr><td class="paramname">count</td><td>Release count </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a45ee3fb7b594430648015119f0f6c352"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a45ee3fb7b594430648015119f0f6c352">&#9670;&nbsp;</a></span>LightSemaphore_TryAcquire()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int LightSemaphore_TryAcquire </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structLightSemaphore.html">LightSemaphore</a> *&#160;</td>
<td class="paramname"><em>semaphore</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="types_8h.html#ae9b1af5c037e57a98884758875d3a7c4">s32</a>&#160;</td>
<td class="paramname"><em>count</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Attempts to acquire a light semaphore. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">semaphore</td><td>Pointer to the semaphore. </td></tr>
<tr><td class="paramname">count</td><td>Acquire count </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Zero on success, non-zero on failure </dd></dl>
</div>
</div>
<a id="a1bbbe87bf212a32850ac9f0b6aa73408"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1bbbe87bf212a32850ac9f0b6aa73408">&#9670;&nbsp;</a></span>RecursiveLock_Init()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void RecursiveLock_Init </td>
<td>(</td>
<td class="paramtype"><a class="el" href="synchronization_8h.html#ae161b0db2ef331125217c64729e18179">RecursiveLock</a> *&#160;</td>
<td class="paramname"><em>lock</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Initializes a recursive lock. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">lock</td><td>Pointer to the lock. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="afea61e6ff137d96934bb145d44095ccb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afea61e6ff137d96934bb145d44095ccb">&#9670;&nbsp;</a></span>RecursiveLock_Lock()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void RecursiveLock_Lock </td>
<td>(</td>
<td class="paramtype"><a class="el" href="synchronization_8h.html#ae161b0db2ef331125217c64729e18179">RecursiveLock</a> *&#160;</td>
<td class="paramname"><em>lock</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Locks a recursive lock. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">lock</td><td>Pointer to the lock. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a8808924fdee80220f83b6992bc5e104d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8808924fdee80220f83b6992bc5e104d">&#9670;&nbsp;</a></span>RecursiveLock_TryLock()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int RecursiveLock_TryLock </td>
<td>(</td>
<td class="paramtype"><a class="el" href="synchronization_8h.html#ae161b0db2ef331125217c64729e18179">RecursiveLock</a> *&#160;</td>
<td class="paramname"><em>lock</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Attempts to lock a recursive lock. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">lock</td><td>Pointer to the lock. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Zero on success, non-zero on failure. </dd></dl>
</div>
</div>
<a id="a529b21c4a974abeea24b1dcceb75cf62"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a529b21c4a974abeea24b1dcceb75cf62">&#9670;&nbsp;</a></span>RecursiveLock_Unlock()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void RecursiveLock_Unlock </td>
<td>(</td>
<td class="paramtype"><a class="el" href="synchronization_8h.html#ae161b0db2ef331125217c64729e18179">RecursiveLock</a> *&#160;</td>
<td class="paramname"><em>lock</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Unlocks a recursive lock. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">lock</td><td>Pointer to the lock. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a15f62531caa3fa14f5eac4735d96f9f7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a15f62531caa3fa14f5eac4735d96f9f7">&#9670;&nbsp;</a></span>syncArbitrateAddress()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="types_8h.html#ac830bf5a4f2cf8273f61ab99a46cf163">Result</a> syncArbitrateAddress </td>
<td>(</td>
<td class="paramtype"><a class="el" href="types_8h.html#ae9b1af5c037e57a98884758875d3a7c4">s32</a> *&#160;</td>
<td class="paramname"><em>addr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="svc_8h.html#a00f5b708129ef172b59197a775b533ec">ArbitrationType</a>&#160;</td>
<td class="paramname"><em>type</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="types_8h.html#ae9b1af5c037e57a98884758875d3a7c4">s32</a>&#160;</td>
<td class="paramname"><em>value</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Function used to implement user-mode synchronization primitives. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">addr</td><td>Pointer to a signed 32-bit value whose address will be used to identify waiting threads. </td></tr>
<tr><td class="paramname">type</td><td>Type of action to be performed by the arbiter </td></tr>
<tr><td class="paramname">value</td><td>Number of threads to signal if using <a class="el" href="svc_8h.html#a00f5b708129ef172b59197a775b533eca503fb7656e3429195054786b8779cbd6">ARBITRATION_SIGNAL</a>, or the value used for comparison.</td></tr>
</table>
</dd>
</dl>
<p>This will perform an arbitration based on #type. The comparisons are done between #value and the value at the address #addr.</p>
<div class="fragment"><div class="line"><a class="code" href="types_8h.html#ae9b1af5c037e57a98884758875d3a7c4">s32</a> val=0;</div>
<div class="line"><span class="comment">// Does *nothing* since val &gt;= 0</span></div>
<div class="line"><a class="code" href="synchronization_8h.html#a15f62531caa3fa14f5eac4735d96f9f7">syncArbitrateAddress</a>(&amp;val,<a class="code" href="svc_8h.html#a00f5b708129ef172b59197a775b533eca9416744f50ce5abc375c88692271c751">ARBITRATION_WAIT_IF_LESS_THAN</a>,0);</div>
<div class="ttc" id="asvc_8h_html_a00f5b708129ef172b59197a775b533eca9416744f50ce5abc375c88692271c751"><div class="ttname"><a href="svc_8h.html#a00f5b708129ef172b59197a775b533eca9416744f50ce5abc375c88692271c751">ARBITRATION_WAIT_IF_LESS_THAN</a></div><div class="ttdeci">@ ARBITRATION_WAIT_IF_LESS_THAN</div><div class="ttdoc">If the memory at the address is strictly lower than #value, then wait for signal.</div><div class="ttdef"><b>Definition:</b> svc.h:90</div></div>
<div class="ttc" id="asynchronization_8h_html_a15f62531caa3fa14f5eac4735d96f9f7"><div class="ttname"><a href="synchronization_8h.html#a15f62531caa3fa14f5eac4735d96f9f7">syncArbitrateAddress</a></div><div class="ttdeci">Result syncArbitrateAddress(s32 *addr, ArbitrationType type, s32 value)</div><div class="ttdoc">Function used to implement user-mode synchronization primitives.</div></div>
<div class="ttc" id="atypes_8h_html_ae9b1af5c037e57a98884758875d3a7c4"><div class="ttname"><a href="types_8h.html#ae9b1af5c037e57a98884758875d3a7c4">s32</a></div><div class="ttdeci">int32_t s32</div><div class="ttdoc">32-bit signed integer</div><div class="ttdef"><b>Definition:</b> types.h:28</div></div>
</div><!-- fragment --><dl class="section note"><dt>Note</dt><dd>Usage of this function entails an implicit Data Memory Barrier (dmb). </dd></dl>
</div>
</div>
<a id="a3ce965a644db4534de988a203751c56d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3ce965a644db4534de988a203751c56d">&#9670;&nbsp;</a></span>syncArbitrateAddressWithTimeout()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="types_8h.html#ac830bf5a4f2cf8273f61ab99a46cf163">Result</a> syncArbitrateAddressWithTimeout </td>
<td>(</td>
<td class="paramtype"><a class="el" href="types_8h.html#ae9b1af5c037e57a98884758875d3a7c4">s32</a> *&#160;</td>
<td class="paramname"><em>addr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="svc_8h.html#a00f5b708129ef172b59197a775b533ec">ArbitrationType</a>&#160;</td>
<td class="paramname"><em>type</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="types_8h.html#ae9b1af5c037e57a98884758875d3a7c4">s32</a>&#160;</td>
<td class="paramname"><em>value</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="types_8h.html#a350c6fc928e3bdc6c6486268ac8fb269">s64</a>&#160;</td>
<td class="paramname"><em>timeout_ns</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Function used to implement user-mode synchronization primitives (with timeout). </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">addr</td><td>Pointer to a signed 32-bit value whose address will be used to identify waiting threads. </td></tr>
<tr><td class="paramname">type</td><td>Type of action to be performed by the arbiter (must use <a class="el" href="svc_8h.html#a00f5b708129ef172b59197a775b533ecafe6754c50fcd095096605d9587188970">ARBITRATION_WAIT_IF_LESS_THAN_TIMEOUT</a> or <a class="el" href="svc_8h.html#a00f5b708129ef172b59197a775b533ecab503e618303a55b029bda8eef14776e9">ARBITRATION_DECREMENT_AND_WAIT_IF_LESS_THAN_TIMEOUT</a>) </td></tr>
<tr><td class="paramname">value</td><td>Number of threads to signal if using <a class="el" href="svc_8h.html#a00f5b708129ef172b59197a775b533eca503fb7656e3429195054786b8779cbd6">ARBITRATION_SIGNAL</a>, or the value used for comparison.</td></tr>
</table>
</dd>
</dl>
<p>This will perform an arbitration based on #type. The comparisons are done between #value and the value at the address #addr.</p>
<div class="fragment"><div class="line"><a class="code" href="types_8h.html#ae9b1af5c037e57a98884758875d3a7c4">s32</a> val=0;</div>
<div class="line"><span class="comment">// Thread will wait for a signal or wake up after 10000000 nanoseconds because val &lt; 1.</span></div>
<div class="line"><a class="code" href="synchronization_8h.html#a3ce965a644db4534de988a203751c56d">syncArbitrateAddressWithTimeout</a>(&amp;val,<a class="code" href="svc_8h.html#a00f5b708129ef172b59197a775b533ecafe6754c50fcd095096605d9587188970">ARBITRATION_WAIT_IF_LESS_THAN_TIMEOUT</a>,1,10000000LL);</div>
<div class="ttc" id="asvc_8h_html_a00f5b708129ef172b59197a775b533ecafe6754c50fcd095096605d9587188970"><div class="ttname"><a href="svc_8h.html#a00f5b708129ef172b59197a775b533ecafe6754c50fcd095096605d9587188970">ARBITRATION_WAIT_IF_LESS_THAN_TIMEOUT</a></div><div class="ttdeci">@ ARBITRATION_WAIT_IF_LESS_THAN_TIMEOUT</div><div class="ttdoc">If the memory at the address is strictly lower than #value, then wait for signal or timeout.</div><div class="ttdef"><b>Definition:</b> svc.h:92</div></div>
<div class="ttc" id="asynchronization_8h_html_a3ce965a644db4534de988a203751c56d"><div class="ttname"><a href="synchronization_8h.html#a3ce965a644db4534de988a203751c56d">syncArbitrateAddressWithTimeout</a></div><div class="ttdeci">Result syncArbitrateAddressWithTimeout(s32 *addr, ArbitrationType type, s32 value, s64 timeout_ns)</div><div class="ttdoc">Function used to implement user-mode synchronization primitives (with timeout).</div></div>
</div><!-- fragment --><dl class="section note"><dt>Note</dt><dd>Usage of this function entails an implicit Data Memory Barrier (dmb). </dd></dl>
</div>
</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
</small></address>
</body>
</html>