source: svn/trunk/newcon3bcm2_21bu/magnum/basemodules/dsp/common/bdsp_audio_task.c

Last change on this file was 2, checked in by phkim, 11 years ago

1.phkim

  1. revision copy newcon3sk r27
  • Property svn:executable set to *
File size: 11.5 KB
Line 
1/***************************************************************************
2 *     Copyright (c) 2006-2012, Broadcom Corporation
3 *     All Rights Reserved
4 *     Confidential Property of Broadcom Corporation
5 *
6 *  THIS SOFTWARE MAY ONLY BE USED SUBJECT TO AN EXECUTED SOFTWARE LICENSE
7 *  AGREEMENT  BETWEEN THE USER AND BROADCOM.  YOU HAVE NO RIGHT TO USE OR
8 *  EXPLOIT THIS MATERIAL EXCEPT SUBJECT TO THE TERMS OF SUCH AN AGREEMENT.
9 *
10 * $brcm_Workfile: bdsp_audio_task.c $
11 * $brcm_Revision: Hydra_Software_Devel/5 $
12 * $brcm_Date: 2/15/12 3:02p $
13 *
14 * Module Description: Host DSP Interface
15 *
16 * Revision History:
17 *
18 * $brcm_Log: /magnum/basemodules/dsp/common/bdsp_audio_task.c $
19 *
20 * Hydra_Software_Devel/5   2/15/12 3:02p ashoky
21 * SW7425-2308: Adding interface to put audio firmware in audio gap fill
22 * mode.
23 *
24 * Hydra_Software_Devel/4   6/9/11 8:11p gautamk
25 * SW7422-357 : [7425] Modifying API prtotype for Add/Remove stage input
26 *
27 * Hydra_Software_Devel/3   4/29/11 11:42a srajapur
28 * SW7422-368 : [7422] BDSP_AudioTask_GetDefaultXxxSettings is Raaga-
29 * specific ---------> Moved raaga specific API from common files to
30 * raaga files and renamed the API's accordingly.
31 *
32 * Hydra_Software_Devel/2   4/20/11 1:10p jgarrett
33 * SW7425-392: Removing BDSP_ProcessingType enum
34 *
35 * Hydra_Software_Devel/1   4/6/11 2:15p srajapur
36 * SW7425-291: [7425]BDSP directory structure changes
37 *
38 * Hydra_Software_Devel/12   3/15/11 11:58a gskerl
39 * SW7422-146: Moved external declarations from other .c files into
40 * bdsp_raaga_priv.h
41 *
42 * Hydra_Software_Devel/11   2/26/11 12:24a srajapur
43 * SW7422-293:[7422] Adding support for encode algorithms
44 *
45 * Hydra_Software_Devel/10   2/16/11 5:37a srajapur
46 * SW7422-247 : [7422] Adding all audio post processing algorithms.
47 *
48 * Hydra_Software_Devel/9   2/15/11 3:57p jgarrett
49 * SW7422-146: Coverity CID 235
50 *
51 * Hydra_Software_Devel/8   2/15/11 3:53p jgarrett
52 * SW7422-146: Coverity CID 236
53 *
54 * Hydra_Software_Devel/7   2/5/11 4:07a srajapur
55 * SW7422-247 : [7422] Adding Generic passthrul audio processing support.
56 *
57 * Hydra_Software_Devel/6   1/19/11 7:23a gautamk
58 * SW7422-191:Adding API for Default settings.
59 *
60 * Hydra_Software_Devel/5   1/18/11 4:57a gautamk
61 * SW7422-191: Implementing review comments.
62 *
63 * Hydra_Software_Devel/4   1/18/11 4:25a gautamk
64 * SW7422-191: Implementing review comments.
65 *
66 * Hydra_Software_Devel/3   1/13/11 5:57a gautamk
67 * SW7422-191:[7422]Adding DSP support for Audio decode in Basemodule  It
68 * includes - DSP Booting - Open time Download :  - Start Time Audio
69 * Decode algorithm download  - Message buffer interaction with DSP:  -
70 * Synchronized Interrupt:  - Async interrupts:  - Config Commands for
71 * Decode/TSM/IDS: - Status Buffer for Decode/TSM/IDS:  - Start AC3 Audio
72 * Decode:  - Pause/Resume Command:  - Frame Advance command:  - Device
73 * level interrupt
74 *
75 * Hydra_Software_Devel/2   12/15/10 6:47p jgarrett
76 * SW7422-146: Initial compileable prototype
77 *
78 * Hydra_Software_Devel/1   12/15/10 2:00p jgarrett
79 * SW7422-146: Adding initial BDSP files
80 *
81 ***************************************************************************/
82
83#include "bdsp.h"
84#include "bdsp_priv.h"
85#include "bdsp_raaga_priv.h"
86#include "bdsp_raaga_fwuserconfig_priv.h"
87
88
89BDBG_MODULE(bdsp_audio_task);
90
91
92BERR_Code BDSP_AudioTask_Pause(
93    BDSP_TaskHandle task
94    )
95{
96    BDBG_OBJECT_ASSERT(task, BDSP_Task);
97    if ( task->pause ) 
98    {
99        return task->pause(task->pTaskHandle);
100    }
101    else
102    {
103        return BERR_TRACE(BERR_NOT_SUPPORTED);
104    }   
105}
106
107BERR_Code BDSP_AudioTask_Resume(
108    BDSP_TaskHandle task
109    )
110{
111    BDBG_OBJECT_ASSERT(task, BDSP_Task);
112    if ( task->resume ) 
113    {
114        return task->resume(task->pTaskHandle);
115    }
116    else
117    {
118        return BERR_TRACE(BERR_NOT_SUPPORTED);
119    }   
120}
121
122BERR_Code BDSP_AudioTask_Advance(
123    BDSP_TaskHandle task,
124    unsigned ms
125    )
126{
127    BDBG_OBJECT_ASSERT(task, BDSP_Task);
128    if ( task->advance )
129    {
130        return task->advance(task->pTaskHandle, ms);
131    }
132    else
133    {
134        return BERR_TRACE(BERR_NOT_SUPPORTED);
135    }   
136}
137
138BERR_Code BDSP_AudioTask_GetTsmSettings_isr(
139    BDSP_TaskHandle task,
140    unsigned branchId,
141    unsigned stageId,
142    BDSP_AudioTaskTsmSettings *pTsmSettings         /* [out] */
143    )
144{
145    BDBG_OBJECT_ASSERT(task, BDSP_Task);
146    BDBG_ASSERT(NULL != pTsmSettings);
147
148    BKNI_ASSERT_ISR_CONTEXT();
149
150    if ( task->getTsmSettings_isr )
151    {
152        return task->getTsmSettings_isr(task->pTaskHandle, branchId, stageId, pTsmSettings);
153    }
154    else
155    {
156        return BERR_TRACE(BERR_NOT_SUPPORTED);
157    }
158}
159
160BERR_Code BDSP_AudioTask_SetTsmSettings_isr(
161    BDSP_TaskHandle task,
162    unsigned branchId,
163    unsigned stageId,
164    const BDSP_AudioTaskTsmSettings *pTsmSettings
165    )
166{
167    BDBG_OBJECT_ASSERT(task, BDSP_Task);
168    BDBG_ASSERT(NULL != pTsmSettings);
169
170    BKNI_ASSERT_ISR_CONTEXT();
171
172    if ( task->setTsmSettings_isr )
173    {
174        return task->setTsmSettings_isr(task->pTaskHandle, branchId, stageId, pTsmSettings);
175    }
176    else
177    {
178        return BERR_TRACE(BERR_NOT_SUPPORTED);
179    }
180}
181
182BERR_Code BDSP_AudioTask_GetTsmStatus_isr(
183    BDSP_TaskHandle task,
184    unsigned branchId,
185    unsigned stageId,
186    BDSP_AudioTaskTsmStatus *pTsmStatus         /* [out] */
187    )
188{
189    BDBG_OBJECT_ASSERT(task, BDSP_Task);
190    BDBG_ASSERT(NULL != pTsmStatus);
191
192    BKNI_ASSERT_ISR_CONTEXT();
193
194    if ( task->getTsmStatus_isr )
195    {
196        return task->getTsmStatus_isr(task->pTaskHandle, branchId, stageId, pTsmStatus);
197    }
198    else
199    {
200        return BERR_TRACE(BERR_NOT_SUPPORTED);
201    }
202}
203
204BERR_Code BDSP_AudioTask_GetDatasyncSettings(
205    BDSP_TaskHandle task,
206    unsigned branchId,
207    unsigned stageId,
208    BDSP_AudioTaskDatasyncSettings *pDatasyncSettings         /* [out] */
209    )
210{
211    BDBG_OBJECT_ASSERT(task, BDSP_Task);
212    BDBG_ASSERT(NULL != pDatasyncSettings);
213
214    if ( task->getDatasyncSettings )
215    {
216        return task->getDatasyncSettings(task->pTaskHandle, branchId, stageId, pDatasyncSettings);
217    }
218    else
219    {
220        return BERR_TRACE(BERR_NOT_SUPPORTED);
221    }
222}
223
224BERR_Code BDSP_AudioTask_SetDatasyncSettings(
225    BDSP_TaskHandle task,
226    unsigned branchId,
227    unsigned stageId,
228    const BDSP_AudioTaskDatasyncSettings *pDatasyncSettings
229    )
230{
231    BDBG_OBJECT_ASSERT(task, BDSP_Task);
232    BDBG_ASSERT(NULL != pDatasyncSettings);
233
234    if ( task->setDatasyncSettings )
235    {
236        return task->setDatasyncSettings(task->pTaskHandle, branchId, stageId, pDatasyncSettings);
237    }
238    else
239    {
240        return BERR_TRACE(BERR_NOT_SUPPORTED);
241    }
242}
243
244BERR_Code BDSP_AudioTask_GetDatasyncStatus(
245    BDSP_TaskHandle task,
246    unsigned branchId,
247    unsigned stageId,
248    BDSP_AudioTaskDatasyncStatus *pDatasyncStatus         /* [out] */
249    )
250{
251    BDBG_OBJECT_ASSERT(task, BDSP_Task);
252    BDBG_ASSERT(NULL != pDatasyncStatus);
253
254    if ( task->getDatasyncStatus )
255    {
256        return task->getDatasyncStatus(task->pTaskHandle, branchId, stageId, pDatasyncStatus);
257    }
258    else
259    {
260        return BERR_TRACE(BERR_NOT_SUPPORTED);
261    }
262}
263#if 0
264BERR_Code BDSP_AudioTask_AddStageInput(
265    BDSP_TaskHandle task,
266    unsigned branchId,
267    unsigned stageId,
268    const BDSP_CIT_P_FwStgSrcDstDetails *pInputInfo
269    )
270{
271    BDBG_OBJECT_ASSERT(task, BDSP_Task);
272    BDBG_ASSERT(NULL != pInputInfo);
273
274    if ( task->addStageInput )
275    {
276        return task->addStageInput(task->pTaskHandle, branchId, stageId, pInputInfo);
277    }
278    else
279    {
280        return BERR_TRACE(BERR_NOT_SUPPORTED);
281    }
282}
283
284BERR_Code BDSP_AudioTask_RemoveStageInput(
285    BDSP_TaskHandle task,
286    unsigned branchId,
287    unsigned stageId,
288    const BDSP_CIT_P_FwStgSrcDstDetails *pInputInfo
289    )
290{
291    BDBG_OBJECT_ASSERT(task, BDSP_Task);
292    BDBG_ASSERT(NULL != pInputInfo);
293
294    if ( task->removeStageInput )
295    {
296        return task->removeStageInput(task->pTaskHandle, branchId, stageId, pInputInfo);
297    }
298    else
299    {
300        return BERR_TRACE(BERR_NOT_SUPPORTED);
301    }
302}
303
304BERR_Code BDSP_AudioTask_AddStageOutput(
305    BDSP_TaskHandle task,
306    unsigned branchId,
307    unsigned stageId,
308    const BDSP_CIT_P_FwStgSrcDstDetails *pOutputInfo
309    )
310{
311    BDBG_OBJECT_ASSERT(task, BDSP_Task);
312    BDBG_ASSERT(NULL != pOutputInfo);
313
314    if ( task->addStageOutput )
315    {
316        return task->addStageOutput(task->pTaskHandle, branchId, stageId, pOutputInfo);
317    }
318    else
319    {
320        return BERR_TRACE(BERR_NOT_SUPPORTED);
321    }
322}
323
324BERR_Code BDSP_AudioTask_RemoveStageOutput(
325    BDSP_TaskHandle task,
326    unsigned branchId,
327    unsigned stageId,
328    const BDSP_CIT_P_FwStgSrcDstDetails *pOutputInfo
329    )
330{
331    BDBG_OBJECT_ASSERT(task, BDSP_Task);
332    BDBG_ASSERT(NULL != pOutputInfo);
333
334    if ( task->removeStageOutput )
335    {
336        return task->removeStageOutput(task->pTaskHandle, branchId, stageId, pOutputInfo);
337    }
338    else
339    {
340        return BERR_TRACE(BERR_NOT_SUPPORTED);
341    }
342}
343
344#endif
345/***************************************************************************
346Summary:
347Get Current Interrupt Handlers for a task
348***************************************************************************/
349void BDSP_AudioTask_GetInterruptHandlers_isr(
350    BDSP_TaskHandle task,
351    BDSP_AudioInterruptHandlers *pHandlers   /* [out] */
352    )
353{
354    BDBG_OBJECT_ASSERT(task, BDSP_Task);
355    BDBG_ASSERT(NULL != pHandlers);
356
357    BKNI_ASSERT_ISR_CONTEXT();
358
359    if ( task->getAudioInterruptHandlers_isr)
360    {
361         task->getAudioInterruptHandlers_isr(task->pTaskHandle,pHandlers);
362    }
363}
364
365/***************************************************************************
366Summary:
367Set Current Interrupt Handlers for a task
368***************************************************************************/
369BERR_Code BDSP_AudioTask_SetInterruptHandlers_isr(
370    BDSP_TaskHandle task,
371    const BDSP_AudioInterruptHandlers *pHandlers   /* [out] */
372    )
373{
374    BDBG_OBJECT_ASSERT(task, BDSP_Task);
375    BDBG_ASSERT(NULL != pHandlers);
376
377    BKNI_ASSERT_ISR_CONTEXT();
378
379    if ( task->setAudioInterruptHandlers_isr)
380    {
381        return task->setAudioInterruptHandlers_isr(task->pTaskHandle,pHandlers);
382    }
383    else
384    {
385        return BERR_TRACE(BERR_NOT_SUPPORTED);
386    }
387}
388
389BERR_Code BDSP_AudioTask_GetDefaultDatasyncSettings(
390        void *pSettingsBuffer,        /* [out] */
391        size_t settingsBufferSize   /*[In]*/
392    )
393{   
394    if(sizeof(BDSP_AudioTaskDatasyncSettings) != settingsBufferSize)
395    {
396        BDBG_ERR(("settingsBufferSize (%d) is not equal to Config size (%d) of DataSync ",
397            settingsBufferSize,sizeof(BDSP_AudioTaskDatasyncSettings)));
398        return BERR_TRACE(BERR_INVALID_PARAMETER);
399    }
400    BKNI_Memcpy((void *)(volatile void *)pSettingsBuffer,(void *)&(BDSP_sDefaultFrameSyncTsmSettings.sFrameSyncConfigParams),settingsBufferSize);     
401
402    return BERR_SUCCESS;
403}
404
405BERR_Code BDSP_AudioTask_GetDefaultTsmSettings(
406        void *pSettingsBuffer,        /* [out] */
407        size_t settingsBufferSize   /*[In]*/
408    )
409{   
410    if(sizeof(BDSP_AudioTaskTsmSettings) != settingsBufferSize)
411    {
412        BDBG_ERR(("settingsBufferSize (%d) is not equal to Config size (%d) of DataSync ",
413            settingsBufferSize,sizeof(BDSP_AudioTaskTsmSettings)));
414        return BERR_TRACE(BERR_INVALID_PARAMETER);
415    }
416    BKNI_Memcpy((void *)(volatile void *)pSettingsBuffer,(void *)&(BDSP_sDefaultFrameSyncTsmSettings.sTsmConfigParams),settingsBufferSize);     
417
418    return BERR_SUCCESS;
419}
420
421
422BERR_Code BDSP_AudioTask_AudioGapFill(
423    BDSP_TaskHandle task
424    )
425{
426    BDBG_OBJECT_ASSERT(task, BDSP_Task);
427
428    if ( task->audioGapFill )
429    {
430        return task->audioGapFill(task->pTaskHandle);
431    }
432    else
433    {
434        return BERR_TRACE(BERR_NOT_SUPPORTED);
435    }
436}
437
438
Note: See TracBrowser for help on using the repository browser.