/* ============================================================================ * Copyright (c) Texas Instruments Incorporated 2008, 2009 * * 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. * */ /** * @file csl_vcp2.h * * @brief * Header file with data structure and API declarations for VCP2 * CSL module. * * \par * ============================================================================ * @n (C) Copyright 2008, 2009, Texas Instruments, Inc. * @n Use of this software is controlled by the terms and conditions found * @n in the license agreement under which this software has been supplied. * =========================================================================== * \par */ /** @defgroup CSL_VCP2_API VCP2 * * @section Introduction * * @subsection xxx Overview * Channel decoding of voice and low bit-rate data channels found in cellular standards such as 2.5G, 3G, * and WiMAX requires the decoding of convolutional encoded data. The Viterbi-decoder coprocessor 2 * (VCP2) provided in the TCI648x devices performs Viterbi decoding for IS2000 and 3GPP wireless * standards. The VCP2 coprocessor also performs forward-error correction for 2G and 3G wireless systems. * The VCP2 coprocessor offers a very cost effective and synergistic solution when combined with Texas * Instruments (TI) DSPs. The VCP2 supports 1941 12.2 Kbps class A 3G voice channels running at * 333 MHz. * * @subsection References * -# VCP2 User's Guide SPRUE09A.pdf (May 2006 - Revised April 2008) * */ #ifndef CSL_VCP2__H #define CSL_VCP2__H #include #include #include /** @defgroup CSL_VCP2_SYMBOL VCP2 Symbols Defined @ingroup CSL_VCP2_API */ /** @defgroup CSL_VCP2_DATASTRUCT VCP2 Data Structures @ingroup CSL_VCP2_API */ /** @defgroup CSL_VCP2_FUNCTION VCP2 Functions @ingroup CSL_VCP2_API */ #ifdef __cplusplus extern "C" { #endif /** @addtogroup CSL_VCP2_SYMBOL @{ */ /****************************************************************************** * VCP Macros *****************************************************************************/ /** Code rate = 2 */ #define VCP2_RATE_1_2 (2U) /** Code rate = 3 */ #define VCP2_RATE_1_3 (3U) /** Code rate = 4 */ #define VCP2_RATE_1_4 (4U) /** Speed critical */ #define VCP2_SPEED_CRITICAL (0U) /** Speed most critical */ #define VCP2_SPEED_MOST_CRITICAL (1U) /** Performance critical */ #define VCP2_PERF_CRITICAL (2U) /** Performance most critical */ #define VCP2_PERF_MOST_CRITICAL (3U) /** Default value */ #define VCP2_PERF_DEFAULT (VCP2_SPEED_CRITICAL) /** Out order of VCP output for decoded data : 0 to 31 */ #define VCP2_OUTORDER_0_31 (CSL_VCP2_VCPIC3_OUT_ORDER_LSB) /** Out order of VCP output for decoded data : 31 to 0 */ #define VCP2_OUTORDER_31_0 (CSL_VCP2_VCPIC3_OUT_ORDER_MSB) /** Output decision type : Hard decisions */ #define VCP2_DECISION_HARD (CSL_VCP2_VCPIC5_SDHD_HARD) /** Output decision type : Soft decisions */ #define VCP2_DECISION_SOFT (CSL_VCP2_VCPIC5_SDHD_SOFT) /** Output parameters read flag : VCP read event is not generated */ #define VCP2_OUTF_NO (CSL_VCP2_VCPIC5_OUTF_NO) /** Output parameters read flag : VCP read event is generated */ #define VCP2_OUTF_YES (CSL_VCP2_VCPIC5_OUTF_YES) /** No trace back allowed */ #define VCP2_TRACEBACK_NONE (CSL_VCP2_VCPIC5_TB_NO) /** Traceback mode : Tailed */ #define VCP2_TRACEBACK_TAILED (CSL_VCP2_VCPIC5_TB_TAIL) /** Traceback mode : Convergent */ #define VCP2_TRACEBACK_CONVERGENT (CSL_VCP2_VCPIC5_TB_CONV) /** Traceback mode : Mixed */ #define VCP2_TRACEBACK_MIXED (CSL_VCP2_VCPIC5_TB_MIX) /** * VCP unpause type : VCP restarts and processes one sliding window before * pausing again */ #define VCP2_UNPAUSE_ONESW (CSL_VCP2_VCPEXE_COMMAND_RESTART_PAUSE) /** VCP unpause type : VCP restarts */ #define VCP2_UNPAUSE_NORMAL (CSL_VCP2_VCPEXE_COMMAND_RESTART) /** Soft decisions memory format : 32-bit word packed */ #define VCP2_END_PACKED32 (CSL_VCP2_VCPEND_SD_32BIT) /** Soft decisions memory format : Native (8 bits) */ #define VCP2_END_NATIVE (CSL_VCP2_VCPEND_SD_NATIVE) /** EMU mode : VCP halts at the end of completion of the current window of * state metric processing or at the end of a frame */ #define VCP2_EMUHALT_DEFAULT (CSL_VCP2_VCPEMU_SOFT_HALT_DEFAULT) /** * EMU mode : VCP halts at the end of completion of the processing of the * frame */ #define VCP2_EMUHALT_FRAMEEND (CSL_VCP2_VCPEMU_SOFT_HALT_FRAMEEND) /*************************************************************************** * Following are Polynomials used in GSM/Edge/GPRS **************************************************************************/ /** * GSM/Edge/GPRS generator polynomial 0 */ #define VCP2_GEN_POLY_0 0x30 /** * GSM/Edge/GPRS generator polynomial 1 */ #define VCP2_GEN_POLY_1 0xB0 /** * GSM/Edge/GPRS generator polynomial 2 */ #define VCP2_GEN_POLY_2 0x50 /** * GSM/Edge/GPRS generator polynomial 3 */ #define VCP2_GEN_POLY_3 0xF0 /** * GSM/Edge/GPRS generator polynomial 4 */ #define VCP2_GEN_POLY_4 0x6C /** * GSM/Edge/GPRS generator polynomial 5 */ #define VCP2_GEN_POLY_5 0x94 /** * GSM/Edge/GPRS generator polynomial 6 */ #define VCP2_GEN_POLY_6 0xF4 /** * GSM/Edge/GPRS generator polynomial 7 */ #define VCP2_GEN_POLY_7 0xE4 /** * NULL generator polynomial for GSM/Edge/GPRS */ #define VCP2_GEN_POLY_GNULL 0x00 /** @} */ /** @addtogroup CSL_VCP2_DATASTRUCT @{ */ /** VCP Peripheral ID structure */ typedef struct { /** Peripheral type */ Uint8 type; /** Peripheral class */ Uint8 pid_class; /** Peripheral revision */ Uint8 rev; } VCP2_PID; /** * VCP code rate type */ typedef Uint32 VCP2_Rate; /** * VCP input configuration structure that holds all of the configuration * values that are to be transferred to the VCP via the EDMA. */ typedef struct { /** Value of VCP input configuration register 0 */ Uint32 ic0; /** Value of VCP input configuration register 1 */ Uint32 ic1; /** Value of VCP input configuration register 2 */ Uint32 ic2; /** Value of VCP input configuration register 3 */ Uint32 ic3; /** Value of VCP input configuration register 4 */ Uint32 ic4; /** Value of VCP input configuration register 5 */ Uint32 ic5; } VCP2_ConfigIc; /** * VCP channel parameters structure that holds all of the information * concerning the user channel. These values are used to generate the * appropriate input configuration values for the VCP and to program * the EDMA. */ typedef struct { /** Code rate */ VCP2_Rate rate; /** Constraint length */ Uint8 constLen; /** Polynomial 0 */ Uint8 poly0; /** Polynomial 1 */ Uint8 poly1; /** Polynomial 2 */ Uint8 poly2; /** Polynomial 3 */ Uint8 poly3; /** Yamamoto threshold value*/ Uint16 yamTh; /** Frame length i.e. number of symbols in a frame*/ Uint16 frameLen; /** Reliability length */ Uint16 relLen; /** Convergence distance */ Uint16 convDist; /** Traceback state index */ Uint16 traceBackIndex; /** Traceback state index enable/disable */ Bool traceBackEn; /** Hard decision output ordering */ Uint16 outOrder; /** Maximum initial state metric */ Int16 maxSm; /** Minimum initial state metric */ Int16 minSm; /** State index set to the maximum initial state metric*/ Uint8 stateNum; /** Branch metrics buffer length in input FIFO */ Uint8 bmBuffLen; /** Decisions buffer length in output FIFO */ Uint8 decBuffLen; /** Traceback mode */ Uint8 traceBack; /** Output parameters read flag */ Uint8 readFlag; /** Decision selection: hard or soft */ Uint8 decision; /** Number of branch metric frames*/ Uint16 numBmFrames; /** Number of decision frames */ Uint16 numDecFrames; } VCP2_Params; /** * VCP base parameter structure that is used to configure the VCP parameters * structure with the given values using VCP2_genParams() function. */ typedef struct { /** Code rate */ VCP2_Rate rate; /** Constraint length */ Uint8 constLen; /** Frame length */ Uint16 frameLen; /** Yamamoto threshold value */ Uint16 yamTh; /** Maximum initial state metric value */ Uint8 stateNum; /** Traceback convergement mode */ Bool tbConvrgMode; /** Output decision type */ Uint8 decision; /** Output parameters read flag */ Uint8 readFlag; /** Enable/Disable tail biting */ Bool tailBitEnable; /** Tailbiting traceback index mode */ Uint16 traceBackIndex; /** Hard decision output ordering */ Uint8 outOrder; /** Performance and speed */ Uint8 perf; } VCP2_BaseParams; /** VCP Error structure */ typedef struct { /** Traceback mode error */ Bool tbnaErr; /** Frame length error */ Bool ftlErr; /** Reliability + convergence distance error */ Bool fctlErr; /** Max-Min error */ Bool maxminErr; /** SYMX error */ Bool symxErr; /** SYMR error */ Bool symrErr; } VCP2_Errors; /** VCP generator polynomials structure */ typedef struct { /** Generator polynomial 0 */ Uint8 poly0; /** Generator polynomial 1 */ Uint8 poly1; /** Generator polynomial 2 */ Uint8 poly2; /** Generator polynomial 3 */ Uint8 poly3; } VCP2_Poly; /**************************************************************************\ * Overlay structure typedef definition \**************************************************************************/ typedef volatile CSL_Vcp2EdmaRegs *CSL_Vcp2RegsOvly; typedef volatile CSL_Vcp2ConfigRegs *CSL_Vcp2CfgRegsOvly; /** * This will have the base-address information for the peripheral instance */ typedef struct { /** Base-address of the registers of VCP2 */ CSL_Vcp2RegsOvly regs; /** Base-address of the Configuration registers of VCP2 */ CSL_Vcp2CfgRegsOvly cfgregs; } VCP2BaseAddress; /** * This structure/object holds the context of the instance of VCP2 * opened using VCP2_init() function. * * Pointer to this object is passed as VCP2 Handle to all VCP2 CSL APIs. * VCP2_init() function intializes this structure based on the parameters * passed */ typedef struct VCP2Obj_s { /** Pointer to the register overlay structure of the Tcp2 */ CSL_Vcp2RegsOvly regs; /** Pointer to the Configuration registers overlay structure of the Tcp2 */ CSL_Vcp2CfgRegsOvly cfgregs; /** Instance of TCP2 being referred by this object */ CSL_InstNum perNum; } VCP2Obj; /** This is a pointer to Vcp2Obj and is passed as the first * parameter to all VCP2 CSL APIs */ typedef struct VCP2Obj_s *VCP2Handle; /* @} */ /** @addtogroup CSL_VCP2_FUNCTION @{ */ /****************************************************************************** * VCP2 global function declarations *****************************************************************************/ extern void VCP2_genParams ( const VCP2_BaseParams * pConfigBase, VCP2_Params * pConfigParams ); extern void VCP2_genIc ( const VCP2_Params * pConfigParams, VCP2_ConfigIc * pConfigIc ); extern VCP2Handle VCP2_init( VCP2Obj * pVcp2Obj, Int32 instNum, Int32 * pStatus ); extern CSL_Status VCP2_Close ( VCP2Handle hVcp2 ); /* @} */ #ifdef __cplusplus } #endif #endif