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/Port/fm_port.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_port.h
   36 
   37  @Description   FM Port internal structures and definitions.
   38 *//***************************************************************************/
   39 #ifndef __FM_PORT_H
   40 #define __FM_PORT_H
   41 
   42 #include "error_ext.h"
   43 #include "std_ext.h"
   44 #include "fm_port_ext.h"
   45 
   46 #include "fm_common.h"
   47 #include "fm_sp_common.h"
   48 #include "fsl_fman_sp.h"
   49 #include "fm_port_ext.h"
   50 #include "fsl_fman_port.h"
   51 
   52 #define __ERR_MODULE__  MODULE_FM_PORT
   53 
   54 
   55 #define MIN_EXT_BUF_SIZE                                64
   56 #define DATA_ALIGNMENT                                  64
   57 #define MAX_LIODN_OFFSET                                64
   58 #define MAX_PORT_FIFO_SIZE                              MIN(BMI_MAX_FIFO_SIZE, 1024*BMI_FIFO_UNITS)
   59 
   60 /**************************************************************************//**
   61  @Description       Memory Map defines
   62 *//***************************************************************************/
   63 #define BMI_PORT_REGS_OFFSET                            0
   64 #define QMI_PORT_REGS_OFFSET                            0x400
   65 #define PRS_PORT_REGS_OFFSET                            0x800
   66 
   67 /**************************************************************************//**
   68  @Description       defaults
   69 *//***************************************************************************/
   70 #define DEFAULT_PORT_deqHighPriority_1G                 FALSE
   71 #define DEFAULT_PORT_deqHighPriority_10G                TRUE
   72 #define DEFAULT_PORT_deqType                            e_FM_PORT_DEQ_TYPE1
   73 #define DEFAULT_PORT_deqPrefetchOption                  e_FM_PORT_DEQ_FULL_PREFETCH
   74 #define DEFAULT_PORT_deqPrefetchOption_HC               e_FM_PORT_DEQ_NO_PREFETCH
   75 #define DEFAULT_PORT_deqByteCnt_10G                     0x1400
   76 #define DEFAULT_PORT_deqByteCnt_1G                      0x400
   77 #define DEFAULT_PORT_bufferPrefixContent_privDataSize   DEFAULT_FM_SP_bufferPrefixContent_privDataSize
   78 #define DEFAULT_PORT_bufferPrefixContent_passPrsResult  DEFAULT_FM_SP_bufferPrefixContent_passPrsResult
   79 #define DEFAULT_PORT_bufferPrefixContent_passTimeStamp  DEFAULT_FM_SP_bufferPrefixContent_passTimeStamp
   80 #define DEFAULT_PORT_bufferPrefixContent_allOtherPCDInfo DEFAULT_FM_SP_bufferPrefixContent_allOtherPCDInfo
   81 #define DEFAULT_PORT_bufferPrefixContent_dataAlign      DEFAULT_FM_SP_bufferPrefixContent_dataAlign
   82 #define DEFAULT_PORT_cheksumLastBytesIgnore             0
   83 #define DEFAULT_PORT_cutBytesFromEnd                    4
   84 #define DEFAULT_PORT_fifoDeqPipelineDepth_IM            2
   85 
   86 #define DEFAULT_PORT_frmDiscardOverride                 FALSE
   87 
   88 #define DEFAULT_PORT_dmaSwapData                        (e_FmDmaSwapOption)DEFAULT_FMAN_SP_DMA_SWAP_DATA
   89 #define DEFAULT_PORT_dmaIntContextCacheAttr             (e_FmDmaCacheOption)DEFAULT_FMAN_SP_DMA_INT_CONTEXT_CACHE_ATTR
   90 #define DEFAULT_PORT_dmaHeaderCacheAttr                 (e_FmDmaCacheOption)DEFAULT_FMAN_SP_DMA_HEADER_CACHE_ATTR
   91 #define DEFAULT_PORT_dmaScatterGatherCacheAttr          (e_FmDmaCacheOption)DEFAULT_FMAN_SP_DMA_SCATTER_GATHER_CACHE_ATTR
   92 #define DEFAULT_PORT_dmaWriteOptimize                   DEFAULT_FMAN_SP_DMA_WRITE_OPTIMIZE
   93 
   94 #define DEFAULT_PORT_noScatherGather                    DEFAULT_FMAN_SP_NO_SCATTER_GATHER
   95 #define DEFAULT_PORT_forwardIntContextReuse             FALSE
   96 #define DEFAULT_PORT_BufMargins_startMargins            32
   97 #define DEFAULT_PORT_BufMargins_endMargins              0
   98 #define DEFAULT_PORT_syncReq                            TRUE
   99 #define DEFAULT_PORT_syncReqForHc                       FALSE
  100 #define DEFAULT_PORT_color                              e_FM_PORT_COLOR_GREEN
  101 #define DEFAULT_PORT_errorsToDiscard                    FM_PORT_FRM_ERR_CLS_DISCARD
  102 /* #define DEFAULT_PORT_dualRateLimitScaleDown             e_FM_PORT_DUAL_RATE_LIMITER_NONE */
  103 /* #define DEFAULT_PORT_rateLimitBurstSizeHighGranularity  FALSE */
  104 #define DEFAULT_PORT_exception                          IM_EV_BSY
  105 #define DEFAULT_PORT_maxFrameLength                     9600
  106 
  107 #define DEFAULT_notSupported                            0xff
  108 
  109 #if (DPAA_VERSION < 11)
  110 #define DEFAULT_PORT_rxFifoPriElevationLevel            MAX_PORT_FIFO_SIZE
  111 #define DEFAULT_PORT_rxFifoThreshold                    (MAX_PORT_FIFO_SIZE*3/4)
  112 
  113 #define DEFAULT_PORT_txFifoMinFillLevel                 0
  114 #define DEFAULT_PORT_txFifoLowComfLevel                 (5*KILOBYTE)
  115 #define DEFAULT_PORT_fifoDeqPipelineDepth_1G            1
  116 #define DEFAULT_PORT_fifoDeqPipelineDepth_10G           4
  117 
  118 #define DEFAULT_PORT_fifoDeqPipelineDepth_OH            2
  119 
  120 /* Host command port MUST NOT be changed to more than 1 !!! */
  121 #define DEFAULT_PORT_numOfTasks(type)                       \
  122     (uint32_t)((((type) == e_FM_PORT_TYPE_RX_10G) ||        \
  123                 ((type) == e_FM_PORT_TYPE_TX_10G)) ? 16 :   \
  124                ((((type) == e_FM_PORT_TYPE_RX) ||           \
  125                  ((type) == e_FM_PORT_TYPE_TX) ||           \
  126                  ((type) == e_FM_PORT_TYPE_OH_OFFLINE_PARSING)) ? 3 : 1))
  127 
  128 #define DEFAULT_PORT_extraNumOfTasks(type)                  \
  129     (uint32_t)(((type) == e_FM_PORT_TYPE_RX_10G)  ? 8 :    \
  130                (((type) == e_FM_PORT_TYPE_RX) ? 2 : 0))
  131 
  132 #define DEFAULT_PORT_numOfOpenDmas(type)                    \
  133     (uint32_t)((((type) == e_FM_PORT_TYPE_TX_10G) ||        \
  134                 ((type) == e_FM_PORT_TYPE_RX_10G)) ? 8 : 1 )
  135 
  136 #define DEFAULT_PORT_extraNumOfOpenDmas(type)               \
  137     (uint32_t)(((type) == e_FM_PORT_TYPE_RX_10G) ? 8 :    \
  138                (((type) == e_FM_PORT_TYPE_RX) ? 1 : 0))
  139 
  140 #define DEFAULT_PORT_numOfFifoBufs(type)                    \
  141     (uint32_t)((((type) == e_FM_PORT_TYPE_RX_10G) ||        \
  142                 ((type) == e_FM_PORT_TYPE_TX_10G)) ? 48 :   \
  143                 ((type) == e_FM_PORT_TYPE_RX) ? 45 :        \
  144                 ((type) == e_FM_PORT_TYPE_TX) ? 44 : 8)
  145 
  146 #define DEFAULT_PORT_extraNumOfFifoBufs             0
  147 
  148 #else  /* (DPAA_VERSION < 11) */
  149 /* Defaults are registers' reset values */
  150 #define DEFAULT_PORT_rxFifoPriElevationLevel            MAX_PORT_FIFO_SIZE
  151 #define DEFAULT_PORT_rxFifoThreshold                    MAX_PORT_FIFO_SIZE
  152 
  153 #define DEFAULT_PORT_txFifoMinFillLevel                 0
  154 #define DEFAULT_PORT_txFifoLowComfLevel                 (5 * KILOBYTE)
  155 #define DEFAULT_PORT_fifoDeqPipelineDepth_1G            2
  156 #define DEFAULT_PORT_fifoDeqPipelineDepth_10G           4
  157 
  158 #define DEFAULT_PORT_fifoDeqPipelineDepth_OH            2
  159 
  160 #define DEFAULT_PORT_numOfTasks(type)                       \
  161     (uint32_t)((((type) == e_FM_PORT_TYPE_RX_10G) ||        \
  162                 ((type) == e_FM_PORT_TYPE_TX_10G)) ? 14 :   \
  163                (((type) == e_FM_PORT_TYPE_RX) ||            \
  164                  ((type) == e_FM_PORT_TYPE_TX)) ? 4 :       \
  165                  ((type) == e_FM_PORT_TYPE_OH_OFFLINE_PARSING) ? 6 : 1)
  166 
  167 #define DEFAULT_PORT_extraNumOfTasks(type)          0
  168 
  169 #define DEFAULT_PORT_numOfOpenDmas(type)                    \
  170     (uint32_t)(((type) == e_FM_PORT_TYPE_RX_10G) ? 8 :      \
  171                ((type) == e_FM_PORT_TYPE_TX_10G) ? 12 :     \
  172                ((type) == e_FM_PORT_TYPE_RX)     ? 2 :      \
  173                ((type) == e_FM_PORT_TYPE_TX)     ? 3 :      \
  174                ((type) == e_FM_PORT_TYPE_OH_HOST_COMMAND) ? 2 : 4)
  175 
  176 #define DEFAULT_PORT_extraNumOfOpenDmas(type)       0
  177 
  178 #define DEFAULT_PORT_numOfFifoBufs(type)                   \
  179     (uint32_t) (((type) == e_FM_PORT_TYPE_RX_10G) ? 96 : \
  180                 ((type) == e_FM_PORT_TYPE_TX_10G) ? 64 : \
  181                 ((type) == e_FM_PORT_TYPE_OH_HOST_COMMAND) ? 10 : 50)
  182 
  183 #define DEFAULT_PORT_extraNumOfFifoBufs             0
  184 
  185 #endif /* (DPAA_VERSION < 11) */
  186 
  187 #define DEFAULT_PORT_txBdRingLength                 16
  188 #define DEFAULT_PORT_rxBdRingLength                 128
  189 #define DEFAULT_PORT_ImfwExtStructsMemId            0
  190 #define DEFAULT_PORT_ImfwExtStructsMemAttr          MEMORY_ATTR_CACHEABLE
  191 
  192 #define FM_PORT_CG_REG_NUM(_cgId) (((FM_PORT_NUM_OF_CONGESTION_GRPS/32)-1)-_cgId/32)
  193 
  194 /**************************************************************************//**
  195  @Collection    PCD Engines
  196 *//***************************************************************************/
  197 typedef uint32_t fmPcdEngines_t; /**< options as defined below: */
  198 
  199 #define FM_PCD_NONE                                 0                   /**< No PCD Engine indicated */
  200 #define FM_PCD_PRS                                  0x80000000          /**< Parser indicated */
  201 #define FM_PCD_KG                                   0x40000000          /**< Keygen indicated */
  202 #define FM_PCD_CC                                   0x20000000          /**< Coarse classification indicated */
  203 #define FM_PCD_PLCR                                 0x10000000          /**< Policer indicated */
  204 #define FM_PCD_MANIP                                0x08000000          /**< Manipulation indicated */
  205 /* @} */
  206 
  207 #define FM_PORT_MAX_NUM_OF_EXT_POOLS_ALL_INTEGRATIONS       8
  208 #define FM_PORT_MAX_NUM_OF_CONGESTION_GRPS_ALL_INTEGRATIONS 256
  209 #define FM_PORT_CG_REG_NUM(_cgId) (((FM_PORT_NUM_OF_CONGESTION_GRPS/32)-1)-_cgId/32)
  210 
  211 #define FM_OH_PORT_ID                               0
  212 
  213 /***********************************************************************/
  214 /*          SW parser OFFLOAD labels (offsets)                         */
  215 /***********************************************************************/
  216 #if (DPAA_VERSION == 10)
  217 #define OFFLOAD_SW_PATCH_IPv4_IPR_LABEL         0x300
  218 #define OFFLOAD_SW_PATCH_IPv6_IPR_LABEL         0x325
  219 #define OFFLOAD_SW_PATCH_IPv6_IPF_LABEL         0x325
  220 #else
  221 #define OFFLOAD_SW_PATCH_IPv4_IPR_LABEL         0x100
  222 /* Will be used for:
  223  * 1. identify fragments
  224  * 2. udp-lite
  225  */
  226 #define OFFLOAD_SW_PATCH_IPv6_IPR_LABEL         0x146
  227 /* Will be used for:
  228  * 1. will identify the fragmentable area
  229  * 2. udp-lite
  230  */
  231 #define OFFLOAD_SW_PATCH_IPv6_IPF_LABEL         0x261
  232 #define OFFLOAD_SW_PATCH_CAPWAP_LABEL           0x38d
  233 #endif /* (DPAA_VERSION == 10) */
  234 
  235 #if ((DPAA_VERSION == 10) && defined(FM_CAPWAP_SUPPORT))
  236 #define UDP_LITE_SW_PATCH_LABEL                 0x2E0
  237 #endif /* ((DPAA_VERSION == 10) && defined(FM_CAPWAP_SUPPORT)) */
  238 
  239 
  240 /**************************************************************************//**
  241  @Description       Memory Mapped Registers
  242 *//***************************************************************************/
  243 
  244 #if defined(__MWERKS__) && !defined(__GNUC__)
  245 #pragma pack(push,1)
  246 #endif /* defined(__MWERKS__) && ... */
  247 
  248 typedef struct
  249 {
  250     volatile uint32_t   fmbm_rcfg;      /**< Rx Configuration */
  251     volatile uint32_t   fmbm_rst;       /**< Rx Status */
  252     volatile uint32_t   fmbm_rda;       /**< Rx DMA attributes*/
  253     volatile uint32_t   fmbm_rfp;       /**< Rx FIFO Parameters*/
  254     volatile uint32_t   fmbm_rfed;      /**< Rx Frame End Data*/
  255     volatile uint32_t   fmbm_ricp;      /**< Rx Internal Context Parameters*/
  256     volatile uint32_t   fmbm_rim;       /**< Rx Internal Buffer Margins*/
  257     volatile uint32_t   fmbm_rebm;      /**< Rx External Buffer Margins*/
  258     volatile uint32_t   fmbm_rfne;      /**< Rx Frame Next Engine*/
  259     volatile uint32_t   fmbm_rfca;      /**< Rx Frame Command Attributes.*/
  260     volatile uint32_t   fmbm_rfpne;     /**< Rx Frame Parser Next Engine*/
  261     volatile uint32_t   fmbm_rpso;      /**< Rx Parse Start Offset*/
  262     volatile uint32_t   fmbm_rpp;       /**< Rx Policer Profile  */
  263     volatile uint32_t   fmbm_rccb;      /**< Rx Coarse Classification Base */
  264     volatile uint32_t   fmbm_reth;      /**< Rx Excessive Threshold */
  265     volatile uint32_t   reserved1[0x01];/**< (0x03C) */
  266     volatile uint32_t   fmbm_rprai[FM_PORT_PRS_RESULT_NUM_OF_WORDS];
  267                                         /**< Rx Parse Results Array Initialization*/
  268     volatile uint32_t   fmbm_rfqid;     /**< Rx Frame Queue ID*/
  269     volatile uint32_t   fmbm_refqid;    /**< Rx Error Frame Queue ID*/
  270     volatile uint32_t   fmbm_rfsdm;     /**< Rx Frame Status Discard Mask*/
  271     volatile uint32_t   fmbm_rfsem;     /**< Rx Frame Status Error Mask*/
  272     volatile uint32_t   fmbm_rfene;     /**< Rx Frame Enqueue Next Engine */
  273     volatile uint32_t   reserved2[0x02];/**< (0x074-0x078) */
  274     volatile uint32_t   fmbm_rcmne;     /**< Rx Frame Continuous Mode Next Engine */
  275     volatile uint32_t   reserved3[0x20];/**< (0x080 0x0FF)  */
  276     volatile uint32_t   fmbm_ebmpi[FM_PORT_MAX_NUM_OF_EXT_POOLS_ALL_INTEGRATIONS];
  277                                         /**< Buffer Manager pool Information-*/
  278     volatile uint32_t   fmbm_acnt[FM_PORT_MAX_NUM_OF_EXT_POOLS_ALL_INTEGRATIONS];
  279                                         /**< Allocate Counter-*/
  280     volatile uint32_t   reserved4[0x08];
  281                                         /**< 0x130/0x140 - 0x15F reserved -*/
  282     volatile uint32_t   fmbm_rcgm[FM_PORT_MAX_NUM_OF_CONGESTION_GRPS_ALL_INTEGRATIONS/32];
  283                                         /**< Congestion Group Map*/
  284     volatile uint32_t   fmbm_rmpd;      /**< BM Pool Depletion  */
  285     volatile uint32_t   reserved5[0x1F];/**< (0x184 0x1FF) */
  286     volatile uint32_t   fmbm_rstc;      /**< Rx Statistics Counters*/
  287     volatile uint32_t   fmbm_rfrc;      /**< Rx Frame Counter*/
  288     volatile uint32_t   fmbm_rfbc;      /**< Rx Bad Frames Counter*/
  289     volatile uint32_t   fmbm_rlfc;      /**< Rx Large Frames Counter*/
  290     volatile uint32_t   fmbm_rffc;      /**< Rx Filter Frames Counter*/
  291     volatile uint32_t   fmbm_rfcd;      /**< Rx Frame Discard Counter*/
  292     volatile uint32_t   fmbm_rfldec;    /**< Rx Frames List DMA Error Counter*/
  293     volatile uint32_t   fmbm_rodc;      /**< Rx Out of Buffers Discard Counter-*/
  294     volatile uint32_t   fmbm_rbdc;      /**< Rx Buffers Deallocate Counter-*/
  295     volatile uint32_t   fmbm_rpec;      /**< Rx RX Prepare to enqueue Counter-*/
  296     volatile uint32_t   reserved6[0x16];/**< (0x228 0x27F) */
  297     volatile uint32_t   fmbm_rpc;       /**< Rx Performance Counters*/
  298     volatile uint32_t   fmbm_rpcp;      /**< Rx Performance Count Parameters*/
  299     volatile uint32_t   fmbm_rccn;      /**< Rx Cycle Counter*/
  300     volatile uint32_t   fmbm_rtuc;      /**< Rx Tasks Utilization Counter*/
  301     volatile uint32_t   fmbm_rrquc;     /**< Rx Receive Queue Utilization Counter*/
  302     volatile uint32_t   fmbm_rduc;      /**< Rx DMA Utilization Counter*/
  303     volatile uint32_t   fmbm_rfuc;      /**< Rx FIFO Utilization Counter*/
  304     volatile uint32_t   fmbm_rpac;      /**< Rx Pause Activation Counter*/
  305     volatile uint32_t   reserved7[0x18];/**< (0x2A0-0x2FF) */
  306     volatile uint32_t   fmbm_rdcfg[0x3];/**< Rx Debug-*/
  307     volatile uint32_t   fmbm_rgpr;      /**< Rx General Purpose Register. */
  308     volatile uint32_t   reserved8[0x3a];/**< (0x310-0x3FF) */
  309 } t_FmPortRxBmiRegs;
  310 
  311 typedef struct
  312 {
  313     volatile uint32_t   fmbm_tcfg;      /**< Tx Configuration */
  314     volatile uint32_t   fmbm_tst;       /**< Tx Status */
  315     volatile uint32_t   fmbm_tda;       /**< Tx DMA attributes */
  316     volatile uint32_t   fmbm_tfp;       /**< Tx FIFO Parameters */
  317     volatile uint32_t   fmbm_tfed;      /**< Tx Frame End Data */
  318     volatile uint32_t   fmbm_ticp;      /**< Tx Internal Context Parameters */
  319     volatile uint32_t   fmbm_tfdne;     /**< Tx Frame Dequeue Next Engine. */
  320     volatile uint32_t   fmbm_tfca;      /**< Tx Frame Command attribute. */
  321     volatile uint32_t   fmbm_tcfqid;    /**< Tx Confirmation Frame Queue ID. */
  322     volatile uint32_t   fmbm_tfeqid;    /**< Tx Frame Error Queue ID */
  323     volatile uint32_t   fmbm_tfene;     /**< Tx Frame Enqueue Next Engine */
  324     volatile uint32_t   fmbm_trlmts;    /**< Tx Rate Limiter Scale */
  325     volatile uint32_t   fmbm_trlmt;     /**< Tx Rate Limiter */
  326     volatile uint32_t   fmbm_tccb;      /**< Tx Coarse Classification Base */
  327     volatile uint32_t   reserved0[0x0e];/**< (0x038-0x070) */
  328     volatile uint32_t   fmbm_tfne;      /**< Tx Frame Next Engine */
  329     volatile uint32_t   fmbm_tpfcm[0x02];/**< Tx Priority based Flow Control (PFC) Mapping */
  330     volatile uint32_t   fmbm_tcmne;     /**< Tx Frame Continuous Mode Next Engine */
  331     volatile uint32_t   reserved2[0x60];/**< (0x080-0x200) */
  332     volatile uint32_t   fmbm_tstc;      /**< Tx Statistics Counters */
  333     volatile uint32_t   fmbm_tfrc;      /**< Tx Frame Counter */
  334     volatile uint32_t   fmbm_tfdc;      /**< Tx Frames Discard Counter */
  335     volatile uint32_t   fmbm_tfledc;    /**< Tx Frame Length error discard counter */
  336     volatile uint32_t   fmbm_tfufdc;    /**< Tx Frame unsupported format discard Counter */
  337     volatile uint32_t   fmbm_tbdc;      /**< Tx Buffers Deallocate Counter */
  338     volatile uint32_t   reserved3[0x1A];/**< (0x218-0x280) */
  339     volatile uint32_t   fmbm_tpc;       /**< Tx Performance Counters*/
  340     volatile uint32_t   fmbm_tpcp;      /**< Tx Performance Count Parameters*/
  341     volatile uint32_t   fmbm_tccn;      /**< Tx Cycle Counter*/
  342     volatile uint32_t   fmbm_ttuc;      /**< Tx Tasks Utilization Counter*/
  343     volatile uint32_t   fmbm_ttcquc;    /**< Tx Transmit Confirm Queue Utilization Counter*/
  344     volatile uint32_t   fmbm_tduc;      /**< Tx DMA Utilization Counter*/
  345     volatile uint32_t   fmbm_tfuc;      /**< Tx FIFO Utilization Counter*/
  346     volatile uint32_t   reserved4[16];  /**< (0x29C-0x2FF) */
  347     volatile uint32_t   fmbm_tdcfg[0x3];/**< Tx Debug-*/
  348     volatile uint32_t   fmbm_tgpr;      /**< O/H General Purpose Register */
  349     volatile uint32_t   reserved5[0x3a];/**< (0x310-0x3FF) */
  350 } t_FmPortTxBmiRegs;
  351 
  352 typedef struct
  353 {
  354     volatile uint32_t   fmbm_ocfg;      /**< O/H Configuration  */
  355     volatile uint32_t   fmbm_ost;       /**< O/H Status */
  356     volatile uint32_t   fmbm_oda;       /**< O/H DMA attributes  */
  357     volatile uint32_t   fmbm_oicp;      /**< O/H Internal Context Parameters  */
  358     volatile uint32_t   fmbm_ofdne;     /**< O/H Frame Dequeue Next Engine  */
  359     volatile uint32_t   fmbm_ofne;      /**< O/H Frame Next Engine  */
  360     volatile uint32_t   fmbm_ofca;      /**< O/H Frame Command Attributes.  */
  361     volatile uint32_t   fmbm_ofpne;     /**< O/H Frame Parser Next Engine  */
  362     volatile uint32_t   fmbm_opso;      /**< O/H Parse Start Offset  */
  363     volatile uint32_t   fmbm_opp;       /**< O/H Policer Profile */
  364     volatile uint32_t   fmbm_occb;      /**< O/H Coarse Classification base */
  365     volatile uint32_t   fmbm_oim;       /**< O/H Internal margins*/
  366     volatile uint32_t   fmbm_ofp;       /**< O/H Fifo Parameters*/
  367     volatile uint32_t   fmbm_ofed;      /**< O/H Frame End Data*/
  368     volatile uint32_t   reserved0[2];   /**< (0x038 - 0x03F) */
  369     volatile uint32_t   fmbm_oprai[FM_PORT_PRS_RESULT_NUM_OF_WORDS];
  370                                         /**< O/H Parse Results Array Initialization  */
  371     volatile uint32_t   fmbm_ofqid;     /**< O/H Frame Queue ID  */
  372     volatile uint32_t   fmbm_oefqid;    /**< O/H Error Frame Queue ID  */
  373     volatile uint32_t   fmbm_ofsdm;     /**< O/H Frame Status Discard Mask  */
  374     volatile uint32_t   fmbm_ofsem;     /**< O/H Frame Status Error Mask  */
  375     volatile uint32_t   fmbm_ofene;     /**< O/H Frame Enqueue Next Engine  */
  376     volatile uint32_t   fmbm_orlmts;    /**< O/H Rate Limiter Scale  */
  377     volatile uint32_t   fmbm_orlmt;     /**< O/H Rate Limiter  */
  378     volatile uint32_t   fmbm_ocmne;     /**< O/H Continuous Mode Next Engine  */
  379     volatile uint32_t   reserved1[0x20];/**< (0x080 - 0x0FF) */
  380     volatile uint32_t   fmbm_oebmpi[2]; /**< Buffer Manager Observed Pool Information */
  381     volatile uint32_t   reserved2[0x16];/**< (0x108 - 0x15F) */
  382     volatile uint32_t   fmbm_ocgm;      /**< Observed Congestion Group Map */
  383     volatile uint32_t   reserved3[0x7]; /**< (0x164 - 0x17F) */
  384     volatile uint32_t   fmbm_ompd;      /**< Observed BMan Pool Depletion */
  385     volatile uint32_t   reserved4[0x1F];/**< (0x184 - 0x1FF) */
  386     volatile uint32_t   fmbm_ostc;      /**< O/H Statistics Counters  */
  387     volatile uint32_t   fmbm_ofrc;      /**< O/H Frame Counter  */
  388     volatile uint32_t   fmbm_ofdc;      /**< O/H Frames Discard Counter  */
  389     volatile uint32_t   fmbm_ofledc;    /**< O/H Frames Length Error Discard Counter  */
  390     volatile uint32_t   fmbm_ofufdc;    /**< O/H Frames Unsupported Format Discard Counter  */
  391     volatile uint32_t   fmbm_offc;      /**< O/H Filter Frames Counter  */
  392     volatile uint32_t   fmbm_ofwdc;     /**< - Rx Frames WRED Discard Counter  */
  393     volatile uint32_t   fmbm_ofldec;    /**< O/H Frames List DMA Error Counter */
  394     volatile uint32_t   fmbm_obdc;      /**< O/H Buffers Deallocate Counter */
  395     volatile uint32_t   fmbm_oodc;      /**< O/H Out of Buffers Discard Counter */
  396     volatile uint32_t   fmbm_opec;      /**< O/H Prepare to enqueue Counter */
  397     volatile uint32_t   reserved5[0x15];/**< ( - 0x27F) */
  398     volatile uint32_t   fmbm_opc;       /**< O/H Performance Counters  */
  399     volatile uint32_t   fmbm_opcp;      /**< O/H Performance Count Parameters  */
  400     volatile uint32_t   fmbm_occn;      /**< O/H Cycle Counter  */
  401     volatile uint32_t   fmbm_otuc;      /**< O/H Tasks Utilization Counter  */
  402     volatile uint32_t   fmbm_oduc;      /**< O/H DMA Utilization Counter */
  403     volatile uint32_t   fmbm_ofuc;      /**< O/H FIFO Utilization Counter */
  404     volatile uint32_t   reserved6[26];  /**< (0x298-0x2FF) */
  405     volatile uint32_t   fmbm_odcfg[0x3];/**< O/H Debug (only 1 in P1023) */
  406     volatile uint32_t   fmbm_ogpr;      /**< O/H General Purpose Register. */
  407     volatile uint32_t   reserved7[0x3a];/**< (0x310 0x3FF) */
  408 } t_FmPortOhBmiRegs;
  409 
  410 typedef union
  411 {
  412     t_FmPortRxBmiRegs rxPortBmiRegs;
  413     t_FmPortTxBmiRegs txPortBmiRegs;
  414     t_FmPortOhBmiRegs ohPortBmiRegs;
  415 } u_FmPortBmiRegs;
  416 
  417 typedef struct
  418 {
  419     volatile uint32_t   reserved1[2];   /**<   0xn024 - 0x02B */
  420     volatile uint32_t   fmqm_pndn;      /**<   PortID n Dequeue NIA Register */
  421     volatile uint32_t   fmqm_pndc;      /**<   PortID n Dequeue Config Register */
  422     volatile uint32_t   fmqm_pndtfc;    /**<   PortID n Dequeue Total Frame Counter */
  423     volatile uint32_t   fmqm_pndfdc;    /**<   PortID n Dequeue FQID from Default Counter */
  424     volatile uint32_t   fmqm_pndcc;     /**<   PortID n Dequeue Confirm Counter */
  425 } t_FmPortNonRxQmiRegs;
  426 
  427 typedef struct
  428 {
  429     volatile uint32_t   fmqm_pnc;       /**<   PortID n Configuration Register */
  430     volatile uint32_t   fmqm_pns;       /**<   PortID n Status Register */
  431     volatile uint32_t   fmqm_pnts;      /**<   PortID n Task Status Register */
  432     volatile uint32_t   reserved0[4];   /**<   0xn00C - 0xn01B */
  433     volatile uint32_t   fmqm_pnen;      /**<   PortID n Enqueue NIA Register */
  434     volatile uint32_t   fmqm_pnetfc;    /**<   PortID n Enqueue Total Frame Counter */
  435     t_FmPortNonRxQmiRegs nonRxQmiRegs;  /**<   Registers for Tx Hc & Op ports */
  436 } t_FmPortQmiRegs;
  437 
  438 typedef struct
  439 {
  440      struct
  441     {
  442         volatile uint32_t   softSeqAttach;  /**<   Soft Sequence Attachment */
  443         volatile uint32_t   lcv;            /**<   Line-up Enable Confirmation Mask */
  444     } hdrs[FM_PCD_PRS_NUM_OF_HDRS];
  445     volatile uint32_t   reserved0[0xde];
  446     volatile uint32_t   pcac;               /**<   Parse Internal Memory Configuration Access Control Register */
  447     volatile uint32_t   pctpid;             /**<   Parse Internal Memory Configured TPID Register */
  448 } t_FmPortPrsRegs;
  449 
  450 /**************************************************************************//*
  451  @Description   Basic buffer descriptor (BD) structure
  452 *//***************************************************************************/
  453 typedef _Packed struct
  454 {
  455     volatile uint16_t       status;
  456     volatile uint16_t       length;
  457     volatile uint8_t        reserved0[0x6];
  458     volatile uint8_t        reserved1[0x1];
  459     volatile t_FmPhysAddr   buff;
  460 } _PackedType t_FmImBd;
  461 
  462 typedef _Packed struct
  463 {
  464     volatile uint16_t       gen;                /**< tbd */
  465     volatile uint8_t        reserved0[0x1];
  466     volatile t_FmPhysAddr   bdRingBase;         /**< tbd */
  467     volatile uint16_t       bdRingSize;         /**< tbd */
  468     volatile uint16_t       offsetIn;           /**< tbd */
  469     volatile uint16_t       offsetOut;          /**< tbd */
  470     volatile uint8_t        reserved1[0x12];    /**< 0x0e - 0x1f */
  471 } _PackedType t_FmPortImQd;
  472 
  473 typedef _Packed struct
  474 {
  475     volatile uint32_t   mode;               /**< Mode register */
  476     volatile uint32_t   rxQdPtr;            /**< tbd */
  477     volatile uint32_t   txQdPtr;            /**< tbd */
  478     volatile uint16_t   mrblr;              /**< tbd */
  479     volatile uint16_t   rxQdBsyCnt;         /**< tbd */
  480     volatile uint8_t    reserved0[0x10];    /**< 0x10 - 0x1f */
  481     t_FmPortImQd        rxQd;
  482     t_FmPortImQd        txQd;
  483     volatile uint8_t    reserved1[0xa0];    /**< 0x60 - 0xff */
  484 } _PackedType t_FmPortImPram;
  485 
  486 #if defined(__MWERKS__) && !defined(__GNUC__)
  487 #pragma pack(pop)
  488 #endif /* defined(__MWERKS__) && ... */
  489 
  490 
  491 /**************************************************************************//**
  492  @Description       Registers bit fields
  493 *//***************************************************************************/
  494 
  495 /**************************************************************************//**
  496  @Description       BMI defines
  497 *//***************************************************************************/
  498 #if (DPAA_VERSION >= 11)
  499 #define BMI_SP_ID_MASK                          0xff000000
  500 #define BMI_SP_ID_SHIFT                         24
  501 #define BMI_SP_EN                               0x01000000
  502 #endif /* (DPAA_VERSION >= 11) */
  503 
  504 #define BMI_PORT_CFG_EN                         0x80000000
  505 #define BMI_PORT_CFG_EN_MACSEC                  0x00800000
  506 #define BMI_PORT_CFG_FDOVR                      0x02000000
  507 #define BMI_PORT_CFG_IM                         0x01000000
  508 #define BMI_PORT_CFG_AM                         0x00000040
  509 #define BMI_PORT_STATUS_BSY                     0x80000000
  510 #define BMI_COUNTERS_EN                         0x80000000
  511 
  512 #define BMI_PORT_RFNE_FRWD_DCL4C                0x10000000
  513 #define BMI_PORT_RFNE_FRWD_RPD                  0x40000000
  514 #define BMI_RFNE_FDCS_MASK                      0xFF000000
  515 #define BMI_RFNE_HXS_MASK                       0x000000FF
  516 
  517 #define BMI_CMD_MR_LEAC                         0x00200000
  518 #define BMI_CMD_MR_SLEAC                        0x00100000
  519 #define BMI_CMD_MR_MA                           0x00080000
  520 #define BMI_CMD_MR_DEAS                         0x00040000
  521 #define BMI_CMD_RX_MR_DEF                       (BMI_CMD_MR_LEAC | \
  522                                                  BMI_CMD_MR_SLEAC | \
  523                                                  BMI_CMD_MR_MA | \
  524                                                  BMI_CMD_MR_DEAS)
  525 #define BMI_CMD_ATTR_ORDER                      0x80000000
  526 #define BMI_CMD_ATTR_SYNC                       0x02000000
  527 #define BMI_CMD_ATTR_MODE_MISS_ALLIGN_ADDR_EN   0x00080000
  528 #define BMI_CMD_ATTR_MACCMD_MASK                0x0000ff00
  529 #define BMI_CMD_ATTR_MACCMD_OVERRIDE            0x00008000
  530 #define BMI_CMD_ATTR_MACCMD_SECURED             0x00001000
  531 #define BMI_CMD_ATTR_MACCMD_SC_MASK             0x00000f00
  532 
  533 #define BMI_EXT_BUF_POOL_ID_MASK                0x003F0000
  534 #define BMI_STATUS_RX_MASK_UNUSED               (uint32_t)(~(FM_PORT_FRM_ERR_DMA                    | \
  535                                                              FM_PORT_FRM_ERR_PHYSICAL               | \
  536                                                              FM_PORT_FRM_ERR_SIZE                   | \
  537                                                              FM_PORT_FRM_ERR_CLS_DISCARD            | \
  538                                                              FM_PORT_FRM_ERR_EXTRACTION             | \
  539                                                              FM_PORT_FRM_ERR_NO_SCHEME              | \
  540                                                              FM_PORT_FRM_ERR_COLOR_RED              | \
  541                                                              FM_PORT_FRM_ERR_COLOR_YELLOW           | \
  542                                                              FM_PORT_FRM_ERR_ILL_PLCR               | \
  543                                                              FM_PORT_FRM_ERR_PLCR_FRAME_LEN         | \
  544                                                              FM_PORT_FRM_ERR_PRS_TIMEOUT            | \
  545                                                              FM_PORT_FRM_ERR_PRS_ILL_INSTRUCT       | \
  546                                                              FM_PORT_FRM_ERR_BLOCK_LIMIT_EXCEEDED   | \
  547                                                              FM_PORT_FRM_ERR_PRS_HDR_ERR            | \
  548                                                              FM_PORT_FRM_ERR_IPRE                   | \
  549                                                              FM_PORT_FRM_ERR_IPR_NCSP               | \
  550                                                              FM_PORT_FRM_ERR_KEYSIZE_OVERFLOW))
  551 
  552 #define BMI_STATUS_OP_MASK_UNUSED               (uint32_t)(BMI_STATUS_RX_MASK_UNUSED &                \
  553                                                            ~(FM_PORT_FRM_ERR_LENGTH                 | \
  554                                                              FM_PORT_FRM_ERR_NON_FM                 | \
  555                                                              FM_PORT_FRM_ERR_UNSUPPORTED_FORMAT))
  556 
  557 #define BMI_RATE_LIMIT_EN                       0x80000000
  558 #define BMI_RATE_LIMIT_BURST_SIZE_GRAN          0x80000000
  559 #define BMI_RATE_LIMIT_SCALE_BY_2               0x00000001
  560 #define BMI_RATE_LIMIT_SCALE_BY_4               0x00000002
  561 #define BMI_RATE_LIMIT_SCALE_BY_8               0x00000003
  562 
  563 #define BMI_RX_FIFO_THRESHOLD_BC                0x80000000
  564 
  565 #define BMI_PRS_RESULT_HIGH                     0x00000000
  566 #define BMI_PRS_RESULT_LOW                      0xFFFFFFFF
  567 
  568 
  569 #define RX_ERRS_TO_ENQ                          (FM_PORT_FRM_ERR_DMA                    | \
  570                                                  FM_PORT_FRM_ERR_PHYSICAL               | \
  571                                                  FM_PORT_FRM_ERR_SIZE                   | \
  572                                                  FM_PORT_FRM_ERR_EXTRACTION             | \
  573                                                  FM_PORT_FRM_ERR_NO_SCHEME              | \
  574                                                  FM_PORT_FRM_ERR_ILL_PLCR               | \
  575                                                  FM_PORT_FRM_ERR_PLCR_FRAME_LEN         | \
  576                                                  FM_PORT_FRM_ERR_PRS_TIMEOUT            | \
  577                                                  FM_PORT_FRM_ERR_PRS_ILL_INSTRUCT       | \
  578                                                  FM_PORT_FRM_ERR_BLOCK_LIMIT_EXCEEDED   | \
  579                                                  FM_PORT_FRM_ERR_PRS_HDR_ERR            | \
  580                                                  FM_PORT_FRM_ERR_KEYSIZE_OVERFLOW       | \
  581                                                  FM_PORT_FRM_ERR_IPRE)
  582 
  583 #define OP_ERRS_TO_ENQ                          (RX_ERRS_TO_ENQ                         | \
  584                                                  FM_PORT_FRM_ERR_LENGTH                 | \
  585                                                  FM_PORT_FRM_ERR_NON_FM                 | \
  586                                                  FM_PORT_FRM_ERR_UNSUPPORTED_FORMAT)
  587 
  588 
  589 #define BMI_RX_FIFO_PRI_ELEVATION_MASK          0x03FF0000
  590 #define BMI_RX_FIFO_THRESHOLD_MASK              0x000003FF
  591 #define BMI_TX_FIFO_MIN_FILL_MASK               0x03FF0000
  592 #define BMI_FIFO_PIPELINE_DEPTH_MASK            0x0000F000
  593 #define BMI_TX_LOW_COMF_MASK                    0x000003FF
  594 
  595 /* shifts */
  596 #define BMI_PORT_CFG_MS_SEL_SHIFT               16
  597 #define BMI_DMA_ATTR_IC_CACHE_SHIFT             FMAN_SP_DMA_ATTR_IC_CACHE_SHIFT
  598 #define BMI_DMA_ATTR_HDR_CACHE_SHIFT            FMAN_SP_DMA_ATTR_HDR_CACHE_SHIFT
  599 #define BMI_DMA_ATTR_SG_CACHE_SHIFT             FMAN_SP_DMA_ATTR_SG_CACHE_SHIFT
  600 
  601 #define BMI_IM_FOF_SHIFT                        28
  602 #define BMI_PR_PORTID_SHIFT                     24
  603 
  604 #define BMI_RX_FIFO_PRI_ELEVATION_SHIFT         16
  605 #define BMI_RX_FIFO_THRESHOLD_SHIFT             0
  606 
  607 #define BMI_RX_FRAME_END_CS_IGNORE_SHIFT        24
  608 #define BMI_RX_FRAME_END_CUT_SHIFT              16
  609 
  610 #define BMI_IC_SIZE_SHIFT                       FMAN_SP_IC_SIZE_SHIFT
  611 
  612 #define BMI_INT_BUF_MARG_SHIFT                  28
  613 
  614 #define BMI_EXT_BUF_MARG_END_SHIFT              FMAN_SP_EXT_BUF_MARG_END_SHIFT
  615 
  616 #define BMI_CMD_ATTR_COLOR_SHIFT                26
  617 #define BMI_CMD_ATTR_COM_MODE_SHIFT             16
  618 #define BMI_CMD_ATTR_MACCMD_SHIFT               8
  619 #define BMI_CMD_ATTR_MACCMD_OVERRIDE_SHIFT      15
  620 #define BMI_CMD_ATTR_MACCMD_SECURED_SHIFT       12
  621 #define BMI_CMD_ATTR_MACCMD_SC_SHIFT            8
  622 
  623 #define BMI_POOL_DEP_NUM_OF_POOLS_VECTOR_SHIFT  24
  624 
  625 #define BMI_TX_FIFO_MIN_FILL_SHIFT              16
  626 #define BMI_TX_LOW_COMF_SHIFT                   0
  627 
  628 #define BMI_PERFORMANCE_TASK_COMP_SHIFT         24
  629 #define BMI_PERFORMANCE_PORT_COMP_SHIFT         16
  630 #define BMI_PERFORMANCE_DMA_COMP_SHIFT          12
  631 #define BMI_PERFORMANCE_FIFO_COMP_SHIFT         0
  632 
  633 #define BMI_MAX_BURST_SHIFT                     16
  634 #define BMI_COUNT_RATE_UNIT_SHIFT               16
  635 
  636 /* sizes */
  637 #define FRAME_END_DATA_SIZE                     16
  638 #define FRAME_OFFSET_UNITS                      16
  639 #define MIN_TX_INT_OFFSET                       16
  640 #define MAX_FRAME_OFFSET                        64
  641 #define MAX_FIFO_PIPELINE_DEPTH                 8
  642 #define MAX_PERFORMANCE_TASK_COMP               64
  643 #define MAX_PERFORMANCE_TX_QUEUE_COMP           8
  644 #define MAX_PERFORMANCE_RX_QUEUE_COMP           64
  645 #define MAX_PERFORMANCE_DMA_COMP                16
  646 #define MAX_NUM_OF_TASKS                        64
  647 #define MAX_NUM_OF_EXTRA_TASKS                  8
  648 #define MAX_NUM_OF_DMAS                         16
  649 #define MAX_NUM_OF_EXTRA_DMAS                   8
  650 #define MAX_BURST_SIZE                          1024
  651 #define MIN_NUM_OF_OP_DMAS                      2
  652 
  653 
  654 /**************************************************************************//**
  655  @Description       QMI defines
  656 *//***************************************************************************/
  657 /* masks */
  658 #define QMI_PORT_CFG_EN                         0x80000000
  659 #define QMI_PORT_CFG_EN_COUNTERS                0x10000000
  660 #define QMI_PORT_STATUS_DEQ_TNUM_BSY            0x80000000
  661 #define QMI_PORT_STATUS_DEQ_FD_BSY              0x20000000
  662 
  663 #define QMI_DEQ_CFG_PREFETCH_NO_TNUM            0x02000000
  664 #define QMI_DEQ_CFG_PREFETCH_WAITING_TNUM       0
  665 #define QMI_DEQ_CFG_PREFETCH_1_FRAME            0
  666 #define QMI_DEQ_CFG_PREFETCH_3_FRAMES           0x01000000
  667 
  668 #define QMI_DEQ_CFG_PRI                         0x80000000
  669 #define QMI_DEQ_CFG_TYPE1                       0x10000000
  670 #define QMI_DEQ_CFG_TYPE2                       0x20000000
  671 #define QMI_DEQ_CFG_TYPE3                       0x30000000
  672 
  673 #define QMI_DEQ_CFG_SUBPORTAL_MASK              0x1f
  674 #define QMI_DEQ_CFG_SUBPORTAL_SHIFT             20
  675 
  676 /**************************************************************************//**
  677  @Description       PARSER defines
  678 *//***************************************************************************/
  679 /* masks */
  680 #define PRS_HDR_ERROR_DIS                       0x00000800
  681 #define PRS_HDR_SW_PRS_EN                       0x00000400
  682 #define PRS_CP_OFFSET_MASK                      0x0000000F
  683 #define PRS_TPID1_MASK                          0xFFFF0000
  684 #define PRS_TPID2_MASK                          0x0000FFFF
  685 #define PRS_TPID_DFLT                           0x91009100
  686 
  687 #define PRS_HDR_MPLS_LBL_INTER_EN               0x00200000
  688 #define PRS_HDR_IPV6_ROUTE_HDR_EN               0x00008000
  689 #define PRS_HDR_PPPOE_MTU_CHECK_EN              0x80000000
  690 #define PRS_HDR_UDP_PAD_REMOVAL                 0x80000000
  691 #define PRS_HDR_TCP_PAD_REMOVAL                 0x80000000
  692 #define PRS_CAC_STOP                            0x00000001
  693 #define PRS_CAC_ACTIVE                          0x00000100
  694 
  695 /* shifts */
  696 #define PRS_PCTPID_SHIFT                        16
  697 #define PRS_HDR_MPLS_NEXT_HDR_SHIFT             22
  698 #define PRS_HDR_ETH_BC_SHIFT                    28
  699 #define PRS_HDR_ETH_MC_SHIFT                    24
  700 #define PRS_HDR_VLAN_STACKED_SHIFT              16
  701 #define PRS_HDR_MPLS_STACKED_SHIFT              16
  702 #define PRS_HDR_IPV4_1_BC_SHIFT                 28
  703 #define PRS_HDR_IPV4_1_MC_SHIFT                 24
  704 #define PRS_HDR_IPV4_2_UC_SHIFT                 20
  705 #define PRS_HDR_IPV4_2_MC_BC_SHIFT              16
  706 #define PRS_HDR_IPV6_1_MC_SHIFT                 24
  707 #define PRS_HDR_IPV6_2_UC_SHIFT                 20
  708 #define PRS_HDR_IPV6_2_MC_SHIFT                 16
  709 
  710 #define PRS_HDR_ETH_BC_MASK                     0x0fffffff
  711 #define PRS_HDR_ETH_MC_MASK                     0xf0ffffff
  712 #define PRS_HDR_VLAN_STACKED_MASK               0xfff0ffff
  713 #define PRS_HDR_MPLS_STACKED_MASK               0xfff0ffff
  714 #define PRS_HDR_IPV4_1_BC_MASK                  0x0fffffff
  715 #define PRS_HDR_IPV4_1_MC_MASK                  0xf0ffffff
  716 #define PRS_HDR_IPV4_2_UC_MASK                  0xff0fffff
  717 #define PRS_HDR_IPV4_2_MC_BC_MASK               0xfff0ffff
  718 #define PRS_HDR_IPV6_1_MC_MASK                  0xf0ffffff
  719 #define PRS_HDR_IPV6_2_UC_MASK                  0xff0fffff
  720 #define PRS_HDR_IPV6_2_MC_MASK                  0xfff0ffff
  721 
  722 /* others */
  723 #define PRS_HDR_ENTRY_SIZE                      8
  724 #define DEFAULT_CLS_PLAN_VECTOR                 0xFFFFFFFF
  725 
  726 #define IPSEC_SW_PATCH_START                    0x20
  727 #define SCTP_SW_PATCH_START                     0x4D
  728 #define DCCP_SW_PATCH_START                     0x41
  729 
  730 /**************************************************************************//**
  731  @Description       IM defines
  732 *//***************************************************************************/
  733 #define BD_R_E                                  0x80000000
  734 #define BD_L                                    0x08000000
  735 
  736 #define BD_RX_CRE                               0x00080000
  737 #define BD_RX_FTL                               0x00040000
  738 #define BD_RX_FTS                               0x00020000
  739 #define BD_RX_OV                                0x00010000
  740 
  741 #define BD_RX_ERRORS                            (BD_RX_CRE | BD_RX_FTL | BD_RX_FTS | BD_RX_OV)
  742 
  743 #define FM_IM_SIZEOF_BD                         sizeof(t_FmImBd)
  744 
  745 #define BD_STATUS_MASK                          0xffff0000
  746 #define BD_LENGTH_MASK                          0x0000ffff
  747 
  748 #define BD_STATUS_AND_LENGTH_SET(bd, val)       WRITE_UINT32(*(volatile uint32_t*)(bd), (val))
  749 
  750 #define BD_STATUS_AND_LENGTH(bd)                GET_UINT32(*(volatile uint32_t*)(bd))
  751 
  752 #define BD_GET(id)                              &p_FmPort->im.p_BdRing[id]
  753 
  754 #define IM_ILEGAL_BD_ID                         0xffff
  755 
  756 /* others */
  757 #define IM_PRAM_ALIGN                           0x100
  758 
  759 /* masks */
  760 #define IM_MODE_GBL                             0x20000000
  761 #define IM_MODE_BO_MASK                         0x18000000
  762 #define IM_MODE_BO_SHIFT                        3
  763 #define IM_MODE_GRC_STP                         0x00800000
  764 
  765 #define IM_MODE_SET_BO(val)                     (uint32_t)((val << (31-IM_MODE_BO_SHIFT)) & IM_MODE_BO_MASK)
  766 
  767 #define IM_RXQD_BSYINTM                         0x0008
  768 #define IM_RXQD_RXFINTM                         0x0010
  769 #define IM_RXQD_FPMEVT_SEL_MASK                 0x0003
  770 
  771 #define IM_EV_BSY                               0x40000000
  772 #define IM_EV_RX                                0x80000000
  773 
  774 
  775 /**************************************************************************//**
  776  @Description       Additional defines
  777 *//***************************************************************************/
  778 
  779 typedef struct {
  780     t_Handle                    h_FmMuram;
  781     t_FmPortImPram              *p_FmPortImPram;
  782     uint8_t                     fwExtStructsMemId;
  783     uint32_t                    fwExtStructsMemAttr;
  784     uint16_t                    bdRingSize;
  785     t_FmImBd                    *p_BdRing;
  786     t_Handle                    *p_BdShadow;
  787     uint16_t                    currBdId;
  788     uint16_t                    firstBdOfFrameId;
  789 
  790     /* Rx port parameters */
  791     uint8_t                     dataMemId;          /**< Memory partition ID for data buffers */
  792     uint32_t                    dataMemAttributes;  /**< Memory attributes for data buffers */
  793     t_BufferPoolInfo            rxPool;
  794     uint16_t                    mrblr;
  795     uint16_t                    rxFrameAccumLength;
  796     t_FmPortImRxStoreCallback   *f_RxStore;
  797 
  798     /* Tx port parameters */
  799     uint32_t                    txFirstBdStatus;
  800     t_FmPortImTxConfCallback    *f_TxConf;
  801 } t_FmMacIm;
  802 
  803 
  804 typedef struct {
  805     struct fman_port_cfg                dfltCfg;
  806     uint32_t                            dfltFqid;
  807     uint32_t                            confFqid;
  808     uint32_t                            errFqid;
  809     uintptr_t                           baseAddr;
  810     uint8_t                             deqSubPortal;
  811     bool                                deqHighPriority;
  812     e_FmPortDeqType                     deqType;
  813     e_FmPortDeqPrefetchOption           deqPrefetchOption;
  814     uint16_t                            deqByteCnt;
  815     uint8_t                             cheksumLastBytesIgnore;
  816     uint8_t                             cutBytesFromEnd;
  817     t_FmBufPoolDepletion                bufPoolDepletion;
  818     uint8_t                             pipelineDepth;
  819     uint16_t                            fifoLowComfLevel;
  820     bool                                frmDiscardOverride;
  821     bool                                enRateLimit;
  822     t_FmPortRateLimit                   rateLimit;
  823     e_FmPortDualRateLimiterScaleDown    rateLimitDivider;
  824     bool                                enBufPoolDepletion;
  825     uint16_t                            liodnOffset;
  826     uint16_t                            liodnBase;
  827     t_FmExtPools                        extBufPools;
  828     e_FmDmaSwapOption                   dmaSwapData;
  829     e_FmDmaCacheOption                  dmaIntContextCacheAttr;
  830     e_FmDmaCacheOption                  dmaHeaderCacheAttr;
  831     e_FmDmaCacheOption                  dmaScatterGatherCacheAttr;
  832     bool                                dmaReadOptimize;
  833     bool                                dmaWriteOptimize;
  834     uint32_t                            txFifoMinFillLevel;
  835     uint32_t                            txFifoLowComfLevel;
  836     uint32_t                            rxFifoPriElevationLevel;
  837     uint32_t                            rxFifoThreshold;
  838     t_FmSpBufMargins                    bufMargins;
  839     t_FmSpIntContextDataCopy            intContext;
  840     bool                                syncReq;
  841     e_FmPortColor                       color;
  842     fmPortFrameErrSelect_t              errorsToDiscard;
  843     fmPortFrameErrSelect_t              errorsToEnq;
  844     bool                                forwardReuseIntContext;
  845     t_FmBufferPrefixContent             bufferPrefixContent;
  846      t_FmBackupBmPools                   *p_BackupBmPools;
  847     bool                                dontReleaseBuf;
  848     bool                                setNumOfTasks;
  849     bool                                setNumOfOpenDmas;
  850     bool                                setSizeOfFifo;
  851 #if (DPAA_VERSION >= 11)
  852     bool                                noScatherGather;
  853 #endif /* (DPAA_VERSION >= 11) */
  854 
  855 #ifdef FM_HEAVY_TRAFFIC_HANG_ERRATA_FMAN_A005669
  856     bool                                bcbWorkaround;
  857 #endif /* FM_HEAVY_TRAFFIC_HANG_ERRATA_FMAN_A005669 */
  858 } t_FmPortDriverParam;
  859 
  860 
  861 typedef struct t_FmPortRxPoolsParams
  862 {
  863     uint8_t     numOfPools;
  864     uint16_t    secondLargestBufSize;
  865     uint16_t    largestBufSize;
  866 } t_FmPortRxPoolsParams;
  867 
  868 typedef struct t_FmPortDsarVars {
  869     t_Handle                    *autoResOffsets;
  870     t_FmPortDsarTablesSizes     *autoResMaxSizes;
  871     uint32_t                    fmbm_tcfg;
  872     uint32_t                    fmbm_tcmne;
  873     uint32_t                    fmbm_rfne;
  874     uint32_t                    fmbm_rfpne;
  875     uint32_t                    fmbm_rcfg;
  876     bool                        dsarEnabledParser;
  877 } t_FmPortDsarVars;
  878 typedef struct {
  879     struct fman_port            port;
  880     t_Handle                    h_Fm;
  881     t_Handle                    h_FmPcd;
  882     t_Handle                    h_FmMuram;
  883     t_FmRevisionInfo            fmRevInfo;
  884     uint8_t                     portId;
  885     e_FmPortType                portType;
  886     int                         enabled;
  887     char                        name[MODULE_NAME_SIZE];
  888     uint8_t                     hardwarePortId;
  889     uint16_t                    fmClkFreq;
  890     t_FmPortQmiRegs             *p_FmPortQmiRegs;
  891     u_FmPortBmiRegs             *p_FmPortBmiRegs;
  892     t_FmPortPrsRegs             *p_FmPortPrsRegs;
  893     fmPcdEngines_t              pcdEngines;
  894     uint32_t                    savedBmiNia;
  895     uint8_t                     netEnvId;
  896     uint32_t                    optArray[FM_PCD_MAX_NUM_OF_OPTIONS(FM_PCD_MAX_NUM_OF_CLS_PLANS)];
  897     uint32_t                    lcvs[FM_PCD_PRS_NUM_OF_HDRS];
  898     uint8_t                     privateInfo;
  899     uint32_t                    schemesPerPortVector;
  900     bool                        useClsPlan;
  901     uint8_t                     clsPlanGrpId;
  902     t_Handle                    ccTreeId;
  903     t_Handle                    completeArg;
  904     void                        (*f_Complete)(t_Handle arg);
  905     t_FmSpBufferOffsets         bufferOffsets;
  906     /* Independent-Mode parameters support */
  907     bool                        imEn;
  908     t_FmMacIm                   im;
  909     volatile bool               lock;
  910     t_Handle                    h_Spinlock;
  911     t_FmPortExceptionCallback   *f_Exception;
  912     t_Handle                    h_App;
  913     uint8_t                     internalBufferOffset;
  914     uint8_t                     fmanCtrlEventId;
  915     uint32_t                    exceptions;
  916     bool                        polling;
  917     t_FmExtPools                extBufPools;
  918     uint32_t                    requiredAction;
  919     uint32_t                    savedQmiPnen;
  920     uint32_t                    savedBmiFene;
  921     uint32_t                    savedBmiFpne;
  922     uint32_t                    savedBmiCmne;
  923     uint32_t                    savedBmiOfp;
  924     uint32_t                    savedNonRxQmiRegsPndn;
  925     uint32_t                    origNonRxQmiRegsPndn;
  926     int                         savedPrsStartOffset;
  927     bool                        includeInPrsStatistics;
  928     uint16_t                    maxFrameLength;
  929     t_FmFmanCtrl                orFmanCtrl;
  930     t_FmPortRsrc                openDmas;
  931     t_FmPortRsrc                tasks;
  932     t_FmPortRsrc                fifoBufs;
  933     t_FmPortRxPoolsParams       rxPoolsParams;
  934 //    bool                        explicitUserSizeOfFifo;
  935     t_Handle                    h_IpReassemblyManip;
  936     t_Handle                    h_CapwapReassemblyManip;
  937     t_Handle                    h_ReassemblyTree;
  938     uint64_t                    fmMuramPhysBaseAddr;
  939 #if (DPAA_VERSION >= 11)
  940     bool                        vspe;
  941     uint8_t                     dfltRelativeId;
  942     e_FmPortGprFuncType         gprFunc;
  943     t_FmPcdCtrlParamsPage       *p_ParamsPage;
  944 #endif /* (DPAA_VERSION >= 11) */
  945     t_FmPortDsarVars            deepSleepVars;
  946     t_FmPortDriverParam         *p_FmPortDriverParam;
  947 } t_FmPort;
  948 
  949 
  950 void FmPortConfigIM (t_FmPort *p_FmPort, t_FmPortParams *p_FmPortParams);
  951 t_Error FmPortImCheckInitParameters(t_FmPort *p_FmPort);
  952 
  953 t_Error FmPortImInit(t_FmPort *p_FmPort);
  954 void    FmPortImFree(t_FmPort *p_FmPort);
  955 
  956 t_Error FmPortImEnable  (t_FmPort *p_FmPort);
  957 t_Error FmPortImDisable (t_FmPort *p_FmPort);
  958 t_Error FmPortImRx      (t_FmPort *p_FmPort);
  959 
  960 void    FmPortSetMacsecLcv(t_Handle h_FmPort);
  961 void    FmPortSetMacsecCmd(t_Handle h_FmPort, uint8_t dfltSci);
  962 
  963 
  964 t_Error FM_PORT_SetNumOfOpenDmas(t_Handle h_FmPort, t_FmPortRsrc *p_NumOfOpenDmas);
  965 t_Error FM_PORT_SetNumOfTasks(t_Handle h_FmPort, t_FmPortRsrc *p_NumOfTasks);
  966 t_Error FM_PORT_SetSizeOfFifo(t_Handle h_FmPort, t_FmPortRsrc *p_SizeOfFifo);
  967 
  968 static __inline__ uint8_t * BdBufferGet (t_PhysToVirt *f_PhysToVirt, t_FmImBd *p_Bd)
  969 {
  970     uint64_t    physAddr = (uint64_t)((uint64_t)GET_UINT8(p_Bd->buff.high) << 32);
  971     physAddr |= GET_UINT32(p_Bd->buff.low);
  972 
  973     return (uint8_t *)f_PhysToVirt((physAddress_t)(physAddr));
  974 }
  975 
  976 static __inline__ void SET_ADDR(volatile t_FmPhysAddr *fmPhysAddr, uint64_t value)
  977 {
  978     WRITE_UINT8(fmPhysAddr->high,(uint8_t)((value & 0x000000ff00000000LL) >> 32));
  979     WRITE_UINT32(fmPhysAddr->low,(uint32_t)value);
  980 }
  981 
  982 static __inline__ void BdBufferSet(t_VirtToPhys *f_VirtToPhys, t_FmImBd *p_Bd, uint8_t *p_Buffer)
  983 {
  984     uint64_t    physAddr = (uint64_t)(f_VirtToPhys(p_Buffer));
  985     SET_ADDR(&p_Bd->buff, physAddr);
  986 }
  987 
  988 static __inline__ uint16_t GetNextBdId(t_FmPort *p_FmPort, uint16_t id)
  989 {
  990     if (id < p_FmPort->im.bdRingSize-1)
  991         return (uint16_t)(id+1);
  992     else
  993         return 0;
  994 }
  995 
  996 void FM_PORT_Dsar_DumpRegs(void);
  997 
  998 
  999 #endif /* __FM_PORT_H */

Cache object: 26fbcaee2b44f533f85555c53d6dde72


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