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 /**
186 * @ingroup tune_parameters
187 * @def TUNE_NETAPI_NWAL_ENABLE_PASS_LOOPBACK
188 * Define this to 1 for debutg mode where NETCP just loops pkts that tx back to rx
189 */
190 #define TUNE_NETAPI_NWAL_ENABLE_PASS_LOOPBACK 0 /*1*/
193 /// @cond INTERNAL
194 //(10) NWAL (internal) config. Should not have to change
195 #define TUNE_NETAPI_CONFIG_MAX_PA_TO_SA_DESC 32
196 #define TUNE_NETAPI_CONFIG_MAX_SA_TO_PA_DESC 200
197 /// @endcond
199 /**
200 * @ingroup tune_parameters
201 * @def TUNE_NETAPI_MAX_NUM_MAC
202 * This defines the number of logical mac addresses
203 */
204 #define TUNE_NETAPI_MAX_NUM_MAC 64
206 /**
207 * @ingroup tune_parameters
208 * @def TUNE_NETAPI_MAX_NUM_IP
209 * This defines the number of ip addresses
210 */
211 #define TUNE_NETAPI_MAX_NUM_IP 64
213 /**
214 * @ingroup tune_parameters
215 * @def TUNE_NETAPI_MAX_NUM_PORTS_PER_CORE
216 * This defines the number of ports per core
217 */
218 #define TUNE_NETAPI_MAX_NUM_PORTS_PER_CORE 4
220 /**
221 * @ingroup tune_parameters
222 * @def TUNE_NETAPI_MAX_NUM_PORTS
223 * This defines the number maximum number of ports
224 */
225 #define TUNE_NETAPI_MAX_NUM_PORTS (TUNE_NETAPI_MAX_NUM_PORTS_PER_CORE * (TUNE_NETAPI_NUM_CORES))
227 #ifdef NETAPI_ENABLE_SECURITY
228 /**
229 * @ingroup tune_parameters
230 * @def TUNE_NETAPI_MAX_NUM_IPSEC_CHANNELS
231 * This defines the number maximum number of ipsec channels
232 */
233 #define TUNE_NETAPI_MAX_NUM_IPSEC_CHANNELS 128
234 #else
235 /**
236 * @ingroup tune_parameters
237 * @def TUNE_NETAPI_MAX_NUM_IPSEC_CHANNELS
238 * This defines the number maximum number of ipsec channels
239 */
240 #define TUNE_NETAPI_MAX_NUM_IPSEC_CHANNELS 0
241 #endif
243 /**
244 * @ingroup tune_parameters
245 * @def TUNE_NETAPI_MAX_NUM_L2_L3_HDRS
246 * 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
247 */
248 #define TUNE_NETAPI_MAX_NUM_L2_L3_HDRS 3
250 /**
251 * @ingroup tune_parameters
252 * @def TUNE_NETAPI_MAX_NUM_TRANS
253 * This defines the number maximum number of transactions with NETCP that can be outstanding at any one time
254 */
255 #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)
258 /// @cond INTERNAL
259 /* PA control buffer pool (internal) */
260 #define TUNE_NETAPI_CONFIG_MAX_CTL_RXTX_BUF_SIZE 2400
261 #define TUNE_NETAPI_CONFIG_NUM_CTL_RX_BUF 16
262 #define TUNE_NETAPI_CONFIG_NUM_CTL_TX_BUF 16
263 /// @endcond
265 /**
266 * @ingroup tune_parameters
267 * @def TUNE_NETAPI_MAX_BURST_RCV
268 * This defines the maximum number of packets to receive in one pktio poll.
269 */
270 #define TUNE_NETAPI_MAX_BURST_RCV 32
272 /**
273 * @ingroup tune_parameters
274 * @def TUNE_NETAPI_NUM_TIMER_CELLS
275 * This defines the number of hash bins in a timer group.
276 */
277 #define TUNE_NETAPI_NUM_TIMER_CELLS 128
278 /**
279 * @ingroup tune_parameters
280 * @def TUNE_NETAPI_NUM_GLOBAL_TIMERS
281 * This defines the number of global timer blocks
282 */
283 #define TUNE_NETAPI_NUM_GLOBAL_TIMERS 4
285 /**
286 * @ingroup tune_parameters
287 * @def TUNE_NETAPI_MAX_HEAPS
288 * This defines the maximum number of heaps one NETAPI instance can create
289 */
290 #define TUNE_NETAPI_MAX_HEAPS 4
292 /**
293 * @ingroup tune_parameters
294 * @def TUNE_NETAPI_MAX_CLASSIFIERS
295 * This defines the maximum number of classifiers
296 */
297 #define TUNE_NETAPI_MAX_CLASSIFIERS 16
299 /**
300 * @ingroup tune_parameters
301 * @def TUNE_NETAPI_MAX_BUF_POOLS_IN_FLOW
302 * This defines the maximum number of buffer pools in a flow - A flow is used by hardware
303 * when it needs a buffer for a receive packet. This define allows the maximum number
304 * of pools (free descriptor queues) to be defined for a flow, so that different sized packets
305 * can be allocated from different memory areas.
306 * @note This define should NOT be changed as HW assumes at most 4 now
307 */
308 #define TUNE_NETAPI_MAX_BUF_POOLS_IN_FLOW 4
311 /**
312 * @ingroup tune_parameters
313 * @def TUNE_NETAPI_MAX_FLOWS
314 * This defines the maximum number of flows
315 */
316 #define TUNE_NETAPI_MAX_FLOWS 4 //app defined flows
318 /**
319 * @ingroup tune_parameters
320 * @def TUNE_NETAPI_MAX_SA
321 * This defines the maximum number of security associations
322 */
323 #define TUNE_NETAPI_MAX_SA 128 //rx&tx combined (so MAX_SA/4 tunnels typically)
325 /**
326 * @ingroup tune_parameters
327 * @def TUNE_NETAPI_MAX_POLICY
328 * This defines the maximum number of security policies.
329 */
330 #define TUNE_NETAPI_MAX_POLICY 128 //rx policies
332 #ifdef __cplusplus
333 }
334 #endif
335 #endif