| /* |
| |
| This file is provided under a dual BSD/GPLv2 license. When using or |
| redistributing this file, you may do so under either license. |
| |
| GPL LICENSE SUMMARY |
| |
| Copyright(c) 2010-2011 Texas Instruments Incorporated, |
| All rights reserved. |
| |
| This program is free software; you can redistribute it and/or modify |
| it under the terms of version 2 of the GNU General Public License 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. |
| The full GNU General Public License is included in this distribution |
| in the file called LICENSE.GPL. |
| |
| BSD LICENSE |
| |
| Copyright(c) 2010-2011 Texas Instruments Incorporated, |
| All rights reserved. |
| |
| Redistribution and use in source and binary forms, with or without |
| modification, are permitted provided that the following conditions |
| are met: |
| |
| * Redistributions of source code must retain the above copyright |
| notice, this list of conditions and the following disclaimer. |
| * Redistributions in binary form must reproduce the above copyright |
| notice, this list of conditions and the following disclaimer in |
| the documentation and/or other materials provided with the |
| distribution. |
| * Neither the name of Texas Instruments Incorporated nor the names of |
| its contributors may be used to endorse or promote products derived |
| from this software without specific prior written permission. |
| |
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
| "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
| LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
| A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
| OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
| SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
| LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| |
| */ |
| |
| #ifndef _ABE_DBG_H_ |
| #define _ABE_DBG_H_ |
| |
| #include <linux/mutex.h> |
| |
| #include "abe_typ.h" |
| #include "abe_dm_addr.h" |
| |
| /* |
| * Debug trace format |
| * TIME 2 bytes from ABE : 4kHz period of the FW scheduler |
| * SUBID 1 byte : HAL API index |
| * From 0 to 16 bytes : parameters of the subroutine |
| * on every 32 dumps a tag is pushed on the debug trace : 0x55555555 |
| */ |
| #define dbg_bitfield_offset 8 |
| #define dbg_api_calls 0 |
| #define dbg_mapi (1L << (dbg_api_calls + dbg_bitfield_offset)) |
| #define dbg_external_data_access 1 |
| #define dbg_mdata (1L << (dbg_external_data_access + dbg_bitfield_offset)) |
| #define dbg_err_codes 2 |
| #define dbg_merr (1L << (dbg_api_calls + dbg_bitfield_offset)) |
| #define ABE_DBG_MAGIC_NUMBER 0x55555555 |
| /* |
| * IDs used for traces |
| */ |
| #define ABE_ID_RESET_HAL (1 + dbg_mapi) |
| #define ABE_ID_LOAD_FW (2 + dbg_mapi) |
| #define ABE_ID_DEFAULT_CONFIGURATION (3 + dbg_mapi) |
| #define ABE_ID_IRQ_PROCESSING (4 + dbg_mapi) |
| #define ABE_ID_EVENT_GENERATOR_SWITCH (5 + dbg_mapi) |
| #define ABE_ID_READ_HARDWARE_CONFIGURATION (6 + dbg_mapi) |
| #define ABE_ID_READ_LOWEST_OPP (7 + dbg_mapi) |
| #define ABE_ID_WRITE_GAIN (8 + dbg_mapi) |
| #define ABE_ID_SET_ASRC_DRIFT_CONTROL (9 + dbg_mapi) |
| #define ABE_ID_PLUG_SUBROUTINE (10 + dbg_mapi) |
| #define ABE_ID_UNPLUG_SUBROUTINE (11 + dbg_mapi) |
| #define ABE_ID_PLUG_SEQUENCE (12 + dbg_mapi) |
| #define ABE_ID_LAUNCH_SEQUENCE (13 + dbg_mapi) |
| #define ABE_ID_LAUNCH_SEQUENCE_param (14 + dbg_mapi) |
| #define ABE_ID_CONNECT_IRQ_PING_PONG_PORT (15 + dbg_mapi) |
| #define ABE_ID_READ_ANALOG_GAIN_DL (16 + dbg_mapi) |
| #define ABE_ID_READ_ANALOG_GAIN_UL (17 + dbg_mapi) |
| #define ABE_ID_ENABLE_DYN_UL_GAIN (18 + dbg_mapi) |
| #define ABE_ID_DISABLE_DYN_UL_GAIN (19 + dbg_mapi) |
| #define ABE_ID_ENABLE_DYN_EXTENSION (20 + dbg_mapi) |
| #define ABE_ID_DISABLE_DYN_EXTENSION (21 + dbg_mapi) |
| #define ABE_ID_NOTIFY_ANALOG_GAIN_CHANGED (22 + dbg_mapi) |
| #define ABE_ID_RESET_PORT (23 + dbg_mapi) |
| #define ABE_ID_READ_REMAINING_DATA (24 + dbg_mapi) |
| #define ABE_ID_DISABLE_DATA_TRANSFER (25 + dbg_mapi) |
| #define ABE_ID_ENABLE_DATA_TRANSFER (26 + dbg_mapi) |
| #define ABE_ID_READ_GLOBAL_COUNTER (27 + dbg_mapi) |
| #define ABE_ID_SET_DMIC_FILTER (28 + dbg_mapi) |
| #define ABE_ID_SET_OPP_PROCESSING (29 + dbg_mapi) |
| #define ABE_ID_SET_PING_PONG_BUFFER (30 + dbg_mapi) |
| #define ABE_ID_READ_PORT_ADDRESS (31 + dbg_mapi) |
| #define ABE_ID_LOAD_FW_param (32 + dbg_mapi) |
| #define ABE_ID_WRITE_HEADSET_OFFSET (33 + dbg_mapi) |
| #define ABE_ID_READ_GAIN_RANGES (34 + dbg_mapi) |
| #define ABE_ID_WRITE_EQUALIZER (35 + dbg_mapi) |
| #define ABE_ID_WRITE_ASRC (36 + dbg_mapi) |
| #define ABE_ID_WRITE_APS (37 + dbg_mapi) |
| #define ABE_ID_WRITE_MIXER (38 + dbg_mapi) |
| #define ABE_ID_WRITE_EANC (39 + dbg_mapi) |
| #define ABE_ID_WRITE_ROUTER (40 + dbg_mapi) |
| #define ABE_ID_READ_PORT_GAIN (41 + dbg_mapi) |
| #define ABE_ID_ASRC (42 + dbg_mapi) |
| #define ABE_ID_READ_APS (43 + dbg_mapi) |
| #define ABE_ID_READ_APS_energy (44 + dbg_mapi) |
| #define ABE_ID_READ_MIXER (45 + dbg_mapi) |
| #define ABE_READ_EANC (46 + dbg_mapi) |
| #define ABE_ID_READ_ROUTER (47 + dbg_mapi) |
| #define ABE_ID_READ_DEBUG_TRACE (48 + dbg_mapi) |
| #define ABE_ID_SET_SEQUENCE_TIME_ACCURACY (49 + dbg_mapi) |
| #define ABE_ID_SET_DEBUG_PINS (50 + dbg_mapi) |
| #define ABE_ID_SELECT_MAIN_PORT (51 + dbg_mapi) |
| #define ABE_ID_WRITE_EVENT_GENERATOR (52 + dbg_mapi) |
| #define ABE_ID_READ_USE_CASE_OPP (53 + dbg_mapi) |
| #define ABE_ID_SELECT_DATA_SOURCE (54 + dbg_mapi) |
| #define ABE_ID_READ_NEXT_PING_PONG_BUFFER (55 + dbg_mapi) |
| #define ABE_ID_INIT_PING_PONG_BUFFER (56 + dbg_mapi) |
| #define ABE_ID_CONNECT_CBPR_DMAREQ_PORT (57 + dbg_mapi) |
| #define ABE_ID_CONNECT_DMAREQ_PORT (58 + dbg_mapi) |
| #define ABE_ID_CONNECT_DMAREQ_PING_PONG_PORT (59 + dbg_mapi) |
| #define ABE_ID_CONNECT_SERIAL_PORT (60 + dbg_mapi) |
| #define ABE_ID_CONNECT_SLIMBUS_PORT (61 + dbg_mapi) |
| #define ABE_ID_READ_GAIN (62 + dbg_mapi) |
| #define ABE_ID_SET_ROUTER_CONFIGURATION (63 + dbg_mapi) |
| #define ABE_ID_CONNECT_DEBUG_TRACE (64 + dbg_mapi) |
| #define ABE_ID_SET_DEBUG_TRACE (65 + dbg_mapi) |
| #define ABE_ID_REMOTE_DEBUGGER_INTERFACE (66 + dbg_mapi) |
| #define ABE_ID_ENABLE_TEST_PATTERN (67 + dbg_mapi) |
| #define ABE_ID_CONNECT_TDM_PORT (68 + dbg_mapi) |
| /* |
| * IDs used for error codes |
| */ |
| #define NOERR 0 |
| #define ABE_SET_MEMORY_CONFIG_ERR (1 + dbg_merr) |
| #define ABE_BLOCK_COPY_ERR (2 + dbg_merr) |
| #define ABE_SEQTOOLONG (3 + dbg_merr) |
| #define ABE_BADSAMPFORMAT (4 + dbg_merr) |
| #define ABE_SET_ATC_ABE_BLOCK_COPY_ERR MEMORY_CONFIG_ERR (5 + dbg_merr) |
| #define ABE_PROTOCOL_ERROR (6 + dbg_merr) |
| #define ABE_PARAMETER_ERROR (7 + dbg_merr) |
| /* port programmed while still running */ |
| #define ABE_PORT_REPROGRAMMING (8 + dbg_merr) |
| #define ABE_READ_USE_CASE_OPP_ERR (9 + dbg_merr) |
| #define ABE_PARAMETER_OVERFLOW (10 + dbg_merr) |
| #define ABE_FW_FIFO_WRITE_PTR_ERR (11 + dbg_merr) |
| |
| /* |
| * IDs used for error codes |
| */ |
| #define OMAP_ABE_ERR_LIB (1 << 1) |
| #define OMAP_ABE_ERR_API (1 << 2) |
| #define OMAP_ABE_ERR_INI (1 << 3) |
| #define OMAP_ABE_ERR_SEQ (1 << 4) |
| #define OMAP_ABE_ERR_DBG (1 << 5) |
| #define OMAP_ABE_ERR_EXT (1 << 6) |
| |
| struct omap_abe_dbg { |
| /* Debug Data */ |
| u32 activity_log[OMAP_ABE_D_DEBUG_HAL_TASK_SIZE]; |
| u32 activity_log_write_pointer; |
| u32 mask; |
| }; |
| |
| struct omap_abe_dma { |
| /* OCP L3 pointer to the first address of the */ |
| void *data; |
| /* destination buffer (either DMA or Ping-Pong read/write pointers). */ |
| /* address L3 when addressing the DMEM buffer instead of CBPr */ |
| void *l3_dmem; |
| /* address L3 translated to L4 the ARM memory space */ |
| void *l4_dmem; |
| /* number of iterations for the DMA data moves. */ |
| u32 iter; |
| }; |
| |
| struct omap_abe { |
| void __iomem *io_base[5]; |
| u32 firmware_version_number; |
| u16 MultiFrame[25][8]; |
| u32 compensated_mixer_gain; |
| u8 muted_gains_indicator[MAX_NBGAIN_CMEM]; |
| u32 desired_gains_decibel[MAX_NBGAIN_CMEM]; |
| u32 muted_gains_decibel[MAX_NBGAIN_CMEM]; |
| u32 desired_gains_linear[MAX_NBGAIN_CMEM]; |
| u32 desired_ramp_delay_ms[MAX_NBGAIN_CMEM]; |
| int pp_buf_id; |
| int pp_buf_id_next; |
| int pp_buf_addr[4]; |
| int pp_first_irq; |
| struct mutex mutex; |
| u32 warm_boot; |
| |
| u32 irq_dbg_read_ptr; |
| u32 dbg_param; |
| |
| struct omap_abe_dbg dbg; |
| }; |
| |
| /** |
| * omap_abe_dbg_reset |
| * @dbg: Pointer on abe debug handle |
| * |
| * Called in order to reset Audio Back End debug global data. |
| * This ensures that ABE debug trace pointer is reset correctly. |
| */ |
| int omap_abe_dbg_reset(struct omap_abe_dbg *dbg); |
| |
| #endif /* _ABE_DBG_H_ */ |