File: native_2pipe_8h-source.html

package info (click to toggle)
xenomai 2.4.4-3
  • links: PTS
  • area: main
  • in suites: lenny
  • size: 29,316 kB
  • ctags: 23,320
  • sloc: ansic: 75,366; sh: 10,477; makefile: 1,672; xml: 1,356; asm: 607; php: 316; perl: 155
file content (193 lines) | stat: -rw-r--r-- 15,038 bytes parent folder | download
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
<!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/pipe.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.5 -->
<div class="navigation" id="top">
  <div class="tabs">
    <ul>
      <li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
      <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
      <li><a href="modules.html"><span>Modules</span></a></li>
      <li><a href="annotated.html"><span>Data&nbsp;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>&nbsp;<u>S</u>earch&nbsp;for&nbsp;</label></td>
            <td><input type="text" name="query" value="" size="20" accesskey="s"/></td>
          </tr>
        </table>
      </form>
    </li>
    </ul>
  </div>
<h1>include/native/pipe.h</h1><a href="native_2pipe_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_PIPE_H</span>
<a name="l00023"></a>00023 <span class="preprocessor"></span><span class="preprocessor">#define _XENO_PIPE_H</span>
<a name="l00024"></a>00024 <span class="preprocessor"></span>
<a name="l00025"></a>00025 <span class="preprocessor">#include &lt;nucleus/pipe.h&gt;</span>
<a name="l00026"></a>00026 <span class="preprocessor">#include &lt;nucleus/heap.h&gt;</span>
<a name="l00027"></a>00027 <span class="preprocessor">#include &lt;native/types.h&gt;</span>
<a name="l00028"></a>00028 
<a name="l00029"></a>00029 <span class="comment">/* Operation flags. */</span>
<a name="l00030"></a>00030 <span class="preprocessor">#define P_NORMAL  XNPIPE_NORMAL</span>
<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="preprocessor">#define P_URGENT  XNPIPE_URGENT</span>
<a name="l00032"></a>00032 <span class="preprocessor"></span>
<a name="l00033"></a>00033 <span class="preprocessor">#define P_MINOR_AUTO    XNPIPE_MINOR_AUTO</span>
<a name="l00034"></a>00034 <span class="preprocessor"></span>
<a name="l00035"></a>00035 <span class="keyword">typedef</span> <span class="keyword">struct </span>rt_pipe_placeholder {
<a name="l00036"></a>00036     xnhandle_t opaque;
<a name="l00037"></a>00037 } RT_PIPE_PLACEHOLDER;
<a name="l00038"></a>00038 
<a name="l00039"></a>00039 <span class="preprocessor">#ifdef __KERNEL__</span>
<a name="l00040"></a>00040 <span class="preprocessor"></span>
<a name="l00041"></a>00041 <span class="preprocessor">#include &lt;native/ppd.h&gt;</span>
<a name="l00042"></a>00042 
<a name="l00043"></a>00043 <span class="preprocessor">#define XENO_PIPE_MAGIC  0x55550202</span>
<a name="l00044"></a>00044 <span class="preprocessor"></span>
<a name="l00045"></a>00045 <span class="preprocessor">#define P_SYNCWAIT  0</span>
<a name="l00046"></a>00046 <span class="preprocessor"></span><span class="preprocessor">#define P_ATOMIC    1</span>
<a name="l00047"></a>00047 <span class="preprocessor"></span>
<a name="l00048"></a>00048 <span class="keyword">typedef</span> xnpipe_mh_t RT_PIPE_MSG;
<a name="l00049"></a>00049 
<a name="l00050"></a>00050 <span class="preprocessor">#define P_MSGPTR(msg)  xnpipe_m_data(msg)</span>
<a name="l00051"></a>00051 <span class="preprocessor"></span><span class="preprocessor">#define P_MSGSIZE(msg) xnpipe_m_size(msg)</span>
<a name="l00052"></a>00052 <span class="preprocessor"></span>
<a name="l00053"></a>00053 <span class="keyword">typedef</span> <span class="keyword">struct </span>rt_pipe {
<a name="l00054"></a>00054 
<a name="l00055"></a>00055     <span class="keywordtype">unsigned</span> magic;             <span class="comment">/* !&lt; Magic code -- must be first. */</span>
<a name="l00056"></a>00056 
<a name="l00057"></a>00057     xnholder_t link;            <span class="comment">/* !&lt; Link in flush queue. */</span>
<a name="l00058"></a>00058 
<a name="l00059"></a>00059 <span class="preprocessor">#define link2rtpipe(ln) container_of(ln, RT_PIPE, link)</span>
<a name="l00060"></a>00060 <span class="preprocessor"></span>
<a name="l00061"></a>00061     <span class="keywordtype">int</span> minor;                  <span class="comment">/* !&lt; Device minor number.  */</span>
<a name="l00062"></a>00062 
<a name="l00063"></a>00063     RT_PIPE_MSG *buffer;        <span class="comment">/* !&lt; Buffer used in byte stream mode. */</span>
<a name="l00064"></a>00064 
<a name="l00065"></a>00065     xnheap_t *bufpool;         <span class="comment">/* !&lt; Current buffer pool. */</span>
<a name="l00066"></a>00066 
<a name="l00067"></a>00067     xnheap_t privpool;         <span class="comment">/* !&lt; Private buffer pool. */</span>
<a name="l00068"></a>00068 
<a name="l00069"></a>00069     <span class="keywordtype">size_t</span> fillsz;              <span class="comment">/* !&lt; Bytes written to the buffer.  */</span>
<a name="l00070"></a>00070 
<a name="l00071"></a>00071     u_long status;              <span class="comment">/* !&lt; Status information. */</span>
<a name="l00072"></a>00072 
<a name="l00073"></a>00073     xnhandle_t handle;          <span class="comment">/* !&lt; Handle in registry -- zero if unregistered. */</span>
<a name="l00074"></a>00074 
<a name="l00075"></a>00075     <span class="keywordtype">char</span> name[XNOBJECT_NAME_LEN]; <span class="comment">/* !&lt; Symbolic name. */</span>
<a name="l00076"></a>00076 
<a name="l00077"></a>00077 <span class="preprocessor">#ifdef CONFIG_XENO_OPT_PERVASIVE</span>
<a name="l00078"></a>00078 <span class="preprocessor"></span>    pid_t cpid;                 <span class="comment">/* !&lt; Creator's pid. */</span>
<a name="l00079"></a>00079 <span class="preprocessor">#endif </span><span class="comment">/* CONFIG_XENO_OPT_PERVASIVE */</span>
<a name="l00080"></a>00080 
<a name="l00081"></a>00081     xnholder_t rlink;           <span class="comment">/* !&lt; Link in resource queue. */</span>
<a name="l00082"></a>00082 
<a name="l00083"></a>00083 <span class="preprocessor">#define rlink2pipe(ln)          container_of(ln, RT_PIPE, rlink)</span>
<a name="l00084"></a>00084 <span class="preprocessor"></span>
<a name="l00085"></a>00085     xnqueue_t *rqueue;          <span class="comment">/* !&lt; Backpointer to resource queue. */</span>
<a name="l00086"></a>00086 
<a name="l00087"></a>00087 } RT_PIPE;
<a name="l00088"></a>00088 
<a name="l00089"></a>00089 <span class="preprocessor">#else </span><span class="comment">/* !__KERNEL__ */</span>
<a name="l00090"></a>00090 
<a name="l00091"></a>00091 <span class="keyword">typedef</span> RT_PIPE_PLACEHOLDER RT_PIPE;
<a name="l00092"></a>00092 
<a name="l00093"></a>00093 <span class="preprocessor">#endif </span><span class="comment">/* __KERNEL__ */</span>
<a name="l00094"></a>00094 
<a name="l00095"></a>00095 <span class="preprocessor">#ifdef __cplusplus</span>
<a name="l00096"></a>00096 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="stringliteral">"C"</span> {
<a name="l00097"></a>00097 <span class="preprocessor">#endif</span>
<a name="l00098"></a>00098 <span class="preprocessor"></span>
<a name="l00099"></a>00099 <span class="comment">/* Public interface. */</span>
<a name="l00100"></a>00100 
<a name="l00101"></a>00101 <span class="keywordtype">int</span> <a class="code" href="group__pipe.html#g29521cc898afa0069963964955167aa5" title="Create a message pipe.">rt_pipe_create</a>(RT_PIPE *pipe,
<a name="l00102"></a>00102                    <span class="keyword">const</span> <span class="keywordtype">char</span> *name,
<a name="l00103"></a>00103                    <span class="keywordtype">int</span> minor,
<a name="l00104"></a>00104                    <span class="keywordtype">size_t</span> poolsize);
<a name="l00105"></a>00105 
<a name="l00106"></a>00106 <span class="keywordtype">int</span> <a class="code" href="group__pipe.html#g1d84976a1b9b668366261ca9b836b677" title="Delete a message pipe.">rt_pipe_delete</a>(RT_PIPE *pipe);
<a name="l00107"></a>00107 
<a name="l00108"></a>00108 ssize_t <a class="code" href="group__pipe.html#g62cb64807c2c843f8e8eebb2dc3a7d4e" title="Read a message from a pipe.">rt_pipe_read</a>(RT_PIPE *pipe,
<a name="l00109"></a>00109                      <span class="keywordtype">void</span> *buf,
<a name="l00110"></a>00110                      <span class="keywordtype">size_t</span> size,
<a name="l00111"></a>00111                      RTIME timeout);
<a name="l00112"></a>00112 
<a name="l00113"></a>00113 ssize_t <a class="code" href="group__pipe.html#g12f801963d0db6aa60bc6cf92f65697a" title="Write a message to a pipe.">rt_pipe_write</a>(RT_PIPE *pipe,
<a name="l00114"></a>00114                       <span class="keyword">const</span> <span class="keywordtype">void</span> *buf,
<a name="l00115"></a>00115                       <span class="keywordtype">size_t</span> size,
<a name="l00116"></a>00116                       <span class="keywordtype">int</span> mode);
<a name="l00117"></a>00117 
<a name="l00118"></a>00118 ssize_t <a class="code" href="group__pipe.html#gd8edc920499d2c5c5d821ee7b9fa2bcd" title="Stream bytes to a pipe.">rt_pipe_stream</a>(RT_PIPE *pipe,
<a name="l00119"></a>00119                        <span class="keyword">const</span> <span class="keywordtype">void</span> *buf,
<a name="l00120"></a>00120                        <span class="keywordtype">size_t</span> size);
<a name="l00121"></a>00121 
<a name="l00122"></a>00122 <span class="preprocessor">#ifdef __KERNEL__</span>
<a name="l00123"></a>00123 <span class="preprocessor"></span>
<a name="l00124"></a>00124 ssize_t <a class="code" href="group__pipe.html#g731e5ef18007dcd58a9346bea66abbc6" title="Receive a message from a pipe.">rt_pipe_receive</a>(RT_PIPE *pipe,
<a name="l00125"></a>00125                         RT_PIPE_MSG **msg,
<a name="l00126"></a>00126                         RTIME timeout);
<a name="l00127"></a>00127 
<a name="l00128"></a>00128 ssize_t <a class="code" href="group__pipe.html#gf40b20cad1dcd7bedcda72beaa16c057" title="Send a message through a pipe.">rt_pipe_send</a>(RT_PIPE *pipe,
<a name="l00129"></a>00129                      RT_PIPE_MSG *msg,
<a name="l00130"></a>00130                      <span class="keywordtype">size_t</span> size,
<a name="l00131"></a>00131                      <span class="keywordtype">int</span> mode);
<a name="l00132"></a>00132 
<a name="l00133"></a>00133 RT_PIPE_MSG *<a class="code" href="group__pipe.html#g40f294bf6254d2e1b66b8b6b400fc2e5" title="Allocate a message pipe buffer.">rt_pipe_alloc</a>(RT_PIPE *pipe,
<a name="l00134"></a>00134                            <span class="keywordtype">size_t</span> size);
<a name="l00135"></a>00135 
<a name="l00136"></a>00136 <span class="keywordtype">int</span> <a class="code" href="group__pipe.html#g8face1c57df99cf43b029b3e3b6a05c6" title="Free a message pipe buffer.">rt_pipe_free</a>(RT_PIPE *pipe,
<a name="l00137"></a>00137                  RT_PIPE_MSG *msg);
<a name="l00138"></a>00138 
<a name="l00139"></a>00139 <span class="keywordtype">int</span> <a class="code" href="group__pipe.html#gb4d85ecda7675a75611500070c28b22e" title="Flush the i/o queues associated with the kernel endpoint of a message pipe.">rt_pipe_flush</a>(RT_PIPE *pipe,
<a name="l00140"></a>00140                   <span class="keywordtype">int</span> mode);
<a name="l00141"></a>00141 
<a name="l00142"></a>00142 <span class="preprocessor">#ifdef CONFIG_XENO_OPT_NATIVE_PIPE</span>
<a name="l00143"></a>00143 <span class="preprocessor"></span>
<a name="l00144"></a>00144 <span class="keywordtype">int</span> __native_pipe_pkg_init(<span class="keywordtype">void</span>);
<a name="l00145"></a>00145 
<a name="l00146"></a>00146 <span class="keywordtype">void</span> __native_pipe_pkg_cleanup(<span class="keywordtype">void</span>);
<a name="l00147"></a>00147 
<a name="l00148"></a>00148 <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> __native_pipe_flush_rq(xnqueue_t *rq)
<a name="l00149"></a>00149 {
<a name="l00150"></a>00150         xeno_flush_rq(RT_PIPE, rq, pipe);
<a name="l00151"></a>00151 }
<a name="l00152"></a>00152 
<a name="l00153"></a>00153 <span class="preprocessor">#else </span><span class="comment">/* !CONFIG_XENO_OPT_NATIVE_PIPE */</span>
<a name="l00154"></a>00154 
<a name="l00155"></a>00155 <span class="preprocessor">#define __native_pipe_pkg_init()                ({ 0; })</span>
<a name="l00156"></a>00156 <span class="preprocessor"></span><span class="preprocessor">#define __native_pipe_pkg_cleanup()             do { } while(0)</span>
<a name="l00157"></a>00157 <span class="preprocessor"></span><span class="preprocessor">#define __native_pipe_flush_rq(rq)              do { } while(0)</span>
<a name="l00158"></a>00158 <span class="preprocessor"></span>
<a name="l00159"></a>00159 <span class="preprocessor">#endif </span><span class="comment">/* !CONFIG_XENO_OPT_NATIVE_PIPE */</span>
<a name="l00160"></a>00160 
<a name="l00161"></a>00161 <span class="preprocessor">#else </span><span class="comment">/* !__KERNEL__ */</span>
<a name="l00162"></a>00162 
<a name="l00163"></a>00163 <span class="keywordtype">int</span> rt_pipe_bind(RT_PIPE *pipe,
<a name="l00164"></a>00164                  <span class="keyword">const</span> <span class="keywordtype">char</span> *name,
<a name="l00165"></a>00165                  RTIME timeout);
<a name="l00166"></a>00166 
<a name="l00167"></a>00167 <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">int</span> rt_pipe_unbind(RT_PIPE *pipe)
<a name="l00168"></a>00168 {
<a name="l00169"></a>00169     pipe-&gt;opaque = XN_NO_HANDLE;
<a name="l00170"></a>00170     <span class="keywordflow">return</span> 0;
<a name="l00171"></a>00171 }
<a name="l00172"></a>00172 
<a name="l00173"></a>00173 <span class="preprocessor">#endif </span><span class="comment">/* __KERNEL__ */</span>
<a name="l00174"></a>00174 
<a name="l00175"></a>00175 <span class="preprocessor">#ifdef __cplusplus</span>
<a name="l00176"></a>00176 <span class="preprocessor"></span>}
<a name="l00177"></a>00177 <span class="preprocessor">#endif</span>
<a name="l00178"></a>00178 <span class="preprocessor"></span>
<a name="l00179"></a>00179 <span class="preprocessor">#endif </span><span class="comment">/* !_XENO_PIPE_H */</span>
</pre></div></div>
<hr size="1"><address style="text-align: right;"><small>Generated on Sun Jun 8 18:08:49 2008 for Xenomai API by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
</body>
</html>