1 /*
2  * Copyright 2008-2012 Freescale Semiconductor Inc.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are met:
6  *     * Redistributions of source code must retain the above copyright
7  *       notice, this list of conditions and the following disclaimer.
8  *     * Redistributions in binary form must reproduce the above copyright
9  *       notice, this list of conditions and the following disclaimer in the
10  *       documentation and/or other materials provided with the distribution.
11  *     * Neither the name of Freescale Semiconductor nor the
12  *       names of its contributors may be used to endorse or promote products
13  *       derived from this software without specific prior written permission.
14  *
15  *
16  * ALTERNATIVELY, this software may be distributed under the terms of the
17  * GNU General Public License ("GPL") as published by the Free Software
18  * Foundation, either version 2 of that License or (at your option) any
19  * later version.
20  *
21  * THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``AS IS'' AND ANY
22  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
23  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
24  * DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY
25  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
26  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
27  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
28  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
32 
33 
34 /******************************************************************************
35  @File          fm_manip.h
36 
37  @Description   FM PCD manip...
38 *//***************************************************************************/
39 #ifndef __FM_MANIP_H
40 #define __FM_MANIP_H
41 
42 #include "std_ext.h"
43 #include "error_ext.h"
44 #include "list_ext.h"
45 
46 #include "fm_cc.h"
47 
48 
49 /***********************************************************************/
50 /*          Header manipulations defines                              */
51 /***********************************************************************/
52 
53 #define NUM_OF_SCRATCH_POOL_BUFFERS             1000 /*TODO - Change it!!*/
54 
55 #if (defined(FM_CAPWAP_SUPPORT) && (DPAA_VERSION == 10))
56 #define HMAN_OC_RMV_N_OR_INSRT_INT_FRM_HDR                      0x2e
57 #define HMAN_OC_INSRT_HDR_BY_TEMPL_N_OR_FRAG_AFTER              0x31
58 #define HMAN_OC_MV_INT_FRAME_HDR_FROM_FRM_TO_BUFFER_PREFFIX     0x2f
59 #define HMAN_OC_CAPWAP_RMV_DTLS_IF_EXIST                        0x30
60 #define HMAN_OC_CAPWAP_REASSEMBLY                               0x11 /* dummy */
61 #define HMAN_OC_CAPWAP_INDEXED_STATS                            0x32 /* dummy */
62 #define HMAN_OC_CAPWAP_FRAGMENTATION                            0x33
63 #else
64 #define HMAN_OC_CAPWAP_MANIP                                    0x2F
65 #define HMAN_OC_CAPWAP_FRAG_CHECK                               0x2E
66 #define HMAN_OC_CAPWAP_FRAGMENTATION                            0x33
67 #define HMAN_OC_CAPWAP_REASSEMBLY                               0x30
68 #endif /* (defined(FM_CAPWAP_SUPPORT) && (DPAA_VERSION == 10)) */
69 #define HMAN_OC_IP_MANIP                                        0x34
70 #define HMAN_OC_IP_FRAGMENTATION                                0x74
71 #define HMAN_OC_IP_REASSEMBLY                                   0xB4
72 #define HMAN_OC_IPSEC_MANIP                                     0xF4
73 #define HMAN_OC                                                 0x35
74 
75 #if (defined(FM_CAPWAP_SUPPORT) && (DPAA_VERSION == 10))
76 #define HMAN_RMV_HDR                               0x80000000
77 #define HMAN_INSRT_INT_FRM_HDR                     0x40000000
78 
79 #define UDP_CHECKSUM_FIELD_OFFSET_FROM_UDP          6
80 #define UDP_CHECKSUM_FIELD_SIZE                     2
81 #define UDP_LENGTH_FIELD_OFFSET_FROM_UDP            4
82 
83 #define IPv4_DSCECN_FIELD_OFFSET_FROM_IP            1
84 #define IPv4_TOTALLENGTH_FIELD_OFFSET_FROM_IP       2
85 #define IPv4_HDRCHECKSUM_FIELD_OFFSET_FROM_IP       10
86 #define VLAN_TAG_FIELD_OFFSET_FROM_ETH              12
87 #define IPv4_ID_FIELD_OFFSET_FROM_IP                4
88 
89 #define IPv6_PAYLOAD_LENGTH_OFFSET_FROM_IP          4
90 #define IPv6_NEXT_HEADER_OFFSET_FROM_IP             6
91 
92 #define FM_PCD_MANIP_CAPWAP_REASM_TABLE_SIZE               0x80
93 #define FM_PCD_MANIP_CAPWAP_REASM_TABLE_ALIGN              8
94 #define FM_PCD_MANIP_CAPWAP_REASM_RFD_SIZE                 32
95 #define FM_PCD_MANIP_CAPWAP_REASM_AUTO_LEARNING_HASH_ENTRY_SIZE 4
96 #define FM_PCD_MANIP_CAPWAP_REASM_TIME_OUT_ENTRY_SIZE      8
97 
98 
99 #define FM_PCD_MANIP_CAPWAP_REASM_TIME_OUT_BETWEEN_FRAMES          0x40000000
100 #define FM_PCD_MANIP_CAPWAP_REASM_HALT_ON_DUPLICATE_FRAG           0x10000000
101 #define FM_PCD_MANIP_CAPWAP_REASM_AUTOMATIC_LEARNIN_HASH_8_WAYS    0x08000000
102 #define FM_PCD_MANIP_CAPWAP_REASM_PR_COPY                          0x00800000
103 
104 #define FM_PCD_MANIP_CAPWAP_FRAG_COMPR_OPTION_FIELD_EN             0x80000000
105 
106 #define FM_PCD_MANIP_INDEXED_STATS_ENTRY_SIZE               4
107 #define FM_PCD_MANIP_INDEXED_STATS_CNIA                     0x20000000
108 #define FM_PCD_MANIP_INDEXED_STATS_DPD                      0x10000000
109 #endif /* (defined(FM_CAPWAP_SUPPORT) && (DPAA_VERSION == 10)) */
110 
111 #if (DPAA_VERSION >= 11)
112 #define FM_PCD_MANIP_CAPWAP_DTLS                            0x00040000
113 #define FM_PCD_MANIP_CAPWAP_NADEN                           0x20000000
114 
115 #define FM_PCD_MANIP_CAPWAP_FRAG_CHECK_MTU_SHIFT            16
116 #define FM_PCD_MANIP_CAPWAP_FRAG_CHECK_NO_FRAGMENTATION     0xFFFF0000
117 #define FM_PCD_MANIP_CAPWAP_FRAG_CHECK_CNIA                 0x20000000
118 
119 #define FM_PCD_MANIP_CAPWAP_FRAG_COMPRESS_EN                0x04000000
120 #define FM_PCD_MANIP_CAPWAP_FRAG_SCRATCH_BPID               24
121 #define FM_PCD_MANIP_CAPWAP_FRAG_SG_BDID_EN                 0x08000000
122 #define FM_PCD_MANIP_CAPWAP_FRAG_SG_BDID_MASK               0xFF000000
123 #define FM_PCD_MANIP_CAPWAP_FRAG_SG_BDID_SHIFT              24
124 #endif /* (DPAA_VERSION >= 11) */
125 
126 #define FM_PCD_MANIP_REASM_TABLE_SIZE                    0x40
127 #define FM_PCD_MANIP_REASM_TABLE_ALIGN                   8
128 
129 #define FM_PCD_MANIP_REASM_COMMON_PARAM_TABLE_SIZE       64
130 #define FM_PCD_MANIP_REASM_COMMON_PARAM_TABLE_ALIGN      8
131 #define FM_PCD_MANIP_REASM_TIME_OUT_BETWEEN_FRAMES       0x80000000
132 #define FM_PCD_MANIP_REASM_COUPLING_ENABLE               0x40000000
133 #define FM_PCD_MANIP_REASM_COUPLING_MASK                 0xFF000000
134 #define FM_PCD_MANIP_REASM_COUPLING_SHIFT                24
135 #define FM_PCD_MANIP_REASM_LIODN_MASK                    0x0000003F
136 #define FM_PCD_MANIP_REASM_LIODN_SHIFT                   56
137 #define FM_PCD_MANIP_REASM_ELIODN_MASK                   0x000003c0
138 #define FM_PCD_MANIP_REASM_ELIODN_SHIFT                  38
139 #define FM_PCD_MANIP_REASM_COMMON_INT_BUFFER_IDX_MASK    0x000000FF
140 #define FM_PCD_MANIP_REASM_COMMON_INT_BUFFER_IDX_SHIFT   24
141 #define FM_PCD_MANIP_REASM_TIMEOUT_THREAD_THRESH        1024
142 
143 #define FM_PCD_MANIP_IP_MTU_SHIFT                           16
144 #define FM_PCD_MANIP_IP_NO_FRAGMENTATION                    0xFFFF0000
145 #define FM_PCD_MANIP_IP_CNIA                                0x20000000
146 
147 #define FM_PCD_MANIP_IP_FRAG_DF_SHIFT                       28
148 #define FM_PCD_MANIP_IP_FRAG_SCRATCH_BPID                   24
149 #define FM_PCD_MANIP_IP_FRAG_SG_BDID_EN                     0x08000000
150 #define FM_PCD_MANIP_IP_FRAG_SG_BDID_MASK                   0xFF000000
151 #define FM_PCD_MANIP_IP_FRAG_SG_BDID_SHIFT                  24
152 
153 #define FM_PCD_MANIP_IPSEC_DEC                              0x10000000
154 #define FM_PCD_MANIP_IPSEC_VIPV_EN                          0x08000000
155 #define FM_PCD_MANIP_IPSEC_ECN_EN                           0x04000000
156 #define FM_PCD_MANIP_IPSEC_DSCP_EN                          0x02000000
157 #define FM_PCD_MANIP_IPSEC_VIPL_EN                          0x01000000
158 #define FM_PCD_MANIP_IPSEC_NADEN                            0x20000000
159 
160 #define FM_PCD_MANIP_IPSEC_IP_HDR_LEN_MASK                  0x00FF0000
161 #define FM_PCD_MANIP_IPSEC_IP_HDR_LEN_SHIFT                 16
162 
163 #define FM_PCD_MANIP_IPSEC_ARW_SIZE_MASK                    0xFFFF0000
164 #define FM_PCD_MANIP_IPSEC_ARW_SIZE_SHIFT                   16
165 
166 #define e_FM_MANIP_IP_INDX                                  1
167 
168 #define HMCD_OPCODE_GENERIC_RMV                 0x01
169 #define HMCD_OPCODE_GENERIC_INSRT               0x02
170 #define HMCD_OPCODE_GENERIC_REPLACE             0x05
171 #define HMCD_OPCODE_L2_RMV                      0x08
172 #define HMCD_OPCODE_L2_INSRT                    0x09
173 #define HMCD_OPCODE_VLAN_PRI_UPDATE             0x0B
174 #define HMCD_OPCODE_IPV4_UPDATE                 0x0C
175 #define HMCD_OPCODE_IPV6_UPDATE                 0x10
176 #define HMCD_OPCODE_TCP_UDP_UPDATE              0x0E
177 #define HMCD_OPCODE_TCP_UDP_CHECKSUM            0x14
178 #define HMCD_OPCODE_REPLACE_IP                  0x12
179 #define HMCD_OPCODE_RMV_TILL                    0x15
180 #define HMCD_OPCODE_UDP_INSRT                   0x16
181 #define HMCD_OPCODE_IP_INSRT                    0x17
182 #define HMCD_OPCODE_CAPWAP_RMV                  0x18
183 #define HMCD_OPCODE_CAPWAP_INSRT                0x18
184 #define HMCD_OPCODE_GEN_FIELD_REPLACE           0x19
185 
186 #define HMCD_LAST                               0x00800000
187 
188 #define HMCD_DSCP_VALUES                        64
189 
190 #define HMCD_BASIC_SIZE                         4
191 #define HMCD_PTR_SIZE                           4
192 #define HMCD_PARAM_SIZE                         4
193 #define HMCD_IPV4_ADDR_SIZE                     4
194 #define HMCD_IPV6_ADDR_SIZE                     0x10
195 #define HMCD_L4_HDR_SIZE                        8
196 
197 #define HMCD_CAPWAP_INSRT                       0x00010000
198 #define HMCD_INSRT_UDP_LITE                     0x00010000
199 #define HMCD_IP_ID_MASK                         0x0000FFFF
200 #define HMCD_IP_SIZE_MASK                       0x0000FF00
201 #define HMCD_IP_SIZE_SHIFT                      8
202 #define HMCD_IP_LAST_PID_MASK                   0x000000FF
203 #define HMCD_IP_OR_QOS                          0x00010000
204 #define HMCD_IP_L4_CS_CALC                      0x00040000
205 #define HMCD_IP_DF_MODE                         0x00400000
206 
207 
208 #define HMCD_OC_SHIFT                           24
209 
210 #define HMCD_RMV_OFFSET_SHIFT                   0
211 #define HMCD_RMV_SIZE_SHIFT                     8
212 
213 #define HMCD_INSRT_OFFSET_SHIFT                 0
214 #define HMCD_INSRT_SIZE_SHIFT                   8
215 
216 #define HMTD_CFG_TYPE                           0x4000
217 #define HMTD_CFG_EXT_HMCT                       0x0080
218 #define HMTD_CFG_PRS_AFTER_HM                   0x0040
219 #define HMTD_CFG_NEXT_AD_EN                     0x0020
220 
221 #define HMCD_RMV_L2_ETHERNET                    0
222 #define HMCD_RMV_L2_STACKED_QTAGS               1
223 #define HMCD_RMV_L2_ETHERNET_AND_MPLS           2
224 #define HMCD_RMV_L2_MPLS                        3
225 #define HMCD_RMV_L2_PPPOE                        4
226 
227 #define HMCD_INSRT_L2_MPLS                      0
228 #define HMCD_INSRT_N_UPDATE_L2_MPLS             1
229 #define HMCD_INSRT_L2_PPPOE                     2
230 #define HMCD_INSRT_L2_SIZE_SHIFT                24
231 
232 #define HMCD_L2_MODE_SHIFT                      16
233 
234 #define HMCD_VLAN_PRI_REP_MODE_SHIFT            16
235 #define HMCD_VLAN_PRI_UPDATE                    0
236 #define HMCD_VLAN_PRI_UPDATE_DSCP_TO_VPRI       1
237 
238 #define HMCD_IPV4_UPDATE_TTL                    0x00000001
239 #define HMCD_IPV4_UPDATE_TOS                    0x00000002
240 #define HMCD_IPV4_UPDATE_DST                    0x00000020
241 #define HMCD_IPV4_UPDATE_SRC                    0x00000040
242 #define HMCD_IPV4_UPDATE_ID                     0x00000080
243 #define HMCD_IPV4_UPDATE_TOS_SHIFT              8
244 
245 #define HMCD_IPV6_UPDATE_HL                     0x00000001
246 #define HMCD_IPV6_UPDATE_TC                     0x00000002
247 #define HMCD_IPV6_UPDATE_DST                    0x00000040
248 #define HMCD_IPV6_UPDATE_SRC                    0x00000080
249 #define HMCD_IPV6_UPDATE_TC_SHIFT               8
250 
251 #define HMCD_TCP_UDP_UPDATE_DST                 0x00004000
252 #define HMCD_TCP_UDP_UPDATE_SRC                 0x00008000
253 #define HMCD_TCP_UDP_UPDATE_SRC_SHIFT           16
254 
255 #define HMCD_IP_REPLACE_REPLACE_IPV4            0x00000000
256 #define HMCD_IP_REPLACE_REPLACE_IPV6            0x00010000
257 #define HMCD_IP_REPLACE_TTL_HL                  0x00200000
258 #define HMCD_IP_REPLACE_ID                      0x00400000
259 
260 #define HMCD_IP_REPLACE_L3HDRSIZE_SHIFT         24
261 
262 #define HMCD_GEN_FIELD_SIZE_SHIFT               16
263 #define HMCD_GEN_FIELD_SRC_OFF_SHIFT            8
264 #define HMCD_GEN_FIELD_DST_OFF_SHIFT            0
265 #define HMCD_GEN_FIELD_MASK_EN                  0x00400000
266 
267 #define HMCD_GEN_FIELD_MASK_OFF_SHIFT           16
268 #define HMCD_GEN_FIELD_MASK_SHIFT               24
269 
270 #define DSCP_TO_VLAN_TABLE_SIZE                    32
271 
272 #define MANIP_GET_HMCT_SIZE(h_Manip)                    (((t_FmPcdManip *)h_Manip)->tableSize)
273 #define MANIP_GET_DATA_SIZE(h_Manip)                    (((t_FmPcdManip *)h_Manip)->dataSize)
274 
275 #define MANIP_GET_HMCT_PTR(h_Manip)                     (((t_FmPcdManip *)h_Manip)->p_Hmct)
276 #define MANIP_GET_DATA_PTR(h_Manip)                     (((t_FmPcdManip *)h_Manip)->p_Data)
277 
278 #define MANIP_SET_HMCT_PTR(h_Manip, h_NewPtr)           (((t_FmPcdManip *)h_Manip)->p_Hmct = h_NewPtr)
279 #define MANIP_SET_DATA_PTR(h_Manip, h_NewPtr)           (((t_FmPcdManip *)h_Manip)->p_Data = h_NewPtr)
280 
281 #define MANIP_GET_HMTD_PTR(h_Manip)                     (((t_FmPcdManip *)h_Manip)->h_Ad)
282 #define MANIP_DONT_REPARSE(h_Manip)                     (((t_FmPcdManip *)h_Manip)->dontParseAfterManip)
283 #define MANIP_SET_PREV(h_Manip, h_Prev)                 (((t_FmPcdManip *)h_Manip)->h_PrevManip = h_Prev)
284 #define MANIP_GET_OWNERS(h_Manip)                       (((t_FmPcdManip *)h_Manip)->owner)
285 #define MANIP_GET_TYPE(h_Manip)                         (((t_FmPcdManip *)h_Manip)->type)
286 #define MANIP_SET_UNIFIED_TBL_PTR_INDICATION(h_Manip)   (((t_FmPcdManip *)h_Manip)->unifiedTablePtr = TRUE)
287 #define MANIP_GET_MURAM(h_Manip)                        (((t_FmPcd *)((t_FmPcdManip *)h_Manip)->h_FmPcd)->h_FmMuram)
288 #define MANIP_FREE_HMTD(h_Manip)                        \
289         {if (((t_FmPcdManip *)h_Manip)->muramAllocate)    \
290             FM_MURAM_FreeMem(((t_FmPcd *)((t_FmPcdManip *)h_Manip)->h_FmPcd)->h_FmMuram, ((t_FmPcdManip *)h_Manip)->h_Ad);\
291         else                                            \
292             XX_Free(((t_FmPcdManip *)h_Manip)->h_Ad);    \
293         ((t_FmPcdManip *)h_Manip)->h_Ad = NULL;            \
294         }
295 /* position regarding Manip SW structure */
296 #define MANIP_IS_FIRST(h_Manip)                         (!(((t_FmPcdManip *)h_Manip)->h_PrevManip))
297 #define MANIP_IS_CASCADED(h_Manip)                       (((t_FmPcdManip *)h_Manip)->cascaded)
298 #define MANIP_IS_UNIFIED(h_Manip)                       (!(((t_FmPcdManip *)h_Manip)->unifiedPosition == e_MANIP_UNIFIED_NONE))
299 #define MANIP_IS_UNIFIED_NON_FIRST(h_Manip)             ((((t_FmPcdManip *)h_Manip)->unifiedPosition == e_MANIP_UNIFIED_MID) || \
300                                                          (((t_FmPcdManip *)h_Manip)->unifiedPosition == e_MANIP_UNIFIED_LAST))
301 #define MANIP_IS_UNIFIED_NON_LAST(h_Manip)              ((((t_FmPcdManip *)h_Manip)->unifiedPosition == e_MANIP_UNIFIED_FIRST) ||\
302                                                          (((t_FmPcdManip *)h_Manip)->unifiedPosition == e_MANIP_UNIFIED_MID))
303 #define MANIP_IS_UNIFIED_FIRST(h_Manip)                    (((t_FmPcdManip *)h_Manip)->unifiedPosition == e_MANIP_UNIFIED_FIRST)
304 #define MANIP_IS_UNIFIED_LAST(h_Manip)                   (((t_FmPcdManip *)h_Manip)->unifiedPosition == e_MANIP_UNIFIED_LAST)
305 
306 #define MANIP_UPDATE_UNIFIED_POSITION(h_Manip)          (((t_FmPcdManip *)h_Manip)->unifiedPosition = \
307                                                          (((t_FmPcdManip *)h_Manip)->unifiedPosition == e_MANIP_UNIFIED_NONE)? \
308                                                             e_MANIP_UNIFIED_LAST : e_MANIP_UNIFIED_MID)
309 
310 typedef enum e_ManipUnifiedPosition {
311     e_MANIP_UNIFIED_NONE = 0,
312     e_MANIP_UNIFIED_FIRST,
313     e_MANIP_UNIFIED_MID,
314     e_MANIP_UNIFIED_LAST
315 } e_ManipUnifiedPosition;
316 
317 typedef enum e_ManipInfo {
318     e_MANIP_HMTD,
319     e_MANIP_HMCT,
320     e_MANIP_HANDLER_TABLE_OWNER
321 }e_ManipInfo;
322 /***********************************************************************/
323 /*          Memory map                                                 */
324 /***********************************************************************/
325 #if defined(__MWERKS__) && !defined(__GNUC__)
326 #pragma pack(push,1)
327 #endif /* defined(__MWERKS__) && ... */
328 
329 #if (defined(FM_CAPWAP_SUPPORT) && (DPAA_VERSION == 10))
330 typedef struct t_CapwapReasmPram {
331     volatile uint32_t mode;
332     volatile uint32_t autoLearnHashTblPtr;
333     volatile uint32_t intStatsTblPtr;
334     volatile uint32_t reasmFrmDescPoolTblPtr;
335     volatile uint32_t reasmFrmDescIndexPoolTblPtr;
336     volatile uint32_t timeOutTblPtr;
337     volatile uint32_t bufferPoolIdAndRisc1SetIndexes;
338     volatile uint32_t risc23SetIndexes;
339     volatile uint32_t risc4SetIndexesAndExtendedStatsTblPtr;
340     volatile uint32_t extendedStatsTblPtr;
341     volatile uint32_t expirationDelay;
342     volatile uint32_t totalProcessedFragCounter;
343     volatile uint32_t totalUnsuccessfulReasmFramesCounter;
344     volatile uint32_t totalDuplicatedFragCounter;
345     volatile uint32_t totalMalformdFragCounter;
346     volatile uint32_t totalTimeOutCounter;
347     volatile uint32_t totalSetBusyCounter;
348     volatile uint32_t totalRfdPoolBusyCounter;
349     volatile uint32_t totalDiscardedFragsCounter;
350     volatile uint32_t totalMoreThan16FramesCounter;
351     volatile uint32_t internalBufferBusy;
352     volatile uint32_t externalBufferBusy;
353     volatile uint32_t reserved1[4];
354 } t_CapwapReasmPram;
355 #endif /* (defined(FM_CAPWAP_SUPPORT) && (DPAA_VERSION == 10)) */
356 
357 typedef _Packed struct t_ReassTbl {
358     volatile uint16_t waysNumAndSetSize;
359     volatile uint16_t autoLearnHashKeyMask;
360     volatile uint32_t reassCommonPrmTblPtr;
361     volatile uint32_t liodnAlAndAutoLearnHashTblPtrHi;
362     volatile uint32_t autoLearnHashTblPtrLow;
363     volatile uint32_t liodnSlAndAutoLearnSetLockTblPtrHi;
364     volatile uint32_t autoLearnSetLockTblPtrLow;
365     volatile uint16_t minFragSize; /* Not relevant for CAPWAP*/
366     volatile uint16_t maxReassemblySize; /* Only relevant for CAPWAP*/
367     volatile uint32_t totalSuccessfullyReasmFramesCounter;
368     volatile uint32_t totalValidFragmentCounter;
369     volatile uint32_t totalProcessedFragCounter;
370     volatile uint32_t totalMalformdFragCounter;
371     volatile uint32_t totalSetBusyCounter;
372     volatile uint32_t totalDiscardedFragsCounter;
373     volatile uint32_t totalMoreThan16FramesCounter;
374     volatile uint32_t reserved2[2];
375 } _PackedType t_ReassTbl;
376 
377 typedef struct t_ReassCommonTbl {
378     volatile uint32_t timeoutModeAndFqid;
379     volatile uint32_t reassFrmDescIndexPoolTblPtr;
380     volatile uint32_t liodnAndReassFrmDescPoolPtrHi;
381     volatile uint32_t reassFrmDescPoolPtrLow;
382     volatile uint32_t timeOutTblPtr;
383     volatile uint32_t expirationDelay;
384     volatile uint32_t internalBufferManagement;
385     volatile uint32_t reserved2;
386     volatile uint32_t totalTimeOutCounter;
387     volatile uint32_t totalRfdPoolBusyCounter;
388     volatile uint32_t totalInternalBufferBusy;
389     volatile uint32_t totalExternalBufferBusy;
390     volatile uint32_t totalSgFragmentCounter;
391     volatile uint32_t totalDmaSemaphoreDepletionCounter;
392     volatile uint32_t totalNCSPCounter;
393     volatile uint32_t discardMask;
394 } t_ReassCommonTbl;
395 
396 typedef _Packed struct t_Hmtd {
397     volatile uint16_t   cfg;
398     volatile uint8_t    eliodnOffset;
399     volatile uint8_t    extHmcdBasePtrHi;
400     volatile uint32_t   hmcdBasePtr;
401     volatile uint16_t   nextAdIdx;
402     volatile uint8_t    res1;
403     volatile uint8_t    opCode;
404     volatile uint32_t   res2;
405 } _PackedType t_Hmtd;
406 
407 #if defined(__MWERKS__) && !defined(__GNUC__)
408 #pragma pack(pop)
409 #endif /* defined(__MWERKS__) && ... */
410 
411 
412 /***********************************************************************/
413 /*  Driver's internal structures                                       */
414 /***********************************************************************/
415 #if (defined(FM_CAPWAP_SUPPORT) && (DPAA_VERSION == 10))
416 typedef struct
417 {
418     t_Handle p_AutoLearnHashTbl;
419     t_Handle p_ReassmFrmDescrPoolTbl;
420     t_Handle p_ReassmFrmDescrIndxPoolTbl;
421     t_Handle p_TimeOutTbl;
422     uint16_t maxNumFramesInProcess;
423     uint8_t  numOfTasks;
424     //uint8_t  poolId;
425     uint8_t  prOffset;
426     uint16_t dataOffset;
427     uint8_t  sgBpid;
428     uint8_t  hwPortId;
429     uint32_t fqidForTimeOutFrames;
430     uint32_t timeoutRoutineRequestTime;
431     uint32_t bitFor1Micro;
432 } t_CapwapFragParams;
433 #endif /* (defined(FM_CAPWAP_SUPPORT) && (DPAA_VERSION == 10)) */
434 
435 typedef struct
436 {
437     t_AdOfTypeContLookup    *p_Frag;
438 #if (DPAA_VERSION == 10)
439     uint8_t                 scratchBpid;
440 #endif /* (DPAA_VERSION == 10) */
441 } t_FragParams;
442 
443 typedef struct t_ReassmParams
444 {
445     e_NetHeaderType                 hdr; /* Header selection */
446     t_ReassCommonTbl              	*p_ReassCommonTbl;
447     uintptr_t                       reassFrmDescrIndxPoolTblAddr;
448     uintptr_t                       reassFrmDescrPoolTblAddr;
449     uintptr_t                       timeOutTblAddr;
450     uintptr_t                       internalBufferPoolManagementIndexAddr;
451     uintptr_t                       internalBufferPoolAddr;
452     uint32_t                        maxNumFramesInProcess;
453     uint8_t                         sgBpid;
454     uint8_t                         dataMemId;
455     uint16_t                        dataLiodnOffset;
456     uint32_t                        fqidForTimeOutFrames;
457     e_FmPcdManipReassemTimeOutMode  timeOutMode;
458     uint32_t                        timeoutThresholdForReassmProcess;
459     union {
460 	struct {
461 		t_Handle                h_Ipv4Ad;
462 	    t_Handle                h_Ipv6Ad;
463 	    bool                    ipv6Assigned;
464 	    t_ReassTbl				*p_Ipv4ReassTbl;
465 	    t_ReassTbl              *p_Ipv6ReassTbl;
466 	    uintptr_t               ipv4AutoLearnHashTblAddr;
467 	    uintptr_t               ipv6AutoLearnHashTblAddr;
468 	    uintptr_t               ipv4AutoLearnSetLockTblAddr;
469 	    uintptr_t               ipv6AutoLearnSetLockTblAddr;
470 	    uint16_t                        minFragSize[2];
471 	    e_FmPcdManipReassemWaysNumber   numOfFramesPerHashEntry[2];
472 	    uint8_t                         relativeSchemeId[2];
473 	    t_Handle                        h_Ipv4Scheme;
474 	    t_Handle                        h_Ipv6Scheme;
475 	    uint32_t                        nonConsistentSpFqid;
476 	} ip;
477 	struct {
478 		t_Handle                h_Ad;
479 	    t_ReassTbl				*p_ReassTbl;
480 	    uintptr_t               autoLearnHashTblAddr;
481 	    uintptr_t               autoLearnSetLockTblAddr;
482 	    uint16_t                maxRessembledsSize;
483 	    e_FmPcdManipReassemWaysNumber   numOfFramesPerHashEntry;
484 	    uint8_t                 relativeSchemeId;
485 	    t_Handle                h_Scheme;
486 	} capwap;
487     };
488 } t_ReassmParams;
489 
490 typedef struct{
491     e_FmPcdManipType        type;
492     t_FmPcdManipParams      manipParams;
493     bool                    muramAllocate;
494     t_Handle                h_Ad;
495     uint32_t                opcode;
496     bool                    rmv;
497     bool                    insrt;
498     t_Handle                h_NextManip;
499     t_Handle                h_PrevManip;
500     e_FmPcdManipType        nextManipType;
501     /* HdrManip parameters*/
502     uint8_t                 *p_Hmct;
503     uint8_t                 *p_Data;
504     bool                    dontParseAfterManip;
505     bool                    fieldUpdate;
506     bool                    custom;
507     uint16_t                tableSize;
508     uint8_t                 dataSize;
509     bool                    cascaded;
510     e_ManipUnifiedPosition  unifiedPosition;
511     /* end HdrManip */
512     uint8_t                 *p_Template;
513     uint16_t                owner;
514     uint32_t                updateParams;
515     uint32_t                shadowUpdateParams;
516     bool                    frag;
517     bool                    reassm;
518     uint16_t                sizeForFragmentation;
519 #if (defined(FM_CAPWAP_SUPPORT) && (DPAA_VERSION == 10))
520     t_Handle                h_Frag;
521     t_CapwapFragParams      capwapFragParams;
522 #endif /* (defined(FM_CAPWAP_SUPPORT) && (DPAA_VERSION == 10)) */
523     union {
524         t_ReassmParams    	reassmParams;
525         t_FragParams      	fragParams;
526     };
527     uint8_t                 icOffset;
528     uint16_t                ownerTmp;
529     bool                    cnia;
530     t_Handle                p_StatsTbl;
531     t_Handle                h_FmPcd;
532     t_List                  nodesLst;
533     t_Handle                h_Spinlock;
534 } t_FmPcdManip;
535 
536 typedef struct t_FmPcdCcSavedManipParams
537 {
538     union
539     {
540         struct
541         {
542             uint16_t    dataOffset;
543             //uint8_t     poolId;
544         }capwapParams;
545         struct
546         {
547             uint16_t    dataOffset;
548             uint8_t     poolId;
549         }ipParams;
550     };
551 
552 } t_FmPcdCcSavedManipParams;
553 
554 
555 #endif /* __FM_MANIP_H */
556