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 */ 1000