summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: ff50c6a)
raw | patch | inline | side by side (parent: ff50c6a)
author | Frank Livingston <frank-livingston@ti.com> | |
Mon, 20 Jun 2016 20:40:07 +0000 (15:40 -0500) | ||
committer | Frank Livingston <frank-livingston@ti.com> | |
Mon, 20 Jun 2016 20:40:07 +0000 (15:40 -0500) |
108 files changed:
diff --git a/procsdk_audio_x_xx_xx_xx/common/asp0.c b/procsdk_audio_x_xx_xx_xx/common/asp0.c
--- /dev/null
@@ -0,0 +1,502 @@
+
+/*
+* Copyright (C) 2004-2014 Texas Instruments Incorporated - http://www.ti.com/
+* All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions
+* are met:
+*
+* Redistributions of source code must retain the above copyright
+* notice, this list of conditions and the following disclaimer.
+*
+* Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions and the following disclaimer in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* Neither the name of Texas Instruments Incorporated nor the names of
+* its contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+*/
+
+//
+//
+// Performance Audio Framework Series 3 -- Audio Stream Processing Definitions
+//
+//
+//
+
+#include "fwkPort.h"
+
+#include <xdc/std.h>
+
+//#include <mem.h>
+#include <xdc/runtime/Log.h>
+#include <xdc/runtime/Memory.h>
+#include <xdc/runtime/Error.h>
+#include <xdc/runtime/IHeap.h>
+#include <ti/sysbios/heaps/HeapMem.h>
+
+//
+#include "asp0.h"
+//#include <paf_alg.h>
+//#include <pafhjt.h>
+
+#include <acp.h>
+
+#include "logp.h"
+
+//
+// Audio Stream Processing Chain Function - Initialization
+//
+// Name: PAF_ASP_chainInit_
+// Purpose: Initialize an ASP Chain by linking all elements of an
+// initialization array onto it. If this is the first audio
+// stream, perform base initialization of the ASP Chain, but
+// otherwise do not.
+// From: AST Parameter Chain Function -> chainInit
+// Uses: AST Parameter Chain Function -> chainLink
+// States: None.
+// Return: ASP Chain.
+// Trace: None.
+//
+
+PAF_ASP_Chain *
+PAF_ASP_chainInit_ (
+ PAF_ASP_Chain *this,
+ const struct PAF_ASP_ChainFxns *fxns,
+ HeapMem_Handle heap, //int heap,
+ Uns stream,
+ ACP_Handle acp,
+ LOG_Obj *log,
+ const PAF_ASP_LinkInit *pInit,
+ PAF_ASP_Chain *from,
+ IALG_MemRec *common,
+ PAF_IALG_Config *pafConfig)
+{
+ if (stream) {
+ this->fxns = fxns;
+ this->head = NULL;
+ this->stream = stream;
+ this->acp = acp;
+ this->log = log;
+ }
+
+ for ( ; pInit && pInit->thisCode.full; pInit++)
+ if (! this->fxns->chainLink (this, heap, pInit, from, common, pafConfig))
+ return NULL;
+
+ return this;
+}
+
+//
+// Audio Stream Processing Chain Function - Link
+//
+// Name: PAF_ASP_chainLink_
+// Purpose: Link an element onto an ASP Chain:
+// (1) Allocate memory for the link, and
+// (2) For the first gear, create the data for the link, but
+// (3) For other than the first gear, simply link the data already
+// created in the previous gear.
+// From: AST Parameter Chain Function -> chainInit
+// Uses: See code.
+// States: None.
+// Return: Success: ASP Chain.
+// Failure: Null.
+// Trace: Message Log "trace" in Debug Project Configuration reports:
+// * Memory allocation errors.
+// * Data creation errors.
+// * Data linking errors.
+//
+
+
+PAF_ASP_Chain *
+PAF_ASP_chainLink_ (
+ PAF_ASP_Chain *this,
+ HeapMem_Handle heap, //int heap,
+ const PAF_ASP_LinkInit *pInit,
+ PAF_ASP_Chain *from,
+ IALG_MemRec *common,
+ PAF_IALG_Config *pafConfig)
+{
+ PAF_ASP_Link *pLink;
+ Error_Block eb;
+
+ if (! this || ! pInit)
+ return this;
+
+ // Initialize error block
+ Error_init(&eb);
+
+ //if (! (pLink = MEM_alloc (heap, sizeof(PAF_ASP_Link), 4))) {
+ if (!(pLink = Memory_alloc((IHeap_Handle)heap, sizeof(PAF_ASP_Link), 4, &eb))) {
+ if (this->log)
+ LOG_printf(this->log, "AS%d: ASP code 0x%08x alloc failure",
+ this->stream, pInit->thisCode.full);
+ return NULL;
+ }
+
+ if (! from) {
+ if (! this->fxns->linkData(pLink, pInit, this->stream, this->acp,
+ this->log,common, pafConfig)) {
+ if (this->log)
+ LOG_printf(this->log, "AS%d: ASP code 0x%08x link-init failure",
+ this->stream, pInit->thisCode.full);
+ return NULL;
+ }
+ }
+ else {
+ if (! this->fxns->linkCopy(pLink, pInit, from->head)) {
+ if (this->log)
+ LOG_printf(this->log, "AS%d: ASP code 0x%08x link-copy failure",
+ this->stream, pInit->thisCode.full);
+ return NULL;
+ }
+ }
+
+ {
+ PAF_ASP_Link **ppLink;
+ for (ppLink=&this->head; *ppLink; ppLink=&(*ppLink)->next)
+ if ((*ppLink)->code.full == pInit->linkCode.full)
+ break;
+ pLink->next = *ppLink;
+ *ppLink = pLink;
+ }
+
+ return this;
+}
+
+//
+// Audio Stream Processing Chain Function - Find
+//
+// Name: PAF_ASP_chainFind_
+// Purpose: Find an element in an ASP Chain.
+// From: AST Parameter Chain Function -> chainFind
+// Uses: None.
+// States: None.
+// Return: Success (found): Pointer to element.
+// Failure (not found): Null.
+// Trace: None.
+//
+
+PAF_ASP_Link *
+PAF_ASP_chainFind_ (
+ PAF_ASP_Chain *this,
+ PAF_ASP_AlphaCode code)
+{
+ PAF_ASP_Link *that = this->head;
+
+ for ( ; that; that = that->next) {
+ if (that->code.full == code.full)
+ break;
+ }
+
+ return that;
+}
+
+//
+// Audio Stream Processing Chain Function - Reset
+//
+// Name: PAF_ASP_chainReset_
+// Purpose: Reset an ASP Chain by invoking for each element:
+// (1) The algorithm activation function (NOT PERFORMED), and
+// (2) The algorithm reset function.
+// From: AST Parameter Chain Function -> chainReset
+// Uses: See code.
+// States: None.
+// Return: 0 on success.
+// Error number reported by ASP Reset Function on failure.
+// Trace: Message Log "trace" in Debug Project Configuration reports:
+// * ASP Reset Function errors.
+//
+
+Int
+PAF_ASP_chainReset_ (PAF_ASP_Chain *this, PAF_AudioFrame *pAudioFrame)
+{
+ Int errno;
+
+ PAF_ASP_Link *pLink;
+
+ for (pLink=this->head; pLink; pLink=pLink->next) {
+ ASP_Handle alg = pLink->alg;
+#if 0
+ /* ASP Algorithms are self-activating and not framework-activated */
+ if (((ALG_Handle )alg)->fxns->algActivate)
+ ((ALG_Handle )alg)->fxns->algActivate (((ALG_Handle )alg));
+#endif
+ if (alg->fxns->reset && (errno = alg->fxns->reset(alg, pAudioFrame))) {
+ if (this->log) {
+ LOG_printf(this->log, "AS%d: ASP code 0x%08x reset error",
+ this->stream, pLink->code.full);
+ LOG_printf(this->log, "AS%d: errno = 0x%08x",
+ this->stream, errno);
+ }
+ return errno;
+ }
+ }
+
+ return 0;
+}
+
+//
+// Audio Stream Processing Chain Function - Apply
+//
+// Name: PAF_ASP_chainApply_
+// Purpose: Apply an ASP Chain by invoking for each:
+// (1) The algorithm apply function.
+// From: AST Parameter Chain Function -> chainApply
+// Uses: See code.
+// States: None.
+// Return: 0 on success.
+// Error number reported by ASP Apply Function on failure.
+// Trace: Message Log "trace" in Debug Project Configuration reports:
+// * ASP Apply Function errors.
+//
+
+Int
+PAF_ASP_chainApply_ (PAF_ASP_Chain *this, PAF_AudioFrame *pAudioFrame)
+{
+ Int errno;
+ int i = 0;
+
+ PAF_ASP_Link *pLink;
+
+ for (pLink=this->head; pLink; pLink=pLink->next)
+ {
+ ASP_Handle alg = pLink->alg;
+
+ i++;
+ if (this->log)
+ {
+ LOG_printf(&trace, "PAF_ASP_chainApply_: AS_%d. link %d. alg: 0x%x.",
+ this->stream, i, alg);
+ }
+ Log_info3("PAF_ASP_chainApply_: AS_%d. link %d. alg: 0x%x.", this->stream, i, (IArg)alg);
+
+ if (alg->fxns->apply && (errno = alg->fxns->apply(alg, pAudioFrame)))
+ {
+ if (this->log)
+ {
+ LOG_printf(this->log, "AS%d: ASP code 0x%08x apply error 0x%x.",
+ this->stream, pLink->code.full, errno);
+ LOG_printf(&trace, "AS%d: ASP code 0x%08x apply error 0x%x.",
+ this->stream, pLink->code.full, errno);
+ }
+ return errno;
+ }
+ }
+
+ return 0;
+}
+
+//
+// Audio Stream Processing Chain Function - Final
+//
+// Name: PAF_ASP_chainFinal_
+// Purpose: Finalize an ASP Chain by invoking for each:
+// (1) The algorithm final function (NOT PERFORMED), and
+// (2) The algorithm deactivation function.
+// From: AST Parameter Chain Function -> chainFinal
+// Uses: See code.
+// States: None.
+// Return: 0 on success.
+// Error number reported by ASP Final Function on failure.
+// Trace: Message Log "trace" in Debug Project Configuration reports:
+// * ASP Final Function errors.
+//
+// Note: In Audio Framework #2, PAF_ASP_FINAL is not defined and there
+// are no Final Functions supplied with ASP Algorithms.
+
+Int
+PAF_ASP_chainFinal_ (PAF_ASP_Chain *this, PAF_AudioFrame *pAudioFrame)
+{
+#ifdef PAF_ASP_FINAL
+ Int errno;
+#endif /* PAF_ASP_FINAL */
+
+ PAF_ASP_Link *pLink;
+
+ for (pLink=this->head; pLink; pLink=pLink->next) {
+ ASP_Handle alg = pLink->alg;
+#ifdef PAF_ASP_FINAL
+ if (alg->fxns->final && (errno = alg->fxns->final(alg, pAudioFrame))) {
+ if (this->log) {
+ LOG_printf(this->log, "AS%d: ASP code 0x%08x final error",
+ this->stream, pLink->code.full);
+ LOG_printf(this->log, "AS%d: errno = 0x%08x",
+ this->stream, errno);
+ }
+ return errno;
+ }
+#endif /* PAF_ASP_FINAL */
+#if 1
+ /* ASP Algorithms are self-deactivating and framework-deactivated */
+ if (((ALG_Handle )alg)->fxns->algDeactivate)
+ ((ALG_Handle )alg)->fxns->algDeactivate (((ALG_Handle )alg));
+#endif
+ }
+
+ return 0;
+}
+
+//
+// Audio Stream Processing Chain Function - Link Data
+//
+// Name: PAF_ASP_linkData
+// Purpose: Create the data for a chain link:
+// (1) Perform beta unit relocation,
+// (2) Instantiate an algorithm, and
+// (3) Attach the beta unit(s) of an algorithm to an ACP Algorithm
+// instance.
+// From: AST Parameter Chain Function -> linkData
+// Uses: See code.
+// States: None.
+// Return: Null pointer on failure.
+// Pointer to the chain link on success.
+// Trace: Message Log "trace" in Debug Project Configuration reports:
+// * Algorithm instance creation failure message.
+// * Beta Unit initialization success message.
+//
+
+PAF_ASP_Link *
+PAF_ASP_linkData (
+ PAF_ASP_Link *this,
+ const PAF_ASP_LinkInit *pInit,
+ Uns stream,
+ ACP_Handle acp,
+ LOG_Obj *log,
+ IALG_MemRec *common,
+ PAF_IALG_Config *pafConfig)
+{
+ IALG_Status *pStatus;
+
+ ALG_Handle alg;
+
+ Int beta = pInit->thisCode.part.beta;
+
+ if (log)
+ LOG_printf(log, "AS%d: beta 0x%x initialization begins.", stream, beta);
+ {
+ ALG_Handle acpAlg = (ALG_Handle) acp;
+ Int betaPrimeBase;
+ Int betaPrimeOffset;
+ acpAlg->fxns->algControl (acpAlg, ACP_GETBETAPRIMEBASE,
+ (IALG_Status *) &betaPrimeBase);
+ acpAlg->fxns->algControl (acpAlg, ACP_GETBETAPRIMEOFFSET,
+ (IALG_Status *) &betaPrimeOffset);
+ if (beta >= betaPrimeBase)
+ beta += (stream - 1) * betaPrimeOffset;
+ }
+
+ this->next = NULL;
+ this->code = pInit->thisCode;
+
+ if (pInit->ialg_fxns) {
+
+ if (pInit->init_func)
+ (*pInit->init_func)();
+
+ if (! (alg = PAF_ALG_create(pInit->ialg_fxns,NULL,(IALG_Params *)pInit->ialg_prms,
+ common, pafConfig))) {
+ if (log) {
+ LOG_printf(log,
+ "AS%d: beta 0x%x algorithm instance creation failed",
+ stream, beta);
+ }
+ return NULL;
+ }
+ }
+ else
+ return NULL;
+
+ this->alg = (ASP_Handle )alg;
+
+ if (alg->fxns->algControl) {
+ if (! alg->fxns->algControl (alg, ACP_GETSTATUSADDRESS1, (IALG_Status *)&pStatus))
+ acp->fxns->attach (acp, pInit->thisCode.part.series, beta, pStatus);
+ if (! alg->fxns->algControl (alg, ACP_GETSTATUSADDRESS2, (IALG_Status *)&pStatus))
+ acp->fxns->attach (acp, pInit->thisCode.part.series, beta+1, pStatus);
+ }
+
+ if (log)
+ LOG_printf(log, "AS%d: beta 0x%x processing initialized", stream, beta);
+
+ return this;
+}
+
+//
+// Audio Stream Processing Chain Function - Link Copy
+//
+// Name: PAF_ASP_linkCopy
+// Purpose: Copy the data for a chain link:
+// (1) Find an element on a chain, and
+// (2) Copy the reference to the data of the link.
+// From: AST Parameter Chain Function -> linkCopy
+// Uses: See code.
+// States: None.
+// Return: Null pointer on failure.
+// Pointer to the chain link on success.
+// Trace: None.
+//
+
+PAF_ASP_Link *
+PAF_ASP_linkCopy (
+ PAF_ASP_Link *this,
+ const PAF_ASP_LinkInit *pInit,
+ PAF_ASP_Link *from)
+{
+ for ( ; from; from = from->next) {
+ if (from->code.full == pInit->thisCode.full)
+ break;
+ }
+
+ if (! from)
+ return NULL;
+
+ this->next = NULL;
+ this->code = pInit->thisCode;
+ this->alg = from->alg;
+
+ return this;
+}
+
+//
+// Audio Stream Processing Chain Functions
+//
+// Name: PAF_ASP_chainFxns
+// Purpose: Collect the chain functions that embody the implementation
+// of Audio Framework Number 2 for use as a jump table.
+// From: PAF_AST_Params
+// Uses: See contents.
+// States: N.A.
+// Return: N.A.
+// Trace: None.
+//
+
+const struct PAF_ASP_ChainFxns PAF_ASP_chainFxns =
+{
+ PAF_ASP_chainInit_,
+ PAF_ASP_chainLink_,
+ PAF_ASP_chainFind_,
+ {
+ PAF_ASP_chainReset_,
+ PAF_ASP_chainApply_,
+ PAF_ASP_chainFinal_,
+ },
+ PAF_ASP_linkData,
+ PAF_ASP_linkCopy,
+};
diff --git a/procsdk_audio_x_xx_xx_xx/common/audioStreamProc_common.c b/procsdk_audio_x_xx_xx_xx/common/audioStreamProc_common.c
--- /dev/null
@@ -0,0 +1,21 @@
+/*
+ * ======== audioStreamProc_common.c ========
+ */
+
+#include <xdc/std.h>
+
+#include "as1-f2-config.h"
+
+// Task data
+#ifndef _TMS320C6X
+PAF_AST_Config gPAF_AST_config __attribute__ ((section(".globalSectionPafAstConfig"))); /* Global configuration */
+PAF_AST_Config *pC __attribute__ ((section(".globalSectionPafAstConfig"))); /* Global configuration pointer */
+
+#else
+
+#pragma DATA_SECTION(gPAF_AST_config, ".globalSectionPafAstConfig")
+#pragma DATA_SECTION(pC, ".globalSectionPafAstConfig")
+PAF_AST_Config gPAF_AST_config; /* Global configuration */
+far PAF_AST_Config *pC; /* Global configuration pointer */
+
+#endif
diff --git a/procsdk_audio_x_xx_xx_xx/common/audioStreamProc_common.h b/procsdk_audio_x_xx_xx_xx/common/audioStreamProc_common.h
--- /dev/null
@@ -0,0 +1,187 @@
+/*
+ * ======== audioStreamProc_common.h ========
+ */
+
+#ifndef _ASP_COMMON_H_
+#define _ASP_COMMON_H_
+
+#include <xdc/std.h>
+#include "as1-f2-config.h"
+#include "paf_heapMgr.h"
+
+// .............................................................................
+
+/* ---------------------------------------------------------------- */
+/* For historical reasons, macro definitions (#define ...) are used */
+/* to hide parameter references (pP->...) throughout this file, but */
+/* only for select quantities and not for all parameter elements. */
+/* */
+/* Parameter macro definitions start here. */
+/* ---------------------------------------------------------------- */
+
+//
+// Audio Topology (Zone) Definitions
+//
+// The ZONE, a historical term here, is a letter identifying the Audio
+// Topology with a single letter or "*" for a variable quantization of
+// same.
+//
+// The Zone Elements listed here indicate the cardinality of the corre-
+// sponding element:
+//
+// INPUTS Number of inputs.
+// DECODES Number of decodes.
+// STREAMS Number of streams.
+// ENCODES Number of encodes.
+// OUTPUTS Number of outputs.
+//
+// The Zone Element Counts listed here indicate the first (1) and after-
+// last (N) values suitable for use in a loop:
+//
+// INPUTS[1N] for inputs.
+// DECODES[1N] for decodes.
+// STREAMS[1N] for streams.
+// ENCODES[1N] for encodes.
+// OUTPUTS[1N] for outputs.
+//
+// The Zone Element Count Limits listed here establish array sizes:
+//
+// DECODEN_MAX for decodes.
+// STREAMN_MAX for streams.
+// ENCODEN_MAX for encodes.
+//
+// The Zone Master is important in multi-input frameworks:
+//
+// MASTER In a uni-input zone, the count of the input.
+// In a multi-input zone, the count of the primary which controls
+// the secondary or secondaries.
+//
+
+#ifndef ZONE
+
+#define ZONE "*" /* 19.53 kB of 38.80 kB FW */
+//
+//#define MASTER pP->zone.master
+//#define INPUTS pP->zone.inputs
+//#define DECODES pP->zone.decodes
+#define STREAMS pP->zone.streams
+//#define ENCODES pP->zone.encodes
+//#define OUTPUTS pP->zone.outputs
+
+#endif /* ZONE */
+
+#ifndef ZONE
+
+#define ZONE "I" /* ~2.5 kB less than above */
+
+#define MASTER 0
+#define INPUTS 1
+#define DECODES 1
+#define STREAMS 1
+#define ENCODES 1
+#define OUTPUTS 1
+
+#endif /* ZONE */
+
+#define INPUT1 pP->zone.input1
+#define INPUTN pP->zone.inputN
+//
+#define DECODE1 pP->zone.decode1
+#define DECODEN pP->zone.decodeN
+//#define DECODEN_MAX 3
+//
+#define STREAM1 0
+#define STREAMN STREAMS
+//#define STREAMN_MAX 5
+//
+#define ENCODE1 pP->zone.encode1
+#define ENCODEN pP->zone.encodeN
+//#define ENCODEN_MAX 3
+//
+#define OUTPUT1 pP->zone.output1
+#define OUTPUTN pP->zone.outputN
+
+//
+// Audio Data Representation Definitions
+//
+
+/* audio frame "width" in channels */
+#define numchan pP->z_numchan
+
+/* audio frame "length" in samples */
+#define FRAMELENGTH pP->framelength
+
+#define PA_MODULO 8 // also defined independently in ARC2 code, and may be hard coded other places.
+
+
+// .............................................................................
+
+//
+// Heap & Memory Allocation Definitions
+//
+#define HEAP_ID_INTERNAL *pP->heap.pHeapIdIntern //*pP->heap.pIntern
+#define HEAP_ID_INTERNAL1 *pP->heap.pHeapIdIntern1 //*pP->heap.pIntern1
+#define HEAP_ID_EXTERNAL *pP->heap.pHeapIdExtern //*pP->heap.pExtern
+#define HEAP_ID_INTERNAL1_SHM gPafHeapIdInt1Shm
+#define HEAP_INTERNAL (HeapMem_Handle)pafHeapMgr_readHeapHandle(HEAP_ID_INTERNAL)
+#define HEAP_INTERNAL1 (HeapMem_Handle)pafHeapMgr_readHeapHandle(HEAP_ID_INTERNAL1)
+#define HEAP_EXTERNAL (HeapMem_Handle)pafHeapMgr_readHeapHandle(HEAP_ID_EXTERNAL)
+#define HEAP_INTERNAL1_SHM (HeapMem_Handle)pafHeapMgr_readHeapHandle(HEAP_ID_INTERNAL1_SHM)
+#define HEAP_CLEAR pP->heap.clear
+
+#define HEAP_ID_INPBUF *pP->heap.pHeapIdInpbuf //*pP->heap.pInpbuf
+#define HEAP_ID_OUTBUF *pP->heap.pHeapIdOutbuf //*pP->heap.pOutbuf
+#define HEAP_ID_FRMBUF *pP->heap.pHeapIdFrmbuf //*pP->heap.pFrmbuf
+#define HEAP_INPBUF (HeapMem_Handle)pafHeapMgr_readHeapHandle(HEAP_ID_INPBUF)
+#define HEAP_OUTBUF (HeapMem_Handle)pafHeapMgr_readHeapHandle(HEAP_ID_OUTBUF)
+#define HEAP_FRMBUF (HeapMem_Handle)pafHeapMgr_readHeapHandle(HEAP_ID_FRMBUF)
+
+#define HEAP_ID_MDBUF *pP->pMetadataBufStatus->pHeadIdSpace
+#define HEAP_MDBUF (HeapMem_Handle)pafHeapMgr_readHeapHandle(HEAP_ID_MDBUF)
+
+#define COMMONSPACE pP->common.space
+
+// .............................................................................
+
+// -----------------------------------------------------------------------------
+// Debugging Trace Control
+//#define TRACE_TERSE(a) LOG_printf a
+#define TRACE_TERSE0(a) Log_info0(a)
+#define TRACE_TERSE1(a,b) Log_info1(a,b)
+#define TRACE_TERSE2(a,b,c) Log_info2(a,b,c)
+#define TRACE_TERSE3(a,b,c,d) Log_info3(a,b,c,d)
+#define TRACE_TERSE4(a,b,c,d,e) Log_info4(a,b,c,d,e)
+
+//#define TRACE_GEN(a) LOG_printf a
+#define TRACE_GEN0(a) Log_info0(a)
+#define TRACE_GEN1(a,b) Log_info1(a,b)
+#define TRACE_GEN2(a,b,c) Log_info2(a,b,c)
+#define TRACE_GEN3(a,b,c,d) Log_info3(a,b,c,d)
+#define TRACE_GEN4(a,b,c,d,e) Log_info4(a,b,c,d,e)
+
+//#define TRACE_VERBOSE(a) LOG_printf a
+#define TRACE_VERBOSE0(a) Log_info0(a)
+#define TRACE_VERBOSE1(a,b) Log_info1(a,b)
+#define TRACE_VERBOSE2(a,b,c) Log_info2(a,b,c)
+#define TRACE_VERBOSE3(a,b,c,d) Log_info3(a,b,c,d)
+#define TRACE_VERBOSE4(a,b,c,d,e) Log_info4(a,b,c,d,e)
+
+#define TRACE_MSG0(a) Log_info0(a)
+#define TRACE_MSG1(a,b) Log_info1(a,b)
+#define TRACE_MSG2(a,b,c) Log_info2(a,b,c)
+#define TRACE_MSG3(a,b,c,d) Log_info3(a,b,c,d)
+#define TRACE_MSG4(a,b,c,d,e) Log_info4(a,b,c,d,e)
+
+
+#define DEC_Handle PCM_Handle /* works for all: SNG, PCM, AC3, DTS, AAC */
+
+
+/* Global configuration */
+extern PAF_AST_Config gPAF_AST_config;
+extern far PAF_AST_Config *pC;
+
+// Temporary
+//extern Bool gAspInitDone;
+
+
+#endif /* _ASP_COMMON_H_ */
diff --git a/procsdk_audio_x_xx_xx_xx/common/common.h b/procsdk_audio_x_xx_xx_xx/common/common.h
--- /dev/null
@@ -0,0 +1,18 @@
+#ifndef _COMMON_H_
+#define _COMMON_H_
+
+#ifdef _TMS320C6X
+// This works to set a breakpoint
+#define SW_BREAKPOINT asm( " SWBP 0" );
+/* Software Breakpoint to Code Composer */
+// SW_BREAKPOINT;
+#else
+#include <ti/sysbios/hal/Hwi.h> // full halt
+#include <ti/sysbios/knl/Swi.h> // full halt
+#define SW_BREAKPOINT \
+ Hwi_disable(); \
+ Swi_disable(); \
+ while(1);
+#endif
+
+#endif /* _COMMON_H_ */
diff --git a/procsdk_audio_x_xx_xx_xx/common/dbgCapAf.c b/procsdk_audio_x_xx_xx_xx/common/dbgCapAf.c
--- /dev/null
@@ -0,0 +1,57 @@
+#include <xdc/std.h>
+
+#include "dbgCapAf.h"
+
+#ifdef _TMS320C6X
+#pragma DATA_SECTION(gCapAfBuf, ".gCapAfBuf");
+PAF_AudioData gCapAfBuf[CAP_AF_MAX_NUM_SAMP];
+#else
+PAF_AudioData gCapAfBuf[CAP_AF_MAX_NUM_SAMP] __attribute__ ((section(".gCapAfBuf")));
+//PAF_AudioData gCapAfBuf[CAP_AF_MAX_NUM_SAMP] __attribute__ ((section(".noinit")));
+#endif
+Int32 gCapAfBufIdx=0;
+Int32 gCapAfBufWrapCnt=0;
+
+// Reset audio frame capture buffer
+Int capAfReset(Void)
+{
+ gCapAfBufIdx = 0;
+ gCapAfBufWrapCnt = 0;
+
+ return 0;
+}
+
+// Write audio frame to capture buffer
+Int capAfWrite(
+ PAF_AudioFrame *pAf, // audio frame
+ Int8 chNum // channel number to capture
+)
+{
+ Int16 nSamp;
+ PAF_AudioData *pSamp;
+ Int16 i;
+
+ if (chNum > (pAf->data.nChannels-1))
+ {
+ return CAP_AF_INV_CHNUM;
+ }
+
+ nSamp = pAf->data.nSamples;
+ pSamp = pAf->data.sample[chNum];
+
+ if ((CAP_AF_MAX_NUM_SAMP - gCapAfBufIdx) < nSamp)
+ {
+ //return;
+ gCapAfBufIdx = 0;
+ gCapAfBufWrapCnt++;
+ }
+
+ for (i=0; i<nSamp; i++)
+ {
+ gCapAfBuf[gCapAfBufIdx] = *pSamp;
+ pSamp++;
+ gCapAfBufIdx++;
+ }
+
+ return CAP_AF_SOK;
+}
diff --git a/procsdk_audio_x_xx_xx_xx/common/dbgCapAf.h b/procsdk_audio_x_xx_xx_xx/common/dbgCapAf.h
--- /dev/null
@@ -0,0 +1,28 @@
+#ifndef _DBG_CAP_AFB_H_
+#define _DBG_CAP_AFB_H_
+
+#include <xdc/std.h>
+
+#include "paftyp.h"
+
+#define CAP_AF_SOK ( 0 )
+#define CAP_AF_INV_CHNUM ( -1 )
+
+// buffer capture parameters
+#define CAP_AF_MAX_NUM_FRAME ( 5625 ) //( 100 )
+#define CAP_AF_MAX_SAMP_PER_FRAME ( 256 )
+#define CAP_AF_MAX_NUM_SAMP ( CAP_AF_MAX_NUM_FRAME * CAP_AF_MAX_SAMP_PER_FRAME )
+
+extern PAF_AudioData gCapAfBuf[CAP_AF_MAX_NUM_SAMP];
+extern Int32 gCapAfBufIdx;
+
+// Reset audio frame capture buffer
+Int capAfReset(Void);
+
+// Write audio frame to capture buffer
+Int capAfWrite(
+ PAF_AudioFrame *pAf, // audio frame
+ Int8 chNum // channel number to capture
+);
+
+#endif /* _DBG_CAP_AFB_H_ */
diff --git a/procsdk_audio_x_xx_xx_xx/common/dbgDib.c b/procsdk_audio_x_xx_xx_xx/common/dbgDib.c
--- /dev/null
@@ -0,0 +1,204 @@
+#include <string.h> // for memcpy
+#include <xdc/std.h>
+#include <xdc/runtime/Log.h>
+
+
+#include "common.h"
+
+#ifndef _TMS320C6X
+#include "c67x_cintrins.h"
+#endif
+
+#include "inpbuf.h"
+#include "dbgDib.h"
+
+// sinusoid generator parameters
+/* Performs floating-point to 24-bit fixed point conversion.
+Resulting fixed-point value is left-justified in 32-bit word. */
+#define F2INT_SCALE (float)0x7FFFFF
+#define F2INT_ROUND(x) _spint(x)
+#define F2INT(x) (((Int32)F2INT_ROUND(F2INT_SCALE * x) << 0x8) & 0xFFFFFF00)
+
+#define TWO_PI (6.283185307179586476925286766559L)
+#define FS_48KHZ (48000.0)
+#define TWOPIOVERSRATE ( TWO_PI / FS_48KHZ )
+
+#define SINP_MAX_CHS ( 8 ) // sin probe maximum number of channels
+Int8 gSinPNumChs = SINP_MAX_CHS; // sin probe number of channels
+Int8 gSinPChIdx = 0; // sin probe channel index
+// sinusoid data generated on these DIB channels
+Int8 gSinPCh[SINP_MAX_CHS] = {0,1,2,3,4,5,6,7};
+
+#define SINP_MAX_GEN ( 2 ) // sin probe maximum number of generators
+// Configurable from CCS
+Int8 gSinPNumGen = SINP_MAX_GEN;
+float gSineProbeAmp[SINP_MAX_GEN] = {0.0625, 0.125}; // sinusoid amplitudes
+float gSineProbeFreq[SINP_MAX_GEN] = {440.0, 1004.0}; // sinusoid frequencies (Hz)
+
+static double gSineProbeArg[SINP_MAX_GEN] = {0.0, 0.0}; // sinusoid function arguments
+
+#ifdef CAP_IB_PCM
+// IB capture (PCM) buffer
+#ifdef _TMS320C6X
+#pragma DATA_SECTION(gCapIbPcmBuf, ".gCapIbPcmBuf");
+Int32 gCapIbPcmBuf[CAP_IB_PCM_MAX_NUM_CH][CAP_IB_PCM_MAX_NUM_SAMP];
+#else
+Int32 gCapIbPcmBuf[CAP_IB_PCM_MAX_NUM_CH][CAP_IB_PCM_MAX_NUM_SAMP] __attribute__ ((section(".gCapIbPcmBuf")));
+#endif
+Int32 gCapIbPcmBufIdx=0;
+Int32 gCapIbPcmBufWrapCnt=0;
+static UInt32 capIbPcmStopCnt=5000;
+#endif // CAP_IB_PCM
+
+#ifdef CAP_IP
+// IB capture buffer
+#ifdef _TMS320C6X
+#pragma DATA_SECTION(gCapIbBuf, ".gCapIbBuf");
+Int8 gCapIbBuf[2][CAP_IB_BUF_SZ];
+#else
+Int8 gCapIbBuf[2][CAP_IB_BUF_SZ] __attribute__ ((section(".gCapIbBuf")));
+//Int32 gCapIbBuf[CAP_IB_BUF_SZ] __attribute__ ((section(".noinit")));
+#endif
+Int32 gCapIbBufIdx[2]={0,0};
+Int32 gCapIbBufWrapCnt[2]={0,0};
+Int8 gCapIbBufPingPongSel=1;
+Int32 gNumDiffFrame[2]={0,0};
+
+#endif // CAP_IP
+
+// Generate sinusoids in IB buffer
+Void genSinIb(
+ PAF_InpBufConfig *pInpBufConfig
+)
+{
+ Int8 numCh;
+ Int16 numSamp;
+ Int8 genIdx;
+ double phaseInc, arg, amp;
+ Int32 *pCh;
+ Int16 i;
+
+ numCh = pInpBufConfig->stride; // get number of channels
+ numSamp = pInpBufConfig->frameLength / numCh; // get number of samples to generate
+
+ for (genIdx=0; genIdx<gSinPNumGen; genIdx++)
+ {
+ // compute generator phase increment
+ phaseInc = (double)gSineProbeFreq[genIdx] * TWOPIOVERSRATE;
+
+ arg = gSineProbeArg[genIdx]; // get generator arg
+ amp = gSineProbeAmp[genIdx]; // get generator amplitude
+
+ // generate sinusoid on selected channel
+ pCh = &pInpBufConfig->pntr.pLgInt[gSinPCh[gSinPChIdx]];
+ for (i=0; i<numSamp; i++)
+ {
+ *pCh = F2INT(amp * sin(arg));
+ arg += phaseInc;
+ pCh += numCh; // skipped interleaved channels
+ }
+
+ gSineProbeArg[genIdx] = arg; // save generator arg
+
+ // update sin probe channel index
+ gSinPChIdx++;
+ if (gSinPChIdx >= gSinPNumChs)
+ {
+ gSinPChIdx = 0;
+ }
+ }
+}
+
+#ifdef CAP_IB_PCM
+// Capture data in IB buffer to memory
+Void capIbPcm(
+ PAF_InpBufConfig *pInpBufConfig
+)
+{
+ Int8 numCh;
+ Int16 numSamp;
+ Int8 sampSz;
+ Int32 samp;
+ Int8 *pCh;
+ Int16 i, j, k;
+ Int32 *pCapBuf;
+
+ if (--capIbPcmStopCnt == 0)
+ {
+ SW_BREAKPOINT;
+ }
+
+ numCh = pInpBufConfig->stride; // get number of channels
+ numSamp = pInpBufConfig->frameLength / numCh; // get number of samples to capture
+ sampSz = pInpBufConfig->sizeofElement; // get sample size (bytes)
+
+ if ((CAP_IB_PCM_MAX_NUM_SAMP - gCapIbPcmBufIdx) < numSamp)
+ {
+ //return;
+ gCapIbPcmBufIdx = 0;
+ gCapIbPcmBufWrapCnt++;
+ }
+
+ for (i=0; i<numCh; i++)
+ {
+ pCapBuf = &gCapIbPcmBuf[i][gCapIbPcmBufIdx];
+ pCh = &pInpBufConfig->pntr.pSmInt[i*sampSz];
+ for (j=0; j<numSamp; j++)
+ {
+ samp = (Int32)(*(pCh+sampSz-1));
+ for (k=sampSz-2; k>=0; k--)
+ {
+ samp <<= 8;
+ samp |= (UInt8)(*(pCh+k));
+ }
+ samp <<= 32-8*sampSz;
+
+ *pCapBuf = samp;
+ pCapBuf++;
+ pCh += numCh * sampSz;
+ }
+ }
+ gCapIbPcmBufIdx += numSamp;
+}
+#endif // CAP_IB_PCM
+
+#ifdef CAP_IP
+// Reset IB capture buffer
+Int capIbReset(Void)
+{
+ gCapIbBufPingPongSel ^= 0x1;
+ gCapIbBufIdx[gCapIbBufPingPongSel] = 0;
+ gCapIbBufWrapCnt[gCapIbBufPingPongSel] = 0;
+ gNumDiffFrame[gCapIbBufPingPongSel] = 0;
+
+ return 0;
+}
+
+// Capture data in IB buffer to memory
+Void capIb(
+ PAF_InpBufConfig *pInpBufConfig
+)
+{
+ UInt32 nBytes;
+
+ nBytes = pInpBufConfig->frameLength * pInpBufConfig->sizeofElement;
+
+ // FL: DDP debug
+ if (nBytes != 24576)
+ {
+ Log_info1("capIb(): nBytes=%d", nBytes);
+ gNumDiffFrame[gCapIbBufPingPongSel]++;
+ }
+
+ if ((CAP_IB_BUF_SZ - gCapIbBufIdx[gCapIbBufPingPongSel]) < nBytes)
+ {
+ //return; // fixed buffer
+ gCapIbBufIdx[gCapIbBufPingPongSel] = 0;
+ gCapIbBufWrapCnt[gCapIbBufPingPongSel]++;
+ }
+
+ memcpy(&gCapIbBuf[gCapIbBufPingPongSel][gCapIbBufIdx[gCapIbBufPingPongSel]], pInpBufConfig->pntr.pSmInt, nBytes);
+ gCapIbBufIdx[gCapIbBufPingPongSel] += nBytes;
+}
+
+#endif // CAP_IP
diff --git a/procsdk_audio_x_xx_xx_xx/common/dbgDib.h b/procsdk_audio_x_xx_xx_xx/common/dbgDib.h
--- /dev/null
@@ -0,0 +1,50 @@
+#include <math.h> // sin
+#include <xdc/std.h>
+
+#include "inpbuf.h"
+
+//#define CAP_IB_PCM
+#ifdef CAP_IB_PCM
+// IB capture (PCM) buffer parameters
+#define CAP_IB_PCM_MAX_NUM_CH ( 8 )
+#define CAP_IB_PCM_MAX_NUM_FRAME ( 100 )
+#define CAP_IB_PCM_MAX_SAMP_PER_FRAME ( 256 )
+#define CAP_IB_PCM_MAX_NUM_SAMP ( CAP_IB_PCM_MAX_NUM_FRAME * CAP_IB_PCM_MAX_SAMP_PER_FRAME )
+
+// IB capture (PCM) buffer
+extern Int32 gCapIpPcmBuf[CAP_IB_PCM_MAX_NUM_CH][CAP_IB_PCM_MAX_NUM_SAMP];
+extern Int32 gCapIbPcmBufIdx;
+extern Int32 gCapIbPcmBufWrapCnt;
+#endif // CAP_IB_PCM
+
+#define CAP_IP
+#ifdef CAP_IP
+// IB capture buffer parameters
+#define CAP_IB_MAX_NUM_FRAME ( 938 )
+#define CAP_IB_MAX_BYTES_PER_FRAME ( 24576 )
+#define CAP_IB_BUF_SZ ( CAP_IB_MAX_NUM_FRAME * CAP_IB_MAX_BYTES_PER_FRAME )
+
+// IB capture buffer
+extern Int8 gCapIpBuf[2][CAP_IB_BUF_SZ];
+extern Int32 gCapIbBufIdx[2];
+extern Int32 gCapIbBufWrapCnt[2];
+extern Int8 gCapIbBufPingPongSel;
+#endif // CAP_IP
+
+// Generate sinusoids in IB buffer
+Void genSinIb(
+ PAF_InpBufConfig *pInpBufConfig
+);
+
+// Capture data in IB buffer (PCM) to memory
+Void capIbPcm(
+ PAF_InpBufConfig *pInpBufConfig
+);
+
+// Reset IB capture buffer
+Int capIbReset(Void);
+
+// Capture data in IB buffer to memory
+Void capIb(
+ PAF_InpBufConfig *pInpBufConfig
+);
diff --git a/procsdk_audio_x_xx_xx_xx/common/drvPort.h b/procsdk_audio_x_xx_xx_xx/common/drvPort.h
--- /dev/null
@@ -0,0 +1,24 @@
+/*
+ * ======== drvPort.h ========
+ */
+
+
+#ifndef _DRV_PORT_H_
+#define _DRV_PORT_H_
+
+#include <xdc/std.h>
+#include <xdc/runtime/LoggerBuf.h>
+#include <ti/xdais/xdas.h>
+
+// ------------------------------------- //
+// Below is temporary for driver port //
+// ------------------------------------- //
+// dap.h -- extracted defs
+struct DAP_Params_
+{
+ XDAS_Int32 pinMask;
+};
+// dap_csl_mcasp.h -- extracted defs
+#define MCASP_DEV1 ( 1 )
+
+#endif /* _DRV_PORT_H_ */
diff --git a/procsdk_audio_x_xx_xx_xx/common/fwkPort.c b/procsdk_audio_x_xx_xx_xx/common/fwkPort.c
--- /dev/null
@@ -0,0 +1,9 @@
+#include <xdc/std.h>
+
+#include "fwkPort.h"
+
+// FL: Temporary, 1st parameter for audioStream1Task().
+// FL: Need to remove this since SYS/BIOS 6.21 doesn't allow more than 2 parameters for a task.
+Int gBetaPrimeValue=0;
+
+far LoggerBuf_Struct trace;
diff --git a/procsdk_audio_x_xx_xx_xx/common/fwkPort.h b/procsdk_audio_x_xx_xx_xx/common/fwkPort.h
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+ * ======== fwkPort.h ========
+ */
+
+
+#ifndef _FWK_PORT_H_
+#define _FWK_PORT_H_
+
+#include <xdc/std.h>
+#include <xdc/runtime/LoggerBuf.h>
+#include <ti/xdais/xdas.h>
+
+// ------------------------------------- //
+// Below is temporary for framework port //
+// ------------------------------------- //
+// SYS/BIOS 6.45 LOG APIs are different than BIOS 6.21
+// log.h -- replacements
+#define LOG_Obj LoggerBuf_Struct
+#define LOG_disable(a)
+#define LOG_printf(...)
+
+// Not defined in SYS/BIOS 6.45
+// sys.h -- extracted defs
+#define SYS_OK 0 /* no error */ // packages/ti/bios/include/sys.h
+#define SYS_EALLOC 1 /* memory allocation error */ // packages/ti/bios/include/sys.h
+
+// 1st parameter for audioStream1Task().
+// SYS/BIOS 6.45 doesn't allow more than 2 parameters for a task.
+extern Int gBetaPrimeValue;
+
+//extern LOG_Obj trace;
+
+#endif /* _FWK_PORT_H_ */
diff --git a/procsdk_audio_x_xx_xx_xx/common/paf_alg_create.c b/procsdk_audio_x_xx_xx_xx/common/paf_alg_create.c
--- /dev/null
@@ -0,0 +1,250 @@
+
+/*
+* Copyright (C) 2004-2014 Texas Instruments Incorporated - http://www.ti.com/
+* All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions
+* are met:
+*
+* Redistributions of source code must retain the above copyright
+* notice, this list of conditions and the following disclaimer.
+*
+* Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions and the following disclaimer in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* Neither the name of Texas Instruments Incorporated nor the names of
+* its contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+*/
+
+//
+//
+// Performance Audio Algorithm Creation.
+//
+//
+//
+
+#include <stdlib.h>
+#include <xdc/std.h>
+#include <xdc/runtime/Error.h>
+#include <xdc/runtime/IHeap.h>
+#include <xdc/runtime/Memory.h>
+#include "alg.h"
+
+//#include "pafhjt.h" // FL: ??
+#include "paf_alg.h"
+#include "paf_alg_priv.h"
+
+//extern far int SDRAM;
+//far int *mem_mallocseg_ptr=&SDRAM;
+//#define MALLOC(size) MEM_alloc(*mem_mallocseg_ptr,(size), 8)
+//#define FREE(addr,size) MEM_free(*mem_mallocseg_ptr,(addr),(size))
+extern HeapMem_Handle heapMemDdr3;
+#define HEAPMALLOC (IHeap_Handle)heapMemDdr3
+
+/*
+ * The PAF_ALG_alloc_ function collects the Common Memory Data Requirements
+ * from all the Algorithms. The function returns 0 on success. If the
+ * call to malloc() fails then it returns PAF_ALGERR_MEMTAB_MALLOC. If a
+ * particular Algorithm requests 0 or less memTabs then the function returns
+ * an error value of PAF_ALGERR_MEMTAB_COUNT.
+ */
+
+Int
+PAF_ALG_alloc_ (
+ const PAF_ALG_AllocInit *pInit,
+ Int sizeofInit,
+ IALG_MemRec common[])
+{
+ IALG_MemRec *memTab;
+ Int commonSize[PAF_IALG_COMMON_MEMN+1];
+ Int commonCount[PAF_IALG_COMMON_MEMN+1];
+ Int i,n;
+ Error_Block eb;
+
+ // Initialize error block
+ Error_init(&eb);
+
+ for ( ; pInit && pInit->ialg_fxns;
+ pInit=(const PAF_ALG_AllocInit *)((char *)pInit+sizeofInit)) {
+#ifdef _TMS320C6X
+#pragma UNROLL(1)
+#endif
+ for(i=PAF_IALG_COMMON_MEM0;i<=PAF_IALG_COMMON_MEMN;++i) {
+ commonSize[i]=0;
+ commonCount[i]=0;
+ }
+ n = pInit->ialg_fxns->algNumAlloc != NULL ? pInit->ialg_fxns->algNumAlloc()
+ : IALG_DEFMEMRECS;
+ //if((memTab = (IALG_MemRec *)MALLOC(n * sizeof(IALG_MemRec)))) {
+ if ((memTab = (IALG_MemRec *)Memory_alloc(HEAPMALLOC, n*sizeof(IALG_MemRec), 8, &eb)))
+ {
+ n=pInit->ialg_fxns->algAlloc(pInit->ialg_prms,
+ (IALG_Fxns ** )&(pInit->ialg_fxns),memTab);
+ if(n<=0)
+ return PAF_ALGERR_MEMTAB_COUNT;
+
+ for(i=0;i<n;++i){
+ if((memTab[i].attrs == PAF_IALG_COMMON_MEM0) ||
+ (memTab[i].attrs >= PAF_IALG_COMMON_MEM1 &&
+ memTab[i].attrs <= PAF_IALG_COMMON_MEMN)) {
+ commonSize[memTab[i].attrs] += memTab[i].size +
+ (commonCount[memTab[i].attrs] ? memTab[i].alignment : 0);
+ if(!commonCount[memTab[i].attrs] &&
+ memTab[i].alignment > common[memTab[i].attrs].alignment)
+ common[memTab[i].attrs].alignment = memTab[i].alignment;
+ commonCount[memTab[i].attrs]++;
+ if (common[memTab[i].attrs].space == PAF_IALG_NONE)
+ /* creating common memory section */
+ common[memTab[i].attrs].space = memTab[i].space;
+ else if (common[memTab[i].attrs].space == memTab[i].space)
+ /* existing common memory section: space okay */
+ ;
+ else {
+ /* existing common memory section: space conflict */
+ /* Greater Memory Space Rule (tends to external) */
+ if (common[memTab[i].attrs].space < memTab[i].space)
+ common[memTab[i].attrs].space = memTab[i].space;
+ else
+ ;
+ }
+ }
+ }
+ //FREE(memTab,(n * sizeof(IALG_MemRec)));
+ Memory_free(HEAPMALLOC,memTab,(n*sizeof(IALG_MemRec)));
+ if(common){
+ for(i=PAF_IALG_COMMON_MEM0;i<=PAF_IALG_COMMON_MEMN;++i) {
+ if(commonSize[i] > common[i].size) {
+ common[i].size = commonSize[i];
+ common[i].attrs = (IALG_MemAttrs )i;
+ }
+ }
+ }
+ }
+ else
+ return PAF_ALGERR_MEMTAB_MALLOC;
+ }
+ return 0;
+}
+
+/*
+ * The PAF_ALG_create_ is derived from standard XDAIS ALG_create function defined in the
+ * file alg_create.c version "XDAS 2.2.1 12-07-01".
+ * The PAF_ALG_create_ is designed to handle the Performance Audio Specific "Common"
+ * memory and also to share the scratch memory accross the Performance Audio
+ * System.
+ * The PAF_ALG_create_ function returns the Handle to the Algorithm if the Algorithm is
+ * created successfully otherwise it returns NULL.
+ */
+
+ALG_Handle PAF_ALG_create_ (
+ const IALG_Fxns *fxns,
+ IALG_Handle p,
+ const IALG_Params *params,
+ const IALG_MemRec common[],
+ PAF_IALG_Config *pafConfig)
+{
+ IALG_MemRec *memTab;
+ Int n;
+ ALG_Handle alg;
+ IALG_Fxns *fxnsPtr;
+ Error_Block eb;
+
+ // Initialize error block
+ Error_init(&eb);
+
+ if(fxns != NULL){
+ n = fxns->algNumAlloc != NULL ? fxns->algNumAlloc() : IALG_DEFMEMRECS;
+ //if((memTab = (IALG_MemRec *)MALLOC(n * sizeof (IALG_MemRec))))
+ if((memTab = (IALG_MemRec *)Memory_alloc(HEAPMALLOC, n*sizeof (IALG_MemRec), 8, &eb)))
+ {
+ n = fxns->algAlloc(params, &fxnsPtr, memTab);
+ if(n<=0)
+ return NULL;
+ if(!PAF_ALG_allocMemory(memTab,n,common,pafConfig)){
+ alg = (IALG_Handle)memTab[0].base;
+ alg->fxns = (IALG_Fxns * )fxns;
+ if(fxns->algInit(alg, memTab, p, params) == IALG_EOK){
+ //FREE(memTab,(n * sizeof(IALG_MemRec)));
+ Memory_free(HEAPMALLOC,memTab,(n * sizeof(IALG_MemRec)));
+ return alg;
+ }
+ fxns->algFree(alg, memTab);
+ PAF_ALG_freeMemory(memTab, n);
+ }
+ //FREE(memTab,(n * sizeof(IALG_MemRec)));
+ Memory_free(HEAPMALLOC,memTab,(n * sizeof(IALG_MemRec)));
+ }
+ }
+ return (NULL);
+}
+
+/*
+ * The PAF_ALG_delete is derived from standard XDAIS ALG_delete function defined in the
+ * file alg_create.c version "XDAS 2.2.1 12-07-01".
+ * The PAF_ALG_create is designed to handle the Performance Audio Specific "Common"
+ * memory and also scratch memory.
+ */
+
+/* DO NOT REMOVE THIS CODE_SECTION. --Kurt */
+#ifdef _TMS320C6X
+#pragma CODE_SECTION(PAF_ALG_delete,".text:_PAF_ALG_delete")
+#endif
+
+Void PAF_ALG_delete(ALG_Handle alg)
+{
+ IALG_MemRec *memTab;
+ Int n;
+ IALG_Fxns *fxns;
+ Error_Block eb;
+
+#if defined(_TMS320C6X) && !defined(__TI_EABI__)
+ asm (" .clink");
+#endif
+
+ // Initialize error block
+ Error_init(&eb);
+
+ if (alg != NULL && alg->fxns != NULL) {
+ fxns = alg->fxns;
+ n = fxns->algNumAlloc != NULL ? fxns->algNumAlloc() : IALG_DEFMEMRECS;
+
+ //if ((memTab = (IALG_MemRec *)MALLOC(n * sizeof (IALG_MemRec))))
+ if ((memTab = (IALG_MemRec *)Memory_alloc(HEAPMALLOC, n*sizeof (IALG_MemRec), 8, &eb)))
+ {
+ memTab[0].base = alg;
+ n = fxns->algFree(alg, memTab);
+ PAF_ALG_freeMemory(memTab, n);
+ //FREE(memTab,(n * sizeof(IALG_MemRec)));
+ Memory_free(HEAPMALLOC,memTab,(n * sizeof(IALG_MemRec)));
+ }
+ }
+}
+
+struct PAF_ALG_Fxns PAF_ALG_fxns =
+{
+ PAF_ALG_alloc_,
+ PAF_ALG_create_,
+ PAF_ALG_init_,
+ PAF_ALG_allocMemory_,
+ PAF_ALG_mallocMemory_,
+ PAF_ALG_memSpaceToHeapId_,
+ PAF_ALG_memSpaceToHeap_,
+ PAF_ALG_setup_
+};
diff --git a/procsdk_audio_x_xx_xx_xx/common/paf_alg_malloc.c b/procsdk_audio_x_xx_xx_xx/common/paf_alg_malloc.c
--- /dev/null
@@ -0,0 +1,533 @@
+
+/*
+* Copyright (C) 2004-2014 Texas Instruments Incorporated - http://www.ti.com/
+* All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions
+* are met:
+*
+* Redistributions of source code must retain the above copyright
+* notice, this list of conditions and the following disclaimer.
+*
+* Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions and the following disclaimer in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* Neither the name of Texas Instruments Incorporated nor the names of
+* its contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+*/
+
+//
+//
+// Performance Audio Algorithm Memory Allocation.
+//
+//
+//
+
+/*
+ * File Inclusions
+ */
+
+#include <xdc/std.h>
+#include <xdc/cfg/global.h>
+
+//#include <mem.h>
+#include <xdc/runtime/Error.h>
+#include <xdc/runtime/Memory.h>
+#include <xdc/runtime/IHeap.h>
+#include <ti/sysbios/heaps/HeapMem.h>
+
+//#include <stdlib.h>
+//#include <string.h>
+
+#include "alg.h"
+
+//#include "pafhjt.h"
+#include "paf_alg.h"
+#include "paf_alg_priv.h"
+
+#include "common.h"
+#include "paf_heapMgr.h"
+
+//extern int IRAM;
+//extern int SDRAM;
+//extern int L3RAM;
+
+
+// -----------------------------------------------------------------------------
+// Debugging Trace Control, local to this file.
+//
+
+#define PAF_DEVICE_VERSION (PAF_DEVICE & 0xffff)
+#if PAF_DEVICE_VERSION == 0xE000
+#define _DEBUG // This is to enable log_printfs
+#endif /* PAF_DEVICE_VERSION */
+
+#include <logp.h>
+
+// allows you to set a different trace module in pa.cfg
+#define TR_MOD trace
+
+// Allow a developer to selectively enable tracing.
+// For release, set mask to 1 to make it easier to catch any errors.
+#define CURRENT_TRACE_MASK 0 // terse only
+
+#define TRACE_MASK_TERSE 1 // only flag errors
+#define TRACE_MASK_GENERAL 2 // log a half dozen lines per loop
+#define TRACE_MASK_VERBOSE 4 // trace full operation
+
+#if (CURRENT_TRACE_MASK & TRACE_MASK_TERSE)
+ #define TRACE_TERSE(a) LOG_printf a
+#else
+ #define TRACE_TERSE(a)
+#endif
+
+#if (CURRENT_TRACE_MASK & TRACE_MASK_GENERAL)
+ #define TRACE_GEN(a) LOG_printf a
+#else
+ #define TRACE_GEN(a)
+#endif
+
+#if (CURRENT_TRACE_MASK & TRACE_MASK_VERBOSE)
+ #define TRACE_VERBOSE(a) LOG_printf a
+#else
+ #define TRACE_VERBOSE(a)
+#endif
+
+// Note: memory spaces are defined in ialg.h from the xdais package.
+// 17 is external. 2 and 5 are internal.
+
+/*
+ * The PAF_ALG_allocMemory is derived from _ALG_allocMemory function defined
+ * in the TI Standard XDAIS file alg_malloc.c version "XDAS 2.2.1 12-07-01"
+ * It is extended to check for the Performance Audio specific "Common"
+ * memory. This function assumes that memory is already
+ * allocated for the common memory and shared scratch memory.
+ */
+
+Int
+PAF_ALG_allocMemory_ (
+ IALG_MemRec memTab[],
+ Int n,
+ const IALG_MemRec common[],
+ PAF_IALG_Config *p)
+{
+ char * commonBase[PAF_IALG_COMMON_MEMN+1];
+ Int commonCount[PAF_IALG_COMMON_MEMN+1];
+ Int i;
+ Error_Block eb;
+
+ // Initialize error block
+ Error_init(&eb);
+
+ if(common) {
+#ifdef _TMS320C6X
+//#warn This pragma saves ~125 bytes! --Kurt
+#pragma UNROLL(1)
+#endif
+ for(i=PAF_IALG_COMMON_MEM0;i<=PAF_IALG_COMMON_MEMN;++i) {
+ commonBase[i]=common[i].base;
+ commonCount[i]=0;
+ }
+ }
+
+ for(i=0;i<n;++i) {
+ if( common &&
+ (memTab[i].attrs == PAF_IALG_COMMON_MEM0 ||
+ (memTab[i].attrs >= PAF_IALG_COMMON_MEM1 &&
+ memTab[i].attrs <= PAF_IALG_COMMON_MEMN))) {
+ memTab[i].base = commonBase[memTab[i].attrs] +
+ (commonCount[memTab[i].attrs] ? memTab[i].alignment : 0);
+ memTab[i].base = (void *)((unsigned int )memTab[i].base &
+ (~(memTab[i].alignment ? memTab[i].alignment - 1 : 0)));
+ commonBase[memTab[i].attrs] = (char *)memTab[i].base + memTab[i].size;
+ commonCount[memTab[i].attrs]++;
+ TRACE_GEN((&TR_MOD, "PAF_ALG_allocMemory_.%d: memTab alloc %d bytes at 0x%x.", __LINE__, memTab[i].size, memTab[i].base));
+ TRACE_GEN((&TR_MOD, "PAF_ALG_allocMemory_ (cont'd) memTab %d. i: %d", memTab[i].attrs, i));
+ }
+ else {
+ if(memTab[i].size){
+ if(p) {
+ if(p->clr){
+ TRACE_GEN((&TR_MOD, "PAF_ALG_allocMemory_.%d: calloc %d bytes from space %d", __LINE__, memTab[i].size, memTab[i].space));
+ //if(!(memTab[i].base = (void *)MEM_calloc(
+ // PAF_ALG_memSpace(p,memTab[i].space),
+ // memTab[i].size,memTab[i].alignment)))
+ if (!(memTab[i].base = (void *)Memory_calloc(
+ (IHeap_Handle)PAF_ALG_memSpaceToHeap(p,memTab[i].space),
+ memTab[i].size,
+ memTab[i].alignment,
+ &eb)))
+ {
+ TRACE_TERSE((&TR_MOD, "PAF_ALG_allocMemory_.%d: calloc %d bytes failed.", __LINE__, memTab[i].size));
+ SW_BREAKPOINT;
+ return PAF_ALGERR_PERSIST;
+ }
+ TRACE_GEN((&TR_MOD, "PAF_ALG_allocMemory_ (cont'd) %d at 0x%x, %d",
+ memTab[i].size, memTab[i].base, PAF_ALG_memSpace(p,memTab[i].space)));
+ }
+ else{
+ TRACE_GEN((&TR_MOD, "PAF_ALG_allocMemory_.%d: alloc %d bytes from space %d", __LINE__, memTab[i].size, memTab[i].space));
+ //if(!(memTab[i].base = (void *)MEM_alloc(
+ // PAF_ALG_memSpace(p,memTab[i].space),
+ // memTab[i].size,memTab[i].alignment)))
+ if (!(memTab[i].base = (void *)Memory_alloc(
+ (IHeap_Handle)PAF_ALG_memSpaceToHeap(p, memTab[i].space),
+ memTab[i].size,
+ memTab[i].alignment,
+ &eb)))
+ {
+ TRACE_TERSE((&TR_MOD, "PAF_ALG_allocMemory_.%d: alloc %d bytes failed.", __LINE__, memTab[i].size));
+ SW_BREAKPOINT;
+ return PAF_ALGERR_PERSIST;
+ }
+ TRACE_GEN((&TR_MOD, "PAF_ALG_allocMemory_ (cont'd) %d at 0x%x, %d",
+ memTab[i].size, memTab[i].base, PAF_ALG_memSpace(p,memTab[i].space)));
+ }
+ }
+ else {
+ PAF_IALG_Config pafConfig;
+ TRACE_GEN((&TR_MOD, "PAF_ALG_allocMemory_.%d: Setup memory regions.", __LINE__));
+ //PAF_ALG_setup(&pafConfig,IRAM,SDRAM,IRAM,0); // option: use L3RAM
+ PAF_ALG_setup(&pafConfig,
+ gPafHeapIdInt, (HeapMem_Handle)pafHeapMgr_readHeapHandle(gPafHeapIdInt),
+ gPafHeapIdInt1, (HeapMem_Handle)pafHeapMgr_readHeapHandle(gPafHeapIdInt1),
+ gPafHeapIdExt, (HeapMem_Handle)pafHeapMgr_readHeapHandle(gPafHeapIdExt),
+ gPafHeapIdInt1Shm, (HeapMem_Handle)pafHeapMgr_readHeapHandle(gPafHeapIdInt1Shm),
+ 0);
+ TRACE_GEN((&TR_MOD, "PAF_ALG_allocMemory_.%d: alloc %d bytes from space %d", __LINE__, memTab[i].size, memTab[i].space));
+ //if(!(memTab[i].base=(void *)MEM_alloc(
+ // PAF_ALG_memSpace(&pafConfig,memTab[i].space),
+ // memTab[i].size,memTab[i].alignment)))
+ if (!(memTab[i].base = (void *)Memory_alloc(
+ (IHeap_Handle)PAF_ALG_memSpaceToHeap(&pafConfig, memTab[i].space),
+ memTab[i].size,
+ memTab[i].alignment,
+ &eb)))
+ {
+ TRACE_TERSE((&TR_MOD, "PAF_ALG_allocMemory_.%d: alloc %d bytes failed.",__LINE__, memTab[i].size));
+ SW_BREAKPOINT;
+ return PAF_ALGERR_PERSIST;
+ }
+ TRACE_GEN((&TR_MOD, "PAF_ALG_allocMemory_ (cont'd) %d at 0x%x",
+ memTab[i].size, memTab[i].base, PAF_ALG_memSpace(&pafConfig,memTab[i].space)));
+ }
+ }
+ else
+ {
+ memTab[i].base=NULL;
+ TRACE_TERSE((&TR_MOD, "PAF_ALG_allocMemory_.%d: alloc %d bytes failed.", __LINE__, memTab[i].size));
+ SW_BREAKPOINT;
+ }
+ }
+ }
+ return 0;
+}
+
+/*
+ * The PAF_ALG_mallocMemory function allocates the memory requested by the
+ * memTab's.
+ */
+
+Int
+PAF_ALG_mallocMemory_ (
+ IALG_MemRec common[],
+ PAF_IALG_Config *p)
+{
+ Int i;
+ Error_Block eb;
+
+ // Initialize error block
+ Error_init(&eb);
+
+ for(i=PAF_IALG_COMMON_MEM0;i<=PAF_IALG_COMMON_MEMN;++i)
+ {
+ if(0 == common[i].size)
+ continue;
+
+ if(p->clr)
+ {
+ TRACE_GEN((&TR_MOD, "PAF_ALG_mallocMemory_.%d: calloc %d bytes from space %d", __LINE__, common[i].size, common[i].space));
+ //common[i].base = (void *)MEM_calloc( PAF_ALG_memSpace(p,common[i].space), common[i].size, common[i].alignment);
+ common[i].base = (void *)Memory_calloc((IHeap_Handle)PAF_ALG_memSpaceToHeap(p,common[i].space), common[i].size, common[i].alignment, &eb);
+ TRACE_GEN((&TR_MOD, "PAF_ALG_allocMemory_ (cont'd) %d at 0x%x", common[i].size, common[i].base));
+ }
+ else
+ {
+ TRACE_GEN((&TR_MOD, "PAF_ALG_mallocMemory_.%d: alloc %d bytes from space %d", __LINE__, common[i].size, common[i].space));
+ //common[i].base = (void *)MEM_alloc(PAF_ALG_memSpace(p, common[i].space),common[i].size, common[i].alignment);
+ common[i].base = (void *)Memory_alloc((IHeap_Handle)PAF_ALG_memSpaceToHeap(p, common[i].space), common[i].size, common[i].alignment, &eb);
+ TRACE_GEN((&TR_MOD, "PAF_ALG_allocMemory_ (cont'd) %d at 0x%x", common[i].size, common[i].base));
+ }
+
+ if(!(common[i].base))
+ {
+ TRACE_TERSE((&TR_MOD, "PAF_ALG_mallocMemory_.%d: (c)alloc %d bytes failed", __LINE__, common[i].size));
+ SW_BREAKPOINT;
+ return PAF_ALGERR_COMMON;
+ }
+ }
+
+ return 0;
+}
+
+/*
+ * The PAF_ALG_freeMemory is derived from _ALG_freeMemory function defined
+ * in the TI Standard XDAIS file alg_malloc.c version "XDAS 2.2.1 12-07-01"
+ * It is extended to check for the Performance Audio specific "Common"
+ * memory and scratch memory.
+ */
+
+Void
+PAF_ALG_freeMemory(
+ IALG_MemRec memTab[],
+ Int n)
+{
+
+#ifdef _TMS320C6X
+//#warn Cannot free memory here because segids are not known
+#endif
+
+ // Cannot free memory here bacause there is no way to determine
+ // the segid needed by MEM_free.
+ // Not an issuue as of now, in PA, because, if alg creation fails
+ // system does not do any thing further.
+ //
+#if 0
+ Int i;
+ Int segid;
+
+ for(i=0;i<n;i++){
+ if(memTab[i].base != NULL && !(memTab[i].attrs == PAF_IALG_COMMON_MEM0 ||
+ memTab[i].attrs >= PAF_IALG_COMMON_MEM1 && memTab[i].attrs <= PAF_IALG_COMMON_MEMN))
+ {
+#warn MEM_free might be
+ segid = (memTab[i].space == IALG_SARAM)?IRAM:SDRAM;
+ MEM_free(segid,memTab[i].base,memTab[i].size);
+ }
+ }
+#endif
+}
+
+/*
+ * The PAF_ALG_init function initializes the memTab's to default values.
+ */
+
+Void
+PAF_ALG_init_ (
+ IALG_MemRec memTab[],
+ Int n,
+ const IALG_MemSpace memSpace[])
+{
+ Int i;
+
+ for (i=0; i<n; i++) {
+ memTab[i].size = 0;
+ memTab[i].alignment = 0;
+ memTab[i].base = NULL;
+ memTab[i].space = memSpace ? memSpace[i] : PAF_IALG_NONE;
+ // TRACE_GEN((&TR_MOD, "PAF_ALG_init_[%d]:space %d", i, memTab[i].space));
+ }
+}
+
+/*
+ * PAF_ALG_activate is derived from standard XDAIS ALG_activate function defined in the
+ * file alg_malloc.c version "XDAS 2.2.1 12-07-01".
+ */
+
+#ifdef _TMS320C6X
+/* DO NOT REMOVE THIS CODE_SECTION. --Kurt */
+#pragma CODE_SECTION(PAF_ALG_activate,".text:_PAF_ALG_activate")
+#endif
+
+Void
+PAF_ALG_activate (
+ ALG_Handle alg)
+{
+#if defined(_TMS320C6X) && !defined(__TI_EABI__)
+ asm (" .clink");
+#endif
+
+ if (alg->fxns->algActivate != NULL) {
+ alg->fxns->algActivate (alg);
+ }
+}
+
+/*
+ * PAF_ALG_deactivate is derived from standard XDAIS ALG_deactivate function defined in the
+ * file alg_malloc.c version "XDAS 2.2.1 12-07-01".
+ */
+
+#ifdef _TMS320C6X
+/* DO NOT REMOVE THIS CODE_SECTION. --Kurt */
+#pragma CODE_SECTION(PAF_ALG_deactivate,".text:_PAF_ALG_deactivate")
+#endif
+
+Void
+PAF_ALG_deactivate (
+ ALG_Handle alg)
+{
+#if defined(_TMS320C6X) && !defined(__TI_EABI__)
+ asm (" .clink");
+#endif
+
+ if (alg->fxns->algDeactivate != NULL) {
+ alg->fxns->algDeactivate(alg);
+ }
+}
+
+/*
+ * The PAF_ALG_memSpaceToHeapId function is derived from ALGRF_memSpace function
+ * defined in the TI released algrf.h file ver "ALGRF 0.02.06 11-21-01".
+ */
+
+Int
+PAF_ALG_memSpaceToHeapId_ (
+ const PAF_IALG_Config *p,
+ IALG_MemSpace space)
+{
+ switch(space)
+ {
+ case IALG_SARAM: /* IALG_SARAM0 = IALG_SARAM : Normally used for IRAM. */
+ TRACE_GEN((&TR_MOD, "PAF_ALG_memSpaceToHeapId_.%d: IALG_SARAM (0x%x) 0x%x", __LINE__, space, p->iHeapId));
+ return p->iHeapId;
+
+ case IALG_EXTERNAL: // normally external SDRAM
+ TRACE_GEN((&TR_MOD, "PAF_ALG_memSpaceToHeapId_.%d: IALG_EXTERNAL (0x%x) 0x%x", __LINE__, space, p->eHeapId));
+ return p->eHeapId;
+
+ case IALG_SARAM1:
+ TRACE_GEN((&TR_MOD, "PAF_ALG_memSpaceToHeapId_.%d: IALG_SARAM1 (0x%x) 0x%x", __LINE__, space, p->lHeapId));
+ return p->lHeapId;
+
+ case IALG_SARAM2:
+ TRACE_GEN((&TR_MOD, "PAF_ALG_memSpaceToHeapId_.%d: IALG_SARAM2 (0x%x) 0x%x", __LINE__, space, p->lHeapIdShm));
+ return p->lHeapIdShm;
+
+ case IALG_DARAM0: // Can't use this because it is zero and overridden
+ TRACE_GEN((&TR_MOD, "PAF_ALG_memSpaceToHeapId_.%d: IALG_DARAM0 (0x%x) 0x%x", __LINE__, space, p->iHeapId));
+ return p->iHeapId;
+
+ case IALG_DARAM1: // not normally used.
+ TRACE_GEN((&TR_MOD, "PAF_ALG_memSpaceToHeapId_.%d: IALG_DARAM1 (0x%x) 0x%x", __LINE__, space, p->iHeapId));
+ return p->iHeapId;
+
+ case IALG_DARAM2: // not normally used.
+ TRACE_GEN((&TR_MOD, "PAF_ALG_memSpaceToHeapId_.%d: IALG_DARAM2 (0x%x) 0x%x", __LINE__, space, p->iHeapId));
+ return p->iHeapId; // not normally used.
+
+ case IALG_ESDATA: // not normally used.
+ TRACE_GEN((&TR_MOD, "PAF_ALG_memSpaceToHeapId_.%d: IALG_ESDATA (0x%x) 0x%x", __LINE__, space, p->eHeapId));
+ return p->eHeapId;
+
+ default:
+ TRACE_GEN((&TR_MOD, "PAF_ALG_memSpaceToHeapId_.%d: default (0x%x) 0x%x", __LINE__, space, p->eHeapId));
+ return p->eHeapId;
+ }
+
+}
+
+HeapMem_Handle
+PAF_ALG_memSpaceToHeap_ (
+ const PAF_IALG_Config *p,
+ IALG_MemSpace space)
+{
+ switch(space)
+ {
+ case IALG_SARAM: /* IALG_SARAM0 = IALG_SARAM : Normally used for IRAM. */
+ TRACE_GEN((&TR_MOD, "PAF_ALG_memSpaceToHeap_.%d: IALG_SARAM (0x%x) 0x%x", __LINE__, space, p->iHeapId));
+ return p->hIHeap;
+
+ case IALG_EXTERNAL: // normally external SDRAM
+ TRACE_GEN((&TR_MOD, "PAF_ALG_memSpaceToHeap_.%d: IALG_EXTERNAL (0x%x) 0x%x", __LINE__, space, p->eHeapId));
+ return p->hEHeap;
+
+ case IALG_SARAM1: // Used by Dolby Digital
+ TRACE_GEN((&TR_MOD, "PAF_ALG_memSpaceToHeap_.%d: IALG_SARAM1 (0x%x) 0x%x", __LINE__, space, p->lHeapId));
+ return p->hLHeap;
+
+ case IALG_SARAM2:
+ TRACE_GEN((&TR_MOD, "PAF_ALG_memSpaceToHeap_.%d: IALG_SARAM2 (0x%x) 0x%x", __LINE__, space, p->iHeapId));
+ return p->hLHeapShm;
+
+ case IALG_DARAM0: // Can't use this because it is zero and overridden
+ TRACE_GEN((&TR_MOD, "PAF_ALG_memSpaceToHeap_.%d: IALG_DARAM0 (0x%x) 0x%x", __LINE__, space, p->iHeapId));
+ return p->hIHeap;
+
+ case IALG_DARAM1: // not normally used.
+ TRACE_GEN((&TR_MOD, "PAF_ALG_memSpaceToHeap_.%d: IALG_DARAM1 (0x%x) 0x%x", __LINE__, space, p->iHeapId));
+ return p->hIHeap;
+
+ case IALG_DARAM2: // not normally used.
+ TRACE_GEN((&TR_MOD, "PAF_ALG_memSpaceToHeap_.%d: IALG_DARAM2 (0x%x) 0x%x", __LINE__, space, p->iHeapId));
+ return p->hIHeap; // not normally used.
+
+ case IALG_ESDATA: // not normally used.
+ TRACE_GEN((&TR_MOD, "PAF_ALG_memSpaceToHeap_.%d: IALG_ESDATA (0x%x) 0x%x", __LINE__, space, p->eHeapId));
+ return p->hEHeap;
+
+ default:
+ TRACE_GEN((&TR_MOD, "PAF_ALG_memSpaceToHeap_.%d: default (0x%x) 0x%x", __LINE__, space, p->eHeapId));
+ return p->hEHeap;
+ }
+}
+
+/*
+ * The PAF_ALG_setup function is derived from ALGRF_setup function defined in
+ * the TI released algrf_setup.c file ver "ALGRF 0.02.06 11-21-01" .
+ */
+
+#ifdef _TMS320C6X
+#pragma CODE_SECTION(PAF_ALG_setup_,".text:_PAF_ALG_setup_")
+#endif
+Void
+PAF_ALG_setup_ (
+ PAF_IALG_Config *p,
+ Int iHeapId,
+ HeapMem_Handle hIHeap,
+ Int lHeapId,
+ HeapMem_Handle hLHeap,
+ Int eHeapId,
+ HeapMem_Handle hEHeap,
+ Int lHeapIdShm,
+ HeapMem_Handle hLHeapShm,
+ Int clr
+)
+{
+#if defined(_TMS320C6X) && !defined(__TI_EABI__)
+ asm (" .clink");
+#endif
+
+ /* initialize heap Ids */
+ p->iHeapId = iHeapId;
+ p->lHeapId = lHeapId;
+ p->eHeapId = eHeapId;
+ p->lHeapIdShm = lHeapIdShm;
+
+ /* initialize heap handles */
+ p->hIHeap = hIHeap;
+ p->hLHeap = hLHeap;
+ p->hEHeap = hEHeap;
+ p->hLHeapShm = hLHeapShm;
+
+ /* initialize clear flag */
+ p->clr=clr;
+
+ // TRACE_GEN((&TR_MOD, "PAF_ALG_memSpace_.%d: IPAF_ALG_setup_", __LINE__));
+}
diff --git a/procsdk_audio_x_xx_xx_xx/common/paf_alg_print.c b/procsdk_audio_x_xx_xx_xx/common/paf_alg_print.c
--- /dev/null
@@ -0,0 +1,210 @@
+
+/*
+* Copyright (C) 2004-2014 Texas Instruments Incorporated - http://www.ti.com/
+* All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions
+* are met:
+*
+* Redistributions of source code must retain the above copyright
+* notice, this list of conditions and the following disclaimer.
+*
+* Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions and the following disclaimer in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* Neither the name of Texas Instruments Incorporated nor the names of
+* its contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+*/
+
+//
+//
+// Performance Audio Algorithm RAM_REPORT definitions.
+//
+//
+#include <stdlib.h> // malloc
+#include <stdio.h> // printf
+#include <paf_alg_print.h>
+
+#include <xdc/runtime/Memory.h>
+#include <xdc/runtime/IHeap.h>
+#include <ti/sysbios/heaps/HeapMem.h>
+
+Int
+PAF_ALG_allocPrint (const PAF_ALG_AllocInit *pInit, Int sizeofInit, PAF_IALG_Config *p)
+{
+ IALG_MemRec *memTab;
+ Int commonSize[PAF_IALG_COMMON_MEMN+1];
+ Int commonCount[PAF_IALG_COMMON_MEMN+1];
+ Int commonSpace[PAF_IALG_COMMON_MEMN+1];
+ Int i,n;
+
+ for ( ; pInit && pInit->ialg_fxns;
+ pInit=(const PAF_ALG_AllocInit *)((char *)pInit+sizeofInit)) {
+#ifdef _TMS320C6X
+#pragma UNROLL(1)
+#endif
+ for (i=PAF_IALG_COMMON_MEM0;i<=PAF_IALG_COMMON_MEMN;++i) {
+ commonSize[i]=0;
+ commonCount[i]=0;
+ commonSpace[i]=-1;
+ }
+ n = pInit->ialg_fxns->algNumAlloc != NULL ? pInit->ialg_fxns->algNumAlloc()
+ : IALG_DEFMEMRECS;
+ if((memTab = (IALG_MemRec *)malloc(n * sizeof(IALG_MemRec)))){
+ n=pInit->ialg_fxns->algAlloc(pInit->ialg_prms,(IALG_Fxns ** )&(pInit->ialg_fxns),memTab);
+ if(n<=0)
+ return PAF_ALGERR_MEMTAB_COUNT;
+
+ for(i=0;i<n;++i){
+ if((((Int)memTab[i].attrs >= PAF_IALG_COMMON_MEM0) && ((Int)memTab[i].attrs <= PAF_IALG_COMMON_MEMN))) {
+ commonSize[memTab[i].attrs] += memTab[i].size +
+ (commonCount[memTab[i].attrs] ? memTab[i].alignment : 0);
+ commonCount[memTab[i].attrs]++;
+ }
+ // (***) FL: this is broken for printout of persistent memory
+ // The code was broken before addition of persist memory in MSMC SHM.
+ // commonSize[] and commonCount[] are correct, but here persist is treated like common memory, i.e.
+ // persistent memory is treated as through it's combined into a single memory space.
+ // For example, printout can only show persist memory as belonging to one space.
+ // This isn't true for persistent memory since it can be in multiple spaces.
+ if (commonSpace[memTab[i].attrs] < (Int)memTab[i].space) {
+ commonSpace[memTab[i].attrs] = (Int)memTab[i].space;
+ }
+ }
+ free(memTab);
+
+ printf("\n0x%-3x\t",((PAF_ASP_LinkInit*)pInit)->thisCode.part.beta);
+ for(i=PAF_IALG_COMMON_MEM0;i<=PAF_IALG_COMMON_MEMN;++i){
+ if (commonSize[i] == 0)
+ printf("%9d\t",0);
+ else
+ printf("%6d(%1d)\t",
+ commonSize[i], PAF_ALG_memSpaceToHeapId(p, (IALG_MemSpace)commonSpace[i]));
+ }
+ commonSize[IALG_SCRATCH] = commonSize[IALG_PERSIST] = commonSize[IALG_WRITEONCE] = 0;
+ }
+ else
+ return 1;
+ }
+ return 0;
+}
+
+Void
+PAF_ALG_commonPrint (IALG_MemRec common[], PAF_IALG_Config *p)
+{
+
+ Int i;
+
+ printf("\n\n");
+ for(i=0;i<130;i++)
+ printf ("--");
+
+ printf ("\nCOMMON \t\t\t\t");
+ for (i=PAF_IALG_COMMON_MEM0; i <= PAF_IALG_COMMON_MEMN; i++) {
+ if (i <= IALG_WRITEONCE)
+ ; //printf(""); // print empty string??
+ else if (common[i].size == 0)
+ printf("%9d\t",0);
+ else
+ printf("%6d(%1d)\t",
+ common[i].size, PAF_ALG_memSpaceToHeapId(p, common[i].space));
+ }
+}
+
+
+//PAF_ALG_memStatusPrint(Int internal, Int external, Int internal1)
+Void
+PAF_ALG_memStatusPrint(
+ HeapMem_Handle hInternalHeap,
+ HeapMem_Handle hInternal1Heap,
+ HeapMem_Handle hExternalHeap,
+ HeapMem_Handle hInternal1HeapShm
+)
+{
+ //MEM_Stat statbuf;
+ Memory_Stats stats;
+
+ printf("\n\nSegment\tSize\tUsed\tAvailable");
+
+ //MEM_stat(internal,&statbuf);
+ //printf("\nIRAM\t%d\t%d\t%d",statbuf.size,statbuf.used,statbuf.length);
+ //MEM_stat(external,&statbuf);
+ //printf("\nSDRAM\t%d\t%d\t%d",statbuf.size,statbuf.used,statbuf.length);
+ //MEM_stat(internal1,&statbuf);
+ //printf("\nL3RAM\t%d\t%d\t%d\n",statbuf.size,statbuf.used,statbuf.length);
+
+ if (hInternalHeap != NULL)
+ {
+ Memory_getStats((IHeap_Handle)hInternalHeap, &stats);
+ printf("\nL2\t%d\t%d\t%d", stats.totalSize, stats.totalSize-stats.totalFreeSize, stats.largestFreeSize);
+ }
+ if (hInternal1Heap != NULL)
+ {
+ Memory_getStats((IHeap_Handle)hInternal1Heap, &stats);
+ printf("\nMSMC\t%d\t%d\t%d", stats.totalSize, stats.totalSize-stats.totalFreeSize, stats.largestFreeSize);
+ }
+ if (hExternalHeap != NULL)
+ {
+ Memory_getStats((IHeap_Handle)hExternalHeap, &stats);
+ printf("\nDDR3\t%d\t%d\t%d", stats.totalSize, stats.totalSize-stats.totalFreeSize, stats.largestFreeSize);
+ }
+ if (hInternal1HeapShm != NULL)
+ {
+ Memory_getStats((IHeap_Handle)hInternal1HeapShm, &stats);
+ printf("\nMSMC SHM\t%d\t%d\t%d\n", stats.totalSize, stats.totalSize-stats.totalFreeSize, stats.largestFreeSize);
+ }
+}
+
+//PAF_ALG_bufMemPrint(Int z,Int size, Int heap,Int bufType)
+Void
+PAF_ALG_bufMemPrint(
+ Int z,
+ Int size,
+ Int heapId,
+ Int bufType
+)
+{
+ printf("\n\n%s Device Buffer (Zone %d) = %d (%d)",
+ (bufType==0 ? "Input" : bufType==1 ? "Output" : "Audio Frame"),
+ z, size, heapId);
+ printf("\n");
+}
+
+Void
+PAF_ALG_headerPrint()
+{
+ Int i;
+
+ printf("\n\nAlgorithm Memory requirement:\n");
+ printf(" Key: \n");
+ printf(" Beta ID can be decoded from stdbeta.h, oembeta.h or cusbeta.h in pa\\sio\\acp1.\n");
+ printf(" The number in parentheses is the heap. (0) is L2. (1) is MSMC. (2) is DDR3. (3) is MSMC SHM.\n");
+ printf("%8s\t","BetaId");
+ for(i=PAF_IALG_COMMON_MEM0;i<=PAF_IALG_COMMON_MEMN;++i){
+ if(i==0) printf("%8s\t","SCRATCH");
+ else if(i==1) printf("%8s\t","PERSIST");
+ else if(i==2) printf("%8s \t","WRITEONCE");
+ else if(i<10)
+ printf("%-7s%d \t","COMMON",(i==0 ? i : i-IALG_WRITEONCE));
+ else
+ printf("%6s%2d \t","COMMON",(i==0 ? i : i-IALG_WRITEONCE));
+ }
+}
+
diff --git a/procsdk_audio_x_xx_xx_xx/common/paf_decOpCircBuf.c b/procsdk_audio_x_xx_xx_xx/common/paf_decOpCircBuf.c
--- /dev/null
@@ -0,0 +1,351 @@
+#include <string.h> // for memset()
+#include <xdc/std.h>
+#include <ti/sysbios/hal/Cache.h>
+#include <xdc/runtime/Log.h>
+
+#include "pafdec.h"
+#include "pafsp.h"
+#include "paf_decOpCircBuf.h"
+
+#define MAX_NUM_AF_PCM ( 4 )
+#define MAX_NUM_AF_DDP ( 2 )
+
+#define CB_INIT_RD_LAG ( 2 )
+
+// PCM audio frame data
+
+// DDP audio frame data
+
+// Initialize circular buffer
+Int cbInit(
+ Int8 sourceSelect, // source select (PCM, DDP, etc.)
+ Int decOpFrameLen, // decoder output frame length
+ Int pafFrameLen, // PAF frame length
+ PAF_DecodeOpCircBuf *pCb // decoder output circular buffer
+)
+{
+ PAF_AudioFrame *pAfCb;
+ PAF_AudioData *pPcmBuf;
+ Int n;
+ Int i;
+
+ // set input frame length
+ pCb->decOpFrameLen = decOpFrameLen;
+
+ // set output frame length
+ pCb->pafFrameLen = pafFrameLen;
+
+ // initialize circular buffer maximum number of audio frames
+ if (sourceSelect == PAF_SOURCE_PCM)
+ {
+ pCb->maxNumAfCb = MAX_NUM_AF_PCM;
+ pCb->afWrtIdx = CB_INIT_RD_LAG;
+ pCb->afRdIdx = 0;
+ pCb->pcmRdIdx = 0; // 2*256 in behind
+
+ // initialize audio frames
+ for (n=0; n<pCb->maxNumAfCb; n++)
+ {
+ pAfCb = &pCb->afCb[n];
+ pAfCb->sampleDecode = PAF_SOURCE_PCM;
+ PAF_PROCESS_ZERO(pAfCb->sampleProcess);
+ pAfCb->sampleRate = PAF_SAMPLERATE_48000HZ;
+ pAfCb->sampleCount = decOpFrameLen;
+ pAfCb->channelConfigurationRequest.full = 0;
+ pAfCb->channelConfigurationRequest.part.sat = PAF_CC_SAT_SURROUND4;
+ pAfCb->channelConfigurationRequest.part.sub = PAF_CC_SUB_ONE;
+ pAfCb->channelConfigurationStream.full = 0;
+ pAfCb->channelConfigurationStream.part.sat = PAF_CC_SAT_SURROUND4;
+ pAfCb->channelConfigurationStream.part.sub = PAF_CC_SUB_ONE;
+ }
+ }
+ else if (sourceSelect == PAF_SOURCE_DDP)
+ {
+ pCb->maxNumAfCb = MAX_NUM_AF_DDP;
+ pCb->afRdIdx = 0;
+ pCb->afWrtIdx = 1;
+ pCb->pcmRdIdx = decOpFrameLen - CB_INIT_RD_LAG*pafFrameLen; // 2*256 behind
+
+ // initialize audio frames
+ for (n=0; n<pCb->maxNumAfCb; n++)
+ {
+ pAfCb = &pCb->afCb[n];
+ pAfCb->sampleDecode = PAF_SOURCE_DDP;
+ PAF_PROCESS_ZERO(pAfCb->sampleProcess);
+ pAfCb->sampleRate = PAF_SAMPLERATE_48000HZ;
+ pAfCb->sampleCount = decOpFrameLen;
+ pAfCb->channelConfigurationRequest.full = 0;
+ pAfCb->channelConfigurationRequest.part.sat = PAF_CC_SAT_SURROUND4;
+ pAfCb->channelConfigurationRequest.part.sub = PAF_CC_SUB_ONE;
+ pAfCb->channelConfigurationStream.full = 0;
+ pAfCb->channelConfigurationStream.part.sat = PAF_CC_SAT_SURROUND4;
+ pAfCb->channelConfigurationStream.part.sub = PAF_CC_SUB_ONE;
+ }
+ }
+ else
+ {
+ return PAF_DECOP_CB_INIT_INV_SOURCE_SEL;
+ }
+
+ // initialize circular buffer current number of frames
+ pCb->numAfCb = pCb->afWrtIdx - pCb->afRdIdx;
+
+ // initialize audio frame PCM buffers
+ pPcmBuf = pCb->pcmBuf;
+ for (n=0; n<pCb->maxNumAfCb; n++)
+ {
+ pAfCb = &pCb->afCb[n];
+ pAfCb->data.nChannels = PAF_DECOP_CB_MAX_NUM_PCM_CH;
+ pAfCb->data.nSamples = decOpFrameLen;
+ for (i=0; i<PAF_DECOP_CB_MAX_NUM_PCM_CH; i++)
+ {
+ pAfCb->data.sample[i] = pPcmBuf;
+ memset(pAfCb->data.sample[i], decOpFrameLen, 0);
+ pPcmBuf += decOpFrameLen;
+
+ pAfCb->data.samsiz[i] = 0;
+ }
+ }
+
+ pCb->cbWriteInit = FALSE;
+
+ // (***) FL: hackin'
+ // Write back circular buffer configuration
+ Cache_wb(pCb, sizeof(PAF_DecodeOpCircBuf), Cache_Type_ALLD, 0);
+ // Write back AF circular buffer
+ Cache_wb(pCb->afCb, pCb->maxNumAfCb*sizeof(PAF_AudioFrame), Cache_Type_ALLD, 0);
+ // Write back PCM data
+ for (n=0; n<pCb->maxNumAfCb; n++)
+ {
+ pAfCb = &pCb->afCb[n];
+ Cache_wb(pAfCb->data.samsiz, PAF_DECOP_CB_MAX_NUM_PCM_CH*sizeof(PAF_AudioSize), Cache_Type_ALLD, 0);
+ Cache_wb(pAfCb->data.sample, PAF_DECOP_CB_MAX_NUM_PCM_CH*sizeof(PAF_AudioData *), Cache_Type_ALLD, 0);
+ for (i=0; i<PAF_DECOP_CB_MAX_NUM_PCM_CH; i++)
+ {
+ Cache_wb(pAfCb->data.sample[i], decOpFrameLen*sizeof(PAF_AudioData), Cache_Type_ALLD, 0);
+ }
+ }
+ Cache_wait();
+
+ return PAF_DECOP_CB_SOK;
+}
+
+// Read audio frame from circular buffer
+Int cbReadAf(
+ PAF_DecodeOpCircBuf *pCb, // decoder output circular buffer
+ PAF_AudioFrame *pAfRd // audio frame into which to read
+)
+{
+ PAF_AudioFrame *pAfCb;
+ PAF_ChannelMask_HD streamMask;
+ Int i, j;
+
+ // (***) FL: hackin'
+ // Invalidate circular buffer configuration.
+ Cache_inv(pCb, sizeof(PAF_DecodeOpCircBuf), Cache_Type_ALLD, 0);
+ Cache_wait();
+
+ // check underflow
+ if (pCb->numAfCb <= 0)
+ {
+ return PAF_DECOP_CB_READ_UNDERFLOW;
+ }
+
+ // get pointer to current audio frame in circular buffer
+ pAfCb = &pCb->afCb[pCb->afRdIdx];
+
+ // (***) FL: hackin'
+ // Invalidate audio frame
+ Cache_inv(pAfCb, sizeof(PAF_AudioFrame), Cache_Type_ALLD, 0);
+ Cache_inv(pAfCb->data.samsiz, PAF_DECOP_CB_MAX_NUM_PCM_CH*sizeof(PAF_AudioSize), Cache_Type_ALLD, 0);
+ Cache_wait();
+
+ // compute stream mask
+ streamMask = pAfRd->fxns->channelMask(pAfRd, pAfCb->channelConfigurationStream);
+
+ // Invalidate PCM data
+ for (i = 0; i < PAF_DECOP_CB_MAX_NUM_PCM_CH; i++)
+ {
+ if ((streamMask >> i) & 0x1)
+ {
+ Cache_inv(&pAfCb->data.sample[i][pCb->pcmRdIdx], pCb->pafFrameLen*sizeof(PAF_AudioData), Cache_Type_ALLD, 0);
+ }
+ }
+ Cache_wait();
+
+ // read audio frame information updated by decoder
+ pAfRd->sampleDecode = pAfCb->sampleDecode;
+ PAF_PROCESS_COPY(pAfRd->sampleProcess, pAfCb->sampleProcess);
+ pAfRd->sampleRate = pAfCb->sampleRate;
+ pAfRd->sampleCount = pCb->pafFrameLen;
+ pAfRd->channelConfigurationRequest = pAfCb->channelConfigurationRequest;
+ pAfRd->channelConfigurationStream = pAfCb->channelConfigurationStream;
+
+ // read PCM samples
+ for (i = 0; i < PAF_DECOP_CB_MAX_NUM_PCM_CH; i++)
+ {
+ if ((streamMask >> i) & 0x1)
+ {
+ for (j = 0; j < pCb->pafFrameLen; j++)
+ {
+ pAfRd->data.sample[i][j] = pAfCb->data.sample[i][pCb->pcmRdIdx+j];
+ }
+
+ pAfRd->data.samsiz[i] = pAfCb->data.samsiz[i];
+ }
+ }
+
+ pCb->pcmRdIdx += pCb->pafFrameLen; // update PCM read index
+ if (pCb->pcmRdIdx == pCb->decOpFrameLen)
+ {
+ // update audio frame read index
+ pCb->afRdIdx++;
+ if (pCb->afRdIdx >= pCb->maxNumAfCb)
+ {
+ pCb->afRdIdx = 0;
+ }
+
+ // update PCM read index
+ pCb->pcmRdIdx = 0;
+
+ // update number of audio frames in circular buffer
+ pCb->numAfCb--;
+ }
+
+ // (***) FL: hackin'
+ // Write back circular buffer configuration.
+ // NOTE: Probably only a subset of this information needs to be updated.
+ Cache_wb(pCb, sizeof(PAF_DecodeOpCircBuf), Cache_Type_ALLD, 0);
+ Cache_wait();
+
+ return PAF_DECOP_CB_SOK;
+}
+
+// Write audio frame to circular buffer
+Int cbWriteAf(
+ PAF_DecodeOpCircBuf *pCb, // decoder output circular buffer
+ PAF_AudioFrame *pAfWrt // audio frame from which to write
+)
+{
+ PAF_AudioFrame *pAfCb;
+ PAF_ChannelMask_HD streamMask;
+ Int n;
+ Int i, j;
+
+ // (***) FL: hackin'
+ // Invalidate circular buffer configuration.
+ // NOTE: Probably only a subset of this information needs to be updated.
+ Cache_inv(pCb, sizeof(PAF_DecodeOpCircBuf), Cache_Type_ALLD, 0);
+ Cache_wait();
+
+ if (pCb->cbWriteInit == FALSE)
+ {
+ // Invalidate AF circular buffer
+ Cache_inv(pCb->afCb, pCb->maxNumAfCb*sizeof(PAF_AudioFrame), Cache_Type_ALLD, 0);
+ for (n=0; n<pCb->maxNumAfCb; n++)
+ {
+ pAfCb = &pCb->afCb[n];
+ Cache_inv(pAfCb->data.sample, PAF_DECOP_CB_MAX_NUM_PCM_CH*sizeof(PAF_AudioData *), Cache_Type_ALLD, 0);
+ }
+ Cache_wait();
+
+ pCb->cbWriteInit = TRUE;
+ }
+
+ // check overflow
+ if (pCb->numAfCb >= pCb->maxNumAfCb)
+ {
+ return PAF_DECOP_CB_WRITE_OVERFLOW;
+ }
+
+ // get pointer to current audio frame in circular buffer
+ pAfCb = &pCb->afCb[pCb->afWrtIdx];
+
+ // write audio frame information updated by decoder
+ pAfCb->sampleDecode = pAfWrt->sampleDecode;
+ PAF_PROCESS_COPY(pAfCb->sampleProcess, pAfWrt->sampleProcess);
+ pAfCb->sampleRate = pAfWrt->sampleRate;
+ pAfCb->sampleCount = pAfWrt->sampleCount;
+ pAfCb->channelConfigurationRequest = pAfWrt->channelConfigurationRequest;
+ pAfCb->channelConfigurationStream = pAfWrt->channelConfigurationStream;
+
+ // write PCM samples
+ streamMask = pAfWrt->fxns->channelMask(pAfWrt, pAfCb->channelConfigurationStream);
+ for (i = 0; i < PAF_DECOP_CB_MAX_NUM_PCM_CH; i++)
+ {
+ if ((streamMask >> i) & 0x1)
+ {
+ for (j = 0; j < pCb->decOpFrameLen; j++)
+ {
+ pAfCb->data.sample[i][j] = pAfWrt->data.sample[i][j];
+ }
+
+ pAfCb->data.samsiz[i] = pAfWrt->data.samsiz[i];
+ }
+ }
+
+ // update audio frame write index
+ pCb->afWrtIdx++;
+ if (pCb->afWrtIdx >= pCb->maxNumAfCb)
+ {
+ pCb->afWrtIdx = 0;
+ }
+
+ // update number of audio frames in circular buffer
+ pCb->numAfCb++;
+
+ // (***) FL: hackin'
+ // Write back circular buffer configuration
+ Cache_wb(pCb, sizeof(PAF_DecodeOpCircBuf), Cache_Type_ALLD, 0);
+ // write back audio frame
+ Cache_wb(pAfCb, sizeof(PAF_AudioFrame), Cache_Type_ALLD, 0);
+ Cache_wb(pAfCb->data.samsiz, PAF_DECOP_CB_MAX_NUM_PCM_CH*sizeof(PAF_AudioSize), Cache_Type_ALLD, 0);
+ // write back PCM data
+ for (i = 0; i < PAF_DECOP_CB_MAX_NUM_PCM_CH; i++)
+ {
+ if ((streamMask >> i) & 0x1)
+ {
+ Cache_wb(pAfCb->data.sample[i], pCb->decOpFrameLen*sizeof(PAF_AudioData), Cache_Type_ALLD, 0);
+ }
+ }
+ Cache_wait();
+
+ return PAF_DECOP_CB_SOK;
+}
+
+// Get next audio frame to write in circular buffer
+Int cbGetNextWriteAf(
+ PAF_DecodeOpCircBuf *pCb, // decoder output circular buffer
+ PAF_AudioFrame **ppAfWrt // audio frame next to be written
+)
+{
+ // get pointer to current audio frame in circular buffer
+ *ppAfWrt = &pCb->afCb[pCb->afWrtIdx];
+
+ // update audio frame write index
+ pCb->afWrtIdx++;
+ if (pCb->afWrtIdx > pCb->maxNumAfCb)
+ {
+ pCb->afWrtIdx = 0;
+ }
+
+ return PAF_DECOP_CB_SOK;
+}
+
+Int cbLog(
+ PAF_DecodeOpCircBuf *pCb,
+ Int fullLog
+)
+{
+ Log_info4("afRdIdx=%d, pcmRdIdx=%d, afWrtIdx=%d, numAfCb=%d", pCb->afRdIdx, pCb->pcmRdIdx,
+ pCb->afWrtIdx,
+ pCb->numAfCb);
+ if (fullLog)
+ {
+ Log_info1("maxNumAfCb=%d", pCb->maxNumAfCb);
+ Log_info2("decOpFrameLen=%d, pafFrameLen=%d", pCb->decOpFrameLen, pCb->pafFrameLen);
+ Log_info1("cbWriteInit=%d", pCb->cbWriteInit);
+ }
+
+ return 0;
+}
diff --git a/procsdk_audio_x_xx_xx_xx/common/paf_decOpCircBuf.h b/procsdk_audio_x_xx_xx_xx/common/paf_decOpCircBuf.h
--- /dev/null
@@ -0,0 +1,63 @@
+#ifndef _DEC_OP_CIRC_BUF_H_
+#define _DEC_OP_CIRC_BUF_H_
+
+#include <xdc/std.h>
+#include "paftyp.h"
+
+#define PAF_DECOP_CB_SOK ( 0 ) // ok
+#define PAF_DECOP_CB_INIT_INV_SOURCE_SEL ( -1 ) // error: invalid source selection on init
+#define PAF_DECOP_CB_WRITE_OVERFLOW ( -2 ) // error: write overflow
+#define PAF_DECOP_CB_READ_UNDERFLOW ( -3 ) // error: read underflow
+
+#define PAF_DECOP_CB_MAX_NUM_AF ( 4 ) // decoder output circular buffer maximum number audio frames
+#define PAF_DECOP_CB_MAX_NUM_PCM_CH ( 16 ) // decoder output circular buffer maximum number audio PCM channels
+#define PAF_DECOP_CB_MAX_NUM_PCM_FRAMES ( 2 ) // decoder output circular buffer maximum number PCM frames
+#define PAF_DECOP_CB_MAX_PCM_FRAME_LEN ( 6*256 ) // decoder output circular buffer maximum PCM frame length
+#define PAF_DECOP_CB_PCM_BUF_SZ ( PAF_DECOP_CB_MAX_NUM_PCM_CH * PAF_DECOP_CB_MAX_NUM_PCM_FRAMES * PAF_DECOP_CB_MAX_PCM_FRAME_LEN )
+
+// Decoder output circular buffer
+typedef struct PAF_DecodeOpCircBuf {
+ PAF_AudioFrame *afCb; // audio frame circular buffer
+ PAF_AudioData *pcmBuf; // PCM buffer, contains PCM data associated with audio frames
+ Int8 afRdIdx; // audio frame circular buffer read index
+ Int8 afWrtIdx; // audio frame circular buffer write index
+ Int pcmRdIdx; // pcm buffer read index
+ Int8 numAfCb; // current number frames in circular buffer
+ Int8 maxNumAfCb; // maximum number of audio frames in circular buffer
+ Int decOpFrameLen; // selected decoder output frame length (input transaction size)
+ Int pafFrameLen; // PAF frame length (output transaction size)
+ Int cbWriteInit; // indicates whether CB write has been initialized
+} PAF_DecodeOpCircBuf;
+
+// Initialize circular buffer
+Int cbInit(
+ Int8 sourceSelect, // source select (PCM, DDP, etc.)
+ Int decOpFrameLen, // decoder output frame length
+ Int pafFrameLen, // PAF frame length
+ PAF_DecodeOpCircBuf *pCb // decoder output circular buffer
+);
+
+// Read audio frame from circular buffer
+Int cbReadAf(
+ PAF_DecodeOpCircBuf *pCb, // decoder output circular buffer
+ PAF_AudioFrame *pAfRd // audio frame into which to read
+);
+
+// Write audio frame to circular buffer
+Int cbWriteAf(
+ PAF_DecodeOpCircBuf *pCb, // decoder output circular buffer
+ PAF_AudioFrame *pAfWrt // audio frame from which to write
+);
+
+// Get next audio frame to write in circular buffer
+Int cbGetNextWriteAf(
+ PAF_DecodeOpCircBuf *pCb, // decoder output circular buffer
+ PAF_AudioFrame **ppAfWrt // audio frame next to be written
+);
+
+Int cbLog(
+ PAF_DecodeOpCircBuf *pCb,
+ Int fullLog
+);
+
+#endif /* _DEC_OP_CIRC_BUF_H_ */
diff --git a/procsdk_audio_x_xx_xx_xx/common/paf_heapMgr.c b/procsdk_audio_x_xx_xx_xx/common/paf_heapMgr.c
--- /dev/null
@@ -0,0 +1,68 @@
+#include <xdc\std.h>
+#include <xdc\runtime\IHeap.h>
+
+#include "paf_heapMgr.h"
+
+Int gPafHeapIdInt = PAF_HEAP_ID_INT;
+Int gPafHeapIdInt1 = PAF_HEAP_ID_INT1;
+Int gPafHeapIdExt = PAF_HEAP_ID_EXT;
+Int gPafHeapIdInt1Shm = PAF_HEAP_ID_INT1_SHM;
+Int gPafHeapIdExtShm = PAF_HEAP_ID_EXT_SHM;
+
+// heap handle array
+//static IHeap_Handle gHeapIdToHandle[PAF_NUM_HEAPS] =
+IHeap_Handle gHeapIdToHandle[PAF_NUM_HEAPS] =
+{
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+/* Initialize PAF heap manager */
+Void pafHeapMgr_init(
+ IHeap_Handle hIntHeap,
+ IHeap_Handle hIntHeap1,
+ IHeap_Handle hExtHeap,
+ IHeap_Handle hIntHeap1Shm,
+ IHeap_Handle hExtHeapShm
+)
+{
+ gHeapIdToHandle[PAF_HEAP_ID_INT] = hIntHeap;
+ gHeapIdToHandle[PAF_HEAP_ID_INT1] = hIntHeap1;
+ gHeapIdToHandle[PAF_HEAP_ID_EXT] = hExtHeap;
+ gHeapIdToHandle[PAF_HEAP_ID_INT1_SHM] = hIntHeap1Shm;
+ gHeapIdToHandle[PAF_HEAP_ID_EXT_SHM] = hExtHeapShm;
+}
+
+/* Write heap handle to PAF heap manager for provided index */
+Void pafHeapMgr_writeHeapHandle(
+ Int heapId,
+ IHeap_Handle hHeap
+)
+{
+ if (heapId < PAF_NUM_HEAPS)
+ {
+ gHeapIdToHandle[heapId] = hHeap;
+ }
+}
+
+/* Read heap handle from PAF heap manager for provided index */
+IHeap_Handle pafHeapMgr_readHeapHandle(
+ Int heapId
+)
+{
+ IHeap_Handle hHeap;
+
+ if (heapId < PAF_NUM_HEAPS)
+ {
+ hHeap = gHeapIdToHandle[heapId];
+ }
+ else
+ {
+ hHeap = NULL;
+ }
+
+ return hHeap;
+}
diff --git a/procsdk_audio_x_xx_xx_xx/common/paf_heapMgr.h b/procsdk_audio_x_xx_xx_xx/common/paf_heapMgr.h
--- /dev/null
@@ -0,0 +1,42 @@
+#ifndef _PSDKAF_HEAPMGR_H_
+#define _PSDKAF_HEAPMGR_H_
+
+#include <xdc/std.h>
+#include <xdc/runtime/IHeap.h>
+
+#define PAF_NUM_PRVMEM_HEAPS ( 3 )
+#define PAF_NUM_SHMEM_HEAPS ( 2 )
+#define PAF_NUM_HEAPS ( PAF_NUM_PRVMEM_HEAPS + PAF_NUM_SHMEM_HEAPS )
+#define PAF_HEAP_ID_INT ( 0 ) // L2 SRAM
+#define PAF_HEAP_ID_INT1 ( 1 ) // MSMC SRAM
+#define PAF_HEAP_ID_EXT ( 2 ) // DDR3
+#define PAF_HEAP_ID_INT1_SHM ( 3 ) // MSMC SRAM, Shared
+#define PAF_HEAP_ID_EXT_SHM ( 4 ) // DDR3, Shared
+
+extern Int gPafHeapIdInt;
+extern Int gPafHeapIdInt1;
+extern Int gPafHeapIdExt;
+extern Int gPafHeapIdInt1Shm;
+extern Int gPafHeapIdExtShm;
+
+/* Initialize PAF heap manager */
+Void pafHeapMgr_init(
+ IHeap_Handle hIntHeap,
+ IHeap_Handle hIntHeap1,
+ IHeap_Handle hExtHeap,
+ IHeap_Handle hIntHeap1Shm,
+ IHeap_Handle hExtHeapShm
+);
+
+/* Write heap handle to PAF heap manager for provided index */
+Void pafHeapMgr_writeHeapHandle(
+ Int heapId,
+ IHeap_Handle hHeap
+);
+
+/* Read heap handle from PAF heap manager for provided index */
+IHeap_Handle pafHeapMgr_readHeapHandle(
+ Int heapId
+);
+
+#endif /* _PSDKAF_HEAPMGR_H_ */
diff --git a/procsdk_audio_x_xx_xx_xx/shared/aspMsg_common.h b/procsdk_audio_x_xx_xx_xx/shared/aspMsg_common.h
--- /dev/null
@@ -0,0 +1,62 @@
+#ifndef _ASP_MSG_COMMON_H_
+#define _ASP_MSG_COMMON_H_
+
+#include <xdc/std.h>
+#include <ti/xdais/ialg.h>
+#include <ti/ipc/MessageQ.h>
+
+/* round up the value 'size' to the next 'align' boundary */
+#define ROUNDUP(size, align) \
+ (UInt32)(((UInt32)(size) + ((UInt32)(align) - 1)) & ~((UInt32)(align) - 1))
+
+#define MASTER_NAME ( "CORE0" ) // DSP is MASTER
+#define SLAVE_NAME ( "HOST" ) // ARM is SLAVE
+
+#define AspMsg_MasterMsgQueName ( "MASTER:MsgQ:01" )
+#define AspMsg_SlaveMsgQueName ( "%s:MsgQ:01" ) /* %s is each slave's Proc Name */
+
+// ASP (Master-To-)Slave Commands
+typedef enum ASP_Slave_Cmd {
+ ASP_SLAVE_NULL, // 0
+ ASP_SLAVE_START, // 1
+ ASP_SLAVE_EXIT, // 2
+ ASP_SLAVE_DEC_SOURCE_SELECT, // 3
+ ASP_SLAVE_DEC_EXIT, // 4
+ ASP_SLAVE_DEC_CONTROL, // 5
+ ASP_SLAVE_DEC_ACTIVATE, // 6
+ ASP_SLAVE_DEC_RESET, // 7
+ ASP_SLAVE_DEC_INFO, // 8
+ ASP_SLAVE_DEC_DECODE, // 9
+ ASP_SLAVE_DEC_DEACTIVATE, // 10
+ ASP_SLAVE_NCOMMANDS // 11
+} ASP_Slave_Cmd;
+
+// ASP (Slave-To-)Master Commands
+typedef enum ASP_Master_Cmd {
+ ASP_MASTER_NULL = ASP_SLAVE_NCOMMANDS, // 11
+ ASP_MASTER_START_DONE, // 12
+ ASP_MASTER_EXIT_DONE, // 13
+ ASP_MASTER_DEC_SOURCE_SELECT_DONE, // 14
+ ASP_MASTER_DEC_EXIT_DONE, // 15
+ ASP_MASTER_DEC_CONTROL_DONE, // 16
+ ASP_MASTER_DEC_ACTIVATE_DONE, // 17
+ ASP_MASTER_DEC_RESET_DONE, // 18
+ ASP_MASTER_DEC_INFO_DONE, // 19 // temp
+ ASP_MASTER_DEC_DECODE_DONE, // 20 // temp
+ ASP_MASTER_DEC_DEACTIVATE_DONE // 21
+} ASP_Master_Cmd;
+
+// ASP Message
+typedef struct ASP_Msg
+{
+ MessageQ_MsgHeader reserved;
+
+ UInt32 cmd; // command
+ UInt16 procId; // processor Id of sender
+ Uint16 expectResp; // whether response expected from receiver + align buf to 32-bit boundary
+ UInt32 messageId; // MB bit: response bit, LS 31 bits: message Id
+ Char buf[32]; // buffer for message parameters
+} ASP_Msg;
+
+
+#endif /* _ASP_MSG_COMMON_H_ */
diff --git a/procsdk_audio_x_xx_xx_xx/shared/config.bld b/procsdk_audio_x_xx_xx_xx/shared/config.bld
--- /dev/null
@@ -0,0 +1,175 @@
+/*
+ * Copyright (c) 2012-2014 Texas Instruments Incorporated - http://www.ti.com
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * * Neither the name of Texas Instruments Incorporated nor the names of
+ * its contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * ======== config.bld ========
+ *
+ */
+var Build = xdc.useModule('xdc.bld.BuildEnvironment');
+
+/* Memory Map for ti.platforms.evmTCI66AK2G02
+ *
+ * Address Size Comment
+ * -------------------------------------------------------------
+ * 0C00_0000 0008_0000 ( 512 KB) SR_MSMC (ipc:data)
+ * 0C08_0000 0004_0000 ( 256 KB) HOST_MSMC (code, data)
+ * 0C0C_0000 0004_0000 ( 256 KB) CORE_MSMC (code, data)
+ * 8000_0000 0020_0000 ( 2 MB) SR_0 (ipc)
+ * 8020_0000 0080_0000 ( 8 MB) SR_DDR3 (ipc:data)
+ * 80A0_0000 0080_0000 ( 8 MB) COMMON_DDR3 (data)
+ * 8120_0000 0400_0000 ( 64 MB) HOST_DDR3 (code, data)
+ * 8520_0000 0400_0000 ( 64 MB) CORE0_DDR3 (code, data)
+ * 8920_0000 75E0_0000 (1886 MB) DDR3 (code, data)
+ */
+
+var SR_MSMC = {
+ name: "SR_MSMC", space: "data", access: "RW",
+ base: 0x0C000000, len: 0x00080000,
+ comment: "SR MSMC Memory (512 KB)"
+ };
+
+var SR_0 = {
+ name: "SR_0", space: "data", access: "RW",
+ base: 0x80000000, len: 0x00200000,
+ comment: "SR#0 Memory"
+ };
+
+var SR_DDR3 = {
+ name: "SR_DDR3", space: "data", access: "RW",
+ base: 0x80200000, len: 0x00800000,
+ comment: "SR DDR3 Memory"
+ };
+
+var COMMON_DDR3 = {
+ name: "COMMON_DDR3", space: "data", access: "RW",
+ base: 0x80A00000, len: 0x00800000,
+ comment: "COMMON DDR3 Memory"
+ };
+
+var DDR3 = {
+ name: "DDR3", space: "code/data", access: "RW",
+ base: 0x89200000, len: 0x75E00000,
+ comment: "DDR3 Memory"
+ };
+
+// This is ARM
+Build.platformTable["ti.platforms.evmTCI66AK2G02:host"] = {
+ customMemoryMap: [
+ ["SR_MSMC", SR_MSMC],
+
+ [ "HOST_MSMC", {
+ name: "HOST_MSMC", space: "code/data", access: "RWX",
+ base: 0x0C080000, len: 0x00040000,
+ comment: "HOST MSMC SRAM"
+ }],
+
+ ["SR_0", SR_0],
+
+ ["SR_DDR3", SR_DDR3],
+
+ ["COMMON_DDR3", COMMON_DDR3],
+
+ [ "HOST_DDR3", {
+ name: "HOST_DDR3", space: "code/data", access: "RWX",
+ base: 0x81200000, len: 0x04000000,
+ comment: "HOST DDR3"
+ }],
+
+ ["DDR3", DDR3]
+ ],
+
+ codeMemory: "HOST_DDR3",
+ dataMemory: "HOST_DDR3",
+ stackMemory: "HOST_DDR3"
+};
+
+// This is DSP
+Build.platformTable["ti.platforms.evmTCI66AK2G02:core0"] = {
+ customMemoryMap: [
+ ["L2SRAM", {
+ comment: "1MB L2 SRAM/CACHE",
+ name: "L2SRAM",
+ base: 0x00800000,
+ len: 0x00100000,
+ space: "code/data",
+ access: "RWX"
+ }],
+
+ ["L1PSRAM", {
+ comment: "32KB RAM/CACHE L1 program memory",
+ name: "L1PSRAM",
+ base: 0x00E00000,
+ len: 0x00008000,
+ space: "code",
+ access: "RWX"
+ }],
+
+ ["L1DSRAM", {
+ comment: "32KB RAM/CACHE L1 data memory",
+ name: "L1DSRAM",
+ base: 0x00F00000,
+ len: 0x00008000,
+ space: "data",
+ access: "RW"
+ }],
+
+ ["SR_MSMC", SR_MSMC],
+
+ [ "CORE0_MSMC", {
+ name: "CORE0_MSMC", space: "code/data", access: "RWX",
+ base: 0x0C0C0000, len: 0x00040000,
+ comment: "CORE0 MSMC SRAM"
+ }],
+
+ ["SR_0", SR_0],
+
+ ["SR_DDR3", SR_DDR3],
+
+ ["COMMON_DDR3", COMMON_DDR3],
+
+ [ "CORE0_DDR3", {
+ name: "CORE0_DDR3", space: "code/data", access: "RWX",
+ base: 0x85200000, len: 0x04000000,
+ comment: "CORE0 DDR3"
+ }],
+
+ ["DDR3", DDR3]
+ ],
+
+ codeMemory: "CORE0_DDR3",
+ dataMemory: "CORE0_DDR3",
+ stackMemory: "CORE0_DDR3",
+
+ l1DMode: "32k",
+ l1PMode: "32k",
+ l2Mode: "256k"
+};
diff --git a/procsdk_audio_x_xx_xx_xx/shared/ipc.cfg.xs b/procsdk_audio_x_xx_xx_xx/shared/ipc.cfg.xs
--- /dev/null
@@ -0,0 +1,96 @@
+/*
+ * Copyright (c) 2012-2014 Texas Instruments Incorporated - http://www.ti.com
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * * Neither the name of Texas Instruments Incorporated nor the names of
+ * its contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * ======== ipc.cfg.xs ========
+ */
+
+/* root of the configuration object model */
+var Program = xdc.useModule('xdc.cfg.Program');
+var cfgArgs = Program.build.cfgArgs;
+
+/* configure processor names */
+var procNameAry = ["HOST", "CORE0"];
+var MultiProc = xdc.useModule('ti.sdo.utils.MultiProc');
+MultiProc.setConfig(xdc.global.procName, procNameAry);
+
+/* ipc configuration */
+var Ipc = xdc.useModule('ti.sdo.ipc.Ipc');
+Ipc.procSync = Ipc.ProcSync_PAIR;
+Ipc.sr0MemorySetup = true;
+
+/* shared region configuration */
+var SharedRegion = xdc.useModule('ti.sdo.ipc.SharedRegion');
+
+/* configure SharedRegion #0 (IPC) */
+var Sr0Mem = Program.cpu.memoryMap["SR_0"];
+
+SharedRegion.setEntryMeta(0,
+ new SharedRegion.Entry({
+ name: "SR_0",
+ base: Sr0Mem.base,
+ len: Sr0Mem.len,
+ ownerProcId: 1,
+ isValid: true,
+ cacheEnable: xdc.global.SR0_cacheEnable
+ })
+);
+
+/* configure SharedRegion #1 (MSMC) */
+var SrMsmcMem = Program.cpu.memoryMap["SR_MSMC"];
+
+SharedRegion.setEntryMeta(1,
+ new SharedRegion.Entry({
+ name: "SR_MSMC",
+ base: SrMsmcMem.base,
+ len: SrMsmcMem.len,
+ ownerProcId: 1,
+ isValid: true,
+ cacheEnable: xdc.global.SrMsmcMem_cacheEnable,
+ createHeap: true
+ })
+);
+
+/* configure SharedRegion #2 (DDR3) */
+var SrDDr3Mem = Program.cpu.memoryMap["SR_DDR3"];
+
+SharedRegion.setEntryMeta(2,
+ new SharedRegion.Entry({
+ name: "SR_DDR3",
+ base: SrDDr3Mem.base,
+ len: SrDDr3Mem.len,
+ ownerProcId: 1,
+ isValid: true,
+ cacheEnable: xdc.global.SrDDr3Mem_cacheEnable,
+ createHeap: true
+ })
+);
diff --git a/procsdk_audio_x_xx_xx_xx/test_arm/.ccsproject b/procsdk_audio_x_xx_xx_xx/test_arm/.ccsproject
--- /dev/null
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<?ccsproject version="1.0"?>
+<projectOptions>
+ <deviceVariant value="Cortex A.66AK2G02"/>
+ <deviceFamily value="TMS470"/>
+ <deviceEndianness value="little"/>
+ <codegenToolVersion value="GNU_4.8.4:Linaro"/>
+ <isElfFormat value="true"/>
+ <rts value="libc.a"/>
+ <createSlaveProjects value=""/>
+ <templateProperties value="id=com.ti.rtsc.SYSBIOS.example_43,type=rtsc,products=com.ti.rtsc.SYSBIOS,target=gnu.targets.arm.A15F,buildProfile=release,isHybrid=true,"/>
+ <isTargetManual value="false"/>
+</projectOptions>
diff --git a/procsdk_audio_x_xx_xx_xx/test_arm/.cproject b/procsdk_audio_x_xx_xx_xx/test_arm/.cproject
--- /dev/null
@@ -0,0 +1,315 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
+ <storageModule configRelations="2" moduleId="org.eclipse.cdt.core.settings">
+ <cconfiguration id="com.ti.ccstudio.buildDefinitions.TMS470.Debug.1859149112">
+ <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.ti.ccstudio.buildDefinitions.TMS470.Debug.1859149112" moduleId="org.eclipse.cdt.core.settings" name="Debug">
+ <macros>
+ <stringMacro name="FFTC_INSTALL_PATH" type="VALUE_PATH_DIR" value="C:/ti"/>
+ <stringMacro name="SA_INSTALL_PATH" type="VALUE_PATH_DIR" value="C:/ti"/>
+ <stringMacro name="PASS_INSTALL_PATH" type="VALUE_PATH_DIR" value="C:/ti"/>
+ <stringMacro name="GPIO_INSTALL_PATH" type="VALUE_PATH_DIR" value="C:/ti"/>
+ <stringMacro name="AIF2_INSTALL_PATH" type="VALUE_PATH_DIR" value="C:/ti"/>
+ <stringMacro name="CSL_INSTALL_PATH" type="VALUE_PATH_DIR" value="C:/ti"/>
+ <stringMacro name="MMCSD_INSTALL_PATH" type="VALUE_PATH_DIR" value="C:/ti"/>
+ <stringMacro name="PDK_INSTALL_PATH" type="VALUE_PATH_DIR" value="C:/ti/pdk_k2g_1_0_1/packages"/>
+ <stringMacro name="ICSS_EMAC_INSTALL_PATH" type="VALUE_PATH_DIR" value="C:/ti"/>
+ <stringMacro name="USB_INSTALL_PATH" type="VALUE_PATH_DIR" value="C:/ti"/>
+ <stringMacro name="I2C_INSTALL_PATH" type="VALUE_PATH_DIR" value="C:/ti"/>
+ <stringMacro name="CPPI_INSTALL_PATH" type="VALUE_PATH_DIR" value="C:/ti"/>
+ <stringMacro name="IQN2_INSTALL_PATH" type="VALUE_PATH_DIR" value="C:/ti"/>
+ <stringMacro name="OSAL_INSTALL_PATH" type="VALUE_PATH_DIR" value="C:/ti"/>
+ <stringMacro name="NIMU_INSTAL_PATH" type="VALUE_PATH_DIR" value="C:/ti"/>
+ <stringMacro name="PCIE_INSTALL_PATH" type="VALUE_PATH_DIR" value="C:/ti"/>
+ <stringMacro name="NIMU_ICSS_INSTALL_PATH" type="VALUE_PATH_DIR" value="C:/ti"/>
+ <stringMacro name="TCP3D_INSTALL_PATH" type="VALUE_PATH_DIR" value="C:/ti"/>
+ <stringMacro name="QMSS_INSTALL_PATH" type="VALUE_PATH_DIR" value="C:/ti"/>
+ <stringMacro name="BCP_INSTALL_PATH" type="VALUE_PATH_DIR" value="C:/ti"/>
+ <stringMacro name="IQN_INSTALL_PATH" type="VALUE_PATH_DIR" value="C:/ti"/>
+ <stringMacro name="PKTLIB_INSTALL_PATH" type="VALUE_PATH_DIR" value="C:/ti"/>
+ <stringMacro name="SRIO_INSTALL_PATH" type="VALUE_PATH_DIR" value="C:/ti"/>
+ <stringMacro name="PRUSS_INSTALL_PATH" type="VALUE_PATH_DIR" value="C:/ti"/>
+ <stringMacro name="DFE_INSTALL_PATH" type="VALUE_PATH_DIR" value="C:/ti"/>
+ <stringMacro name="PROCSDK_AUDIO_ROOT" type="VALUE_PATH_DIR" value="C:/ti/procsdk_audio_x_xx_xx_xx"/>
+ <stringMacro name="UART_INSTALL_PATH" type="VALUE_PATH_DIR" value="C:/ti"/>
+ <stringMacro name="FATFS_INSTALL_PATH" type="VALUE_PATH_DIR" value="C:/ti"/>
+ <stringMacro name="SBL_BOOT_INSTALL_PATH" type="VALUE_PATH_DIR" value="C:/ti"/>
+ <stringMacro name="BOARD_INSTALL_PATH" type="VALUE_PATH_DIR" value="C:/ti"/>
+ <stringMacro name="NWAL_INSTALL_PATH" type="VALUE_PATH_DIR" value="C:/ti"/>
+ <stringMacro name="SPI_INSTALL_PATH" type="VALUE_PATH_DIR" value="C:/ti"/>
+ </macros>
+ <externalSettings/>
+ <extensions>
+ <extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.rtsc.xdctools.parsers.ErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="com.ti.ccstudio.binaryparser.CoffParser" point="org.eclipse.cdt.core.BinaryParser"/>
+ </extensions>
+ </storageModule>
+ <storageModule moduleId="cdtBuildSystem" version="4.0.0">
+ <configuration artifactExtension="out" artifactName="${ProjName}" buildProperties="" cleanCommand="${CG_CLEAN_CMD}" description="" errorParsers="org.eclipse.rtsc.xdctools.parsers.ErrorParser;org.eclipse.cdt.core.GmakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;org.eclipse.cdt.core.GASErrorParser;org.eclipse.cdt.core.GLDErrorParser" id="com.ti.ccstudio.buildDefinitions.TMS470.Debug.1859149112" name="Debug" parent="com.ti.ccstudio.buildDefinitions.TMS470.Debug" postbuildStep="" prebuildStep="">
+ <folderInfo id="com.ti.ccstudio.buildDefinitions.TMS470.Debug.1859149112." name="/" resourcePath="">
+ <toolChain id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.exe.DebugToolchain.674239824" name="TI Build Tools" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.exe.DebugToolchain" targetTool="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.exe.linkerDebug.1772732929">
+ <option id="com.ti.ccstudio.buildDefinitions.core.OPT_TAGS.1822087327" superClass="com.ti.ccstudio.buildDefinitions.core.OPT_TAGS" valueType="stringList">
+ <listOptionValue builtIn="false" value="DEVICE_CONFIGURATION_ID=Cortex A.66AK2G02"/>
+ <listOptionValue builtIn="false" value="DEVICE_ENDIANNESS=little"/>
+ <listOptionValue builtIn="false" value="OUTPUT_FORMAT=ELF"/>
+ <listOptionValue builtIn="false" value="CCS_MBS_VERSION=5.5.0"/>
+ <listOptionValue builtIn="false" value="LINKER_COMMAND_FILE="/>
+ <listOptionValue builtIn="false" value="RUNTIME_SUPPORT_LIBRARY=libc.a"/>
+ <listOptionValue builtIn="false" value="RTSC_MBS_VERSION=2.2.0"/>
+ <listOptionValue builtIn="false" value="XDC_VERSION=3.32.0.06_core"/>
+ <listOptionValue builtIn="false" value="RTSC_PRODUCTS=com.ti.rtsc.IPC:3.43.0.00_eng;com.ti.rtsc.SYSBIOS:6.45.1.29;com.ti.uia:2.0.3.43;com.ti.rtsc.XDAIS:7.24.0.04;"/>
+ <listOptionValue builtIn="false" value="EXPANDED_REPOS="/>
+ <listOptionValue builtIn="false" value="OUTPUT_TYPE=rtscApplication:executable"/>
+ </option>
+ <option id="com.ti.ccstudio.buildDefinitions.core.OPT_CODEGEN_VERSION.1106749875" name="Compiler version" superClass="com.ti.ccstudio.buildDefinitions.core.OPT_CODEGEN_VERSION" value="GNU_4.8.4:Linaro" valueType="string"/>
+ <targetPlatform id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.exe.targetPlatformDebug.1028544156" name="Platform" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.exe.targetPlatformDebug"/>
+ <builder buildPath="${BuildDirectory}" id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.exe.builderDebug.1343470269" keepEnvironmentInBuildfile="false" name="GNU Make" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.exe.builderDebug"/>
+ <tool id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.exe.compilerDebug.1227706836" name="GNU Compiler" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.exe.compilerDebug">
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.compilerID.DEFINE.1708873009" name="Define symbols (-D)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.compilerID.DEFINE" valueType="definedSymbols">
+ <listOptionValue builtIn="false" value="k2g02"/>
+ <listOptionValue builtIn="false" value="arm0"/>
+ <listOptionValue builtIn="false" value="ARMCOMPILE"/>
+ <listOptionValue builtIn="false" value="PAF_DEVICE=0xDA000000"/>
+ <listOptionValue builtIn="false" value="far="/>
+ </option>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.compilerID.MCPU.1180163032" name="Target CPU (-mcpu)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.compilerID.MCPU" value="cortex-a15" valueType="string"/>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.compilerID.MTUNE.1670792469" name="Tune code for the given processor (-mtune)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.compilerID.MTUNE" value="cortex-a15" valueType="string"/>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.compilerID.CODE_STATE.208949821" name="Code state" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.compilerID.CODE_STATE" value="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.compilerID.CODE_STATE.ARM" valueType="enumerated"/>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.compilerID.DEBUG.2062174578" name="Generate debug information (-g)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.compilerID.DEBUG" value="true" valueType="boolean"/>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.compilerID.STRICT_DWARF.92725114" name="Do not emit DWARF additions beyond selected version (-gstrict-dwarf)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.compilerID.STRICT_DWARF" value="true" valueType="boolean"/>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.compilerID.DWARF_VERSION.1855168378" name="Generate debug information in DWARF version (-gdwarf-)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.compilerID.DWARF_VERSION" value="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.compilerID.DWARF_VERSION.3" valueType="enumerated"/>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.compilerID.INCLUDE_PATH.2049662485" name="Include paths (-I)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.compilerID.INCLUDE_PATH" valueType="includePath">
+ <listOptionValue builtIn="false" value=""${CG_TOOL_INCLUDE_PATH}""/>
+ <listOptionValue builtIn="false" value=""${PROCSDK_AUDIO_ROOT}/packages""/>
+ <listOptionValue builtIn="false" value=""${PROCSDK_AUDIO_ROOT}/paf/pa/asp/com""/>
+ <listOptionValue builtIn="false" value=""${PROCSDK_AUDIO_ROOT}/paf/pa/asp/std""/>
+ <listOptionValue builtIn="false" value=""${PROCSDK_AUDIO_ROOT}/paf/pa/dec/com""/>
+ <listOptionValue builtIn="false" value=""${PROCSDK_AUDIO_ROOT}/paf/pa/dec/pcm1/alg""/>
+ <listOptionValue builtIn="false" value=""${PROCSDK_AUDIO_ROOT}/paf/pa/dec/pcm1/include""/>
+ <listOptionValue builtIn="false" value=""${PROCSDK_AUDIO_ROOT}/paf/pa/sio/acp1""/>
+ <listOptionValue builtIn="false" value=""${PROCSDK_AUDIO_ROOT}/paf/pa/sio/paf""/>
+ <listOptionValue builtIn="false" value=""${PROCSDK_AUDIO_ROOT}/paf/pa/f/s3""/>
+ <listOptionValue builtIn="false" value=""${PROCSDK_AUDIO_ROOT}/paf/pa/f/include""/>
+ <listOptionValue builtIn="false" value=""${PROCSDK_AUDIO_ROOT}/paf/pa/f/alpha""/>
+ <listOptionValue builtIn="false" value=""${PROCSDK_AUDIO_ROOT}/common""/>
+ <listOptionValue builtIn="false" value=""${PROCSDK_AUDIO_ROOT}/shared""/>
+ <listOptionValue builtIn="false" value=""${PROCSDK_AUDIO_ROOT}/test_dsp/sio""/>
+ <listOptionValue builtIn="false" value=""${PROCSDK_AUDIO_ROOT}/test_dsp/sio_dev2""/>
+ <listOptionValue builtIn="false" value=""${PROCSDK_AUDIO_ROOT}/paf/pa/util/c67x_cintrins""/>
+ <listOptionValue builtIn="false" value=""${PROCSDK_AUDIO_ROOT}/ddp/Dolby_Digital_Plus_Decoder_Imp/Source_Code/alg""/>
+ <listOptionValue builtIn="false" value=""${PROCSDK_AUDIO_ROOT}/ddp/Dolby_Digital_Plus_Decoder_Imp/Source_Code/include""/>
+ </option>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.compilerID.MFLOAT_ABI.576208136" name="Specify if floating point hardware should be used (-mfloat-abi)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.compilerID.MFLOAT_ABI" value="hard" valueType="string"/>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.compilerID.OTHER_PREPROC_FLAGS.1983639225" name="Other preprocessor flags (-Xpreprocessor)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.compilerID.OTHER_PREPROC_FLAGS"/>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.compilerID.NOWARN.216809841" name="Suppress warnings (-w)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.compilerID.NOWARN" value="false" valueType="boolean"/>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.compilerID.ALLWARN.1589681891" name="Enable most warning messages (-Wall)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.compilerID.ALLWARN" value="true" valueType="boolean"/>
+ <inputType id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.compiler.inputType__C_SRCS.1257622403" name="C Sources" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.compiler.inputType__C_SRCS"/>
+ <inputType id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.compiler.inputType__CPP_SRCS.1477518917" name="C++ Sources" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.compiler.inputType__CPP_SRCS"/>
+ <inputType id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.compiler.inputType__ASM_SRCS.1367340660" name="Assembly Sources" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.compiler.inputType__ASM_SRCS"/>
+ </tool>
+ <tool id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.exe.linkerDebug.1772732929" name="GNU Linker" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.exe.linkerDebug">
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.linkerID.DEFSYM.1990755153" name="Define a symbol (--defsym)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.linkerID.DEFSYM" valueType="stringList">
+ <listOptionValue builtIn="false" value="ARM_CORE=1"/>
+ <listOptionValue builtIn="false" value="STACKSIZE=0x10000"/>
+ <listOptionValue builtIn="false" value="HEAPSIZE=0x400"/>
+ </option>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.linkerID.OUTPUT_FILE.2097714527" name="Output file (-o)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.linkerID.OUTPUT_FILE" value=""${ProjName}.out"" valueType="string"/>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.linkerID.MAP_FILE.1370331025" name="Write a map file (-Map)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.linkerID.MAP_FILE" value=""${ProjName}.map"" valueType="string"/>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.linkerID.LIBRARY.2054026216" name="Libraries (-l, --library)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.linkerID.LIBRARY" valueType="libs">
+ <listOptionValue builtIn="false" value=""gcc""/>
+ <listOptionValue builtIn="false" value=""m""/>
+ <listOptionValue builtIn="false" value=""nosys""/>
+ <listOptionValue builtIn="false" value=""c""/>
+ </option>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.linkerID.NOSTARTFILES.1010281651" name="Do not use the standard system startup files when linking (-nostartfiles)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.linkerID.NOSTARTFILES" value="true" valueType="boolean"/>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.linkerID.STATIC.1145307066" name="Do not link with the shared libraries (-static)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.linkerID.STATIC" value="true" valueType="boolean"/>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.linkerID.GC_SECTIONS.232328193" name="Remove unused sections (--gc-sections)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.linkerID.GC_SECTIONS" value="true" valueType="boolean"/>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.linkerID.SEARCH_PATH.527167736" name="Library search path (-L, --library-path)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.linkerID.SEARCH_PATH" valueType="libPaths">
+ <listOptionValue builtIn="false" value=""${xdc_find:gnu/targets/arm/libs/install-native/arm-none-eabi/lib/fpu:${ProjName}}""/>
+ </option>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.linkerID.SCRIPTS.2043320382" name="Linker command files (-T, --script)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.linkerID.SCRIPTS" valueType="libs">
+ <listOptionValue builtIn="false" value=""${PROCSDK_AUDIO_ROOT}/test_arm/application/app.cmd""/>
+ </option>
+ <inputType id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.exeLinker.inputType__CMD_SRCS.1439870174" name="Linker Command Files" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.exeLinker.inputType__CMD_SRCS"/>
+ <inputType id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.exeLinker.inputType__CMD2_SRCS.2053444062" name="Linker Command Files" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.exeLinker.inputType__CMD2_SRCS"/>
+ <inputType id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.exeLinker.inputType__GEN_CMDS.14648911" name="Generated Linker Command Files" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.exeLinker.inputType__GEN_CMDS"/>
+ </tool>
+ <tool id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.hex.578276684" name="GNU Objcopy Utility" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.hex"/>
+ <tool id="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.1108422400" name="XDCtools" superClass="com.ti.rtsc.buildDefinitions.XDC_3.16.tool">
+ <option id="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.CODEGEN_TOOL_DIR.1759178110" name="Compiler tools directory (-c)" superClass="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.CODEGEN_TOOL_DIR" value=""${CG_TOOL_ROOT}"" valueType="string"/>
+ <option id="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.TARGET.233155794" name="Target (-t)" superClass="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.TARGET" value="gnu.targets.arm.A15F" valueType="string"/>
+ <option id="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.PLATFORM.761924061" name="Platform (-p)" superClass="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.PLATFORM" value="ti.platforms.evmTCI66AK2G02:host" valueType="string"/>
+ <option id="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.PLATFORM_RAW.47051977" name="Platform (-p)" superClass="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.PLATFORM_RAW" value="ti.platforms.evmTCI66AK2G02" valueType="string"/>
+ <option id="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.BUILD_PROFILE.1815558140" name="Build-profile (-r)" superClass="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.BUILD_PROFILE" value="release" valueType="string"/>
+ <option id="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.XDC_PATH.1954753218" name="Package repositories (--xdcpath)" superClass="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.XDC_PATH" valueType="stringList">
+ <listOptionValue builtIn="false" value=""${BIOS_CG_ROOT}/packages""/>
+ <listOptionValue builtIn="false" value=""${COM_TI_UIA_INSTALL_DIR}/packages""/>
+ <listOptionValue builtIn="false" value=""${XDAIS_CG_ROOT}/packages""/>
+ <listOptionValue builtIn="false" value=""${XDAIS_CG_ROOT}/examples""/>
+ <listOptionValue builtIn="false" value=""${IPC_CG_ROOT}/packages""/>
+ <listOptionValue builtIn="false" value=""${TARGET_CONTENT_BASE}""/>
+ </option>
+ <option id="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.JAVA_PROPERTIES.1206887698" name="Java properties (-D)" superClass="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.JAVA_PROPERTIES" valueType="stringList">
+ <listOptionValue builtIn="false" value="xdc.platform.custom.check=false"/>
+ <listOptionValue builtIn="false" value="ProjName=pa_i13_evmk2g_arm"/>
+ </option>
+ <option id="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.BUILD_CONFIGURATION_FILE.1366602239" name="Build configuration file (-b)" superClass="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.BUILD_CONFIGURATION_FILE" value="${PROCSDK_AUDIO_ROOT}/shared/config.bld" valueType="string"/>
+ <option id="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.CFG_ARGS.593412547" name="Configuration script arguments (--cfgArgs)" superClass="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.CFG_ARGS" value=""{ profile: \"debug\" }"" valueType="string"/>
+ </tool>
+ </toolChain>
+ </folderInfo>
+ <sourceEntries>
+ <entry excluding="application/src|src" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
+ </sourceEntries>
+ </configuration>
+ </storageModule>
+ <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+ </cconfiguration>
+ <cconfiguration id="com.ti.ccstudio.buildDefinitions.TMS470.Release.1022052129">
+ <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.ti.ccstudio.buildDefinitions.TMS470.Release.1022052129" moduleId="org.eclipse.cdt.core.settings" name="Release">
+ <macros>
+ <stringMacro name="FFTC_INSTALL_PATH" type="VALUE_PATH_DIR" value="C:/ti"/>
+ <stringMacro name="SA_INSTALL_PATH" type="VALUE_PATH_DIR" value="C:/ti"/>
+ <stringMacro name="PASS_INSTALL_PATH" type="VALUE_PATH_DIR" value="C:/ti"/>
+ <stringMacro name="GPIO_INSTALL_PATH" type="VALUE_PATH_DIR" value="C:/ti"/>
+ <stringMacro name="AIF2_INSTALL_PATH" type="VALUE_PATH_DIR" value="C:/ti"/>
+ <stringMacro name="CSL_INSTALL_PATH" type="VALUE_PATH_DIR" value="C:/ti"/>
+ <stringMacro name="MMCSD_INSTALL_PATH" type="VALUE_PATH_DIR" value="C:/ti"/>
+ <stringMacro name="PDK_INSTALL_PATH" type="VALUE_PATH_DIR" value="C:/ti/pdk_k2g_1_0_1/packages"/>
+ <stringMacro name="ICSS_EMAC_INSTALL_PATH" type="VALUE_PATH_DIR" value="C:/ti"/>
+ <stringMacro name="USB_INSTALL_PATH" type="VALUE_PATH_DIR" value="C:/ti"/>
+ <stringMacro name="I2C_INSTALL_PATH" type="VALUE_PATH_DIR" value="C:/ti"/>
+ <stringMacro name="CPPI_INSTALL_PATH" type="VALUE_PATH_DIR" value="C:/ti"/>
+ <stringMacro name="IQN2_INSTALL_PATH" type="VALUE_PATH_DIR" value="C:/ti"/>
+ <stringMacro name="OSAL_INSTALL_PATH" type="VALUE_PATH_DIR" value="C:/ti"/>
+ <stringMacro name="NIMU_INSTAL_PATH" type="VALUE_PATH_DIR" value="C:/ti"/>
+ <stringMacro name="PCIE_INSTALL_PATH" type="VALUE_PATH_DIR" value="C:/ti"/>
+ <stringMacro name="NIMU_ICSS_INSTALL_PATH" type="VALUE_PATH_DIR" value="C:/ti"/>
+ <stringMacro name="TCP3D_INSTALL_PATH" type="VALUE_PATH_DIR" value="C:/ti"/>
+ <stringMacro name="QMSS_INSTALL_PATH" type="VALUE_PATH_DIR" value="C:/ti"/>
+ <stringMacro name="BCP_INSTALL_PATH" type="VALUE_PATH_DIR" value="C:/ti"/>
+ <stringMacro name="IQN_INSTALL_PATH" type="VALUE_PATH_DIR" value="C:/ti"/>
+ <stringMacro name="PKTLIB_INSTALL_PATH" type="VALUE_PATH_DIR" value="C:/ti"/>
+ <stringMacro name="SRIO_INSTALL_PATH" type="VALUE_PATH_DIR" value="C:/ti"/>
+ <stringMacro name="PRUSS_INSTALL_PATH" type="VALUE_PATH_DIR" value="C:/ti"/>
+ <stringMacro name="DFE_INSTALL_PATH" type="VALUE_PATH_DIR" value="C:/ti"/>
+ <stringMacro name="PROCSDK_AUDIO_ROOT" type="VALUE_PATH_DIR" value="C:/ti/procsdk_audio_x_xx_xx_xx"/>
+ <stringMacro name="UART_INSTALL_PATH" type="VALUE_PATH_DIR" value="C:/ti"/>
+ <stringMacro name="FATFS_INSTALL_PATH" type="VALUE_PATH_DIR" value="C:/ti"/>
+ <stringMacro name="SBL_BOOT_INSTALL_PATH" type="VALUE_PATH_DIR" value="C:/ti"/>
+ <stringMacro name="BOARD_INSTALL_PATH" type="VALUE_PATH_DIR" value="C:/ti"/>
+ <stringMacro name="NWAL_INSTALL_PATH" type="VALUE_PATH_DIR" value="C:/ti"/>
+ <stringMacro name="SPI_INSTALL_PATH" type="VALUE_PATH_DIR" value="C:/ti"/>
+ </macros>
+ <externalSettings/>
+ <extensions>
+ <extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.rtsc.xdctools.parsers.ErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="com.ti.ccstudio.binaryparser.CoffParser" point="org.eclipse.cdt.core.BinaryParser"/>
+ </extensions>
+ </storageModule>
+ <storageModule moduleId="cdtBuildSystem" version="4.0.0">
+ <configuration artifactExtension="out" artifactName="${ProjName}" buildProperties="" cleanCommand="${CG_CLEAN_CMD}" description="" errorParsers="org.eclipse.rtsc.xdctools.parsers.ErrorParser;org.eclipse.cdt.core.GmakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;org.eclipse.cdt.core.GASErrorParser;org.eclipse.cdt.core.GLDErrorParser" id="com.ti.ccstudio.buildDefinitions.TMS470.Release.1022052129" name="Release" parent="com.ti.ccstudio.buildDefinitions.TMS470.Release" postbuildStep="" prebuildStep="">
+ <folderInfo id="com.ti.ccstudio.buildDefinitions.TMS470.Release.1022052129." name="/" resourcePath="">
+ <toolChain id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.exe.ReleaseToolchain.1287062990" name="TI Build Tools" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.exe.ReleaseToolchain" targetTool="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.exe.linkerRelease.1878063989">
+ <option id="com.ti.ccstudio.buildDefinitions.core.OPT_TAGS.2044542616" superClass="com.ti.ccstudio.buildDefinitions.core.OPT_TAGS" valueType="stringList">
+ <listOptionValue builtIn="false" value="DEVICE_CONFIGURATION_ID=Cortex A.66AK2G02"/>
+ <listOptionValue builtIn="false" value="DEVICE_ENDIANNESS=little"/>
+ <listOptionValue builtIn="false" value="OUTPUT_FORMAT=ELF"/>
+ <listOptionValue builtIn="false" value="CCS_MBS_VERSION=5.5.0"/>
+ <listOptionValue builtIn="false" value="LINKER_COMMAND_FILE="/>
+ <listOptionValue builtIn="false" value="RUNTIME_SUPPORT_LIBRARY=libc.a"/>
+ <listOptionValue builtIn="false" value="RTSC_MBS_VERSION=2.2.0"/>
+ <listOptionValue builtIn="false" value="XDC_VERSION=3.32.0.06_core"/>
+ <listOptionValue builtIn="false" value="RTSC_PRODUCTS=com.ti.rtsc.SYSBIOS:6.45.1.29;com.ti.uia:2.0.3.43;"/>
+ <listOptionValue builtIn="false" value="EXPANDED_REPOS="/>
+ <listOptionValue builtIn="false" value="OUTPUT_TYPE=rtscApplication:executable"/>
+ </option>
+ <option id="com.ti.ccstudio.buildDefinitions.core.OPT_CODEGEN_VERSION.171604478" superClass="com.ti.ccstudio.buildDefinitions.core.OPT_CODEGEN_VERSION" value="GNU_4.8.4:Linaro" valueType="string"/>
+ <targetPlatform id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.exe.targetPlatformRelease.1310759009" name="Platform" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.exe.targetPlatformRelease"/>
+ <builder buildPath="${BuildDirectory}" id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.exe.builderRelease.96146123" name="GNU Make.Release" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.exe.builderRelease"/>
+ <tool id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.exe.compilerRelease.1785492850" name="GNU Compiler" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.exe.compilerRelease">
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.compilerID.DEFINE.2040421765" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.compilerID.DEFINE" valueType="definedSymbols">
+ <listOptionValue builtIn="false" value="k2g02"/>
+ <listOptionValue builtIn="false" value="arm0"/>
+ </option>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.compilerID.MCPU.1911683080" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.compilerID.MCPU" value="cortex-a15" valueType="string"/>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.compilerID.MTUNE.984143956" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.compilerID.MTUNE" value="cortex-a15" valueType="string"/>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.compilerID.CODE_STATE.1039877330" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.compilerID.CODE_STATE" value="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.compilerID.CODE_STATE.ARM" valueType="enumerated"/>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.compilerID.INCLUDE_PATH.295112765" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.compilerID.INCLUDE_PATH" valueType="includePath">
+ <listOptionValue builtIn="false" value=""${CG_TOOL_INCLUDE_PATH}""/>
+ </option>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.compilerID.MFLOAT_ABI.2126896900" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.compilerID.MFLOAT_ABI" value="hard" valueType="string"/>
+ <inputType id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.compiler.inputType__C_SRCS.398783393" name="C Sources" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.compiler.inputType__C_SRCS"/>
+ <inputType id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.compiler.inputType__CPP_SRCS.1350136317" name="C++ Sources" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.compiler.inputType__CPP_SRCS"/>
+ <inputType id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.compiler.inputType__ASM_SRCS.469726745" name="Assembly Sources" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.compiler.inputType__ASM_SRCS"/>
+ </tool>
+ <tool id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.exe.linkerRelease.1878063989" name="GNU Linker" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.exe.linkerRelease">
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.linkerID.DEFSYM.1538224789" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.linkerID.DEFSYM" valueType="stringList">
+ <listOptionValue builtIn="false" value="ARM_CORE=1"/>
+ <listOptionValue builtIn="false" value="STACKSIZE=0x10000"/>
+ <listOptionValue builtIn="false" value="HEAPSIZE=0x400"/>
+ </option>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.linkerID.OUTPUT_FILE.2054356651" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.linkerID.OUTPUT_FILE" value=""${ProjName}.out"" valueType="string"/>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.linkerID.MAP_FILE.1015745917" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.linkerID.MAP_FILE" value=""${ProjName}.map"" valueType="string"/>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.linkerID.LIBRARY.1915363591" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.linkerID.LIBRARY" valueType="libs">
+ <listOptionValue builtIn="false" value=""gcc""/>
+ <listOptionValue builtIn="false" value=""m""/>
+ <listOptionValue builtIn="false" value=""nosys""/>
+ <listOptionValue builtIn="false" value=""c""/>
+ </option>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.linkerID.NOSTARTFILES.1228675558" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.linkerID.NOSTARTFILES" value="true" valueType="boolean"/>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.linkerID.STATIC.1528320405" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.linkerID.STATIC" value="true" valueType="boolean"/>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.linkerID.GC_SECTIONS.1653219347" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.linkerID.GC_SECTIONS" value="true" valueType="boolean"/>
+ <option id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.linkerID.SEARCH_PATH.491248426" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.linkerID.SEARCH_PATH" valueType="libPaths">
+ <listOptionValue builtIn="false" value=""${xdc_find:gnu/targets/arm/libs/install-native/arm-none-eabi/lib/fpu:${ProjName}}""/>
+ </option>
+ <inputType id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.exeLinker.inputType__CMD_SRCS.200987645" name="Linker Command Files" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.exeLinker.inputType__CMD_SRCS"/>
+ <inputType id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.exeLinker.inputType__CMD2_SRCS.398435472" name="Linker Command Files" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.exeLinker.inputType__CMD2_SRCS"/>
+ <inputType id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.exeLinker.inputType__GEN_CMDS.1742684503" name="Generated Linker Command Files" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.exeLinker.inputType__GEN_CMDS"/>
+ </tool>
+ <tool id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.hex.58897168" name="GNU Objcopy Utility" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_4.0.hex"/>
+ <tool id="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.1188116819" name="XDCtools" superClass="com.ti.rtsc.buildDefinitions.XDC_3.16.tool">
+ <option id="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.CODEGEN_TOOL_DIR.524339146" superClass="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.CODEGEN_TOOL_DIR" value=""${CG_TOOL_ROOT}"" valueType="string"/>
+ <option id="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.TARGET.20052065" superClass="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.TARGET" value="gnu.targets.arm.A15F" valueType="string"/>
+ <option id="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.PLATFORM.818273957" superClass="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.PLATFORM" value="ti.platforms.evmTCI66AK2G02" valueType="string"/>
+ <option id="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.PLATFORM_RAW.16659581" superClass="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.PLATFORM_RAW" value="ti.platforms.evmTCI66AK2G02" valueType="string"/>
+ <option id="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.BUILD_PROFILE.1240299632" superClass="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.BUILD_PROFILE" value="release" valueType="string"/>
+ <option id="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.XDC_PATH.1150486285" superClass="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.XDC_PATH" valueType="stringList">
+ <listOptionValue builtIn="false" value="${BIOS_CG_ROOT}/packages"/>
+ <listOptionValue builtIn="false" value="${COM_TI_UIA_INSTALL_DIR}/packages"/>
+ <listOptionValue builtIn="false" value="${TARGET_CONTENT_BASE}"/>
+ </option>
+ <option id="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.BUILD_CONFIGURATION_FILE.704905412" superClass="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.BUILD_CONFIGURATION_FILE" value=""${PROJECT_ROOT}/config.bld"" valueType="string"/>
+ </tool>
+ </toolChain>
+ </folderInfo>
+ <sourceEntries>
+ <entry excluding="application/src|src|66AK2Gxx.lds" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
+ </sourceEntries>
+ </configuration>
+ </storageModule>
+ <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+ </cconfiguration>
+ </storageModule>
+ <storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
+ <storageModule moduleId="cdtBuildSystem" version="4.0.0">
+ <project id="test_arm.com.ti.ccstudio.buildDefinitions.TMS470.ProjectType.263593260" name="ARM" projectType="com.ti.ccstudio.buildDefinitions.TMS470.ProjectType"/>
+ </storageModule>
+ <storageModule moduleId="scannerConfiguration"/>
+ <storageModule moduleId="org.eclipse.cdt.core.language.mapping">
+ <project-mappings>
+ <content-type-mapping configuration="" content-type="org.eclipse.cdt.core.asmSource" language="com.ti.ccstudio.core.TIASMLanguage"/>
+ <content-type-mapping configuration="" content-type="org.eclipse.cdt.core.cHeader" language="com.ti.ccstudio.core.TIGCCLanguage"/>
+ <content-type-mapping configuration="" content-type="org.eclipse.cdt.core.cSource" language="com.ti.ccstudio.core.TIGCCLanguage"/>
+ <content-type-mapping configuration="" content-type="org.eclipse.cdt.core.cxxHeader" language="com.ti.ccstudio.core.TIGPPLanguage"/>
+ <content-type-mapping configuration="" content-type="org.eclipse.cdt.core.cxxSource" language="com.ti.ccstudio.core.TIGPPLanguage"/>
+ </project-mappings>
+ </storageModule>
+</cproject>
diff --git a/procsdk_audio_x_xx_xx_xx/test_arm/.project b/procsdk_audio_x_xx_xx_xx/test_arm/.project
--- /dev/null
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>test_arm</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
+ <triggers>full,incremental,</triggers>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.rtsc.xdctools.buildDefinitions.XDC.xdcNature</nature>
+ <nature>com.ti.ccstudio.core.ccsNature</nature>
+ <nature>org.eclipse.cdt.core.cnature</nature>
+ <nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
+ <nature>org.eclipse.cdt.core.ccnature</nature>
+ <nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
+ </natures>
+ <linkedResources>
+ <link>
+ <name>common</name>
+ <type>2</type>
+ <locationURI>PROCSDK_AUDIO_ROOT/common</locationURI>
+ </link>
+ </linkedResources>
+ <variableList>
+ <variable>
+ <name>AIF2_INSTALL_PATH</name>
+ <value>file:/C:/ti</value>
+ </variable>
+ <variable>
+ <name>BCP_INSTALL_PATH</name>
+ <value>file:/C:/ti</value>
+ </variable>
+ <variable>
+ <name>BOARD_INSTALL_PATH</name>
+ <value>file:/C:/ti</value>
+ </variable>
+ <variable>
+ <name>CPPI_INSTALL_PATH</name>
+ <value>file:/C:/ti</value>
+ </variable>
+ <variable>
+ <name>CSL_INSTALL_PATH</name>
+ <value>file:/C:/ti</value>
+ </variable>
+ <variable>
+ <name>DFE_INSTALL_PATH</name>
+ <value>file:/C:/ti</value>
+ </variable>
+ <variable>
+ <name>FATFS_INSTALL_PATH</name>
+ <value>file:/C:/ti</value>
+ </variable>
+ <variable>
+ <name>FFTC_INSTALL_PATH</name>
+ <value>file:/C:/ti</value>
+ </variable>
+ <variable>
+ <name>GPIO_INSTALL_PATH</name>
+ <value>file:/C:/ti</value>
+ </variable>
+ <variable>
+ <name>I2C_INSTALL_PATH</name>
+ <value>file:/C:/ti</value>
+ </variable>
+ <variable>
+ <name>ICSS_EMAC_INSTALL_PATH</name>
+ <value>file:/C:/ti</value>
+ </variable>
+ <variable>
+ <name>IQN2_INSTALL_PATH</name>
+ <value>file:/C:/ti</value>
+ </variable>
+ <variable>
+ <name>IQN_INSTALL_PATH</name>
+ <value>file:/C:/ti</value>
+ </variable>
+ <variable>
+ <name>MMCSD_INSTALL_PATH</name>
+ <value>file:/C:/ti</value>
+ </variable>
+ <variable>
+ <name>NIMU_ICSS_INSTALL_PATH</name>
+ <value>file:/C:/ti</value>
+ </variable>
+ <variable>
+ <name>NIMU_INSTAL_PATH</name>
+ <value>file:/C:/ti</value>
+ </variable>
+ <variable>
+ <name>NWAL_INSTALL_PATH</name>
+ <value>file:/C:/ti</value>
+ </variable>
+ <variable>
+ <name>OSAL_INSTALL_PATH</name>
+ <value>file:/C:/ti</value>
+ </variable>
+ <variable>
+ <name>PASS_INSTALL_PATH</name>
+ <value>file:/C:/ti</value>
+ </variable>
+ <variable>
+ <name>PCIE_INSTALL_PATH</name>
+ <value>file:/C:/ti</value>
+ </variable>
+ <variable>
+ <name>PDK_INSTALL_PATH</name>
+ <value>file:/C:/ti/pdk_k2g_1_0_1/packages</value>
+ </variable>
+ <variable>
+ <name>PKTLIB_INSTALL_PATH</name>
+ <value>file:/C:/ti</value>
+ </variable>
+ <variable>
+ <name>PROCSDK_AUDIO_ROOT</name>
+ <value>file:/C:/ti/procsdk_audio_x_xx_xx_xx</value>
+ </variable>
+ <variable>
+ <name>PRUSS_INSTALL_PATH</name>
+ <value>file:/C:/ti</value>
+ </variable>
+ <variable>
+ <name>QMSS_INSTALL_PATH</name>
+ <value>file:/C:/ti</value>
+ </variable>
+ <variable>
+ <name>SA_INSTALL_PATH</name>
+ <value>file:/C:/ti</value>
+ </variable>
+ <variable>
+ <name>SBL_BOOT_INSTALL_PATH</name>
+ <value>file:/C:/ti</value>
+ </variable>
+ <variable>
+ <name>SPI_INSTALL_PATH</name>
+ <value>file:/C:/ti</value>
+ </variable>
+ <variable>
+ <name>SRIO_INSTALL_PATH</name>
+ <value>file:/C:/ti</value>
+ </variable>
+ <variable>
+ <name>TCP3D_INSTALL_PATH</name>
+ <value>file:/C:/ti</value>
+ </variable>
+ <variable>
+ <name>UART_INSTALL_PATH</name>
+ <value>file:/C:/ti</value>
+ </variable>
+ <variable>
+ <name>USB_INSTALL_PATH</name>
+ <value>file:/C:/ti</value>
+ </variable>
+ </variableList>
+</projectDescription>
diff --git a/procsdk_audio_x_xx_xx_xx/test_arm/application/app.cfg b/procsdk_audio_x_xx_xx_xx/test_arm/application/app.cfg
--- /dev/null
@@ -0,0 +1,240 @@
+/*
+ * ======== app.cfg ========
+ * Platform: 66AK2G_bios_elf
+ * Target: gnu.targets.arm.A15F
+ */
+
+/* root of the configuration object model */
+var Program = xdc.useModule('xdc.cfg.Program');
+var cfgArgs = Program.build.cfgArgs;
+var RB = (cfgArgs.profile == "release" ? true : false);
+
+/* application uses the following modules and packages */
+var Defaults = xdc.useModule('xdc.runtime.Defaults');
+var Diags = xdc.useModule('xdc.runtime.Diags');
+var Error = xdc.useModule('xdc.runtime.Error');
+var Log = xdc.useModule('xdc.runtime.Log');
+var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
+var Main = xdc.useModule('xdc.runtime.Main');
+var Memory = xdc.useModule('xdc.runtime.Memory')
+var SysMin = xdc.useModule('xdc.runtime.SysMin');
+var System = xdc.useModule('xdc.runtime.System');
+var Text = xdc.useModule('xdc.runtime.Text');
+
+var BIOS = xdc.useModule('ti.sysbios.BIOS');
+var Hwi = xdc.useModule('ti.sysbios.hal.Hwi');
+var Timer = xdc.useModule('ti.sysbios.hal.Timer');
+var Clock = xdc.useModule('ti.sysbios.knl.Clock');
+var Task = xdc.useModule('ti.sysbios.knl.Task');
+var Semaphore = xdc.useModule('ti.sysbios.knl.Semaphore');
+var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
+
+var LoggingSetup = xdc.useModule('ti.uia.sysbios.LoggingSetup');
+
+xdc.useModule('ti.sdo.utils.MultiProc');
+
+
+/*
+ * ======== IPC Configuration ========
+ */
+xdc.global.SR0_cacheEnable = true;
+xdc.global.SrMsmcMem_cacheEnable = true;
+xdc.global.SrDDr3Mem_cacheEnable = true;
+xdc.global.procName = "HOST";
+var ipc_cfg = xdc.loadCapsule("../../shared/ipc.cfg.xs");
+
+/* select ipc libraries */
+var Build = xdc.useModule('ti.sdo.ipc.Build');
+Build.libType = (RB ? Build.LibType_NonInstrumented : Build.LibType_Debug);
+Build.assertsEnabled = (RB ? false : true);
+Build.logsEnabled = (RB ? false : true);
+
+
+/*
+ * Uncomment this line to globally disable Asserts.
+ * All modules inherit the default from the 'Defaults' module. You
+ * can override these defaults on a per-module basis using Module.common$.
+ * Disabling Asserts will save code space and improve runtime performance.
+Defaults.common$.diags_ASSERT = Diags.ALWAYS_OFF;
+ */
+
+/*
+ * Uncomment this line to keep module names from being loaded on the target.
+ * The module name strings are placed in the .const section. Setting this
+ * parameter to false will save space in the .const section. Error and
+ * Assert messages will contain an "unknown module" prefix instead
+ * of the actual module name.
+Defaults.common$.namedModule = false;
+ */
+
+/*
+ * Minimize exit handler array in System. The System module includes
+ * an array of functions that are registered with System_atexit() to be
+ * called by System_exit().
+ */
+System.maxAtexitHandlers = 4;
+
+/*
+ * Uncomment this line to disable the Error print function.
+ * We lose error information when this is disabled since the errors are
+ * not printed. Disabling the raiseHook will save some code space if
+ * your app is not using System_printf() since the Error_print() function
+ * calls System_printf().
+Error.raiseHook = null;
+ */
+
+/*
+ * Uncomment this line to keep Error, Assert, and Log strings from being
+ * loaded on the target. These strings are placed in the .const section.
+ * Setting this parameter to false will save space in the .const section.
+ * Error, Assert and Log message will print raw ids and args instead of
+ * a formatted message.
+Text.isLoaded = false;
+ */
+
+/*
+ * Uncomment this line to disable the output of characters by SysMin
+ * when the program exits. SysMin writes characters to a circular buffer.
+ * This buffer can be viewed using the SysMin Output view in ROV.
+SysMin.flushAtExit = false;
+ */
+
+/*
+ * The BIOS module will create the default heap for the system.
+ * Specify the size of this default heap.
+ */
+//BIOS.heapSize = 0x1000; // initial setting
+BIOS.heapSize = 0x2000; // from pa.cfg
+BIOS.heapSection = ".systemHeap";
+Program.sectMap[".systemHeap"] = "HOST_DDR3";
+
+/*
+ * Build a custom SYS/BIOS library from sources.
+ */
+BIOS.libType = (RB ? BIOS.LibType_NonInstrumented : BIOS.LibType_Instrumented);
+// BIOS.libType = BIOS.LibType_Custom;
+// BIOS.libType = BIOS.LibType_Debug;
+
+/* System stack size (used by ISRs and Swis) */
+Program.stack = 0x2000;
+Program.sectMap[".stack"] = "HOST_MSMC"
+
+/* Circular buffer size for System_printf() */
+SysMin.bufSize = 0x200;
+
+/*
+ * Create and install logger for the whole system
+ */
+var loggerBufParams = new LoggerBuf.Params();
+//loggerBufParams.numEntries = 64; // FL: removed for UIA logging
+//var logger0 = LoggerBuf.create(loggerBufParams);
+//Defaults.common$.logger = logger0;
+//Main.common$.diags_INFO = Diags.ALWAYS_ON;
+
+System.SupportProxy = SysMin;
+
+
+/* --- FL: started adding below this line --- */
+LoggingSetup.loggerType = LoggingSetup.LoggerType_STOPMODE;
+LoggingSetup.sysbiosTaskLogging = false;
+LoggingSetup.loadLogging = false;
+LoggingSetup.mainLoggingRuntimeControl = false;
+LoggingSetup.mainLoggerSize = 8196;
+
+//Task.common$.diags_USER1 = Diags.ALWAYS_ON;
+Task.common$.diags_INFO = Diags.ALWAYS_ON;
+
+var ProjName = environment["ProjName"];
+var topo = ProjName.replace( /pa_([a-z])[0-9]+_.*/, "$1");
+var AudioClockSim = environment["AudioClockSim"];
+var acSimBuild = (AudioClockSim == "1" ? true : false);
+
+/* Set CPU frequency to 600 MHz */
+BIOS.cpuFreq.lo = 600000000;
+BIOS.cpuFreq.hi = 0;
+
+/* Disallow nested hardware interrupts */
+Hwi.dispatcherAutoNestingSupport = false;
+
+if (acSimBuild == true)
+{
+ //
+ // IPC simulation
+ //
+
+ /* Add timer to simulate Rx audio IPC message */
+ var timer0Params = new Timer.Params();
+ timer0Params.instance.name = "timerRxAudio";
+ timer0Params.period = 5330;
+ timer0Params.startMode = xdc.module("ti.sysbios.interfaces.ITimer").StartMode_USER;
+ Program.global.timerRxAudio = Timer.create(1, null, timer0Params);
+
+ /* Add timer to simulate Tx audio IPC message */
+ var timer1Params = new Timer.Params();
+ timer1Params.instance.name = "timerTxAudio";
+ timer1Params.startMode = xdc.module("ti.sysbios.interfaces.ITimer").StartMode_USER;
+ timer1Params.period = 5330;
+ Program.global.timerTxAudio = Timer.create(2, null, timer1Params);
+
+ /* Add semaphore for Rx audio DMA */
+ var semaphore0Params = new Semaphore.Params();
+ semaphore0Params.instance.name = "semaphoreRxAudio";
+ Program.global.semaphoreRxAudio = Semaphore.create(null, semaphore0Params);
+
+ /* Add semaphore for Tx audio DMA */
+ var semaphore1Params = new Semaphore.Params();
+ semaphore1Params.instance.name = "semaphoreTxAudio";
+ Program.global.semaphoreTxAudio = Semaphore.create(null, semaphore1Params);
+}
+
+/* Set default stack size for tasks */
+Task.defaultStackSize = 2048;
+
+/* Set size of idle task stack */
+Task.idleTaskStackSize = 2048;
+
+/* Add Audio Stream Processing (ASP) slave task */
+var task0Params = new Task.Params();
+task0Params.instance.name = "TaskAspSlave";
+task0Params.stackSize = 0x4000; // initial value from pa.cfg
+task0Params.stackSection = ".far:taskStackSectionAspSlave";
+//task0Params.arg0 = 0;
+task0Params.arg0 = $externPtr("params_PA" + topo + "_Slave");
+task0Params.arg1 = $externPtr("patchs_PA" + topo + "_Slave");
+task0Params.priority = -1; //3;
+Program.global.TaskAsp = Task.create("&taskAspSlaveFxn", task0Params);
+Program.sectMap[".far:taskStackSectionAspSlave"] = "HOST_MSMC"; // L3RAM in pa.cfg
+
+/* Add System Initialization task */
+var task1Params = new Task.Params();
+task1Params.instance.name = "TaskSysInit";
+task1Params.stackSize = 0x1000;
+task1Params.stackSection = ".far:taskStackSectionSysInit";
+task1Params.priority = 4;
+Program.global.TaskSysInit = Task.create("&taskSysInitFxn", task1Params);
+Program.sectMap[".far:taskStackSectionSysInit"] = "HOST_DDR3";
+
+Program.sectMap[".far:taskStackSection"] = "HOST_DDR3"; // SDRAM in pa.cfg
+
+// Dec ip circular buffer will be in MSMC, size~=180 kB.
+// Dec op circular buffer will be in MSMC, size~=192 kB.
+// However, both buffers will be in Shared Region MSMC.
+// So this is heap is for other use local to ARM (e.g. Dec chain). Set to 128 kB for now.
+/* Add MSMC SRAM heap */ // formerly L3RAM
+var heapMem1Params = new HeapMem.Params();
+heapMem1Params.instance.name = "heapMemMsmcSram";
+heapMem1Params.size = 224*1024; //128*1024
+heapMem1Params.sectionName = ".msmcSramHeap";
+Program.global.heapMemMsmcSram = HeapMem.create(heapMem1Params);
+Program.sectMap[".msmcSramHeap"] = "HOST_MSMC";
+
+/* Add DDR3 heap */ // formerly SDRAM
+var heapMem2Params = new HeapMem.Params();
+heapMem2Params.instance.name = "heapMemDdr3";
+heapMem2Params.size = 3350528;
+heapMem2Params.sectionName = ".ddr3Heap";
+Program.global.heapMemDdr3 = HeapMem.create(heapMem2Params);
+Program.sectMap[".ddr3Heap"] = "HOST_DDR3";
+
+//Program.sectMap[".globalSectionPafAstConfig"] = "COMMON_DDR3";
+//Program.sectMap[".globalSectionAcpStdBetaTable"] = "COMMON_DDR3";
diff --git a/procsdk_audio_x_xx_xx_xx/test_arm/application/app.cmd b/procsdk_audio_x_xx_xx_xx/test_arm/application/app.cmd
--- /dev/null
@@ -0,0 +1,27 @@
+SEARCH_DIR ( C:\ti\procsdk_audio_x_xx_xx_xx\paf\pa\build\a15\release )
+SEARCH_DIR ( C:\ti\procsdk_audio_x_xx_xx_xx\intrinsics\Dolby_Intrinsics_Imp\lib_float_A15 )
+SEARCH_DIR ( C:\ti\procsdk_audio_x_xx_xx_xx\ddp\Dolby_Digital_Plus_Decoder_Imp\Source_Code\make\k2g\Wrapper\ddp_application )
+
+INPUT ( c67x_cintrins_elf.lib simulate_dma_elf.lib )
+INPUT ( acp_elf.lib asp_std_elf.lib com_asp_elf.lib com_dec_elf.lib pcm1_elf.lib )
+INPUT ( dlb_intrinsics_generic_float32_release.a )
+INPUT ( ddp_dec_lib_generic_wrapper_release.a ddp_dec_lib_generic_float32_release.a )
+
+SECTIONS
+{
+ .globalSection :
+ {
+ *(.globalSectionPafAstConfig)
+ *(.globalSectionAcpStdBetaTable)
+ *(.globalSectionAcpCusBetaTable)
+ *(.globalSectionAcpCusPhiTable)
+ *(.globalSectionAcpCusSigmaTable)
+ } > COMMON_DDR3
+
+ .capBufSection (NOLOAD):
+ {
+ *(.gCapIbBufPcm)
+ *(.gCapIbBuf)
+ *(.gCapAfBuf)
+ } > DDR3
+}
diff --git a/procsdk_audio_x_xx_xx_xx/test_arm/application/main.c b/procsdk_audio_x_xx_xx_xx/test_arm/application/main.c
--- /dev/null
@@ -0,0 +1,30 @@
+/*
+ * ======== main.c ========
+ */
+
+#include <xdc/std.h>
+#include <xdc/cfg/global.h>
+#include <xdc/runtime/Log.h>
+#include <xdc/runtime/System.h>
+#include <ti/sysbios/BIOS.h>
+#include <ti/ipc/Ipc.h>
+
+/*
+ * ======== main ========
+ */
+Int main()
+{
+ Int status;
+
+ Log_info0("Enter main()");
+
+ // Initialize IPC
+ status = Ipc_start();
+ if (status < 0)
+ {
+ System_abort("Ipc_start failed\n");
+ }
+
+ BIOS_start(); /* does not return */
+ return(0);
+}
diff --git a/procsdk_audio_x_xx_xx_xx/test_arm/framework/aspMsg_slave.c b/procsdk_audio_x_xx_xx_xx/test_arm/framework/aspMsg_slave.c
--- /dev/null
@@ -0,0 +1,48 @@
+#include <stdio.h>
+#include <xdc/std.h>
+#include <xdc/runtime/Diags.h>
+#include <xdc/runtime/Log.h>
+#include <xdc/runtime/System.h>
+
+#include "aspMsg_common.h"
+#include "aspMsg_slave.h"
+
+#define AspMsg_SlaveToMasterMsgHeapId ( 1 )
+
+AspMsgSlave_Module gAspMsgSlave;
+AspMsgSlave_Handle hAspMsgSlave=&gAspMsgSlave;
+
+/* Initialize ASP slave messaging */
+Int AspMsgSlave_init(
+ AspMsgSlave_Handle hAspMsgSlave,
+ UInt16 remoteProcId
+)
+{
+ Int status = 0;
+ MessageQ_Params msgqParams;
+ char msgqName[32];
+
+ Log_print0(Diags_ENTRY, "AspMsgSlave_init: -->");
+
+ // initialize module object state
+ // set processor Ids
+ hAspMsgSlave->masterProcId = remoteProcId;
+ hAspMsgSlave->slaveProcId = MultiProc_self();
+
+ // create local message queue (inbound messages)
+ MessageQ_Params_init(&msgqParams);
+ System_sprintf(msgqName, AspMsg_SlaveMsgQueName, MultiProc_getName(MultiProc_self()));
+ hAspMsgSlave->slaveQue = MessageQ_create(msgqName, &msgqParams);
+
+ if (hAspMsgSlave->slaveQue == NULL)
+ {
+ status = -1;
+ Log_print1(Diags_EXIT, "<-- AspMsgSlave_init(): %d", (IArg)status);
+ return status;
+ }
+
+ Log_print0(Diags_INFO,"AspMsgSlave_init(): ASP Slave messaging ready");
+
+ Log_print1(Diags_EXIT, "<-- AspMsgSlave_init(): %d", (IArg)status);
+ return status;
+}
diff --git a/procsdk_audio_x_xx_xx_xx/test_arm/framework/aspMsg_slave.h b/procsdk_audio_x_xx_xx_xx/test_arm/framework/aspMsg_slave.h
--- /dev/null
@@ -0,0 +1,31 @@
+#ifndef _ASP_MSG_SLAVE_H_
+#define _ASP_MSG_SLAVE_H_
+
+#include <xdc/std.h>
+#include <ti/ipc/MessageQ.h>
+
+#define ASP_MSG_SLAVE_DEF_NUMMSGS ( 4 )
+
+/* module structure */
+typedef struct AspMsgSlave_Module
+{
+ UInt16 masterProcId; // master processor id
+ UInt16 slaveProcId; // slave processor id
+ UInt32 masterMessageId; // master message Id
+ MessageQ_Handle slaveQue; // created locally
+} AspMsgSlave_Module;
+
+/* module handle */
+typedef AspMsgSlave_Module * AspMsgSlave_Handle;
+
+/* Initialize ASP slave messaging */
+Int AspMsgSlave_init(
+ AspMsgSlave_Handle hAspMsgSlave,
+ UInt16 remoteProcId
+);
+
+extern AspMsgSlave_Handle hAspMsgSlave;
+
+
+#endif /* _ASP_MSG_SLAVE_H_ */
+
diff --git a/procsdk_audio_x_xx_xx_xx/test_arm/framework/audioStreamProc_paramsFxns_slave.c b/procsdk_audio_x_xx_xx_xx/test_arm/framework/audioStreamProc_paramsFxns_slave.c
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+ * ======== audioStreamProc_paramsFxns_slave.c ========
+ */
+
+#include <xdc/std.h>
+
+#include "as0.h"
+#include "audioStreamProc_slave.h"
+
+// .............................................................................
+// Audio Stream Task Parameter Functions - PA17
+//
+// Name: PAF_AST_params_fxnsPA17
+// Purpose: Collect the functions that embody the implementation of
+// Audio Framework Number 2 for use as a jump table.
+// From: PAF_AST_Params
+// Uses: See contents.
+// States: N.A.
+// Return: N.A.
+// Trace: None.
+//
+const PAF_AST_Fxns PAF_AST_params_fxnsPA17_Slave =
+{
+ { // initPhase[8]
+ PAF_AST_initPhaseMallocSlave,
+ PAF_AST_initPhaseConfigSlave,
+ PAF_AST_initPhaseAcpAlgSlave,
+ PAF_AST_initPhaseCommonSlave,
+ PAF_AST_initPhaseAlgKeySlave,
+ NULL,
+ NULL,
+ NULL
+ },
+ PAF_AST_initFrame0Slave, // initFrame0
+ PAF_AST_initFrame1Slave, // initFrame1
+ NULL, /* PAF_AST_passProcessing, */ // passProcessing
+ NULL, /* PAF_AST_passProcessingCopy, */ // passProcessingCopy
+ NULL, //PAF_AST_autoProcessing, // autoProcessing
+ NULL, //PAF_AST_decodeProcessing, // decodeProcessing
+ NULL, //PAF_AST_decodeCommand, // decodeCommand
+ NULL, //PAF_AST_encodeCommand, // encodeCommand
+ NULL, //PAF_AST_decodeInit, // decodeInit
+ NULL, //PAF_AST_decodeInfo, // decodeInfo
+ NULL, //PAF_AST_decodeInfo1, // decodeInfo1
+ NULL, //PAF_AST_decodeInfo2, // decodeInfo2
+ NULL, //PAF_AST_decodeCont, // decodeCont
+ NULL, //PAF_AST_decodeDecode,
+ NULL, //PAF_AST_decodeStream, // decodeStream
+ NULL, //PAF_AST_decodeEncode, // decodeEncode
+ NULL, //PAF_AST_decodeFinalTest, // decodeFinalTest
+ NULL, //PAF_AST_decodeComplete, // decodeComplete
+ NULL, //PAF_AST_selectDevices, // selectDevices
+ NULL, //PAF_AST_sourceDecode, // sourceDecode
+ NULL, //PAF_AST_startOutput, // startOutput
+ NULL, //PAF_AST_stopOutput, // stopOutput
+ NULL, //PAF_AST_setCheckRateX, // setCheckRateX
+ NULL, //PAF_AST_streamChainFunction, // streamChainFunction
+ NULL, //PAF_DEC_deviceAllocate, // deviceAllocate
+ NULL, //PAF_DEC_deviceSelect, // deviceSelect
+ NULL, //PAF_DEC_computeFrameLength, // computeFrameLength
+ NULL, //PAF_DEC_updateInputStatus, // updateInputStatus
+ NULL, /* PAF_BUF_copy, */ // copy
+ NULL, /*headerPrint*/ // headerPrint
+ NULL, /*allocPrint*/ // allocPrint
+ NULL, /*commonPrint*/ // commonPrint
+ NULL, /*bufMemPrint*/ // bufMemPrint
+ NULL, /*memStatusPrint*/ // memStatusPrint
+ // For ARC
+ NULL, //PAF_ARC_controlRate, // controlRate
+};
diff --git a/procsdk_audio_x_xx_xx_xx/test_arm/framework/audioStreamProc_slave.c b/procsdk_audio_x_xx_xx_xx/test_arm/framework/audioStreamProc_slave.c
--- /dev/null
@@ -0,0 +1,1439 @@
+/*
+ * ======== audioStreamProc_slave.c ========
+ */
+
+#include <xdc/cfg/global.h>
+#include <xdc/runtime/Error.h>
+#include <xdc/runtime/Log.h>
+#include <xdc/runtime/Memory.h>
+#include <ti/sysbios/BIOS.h>
+#include <ti/sysbios/hal/Cache.h>
+#include <ti/sysbios/knl/Task.h>
+#include <ti/ipc/Ipc.h>
+#include <ti/ipc/MessageQ.h>
+#include <ti/ipc/MultiProc.h>
+
+#include <acp_mds.h>
+#include <pcm.h>
+#include "as1-f2-params.h"
+#include "as1-f2-patchs.h"
+#include "as1-f2-config.h"
+#include "paf_decOpCircBuf.h"
+
+#include "common.h"
+#include "aspMsg_common.h"
+#include "aspMsg_slave.h"
+
+#include "audioStreamProc_common.h"
+#include "audioStreamProc_slave.h"
+
+// FL: debug
+//#include "fwkSim.h"
+#include "dbgCapAf.h"
+#include "dbgDib.h"
+
+
+//
+// Decoder Definitions
+//
+#define decLinkInit pQ->i_decLinkInit
+
+#define __TASK_NAME__ "TaskAspSlave"
+
+LINNO_DEFN(TaskAspSlave); /* Line number macros */
+ERRNO_DEFN(TaskAspSlave); /* Error number macros */
+
+extern struct {
+ Int size;
+ IALG_Status *pStatus[512];
+} IACP_STD_BETA_TABLE;
+
+extern const char AFChanPtrMap[PAF_MAXNUMCHAN+1][PAF_MAXNUMCHAN];
+extern PAF_ChannelConfigurationMaskTable PAF_ASP_stdCCMT;
+
+// Global debug counters */
+extern Uint32 gTaskAspSlaveCnt; // debug counter for ASP slave task
+
+PAF_AudioFrame *gpAudioFrameSlave=NULL;
+PAF_AudioData *gAudioFrameChannelPointersSlave[PAF_MAXNUMCHAN_AF];
+PAF_AudioSize gAudioFrameChannelSizesSlave[PAF_MAXNUMCHAN_AF];
+
+// Debug counters
+UInt32 gSlaveStartErrCnt=0;
+UInt32 gSlaveStartCnt=0;
+UInt32 gSlaveSourceSelectCnt=0;
+UInt32 gSlaveExitCnt=0;
+UInt32 gSlaveDecExitCnt=0;
+UInt32 gSlaveDecControlCnt=0;
+UInt32 gSlaveDecActivateCnt=0;
+UInt32 gSlaveDecResetCnt=0;
+UInt32 gSlaveDecInfoCnt=0;
+UInt32 gSlaveDecDecodeCnt=0;
+UInt32 gSlaveDecDeactivateCnt=0;
+
+
+/*
+ * ======== taskAspSlaveFxn ========
+ * Audio Stream Processing slave task function
+ */
+Void taskAspSlaveFxn(
+// Int betaPrimeValue, // FL: comeback to this
+ const PAF_AST_Params *pP,
+ const PAF_AST_Patchs *pQ
+)
+{
+ Int as; /* Audio Stream Number (1, 2, etc.) */
+ Int z; /* input/encode/stream/decode/output counter */
+ Int i; /* phase */
+ Int zMD, zMS;
+ Bool done;
+ Bool decDone;
+ ALG_Handle alg[DECODEN_MAX];
+ ASP_Slave_Cmd slaveCmd;
+ Int sourceSelect;
+ DEC_Handle dec;
+ IALG_Cmd decCtrlCmd; // decoder control command
+ Int decCtrlRet; // decoder control return
+ Int errno; /* error number */
+ Int size;
+ Int argIdx;
+ // FL: decoder output circular buffer
+ PAF_DecodeOpCircBuf *pCb;
+ PAF_AudioFrame *pAfWrt;
+ Int cbErrno;
+ // FL: Messaging
+ PAF_InpBufConfig *pIpBufConfig;
+ ASP_Msg *pAspMsg;
+ MessageQ_QueueId queId;
+ Int status;
+ Int32 zI;
+
+
+ Log_info0("Enter taskAspSlaveFxn()");
+
+ //
+ // Audio Framework Parameters & Patch (*pP, *pQ):
+ //
+ if (!pP)
+ {
+ TRACE_TERSE0("TaskAspSlave: No Parameters defined. Exiting.");
+ LINNO_RPRT(TaskAspSlave, -1);
+ return;
+ }
+
+ if (!pQ)
+ {
+ TRACE_TERSE0("TaskAspSlave: No Patchs defined. Exiting.");
+ LINNO_RPRT(TaskAspSlave, -1);
+ return;
+ }
+
+ // wait for initialization message from master
+ do {
+ status = MessageQ_get(hAspMsgSlave->slaveQue, (MessageQ_Msg *)&pAspMsg, MessageQ_FOREVER);
+ //TRACE_TERSE1("Rx ASP message: status=%d", status);
+ //} while ((status != MessageQ_S_SUCCESS || (pAspMsg->cmd != ASP_SLAVE_START));
+ } while (status != MessageQ_S_SUCCESS);
+ if ((pAspMsg->procId != hAspMsgSlave->masterProcId) ||
+ (pAspMsg->cmd != ASP_SLAVE_START))
+ {
+ TRACE_TERSE3("ERROR: Rx ASP message: procId=%d, cmd=%d, messageId=0x%04x", pAspMsg->procId, pAspMsg->cmd, pAspMsg->messageId);
+ SW_BREAKPOINT;
+ }
+ hAspMsgSlave->masterMessageId = pAspMsg->messageId;
+ gSlaveStartCnt++;
+ TRACE_MSG3("Rx ASP message, procId=%d, cmd=%d, messageId=0x%04x", pAspMsg->procId, pAspMsg->cmd, pAspMsg->messageId);
+
+ Cache_inv(&gPAF_AST_config, sizeof(PAF_AST_Config), Cache_Type_ALLD, 0);
+ Cache_inv(&pC, sizeof(PAF_AST_Config *), Cache_Type_ALLD, 0);
+ Cache_wait();
+ if (!pC)
+ {
+ TRACE_TERSE0("TaskAspSlave: No Configuration defined. Exiting.");
+ LINNO_RPRT(TaskAspSlave, -1);
+ return;
+ }
+
+ // (***) FL: hackin'
+ // invalidate Dec configuration
+ Cache_inv(&gPAF_AST_config.xDec[0], DECODEN*sizeof(PAF_AST_Decode), Cache_Type_ALLD, 0);
+ Cache_wait();
+
+ // (***) FL: hackin'
+ Cache_inv((Ptr)(&IACP_STD_BETA_TABLE.pStatus[0]), 512*sizeof(IALG_Status *), Cache_Type_ALLD, 0); // invalidate entire beta table
+ Cache_wait();
+
+ // Audio Framework Configuration (*pC):
+ as = pC->as; // obtain audio stream number
+
+ //
+ // Initialize message log trace and line number reporting
+ //
+ for (z=STREAM1; z < STREAMN; z++)
+ {
+ TRACE_TERSE1("TaskAspSlave: AS%d: initiated", as+z);
+ }
+ LINNO_RPRT(TaskAspSlave, -1);
+
+ // Get decoder and stream index associated with the master input
+ zMD = pC->masterDec;
+ zMS = pC->masterStr;
+
+ //
+ // Initialize per parameterized phases.
+ // - AcpAlg: ACP Algorithm Initialization and Local Attachment
+ // - Common: Common Algorithm Initialization
+ // - AlgKey: Dec/Enc chain to Array Initialization
+ // - Unused: (available)
+ //
+ LINNO_RPRT(TaskAspSlave, -2);
+ for (i=0; i < lengthof(pP->fxns->initPhase); i++)
+ {
+ Int linno;
+ if (pP->fxns->initPhase[i])
+ {
+ if ((linno = pP->fxns->initPhase[i](pP, pQ, pC)))
+ {
+ LINNO_RPRT(TaskAspSlave, linno);
+ return;
+ }
+ }
+ else
+ {
+ TRACE_TERSE1("TaskAspSlave: AS%d: initialization phase - null", as+zMS);
+ }
+ TRACE_TERSE2("TaskAspSlave: AS%d: initialization phase - %d completed", as+zMS, i);
+ LINNO_RPRT(TaskAspSlave, -i-3);
+ }
+
+ //
+ // End of Initialization -- final memory usage report.
+ //
+ if (pP->fxns->memStatusPrint)
+ {
+ pP->fxns->memStatusPrint(HEAP_INTERNAL, HEAP_INTERNAL1, HEAP_EXTERNAL, HEAP_INTERNAL1_SHM);
+ }
+
+ // (***) FL: hackin'
+ // write back Status structure addresses for Beta Units initialized on Slave
+ Cache_wb((Ptr)(&IACP_STD_BETA_TABLE.pStatus[STD_BETA_DECODE]), sizeof(IALG_Status *), Cache_Type_ALLD, 0);
+ Cache_wb((Ptr)(&IACP_STD_BETA_TABLE.pStatus[STD_BETA_PCM]), sizeof(IALG_Status *), Cache_Type_ALLD, 0);
+ Cache_wb((Ptr)(&IACP_STD_BETA_TABLE.pStatus[STD_BETA_PCM2]), sizeof(IALG_Status *), Cache_Type_ALLD, 0);
+ Cache_wb((Ptr)(&IACP_STD_BETA_TABLE.pStatus[STD_BETA_DDP]), sizeof(IALG_Status *), Cache_Type_ALLD, 0);
+ Cache_wb((Ptr)(&IACP_STD_BETA_TABLE.pStatus[STD_BETA_DDP2]), sizeof(IALG_Status *), Cache_Type_ALLD, 0);
+ Cache_wait();
+
+ // (***) FL: hackin'
+ // write back Status structures for Beta Units initialized on Slave
+ size = IACP_STD_BETA_TABLE.pStatus[STD_BETA_DECODE]->size;
+ Cache_wb((Ptr)(IACP_STD_BETA_TABLE.pStatus[STD_BETA_DECODE]), size, Cache_Type_ALLD, 0);
+ size = IACP_STD_BETA_TABLE.pStatus[STD_BETA_PCM]->size;
+ Cache_wb((Ptr)(IACP_STD_BETA_TABLE.pStatus[STD_BETA_PCM]), size, Cache_Type_ALLD, 0);
+ size = IACP_STD_BETA_TABLE.pStatus[STD_BETA_PCM2]->size;
+ Cache_wb((Ptr)(IACP_STD_BETA_TABLE.pStatus[STD_BETA_PCM2]), size, Cache_Type_ALLD, 0);
+ size = IACP_STD_BETA_TABLE.pStatus[STD_BETA_DDP]->size;
+ Cache_wb((Ptr)(IACP_STD_BETA_TABLE.pStatus[STD_BETA_DDP]), size, Cache_Type_ALLD, 0);
+ size = IACP_STD_BETA_TABLE.pStatus[STD_BETA_DDP2]->size;
+ Cache_wb((Ptr)(IACP_STD_BETA_TABLE.pStatus[STD_BETA_DDP2]), size, Cache_Type_ALLD, 0);
+ Cache_wait();
+
+ // (***) FL: hackin'
+ // write back Dec configuration
+ Cache_wb(&gPAF_AST_config.xDec[0], DECODEN*sizeof(PAF_AST_Decode), Cache_Type_ALLD, 0);
+ Cache_wait();
+
+ // Send initialization complete message to master
+ queId = MessageQ_getReplyQueue(pAspMsg);
+ pAspMsg->procId = hAspMsgSlave->slaveProcId;
+ pAspMsg->cmd = ASP_MASTER_START_DONE;
+ pAspMsg->messageId = hAspMsgSlave->masterMessageId | ((UInt32)1<<31);
+ TRACE_MSG3("Tx ASP message, procId=%d, cmd=%d, messageId=0x%04x", pAspMsg->procId, pAspMsg->cmd, pAspMsg->messageId);
+ status = MessageQ_put(queId, (MessageQ_Msg)pAspMsg); /* send message back */
+ if (status != MessageQ_S_SUCCESS)
+ {
+ SW_BREAKPOINT;
+ }
+
+ done = FALSE;
+ while (done==FALSE)
+ {
+ // wait for source select message from master
+ do {
+ status = MessageQ_get(hAspMsgSlave->slaveQue, (MessageQ_Msg *)&pAspMsg, MessageQ_FOREVER);
+ } while ((status < 0) || (pAspMsg->cmd != ASP_SLAVE_DEC_SOURCE_SELECT));
+ if ((pAspMsg->procId != hAspMsgSlave->masterProcId) ||
+ (pAspMsg->cmd != ASP_SLAVE_DEC_SOURCE_SELECT))
+ {
+ TRACE_TERSE3("ERROR: Rx ASP message: procId=%d, cmd=%d, messageId=0x%04x", pAspMsg->procId, pAspMsg->cmd, pAspMsg->messageId);
+ SW_BREAKPOINT;
+ }
+ hAspMsgSlave->masterMessageId = pAspMsg->messageId;
+ sourceSelect = *(Int32 *)&pAspMsg->buf[0];
+ TRACE_MSG3("Rx ASP message, procId=%d, cmd=%d, messageId=0x%04x", pAspMsg->procId, pAspMsg->cmd, pAspMsg->messageId);
+ TRACE_MSG1("sourceSelect=%d.", sourceSelect);
+ // send source select complete message to master
+ queId = MessageQ_getReplyQueue(pAspMsg);
+ pAspMsg->procId = hAspMsgSlave->slaveProcId;
+ pAspMsg->cmd = ASP_MASTER_DEC_SOURCE_SELECT_DONE;
+ pAspMsg->messageId = hAspMsgSlave->masterMessageId | ((UInt32)1<<31);
+ gSlaveSourceSelectCnt++;
+ TRACE_MSG3("Tx ASP message, procId=%d, cmd=%d, messageId=0x%04x", pAspMsg->procId, pAspMsg->cmd, pAspMsg->messageId);
+ MessageQ_put(queId, (MessageQ_Msg)pAspMsg); /* send message back */
+
+ for (z=DECODE1; z < DECODEN; z++)
+ {
+ alg[z] = pC->xDec[z].decAlg[PAF_SOURCE_PCM];
+ }
+ alg[zMD] = pC->xDec[zMD].decAlg[sourceSelect];
+
+ // FL: debug, reset IB capture buffer
+ capIbReset();
+ Log_info0("capIbReset()");
+ // FL: debug, reset audio frame capture buffer
+ capAfReset();
+
+ decDone = FALSE;
+ while (decDone==FALSE)
+ {
+ // wait for received message from master
+ do {
+ status = MessageQ_get(hAspMsgSlave->slaveQue, (MessageQ_Msg *)&pAspMsg, MessageQ_FOREVER);
+ } while (status < 0);
+ if (pAspMsg->procId != hAspMsgSlave->masterProcId)
+ {
+ TRACE_TERSE3("ERROR: Rx ASP message: procId=%d, cmd=%d, messageId=0x%04x", pAspMsg->procId, pAspMsg->cmd, pAspMsg->messageId);
+ SW_BREAKPOINT;
+ }
+ hAspMsgSlave->masterMessageId = pAspMsg->messageId;
+ slaveCmd = pAspMsg->cmd;
+ TRACE_MSG3("Rx ASP message, procId=%d, cmd=%d, messageId=0x%04x", pAspMsg->procId, pAspMsg->cmd, pAspMsg->messageId);
+
+ switch (slaveCmd)
+ {
+ case ASP_SLAVE_NULL:
+ case ASP_SLAVE_START:
+ gSlaveStartErrCnt++;
+ TRACE_TERSE1("ERROR: unexpected slaveCmd=%d", slaveCmd);
+
+ break;
+
+ case ASP_SLAVE_EXIT:
+ gSlaveExitCnt++;
+ TRACE_TERSE1("slaveCmd=%d", slaveCmd);
+
+ decDone = TRUE;
+ done = TRUE;
+ break;
+
+ case ASP_SLAVE_DEC_EXIT:
+ gSlaveDecExitCnt++;
+ TRACE_TERSE1("slaveCmd=%d", slaveCmd);
+
+ // send dec exit complete message to master
+ queId = MessageQ_getReplyQueue(pAspMsg);
+ pAspMsg->procId = hAspMsgSlave->slaveProcId;
+ pAspMsg->cmd = ASP_MASTER_DEC_EXIT_DONE;
+ pAspMsg->messageId = hAspMsgSlave->masterMessageId | ((UInt32)1<<31);
+ TRACE_MSG3("Tx ASP message, procId=%d, cmd=%d, messageId=0x%04x", pAspMsg->procId, pAspMsg->cmd, pAspMsg->messageId);
+ status = MessageQ_put(queId, (MessageQ_Msg)pAspMsg); /* send message back */
+ if (status != MessageQ_S_SUCCESS)
+ {
+ SW_BREAKPOINT;
+ }
+
+ decDone=TRUE;
+ break;
+
+ case ASP_SLAVE_DEC_CONTROL:
+ gSlaveDecControlCnt++;
+ // simulate dec control load
+ //simLoad(DEC_CONTROL_LOAD);
+
+ argIdx = 0; // get decIdx
+ z = *(Int32 *)&pAspMsg->buf[argIdx];
+ argIdx += sizeof(Int32);
+ decCtrlCmd = *(IALG_Cmd *)&pAspMsg->buf[argIdx]; // get decCtrlCmd
+ TRACE_MSG3("slaveCmd=%d, decIdx=%d, decCtrlCmd=%d", slaveCmd, z, decCtrlCmd);
+
+ decCtrlRet = alg[z]->fxns->algControl(alg[z], decCtrlCmd, NULL);
+
+ // send dec control complete message to master
+ queId = MessageQ_getReplyQueue(pAspMsg);
+ pAspMsg->procId = hAspMsgSlave->slaveProcId;
+ pAspMsg->cmd = ASP_MASTER_DEC_CONTROL_DONE;
+ pAspMsg->messageId = hAspMsgSlave->masterMessageId | ((UInt32)1<<31);
+ argIdx = 0; // set decCtrlRet
+ *(Int32 *)&pAspMsg->buf[argIdx] = decCtrlRet;
+ TRACE_MSG3("Tx ASP message, procId=%d, cmd=%d, messageId=0x%04x", pAspMsg->procId, pAspMsg->cmd, pAspMsg->messageId);
+ status = MessageQ_put(queId, (MessageQ_Msg)pAspMsg); /* send message back */
+ if (status != MessageQ_S_SUCCESS)
+ {
+ SW_BREAKPOINT;
+ }
+
+ break;
+
+ case ASP_SLAVE_DEC_ACTIVATE:
+ gSlaveDecActivateCnt++;
+ // simulate dec activate load
+ //simLoad(DEC_ACTIVATE_LOAD);
+
+ // (***) FL: hackin'
+ // invalidate Status structures for shared Beta Units
+ size = IACP_STD_BETA_TABLE.pStatus[STD_BETA_DECODE]->size;
+ Cache_inv((Ptr)(IACP_STD_BETA_TABLE.pStatus[STD_BETA_DECODE]), size, Cache_Type_ALLD, 0);
+ size = IACP_STD_BETA_TABLE.pStatus[STD_BETA_PCM]->size;
+ Cache_inv((Ptr)(IACP_STD_BETA_TABLE.pStatus[STD_BETA_PCM]), size, Cache_Type_ALLD, 0);
+ Cache_wait();
+
+ argIdx = 0; // get decIdx
+ z = *(Int32 *)&pAspMsg->buf[argIdx];
+ TRACE_MSG2("slaveCmd=%d, decIdx=%d", slaveCmd, z);
+
+ if (alg[z]->fxns->algActivate)
+ {
+ alg[z]->fxns->algActivate(alg[z]);
+ }
+
+ // send dec activate complete message to master
+ queId = MessageQ_getReplyQueue(pAspMsg);
+ pAspMsg->procId = hAspMsgSlave->slaveProcId;
+ pAspMsg->cmd = ASP_MASTER_DEC_ACTIVATE_DONE;
+ pAspMsg->messageId = hAspMsgSlave->masterMessageId | ((UInt32)1<<31);
+ TRACE_MSG3("Tx ASP message, procId=%d, cmd=%d, messageId=0x%04x", pAspMsg->procId, pAspMsg->cmd, pAspMsg->messageId);
+ status = MessageQ_put(queId, (MessageQ_Msg)pAspMsg); /* send message back */
+ if (status != MessageQ_S_SUCCESS)
+ {
+ SW_BREAKPOINT;
+ }
+
+ // Re-init audio frame
+ pP->fxns->initFrame1(pP, pQ, pC, z, sourceSelect);
+
+ break;
+
+ case ASP_SLAVE_DEC_RESET:
+ gSlaveDecResetCnt++;
+ // simulate dec reset load
+ //simLoad(DEC_RESET_LOAD);
+
+ argIdx = 0; // get decIdx
+ z = *(Int32 *)&pAspMsg->buf[argIdx];
+ TRACE_TERSE2("slaveCmd=%d,decIdx=%d", slaveCmd, z);
+
+ dec = (DEC_Handle)alg[z];
+ errno = 0;
+ if (dec->fxns->reset)
+ {
+ errno = dec->fxns->reset(dec, NULL, &pC->xDec[z].decodeControl, &pC->xDec[z].decodeStatus);
+ }
+
+ // (***) FL: hackin'
+ // write back Status structures for shared Beta Units
+ size = IACP_STD_BETA_TABLE.pStatus[STD_BETA_DECODE]->size;
+ Cache_wb((Ptr)(IACP_STD_BETA_TABLE.pStatus[STD_BETA_DECODE]), size, Cache_Type_ALLD, 0);
+ size = IACP_STD_BETA_TABLE.pStatus[STD_BETA_PCM]->size;
+ Cache_wb((Ptr)(IACP_STD_BETA_TABLE.pStatus[STD_BETA_PCM]), size, Cache_Type_ALLD, 0);
+ Cache_wait();
+
+ // send dec reset complete message to master
+ queId = MessageQ_getReplyQueue(pAspMsg);
+ pAspMsg->procId = hAspMsgSlave->slaveProcId;
+ pAspMsg->cmd = ASP_MASTER_DEC_RESET_DONE;
+ pAspMsg->messageId = hAspMsgSlave->masterMessageId | ((UInt32)1<<31);
+ argIdx = 0; // set decErrno
+ *(Int32 *)&pAspMsg->buf[argIdx] = errno;
+ TRACE_MSG3("Tx ASP message, procId=%d, cmd=%d, messageId=0x%04x", pAspMsg->procId, pAspMsg->cmd, pAspMsg->messageId);
+ status = MessageQ_put(queId, (MessageQ_Msg)pAspMsg); /* send message back */
+ if (status != MessageQ_S_SUCCESS)
+ {
+ SW_BREAKPOINT;
+ }
+
+ break;
+
+ case ASP_SLAVE_DEC_INFO:
+ gSlaveDecInfoCnt++;
+ // simulate dec info load
+ //simLoad(DEC_INFO_LOAD);
+
+ argIdx = 0; // get decIdx
+ z = *(Int32 *)&pAspMsg->buf[argIdx];
+ TRACE_TERSE2("slaveCmd=%d,decIdx=%d", slaveCmd, z);
+ zI = pP->inputsFromDecodes[z];
+
+ // (***) FL: hackin'
+ // invalidate Inp configuration
+ Cache_inv(&gPAF_AST_config.xInp[zI], sizeof(PAF_AST_InpBuf), Cache_Type_ALLD, 0);
+ // invalidate input data
+ pIpBufConfig = &gPAF_AST_config.xInp[zI].inpBufConfig;
+ size = pIpBufConfig->frameLength * pIpBufConfig->sizeofElement;
+ if (sourceSelect == PAF_SOURCE_PCM)
+ {
+ size *= pIpBufConfig->stride;
+ }
+ Cache_inv((Ptr)pIpBufConfig->pntr.pSmInt, size, Cache_Type_ALLD, 0);
+ // invalidate Dec configuration
+ Cache_inv(&gPAF_AST_config.xDec[z], sizeof(PAF_AST_Decode), Cache_Type_ALLD, 0);
+ // status for selected decoder should be invalidated
+ Cache_wait();
+
+ dec = (DEC_Handle)alg[z];
+ errno = 0;
+ if (dec->fxns->info)
+ {
+ errno = dec->fxns->info(dec, NULL, &pC->xDec[z].decodeControl, &pC->xDec[z].decodeStatus);
+ }
+
+ // write back Dec configuration
+ Cache_wb(&gPAF_AST_config.xDec[z], sizeof(PAF_AST_Decode), Cache_Type_ALLD, 0);
+ Cache_wait();
+
+ // send dec info complete message to master
+ queId = MessageQ_getReplyQueue(pAspMsg);
+ pAspMsg->procId = hAspMsgSlave->slaveProcId;
+ pAspMsg->cmd = ASP_MASTER_DEC_INFO_DONE;
+ pAspMsg->messageId = hAspMsgSlave->masterMessageId | ((UInt32)1<<31);
+ argIdx = 0; // set decErrno
+ *(Int32 *)&pAspMsg->buf[argIdx] = errno;
+ TRACE_MSG3("Tx ASP message, procId=%d, cmd=%d, messageId=0x%04x", pAspMsg->procId, pAspMsg->cmd, pAspMsg->messageId);
+ status = MessageQ_put(queId, (MessageQ_Msg)pAspMsg); /* send message back */
+ if (status != MessageQ_S_SUCCESS)
+ {
+ SW_BREAKPOINT;
+ }
+
+ break;
+
+ case ASP_SLAVE_DEC_DECODE:
+ gSlaveDecDecodeCnt++;
+ // simulate dec info load
+ //simLoad(DEC_DECODE_LOAD);
+
+ argIdx = 0; // get decIdx
+ z = *(Int32 *)&pAspMsg->buf[argIdx];
+ TRACE_TERSE2("slaveCmd=%d, decIdx=%d", slaveCmd, z);
+
+ // invalidate Dec configuration
+ Cache_inv(&gPAF_AST_config.xDec[z], sizeof(PAF_AST_Decode), Cache_Type_ALLD, 0);
+ Cache_wait();
+ //TRACE_TERSE0("Dec:cache wb done");
+
+ dec = (DEC_Handle)alg[z];
+ //TRACE_TERSE1("Dec:dec handle=0x%04x", (IArg)dec);
+
+ errno = 0;
+ cbErrno = 0;
+ if (dec->fxns->decode)
+ {
+ // FL: debug, capture input buffer
+ capIb(pC->xInp[z].pInpBuf);
+
+ errno = dec->fxns->decode(dec, NULL, &pC->xDec[z].decodeInStruct, &pC->xDec[z].decodeOutStruct);
+ if (errno < 0)
+ {
+ SW_BREAKPOINT;
+ }
+ //TRACE_TERSE0("Dec:decode done");
+
+ // copy decoder output to decoder output circular buffers
+ pCb = &pC->xDec[z].decOpCb;
+ //TRACE_TERSE1("Dec:pCb=0x%04x", (IArg)pCb);
+
+ pAfWrt = pC->xDec[z].decodeOutStruct.pAudioFrame;
+ //TRACE_TERSE1("Dec:pAfWrt=0x%04x", (IArg)pAfWrt);
+ //TRACE_TERSE1("nSamples=%d",pAfWrt->data.nSamples);
+
+ // FL: debug, capture audio frame
+ if (capAfWrite(pAfWrt, PAF_CNTR) != CAP_AF_SOK)
+ {
+ Log_info0("capAfWrite() error");
+ }
+
+ cbErrno = cbWriteAf(pCb, pAfWrt);
+ if (cbErrno < 0)
+ {
+ SW_BREAKPOINT;
+ }
+ //TRACE_TERSE0("Dec:cbWriteAf() complete");
+
+ // FL: debug, log circular buffer control variables
+ cbLog(pCb, 0);
+ }
+
+ // write back Dec configuration
+ Cache_wb(&gPAF_AST_config.xDec[z], sizeof(PAF_AST_Decode), Cache_Type_ALLD, 0);
+ Cache_wait();
+
+ // send dec info complete message to master
+ queId = MessageQ_getReplyQueue(pAspMsg);
+ pAspMsg->procId = hAspMsgSlave->slaveProcId;
+ pAspMsg->cmd = ASP_MASTER_DEC_DECODE_DONE;
+ pAspMsg->messageId = hAspMsgSlave->masterMessageId | ((UInt32)1<<31);
+ argIdx = 0; // set decErrno
+ *(Int32 *)&pAspMsg->buf[argIdx] = errno;
+ argIdx += sizeof(Int32); // set cbErrno
+ *(Int32 *)&pAspMsg->buf[argIdx] = cbErrno;
+ TRACE_MSG3("Tx ASP message, procId=%d, cmd=%d, messageId=0x%04x", pAspMsg->procId, pAspMsg->cmd, pAspMsg->messageId);
+ status = MessageQ_put(queId, (MessageQ_Msg)pAspMsg); /* send message back */
+ if (status != MessageQ_S_SUCCESS)
+ {
+ SW_BREAKPOINT;
+ }
+
+ break;
+
+ case ASP_SLAVE_DEC_DEACTIVATE:
+ gSlaveDecDeactivateCnt++;
+ // simulate dec info load
+ //simLoad(DEC_DEACTIVATE_LOAD);
+
+ argIdx = 0; // get decIdx
+ z = *(Int32 *)&pAspMsg->buf[argIdx];
+ TRACE_TERSE2("slaveCmd=%d, decIdx=%d", slaveCmd, z);
+
+ if (alg[z]->fxns->algDeactivate)
+ {
+ alg[z]->fxns->algDeactivate(alg[z]);
+ }
+
+ // send dec deactivate complete message to master
+ queId = MessageQ_getReplyQueue(pAspMsg);
+ pAspMsg->procId = hAspMsgSlave->slaveProcId;
+ pAspMsg->cmd = ASP_MASTER_DEC_DEACTIVATE_DONE;
+ pAspMsg->messageId = hAspMsgSlave->masterMessageId | ((UInt32)1<<31);
+ TRACE_MSG3("Tx ASP message, procId=%d, cmd=%d, messageId=0x%04x", pAspMsg->procId, pAspMsg->cmd, pAspMsg->messageId);
+ status = MessageQ_put(queId, (MessageQ_Msg)pAspMsg); /* send message back */
+ if (status != MessageQ_S_SUCCESS)
+ {
+ SW_BREAKPOINT;
+ }
+
+ break;
+
+ default:
+ TRACE_TERSE1("ERROR: invalid slaveCmd=%d", slaveCmd);
+ break;
+ }
+ }
+ }
+
+ Log_info0("exit taskAspSlaveFxn()");
+}
+
+
+// -----------------------------------------------------------------------------
+// AST Initialization Function - Memory Allocation
+//
+// Name: PAF_AST_initPhaseMalloc
+// Purpose: Audio Stream Task Function for initialization of data pointers
+// by allocation of memory.
+// From: audioStream1Task or equivalent
+// Uses: See code.
+// States: x
+// Return: 0 on success.
+// Source code line number on MEM_calloc failure.
+// Trace: Message Log "trace" in Debug Project Configuration reports:
+// * State information as per parent.
+// * Memory allocation errors.
+//
+Int
+PAF_AST_initPhaseMallocSlave(
+ const PAF_AST_Params *pP,
+ const PAF_AST_Patchs *pQ,
+ PAF_AST_Config *pC
+)
+{
+ Int as = pC->as; /* Audio Stream Number (1, 2, etc.) */
+ Int zMS = pC->masterStr;
+ Error_Block eb;
+
+ TRACE_TERSE1("PAF_AST_initPhaseMallocSlave: AS%d: initialization phase - memory allocation", as+zMS);
+
+ // Initialize error block
+ Error_init(&eb);
+
+ if (!(gpAudioFrameSlave = (PAF_AudioFrame *)Memory_calloc((IHeap_Handle)HEAP_INTERNAL1,
+ DECODEN * sizeof (PAF_AudioFrame), 4, &eb)))
+ {
+ TRACE_TERSE1("PAF_AST_initPhaseMallocSlave: AS%d: Memory_calloc failed", as+zMS);
+ SW_BREAKPOINT;
+ return __LINE__;
+ }
+ TRACE_TERSE3("PAF_AST_initPhaseMalloc. (gpAudioFrameSlave) %d bytes from space %d at 0x%x.",
+ DECODEN * sizeof (PAF_AudioFrame),
+ HEAP_ID_INTERNAL1, (IArg)gpAudioFrameSlave);
+
+ TRACE_TERSE1("PAF_AST_initPhaseMallocSlave: AS%d: initialization phase - memory allocation complete.", as+zMS);
+ return 0;
+} //PAF_AST_initPhaseMallocSlave
+
+// -----------------------------------------------------------------------------
+// AST Initialization Function - Memory Initialization from Configuration
+//
+// Name: PAF_AST_initPhaseConfig
+// Purpose: Audio Stream Task Function for initialization of data values
+// from parameters.
+// From: audioStream1Task or equivalent
+// Uses: See code.
+// States: x
+// Return: 0 on success.
+// Other as per initFrame0 and initFrame1.
+// Trace: Message Log "trace" in Debug Project Configuration reports:
+// * State information as per parent.
+//
+
+Int
+PAF_AST_initPhaseConfigSlave(
+ const PAF_AST_Params *pP,
+ const PAF_AST_Patchs *pQ,
+ PAF_AST_Config *pC
+)
+{
+ Int z;
+
+ // overwrite pointer to audio frame in framework decode control
+ for (z=DECODE1; z < DECODEN; z++) {
+ pC->xDec[z].decodeControl.pAudioFrame = &gpAudioFrameSlave[z];
+ pC->xDec[z].decodeInStruct.pAudioFrame = &gpAudioFrameSlave[z];
+ pP->fxns->initFrame0(pP, pQ, pC, z);
+ }
+
+ return 0;
+} //PAF_AST_initPhaseConfigSlave
+
+// -----------------------------------------------------------------------------
+// AST Initialization Function - ACP Algorithm Instantiation
+//
+// Name: PAF_AST_initPhaseAcpAlgSlave
+// Purpose: Audio Stream Task Function for initialization of ACP by
+// instantiation of the algorithm.
+// From: audioStream1Task or equivalent
+// Uses: See code.
+// States: x
+// Return: 0 on success.
+// Source code line number on ACP Algorithm creation failure.
+// Trace: Message Log "trace" in Debug Project Configuration reports:
+// * State information as per parent.
+// * Memory allocation errors.
+//
+Int
+PAF_AST_initPhaseAcpAlgSlave(
+ const PAF_AST_Params *pP,
+ const PAF_AST_Patchs *pQ,
+ PAF_AST_Config *pC
+)
+{
+ Int as = pC->as; /* Audio Stream Number (1, 2, etc.) */
+ Int z; /* input/encode/stream/decode/output */
+ /* counter */
+ Int betaPrimeOffset;
+ ACP_Handle acp;
+ Int zMS = pC->masterStr;
+ Int zS; //, zX;
+
+ TRACE_TERSE1("PAF_AST_initPhaseAcpAlgSlave: AS%d: initialization phase - ACP Algorithm", as+zMS);
+
+ ACP_MDS_init();
+
+ if (!(acp = (ACP_Handle )ACP_MDS_create (NULL)))
+ {
+ TRACE_TERSE1("PAF_AST_initPhaseAcpAlgSlave: AS%d: ACP algorithm instance creation failed", as+zMS);
+ return __LINE__;
+ }
+ pC->acpSlave = acp;
+
+ ((ALG_Handle)acp)->fxns->algControl((ALG_Handle)acp,
+ ACP_GETBETAPRIMEOFFSET, (IALG_Status *)&betaPrimeOffset);
+
+#if 0 // FL: master
+ for (z=INPUT1; z < INPUTN; z++)
+ {
+ zS = z;
+ for (zX = DECODE1; zX < DECODEN; zX++)
+ {
+ if (pP->inputsFromDecodes[zX] == z)
+ {
+ zS = pP->streamsFromDecodes[zX];
+ break;
+ }
+ }
+ acp->fxns->attach(acp, ACP_SERIES_STD,
+ STD_BETA_IB + betaPrimeOffset * (as-1+zS),
+ (IALG_Status *)&pC->xInp[z].inpBufStatus);
+ /* Ignore errors, not reported. */
+ }
+#endif
+
+ for (z=DECODE1; z < DECODEN; z++)
+ {
+ zS = pP->streamsFromDecodes[z];
+ acp->fxns->attach(acp, ACP_SERIES_STD,
+ STD_BETA_DECODE + betaPrimeOffset * (as-1+zS),
+ (IALG_Status *)&pC->xDec[z].decodeStatus);
+ /* Ignore errors, not reported. */
+ }
+
+#if 0 // FL: master
+ for (z=ENCODE1; z < ENCODEN; z++)
+ {
+ zS = pP->streamsFromEncodes[z];
+ acp->fxns->attach(acp, ACP_SERIES_STD,
+ STD_BETA_ENCODE + betaPrimeOffset * (as-1+zS),
+ (IALG_Status *)&pC->xEnc[z].encodeStatus);
+ acp->fxns->attach(acp, ACP_SERIES_STD,
+ STD_BETA_VOLUME + betaPrimeOffset * (as-1+zS),
+ (IALG_Status *)&pC->xEnc[z].volumeStatus);
+ /* Ignore errors, not reported. */
+ }
+#endif
+
+#if 0 // FL: master
+ for (z=OUTPUT1; z < OUTPUTN; z++)
+ {
+ zS = z;
+ for (zX = ENCODE1; zX < ENCODEN; zX++)
+ {
+ if (pP->outputsFromEncodes[zX] == z)
+ {
+ zS = pP->streamsFromEncodes[zX];
+ break;
+ }
+ }
+ acp->fxns->attach(acp, ACP_SERIES_STD,
+ STD_BETA_OB + betaPrimeOffset * (as-1+zS),
+ (IALG_Status *)&pC->xOut[z].outBufStatus);
+ /* Ignore errors, not reported. */
+ }
+#endif
+
+ TRACE_TERSE1("PAF_AST_initPhaseAcpAlgSlave: AS%d: initialization phase - ACP Algorithm complete.", as+zMS);
+
+ return 0;
+} //PAF_AST_initPhaseAcpAlg
+
+// -----------------------------------------------------------------------------
+// AST Initialization Function - Common Memory and Algorithms
+//
+// Name: PAF_AST_initPhaseCommonSlave
+// Purpose: Audio Stream Task Function for initialization of data pointers
+// by allocation for common memory and by instantiation for
+// algorithms.
+// From: audioStream1Task or equivalent
+// Uses: See code.
+// States: x
+// Return: 0 on success.
+// Source code line number on PAF_ALG_alloc failure.
+// Source code line number on PAF_ALG_mallocMemory failure.
+// Source code line number on Decode Chain initialization failure.
+// Source code line number on ASP Chain initialization failure.
+// Source code line number on Encode Chain initialization failure.
+// Trace: Message Log "trace" in Debug Project Configuration reports:
+// * State information as per parent.
+// * Memory allocation errors.
+//
+
+#include <pafsio_ialg.h>
+
+Int
+PAF_AST_initPhaseCommonSlave(
+ const PAF_AST_Params *pP,
+ const PAF_AST_Patchs *pQ,
+ PAF_AST_Config *pC
+)
+{
+ Int as = pC->as; /* Audio Stream Number (1, 2, etc.) */
+ Int z; /* stream counter */
+ //Int g; /* gear */
+ ACP_Handle acp = pC->acpSlave;
+ PAF_IALG_Config pafAlgConfig;
+ IALG_MemRec common[3][PAF_IALG_COMMON_MEMN+1];
+
+ TRACE_TERSE0("PAF_AST_initPhaseCommonSlav: initialization phase - Common Algorithms");
+
+ //
+ // Determine memory needs and instantiate algorithms across audio streams
+ //
+
+ TRACE_TERSE0("PAF_AST_initPhaseCommonSlave: calling PAF_ALG_setup.");
+ PAF_ALG_setup(&pafAlgConfig,
+ HEAP_ID_INTERNAL, HEAP_INTERNAL,
+ HEAP_ID_INTERNAL1, HEAP_INTERNAL1,
+ HEAP_ID_EXTERNAL, HEAP_EXTERNAL,
+ HEAP_ID_INTERNAL1_SHM, HEAP_INTERNAL1_SHM,
+ HEAP_CLEAR);
+
+ if (pP->fxns->headerPrint)
+ pP->fxns->headerPrint();
+
+ for (z=STREAM1; z < STREAMN; z++)
+ {
+ //Int zD, zE, zX;
+ Int zD, zX;
+
+ TRACE_TERSE1("PAF_AST_initPhaseCommonSlave: AS%d: initialization phase - Common Algorithms", as+z);
+
+ //
+ // Determine common memory needs of Decode Algorithms
+ //
+ PAF_ALG_init (common[z], lengthof (common[z]), COMMONSPACE);
+
+ zD = -1;
+ for (zX = DECODE1; zX < DECODEN; zX++)
+ {
+ if (pP->streamsFromDecodes[zX] == z)
+ {
+ zD = zX;
+ break;
+ }
+ }
+
+#if 0 // FL: master
+ zE = -1;
+ for (zX = ENCODE1; zX < ENCODEN; zX++)
+ {
+ if (pP->streamsFromEncodes[zX] == z)
+ {
+ zE = zX;
+ break;
+ }
+ }
+#endif
+
+ if (zD >= 0)
+ {
+ TRACE_TERSE1("PAF_AST_initPhaseCommonSlave: calling PAF_ALG_ALLOC for decoder common[%d].", z);
+ if (PAF_ALG_ALLOC (decLinkInit[zD-DECODE1], common[z]))
+ {
+ TRACE_TERSE3("AS%d: %s.%d: PAF_ALG_alloc failed", as+z, (IArg)__FUNCTION__, __LINE__);
+ TRACE_TERSE2("Failed to alloc %d bytes from space %d", common[z]->size, common[z]->space);
+
+ SW_BREAKPOINT;
+ return __LINE__;
+ }
+ TRACE_TERSE3("alloced %d bytes from space %d at 0x%x", common[z]->size, common[z]->space, (IArg)common[z]->base);
+ if(pP->fxns->allocPrint)
+ pP->fxns->allocPrint ((const PAF_ALG_AllocInit *)(decLinkInit[z-DECODE1]),sizeof (*(decLinkInit[z-DECODE1])), &pafAlgConfig);
+ }
+
+#if 0 // FL: master
+ TRACE_TERSE3("%s.%d: calling PAF_ALG_ALLOC for stream common[%d].", (IArg)__FUNCTION__, __LINE__, z);
+ TRACE_TERSE3("%s.%d: calling PAF_ALG_ALLOC for stream common[%d].", (IArg)__FUNCTION__, __LINE__, z);
+ if (PAF_ALG_ALLOC (aspLinkInit[z-STREAM1][0], common[z]))
+ {
+ TRACE_TERSE3("AS%d: %s.%d: PAF_ALG_alloc failed", as+z, (IArg)__FUNCTION__, __LINE__);
+ TRACE_TERSE2("Failed to alloc %d bytes from space %d ", common[z]->size, common[z]->space);
+ SW_BREAKPOINT;
+ return __LINE__;
+ }
+ TRACE_TERSE3("alloced %d bytes from space %d at 0x%x", common[z]->size, common[z]->space, (IArg)common[z]->base);
+ if(pP->fxns->allocPrint)
+ pP->fxns->allocPrint((const PAF_ALG_AllocInit *)(aspLinkInit[z-STREAM1][0]), sizeof (*(aspLinkInit[z-STREAM1][0])), &pafAlgConfig);
+#endif
+
+#if 0 // FL: master
+ if (zE >= 0)
+ {
+ TRACE_TERSE3("%s.%d: calling PAF_ALG_ALLOC/ for encoder common[%d].", (IArg)__FUNCTION__, __LINE__, z);
+ if (PAF_ALG_ALLOC (encLinkInit[zE-ENCODE1], common[z]))
+ {
+ TRACE_TERSE3("AS%d: %s.%d: PAF_ALG_alloc failed",
+ as+z, (IArg)__FUNCTION__, __LINE__);
+ SW_BREAKPOINT;
+ return __LINE__;
+ }
+ TRACE_TERSE3("alloced %d bytes from space %d at 0x%x", common[z]->size, common[z]->space, (IArg)common[z]->base);
+ if(pP->fxns->allocPrint)
+ pP->fxns->allocPrint((const PAF_ALG_AllocInit *)(encLinkInit[z-ENCODE1]), sizeof (*(encLinkInit[z-ENCODE1])), &pafAlgConfig);
+ }
+#endif
+
+ //
+ // Determine common memory needs of Logical IO drivers
+ //
+
+#if 0 // FL: master
+ // really need to loop over all inputs for this stream using the tables
+ // inputsFromDecodes and streamsFromDecodes. But these don't exist for this
+ // patch, and not needed for FS11, since there is only one input.
+ if (INPUT1 <= z && z < INPUTN)
+ {
+ TRACE_TERSE3("AS%d: PAF_AST_initPhaseCommon.%d: alloc inpLinkInit common[%d]", as+z, __LINE__, z);
+ if (PAF_ALG_ALLOC (inpLinkInit[z-INPUT1], common[z]))
+ {
+ TRACE_TERSE3("AS%d: %s.%d: PAF_ALG_alloc failed", as+z, (IArg)__FUNCTION__, __LINE__);
+ TRACE_TERSE2("failed to alloc %d bytes from space %d", common[z]->size, (IArg)common[z]->space);
+ SW_BREAKPOINT;
+ return __LINE__;
+ }
+ TRACE_TERSE3("alloced %d bytes from space %d at 0x%x", common[z]->size, common[z]->space, (IArg)common[z]->base);
+ if(pP->fxns->allocPrint)
+ pP->fxns->allocPrint((const PAF_ALG_AllocInit *)(inpLinkInit[z-INPUT1]), sizeof (*(inpLinkInit[z-INPUT1])), &pafAlgConfig);
+ }
+#endif
+
+#if 0 // FL: master
+ if (OUTPUT1 <= z && z < OUTPUTN)
+ {
+ TRACE_TERSE3("%s.%d: calling PAF_ALG_ALLOC outLinkInit common[%d].", (IArg)__FUNCTION__, __LINE__, z);
+ if (PAF_ALG_ALLOC (outLinkInit[z-OUTPUT1], common[z]))
+ {
+ TRACE_TERSE3("AS%d: %s.%d: PAF_ALG_alloc failed", as+z, (IArg)__FUNCTION__, __LINE__);
+ TRACE_TERSE2("Failed to alloc %d bytes from space %d", common[z]->size, (IArg)common[z]->space);
+ SW_BREAKPOINT;
+ return __LINE__;
+ }
+ TRACE_TERSE3("alloced %d bytes from space %d at 0x%x", common[z]->size, common[z]->space, (IArg)common[z]->base);
+ if(pP->fxns->allocPrint)
+ pP->fxns->allocPrint((const PAF_ALG_AllocInit *)(outLinkInit[z-INPUT1]), sizeof (*(outLinkInit[z-INPUT1])), &pafAlgConfig);
+ }
+#endif
+ }
+ {
+ // Changes made to share scratch between zones
+ // Assume maximum 3 zones and scratch common memory is at offset 0;
+ int max=0;
+ for (z=STREAM1; z < STREAMN; z++)
+ {
+ if (max<common[z][0].size)
+ max=common[z][0].size;
+ }
+ common[STREAM1][0].size=max;
+ for (z=STREAM1+1; z < STREAMN; z++)
+ common[z][0].size=0;
+ }
+
+ //
+ // Provide common memory needs of Decode Algorithms
+ //
+ for (z=STREAM1; z < STREAMN; z++)
+ {
+ //Int zD, zE, zX;
+ Int zD, zX;
+
+ zD = -1;
+ for (zX = DECODE1; zX < DECODEN; zX++)
+ {
+ if (pP->streamsFromDecodes[zX] == z)
+ {
+ zD = zX;
+ break;
+ }
+ }
+
+#if 0 // FL: master
+ zE = -1;
+ for (zX = ENCODE1; zX < ENCODEN; zX++)
+ {
+ if (pP->streamsFromEncodes[zX] == z)
+ {
+ zE = zX;
+ break;
+ }
+ }
+#endif
+
+ TRACE_TERSE0("PAF_AST_initPhaseCommonSlave: calling PAF_ALG_mallocMemory for common space.");
+ if (PAF_ALG_mallocMemory (common[z], &pafAlgConfig))
+ {
+ TRACE_TERSE3("AS%d: %s.%d: PAF_ALG_mallocMemory failed", as+z, (IArg)__FUNCTION__, __LINE__);
+ TRACE_TERSE3("AS%d: z: %d. Size 0x%x", as+z, z, common[z][0].size);
+ SW_BREAKPOINT;
+ return __LINE__;
+ }
+ TRACE_TERSE3("alloced %d bytes from space %d at 0x%x", common[z]->size, common[z]->space, (IArg)common[z]->base);
+ // share zone0 scratch with all zones
+ common[z][0].base=common[0][0].base;
+ if (pP->fxns->commonPrint)
+ pP->fxns->commonPrint (common[z], &pafAlgConfig);
+
+ //
+ // Instantiate Decode Algorithms
+ //
+ if (zD >= 0)
+ {
+ PAF_ASP_Chain *chain;
+ TRACE_TERSE0("PAF_AST_initPhaseCommonSlave: calling PAF_ASP_chainInit for decode.");
+ chain =
+ PAF_ASP_chainInit (&pC->xDec[zD].decChainData, pP->pChainFxns,
+ HEAP_INTERNAL, as+z, acp, &trace,
+ decLinkInit[zD-DECODE1], NULL, common[z], &pafAlgConfig);
+ if (!chain)
+ {
+ TRACE_TERSE1("AS%d: Decode chain initialization failed", as+z);
+ return __LINE__;
+ }
+ }
+
+#if 0 // FL: master
+ pC->xStr[z].aspChain[0] = NULL;
+ for (g=0; g < GEARS; g++)
+ {
+ PAF_ASP_Chain *chain;
+ TRACE_TERSE2("%s.%d: calling PAF_ASP_chainInit for ASPs.", (IArg)__FUNCTION__, __LINE__);
+ chain =
+ PAF_ASP_chainInit (&pC->xStr[z].aspChainData[g], pP->pChainFxns,
+ HEAP_INTERNAL, as+z, acp, &trace,
+ aspLinkInit[z-STREAM1][g], pC->xStr[z].aspChain[0], common[z], &pafAlgConfig);
+ if (! chain)
+ {
+ TRACE_TERSE2("AS%d: ASP chain %d initialization failed", as+z, g);
+ return __LINE__;
+ }
+ else
+ pC->xStr[z].aspChain[g] = chain;
+ }
+#endif
+
+#if 0 // FL: master
+ if (zE >= 0)
+ {
+ PAF_ASP_Chain *chain;
+ TRACE_TERSE2("%s.%d: calling PAF_ASP_chainInit for encode.", (IArg)__FUNCTION__, __LINE__);
+ chain =
+ PAF_ASP_chainInit (&pC->xEnc[zE].encChainData, pP->pChainFxns,
+ HEAP_INTERNAL, as+z, acp, &trace,
+ encLinkInit[zE-ENCODE1], NULL, common[z], &pafAlgConfig);
+ if (!chain)
+ {
+ TRACE_TERSE1("AS%d: Encode chain initialization failed", as+z);
+ return __LINE__;
+ }
+ }
+#endif
+
+#if 0 // FL: master
+ //
+ // Allocate non-common memories for Logical IO drivers
+ // Since these structures are used at run-time we allocate from external memory
+ if (INPUT1 <= z && z < INPUTN)
+ {
+ PAF_ASP_Chain *chain;
+ TRACE_TERSE3("AS%d: PAF_AST_initPhaseCommon.%d: non-common input chain init for %d",
+ as+z, __LINE__, z);
+ chain = PAF_ASP_chainInit (&pC->xInp[z].inpChainData, pP->pChainFxns,
+ HEAP_EXTERNAL, as+z, acp, &trace,
+ inpLinkInit[z-INPUT1], NULL, common[z], &pafAlgConfig);
+ if (!chain)
+ {
+ TRACE_TERSE1("AS%d: Input chain initialization failed", as+z);
+ return __LINE__;
+ }
+ }
+#endif
+
+#if 0 // FL: master
+ if (OUTPUT1 <= z && z < OUTPUTN)
+ {
+ PAF_ASP_Chain *chain;
+ TRACE_TERSE3("AS%d: PAF_AST_initPhaseCommon.%d: non-common output chain init for %d",
+ as+z, __LINE__, z);
+ chain = PAF_ASP_chainInit (&pC->xOut[z].outChainData, pP->pChainFxns,
+ HEAP_EXTERNAL, as+z, acp, &trace,
+ outLinkInit[z-OUTPUT1], NULL, common[z], &pafAlgConfig);
+ if (!chain)
+ {
+ TRACE_TERSE1("AS%d: Output chain initialization failed", as+z);
+ return __LINE__;
+ }
+ }
+#endif
+ }
+ TRACE_TERSE1("PAF_AST_initPhaseCommonSlave: AS%d: Returning complete.", as+z);
+
+ return 0;
+} //PAF_AST_initPhaseCommon
+
+// -----------------------------------------------------------------------------
+// AST Initialization Function - Algorithm Keys
+//
+// Name: PAF_AST_initPhaseAlgKeySlave
+// Purpose: Audio Stream Task Function for initialization of data values
+// from parameters for Algorithm Keys.
+// From: audioStream1Task or equivalent
+// Uses: See code.
+// States: x
+// Return: 0.
+// Trace: Message Log "trace" in Debug Project Configuration reports:
+// * State information as per parent.
+//
+// .............................................................................
+Int
+PAF_AST_initPhaseAlgKeySlave(
+ const PAF_AST_Params *pP,
+ const PAF_AST_Patchs *pQ,
+ PAF_AST_Config *pC
+)
+{
+ Int as = pC->as; /* Audio Stream Number (1, 2, etc.) */
+ Int z; /* decode/encode counter */
+ Int s; /* key number */
+ PAF_ASP_Link *that;
+
+ (void)as; // clear warning.
+
+ TRACE_VERBOSE1("PAF_AST_initPhaseCommonSlave: AS%d: initialization phase - Algorithm Keys", as);
+
+ for (z=DECODE1; z < DECODEN; z++)
+ {
+ for (s=0; s < pP->pDecAlgKey->length; s++)
+ {
+ if ((pP->pDecAlgKey->code[s].full != 0)
+ && (that = PAF_ASP_chainFind (&pC->xDec[z].decChainData, pP->pDecAlgKey->code[s])))
+ {
+ pC->xDec[z].decAlg[s] = (ALG_Handle )that->alg;
+ /* Cast in interface, for now --Kurt */
+ }
+ else
+ pC->xDec[z].decAlg[s] = NULL;
+ }
+ }
+
+#if 0 // FL: master
+ for (z=ENCODE1; z < ENCODEN; z++)
+ {
+ for (s=0; s < pP->pEncAlgKey->length; s++)
+ {
+ if (pP->pEncAlgKey->code[s].full != 0
+ && (that = PAF_ASP_chainFind (&pC->xEnc[z].encChainData, pP->pEncAlgKey->code[s])))
+ pC->xEnc[z].encAlg[s] = (ALG_Handle )that->alg;
+ /* Cast in interface, for now --Kurt */
+ else
+ pC->xEnc[z].encAlg[s] = NULL;
+ }
+ }
+#endif
+
+ return 0;
+} //PAF_AST_initPhaseAlgKey
+
+Int
+PAF_AST_initFrame0Slave(
+ const PAF_AST_Params *pP,
+ const PAF_AST_Patchs *pQ,
+ PAF_AST_Config *pC,
+ Int z
+)
+{
+ Int as = pC->as; /* Audio Stream Number (1, 2, etc.) */
+ Int aLen;
+ Int aSize = sizeof(PAF_AudioData);
+ Int aAlign = aSize < sizeof (int) ? sizeof (int) : aSize;
+ Int maxFrameLength = pP->maxFramelength;
+ PAF_AudioData *aBuf=NULL;
+ XDAS_UInt8 *metadataBuf;
+ Int8 i;
+ Error_Block eb;
+ PAF_AudioFrame *pAudioFrame;
+
+ pAudioFrame = &gpAudioFrameSlave[z];
+ if (pAudioFrame == NULL)
+ {
+ SW_BREAKPOINT;
+ }
+
+ // Initialize error block
+ Error_init(&eb);
+
+ //maxFrameLength += PA_MODULO - maxFrameLength % PA_MODULO; // compute maximum framelength (needed for ARC support)
+ aLen = numchan[z] * maxFrameLength;
+
+ //
+ // Initialize audio frame elements directly
+ //
+ pAudioFrame->fxns = pP->pAudioFrameFunctions;
+ pAudioFrame->data.nChannels = PAF_MAXNUMCHAN;
+ pAudioFrame->data.nSamples = FRAMELENGTH;
+ pAudioFrame->data.sample = gAudioFrameChannelPointersSlave;
+ pAudioFrame->data.samsiz = gAudioFrameChannelSizesSlave;
+ pAudioFrame->pChannelConfigurationMaskTable = &PAF_ASP_stdCCMT;
+
+ //
+ // Allocate memory for and initialize pointers to audio data buffers
+ //
+ // The NUMCHANMASK is used to identify the channels for which data
+ // buffers can be allocated. Using this mask and switch statement
+ // rather than some other construct allows efficient code generation,
+ // providing just the code necessary (with significant savings).
+ //
+ if (pP->fxns->bufMemPrint)
+ {
+ pP->fxns->bufMemPrint(z, aLen*aSize, HEAP_ID_FRMBUF, 2);
+ }
+
+ TRACE_TERSE1("PAF_AST_initFrame0Slave: AS%d: Memory_calloc for audio buffers", as+z);
+
+ if (aLen != 0)
+ {
+ if (!(aBuf = (PAF_AudioData *)Memory_calloc((IHeap_Handle)HEAP_FRMBUF, aLen*aSize, aAlign, &eb)))
+ {
+ TRACE_TERSE2("AS%d: %s: MEM_calloc failed", as+z, (IArg)__FUNCTION__);
+ TRACE_TERSE2(" maxFrameLength: %d. aLen*aSize: %d", maxFrameLength, aLen*aSize);
+ SW_BREAKPOINT;
+ return __LINE__;
+ }
+ }
+
+ TRACE_TERSE3(" maxFrameLength: %d. aLen*aSize: %d. aBuf: 0x%x", maxFrameLength, aLen*aSize, (IArg)aBuf);
+
+ TRACE_TERSE1("PAF_AST_initFrame0Slave: AS%d: Memory_calloc for metadata buffers", as+z);
+ if (!(metadataBuf = (XDAS_UInt8 *)Memory_calloc((IHeap_Handle)HEAP_MDBUF, pP->pMetadataBufStatus->bufSize*pP->pMetadataBufStatus->NumBuf, pP->pMetadataBufStatus->alignment, &eb)))
+ {
+ TRACE_TERSE1("PAF_AST_initFrame0Slave: AS%d: Memory_calloc failed", as+z);
+ TRACE_TERSE1(" bufSize*NumBuf: %d", pP->pMetadataBufStatus->bufSize*pP->pMetadataBufStatus->NumBuf);
+ SW_BREAKPOINT;
+ return __LINE__;
+ }
+
+ {
+ Int i;
+
+ for (i=0; i < PAF_MAXNUMCHAN_AF; i++)
+ gAudioFrameChannelPointersSlave[i] = NULL;
+ }
+
+ // MID 314
+ if((numchan[z] > PAF_MAXNUMCHAN) || (numchan[z] < 1))
+ {
+ TRACE_TERSE1("PAF_AST_initFrame0Slave: AS%d: unsupported option", as+z);
+ return __LINE__;
+ }
+ else
+ {
+ Int j = 0;
+ TRACE_TERSE1("PAF_AST_initFrame0Slave: AFChanPtrMap[%d][i]", numchan[z]);
+ for (i=0; i<numchan[z]; i++)
+ {
+ Int8 chan = AFChanPtrMap[numchan[z]][i];
+ if (chan != -1)
+ {
+ gAudioFrameChannelPointersSlave[chan] = aBuf + maxFrameLength*(j+1) - FRAMELENGTH;
+ j++;
+ TRACE_TERSE3("PAF_AST_initFrame0Slave: chan = %d = AFChanPtrMap[%d][%d].", chan, numchan[z], i);
+ TRACE_TERSE2("PAF_AST_initFrame0Slave: audioFrameChannelPointers[%d]: 0x%x", chan, (IArg)gAudioFrameChannelPointersSlave[chan]);
+ }
+ }
+ }
+
+ //
+ // Initialize meta data elements
+ //
+ pAudioFrame->pafBsMetadataUpdate = XDAS_FALSE;
+ pAudioFrame->numPrivateMetadata = 0;
+ pAudioFrame->bsMetadata_offset = 0;
+ pAudioFrame->bsMetadata_type = PAF_bsMetadata_channelData;
+ pAudioFrame->privateMetadataBufSize = pP->pMetadataBufStatus->bufSize;
+ for (i=0; i<pP->pMetadataBufStatus->NumBuf; i++)
+ {
+ pAudioFrame->pafPrivateMetadata[i].offset = 0;
+ pAudioFrame->pafPrivateMetadata[i].size = 0;
+ pAudioFrame->pafPrivateMetadata[i].pMdBuf = metadataBuf + pP->pMetadataBufStatus->bufSize*i;
+ }
+
+ return 0;
+} //PAF_AST_initFrame0Slave
+
+Int
+PAF_AST_initFrame1Slave(
+ const PAF_AST_Params *pP,
+ const PAF_AST_Patchs *pQ,
+ PAF_AST_Config *pC,
+ Int z,
+ Int sourceSelect
+)
+{
+ PAF_AudioFrame *pAudioFrame;
+
+ pAudioFrame = &gpAudioFrameSlave[z];
+ if (pAudioFrame == NULL)
+ {
+ SW_BREAKPOINT;
+ }
+
+ // Reinitialize audio frame elements:
+ pAudioFrame->sampleRate = PAF_SAMPLERATE_UNKNOWN;
+ pAudioFrame->sampleCount = 0;
+ pAudioFrame->channelConfigurationRequest.legacy = PAF_CC_NONE;
+ pAudioFrame->channelConfigurationStream.legacy = PAF_CC_NONE;
+ pAudioFrame->data.nChannels = PAF_MAXNUMCHAN;
+
+ if (sourceSelect == PAF_SOURCE_PCM)
+ {
+ pAudioFrame->data.nSamples = FRAMELENGTH;
+ }
+ else if (sourceSelect == PAF_SOURCE_DDP)
+ {
+ pAudioFrame->data.nSamples = 1536;
+ }
+ else
+ {
+ pAudioFrame->data.nSamples = FRAMELENGTH;
+ }
+
+ return 0;
+} //PAF_AST_initFrame1Slave
+
+
+#if 0
+// .............................................................................
+// Audio Stream Task Parameter Functions - PA17
+//
+// Name: PAF_AST_params_fxnsPA17
+// Purpose: Collect the functions that embody the implementation of
+// Audio Framework Number 2 for use as a jump table.
+// From: PAF_AST_Params
+// Uses: See contents.
+// States: N.A.
+// Return: N.A.
+// Trace: None.
+//
+const PAF_AST_Fxns PAF_AST_params_fxnsPA17_Slave =
+{
+ { // initPhase[8]
+ NULL,
+ NULL,
+ PAF_AST_initPhaseAcpAlgSlave,
+ PAF_AST_initPhaseCommonSlave,
+ PAF_AST_initPhaseAlgKeySlave,
+ NULL,
+ NULL,
+ NULL
+ },
+ NULL, //PAF_AST_initFrame0, // initFrame0
+ NULL, //PAF_AST_initFrame1, // initFrame1
+ NULL, /* PAF_AST_passProcessing, */ // passProcessing
+ NULL, /* PAF_AST_passProcessingCopy, */ // passProcessingCopy
+ NULL, //PAF_AST_autoProcessing, // autoProcessing
+ NULL, //PAF_AST_decodeProcessing, // decodeProcessing
+ NULL, //PAF_AST_decodeCommand, // decodeCommand
+ NULL, //PAF_AST_encodeCommand, // encodeCommand
+ NULL, //PAF_AST_decodeInit, // decodeInit
+ NULL, //PAF_AST_decodeInfo, // decodeInfo
+ NULL, //PAF_AST_decodeInfo1, // decodeInfo1
+ NULL, //PAF_AST_decodeInfo2, // decodeInfo2
+ NULL, //PAF_AST_decodeCont, // decodeCont
+ NULL, //PAF_AST_decodeDecode,
+ NULL, //PAF_AST_decodeStream, // decodeStream
+ NULL, //PAF_AST_decodeEncode, // decodeEncode
+ NULL, //PAF_AST_decodeFinalTest, // decodeFinalTest
+ NULL, //PAF_AST_decodeComplete, // decodeComplete
+ NULL, //PAF_AST_selectDevices, // selectDevices
+ NULL, //PAF_AST_sourceDecode, // sourceDecode
+ NULL, //PAF_AST_startOutput, // startOutput
+ NULL, //PAF_AST_stopOutput, // stopOutput
+ NULL, //PAF_AST_setCheckRateX, // setCheckRateX
+ NULL, //PAF_AST_streamChainFunction, // streamChainFunction
+ NULL, //PAF_DEC_deviceAllocate, // deviceAllocate
+ NULL, //PAF_DEC_deviceSelect, // deviceSelect
+ NULL, //PAF_DEC_computeFrameLength, // computeFrameLength
+ NULL, //PAF_DEC_updateInputStatus, // updateInputStatus
+ NULL, /* PAF_BUF_copy, */ // copy
+ NULL, /*headerPrint*/ // headerPrint
+ NULL, /*allocPrint*/ // allocPrint
+ NULL, /*commonPrint*/ // commonPrint
+ NULL, /*bufMemPrint*/ // bufMemPrint
+ NULL, /*memStatusPrint*/ // memStatusPrint
+ // For ARC
+ NULL, //PAF_ARC_controlRate, // controlRate
+};
+#endif
diff --git a/procsdk_audio_x_xx_xx_xx/test_arm/framework/audioStreamProc_slave.h b/procsdk_audio_x_xx_xx_xx/test_arm/framework/audioStreamProc_slave.h
--- /dev/null
@@ -0,0 +1,80 @@
+/*
+ * ======== audioStreamProc_slave.h ========
+ */
+
+#ifndef _ASP_SLAVE_H_
+#define _ASP_SLAVE_H_
+
+#include <xdc/std.h>
+
+#include "as1-f2-params.h"
+#include "as1-f2-patchs.h"
+#include "as1-f2-config.h"
+
+// Global debug counter */
+extern Uint32 gTaskAspSlaveCnt; // debug counter for ASP slave task
+
+// Purpose: Audio Stream Task Function for initialization of data pointers
+// by allocation of memory.
+Int
+PAF_AST_initPhaseMallocSlave(
+ const PAF_AST_Params *pP,
+ const PAF_AST_Patchs *pQ,
+ PAF_AST_Config *pC
+);
+
+// Purpose: Audio Stream Task Function for initialization of data values
+// from parameters.
+Int
+PAF_AST_initPhaseConfigSlave(
+ const PAF_AST_Params *pP,
+ const PAF_AST_Patchs *pQ,
+ PAF_AST_Config *pC
+);
+
+// Purpose: Audio Stream Task Function for initialization of ACP by
+// instantiation of the algorithm.
+Int
+PAF_AST_initPhaseAcpAlgSlave(
+ const PAF_AST_Params *pP,
+ const PAF_AST_Patchs *pQ,
+ PAF_AST_Config *pC
+);
+
+// Purpose: Audio Stream Task Function for initialization of data pointers
+// by allocation for common memory and by instantiation for
+// algorithms.
+Int
+PAF_AST_initPhaseCommonSlave(
+ const PAF_AST_Params *pP,
+ const PAF_AST_Patchs *pQ,
+ PAF_AST_Config *pC
+);
+
+// Purpose: Audio Stream Task Function for initialization of data values
+// from parameters for Algorithm Keys.
+Int
+PAF_AST_initPhaseAlgKeySlave(
+ const PAF_AST_Params *pP,
+ const PAF_AST_Patchs *pQ,
+ PAF_AST_Config *pC
+);
+
+Int
+PAF_AST_initFrame0Slave(
+ const PAF_AST_Params *pP,
+ const PAF_AST_Patchs *pQ,
+ PAF_AST_Config *pC,
+ Int z
+);
+
+Int
+PAF_AST_initFrame1Slave(
+ const PAF_AST_Params *pP,
+ const PAF_AST_Patchs *pQ,
+ PAF_AST_Config *pC,
+ Int z,
+ Int sourceSelect
+);
+
+#endif /* _ASP_SLAVE_H_ */
diff --git a/procsdk_audio_x_xx_xx_xx/test_arm/framework/itopo/params_slave.c b/procsdk_audio_x_xx_xx_xx/test_arm/framework/itopo/params_slave.c
--- /dev/null
@@ -0,0 +1,907 @@
+
+/*
+* Copyright (C) 2004-2014 Texas Instruments Incorporated - http://www.ti.com/
+* All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions
+* are met:
+*
+* Redistributions of source code must retain the above copyright
+* notice, this list of conditions and the following disclaimer.
+*
+* Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions and the following disclaimer in the
+* documentation and/or other materials provided with the
+* distribution.
+*
+* Neither the name of Texas Instruments Incorporated nor the names of
+* its contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+*/
+
+//
+// PAF_DEVICE_VERSION Symbol Definitions
+
+#define PAF_DEVICE_VERSION (PAF_DEVICE & 0xffff)
+
+#include <xdc/cfg/global.h>
+#include <ti/procsdk_audio/procsdk_audio_typ.h>
+
+#include <stdasp.h>
+#include <pafsio_ialg.h>
+
+#include "paf_heapMgr.h"
+
+#include "asp1.h"
+#include "as1-f2-params.h"
+
+//
+// Framework Declarations
+//
+
+//#define PAF_AST_params_fxnsPA PAF_AST_params_fxnsPA17
+#define PAF_AST_params_fxnsPA PAF_AST_params_fxnsPA17_Slave
+
+//
+// Audio Data Representation Definitions
+//
+// External declarations to patched IROM provide standard functionality.
+//
+
+#if 1
+// FL: extern this, making it look like shared information between ARM/DSP.
+// FL: Note could just define the same thing in separate file for ARM application (i.e. add "Slave" at end of identifier).
+/* audio frame "width" in channels */
+const SmInt PAF_AST_params_numchan[1] =
+{
+ 32,
+};
+#else
+extern const SmInt PAF_AST_params_numchan[];
+#endif
+
+///
+// Audio Stream Processing Function Table Definition
+//
+
+const PAF_AudioFunctions PAF_AST_params_audioFrameFunctions_Slave =
+{
+ &PAF_ASP_dB2ToLinear,
+ &PAF_ASP_channelMask,
+ &PAF_ASP_programFormat,
+ &PAF_ASP_sampleRateHz,
+ &PAF_ASP_delay,
+};
+
+//
+// Source Select Array Declarations -- algorithm keys & sio map
+//
+// External declarations to patched IROM provide standard functionality.
+//
+
+#if 1
+// FL: extern this, making it look like shared information between ARM/DSP.
+// FL: Note could just define the same thing in separate file for ARM application (i.e. add "Slave" at end of identifier).
+const PAF_ASP_AlgKey PAF_ASP_params_decAlgKey =
+{
+ PAF_SOURCE_N, // length
+ /* Relies on the fact that ACP_SERIES_* != 0 here */
+ 0, // PAF_SOURCE_UNKNOWN
+ 0, // PAF_SOURCE_NONE
+ 0, // PAF_SOURCE_PASS
+ PAF_ASP_ALPHACODE (STD, SNG), // PAF_SOURCE_SNG
+ 0, // PAF_SOURCE_AUTO
+ 0, // PAF_SOURCE_BITSTREAM
+ PAF_ASP_ALPHACODE (STD, DTSHD), // PAF_SOURCE_DTSALL
+ PAF_ASP_ALPHACODE (STD, PCM), // PAF_SOURCE_PCMAUTO
+ PAF_ASP_ALPHACODE (STD, PCM), // PAF_SOURCE_PCM
+ PAF_ASP_ALPHACODE (STD, PCN), // PAF_SOURCE_PC8 /* unused */
+ PAF_ASP_ALPHACODE (STD, DDP), // PAF_SOURCE_AC3
+ PAF_ASP_ALPHACODE (STD, DTSHD), // PAF_SOURCE_DTS
+ PAF_ASP_ALPHACODE (STD, AAC), // PAF_SOURCE_AAC
+ PAF_ASP_ALPHACODE (STD, MPG), // PAF_SOURCE_MPEG /* unused */
+ PAF_ASP_ALPHACODE (STD, DTSHD), // PAF_SOURCE_DTS12
+ PAF_ASP_ALPHACODE (STD, DTSHD), // PAF_SOURCE_DTS13
+ PAF_ASP_ALPHACODE (STD, DTSHD), // PAF_SOURCE_DTS14
+ PAF_ASP_ALPHACODE (STD, DTSHD), // PAF_SOURCE_DTS16
+ 0, // PAF_SOURCE_WMA9PRO
+ 0, // PAF_SOURCE_MP3
+ PAF_ASP_ALPHACODE (STD, DSD), // PAF_SOURCE_DSD1
+ PAF_ASP_ALPHACODE (STD, DSD), // PAF_SOURCE_DSD2
+ PAF_ASP_ALPHACODE (STD, DSD), // PAF_SOURCE_DSD3
+ PAF_ASP_ALPHACODE (STD, DDP), // PAF_SOURCE_DDP
+ PAF_ASP_ALPHACODE (STD, DTSHD), // PAF_SOURCE_DTSHD
+ PAF_ASP_ALPHACODE (STD, THD), // PAF_SOURCE_THD
+ PAF_ASP_ALPHACODE (STD, DXP), // PAF_SOURCE_DXP
+};
+#else
+extern const PAF_ASP_AlgKey PAF_ASP_params_decAlgKey;
+#endif
+
+#if 0
+const PAF_ASP_AlgKey PAF_ASP_params_encAlgKey =
+{
+ PAF_SOURCE_N, // length
+ /* Relies on the fact that ACP_SERIES_* != 0 here */
+ 0, // PAF_SOURCE_UNKNOWN
+ 0, // PAF_SOURCE_NONE
+ 0, // PAF_SOURCE_PASS
+ 0, // PAF_SOURCE_SNG
+ 0, // PAF_SOURCE_AUTO
+ 0, // PAF_SOURCE_BITSTREAM
+ 0, // PAF_SOURCE_DTSALL
+ 0, // PAF_SOURCE_PCMAUTO
+ PAF_ASP_ALPHACODE (STD, PCE), // PAF_SOURCE_PCM
+ 0, // PAF_SOURCE_PC8
+ 0, // PAF_SOURCE_AC3
+ 0, // PAF_SOURCE_DTS
+ 0, // PAF_SOURCE_AAC
+ 0, // PAF_SOURCE_MPEG
+ 0, // PAF_SOURCE_DTS12
+ 0, // PAF_SOURCE_DTS13
+ 0, // PAF_SOURCE_DTS14
+ 0, // PAF_SOURCE_DTS16
+ 0, // PAF_SOURCE_WMA9PRO
+ PAF_ASP_ALPHACODE (STD, MPE), // PAF_SOURCE_MP3
+ 0, // PAF_SOURCE_DSD1
+ 0, // PAF_SOURCE_DSD2
+ 0 // PAF_SOURCE_DSD3
+};
+#endif // FL: #if 0
+
+#if 0
+const PAF_ASP_SioMap PAF_ASP_params_decSioMap =
+{
+ PAF_SOURCE_N, // length
+ PAF_SOURCE_UNKNOWN, // PAF_SOURCE_UNKNOWN -> ...
+ PAF_SOURCE_NONE, // PAF_SOURCE_NONE -> ...
+ PAF_SOURCE_PASS, // PAF_SOURCE_PASS -> ...
+ PAF_SOURCE_PCM, // PAF_SOURCE_SNG -> PCM
+ PAF_SOURCE_AUTO, // PAF_SOURCE_AUTO -> ...
+ PAF_SOURCE_BITSTREAM, // PAF_SOURCE_BITSTREAM -> ...
+ PAF_SOURCE_DTSALL, // PAF_SOURCE_UNUSED1 -> ...
+ PAF_SOURCE_PCMAUTO, // PAF_SOURCE_UNUSED2 -> ...
+ PAF_SOURCE_PCM, // PAF_SOURCE_PCM -> ...
+ PAF_SOURCE_PC8, // PAF_SOURCE_PC8 -> ...
+ PAF_SOURCE_AC3, // PAF_SOURCE_AC3 -> ...
+ PAF_SOURCE_DTS, // PAF_SOURCE_DTS -> ...
+ PAF_SOURCE_AAC, // PAF_SOURCE_AAC -> ...
+ PAF_SOURCE_MPEG, // PAF_SOURCE_MPEG -> ...
+ PAF_SOURCE_DTS12, // PAF_SOURCE_DTS12 -> ...
+ PAF_SOURCE_DTS13, // PAF_SOURCE_DTS13 -> ...
+ PAF_SOURCE_DTS14, // PAF_SOURCE_DTS14 -> ...
+ PAF_SOURCE_DTS16, // PAF_SOURCE_DTS16 -> ...
+ PAF_SOURCE_WMA9PRO, // PAF_SOURCE_WMA9PRO -> ...
+ PAF_SOURCE_MP3, // PAF_SOURCE_MP3 -> ...
+ PAF_SOURCE_DSD1, // PAF_SOURCE_DSD1 -> ...
+ PAF_SOURCE_DSD2, // PAF_SOURCE_DSD2 -> ...
+ PAF_SOURCE_DSD3, // PAF_SOURCE_DSD3 -> ...
+ PAF_SOURCE_DDP, // PAF_SOURCE_DDP -> ...
+ PAF_SOURCE_DTSHD, // PAF_SOURCE_DTSHD -> ...
+ PAF_SOURCE_THD, // PAF_SOURCE_THD -> ...
+ PAF_SOURCE_DXP, // PAF_SOURCE_DXP -> ...
+};
+#endif // FL: #if 0
+
+#if 1
+// FL: This MUST be shared between ARM/DSP.
+// FL: extern this, making it look like shared information between ARM/DSP.
+//
+// Mapping Declarations -- from *coders to *puts
+//
+// External declarations to patched IROM provide standard functionality.
+//
+const SmInt PAF_AST_streamsFromDecodes_std[DECODEN_MAX] =
+{
+ 0, 1, 2,
+};
+#else
+extern const SmInt PAF_AST_streamsFromDecodes_std[DECODEN_MAX];
+#endif
+
+#if 0
+const SmInt PAF_AST_streamsFromEncodes_std[ENCODEN_MAX] =
+{
+ 0, 1, 2,
+};
+#endif
+
+const SmInt PAF_AST_inputsFromDecodes_std[DECODEN_MAX] =
+{
+ 0, 1, 2,
+};
+
+#if 0
+extern const SmInt PAF_AST_outputsFromEncodes_std[ENCODEN_MAX];
+#ifndef __TI_EABI__
+asm ("_PAF_AST_outputsFromEncodes_std .set _PAF_AST_inputsFromDecodes_std");
+#else
+asm ("PAF_AST_outputsFromEncodes_std .set PAF_AST_inputsFromDecodes_std");
+#endif
+
+#endif // FL: #if 0
+
+#if 0
+//
+// Setting of audio stream order
+//
+
+const SmInt PAF_AST_streamOrder[1] =
+{
+ 0,
+};
+#endif // FL: #if 0
+
+//
+// Audio Framework Initialization Function Table Declarations
+//
+// External declarations to patched IROM provide standard functionality.
+//
+
+extern const PAF_AST_Fxns PAF_AST_params_fxnsPA;
+
+#if 0
+//
+// Audio Framework Status Initialization Declarations
+//
+// External declarations to patched IROM provide standard functionality.
+//
+
+const PAF_InpBufStatus PAF_AST_params_inpBufStatus =
+{
+ sizeof (PAF_InpBufStatus), // size
+ 0, // mode
+ 0, // sioSelect
+ 0x80, // lockOverride = none
+ 0, // unused
+ PAF_SAMPLERATE_UNKNOWN, // sampleRateOverride
+ PAF_SAMPLERATE_NONE, // sampleRateData
+ PAF_SAMPLERATE_NONE, // sampleRateMeasured
+ PAF_SAMPLERATE_UNKNOWN, // sampleRateStatus
+ PAF_IEC_AUDIOMODE_UNKNOWN, // nonaudio
+ PAF_IEC_PREEMPHASIS_UNKNOWN, // emphasisData
+ 0, // emphasisOverride
+ PAF_IEC_PREEMPHASIS_NO, // emphasisStatus
+ 0, // lock
+ 0, // scanAtHighSampleRateMode
+ 0, // zeroRun
+ 0, // unused2[1] // FL: rateTrackMode
+ 24, // precisionDefault
+ -1, // precisionDetect
+ 0, // precisionOverride
+ 0, // precisionInput
+ 100, // zeroRunTrigger
+ 100, // zeroRunRestart
+ 2048, // unknownTimeout
+ 0, // lastFrameMask
+ 0, // lastFrameFlag
+ 0, // reportDTS16AsDTSForLargeSampleRate
+ 0, 0 // reserved
+};
+#endif // FL: #if 0
+
+#if 1
+// FL: This MUST be shared between ARM/DSP.
+// FL: extern this, making it look like shared information between ARM/DSP.
+const PAF_DecodeStatus PAF_AST_params_decodeStatus_primary =
+{
+ sizeof (PAF_DecodeStatus), // size
+ 1, // mode
+ 0, // unused1
+ 0, // command.action
+ 0, // command.result
+ PAF_SAMPLERATE_UNKNOWN, // sampleRate
+ PAF_SOURCE_NONE, // sourceSelect
+ PAF_SOURCE_UNKNOWN, // sourceProgram
+ PAF_SOURCE_UNKNOWN, // sourceDecode
+ PAF_SOURCE_DUAL_STEREO, // sourceDual
+ 4, // sourceKaraoke: both
+ 0, // aspGearControl: unused
+ 0, // aspGearStatus: unused
+ 0, 0, 0, 0, // Unused
+ 0, 0, 0, 0, // Unused
+ 0, 0, 0, 0, // Unused
+ 0, 0, 0, 0, // Unused
+ 0, 0, 0, 0, // Unused
+ 0, // frameCount
+ 0x40, // karaoka: Vocal 1 Level
+ 0x40, // karaoka: Vocal 1 Pan
+ 0x40, // karaoka: Vocal 2 Level
+ 0xc0, // karaoka: Vocal 2 Pan
+ 0x40, // karaoka: Melody Level
+ 0x00, // karaoka: Melody Pan
+ 0, // decBypass
+ 0, // unused
+ 0, // frameLength: reset later
+ 1, // bufferRatio: unity
+ PAF_IEC_PREEMPHASIS_UNKNOWN, // emphasis
+ 0, // bufferDrift
+ 0, 0,
+ PAF_CC_SAT_SURROUND4, PAF_CC_SUB_ONE, PAF_CC_AUX_SURROUND4_UNKNOWN, 0, 0, 0, 0, 0,
+ // channelConfigurationRequest.full
+ PAF_CC_SAT_UNKNOWN, PAF_CC_SUB_ZERO, 0, 0, 0, 0, 0, 0,
+ // channelConfigurationProgram.full
+ PAF_CC_SAT_UNKNOWN, PAF_CC_SUB_ZERO, 0, 0, 0, 0, 0, 0,
+ // channelConfigurationDecode.full
+ PAF_CC_SAT_UNKNOWN, PAF_CC_SUB_ZERO, 0, 0, 0, 0, 0, 0,
+ // channelConfigurationDownmix.full
+ PAF_CC_SAT_UNKNOWN, PAF_CC_SUB_ZERO, 0, 0, 0, 0, 0, 0,
+ // channelConfigurationOverride.full
+ -3, // channelMap.from[0]
+ -3, // channelMap.from[1]
+ -3, // channelMap.from[2]
+ -3, // channelMap.from[3]
+ -3, // channelMap.from[4]
+ -3, // channelMap.from[5]
+ -3, // channelMap.from[6]
+ -3, // channelMap.from[7]
+ -3, // channelMap.from[8]
+ -3, // channelMap.from[9]
+ -3, // channelMap.from[10]
+ -3, // channelMap.from[11]
+ -3, // channelMap.from[12]
+ -3, // channelMap.from[13]
+ -3, // channelMap.from[14]
+ -3, // channelMap.from[15]
+ -3, // channelMap.from[16]
+ -3, // channelMap.from[17]
+ -3, // channelMap.from[18]
+ -3, // channelMap.from[19]
+ -3, // channelMap.from[20]
+ -3, // channelMap.from[21]
+ -3, // channelMap.from[22]
+ -3, // channelMap.from[23]
+ -3, // channelMap.from[24]
+ -3, // channelMap.from[25]
+ -3, // channelMap.from[26]
+ -3, // channelMap.from[27]
+ -3, // channelMap.from[28]
+ -3, // channelMap.from[29]
+ -3, // channelMap.from[30]
+ -3, // channelMap.from[31]
+ -3, // channelMap.to[0]
+ -3, // channelMap.to[1]
+ -3, // channelMap.to[2]
+ -3, // channelMap.to[3]
+ -3, // channelMap.to[4]
+ -3, // channelMap.to[5]
+ -3, // channelMap.to[6]
+ -3, // channelMap.to[7]
+ -3, // channelMap.to[8]
+ -3, // channelMap.to[9]
+ -3, // channelMap.to[10]
+ -3, // channelMap.to[11]
+ -3, // channelMap.to[12]
+ -3, // channelMap.to[13]
+ -3, // channelMap.to[14]
+ -3, // channelMap.to[15]
+ -3, // channelMap.to[16]
+ -3, // channelMap.to[17]
+ -3, // channelMap.to[18]
+ -3, // channelMap.to[19]
+ -3, // channelMap.to[20]
+ -3, // channelMap.to[21]
+ -3, // channelMap.to[22]
+ -3, // channelMap.to[23]
+ -3, // channelMap.to[24]
+ -3, // channelMap.to[25]
+ -3, // channelMap.to[26]
+ -3, // channelMap.to[27]
+ -3, // channelMap.to[28]
+ -3, // channelMap.to[29]
+ -3, // channelMap.to[30]
+ -3, // channelMap.to[31]
+ 0, // programFormat.mask
+ 0, // programFormat.form
+
+};
+#else
+extern const PAF_DecodeStatus PAF_AST_params_decodeStatus_primary;
+#endif
+
+#if 1
+// FL: extern this, making it look like shared information between ARM/DSP.
+// FL: Note could just define the same thing in separate file for ARM application (i.e. add "Slave" at end of identifier).
+/* audio frame "width" in channels */
+const PAF_DecodeStatus *const PAF_AST_params_decodeStatus[] =
+{
+ &PAF_AST_params_decodeStatus_primary,
+};
+#else
+extern const PAF_DecodeStatus *const PAF_AST_params_decodeStatus[];
+#endif // FL: #if 0
+
+#if 0
+const PAF_OutBufStatus PAF_AST_params_outBufStatus =
+{
+ sizeof (PAF_OutBufStatus), // size
+ 1, // mode
+ 0, // sioSelect
+ PAF_SAMPLERATE_UNKNOWN, // sampleRate
+ 0, // audio
+ PAF_OB_CLOCK_INTERNAL, // clock
+ PAF_OB_FLUSH_ENABLE, // flush
+ 0, // unused[2] // FL: rateTrackMode
+ 0, // PAF_OB_MARKER_ENABLED // FL: markerMode
+ 0 // FL: maxNumBufOverride
+ // FL: (*** ?) missing init. values for numBufOverride[PAF_SOURCE_N]
+};
+#endif // FL: #if 0
+
+#if 0
+const PAF_EncodeStatus PAF_AST_params_encodeStatus_primary =
+{
+ sizeof (PAF_EncodeStatus), // size
+ 1, // mode
+ 0, // unused1
+ PAF_SAMPLERATE_UNKNOWN, // sampleRate
+ 0, // channelCount
+ 0, 0, 0, 0, //Unused
+ 0, 0, 0, 0, //Unused
+ 0, 0, 0, 0, //Unused
+ 0, 0, 0, 0, //Unused
+ 0, 0, 0, 0, //Unused
+ 0, // frameLength
+ 0, // encBypass
+ PAF_SOURCE_PCM, // select
+ PAF_CC_SAT_SURROUND4, PAF_CC_SUB_ONE, PAF_CC_AUX_SURROUND4_UNKNOWN, 0,0,0,0,0,
+ // channelConfigurationRequest.full
+ PAF_CC_SAT_UNKNOWN, PAF_CC_SUB_ZERO, 0, 0,0,0,0,0,
+ // channelConfigurationStream.full
+ PAF_CC_SAT_UNKNOWN, PAF_CC_SUB_ZERO, 0, 0,0,0,0,0,
+ // channelConfigurationEncode.full
+ 0, 0, 0, 0, 0, 0, 0, 0, //Unused
+ -3, // channelMap.from[0]
+ -3, // channelMap.from[1]
+ -3, // channelMap.from[2]
+ -3, // channelMap.from[3]
+ -3, // channelMap.from[4]
+ -3, // channelMap.from[5]
+ -3, // channelMap.from[6]
+ -3, // channelMap.from[7]
+ -3, // channelMap.from[8]
+ -3, // channelMap.from[9]
+ -3, // channelMap.from[10]
+ -3, // channelMap.from[11]
+ -3, // channelMap.from[12]
+ -3, // channelMap.from[13]
+ -3, // channelMap.from[14]
+ -3, // channelMap.from[15]
+ -3, // channelMap.to[0]
+ -3, // channelMap.to[1]
+ -3, // channelMap.to[2]
+ -3, // channelMap.to[3]
+ -3, // channelMap.to[4]
+ -3, // channelMap.to[5]
+ -3, // channelMap.to[6]
+ -3, // channelMap.to[7]
+ -3, // channelMap.to[8]
+ -3, // channelMap.to[9]
+ -3, // channelMap.to[10]
+ -3, // channelMap.to[11]
+ -3, // channelMap.to[12]
+ -3, // channelMap.to[13]
+ -3, // channelMap.to[14]
+ -3, // channelMap.to[15]
+ -3, // channelMap.from[0]
+ -3, // channelMap.from[1]
+ -3, // channelMap.from[2]
+ -3, // channelMap.from[3]
+ -3, // channelMap.from[4]
+ -3, // channelMap.from[5]
+ -3, // channelMap.from[6]
+ -3, // channelMap.from[7]
+ -3, // channelMap.from[8]
+ -3, // channelMap.from[9]
+ -3, // channelMap.from[10]
+ -3, // channelMap.from[11]
+ -3, // channelMap.from[12]
+ -3, // channelMap.from[13]
+ -3, // channelMap.from[14]
+ -3, // channelMap.from[15]
+ -3, // channelMap.to[0]
+ -3, // channelMap.to[1]
+ -3, // channelMap.to[2]
+ -3, // channelMap.to[3]
+ -3, // channelMap.to[4]
+ -3, // channelMap.to[5]
+ -3, // channelMap.to[6]
+ -3, // channelMap.to[7]
+ -3, // channelMap.to[8]
+ -3, // channelMap.to[9]
+ -3, // channelMap.to[10]
+ -3, // channelMap.to[11]
+ -3, // channelMap.to[12]
+ -3, // channelMap.to[13]
+ -3, // channelMap.to[14]
+ -3, // channelMap.to[15]
+ 0, // programFormat.mask
+ 0, // programFormat.form
+ 0, // sampleProcess[0]
+};
+#endif // FL: #if 0
+
+#if 0
+const PAF_EncodeStatus *const PAF_AST_params_encodeStatus[] =
+{
+ &PAF_AST_params_encodeStatus_primary,
+};
+#endif // FL: #if 0
+
+#if 0
+const PAF_VolumeStatus PAF_AST_params_volumeStatus =
+{
+ sizeof (PAF_VolumeStatus), // size
+ 1, // mode
+ PAF_MAXNUMCHAN, // channelCount
+ 0x0f, // implementation
+ 0, // unused1
+ 50, // rampTime: 50 msec/dB (20 dB/sec)
+ 0, // unused2
+ 0, // unused3
+ -2 * 20, 0, 0, 0, // master
+ -2 * 0, 0, 0, 0, // trim
+ -2 * 0, 0, 0, 0, //
+ -2 * 0, 0, 0, 0, //
+ -2 * 0, 0, 0, 0, //
+ -2 * 0, 0, 0, 0, //
+ -2 * 0, 0, 0, 0, //
+ -2 * 0, 0, 0, 0, //
+ -2 * 0, 0, 0, 0, //
+ -2 * 0, 0, 0, 0, //
+ -2 * 0, 0, 0, 0, //
+ -2 * 0, 0, 0, 0, //
+ -2 * 0, 0, 0, 0, //
+ -2 * 0, 0, 0, 0, //
+ -2 * 0, 0, 0, 0, //
+ -2 * 0, 0, 0, 0, //
+ -2 * 0, 0, 0, 0, //
+ -2 * 0, 0, 0, 0, // trim - upper16
+ -2 * 0, 0, 0, 0, //
+ -2 * 0, 0, 0, 0, //
+ -2 * 0, 0, 0, 0, //
+ -2 * 0, 0, 0, 0, //
+ -2 * 0, 0, 0, 0, //
+ -2 * 0, 0, 0, 0, //
+ -2 * 0, 0, 0, 0, //
+ -2 * 0, 0, 0, 0, //
+ -2 * 0, 0, 0, 0, //
+ -2 * 0, 0, 0, 0, //
+ -2 * 0, 0, 0, 0, //
+ -2 * 0, 0, 0, 0, //
+ -2 * 0, 0, 0, 0, //
+ -2 * 0, 0, 0, 0, //
+ -2 * 0, 0, 0, 0, //
+
+};
+#endif // FL: #if 0
+
+//
+// Common Space Parameter Declarations and Definitions
+//
+// Local definitions in RAM provide non-standard functionality.
+// The NULL pointer provides standard functionality.
+//
+
+/* baseline definition - NULL equivalent */
+/* May be used for overrides of IALG_MemSpace */
+
+static const IALG_MemSpace params_memspace_PAi_Slave[] = {
+ PAF_IALG_NONE, // Scratch
+ PAF_IALG_NONE, // Persistant
+ PAF_IALG_NONE, // Write once
+ PAF_IALG_NONE, // Common 1
+ PAF_IALG_NONE, // Common 2
+ PAF_IALG_NONE, // Common 3
+ PAF_IALG_NONE, // Common 4
+ PAF_IALG_NONE, // Common 5
+ PAF_IALG_NONE, // Common 6
+ PAF_IALG_NONE, // Common 7
+ IALG_EXTERNAL, // Common 8
+ PAF_IALG_NONE, // Common 9
+ PAF_IALG_NONE, // Common 10
+ PAF_IALG_NONE, // Common 11
+ PAF_IALG_NONE, // Common 12
+ PAF_IALG_NONE, // Common 13
+ PAF_IALG_NONE, // Common 14
+ PAF_IALG_NONE, // Common 15
+};
+
+//
+// Heap Declarations
+//
+
+//#include <pafhjt.h>
+
+//extern int IRAM;
+//extern int SDRAM;
+//extern int L3RAM;
+
+#if 0
+// .............................................................................
+// DIB memory requirements
+
+// primary input
+const IALG_MemRec inpMemTabPrimary[] =
+{
+ // SDRAM circular buffer
+ // 2 buffers * 256 samples/buffer * 8 words/sample * 3 bytes/word
+ {
+ 3 * 60 * 1024, // size
+ //180 * 1024, // size
+ //6 * 60 * 1024, // size
+ 128, // alignment
+ IALG_SARAM1, //IALG_EXTERNAL, // space
+ IALG_PERSIST, // attrs
+ NULL, // base
+ },
+
+ // IRAM scratch memory for autodetection and stereo PCM input
+ // High watermark needs are set by the latter:
+ // double buffer stereo 32bit PCM input 512 max frame size
+ // 1 buffers * 512 samples/buffer * 2 words/sample * 4 bytes/word
+ {
+ 8 * 1024, // size
+ 128, // alignment
+ IALG_SARAM, // space
+ IALG_SCRATCH, // attrs
+ NULL, // base
+ }
+};
+
+const PAF_SIO_IALG_Params inpSioAlgParamsPrimary =
+{
+ 2,
+ inpMemTabPrimary
+};
+
+const PAF_ASP_LinkInit inpLinkInitPrimary[] =
+{
+ PAF_ASP_LINKINITPARAMS (STD, IB, TIH, &inpSioAlgParamsPrimary),
+ PAF_ASP_LINKNONE
+};
+
+const PAF_ASP_LinkInit *const inpLinkInit[] =
+{
+ inpLinkInitPrimary
+};
+
+// .............................................................................
+// DOB memory requirements
+
+// primary output
+const IALG_MemRec outMemTabPrimary[] =
+{
+ // SDRAM buffer
+ // 4 buffers * 256 samples * 32 ch * 4 bytes
+ {
+ 4 * 256 * 32 * 4, // size: note:
+ //6 * 256 * 32 * 4, // size: note:
+ //16 * 256 * 32 * 4, // size: note:
+ 128, // alignment
+ IALG_EXTERNAL, // space
+ IALG_PERSIST, // attrs
+ NULL, // base
+ }
+};
+
+
+const PAF_SIO_IALG_Params outSioAlgParamsPrimary =
+{
+ 1,
+ outMemTabPrimary
+};
+
+const PAF_ASP_LinkInit outLinkInitPrimary[] =
+{
+ PAF_ASP_LINKINITPARAMS (STD, OB, TIH, &outSioAlgParamsPrimary),
+ PAF_ASP_LINKNONE
+};
+
+const PAF_ASP_LinkInit * const outLinkInit[] =
+{
+ outLinkInitPrimary,
+};
+
+
+// .............................................................................
+// sourceProgram mapped to DOB num of buffers
+const PAF_ASP_outNumBufMap outPrimaryNumBufMap =
+{
+ 4, // maxNumBuf
+// 6, // maxNumBuf
+// 16, // maxNumBuf
+ PAF_SOURCE_N, // length
+ 0, // PAF_SOURCE_UNKNOWN
+ 0, // PAF_SOURCE_NONE
+ 2, // PAF_SOURCE_PASS
+ 2, // PAF_SOURCE_SNG
+ 0, // PAF_SOURCE_AUTO
+ 0, // PAF_SOURCE_BITSTREAM
+ 0, // PAF_SOURCE_DTSALL
+ 0, // PAF_SOURCE_PCMAUTO
+ 2, // PAF_SOURCE_PCM
+ 0, // PAF_SOURCE_PC8
+ 2, // PAF_SOURCE_AC3
+ 2, // PAF_SOURCE_DTS
+ 2, // PAF_SOURCE_AAC
+ 0, // PAF_SOURCE_MPEG
+ 2, // PAF_SOURCE_DTS12
+ 2, // PAF_SOURCE_DTS13
+ 2, // PAF_SOURCE_DTS14
+ 2, // PAF_SOURCE_DTS16
+ 0, // PAF_SOURCE_WMA9PRO
+ 0, // PAF_SOURCE_MP3
+ 2, // PAF_SOURCE_DSD1,
+ 2, // PAF_SOURCE_DSD2,
+ 2, // PAF_SOURCE_DSD3,
+ 4, // PAF_SOURCE_DDP
+ 4, // PAF_SOURCE_DTSHD
+ 4, // PAF_SOURCE_THD
+// 6, // PAF_SOURCE_THD
+// 16, // PAF_SOURCE_THD
+ 4, // PAF_SOURCE_DXP
+
+};
+
+const PAF_ASP_outNumBufMap *const outNumBufMap[] =
+{
+ &outPrimaryNumBufMap,
+};
+#endif // FL: #if 0
+
+// .............................................................................
+const PAF_MetadataBufStatus PAF_AST_params_MetadataBufStatus_Slave[] =
+{
+ 4 * 1024, // bufSize
+ PAF_MAX_NUM_PRIVATE_MD, // NumBuf
+ 128, // alignment
+ &gPafHeapIdExt //&SDRAM // &IRAM, // pSpace
+};
+
+#if 0 // FL: maybe needed on ARM if there's an audio frame buffer defined for decode (and possible stream)
+// .............................................................................
+//
+// This structure defines the memory allocation of audio frame buffers (channel buffers). Users can customize this structure based
+// on their requirement. IALG_SARAM specifies the audio frame buffer is allocated in IRAM and IALG_EXTERNAL
+// specifies the audio frame buffer is allocated in SDRAM. By allocating few channel buffers in SDRAM, users can save internal memory
+// but trading performance
+// This structure defined for PAF_MAXNUMCHAN number of channels. But channel buffers will be allocated for "PAF_AST_params_numchan"
+// number of channels only.
+//
+
+const PAF_AudioFrameBufStatus PAF_AST_params_AudioFrameBufStatus[PAF_MAXNUMCHAN] =
+{
+ IALG_SARAM, // 0
+ IALG_SARAM,
+ IALG_SARAM,
+ IALG_SARAM,
+ IALG_SARAM,
+ IALG_SARAM,
+ IALG_SARAM,
+ IALG_SARAM,
+ IALG_SARAM,
+ IALG_SARAM,
+ IALG_SARAM,
+ IALG_SARAM,
+ IALG_SARAM,
+ IALG_SARAM,
+ IALG_SARAM,
+ IALG_SARAM,
+ IALG_SARAM, // 16
+ IALG_SARAM,
+ IALG_SARAM,
+ IALG_SARAM,
+ IALG_SARAM,
+ IALG_SARAM,
+ IALG_SARAM,
+ IALG_SARAM,
+ IALG_SARAM,
+ IALG_SARAM,
+ IALG_SARAM,
+ IALG_SARAM,
+ IALG_SARAM,
+ IALG_SARAM,
+ IALG_SARAM,
+ IALG_SARAM, // 31
+ //IALG_EXTERNAL, // 16
+ //IALG_EXTERNAL,
+ //IALG_EXTERNAL,
+ //IALG_EXTERNAL,
+ //IALG_EXTERNAL,
+ //IALG_EXTERNAL,
+ //IALG_EXTERNAL,
+ //IALG_EXTERNAL,
+ //IALG_EXTERNAL,
+ //IALG_EXTERNAL,
+ //IALG_EXTERNAL,
+ //IALG_EXTERNAL,
+ //IALG_EXTERNAL,
+ //IALG_EXTERNAL,
+ //IALG_EXTERNAL,
+ //IALG_EXTERNAL // 31
+};
+#endif // FL: #if 0
+
+// .............................................................................
+//
+// Audio Stream Parameter Definitions
+//
+// Global definition in RAM provides standard & non-standard functionality.
+//
+
+const PAF_AST_Params params_PAi_Slave =
+{
+ &PAF_AST_params_fxnsPA, // fxns
+ { // zone
+ 0, // master
+ 1, // inputs
+ 0, // input1
+ 1, // inputN
+ 1, // decodes
+ 0, // d