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
310typedef 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
317typedef 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))
330typedef 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
357typedef _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
377typedef 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
396typedef _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))
416typedef 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
435typedef 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
443typedef 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
490typedef 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
536typedef 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