• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *  Copyright 2001-2008 Texas Instruments - http://www.ti.com/
3  *
4  *  Licensed under the Apache License, Version 2.0 (the "License");
5  *  you may not use this file except in compliance with the License.
6  *  You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  *  Unless required by applicable law or agreed to in writing, software
11  *  distributed under the License is distributed on an "AS IS" BASIS,
12  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  *  See the License for the specific language governing permissions and
14  *  limitations under the License.
15  */
16 
17 
18 /*
19  *  ======== DSPStream.h ========
20  *  DSP-BIOS Bridge driver support functions for TI OMAP processors.
21  *  Description:
22  *      This is the header for the DSP/BIOS Bridge stream module.
23  *
24  *  Public Functions:
25  *      DSPStream_AllocateBuffers
26  *      DSPStream_Close
27  *      DSPStream_FreeBuffers
28  *      DSPStream_GetInfo
29  *      DSPStream_Idle
30  *      DSPStream_Issue
31  *      DSPStream_Open
32  *      DSPStream_Reclaim
33  *      DSPStream_RegisterNotify
34  *      DSPStream_Select
35  *
36  *  Notes:
37  *
38  *! Revision History:
39  *! ================
40  *! 23-Nov-2002 gp: Comment change: uEventMask is really a "type".
41  *! 17-Dec-2001 ag  Fix return codes in DSPStream_[Issue][Reclaim]
42  *! 12-Dec-2001 ag  Added DSP_ENOTIMPL error code to DSPStream_Open().
43  *! 17-Nov-2001 ag  Added DSP_ETRANSLATE error.
44  *!                 Added bufSize param and renamed dwBytes to dwDataSize in
45  *!                 DSPStream_[Issue][Reclaim]().
46  *! 07-Jun-2001 sg: Made buffer alloc/free fxn names plural.
47  *! 13-Feb-2001 kc: DSP/BIOS Bridge name updates.
48  *! 27-Sep-2000 jeh Removed DSP_BUFFERATTR parameter from DSPStream_Allocate-
49  *!                 Buffer(), since these have been moved to DSP_STREAMATTRIN.
50  *! 07-Sep-2000 jeh Changed type HANDLE in DSPStream_RegisterNotify to
51  *!                 DSP_HNOTIFICATION.
52  *! 20-Jul-2000 rr: Updated to version 0.8
53  *! 27-Jun-2000 rr: Created from DBAPI.h
54  */
55 #include <host_os.h>
56 #ifndef DSPStream_
57 #define DSPStream_
58 
59 #ifdef __cplusplus
60 extern "C" {
61 #endif
62 
63 /*
64  *  ======== DSPStream_AllocateBuffers ========
65  *  Purpose:
66  *      Allocate data buffers for use with a specific stream.
67  *  Parameters:
68  *      hStream:            The stream handle.
69  *      uSize:              Size of the buffer
70  *      apBuffer:           Ptr to location to hold array of buffers.
71  *      uNumBufs:           The number of buffers to allocate of size uSize.
72  *  Returns:
73  *      DSP_SOK:            Success.
74  *      DSP_EHANDLE:        Invalid Stream handle.
75  *      DSP_EMEMORY:        Insufficient memory
76  *      DSP_EPOINTER:       Parameter apBuffer is not valid.
77  *      DSP_EALIGNMENT:     Stream's alignment value not supported.
78  *      DSP_ESIZE:          Illegal size.
79  *      DSP_EFAIL:          General failure to allocate buffer.
80  *  Details:
81  */
82 	extern DBAPI DSPStream_AllocateBuffers(DSP_HSTREAM hStream,
83 					       UINT uSize, OUT BYTE ** apBuffer,
84 					       UINT uNumBufs);
85 
86 /*
87  *  ======== DSPStream_Close ========
88  *  Purpose:
89  *      Close a stream and free the underlying stream object.
90  *  Parameters:
91  *      hStream:            The stream handle.
92  *  Returns:
93  *      DSP_SOK:            Success.
94  *      DSP_EHANDLE:        Invalid Stream handle.
95  *      DSP_EPENDING:       Not all stream buffers have been reclaimed
96  *      DSP_EFAIL:          Failure to Close the Stream
97  *  Details:
98  */
99 	extern DBAPI DSPStream_Close(DSP_HSTREAM hStream);
100 
101 /*
102  *  ======== DSPStream_FreeBuffers ========
103  *  Purpose:
104  *      Free a previously allocated stream data buffer.
105  *  Parameters:
106  *      hStream:            The stream handle.
107  *      apBuffer:           The array of buffers to free.
108  *      uNumBufs:           The number of buffers.
109  *  Returns:
110  *      DSP_SOK:            Success.
111  *      DSP_EHANDLE:        Invalid Stream handle.
112  *      DSP_EPOINTER:       Parameter apBuffer is not valid.
113  *      DSP_EFAIL:          Failure to free the data buffers
114  *  Details:
115  */
116 	extern DBAPI DSPStream_FreeBuffers(DSP_HSTREAM hStream,
117 					   IN BYTE ** apBuffer, UINT uNumBufs);
118 
119 /*
120  *  ======== DSPStream_GetInfo ========
121  *  Purpose:
122  *      Get information about a stream.
123  *  Parameters:
124  *      hStream:            The stream handle.
125  *      pStreamInfo:        Ptr to the DSP_STREAMINFO structure.
126  *      uStreamInfoSize:    The size of structure.
127  *  Returns:
128  *      DSP_SOK:            Success.
129  *      DSP_EHANDLE:        Invalid Stream handle.
130  *      DSP_EPOINTER:       Parameter pStreamInfo is invalid.
131  *      DSP_ESIZE:          uStreamInfoSize is too small to hold all stream
132  *                          information.
133  *      DSP_EFAIL:          Unable to retrieve Stream info
134  *  Details:
135  */
136 	extern DBAPI DSPStream_GetInfo(DSP_HSTREAM hStream,
137 				       OUT struct DSP_STREAMINFO * pStreamInfo,
138 				       UINT uStreamInfoSize);
139 
140 /*
141  *  ======== DSPStream_Idle ========
142  *  Purpose:
143  *      Terminate I/O with a particular stream, and (optionally)
144  *      flush output data buffers.
145  *  Parameters:
146  *      hStream:            The stream handle.
147  *      bFlush:             Boolean flag
148  *  Returns:
149  *      DSP_SOK:            Success.
150  *      DSP_EHANDLE:        Invalid Stream handle.
151  *      DSP_ETIMEOUT:       Time out occurred.
152  *      DSP_ERESTART:       A critical error has
153  *                          occurred and the DSP is being restarted.
154  *      DSP_EFAIL:          Unable to Idle the stream
155  *  Details:
156  */
157 	extern DBAPI DSPStream_Idle(DSP_HSTREAM hStream, bool bFlush);
158 
159 /*
160  *  ======== DSPStream_Issue ========
161  *  Purpose:
162  *      Send a buffer of data to a stream.
163  *  Parameters:
164  *      hStream:            The stream handle.
165  *      pBuffer:            Ptr to the buffer.
166  *      dwDataSize:         Size of data in buffer in bytes.
167  *      dwBufSize:          Size of actual buffer in bytes.
168  *      dwArg:              User defined buffer context.
169  *  Returns:
170  *      DSP_SOK:            Success.
171  *      DSP_EHANDLE:        Invalid Stream handle.
172  *      DSP_EPOINTER:       Invalid pBuffer pointer
173  *      DSP_ESTREAMFULL:    The stream has been issued the maximum number
174  *                          of buffers allowed in the stream at once;
175  *                          buffers must be reclaimed from the stream
176  *                          before any more can be issued.
177  *      DSP_EFAIL:          Unable to issue the buffer.
178  *      DSP_ETRANSLATE:     Unable to map shared buffer to client process.
179  *  Details:
180  */
181 	extern DBAPI DSPStream_Issue(DSP_HSTREAM hStream, IN BYTE * pBuffer,
182 				     ULONG dwDataSize, ULONG dwBufSize,
183 				     IN DWORD dwArg);
184 
185 /*
186  *  ======== DSPStream_Open ========
187  *  Purpose:
188  *      Retrieve a stream handle for sending/receiving data buffers
189  *      to/from a task node on a DSP.
190  *  Parameters:
191  *      hNode:              The node handle.
192  *      uDirection:         Stream direction: {DSP_TONODE | DSP_FROMNODE}.
193  *      uIndex:             Stream index (zero based).
194  *      pAttrIn:            Ptr to the stream attributes (optional)
195  *      phStream:           Ptr to location to store the stream handle.
196  *  Returns:
197  *      DSP_SOK:            Success.
198  *      DSP_EPOINTER:       Invalid phStream pointer.
199  *      DSP_ENODETYPE:      Stream can not be opened for this node type/
200  *      DSP_EDIRECTION:     uDirection is invalid
201  *      DSP_EVALUE:         uIndex is invalid, or, if pAttrIn != NULL,
202  *                          pAttrIn->uSegment is invalid.
203  *      DSP_EFAIL:          General failure.
204  *      DSP_ESTRMMODE:      Stream mode is invalid.
205  *      DSP_EDMACHNL:       DMAChnlId is invalid, if STRMMODE is LDMA or RDMA.
206  *      DSP_EHANDLE:        Invalid Stream handle.
207  *      DSP_ENOTIMPL:       Stream mode is not supported.
208  *
209  *  Details:
210  */
211 	extern DBAPI DSPStream_Open(DSP_HNODE hNode, UINT uDirection,
212 				    UINT uIndex,
213 				    IN OPTIONAL struct DSP_STREAMATTRIN * pAttrIn,
214 				    OUT DSP_HSTREAM * phStream);
215 
216 /*
217  *  ======== DSPStream_PrepareBuffer ========
218  *  Purpose:
219  *      Prepare a buffer that was not allocated by DSPStream_AllocateBuffers
220  *      for use with a stream
221  *  Parameters:
222  *      hStream:            Stream handle
223  *      uSize:              Size of the allocated buffer(GPP bytes)
224  *      pBffer:             Address of the Allocated buffer
225  *  Returns:
226  *      DSP_SOK:            Success
227  *      DSP_EHANDLE:        Invalid Stream handle
228  *      DSP_EPOINTER:       Invalid pBuffer
229  *      DSP_EFAIL:          Failure to Prepare a buffer
230  */
231 	extern DBAPI DSPStream_PrepareBuffer(DSP_HSTREAM hStream, UINT uSize,
232 					     BYTE * pBuffer);
233 
234 /*
235  *  ======== DSPStream_Reclaim ========
236  *  Purpose:
237  *      Request a buffer back from a stream.
238  *  Parameters:
239  *      hStream:            The stream handle.
240  *      pBufPtr:            Ptr to location to store stream buffer.
241  *      pDataSize:          Ptr to location to store data size of the buffer.
242  *      pBufSize:           Ptr to location to store actual size of the buffer.
243  *      pdwArg:             Ptr to location to store user defined context.
244  *  Returns:
245  *      DSP_SOK:            Success.
246  *      DSP_EHANDLE:        Invalid Stream handle.
247  *      DSP_EPOINTER:       One of pBufPtr or pBytes is invalid.
248  *      DSP_ETIMEOUT:       Timeout waiting from I/O completion.
249  *      DSP_ERESTART:       A critical error has occurred and
250  *                          the DSP is being restarted.
251  *      DSP_EFAIL:          Unable to Reclaim buffer.
252  *      DSP_ETRANSLATE:     Unable to map shared buffer to client process.
253  *  Details:
254  */
255 	extern DBAPI DSPStream_Reclaim(DSP_HSTREAM hStream,
256 				       OUT BYTE ** pBufPtr,
257 				       OUT ULONG * pDataSize,
258 				       OUT ULONG * pBufSize,
259 				       OUT DWORD * pdwArg);
260 
261 /*
262  *  ======== DSPStream_RegisterNotify ========
263  *  Purpose:
264  *      Register to be notified of specific events for this stream.
265  *  Parameters:
266  *      hStream:            The stream handle.
267  *      uEventMask:         Type of event to be notified about.
268  *      uNotifyType:        Type of notification to be sent.
269  *      hNotification:      Handle to be used for notification.
270  *  Returns:
271  *      DSP_SOK:            Success.
272  *      DSP_EHANDLE:        Invalid stream handle or invalid hNotification
273  *      DSP_EVALUE:         uEventMask is invalid
274  *      DSP_ENOTIMP:        Not supported as specified in uNotifyType
275  *      DSP_EFAIL:          Unable to Register for notification
276  *  Details:
277  */
278 	extern DBAPI DSPStream_RegisterNotify(DSP_HSTREAM hStream,
279 					      UINT uEventMask, UINT uNotifyType,
280 					      struct DSP_NOTIFICATION* hNotification);
281 
282 /*
283  *  ======== DSPStream_Select ========
284  *  Purpose:
285  *      Select a ready stream.
286  *  Parameters:
287  *      aStreamTab:         Array of stream handles.
288  *      nStreams:           Number of streams in array.
289  *      pMask:              Pointer to the mask of ready streams.
290  *      uTimeout:           Timeout value in milliseconds.
291  *  Returns:
292  *      DSP_SOK:            Success.
293  *      DSP_ERANGE:         nStreams is out of range
294  *      DSP_EPOINTER:       Invalid aStreamTab or pMask pointer.
295  *      DSP_ETIMEOUT        Timeout occured.
296  *      DSP_EFAIL:          Failure to select a stream.
297  *      DSP_ERESTART:       A critical error has occurred and
298  *                          the DSP is being restarted.
299  *  Details:
300  */
301 	extern DBAPI DSPStream_Select(IN DSP_HSTREAM * aStreamTab,
302 				      UINT nStreams, OUT UINT * pMask,
303 				      UINT uTimeout);
304 
305 /*
306  *  ======== DSPStream_UnprepareBuffer ========
307  *  Purpose:
308  *      UnPrepare a buffer that was prepared by DSPStream_PrepareBuffer
309  *      and will no longer be used with the stream
310  *  Parameters:
311  *      hStream:            Stream handle
312  *      uSize:              Size of the allocated buffer(GPP bytes)
313  *      pBffer:             Address of the Allocated buffer
314  *  Returns:
315  *      DSP_SOK:            Success
316  *      DSP_EHANDLE:        Invalid Stream handle
317  *      DSP_EPOINTER:       Invalid pBuffer
318  *      DSP_EFAIL:          Failure to UnPrepare a buffer
319  */
320 	extern DBAPI DSPStream_UnprepareBuffer(DSP_HSTREAM hStream, UINT uSize,
321 					       BYTE * pBuffer);
322 
323 #ifdef __cplusplus
324 }
325 #endif
326 #endif				/* DSPStream_ */
327