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 \r
36 \r
37 \r
38 #ifndef _TCP3D_DRV_PRIV_H_\r
39 #define _TCP3D_DRV_PRIV_H_\r
40 \r
41 /**\r
42 * Local Compile Flags\r
43 */\r
44 #define TCP3D_DRV_USE_CSL_EDMA3_OPT_MAKE 0\r
45 \r
46 /**\r
47 * Local includes\r
48 */\r
49 #include <tcp3d_drv_types.h>\r
50 #include <ti/drv/tcp3d/src/tcp3d_utils.h>\r
51 \r
52 #include <ti/csl/soc.h>\r
53 #include <ti/csl/cslr_tpcc.h>\r
54 #include <ti/csl/csl_cpIntcAux.h>\r
55 \r
56 #if TCP3D_DRV_USE_CSL_EDMA3_OPT_MAKE\r
57 #include <ti/csl/csl_edma3.h>\r
58 #else\r
59 #include <ti/csl/cslr_tpcc.h>\r
60 #endif\r
61 \r
62 /**\r
63 * Local Defines\r
64 */\r
65 #define LINK_CH_IDX_INCFG 0\r
66 #define LINK_CH_IDX_LLR 1\r
67 #define LINK_CH_IDX_HD 2\r
68 #define LINK_CH_IDX_STS 3\r
69 #define LINK_CH_IDX_SD 4\r
70 \r
71 #define LINK_CH_IDX_LAST LINK_CH_IDX_SD\r
72 \r
73 #define LINK_CH_IDX_PAUSE (LINK_CH_IDX_LAST + 1)\r
74 #define LINK_CH_IDX_REVT (LINK_CH_IDX_LAST + 2)\r
75 #define LINK_CH_IDX_L2P (LINK_CH_IDX_LAST + 3)\r
76 #define LINK_CH_IDX_NTF (LINK_CH_IDX_LAST + 4)\r
77 #define LINK_CH_IDX_NTFD (LINK_CH_IDX_LAST + 5)\r
78 #define LINK_CH_IDX_WRAP (LINK_CH_IDX_LAST + 6)\r
79 \r
80 #define ONE_OVER_LINK_CB_Q15 (32768/TCP3D_DRV_LINK_CB)\r
81 \r
82 /**\r
83 * Local Macros\r
84 */\r
85 /**\r
86 * @brief Macro for getting the global map for L2 memory addresses \r
87 */\r
88 #define L2GLBMAP(coreID, addr) \\r
89 ( ( ((uint32_t)(addr) >= 0x00800000) && ((uint32_t)(addr) < 0x00900000) ) ? \\r
90 ( (uint32_t)(addr) | (uint32_t)((0x10 | (coreID & 0x3)) << 24) ) : \\r
91 (uint32_t)(addr) )\r
92 \r
93 /**\r
94 * @brief Macro for getting the code block index using division by TCP3D_DRV_LINK_CB \r
95 */\r
96 #define GET_CB_IDX(input) ((_smpy((input), ONE_OVER_LINK_CB_Q15) + 32768)>>16)\r
97 \r
98 /**\r
99 * Local Structures\r
100 */\r
101 /**\r
102 * @brief Structure for keeping the local variables\r
103 */\r
104 typedef struct Tcp3d_Internal\r
105 {\r
106 uint8_t constantOne;/**< variable set to 1 at init time and\r
107 used by PAUSE channels */\r
108 Tcp3d_State pauseState; /**< variable set to TCP3D_DRV_STATE_PAUSE\r
109 and used by PAUSE channels */\r
110 uint32_t lastOpt[2];\r
111 uint32_t lastLink[2];\r
112 EDMA3_DRV_PaRAMRegs *startPrmPtr;\r
113 EDMA3_DRV_PaRAMRegs *pingPtrL2p;\r
114 EDMA3_DRV_PaRAMRegs *pongPtrL2p;\r
115 uint8_t pingVar[2];\r
116 uint8_t pongVar[2];\r
117 EDMA3_DRV_PaRAMRegs revtPrm[2];\r
118 } Tcp3d_Internal;\r
119 \r
120 /**\r
121 * Local Functions\r
122 */\r
123 static EDMA3_DRV_Result Tcp3d_getEdmaChParamAddr (IN Tcp3d_Instance *tcp3dInst);\r
124 static EDMA3_DRV_Result Tcp3d_enableEdmaChannels (IN Tcp3d_Instance *tcp3dInst);\r
125 static EDMA3_DRV_Result Tcp3d_initEdmaChParam (IN Tcp3d_Instance *tcp3dInst);\r
126 static EDMA3_DRV_Result Tcp3d_resetEdmaChParam (IN Tcp3d_Instance *tcp3dInst,\r
127 IN uint32_t pingNumCBs,\r
128 IN uint32_t pongNumCBs);\r
129 static void Tcp3d_initPseudoParam ( IN Tcp3d_Instance *tcp3dInst,\r
130 IN uint32_t codeBlocks,\r
131 IN Tcp3d_Config *pingConfig,\r
132 IN Tcp3d_Config *pongConfig);\r
133 static void Tcp3d_resetPseudoParam (IN Tcp3d_Instance *tcp3dInst,\r
134 IN uint32_t codeBlocks);\r
135 static void Tcp3d_setLocalVariables (IN Tcp3d_Instance *tcp3dInst);\r
136 static void Tcp3d_resetRuntimeVariables (IN Tcp3d_Instance *tcp3dInst);\r
137 static void Tcp3d_updateListVariables ( INOUT Tcp3d_Instance *inst,\r
138 IN int32_t pingOutIdx,\r
139 IN int32_t pongOutIdx );\r
140 \r
141 #endif /* _TCP3D_DRV_PRIV_H_ */\r