Merge pull request #37 in PASDK/pasdk_sr from pasdk_663_shalini to pasdk1_3_master
[processor-sdk/performance-audio-sr.git] / pasrc / test_dsp / framework / audioStreamOutProc.h
2 /*
3 Copyright (c) 2018, Texas Instruments Incorporated - http://www.ti.com/
4 All rights reserved.
6 * Redistribution and use in source and binary forms, with or without 
7 * modification, are permitted provided that the following conditions
8 * are met:
9 *
10 * Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 *
13 * Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the
16 * distribution.
17 *
18 * Neither the name of Texas Instruments Incorporated nor the names of
19 * its contributors may be used to endorse or promote products derived
20 * from this software without specific prior written permission.
21 *
22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
25 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
26 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
27 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
28 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
29 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
30 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
31 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
32 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33 *
34 */
36 /*
37  *  ======== audioStreamOutProc.h ========
38  */
40 #ifndef _ASOP_H_
41 #define _ASOP_H_
42  
43 #include <xdc/std.h>
44 #include <ti/sysbios/knl/Event.h>
45 #include <ti/sysbios/knl/Task.h>
47 #include "mcasp_cfg.h"
48 #include "ioPhy.h"
49 #include "ioBuff.h"
51 #include "audioStreamProc_params.h"
52 #include "audioStreamProc_patchs.h"
53 #include "audioStreamProc_config.h"
54 #include "audioStreamProc_master.h"
56 #define TRACE_TIME(a)
58 /* !!!!!!!!! Revisit !!!!!!!!!!!!!!
59  * Purpose : Temporary ASOT frame length sizes.
60  *                       Deprecate PAF_SYS_FRAMELENGTH in phases.*/
61 #define PAF_ASOT_FRAMELENGTH            256
62 #define PAF_ASOT_MAX_FRAMELENGTH        1024
64 // ASOT event IDs
65 #define Evt_Id_AsotWakeTimer    Event_Id_00  // ASOT Wake Timer event
66 #define Evt_Id_AsotRxMsgAsit    Event_Id_01  // ASOT Rx ASIT message event
67 #define Evt_Id_AsotRxMsgAsdt    Event_Id_02  // ASOT Rx ASDT message event
68 #define Evt_Id_AsotTxMcaspEdma  Event_Id_03  // ASOT Tx McASP EDMA event
70 #if 1
71 #define ASP_STREAM_OUT_GATE_NAME ( "AspStreamOutGate" )  // name of GateMP used StreamOut info protection
72 #define ASP_STREAM_OUT_GATE_REGION_ID ( 0 )
73 #define ASP_STREAM_OUT_INV_GATE          ( -1 )                      // error: invalid gate handle
74 #endif
76 // ASOT event handle - to put in structure
77 extern Event_Handle gAsotEvtHandle;
79 struct PAF_ASOT_Params;
80 struct PAF_ASOT_Patchs;
81 struct PAF_ASOT_Config;
83 // Audio Stream Output Task (ASOT) parameters, functions
84 typedef struct PAF_ASOT_Fxns {
85     Int (*initPhase[8]) (const struct PAF_ASOT_Params *, const struct PAF_ASOT_Patchs *, struct PAF_ASOT_Config *);
86     Int (*initFrame0) (const struct PAF_ASOT_Params *, const struct PAF_ASOT_Patchs *, struct PAF_ASOT_Config *, Int);
87     Int (*initFrame1) (const struct PAF_ASOT_Params *, const struct PAF_ASOT_Patchs *, struct PAF_ASOT_Config *, Int, Int);    
88     Int (*decodeProcessing) (const struct PAF_ASOT_Params *, const struct PAF_ASOT_Patchs *, struct PAF_ASOT_Config *);    
89     Int (*encodeCommand) (const struct PAF_ASOT_Params *, const struct PAF_ASOT_Patchs *, struct PAF_ASOT_Config *);
90     Int (*decodeInit) (const struct PAF_ASOT_Params *, const struct PAF_ASOT_Patchs *, struct PAF_ASOT_Config *);
91     Int (*decodeInfo1) (const struct PAF_ASOT_Params *, const struct PAF_ASOT_Patchs *, struct PAF_ASOT_Config *, Int);
92     Int (*decodeInfo2) (const struct PAF_ASOT_Params *, const struct PAF_ASOT_Patchs *, struct PAF_ASOT_Config *, Int);
93     Int (*decodeStream) (const struct PAF_ASOT_Params *, const struct PAF_ASOT_Patchs *, struct PAF_ASOT_Config *, Int);
94     Int (*decodeEncode) (const struct PAF_ASOT_Params *, const struct PAF_ASOT_Patchs *, struct PAF_ASOT_Config *, Int);
95     Int (*decodeFinalTest) (const struct PAF_ASOT_Params *, const struct PAF_ASOT_Patchs *, struct PAF_ASOT_Config *, Int);    
96     Int (*decodeComplete) (const struct PAF_ASOT_Params *, const struct PAF_ASOT_Patchs *, struct PAF_ASOT_Config *, Int);
97     Int (*selectDevices) (const struct PAF_ASOT_Params *, const struct PAF_ASOT_Patchs *, struct PAF_ASOT_Config *, Bool *);
98     Int (*startOutput) (const struct PAF_ASOT_Params *, const struct PAF_ASOT_Patchs *, struct PAF_ASOT_Config *);
99     Int (*stopOutput) (const struct PAF_ASOT_Params *, const struct PAF_ASOT_Patchs *, struct PAF_ASOT_Config *);
100     Int (*setCheckRateX) (const struct PAF_ASOT_Params *, const struct PAF_ASOT_Patchs *, struct PAF_ASOT_Config *, Int);
101     Int (*streamChainFunction) (const struct PAF_ASOT_Params *, const struct PAF_ASOT_Patchs *, struct PAF_ASOT_Config *, Int, Int, Int);
102     Int (*deviceAllocate) (SIO_Handle *, int, int, int, Ptr);
103     Int (*deviceSelect) (SIO_Handle *, int, int, Ptr);
105     // For RAM_report
106     Void (*headerPrint)();
107     Int  (*allocPrint)(const PAF_ALG_AllocInit *pInit, Int sizeofInit, PAF_IALG_Config *p);
108     Void (*commonPrint)(IALG_MemRec common[], PAF_IALG_Config *p);
109     Void (*bufMemPrint)(Int z, Int size, Int heapId, Int bufType);
110     Void (*memStatusPrint)(
111         CString header, 
112         HeapMem_Handle hInternalHeap, 
113         HeapMem_Handle hInternal1Heap, 
114         HeapMem_Handle hExternalHeap, 
115         HeapMem_Handle hInternal1HeapShm, 
116         HeapMem_Handle hExternalHeapShm, 
117         HeapMem_Handle hExternalNoncachedHeapShm);
118 } PAF_ASOT_Fxns;
120 // Audio Stream Output Task (ASOT) parameters
121 typedef struct PAF_ASOT_Params {
122     const PAF_ASOT_Fxns *fxns;
123     struct {
124         SmInt master;
125         SmInt inputs;
126         SmInt input1;
127         SmInt inputN;
128         SmInt decodes;
129         SmInt decode1;
130         SmInt decodeN;
131         SmInt streams;
132         SmInt stream1; /* unused */
133         SmInt streamN; /* unused */
134         SmInt encodes;
135         SmInt encode1;
136         SmInt encodeN;
137         SmInt outputs;
138         SmInt output1;
139         SmInt outputN;
140     } zone;
141     const SmInt *inputsFromDecodes;
142     const SmInt *outputsFromEncodes;
143     struct {
144         int *pHeapIdIntern;             // INT memory heap ID
145         int *pHeapIdExtern;             // EXT memory heap ID
146         int *pHeapIdInpbuf;             // IB buffer heap ID
147         int *pHeapIdOutbuf;             // OB buffer heap ID
148         int *pHeapIdFrmbuf;             // Frame buffer heap ID
149         int *pHeapIdIntern1;            // INT1 memory heap ID
150         int *pHeapIdInt1Shm;            // INT1 SHared Memory heap ID
151         int *pHeapIdExtShm;             // EXT SHared Memory heap ID
152         int *pHeapIdExtNonCachedShm;    // EXT Non-Cached SHared Memory heap ID
153         int clear; 
154     } heap;
155     struct {
156         const IALG_MemSpace *space;
157     } common;
158     const LgInt *z_rx_bufsiz;
159     const LgInt *z_tx_bufsiz;
160     const SmInt *z_numchan;
161     MdInt framelength;
162     const PAF_AudioFunctions *pAudioFrameFunctions;
163     const struct PAF_ASP_ChainFxns *pChainFxns;
164     const PAF_InpBufStatus *pInpBufStatus;
165     const PAF_DecodeStatus * const *z_pDecodeStatus;
166     const PAF_OutBufStatus *pOutBufStatus;
167     const PAF_EncodeStatus * const *z_pEncodeStatus;
168     const PAF_VolumeStatus *pVolumeStatus;
169     const PAF_ASP_AlgKey *pDecAlgKey;
170     const PAF_ASP_AlgKey *pEncAlgKey;
171     const PAF_ASP_SioMap *pDecSioMap;
172     const SmInt *streamsFromDecodes;
173     const SmInt *streamsFromEncodes;
174     const MdInt maxFramelength;
175     const SmInt *streamOrder;
176     const PAF_ASP_LinkInit * const (*i_inpLinkInit);
177     const PAF_ASP_LinkInit * const (*i_outLinkInit);
178     const PAF_ASP_outNumBufMap *  const (*poutNumBufMap);
179     const PAF_MetadataBufStatus *pMetadataBufStatus;
180     const PAF_AudioFrameBufStatus *pAudioFrameBufStatus;
181 } PAF_ASOT_Params;
183 // Audio Stream Output Task (ASOT) patchs
184 typedef struct PAF_ASOT_Patchs {
185     const PAF_SIO_ParamsN * devout;
186     const PAF_ASP_LinkInit * const (*i_aspLinkInit)[GEARS];
187     const PAF_ASP_LinkInit * const (*i_encLinkInit);
188 } PAF_ASOT_Patchs;
190 typedef struct PAF_AST_OutIO {
191     ioPhyHandle_t        hIoPhy;        // handle to I/O physical layer
192     ioBuffHandle_t       hIoBuff;       // handle to I/O buffer management
193     Ptr                  hMcaspChan;    // handle to McASP LLD channel for output
194     mcaspLLDconfig       *pLldCfg;      // pointer to McASP LLD configuration
195     
196     uint32_t             phyXferSize;
197     uint32_t             stride;
199     void     *mcaspTxBuf1;
200     void     *mcaspTxBuf2;
201     uint32_t  mcaspTxSize1;
202     uint32_t  mcaspTxSize2;
203     int       mcaspTxtwoXfers;
205     int       numPrimeXfers;
207     uint32_t  mcaspXferErr;
209     void  *buff1;                       // pointer to 1st buffer in output memory pool
210     void  *buff2;                       // pointer to 2nd buffer in output memory pool in case of buffer wrap
211     size_t size1;                       // size of 1st buffer in output memory pool
212     size_t size2;                       // size of 2nd buffer in output memory pool
213     
214     uint32_t ioBuffBuf2AllocCnt;        // Output buffer2 allocation (split buffer on buffer wrap) count
215     uint32_t errIoBuffOvrCnt;           // Output IO overflow count
216     uint32_t errIoBuffUndCnt;           // Output IO underflow count
217     float    rateX;                     // Input/Output clock ratio
218     
219     // debugging counters
220     uint32_t num_xfers;
221     GateMP_Handle gateHandle;
223 } PAF_AST_IoOut;
225 // Audio Stream Input Task (ASOT) configuration
226 typedef struct PAF_ASOT_Config {
227     Task_Handle     taskHandle;                 // ASOT task handle
228     uint_least16_t  state;                      // ASOT state
229     ACP_Handle      acp;                        // ASOT ACP handle
230     Int8            cbDrainedFlag[DECODEN_MAX]; // CB drained flags
231     PAF_ASPM_Config *pAspmCfg;                  // ASIT/ASOT shared configuration
232     PAF_AST_Config  *pAstCfg;                   // ASIT/ASOT/ASDT shared configuration
233     PAF_AST_IoOut   *pIoOut;                    // ASOT IO configuration
234     uint32_t        asopPhyTransferStartflag;       // Flag to indicate transfer start in SWI(asopSwiFunc)
235 } PAF_ASOT_Config;
237 // ASOT configuration
238 extern PAF_ASOT_Config gPAF_ASOT_config;
240 #endif /* _ASOP_H_ */