xref: /freebsd/sys/contrib/ncsw/Peripherals/FM/Pcd/fm_cc.h (revision c2c014f24c10f90d85126ac5fbd4d8524de32b1c)
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