Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(296)

Side by Side Diff: mojo/public/c/system/data_pipe.h

Issue 1963053003: Add rights for get/set options. Update message pipe and data pipe APIs. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « mojo/edk/system/shared_buffer_dispatcher.h ('k') | mojo/public/c/system/handle.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // This file contains types/constants and functions specific to data pipes. 5 // This file contains types/constants and functions specific to data pipes.
6 // 6 //
7 // Note: This header should be compilable as C. 7 // Note: This header should be compilable as C.
8 8
9 #ifndef MOJO_PUBLIC_C_SYSTEM_DATA_PIPE_H_ 9 #ifndef MOJO_PUBLIC_C_SYSTEM_DATA_PIPE_H_
10 #define MOJO_PUBLIC_C_SYSTEM_DATA_PIPE_H_ 10 #define MOJO_PUBLIC_C_SYSTEM_DATA_PIPE_H_
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
128 // unframed, but must come as (multiples of) discrete elements, of the size 128 // unframed, but must come as (multiples of) discrete elements, of the size
129 // given in |options|. See |MojoCreateDataPipeOptions| for a description of the 129 // given in |options|. See |MojoCreateDataPipeOptions| for a description of the
130 // different options available for data pipes. 130 // different options available for data pipes.
131 // 131 //
132 // |options| may be set to null for a data pipe with the default options (which 132 // |options| may be set to null for a data pipe with the default options (which
133 // will have an element size of one byte and have some system-dependent 133 // will have an element size of one byte and have some system-dependent
134 // capacity). 134 // capacity).
135 // 135 //
136 // On success, |*data_pipe_producer_handle| will be set to the handle for the 136 // On success, |*data_pipe_producer_handle| will be set to the handle for the
137 // producer and |*data_pipe_consumer_handle| will be set to the handle for the 137 // producer and |*data_pipe_consumer_handle| will be set to the handle for the
138 // consumer. (On failure, they are not modified.) 138 // consumer. (On failure, they are not modified.) The producer handle will have
139 // (at least) the following rights: |MOJO_HANDLE_RIGHT_TRANSFER|,
140 // |MOJO_HANDLE_RIGHT_WRITE|, |MOJO_HANDLE_RIGHT_GET_OPTIONS|, and
141 // |MOJO_HANDLE_RIGHT_SET_OPTIONS|. The consumer handle will have (at least) the
142 // following rights: |MOJO_HANDLE_RIGHT_TRANSFER|, |MOJO_HANDLE_RIGHT_READ|,
143 // |MOJO_HANDLE_RIGHT_GET_OPTIONS|, and |MOJO_HANDLE_RIGHT_SET_OPTIONS|
139 // 144 //
140 // Returns: 145 // Returns:
141 // |MOJO_RESULT_OK| on success. 146 // |MOJO_RESULT_OK| on success.
142 // |MOJO_RESULT_INVALID_ARGUMENT| if some argument was invalid (e.g., 147 // |MOJO_RESULT_INVALID_ARGUMENT| if some argument was invalid (e.g.,
143 // |*options| is invalid). 148 // |*options| is invalid).
144 // |MOJO_RESULT_RESOURCE_EXHAUSTED| if a process/system/quota/etc. limit has 149 // |MOJO_RESULT_RESOURCE_EXHAUSTED| if a process/system/quota/etc. limit has
145 // been reached (e.g., if the requested capacity was too large, or if the 150 // been reached (e.g., if the requested capacity was too large, or if the
146 // maximum number of handles was exceeded). 151 // maximum number of handles was exceeded).
147 // |MOJO_RESULT_UNIMPLEMENTED| if an unsupported flag was set in |*options|. 152 // |MOJO_RESULT_UNIMPLEMENTED| if an unsupported flag was set in |*options|.
148 MojoResult MojoCreateDataPipe( 153 MojoResult MojoCreateDataPipe(
149 const struct MojoCreateDataPipeOptions* MOJO_RESTRICT 154 const struct MojoCreateDataPipeOptions* MOJO_RESTRICT
150 options, // Optional in. 155 options, // Optional in.
151 MojoHandle* MOJO_RESTRICT data_pipe_producer_handle, // Out. 156 MojoHandle* MOJO_RESTRICT data_pipe_producer_handle, // Out.
152 MojoHandle* MOJO_RESTRICT data_pipe_consumer_handle); // Out. 157 MojoHandle* MOJO_RESTRICT data_pipe_consumer_handle); // Out.
153 158
154 // TODO(vtl): Probably should have a way of getting the 159 // TODO(vtl): Probably should have a way of getting the
155 // |MojoCreateDataPipeOptions| (maybe just rename it to |MojoDataPipeOptions|?) 160 // |MojoCreateDataPipeOptions| (maybe just rename it to |MojoDataPipeOptions|?)
156 // from either handle as well. 161 // from either handle as well.
157 162
158 // |MojoSetDataPipeProducerOptions()|: Sets options for the data pipe producer 163 // |MojoSetDataPipeProducerOptions()|: Sets options for the data pipe producer
159 // handle |data_pipe_producer_handle|. 164 // handle |data_pipe_producer_handle| (which must have the
165 // |MOJO_HANDLE_RIGHT_SET_OPTIONS| right).
160 // 166 //
161 // |options| may be set to null to reset back to the default options. 167 // |options| may be set to null to reset back to the default options.
162 // 168 //
163 // Note that changing the write threshold may also result in the state (both 169 // Note that changing the write threshold may also result in the state (both
164 // satisfied or satisfiable) of the |MOJO_HANDLE_SIGNAL_WRITE_THRESHOLD| handle 170 // satisfied or satisfiable) of the |MOJO_HANDLE_SIGNAL_WRITE_THRESHOLD| handle
165 // signal being changed. 171 // signal being changed.
166 // 172 //
167 // Returns: 173 // Returns:
168 // |MOJO_RESULT_OK| on success. 174 // |MOJO_RESULT_OK| on success.
169 // |MOJO_RESULT_INVALID_ARGUMENT| if some argument was invalid (e.g., 175 // |MOJO_RESULT_INVALID_ARGUMENT| if some argument was invalid (e.g.,
170 // |data_pipe_producer_handle| is not a valid data pipe producer handle or 176 // |data_pipe_producer_handle| is not a valid data pipe producer handle or
171 // |*options| is invalid). 177 // |*options| is invalid).
178 // |MOJO_RESULT_PERMISSION_DENIED| if |data_pipe_producer_handle| does not
179 // have the |MOJO_HANDLE_RIGHT_SET_OPTIONS| right.
172 // |MOJO_RESULT_BUSY| if |data_pipe_producer_handle| is currently in use in 180 // |MOJO_RESULT_BUSY| if |data_pipe_producer_handle| is currently in use in
173 // some transaction (that, e.g., may result in it being invalidated, such 181 // some transaction (that, e.g., may result in it being invalidated, such
174 // as being sent in a message). 182 // as being sent in a message).
175 MojoResult MojoSetDataPipeProducerOptions( 183 MojoResult MojoSetDataPipeProducerOptions(
176 MojoHandle data_pipe_producer_handle, // In. 184 MojoHandle data_pipe_producer_handle, // In.
177 const struct MojoDataPipeProducerOptions* options); // Optional in. 185 const struct MojoDataPipeProducerOptions* options); // Optional in.
178 186
179 // |MojoGetDataPipeProducerOptions()|: Gets options for the data pipe producer 187 // |MojoGetDataPipeProducerOptions()|: Gets options for the data pipe producer
180 // handle |data_pipe_producer_handle|. |options| should be non-null and point to 188 // handle |data_pipe_producer_handle| (which must have the
181 // a buffer of size |options_num_bytes|; |options_num_bytes| should be at least 189 // |MOJO_HANDLE_RIGHT_GET_OPTIONS| right). |options| should be non-null and
182 // 8 (the size of the first, and currently only, version of 190 // point to a buffer of size |options_num_bytes|; |options_num_bytes| should be
191 // at least 8 (the size of the first, and currently only, version of
183 // |MojoDataPipeProducerOptions|). 192 // |MojoDataPipeProducerOptions|).
184 // 193 //
185 // On success, |*options| will be filled with information about the given 194 // On success, |*options| will be filled with information about the given
186 // buffer. Note that if additional (larger) versions of 195 // buffer. Note that if additional (larger) versions of
187 // |MojoDataPipeProducerOptions| are defined, the largest version permitted by 196 // |MojoDataPipeProducerOptions| are defined, the largest version permitted by
188 // |options_num_bytes| that is supported by the implementation will be filled. 197 // |options_num_bytes| that is supported by the implementation will be filled.
189 // Callers expecting more than the first 16-byte version must check the 198 // Callers expecting more than the first 16-byte version must check the
190 // resulting |options->struct_size|. 199 // resulting |options->struct_size|.
191 // 200 //
192 // Returns: 201 // Returns:
193 // |MOJO_RESULT_OK| on success. 202 // |MOJO_RESULT_OK| on success.
194 // |MOJO_RESULT_INVALID_ARGUMENT| if some argument was invalid (e.g., 203 // |MOJO_RESULT_INVALID_ARGUMENT| if some argument was invalid (e.g.,
195 // |data_pipe_producer_handle| is not a valid data pipe producer handle, 204 // |data_pipe_producer_handle| is not a valid data pipe producer handle,
196 // |*options| is null, or |options_num_bytes| is too small). 205 // |*options| is null, or |options_num_bytes| is too small).
206 // |MOJO_RESULT_PERMISSION_DENIED| if |data_pipe_producer_handle| does not
207 // have the |MOJO_HANDLE_RIGHT_GET_OPTIONS| right.
197 // |MOJO_RESULT_BUSY| if |data_pipe_producer_handle| is currently in use in 208 // |MOJO_RESULT_BUSY| if |data_pipe_producer_handle| is currently in use in
198 // some transaction (that, e.g., may result in it being invalidated, such 209 // some transaction (that, e.g., may result in it being invalidated, such
199 // as being sent in a message). 210 // as being sent in a message).
200 MojoResult MojoGetDataPipeProducerOptions( 211 MojoResult MojoGetDataPipeProducerOptions(
201 MojoHandle data_pipe_producer_handle, // In. 212 MojoHandle data_pipe_producer_handle, // In.
202 struct MojoDataPipeProducerOptions* options, // Out. 213 struct MojoDataPipeProducerOptions* options, // Out.
203 uint32_t options_num_bytes); // In. 214 uint32_t options_num_bytes); // In.
204 215
205 // |MojoWriteData()|: Writes the given data to the data pipe producer given by 216 // |MojoWriteData()|: Writes the given data to the data pipe producer given by
206 // |data_pipe_producer_handle|. |elements| points to data of size |*num_bytes|; 217 // |data_pipe_producer_handle| (which must have the |MOJO_HANDLE_RIGHT_WRITE|
207 // |*num_bytes| should be a multiple of the data pipe's element size. If 218 // right). |elements| points to data of size |*num_bytes|; |*num_bytes| should
219 // be a multiple of the data pipe's element size. If
208 // |MOJO_WRITE_DATA_FLAG_ALL_OR_NONE| is set in |flags|, either all the data 220 // |MOJO_WRITE_DATA_FLAG_ALL_OR_NONE| is set in |flags|, either all the data
209 // will be written or none is. 221 // will be written or none is.
210 // 222 //
211 // On success, |*num_bytes| is set to the amount of data that was actually 223 // On success, |*num_bytes| is set to the amount of data that was actually
212 // written. 224 // written.
213 // 225 //
214 // Returns: 226 // Returns:
215 // |MOJO_RESULT_OK| on success. 227 // |MOJO_RESULT_OK| on success.
216 // |MOJO_RESULT_INVALID_ARGUMENT| if some argument was invalid (e.g., 228 // |MOJO_RESULT_INVALID_ARGUMENT| if some argument was invalid (e.g.,
217 // |data_pipe_producer_dispatcher| is not a handle to a data pipe 229 // |data_pipe_producer_handle| is not a handle to a data pipe producer or
218 // producer or |*num_bytes| is not a multiple of the data pipe's element 230 // |*num_bytes| is not a multiple of the data pipe's element size).
219 // size). 231 // |MOJO_RESULT_PERMISSION_DENIED| if |data_pipe_producer_handle| does not
232 // have the |MOJO_HANDLE_RIGHT_WRITE| right.
220 // |MOJO_RESULT_FAILED_PRECONDITION| if the data pipe consumer handle has been 233 // |MOJO_RESULT_FAILED_PRECONDITION| if the data pipe consumer handle has been
221 // closed. 234 // closed.
222 // |MOJO_RESULT_OUT_OF_RANGE| if |flags| has 235 // |MOJO_RESULT_OUT_OF_RANGE| if |flags| has
223 // |MOJO_WRITE_DATA_FLAG_ALL_OR_NONE| set and the required amount of data 236 // |MOJO_WRITE_DATA_FLAG_ALL_OR_NONE| set and the required amount of data
224 // (specified by |*num_bytes|) could not be written. 237 // (specified by |*num_bytes|) could not be written.
225 // |MOJO_RESULT_BUSY| if |data_pipe_producer_handle| is currently in use in 238 // |MOJO_RESULT_BUSY| if |data_pipe_producer_handle| is currently in use in
226 // some transaction (that, e.g., may result in it being invalidated, such 239 // some transaction (that, e.g., may result in it being invalidated, such
227 // as being sent in a message), or if there is a two-phase write ongoing 240 // as being sent in a message), or if there is a two-phase write ongoing
228 // with |data_pipe_producer_handle| (i.e., |MojoBeginWriteData()| has been 241 // with |data_pipe_producer_handle| (i.e., |MojoBeginWriteData()| has been
229 // called, but not yet the matching |MojoEndWriteData()|). 242 // called, but not yet the matching |MojoEndWriteData()|).
230 // |MOJO_RESULT_SHOULD_WAIT| if no data can currently be written (and the 243 // |MOJO_RESULT_SHOULD_WAIT| if no data can currently be written (and the
231 // consumer is still open) and |flags| does *not* have 244 // consumer is still open) and |flags| does *not* have
232 // |MOJO_WRITE_DATA_FLAG_ALL_OR_NONE| set. 245 // |MOJO_WRITE_DATA_FLAG_ALL_OR_NONE| set.
233 // 246 //
234 // TODO(vtl): Should there be a way of querying how much data can be written? 247 // TODO(vtl): Should there be a way of querying how much data can be written?
235 MojoResult MojoWriteData(MojoHandle data_pipe_producer_handle, // In. 248 MojoResult MojoWriteData(MojoHandle data_pipe_producer_handle, // In.
236 const void* MOJO_RESTRICT elements, // In. 249 const void* MOJO_RESTRICT elements, // In.
237 uint32_t* MOJO_RESTRICT num_bytes, // In/out. 250 uint32_t* MOJO_RESTRICT num_bytes, // In/out.
238 MojoWriteDataFlags flags); // In. 251 MojoWriteDataFlags flags); // In.
239 252
240 // |MojoBeginWriteData()|: Begins a two-phase write to the data pipe producer 253 // |MojoBeginWriteData()|: Begins a two-phase write to the data pipe producer
241 // given by |data_pipe_producer_handle|. On success, |*buffer| will be a pointer 254 // given by |data_pipe_producer_handle| (which must have the
242 // to which the caller can write |*buffer_num_bytes| bytes of data. There are 255 // |MOJO_HANDLE_RIGHT_WRITE| right). On success, |*buffer| will be a pointer to
256 // which the caller can write |*buffer_num_bytes| bytes of data. There are
243 // currently no flags allowed, so |flags| should be |MOJO_WRITE_DATA_FLAG_NONE|. 257 // currently no flags allowed, so |flags| should be |MOJO_WRITE_DATA_FLAG_NONE|.
244 // 258 //
245 // During a two-phase write, |data_pipe_producer_handle| is *not* writable. 259 // During a two-phase write, |data_pipe_producer_handle| is *not* writable.
246 // E.g., if another thread tries to write to it, it will get |MOJO_RESULT_BUSY|; 260 // E.g., if another thread tries to write to it, it will get |MOJO_RESULT_BUSY|;
247 // that thread can then wait for |data_pipe_producer_handle| to become writable 261 // that thread can then wait for |data_pipe_producer_handle| to become writable
248 // again. 262 // again.
249 // 263 //
250 // When |MojoBeginWriteData()| returns |MOJO_RESULT_OK|, and the caller has 264 // When |MojoBeginWriteData()| returns |MOJO_RESULT_OK|, and the caller has
251 // finished writing data to |*buffer|, it should call |MojoEndWriteData()| to 265 // finished writing data to |*buffer|, it should call |MojoEndWriteData()| to
252 // specify the amount written and to complete the two-phase write. 266 // specify the amount written and to complete the two-phase write.
253 // |MojoEndWriteData()| need not be called for other return values. 267 // |MojoEndWriteData()| need not be called for other return values.
254 // 268 //
255 // Returns: 269 // Returns:
256 // |MOJO_RESULT_OK| on success. 270 // |MOJO_RESULT_OK| on success.
257 // |MOJO_RESULT_INVALID_ARGUMENT| if some argument was invalid (e.g., 271 // |MOJO_RESULT_INVALID_ARGUMENT| if some argument was invalid (e.g.,
258 // |data_pipe_producer_handle| is not a handle to a data pipe producer or 272 // |data_pipe_producer_handle| is not a handle to a data pipe producer or
259 // flags has |MOJO_WRITE_DATA_FLAG_ALL_OR_NONE| set). 273 // flags has |MOJO_WRITE_DATA_FLAG_ALL_OR_NONE| set).
274 // |MOJO_RESULT_PERMISSION_DENIED| if |data_pipe_producer_handle| does not
275 // have the |MOJO_HANDLE_RIGHT_WRITE| right.
260 // |MOJO_RESULT_FAILED_PRECONDITION| if the data pipe consumer handle has been 276 // |MOJO_RESULT_FAILED_PRECONDITION| if the data pipe consumer handle has been
261 // closed. 277 // closed.
262 // |MOJO_RESULT_BUSY| if |data_pipe_producer_handle| is currently in use in 278 // |MOJO_RESULT_BUSY| if |data_pipe_producer_handle| is currently in use in
263 // some transaction (that, e.g., may result in it being invalidated, such 279 // some transaction (that, e.g., may result in it being invalidated, such
264 // as being sent in a message), or if there is already a two-phase write 280 // as being sent in a message), or if there is already a two-phase write
265 // ongoing with |data_pipe_producer_handle| (i.e., |MojoBeginWriteData()| 281 // ongoing with |data_pipe_producer_handle| (i.e., |MojoBeginWriteData()|
266 // has been called, but not yet the matching |MojoEndWriteData()|). 282 // has been called, but not yet the matching |MojoEndWriteData()|).
267 // |MOJO_RESULT_SHOULD_WAIT| if no data can currently be written (and the 283 // |MOJO_RESULT_SHOULD_WAIT| if no data can currently be written (and the
268 // consumer is still open). 284 // consumer is still open).
269 MojoResult MojoBeginWriteData(MojoHandle data_pipe_producer_handle, // In. 285 MojoResult MojoBeginWriteData(MojoHandle data_pipe_producer_handle, // In.
270 void** MOJO_RESTRICT buffer, // Out. 286 void** MOJO_RESTRICT buffer, // Out.
271 uint32_t* MOJO_RESTRICT buffer_num_bytes, // Out. 287 uint32_t* MOJO_RESTRICT buffer_num_bytes, // Out.
272 MojoWriteDataFlags flags); // In. 288 MojoWriteDataFlags flags); // In.
273 289
274 // |MojoEndWriteData()|: Ends a two-phase write to the data pipe producer given 290 // |MojoEndWriteData()|: Ends a two-phase write to the data pipe producer given
275 // by |data_pipe_producer_handle| that was begun by a call to 291 // by |data_pipe_producer_handle| (which must have the |MOJO_HANDLE_RIGHT_WRITE|
276 // |MojoBeginWriteData()| on the same handle. |num_bytes_written| should 292 // right) that was begun by a call to |MojoBeginWriteData()| on the same handle.
277 // indicate the amount of data actually written; it must be less than or equal 293 // |num_bytes_written| should indicate the amount of data actually written; it
278 // to the value of |*buffer_num_bytes| output by |MojoBeginWriteData()| and must 294 // must be less than or equal to the value of |*buffer_num_bytes| output by
279 // be a multiple of the element size. The buffer given by |*buffer| from 295 // |MojoBeginWriteData()| and must be a multiple of the element size. The buffer
280 // |MojoBeginWriteData()| must have been filled with exactly |num_bytes_written| 296 // given by |*buffer| from |MojoBeginWriteData()| must have been filled with
281 // bytes of data. 297 // exactly |num_bytes_written| bytes of data.
282 // 298 //
283 // On failure, the two-phase write (if any) is ended (so the handle may become 299 // On failure, the two-phase write (if any) is ended (so the handle may become
284 // writable again, if there's space available) but no data written to |*buffer| 300 // writable again, if there's space available) but no data written to |*buffer|
285 // is "put into" the data pipe. 301 // is "put into" the data pipe.
286 // 302 //
287 // Returns: 303 // Returns:
288 // |MOJO_RESULT_OK| on success. 304 // |MOJO_RESULT_OK| on success.
289 // |MOJO_RESULT_INVALID_ARGUMENT| if some argument was invalid (e.g., 305 // |MOJO_RESULT_INVALID_ARGUMENT| if some argument was invalid (e.g.,
290 // |data_pipe_producer_handle| is not a handle to a data pipe producer or 306 // |data_pipe_producer_handle| is not a handle to a data pipe producer or
291 // |num_bytes_written| is invalid (greater than the maximum value provided 307 // |num_bytes_written| is invalid (greater than the maximum value provided
292 // by |MojoBeginWriteData()| or not a multiple of the element size). 308 // by |MojoBeginWriteData()| or not a multiple of the element size).
309 // |MOJO_RESULT_PERMISSION_DENIED| if |data_pipe_producer_handle| does not
310 // have the |MOJO_HANDLE_RIGHT_WRITE| right.
293 // |MOJO_RESULT_FAILED_PRECONDITION| if the data pipe producer is not in a 311 // |MOJO_RESULT_FAILED_PRECONDITION| if the data pipe producer is not in a
294 // two-phase write (e.g., |MojoBeginWriteData()| was not called or 312 // two-phase write (e.g., |MojoBeginWriteData()| was not called or
295 // |MojoEndWriteData()| has already been called). 313 // |MojoEndWriteData()| has already been called).
296 // |MOJO_RESULT_BUSY| if |data_pipe_producer_handle| is currently in use in 314 // |MOJO_RESULT_BUSY| if |data_pipe_producer_handle| is currently in use in
297 // some transaction (that, e.g., may result in it being invalidated, such 315 // some transaction (that, e.g., may result in it being invalidated, such
298 // as being sent in a message). 316 // as being sent in a message).
299 MojoResult MojoEndWriteData(MojoHandle data_pipe_producer_handle, // In. 317 MojoResult MojoEndWriteData(MojoHandle data_pipe_producer_handle, // In.
300 uint32_t num_bytes_written); // In. 318 uint32_t num_bytes_written); // In.
301 319
302 // |MojoSetDataPipeConsumerOptions()|: Sets options for the data pipe consumer 320 // |MojoSetDataPipeConsumerOptions()|: Sets options for the data pipe consumer
303 // handle |data_pipe_consumer_handle|. 321 // handle |data_pipe_consumer_handle| (which must have the
322 // |MOJO_HANDLE_RIGHT_SET_OPTIONS| right).
304 // 323 //
305 // |options| may be set to null to reset back to the default options. 324 // |options| may be set to null to reset back to the default options.
306 // 325 //
307 // Note that changing the read threshold may also result in the state (both 326 // Note that changing the read threshold may also result in the state (both
308 // satisfied or satisfiable) of the |MOJO_HANDLE_SIGNAL_READ_THRESHOLD| handle 327 // satisfied or satisfiable) of the |MOJO_HANDLE_SIGNAL_READ_THRESHOLD| handle
309 // signal being changed. 328 // signal being changed.
310 // 329 //
311 // Returns: 330 // Returns:
312 // |MOJO_RESULT_OK| on success. 331 // |MOJO_RESULT_OK| on success.
313 // |MOJO_RESULT_INVALID_ARGUMENT| if some argument was invalid (e.g., 332 // |MOJO_RESULT_INVALID_ARGUMENT| if some argument was invalid (e.g.,
314 // |data_pipe_consumer_handle| is not a valid data pipe consumer handle or 333 // |data_pipe_consumer_handle| is not a valid data pipe consumer handle or
315 // |*options| is invalid). 334 // |*options| is invalid).
335 // |MOJO_RESULT_PERMISSION_DENIED| if |data_pipe_consumer_handle| does not
336 // have the |MOJO_HANDLE_RIGHT_SET_OPTIONS| right.
316 // |MOJO_RESULT_BUSY| if |data_pipe_consumer_handle| is currently in use in 337 // |MOJO_RESULT_BUSY| if |data_pipe_consumer_handle| is currently in use in
317 // some transaction (that, e.g., may result in it being invalidated, such 338 // some transaction (that, e.g., may result in it being invalidated, such
318 // as being sent in a message). 339 // as being sent in a message).
319 MojoResult MojoSetDataPipeConsumerOptions( 340 MojoResult MojoSetDataPipeConsumerOptions(
320 MojoHandle data_pipe_consumer_handle, // In. 341 MojoHandle data_pipe_consumer_handle, // In.
321 const struct MojoDataPipeConsumerOptions* options); // Optional in. 342 const struct MojoDataPipeConsumerOptions* options); // Optional in.
322 343
323 // |MojoGetDataPipeConsumerOptions()|: Gets options for the data pipe consumer 344 // |MojoGetDataPipeConsumerOptions()|: Gets options for the data pipe consumer
324 // handle |data_pipe_consumer_handle|. |options| should be non-null and point to 345 // handle |data_pipe_consumer_handle| (which must have the
325 // a buffer of size |options_num_bytes|; |options_num_bytes| should be at least 346 // |MOJO_HANDLE_RIGHT_GET_OPTIONS| right). |options| should be non-null and
326 // 8 (the size of the first, and currently only, version of 347 // point to a buffer of size |options_num_bytes|; |options_num_bytes| should be
348 // at least 8 (the size of the first, and currently only, version of
327 // |MojoDataPipeConsumerOptions|). 349 // |MojoDataPipeConsumerOptions|).
328 // 350 //
329 // On success, |*options| will be filled with information about the given 351 // On success, |*options| will be filled with information about the given
330 // buffer. Note that if additional (larger) versions of 352 // buffer. Note that if additional (larger) versions of
331 // |MojoDataPipeConsumerOptions| are defined, the largest version permitted by 353 // |MojoDataPipeConsumerOptions| are defined, the largest version permitted by
332 // |options_num_bytes| that is supported by the implementation will be filled. 354 // |options_num_bytes| that is supported by the implementation will be filled.
333 // Callers expecting more than the first 16-byte version must check the 355 // Callers expecting more than the first 16-byte version must check the
334 // resulting |options->struct_size|. 356 // resulting |options->struct_size|.
335 // 357 //
336 // Returns: 358 // Returns:
337 // |MOJO_RESULT_OK| on success. 359 // |MOJO_RESULT_OK| on success.
338 // |MOJO_RESULT_INVALID_ARGUMENT| if some argument was invalid (e.g., 360 // |MOJO_RESULT_INVALID_ARGUMENT| if some argument was invalid (e.g.,
339 // |data_pipe_consumer_handle| is not a valid data pipe consumer handle, 361 // |data_pipe_consumer_handle| is not a valid data pipe consumer handle,
340 // |*options| is null, or |options_num_bytes| is too small). 362 // |*options| is null, or |options_num_bytes| is too small).
363 // |MOJO_RESULT_PERMISSION_DENIED| if |data_pipe_consumer_handle| does not
364 // have the |MOJO_HANDLE_RIGHT_GET_OPTIONS| right.
341 // |MOJO_RESULT_BUSY| if |data_pipe_consumer_handle| is currently in use in 365 // |MOJO_RESULT_BUSY| if |data_pipe_consumer_handle| is currently in use in
342 // some transaction (that, e.g., may result in it being invalidated, such 366 // some transaction (that, e.g., may result in it being invalidated, such
343 // as being sent in a message). 367 // as being sent in a message).
344 MojoResult MojoGetDataPipeConsumerOptions( 368 MojoResult MojoGetDataPipeConsumerOptions(
345 MojoHandle data_pipe_consumer_handle, // In. 369 MojoHandle data_pipe_consumer_handle, // In.
346 struct MojoDataPipeConsumerOptions* options, // Out. 370 struct MojoDataPipeConsumerOptions* options, // Out.
347 uint32_t options_num_bytes); // In. 371 uint32_t options_num_bytes); // In.
348 372
349 // |MojoReadData()|: Reads data from the data pipe consumer given by 373 // |MojoReadData()|: Reads data from the data pipe consumer given by
350 // |data_pipe_consumer_handle|. May also be used to discard data or query the 374 // |data_pipe_consumer_handle| (which must have the |MOJO_HANDLE_RIGHT_READ|
351 // amount of data available. 375 // right). May also be used to discard data or query the amount of data
376 // available.
352 // 377 //
353 // If |flags| has neither |MOJO_READ_DATA_FLAG_DISCARD| nor 378 // If |flags| has neither |MOJO_READ_DATA_FLAG_DISCARD| nor
354 // |MOJO_READ_DATA_FLAG_QUERY| set, this tries to read up to |*num_bytes| (which 379 // |MOJO_READ_DATA_FLAG_QUERY| set, this tries to read up to |*num_bytes| (which
355 // must be a multiple of the data pipe's element size) bytes of data to 380 // must be a multiple of the data pipe's element size) bytes of data to
356 // |elements| and set |*num_bytes| to the amount actually read. If flags has 381 // |elements| and set |*num_bytes| to the amount actually read. If flags has
357 // |MOJO_READ_DATA_FLAG_ALL_OR_NONE| set, it will either read exactly 382 // |MOJO_READ_DATA_FLAG_ALL_OR_NONE| set, it will either read exactly
358 // |*num_bytes| bytes of data or none. Additionally, if flags has 383 // |*num_bytes| bytes of data or none. Additionally, if flags has
359 // |MOJO_READ_DATA_FLAG_PEEK| set, the data read will remain in the pipe and be 384 // |MOJO_READ_DATA_FLAG_PEEK| set, the data read will remain in the pipe and be
360 // available to future reads. 385 // available to future reads.
361 // 386 //
(...skipping 10 matching lines...) Expand all
372 // case, |MOJO_READ_DATA_FLAG_DISCARD| must not be set, and 397 // case, |MOJO_READ_DATA_FLAG_DISCARD| must not be set, and
373 // |MOJO_READ_DATA_FLAG_ALL_OR_NONE| is ignored, as are |elements| and the input 398 // |MOJO_READ_DATA_FLAG_ALL_OR_NONE| is ignored, as are |elements| and the input
374 // value of |*num_bytes|. 399 // value of |*num_bytes|.
375 // 400 //
376 // Returns: 401 // Returns:
377 // |MOJO_RESULT_OK| on success (see above for a description of the different 402 // |MOJO_RESULT_OK| on success (see above for a description of the different
378 // operations). 403 // operations).
379 // |MOJO_RESULT_INVALID_ARGUMENT| if some argument was invalid (e.g., 404 // |MOJO_RESULT_INVALID_ARGUMENT| if some argument was invalid (e.g.,
380 // |data_pipe_consumer_handle| is invalid, the combination of flags in 405 // |data_pipe_consumer_handle| is invalid, the combination of flags in
381 // |flags| is invalid, etc.). 406 // |flags| is invalid, etc.).
407 // |MOJO_RESULT_PERMISSION_DENIED| if |data_pipe_consumer_handle| does not
408 // have the |MOJO_HANDLE_RIGHT_READ| right.
382 // |MOJO_RESULT_FAILED_PRECONDITION| if the data pipe producer handle has been 409 // |MOJO_RESULT_FAILED_PRECONDITION| if the data pipe producer handle has been
383 // closed and data (or the required amount of data) was not available to 410 // closed and data (or the required amount of data) was not available to
384 // be read or discarded. 411 // be read or discarded.
385 // |MOJO_RESULT_OUT_OF_RANGE| if |flags| has |MOJO_READ_DATA_FLAG_ALL_OR_NONE| 412 // |MOJO_RESULT_OUT_OF_RANGE| if |flags| has |MOJO_READ_DATA_FLAG_ALL_OR_NONE|
386 // set and the required amount of data is not available to be read or 413 // set and the required amount of data is not available to be read or
387 // discarded (and the producer is still open). 414 // discarded (and the producer is still open).
388 // |MOJO_RESULT_BUSY| if |data_pipe_consumer_handle| is currently in use in 415 // |MOJO_RESULT_BUSY| if |data_pipe_consumer_handle| is currently in use in
389 // some transaction (that, e.g., may result in it being invalidated, such 416 // some transaction (that, e.g., may result in it being invalidated, such
390 // as being sent in a message), or if there is a two-phase read ongoing 417 // as being sent in a message), or if there is a two-phase read ongoing
391 // with |data_pipe_consumer_handle| (i.e., |MojoBeginReadData()| has been 418 // with |data_pipe_consumer_handle| (i.e., |MojoBeginReadData()| has been
392 // called, but not yet the matching |MojoEndReadData()|). 419 // called, but not yet the matching |MojoEndReadData()|).
393 // |MOJO_RESULT_SHOULD_WAIT| if there is no data to be read or discarded (and 420 // |MOJO_RESULT_SHOULD_WAIT| if there is no data to be read or discarded (and
394 // the producer is still open) and |flags| does *not* have 421 // the producer is still open) and |flags| does *not* have
395 // |MOJO_READ_DATA_FLAG_ALL_OR_NONE| set. 422 // |MOJO_READ_DATA_FLAG_ALL_OR_NONE| set.
396 MojoResult MojoReadData(MojoHandle data_pipe_consumer_handle, // In. 423 MojoResult MojoReadData(MojoHandle data_pipe_consumer_handle, // In.
397 void* MOJO_RESTRICT elements, // Out. 424 void* MOJO_RESTRICT elements, // Out.
398 uint32_t* MOJO_RESTRICT num_bytes, // In/out. 425 uint32_t* MOJO_RESTRICT num_bytes, // In/out.
399 MojoReadDataFlags flags); // In. 426 MojoReadDataFlags flags); // In.
400 427
401 // |MojoBeginReadData()|: Begins a two-phase read from the data pipe consumer 428 // |MojoBeginReadData()|: Begins a two-phase read from the data pipe consumer
402 // given by |data_pipe_consumer_handle|. On success, |*buffer| will be a pointer 429 // given by |data_pipe_consumer_handle| (which must have the
403 // from which the caller can read |*buffer_num_bytes| bytes of data. There are 430 // |MOJO_HANDLE_RIGHT_READ| right). On success, |*buffer| will be a pointer from
431 // which the caller can read |*buffer_num_bytes| bytes of data. There are
404 // currently no valid flags, so |flags| must be |MOJO_READ_DATA_FLAG_NONE|. 432 // currently no valid flags, so |flags| must be |MOJO_READ_DATA_FLAG_NONE|.
405 // 433 //
406 // During a two-phase read, |data_pipe_consumer_handle| is *not* readable. 434 // During a two-phase read, |data_pipe_consumer_handle| is *not* readable.
407 // E.g., if another thread tries to read from it, it will get 435 // E.g., if another thread tries to read from it, it will get
408 // |MOJO_RESULT_BUSY|; that thread can then wait for |data_pipe_consumer_handle| 436 // |MOJO_RESULT_BUSY|; that thread can then wait for |data_pipe_consumer_handle|
409 // to become readable again. 437 // to become readable again.
410 // 438 //
411 // Once the caller has finished reading data from |*buffer|, it should call 439 // Once the caller has finished reading data from |*buffer|, it should call
412 // |MojoEndReadData()| to specify the amount read and to complete the two-phase 440 // |MojoEndReadData()| to specify the amount read and to complete the two-phase
413 // read. 441 // read.
414 // 442 //
415 // Returns: 443 // Returns:
416 // |MOJO_RESULT_OK| on success. 444 // |MOJO_RESULT_OK| on success.
417 // |MOJO_RESULT_INVALID_ARGUMENT| if some argument was invalid (e.g., 445 // |MOJO_RESULT_INVALID_ARGUMENT| if some argument was invalid (e.g.,
418 // |data_pipe_consumer_handle| is not a handle to a data pipe consumer, 446 // |data_pipe_consumer_handle| is not a handle to a data pipe consumer,
419 // or |flags| has invalid flags set). 447 // or |flags| has invalid flags set).
448 // |MOJO_RESULT_PERMISSION_DENIED| if |data_pipe_consumer_handle| does not
449 // have the |MOJO_HANDLE_RIGHT_READ| right.
420 // |MOJO_RESULT_FAILED_PRECONDITION| if the data pipe producer handle has been 450 // |MOJO_RESULT_FAILED_PRECONDITION| if the data pipe producer handle has been
421 // closed. 451 // closed.
422 // |MOJO_RESULT_BUSY| if |data_pipe_consumer_handle| is currently in use in 452 // |MOJO_RESULT_BUSY| if |data_pipe_consumer_handle| is currently in use in
423 // some transaction (that, e.g., may result in it being invalidated, such 453 // some transaction (that, e.g., may result in it being invalidated, such
424 // as being sent in a message), or if there is already a two-phase read 454 // as being sent in a message), or if there is already a two-phase read
425 // ongoing with |data_pipe_consumer_handle| (i.e., |MojoBeginReadData()| 455 // ongoing with |data_pipe_consumer_handle| (i.e., |MojoBeginReadData()|
426 // has been called, but not yet the matching |MojoEndReadData()|). 456 // has been called, but not yet the matching |MojoEndReadData()|).
427 // |MOJO_RESULT_SHOULD_WAIT| if no data can currently be read (and the 457 // |MOJO_RESULT_SHOULD_WAIT| if no data can currently be read (and the
428 // producer is still open). 458 // producer is still open).
429 MojoResult MojoBeginReadData(MojoHandle data_pipe_consumer_handle, // In. 459 MojoResult MojoBeginReadData(MojoHandle data_pipe_consumer_handle, // In.
430 const void** MOJO_RESTRICT buffer, // Out. 460 const void** MOJO_RESTRICT buffer, // Out.
431 uint32_t* MOJO_RESTRICT buffer_num_bytes, // Out. 461 uint32_t* MOJO_RESTRICT buffer_num_bytes, // Out.
432 MojoReadDataFlags flags); // In. 462 MojoReadDataFlags flags); // In.
433 463
434 // |MojoEndReadData()|: Ends a two-phase read from the data pipe consumer given 464 // |MojoEndReadData()|: Ends a two-phase read from the data pipe consumer given
435 // by |data_pipe_consumer_handle| that was begun by a call to 465 // by |data_pipe_consumer_handle| (which must have the |MOJO_HANDLE_RIGHT_READ|
436 // |MojoBeginReadData()| on the same handle. |num_bytes_read| should indicate 466 // right) that was begun by a call to |MojoBeginReadData()| on the same handle.
437 // the amount of data actually read; it must be less than or equal to the value 467 // |num_bytes_read| should indicate the amount of data actually read; it must be
438 // of |*buffer_num_bytes| output by |MojoBeginReadData()| and must be a multiple 468 // less than or equal to the value of |*buffer_num_bytes| output by
439 // of the element size. 469 // |MojoBeginReadData()| and must be a multiple of the element size.
440 // 470 //
441 // On failure, the two-phase read (if any) is ended (so the handle may become 471 // On failure, the two-phase read (if any) is ended (so the handle may become
442 // readable again) but no data is "removed" from the data pipe. 472 // readable again) but no data is "removed" from the data pipe.
443 // 473 //
444 // Returns: 474 // Returns:
445 // |MOJO_RESULT_OK| on success. 475 // |MOJO_RESULT_OK| on success.
446 // |MOJO_RESULT_INVALID_ARGUMENT| if some argument was invalid (e.g., 476 // |MOJO_RESULT_INVALID_ARGUMENT| if some argument was invalid (e.g.,
447 // |data_pipe_consumer_handle| is not a handle to a data pipe consumer or 477 // |data_pipe_consumer_handle| is not a handle to a data pipe consumer or
448 // |num_bytes_written| is greater than the maximum value provided by 478 // |num_bytes_written| is greater than the maximum value provided by
449 // |MojoBeginReadData()| or not a multiple of the element size). 479 // |MojoBeginReadData()| or not a multiple of the element size).
480 // |MOJO_RESULT_PERMISSION_DENIED| if |data_pipe_consumer_handle| does not
481 // have the |MOJO_HANDLE_RIGHT_READ| right.
450 // |MOJO_RESULT_FAILED_PRECONDITION| if the data pipe consumer is not in a 482 // |MOJO_RESULT_FAILED_PRECONDITION| if the data pipe consumer is not in a
451 // two-phase read (e.g., |MojoBeginReadData()| was not called or 483 // two-phase read (e.g., |MojoBeginReadData()| was not called or
452 // |MojoEndReadData()| has already been called). 484 // |MojoEndReadData()| has already been called).
453 // |MOJO_RESULT_BUSY| if |data_pipe_consumer_handle| is currently in use in 485 // |MOJO_RESULT_BUSY| if |data_pipe_consumer_handle| is currently in use in
454 // some transaction (that, e.g., may result in it being invalidated, such 486 // some transaction (that, e.g., may result in it being invalidated, such
455 // as being sent in a message). 487 // as being sent in a message).
456 MojoResult MojoEndReadData(MojoHandle data_pipe_consumer_handle, // In. 488 MojoResult MojoEndReadData(MojoHandle data_pipe_consumer_handle, // In.
457 uint32_t num_bytes_read); // In. 489 uint32_t num_bytes_read); // In.
458 490
459 MOJO_END_EXTERN_C 491 MOJO_END_EXTERN_C
460 492
461 #endif // MOJO_PUBLIC_C_SYSTEM_DATA_PIPE_H_ 493 #endif // MOJO_PUBLIC_C_SYSTEM_DATA_PIPE_H_
OLDNEW
« no previous file with comments | « mojo/edk/system/shared_buffer_dispatcher.h ('k') | mojo/public/c/system/handle.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698