Root/
Source at commit 1129 created 12 years 11 months ago. By meklort, Change options.o so that it reloads the system config as well. Also change it so that it uses that config for variables (NOTE: if the calue exists in chameleonConfig, it's used instead. | |
---|---|
1 | /*␊ |
2 | * Copyright 2006 Apple Computer, Inc. All rights reserved.␊ |
3 | *␊ |
4 | */␊ |
5 | ␊ |
6 | #if !defined(__IOKIT_IOSTREAM_H)␊ |
7 | #define __IOKIT_IOSTREAM_H␊ |
8 | ␊ |
9 | #include <IOKit/IOService.h>␊ |
10 | #include <IOKit/IOMemoryDescriptor.h>␊ |
11 | #include <IOKit/IOBufferMemoryDescriptor.h>␊ |
12 | #include <IOKit/IOUserClient.h>␊ |
13 | ␊ |
14 | #include <IOKit/stream/IOStreamShared.h>␊ |
15 | ␊ |
16 | /*!␊ |
17 | @header IOStream.h␊ |
18 | Definitions for IOStream family.␊ |
19 | */␊ |
20 | ␊ |
21 | class IOStreamBuffer;␊ |
22 | ␊ |
23 | /*!␊ |
24 | @class IOStream␊ |
25 | @abstract␊ |
26 | A class representing a stream of data buffers passed from kernel to␊ |
27 | user space and back again.␊ |
28 | @discussion␊ |
29 | The IOStream class defines a mechanism for moving buffers of data from␊ |
30 | kernel space to user space or vice-versa. The policy for which direction␊ |
31 | the data flows and the nature of the data is left up the the implementer␊ |
32 | of the driver which uses IOStream.␊ |
33 | ␊ |
34 | Although it is expected that the client of an IOStream will be in user space,␊ |
35 | this is not required.␊ |
36 | ␊ |
37 | References to "output" mean "from the IOStream to the user client", and␊ |
38 | "input" means "from the user client to the IOStream."␊ |
39 | ␊ |
40 | */␊ |
41 | ␊ |
42 | class IOStream : public IOService␊ |
43 | {␊ |
44 | OSDeclareDefaultStructors(IOStream);␊ |
45 | ␊ |
46 | protected:␊ |
47 | OSArray * _buffers; // IOStreamBuffer objects in this stream␊ |
48 | ␊ |
49 | IOItemCount _queueCount; // Number of entries for the queues␊ |
50 | ␊ |
51 | IOMemoryDescriptor * _inputQueueDescriptor;␊ |
52 | IOMemoryMap * _inputQueueMap;␊ |
53 | ␊ |
54 | IOMemoryDescriptor * _outputQueueDescriptor;␊ |
55 | IOMemoryMap * _outputQueueMap;␊ |
56 | ␊ |
57 | IOStreamBufferQueue * _outputQueue; // Shared memory for buffers out to user space␊ |
58 | IOStreamBufferQueue * _inputQueue; // Shared memory for buffers in from user space␊ |
59 | ␊ |
60 | mach_port_t _outputPort;␊ |
61 | mach_port_t _inputPort;␊ |
62 | ␊ |
63 | OSArray * _memoryMaps; // Maps for data queues␊ |
64 | ␊ |
65 | IOStreamMode _streamMode;␊ |
66 | ␊ |
67 | public:␊ |
68 | ␊ |
69 | /*!␊ |
70 | @functiongroup Creating IOStream objects␊ |
71 | */␊ |
72 | ␊ |
73 | /*!␊ |
74 | @function withBuffers␊ |
75 | @param mode The initial mode of the stream, either output, input, or input/output.␊ |
76 | @param queueLength The nuber of queue entries to reserve in the input and output queue.␊ |
77 | Zero means to make the queues big enough to accommodate all the buffers at once.␊ |
78 | @param properties␊ |
79 | A dictionary of properties which will be set on the stream.␊ |
80 | @param buffers␊ |
81 | An array of IOStreamBuffer objects which will be the buffers for this stream.␊ |
82 | */␊ |
83 | ␊ |
84 | static IOStream *withBuffers(OSArray *buffers, IOStreamMode mode = kIOStreamModeOutput, IOItemCount queueLength = 0, OSDictionary *properties = 0);␊ |
85 | ␊ |
86 | virtual bool init(OSDictionary *properties = 0);␊ |
87 | ␊ |
88 | /*!␊ |
89 | @function initWithBuffers␊ |
90 | @param mode The initial mode of the stream, either output, input, or input/output.␊ |
91 | @param queueLength The nuber of queue entries to reserve in the input and output queue.␊ |
92 | Zero means to make the queues big enough to accommodate all the buffers at once.␊ |
93 | @param properties␊ |
94 | A dictionary of properties which will be set on the stream.␊ |
95 | @param buffers␊ |
96 | An array of IOStreamBuffer objects which will be the buffers for this stream.␊ |
97 | */␊ |
98 | virtual bool initWithBuffers(OSArray *buffers, IOStreamMode mode = kIOStreamModeOutput, IOItemCount queueLength = 0, OSDictionary *properties = 0);␊ |
99 | ␊ |
100 | /*!␊ |
101 | @function free␊ |
102 | */␊ |
103 | virtual void free(void);␊ |
104 | ␊ |
105 | /*!␊ |
106 | @functiongroup Opening and closing streams␊ |
107 | */␊ |
108 | ␊ |
109 | /*!␊ |
110 | @function handleOpen␊ |
111 | @abstract The handleOpen() method relies on the default IOService behavior␊ |
112 | to ensure that␊ |
113 | only one client has the stream open at a time.␊ |
114 | The shared input and output queues are created at open time.␊ |
115 | @param options␊ |
116 | @param arg␊ |
117 | */␊ |
118 | virtual bool handleOpen( ␉IOService *␉ forClient,␊ |
119 | IOOptionBits␉ options,␊ |
120 | void *␉␉ arg );␊ |
121 | ␊ |
122 | /*!␊ |
123 | @function handleClose␊ |
124 | @abstract The handleClose method destroys the shared input and output␊ |
125 | queues.␊ |
126 | @param options␊ |
127 | */␊ |
128 | virtual void handleClose( IOService *␉ forClient,␊ |
129 | IOOptionBits options );␊ |
130 | ␊ |
131 | /*!␊ |
132 | @functiongroup Managing shared queues␊ |
133 | */␊ |
134 | ␊ |
135 | /*!␊ |
136 | @function createQueues␊ |
137 | @abstract Creates the shared input and output queues, without regard␊ |
138 | to whether the stream is open or not.␊ |
139 | Normally this is called by handleOpen().␊ |
140 | @param queueLength␊ |
141 | @param options␊ |
142 | @result Returns kIOReturnSuccess if the queues were successfully created.␊ |
143 | */␊ |
144 | virtual IOReturn createQueues( IOItemCount queueLength = 0, IOOptionBits options = 0 );␊ |
145 | ␊ |
146 | /*!␊ |
147 | @function destroyQueues␊ |
148 | @abstract Releases the shared input and output queues.␊ |
149 | @result Returns kIOReturnSuccess if the queues were successfully destroyed.␊ |
150 | The queues cannot be destroyed while the stream is open by a client.␊ |
151 | */␊ |
152 | virtual IOReturn destroyQueues( void );␊ |
153 | ␊ |
154 | /*!␊ |
155 | @function getOutputQueue␊ |
156 | @result A pointer to the output IOStreamBufferQueue structure for the stream,␊ |
157 | or NULL if the stream is not open and the queue has not been created yet.␊ |
158 | */␊ |
159 | virtual IOStreamBufferQueue *getOutputQueue(void); // get shared-memory output queue␊ |
160 | ␊ |
161 | /*!␊ |
162 | @function getOutputQueueMemoryDescriptor␊ |
163 | @result An IOMemoryDescriptor object repesenting the shared memory␊ |
164 | output queue buffer.␊ |
165 | */␊ |
166 | virtual IOMemoryDescriptor *getOutputQueueMemoryDescriptor(void);␊ |
167 | ␊ |
168 | /*!␊ |
169 | @function getInputQueue␊ |
170 | @result A pointer to the input IOStreamBufferQueue structure for the stream,␊ |
171 | or NULL if the stream is not open and the queue has not been created yet.␊ |
172 | */␊ |
173 | virtual IOStreamBufferQueue *getInputQueue(void); // get shared-memory input queue␊ |
174 | ␊ |
175 | /*!␊ |
176 | @function getInputQueueMemoryDescriptor␊ |
177 | @result An IOMemoryDescriptor object repesenting the shared memory␊ |
178 | input queue buffer.␊ |
179 | */␊ |
180 | virtual IOMemoryDescriptor *getInputQueueMemoryDescriptor(void);␊ |
181 | ␊ |
182 | ␊ |
183 | /*!␊ |
184 | @functiongroup Managing buffers in an IOStream␊ |
185 | */␊ |
186 | ␊ |
187 | /*!␊ |
188 | @function addBuffer␊ |
189 | @abstract Add a buffer to an IOStream.␊ |
190 | @param buffer␊ |
191 | @discussion␊ |
192 | Adds an IOStreamBuffer to an IOStream. It will be added to the end␊ |
193 | of the buffer array, so the buffer ID of existing buffers will not change.␊ |
194 | */␊ |
195 | virtual IOReturn addBuffer(IOStreamBuffer *buffer); // add a new buffer to the stream␊ |
196 | ␊ |
197 | /*!␊ |
198 | @function addBuffers␊ |
199 | @param buffers␊ |
200 | @result␊ |
201 | */␊ |
202 | virtual IOReturn addBuffers(OSArray *buffers);␊ |
203 | ␊ |
204 | /*!␊ |
205 | @function removeBuffer␊ |
206 | @param buffer A pointer to an IOStreamBuffer object in the stream.␊ |
207 | @result Returns kIOReturnSuccess if the buffer was removed, or kIOReturnNotFound␊ |
208 | if the buffer was not in this stream.␊ |
209 | @abstract␊ |
210 | Removes a buffer from the stream. Buffers cannot be removed␊ |
211 | while the stream is open, as this will change the buffer IDs of existing␊ |
212 | buffers.␊ |
213 | */␊ |
214 | virtual IOReturn removeBuffer(IOStreamBuffer *buffer);␊ |
215 | ␊ |
216 | /*!␊ |
217 | @function removeBuffer␊ |
218 | @param bufferID The ID of the buffer to remove.␊ |
219 | @result Returns kIOReturnSuccess if the buffer was removed.␊ |
220 | @abstract␊ |
221 | Removes a buffer from the stream. Buffers cannot be removed␊ |
222 | while the stream is open, as this will change the buffer IDs of existing␊ |
223 | buffers.␊ |
224 | */␊ |
225 | ␊ |
226 | virtual IOReturn removeBuffer(IOStreamBufferID bufferID);␊ |
227 | ␊ |
228 | /*!␊ |
229 | @function removeAllBuffers␊ |
230 | @result␊ |
231 | */␊ |
232 | virtual IOReturn removeAllBuffers( void );␊ |
233 | ␊ |
234 | /*!␊ |
235 | @function removeAllBuffers␊ |
236 | @result Returns kIOReturnSuccess if all the buffers were successfully␊ |
237 | removed. Buffers cannot be removed␊ |
238 | while the stream is open, as this will change the buffer IDs of existing␊ |
239 | buffers.␊ |
240 | ␊ |
241 | */␊ |
242 | virtual IOItemCount getBufferCount( void );␊ |
243 | ␊ |
244 | /*!␊ |
245 | @function getBuffers␊ |
246 | @abstract Get an array containing all the buffers in the stream.␊ |
247 | @discussion␊ |
248 | Returns an OSArray containing all the buffers in the stream in order of their buffer ID.␊ |
249 | */␊ |
250 | virtual OSArray *getBuffers( void );␊ |
251 | ␊ |
252 | ␊ |
253 | /*!␊ |
254 | @function getBufferWithID␊ |
255 | @param bufferID␊ |
256 | The ID of the buffer to get.␊ |
257 | @result␊ |
258 | A pointer to an IOStreamBuffer object, or NULL if the␊ |
259 | buffer ID was invalid for this stream.␊ |
260 | */␊ |
261 | ␊ |
262 | virtual IOStreamBuffer *getBufferWithID(IOStreamBufferID bufferID);␊ |
263 | ␊ |
264 | /*!␊ |
265 | @functiongroup Managing notification ports␊ |
266 | */␊ |
267 | ␊ |
268 | /*!␊ |
269 | @function getInputPort␊ |
270 | @abstract Get the Mach port used to receive notifications␊ |
271 | from user space that a buffer has been added to the input queue.␊ |
272 | */␊ |
273 | virtual mach_port_t getInputPort(void);␊ |
274 | ␊ |
275 | /*!␊ |
276 | @function setInputPort␊ |
277 | @abstract Set the Mach port used to receive notifications from␊ |
278 | user space that a buffer has been added to the input queue.␊ |
279 | @param port␊ |
280 | ␊ |
281 | */␊ |
282 | virtual IOReturn setInputPort(mach_port_t port);␊ |
283 | ␊ |
284 | /*!␊ |
285 | @function getOutputPort␊ |
286 | @abstract Get the Mach port used to send notifications to user space␊ |
287 | that a buffer has been added to the output queue.␊ |
288 | */␊ |
289 | virtual mach_port_t getOutputPort(void);␊ |
290 | ␊ |
291 | /*!␊ |
292 | @function setOutputPort␊ |
293 | @abstract Set the Mach port used to send notifications to user space␊ |
294 | that a buffer has been added to the output queue.␊ |
295 | @param port␊ |
296 | */␊ |
297 | virtual IOReturn setOutputPort(mach_port_t port);␊ |
298 | ␊ |
299 | /*!␊ |
300 | @function sendOutputNotification␊ |
301 | @abstract Send a notification to the user client that data is available␊ |
302 | for reading on the output queue. This will result in the user's output␊ |
303 | handler being called, if they registered one.␊ |
304 | @result Returns kIOReturnSuccess if the notification was successfully sent.␊ |
305 | */␊ |
306 | virtual IOReturn sendOutputNotification(void);␊ |
307 | ␊ |
308 | /*!␊ |
309 | @functiongroup Queueing and dequeueing buffers␊ |
310 | */␊ |
311 | ␊ |
312 | /*!␊ |
313 | @function enqueueOutputBuffer␊ |
314 | @abstract A convenience method for enqueueing a buffer.␊ |
315 | @param buffer␊ |
316 | @param dataOffset␊ |
317 | @param dataLength␊ |
318 | @param controlOffset␊ |
319 | @param controlLength␊ |
320 | @result␊ |
321 | */␊ |
322 | virtual IOReturn enqueueOutputBuffer(IOStreamBuffer *buffer,␊ |
323 | IOByteCount dataOffset = 0,␊ |
324 | IOByteCount dataLength = 0,␊ |
325 | IOByteCount controlOffset = 0,␊ |
326 | IOByteCount controlLength = 0);␊ |
327 | ␊ |
328 | ␊ |
329 | /*!␊ |
330 | @function enqueueOutputEntry␊ |
331 | @param entry␊ |
332 | @result␊ |
333 | */␊ |
334 | virtual IOReturn enqueueOutputEntry( IOStreamBufferQueueEntry *entry );␊ |
335 | ␊ |
336 | /*!␊ |
337 | @function dequeueInputEntry␊ |
338 | @param entry␊ |
339 | @result␊ |
340 | */␊ |
341 | virtual IOReturn dequeueInputEntry( IOStreamBufferQueueEntry *entry );␊ |
342 | ␊ |
343 | /*!␊ |
344 | @functiongroup Managing notifications␊ |
345 | */␊ |
346 | ␊ |
347 | /*!␊ |
348 | @function inputCallback␊ |
349 | @abstract Input callback function to be implemented by a subclass;␊ |
350 | @param token␊ |
351 | A 32-bit token value that can be used by convention to communicate␊ |
352 | from user space to the stream. The semantics of this value are␊ |
353 | defined by the IOStream subclass.␊ |
354 | @discussion␊ |
355 | The inputCallback() method is called as a result of a fast trap␊ |
356 | from user space. It is called on the same thread as the user request,␊ |
357 | but the subclass should implement this call as a notification sent␊ |
358 | to a workloop so that the request is asynchronous.␊ |
359 | */␊ |
360 | virtual void inputCallback( UInt32 token );␊ |
361 | ␊ |
362 | /*!␊ |
363 | @function inputSyncCallback␊ |
364 | @abstract Input callback function to be implemented by a subclass.␊ |
365 | @param token␊ |
366 | A 32-bit token value that can be used by convention to communicate␊ |
367 | from user space to the stream. The semantics of this value are␊ |
368 | defined by the IOStream subclass.␊ |
369 | @discussion␊ |
370 | The inputSyncCallback() method is called as a result of a fast trap␊ |
371 | from user space. It is called on the same thread as the user request,␊ |
372 | so no context switch is necessary.␊ |
373 | */␊ |
374 | virtual void inputSyncCallback( UInt32 token );␊ |
375 | ␊ |
376 | /*!␊ |
377 | @functiongroup Stream control␊ |
378 | */␊ |
379 | ␊ |
380 | /*!␊ |
381 | @function getStreamMode␊ |
382 | @abstract Returns the mode of the stream, either input or output.␊ |
383 | @result The mode of the stream, either kIOStreamModeInput␊ |
384 | (from user space to kernel space) or the default␊ |
385 | kIOStreamModeOutput (from kernel space to user space).␊ |
386 | */␊ |
387 | virtual IOStreamMode getStreamMode(void);␊ |
388 | ␊ |
389 | /*!␊ |
390 | @function setStreamMode␊ |
391 | @abstract Sets the mode of the stream, either input or output.␊ |
392 | @discussion Subclasses may define whether it is possible␊ |
393 | to change the mode of a stream.␊ |
394 | */␊ |
395 | virtual IOReturn setStreamMode(IOStreamMode mode);␊ |
396 | ␊ |
397 | /*!␊ |
398 | @function startStream␊ |
399 | @abstract Start sending data on a stream.␊ |
400 | @result Returns kIOReturnSuccess if the stream was successfully started.␊ |
401 | @discussion This must be implemented by a subclass.␊ |
402 | */␊ |
403 | virtual IOReturn startStream(void);␊ |
404 | ␊ |
405 | /*!␊ |
406 | @function stopStream␊ |
407 | @abstract Stop sending data on a stream.␊ |
408 | @result Returns kIOReturnSuccess if the stream was successfully stopped.␊ |
409 | @discussion This must be implemented by a subclass.␊ |
410 | */␊ |
411 | virtual IOReturn stopStream(void);␊ |
412 | ␊ |
413 | /*!␊ |
414 | @function suspendStream␊ |
415 | @abstract Temporarily suspend data flow on the stream.␊ |
416 | @result Returns kIOReturnSuccess if the stream was successfully suspended.␊ |
417 | @discussion This must be implemented by a subclass.␊ |
418 | */␊ |
419 | virtual IOReturn suspendStream(void);␊ |
420 | ␊ |
421 | /*!␊ |
422 | @functiongroup Managing user clients␊ |
423 | */␊ |
424 | ␊ |
425 | /*!␊ |
426 | @function newUserClient␊ |
427 | @abstract See the documentation for the IOService method newUserClient.␊ |
428 | */␊ |
429 | virtual IOReturn newUserClient( task_t owningTask, void * securityID,␊ |
430 | UInt32 type, OSDictionary * properties,␊ |
431 | IOUserClient ** handler );␊ |
432 | ␊ |
433 | ␊ |
434 | /* Reserved slots */␊ |
435 | ␊ |
436 | OSMetaClassDeclareReservedUnused(IOStream, 0);␊ |
437 | OSMetaClassDeclareReservedUnused(IOStream, 1);␊ |
438 | OSMetaClassDeclareReservedUnused(IOStream, 2);␊ |
439 | OSMetaClassDeclareReservedUnused(IOStream, 3);␊ |
440 | OSMetaClassDeclareReservedUnused(IOStream, 4);␊ |
441 | OSMetaClassDeclareReservedUnused(IOStream, 5);␊ |
442 | OSMetaClassDeclareReservedUnused(IOStream, 6);␊ |
443 | OSMetaClassDeclareReservedUnused(IOStream, 7);␊ |
444 | OSMetaClassDeclareReservedUnused(IOStream, 8);␊ |
445 | OSMetaClassDeclareReservedUnused(IOStream, 9);␊ |
446 | OSMetaClassDeclareReservedUnused(IOStream, 10);␊ |
447 | OSMetaClassDeclareReservedUnused(IOStream, 11);␊ |
448 | OSMetaClassDeclareReservedUnused(IOStream, 12);␊ |
449 | OSMetaClassDeclareReservedUnused(IOStream, 13);␊ |
450 | OSMetaClassDeclareReservedUnused(IOStream, 14);␊ |
451 | OSMetaClassDeclareReservedUnused(IOStream, 15);␊ |
452 | OSMetaClassDeclareReservedUnused(IOStream, 16);␊ |
453 | OSMetaClassDeclareReservedUnused(IOStream, 17);␊ |
454 | OSMetaClassDeclareReservedUnused(IOStream, 18);␊ |
455 | OSMetaClassDeclareReservedUnused(IOStream, 19);␊ |
456 | OSMetaClassDeclareReservedUnused(IOStream, 20);␊ |
457 | OSMetaClassDeclareReservedUnused(IOStream, 21);␊ |
458 | OSMetaClassDeclareReservedUnused(IOStream, 22);␊ |
459 | OSMetaClassDeclareReservedUnused(IOStream, 23);␊ |
460 | OSMetaClassDeclareReservedUnused(IOStream, 24);␊ |
461 | OSMetaClassDeclareReservedUnused(IOStream, 25);␊ |
462 | OSMetaClassDeclareReservedUnused(IOStream, 26);␊ |
463 | OSMetaClassDeclareReservedUnused(IOStream, 27);␊ |
464 | OSMetaClassDeclareReservedUnused(IOStream, 28);␊ |
465 | OSMetaClassDeclareReservedUnused(IOStream, 29);␊ |
466 | OSMetaClassDeclareReservedUnused(IOStream, 30);␊ |
467 | OSMetaClassDeclareReservedUnused(IOStream, 31);␊ |
468 | ␊ |
469 | };␊ |
470 | ␊ |
471 | ␊ |
472 | /*!␊ |
473 | @class IOStreamBuffer␊ |
474 | A class representing a data buffer that is part of an IOStream.␊ |
475 | */␊ |
476 | ␊ |
477 | class IOStreamBuffer : public OSObject␊ |
478 | {␊ |
479 | OSDeclareDefaultStructors(IOStreamBuffer);␊ |
480 | ␊ |
481 | protected:␊ |
482 | IOMemoryDescriptor * _dataBuffer; // The data buffer is expected to be filled by hardware.␊ |
483 | IOMemoryDescriptor * _controlBuffer; // The control buffer is expected to be defined by the hardware driver.␊ |
484 | ␊ |
485 | IOStreamBufferID _bufferID; // Client handle for this buffer.␊ |
486 | ␊ |
487 | OSArray * _clientMemoryMaps; // Maps for clients who are sharing these buffers.␊ |
488 | ␊ |
489 | SInt32 _clientReferenceCount; // Count of client uses of this buffer. May be negative.␊ |
490 | ␊ |
491 | public:␊ |
492 | /*!␊ |
493 | @function initWithMemoryDescriptors␊ |
494 | */ ␊ |
495 | virtual bool initWithMemoryDescriptors(IOMemoryDescriptor *dataBuffer,␊ |
496 | IOMemoryDescriptor *controlBuffer,␊ |
497 | IOStreamBufferID bufferID = 0);␊ |
498 | ␊ |
499 | /*!␊ |
500 | @function withMemoryDescriptors␊ |
501 | */ ␊ |
502 | static IOStreamBuffer *withMemoryDescriptors(IOMemoryDescriptor *dataBuffer,␊ |
503 | IOMemoryDescriptor *controlBuffer,␊ |
504 | IOStreamBufferID bufferID = 0);␊ |
505 | ␊ |
506 | virtual void free(void);␊ |
507 | ␊ |
508 | /*!␊ |
509 | @function getBufferID␊ |
510 | @abstract Gets the buffer identifier for the IOStreamBuffer object.␊ |
511 | @discussion The buffer identifier is unique across all buffers in a stream.␊ |
512 | */␊ |
513 | virtual IOStreamBufferID getBufferID(void);␊ |
514 | ␊ |
515 | /*!␊ |
516 | @function setBufferID␊ |
517 | @abstract Sets the buffer identifier for the IOStreamBuffer object.␊ |
518 | */␊ |
519 | ␊ |
520 | virtual void setBufferID( IOStreamBufferID bufferID );␊ |
521 | ␊ |
522 | /*!␊ |
523 | @function setDataBuffer␊ |
524 | @abstract Sets the data buffer for the IOStreamBuffer object.␊ |
525 | */␊ |
526 | virtual void setDataBuffer(IOMemoryDescriptor *dataBuffer);␊ |
527 | ␊ |
528 | /*!␊ |
529 | @function setControlBuffer␊ |
530 | @abstract Sets the control buffer for the IOStreamBuffer object.␊ |
531 | */␊ |
532 | virtual void setControlBuffer(IOMemoryDescriptor *controlBuffer);␊ |
533 | ␊ |
534 | /*!␊ |
535 | @function getDataBuffer␊ |
536 | @result A pointer to the IOMemoryDescriptor for the data buffer.␊ |
537 | */␊ |
538 | virtual IOMemoryDescriptor *getDataBuffer(void);␊ |
539 | ␊ |
540 | /*!␊ |
541 | @function getControlBuffer␊ |
542 | @result A pointer to the IOMemoryDescriptor for the control buffer.␊ |
543 | */␊ |
544 | virtual IOMemoryDescriptor *getControlBuffer(void);␊ |
545 | ␊ |
546 | /*!␊ |
547 | @function getClientReferenceCount␊ |
548 | @result The count of client references to this buffer. It may be positive␊ |
549 | or negative, depending on whether the client is sending data into the kernel,␊ |
550 | or the kernel is sending data out to the client.␊ |
551 | */␊ |
552 | virtual SInt32 getClientReferenceCount( void );␊ |
553 | ␊ |
554 | /*!␊ |
555 | @function sendClientReference␊ |
556 | @param offset The offset in the buffer of the data sent to the client.␊ |
557 | @param length The length of the data sent to the client.␊ |
558 | @result The new client reference count.␊ |
559 | @abstract␊ |
560 | */␊ |
561 | virtual SInt32 sendClientReference( IOByteCount offset = 0, IOByteCount length = 0 );␊ |
562 | ␊ |
563 | /*!␊ |
564 | @function receiveClientReference␊ |
565 | @param offset The offset in the buffer of the data from the client.␊ |
566 | @param length The length of the data from the client.␊ |
567 | @abstract␊ |
568 | */␊ |
569 | virtual SInt32 receiveClientReference( IOByteCount offset = 0, IOByteCount length = 0 );␊ |
570 | ␊ |
571 | /* Reserved slots */␊ |
572 | ␊ |
573 | OSMetaClassDeclareReservedUnused(IOStreamBuffer, 0);␊ |
574 | OSMetaClassDeclareReservedUnused(IOStreamBuffer, 1);␊ |
575 | OSMetaClassDeclareReservedUnused(IOStreamBuffer, 2);␊ |
576 | OSMetaClassDeclareReservedUnused(IOStreamBuffer, 3);␊ |
577 | OSMetaClassDeclareReservedUnused(IOStreamBuffer, 4);␊ |
578 | OSMetaClassDeclareReservedUnused(IOStreamBuffer, 5);␊ |
579 | OSMetaClassDeclareReservedUnused(IOStreamBuffer, 6);␊ |
580 | OSMetaClassDeclareReservedUnused(IOStreamBuffer, 7);␊ |
581 | OSMetaClassDeclareReservedUnused(IOStreamBuffer, 8);␊ |
582 | OSMetaClassDeclareReservedUnused(IOStreamBuffer, 9);␊ |
583 | OSMetaClassDeclareReservedUnused(IOStreamBuffer, 10);␊ |
584 | OSMetaClassDeclareReservedUnused(IOStreamBuffer, 11);␊ |
585 | OSMetaClassDeclareReservedUnused(IOStreamBuffer, 12);␊ |
586 | OSMetaClassDeclareReservedUnused(IOStreamBuffer, 13);␊ |
587 | OSMetaClassDeclareReservedUnused(IOStreamBuffer, 14);␊ |
588 | OSMetaClassDeclareReservedUnused(IOStreamBuffer, 15);␊ |
589 | OSMetaClassDeclareReservedUnused(IOStreamBuffer, 16);␊ |
590 | OSMetaClassDeclareReservedUnused(IOStreamBuffer, 17);␊ |
591 | OSMetaClassDeclareReservedUnused(IOStreamBuffer, 18);␊ |
592 | OSMetaClassDeclareReservedUnused(IOStreamBuffer, 19);␊ |
593 | OSMetaClassDeclareReservedUnused(IOStreamBuffer, 20);␊ |
594 | OSMetaClassDeclareReservedUnused(IOStreamBuffer, 21);␊ |
595 | OSMetaClassDeclareReservedUnused(IOStreamBuffer, 22);␊ |
596 | OSMetaClassDeclareReservedUnused(IOStreamBuffer, 23);␊ |
597 | OSMetaClassDeclareReservedUnused(IOStreamBuffer, 24);␊ |
598 | OSMetaClassDeclareReservedUnused(IOStreamBuffer, 25);␊ |
599 | OSMetaClassDeclareReservedUnused(IOStreamBuffer, 26);␊ |
600 | OSMetaClassDeclareReservedUnused(IOStreamBuffer, 27);␊ |
601 | OSMetaClassDeclareReservedUnused(IOStreamBuffer, 28);␊ |
602 | OSMetaClassDeclareReservedUnused(IOStreamBuffer, 29);␊ |
603 | OSMetaClassDeclareReservedUnused(IOStreamBuffer, 30);␊ |
604 | OSMetaClassDeclareReservedUnused(IOStreamBuffer, 31);␊ |
605 | ␊ |
606 | };␊ |
607 | ␊ |
608 | #endif /* ! __IOKIT_IOSTREAM_H */␊ |
609 | ␊ |
610 |