1*852ba100SJustin Hibbits /* 2*852ba100SJustin Hibbits * Copyright 2008-2012 Freescale Semiconductor Inc. 30aeed3e9SJustin Hibbits * 40aeed3e9SJustin Hibbits * Redistribution and use in source and binary forms, with or without 50aeed3e9SJustin Hibbits * modification, are permitted provided that the following conditions are met: 60aeed3e9SJustin Hibbits * * Redistributions of source code must retain the above copyright 70aeed3e9SJustin Hibbits * notice, this list of conditions and the following disclaimer. 80aeed3e9SJustin Hibbits * * Redistributions in binary form must reproduce the above copyright 90aeed3e9SJustin Hibbits * notice, this list of conditions and the following disclaimer in the 100aeed3e9SJustin Hibbits * documentation and/or other materials provided with the distribution. 110aeed3e9SJustin Hibbits * * Neither the name of Freescale Semiconductor nor the 120aeed3e9SJustin Hibbits * names of its contributors may be used to endorse or promote products 130aeed3e9SJustin Hibbits * derived from this software without specific prior written permission. 140aeed3e9SJustin Hibbits * 150aeed3e9SJustin Hibbits * 160aeed3e9SJustin Hibbits * ALTERNATIVELY, this software may be distributed under the terms of the 170aeed3e9SJustin Hibbits * GNU General Public License ("GPL") as published by the Free Software 180aeed3e9SJustin Hibbits * Foundation, either version 2 of that License or (at your option) any 190aeed3e9SJustin Hibbits * later version. 200aeed3e9SJustin Hibbits * 210aeed3e9SJustin Hibbits * THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``AS IS'' AND ANY 220aeed3e9SJustin Hibbits * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 230aeed3e9SJustin Hibbits * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 240aeed3e9SJustin Hibbits * DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY 250aeed3e9SJustin Hibbits * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 260aeed3e9SJustin Hibbits * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 270aeed3e9SJustin Hibbits * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 280aeed3e9SJustin Hibbits * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 290aeed3e9SJustin Hibbits * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 300aeed3e9SJustin Hibbits * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 310aeed3e9SJustin Hibbits */ 320aeed3e9SJustin Hibbits 33*852ba100SJustin Hibbits 340aeed3e9SJustin Hibbits /****************************************************************************** 350aeed3e9SJustin Hibbits @File fm_cc.h 360aeed3e9SJustin Hibbits 370aeed3e9SJustin Hibbits @Description FM PCD CC ... 380aeed3e9SJustin Hibbits *//***************************************************************************/ 390aeed3e9SJustin Hibbits #ifndef __FM_CC_H 400aeed3e9SJustin Hibbits #define __FM_CC_H 410aeed3e9SJustin Hibbits 420aeed3e9SJustin Hibbits #include "std_ext.h" 430aeed3e9SJustin Hibbits #include "error_ext.h" 440aeed3e9SJustin Hibbits #include "list_ext.h" 450aeed3e9SJustin Hibbits 460aeed3e9SJustin Hibbits #include "fm_pcd.h" 470aeed3e9SJustin Hibbits 480aeed3e9SJustin Hibbits 490aeed3e9SJustin Hibbits /***********************************************************************/ 500aeed3e9SJustin Hibbits /* Coarse classification defines */ 510aeed3e9SJustin Hibbits /***********************************************************************/ 520aeed3e9SJustin Hibbits 53*852ba100SJustin Hibbits #define CC_MAX_NUM_OF_KEYS (FM_PCD_MAX_NUM_OF_KEYS + 1) 54*852ba100SJustin Hibbits 550aeed3e9SJustin Hibbits #define CC_PC_FF_MACDST 0x00 560aeed3e9SJustin Hibbits #define CC_PC_FF_MACSRC 0x01 570aeed3e9SJustin Hibbits #define CC_PC_FF_ETYPE 0x02 580aeed3e9SJustin Hibbits 590aeed3e9SJustin Hibbits #define CC_PC_FF_TCI1 0x03 600aeed3e9SJustin Hibbits #define CC_PC_FF_TCI2 0x04 610aeed3e9SJustin Hibbits 620aeed3e9SJustin Hibbits #define CC_PC_FF_MPLS1 0x06 630aeed3e9SJustin Hibbits #define CC_PC_FF_MPLS_LAST 0x07 640aeed3e9SJustin Hibbits 650aeed3e9SJustin Hibbits #define CC_PC_FF_IPV4DST1 0x08 660aeed3e9SJustin Hibbits #define CC_PC_FF_IPV4DST2 0x16 670aeed3e9SJustin Hibbits #define CC_PC_FF_IPV4IPTOS_TC1 0x09 680aeed3e9SJustin Hibbits #define CC_PC_FF_IPV4IPTOS_TC2 0x17 690aeed3e9SJustin Hibbits #define CC_PC_FF_IPV4PTYPE1 0x0A 700aeed3e9SJustin Hibbits #define CC_PC_FF_IPV4PTYPE2 0x18 710aeed3e9SJustin Hibbits #define CC_PC_FF_IPV4SRC1 0x0b 720aeed3e9SJustin Hibbits #define CC_PC_FF_IPV4SRC2 0x19 730aeed3e9SJustin Hibbits #define CC_PC_FF_IPV4SRC1_IPV4DST1 0x0c 740aeed3e9SJustin Hibbits #define CC_PC_FF_IPV4SRC2_IPV4DST2 0x1a 750aeed3e9SJustin Hibbits #define CC_PC_FF_IPV4TTL 0x29 760aeed3e9SJustin Hibbits 770aeed3e9SJustin Hibbits 780aeed3e9SJustin Hibbits #define CC_PC_FF_IPTOS_IPV6TC1_IPV6FLOW1 0x0d /*TODO - CLASS - what is it? TOS*/ 790aeed3e9SJustin Hibbits #define CC_PC_FF_IPTOS_IPV6TC2_IPV6FLOW2 0x1b 800aeed3e9SJustin Hibbits #define CC_PC_FF_IPV6PTYPE1 0x0e 810aeed3e9SJustin Hibbits #define CC_PC_FF_IPV6PTYPE2 0x1c 820aeed3e9SJustin Hibbits #define CC_PC_FF_IPV6DST1 0x0f 830aeed3e9SJustin Hibbits #define CC_PC_FF_IPV6DST2 0x1d 840aeed3e9SJustin Hibbits #define CC_PC_FF_IPV6SRC1 0x10 850aeed3e9SJustin Hibbits #define CC_PC_FF_IPV6SRC2 0x1e 860aeed3e9SJustin Hibbits #define CC_PC_FF_IPV6HOP_LIMIT 0x2a 87*852ba100SJustin Hibbits #define CC_PC_FF_IPPID 0x24 88*852ba100SJustin Hibbits #define CC_PC_FF_IPDSCP 0x76 89*852ba100SJustin Hibbits 900aeed3e9SJustin Hibbits #define CC_PC_FF_GREPTYPE 0x11 910aeed3e9SJustin Hibbits 920aeed3e9SJustin Hibbits #define CC_PC_FF_MINENCAP_PTYPE 0x12 930aeed3e9SJustin Hibbits #define CC_PC_FF_MINENCAP_IPDST 0x13 940aeed3e9SJustin Hibbits #define CC_PC_FF_MINENCAP_IPSRC 0x14 950aeed3e9SJustin Hibbits #define CC_PC_FF_MINENCAP_IPSRC_IPDST 0x15 960aeed3e9SJustin Hibbits 970aeed3e9SJustin Hibbits #define CC_PC_FF_L4PSRC 0x1f 980aeed3e9SJustin Hibbits #define CC_PC_FF_L4PDST 0x20 990aeed3e9SJustin Hibbits #define CC_PC_FF_L4PSRC_L4PDST 0x21 1000aeed3e9SJustin Hibbits 1010aeed3e9SJustin Hibbits #define CC_PC_FF_PPPPID 0x05 1020aeed3e9SJustin Hibbits 1030aeed3e9SJustin Hibbits #define CC_PC_PR_SHIM1 0x22 1040aeed3e9SJustin Hibbits #define CC_PC_PR_SHIM2 0x23 1050aeed3e9SJustin Hibbits 1060aeed3e9SJustin Hibbits #define CC_PC_GENERIC_WITHOUT_MASK 0x27 1070aeed3e9SJustin Hibbits #define CC_PC_GENERIC_WITH_MASK 0x28 1080aeed3e9SJustin Hibbits #define CC_PC_GENERIC_IC_GMASK 0x2B 1090aeed3e9SJustin Hibbits #define CC_PC_GENERIC_IC_HASH_INDEXED 0x2C 110*852ba100SJustin Hibbits #define CC_PC_GENERIC_IC_AGING_MASK 0x2D 1110aeed3e9SJustin Hibbits 1120aeed3e9SJustin Hibbits #define CC_PR_OFFSET 0x25 1130aeed3e9SJustin Hibbits #define CC_PR_WITHOUT_OFFSET 0x26 1140aeed3e9SJustin Hibbits 1150aeed3e9SJustin Hibbits #define CC_PC_PR_ETH_OFFSET 19 1160aeed3e9SJustin Hibbits #define CC_PC_PR_USER_DEFINED_SHIM1_OFFSET 16 1170aeed3e9SJustin Hibbits #define CC_PC_PR_USER_DEFINED_SHIM2_OFFSET 17 1180aeed3e9SJustin Hibbits #define CC_PC_PR_USER_LLC_SNAP_OFFSET 20 1190aeed3e9SJustin Hibbits #define CC_PC_PR_VLAN1_OFFSET 21 1200aeed3e9SJustin Hibbits #define CC_PC_PR_VLAN2_OFFSET 22 1210aeed3e9SJustin Hibbits #define CC_PC_PR_PPPOE_OFFSET 24 1220aeed3e9SJustin Hibbits #define CC_PC_PR_MPLS1_OFFSET 25 1230aeed3e9SJustin Hibbits #define CC_PC_PR_MPLS_LAST_OFFSET 26 1240aeed3e9SJustin Hibbits #define CC_PC_PR_IP1_OFFSET 27 1250aeed3e9SJustin Hibbits #define CC_PC_PR_IP_LAST_OFFSET 28 1260aeed3e9SJustin Hibbits #define CC_PC_PR_MINENC_OFFSET 28 1270aeed3e9SJustin Hibbits #define CC_PC_PR_L4_OFFSET 30 1280aeed3e9SJustin Hibbits #define CC_PC_PR_GRE_OFFSET 29 1290aeed3e9SJustin Hibbits #define CC_PC_PR_ETYPE_LAST_OFFSET 23 1300aeed3e9SJustin Hibbits #define CC_PC_PR_NEXT_HEADER_OFFSET 31 1310aeed3e9SJustin Hibbits 1320aeed3e9SJustin Hibbits #define CC_PC_ILLEGAL 0xff 1330aeed3e9SJustin Hibbits #define CC_SIZE_ILLEGAL 0 1340aeed3e9SJustin Hibbits 1350aeed3e9SJustin Hibbits #define FM_PCD_CC_KEYS_MATCH_TABLE_ALIGN 16 136*852ba100SJustin Hibbits #define FM_PCD_CC_AD_TABLE_ALIGN 16 1370aeed3e9SJustin Hibbits #define FM_PCD_CC_AD_ENTRY_SIZE 16 1380aeed3e9SJustin Hibbits #define FM_PCD_CC_NUM_OF_KEYS 255 139*852ba100SJustin Hibbits #define FM_PCD_CC_TREE_ADDR_ALIGN 256 1400aeed3e9SJustin Hibbits 1410aeed3e9SJustin Hibbits #define FM_PCD_AD_RESULT_CONTRL_FLOW_TYPE 0x00000000 1420aeed3e9SJustin Hibbits #define FM_PCD_AD_RESULT_DATA_FLOW_TYPE 0x80000000 1430aeed3e9SJustin Hibbits #define FM_PCD_AD_RESULT_PLCR_DIS 0x20000000 1440aeed3e9SJustin Hibbits #define FM_PCD_AD_RESULT_EXTENDED_MODE 0x80000000 1450aeed3e9SJustin Hibbits #define FM_PCD_AD_RESULT_NADEN 0x20000000 1460aeed3e9SJustin Hibbits #define FM_PCD_AD_RESULT_STATISTICS_EN 0x40000000 1470aeed3e9SJustin Hibbits 1480aeed3e9SJustin Hibbits #define FM_PCD_AD_CONT_LOOKUP_TYPE 0x40000000 1490aeed3e9SJustin Hibbits #define FM_PCD_AD_CONT_LOOKUP_LCL_MASK 0x00800000 1500aeed3e9SJustin Hibbits 151*852ba100SJustin Hibbits #define FM_PCD_AD_STATS_TYPE 0x40000000 152*852ba100SJustin Hibbits #define FM_PCD_AD_STATS_FLR_ADDR_MASK 0x00FFFFFF 153*852ba100SJustin Hibbits #define FM_PCD_AD_STATS_COUNTERS_ADDR_MASK 0x00FFFFFF 154*852ba100SJustin Hibbits #define FM_PCD_AD_STATS_NEXT_ACTION_MASK 0xFFFF0000 155*852ba100SJustin Hibbits #define FM_PCD_AD_STATS_NEXT_ACTION_SHIFT 12 156*852ba100SJustin Hibbits #define FM_PCD_AD_STATS_NAD_EN 0x00008000 157*852ba100SJustin Hibbits #define FM_PCD_AD_STATS_OP_CODE 0x00000036 158*852ba100SJustin Hibbits #define FM_PCD_AD_STATS_FLR_EN 0x00004000 159*852ba100SJustin Hibbits #define FM_PCD_AD_STATS_COND_EN 0x00002000 160*852ba100SJustin Hibbits 161*852ba100SJustin Hibbits 162*852ba100SJustin Hibbits 163*852ba100SJustin Hibbits #define FM_PCD_AD_BYPASS_TYPE 0xc0000000 164*852ba100SJustin Hibbits 1650aeed3e9SJustin Hibbits #define FM_PCD_AD_TYPE_MASK 0xc0000000 1660aeed3e9SJustin Hibbits #define FM_PCD_AD_OPCODE_MASK 0x0000000f 1670aeed3e9SJustin Hibbits 1680aeed3e9SJustin Hibbits #define FM_PCD_AD_PROFILEID_FOR_CNTRL_SHIFT 16 169*852ba100SJustin Hibbits #if (DPAA_VERSION >= 11) 170*852ba100SJustin Hibbits #define FM_PCD_AD_RESULT_VSP_SHIFT 24 171*852ba100SJustin Hibbits #define FM_PCD_AD_RESULT_NO_OM_VSPE 0x02000000 172*852ba100SJustin Hibbits #define FM_PCD_AD_RESULT_VSP_MASK 0x3f 173*852ba100SJustin Hibbits #define FM_PCD_AD_NCSPFQIDM_MASK 0x80000000 174*852ba100SJustin Hibbits #endif /* (DPAA_VERSION >= 11) */ 1750aeed3e9SJustin Hibbits 1760aeed3e9SJustin Hibbits #define GLBL_MASK_FOR_HASH_INDEXED 0xfff00000 1770aeed3e9SJustin Hibbits #define CC_GLBL_MASK_SIZE 4 178*852ba100SJustin Hibbits #define CC_AGING_MASK_SIZE 4 1790aeed3e9SJustin Hibbits 1800aeed3e9SJustin Hibbits typedef uint32_t ccPrivateInfo_t; /**< private info of CC: */ 1810aeed3e9SJustin Hibbits 1820aeed3e9SJustin Hibbits #define CC_PRIVATE_INFO_NONE 0 1830aeed3e9SJustin Hibbits #define CC_PRIVATE_INFO_IC_HASH_INDEX_LOOKUP 0x80000000 1840aeed3e9SJustin Hibbits #define CC_PRIVATE_INFO_IC_HASH_EXACT_MATCH 0x40000000 1850aeed3e9SJustin Hibbits #define CC_PRIVATE_INFO_IC_KEY_EXACT_MATCH 0x20000000 1860aeed3e9SJustin Hibbits #define CC_PRIVATE_INFO_IC_DEQ_FQID_INDEX_LOOKUP 0x10000000 1870aeed3e9SJustin Hibbits 188*852ba100SJustin Hibbits #define CC_BUILD_AGING_MASK(numOfKeys) ((((1LL << ((numOfKeys) + 1)) - 1)) << (31 - (numOfKeys))) 1890aeed3e9SJustin Hibbits /***********************************************************************/ 1900aeed3e9SJustin Hibbits /* Memory map */ 1910aeed3e9SJustin Hibbits /***********************************************************************/ 1920aeed3e9SJustin Hibbits #if defined(__MWERKS__) && !defined(__GNUC__) 1930aeed3e9SJustin Hibbits #pragma pack(push,1) 1940aeed3e9SJustin Hibbits #endif /* defined(__MWERKS__) && ... */ 1950aeed3e9SJustin Hibbits 196*852ba100SJustin Hibbits typedef struct 197*852ba100SJustin Hibbits { 1980aeed3e9SJustin Hibbits volatile uint32_t fqid; 1990aeed3e9SJustin Hibbits volatile uint32_t plcrProfile; 2000aeed3e9SJustin Hibbits volatile uint32_t nia; 2010aeed3e9SJustin Hibbits volatile uint32_t res; 202*852ba100SJustin Hibbits } t_AdOfTypeResult; 2030aeed3e9SJustin Hibbits 204*852ba100SJustin Hibbits typedef struct 205*852ba100SJustin Hibbits { 2060aeed3e9SJustin Hibbits volatile uint32_t ccAdBase; 2070aeed3e9SJustin Hibbits volatile uint32_t matchTblPtr; 2080aeed3e9SJustin Hibbits volatile uint32_t pcAndOffsets; 2090aeed3e9SJustin Hibbits volatile uint32_t gmask; 210*852ba100SJustin Hibbits } t_AdOfTypeContLookup; 2110aeed3e9SJustin Hibbits 212*852ba100SJustin Hibbits typedef struct 213*852ba100SJustin Hibbits { 214*852ba100SJustin Hibbits volatile uint32_t profileTableAddr; 215*852ba100SJustin Hibbits volatile uint32_t reserved; 216*852ba100SJustin Hibbits volatile uint32_t nextActionIndx; 217*852ba100SJustin Hibbits volatile uint32_t statsTableAddr; 218*852ba100SJustin Hibbits } t_AdOfTypeStats; 219*852ba100SJustin Hibbits 220*852ba100SJustin Hibbits typedef union 221*852ba100SJustin Hibbits { 2220aeed3e9SJustin Hibbits volatile t_AdOfTypeResult adResult; 2230aeed3e9SJustin Hibbits volatile t_AdOfTypeContLookup adContLookup; 224*852ba100SJustin Hibbits } t_Ad; 2250aeed3e9SJustin Hibbits 2260aeed3e9SJustin Hibbits #if defined(__MWERKS__) && !defined(__GNUC__) 2270aeed3e9SJustin Hibbits #pragma pack(pop) 2280aeed3e9SJustin Hibbits #endif /* defined(__MWERKS__) && ... */ 2290aeed3e9SJustin Hibbits 2300aeed3e9SJustin Hibbits 2310aeed3e9SJustin Hibbits /***********************************************************************/ 2320aeed3e9SJustin Hibbits /* Driver's internal structures */ 2330aeed3e9SJustin Hibbits /***********************************************************************/ 2340aeed3e9SJustin Hibbits 235*852ba100SJustin Hibbits typedef struct t_FmPcdStatsObj 236*852ba100SJustin Hibbits { 237*852ba100SJustin Hibbits t_Handle h_StatsAd; 238*852ba100SJustin Hibbits t_Handle h_StatsCounters; 239*852ba100SJustin Hibbits t_List node; 240*852ba100SJustin Hibbits } t_FmPcdStatsObj; 2410aeed3e9SJustin Hibbits 242*852ba100SJustin Hibbits typedef struct 243*852ba100SJustin Hibbits { 244*852ba100SJustin Hibbits uint8_t key[FM_PCD_MAX_SIZE_OF_KEY]; 245*852ba100SJustin Hibbits uint8_t mask[FM_PCD_MAX_SIZE_OF_KEY]; 246*852ba100SJustin Hibbits 2470aeed3e9SJustin Hibbits t_FmPcdCcNextEngineParams nextEngineParams; 2480aeed3e9SJustin Hibbits uint32_t requiredAction; 2490aeed3e9SJustin Hibbits uint32_t shadowAction; 2500aeed3e9SJustin Hibbits 251*852ba100SJustin Hibbits t_FmPcdStatsObj *p_StatsObj; 252*852ba100SJustin Hibbits 253*852ba100SJustin Hibbits } t_FmPcdCcKeyAndNextEngineParams; 254*852ba100SJustin Hibbits 255*852ba100SJustin Hibbits typedef struct 256*852ba100SJustin Hibbits { 2570aeed3e9SJustin Hibbits t_Handle p_Ad; 2580aeed3e9SJustin Hibbits e_FmPcdEngine fmPcdEngine; 2590aeed3e9SJustin Hibbits bool adAllocated; 2600aeed3e9SJustin Hibbits bool isTree; 2610aeed3e9SJustin Hibbits 2620aeed3e9SJustin Hibbits uint32_t myInfo; 2630aeed3e9SJustin Hibbits t_List *h_CcNextNodesLst; 2640aeed3e9SJustin Hibbits t_Handle h_AdditionalInfo; 2650aeed3e9SJustin Hibbits t_Handle h_Node; 2660aeed3e9SJustin Hibbits } t_FmPcdModifyCcAdditionalParams; 2670aeed3e9SJustin Hibbits 268*852ba100SJustin Hibbits typedef struct 269*852ba100SJustin Hibbits { 2700aeed3e9SJustin Hibbits t_Handle p_AdTableNew; 2710aeed3e9SJustin Hibbits t_Handle p_KeysMatchTableNew; 2720aeed3e9SJustin Hibbits t_Handle p_AdTableOld; 2730aeed3e9SJustin Hibbits t_Handle p_KeysMatchTableOld; 2740aeed3e9SJustin Hibbits uint16_t numOfKeys; 2750aeed3e9SJustin Hibbits t_Handle h_CurrentNode; 276*852ba100SJustin Hibbits uint16_t savedKeyIndex; 2770aeed3e9SJustin Hibbits t_Handle h_NodeForAdd; 2780aeed3e9SJustin Hibbits t_Handle h_NodeForRmv; 2790aeed3e9SJustin Hibbits t_Handle h_ManipForRmv; 280*852ba100SJustin Hibbits t_Handle h_ManipForAdd; 281*852ba100SJustin Hibbits t_FmPcdStatsObj *p_StatsObjForRmv; 282*852ba100SJustin Hibbits #if (DPAA_VERSION >= 11) 283*852ba100SJustin Hibbits t_Handle h_FrmReplicForAdd; 284*852ba100SJustin Hibbits t_Handle h_FrmReplicForRmv; 285*852ba100SJustin Hibbits #endif /* (DPAA_VERSION >= 11) */ 2860aeed3e9SJustin Hibbits bool tree; 2870aeed3e9SJustin Hibbits 288*852ba100SJustin Hibbits t_FmPcdCcKeyAndNextEngineParams keyAndNextEngineParams[CC_MAX_NUM_OF_KEYS]; 2890aeed3e9SJustin Hibbits } t_FmPcdModifyCcKeyAdditionalParams; 2900aeed3e9SJustin Hibbits 291*852ba100SJustin Hibbits typedef struct 292*852ba100SJustin Hibbits { 2930aeed3e9SJustin Hibbits t_Handle h_Manip; 2940aeed3e9SJustin Hibbits t_Handle h_CcNode; 2950aeed3e9SJustin Hibbits } t_CcNextEngineInfo; 2960aeed3e9SJustin Hibbits 297*852ba100SJustin Hibbits typedef struct 298*852ba100SJustin Hibbits { 2990aeed3e9SJustin Hibbits uint16_t numOfKeys; 300*852ba100SJustin Hibbits uint16_t maxNumOfKeys; 301*852ba100SJustin Hibbits 302*852ba100SJustin Hibbits bool maskSupport; 303*852ba100SJustin Hibbits uint32_t keysMatchTableMaxSize; 304*852ba100SJustin Hibbits 305*852ba100SJustin Hibbits e_FmPcdCcStatsMode statisticsMode; 306*852ba100SJustin Hibbits uint32_t numOfStatsFLRs; 307*852ba100SJustin Hibbits uint32_t countersArraySize; 308*852ba100SJustin Hibbits 309*852ba100SJustin Hibbits bool isHashBucket; /**< Valid for match table node that is a bucket of a hash table only */ 310*852ba100SJustin Hibbits t_Handle h_MissStatsCounters; /**< Valid for hash table node and match table that is a bucket; 311*852ba100SJustin Hibbits Holds the statistics counters allocated by the hash table and 312*852ba100SJustin Hibbits are shared by all hash table buckets; */ 313*852ba100SJustin Hibbits t_Handle h_PrivMissStatsCounters; /**< Valid for match table node that is a bucket of a hash table only; 314*852ba100SJustin Hibbits Holds the statistics counters that were allocated for this node 315*852ba100SJustin Hibbits and replaced by the shared counters (allocated by the hash table); */ 316*852ba100SJustin Hibbits bool statsEnForMiss; /**< Valid for hash table node only; TRUE is statistics are currently 317*852ba100SJustin Hibbits enabled for hash 'miss', FALSE otherwise; This parameter effects the 318*852ba100SJustin Hibbits returned statistics count to user, statistics AD always present for 'miss' 319*852ba100SJustin Hibbits for all hash buckets; */ 3200aeed3e9SJustin Hibbits bool glblMaskUpdated; 3210aeed3e9SJustin Hibbits t_Handle p_GlblMask; 3220aeed3e9SJustin Hibbits bool lclMask; 3230aeed3e9SJustin Hibbits uint8_t parseCode; 3240aeed3e9SJustin Hibbits uint8_t offset; 3250aeed3e9SJustin Hibbits uint8_t prsArrayOffset; 3260aeed3e9SJustin Hibbits bool ctrlFlow; 327*852ba100SJustin Hibbits uint16_t owners; 3280aeed3e9SJustin Hibbits 3290aeed3e9SJustin Hibbits uint8_t ccKeySizeAccExtraction; 3300aeed3e9SJustin Hibbits uint8_t sizeOfExtraction; 3310aeed3e9SJustin Hibbits uint8_t glblMaskSize; 3320aeed3e9SJustin Hibbits 3330aeed3e9SJustin Hibbits t_Handle h_KeysMatchTable; 3340aeed3e9SJustin Hibbits t_Handle h_AdTable; 335*852ba100SJustin Hibbits t_Handle h_StatsAds; 336*852ba100SJustin Hibbits t_Handle h_TmpAd; 337*852ba100SJustin Hibbits t_Handle h_Ad; 338*852ba100SJustin Hibbits t_Handle h_StatsFLRs; 339*852ba100SJustin Hibbits 340*852ba100SJustin Hibbits t_List availableStatsLst; 3410aeed3e9SJustin Hibbits 3420aeed3e9SJustin Hibbits t_List ccPrevNodesLst; 3430aeed3e9SJustin Hibbits 3440aeed3e9SJustin Hibbits t_List ccTreeIdLst; 3450aeed3e9SJustin Hibbits t_List ccTreesLst; 3460aeed3e9SJustin Hibbits 3470aeed3e9SJustin Hibbits t_Handle h_FmPcd; 3480aeed3e9SJustin Hibbits uint32_t shadowAction; 3490aeed3e9SJustin Hibbits uint8_t userSizeOfExtraction; 350*852ba100SJustin Hibbits uint8_t userOffset; 351*852ba100SJustin Hibbits uint8_t kgHashShift; /* used in hash-table */ 3520aeed3e9SJustin Hibbits 353*852ba100SJustin Hibbits t_Handle h_Spinlock; 354*852ba100SJustin Hibbits 355*852ba100SJustin Hibbits t_FmPcdCcKeyAndNextEngineParams keyAndNextEngineParams[CC_MAX_NUM_OF_KEYS]; 3560aeed3e9SJustin Hibbits } t_FmPcdCcNode; 3570aeed3e9SJustin Hibbits 358*852ba100SJustin Hibbits typedef struct 359*852ba100SJustin Hibbits { 3600aeed3e9SJustin Hibbits t_FmPcdCcNode *p_FmPcdCcNode; 3610aeed3e9SJustin Hibbits bool occupied; 362*852ba100SJustin Hibbits uint16_t owners; 3630aeed3e9SJustin Hibbits volatile bool lock; 3640aeed3e9SJustin Hibbits } t_FmPcdCcNodeArray; 3650aeed3e9SJustin Hibbits 366*852ba100SJustin Hibbits typedef struct 367*852ba100SJustin Hibbits { 3680aeed3e9SJustin Hibbits uint8_t numOfEntriesInGroup; 3690aeed3e9SJustin Hibbits uint32_t totalBitsMask; 3700aeed3e9SJustin Hibbits uint8_t baseGroupEntry; 3710aeed3e9SJustin Hibbits } t_FmPcdCcGroupParam; 3720aeed3e9SJustin Hibbits 373*852ba100SJustin Hibbits typedef struct 374*852ba100SJustin Hibbits { 375*852ba100SJustin Hibbits t_Handle h_FmPcd; 3760aeed3e9SJustin Hibbits uint8_t netEnvId; 3770aeed3e9SJustin Hibbits uintptr_t ccTreeBaseAddr; 3780aeed3e9SJustin Hibbits uint8_t numOfGrps; 3790aeed3e9SJustin Hibbits t_FmPcdCcGroupParam fmPcdGroupParam[FM_PCD_MAX_NUM_OF_CC_GROUPS]; 3800aeed3e9SJustin Hibbits t_List fmPortsLst; 381*852ba100SJustin Hibbits t_FmPcdLock *p_Lock; 3820aeed3e9SJustin Hibbits uint8_t numOfEntries; 383*852ba100SJustin Hibbits uint16_t owners; 384*852ba100SJustin Hibbits t_Handle h_FmPcdCcSavedManipParams; 3850aeed3e9SJustin Hibbits bool modifiedState; 3860aeed3e9SJustin Hibbits uint32_t requiredAction; 387*852ba100SJustin Hibbits t_Handle h_IpReassemblyManip; 388*852ba100SJustin Hibbits t_Handle h_CapwapReassemblyManip; 389*852ba100SJustin Hibbits 390*852ba100SJustin Hibbits t_FmPcdCcKeyAndNextEngineParams keyAndNextEngineParams[FM_PCD_MAX_NUM_OF_CC_GROUPS]; 3910aeed3e9SJustin Hibbits } t_FmPcdCcTree; 3920aeed3e9SJustin Hibbits 3930aeed3e9SJustin Hibbits 394*852ba100SJustin Hibbits t_Error FmPcdCcNodeTreeTryLock(t_Handle h_FmPcd,t_Handle h_FmPcdCcNode, t_List *p_List); 395*852ba100SJustin Hibbits void FmPcdCcNodeTreeReleaseLock(t_Handle h_FmPcd, t_List *p_List); 396*852ba100SJustin Hibbits t_Error FmPcdUpdateCcShadow (t_FmPcd *p_FmPcd, uint32_t size, uint32_t align); 3970aeed3e9SJustin Hibbits 3980aeed3e9SJustin Hibbits 3990aeed3e9SJustin Hibbits #endif /* __FM_CC_H */ 400