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