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_pcd.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_pcd.h
   36 
   37  @Description   FM PCD ...
   38 *//***************************************************************************/
   39 #ifndef __FM_PCD_H
   40 #define __FM_PCD_H
   41 
   42 #include "std_ext.h"
   43 #include "error_ext.h"
   44 #include "list_ext.h"
   45 #include "fm_pcd_ext.h"
   46 #include "fm_common.h"
   47 #include "fsl_fman_prs.h"
   48 #include "fsl_fman_kg.h"
   49 
   50 #define __ERR_MODULE__  MODULE_FM_PCD
   51 
   52 
   53 /****************************/
   54 /* Defaults                 */
   55 /****************************/
   56 #define DEFAULT_plcrAutoRefresh                 FALSE
   57 #define DEFAULT_fmPcdKgErrorExceptions          (FM_EX_KG_DOUBLE_ECC | FM_EX_KG_KEYSIZE_OVERFLOW)
   58 #define DEFAULT_fmPcdPlcrErrorExceptions        (FM_PCD_EX_PLCR_DOUBLE_ECC | FM_PCD_EX_PLCR_INIT_ENTRY_ERROR)
   59 #define DEFAULT_fmPcdPlcrExceptions             0
   60 #define DEFAULT_fmPcdPrsErrorExceptions         (FM_PCD_EX_PRS_DOUBLE_ECC)
   61 
   62 #define DEFAULT_fmPcdPrsExceptions              FM_PCD_EX_PRS_SINGLE_ECC
   63 #define DEFAULT_numOfUsedProfilesPerWindow      16
   64 #define DEFAULT_numOfSharedPlcrProfiles         4
   65 
   66 /****************************/
   67 /* Network defines          */
   68 /****************************/
   69 #define UDP_HEADER_SIZE     8
   70 
   71 #define ESP_SPI_OFFSET      0
   72 #define ESP_SPI_SIZE        4
   73 #define ESP_SEQ_NUM_OFFSET  ESP_SPI_SIZE
   74 #define ESP_SEQ_NUM_SIZE    4
   75 
   76 /****************************/
   77 /* General defines          */
   78 /****************************/
   79 #define ILLEGAL_CLS_PLAN    0xff
   80 #define ILLEGAL_NETENV      0xff
   81 
   82 #define FM_PCD_MAX_NUM_OF_ALIAS_HDRS    3
   83 
   84 /****************************/
   85 /* Error defines           */
   86 /****************************/
   87 
   88 #define FM_PCD_EX_PLCR_DOUBLE_ECC                   0x20000000
   89 #define FM_PCD_EX_PLCR_INIT_ENTRY_ERROR             0x10000000
   90 #define FM_PCD_EX_PLCR_PRAM_SELF_INIT_COMPLETE      0x08000000
   91 #define FM_PCD_EX_PLCR_ATOMIC_ACTION_COMPLETE       0x04000000
   92 
   93 #define GET_FM_PCD_EXCEPTION_FLAG(bitMask, exception)               \
   94 switch (exception){                                                 \
   95     case e_FM_PCD_KG_EXCEPTION_DOUBLE_ECC:                          \
   96         bitMask = FM_EX_KG_DOUBLE_ECC; break;                   \
   97     case e_FM_PCD_PLCR_EXCEPTION_DOUBLE_ECC:                        \
   98         bitMask = FM_PCD_EX_PLCR_DOUBLE_ECC; break;                 \
   99     case e_FM_PCD_KG_EXCEPTION_KEYSIZE_OVERFLOW:                    \
  100         bitMask = FM_EX_KG_KEYSIZE_OVERFLOW; break;             \
  101     case e_FM_PCD_PLCR_EXCEPTION_INIT_ENTRY_ERROR:                  \
  102         bitMask = FM_PCD_EX_PLCR_INIT_ENTRY_ERROR; break;           \
  103     case e_FM_PCD_PLCR_EXCEPTION_PRAM_SELF_INIT_COMPLETE:           \
  104         bitMask = FM_PCD_EX_PLCR_PRAM_SELF_INIT_COMPLETE; break;    \
  105     case e_FM_PCD_PLCR_EXCEPTION_ATOMIC_ACTION_COMPLETE:            \
  106         bitMask = FM_PCD_EX_PLCR_ATOMIC_ACTION_COMPLETE; break;     \
  107     case e_FM_PCD_PRS_EXCEPTION_DOUBLE_ECC:                         \
  108         bitMask = FM_PCD_EX_PRS_DOUBLE_ECC; break;                  \
  109     case e_FM_PCD_PRS_EXCEPTION_SINGLE_ECC:                         \
  110         bitMask = FM_PCD_EX_PRS_SINGLE_ECC; break;                  \
  111     default: bitMask = 0;break;}
  112 
  113 /***********************************************************************/
  114 /*          Policer defines                                            */
  115 /***********************************************************************/
  116 #define FM_PCD_PLCR_GCR_STEN                  0x40000000
  117 #define FM_PCD_PLCR_DOUBLE_ECC                0x80000000
  118 #define FM_PCD_PLCR_INIT_ENTRY_ERROR          0x40000000
  119 #define FM_PCD_PLCR_PRAM_SELF_INIT_COMPLETE   0x80000000
  120 #define FM_PCD_PLCR_ATOMIC_ACTION_COMPLETE    0x40000000
  121 
  122 /***********************************************************************/
  123 /*          Memory map                                                 */
  124 /***********************************************************************/
  125 #if defined(__MWERKS__) && !defined(__GNUC__)
  126 #pragma pack(push,1)
  127 #endif /* defined(__MWERKS__) && ... */
  128 
  129 
  130 typedef struct {
  131 /* General Configuration and Status Registers */
  132     volatile uint32_t fmpl_gcr;         /* 0x000 FMPL_GCR  - FM Policer General Configuration */
  133     volatile uint32_t fmpl_gsr;         /* 0x004 FMPL_GSR  - FM Policer Global Status Register */
  134     volatile uint32_t fmpl_evr;         /* 0x008 FMPL_EVR  - FM Policer Event Register */
  135     volatile uint32_t fmpl_ier;         /* 0x00C FMPL_IER  - FM Policer Interrupt Enable Register */
  136     volatile uint32_t fmpl_ifr;         /* 0x010 FMPL_IFR  - FM Policer Interrupt Force Register */
  137     volatile uint32_t fmpl_eevr;        /* 0x014 FMPL_EEVR - FM Policer Error Event Register */
  138     volatile uint32_t fmpl_eier;        /* 0x018 FMPL_EIER - FM Policer Error Interrupt Enable Register */
  139     volatile uint32_t fmpl_eifr;        /* 0x01C FMPL_EIFR - FM Policer Error Interrupt Force Register */
  140 /* Global Statistic Counters */
  141     volatile uint32_t fmpl_rpcnt;       /* 0x020 FMPL_RPC  - FM Policer RED Packets Counter */
  142     volatile uint32_t fmpl_ypcnt;       /* 0x024 FMPL_YPC  - FM Policer YELLOW Packets Counter */
  143     volatile uint32_t fmpl_rrpcnt;      /* 0x028 FMPL_RRPC - FM Policer Recolored RED Packet Counter */
  144     volatile uint32_t fmpl_rypcnt;      /* 0x02C FMPL_RYPC - FM Policer Recolored YELLOW Packet Counter */
  145     volatile uint32_t fmpl_tpcnt;       /* 0x030 FMPL_TPC  - FM Policer Total Packet Counter */
  146     volatile uint32_t fmpl_flmcnt;      /* 0x034 FMPL_FLMC - FM Policer Frame Length Mismatch Counter */
  147     volatile uint32_t fmpl_res0[21];    /* 0x038 - 0x08B Reserved */
  148 /* Profile RAM Access Registers */
  149     volatile uint32_t fmpl_par;         /* 0x08C FMPL_PAR    - FM Policer Profile Action Register*/
  150     t_FmPcdPlcrProfileRegs profileRegs;
  151 /* Error Capture Registers */
  152     volatile uint32_t fmpl_serc;        /* 0x100 FMPL_SERC - FM Policer Soft Error Capture */
  153     volatile uint32_t fmpl_upcr;        /* 0x104 FMPL_UPCR - FM Policer Uninitialized Profile Capture Register */
  154     volatile uint32_t fmpl_res2;        /* 0x108 Reserved */
  155 /* Debug Registers */
  156     volatile uint32_t fmpl_res3[61];    /* 0x10C-0x200 Reserved Debug*/
  157 /* Profile Selection Mapping Registers Per Port-ID (n=1-11, 16) */
  158     volatile uint32_t fmpl_dpmr;        /* 0x200 FMPL_DPMR - FM Policer Default Mapping Register */
  159     volatile uint32_t fmpl_pmr[63];     /*+default 0x204-0x2FF FMPL_PMR1 - FMPL_PMR63, - FM Policer Profile Mapping Registers.
  160                                            (for port-ID 1-11, only for supported Port-ID registers) */
  161 } t_FmPcdPlcrRegs;
  162 
  163 #if defined(__MWERKS__) && !defined(__GNUC__)
  164 #pragma pack(pop)
  165 #endif /* defined(__MWERKS__) && ... */
  166 
  167 
  168 /***********************************************************************/
  169 /*  Driver's internal structures                                       */
  170 /***********************************************************************/
  171 
  172 typedef struct {
  173     bool        known;
  174     uint8_t     id;
  175 } t_FmPcdKgSchemesExtractsEntry;
  176 
  177 typedef struct {
  178     t_FmPcdKgSchemesExtractsEntry extractsArray[FM_PCD_KG_MAX_NUM_OF_EXTRACTS_PER_KEY];
  179 } t_FmPcdKgSchemesExtracts;
  180 
  181 typedef struct {
  182     t_Handle        h_Manip;
  183     bool            keepRes;
  184     e_FmPcdEngine   nextEngine;
  185     uint8_t         parseCode;
  186 } t_FmPcdInfoForManip;
  187 
  188 /**************************************************************************//**
  189  @Description   A structure of parameters to communicate
  190                 between the port and PCD regarding the KG scheme.
  191 *//***************************************************************************/
  192 typedef struct {
  193     uint8_t             netEnvId;    /* in */
  194     uint8_t             numOfDistinctionUnits; /* in */
  195     uint8_t             unitIds[FM_PCD_MAX_NUM_OF_DISTINCTION_UNITS]; /* in */
  196     uint32_t            vector; /* out */
  197 } t_NetEnvParams;
  198 
  199 typedef struct {
  200     bool            allocated;
  201     uint8_t         ownerId; /* guestId for KG in multi-partition only.
  202                                 portId for PLCR in any environment */
  203 } t_FmPcdAllocMng;
  204 
  205 typedef struct {
  206     volatile bool       lock;
  207     bool                used;
  208     uint8_t             owners;
  209     uint8_t             netEnvId;
  210     uint8_t             guestId;
  211     uint8_t             baseEntry;
  212     uint16_t            sizeOfGrp;
  213     protocolOpt_t       optArray[FM_PCD_MAX_NUM_OF_OPTIONS(FM_PCD_MAX_NUM_OF_CLS_PLANS)];
  214 } t_FmPcdKgClsPlanGrp;
  215 
  216 typedef struct {
  217     t_Handle            h_FmPcd;
  218     uint8_t             schemeId;
  219     t_FmPcdLock         *p_Lock;
  220     bool                valid;
  221     uint8_t             netEnvId;
  222     uint8_t             owners;
  223     uint32_t            matchVector;
  224     uint32_t            ccUnits;
  225     bool                nextRelativePlcrProfile;
  226     uint16_t            relativeProfileId;
  227     uint16_t            numOfProfiles;
  228     t_FmPcdKgKeyOrder   orderedArray;
  229     e_FmPcdEngine       nextEngine;
  230     e_FmPcdDoneAction   doneAction;
  231     bool                requiredActionFlag;
  232     uint32_t            requiredAction;
  233     bool                extractedOrs;
  234     uint8_t             bitOffsetInPlcrProfile;
  235     bool                directPlcr;
  236 #if (DPAA_VERSION >= 11)
  237     bool                vspe;
  238 #endif
  239 } t_FmPcdKgScheme;
  240 
  241 typedef union {
  242     struct fman_kg_scheme_regs schemeRegs;
  243     struct fman_kg_pe_regs portRegs;
  244     struct fman_kg_cp_regs clsPlanRegs;
  245 } u_FmPcdKgIndirectAccessRegs;
  246 
  247 typedef struct {
  248     struct fman_kg_regs *p_FmPcdKgRegs;
  249     uint32_t            schemeExceptionsBitMask;
  250     uint8_t             numOfSchemes;
  251     t_Handle            h_HwSpinlock;
  252     uint8_t             schemesIds[FM_PCD_KG_NUM_OF_SCHEMES];
  253     t_FmPcdKgScheme     schemes[FM_PCD_KG_NUM_OF_SCHEMES];
  254     t_FmPcdKgClsPlanGrp clsPlanGrps[FM_MAX_NUM_OF_PORTS];
  255     uint8_t             emptyClsPlanGrpId;
  256     t_FmPcdAllocMng     schemesMng[FM_PCD_KG_NUM_OF_SCHEMES]; /* only for MASTER ! */
  257     t_FmPcdAllocMng     clsPlanBlocksMng[FM_PCD_MAX_NUM_OF_CLS_PLANS/CLS_PLAN_NUM_PER_GRP];
  258     u_FmPcdKgIndirectAccessRegs *p_IndirectAccessRegs;
  259 } t_FmPcdKg;
  260 
  261 typedef struct {
  262     uint16_t            profilesBase;
  263     uint16_t            numOfProfiles;
  264     t_Handle            h_FmPort;
  265 } t_FmPcdPlcrMapParam;
  266 
  267 typedef struct {
  268     uint16_t                            absoluteProfileId;
  269     t_Handle                            h_FmPcd;
  270     bool                                valid;
  271     t_FmPcdLock                         *p_Lock;
  272     t_FmPcdAllocMng                     profilesMng;
  273     bool                                requiredActionFlag;
  274     uint32_t                            requiredAction;
  275     e_FmPcdEngine                       nextEngineOnGreen;          /**< Green next engine type */
  276     u_FmPcdPlcrNextEngineParams         paramsOnGreen;              /**< Green next engine params */
  277 
  278     e_FmPcdEngine                       nextEngineOnYellow;         /**< Yellow next engine type */
  279     u_FmPcdPlcrNextEngineParams         paramsOnYellow;             /**< Yellow next engine params */
  280 
  281     e_FmPcdEngine                       nextEngineOnRed;            /**< Red next engine type */
  282     u_FmPcdPlcrNextEngineParams         paramsOnRed;                /**< Red next engine params */
  283 } t_FmPcdPlcrProfile;
  284 
  285 typedef struct {
  286     t_FmPcdPlcrRegs                 *p_FmPcdPlcrRegs;
  287     uint16_t                        partPlcrProfilesBase;
  288     uint16_t                        partNumOfPlcrProfiles;
  289     t_FmPcdPlcrProfile              profiles[FM_PCD_PLCR_NUM_ENTRIES];
  290     uint16_t                        numOfSharedProfiles;
  291     uint16_t                        sharedProfilesIds[FM_PCD_PLCR_NUM_ENTRIES];
  292     t_FmPcdPlcrMapParam             portsMapping[FM_MAX_NUM_OF_PORTS];
  293     t_Handle                        h_HwSpinlock;
  294     t_Handle                        h_SwSpinlock;
  295 } t_FmPcdPlcr;
  296 
  297 typedef struct {
  298     uint32_t                        *p_SwPrsCode;
  299     uint32_t                        *p_CurrSwPrs;
  300     uint8_t                         currLabel;
  301     struct fman_prs_regs            *p_FmPcdPrsRegs;
  302     t_FmPcdPrsLabelParams           labelsTable[FM_PCD_PRS_NUM_OF_LABELS];
  303     uint32_t                        fmPcdPrsPortIdStatistics;
  304 } t_FmPcdPrs;
  305 
  306 typedef struct {
  307     struct {
  308         e_NetHeaderType             hdr;
  309         protocolOpt_t               opt; /* only one option !! */
  310     } hdrs[FM_PCD_MAX_NUM_OF_INTERCHANGEABLE_HDRS];
  311 } t_FmPcdIntDistinctionUnit;
  312 
  313 typedef struct {
  314     e_NetHeaderType             hdr;
  315     protocolOpt_t               opt; /* only one option !! */
  316     e_NetHeaderType             aliasHdr;
  317 } t_FmPcdNetEnvAliases;
  318 
  319 typedef struct {
  320     uint8_t                     netEnvId;
  321     t_Handle                    h_FmPcd;
  322     t_Handle                    h_Spinlock;
  323     bool                        used;
  324     uint8_t                     owners;
  325     uint8_t                     clsPlanGrpId;
  326     t_FmPcdIntDistinctionUnit   units[FM_PCD_MAX_NUM_OF_DISTINCTION_UNITS];
  327     uint32_t                    unitsVectors[FM_PCD_MAX_NUM_OF_DISTINCTION_UNITS];
  328     uint32_t                    lcvs[FM_PCD_PRS_NUM_OF_HDRS];
  329     uint32_t                    macsecVector;
  330     t_FmPcdNetEnvAliases        aliasHdrs[FM_PCD_MAX_NUM_OF_ALIAS_HDRS];
  331 } t_FmPcdNetEnv;
  332 
  333 typedef struct {
  334     struct fman_prs_cfg          dfltCfg;
  335     bool                        plcrAutoRefresh;
  336     uint16_t                    prsMaxParseCycleLimit;
  337 } t_FmPcdDriverParam;
  338 
  339 typedef struct {
  340     t_Handle                    h_Fm;
  341     t_Handle                    h_FmMuram;
  342     t_FmRevisionInfo            fmRevInfo;
  343 
  344     uint64_t                    physicalMuramBase;
  345 
  346     t_Handle                    h_Spinlock;
  347     t_List                      freeLocksLst;
  348     t_List                      acquiredLocksLst;
  349 
  350     t_Handle                    h_IpcSession; /* relevant for guest only */
  351     bool                        enabled;
  352     uint8_t                     guestId;            /**< Guest Partition Id */
  353     uint8_t                     numOfEnabledGuestPartitionsPcds;
  354     char                        fmPcdModuleName[MODULE_NAME_SIZE];
  355     char                        fmPcdIpcHandlerModuleName[MODULE_NAME_SIZE]; /* relevant for guest only - this is the master's name */
  356     t_FmPcdNetEnv               netEnvs[FM_MAX_NUM_OF_PORTS];
  357     t_FmPcdKg                   *p_FmPcdKg;
  358     t_FmPcdPlcr                 *p_FmPcdPlcr;
  359     t_FmPcdPrs                  *p_FmPcdPrs;
  360 
  361     void                        *p_CcShadow;     /**< CC MURAM shadow */
  362     uint32_t                    ccShadowSize;
  363     uint32_t                    ccShadowAlign;
  364     volatile bool               shadowLock;
  365     t_Handle                    h_ShadowSpinlock;
  366 
  367     t_Handle                    h_Hc;
  368 
  369     uint32_t                    exceptions;
  370     t_FmPcdExceptionCallback    *f_Exception;
  371     t_FmPcdIdExceptionCallback  *f_FmPcdIndexedException;
  372     t_Handle                    h_App;
  373     uintptr_t                   ipv6FrameIdAddr;
  374     uintptr_t                   capwapFrameIdAddr;
  375     bool                        advancedOffloadSupport;
  376 
  377     t_FmPcdDriverParam          *p_FmPcdDriverParam;
  378 } t_FmPcd;
  379 
  380 #if (DPAA_VERSION >= 11)
  381 typedef uint8_t t_FmPcdFrmReplicUpdateType;
  382 #define FRM_REPLIC_UPDATE_COUNTER             0x01
  383 #define FRM_REPLIC_UPDATE_INFO                0x02
  384 #endif /* (DPAA_VERSION >= 11) */
  385 /***********************************************************************/
  386 /*  PCD internal routines                                              */
  387 /***********************************************************************/
  388 
  389 t_Error     PcdGetVectorForOpt(t_FmPcd *p_FmPcd, uint8_t netEnvId, protocolOpt_t opt, uint32_t *p_Vector);
  390 t_Error     PcdGetUnitsVector(t_FmPcd *p_FmPcd, t_NetEnvParams *p_Params);
  391 bool        PcdNetEnvIsUnitWithoutOpts(t_FmPcd *p_FmPcd, uint8_t netEnvId, uint32_t unitVector);
  392 t_Error     PcdGetClsPlanGrpParams(t_FmPcd *p_FmPcd, t_FmPcdKgInterModuleClsPlanGrpParams *p_GrpParams);
  393 void        FmPcdSetClsPlanGrpId(t_FmPcd *p_FmPcd, uint8_t netEnvId, uint8_t clsPlanGrpId);
  394 e_NetHeaderType FmPcdGetAliasHdr(t_FmPcd *p_FmPcd, uint8_t netEnvId, e_NetHeaderType hdr);
  395 uint8_t     FmPcdNetEnvGetUnitIdForSingleHdr(t_FmPcd *p_FmPcd, uint8_t netEnvId, e_NetHeaderType hdr);
  396 uint8_t     FmPcdNetEnvGetUnitId(t_FmPcd *p_FmPcd, uint8_t netEnvId, e_NetHeaderType hdr, bool interchangeable, protocolOpt_t opt);
  397 
  398 t_Error     FmPcdManipBuildIpReassmScheme(t_FmPcd *p_FmPcd, t_Handle h_NetEnv, t_Handle h_CcTree, t_Handle h_Manip, bool isIpv4, uint8_t groupId);
  399 t_Error     FmPcdManipDeleteIpReassmSchemes(t_Handle h_Manip);
  400 t_Error     FmPcdManipBuildCapwapReassmScheme(t_FmPcd *p_FmPcd, t_Handle h_NetEnv, t_Handle h_CcTree, t_Handle h_Manip, uint8_t groupId);
  401 t_Error     FmPcdManipDeleteCapwapReassmSchemes(t_Handle h_Manip);
  402 bool        FmPcdManipIpReassmIsIpv6Hdr(t_Handle h_Manip);
  403 
  404 t_Handle    KgConfig( t_FmPcd *p_FmPcd, t_FmPcdParams *p_FmPcdParams);
  405 t_Error     KgInit(t_FmPcd *p_FmPcd);
  406 t_Error     KgFree(t_FmPcd *p_FmPcd);
  407 void        KgSetClsPlan(t_Handle h_FmPcd, t_FmPcdKgInterModuleClsPlanSet *p_Set);
  408 bool        KgIsSchemeAlwaysDirect(t_Handle h_FmPcd, uint8_t schemeId);
  409 void        KgEnable(t_FmPcd *p_FmPcd);
  410 void        KgDisable(t_FmPcd *p_FmPcd);
  411 t_Error     KgAllocClsPlanEntries(t_Handle h_FmPcd, uint16_t numOfClsPlanEntries, uint8_t guestId, uint8_t *p_First);
  412 void        KgFreeClsPlanEntries(t_Handle h_FmPcd, uint16_t numOfClsPlanEntries, uint8_t guestId, uint8_t base);
  413 
  414 /* only for MULTI partittion */
  415 t_Error     FmPcdKgAllocSchemes(t_Handle h_FmPcd, uint8_t numOfSchemes, uint8_t guestId, uint8_t *p_SchemesIds);
  416 t_Error     FmPcdKgFreeSchemes(t_Handle h_FmPcd, uint8_t numOfSchemes, uint8_t guestId, uint8_t *p_SchemesIds);
  417 /* only for SINGLE partittion */
  418 t_Error     KgBindPortToSchemes(t_Handle h_FmPcd , uint8_t hardwarePortId, uint32_t spReg);
  419 
  420 t_FmPcdLock *FmPcdAcquireLock(t_Handle h_FmPcd);
  421 void        FmPcdReleaseLock(t_Handle h_FmPcd, t_FmPcdLock *p_Lock);
  422 
  423 t_Handle    PlcrConfig(t_FmPcd *p_FmPcd, t_FmPcdParams *p_FmPcdParams);
  424 t_Error     PlcrInit(t_FmPcd *p_FmPcd);
  425 t_Error     PlcrFree(t_FmPcd *p_FmPcd);
  426 void        PlcrEnable(t_FmPcd *p_FmPcd);
  427 void        PlcrDisable(t_FmPcd *p_FmPcd);
  428 uint16_t    PlcrAllocProfilesForPartition(t_FmPcd *p_FmPcd, uint16_t base, uint16_t numOfProfiles, uint8_t guestId);
  429 void        PlcrFreeProfilesForPartition(t_FmPcd *p_FmPcd, uint16_t base, uint16_t numOfProfiles, uint8_t guestId);
  430 t_Error     PlcrSetPortProfiles(t_FmPcd    *p_FmPcd,
  431                                 uint8_t    hardwarePortId,
  432                                 uint16_t   numOfProfiles,
  433                                 uint16_t   base);
  434 t_Error     PlcrClearPortProfiles(t_FmPcd *p_FmPcd, uint8_t hardwarePortId);
  435 
  436 t_Handle    PrsConfig(t_FmPcd *p_FmPcd,t_FmPcdParams *p_FmPcdParams);
  437 t_Error     PrsInit(t_FmPcd *p_FmPcd);
  438 void        PrsEnable(t_FmPcd *p_FmPcd);
  439 void        PrsDisable(t_FmPcd *p_FmPcd);
  440 void        PrsFree(t_FmPcd *p_FmPcd );
  441 t_Error     PrsIncludePortInStatistics(t_FmPcd *p_FmPcd, uint8_t hardwarePortId, bool include);
  442 
  443 t_Error     FmPcdCcGetGrpParams(t_Handle treeId, uint8_t grpId, uint32_t *p_GrpBits, uint8_t *p_GrpBase);
  444 uint8_t     FmPcdCcGetOffset(t_Handle h_CcNode);
  445 uint8_t     FmPcdCcGetParseCode(t_Handle h_CcNode);
  446 uint16_t    FmPcdCcGetNumOfKeys(t_Handle h_CcNode);
  447 t_Error     ValidateNextEngineParams(t_Handle h_FmPcd, t_FmPcdCcNextEngineParams *p_FmPcdCcNextEngineParams, e_FmPcdCcStatsMode supportedStatsMode);
  448 
  449 void        FmPcdManipUpdateOwner(t_Handle h_Manip, bool add);
  450 t_Error     FmPcdManipCheckParamsForCcNextEngine(t_FmPcdCcNextEngineParams *p_InfoForManip, uint32_t *requiredAction);
  451 void        FmPcdManipUpdateAdResultForCc(t_Handle                     h_Manip,
  452                                           t_FmPcdCcNextEngineParams    *p_CcNextEngineParams,
  453                                           t_Handle                     p_Ad,
  454                                           t_Handle                     *p_AdNewPtr);
  455 void        FmPcdManipUpdateAdContLookupForCc(t_Handle h_Manip, t_Handle p_Ad, t_Handle *p_AdNew, uint32_t adTableOffset);
  456 void        FmPcdManipUpdateOwner(t_Handle h_Manip, bool add);
  457 t_Error     FmPcdManipCheckParamsWithCcNodeParams(t_Handle h_Manip, t_Handle h_FmPcdCcNode);
  458 #ifdef FM_CAPWAP_SUPPORT
  459 t_Handle    FmPcdManipApplSpecificBuild(void);
  460 bool        FmPcdManipIsCapwapApplSpecific(t_Handle h_Manip);
  461 #endif /* FM_CAPWAP_SUPPORT */
  462 #if (DPAA_VERSION >= 11)
  463 void *      FrmReplicGroupGetSourceTableDescriptor(t_Handle h_ReplicGroup);
  464 void        FrmReplicGroupUpdateOwner(t_Handle h_ReplicGroup, bool add);
  465 void        FrmReplicGroupUpdateAd(t_Handle h_ReplicGroup, void *p_Ad, t_Handle *h_AdNew);
  466 
  467 void        FmPcdCcGetAdTablesThatPointOnReplicGroup(t_Handle   h_Node,
  468                                                      t_Handle   h_ReplicGroup,
  469                                                      t_List     *p_AdTables,
  470                                                      uint32_t   *p_NumOfAdTables);
  471 #endif /* (DPAA_VERSION >= 11) */
  472 
  473 void EnqueueNodeInfoToRelevantLst(t_List *p_List, t_CcNodeInformation *p_CcInfo, t_Handle h_Spinlock);
  474 void DequeueNodeInfoFromRelevantLst(t_List *p_List, t_Handle h_Info, t_Handle h_Spinlock);
  475 t_CcNodeInformation* FindNodeInfoInReleventLst(t_List *p_List, t_Handle h_Info, t_Handle h_Spinlock);
  476 t_List *FmPcdManipGetSpinlock(t_Handle h_Manip);
  477 t_List *FmPcdManipGetNodeLstPointedOnThisManip(t_Handle h_Manip);
  478 
  479 typedef struct
  480 {
  481     t_Handle    h_StatsAd;
  482     t_Handle    h_StatsCounters;
  483 #if (DPAA_VERSION >= 11)
  484     t_Handle    h_StatsFLRs;
  485 #endif /* (DPAA_VERSION >= 11) */
  486 } t_FmPcdCcStatsParams;
  487 
  488 void NextStepAd(t_Handle                     h_Ad,
  489                 t_FmPcdCcStatsParams         *p_FmPcdCcStatsParams,
  490                 t_FmPcdCcNextEngineParams    *p_FmPcdCcNextEngineParams,
  491                 t_FmPcd                      *p_FmPcd);
  492 void ReleaseLst(t_List *p_List);
  493 
  494 static __inline__ t_Handle FmPcdGetMuramHandle(t_Handle h_FmPcd)
  495 {
  496     t_FmPcd     *p_FmPcd = (t_FmPcd*)h_FmPcd;
  497     ASSERT_COND(p_FmPcd);
  498     return p_FmPcd->h_FmMuram;
  499 }
  500 
  501 static __inline__ uint64_t FmPcdGetMuramPhysBase(t_Handle h_FmPcd)
  502 {
  503     t_FmPcd     *p_FmPcd = (t_FmPcd*)h_FmPcd;
  504     ASSERT_COND(p_FmPcd);
  505     return p_FmPcd->physicalMuramBase;
  506 }
  507 
  508 static __inline__ uint32_t FmPcdLockSpinlock(t_FmPcdLock *p_Lock)
  509 {
  510     ASSERT_COND(p_Lock);
  511     return XX_LockIntrSpinlock(p_Lock->h_Spinlock);
  512 }
  513 
  514 static __inline__ void FmPcdUnlockSpinlock(t_FmPcdLock *p_Lock, uint32_t flags)
  515 {
  516     ASSERT_COND(p_Lock);
  517     XX_UnlockIntrSpinlock(p_Lock->h_Spinlock, flags);
  518 }
  519 
  520 static __inline__ bool FmPcdLockTryLock(t_FmPcdLock *p_Lock)
  521 {
  522     uint32_t intFlags;
  523 
  524     ASSERT_COND(p_Lock);
  525     intFlags = XX_LockIntrSpinlock(p_Lock->h_Spinlock);
  526     if (p_Lock->flag)
  527     {
  528         XX_UnlockIntrSpinlock(p_Lock->h_Spinlock, intFlags);
  529         return FALSE;
  530     }
  531     p_Lock->flag = TRUE;
  532     XX_UnlockIntrSpinlock(p_Lock->h_Spinlock, intFlags);
  533     return TRUE;
  534 }
  535 
  536 static __inline__ void FmPcdLockUnlock(t_FmPcdLock *p_Lock)
  537 {
  538     ASSERT_COND(p_Lock);
  539     p_Lock->flag = FALSE;
  540 }
  541 
  542 
  543 #endif /* __FM_PCD_H */

Cache object: 3a1d3771a8f7d57dc8f1855f2cf0efac


[ 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.