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