The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/contrib/ncsw/Peripherals/FM/Pcd/fm_cc.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    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_cc.h
   36 
   37  @Description   FM PCD CC ...
   38 *//***************************************************************************/
   39 #ifndef __FM_CC_H
   40 #define __FM_CC_H
   41 
   42 #include "std_ext.h"
   43 #include "error_ext.h"
   44 #include "list_ext.h"
   45 
   46 #include "fm_pcd.h"
   47 
   48 
   49 /***********************************************************************/
   50 /*          Coarse classification defines                              */
   51 /***********************************************************************/
   52 
   53 #define CC_MAX_NUM_OF_KEYS                  (FM_PCD_MAX_NUM_OF_KEYS + 1)
   54 
   55 #define CC_PC_FF_MACDST                     0x00
   56 #define CC_PC_FF_MACSRC                     0x01
   57 #define CC_PC_FF_ETYPE                      0x02
   58 
   59 #define CC_PC_FF_TCI1                       0x03
   60 #define CC_PC_FF_TCI2                       0x04
   61 
   62 #define CC_PC_FF_MPLS1                      0x06
   63 #define CC_PC_FF_MPLS_LAST                  0x07
   64 
   65 #define CC_PC_FF_IPV4DST1                   0x08
   66 #define CC_PC_FF_IPV4DST2                   0x16
   67 #define CC_PC_FF_IPV4IPTOS_TC1              0x09
   68 #define CC_PC_FF_IPV4IPTOS_TC2              0x17
   69 #define CC_PC_FF_IPV4PTYPE1                 0x0A
   70 #define CC_PC_FF_IPV4PTYPE2                 0x18
   71 #define CC_PC_FF_IPV4SRC1                   0x0b
   72 #define CC_PC_FF_IPV4SRC2                   0x19
   73 #define CC_PC_FF_IPV4SRC1_IPV4DST1          0x0c
   74 #define CC_PC_FF_IPV4SRC2_IPV4DST2          0x1a
   75 #define CC_PC_FF_IPV4TTL                    0x29
   76 
   77 
   78 #define CC_PC_FF_IPTOS_IPV6TC1_IPV6FLOW1    0x0d /*TODO - CLASS - what is it? TOS*/
   79 #define CC_PC_FF_IPTOS_IPV6TC2_IPV6FLOW2    0x1b
   80 #define CC_PC_FF_IPV6PTYPE1                 0x0e
   81 #define CC_PC_FF_IPV6PTYPE2                 0x1c
   82 #define CC_PC_FF_IPV6DST1                   0x0f
   83 #define CC_PC_FF_IPV6DST2                   0x1d
   84 #define CC_PC_FF_IPV6SRC1                   0x10
   85 #define CC_PC_FF_IPV6SRC2                   0x1e
   86 #define CC_PC_FF_IPV6HOP_LIMIT              0x2a
   87 #define CC_PC_FF_IPPID                      0x24
   88 #define CC_PC_FF_IPDSCP                     0x76
   89 
   90 #define CC_PC_FF_GREPTYPE                   0x11
   91 
   92 #define CC_PC_FF_MINENCAP_PTYPE             0x12
   93 #define CC_PC_FF_MINENCAP_IPDST             0x13
   94 #define CC_PC_FF_MINENCAP_IPSRC             0x14
   95 #define CC_PC_FF_MINENCAP_IPSRC_IPDST       0x15
   96 
   97 #define CC_PC_FF_L4PSRC                     0x1f
   98 #define CC_PC_FF_L4PDST                     0x20
   99 #define CC_PC_FF_L4PSRC_L4PDST              0x21
  100 
  101 #define CC_PC_FF_PPPPID                     0x05
  102 
  103 #define CC_PC_PR_SHIM1                      0x22
  104 #define CC_PC_PR_SHIM2                      0x23
  105 
  106 #define CC_PC_GENERIC_WITHOUT_MASK          0x27
  107 #define CC_PC_GENERIC_WITH_MASK             0x28
  108 #define CC_PC_GENERIC_IC_GMASK              0x2B
  109 #define CC_PC_GENERIC_IC_HASH_INDEXED       0x2C
  110 #define CC_PC_GENERIC_IC_AGING_MASK         0x2D
  111 
  112 #define CC_PR_OFFSET                        0x25
  113 #define CC_PR_WITHOUT_OFFSET                0x26
  114 
  115 #define CC_PC_PR_ETH_OFFSET                 19
  116 #define CC_PC_PR_USER_DEFINED_SHIM1_OFFSET  16
  117 #define CC_PC_PR_USER_DEFINED_SHIM2_OFFSET  17
  118 #define CC_PC_PR_USER_LLC_SNAP_OFFSET       20
  119 #define CC_PC_PR_VLAN1_OFFSET               21
  120 #define CC_PC_PR_VLAN2_OFFSET               22
  121 #define CC_PC_PR_PPPOE_OFFSET               24
  122 #define CC_PC_PR_MPLS1_OFFSET               25
  123 #define CC_PC_PR_MPLS_LAST_OFFSET           26
  124 #define CC_PC_PR_IP1_OFFSET                 27
  125 #define CC_PC_PR_IP_LAST_OFFSET             28
  126 #define CC_PC_PR_MINENC_OFFSET              28
  127 #define CC_PC_PR_L4_OFFSET                  30
  128 #define CC_PC_PR_GRE_OFFSET                 29
  129 #define CC_PC_PR_ETYPE_LAST_OFFSET          23
  130 #define CC_PC_PR_NEXT_HEADER_OFFSET         31
  131 
  132 #define CC_PC_ILLEGAL                       0xff
  133 #define CC_SIZE_ILLEGAL                     0
  134 
  135 #define FM_PCD_CC_KEYS_MATCH_TABLE_ALIGN    16
  136 #define FM_PCD_CC_AD_TABLE_ALIGN            16
  137 #define FM_PCD_CC_AD_ENTRY_SIZE             16
  138 #define FM_PCD_CC_NUM_OF_KEYS               255
  139 #define FM_PCD_CC_TREE_ADDR_ALIGN           256
  140 
  141 #define FM_PCD_AD_RESULT_CONTRL_FLOW_TYPE   0x00000000
  142 #define FM_PCD_AD_RESULT_DATA_FLOW_TYPE     0x80000000
  143 #define FM_PCD_AD_RESULT_PLCR_DIS           0x20000000
  144 #define FM_PCD_AD_RESULT_EXTENDED_MODE      0x80000000
  145 #define FM_PCD_AD_RESULT_NADEN              0x20000000
  146 #define FM_PCD_AD_RESULT_STATISTICS_EN      0x40000000
  147 
  148 #define FM_PCD_AD_CONT_LOOKUP_TYPE          0x40000000
  149 #define FM_PCD_AD_CONT_LOOKUP_LCL_MASK      0x00800000
  150 
  151 #define FM_PCD_AD_STATS_TYPE                0x40000000
  152 #define FM_PCD_AD_STATS_FLR_ADDR_MASK       0x00FFFFFF
  153 #define FM_PCD_AD_STATS_COUNTERS_ADDR_MASK  0x00FFFFFF
  154 #define FM_PCD_AD_STATS_NEXT_ACTION_MASK    0xFFFF0000
  155 #define FM_PCD_AD_STATS_NEXT_ACTION_SHIFT   12
  156 #define FM_PCD_AD_STATS_NAD_EN              0x00008000
  157 #define FM_PCD_AD_STATS_OP_CODE             0x00000036
  158 #define FM_PCD_AD_STATS_FLR_EN              0x00004000
  159 #define FM_PCD_AD_STATS_COND_EN             0x00002000
  160 
  161 
  162 
  163 #define FM_PCD_AD_BYPASS_TYPE               0xc0000000
  164 
  165 #define FM_PCD_AD_TYPE_MASK                 0xc0000000
  166 #define FM_PCD_AD_OPCODE_MASK               0x0000000f
  167 
  168 #define FM_PCD_AD_PROFILEID_FOR_CNTRL_SHIFT 16
  169 #if (DPAA_VERSION >= 11)
  170 #define FM_PCD_AD_RESULT_VSP_SHIFT           24
  171 #define FM_PCD_AD_RESULT_NO_OM_VSPE          0x02000000
  172 #define FM_PCD_AD_RESULT_VSP_MASK            0x3f
  173 #define FM_PCD_AD_NCSPFQIDM_MASK             0x80000000
  174 #endif /* (DPAA_VERSION >= 11) */
  175 
  176 #define GLBL_MASK_FOR_HASH_INDEXED          0xfff00000
  177 #define CC_GLBL_MASK_SIZE                   4
  178 #define CC_AGING_MASK_SIZE                  4
  179 
  180 typedef uint32_t ccPrivateInfo_t; /**< private info of CC: */
  181 
  182 #define CC_PRIVATE_INFO_NONE                       0
  183 #define CC_PRIVATE_INFO_IC_HASH_INDEX_LOOKUP       0x80000000
  184 #define CC_PRIVATE_INFO_IC_HASH_EXACT_MATCH        0x40000000
  185 #define CC_PRIVATE_INFO_IC_KEY_EXACT_MATCH         0x20000000
  186 #define CC_PRIVATE_INFO_IC_DEQ_FQID_INDEX_LOOKUP   0x10000000
  187 
  188 #define CC_BUILD_AGING_MASK(numOfKeys)      ((((1LL << ((numOfKeys) + 1)) - 1)) << (31 - (numOfKeys)))
  189 /***********************************************************************/
  190 /*          Memory map                                                 */
  191 /***********************************************************************/
  192 #if defined(__MWERKS__) && !defined(__GNUC__)
  193 #pragma pack(push,1)
  194 #endif /* defined(__MWERKS__) && ... */
  195 
  196 typedef struct
  197 {
  198     volatile uint32_t fqid;
  199     volatile uint32_t plcrProfile;
  200     volatile uint32_t nia;
  201     volatile uint32_t res;
  202 } t_AdOfTypeResult;
  203 
  204 typedef struct
  205 {
  206     volatile uint32_t ccAdBase;
  207     volatile uint32_t matchTblPtr;
  208     volatile uint32_t pcAndOffsets;
  209     volatile uint32_t gmask;
  210 } t_AdOfTypeContLookup;
  211 
  212 typedef struct
  213 {
  214     volatile uint32_t profileTableAddr;
  215     volatile uint32_t reserved;
  216     volatile uint32_t nextActionIndx;
  217     volatile uint32_t statsTableAddr;
  218 } t_AdOfTypeStats;
  219 
  220 typedef union
  221 {
  222     volatile t_AdOfTypeResult        adResult;
  223     volatile t_AdOfTypeContLookup    adContLookup;
  224 } t_Ad;
  225 
  226 #if defined(__MWERKS__) && !defined(__GNUC__)
  227 #pragma pack(pop)
  228 #endif /* defined(__MWERKS__) && ... */
  229 
  230 
  231 /***********************************************************************/
  232 /*  Driver's internal structures                                       */
  233 /***********************************************************************/
  234 
  235 typedef struct t_FmPcdStatsObj
  236 {
  237     t_Handle        h_StatsAd;
  238     t_Handle        h_StatsCounters;
  239     t_List          node;
  240 } t_FmPcdStatsObj;
  241 
  242 typedef struct
  243 {
  244     uint8_t                     key[FM_PCD_MAX_SIZE_OF_KEY];
  245     uint8_t                     mask[FM_PCD_MAX_SIZE_OF_KEY];
  246 
  247     t_FmPcdCcNextEngineParams   nextEngineParams;
  248     uint32_t                    requiredAction;
  249     uint32_t                    shadowAction;
  250 
  251     t_FmPcdStatsObj             *p_StatsObj;
  252 
  253 } t_FmPcdCcKeyAndNextEngineParams;
  254 
  255 typedef struct
  256 {
  257     t_Handle        p_Ad;
  258     e_FmPcdEngine   fmPcdEngine;
  259     bool            adAllocated;
  260     bool            isTree;
  261 
  262     uint32_t        myInfo;
  263     t_List          *h_CcNextNodesLst;
  264     t_Handle        h_AdditionalInfo;
  265     t_Handle        h_Node;
  266 } t_FmPcdModifyCcAdditionalParams;
  267 
  268 typedef struct
  269 {
  270     t_Handle            p_AdTableNew;
  271     t_Handle            p_KeysMatchTableNew;
  272     t_Handle            p_AdTableOld;
  273     t_Handle            p_KeysMatchTableOld;
  274     uint16_t            numOfKeys;
  275     t_Handle            h_CurrentNode;
  276     uint16_t            savedKeyIndex;
  277     t_Handle            h_NodeForAdd;
  278     t_Handle            h_NodeForRmv;
  279     t_Handle            h_ManipForRmv;
  280     t_Handle            h_ManipForAdd;
  281     t_FmPcdStatsObj     *p_StatsObjForRmv;
  282 #if (DPAA_VERSION >= 11)
  283     t_Handle            h_FrmReplicForAdd;
  284     t_Handle            h_FrmReplicForRmv;
  285 #endif /* (DPAA_VERSION >= 11) */
  286     bool                tree;
  287 
  288     t_FmPcdCcKeyAndNextEngineParams  keyAndNextEngineParams[CC_MAX_NUM_OF_KEYS];
  289 } t_FmPcdModifyCcKeyAdditionalParams;
  290 
  291 typedef struct
  292 {
  293     t_Handle    h_Manip;
  294     t_Handle    h_CcNode;
  295 } t_CcNextEngineInfo;
  296 
  297 typedef struct
  298 {
  299     uint16_t            numOfKeys;
  300     uint16_t            maxNumOfKeys;
  301 
  302     bool                maskSupport;
  303     uint32_t            keysMatchTableMaxSize;
  304 
  305     e_FmPcdCcStatsMode  statisticsMode;
  306     uint32_t            numOfStatsFLRs;
  307     uint32_t            countersArraySize;
  308 
  309     bool                isHashBucket;               /**< Valid for match table node that is a bucket of a hash table only */
  310     t_Handle            h_MissStatsCounters;        /**< Valid for hash table node and match table that is a bucket;
  311                                                          Holds the statistics counters allocated by the hash table and
  312                                                          are shared by all hash table buckets; */
  313     t_Handle            h_PrivMissStatsCounters;    /**< Valid for match table node that is a bucket of a hash table only;
  314                                                          Holds the statistics counters that were allocated for this node
  315                                                          and replaced by the shared counters (allocated by the hash table); */
  316     bool                statsEnForMiss;             /**< Valid for hash table node only; TRUE is statistics are currently
  317                                                          enabled for hash 'miss', FALSE otherwise; This parameter effects the
  318                                                          returned statistics count to user, statistics AD always present for 'miss'
  319                                                          for all hash buckets; */
  320     bool                glblMaskUpdated;
  321     t_Handle            p_GlblMask;
  322     bool                lclMask;
  323     uint8_t             parseCode;
  324     uint8_t             offset;
  325     uint8_t             prsArrayOffset;
  326     bool                ctrlFlow;
  327     uint16_t            owners;
  328 
  329     uint8_t             ccKeySizeAccExtraction;
  330     uint8_t             sizeOfExtraction;
  331     uint8_t             glblMaskSize;
  332 
  333     t_Handle            h_KeysMatchTable;
  334     t_Handle            h_AdTable;
  335     t_Handle            h_StatsAds;
  336     t_Handle            h_TmpAd;
  337     t_Handle            h_Ad;
  338     t_Handle            h_StatsFLRs;
  339 
  340     t_List              availableStatsLst;
  341 
  342     t_List              ccPrevNodesLst;
  343 
  344     t_List              ccTreeIdLst;
  345     t_List              ccTreesLst;
  346 
  347     t_Handle            h_FmPcd;
  348     uint32_t            shadowAction;
  349     uint8_t             userSizeOfExtraction;
  350     uint8_t             userOffset;
  351     uint8_t             kgHashShift;            /* used in hash-table */
  352 
  353     t_Handle            h_Spinlock;
  354 
  355     t_FmPcdCcKeyAndNextEngineParams keyAndNextEngineParams[CC_MAX_NUM_OF_KEYS];
  356 } t_FmPcdCcNode;
  357 
  358 typedef struct
  359 {
  360     t_FmPcdCcNode       *p_FmPcdCcNode;
  361     bool                occupied;
  362     uint16_t            owners;
  363     volatile bool       lock;
  364 } t_FmPcdCcNodeArray;
  365 
  366 typedef struct
  367 {
  368     uint8_t             numOfEntriesInGroup;
  369     uint32_t            totalBitsMask;
  370     uint8_t             baseGroupEntry;
  371 } t_FmPcdCcGroupParam;
  372 
  373 typedef struct
  374 {
  375     t_Handle            h_FmPcd;
  376     uint8_t             netEnvId;
  377     uintptr_t           ccTreeBaseAddr;
  378     uint8_t             numOfGrps;
  379     t_FmPcdCcGroupParam fmPcdGroupParam[FM_PCD_MAX_NUM_OF_CC_GROUPS];
  380     t_List              fmPortsLst;
  381     t_FmPcdLock         *p_Lock;
  382     uint8_t             numOfEntries;
  383     uint16_t            owners;
  384     t_Handle            h_FmPcdCcSavedManipParams;
  385     bool                modifiedState;
  386     uint32_t            requiredAction;
  387     t_Handle            h_IpReassemblyManip;
  388     t_Handle            h_CapwapReassemblyManip;
  389 
  390     t_FmPcdCcKeyAndNextEngineParams keyAndNextEngineParams[FM_PCD_MAX_NUM_OF_CC_GROUPS];
  391 } t_FmPcdCcTree;
  392 
  393 
  394 t_Error     FmPcdCcNodeTreeTryLock(t_Handle h_FmPcd,t_Handle h_FmPcdCcNode, t_List *p_List);
  395 void        FmPcdCcNodeTreeReleaseLock(t_Handle h_FmPcd, t_List *p_List);
  396 t_Error     FmPcdUpdateCcShadow (t_FmPcd *p_FmPcd, uint32_t size, uint32_t align);
  397 
  398 
  399 #endif /* __FM_CC_H */

Cache object: ee896b8ba4532431da007fa7861c2b17


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.