1 /* 2 * dspbridge/mpu_api/inc/DSPStream.h 3 * 4 * DSP-BIOS Bridge driver support functions for TI OMAP processors. 5 * 6 * Copyright (C) 2007 Texas Instruments, Inc. 7 * 8 * This program is free software; you can redistribute it and/or modify it 9 * under the terms of the GNU Lesser General Public License as published 10 * by the Free Software Foundation version 2.1 of the License. 11 * 12 * This program is distributed .as is. WITHOUT ANY WARRANTY of any kind, 13 * whether express or implied; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 * Lesser General Public License for more details. 16 */ 17 18 19 /* 20 * ======== DSPStream.h ======== 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 56 #include <host_os.h> 57 58 #ifndef DSPStream_ 59 #define DSPStream_ 60 61 #ifdef __cplusplus 62 extern "C" { 63 #endif 64 65 /* 66 * ======== DSPStream_AllocateBuffers ======== 67 * Purpose: 68 * Allocate data buffers for use with a specific stream. 69 * Parameters: 70 * hStream: The stream handle. 71 * uSize: Size of the buffer 72 * apBuffer: Ptr to location to hold array of buffers. 73 * uNumBufs: The number of buffers to allocate of size uSize. 74 * Returns: 75 * DSP_SOK: Success. 76 * DSP_EHANDLE: Invalid Stream handle. 77 * DSP_EMEMORY: Insufficient memory 78 * DSP_EPOINTER: Parameter apBuffer is not valid. 79 * DSP_EALIGNMENT: Stream's alignment value not supported. 80 * DSP_ESIZE: Illegal size. 81 * DSP_EFAIL: General failure to allocate buffer. 82 * Details: 83 */ 84 extern DBAPI DSPStream_AllocateBuffers(DSP_HSTREAM hStream, 85 UINT uSize, OUT BYTE ** apBuffer, 86 UINT uNumBufs); 87 88 /* 89 * ======== DSPStream_Close ======== 90 * Purpose: 91 * Close a stream and free the underlying stream object. 92 * Parameters: 93 * hStream: The stream handle. 94 * Returns: 95 * DSP_SOK: Success. 96 * DSP_EHANDLE: Invalid Stream handle. 97 * DSP_EPENDING: Not all stream buffers have been reclaimed 98 * DSP_EFAIL: Failure to Close the Stream 99 * Details: 100 */ 101 extern DBAPI DSPStream_Close(DSP_HSTREAM hStream); 102 103 /* 104 * ======== DSPStream_FreeBuffers ======== 105 * Purpose: 106 * Free a previously allocated stream data buffer. 107 * Parameters: 108 * hStream: The stream handle. 109 * apBuffer: The array of buffers to free. 110 * uNumBufs: The number of buffers. 111 * Returns: 112 * DSP_SOK: Success. 113 * DSP_EHANDLE: Invalid Stream handle. 114 * DSP_EPOINTER: Parameter apBuffer is not valid. 115 * DSP_EFAIL: Failure to free the data buffers 116 * Details: 117 */ 118 extern DBAPI DSPStream_FreeBuffers(DSP_HSTREAM hStream, 119 IN BYTE ** apBuffer, UINT uNumBufs); 120 121 /* 122 * ======== DSPStream_GetInfo ======== 123 * Purpose: 124 * Get information about a stream. 125 * Parameters: 126 * hStream: The stream handle. 127 * pStreamInfo: Ptr to the DSP_STREAMINFO structure. 128 * uStreamInfoSize: The size of structure. 129 * Returns: 130 * DSP_SOK: Success. 131 * DSP_EHANDLE: Invalid Stream handle. 132 * DSP_EPOINTER: Parameter pStreamInfo is invalid. 133 * DSP_ESIZE: uStreamInfoSize is too small to hold all stream 134 * information. 135 * DSP_EFAIL: Unable to retrieve Stream info 136 * Details: 137 */ 138 extern DBAPI DSPStream_GetInfo(DSP_HSTREAM hStream, 139 OUT struct DSP_STREAMINFO * pStreamInfo, 140 UINT uStreamInfoSize); 141 142 /* 143 * ======== DSPStream_Idle ======== 144 * Purpose: 145 * Terminate I/O with a particular stream, and (optionally) 146 * flush output data buffers. 147 * Parameters: 148 * hStream: The stream handle. 149 * bFlush: Boolean flag 150 * Returns: 151 * DSP_SOK: Success. 152 * DSP_EHANDLE: Invalid Stream handle. 153 * DSP_ETIMEOUT: Time out occurred. 154 * DSP_ERESTART: A critical error has 155 * occurred and the DSP is being restarted. 156 * DSP_EFAIL: Unable to Idle the stream 157 * Details: 158 */ 159 extern DBAPI DSPStream_Idle(DSP_HSTREAM hStream, bool bFlush); 160 161 /* 162 * ======== DSPStream_Issue ======== 163 * Purpose: 164 * Send a buffer of data to a stream. 165 * Parameters: 166 * hStream: The stream handle. 167 * pBuffer: Ptr to the buffer. 168 * dwDataSize: Size of data in buffer in bytes. 169 * dwBufSize: Size of actual buffer in bytes. 170 * dwArg: User defined buffer context. 171 * Returns: 172 * DSP_SOK: Success. 173 * DSP_EHANDLE: Invalid Stream handle. 174 * DSP_EPOINTER: Invalid pBuffer pointer 175 * DSP_ESTREAMFULL: The stream has been issued the maximum number 176 * of buffers allowed in the stream at once; 177 * buffers must be reclaimed from the stream 178 * before any more can be issued. 179 * DSP_EFAIL: Unable to issue the buffer. 180 * DSP_ETRANSLATE: Unable to map shared buffer to client process. 181 * Details: 182 */ 183 extern DBAPI DSPStream_Issue(DSP_HSTREAM hStream, IN BYTE * pBuffer, 184 ULONG dwDataSize, ULONG dwBufSize, 185 IN DWORD dwArg); 186 187 /* 188 * ======== DSPStream_Open ======== 189 * Purpose: 190 * Retrieve a stream handle for sending/receiving data buffers 191 * to/from a task node on a DSP. 192 * Parameters: 193 * hNode: The node handle. 194 * uDirection: Stream direction: {DSP_TONODE | DSP_FROMNODE}. 195 * uIndex: Stream index (zero based). 196 * pAttrIn: Ptr to the stream attributes (optional) 197 * phStream: Ptr to location to store the stream handle. 198 * Returns: 199 * DSP_SOK: Success. 200 * DSP_EPOINTER: Invalid phStream pointer. 201 * DSP_ENODETYPE: Stream can not be opened for this node type/ 202 * DSP_EDIRECTION: uDirection is invalid 203 * DSP_EVALUE: uIndex is invalid, or, if pAttrIn != NULL, 204 * pAttrIn->uSegment is invalid. 205 * DSP_EFAIL: General failure. 206 * DSP_ESTRMMODE: Stream mode is invalid. 207 * DSP_EDMACHNL: DMAChnlId is invalid, if STRMMODE is LDMA or RDMA. 208 * DSP_EHANDLE: Invalid Stream handle. 209 * DSP_ENOTIMPL: Stream mode is not supported. 210 * 211 * Details: 212 */ 213 extern DBAPI DSPStream_Open(DSP_HNODE hNode, UINT uDirection, 214 UINT uIndex, 215 IN OPTIONAL struct DSP_STREAMATTRIN * pAttrIn, 216 OUT DSP_HSTREAM * phStream); 217 218 /* 219 * ======== DSPStream_PrepareBuffer ======== 220 * Purpose: 221 * Prepare a buffer that was not allocated by DSPStream_AllocateBuffers 222 * for use with a stream 223 * Parameters: 224 * hStream: Stream handle 225 * uSize: Size of the allocated buffer(GPP bytes) 226 * pBffer: Address of the Allocated buffer 227 * Returns: 228 * DSP_SOK: Success 229 * DSP_EHANDLE: Invalid Stream handle 230 * DSP_EPOINTER: Invalid pBuffer 231 * DSP_EFAIL: Failure to Prepare a buffer 232 */ 233 extern DBAPI DSPStream_PrepareBuffer(DSP_HSTREAM hStream, UINT uSize, 234 BYTE * pBuffer); 235 236 /* 237 * ======== DSPStream_Reclaim ======== 238 * Purpose: 239 * Request a buffer back from a stream. 240 * Parameters: 241 * hStream: The stream handle. 242 * pBufPtr: Ptr to location to store stream buffer. 243 * pDataSize: Ptr to location to store data size of the buffer. 244 * pBufSize: Ptr to location to store actual size of the buffer. 245 * pdwArg: Ptr to location to store user defined context. 246 * Returns: 247 * DSP_SOK: Success. 248 * DSP_EHANDLE: Invalid Stream handle. 249 * DSP_EPOINTER: One of pBufPtr or pBytes is invalid. 250 * DSP_ETIMEOUT: Timeout waiting from I/O completion. 251 * DSP_ERESTART: A critical error has occurred and 252 * the DSP is being restarted. 253 * DSP_EFAIL: Unable to Reclaim buffer. 254 * DSP_ETRANSLATE: Unable to map shared buffer to client process. 255 * Details: 256 */ 257 extern DBAPI DSPStream_Reclaim(DSP_HSTREAM hStream, 258 OUT BYTE ** pBufPtr, 259 OUT ULONG * pDataSize, 260 OUT ULONG * pBufSize, 261 OUT DWORD * pdwArg); 262 263 /* 264 * ======== DSPStream_RegisterNotify ======== 265 * Purpose: 266 * Register to be notified of specific events for this stream. 267 * Parameters: 268 * hStream: The stream handle. 269 * uEventMask: Type of event to be notified about. 270 * uNotifyType: Type of notification to be sent. 271 * hNotification: Handle to be used for notification. 272 * Returns: 273 * DSP_SOK: Success. 274 * DSP_EHANDLE: Invalid stream handle or invalid hNotification 275 * DSP_EVALUE: uEventMask is invalid 276 * DSP_ENOTIMP: Not supported as specified in uNotifyType 277 * DSP_EFAIL: Unable to Register for notification 278 * Details: 279 */ 280 extern DBAPI DSPStream_RegisterNotify(DSP_HSTREAM hStream, 281 UINT uEventMask, UINT uNotifyType, 282 struct DSP_NOTIFICATION* hNotification); 283 284 /* 285 * ======== DSPStream_Select ======== 286 * Purpose: 287 * Select a ready stream. 288 * Parameters: 289 * aStreamTab: Array of stream handles. 290 * nStreams: Number of streams in array. 291 * pMask: Pointer to the mask of ready streams. 292 * uTimeout: Timeout value in milliseconds. 293 * Returns: 294 * DSP_SOK: Success. 295 * DSP_ERANGE: nStreams is out of range 296 * DSP_EPOINTER: Invalid aStreamTab or pMask pointer. 297 * DSP_ETIMEOUT Timeout occured. 298 * DSP_EFAIL: Failure to select a stream. 299 * DSP_ERESTART: A critical error has occurred and 300 * the DSP is being restarted. 301 * Details: 302 */ 303 extern DBAPI DSPStream_Select(IN DSP_HSTREAM * aStreamTab, 304 UINT nStreams, OUT UINT * pMask, 305 UINT uTimeout); 306 307 /* 308 * ======== DSPStream_UnprepareBuffer ======== 309 * Purpose: 310 * UnPrepare a buffer that was prepared by DSPStream_PrepareBuffer 311 * and will no longer be used with the stream 312 * Parameters: 313 * hStream: Stream handle 314 * uSize: Size of the allocated buffer(GPP bytes) 315 * pBffer: Address of the Allocated buffer 316 * Returns: 317 * DSP_SOK: Success 318 * DSP_EHANDLE: Invalid Stream handle 319 * DSP_EPOINTER: Invalid pBuffer 320 * DSP_EFAIL: Failure to UnPrepare a buffer 321 */ 322 extern DBAPI DSPStream_UnprepareBuffer(DSP_HSTREAM hStream, UINT uSize, 323 BYTE * pBuffer); 324 325 #ifdef __cplusplus 326 } 327 #endif 328 #endif /* DSPStream_ */ 329