NOTICE OF RELOCATION
[keystone-rtos/tcp3d-lld.git] / src / tcp3d_drv_priv.h
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_updatePingListVariables ( INOUT  Tcp3d_Instance *inst,\r
140                                             IN     int32_t        pingOutIdx );\r
141 static void Tcp3d_updatePongListVariables ( INOUT  Tcp3d_Instance *inst,\r
142                                             IN     int32_t        pongOutIdx );\r
143 \r
144 #endif /* _TCP3D_DRV_PRIV_H_ */\r