Fix for SDOCM00107501:Compilation issues observed when compiling with C++
[keystone-rtos/netapi.git] / ti / runtime / netapi / netapi_tune.h
1 /******************************************************************************
2  * FILE PURPOSE:  netapi tunable parameters (compile time)
3  ******************************************************************************
4  * FILE NAME:   netapi_tune.h
5  *
6  * DESCRIPTION:Tuneable (compile time) parameters for user space transport library
7  *
8  * REVISION HISTORY:
9  *
10  *  Copyright (c) Texas Instruments Incorporated 2013
11  *
12  *  Redistribution and use in source and binary forms, with or without
13  *  modification, are permitted provided that the following conditions
14  *  are met:
15  *
16  *    Redistributions of source code must retain the above copyright
17  *    notice, this list of conditions and the following disclaimer.
18  *
19  *    Redistributions in binary form must reproduce the above copyright
20  *    notice, this list of conditions and the following disclaimer in the
21  *    documentation and/or other materials provided with the
22  *    distribution.
23  *
24  *    Neither the name of Texas Instruments Incorporated nor the names of
25  *    its contributors may be used to endorse or promote products derived
26  *    from this software without specific prior written permission.
27  *
28  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
29  *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
30  *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
31  *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
32  *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
33  *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
34  *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
35  *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
36  *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
37  *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
38  *  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
39  *
40  */
41 /* ============================================================= */
43 /**
44  *   @file netapi_tune.h
45  *   @brief Netapi Tuneable (compile time) parameters for user space transport library
46  */
49 #ifndef __NETAPI_TUNE__H
50 #define __NETAPI_TUNE__H
52 #ifdef __cplusplus
53 extern "C" {
54 #endif
55 /**
56  * @ingroup tune_parameters
57  * @def NETAPI_ENABLE_SECURITY
58  *      Define this to enable securtiy.
59  * @note Libraries using netapi need to be built with SA enabled
60 */
61 #define NETAPI_ENABLE_SECURITY 
64 /**
65  * @ingroup tune_parameters
66  * @def NETAPI_USE_DDR
67  *      Define this to enable use of cached DDR for buffers and descriptors. 
68  * @note Do not define if USE_MSMC defined below
69 */
70 #define NETAPI_USE_DDR
73 #ifdef NETAPI_USE_DDR
74 /**
75  * @ingroup tune_parameters
76  * @def NETAPI_TUNE_USE_CACHE_OPS
77  *      Define this to enable use of cached DDR for buffers and descriptors. 
78  * @note Do not define if USE_MSMC defined below
79 */
80 #define NETAPI_TUNE_USE_CACHE_OPS   //for appleton, no cache coherency with netcp & ARM 
81 #endif
83 /**
84  * @ingroup tune_parameters
85  * @def NETAPI_USE_MSMC
86  *      Define this to enable use of un-cached MSMC for buffers and descriptors 
87  * @note Do not define if USE_DDR defined above 
88 */
89 //#define NETAPI_USE_MSMC
91 #ifdef NETAPI_USE_MSMC
92 #ifdef NETAPI_USE_DDR
93 #error "only define NETAPO_USE_MSMC or NETAPI_USE_DDR"
94 #endif
95 #endif
97 /**
98  * @ingroup tune_parameters
99 * @def TUNE_NETAPI_NUM_CORES
100 *       This defines the number of cores (theads) 
101  */
102 #define TUNE_NETAPI_NUM_CORES 5
104 /**
105  * @ingroup tune_parameters
106  * @def TUNE_NETAPI_PERM_MEM_SZ
107  *      This defines how much contiguous memory to grab. This is used for
108  *      descriptors and buffers in the case of uncached configuration only.  
109  *      descriptors and buffers.  Can't be bigger than  msmc if
110  *      MSMC memory is being using uncached .  This can be set at netapi_init via NETAPI_CFG_T
111  */
112 #define TUNE_NETAPI_PERM_MEM_SZ   (2*1024*1024) 
114 /**
115  * @ingroup tune_parameters
116  * @def TUNE_NETAPI_MAX_PKTIO
117  *      This defines the number of GLOBAL pkt io channels
118  */
119 #define TUNE_NETAPI_MAX_PKTIO 16
121 /**
122  * @ingroup tune_parameters
123  * @def TUNE_NETAPI_DEFAULT_BUFFER_SIZE
124  *      This defines the size of the netapi default pktlib heap buffers This can be set at @ref netapi_init 
125  */
126 #define TUNE_NETAPI_DEFAULT_BUFFER_SIZE 1600  
129 /**
130  * @ingroup tune_parameters
131  * @def TUNE_NETAPI_DEFAULT_NUM_BUFFERS
132  *      This defines the number of netapi default pktlib heap buffers (and assoc descriptors)
133  *      this can be set at @ref netapi_init
134  */
135 #define TUNE_NETAPI_DEFAULT_NUM_BUFFERS  200 
137 /**
138  * @ingroup tune_parameters
139  * @def TUNE_NETAPI_DEFAULT_NUM_SOLO_DESCRIPTORS
140  *      This defines the number of netapi default pkt lib heap solo descriptors
141  *      this can be set at @ref netapi_init
142  */
143 #define TUNE_NETAPI_DEFAULT_NUM_SOLO_DESCRIPTORS  100 
145 /**
146  * @ingroup tune_parameters
147  * @def  NETAPI_INCLUDE_SCHED
148  *      Define this to include the scheduler component
149  */
150 #define NETAPI_INCLUDE_SCHED 
152 /**
153  * @ingroup tune_parameters
154  * @def  TUNE_NETAPI_QM_CONFIG_MAX_DESC_NUM
155  *      This defines the number of of QM descriptors (total). This can be set set in @ref netapi_init
156  * @note Must be a power or 2
157 */
158 #define TUNE_NETAPI_QM_CONFIG_MAX_DESC_NUM  2048 /* 16384 is abs max */
161 /**
162  * @ingroup tune_parameters
163  * @def  TUNE_NETAPI_NUM_LOCAL_DESC
164  *      This defines the number of of QM descriptors (total). This can be set set in @ref netapi_init
165 */
166 #define TUNE_NETAPI_NUM_LOCAL_DESC  64 
169 /**
170  * @ingroup tune_parameters
171  * @def TUNE_NETAPI_NUM_GLOBAL_DESC
172  *      This defines the number of global descriptors.
173  * @note Must be a power or 2
174 */
175 #define TUNE_NETAPI_NUM_GLOBAL_DESC  1024
177 /**
178  * @ingroup tune_parameters
179  * @def  TUNE_NETAPI_DESC_SIZE
180  *      This defines the descriptor size
181  * @note This define should NOT be changes
182  */
183 #define TUNE_NETAPI_DESC_SIZE  128
185 #ifdef NETAPI_USE_DDR
186 /**
187  * @ingroup tune_parameters
188  * @def  TUNE_NETAPI_QM_START_INDEX
189  *      This defines the queue manager start index
190  * @note This must reflect what the kernel is uding for their region, see device tree blob for details.
191  */
192 #define TUNE_NETAPI_QM_START_INDEX  0x2000  //WARNING:  must reflect what kernel is using for their region, see device tree blob
194 //#define TUNE_NETAPI_QM_START_INDEX  0
195 /**
196  * @ingroup tune_parameters
197  * @def  TUNE_NETAPI_QM_GLOBAL_REGION
198  *      This defines the queue manager global region
199  * @note This must reflect what the kernel is using for their region, see device tree blob for details.
200  */
201 #define TUNE_NETAPI_QM_GLOBAL_REGION 18  //WARNING: must reflect what kernel is using for their region, see device tree blob
202 //#define TUNE_NETAPI_QM_GLOBAL_REGION 0  //WARNING: must reflect what kernel is using for their region, see device tree blob
204 #else //use msmc..
205 /**
206  * @ingroup tune_parameters
207  * @def  TUNE_NETAPI_QM_START_INDEX
208   *     This defines the queue manager start index
209  * @note This must reflect what the kernel is uding for their region, see device tree blob for details.
210  */
211 #define TUNE_NETAPI_QM_START_INDEX  0  //ok to use 0 since kernel is somewhere higher
213 /**
214  * @ingroup tune_parameters
215  * @def  TUNE_NETAPI_QM_GLOBAL_REGION
216  *      This defines the queue manager global region
217  * @note This must reflect what the kernel is uding for their region, see device tree blob for details.
218  */
219 #define  TUNE_NETAPI_QM_GLOBAL_REGION 0  //ok to use 0 since msmc addr < ddr addr 
221 #endif
223 /**
224  * @ingroup tune_parameters
225  * @def TUNE_NETAPI_NWAL_ENABLE_PASS_LOOPBACK
226  *      Define this to 1 for debutg mode where NETCP just loops pkts that tx back to rx
227  */
228 #define TUNE_NETAPI_NWAL_ENABLE_PASS_LOOPBACK 0  /*1*/
231 /// @cond INTERNAL
232 //(10) NWAL (internal) config. Should not have to change
233 #define TUNE_NETAPI_CONFIG_MAX_PA_TO_SA_DESC       32
234 #define TUNE_NETAPI_CONFIG_MAX_SA_TO_PA_DESC       200
235 /// @endcond
237 /**
238  * @ingroup tune_parameters
239  * @def TUNE_NETAPI_MAX_NUM_MAC
240  *      This defines the number of logical mac addresses
241  */
242 #define TUNE_NETAPI_MAX_NUM_MAC                64
244 /**
245  * @ingroup tune_parameters
246  * @def TUNE_NETAPI_MAX_NUM_IP
247  *      This defines the number of ip addresses
248  */
249 #define TUNE_NETAPI_MAX_NUM_IP                64
251 /**
252  * @ingroup tune_parameters
253  * @def TUNE_NETAPI_MAX_NUM_PORTS_PER_CORE
254  *      This defines the number of ports per core
255  */
256 #define TUNE_NETAPI_MAX_NUM_PORTS_PER_CORE     4
258 /**
259  * @ingroup tune_parameters
260  * @def TUNE_NETAPI_MAX_NUM_PORTS
261  *      This defines the number maximum number of ports
262  */
263 #define TUNE_NETAPI_MAX_NUM_PORTS     (TUNE_NETAPI_MAX_NUM_PORTS_PER_CORE * (TUNE_NETAPI_NUM_CORES)) 
265 #ifdef NETAPI_ENABLE_SECURITY
266 /**
267  * @ingroup tune_parameters
268  * @def TUNE_NETAPI_MAX_NUM_IPSEC_CHANNELS
269  *      This defines the number maximum number of ipsec channels
270  */
271 #define TUNE_NETAPI_MAX_NUM_IPSEC_CHANNELS     128
272 #else
273 /**
274  * @ingroup tune_parameters
275  * @def TUNE_NETAPI_MAX_NUM_IPSEC_CHANNELS
276  *      This defines the number maximum number of ipsec channels
277  */
278 #define TUNE_NETAPI_MAX_NUM_IPSEC_CHANNELS     0
279 #endif
281 /**
282  * @ingroup tune_parameters
283  * @def TUNE_NETAPI_MAX_NUM_L2_L3_HDRS
284  *      This defines the number maximum number of L2_L3 headers to reserve  in the nwal layer. This should be kept small as transport lib does not expose this inwal feature by default
285  */
286 #define TUNE_NETAPI_MAX_NUM_L2_L3_HDRS         3
288 /**
289  * @ingroup tune_parameters
290  * @def TUNE_NETAPI_MAX_NUM_TRANS
291  *      This defines the number maximum number of transactions with NETCP that can be outstanding at any one time 
292  */
293 #define TUNE_NETAPI_MAX_NUM_TRANS              (TUNE_NETAPI_MAX_NUM_MAC + TUNE_NETAPI_MAX_NUM_IP + TUNE_NETAPI_MAX_NUM_PORTS + TUNE_NETAPI_MAX_NUM_IPSEC_CHANNELS)
296 /// @cond INTERNAL
297 /* PA control buffer pool (internal) */
298 #define TUNE_NETAPI_CONFIG_MAX_CTL_RXTX_BUF_SIZE 520
299 #define TUNE_NETAPI_CONFIG_NUM_CTL_RX_BUF  16 
300 #define TUNE_NETAPI_CONFIG_NUM_CTL_TX_BUF  16 
301 /// @endcond
303 /**
304  * @ingroup tune_parameters
305  * @def  TUNE_NETAPI_MAX_BURST_RCV
306  *      This defines the maximum number of packets to receive in one pktio poll.
307  */
308 #define TUNE_NETAPI_MAX_BURST_RCV 32
310 /**
311  * @ingroup tune_parameters
312  * @def  TUNE_NETAPI_NUM_TIMER_CELLS
313  *      This defines the number of hash bins in a timer group.
314  */
315 #define TUNE_NETAPI_NUM_TIMER_CELLS  128
316 /**
317  * @ingroup tune_parameters
318  * @def  TUNE_NETAPI_NUM_GLOBAL_TIMERS
319  *      This defines the number of global timer blocks
320  */
321 #define TUNE_NETAPI_NUM_GLOBAL_TIMERS  4
323 /**
324  * @ingroup tune_parameters
325  * @def  TUNE_NETAPI_MAX_HEAPS
326  *      This defines the maximum number of heaps one NETAPI instance can create
327  */
328 #define TUNE_NETAPI_MAX_HEAPS  4
330 /**
331  * @ingroup tune_parameters
332  * @def  TUNE_NETAPI_MAX_CLASSIFIERS
333  *      This defines the maximum number of classifiers
334  */
335 #define TUNE_NETAPI_MAX_CLASSIFIERS 16
337 /**
338  * @ingroup tune_parameters
339  * @def  TUNE_NETAPI_MAX_BUF_POOLS_IN_FLOW
340  *      This defines the  maximum number of buffer pools in a flow - A flow is used by hardware
341  *      when it needs a buffer for a receive packet.  This define allows the maximum number 
342  *      of pools (free descriptor queues) to be defined for a flow, so that different sized packets 
343  *      can be allocated from different memory areas.
344  * @note This define should NOT be changed as HW assumes at most 4 now
345  */
346 #define TUNE_NETAPI_MAX_BUF_POOLS_IN_FLOW  4
349 /**
350  * @ingroup tune_parameters
351  * @def  TUNE_NETAPI_MAX_FLOWS
352  *      This defines the maximum number of flows
353  */
354 #define TUNE_NETAPI_MAX_FLOWS  4   //app defined flows
356 /**
357  * @ingroup tune_parameters
358 * @def  TUNE_NETAPI_MAX_SA
359 *       This defines the maximum number of security associations
360 */
361 #define TUNE_NETAPI_MAX_SA 128   //rx&tx combined (so MAX_SA/4 tunnels typically)
363 /**
364  * @ingroup tune_parameters
365  * @def  TUNE_NETAPI_MAX_POLICY
366  *      This defines the maximum number of security policies.
367 */
368 #define TUNE_NETAPI_MAX_POLICY 128  //rx policies
370 #ifdef __cplusplus
372 #endif
373 #endif