1 /*\r
2 *\r
3 * Copyright (C) 2010, 2014 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 #define LINK_CH_IDX_NEXTCB_DUMMY (LINK_CH_IDX_LAST + 7)\r
80 #define LINK_CH_IDX_NEXTCB_NTFD (LINK_CH_IDX_LAST + 8)\r
81 \r
82 #define ONE_OVER_LINK_CB_Q15 (32768/TCP3D_DRV_LINK_CB)\r
83 \r
84 /**\r
85 * Local Macros\r
86 */\r
87 /**\r
88 * @brief Macro for getting the global map for L2 memory addresses \r
89 */\r
90 #define L2GLBMAP(coreID, addr) \\r
91 ( ( ((uint32_t)(addr) >= 0x00800000) && ((uint32_t)(addr) < 0x00900000) ) ? \\r
92 ( (uint32_t)(addr) | (uint32_t)((0x10 | (coreID & 0x3)) << 24) ) : \\r
93 (uint32_t)(addr) )\r
94 \r
95 /**\r
96 * @brief Macro for getting the code block index using division by TCP3D_DRV_LINK_CB \r
97 */\r
98 #define GET_CB_IDX(input) ((_smpy((input), ONE_OVER_LINK_CB_Q15) + 32768)>>16)\r
99 \r
100 /**\r
101 * Local Structures\r
102 */\r
103 /**\r
104 * @brief Structure for keeping the local variables\r
105 */\r
106 typedef struct Tcp3d_Internal\r
107 {\r
108 uint8_t constantOne;/**< variable set to 1 at init time and\r
109 used by PAUSE channels */\r
110 Tcp3d_State pauseState; /**< variable set to TCP3D_DRV_STATE_PAUSE\r
111 and used by PAUSE channels */\r
112 uint32_t lastOpt[2];\r
113 uint32_t lastLink[2];\r
114 EDMA3_DRV_PaRAMRegs *startPrmPtr;\r
115 EDMA3_DRV_PaRAMRegs *pingPtrL2p;\r
116 EDMA3_DRV_PaRAMRegs *pongPtrL2p;\r
117 uint8_t pingVar[2];\r
118 uint8_t pongVar[2];\r
119 EDMA3_DRV_PaRAMRegs revtPrm[2];\r
120 } Tcp3d_Internal;\r
121 \r
122 /**\r
123 * Local Functions\r
124 */\r
125 static EDMA3_DRV_Result Tcp3d_getEdmaChParamAddr (IN Tcp3d_Instance *tcp3dInst);\r
126 static EDMA3_DRV_Result Tcp3d_enableEdmaChannels (IN Tcp3d_Instance *tcp3dInst);\r
127 static EDMA3_DRV_Result Tcp3d_initEdmaChParam (IN Tcp3d_Instance *tcp3dInst);\r
128 static EDMA3_DRV_Result Tcp3d_resetEdmaChParam (IN Tcp3d_Instance *tcp3dInst,\r
129 IN uint32_t pingNumCBs,\r
130 IN uint32_t pongNumCBs);\r
131 static void Tcp3d_initPseudoParam ( IN Tcp3d_Instance *tcp3dInst,\r
132 IN uint32_t codeBlocks,\r
133 IN Tcp3d_Config *pingConfig,\r
134 IN Tcp3d_Config *pongConfig);\r
135 static void Tcp3d_resetPseudoParam (IN Tcp3d_Instance *tcp3dInst,\r
136 IN uint32_t codeBlocks);\r
137 static void Tcp3d_setLocalVariables (IN Tcp3d_Instance *tcp3dInst);\r
138 static void Tcp3d_resetRuntimeVariables (IN Tcp3d_Instance *tcp3dInst);\r
139 static void Tcp3d_updateListVariables ( INOUT Tcp3d_Instance *inst,\r
140 IN int32_t pingOutIdx,\r
141 IN int32_t pongOutIdx );\r
142 \r
143 #endif /* _TCP3D_DRV_PRIV_H_ */\r