- Fix for SDOCM00108178 in src/tcp3d_drv.c.
[keystone-rtos/tcp3d-lld.git] / example / src / tcp3d_main.h
1 /*\r
2  *\r
3  * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/ \r
4  * \r
5  * \r
6  *  Redistribution and use in source and binary forms, with or without \r
7  *  modification, are permitted provided that the following conditions \r
8  *  are met:\r
9  *\r
10  *    Redistributions of source code must retain the above copyright \r
11  *    notice, this list of conditions and the following disclaimer.\r
12  *\r
13  *    Redistributions in binary form must reproduce the above copyright\r
14  *    notice, this list of conditions and the following disclaimer in the \r
15  *    documentation and/or other materials provided with the   \r
16  *    distribution.\r
17  *\r
18  *    Neither the name of Texas Instruments Incorporated nor the names of\r
19  *    its contributors may be used to endorse or promote products derived\r
20  *    from this software without specific prior written permission.\r
21  *\r
22  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \r
23  *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT \r
24  *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r
25  *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT \r
26  *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, \r
27  *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT \r
28  *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
29  *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
30  *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT \r
31  *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE \r
32  *  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
33  *\r
34 */\r
35 #ifndef _TCP3D_MAIN_H_\r
36 #define _TCP3D_MAIN_H_\r
37 \r
38 /* XDC includes */\r
39 //#include <xdc/std.h>\r
40 #include <xdc/cfg/global.h>\r
41 #include <xdc/runtime/System.h>\r
42 #include <xdc/runtime/Memory.h>\r
43 #include <xdc/runtime/IHeap.h>\r
44 \r
45 /* Driver includes */\r
46 #include <ti/drv/tcp3d/tcp3d_drv.h>\r
47 #include <ti/drv/tcp3d/src/tcp3d_utils.h>\r
48 \r
49 /* Utility includes */\r
50 #include "tcp3d_codeBlkSeg.h"\r
51 \r
52 /**********************************************************************\r
53  ************************** Test Macros *******************************\r
54  **********************************************************************/\r
55 /**\r
56  * Address mapping is done based on the mapping shown below.\r
57  * Check on the address done to ensure it be in L2SRAM space.\r
58  * \r
59  * L2SRAM      : org = 0x00800000, len = 0x100000 (local)\r
60  * GEM0_L2_MEM : org = 0x10800000, len = 0x100000 (global)\r
61  * GEM1_L2_MEM : org = 0x11800000, len = 0x100000 (global)\r
62  * GEM2_L2_MEM : org = 0x12800000, len = 0x100000 (global)\r
63  * GEM3_L2_MEM : org = 0x13800000, len = 0x100000 (global)\r
64  *\r
65  * MSMCSRAM    : org = 0x0c000000, len = 0x200000 (global)\r
66  */\r
67 #define L2GLBMAP(coreID, addr)   \\r
68     ( ( ((UInt32)(addr) >= 0x00800000) && ((UInt32)(addr) < 0x00900000) ) ? \\r
69       ( (UInt32)(addr) | (UInt32)((0x10 | (coreID & 0x3)) << 24) ) : \\r
70       (UInt32)(addr) ) \r
71 \r
72 /**********************************************************************\r
73  ************************** Test Compile Flags ************************\r
74  **********************************************************************/\r
75 /**\r
76  * Prepare all input config registers outside the Send loop (block size based, etc)\r
77  * except for beta states since they are data dependent.\r
78  */\r
79 #define TEST_PREPARE_ONLY_BETASTATE                     1\r
80 \r
81 /**\r
82  * Set this flag to use the fixed input configuration parameters preparation\r
83  * optimization. This flag is useful only if TEST_PREPARE_ONLY_BETASTATE is\r
84  * not used.\r
85  */\r
86 #define TEST_PREPARE_ONLY_CODEBLOCK_PARAM_DEPENDENT     0\r
87 \r
88 /**\r
89  * Check the beta state values with the reference from the file generated \r
90  * with the test vectors.\r
91  */\r
92 #define TEST_BETA_VALUE_CHECK                           0\r
93 \r
94 /**********************************************************************\r
95  ************************** Test Definitions **************************\r
96  **********************************************************************/\r
97 /* TCP3D modes */\r
98 #define TEST_MODE_SINGLE        CSL_TCP3D_CFG_TCP3_MODE_MODE_SEL_3GPP   //0 (NOT SUPPORTED)\r
99 #define TEST_MODE_LTE           CSL_TCP3D_CFG_TCP3_MODE_MODE_SEL_LTE    //1\r
100 #define TEST_MODE_WIMAX         CSL_TCP3D_CFG_TCP3_MODE_MODE_SEL_WIMAX  //2\r
101 #define TEST_MODE_SPLIT         CSL_TCP3D_CFG_TCP3_MODE_MODE_SEL_HSUPA  //3\r
102 \r
103 /* Test True/False flags */\r
104 #define TEST_FALSE              0\r
105 #define TEST_TRUE               1\r
106 \r
107 /* Test Interrupt flags */\r
108 #define TEST_INTR_ENABLE        1\r
109 #define TEST_INTR_DISABLE       0\r
110 \r
111 /* Enable the correct power domain for the device. */\r
112 #ifdef DEVICE_K2L\r
113 #define TEST_CSL_PSC_PD_TCP3D       CSL_PSC_PD_TCP3D_0\r
114 #define TEST_CSL_PSC_LPSC_TCP3D     CSL_PSC_LPSC_TCP3D_0\r
115 #else /* DEVICE_K2K, DEVICE_K2H */\r
116 #define TEST_CSL_PSC_PD_TCP3D       CSL_PSC_PD_TCP3D_01\r
117 #define TEST_CSL_PSC_LPSC_TCP3D     CSL_PSC_LPSC_TCP3D_0\r
118 #endif\r
119 \r
120 /**********************************************************************\r
121  ************************** Test Structures ***************************\r
122  **********************************************************************/\r
123 /*\r
124  * Structure that holds the configuration parameters. Used for storing the\r
125  * configuration values read from the file blockXX_cfgreg.dat for a given\r
126  * code block.\r
127  */\r
128 typedef struct cbConfig\r
129 {\r
130     /* Control */\r
131     Int32 mode_sel;         //TCP3_MODE\r
132     Int32 lte_crc_init_sel;\r
133 \r
134     /* Input */\r
135     Int32 NumInfoBits;      //CFG0\r
136     Int32 SW0_length;       //CFG1\r
137     Int32 maxst_en;         //CFG2\r
138     Int32 out_flag_en;\r
139     Int32 out_order_sel;\r
140     Int32 ext_scale_en;\r
141     Int32 soft_out_flag_en;\r
142     Int32 soft_out_fmt;\r
143     Int32 min_itr;\r
144     Int32 max_itr;\r
145     Int32 snr_val;\r
146     Int32 snr_rep;\r
147     Int32 stop_sel;\r
148     Int32 crc_iter_pass;\r
149     Int32 crc_sel;\r
150     Int32 maxst_thold;        //CFG3\r
151     Int32 maxst_value;\r
152     Int32 ext_scale_0;        //CFG8\r
153     Int32 ext_scale_1;\r
154     Int32 ext_scale_2;\r
155     Int32 ext_scale_3;\r
156     Int32 ext_scale_4;        //CFG9\r
157     Int32 ext_scale_5;\r
158     Int32 ext_scale_6;\r
159     Int32 ext_scale_7;\r
160     Int32 ext_scale_8;        //CFG10\r
161     Int32 ext_scale_9;\r
162     Int32 ext_scale_10;\r
163     Int32 ext_scale_11;\r
164     Int32 ext_scale_12;       //CFG11\r
165     Int32 ext_scale_13;\r
166     Int32 ext_scale_14;\r
167     Int32 ext_scale_15;\r
168 } cbConfig;\r
169 \r
170 /*\r
171  * Structure for one code block description.\r
172  */\r
173 typedef struct cbDataDesc\r
174 {\r
175     UInt32      mode;\r
176     UInt32      crcInitVal;\r
177     Int8        tailBits[12];\r
178     Tcp3d_InCfgParams   *inCfgParams;\r
179     UInt8       sw0LengthUsed;\r
180 \r
181     UInt32  blockSize;\r
182     UInt32  interFlag;\r
183     UInt32  sdFlag;\r
184     UInt32  stsFlag;\r
185     UInt32  llrOffset;\r
186     UInt32  sdOffset;\r
187 \r
188     UInt32  sizeCFG;\r
189     UInt32  sizeINTER;\r
190     UInt32  sizeLLR;\r
191     UInt32  sizeHD;\r
192     UInt32  sizeSD;\r
193     UInt32  sizeSTS;\r
194 \r
195     UInt32  *inCfg;\r
196     UInt16  *inInter;\r
197     Int8    *inLLR; /* three arrays with offset in llrOffset */\r
198     UInt32  *outHD;\r
199     UInt32  *refHD;\r
200     Int8    *outSD; /* three arrays with offset in sdOffset */\r
201     Int8    *refSD; /* three arrays with offset in sdOffset */\r
202     UInt32  *outSts;\r
203     UInt32  *refSts;\r
204 } cbDataDesc;\r
205 \r
206 /*\r
207  * Structure for one test description. \r
208  */\r
209 typedef struct cbTestDesc\r
210 {\r
211     cbDataDesc  **cbData;\r
212     Int32       maxNumCB;\r
213     Int32       mode;\r
214     Int32       doubleBuffer;\r
215     Int32       lteCrcSel;\r
216 } cbTestDesc;\r
217 \r
218 /**********************************************************************\r
219  ************************** Test Global Tables ************************\r
220  **********************************************************************/\r
221 /* interleaver tables (used in tcp3d_inputCongigPrep.c file) */\r
222 extern Int16 TCP3_LteInterleaverTable[220][7];\r
223 extern Int16 TCP3_WimaxInterleaverTable[17][4];\r
224 \r
225 /**********************************************************************\r
226  *********************** Test Global Functions ************************\r
227  **********************************************************************/\r
228 /* interleaver table index calculation function */\r
229 Int32 LTE_interleaver_index(Int32 K);\r
230 Int32 WIMAX_interleaver_index(Int32 K);\r
231 \r
232 /* input config prepare function definitions (see tcp3d_inputCongigPrep.c) */\r
233 Void prepareBlockSizeDepICParams(cbDataDesc *cbPtr);\r
234 Void prepareBetaStateICParams(cbDataDesc *cbPtr, UInt8 mode);\r
235 Void prepareIC(cbDataDesc *cbPtr, UInt32 *tempIC, UInt8 copyFlag);\r
236 Void fillICParams(Tcp3d_InCfgParams *inCfgParams, cbConfig *cbCfg);\r
237 Void checkBetaValues (UInt32 inCfg[]);\r
238 \r
239 /* Test vector functions (see tcp3d_testvector.c) */\r
240 Int getTestSetCB(IHeap_Handle dataHeap, cbTestDesc *cbTestSet, Char *testFolder);\r
241 Void freeTestSetCB(IHeap_Handle dataHeap, cbTestDesc *cbTestSet);\r
242 \r
243 #endif  /* _TCP3D_MAIN_H_ */\r