summaryrefslogtreecommitdiff
path: root/sound/soc/omap/abe/abe_ini.c
diff options
context:
space:
mode:
Diffstat (limited to 'sound/soc/omap/abe/abe_ini.c')
-rw-r--r--sound/soc/omap/abe/abe_ini.c2368
1 files changed, 1562 insertions, 806 deletions
diff --git a/sound/soc/omap/abe/abe_ini.c b/sound/soc/omap/abe/abe_ini.c
index 0be0570d54e3..50028ae9c01f 100644
--- a/sound/soc/omap/abe/abe_ini.c
+++ b/sound/soc/omap/abe/abe_ini.c
@@ -1,353 +1,359 @@
/*
- * ==========================================================================
- * Texas Instruments OMAP(TM) Platform Firmware
- * (c) Copyright 2009, Texas Instruments Incorporated. All Rights Reserved.
+ * ALSA SoC OMAP ABE driver
*
- * Use of this firmware is controlled by the terms and conditions found
- * in the license agreement under which this firmware has been supplied.
- * ==========================================================================
+ * Author: Laurent Le Faucheur <l-le-faucheur@ti.com>
+ * Liam Girdwood <lrg@slimlogic.co.uk>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
*/
#include "abe_main.h"
-#include "abe_dat.h" /* data declaration */
-#include "abe_cof.h"
+#include "abe_dm_addr.h"
+
+short MultiFrame[PROCESSING_SLOTS][TASKS_IN_SLOT];
/*
- * initialize the default values for call-backs to subroutines
- * - FIFO IRQ call-backs for sequenced tasks
- * - FIFO IRQ call-backs for audio player/recorders (ping-pong protocols)
- * - Remote debugger interface
- * - Error monitoring
- * - Activity Tracing
+ * initialize the default values for call-backs to subroutines
+ * - FIFO IRQ call-backs for sequenced tasks
+ * - FIFO IRQ call-backs for audio player/recorders (ping-pong protocols)
+ * - Remote debugger interface
+ * - Error monitoring
+ * - Activity Tracing
*/
-/*
- * ABE_HW_CONFIGURATION
- *
- * Parameter :
- *
- * Operations :
- *
- *
- * Return value :
+/**
+ * abe_hw_configuration
*
*/
-void abe_hw_configuration()
+void abe_hw_configuration ()
{
- abe_uint32 atc_reg;
+ u32 atc_reg;
- /* enables the DMAreq from AESS AESS_DMAENABLE_SET = 255 */
+ /* enables the DMAreq from AESS AESS_DMAENABLE_SET = 255 */
atc_reg = 0xFF;
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_ATC, 0x60, &atc_reg, 4);
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_ATC, 0x60, &atc_reg, 4);
}
-/*
- * ABE_BUILD_SCHEDULER_TABLE
- *
- * Parameter :
- *
- * Operations :
- *
- *
- * Return value :
+/**
+ * abe_build_scheduler_table
*
*/
-char aUplinkMuxing[D_aUplinkRouting_sizeof];
-
-void abe_build_scheduler_table()
+void abe_build_scheduler_table ()
{
- short MultiFrame[PROCESSING_SLOTS][TASKS_IN_SLOT];
- abe_uint16 i, n;
- abe_uint8 *ptr;
-
+ u16 i, n;
+ u8 *ptr;
+ char aUplinkMuxing[16];
+#define ABE_TASK_ID(ID) (D_tasksList_ADDR + sizeof(ABE_STask)*(ID))
/* LOAD OF THE TASKS' MULTIFRAME */
- /* WARNING ON THE LOCATION OF IO_MM_DL WHICH IS PATCHED IN "abe_init_io_tasks" */
+ /* WARNING ON THE LOCATION OF IO_MM_DL WHICH IS PATCHED
+ IN "abe_init_io_tasks" */
- for (ptr = (abe_uint8 *)&(MultiFrame[0][0]), i=0; i < sizeof (MultiFrame); i++)
+ for (ptr = (u8 *)&(MultiFrame[0][0]), i=0;
+ i < sizeof (MultiFrame); i++)
*ptr++ = 0;
- //MultiFrame[0][0] = 0;
- //MultiFrame[0][1] = 0;
- MultiFrame[0][2] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_IO_VX_DL;
- //MultiFrame[0][3] = 0;
- //MultiFrame[0][4] = 0;
- //MultiFrame[0][5] = 0;
- MultiFrame[0][6] = 0;
- //MultiFrame[0][7] = 0;
- //MultiFrame[1][0] = 0;
- //MultiFrame[1][1] = 0;
+ /* MultiFrame[0][0] = 0; */
+ /* MultiFrame[0][1] = 0; */
+ MultiFrame[0][2] = ABE_TASK_ID(C_ABE_FW_TASK_IO_VX_DL);
+ /* MultiFrame[0][3] = 0; */
+ /* MultiFrame[0][4] = 0; */
+ /* MultiFrame[0][5] = 0; */
+ /* MultiFrame[0][6] = ABE_TASK_ID(C_ABE_FW_TASK_ASRC_MM_DL);*/
+ /* MultiFrame[0][7] = 0; */
+
+ /* MultiFrame[1][0] = 0; */
+ /* MultiFrame[1][1] = 0; */
#define TASK_ASRC_VX_DL_SLT 1
#define TASK_ASRC_VX_DL_IDX 2
- MultiFrame[1][2] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_ASRC_VX_DL_16;
+ MultiFrame[1][2] = ABE_TASK_ID(C_ABE_FW_TASK_ASRC_VX_DL_16);
#define TASK_VX_DL_SLT 1
#define TASK_VX_DL_IDX 3
- MultiFrame[1][3] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_VX_DL_16_48;
- //MultiFrame[1][4] = 0;
- //MultiFrame[1][5] = 0;
- MultiFrame[1][6] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_DL2Mixer;
- MultiFrame[1][7] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_IO_VIB_DL;
- MultiFrame[2][0] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_DL1Mixer;
- MultiFrame[2][1] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_SDTMixer;
- //MultiFrame[2][2] = 0;
- //MultiFrame[2][3] = 0;
- //MultiFrame[2][4] = 0;
- MultiFrame[2][5] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_IO_DMIC;
- //MultiFrame[2][6] = 0;
- //MultiFrame[2][7] = 0;
-
- MultiFrame[3][1] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_DL1_GAIN;
- MultiFrame[3][0] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_DL1_APS_EQ;
- MultiFrame[3][2] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_EchoMixer;
- //MultiFrame[3][3] = 0;
- //MultiFrame[3][4] = 0;
- //MultiFrame[3][5] = 0;
- MultiFrame[3][6] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_DL2_GAIN;
- MultiFrame[3][7] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_DL2_APS_EQ;
-
- MultiFrame[4][0] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_DL1_EQ;
- //MultiFrame[4][1] = 0;
- MultiFrame[4][2] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_VXRECMixer;
-
- MultiFrame[4][3] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_VXREC_SPLIT;
- //MultiFrame[4][4] = 0;
- //MultiFrame[4][5] = 0;
- MultiFrame[4][6] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_VIBRA1;
- MultiFrame[4][7] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_VIBRA2;
-
- MultiFrame[5][0] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_EARP_48_96_0SR;
- MultiFrame[5][1] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_EARP_48_96_LP;
- MultiFrame[5][2] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_IO_PDM_UL;
- //MultiFrame[5][3] = 0;
- //MultiFrame[5][4] = 0;
- //MultiFrame[5][5] = 0;
- MultiFrame[5][6] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_DL2_EQ;
- MultiFrame[5][7] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_VIBRA_SPLIT;
-
- MultiFrame[6][0] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_EARP_48_96_LP;
- MultiFrame[6][1] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_IO_PDM_DL;
- //MultiFrame[6][2] = 0;
-
- //MultiFrame[6][3] = 0;
- //MultiFrame[6][4] = 0;
- //MultiFrame[6][5] = 0;
- MultiFrame[6][6] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_DL2_APS_SPLIT;
- //MultiFrame[6][7] = 0;
-
- //MultiFrame[7][0] = 0;
- //MultiFrame[7][1] = 0;
- MultiFrame[7][2] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_BT_UL_SPLIT;
- MultiFrame[7][3] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_DBG_SYNC;
- //MultiFrame[7][4] = 0;
- //MultiFrame[7][5] = 0;
- MultiFrame[7][6] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_DL2_R_APS_CORE;
- MultiFrame[7][7] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_DL2_L_APS_CORE;
-
- //MultiFrame[8][0] = 0;
- //MultiFrame[8][1] = 0;
- MultiFrame[8][2] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_DMIC1_96_48_LP;
- //MultiFrame[8][3] = 0;
- MultiFrame[8][4] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_DMIC1_SPLIT;
- //MultiFrame[8][5] = 0;
- //MultiFrame[8][6] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_EANC_FBK_96_48;
- //MultiFrame[8][7] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_EANC_FBK_SPLIT;
-
- //MultiFrame[9][0] = 0;
- //MultiFrame[9][1] = 0;
- MultiFrame[9][2] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_DMIC2_96_48_LP;
- //MultiFrame[9][3] = 0;
- MultiFrame[9][4] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_DMIC2_SPLIT;
- //MultiFrame[9][5] = 0;
- MultiFrame[9][6] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_IHF_48_96_0SR;
- MultiFrame[9][7] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_IHF_48_96_LP;
-
- //MultiFrame[10][0] = 0;
- //MultiFrame[10][1] = 0;
- MultiFrame[10][2] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_DMIC3_96_48_LP;
- //MultiFrame[10][3] = 0;
- MultiFrame[10][4] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_DMIC3_SPLIT;
- //MultiFrame[10][5] = 0;
- //MultiFrame[10][6] = 0; // D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_EANC_COPY; // NEW: copy EANC coefs to working CMEM areas
- MultiFrame[10][7] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_IHF_48_96_LP;
-
- //MultiFrame[11][0] = 0;
- //MultiFrame[11][1] = 0;
- MultiFrame[11][2] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_AMIC_96_48_LP;
- //MultiFrame[11][3] = 0;
- MultiFrame[11][4] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_AMIC_SPLIT;
- //MultiFrame[11][5] = 0;
- //MultiFrame[11][6] = 0;
- MultiFrame[11][7] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_VIBRA_PACK;
-
- //MultiFrame[12][0] = 0;
- //MultiFrame[12][1] = 0;
- MultiFrame[12][2] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_IO_BT_VX_DL;
- MultiFrame[12][3] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_VX_UL_ROUTING;
- MultiFrame[12][4] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_ULMixer;
+ MultiFrame[1][3] = ABE_TASK_ID(C_ABE_FW_TASK_VX_DL_16_48);
+ /* MultiFrame[1][4] = 0; */
+ /* MultiFrame[1][5] = 0; */
+ MultiFrame[1][6] = ABE_TASK_ID(C_ABE_FW_TASK_DL2Mixer);
+ MultiFrame[1][7] = ABE_TASK_ID(C_ABE_FW_TASK_IO_VIB_DL);
+
+ MultiFrame[2][0] = ABE_TASK_ID(C_ABE_FW_TASK_DL1Mixer);
+ MultiFrame[2][1] = ABE_TASK_ID(C_ABE_FW_TASK_SDTMixer);
+ /* MultiFrame[2][2] = 0; */
+ /* MultiFrame[2][3] = 0; */
+ /* MultiFrame[2][4] = 0; */
+ MultiFrame[2][5] = ABE_TASK_ID(C_ABE_FW_TASK_IO_DMIC);
+ /* MultiFrame[2][6] = 0; */
+ /* MultiFrame[2][7] = 0; */
+
+ MultiFrame[3][1] = ABE_TASK_ID(C_ABE_FW_TASK_DL1_GAIN);
+ MultiFrame[3][0] = ABE_TASK_ID(C_ABE_FW_TASK_DL1_APS_EQ);
+ MultiFrame[3][2] = ABE_TASK_ID(C_ABE_FW_TASK_EchoMixer);
+ /* MultiFrame[3][3] = 0; */
+ /* MultiFrame[3][4] = 0; */
+ /* MultiFrame[3][5] = 0; */
+ MultiFrame[3][6] = ABE_TASK_ID(C_ABE_FW_TASK_DL2_GAIN);
+ MultiFrame[3][7] = ABE_TASK_ID(C_ABE_FW_TASK_DL2_APS_EQ);
+
+ MultiFrame[4][0] = ABE_TASK_ID(C_ABE_FW_TASK_DL1_EQ);
+ /* MultiFrame[4][1] = 0; */
+ MultiFrame[4][2] = ABE_TASK_ID(C_ABE_FW_TASK_VXRECMixer);
+ MultiFrame[4][3] = ABE_TASK_ID(C_ABE_FW_TASK_VXREC_SPLIT);
+ /* MultiFrame[4][4] = 0; */
+ /* MultiFrame[4][5] = 0; */
+ MultiFrame[4][6] = ABE_TASK_ID(C_ABE_FW_TASK_VIBRA1);
+ MultiFrame[4][7] = ABE_TASK_ID(C_ABE_FW_TASK_VIBRA2);
+
+
+ MultiFrame[5][0] = 0;
+ MultiFrame[5][1] = ABE_TASK_ID(C_ABE_FW_TASK_EARP_48_96_LP);
+ MultiFrame[5][2] = ABE_TASK_ID(C_ABE_FW_TASK_IO_PDM_UL);
+ /* MultiFrame[5][3] = 0; */
+ /* MultiFrame[5][4] = 0; */
+ /* MultiFrame[5][5] = 0; */
+ MultiFrame[5][6] = ABE_TASK_ID(C_ABE_FW_TASK_DL2_EQ);
+ MultiFrame[5][7] = ABE_TASK_ID(C_ABE_FW_TASK_VIBRA_SPLIT);
+
+ MultiFrame[6][0] = ABE_TASK_ID(C_ABE_FW_TASK_EARP_48_96_LP);
+ /* MultiFrame[6][1] = 0; */
+ /* MultiFrame[6][2] = 0; */
+ /* MultiFrame[6][3] = 0; */
+ /* MultiFrame[6][4] = 0; */
+ /* MultiFrame[6][5] = 0; */
+ MultiFrame[6][6] = ABE_TASK_ID(C_ABE_FW_TASK_DL2_APS_SPLIT);
+ /* MultiFrame[6][7] = 0; */
+
+ MultiFrame[7][0] = ABE_TASK_ID(C_ABE_FW_TASK_IO_PDM_DL);
+ /* MultiFrame[7][1] = 0; */
+ MultiFrame[7][2] = ABE_TASK_ID(C_ABE_FW_TASK_BT_UL_SPLIT);
+ MultiFrame[7][3] = ABE_TASK_ID(C_ABE_FW_TASK_DBG_SYNC);
+ /* MultiFrame[7][4] = 0; */
+ /* MultiFrame[7][5] = 0; */
+ MultiFrame[7][6] = ABE_TASK_ID(C_ABE_FW_TASK_DL2_R_APS_CORE);
+ MultiFrame[7][7] = ABE_TASK_ID(C_ABE_FW_TASK_DL2_L_APS_CORE);
+
+ /* MultiFrame[8][0] = 0; */
+ /* MultiFrame[8][1] = 0; */
+ MultiFrame[8][2] = ABE_TASK_ID(C_ABE_FW_TASK_DMIC1_96_48_LP);
+ /* MultiFrame[8][3] = 0; */
+ MultiFrame[8][4] = ABE_TASK_ID(C_ABE_FW_TASK_DMIC1_SPLIT);
+ /* MultiFrame[8][5] = 0; */
+ /* MultiFrame[8][6] = 0; */
+ /* MultiFrame[8][7] = 0; */
+
+ /* MultiFrame[9][0] = 0; */
+ /* MultiFrame[9][1] = 0; */
+ MultiFrame[9][2] = ABE_TASK_ID(C_ABE_FW_TASK_DMIC2_96_48_LP);
+ /* MultiFrame[9][3] = 0; */
+ MultiFrame[9][4] = ABE_TASK_ID(C_ABE_FW_TASK_DMIC2_SPLIT);
+ /* MultiFrame[9][5] = 0; */
+ MultiFrame[9][6] = 0;
+ MultiFrame[9][7] = ABE_TASK_ID(C_ABE_FW_TASK_IHF_48_96_LP);
+
+ /* MultiFrame[10][0] = 0; */
+ /* MultiFrame[10][1] = 0; */
+ MultiFrame[10][2] = ABE_TASK_ID(C_ABE_FW_TASK_DMIC3_96_48_LP);
+ /* MultiFrame[10][3] = 0; */
+ MultiFrame[10][4] = ABE_TASK_ID(C_ABE_FW_TASK_DMIC3_SPLIT);
+ /* MultiFrame[10][5] = 0; */
+ /* MultiFrame[10][6] = 0; */
+ MultiFrame[10][7] = ABE_TASK_ID(C_ABE_FW_TASK_IHF_48_96_LP);
+
+ /* MultiFrame[11][0] = 0; */
+ /* MultiFrame[11][1] = 0; */
+ MultiFrame[11][2] = ABE_TASK_ID(C_ABE_FW_TASK_AMIC_96_48_LP);
+ /* MultiFrame[11][3] = 0; */
+ MultiFrame[11][4] = ABE_TASK_ID(C_ABE_FW_TASK_AMIC_SPLIT);
+ /* MultiFrame[11][5] = 0; */
+ /* MultiFrame[11][6] = 0; */
+ MultiFrame[11][7] = ABE_TASK_ID(C_ABE_FW_TASK_VIBRA_PACK);
+
+ /* MultiFrame[12][0] = 0; */
+ /* MultiFrame[12][1] = 0; */
+ /* MultiFrame[12][2] = 0; */
+ MultiFrame[12][3] = ABE_TASK_ID(C_ABE_FW_TASK_VX_UL_ROUTING);
+ MultiFrame[12][4] = ABE_TASK_ID(C_ABE_FW_TASK_ULMixer);
#define TASK_VX_UL_SLT 12
#define TASK_VX_UL_IDX 5
- MultiFrame[12][5] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_VX_UL_48_16;
- //MultiFrame[12][6] = 0;
- //MultiFrame[12][7] = 0;
- //MultiFrame[13][0] = 0;
- //MultiFrame[13][1] = 0;
- MultiFrame[13][2] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_MM_UL2_ROUTING;
- MultiFrame[13][3] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_SideTone;
- MultiFrame[13][4] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_IO_MM_UL;
- //MultiFrame[13][5] = 0;
- //MultiFrame[13][6] = 0;
- //MultiFrame[13][7] = 0;
-
- //MultiFrame[14][0] = 0;
- //MultiFrame[14][1] = 0;
- //MultiFrame[14][2] = 0;
- MultiFrame[14][3] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_IO_DMIC;
-#define TASK_BT_DL_48_8_SLT 14
-#define TASK_BT_DL_48_8_IDX 4
- MultiFrame[14][4] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_BT_DL_48_8;
- //MultiFrame[14][5] = 0;
-#define TASK_ECHO_SLT 14
-#define TASK_ECHO_IDX 6
- MultiFrame[14][6] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_ECHO_REF_48_16;
- //MultiFrame[14][7] = 0;
-
- MultiFrame[15][0] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_DL1_APS_IIR;
- MultiFrame[15][1] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_DL1_APS_CORE;
- //MultiFrame[15][2] = 0;
- MultiFrame[15][3] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_IO_BT_VX_UL;
- //MultiFrame[15][4] = 0;
- //MultiFrame[15][5] = 0;
- //MultiFrame[15][6] = 0;
- //MultiFrame[15][7] = 0;
-
- //MultiFrame[16][0] = 0;
- //MultiFrame[16][1] = 0;
+ MultiFrame[12][5] = ABE_TASK_ID(C_ABE_FW_TASK_VX_UL_48_16);
+ /* MultiFrame[12][6] = 0; */
+ /* MultiFrame[12][7] = 0; */
+
+ /* MultiFrame[13][0] = 0; */
+ /* MultiFrame[13][1] = 0; */
+ MultiFrame[13][2] = ABE_TASK_ID(C_ABE_FW_TASK_MM_UL2_ROUTING);
+ MultiFrame[13][3] = ABE_TASK_ID(C_ABE_FW_TASK_SideTone);
+ /* MultiFrame[13][4] = 0; */
+ MultiFrame[13][5] = ABE_TASK_ID(C_ABE_FW_TASK_IO_BT_VX_DL);
+ /* MultiFrame[13][6] = 0; */
+ /* MultiFrame[13][7] = 0; */
+
+ /* MultiFrame[14][0] = 0; */
+ /* MultiFrame[14][1] = 0; */
+ /* MultiFrame[14][2] = 0; */
+ MultiFrame[14][3] = ABE_TASK_ID(C_ABE_FW_TASK_IO_DMIC);
+#define TASK_BT_DL_48_8_SLT 14
+#define TASK_BT_DL_48_8_IDX 4
+ MultiFrame[14][4] = ABE_TASK_ID(C_ABE_FW_TASK_BT_DL_48_8);
+ /* MultiFrame[14][5] = 0; */
+ /* MultiFrame[14][6] = 0; */
+ /* MultiFrame[14][7] = 0; */
+
+ MultiFrame[15][0] = ABE_TASK_ID(C_ABE_FW_TASK_DL1_APS_IIR);
+ MultiFrame[15][1] = ABE_TASK_ID(C_ABE_FW_TASK_DL1_APS_CORE);
+ /* MultiFrame[15][2] = 0; */
+ MultiFrame[15][3] = ABE_TASK_ID(C_ABE_FW_TASK_IO_BT_VX_UL);
+ /* MultiFrame[15][4] = 0; */
+ /* MultiFrame[15][5] = 0; */
+ /* MultiFrame[15][6] = 0; */
+ /* MultiFrame[15][7] = 0; */
+
+ /* MultiFrame[16][0] = 0; */
+ /* MultiFrame[16][1] = 0; */
#define TASK_ASRC_VX_UL_SLT 16
#define TASK_ASRC_VX_UL_IDX 2
- MultiFrame[16][2] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_ASRC_VX_UL_16;
- MultiFrame[16][3] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_IO_VX_UL; // USING ECHO REF MERGED
- //MultiFrame[16][4] = 0;
- //MultiFrame[16][5] = 0;
- //MultiFrame[16][6] = 0;
- //MultiFrame[16][7] = 0;
-
- //MultiFrame[17][0] = 0;
- //MultiFrame[17][1] = 0;
-#define TASK_BT_UL_8_48_SLT 17
-#define TASK_BT_UL_8_48_IDX 2
- MultiFrame[17][2] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_BT_UL_8_48;
- MultiFrame[17][3] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_IO_MM_UL2;
- //MultiFrame[17][4] = 0;
- //MultiFrame[17][5] = 0;
- //MultiFrame[17][6] = 0;
- //MultiFrame[17][7] = 0;
-
- MultiFrame[18][0] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_IO_PDM_DL;
- //MultiFrame[18][1] = 0;
- //MultiFrame[18][2] = 0;
- //MultiFrame[18][3] = 0;
- //MultiFrame[18][4] = 0;
- //MultiFrame[18][5] = 0;
- //MultiFrame[18][6] = 0;
- //MultiFrame[18][7] = 0;
-
-#define TASK_IO_MM_DL_SLT 19
+ MultiFrame[16][2] = ABE_TASK_ID(C_ABE_FW_TASK_ASRC_VX_UL_16);
+ MultiFrame[16][3] = ABE_TASK_ID(C_ABE_FW_TASK_IO_VX_UL);
+ /* MultiFrame[16][4] = 0; */
+ /* MultiFrame[16][5] = 0; */
+ /* MultiFrame[16][6] = 0; */
+ /* MultiFrame[16][7] = 0; */
+
+ /* MultiFrame[17][0] = 0; */
+ /* MultiFrame[17][1] = 0; */
+#define TASK_BT_UL_8_48_SLT 17
+#define TASK_BT_UL_8_48_IDX 2
+ MultiFrame[17][2] = ABE_TASK_ID(C_ABE_FW_TASK_BT_UL_8_48);
+ MultiFrame[17][3] = ABE_TASK_ID(C_ABE_FW_TASK_IO_MM_UL2);
+ /* MultiFrame[17][4] = 0; */
+ /* MultiFrame[17][5] = 0; */
+ /* MultiFrame[17][6] = 0; */
+ /* MultiFrame[17][7] = 0; */
+
+#define TASK_IO_MM_DL_SLT 18
#define TASK_IO_MM_DL_IDX 0
- MultiFrame[19][0] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_IO_MM_DL;
- //MultiFrame[19][1] = 0
- //MultiFrame[19][2] = 0;
- //MultiFrame[19][3] = 0;
- //MultiFrame[19][4] = 0;
- //MultiFrame[19][5] = 0;
- //MultiFrame[19][6] = 0;
- //MultiFrame[19][7] = 0;
-
- MultiFrame[20][0] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_IO_TONES_DL;
- MultiFrame[20][1] = 0;
- MultiFrame[20][2] = 0;
- //MultiFrame[20][3] = 0;
- //MultiFrame[20][4] = 0;
- //MultiFrame[20][5] = 0;
- //MultiFrame[20][6] = 0;
- //MultiFrame[20][7] = 0;
-
- //MultiFrame[21][0] = 0;
- //MultiFrame[21][1] = 0;
- //MultiFrame[21][2] = 0;
- //MultiFrame[21][3] = 0;
- //MultiFrame[21][4] = 0;
- //MultiFrame[21][5] = 0;
- //MultiFrame[21][6] = 0;
- //MultiFrame[21][7] = 0;
-
- MultiFrame[22][0] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_DEBUG_IRQFIFO; // MUST STAY ON SLOT 22
- //MultiFrame[22][1] = 0;
- MultiFrame[22][2] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_IO_MM_EXT_OUT;
- MultiFrame[22][3] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_IO_MM_EXT_IN;
- MultiFrame[22][4] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_MM_EXT_IN_SPLIT;
-
- //MultiFrame[22][5] = 0;
- //MultiFrame[22][6] = 0;
- //MultiFrame[22][7] = 0;
-
- MultiFrame[23][0] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_GAIN_UPDATE;
- //MultiFrame[23][1] = 0;
- //MultiFrame[23][2] = 0;
- //MultiFrame[23][3] = 0;
- //MultiFrame[23][4] = 0;
- //MultiFrame[23][5] = 0;
- //MultiFrame[23][6] = 0;
- //MultiFrame[23][7] = 0;
-
- //MultiFrame[24][0] = 0;
- //MultiFrame[24][1] = 0;
- //MultiFrame[24][2] = 0;
- //MultiFrame[24][3] = 0;
- //MultiFrame[24][4] = 0;
- //MultiFrame[24][5] = 0;
- //MultiFrame[24][6] = 0;
- //MultiFrame[24][7] = 0;
-
- abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM, D_multiFrame_ADDR, (abe_uint32*)MultiFrame, sizeof (MultiFrame));
-
- // EANC Fast Loopback
- // dFastLoopback = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_EANC_WRAP2;
- // abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM, D_pFastLoopBack_ADDR, (abe_uint32*)&dFastLoopback, sizeof (dFastLoopback));
+ MultiFrame[18][0] = ABE_TASK_ID(C_ABE_FW_TASK_IO_MM_DL);
+ /* MultiFrame[18][1] = 0; */
+ /* MultiFrame[18][2] = 0; */
+ /* MultiFrame[18][3] = 0; */
+ /* MultiFrame[18][4] = 0; */
+ /* MultiFrame[18][5] = 0; */
+ /* MultiFrame[18][6] = 0; */
+ /* MultiFrame[18][7] = 0; */
+
+ MultiFrame[19][0] = ABE_TASK_ID(C_ABE_FW_TASK_IO_PDM_DL);
+ /* MultiFrame[19][1] = 0 */
+ /* MultiFrame[19][2] = 0; */
+ /* MultiFrame[19][3] = 0; */
+ /* MultiFrame[19][4] = 0; */
+ /* MultiFrame[19][5] = 0; */
+ /* MM_UL is moved to OPP 100% */
+ MultiFrame[19][6] = ABE_TASK_ID(C_ABE_FW_TASK_IO_MM_UL);
+ /* MultiFrame[19][7] = 0; */
+
+
+ MultiFrame[20][0] = ABE_TASK_ID(C_ABE_FW_TASK_IO_TONES_DL);
+ /* MultiFrame[20][1] = 0; */
+ /* MultiFrame[20][2] = 0; */
+ /* MultiFrame[20][3] = 0; */
+ /* MultiFrame[20][4] = 0; */
+ /* MultiFrame[20][5] = 0; */
+ /* MultiFrame[20][6] = 0; */
+ /* MultiFrame[20][7] = 0; */
+
+ /* MultiFrame[21][0] = 0; */
+ MultiFrame[21][1] = ABE_TASK_ID(C_ABE_FW_TASK_DEBUGTRACE_VX_ASRCs);
+ MultiFrame[21][2] = ABE_TASK_ID(C_ABE_FW_TASK_IO_MM_EXT_OUT);
+ /* MultiFrame[21][3] = 0; */
+ /* MultiFrame[21][4] = 0; */
+ /* MultiFrame[21][5] = 0; */
+ /* MultiFrame[21][6] = 0; */
+ /* MultiFrame[21][7] = 0; */
+
+ /* MUST STAY ON SLOT 22 */
+ MultiFrame[22][0] = ABE_TASK_ID(C_ABE_FW_TASK_DEBUG_IRQFIFO);
+ MultiFrame[22][1] = ABE_TASK_ID(C_ABE_FW_TASK_INIT_FW_MEMORY);
+ MultiFrame[22][2] = 0;
+ MultiFrame[22][3] = ABE_TASK_ID(C_ABE_FW_TASK_IO_MM_EXT_IN);
+ MultiFrame[22][4] = ABE_TASK_ID(C_ABE_FW_TASK_MM_EXT_IN_SPLIT);
+ /* MultiFrame[22][5] = 0; */
+ /* MultiFrame[22][6] = 0; */
+ /* MultiFrame[22][7] = 0; */
+
+ MultiFrame[23][0] = ABE_TASK_ID(C_ABE_FW_TASK_GAIN_UPDATE);
+ /* MultiFrame[23][1] = 0; */
+ /* MultiFrame[23][2] = 0; */
+ /* MultiFrame[23][3] = 0; */
+ /* MultiFrame[23][4] = 0; */
+ /* MultiFrame[23][5] = 0; */
+ /* MultiFrame[23][6] = 0; */
+ /* MultiFrame[23][7] = 0; */
+
+ /* MultiFrame[24][0] = 0; */
+ /* MultiFrame[24][1] = 0; */
+ /* MultiFrame[24][2] = 0; */
+ /* MultiFrame[24][3] = 0; */
+ /* MultiFrame[24][4] = 0; */
+ /* MultiFrame[24][5] = 0; */
+ /* MultiFrame[24][6] = 0; */
+ /* MultiFrame[24][7] = 0; */
+
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM, D_multiFrame_ADDR,
+ (u32*)MultiFrame, sizeof (MultiFrame));
/* reset the uplink router */
- n = sizeof(aUplinkMuxing);
- for(i = 0; i < n; i++)
+ n = (D_aUplinkRouting_sizeof)>>1;
+ for (i = 0; i < n; i++)
aUplinkMuxing[i] = ZERO_labelID;
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_DMEM, D_aUplinkRouting_ADDR, (abe_uint32 *)aUplinkMuxing, sizeof(aUplinkMuxing));
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM, D_aUplinkRouting_ADDR,
+ (u32 *)aUplinkMuxing, sizeof (aUplinkMuxing));
}
-/*
- * ABE_INIT_ATC
- *
- * Parameter :
- * prot : protocol being used
- *
- * Operations :
- * load the DMEM ATC/AESS descriptors
- *
- * Return value :
+/**
+ * abe_init_atc
+ * @id: ABE port ID
*
+ * load the DMEM ATC/AESS descriptors
*/
-void abe_init_atc(abe_port_id id)
+void abe_init_atc (u32 id)
{
abe_satcdescriptor_aess desc;
- abe_uint8 iter;
- abe_int32 datasize;
+ u8 iter;
+ s32 datasize;
- // load default values of the descriptor
- desc.rdpt = desc.wrpt = desc.irqdest = desc.cberr = desc.desen = desc.nw =0;
+ /* load default values of the descriptor */
+ desc.rdpt = desc.wrpt = desc.irqdest = desc.cberr = 0;
+ desc.desen = desc.nw =0;
desc.reserved0 = desc.reserved1 = desc.reserved2 = 0;
desc.srcid = desc.destid = desc.badd = desc.iter = desc.cbsize = 0;
datasize = abe_dma_port_iter_factor (&((abe_port[id]).format));
- iter = (abe_uint8) abe_dma_port_iteration (&((abe_port[id]).format));
-
- if (abe_port[id].protocol.direction == ABE_ATC_DIRECTION_IN) /* IN from AESS point of view */
+ iter = (u8) abe_dma_port_iteration (&((abe_port[id]).format));
+
+
+ /* if the ATC FIFO is too small there will be two ABE firmware
+ utasks to do the copy this happems on DMIC and MCPDMDL */
+ /* VXDL_8kMono = 4 = 2 + 2x1 */
+ /* VXDL_16kstereo = 12 = 8 + 2x2 */
+ /* MM_DL_1616 = 14 = 12 + 2x1 */
+ /* DMIC = 84 = 72 + 2x6 */
+ /* VXUL_8kMono = 2 */
+ /* VXUL_16kstereo = 4 */
+ /* MM_UL2_Stereo = 4 */
+ /* PDMDL = 12 */
+
+ /* IN from AESS point of view */
+ if (abe_port[id].protocol.direction == ABE_ATC_DIRECTION_IN)
if (iter + 2*datasize > 126)
desc.wrpt = (iter >>1) + (3*datasize);
else
@@ -356,167 +362,152 @@ void abe_init_atc(abe_port_id id)
desc.wrpt = 0 + 3*datasize;
switch ((abe_port[id]).protocol.protocol_switch) {
- case SLIMBUS_PORT_PROT:
+ case SLIMBUS_PORT_PROT :
desc.cbdir = (abe_port[id]).protocol.direction;
- desc.cbsize = (abe_port[id]).protocol.p.prot_slimbus.buf_size;
+ desc.cbsize = (abe_port[id]).
+ protocol.p.prot_slimbus.buf_size;
desc.badd = ((abe_port[id]).protocol.p.prot_slimbus.buf_addr1) >> 4;
desc.iter = (abe_port[id]).protocol.p.prot_slimbus.iter;
- desc.srcid = abe_atc_srcid [(abe_port[id]).protocol.p.prot_slimbus.desc_addr1 >> 3];
+ desc.srcid = abe_atc_srcid [(abe_port[id]).protocol.p.
+ prot_slimbus.desc_addr1 >> 3];
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_DMEM,
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM,
(abe_port[id]).protocol.p.prot_slimbus.desc_addr1,
- (abe_uint32*)&desc, sizeof(desc));
+ (u32*)&desc, sizeof (desc));
desc.badd = (abe_port[id]).protocol.p.prot_slimbus.buf_addr2;
- desc.srcid = abe_atc_srcid [(abe_port[id]).protocol.p.prot_slimbus.desc_addr2 >> 3];
+ desc.srcid = abe_atc_srcid [(abe_port[id]).protocol.p.
+ prot_slimbus.desc_addr2 >> 3];
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_DMEM,
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM,
(abe_port[id]).protocol.p.prot_slimbus.desc_addr2,
- (abe_uint32*)&desc, sizeof(desc));
+ (u32*)&desc, sizeof (desc));
break;
- case SERIAL_PORT_PROT:
+ case SERIAL_PORT_PROT :
desc.cbdir = (abe_port[id]).protocol.direction;
desc.cbsize = (abe_port[id]).protocol.p.prot_serial.buf_size;
desc.badd = ((abe_port[id]).protocol.p.prot_serial.buf_addr) >> 4;
desc.iter = (abe_port[id]).protocol.p.prot_serial.iter;
- desc.srcid = abe_atc_srcid[(abe_port[id]).protocol.p.prot_serial.desc_addr >> 3];
- desc.destid = abe_atc_dstid[(abe_port[id]).protocol.p.prot_serial.desc_addr >> 3];
+ desc.srcid = abe_atc_srcid [(abe_port[id]).protocol.p.
+ prot_serial.desc_addr >> 3];
+ desc.destid = abe_atc_dstid [(abe_port[id]).protocol.p.
+ prot_serial.desc_addr >> 3];
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_DMEM,
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM,
(abe_port[id]).protocol.p.prot_serial.desc_addr,
- (abe_uint32*)&desc, sizeof(desc));
+ (u32*)&desc, sizeof (desc));
break;
- case DMIC_PORT_PROT:
+ case DMIC_PORT_PROT :
desc.cbdir = ABE_ATC_DIRECTION_IN;
desc.cbsize = (abe_port[id]).protocol.p.prot_dmic.buf_size;
desc.badd = ((abe_port[id]).protocol.p.prot_dmic.buf_addr) >> 4;
desc.iter = DMIC_ITER;
- desc.srcid = abe_atc_srcid[ABE_ATC_DMIC_DMA_REQ];
+ desc.srcid = abe_atc_srcid [ABE_ATC_DMIC_DMA_REQ];
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_DMEM,
- ABE_ATC_DMIC_DMA_REQ * ATC_SIZE, (abe_uint32*)&desc, sizeof(desc));
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM,
+ ABE_ATC_DMIC_DMA_REQ * ATC_SIZE, (u32*)&desc,
+ sizeof (desc));
break;
- case MCPDMDL_PORT_PROT:
- abe_global_mcpdm_control = abe_port[id].protocol.p.prot_mcpdmdl.control; /* Control allowed on McPDM DL */
+ case MCPDMDL_PORT_PROT :
desc.cbdir = ABE_ATC_DIRECTION_OUT;
desc.cbsize = (abe_port[id]).protocol.p.prot_mcpdmdl.buf_size;
desc.badd = ((abe_port[id]).protocol.p.prot_mcpdmdl.buf_addr) >> 4;
desc.iter = MCPDM_DL_ITER;
- desc.destid = abe_atc_dstid[ABE_ATC_MCPDMDL_DMA_REQ];
+ desc.destid = abe_atc_dstid [ABE_ATC_MCPDMDL_DMA_REQ];
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_DMEM,
- ABE_ATC_MCPDMDL_DMA_REQ * ATC_SIZE, (abe_uint32*)&desc, sizeof(desc));
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM,
+ ABE_ATC_MCPDMDL_DMA_REQ * ATC_SIZE, (u32*)&desc,
+ sizeof (desc));
break;
- case MCPDMUL_PORT_PROT:
+ case MCPDMUL_PORT_PROT :
desc.cbdir = ABE_ATC_DIRECTION_IN;
desc.cbsize = (abe_port[id]).protocol.p.prot_mcpdmul.buf_size;
desc.badd = ((abe_port[id]).protocol.p.prot_mcpdmul.buf_addr) >> 4;
desc.iter = MCPDM_UL_ITER;
- desc.srcid = abe_atc_srcid[ABE_ATC_MCPDMUL_DMA_REQ];
+ desc.srcid = abe_atc_srcid [ABE_ATC_MCPDMUL_DMA_REQ];
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_DMEM,
- ABE_ATC_MCPDMUL_DMA_REQ * ATC_SIZE, (abe_uint32*)&desc, sizeof(desc));
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM,
+ ABE_ATC_MCPDMUL_DMA_REQ * ATC_SIZE, (u32*)&desc,
+ sizeof (desc));
break;
case PINGPONG_PORT_PROT:
/* software protocol, nothing to do on ATC */
break;
- case DMAREQ_PORT_PROT:
+ case DMAREQ_PORT_PROT :
desc.cbdir = (abe_port[id]).protocol.direction;
desc.cbsize = (abe_port[id]).protocol.p.prot_dmareq.buf_size;
desc.badd = ((abe_port[id]).protocol.p.prot_dmareq.buf_addr) >> 4;
- desc.iter = 1; /* CBPr needs ITER=1. this is the eDMA job to do the iterations */
+
+ /* CBPr needs ITER=1. this is the eDMA job to do the iterations */
+ desc.iter = 1;
+
/* input from ABE point of view */
if (abe_port[id].protocol.direction == ABE_ATC_DIRECTION_IN) {
- desc.rdpt = 127;
- desc.wrpt = 0;
- desc.srcid = abe_atc_srcid[(abe_port[id]).protocol.p.prot_dmareq.desc_addr >> 3];
+
+ /* desc.rdpt = 127; */
+ /* desc.wrpt = 0; */
+ desc.srcid = abe_atc_srcid
+ [(abe_port[id]).protocol.p.
+ prot_dmareq.desc_addr >> 3];
} else {
- desc.rdpt = 0;
- desc.wrpt = 127;
- desc.destid = abe_atc_dstid[(abe_port[id]).protocol.p.prot_dmareq.desc_addr >> 3];
+
+ /* desc.rdpt = 0; */
+ /* desc.wrpt = 127; */
+ desc.destid = abe_atc_dstid
+ [(abe_port[id]).protocol.p.
+ prot_dmareq.desc_addr >> 3];
}
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_DMEM,
- (abe_port[id]).protocol.p.prot_dmareq.desc_addr, (abe_uint32*)&desc, sizeof (desc));
- break;
- default:
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM,
+ (abe_port[id]).protocol.p.
+ prot_dmareq.desc_addr,
+ (u32*)&desc, sizeof (desc));
break;
}
}
-/*
- * ABE_RESET_ATC
- *
- * Parameter:
- * prot : protocol being used
- *
- * Operations:
- * reset R/W pointers of a FIFO
- *
- * Return value:
+/**
+ * abe_init_dma_t
+ * @ id: ABE port ID
+ * @ prot: protocol being used
*
+ * load the dma_t with physical information from AE memory mapping
*/
-void abe_reset_atc(abe_uint32 atc_index)
-{
- abe_satcdescriptor_aess desc;
-
- desc.rdpt = desc.wrpt = desc.irqdest = desc.cberr = desc.desen = desc.nw =0;
- desc.reserved0 = desc.reserved1 = desc.reserved2 = 0;
- desc.srcid = desc.destid = desc.badd = desc.iter = desc.cbsize = 0;
-
- desc.cbdir = ABE_ATC_DIRECTION_IN;
- desc.cbsize = 4;
- desc.badd = 448 >> 4;
- desc.iter = 1;
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_DMEM,
- ABE_ATC_DMIC_DMA_REQ * ATC_SIZE, (abe_uint32*)&desc, sizeof (desc));
-}
-
-/*
- *
- * ABE_INIT_DMA_T
- * Parameter :
- * prot : protocol being used
- *
- * Operations :
- * load the dma_t with physical information from AE memory mapping
- *
- * Return value :
- *
- */
-void abe_init_dma_t(abe_port_id id, abe_port_protocol_t *prot)
+void abe_init_dma_t (u32 id, abe_port_protocol_t *prot)
{
abe_dma_t_offset dma;
- abe_uint32 idx;
+ u32 idx;
- dma.data = 0; /* default dma_t points to address 0000... */
+ /* default dma_t points to address 0000... */
+ dma.data = 0;
dma.iter = 0;
switch (prot->protocol_switch) {
case PINGPONG_PORT_PROT:
for (idx = 0; idx < 32; idx++) {
- if (((prot->p).prot_pingpong.irq_data) == (abe_uint32)(1 << idx))
+ if (((prot->p).prot_pingpong.irq_data) == (u32)(1 << idx))
break;
}
(prot->p).prot_dmareq.desc_addr = (CBPr_DMA_RTX0+idx)*ATC_SIZE;
+ /* translate byte address/size in DMEM words */
dma.data = (prot->p).prot_pingpong.buf_addr >> 2;
dma.iter = (prot->p).prot_pingpong.buf_size >> 2;
break;
- case DMAREQ_PORT_PROT:
+ case DMAREQ_PORT_PROT :
for (idx = 0; idx < 32; idx++) {
- if (((prot->p).prot_dmareq.dma_data) == (abe_uint32)(1 << idx))
+ if (((prot->p).prot_dmareq.dma_data) == (u32)(1 << idx))
break;
}
dma.data = (CIRCULAR_BUFFER_PERIPHERAL_R__0 + idx*4);
dma.iter = (prot->p).prot_dmareq.iter;
(prot->p).prot_dmareq.desc_addr = (CBPr_DMA_RTX0+idx)*ATC_SIZE;
break;
- case SLIMBUS_PORT_PROT:
- case SERIAL_PORT_PROT:
- case DMIC_PORT_PROT:
- case MCPDMDL_PORT_PROT:
- case MCPDMUL_PORT_PROT:
- default:
+ case SLIMBUS_PORT_PROT :
+ case SERIAL_PORT_PROT :
+ case DMIC_PORT_PROT :
+ case MCPDMDL_PORT_PROT :
+ case MCPDMUL_PORT_PROT :
+ default :
break;
}
@@ -524,188 +515,206 @@ void abe_init_dma_t(abe_port_id id, abe_port_protocol_t *prot)
abe_port [id].dma = dma;
}
-/*
- * ABE_DISENABLE_DMA_REQUEST
+/**
+ * abe_disenable_dma_request
* Parameter:
* Operations:
* Return value:
*/
-void abe_disable_enable_dma_request(abe_port_id id, abe_uint32 on_off)
+void abe_disable_enable_dma_request (u32 id, u32 on_off)
{
ABE_SIODescriptor desc;
ABE_SPingPongDescriptor desc_pp;
- abe_uint8 desc_third_word[4], irq_dmareq_field;
- abe_uint32 sio_desc_address;
- abe_uint32 struct_offset;
+ u8 desc_third_word[4], irq_dmareq_field;
+ u32 sio_desc_address;
+ u32 struct_offset;
if (abe_port[id].protocol.protocol_switch == PINGPONG_PORT_PROT) {
- irq_dmareq_field = (abe_uint8)(on_off * abe_port[id].protocol.p.prot_pingpong.irq_data);
+ irq_dmareq_field = (u8)(on_off * abe_port[id].protocol.p.prot_pingpong.irq_data);
sio_desc_address = D_PingPongDesc_ADDR;
- struct_offset = (abe_uint32)&(desc_pp.data_size) - (abe_uint32)&(desc_pp);
-
- abe_block_copy(COPY_FROM_ABE_TO_HOST, ABE_DMEM, sio_desc_address + struct_offset, (abe_uint32 *)desc_third_word, 4);
- desc_third_word[2] = irq_dmareq_field;
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_DMEM, sio_desc_address + struct_offset, (abe_uint32 *)desc_third_word, 4);
+ struct_offset = (u32)&(desc_pp.data_size) - (u32)&(desc_pp);
+
+ abe_block_copy (COPY_FROM_ABE_TO_HOST, ABE_DMEM,
+ sio_desc_address + struct_offset,
+ (u32 *)desc_third_word, 4);
+ desc_third_word [2] = irq_dmareq_field;
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM,
+ sio_desc_address + struct_offset,
+ (u32 *)desc_third_word, 4);
} else {
- sio_desc_address = dmem_port_descriptors + (id * sizeof(ABE_SIODescriptor));
- abe_block_copy (COPY_FROM_ABE_TO_HOST, ABE_DMEM, sio_desc_address, (abe_uint32*)&desc, sizeof (desc));
+ sio_desc_address = dmem_port_descriptors + (
+ id * sizeof(ABE_SIODescriptor));
+ abe_block_copy (COPY_FROM_ABE_TO_HOST, ABE_DMEM,
+ sio_desc_address, (u32*)&desc,
+ sizeof (desc));
if (on_off) {
- desc.atc_irq_data = (abe_uint8) abe_port[id].protocol.p.prot_dmareq.dma_data;
+ desc.atc_irq_data = (u8) abe_port[id].protocol.p.
+ prot_dmareq.dma_data;
desc.on_off = 0x80;
} else {
desc.atc_irq_data = 0;
desc.on_off = 0;
}
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_DMEM, sio_desc_address,
- (abe_uint32*)&desc, sizeof (desc));
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM, sio_desc_address,
+ (u32*)&desc, sizeof (desc));
}
}
-void abe_enable_dma_request(abe_port_id id)
+void abe_enable_dma_request (u32 id)
{
- abe_disable_enable_dma_request(id, 1);
+ abe_disable_enable_dma_request (id, 1);
}
-/*
- * ABE_DISABLE_DMA_REQUEST
+/**
+ * abe_disable_dma_request
*
* Parameter:
* Operations:
* Return value:
*
*/
-void abe_disable_dma_request(abe_port_id id)
+void abe_disable_dma_request (u32 id)
{
- abe_disable_enable_dma_request(id, 0);
+ abe_disable_enable_dma_request (id, 0);
}
-
-/*
- * ABE_ENABLE_ATC
+/**
+ * abe_enable_atc
* Parameter:
* Operations:
* Return value:
*/
-void abe_enable_atc(abe_port_id id)
+void abe_enable_atc (u32 id)
{
- just_to_avoid_the_many_warnings = (abe_port_id)id;
-#if 0
- abe_satcdescriptor_aess desc;
- abe_block_copy(COPY_FROM_ABE_TO_HOST, ABE_DMEM,
- (abe_port[id]).protocol.p.prot_dmareq.desc_addr,
- (abe_uint32*)&desc, sizeof (desc));
- desc.desen = 1;
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_DMEM,
- (abe_port[id]).protocol.p.prot_dmareq.desc_addr,
- (abe_uint32*)&desc, sizeof (desc));
-#endif
}
-/*
- * ABE_DISABLE_ATC
+/**
+ * abe_disable_atc
* Parameter:
* Operations:
* Return value:
*/
-void abe_disable_atc(abe_port_id id)
+void abe_disable_atc (u32 id)
{
abe_satcdescriptor_aess desc;
- abe_block_copy(COPY_FROM_ABE_TO_HOST, ABE_DMEM,
- (abe_port[id]).protocol.p.prot_dmareq.desc_addr,
- (abe_uint32*)&desc, sizeof (desc));
+ abe_block_copy (COPY_FROM_ABE_TO_HOST, ABE_DMEM,
+ (abe_port[id]).protocol.p.prot_dmareq.desc_addr,
+ (u32*)&desc, sizeof (desc));
desc.desen = 0;
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_DMEM,
- (abe_port[id]).protocol.p.prot_dmareq.desc_addr,
- (abe_uint32*)&desc, sizeof (desc));
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM,
+ (abe_port[id]).protocol.p.prot_dmareq.desc_addr,
+ (u32*)&desc, sizeof (desc));
}
-/*
- * ABE_INIT_IO_TASKS
+/**
+ * abe_init_io_tasks
+ * @prot : protocol being used
*
- * Parameter :
- * prot : protocol being used
- *
- * Operations :
- * load the micro-task parameters doing to DMEM <==> SMEM data moves
- *
- * I/O descriptors input parameters :
- * For Read from DMEM usually THR1/THR2 = X+1/X-1
- * For Write to DMEM usually THR1/THR2 = 2/0
- * UP_1/2 =X+1/X-1
- *
- * Return value :
+ * load the micro-task parameters doing to DMEM <==> SMEM data moves
*
+ * I/O descriptors input parameters :
+ * For Read from DMEM usually THR1/THR2 = X+1/X-1
+ * For Write to DMEM usually THR1/THR2 = 2/0
+ * UP_1/2 =X+1/X-1
*/
-void abe_init_io_tasks(abe_port_id id, abe_data_format_t *format, abe_port_protocol_t *prot)
+void abe_init_io_tasks (u32 id, abe_data_format_t *format, abe_port_protocol_t *prot)
{
ABE_SIODescriptor desc;
ABE_SPingPongDescriptor desc_pp;
- abe_uint32 x_io, direction, iter_samples, smem1, smem2, smem3, io_sub_id;
- abe_uint32 copy_func_index, before_func_index, after_func_index;
- abe_uint32 dmareq_addr, dmareq_field;
- abe_uint32 sio_desc_address, datasize, iter, nsamp, datasize2, dOppMode32;
- abe_uint32 atc_ptr_saved, atc_ptr_saved2, copy_func_index1;
- abe_uint32 copy_func_index2, atc_desc_address1, atc_desc_address2;
- short MultiFrame[PROCESSING_SLOTS][TASKS_IN_SLOT];
+ u32 x_io, direction, iter_samples, smem1, smem2, smem3, io_sub_id;
+ u32 copy_func_index, before_func_index, after_func_index;
+ u32 dmareq_addr, dmareq_field;
+ u32 sio_desc_address, datasize, iter, nsamp, datasize2, dOppMode32;
+ u32 atc_ptr_saved, atc_ptr_saved2, copy_func_index1;
+ u32 copy_func_index2, atc_desc_address1, atc_desc_address2;
if (prot->protocol_switch == PINGPONG_PORT_PROT) {
+
+ /* MM_DL managed in ping-pong */
if (MM_DL_PORT == id) {
- // @@@@ reset local memory
- abe_block_copy(COPY_FROM_ABE_TO_HOST, ABE_DMEM,
- D_multiFrame_ADDR,
- (abe_uint32*)MultiFrame,
- sizeof (MultiFrame));
+ abe_block_copy (COPY_FROM_ABE_TO_HOST, ABE_DMEM,
+ D_multiFrame_ADDR,
+ (u32*)MultiFrame,
+ sizeof (MultiFrame));
MultiFrame[TASK_IO_MM_DL_SLT][TASK_IO_MM_DL_IDX] =
- D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_IO_PING_PONG;
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_DMEM,
- D_multiFrame_ADDR, (abe_uint32*)MultiFrame,
- sizeof (MultiFrame));
+ ABE_TASK_ID(C_ABE_FW_TASK_IO_PING_PONG);
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM,
+ D_multiFrame_ADDR, (u32*)MultiFrame,
+ sizeof (MultiFrame));
} else {
abe_dbg_param |= ERR_API;
abe_dbg_error_log (ABE_PARAMETER_ERROR);
}
- smem1 = (abe_uint8) abe_port[id].smem_buffer1;
- copy_func_index = (abe_uint8) abe_dma_port_copy_subroutine_id (id);
- dmareq_addr = abe_port[id].protocol.p.prot_pingpong.irq_addr;
+ /* set the SMEM buffer -- programming sequence */
+ abe_block_copy (COPY_FROM_ABE_TO_HOST, ABE_DMEM,
+ D_maxTaskBytesInSlot_ADDR,
+ &dOppMode32, sizeof (u32));
+ if (dOppMode32 == DOPPMODE32_OPP100)
+ /* ASRC input buffer, size 40 */
+ smem1 = smem_mm_dl_opp100;
+ else
+ /* at OPP 25/50 or without ASRC */
+ smem1 = smem_mm_dl_opp25;
+
+ copy_func_index = (u8) abe_dma_port_copy_subroutine_id (id);
+ dmareq_addr = abe_port[id].protocol.p.prot_pingpong.irq_addr;
dmareq_field = abe_port[id].protocol.p.prot_pingpong.irq_data;
datasize = abe_dma_port_iter_factor (format);
+
+ /* number of "samples" either mono or stereo */
iter = abe_dma_port_iteration (format);
- iter_samples = (iter / datasize); /* number of "samples" either mono or stereo */
+ iter_samples = (iter / datasize);
/* load the IO descriptor */
- desc_pp.drift_ASRC = 0; /* no drift */
- desc_pp.drift_io = 0; /* no drift */
- desc_pp.hw_ctrl_addr = (abe_uint16) dmareq_addr;
- desc_pp.copy_func_index = (abe_uint8) copy_func_index;
- desc_pp.smem_addr = (abe_uint8) smem1;
- desc_pp.atc_irq_data = (abe_uint8) dmareq_field; /* DMA req 0 is used for CBPr0 */
- desc_pp.x_io = (abe_uint8) iter_samples; /* size of block transfer */
- desc_pp.data_size = (abe_uint8) datasize;
- desc_pp.workbuff_BaseAddr = (abe_uint16) (abe_base_address_pingpong [0]); /* address comunicated in Bytes */
- desc_pp.workbuff_Samples = (abe_uint16) iter_samples; /* size comunicated in XIO sample */
- desc_pp.nextbuff0_BaseAddr = (abe_uint16) (abe_base_address_pingpong [0]);
- desc_pp.nextbuff0_Samples = (abe_uint16) ((abe_size_pingpong >> 2)/datasize);
- desc_pp.nextbuff1_BaseAddr = (abe_uint16) (abe_base_address_pingpong [1]);
- desc_pp.nextbuff1_Samples = (abe_uint16) ((abe_size_pingpong >> 2)/datasize);
+
+ /* no drift */
+ desc_pp.drift_ASRC = 0;
+
+ /* no drift */
+ desc_pp.drift_io = 0;
+ desc_pp.hw_ctrl_addr = (u16) dmareq_addr;
+ desc_pp.copy_func_index = (u8) copy_func_index;
+ desc_pp.smem_addr = (u8) smem1;
+
+ /* DMA req 0 is used for CBPr0 */
+ desc_pp.atc_irq_data = (u8) dmareq_field;
+
+ /* size of block transfer */
+ desc_pp.x_io = (u8) iter_samples;
+ desc_pp.data_size = (u8) datasize;
+
+ /* address comunicated in Bytes */
+ desc_pp.workbuff_BaseAddr = (u16) (abe_base_address_pingpong [1]);
+
+ /* size comunicated in XIO sample */
+ desc_pp.workbuff_Samples = (u16) iter_samples;
+
+ desc_pp.nextbuff0_BaseAddr = (u16) (abe_base_address_pingpong [0]);
+ desc_pp.nextbuff0_Samples = (u16) ((abe_size_pingpong >> 2)/datasize);
+ desc_pp.nextbuff1_BaseAddr = (u16) (abe_base_address_pingpong [1]);
+ desc_pp.nextbuff1_Samples = (u16) ((abe_size_pingpong >> 2)/datasize);
+
+ /* next buffer to send is B1, first IRQ fills B0 */
desc_pp.counter = 1;
/* send a DMA req to fill B0 with N samples
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_ATC, ABE_DMASTATUS_RAW, &(abe_port[id].protocol.p.prot_pingpong.irq_data), 4); */
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_ATC, ABE_DMASTATUS_RAW,
+ &(abe_port[id].protocol.p.prot_pingpong.irq_data), 4); */
sio_desc_address = D_PingPongDesc_ADDR;
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_DMEM, sio_desc_address,
- (abe_uint32*)&desc_pp, sizeof (desc_pp));
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM, sio_desc_address,
+ (u32*)&desc_pp, sizeof (desc_pp));
} else {
io_sub_id = dmareq_addr = ABE_DMASTATUS_RAW;
dmareq_field = 0;
atc_desc_address1 = atc_desc_address2 = 0;
- datasize2=datasize = abe_dma_port_iter_factor(format);
- x_io = (abe_uint8) abe_dma_port_iteration(format);
+ datasize2=datasize = abe_dma_port_iter_factor (format);
+ x_io = (u8) abe_dma_port_iteration (format);
nsamp = (x_io / datasize);
atc_ptr_saved2=atc_ptr_saved = DMIC_ATC_PTR_labelID + id;
@@ -713,74 +722,82 @@ void abe_init_io_tasks(abe_port_id id, abe_data_format_t *format, abe_port_proto
smem1 = abe_port[id].smem_buffer1;
smem3 = smem2 = abe_port[id].smem_buffer2;
- copy_func_index1 = (abe_uint8) abe_dma_port_copy_subroutine_id(id);
- before_func_index = after_func_index = copy_func_index2 = NULL_COPY_CFPID;
+ copy_func_index1 = (u8) abe_dma_port_copy_subroutine_id (id);
+ before_func_index = after_func_index =
+ copy_func_index2 = NULL_COPY_CFPID;
/* MM_DL managed in non-ping-pong mode */
if (MM_DL_PORT == id) {
- abe_block_copy(COPY_FROM_ABE_TO_HOST, ABE_DMEM, D_multiFrame_ADDR,
- (abe_uint32*)MultiFrame, sizeof (MultiFrame));
- MultiFrame[TASK_IO_MM_DL_SLT][TASK_IO_MM_DL_IDX] = D_tasksList_ADDR +
- sizeof(ABE_STask)*C_ABE_FW_TASK_IO_MM_DL;
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_DMEM, D_multiFrame_ADDR,
- (abe_uint32 *)MultiFrame, sizeof (MultiFrame));
+ abe_block_copy (COPY_FROM_ABE_TO_HOST, ABE_DMEM,
+ D_multiFrame_ADDR,
+ (u32*)MultiFrame,
+ sizeof (MultiFrame));
+ MultiFrame[TASK_IO_MM_DL_SLT][TASK_IO_MM_DL_IDX] =
+ D_tasksList_ADDR +
+ sizeof(ABE_STask)*C_ABE_FW_TASK_IO_MM_DL;
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM,
+ D_multiFrame_ADDR,
+ (u32*)MultiFrame, sizeof (MultiFrame));
}
switch (prot->protocol_switch) {
- case DMIC_PORT_PROT:
+ case DMIC_PORT_PROT :
/* DMIC port is read in two steps */
x_io = x_io >> 1;
nsamp = nsamp >> 1;
atc_desc_address1 = ABE_ATC_DMIC_DMA_REQ*ATC_SIZE;
io_sub_id = IO_IP_CFPID;
break;
- case MCPDMDL_PORT_PROT:
- /* PDMDL port is written to in two steps */
+ case MCPDMDL_PORT_PROT :
+ /* PDMDL port is written to in two steps */
x_io = x_io >> 1;
atc_desc_address1 = ABE_ATC_MCPDMDL_DMA_REQ*ATC_SIZE;
io_sub_id = IO_IP_CFPID;
break;
- case MCPDMUL_PORT_PROT:
+ case MCPDMUL_PORT_PROT :
atc_desc_address1 = ABE_ATC_MCPDMUL_DMA_REQ*ATC_SIZE;
io_sub_id = IO_IP_CFPID;
break;
- case SLIMBUS_PORT_PROT:
- atc_desc_address1 = abe_port[id].protocol.p.prot_slimbus.desc_addr1;
- atc_desc_address2 = abe_port[id].protocol.p.prot_slimbus.desc_addr2;
+ case SLIMBUS_PORT_PROT :
+ atc_desc_address1 = abe_port[id].protocol.p.
+ prot_slimbus.desc_addr1;
+ atc_desc_address2 = abe_port[id].protocol.p.
+ prot_slimbus.desc_addr2;
copy_func_index2 = NULL_COPY_CFPID;
-/* @@@@@@
-#define SPLIT_SMEM_CFPID 9
-#define MERGE_SMEM_CFPID 10
-#define SPLIT_TDM_12_CFPID 11
-#define MERGE_TDM_12_CFPID 12
-*/
- io_sub_id = IO_IP_CFPID;
- case SERIAL_PORT_PROT: /* McBSP/McASP */
- atc_desc_address1 = (abe_int16) abe_port[id].protocol.p.prot_serial.desc_addr;
- io_sub_id = IO_IP_CFPID;
+ /* @@@@@@
+ #define SPLIT_SMEM_CFPID 9
+ #define MERGE_SMEM_CFPID 10
+ #define SPLIT_TDM_12_CFPID 11
+ #define MERGE_TDM_12_CFPID 12
+ */
+ io_sub_id = IO_IP_CFPID;
break;
- case DMAREQ_PORT_PROT: /* DMA w/wo CBPr */
- dmareq_addr = abe_port[id].protocol.p.prot_dmareq.dma_addr;
- dmareq_field = 0;
- atc_desc_address1 = abe_port[id].protocol.p.prot_dmareq.desc_addr;
- io_sub_id = IO_DMAREQ_CFPID;
+ case SERIAL_PORT_PROT : /* McBSP/McASP */
+ atc_desc_address1 = (s16) abe_port[id].protocol.p.
+ prot_serial.desc_addr;
+ io_sub_id = IO_IP_CFPID;
break;
- default:
+ case DMAREQ_PORT_PROT : /* DMA w/wo CBPr */
+ dmareq_addr = abe_port[id].protocol.p.
+ prot_dmareq.dma_addr;
+ dmareq_field = 0;
+ atc_desc_address1 = abe_port[id].protocol.p.
+ prot_dmareq.desc_addr;
+ io_sub_id = IO_IP_CFPID;
break;
}
/* special situation of the PING_PONG protocol which has its own SIO descriptor format */
- /* Sequence of operations on ping-pong buffers B0/B1
- * ---------- time --------------------------------------------->>>>
- * Host Application is ready to send data from DDR to B0
- * SDMA is initialized from "abe_connect_irq_ping_pong_port" to B0
- * ABE HAL init FW to B0
- * send DMAreq to fill B0
- * FIRMWARE starts sending B1 data, sends DMAreq v
- * continue with B0, sends DMAreq v continue with B1
- * DMAreq v (direct access from HAL to AESS regs)
- * v (from ABE_FW) v (from ABE_FW)
- * SDMA | fills B0 | fills B1...| fills B0...
+ /*
+ Sequence of operations on ping-pong buffers B0/B1
+
+ ----------------------------------------------------------------- time --------------------------------------------->>>>
+ Host Application is ready to send data from DDR to B0
+ SDMA is initialized from "abe_connect_irq_ping_pong_port" to B0
+
+ FIRMWARE starts with #12 B1 data, sends IRQ/DMAreq sens #pong B1 data sends IRQ/DMAreq sends #ping B0 v sends B1 samples
+ ARM / SDMA | fills B0 | fills B1 ... | fills B0 ...
+ Counter 0 1 2 3
*/
if (MM_UL_PORT == id) {
@@ -791,202 +808,203 @@ void abe_init_io_tasks(abe_port_id id, abe_data_format_t *format, abe_port_proto
/* check for 8kHz/16kHz */
if (VX_DL_PORT == id) {
abe_block_copy (COPY_FROM_ABE_TO_HOST, ABE_DMEM,
- D_multiFrame_ADDR, (abe_uint32*)MultiFrame, sizeof (MultiFrame));
+ D_multiFrame_ADDR, (u32*)MultiFrame,
+ sizeof (MultiFrame));
if (abe_port[id].format.f == 8000) {
MultiFrame[TASK_ASRC_VX_DL_SLT][TASK_ASRC_VX_DL_IDX] =
- D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_ASRC_VX_DL_8;
+ ABE_TASK_ID(C_ABE_FW_TASK_ASRC_VX_DL_8);
MultiFrame[TASK_VX_DL_SLT][TASK_VX_DL_IDX] =
- D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_VX_DL_8_48;
- smem1 = IO_VX_DL_ASRC_labelID; /*Voice_8k_DL_labelID*/
+ ABE_TASK_ID(C_ABE_FW_TASK_VX_DL_8_48);
+
+ /*Voice_8k_DL_labelID*/
+ smem1 = IO_VX_DL_ASRC_labelID;
} else {
- MultiFrame[TASK_ASRC_VX_DL_SLT][TASK_ASRC_VX_DL_IDX] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_ASRC_VX_DL_16;
- MultiFrame[TASK_VX_DL_SLT][TASK_VX_DL_IDX] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_VX_DL_16_48;
- smem1 = IO_VX_DL_ASRC_labelID; /* Voice_16k_DL_labelID */
+ MultiFrame[TASK_ASRC_VX_DL_SLT][TASK_ASRC_VX_DL_IDX] =
+ ABE_TASK_ID(C_ABE_FW_TASK_ASRC_VX_DL_16);
+ MultiFrame[TASK_VX_DL_SLT][TASK_VX_DL_IDX] =
+ ABE_TASK_ID(C_ABE_FW_TASK_VX_DL_16_48);
+
+ /* Voice_16k_DL_labelID */
+ smem1 = IO_VX_DL_ASRC_labelID;
}
abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM,
- D_multiFrame_ADDR, (abe_uint32*)MultiFrame, sizeof (MultiFrame));
+ D_multiFrame_ADDR, (u32*)MultiFrame,
+ sizeof (MultiFrame));
}
/* check for 8kHz/16kHz */
if (VX_UL_PORT == id) {
abe_block_copy (COPY_FROM_ABE_TO_HOST, ABE_DMEM,
- D_multiFrame_ADDR, (abe_uint32*)MultiFrame, sizeof (MultiFrame));
+ D_multiFrame_ADDR, (u32*)MultiFrame,
+ sizeof (MultiFrame));
if (abe_port[id].format.f == 8000) {
MultiFrame[TASK_ASRC_VX_UL_SLT][TASK_ASRC_VX_UL_IDX] =
- D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_ASRC_VX_UL_8;
+ ABE_TASK_ID(C_ABE_FW_TASK_ASRC_VX_UL_8);
MultiFrame[TASK_VX_UL_SLT][TASK_VX_UL_IDX] =
- D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_VX_UL_48_8;
+ ABE_TASK_ID(C_ABE_FW_TASK_VX_UL_48_8);
/* MultiFrame[TASK_ECHO_SLT][TASK_ECHO_IDX] =
- D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_ECHO_REF_48_8; */
+ ABE_TASK_ID(C_ABE_FW_TASK_ECHO_REF_48_8); */
smem1 = Voice_8k_UL_labelID;
} else {
MultiFrame[TASK_ASRC_VX_UL_SLT][TASK_ASRC_VX_UL_IDX] =
- D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_ASRC_VX_UL_16;
+ ABE_TASK_ID(C_ABE_FW_TASK_ASRC_VX_UL_16);
MultiFrame[TASK_VX_UL_SLT][TASK_VX_UL_IDX] =
- D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_VX_UL_48_16;
+ ABE_TASK_ID(C_ABE_FW_TASK_VX_UL_48_16);
/* MultiFrame[TASK_ECHO_SLT][TASK_ECHO_IDX] =
- D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_ECHO_REF_48_16; */
+ ABE_TASK_ID(C_ABE_FW_TASK_ECHO_REF_48_16); */
smem1 = Voice_16k_UL_labelID;
}
abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM,
- D_multiFrame_ADDR, (abe_uint32*)MultiFrame, sizeof (MultiFrame));
+ D_multiFrame_ADDR, (u32*)MultiFrame,
+ sizeof (MultiFrame));
}
/* check for 8kHz/16kHz */
if (BT_VX_DL_PORT == id) {
- abe_block_copy(COPY_FROM_ABE_TO_HOST, ABE_DMEM,
+ abe_block_copy (COPY_FROM_ABE_TO_HOST, ABE_DMEM,
D_multiFrame_ADDR,
- (abe_uint32*)MultiFrame,
- sizeof (MultiFrame));
+ (u32*)MultiFrame, sizeof (MultiFrame));
if (abe_port[id].format.f == 8000) {
MultiFrame[TASK_BT_DL_48_8_SLT][TASK_BT_DL_48_8_IDX] =
- D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_BT_DL_48_8;
+ ABE_TASK_ID(C_ABE_FW_TASK_BT_DL_48_8);
smem1 = BT_DL_8k_labelID;
} else {
MultiFrame[TASK_BT_DL_48_8_SLT][TASK_BT_DL_48_8_IDX] =
- D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_BT_DL_48_16;
+ ABE_TASK_ID(C_ABE_FW_TASK_BT_DL_48_16);
smem1 = BT_DL_16k_labelID;
}
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_DMEM,
- D_multiFrame_ADDR, (abe_uint32*)MultiFrame,
- sizeof (MultiFrame));
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM,
+ D_multiFrame_ADDR, (u32*)MultiFrame,
+ sizeof (MultiFrame));
}
/* check for 8kHz/16kHz */
if (BT_VX_UL_PORT == id) {
- abe_block_copy(COPY_FROM_ABE_TO_HOST, ABE_DMEM, D_multiFrame_ADDR,
- (abe_uint32*)MultiFrame, sizeof (MultiFrame));
+ abe_block_copy (COPY_FROM_ABE_TO_HOST, ABE_DMEM,
+ D_multiFrame_ADDR,
+ (u32*)MultiFrame, sizeof (MultiFrame));
if (abe_port[id].format.f == 8000) {
MultiFrame[TASK_BT_UL_8_48_SLT][TASK_BT_UL_8_48_IDX] =
- D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_BT_UL_8_48;
+ ABE_TASK_ID(C_ABE_FW_TASK_BT_UL_8_48);
smem1 = BT_UL_8k_labelID;
} else {
MultiFrame[TASK_BT_UL_8_48_SLT][TASK_BT_UL_8_48_IDX] =
- D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_BT_UL_16_48;
+ ABE_TASK_ID(C_ABE_FW_TASK_BT_UL_16_48);
smem1 = BT_UL_16k_labelID;
}
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_DMEM,
- D_multiFrame_ADDR, (abe_uint32*)MultiFrame,
- sizeof (MultiFrame));
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM,
+ D_multiFrame_ADDR, (u32*)MultiFrame,
+ sizeof (MultiFrame));
}
if (MM_DL_PORT == id) {
- //@@@ abe_block_copy (COPY_FROM_ABE_TO_HOST, ABE_DMEM, D_multiFrame_ADDR, (abe_uint32*)MultiFrame, sizeof (MultiFrame));
- //@@@ MultiFrame[TASK_IO_MM_DL_SLT][TASK_IO_MM_DL_IDX] = D_tasksList_ADDR + sizeof(ABE_STask)*C_ABE_FW_TASK_IO2_MM_DL;
- //@@@ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM, D_multiFrame_ADDR, (abe_uint32*)MultiFrame, sizeof (MultiFrame));
- /* set the SMEM buffer @@@@@ programming sequence : OPP must be set before channel is defined */
- abe_block_copy (COPY_FROM_ABE_TO_HOST, ABE_DMEM, D_maxTaskBytesInSlot_ADDR, &dOppMode32, sizeof(abe_uint32));
+ /* check for CBPr / serial_port / Ping-pong access */
+ abe_block_copy (COPY_FROM_ABE_TO_HOST, ABE_DMEM,
+ D_multiFrame_ADDR, (u32*)MultiFrame,
+ sizeof (MultiFrame));
+ MultiFrame[TASK_IO_MM_DL_SLT][TASK_IO_MM_DL_IDX] =
+ ABE_TASK_ID(C_ABE_FW_TASK_IO_MM_DL);
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM,
+ D_multiFrame_ADDR, (u32*)MultiFrame,
+ sizeof (MultiFrame));
+
+ /* set the SMEM buffer -- programming sequence */
+ abe_block_copy (COPY_FROM_ABE_TO_HOST, ABE_DMEM,
+ D_maxTaskBytesInSlot_ADDR, &dOppMode32,
+ sizeof (u32));
+
if (dOppMode32 == DOPPMODE32_OPP100)
- smem1 = smem_mm_dl_opp100; /* ASRC input buffer, size 40 */
+ /* ASRC input buffer, size 40 */
+ smem1 = smem_mm_dl_opp100;
else
- smem1 = smem_mm_dl_opp25; /* at OPP 25/50 or without ASRC */
+ /* at OPP 25/50 or without ASRC */
+ smem1 = smem_mm_dl_opp25;
}
if (abe_port[id].protocol.direction == ABE_ATC_DIRECTION_IN)
direction = 0;
else
- direction = 3; /* offset of the write pointer in the ATC descriptor */
+ /* offset of the write pointer in the ATC descriptor */
+ direction = 3;
desc.drift_ASRC = 0;
desc.drift_io = 0;
- desc.io_type_idx = (abe_uint8) io_sub_id;
- desc.samp_size = (abe_uint8) datasize;
- //desc.unused1 = (abe_uint8)0;
- //desc.unused2 = (abe_uint8)0;
-
- desc.hw_ctrl_addr = (abe_uint16) (dmareq_addr << 2);
- desc.atc_irq_data = (abe_uint8) dmareq_field;
- desc.flow_counter = (abe_uint16) 0;
-
- desc.direction_rw = (abe_uint8) direction;
- desc.nsamp = (abe_uint8) nsamp;
- desc.x_io = (abe_uint8) x_io;
- desc.on_off = 0x80; // set ATC ON
-
- desc.split_addr1 = (abe_uint16) smem1;
- desc.split_addr2 = (abe_uint16) smem2;
- desc.split_addr3 = (abe_uint16) smem3;
- desc.before_f_index = (abe_uint8) before_func_index;
- desc.after_f_index = (abe_uint8) after_func_index;
-
- desc.smem_addr1 = (abe_uint16) smem1;
- desc.atc_address1 = (abe_uint16) atc_desc_address1;
- desc.atc_pointer_saved1 = (abe_uint16) atc_ptr_saved;
- desc.data_size1 = (abe_uint8) datasize;
- desc.copy_f_index1 = (abe_uint8) copy_func_index1;
-
- desc.smem_addr2 = (abe_uint16) smem2;
- desc.atc_address2 = (abe_uint16) atc_desc_address2;
- desc.atc_pointer_saved2 = (abe_uint16) atc_ptr_saved2;
- desc.data_size2 = (abe_uint8) datasize2;
- desc.copy_f_index2 = (abe_uint8) copy_func_index2;
-
- sio_desc_address = dmem_port_descriptors + (id * sizeof(ABE_SIODescriptor));
- abe_block_copy(COPY_FROM_HOST_TO_ABE, ABE_DMEM,
- sio_desc_address, (abe_uint32*)&desc, sizeof(desc));
+ desc.io_type_idx = (u8) io_sub_id;
+ desc.samp_size = (u8) datasize;
+
+ desc.hw_ctrl_addr = (u16) (dmareq_addr << 2);
+ desc.atc_irq_data = (u8) dmareq_field;
+ desc.flow_counter = (u16) 0;
+
+ desc.direction_rw = (u8) direction;
+ desc.nsamp = (u8) nsamp;
+ desc.x_io = (u8) x_io;
+ desc.on_off = 0x80; /* set ATC ON */
+
+ desc.split_addr1 = (u16) smem1;
+ desc.split_addr2 = (u16) smem2;
+ desc.split_addr3 = (u16) smem3;
+ desc.before_f_index = (u8) before_func_index;
+ desc.after_f_index = (u8) after_func_index;
+
+ desc.smem_addr1 = (u16) smem1;
+ desc.atc_address1 = (u16) atc_desc_address1;
+ desc.atc_pointer_saved1 = (u16) atc_ptr_saved;
+ desc.data_size1 = (u8) datasize;
+ desc.copy_f_index1 = (u8) copy_func_index1;
+
+ desc.smem_addr2 = (u16) smem2;
+ desc.atc_address2 = (u16) atc_desc_address2;
+ desc.atc_pointer_saved2 = (u16) atc_ptr_saved2;
+ desc.data_size2 = (u8) datasize2;
+ desc.copy_f_index2 = (u8) copy_func_index2;
+
+ sio_desc_address = dmem_port_descriptors + (id *
+ sizeof(ABE_SIODescriptor));
+ abe_block_copy (COPY_FROM_HOST_TO_ABE, ABE_DMEM,
+ sio_desc_address,
+ (u32*)&desc, sizeof (desc));
}
}
-/*
- * ABE_INIT_DMIC
- *
- * Parameter :
- * x : d
- *
- * Operations :
+/**
+ * abe_init_dmic
+ * @x: d
*
*
- * Return value :
- *
*/
-void abe_init_dmic(abe_uint32 x)
+void abe_init_dmic (u32 x)
{
- just_to_avoid_the_many_warnings = x;
+
}
-/*
- * ABE_INIT_MCPDM
- *
- * Parameter :
- * x : d
- *
- * Operations :
- *
- *
- * Return value :
+/**
+ * abe_init_mcpdm
+ * @x: d
*
*/
-void abe_init_mcpdm(abe_uint32 x)
+void abe_init_mcpdm (u32 x)
{
- just_to_avoid_the_many_warnings = x;
+
}
-/*
- * ABE_RESET_FEATURE
- *
- * Parameter :
- * x : index of the feature to be initialized
- *
- * Operations :
- * reload the configuration
- *
- * Return value :
+/**
+ * abe_reset_feature
+ * @x: index of the feature to be initialized
*
+ * reload the configuration
*/
-void abe_reset_one_feature(abe_uint32 x)
+void abe_reset_one_feature (u32 x)
{
- all_feature[x] = all_feature_init[x]; /* load default fields */
- /* abe_call_subroutine ((all_feature[x]).disable_feature, NOPARAMETER, NOPARAMETER, NOPARAMETER, NOPARAMETER); */
+ all_feature [x] = all_feature_init [x]; /* load default fields */
+ /* abe_call_subroutine ((all_feature[x]).disable_feature, NOPARAMETER,
+ NOPARAMETER, NOPARAMETER, NOPARAMETER); */
}
-/*
- * ABE_RESET_ALL_FEATURE
+/**
+ * abe_reset_all_feature
*
- * Parameter :
- * none
- *
- * Operations :
- * load default configuration for all features
- * struct {
+ * load default configuration for all features
+ * struct {
* uint16 load_default_data;
* uint16 read_parameter;
* uint16 write_parameter;
@@ -997,194 +1015,932 @@ void abe_reset_one_feature(abe_uint32 x)
* uint16 fw_scheduler_subslot_position;
* uint16 min_opp;
* char name[NBCHARFEATURENAME];
- * } abe_feature_t;
- *
- * Return value :
- *
+ * } abe_feature_t;
*/
-void abe_reset_all_features(void)
+void abe_reset_all_features (void)
{
- abe_uint16 i;
+ u16 i;
- //for (i = 0; i < FEAT_GAINS_DMIC1; i++)
- for (i = 0; i < LAST_PORT_ID; i++)
- abe_reset_one_feature(i);
+ for (i = 0; i < MAXNBFEATURE; i++)
+ abe_reset_one_feature (i);
}
-/*
- * ABE_RESET_ALL_PORTS
- *
- * Parameter :
- * none
- *
- * Operations :
- * load default configuration for all features
- *
- * Return value :
+/**
+ * abe_reset_all_ports
*
+ * load default configuration for all features
*/
-void abe_reset_all_ports(void)
+void abe_reset_all_ports (void)
{
- abe_uint16 i;
+ u16 i;
for (i = 0; i < LAST_PORT_ID; i++)
- abe_reset_port (i);
+ abe_reset_port (i);
/* mixers' configuration */
- abe_write_mixer(MIXDL1, MUTE_GAIN, RAMP_100MS, MIX_DL1_INPUT_MM_DL);
- abe_write_mixer(MIXDL1, MUTE_GAIN, RAMP_100MS, MIX_DL1_INPUT_MM_UL2);
- abe_write_mixer(MIXDL1, MUTE_GAIN, RAMP_100MS, MIX_DL1_INPUT_VX_DL);
- abe_write_mixer(MIXDL1, MUTE_GAIN, RAMP_100MS, MIX_DL1_INPUT_TONES);
-
- abe_write_mixer(MIXDL2, MUTE_GAIN, RAMP_100MS, MIX_DL2_INPUT_TONES);
- abe_write_mixer(MIXDL2, MUTE_GAIN, RAMP_100MS, MIX_DL2_INPUT_VX_DL);
- abe_write_mixer(MIXDL2, MUTE_GAIN, RAMP_100MS, MIX_DL2_INPUT_MM_DL);
- abe_write_mixer(MIXDL2, MUTE_GAIN, RAMP_100MS, MIX_DL2_INPUT_MM_UL2);
-
- abe_write_mixer(MIXSDT, MUTE_GAIN, RAMP_100MS, MIX_SDT_INPUT_UP_MIXER);
- abe_write_mixer(MIXSDT, GAIN_0dB , RAMP_100MS, MIX_SDT_INPUT_DL1_MIXER);
-
- abe_write_mixer(MIXECHO, GAIN_0dB, RAMP_100MS, GAIN_LEFT_OFFSET);
- abe_write_mixer(MIXECHO, GAIN_0dB, RAMP_100MS, GAIN_RIGHT_OFFSET);
-
- abe_write_mixer(MIXAUDUL, MUTE_GAIN, RAMP_100MS, MIX_AUDUL_INPUT_MM_DL);
- abe_write_mixer(MIXAUDUL, MUTE_GAIN, RAMP_100MS, MIX_AUDUL_INPUT_TONES);
- abe_write_mixer(MIXAUDUL, GAIN_0dB, RAMP_100MS, MIX_AUDUL_INPUT_UPLINK);
- abe_write_mixer(MIXAUDUL, MUTE_GAIN, RAMP_100MS, MIX_AUDUL_INPUT_VX_DL);
-
- abe_write_mixer(MIXVXREC, MUTE_GAIN, RAMP_100MS, MIX_VXREC_INPUT_TONES);
- abe_write_mixer(MIXVXREC, MUTE_GAIN, RAMP_100MS, MIX_VXREC_INPUT_VX_DL);
- abe_write_mixer(MIXVXREC, MUTE_GAIN, RAMP_100MS, MIX_VXREC_INPUT_MM_DL);
- abe_write_mixer(MIXVXREC, MUTE_GAIN, RAMP_100MS, MIX_VXREC_INPUT_VX_UL);
-
- abe_write_gain(GAINS_DMIC1,GAIN_0dB, RAMP_100MS, GAIN_LEFT_OFFSET);
- abe_write_gain(GAINS_DMIC1,GAIN_0dB, RAMP_100MS, GAIN_RIGHT_OFFSET);
- abe_write_gain(GAINS_DMIC2,GAIN_0dB, RAMP_100MS, GAIN_LEFT_OFFSET);
- abe_write_gain(GAINS_DMIC2,GAIN_0dB, RAMP_100MS, GAIN_RIGHT_OFFSET);
- abe_write_gain(GAINS_DMIC3,GAIN_0dB, RAMP_100MS, GAIN_LEFT_OFFSET);
- abe_write_gain(GAINS_DMIC3,GAIN_0dB, RAMP_100MS, GAIN_RIGHT_OFFSET);
- abe_write_gain(GAINS_AMIC,GAIN_0dB, RAMP_100MS, GAIN_LEFT_OFFSET);
- abe_write_gain(GAINS_AMIC, GAIN_0dB, RAMP_100MS, GAIN_RIGHT_OFFSET);
-
- abe_write_gain(GAINS_SPLIT, GAIN_0dB, RAMP_100MS, GAIN_LEFT_OFFSET);
- abe_write_gain(GAINS_SPLIT, GAIN_0dB, RAMP_100MS, GAIN_RIGHT_OFFSET);
- //abe_write_gain(GAINS_EANC ,GAIN_0dB , RAMP_100MS, GAIN_LEFT_OFFSET);
- //abe_write_gain(GAINS_EANC, GAIN_0dB , RAMP_100MS, GAIN_RIGHT_OFFSET);
+ abe_write_mixer (MIXDL1, MUTE_GAIN, RAMP_100MS, MIX_DL1_INPUT_MM_DL);
+ abe_write_mixer (MIXDL1, MUTE_GAIN, RAMP_100MS, MIX_DL1_INPUT_MM_UL2);
+ abe_write_mixer (MIXDL1, MUTE_GAIN, RAMP_100MS, MIX_DL1_INPUT_VX_DL);
+ abe_write_mixer (MIXDL1, MUTE_GAIN, RAMP_100MS, MIX_DL1_INPUT_TONES);
+
+ abe_write_mixer (MIXDL2, MUTE_GAIN, RAMP_100MS, MIX_DL2_INPUT_TONES);
+ abe_write_mixer (MIXDL2, MUTE_GAIN, RAMP_100MS, MIX_DL2_INPUT_VX_DL);
+ abe_write_mixer (MIXDL2, MUTE_GAIN, RAMP_100MS, MIX_DL2_INPUT_MM_DL);
+ abe_write_mixer (MIXDL2, MUTE_GAIN, RAMP_100MS, MIX_DL2_INPUT_MM_UL2);
+
+ abe_write_mixer (MIXSDT, MUTE_GAIN, RAMP_100MS, MIX_SDT_INPUT_UP_MIXER);
+ abe_write_mixer (MIXSDT, GAIN_0dB , RAMP_100MS, MIX_SDT_INPUT_DL1_MIXER);
+
+ abe_write_mixer (MIXECHO, GAIN_0dB , RAMP_100MS, GAIN_LEFT_OFFSET);
+ abe_write_mixer (MIXECHO, GAIN_0dB , RAMP_100MS, GAIN_RIGHT_OFFSET);
+
+ abe_write_mixer (MIXAUDUL, MUTE_GAIN, RAMP_100MS, MIX_AUDUL_INPUT_MM_DL);
+ abe_write_mixer (MIXAUDUL, MUTE_GAIN, RAMP_100MS, MIX_AUDUL_INPUT_TONES);
+ abe_write_mixer (MIXAUDUL, GAIN_0dB , RAMP_100MS, MIX_AUDUL_INPUT_UPLINK);
+ abe_write_mixer (MIXAUDUL, MUTE_GAIN, RAMP_100MS, MIX_AUDUL_INPUT_VX_DL);
+
+ abe_write_mixer (MIXVXREC, MUTE_GAIN, RAMP_100MS, MIX_VXREC_INPUT_TONES);
+ abe_write_mixer (MIXVXREC, MUTE_GAIN, RAMP_100MS, MIX_VXREC_INPUT_VX_DL);
+ abe_write_mixer (MIXVXREC, MUTE_GAIN, RAMP_100MS, MIX_VXREC_INPUT_MM_DL);
+ abe_write_mixer (MIXVXREC, MUTE_GAIN, RAMP_100MS, MIX_VXREC_INPUT_VX_UL);
+
+ abe_write_gain(GAINS_DMIC1,GAIN_0dB , RAMP_100MS, GAIN_LEFT_OFFSET);
+ abe_write_gain(GAINS_DMIC1,GAIN_0dB , RAMP_100MS, GAIN_RIGHT_OFFSET);
+ abe_write_gain(GAINS_DMIC2,GAIN_0dB , RAMP_100MS, GAIN_LEFT_OFFSET);
+ abe_write_gain(GAINS_DMIC2,GAIN_0dB , RAMP_100MS, GAIN_RIGHT_OFFSET);
+ abe_write_gain(GAINS_DMIC3,GAIN_0dB , RAMP_100MS, GAIN_LEFT_OFFSET);
+ abe_write_gain(GAINS_DMIC3,GAIN_0dB , RAMP_100MS, GAIN_RIGHT_OFFSET);
+ abe_write_gain(GAINS_AMIC ,GAIN_0dB , RAMP_100MS, GAIN_LEFT_OFFSET);
+ abe_write_gain(GAINS_AMIC, GAIN_0dB , RAMP_100MS, GAIN_RIGHT_OFFSET);
+
+ abe_write_gain(GAINS_SPLIT ,GAIN_0dB , RAMP_100MS, GAIN_LEFT_OFFSET);
+ abe_write_gain(GAINS_SPLIT, GAIN_0dB , RAMP_100MS, GAIN_RIGHT_OFFSET);
/*@@@Gain set to -6dB due to McPDM Limitation*/
- /* cf CDDS 00635*/
- abe_write_gain(GAINS_DL1, GAIN_M6dB, RAMP_100MS, GAIN_LEFT_OFFSET);
- abe_write_gain(GAINS_DL1, GAIN_M6dB, RAMP_100MS, GAIN_RIGHT_OFFSET);
- abe_write_gain(GAINS_DL2, GAIN_M6dB, RAMP_100MS, GAIN_LEFT_OFFSET);
- abe_write_gain(GAINS_DL2, GAIN_M6dB, RAMP_100MS, GAIN_RIGHT_OFFSET);
+ /* cf CDDS 00635*/
+ abe_write_gain (GAINS_DL1,GAIN_0dB , RAMP_100MS, GAIN_LEFT_OFFSET);
+ abe_write_gain (GAINS_DL1,GAIN_0dB , RAMP_100MS, GAIN_RIGHT_OFFSET);
+ abe_write_gain (GAINS_DL2,GAIN_0dB , RAMP_100MS, GAIN_LEFT_OFFSET);
+ abe_write_gain (GAINS_DL2,GAIN_0dB , RAMP_100MS, GAIN_RIGHT_OFFSET);
}
-/*
- * ABE_CLEAN_TEMPORARY_BUFFERS
- *
- * Parameter :
- * none
- *
- * Operations :
- * clear temporary buffers
- *
- * Return value :
+/**
+ * abe_clean_temporay buffers
*
+ * clear temporary buffers
*/
-void abe_clean_temporary_buffers(abe_port_id id)
+void abe_clean_temporary_buffers (u32 id)
{
switch (id) {
- case DMIC_PORT:
- abe_reset_mem(ABE_DMEM, D_DMIC_UL_FIFO_ADDR,D_DMIC_UL_FIFO_sizeof);
- abe_reset_mem(ABE_SMEM, S_DMIC0_96_48_data_ADDR << 3, S_DMIC0_96_48_data_sizeof << 3);
- abe_reset_mem(ABE_SMEM, S_DMIC1_96_48_data_ADDR << 3, S_DMIC1_96_48_data_sizeof << 3);
- abe_reset_mem(ABE_SMEM, S_DMIC2_96_48_data_ADDR << 3, S_DMIC1_96_48_data_sizeof << 3);
- abe_reset_mem(ABE_CMEM, (C_GainsWRamp_ADDR+dmic1_gains_offset) << 2, 6 << 2); /* reset current gains */
- abe_reset_mem(ABE_SMEM, (S_GCurrent_ADDR+dmic1_gains_offset) << 3, 6 << 3);
+ case DMIC_PORT:
+ abe_reset_mem (ABE_DMEM, D_DMIC_UL_FIFO_ADDR,
+ D_DMIC_UL_FIFO_sizeof);
+ abe_reset_mem (ABE_SMEM, S_DMIC0_96_48_data_ADDR << 3,
+ S_DMIC0_96_48_data_sizeof << 3);
+ abe_reset_mem (ABE_SMEM, S_DMIC1_96_48_data_ADDR << 3,
+ S_DMIC1_96_48_data_sizeof << 3);
+ abe_reset_mem (ABE_SMEM, S_DMIC2_96_48_data_ADDR << 3,
+ S_DMIC1_96_48_data_sizeof << 3);
+ abe_reset_mem(ABE_CMEM, (C_GainsWRamp_ADDR+dmic1_gains_offset) << 2,
+ 6 << 2); /* reset current gains */
+ abe_reset_mem (ABE_SMEM, (S_GCurrent_ADDR+dmic1_gains_offset) << 3,
+ 6 << 3);
break;
- case PDM_UL_PORT:
- abe_reset_mem(ABE_DMEM, D_McPDM_UL_FIFO_ADDR, D_McPDM_UL_FIFO_sizeof);
- abe_reset_mem(ABE_SMEM, S_BT_UL_ADDR << 3, S_BT_UL_sizeof << 3);
- abe_reset_mem(ABE_SMEM, S_AMIC_96_48_data_ADDR << 3, S_AMIC_96_48_data_sizeof << 3);
- abe_reset_mem(ABE_CMEM, (C_GainsWRamp_ADDR+amic_gains_offset) << 2, 2 << 2); /* reset current gains */
- abe_reset_mem(ABE_SMEM, (S_GCurrent_ADDR+amic_gains_offset) << 3, 6 << 3);
+ case PDM_UL_PORT:
+ abe_reset_mem (ABE_DMEM, D_McPDM_UL_FIFO_ADDR,
+ D_McPDM_UL_FIFO_sizeof);
+ abe_reset_mem (ABE_SMEM, S_BT_UL_ADDR << 3,
+ S_BT_UL_sizeof << 3);
+ abe_reset_mem (ABE_SMEM, S_AMIC_96_48_data_ADDR << 3,
+ S_AMIC_96_48_data_sizeof << 3);
+ abe_reset_mem(ABE_CMEM, (C_GainsWRamp_ADDR+amic_gains_offset) << 2,
+ 2 << 2); /* reset current gains */
+ abe_reset_mem (ABE_SMEM, (S_GCurrent_ADDR+amic_gains_offset) << 3,
+ 6 << 3);
break;
- case BT_VX_UL_PORT: // ABE <-- BT (8/16kHz)
- abe_reset_mem(ABE_DMEM, D_BT_UL_FIFO_ADDR, D_BT_UL_FIFO_sizeof);
- abe_reset_mem(ABE_SMEM, S_BT_UL_ADDR << 3, S_BT_UL_sizeof << 3);
- abe_reset_mem(ABE_SMEM, S_BT_UL_ADDR << 3, S_BT_UL_sizeof << 3);
- abe_reset_mem(ABE_SMEM, S_BT_UL_8_48_HP_data_ADDR << 3,
- S_BT_UL_8_48_HP_data_sizeof << 3);
- abe_reset_mem(ABE_SMEM, S_BT_UL_8_48_LP_data_ADDR << 3,
- S_BT_UL_8_48_LP_data_sizeof << 3);
- abe_reset_mem(ABE_SMEM, S_BT_UL_16_48_HP_data_ADDR << 3,
- S_BT_UL_16_48_HP_data_sizeof << 3);
- abe_reset_mem(ABE_SMEM, S_BT_UL_16_48_LP_data_ADDR << 3,
- S_BT_UL_16_48_LP_data_sizeof << 3);
+ case BT_VX_UL_PORT:
+ abe_reset_mem (ABE_DMEM, D_BT_UL_FIFO_ADDR,
+ D_BT_UL_FIFO_sizeof);
+ abe_reset_mem (ABE_SMEM, S_BT_UL_ADDR << 3,
+ S_BT_UL_sizeof << 3);
+ abe_reset_mem (ABE_SMEM, S_BT_UL_ADDR << 3,
+ S_BT_UL_sizeof << 3);
+ abe_reset_mem (ABE_SMEM, S_BT_UL_8_48_HP_data_ADDR << 3,
+ S_BT_UL_8_48_HP_data_sizeof << 3);
+ abe_reset_mem (ABE_SMEM, S_BT_UL_8_48_LP_data_ADDR << 3,
+ S_BT_UL_8_48_LP_data_sizeof << 3);
+ abe_reset_mem (ABE_SMEM, S_BT_UL_16_48_HP_data_ADDR << 3,
+ S_BT_UL_16_48_HP_data_sizeof << 3);
+ abe_reset_mem (ABE_SMEM, S_BT_UL_16_48_LP_data_ADDR << 3,
+ S_BT_UL_16_48_LP_data_sizeof << 3);
break;
- case MM_UL_PORT:
- abe_reset_mem(ABE_DMEM, D_MM_UL_FIFO_ADDR, D_MM_UL_FIFO_sizeof);
- abe_reset_mem(ABE_SMEM, S_MM_UL_ADDR << 3, S_MM_UL_sizeof << 3);
- abe_reset_mem(ABE_SMEM, S_MM_UL2_ADDR << 3, D_MM_UL2_FIFO_sizeof << 3);
+ case MM_UL_PORT:
+ abe_reset_mem (ABE_DMEM, D_MM_UL_FIFO_ADDR,
+ D_MM_UL_FIFO_sizeof);
+ abe_reset_mem (ABE_SMEM, S_MM_UL_ADDR << 3,
+ S_MM_UL_sizeof << 3);
+ abe_reset_mem (ABE_SMEM, S_MM_UL2_ADDR << 3,
+ D_MM_UL2_FIFO_sizeof << 3);
break;
- case MM_UL2_PORT:
- abe_reset_mem(ABE_DMEM, D_MM_UL2_FIFO_ADDR, D_MM_UL2_FIFO_sizeof);
- abe_reset_mem(ABE_SMEM, S_MM_UL2_ADDR << 3, S_MM_UL2_sizeof << 3);
+ case MM_UL2_PORT:
+ abe_reset_mem (ABE_DMEM, D_MM_UL2_FIFO_ADDR,
+ D_MM_UL2_FIFO_sizeof);
+ abe_reset_mem (ABE_SMEM, S_MM_UL2_ADDR << 3,
+ S_MM_UL2_sizeof << 3);
break;
- case VX_UL_PORT:
- abe_reset_mem(ABE_DMEM, D_VX_UL_FIFO_ADDR, D_VX_UL_FIFO_sizeof);
- abe_reset_mem(ABE_SMEM, S_VX_UL_ADDR << 3, S_VX_UL_sizeof << 3);
- abe_reset_mem(ABE_SMEM, S_VX_UL_48_8_HP_data_ADDR << 3, S_VX_UL_48_8_HP_data_sizeof << 3);
- abe_reset_mem(ABE_SMEM, S_VX_UL_48_8_LP_data_ADDR << 3, S_VX_UL_48_8_LP_data_sizeof << 3);
- abe_reset_mem(ABE_SMEM, S_VX_UL_48_16_HP_data_ADDR << 3, S_VX_UL_48_16_HP_data_sizeof << 3);
- abe_reset_mem(ABE_SMEM, S_VX_UL_48_16_LP_data_ADDR << 3, S_VX_UL_48_16_LP_data_sizeof << 3);
+ case VX_UL_PORT:
+ abe_reset_mem (ABE_DMEM, D_VX_UL_FIFO_ADDR,
+ D_VX_UL_FIFO_sizeof);
+ abe_reset_mem (ABE_SMEM, S_VX_UL_ADDR << 3,
+ S_VX_UL_sizeof << 3);
+ abe_reset_mem (ABE_SMEM, S_VX_UL_48_8_HP_data_ADDR << 3,
+ S_VX_UL_48_8_HP_data_sizeof << 3);
+ abe_reset_mem (ABE_SMEM, S_VX_UL_48_8_LP_data_ADDR << 3,
+ S_VX_UL_48_8_LP_data_sizeof << 3);
+ abe_reset_mem (ABE_SMEM, S_VX_UL_48_16_HP_data_ADDR << 3,
+ S_VX_UL_48_16_HP_data_sizeof << 3);
+ abe_reset_mem (ABE_SMEM, S_VX_UL_48_16_LP_data_ADDR << 3,
+ S_VX_UL_48_16_LP_data_sizeof << 3);
break;
- case MM_DL_PORT:
- abe_reset_mem(ABE_DMEM, D_MM_DL_FIFO_ADDR, D_MM_DL_FIFO_sizeof);
- abe_reset_mem(ABE_SMEM, S_MM_DL_ADDR << 3, S_MM_DL_sizeof << 3);
+ case MM_DL_PORT:
+ abe_reset_mem (ABE_DMEM, D_MM_DL_FIFO_ADDR,
+ D_MM_DL_FIFO_sizeof);
+ abe_reset_mem (ABE_SMEM, S_MM_DL_ADDR << 3,
+ S_MM_DL_sizeof << 3);
break;
- case VX_DL_PORT:
- abe_reset_mem(ABE_DMEM, D_VX_DL_FIFO_ADDR, D_VX_DL_FIFO_sizeof);
- abe_reset_mem(ABE_SMEM, S_VX_DL_ADDR << 3, S_VX_DL_sizeof << 3);
- abe_reset_mem (ABE_SMEM, S_VX_DL_8_48_HP_data_ADDR << 3, S_VX_DL_8_48_HP_data_sizeof << 3);
- abe_reset_mem(ABE_SMEM, S_VX_DL_8_48_LP_data_ADDR << 3, S_VX_DL_8_48_LP_data_sizeof << 3);
- abe_reset_mem(ABE_SMEM, S_VX_DL_16_48_HP_data_ADDR << 3, S_VX_DL_16_48_HP_data_sizeof << 3);
- abe_reset_mem(ABE_SMEM, S_VX_DL_16_48_LP_data_ADDR << 3, S_VX_DL_16_48_LP_data_sizeof << 3);
+ case VX_DL_PORT:
+ abe_reset_mem (ABE_DMEM, D_VX_DL_FIFO_ADDR,
+ D_VX_DL_FIFO_sizeof);
+ abe_reset_mem (ABE_SMEM, S_VX_DL_ADDR << 3,
+ S_VX_DL_sizeof << 3);
+ abe_reset_mem (ABE_SMEM, S_VX_DL_8_48_HP_data_ADDR << 3,
+ S_VX_DL_8_48_HP_data_sizeof << 3);
+ abe_reset_mem (ABE_SMEM, S_VX_DL_8_48_LP_data_ADDR << 3,
+ S_VX_DL_8_48_LP_data_sizeof << 3);
+ abe_reset_mem (ABE_SMEM, S_VX_DL_16_48_HP_data_ADDR << 3,
+ S_VX_DL_16_48_HP_data_sizeof << 3);
+ abe_reset_mem (ABE_SMEM, S_VX_DL_16_48_LP_data_ADDR << 3,
+ S_VX_DL_16_48_LP_data_sizeof << 3);
break;
- case TONES_DL_PORT:
- abe_reset_mem(ABE_DMEM, D_TONES_DL_FIFO_ADDR, D_TONES_DL_FIFO_sizeof);
- abe_reset_mem(ABE_SMEM, S_Tones_ADDR << 3, S_Tones_sizeof << 3);
+ case TONES_DL_PORT:
+ abe_reset_mem (ABE_DMEM, D_TONES_DL_FIFO_ADDR,
+ D_TONES_DL_FIFO_sizeof);
+ abe_reset_mem (ABE_SMEM, S_Tones_ADDR << 3,
+ S_Tones_sizeof << 3);
break;
- case VIB_DL_PORT:
- abe_reset_mem(ABE_DMEM, D_VIB_DL_FIFO_ADDR, D_VIB_DL_FIFO_sizeof);
- abe_reset_mem(ABE_SMEM, S_VIBRA_ADDR << 3, S_VIBRA_sizeof << 3);
+ case VIB_DL_PORT:
+ abe_reset_mem (ABE_DMEM, D_VIB_DL_FIFO_ADDR,
+ D_VIB_DL_FIFO_sizeof);
+ abe_reset_mem (ABE_SMEM, S_VIBRA_ADDR << 3,
+ S_VIBRA_sizeof << 3);
break;
- case BT_VX_DL_PORT:// ABE --> BT (8/16kHz)
- abe_reset_mem(ABE_DMEM, D_BT_DL_FIFO_ADDR, D_BT_DL_FIFO_sizeof);
- abe_reset_mem(ABE_SMEM, S_BT_DL_ADDR << 3, S_BT_DL_sizeof << 3);
- abe_reset_mem(ABE_SMEM, S_BT_DL_48_8_HP_data_ADDR << 3, S_BT_DL_48_8_HP_data_sizeof << 3);
- abe_reset_mem(ABE_SMEM, S_BT_DL_48_8_LP_data_ADDR << 3, S_BT_DL_48_8_LP_data_sizeof << 3);
- abe_reset_mem(ABE_SMEM, S_BT_DL_48_16_HP_data_ADDR << 3, S_BT_DL_48_16_HP_data_sizeof << 3);
- abe_reset_mem(ABE_SMEM, S_BT_DL_48_16_LP_data_ADDR << 3, S_BT_DL_48_16_LP_data_sizeof << 3);
+ case BT_VX_DL_PORT:
+ abe_reset_mem (ABE_DMEM, D_BT_DL_FIFO_ADDR,
+ D_BT_DL_FIFO_sizeof);
+ abe_reset_mem (ABE_SMEM, S_BT_DL_ADDR << 3,
+ S_BT_DL_sizeof << 3);
+ abe_reset_mem (ABE_SMEM, S_BT_DL_48_8_HP_data_ADDR << 3,
+ S_BT_DL_48_8_HP_data_sizeof << 3);
+ abe_reset_mem (ABE_SMEM, S_BT_DL_48_8_LP_data_ADDR << 3,
+ S_BT_DL_48_8_LP_data_sizeof << 3);
+ abe_reset_mem (ABE_SMEM, S_BT_DL_48_16_HP_data_ADDR << 3,
+ S_BT_DL_48_16_HP_data_sizeof << 3);
+ abe_reset_mem (ABE_SMEM, S_BT_DL_48_16_LP_data_ADDR << 3,
+ S_BT_DL_48_16_LP_data_sizeof << 3);
break;
- case PDM_DL_PORT:
- abe_reset_mem(ABE_DMEM, D_McPDM_DL_FIFO_ADDR, D_McPDM_DL_FIFO_sizeof);
- abe_reset_mem(ABE_SMEM, S_DMIC2_96_48_data_ADDR << 3, S_DMIC1_96_48_data_sizeof << 3);
- abe_reset_mem(ABE_SMEM, S_DL2_M_LR_EQ_data_ADDR << 3, S_DL2_M_LR_EQ_data_sizeof << 3);
- abe_reset_mem(ABE_SMEM, S_DL1_M_EQ_data_ADDR << 3, S_DL1_M_EQ_data_sizeof << 3);
- abe_reset_mem(ABE_SMEM, S_EARP_48_96_LP_data_ADDR << 3, S_EARP_48_96_LP_data_sizeof << 3);
- abe_reset_mem(ABE_SMEM, S_IHF_48_96_LP_data_ADDR << 3, S_IHF_48_96_LP_data_sizeof << 3);
- abe_reset_mem(ABE_SMEM, S_APS_DL1_EQ_data_ADDR << 3, S_APS_DL1_EQ_data_sizeof << 3);
- abe_reset_mem(ABE_SMEM, S_APS_DL2_EQ_data_ADDR << 3, S_APS_DL2_EQ_data_sizeof << 3);
- break;
- case MM_EXT_OUT_PORT:
- abe_reset_mem(ABE_DMEM, D_MM_EXT_OUT_FIFO_ADDR, D_MM_EXT_OUT_FIFO_sizeof);
+ case PDM_DL_PORT:
+ abe_reset_mem (ABE_DMEM, D_McPDM_DL_FIFO_ADDR,
+ D_McPDM_DL_FIFO_sizeof);
+ abe_reset_mem (ABE_SMEM, S_DMIC2_96_48_data_ADDR << 3,
+ S_DMIC1_96_48_data_sizeof << 3);
+ abe_reset_mem (ABE_SMEM, S_DL2_M_LR_EQ_data_ADDR << 3,
+ S_DL2_M_LR_EQ_data_sizeof << 3);
+ abe_reset_mem (ABE_SMEM, S_DL1_M_EQ_data_ADDR << 3,
+ S_DL1_M_EQ_data_sizeof << 3);
+ abe_reset_mem (ABE_SMEM, S_EARP_48_96_LP_data_ADDR << 3,
+ S_EARP_48_96_LP_data_sizeof << 3);
+ abe_reset_mem (ABE_SMEM, S_IHF_48_96_LP_data_ADDR << 3,
+ S_IHF_48_96_LP_data_sizeof << 3);
+ abe_reset_mem (ABE_SMEM, S_APS_DL1_EQ_data_ADDR << 3,
+ S_APS_DL1_EQ_data_sizeof << 3);
+ abe_reset_mem (ABE_SMEM, S_APS_DL2_EQ_data_ADDR << 3,
+ S_APS_DL2_EQ_data_sizeof << 3);
break;
- case MM_EXT_IN_PORT:
- abe_reset_mem(ABE_DMEM, D_MM_EXT_IN_FIFO_ADDR, D_MM_EXT_IN_FIFO_sizeof);
+ case MM_EXT_OUT_PORT:
+ abe_reset_mem (ABE_DMEM, D_MM_EXT_OUT_FIFO_ADDR,
+ D_MM_EXT_OUT_FIFO_sizeof);
break;
- default:
+ case MM_EXT_IN_PORT:
+ abe_reset_mem (ABE_DMEM, D_MM_EXT_IN_FIFO_ADDR,
+ D_MM_EXT_IN_FIFO_sizeof);
break;
}
+
+}
+
+/**
+ * abe_init_asrc_vx_dl
+ *
+ * Initialize the following ASRC VX_DL parameters :
+ * 1. DriftSign = D_AsrcVars[1] = 1 or -1
+ * 2. Subblock = D_AsrcVars[2] = 0
+ * 3. DeltaAlpha = D_AsrcVars[3] = (round(nb_phases * drift[ppm] * 10^-6 * 2^20)) << 2
+ * 4. MinusDeltaAlpha = D_AsrcVars[4] = (-round(nb_phases * drift[ppm] * 10^-6 * 2^20)) << 2
+ * 5. OneMinusEpsilon = D_AsrcVars[5] = 1 - DeltaAlpha/2
+ * 6. AlphaCurrent = 0x000020 (CMEM), initial value of Alpha parameter
+ * 7. BetaCurrent = 0x3fffe0 (CMEM), initial value of Beta parameter
+ * AlphaCurrent + BetaCurrent = 1 (=0x400000 in CMEM = 2^20 << 2)
+ * 8. drift_ASRC = 0 & drift_io = 0
+ * 9. SMEM for ASRC_DL_VX_Coefs pointer
+ * 10. CMEM for ASRC_DL_VX_Coefs pointer
+ * ASRC_DL_VX_Coefs = C_CoefASRC16_VX_ADDR/C_CoefASRC16_VX_sizeof/0/1/
+ * C_CoefASRC15_VX_ADDR/C_CoefASRC15_VX_sizeof/0/1
+ * 11. SMEM for XinASRC_DL_VX pointer
+ * 12. CMEM for XinASRC_DL_VX pointer
+ * XinASRC_DL_VX = S_XinASRC_DL_VX_ADDR/S_XinASRC_DL_VX_sizeof/0/1/0/0/0/0
+ * 13. SMEM for IO_VX_DL_ASRC pointer
+ * 14. CMEM for IO_VX_DL_ASRC pointer
+ * IO_VX_DL_ASRC = S_XinASRC_DL_VX_ADDR/S_XinASRC_DL_VX_sizeof/ASRC_DL_VX_FIR_L+ASRC_margin/1/0/0/0/0
+ */
+void abe_init_asrc_vx_dl ( s32 dppm)
+{
+ s32 el[45];
+ s32 temp0, temp1, adppm, dtemp, mem_tag, mem_addr;
+ u32 i = 0;
+
+ temp0 = 0;
+ temp1 = 1;
+
+ /* 1. DriftSign = D_AsrcVars[1] = 1 */
+ mem_tag = ABE_DMEM;
+ mem_addr = D_AsrcVars_DL_VX_ADDR + 1*sizeof(s32);
+ el[i] = (mem_tag << 16) + mem_addr;
+ if (dppm >= 0) {
+ el[i+1] = 1;
+ adppm = dppm;
+ } else {
+ el[i+1] = -1;
+ adppm = (-1*dppm);
+ }
+ /* dummy field */
+ el[i+2] = temp0;
+ i = i + 3;
+
+ dtemp = (adppm << 4) + adppm - ((adppm * 3481L)/15625L);
+
+ /* 2. Subblock = D_AsrcVars[2] = 0 */
+ mem_tag = ABE_DMEM;
+ mem_addr = D_AsrcVars_DL_VX_ADDR + 2*sizeof(s32);
+ el[i] = (mem_tag << 16) + mem_addr;
+ el[i+1] = temp0;
+ /* dummy field */
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 3. DeltaAlpha = D_AsrcVars[3] = 0 */
+ mem_tag = ABE_DMEM;
+ mem_addr = D_AsrcVars_DL_VX_ADDR + 3*sizeof(s32);
+ el[i] = (mem_tag << 16) + mem_addr;
+ if (dppm == 0) {
+ el[i+1] = 0;
+ } else {
+ el[i+1] = dtemp<<2;
+ }
+ /* dummy field */
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 4. MinusDeltaAlpha = D_AsrcVars[4] = 0 */
+ mem_tag = ABE_DMEM;
+ mem_addr = D_AsrcVars_DL_VX_ADDR + 4*sizeof(s32);
+ el[i] = (mem_tag << 16) + mem_addr;
+ if (dppm == 0) {
+ el[i+1] = 0;
+ } else {
+ el[i+1] = (-dtemp)<<2;
+ }
+ /* dummy field */
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /*5. OneMinusEpsilon = D_AsrcVars[5] = 0x00400000 */
+ mem_tag = ABE_DMEM;
+ mem_addr = D_AsrcVars_DL_VX_ADDR + 5*sizeof(s32);
+ el[i] = (mem_tag << 16) + mem_addr;
+ if (dppm == 0) {
+ el[i+1] = 0x00400000;
+ } else {
+ el[i+1] = (0x00100000-(dtemp/2))<<2;
+ }
+ /* dummy field */
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 6. AlphaCurrent = 0x000020 (CMEM) */
+ mem_tag = ABE_CMEM;
+ mem_addr = C_AlphaCurrent_DL_VX_ADDR;
+ el[i] = (mem_tag << 16) + (mem_addr << 2);
+ el[i+1] = 0x00000020;
+ /* dummy field */
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 7. BetaCurrent = 0x3fffe0 (CMEM) */
+ mem_tag = ABE_CMEM;
+ mem_addr = C_BetaCurrent_DL_VX_ADDR;
+ el[i] = (mem_tag << 16) + (mem_addr << 2);
+ el[i+1] = 0x003fffe0;
+ /* dummy field */
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 8. drift_ASRC = 0 & drift_io = 0 */
+ mem_tag = ABE_DMEM;
+ mem_addr = D_IOdescr_ADDR + VX_DL_PORT*sizeof(ABE_SIODescriptor)
+ + drift_asrc_;
+ el[i] = (mem_tag << 16) + mem_addr;
+ el[i+1] = temp0;
+ /* dummy field */
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 9. SMEM for ASRC_DL_VX_Coefs pointer */
+ /* ASRC_DL_VX_Coefs = C_CoefASRC16_VX_ADDR/C_CoefASRC16_VX_sizeof/0
+ /1/C_CoefASRC15_VX_ADDR/C_CoefASRC15_VX_sizeof/0/1 */
+ mem_tag = ABE_SMEM;
+ mem_addr = ASRC_DL_VX_Coefs_labelID;
+ el[i] = (mem_tag << 16) + (mem_addr << 2);
+
+ el[i+1] = C_CoefASRC16_VX_ADDR;
+ el[i+1] = (el[i+1]<<8) + C_CoefASRC16_VX_sizeof;
+
+ el[i+2] = C_CoefASRC15_VX_ADDR;
+ el[i+2] = (el[i+2]<<8) + C_CoefASRC15_VX_sizeof;
+ i = i + 3;
+
+
+ /* 10. CMEM for ASRC_DL_VX_Coefs pointer */
+ /* ASRC_DL_VX_Coefs = C_CoefASRC16_VX_ADDR/C_CoefASRC16_VX_sizeof/0/
+ 1/C_CoefASRC15_VX_ADDR/C_CoefASRC15_VX_sizeof/0/1 */
+ mem_tag = ABE_CMEM;
+ mem_addr = ASRC_DL_VX_Coefs_labelID;
+ el[i] = (mem_tag << 16) + (mem_addr << 2);
+
+ /* el[i+1] = iam1<<16 + inc1<<12 + iam2<<4 + inc2 */
+ el[i+1] = (temp0<<16) + (temp1<<12) + (temp0<<4) + temp1;
+
+ /* dummy field */
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 11. SMEM for XinASRC_DL_VX pointer */
+ /* XinASRC_DL_VX = S_XinASRC_DL_VX_ADDR/S_XinASRC_DL_VX_sizeof/0/1/0/0/0/0 */
+ mem_tag = ABE_SMEM;
+ mem_addr = XinASRC_DL_VX_labelID;
+ el[i] = (mem_tag << 16) + (mem_addr << 2);
+
+ el[i+1] = S_XinASRC_DL_VX_ADDR;
+ el[i+1] = (el[i+1]<<8) + S_XinASRC_DL_VX_sizeof;
+
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 12. CMEM for XinASRC_DL_VX pointer */
+ /* XinASRC_DL_VX = S_XinASRC_DL_VX_ADDR/S_XinASRC_DL_VX_sizeof/0/1/0/0/0/0 */
+ mem_tag = ABE_CMEM;
+ mem_addr = XinASRC_DL_VX_labelID;
+ el[i] = (mem_tag << 16) + (mem_addr << 2);
+
+ /* el[i+1] = iam1<<16 + inc1<<12 + iam2<<4 + inc2 */
+ el[i+1] = (temp0<<16) + (temp1<<12) + (temp0<<4) + temp0;
+
+ /* dummy field */
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 13. SMEM for IO_VX_DL_ASRC pointer */
+ /* IO_VX_DL_ASRC = S_XinASRC_DL_VX_ADDR/S_XinASRC_DL_VX_sizeof/
+ ASRC_DL_VX_FIR_L+ASRC_margin/1/0/0/0/0 */
+ mem_tag = ABE_SMEM;
+ mem_addr = IO_VX_DL_ASRC_labelID;
+ el[i] = (mem_tag << 16) + (mem_addr << 2);
+
+ el[i+1] = S_XinASRC_DL_VX_ADDR;
+ el[i+1] = (el[i+1]<<8) + S_XinASRC_DL_VX_sizeof;
+
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 14. CMEM for IO_VX_DL_ASRC pointer */
+ /* IO_VX_DL_ASRC = S_XinASRC_DL_VX_ADDR/S_XinASRC_DL_VX_sizeof/
+ ASRC_DL_VX_FIR_L+ASRC_margin/1/0/0/0/0 */
+ mem_tag = ABE_CMEM;
+ mem_addr = IO_VX_DL_ASRC_labelID;
+ el[i] = (mem_tag << 16) + (mem_addr << 2);
+
+ /* el[i+1] = iam1<<16 + inc1<<12 + iam2<<4 + inc2 */
+ el[i+1] = ((ASRC_DL_VX_FIR_L+ASRC_margin)<<16) + (temp1<<12)
+ + (temp0<<4) + temp0;
+
+ /* dummy field */
+ el[i+2] = temp0;
+
+
+ abe_write_fifo (ABE_DMEM, D_FwMemInitDescr_ADDR,(u32 *) &el[0], 42);
+
+}
+
+/**
+ * abe_init_asrc_vx_ul
+ *
+ * Initialize the following ASRC VX_UL parameters :
+ * 1. DriftSign = D_AsrcVars[1] = 1 or -1
+ * 2. Subblock = D_AsrcVars[2] = 0
+ * 3. DeltaAlpha = D_AsrcVars[3] = (round(nb_phases * drift[ppm] * 10^-6 * 2^20)) << 2
+ * 4. MinusDeltaAlpha = D_AsrcVars[4] = (-round(nb_phases * drift[ppm] * 10^-6 * 2^20)) << 2
+ * 5. OneMinusEpsilon = D_AsrcVars[5] = 1 - DeltaAlpha/2
+ * 6. AlphaCurrent = 0x000020 (CMEM), initial value of Alpha parameter
+ * 7. BetaCurrent = 0x3fffe0 (CMEM), initial value of Beta parameter
+ * AlphaCurrent + BetaCurrent = 1 (=0x400000 in CMEM = 2^20 << 2)
+ * 8. drift_ASRC = 0 & drift_io = 0
+ * 9. SMEM for ASRC_UL_VX_Coefs pointer
+ * 10. CMEM for ASRC_UL_VX_Coefs pointer
+ * ASRC_UL_VX_Coefs = C_CoefASRC16_VX_ADDR/C_CoefASRC16_VX_sizeof
+ * /0/1/C_CoefASRC15_VX_ADDR/C_CoefASRC15_VX_sizeof/0/1
+ * 11. SMEM for XinASRC_UL_VX pointer
+ * 12. CMEM for XinASRC_UL_VX pointer
+ * XinASRC_UL_VX = S_XinASRC_UL_VX_ADDR/S_XinASRC_UL_VX_sizeof/0/1/0/0/0/0
+ * 13. SMEM for UL_48_8_DEC pointer
+ * 14. CMEM for UL_48_8_DEC pointer
+ * UL_48_8_DEC = S_XinASRC_UL_VX_ADDR/S_XinASRC_UL_VX_sizeof/
+ * ASRC_UL_VX_FIR_L+ASRC_margin/1/0/0/0/0
+ * 15. SMEM for UL_48_16_DEC pointer
+ * 16. CMEM for UL_48_16_DEC pointer
+ * UL_48_16_DEC = S_XinASRC_UL_VX_ADDR/S_XinASRC_UL_VX_sizeof/
+ * ASRC_UL_VX_FIR_L+ASRC_margin/1/0/0/0/0
+ */
+void abe_init_asrc_vx_ul ( s32 dppm)
+{
+ s32 el[51];
+ s32 temp0, temp1, adppm, dtemp, mem_tag, mem_addr;
+ u32 i = 0;
+
+ temp0 = 0;
+ temp1 = 1;
+
+
+ /* 1. DriftSign = D_AsrcVars[1] = 1 */
+ mem_tag = ABE_DMEM;
+ mem_addr = D_AsrcVars_UL_VX_ADDR + 1*sizeof(s32);
+ el[i] = (mem_tag << 16) + mem_addr;
+ if (dppm >= 0) {
+ el[i+1] = 1;
+ adppm = dppm;
+ } else {
+ el[i+1] = -1;
+ adppm = (-1*dppm);
+ }
+ /* dummy field */
+ el[i+2] = temp0;
+ i = i + 3;
+
+ dtemp = (adppm << 4) + adppm - ((adppm * 3481L)/15625L);
+
+ /* 2. Subblock = D_AsrcVars[2] = 0 */
+ mem_tag = ABE_DMEM;
+ mem_addr = D_AsrcVars_UL_VX_ADDR + 2*sizeof(s32);
+ el[i] = (mem_tag << 16) + mem_addr;
+ el[i+1] = temp0;
+ /* dummy field */
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 3. DeltaAlpha = D_AsrcVars[3] = 0 */
+ mem_tag = ABE_DMEM;
+ mem_addr = D_AsrcVars_UL_VX_ADDR + 3*sizeof(s32);
+ el[i] = (mem_tag << 16) + mem_addr;
+ if (dppm == 0) {
+ el[i+1] = 0;
+ } else {
+ el[i+1] = dtemp<<2;
+ }
+ /* dummy field */
+ el[i+2] = temp0;
+ i = i + 3;
+
+ /* 4. MinusDeltaAlpha = D_AsrcVars[4] = 0 */
+ mem_tag = ABE_DMEM;
+ mem_addr = D_AsrcVars_UL_VX_ADDR + 4*sizeof(s32);
+ el[i] = (mem_tag << 16) + mem_addr;
+ if (dppm == 0) {
+ el[i+1] = 0;
+ } else {
+ el[i+1] = (-dtemp)<<2;
+ }
+ /* dummy field */
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 5. OneMinusEpsilon = D_AsrcVars[5] = 0x00400000 */
+ mem_tag = ABE_DMEM;
+ mem_addr = D_AsrcVars_UL_VX_ADDR + 5*sizeof(s32);
+ el[i] = (mem_tag << 16) + mem_addr;
+ if (dppm == 0) {
+ el[i+1] = 0x00400000;
+ } else {
+ el[i+1] = (0x00100000-(dtemp/2))<<2;
+ }
+ /* dummy field */
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 6. AlphaCurrent = 0x000020 (CMEM) */
+ mem_tag = ABE_CMEM;
+ mem_addr = C_AlphaCurrent_UL_VX_ADDR;
+ el[i] = (mem_tag << 16) + (mem_addr << 2);
+ el[i+1] = 0x00000020;
+ /* dummy field */
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 7. BetaCurrent = 0x3fffe0 (CMEM) */
+ mem_tag = ABE_CMEM;
+ mem_addr = C_BetaCurrent_UL_VX_ADDR;
+ el[i] = (mem_tag << 16) + (mem_addr << 2);
+ el[i+1] = 0x003fffe0;
+ /* dummy field */
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 8. drift_ASRC = 0 & drift_io = 0 */
+ mem_tag = ABE_DMEM;
+ mem_addr = D_IOdescr_ADDR + VX_UL_PORT*sizeof(ABE_SIODescriptor)
+ + drift_asrc_;
+ el[i] = (mem_tag << 16) + mem_addr;
+ el[i+1] = temp0;
+ /* dummy field */
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 9. SMEM for ASRC_UL_VX_Coefs pointer */
+ /* ASRC_UL_VX_Coefs = C_CoefASRC16_VX_ADDR/C_CoefASRC16_VX_sizeof/0/1/
+ C_CoefASRC15_VX_ADDR/C_CoefASRC15_VX_sizeof/0/1 */
+ mem_tag = ABE_SMEM;
+ mem_addr = ASRC_UL_VX_Coefs_labelID;
+ el[i] = (mem_tag << 16) + (mem_addr << 2);
+
+ el[i+1] = C_CoefASRC16_VX_ADDR;
+ el[i+1] = (el[i+1]<<8) + C_CoefASRC16_VX_sizeof;
+
+ el[i+2] = C_CoefASRC15_VX_ADDR;
+ el[i+2] = (el[i+2]<<8) + C_CoefASRC15_VX_sizeof;
+ i = i + 3;
+
+
+ /* 10. CMEM for ASRC_UL_VX_Coefs pointer */
+ /* ASRC_UL_VX_Coefs = C_CoefASRC16_VX_ADDR/C_CoefASRC16_VX_sizeof/0/1/
+ C_CoefASRC15_VX_ADDR/C_CoefASRC15_VX_sizeof/0/1 */
+ mem_tag = ABE_CMEM;
+ mem_addr = ASRC_UL_VX_Coefs_labelID;
+ el[i] = (mem_tag << 16) + (mem_addr << 2);
+
+ /* el[i+1] = iam1<<16 + inc1<<12 + iam2<<4 + inc2 */
+ el[i+1] = (temp0<<16) + (temp1<<12) + (temp0<<4) + temp1;
+
+ /* dummy field */
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 11. SMEM for XinASRC_UL_VX pointer */
+ /* XinASRC_UL_VX = S_XinASRC_UL_VX_ADDR/S_XinASRC_UL_VX_sizeof/0/1/0/0/0/0 */
+ mem_tag = ABE_SMEM;
+ mem_addr = XinASRC_UL_VX_labelID;
+ el[i] = (mem_tag << 16) + (mem_addr << 2);
+
+ el[i+1] = S_XinASRC_UL_VX_ADDR;
+ el[i+1] = (el[i+1]<<8) + S_XinASRC_UL_VX_sizeof;
+
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 12. CMEM for XinASRC_UL_VX pointer */
+ /* XinASRC_UL_VX = S_XinASRC_UL_VX_ADDR/S_XinASRC_UL_VX_sizeof/0/1/0/0/0/0 */
+ mem_tag = ABE_CMEM;
+ mem_addr = XinASRC_UL_VX_labelID;
+ el[i] = (mem_tag << 16) + (mem_addr << 2);
+
+ /* el[i+1] = iam1<<16 + inc1<<12 + iam2<<4 + inc2 */
+ el[i+1] = (temp0<<16) + (temp1<<12) + (temp0<<4) + temp0;
+
+ /* dummy field */
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 13. SMEM for UL_48_8_DEC pointer */
+ /* UL_48_8_DEC = S_XinASRC_UL_VX_ADDR/S_XinASRC_UL_VX_sizeof/
+ ASRC_UL_VX_FIR_L+ASRC_margin/1/0/0/0/0 */
+ mem_tag = ABE_SMEM;
+ mem_addr = UL_48_8_DEC_labelID;
+ el[i] = (mem_tag << 16) + (mem_addr << 2);
+
+ el[i+1] = S_XinASRC_UL_VX_ADDR;
+ el[i+1] = (el[i+1]<<8) + S_XinASRC_UL_VX_sizeof;
+
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 14. CMEM for UL_48_8_DEC pointer */
+ /* UL_48_8_DEC = S_XinASRC_UL_VX_ADDR/S_XinASRC_UL_VX_sizeof/
+ ASRC_UL_VX_FIR_L+ASRC_margin/1/0/0/0/0 */
+ mem_tag = ABE_CMEM;
+ mem_addr = UL_48_8_DEC_labelID;
+ el[i] = (mem_tag << 16) + (mem_addr << 2);
+
+ /* el[i+1] = iam1<<16 + inc1<<12 + iam2<<4 + inc2 */
+ el[i+1] = ((ASRC_UL_VX_FIR_L+ASRC_margin)<<16) + (temp1<<12)
+ + (temp0<<4) + temp0;
+
+ /* dummy field */
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 15. SMEM for UL_48_16_DEC pointer */
+ /* UL_48_16_DEC = S_XinASRC_UL_VX_ADDR/S_XinASRC_UL_VX_sizeof/
+ ASRC_UL_VX_FIR_L+ASRC_margin/1/0/0/0/0 */
+ mem_tag = ABE_SMEM;
+ mem_addr = UL_48_16_DEC_labelID;
+ el[i] = (mem_tag << 16) + (mem_addr << 2);
+
+ el[i+1] = S_XinASRC_UL_VX_ADDR;
+ el[i+1] = (el[i+1]<<8) + S_XinASRC_UL_VX_sizeof;
+
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 16. CMEM for UL_48_16_DEC pointer */
+ /* UL_48_16_DEC = S_XinASRC_UL_VX_ADDR/S_XinASRC_UL_VX_sizeof/
+ ASRC_UL_VX_FIR_L+ASRC_margin/1/0/0/0/0 */
+ mem_tag = ABE_CMEM;
+ mem_addr = UL_48_16_DEC_labelID;
+ el[i] = (mem_tag << 16) + (mem_addr << 2);
+
+ /* el[i+1] = iam1<<16 + inc1<<12 + iam2<<4 + inc2 */
+ el[i+1] = ((ASRC_UL_VX_FIR_L+ASRC_margin)<<16) + (temp1<<12)
+ + (temp0<<4) + temp0;
+
+ /* dummy field */
+ el[i+2] = temp0;
+
+
+ abe_write_fifo (ABE_DMEM, D_FwMemInitDescr_ADDR, (u32 *)&el[0], 48);
+
+}
+
+/**
+ * abe_init_asrc_mm_dl
+ *
+ * Initialize the following ASRC MM_DL parameters :
+ * 1. DriftSign = D_AsrcVars[1] = 1 or -1
+ * 2. Subblock = D_AsrcVars[2] = 0
+ * 3. DeltaAlpha = D_AsrcVars[3] = (round(nb_phases * drift[ppm] * 10^-6 * 2^20)) << 2
+ * 4. MinusDeltaAlpha = D_AsrcVars[4] = (-round(nb_phases * drift[ppm] * 10^-6 * 2^20)) << 2
+ * 5. OneMinusEpsilon = D_AsrcVars[5] = 1 - DeltaAlpha/2
+ * 6. AlphaCurrent = 0x000020 (CMEM), initial value of Alpha parameter
+ * 7. BetaCurrent = 0x3fffe0 (CMEM), initial value of Beta parameter
+ * AlphaCurrent + BetaCurrent = 1 (=0x400000 in CMEM = 2^20 << 2)
+ * 8. drift_ASRC = 0 & drift_io = 0
+ * 9. SMEM for ASRC_DL_MM_Coefs pointer
+ * 10. CMEM for ASRC_DL_MM_Coefs pointer
+ * ASRC_DL_MM_Coefs = C_CoefASRC16_DL_MM_ADDR/C_CoefASRC16_DL_MM_sizeof/
+ * 0/1/C_CoefASRC15_DL_MM_ADDR/C_CoefASRC15_DL_MM_sizeof/0/1
+ * 11. SMEM for XinASRC_DL_MM pointer
+ * 12. CMEM for XinASRC_DL_MM pointer
+ * XinASRC_DL_MM = S_XinASRC_DL_MM_ADDR/S_XinASRC_DL_MM_sizeof/0/1/0/0/0/0
+ * 13. SMEM for IO_MM_DL_ASRC pointer
+ * 14. CMEM for IO_MM_DL_ASRC pointer
+ * IO_MM_DL_ASRC = S_XinASRC_DL_MM_ADDR/S_XinASRC_DL_MM_sizeof/
+ * ASRC_DL_MM_FIR_L+ASRC_margin+ASRC_N_48k/1/0/0/0/0
+ */
+void abe_init_asrc_mm_dl ( s32 dppm)
+{
+ s32 el[45];
+ s32 temp0, temp1, adppm, dtemp, mem_tag, mem_addr;
+ u32 i = 0;
+
+ temp0 = 0;
+ temp1 = 1;
+
+ /* 1. DriftSign = D_AsrcVars[1] = 1 */
+ mem_tag = ABE_DMEM;
+ mem_addr = D_AsrcVars_DL_MM_ADDR + 1*sizeof(s32);
+ el[i] = (mem_tag << 16) + mem_addr;
+ if (dppm >= 0) {
+ el[i+1] = 1;
+ adppm = dppm;
+ } else {
+ el[i+1] = -1;
+ adppm = (-1*dppm);
+ }
+ /* dummy field */
+ el[i+2] = temp0;
+ i = i + 3;
+
+ dtemp = (adppm << 4) + adppm - ((adppm * 3481L)/15625L);
+
+ /* 2. Subblock = D_AsrcVars[2] = 0 */
+ mem_tag = ABE_DMEM;
+ mem_addr = D_AsrcVars_DL_MM_ADDR + 2*sizeof(s32);
+ el[i] = (mem_tag << 16) + mem_addr;
+ el[i+1] = temp0;
+ /* dummy field */
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 3. DeltaAlpha = D_AsrcVars[3] = 0 */
+ mem_tag = ABE_DMEM;
+ mem_addr = D_AsrcVars_DL_MM_ADDR + 3*sizeof(s32);
+ el[i] = (mem_tag << 16) + mem_addr;
+ if (dppm == 0) {
+ el[i+1] = 0;
+ } else {
+ el[i+1] = dtemp<<2;
+ }
+ /* dummy field */
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 4. MinusDeltaAlpha = D_AsrcVars[4] = 0 */
+ mem_tag = ABE_DMEM;
+ mem_addr = D_AsrcVars_DL_MM_ADDR + 4*sizeof(s32);
+ el[i] = (mem_tag << 16) + mem_addr;
+ if (dppm == 0) {
+ el[i+1] = 0;
+ } else {
+ el[i+1] = (-dtemp)<<2;
+ }
+ /* dummy field */
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 5. OneMinusEpsilon = D_AsrcVars[5] = 0x00400000 */
+ mem_tag = ABE_DMEM;
+ mem_addr = D_AsrcVars_DL_MM_ADDR + 5*sizeof(s32);
+ el[i] = (mem_tag << 16) + mem_addr;
+ if (dppm == 0) {
+ el[i+1] = 0x00400000;
+ } else {
+ el[i+1] = (0x00100000-(dtemp/2))<<2;
+ }
+ /* dummy field */
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 6. AlphaCurrent = 0x000020 (CMEM) */
+ mem_tag = ABE_CMEM;
+ mem_addr = C_AlphaCurrent_DL_MM_ADDR;
+ el[i] = (mem_tag << 16) + (mem_addr << 2);
+ el[i+1] = 0x00000020;
+ /* dummy field */
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 7. BetaCurrent = 0x3fffe0 (CMEM) */
+ mem_tag = ABE_CMEM;
+ mem_addr = C_BetaCurrent_DL_MM_ADDR;
+ el[i] = (mem_tag << 16) + (mem_addr << 2);
+ el[i+1] = 0x003fffe0;
+ /* dummy field */
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 8. drift_ASRC = 0 & drift_io = 0 */
+ mem_tag = ABE_DMEM;
+ mem_addr = D_IOdescr_ADDR + MM_DL_PORT*sizeof(ABE_SIODescriptor)
+ + drift_asrc_;
+ el[i] = (mem_tag << 16) + mem_addr;
+ el[i+1] = temp0;
+ /* dummy field */
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 9. SMEM for ASRC_DL_MM_Coefs pointer */
+ /* ASRC_DL_MM_Coefs = C_CoefASRC16_DL_MM_ADDR/C_CoefASRC16_DL_MM_sizeof
+ /0/1/C_CoefASRC15_DL_MM_ADDR/C_CoefASRC15_DL_MM_sizeof/0/1 */
+ mem_tag = ABE_SMEM;
+ mem_addr = ASRC_DL_MM_Coefs_labelID;
+ el[i] = (mem_tag << 16) + (mem_addr << 2);
+
+ el[i+1] = C_CoefASRC16_DL_MM_ADDR;
+ el[i+1] = (el[i+1]<<8) + C_CoefASRC16_DL_MM_sizeof;
+
+ el[i+2] = C_CoefASRC15_DL_MM_ADDR;
+ el[i+2] = (el[i+2]<<8) + C_CoefASRC15_DL_MM_sizeof;
+ i = i + 3;
+
+
+ /*10. 11. CMEM for ASRC_DL_MM_Coefs pointer */
+ /* ASRC_DL_MM_Coefs = C_CoefASRC16_DL_MM_ADDR/C_CoefASRC16_DL_MM_sizeof
+ /0/1/C_CoefASRC15_DL_MM_ADDR/C_CoefASRC15_DL_MM_sizeof/0/1 */
+ mem_tag = ABE_CMEM;
+ mem_addr = ASRC_DL_MM_Coefs_labelID;
+ el[i] = (mem_tag << 16) + (mem_addr << 2);
+
+ /* el[i+1] = iam1<<16 + inc1<<12 + iam2<<4 + inc2 */
+ el[i+1] = (temp0<<16) + (temp1<<12) + (temp0<<4) + temp1;
+
+ /* dummy field */
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 11. SMEM for XinASRC_DL_MM pointer */
+ /* XinASRC_DL_MM = S_XinASRC_DL_MM_ADDR/S_XinASRC_DL_MM_sizeof/0/1/0/0/0/0 */
+ mem_tag = ABE_SMEM;
+ mem_addr = XinASRC_DL_MM_labelID;
+ el[i] = (mem_tag << 16) + (mem_addr << 2);
+
+ el[i+1] = S_XinASRC_DL_MM_ADDR;
+ el[i+1] = (el[i+1]<<8) + S_XinASRC_DL_MM_sizeof;
+
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+
+ /* 12. CMEM for XinASRC_DL_MM pointer */
+ /* XinASRC_DL_MM = S_XinASRC_DL_MM_ADDR/S_XinASRC_DL_MM_sizeof/0/1/0/0/0/0 */
+ mem_tag = ABE_CMEM;
+ mem_addr = XinASRC_DL_MM_labelID;
+ el[i] = (mem_tag << 16) + (mem_addr << 2);
+
+ /* el[i+1] = iam1<<16 + inc1<<12 + iam2<<4 + inc2 */
+ el[i+1] = (temp0<<16) + (temp1<<12) + (temp0<<4) + temp0;
+
+ /* dummy field */
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 13. SMEM for IO_MM_DL_ASRC pointer */
+ /* IO_MM_DL_ASRC = S_XinASRC_DL_MM_ADDR/S_XinASRC_DL_MM_sizeof/
+ ASRC_DL_MM_FIR_L+ASRC_margin+ASRC_N_48k/1/0/0/0/0 */
+ mem_tag = ABE_SMEM;
+ mem_addr = IO_MM_DL_ASRC_labelID;
+ el[i] = (mem_tag << 16) + (mem_addr << 2);
+
+ el[i+1] = S_XinASRC_DL_MM_ADDR;
+ el[i+1] = (el[i+1]<<8) + S_XinASRC_DL_MM_sizeof;
+
+ el[i+2] = temp0;
+ i = i + 3;
+
+
+ /* 14. CMEM for IO_MM_DL_ASRC pointer */
+ /* IO_MM_DL_ASRC = S_XinASRC_DL_MM_ADDR/S_XinASRC_DL_MM_sizeof/
+ ASRC_DL_MM_FIR_L+ASRC_margin+ASRC_N_48k/1/0/0/0/0 */
+ mem_tag = ABE_CMEM;
+ mem_addr = IO_MM_DL_ASRC_labelID;
+ el[i] = (mem_tag << 16) + (mem_addr << 2);
+
+ /* el[i+1] = iam1<<16 + inc1<<12 + iam2<<4 + inc2 */
+ el[i+1] = ((ASRC_DL_MM_FIR_L+ASRC_margin+ASRC_N_48k)<<16) +
+ (temp1<<12) + (temp0<<4) + temp0;
+
+ /* dummy field */
+ el[i+2] = temp0;
+
+
+ abe_write_fifo (ABE_DMEM, D_FwMemInitDescr_ADDR, (u32 *)&el[0], 42);
+
}