1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>Xenomai API: include/native/intr.h Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.6 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="main.html"><span>Main Page</span></a></li>
<li><a href="pages.html"><span>Related Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data Structures</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li><a href="examples.html"><span>Examples</span></a></li>
<li>
<form action="search.php" method="get">
<table cellspacing="0" cellpadding="0" border="0">
<tr>
<td><label> <u>S</u>earch for </label></td>
<td><input type="text" name="query" value="" size="20" accesskey="s"/></td>
</tr>
</table>
</form>
</li>
</ul>
</div>
<h1>include/native/intr.h</h1><a href="include_2native_2intr_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001
<a name="l00022"></a>00022 <span class="preprocessor">#ifndef _XENO_INTR_H</span>
<a name="l00023"></a>00023 <span class="preprocessor"></span><span class="preprocessor">#define _XENO_INTR_H</span>
<a name="l00024"></a>00024 <span class="preprocessor"></span>
<a name="l00025"></a>00025 <span class="preprocessor">#include <nucleus/intr.h></span>
<a name="l00026"></a>00026 <span class="preprocessor">#include <<a class="code" href="native_2types_8h.html" title="This file is part of the Xenomai project.">native/types.h</a>></span>
<a name="l00027"></a>00027
<a name="l00028"></a>00028 <span class="comment">/* Creation flag. */</span>
<a name="l00029"></a>00029 <span class="preprocessor">#define I_NOAUTOENA XN_ISR_NOENABLE </span><span class="comment">/* Do not auto-enable interrupt channel</span>
<a name="l00030"></a>00030 <span class="comment"> after each IRQ. */</span>
<a name="l00031"></a>00031 <span class="preprocessor">#define I_PROPAGATE XN_ISR_PROPAGATE </span><span class="comment">/* Propagate IRQs down the</span>
<a name="l00032"></a>00032 <span class="comment"> pipeline after processing; IOW,</span>
<a name="l00033"></a>00033 <span class="comment"> pass them to Linux. */</span>
<a name="l00034"></a>00034 <span class="keyword">typedef</span> <span class="keyword">struct </span>rt_intr_info {
<a name="l00035"></a>00035
<a name="l00036"></a>00036 <span class="keywordtype">unsigned</span> irq; <span class="comment">/* !< Interrupt request number. */</span>
<a name="l00037"></a>00037
<a name="l00038"></a>00038 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> hits; <span class="comment">/* !< Number of receipts (since attachment), 0 if</span>
<a name="l00039"></a>00039 <span class="comment"> statistics support is disable in the nucleus. */</span>
<a name="l00040"></a>00040
<a name="l00041"></a>00041 <span class="keywordtype">char</span> name[XNOBJECT_NAME_LEN]; <span class="comment">/* !< Symbolic name. */</span>
<a name="l00042"></a>00042
<a name="l00043"></a>00043 } RT_INTR_INFO;
<a name="l00044"></a>00044
<a name="l00045"></a>00045 <span class="keyword">typedef</span> <span class="keyword">struct </span>rt_intr_placeholder {
<a name="l00046"></a>00046 xnhandle_t opaque;
<a name="l00047"></a>00047 } RT_INTR_PLACEHOLDER;
<a name="l00048"></a>00048
<a name="l00049"></a>00049 <span class="preprocessor">#if (defined(__KERNEL__) || defined(__XENO_SIM__)) && !defined(DOXYGEN_CPP)</span>
<a name="l00050"></a>00050 <span class="preprocessor"></span>
<a name="l00051"></a>00051 <span class="preprocessor">#include <nucleus/synch.h></span>
<a name="l00052"></a>00052 <span class="preprocessor">#include <<a class="code" href="native_2ppd_8h.html" title="This file is part of the Xenomai project.">native/ppd.h</a>></span>
<a name="l00053"></a>00053
<a name="l00054"></a>00054 <span class="preprocessor">#define XENO_INTR_MAGIC 0x55550a0a</span>
<a name="l00055"></a>00055 <span class="preprocessor"></span>
<a name="l00056"></a>00056 <span class="comment">/* Creation flags. */</span>
<a name="l00057"></a>00057 <span class="preprocessor">#define I_SHARED XN_ISR_SHARED</span>
<a name="l00058"></a>00058 <span class="preprocessor"></span><span class="preprocessor">#define I_EDGE XN_ISR_EDGE</span>
<a name="l00059"></a>00059 <span class="preprocessor"></span>
<a name="l00060"></a>00060 <span class="preprocessor">#define RT_INTR_HANDLED XN_ISR_HANDLED</span>
<a name="l00061"></a>00061 <span class="preprocessor"></span><span class="preprocessor">#define RT_INTR_NONE XN_ISR_NONE</span>
<a name="l00062"></a>00062 <span class="preprocessor"></span><span class="preprocessor">#define RT_INTR_PROPAGATE XN_ISR_PROPAGATE</span>
<a name="l00063"></a>00063 <span class="preprocessor"></span><span class="preprocessor">#define RT_INTR_NOENABLE XN_ISR_NOENABLE</span>
<a name="l00064"></a>00064 <span class="preprocessor"></span>
<a name="l00065"></a>00065 <span class="preprocessor">#define I_DESC(xintr) ((RT_INTR *)(xintr)->cookie)</span>
<a name="l00066"></a>00066 <span class="preprocessor"></span>
<a name="l00067"></a>00067 <span class="keyword">typedef</span> <span class="keyword">struct </span>rt_intr {
<a name="l00068"></a>00068
<a name="l00069"></a>00069 <span class="keywordtype">unsigned</span> magic; <span class="comment">/* !< Magic code - must be first */</span>
<a name="l00070"></a>00070
<a name="l00071"></a>00071 xnintr_t intr_base; <span class="comment">/* !< Base interrupt object. */</span>
<a name="l00072"></a>00072
<a name="l00073"></a>00073 <span class="keywordtype">void</span> *private_data; <span class="comment">/* !< Private user-defined data. */</span>
<a name="l00074"></a>00074
<a name="l00075"></a>00075 xnhandle_t handle; <span class="comment">/* !< Handle in registry -- zero if unregistered. */</span>
<a name="l00076"></a>00076
<a name="l00077"></a>00077 <span class="keywordtype">char</span> name[XNOBJECT_NAME_LEN]; <span class="comment">/* !< Symbolic name. */</span>
<a name="l00078"></a>00078
<a name="l00079"></a>00079 <span class="preprocessor">#ifdef CONFIG_XENO_OPT_PERVASIVE</span>
<a name="l00080"></a>00080 <span class="preprocessor"></span> <span class="keywordtype">int</span> mode; <span class="comment">/* !< Interrupt control mode. */</span>
<a name="l00081"></a>00081
<a name="l00082"></a>00082 <span class="keywordtype">int</span> pending; <span class="comment">/* !< Pending hits to process. */</span>
<a name="l00083"></a>00083
<a name="l00084"></a>00084 xnsynch_t synch_base; <span class="comment">/* !< Base synchronization object. */</span>
<a name="l00085"></a>00085
<a name="l00086"></a>00086 pid_t cpid; <span class="comment">/* !< Creator's pid. */</span>
<a name="l00087"></a>00087 <span class="preprocessor">#endif </span><span class="comment">/* CONFIG_XENO_OPT_PERVASIVE */</span>
<a name="l00088"></a>00088
<a name="l00089"></a>00089 xnholder_t rlink; <span class="comment">/* !< Link in resource queue. */</span>
<a name="l00090"></a>00090
<a name="l00091"></a>00091 <span class="preprocessor">#define rlink2intr(ln) container_of(ln, RT_INTR, rlink)</span>
<a name="l00092"></a>00092 <span class="preprocessor"></span>
<a name="l00093"></a>00093 xnqueue_t *rqueue; <span class="comment">/* !< Backpointer to resource queue. */</span>
<a name="l00094"></a>00094
<a name="l00095"></a>00095 } RT_INTR;
<a name="l00096"></a>00096
<a name="l00097"></a>00097 <span class="preprocessor">#define rt_intr_save(x) splhigh(x)</span>
<a name="l00098"></a>00098 <span class="preprocessor"></span><span class="preprocessor">#define rt_intr_restore(x) splexit(x)</span>
<a name="l00099"></a>00099 <span class="preprocessor"></span><span class="preprocessor">#define rt_intr_unmask() splnone()</span>
<a name="l00100"></a>00100 <span class="preprocessor"></span><span class="preprocessor">#define rt_intr_flags(x) splget(x)</span>
<a name="l00101"></a>00101 <span class="preprocessor"></span>
<a name="l00102"></a>00102 <span class="preprocessor">#ifdef __cplusplus</span>
<a name="l00103"></a>00103 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="stringliteral">"C"</span> {
<a name="l00104"></a>00104 <span class="preprocessor">#endif</span>
<a name="l00105"></a>00105 <span class="preprocessor"></span>
<a name="l00106"></a>00106 <span class="preprocessor">#ifdef CONFIG_XENO_OPT_NATIVE_INTR</span>
<a name="l00107"></a>00107 <span class="preprocessor"></span>
<a name="l00108"></a>00108 <span class="keywordtype">int</span> __native_intr_pkg_init(<span class="keywordtype">void</span>);
<a name="l00109"></a>00109
<a name="l00110"></a>00110 <span class="keywordtype">void</span> __native_intr_pkg_cleanup(<span class="keywordtype">void</span>);
<a name="l00111"></a>00111
<a name="l00112"></a>00112 <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> __native_intr_flush_rq(xnqueue_t *rq)
<a name="l00113"></a>00113 {
<a name="l00114"></a>00114 xeno_flush_rq(RT_INTR, rq, intr);
<a name="l00115"></a>00115 }
<a name="l00116"></a>00116
<a name="l00117"></a>00117 <span class="preprocessor">#else </span><span class="comment">/* !CONFIG_XENO_OPT_NATIVE_INTR */</span>
<a name="l00118"></a>00118
<a name="l00119"></a>00119 <span class="preprocessor">#define __native_intr_pkg_init() ({ 0; })</span>
<a name="l00120"></a>00120 <span class="preprocessor"></span><span class="preprocessor">#define __native_intr_pkg_cleanup() do { } while(0)</span>
<a name="l00121"></a>00121 <span class="preprocessor"></span><span class="preprocessor">#define __native_intr_flush_rq(rq) do { } while(0)</span>
<a name="l00122"></a>00122 <span class="preprocessor"></span>
<a name="l00123"></a>00123 <span class="preprocessor">#endif </span><span class="comment">/* !CONFIG_XENO_OPT_NATIVE_INTR */</span>
<a name="l00124"></a>00124
<a name="l00125"></a>00125 <span class="keywordtype">int</span> <a class="code" href="group__interrupt.html#g92fa8e83f6f3db05dd1d2d075dd310ee" title="Create an interrupt object from user-space.">rt_intr_create</a>(RT_INTR *intr,
<a name="l00126"></a>00126 <span class="keyword">const</span> <span class="keywordtype">char</span> *name,
<a name="l00127"></a>00127 <span class="keywordtype">unsigned</span> irq,
<a name="l00128"></a>00128 rt_isr_t isr,
<a name="l00129"></a>00129 rt_iack_t iack,
<a name="l00130"></a>00130 <span class="keywordtype">int</span> mode);
<a name="l00131"></a>00131
<a name="l00132"></a>00132 <span class="preprocessor">#ifdef CONFIG_XENO_OPT_PERVASIVE</span>
<a name="l00133"></a>00133 <span class="preprocessor"></span><span class="keywordtype">int</span> rt_intr_handler(xnintr_t *cookie);
<a name="l00134"></a>00134 <span class="preprocessor">#endif </span><span class="comment">/* CONFIG_XENO_OPT_PERVASIVE */</span>
<a name="l00135"></a>00135
<a name="l00136"></a>00136 <span class="preprocessor">#ifdef __cplusplus</span>
<a name="l00137"></a>00137 <span class="preprocessor"></span>}
<a name="l00138"></a>00138 <span class="preprocessor">#endif</span>
<a name="l00139"></a>00139 <span class="preprocessor"></span>
<a name="l00140"></a>00140 <span class="preprocessor">#else </span><span class="comment">/* !(__KERNEL__ || __XENO_SIM__) */</span>
<a name="l00141"></a>00141
<a name="l00142"></a>00142 <span class="keyword">typedef</span> RT_INTR_PLACEHOLDER RT_INTR;
<a name="l00143"></a>00143
<a name="l00144"></a>00144 <span class="preprocessor">#ifdef __cplusplus</span>
<a name="l00145"></a>00145 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="stringliteral">"C"</span> {
<a name="l00146"></a>00146 <span class="preprocessor">#endif</span>
<a name="l00147"></a>00147 <span class="preprocessor"></span>
<a name="l00148"></a>00148 <span class="keywordtype">int</span> <a class="code" href="group__interrupt.html#ge13742ca2710acfedc54c76541863fe3" title="Bind to an interrupt object.">rt_intr_bind</a>(RT_INTR *intr,
<a name="l00149"></a>00149 <span class="keyword">const</span> <span class="keywordtype">char</span> *name,
<a name="l00150"></a>00150 RTIME timeout);
<a name="l00151"></a>00151
<a name="l00152"></a><a class="code" href="group__interrupt.html#g4db46e047246e5c237a3c2816bf1889a">00152</a> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">int</span> <a class="code" href="group__interrupt.html#g4db46e047246e5c237a3c2816bf1889a" title="Unbind from an interrupt object.">rt_intr_unbind</a> (RT_INTR *intr)
<a name="l00153"></a>00153
<a name="l00154"></a>00154 {
<a name="l00155"></a>00155 intr->opaque = XN_NO_HANDLE;
<a name="l00156"></a>00156 <span class="keywordflow">return</span> 0;
<a name="l00157"></a>00157 }
<a name="l00158"></a>00158
<a name="l00159"></a>00159 <span class="keywordtype">int</span> <a class="code" href="group__interrupt.html#g92fa8e83f6f3db05dd1d2d075dd310ee" title="Create an interrupt object from user-space.">rt_intr_create</a>(RT_INTR *intr,
<a name="l00160"></a>00160 <span class="keyword">const</span> <span class="keywordtype">char</span> *name,
<a name="l00161"></a>00161 <span class="keywordtype">unsigned</span> irq,
<a name="l00162"></a>00162 <span class="keywordtype">int</span> mode);
<a name="l00163"></a>00163
<a name="l00164"></a>00164 <span class="keywordtype">int</span> <a class="code" href="group__interrupt.html#g222e6a9a681f83b13ed5b51021711f4d" title="Wait for the next interrupt.">rt_intr_wait</a>(RT_INTR *intr,
<a name="l00165"></a>00165 RTIME timeout);
<a name="l00166"></a>00166
<a name="l00167"></a>00167 <span class="preprocessor">#ifdef __cplusplus</span>
<a name="l00168"></a>00168 <span class="preprocessor"></span>}
<a name="l00169"></a>00169 <span class="preprocessor">#endif</span>
<a name="l00170"></a>00170 <span class="preprocessor"></span>
<a name="l00171"></a>00171 <span class="preprocessor">#endif </span><span class="comment">/* __KERNEL__ || __XENO_SIM__ */</span>
<a name="l00172"></a>00172
<a name="l00173"></a>00173 <span class="preprocessor">#ifdef __cplusplus</span>
<a name="l00174"></a>00174 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="stringliteral">"C"</span> {
<a name="l00175"></a>00175 <span class="preprocessor">#endif</span>
<a name="l00176"></a>00176 <span class="preprocessor"></span>
<a name="l00177"></a>00177 <span class="comment">/* Public interface. */</span>
<a name="l00178"></a>00178
<a name="l00179"></a>00179 <span class="keywordtype">int</span> <a class="code" href="group__interrupt.html#g6da6ddd4e65b0feb47278dae74cab6c9" title="Delete an interrupt object.">rt_intr_delete</a>(RT_INTR *intr);
<a name="l00180"></a>00180
<a name="l00181"></a>00181 <span class="keywordtype">int</span> <a class="code" href="group__interrupt.html#gc712ee67f90d053a21bdb0041a63e17c" title="Enable an interrupt object.">rt_intr_enable</a>(RT_INTR *intr);
<a name="l00182"></a>00182
<a name="l00183"></a>00183 <span class="keywordtype">int</span> <a class="code" href="group__interrupt.html#g9cf127812ea07326d5f4924f3e28eb3f" title="Disable an interrupt object.">rt_intr_disable</a>(RT_INTR *intr);
<a name="l00184"></a>00184
<a name="l00185"></a>00185 <span class="keywordtype">int</span> <a class="code" href="group__interrupt.html#gea34e43cbd6d6f515966f67990738395" title="Inquire about an interrupt object.">rt_intr_inquire</a>(RT_INTR *intr,
<a name="l00186"></a>00186 RT_INTR_INFO *info);
<a name="l00187"></a>00187
<a name="l00188"></a>00188 <span class="preprocessor">#ifdef __cplusplus</span>
<a name="l00189"></a>00189 <span class="preprocessor"></span>}
<a name="l00190"></a>00190 <span class="preprocessor">#endif</span>
<a name="l00191"></a>00191 <span class="preprocessor"></span>
<a name="l00192"></a>00192 <span class="preprocessor">#endif </span><span class="comment">/* !_XENO_INTR_H */</span>
</pre></div></div>
<hr size="1"><address style="text-align: right;"><small>Generated on Mon Aug 2 12:48:36 2010 for Xenomai API by
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
</body>
</html>
|