1 /* Copyright (c) 2008-2011 Freescale Semiconductor, Inc. 2 * All rights reserved. 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 @File fm_ext.h 35 36 @Description FM Application Programming Interface. 37 *//***************************************************************************/ 38 #ifndef __FM_EXT 39 #define __FM_EXT 40 41 #include "error_ext.h" 42 #include "std_ext.h" 43 #include "dpaa_ext.h" 44 45 46 /**************************************************************************//** 47 @Group FM_grp Frame Manager API 48 49 @Description FM API functions, definitions and enums. 50 51 @{ 52 *//***************************************************************************/ 53 54 /**************************************************************************//** 55 @Group FM_lib_grp FM library 56 57 @Description FM API functions, definitions and enums 58 The FM module is the main driver module and is a mandatory module 59 for FM driver users. Before any further module initialization, 60 this module must be initialized. 61 The FM is a "singletone" module. It is responsible of the common 62 HW modules: FPM, DMA, common QMI, common BMI initializations and 63 run-time control routines. This module must be initialized always 64 when working with any of the FM modules. 65 NOTE - We assumes that the FML will be initialize only by core No. 0! 66 67 @{ 68 *//***************************************************************************/ 69 70 /**************************************************************************//** 71 @Description enum for defining port types 72 *//***************************************************************************/ 73 typedef enum e_FmPortType { 74 e_FM_PORT_TYPE_OH_OFFLINE_PARSING = 0, /**< Offline parsing port (id's: 0-6, share id's with 75 host command, so must have exclusive id) */ 76 e_FM_PORT_TYPE_OH_HOST_COMMAND, /**< Host command port (id's: 0-6, share id's with 77 offline parsing ports, so must have exclusive id) */ 78 e_FM_PORT_TYPE_RX, /**< 1G Rx port (id's: 0-3) */ 79 e_FM_PORT_TYPE_RX_10G, /**< 10G Rx port (id's: 0) */ 80 e_FM_PORT_TYPE_TX, /**< 1G Tx port (id's: 0-3) */ 81 e_FM_PORT_TYPE_TX_10G, /**< 10G Tx port (id's: 0) */ 82 e_FM_PORT_TYPE_DUMMY 83 } e_FmPortType; 84 85 /**************************************************************************//** 86 @Collection General FM defines 87 *//***************************************************************************/ 88 #define FM_MAX_NUM_OF_PARTITIONS 64 /**< Maximum number of partitions */ 89 #define FM_PHYS_ADDRESS_SIZE 6 /**< FM Physical address size */ 90 /* @} */ 91 92 93 #if defined(__MWERKS__) && !defined(__GNUC__) 94 #pragma pack(push,1) 95 #endif /* defined(__MWERKS__) && ... */ 96 #define MEM_MAP_START 97 98 /**************************************************************************//** 99 @Description FM physical Address 100 *//***************************************************************************/ 101 typedef _Packed struct t_FmPhysAddr { 102 volatile uint8_t high; /**< High part of the physical address */ 103 volatile uint32_t low; /**< Low part of the physical address */ 104 } _PackedType t_FmPhysAddr; 105 106 /**************************************************************************//** 107 @Description Parse results memory layout 108 *//***************************************************************************/ 109 typedef _Packed struct t_FmPrsResult { 110 volatile uint8_t lpid; /**< Logical port id */ 111 volatile uint8_t shimr; /**< Shim header result */ 112 volatile uint16_t l2r; /**< Layer 2 result */ 113 volatile uint16_t l3r; /**< Layer 3 result */ 114 volatile uint8_t l4r; /**< Layer 4 result */ 115 volatile uint8_t cplan; /**< Classification plan id */ 116 volatile uint16_t nxthdr; /**< Next Header */ 117 volatile uint16_t cksum; /**< Checksum */ 118 volatile uint32_t lcv; /**< LCV */ 119 volatile uint8_t shim_off[3]; /**< Shim offset */ 120 volatile uint8_t eth_off; /**< ETH offset */ 121 volatile uint8_t llc_snap_off; /**< LLC_SNAP offset */ 122 volatile uint8_t vlan_off[2]; /**< VLAN offset */ 123 volatile uint8_t etype_off; /**< ETYPE offset */ 124 volatile uint8_t pppoe_off; /**< PPP offset */ 125 volatile uint8_t mpls_off[2]; /**< MPLS offset */ 126 volatile uint8_t ip_off[2]; /**< IP offset */ 127 volatile uint8_t gre_off; /**< GRE offset */ 128 volatile uint8_t l4_off; /**< Layer 4 offset */ 129 volatile uint8_t nxthdr_off; /**< Parser end point */ 130 } _PackedType t_FmPrsResult; 131 132 /**************************************************************************//** 133 @Collection FM Parser results 134 *//***************************************************************************/ 135 #define FM_PR_L2_VLAN_STACK 0x00000100 /**< Parse Result: VLAN stack */ 136 #define FM_PR_L2_ETHERNET 0x00008000 /**< Parse Result: Ethernet*/ 137 #define FM_PR_L2_VLAN 0x00004000 /**< Parse Result: VLAN */ 138 #define FM_PR_L2_LLC_SNAP 0x00002000 /**< Parse Result: LLC_SNAP */ 139 #define FM_PR_L2_MPLS 0x00001000 /**< Parse Result: MPLS */ 140 #define FM_PR_L2_PPPoE 0x00000800 /**< Parse Result: PPPoE */ 141 /* @} */ 142 143 /**************************************************************************//** 144 @Collection FM Frame descriptor macros 145 *//***************************************************************************/ 146 #define FM_FD_CMD_FCO 0x80000000 /**< Frame queue Context Override */ 147 #define FM_FD_CMD_RPD 0x40000000 /**< Read Prepended Data */ 148 #define FM_FD_CMD_UPD 0x20000000 /**< Update Prepended Data */ 149 #define FM_FD_CMD_DTC 0x10000000 /**< Do L4 Checksum */ 150 #define FM_FD_CMD_DCL4C 0x10000000 /**< Didn't calculate L4 Checksum */ 151 #define FM_FD_CMD_CFQ 0x00ffffff /**< Confirmation Frame Queue */ 152 153 #define FM_FD_TX_STATUS_ERR_MASK 0x07000000 /**< TX Error FD bits */ 154 #define FM_FD_RX_STATUS_ERR_MASK 0x070ee3f8 /**< RX Error FD bits */ 155 /* @} */ 156 157 /**************************************************************************//** 158 @Description Context A 159 *//***************************************************************************/ 160 typedef _Packed struct t_FmContextA { 161 volatile uint32_t command; /**< ContextA Command */ 162 volatile uint8_t res0[4]; /**< ContextA Reserved bits */ 163 } _PackedType t_FmContextA; 164 165 /**************************************************************************//** 166 @Description Context B 167 *//***************************************************************************/ 168 typedef uint32_t t_FmContextB; 169 170 /**************************************************************************//** 171 @Collection Context A macros 172 *//***************************************************************************/ 173 #define FM_CONTEXTA_OVERRIDE_MASK 0x80000000 174 #define FM_CONTEXTA_ICMD_MASK 0x40000000 175 #define FM_CONTEXTA_A1_VALID_MASK 0x20000000 176 #define FM_CONTEXTA_MACCMD_MASK 0x00ff0000 177 #define FM_CONTEXTA_MACCMD_VALID_MASK 0x00800000 178 #define FM_CONTEXTA_MACCMD_SECURED_MASK 0x00100000 179 #define FM_CONTEXTA_MACCMD_SC_MASK 0x000f0000 180 #define FM_CONTEXTA_A1_MASK 0x0000ffff 181 182 #define FM_CONTEXTA_GET_OVERRIDE(contextA) ((((t_FmContextA *)contextA)->command & FM_CONTEXTA_OVERRIDE_MASK) >> (31-0)) 183 #define FM_CONTEXTA_GET_ICMD(contextA) ((((t_FmContextA *)contextA)->command & FM_CONTEXTA_ICMD_MASK) >> (31-1)) 184 #define FM_CONTEXTA_GET_A1_VALID(contextA) ((((t_FmContextA *)contextA)->command & FM_CONTEXTA_A1_VALID_MASK) >> (31-2)) 185 #define FM_CONTEXTA_GET_A1(contextA) ((((t_FmContextA *)contextA)->command & FM_CONTEXTA_A1_MASK) >> (31-31)) 186 #define FM_CONTEXTA_GET_MACCMD(contextA) ((((t_FmContextA *)contextA)->command & FM_CONTEXTA_MACCMD_MASK) >> (31-15)) 187 #define FM_CONTEXTA_GET_MACCMD_VALID(contextA) ((((t_FmContextA *)contextA)->command & FM_CONTEXTA_MACCMD_VALID_MASK) >> (31-8)) 188 #define FM_CONTEXTA_GET_MACCMD_SECURED(contextA) ((((t_FmContextA *)contextA)->command & FM_CONTEXTA_MACCMD_SECURED_MASK) >> (31-11)) 189 #define FM_CONTEXTA_GET_MACCMD_SECURE_CHANNEL(contextA) ((((t_FmContextA *)contextA)->command & FM_CONTEXTA_MACCMD_SC_MASK) >> (31-15)) 190 191 #define FM_CONTEXTA_SET_OVERRIDE(contextA,val) (((t_FmContextA *)contextA)->command = (uint32_t)((((t_FmContextA *)contextA)->command & ~FM_CONTEXTA_OVERRIDE_MASK) | (((uint32_t)(val) << (31-0)) & FM_CONTEXTA_OVERRIDE_MASK) )) 192 #define FM_CONTEXTA_SET_ICMD(contextA,val) (((t_FmContextA *)contextA)->command = (uint32_t)((((t_FmContextA *)contextA)->command & ~FM_CONTEXTA_ICMD_MASK) | (((val) << (31-1)) & FM_CONTEXTA_ICMD_MASK) )) 193 #define FM_CONTEXTA_SET_A1_VALID(contextA,val) (((t_FmContextA *)contextA)->command = (uint32_t)((((t_FmContextA *)contextA)->command & ~FM_CONTEXTA_A1_VALID_MASK) | (((val) << (31-2)) & FM_CONTEXTA_A1_VALID_MASK) )) 194 #define FM_CONTEXTA_SET_A1(contextA,val) (((t_FmContextA *)contextA)->command = (uint32_t)((((t_FmContextA *)contextA)->command & ~FM_CONTEXTA_A1_MASK) | (((val) << (31-31)) & FM_CONTEXTA_A1_MASK) )) 195 #define FM_CONTEXTA_SET_MACCMD(contextA,val) (((t_FmContextA *)contextA)->command = (uint32_t)((((t_FmContextA *)contextA)->command & ~FM_CONTEXTA_MACCMD_MASK) | (((val) << (31-15)) & FM_CONTEXTA_MACCMD_MASK) )) 196 #define FM_CONTEXTA_SET_MACCMD_VALID(contextA,val) (((t_FmContextA *)contextA)->command = (uint32_t)((((t_FmContextA *)contextA)->command & ~FM_CONTEXTA_MACCMD_VALID_MASK) | (((val) << (31-8)) & FM_CONTEXTA_MACCMD_VALID_MASK) )) 197 #define FM_CONTEXTA_SET_MACCMD_SECURED(contextA,val) (((t_FmContextA *)contextA)->command = (uint32_t)((((t_FmContextA *)contextA)->command & ~FM_CONTEXTA_MACCMD_SECURED_MASK) | (((val) << (31-11)) & FM_CONTEXTA_MACCMD_SECURED_MASK) )) 198 #define FM_CONTEXTA_SET_MACCMD_SECURE_CHANNEL(contextA,val) (((t_FmContextA *)contextA)->command = (uint32_t)((((t_FmContextA *)contextA)->command & ~FM_CONTEXTA_MACCMD_SC_MASK) | (((val) << (31-15)) & FM_CONTEXTA_MACCMD_SC_MASK) )) 199 /* @} */ 200 201 /**************************************************************************//** 202 @Collection Context B macros 203 *//***************************************************************************/ 204 #define FM_CONTEXTB_FQID_MASK 0x00ffffff 205 206 #define FM_CONTEXTB_GET_FQID(contextB) (*((t_FmContextB *)contextB) & FM_CONTEXTB_FQID_MASK) 207 #define FM_CONTEXTB_SET_FQID(contextB,val) (*((t_FmContextB *)contextB) = ((*((t_FmContextB *)contextB) & ~FM_CONTEXTB_FQID_MASK) | ((val) & FM_CONTEXTB_FQID_MASK))) 208 /* @} */ 209 210 #define MEM_MAP_END 211 #if defined(__MWERKS__) && !defined(__GNUC__) 212 #pragma pack(pop) 213 #endif /* defined(__MWERKS__) && ... */ 214 215 216 /**************************************************************************//** 217 @Description FM Exceptions 218 *//***************************************************************************/ 219 typedef enum e_FmExceptions { 220 e_FM_EX_DMA_BUS_ERROR, /**< DMA bus error. */ 221 e_FM_EX_DMA_READ_ECC, /**< Read Buffer ECC error */ 222 e_FM_EX_DMA_SYSTEM_WRITE_ECC, /**< Write Buffer ECC error on system side */ 223 e_FM_EX_DMA_FM_WRITE_ECC, /**< Write Buffer ECC error on FM side */ 224 e_FM_EX_FPM_STALL_ON_TASKS, /**< Stall of tasks on FPM */ 225 e_FM_EX_FPM_SINGLE_ECC, /**< Single ECC on FPM. */ 226 e_FM_EX_FPM_DOUBLE_ECC, /**< Double ECC error on FPM ram access */ 227 e_FM_EX_QMI_SINGLE_ECC, /**< Single ECC on QMI. */ 228 e_FM_EX_QMI_DOUBLE_ECC, /**< Double bit ECC occurred on QMI */ 229 e_FM_EX_QMI_DEQ_FROM_UNKNOWN_PORTID,/**< Dequeu from unknown port id */ 230 e_FM_EX_BMI_LIST_RAM_ECC, /**< Linked List RAM ECC error */ 231 e_FM_EX_BMI_PIPELINE_ECC, /**< Pipeline Table ECC Error */ 232 e_FM_EX_BMI_STATISTICS_RAM_ECC, /**< Statistics Count RAM ECC Error Enable */ 233 e_FM_EX_BMI_DISPATCH_RAM_ECC, /**< Dispatch RAM ECC Error Enable */ 234 e_FM_EX_IRAM_ECC, /**< Double bit ECC occurred on IRAM*/ 235 e_FM_EX_MURAM_ECC /**< Double bit ECC occurred on MURAM*/ 236 } e_FmExceptions; 237 238 /**************************************************************************//** 239 @Group FM_init_grp FM Initialization Unit 240 241 @Description FM Initialization Unit 242 243 Initialization Flow 244 Initialization of the FM Module will be carried out by the application 245 according to the following sequence: 246 a. Calling the configuration routine with basic parameters. 247 b. Calling the advance initialization routines to change driver's defaults. 248 c. Calling the initialization routine. 249 250 @{ 251 *//***************************************************************************/ 252 253 /**************************************************************************//** 254 @Function t_FmExceptionsCallback 255 256 @Description Exceptions user callback routine, will be called upon an 257 exception passing the exception identification. 258 259 @Param[in] h_App - User's application descriptor. 260 @Param[in] exception - The exception. 261 *//***************************************************************************/ 262 typedef void (t_FmExceptionsCallback) (t_Handle h_App, 263 e_FmExceptions exception); 264 265 /**************************************************************************//** 266 @Function t_FmBusErrorCallback 267 268 @Description Bus error user callback routine, will be called upon a 269 bus error, passing parameters describing the errors and the owner. 270 271 @Param[in] h_App - User's application descriptor. 272 @Param[in] portType - Port type (e_FmPortType) 273 @Param[in] portId - Port id - relative to type. 274 @Param[in] addr - Address that caused the error 275 @Param[in] tnum - Owner of error 276 @Param[in] liodn - Logical IO device number 277 *//***************************************************************************/ 278 typedef void (t_FmBusErrorCallback) (t_Handle h_App, 279 e_FmPortType portType, 280 uint8_t portId, 281 uint64_t addr, 282 uint8_t tnum, 283 uint16_t liodn); 284 285 /**************************************************************************//** 286 @Description structure for defining Ucode patch for loading. 287 *//***************************************************************************/ 288 typedef struct t_FmPcdFirmwareParams { 289 uint32_t size; /**< Size of uCode */ 290 uint32_t *p_Code; /**< A pointer to the uCode */ 291 } t_FmPcdFirmwareParams; 292 293 /**************************************************************************//** 294 @Description structure representing FM initialization parameters 295 *//***************************************************************************/ 296 #define FM_SIZE_OF_LIODN_TABLE 64 297 typedef struct t_FmParams { 298 uint8_t fmId; /**< Index of the FM */ 299 300 uint8_t guestId; /**< FM Partition Id */ 301 302 uintptr_t baseAddr; /**< Relevant when guestId = NCSW_MASSTER_ID only. 303 A pointer to base of memory mapped FM registers (virtual); 304 NOTE that this should include ALL common regs of the FM including 305 the PCD regs area. */ 306 t_Handle h_FmMuram; /**< Relevant when guestId = NCSW_MASSTER_ID only. 307 A handle of an initialized MURAM object, 308 to be used by the FM */ 309 uint16_t fmClkFreq; /**< Relevant when guestId = NCSW_MASSTER_ID only. 310 In Mhz */ 311 #ifdef FM_PARTITION_ARRAY 312 uint16_t liodnBasePerPort[FM_SIZE_OF_LIODN_TABLE]; 313 /**< Relevant when guestId = NCSW_MASSTER_ID only. 314 For each partition, LIODN should be configured here. */ 315 #endif /* FM_PARTITION_ARRAY */ 316 t_FmExceptionsCallback *f_Exception; /**< Relevant when guestId = NCSW_MASSTER_ID only. 317 An application callback routine to 318 handle exceptions.*/ 319 t_FmBusErrorCallback *f_BusError; /**< Relevant when guestId = NCSW_MASSTER_ID only. 320 An application callback routine to 321 handle exceptions.*/ 322 t_Handle h_App; /**< Relevant when guestId = NCSW_MASSTER_ID only. 323 A handle to an application layer object; This handle will 324 be passed by the driver upon calling the above callbacks */ 325 int irq; /**< Relevant when guestId = NCSW_MASSTER_ID only. 326 FM interrupt source for normal events */ 327 int errIrq; /**< Relevant when guestId = NCSW_MASSTER_ID only. 328 FM interrupt source for errors */ 329 t_FmPcdFirmwareParams firmware; /**< Relevant when guestId = NCSW_MASSTER_ID only. 330 Ucode */ 331 } t_FmParams; 332 333 334 /**************************************************************************//** 335 @Function FM_Config 336 337 @Description Creates descriptor for the FM module. 338 339 The routine returns a handle (descriptor) to the FM object. 340 This descriptor must be passed as first parameter to all other 341 FM function calls. 342 343 No actual initialization or configuration of FM hardware is 344 done by this routine. 345 346 @Param[in] p_FmParams - A pointer to data structure of parameters 347 348 @Return Handle to FM object, or NULL for Failure. 349 *//***************************************************************************/ 350 t_Handle FM_Config(t_FmParams *p_FmParams); 351 352 /**************************************************************************//** 353 @Function FM_Init 354 355 @Description Initializes the FM module 356 357 @Param[in] h_Fm - FM module descriptor 358 359 @Return E_OK on success; Error code otherwise. 360 *//***************************************************************************/ 361 t_Error FM_Init(t_Handle h_Fm); 362 363 /**************************************************************************//** 364 @Function FM_Free 365 366 @Description Frees all resources that were assigned to FM module. 367 368 Calling this routine invalidates the descriptor. 369 370 @Param[in] h_Fm - FM module descriptor 371 372 @Return E_OK on success; Error code otherwise. 373 *//***************************************************************************/ 374 t_Error FM_Free(t_Handle h_Fm); 375 376 377 /**************************************************************************//** 378 @Group FM_advanced_init_grp FM Advanced Configuration Unit 379 380 @Description Configuration functions used to change default values; 381 Note: Advanced init routines are not available for guest partition. 382 @{ 383 *//***************************************************************************/ 384 385 /**************************************************************************//** 386 @Description DMA debug mode 387 *//***************************************************************************/ 388 typedef enum e_FmDmaDbgCntMode { 389 e_FM_DMA_DBG_NO_CNT = 0, /**< No counting */ 390 e_FM_DMA_DBG_CNT_DONE, /**< Count DONE commands */ 391 e_FM_DMA_DBG_CNT_COMM_Q_EM, /**< count command queue emergency signals */ 392 e_FM_DMA_DBG_CNT_INT_READ_EM, /**< Count Internal Read buffer emergency signal */ 393 e_FM_DMA_DBG_CNT_INT_WRITE_EM, /**< Count Internal Write buffer emergency signal */ 394 e_FM_DMA_DBG_CNT_FPM_WAIT, /**< Count FPM WAIT signal */ 395 e_FM_DMA_DBG_CNT_SIGLE_BIT_ECC, /**< Single bit ECC errors. */ 396 e_FM_DMA_DBG_CNT_RAW_WAR_PROT /**< Number of times there was a need for RAW & WAR protection. */ 397 } e_FmDmaDbgCntMode; 398 399 /**************************************************************************//** 400 @Description DMA Cache Override 401 *//***************************************************************************/ 402 typedef enum e_FmDmaCacheOverride { 403 e_FM_DMA_NO_CACHE_OR = 0, /**< No override of the Cache field */ 404 e_FM_DMA_NO_STASH_DATA, /**< Data should not be stashed in system level cache */ 405 e_FM_DMA_MAY_STASH_DATA, /**< Data may be stashed in system level cache */ 406 e_FM_DMA_STASH_DATA /**< Data should be stashed in system level cache */ 407 } e_FmDmaCacheOverride; 408 409 /**************************************************************************//** 410 @Description DMA External Bus Priority 411 *//***************************************************************************/ 412 typedef enum e_FmDmaExtBusPri { 413 e_FM_DMA_EXT_BUS_NORMAL = 0, /**< Normal priority */ 414 e_FM_DMA_EXT_BUS_EBS, /**< AXI extended bus service priority */ 415 e_FM_DMA_EXT_BUS_SOS, /**< AXI sos priority */ 416 e_FM_DMA_EXT_BUS_EBS_AND_SOS /**< AXI ebs + sos priority */ 417 } e_FmDmaExtBusPri; 418 419 /**************************************************************************//** 420 @Description enum for choosing the field that will be output on AID 421 *//***************************************************************************/ 422 typedef enum e_FmDmaAidMode { 423 e_FM_DMA_AID_OUT_PORT_ID = 0, /**< 4 LSB of PORT_ID */ 424 e_FM_DMA_AID_OUT_TNUM /**< 4 LSB of TNUM */ 425 } e_FmDmaAidMode; 426 427 /**************************************************************************//** 428 @Description FPM Catasrophic error behaviour 429 *//***************************************************************************/ 430 typedef enum e_FmCatastrophicErr { 431 e_FM_CATASTROPHIC_ERR_STALL_PORT = 0, /**< Port_ID is stalled (only reset can release it) */ 432 e_FM_CATASTROPHIC_ERR_STALL_TASK /**< Only errornous task is stalled */ 433 } e_FmCatastrophicErr; 434 435 /**************************************************************************//** 436 @Description FPM DMA error behaviour 437 *//***************************************************************************/ 438 typedef enum e_FmDmaErr { 439 e_FM_DMA_ERR_CATASTROPHIC = 0, /**< Dma error is treated as a catastrophic error */ 440 e_FM_DMA_ERR_REPORT /**< Dma error is just reported */ 441 } e_FmDmaErr; 442 443 /**************************************************************************//** 444 @Description DMA Emergency level by BMI emergency signal 445 *//***************************************************************************/ 446 typedef enum e_FmDmaEmergencyLevel { 447 e_FM_DMA_EM_EBS = 0, /**< EBS emergency */ 448 e_FM_DMA_EM_SOS /**< SOS emergency */ 449 } e_FmDmaEmergencyLevel; 450 451 /**************************************************************************//** 452 @Collection DMA emergency options 453 *//***************************************************************************/ 454 typedef uint32_t fmEmergencyBus_t; /**< DMA emergency options */ 455 456 #define FM_DMA_MURAM_READ_EMERGENCY 0x00800000 /**< Enable emergency for MURAM1 */ 457 #define FM_DMA_MURAM_WRITE_EMERGENCY 0x00400000 /**< Enable emergency for MURAM2 */ 458 #define FM_DMA_EXT_BUS_EMERGENCY 0x00100000 /**< Enable emergency for external bus */ 459 /* @} */ 460 461 /**************************************************************************//** 462 @Description A structure for defining DMA emergency level 463 *//***************************************************************************/ 464 typedef struct t_FmDmaEmergency { 465 fmEmergencyBus_t emergencyBusSelect; /**< An OR of the busses where emergency 466 should be enabled */ 467 e_FmDmaEmergencyLevel emergencyLevel; /**< EBS/SOS */ 468 } t_FmDmaEmergency; 469 470 /**************************************************************************//** 471 @Description structure for defining FM threshold 472 *//***************************************************************************/ 473 typedef struct t_FmThresholds { 474 uint8_t dispLimit; /**< The number of times a frames may 475 be passed in the FM before assumed to 476 be looping. */ 477 uint8_t prsDispTh; /**< This is the number pf packets that may be 478 queued in the parser dispatch queue*/ 479 uint8_t plcrDispTh; /**< This is the number pf packets that may be 480 queued in the policer dispatch queue*/ 481 uint8_t kgDispTh; /**< This is the number pf packets that may be 482 queued in the keygen dispatch queue*/ 483 uint8_t bmiDispTh; /**< This is the number pf packets that may be 484 queued in the BMI dispatch queue*/ 485 uint8_t qmiEnqDispTh; /**< This is the number pf packets that may be 486 queued in the QMI enqueue dispatch queue*/ 487 uint8_t qmiDeqDispTh; /**< This is the number pf packets that may be 488 queued in the QMI dequeue dispatch queue*/ 489 uint8_t fmCtl1DispTh; /**< This is the number pf packets that may be 490 queued in fmCtl1 dispatch queue*/ 491 uint8_t fmCtl2DispTh; /**< This is the number pf packets that may be 492 queued in fmCtl2 dispatch queue*/ 493 } t_FmThresholds; 494 495 496 /**************************************************************************//** 497 @Description structure for defining DMA thresholds 498 *//***************************************************************************/ 499 typedef struct t_FmDmaThresholds { 500 uint8_t assertEmergency; /**< When this value is reached, 501 assert emergency (Threshold)*/ 502 uint8_t clearEmergency; /**< After emergency is asserted, it is held 503 until this value is reached (Hystheresis) */ 504 } t_FmDmaThresholds; 505 506 507 /**************************************************************************//** 508 @Function FM_ConfigResetOnInit 509 510 @Description Tell the driver whether to reset the FM before initialization or 511 not. It changes the default configuration [FALSE]. 512 513 @Param[in] h_Fm A handle to an FM Module. 514 @Param[in] enable When TRUE, FM will be reset before any initialization. 515 516 @Return E_OK on success; Error code otherwise. 517 518 @Cautions Allowed only following FM_Config() and before FM_Init(). 519 *//***************************************************************************/ 520 t_Error FM_ConfigResetOnInit(t_Handle h_Fm, bool enable); 521 522 /**************************************************************************//** 523 @Function FM_ConfigTotalNumOfTasks 524 525 @Description Change the total number of tasks from its default 526 configuration [BMI_MAX_NUM_OF_TASKS] 527 528 @Param[in] h_Fm A handle to an FM Module. 529 @Param[in] totalNumOfTasks The selected new value. 530 531 @Return E_OK on success; Error code otherwise. 532 533 @Cautions Allowed only following FM_Config() and before FM_Init(). 534 *//***************************************************************************/ 535 t_Error FM_ConfigTotalNumOfTasks(t_Handle h_Fm, uint8_t totalNumOfTasks); 536 537 /**************************************************************************//** 538 @Function FM_ConfigTotalFifoSize 539 540 @Description Change the total Fifo size from its default 541 configuration [BMI_MAX_FIFO_SIZE] 542 543 @Param[in] h_Fm A handle to an FM Module. 544 @Param[in] totalFifoSize The selected new value. 545 546 @Return E_OK on success; Error code otherwise. 547 548 @Cautions Allowed only following FM_Config() and before FM_Init(). 549 *//***************************************************************************/ 550 t_Error FM_ConfigTotalFifoSize(t_Handle h_Fm, uint32_t totalFifoSize); 551 552 /**************************************************************************//** 553 @Function FM_ConfigMaxNumOfOpenDmas 554 555 @Description Change the maximum allowed open DMA's for this FM from its default 556 configuration [BMI_MAX_NUM_OF_DMAS] 557 558 @Param[in] h_Fm A handle to an FM Module. 559 @Param[in] maxNumOfOpenDmas The selected new value. 560 561 @Return E_OK on success; Error code otherwise. 562 563 @Cautions Allowed only following FM_Config() and before FM_Init(). 564 *//***************************************************************************/ 565 t_Error FM_ConfigMaxNumOfOpenDmas(t_Handle h_Fm, uint8_t maxNumOfOpenDmas); 566 567 /**************************************************************************//** 568 @Function FM_ConfigThresholds 569 570 @Description Calling this routine changes the internal driver data base 571 from its default FM threshold configuration: 572 dispLimit: [0] 573 prsDispTh: [16] 574 plcrDispTh: [16] 575 kgDispTh: [16] 576 bmiDispTh: [16] 577 qmiEnqDispTh: [16] 578 qmiDeqDispTh: [16] 579 fmCtl1DispTh: [16] 580 fmCtl2DispTh: [16] 581 582 @Param[in] h_Fm A handle to an FM Module. 583 @Param[in] p_FmThresholds A structure of threshold parameters. 584 585 @Return E_OK on success; Error code otherwise. 586 587 @Cautions Allowed only following FM_Config() and before FM_Init(). 588 *//***************************************************************************/ 589 t_Error FM_ConfigThresholds(t_Handle h_Fm, t_FmThresholds *p_FmThresholds); 590 591 /**************************************************************************//** 592 @Function FM_ConfigDmaCacheOverride 593 594 @Description Calling this routine changes the internal driver data base 595 from its default configuration of cache override mode [e_FM_DMA_NO_CACHE_OR] 596 597 @Param[in] h_Fm A handle to an FM Module. 598 @Param[in] cacheOverride The selected new value. 599 600 @Return E_OK on success; Error code otherwise. 601 602 @Cautions Allowed only following FM_Config() and before FM_Init(). 603 *//***************************************************************************/ 604 t_Error FM_ConfigDmaCacheOverride(t_Handle h_Fm, e_FmDmaCacheOverride cacheOverride); 605 606 /**************************************************************************//** 607 @Function FM_ConfigDmaAidOverride 608 609 @Description Calling this routine changes the internal driver data base 610 from its default configuration of aid override mode [TRUE] 611 612 @Param[in] h_Fm A handle to an FM Module. 613 @Param[in] aidOverride The selected new value. 614 615 @Return E_OK on success; Error code otherwise. 616 617 @Cautions Allowed only following FM_Config() and before FM_Init(). 618 *//***************************************************************************/ 619 t_Error FM_ConfigDmaAidOverride(t_Handle h_Fm, bool aidOverride); 620 621 /**************************************************************************//** 622 @Function FM_ConfigDmaAidMode 623 624 @Description Calling this routine changes the internal driver data base 625 from its default configuration of aid mode [e_FM_DMA_AID_OUT_TNUM] 626 627 @Param[in] h_Fm A handle to an FM Module. 628 @Param[in] aidMode The selected new value. 629 630 @Return E_OK on success; Error code otherwise. 631 632 @Cautions Allowed only following FM_Config() and before FM_Init(). 633 *//***************************************************************************/ 634 t_Error FM_ConfigDmaAidMode(t_Handle h_Fm, e_FmDmaAidMode aidMode); 635 636 /**************************************************************************//** 637 @Function FM_ConfigDmaAxiDbgNumOfBeats 638 639 @Description Calling this routine changes the internal driver data base 640 from its default configuration of axi debug [1] 641 642 @Param[in] h_Fm A handle to an FM Module. 643 @Param[in] axiDbgNumOfBeats The selected new value. 644 645 @Return E_OK on success; Error code otherwise. 646 647 @Cautions Allowed only following FM_Config() and before FM_Init(). 648 *//***************************************************************************/ 649 t_Error FM_ConfigDmaAxiDbgNumOfBeats(t_Handle h_Fm, uint8_t axiDbgNumOfBeats); 650 651 /**************************************************************************//** 652 @Function FM_ConfigDmaCamNumOfEntries 653 654 @Description Calling this routine changes the internal driver data base 655 from its default configuration of number of CAM entries [32] 656 657 @Param[in] h_Fm A handle to an FM Module. 658 @Param[in] numOfEntries The selected new value. 659 660 @Return E_OK on success; Error code otherwise. 661 662 @Cautions Allowed only following FM_Config() and before FM_Init(). 663 *//***************************************************************************/ 664 t_Error FM_ConfigDmaCamNumOfEntries(t_Handle h_Fm, uint8_t numOfEntries); 665 666 /**************************************************************************//** 667 @Function FM_ConfigDmaWatchdog 668 669 @Description Calling this routine changes the internal driver data base 670 from its default watchdog configuration, which is disabled 671 [0]. 672 673 @Param[in] h_Fm A handle to an FM Module. 674 @Param[in] watchDogValue The selected new value - in microseconds. 675 676 @Return E_OK on success; Error code otherwise. 677 678 @Cautions Allowed only following FM_Config() and before FM_Init(). 679 *//***************************************************************************/ 680 t_Error FM_ConfigDmaWatchdog(t_Handle h_Fm, uint32_t watchDogValue); 681 682 /**************************************************************************//** 683 @Function FM_ConfigDmaWriteBufThresholds 684 685 @Description Calling this routine changes the internal driver data base 686 from its default configuration of DMA write buffer threshold 687 assertEmergency: [DMA_THRESH_MAX_BUF] 688 clearEmergency: [DMA_THRESH_MAX_BUF] 689 690 @Param[in] h_Fm A handle to an FM Module. 691 @Param[in] p_FmDmaThresholds A structure of thresholds to define emergency behavior - 692 When 'assertEmergency' value is reached, emergency is asserted, 693 then it is held until 'clearEmergency' value is reached. 694 695 @Return E_OK on success; Error code otherwise. 696 697 @Cautions Allowed only following FM_Config() and before FM_Init(). 698 *//***************************************************************************/ 699 t_Error FM_ConfigDmaWriteBufThresholds(t_Handle h_Fm, t_FmDmaThresholds *p_FmDmaThresholds); 700 701 /**************************************************************************//** 702 @Function FM_ConfigDmaCommQThresholds 703 704 @Description Calling this routine changes the internal driver data base 705 from its default configuration of DMA command queue threshold 706 assertEmergency: [DMA_THRESH_MAX_COMMQ] 707 clearEmergency: [DMA_THRESH_MAX_COMMQ] 708 709 @Param[in] h_Fm A handle to an FM Module. 710 @Param[in] p_FmDmaThresholds A structure of thresholds to define emergency behavior - 711 When 'assertEmergency' value is reached, emergency is asserted, 712 then it is held until 'clearEmergency' value is reached.. 713 714 @Return E_OK on success; Error code otherwise. 715 716 @Cautions Allowed only following FM_Config() and before FM_Init(). 717 *//***************************************************************************/ 718 t_Error FM_ConfigDmaCommQThresholds(t_Handle h_Fm, t_FmDmaThresholds *p_FmDmaThresholds); 719 720 /**************************************************************************//** 721 @Function FM_ConfigDmaReadBufThresholds 722 723 @Description Calling this routine changes the internal driver data base 724 from its default configuration of DMA read buffer threshold 725 assertEmergency: [DMA_THRESH_MAX_BUF] 726 clearEmergency: [DMA_THRESH_MAX_BUF] 727 728 @Param[in] h_Fm A handle to an FM Module. 729 @Param[in] p_FmDmaThresholds A structure of thresholds to define emergency behavior - 730 When 'assertEmergency' value is reached, emergency is asserted, 731 then it is held until 'clearEmergency' value is reached.. 732 733 @Return E_OK on success; Error code otherwise. 734 735 @Cautions Allowed only following FM_Config() and before FM_Init(). 736 *//***************************************************************************/ 737 t_Error FM_ConfigDmaReadBufThresholds(t_Handle h_Fm, t_FmDmaThresholds *p_FmDmaThresholds); 738 739 /**************************************************************************//** 740 @Function FM_ConfigDmaSosEmergencyThreshold 741 742 @Description Calling this routine changes the internal driver data base 743 from its default dma SOS emergency configuration [0] 744 745 @Param[in] h_Fm A handle to an FM Module. 746 @Param[in] dmaSosEmergency The selected new value. 747 748 @Return E_OK on success; Error code otherwise. 749 750 @Cautions Allowed only following FM_Config() and before FM_Init(). 751 *//***************************************************************************/ 752 t_Error FM_ConfigDmaSosEmergencyThreshold(t_Handle h_Fm, uint32_t dmaSosEmergency); 753 754 /**************************************************************************//** 755 @Function FM_ConfigEnableCounters 756 757 @Description Calling this routine changes the internal driver data base 758 from its default counters configuration where counters are disabled. 759 760 @Param[in] h_Fm A handle to an FM Module. 761 762 @Return E_OK on success; Error code otherwise. 763 764 @Cautions Allowed only following FM_Config() and before FM_Init(). 765 *//***************************************************************************/ 766 t_Error FM_ConfigEnableCounters(t_Handle h_Fm); 767 768 /**************************************************************************//** 769 @Function FM_ConfigDmaDbgCounter 770 771 @Description Calling this routine changes the internal driver data base 772 from its default DMA debug counters configuration [e_FM_DMA_DBG_NO_CNT] 773 774 @Param[in] h_Fm A handle to an FM Module. 775 @Param[in] fmDmaDbgCntMode An enum selecting the debug counter mode. 776 777 @Return E_OK on success; Error code otherwise. 778 779 @Cautions Allowed only following FM_Config() and before FM_Init(). 780 *//***************************************************************************/ 781 t_Error FM_ConfigDmaDbgCounter(t_Handle h_Fm, e_FmDmaDbgCntMode fmDmaDbgCntMode); 782 783 /**************************************************************************//** 784 @Function FM_ConfigDmaStopOnBusErr 785 786 @Description Calling this routine changes the internal driver data base 787 from its default selection of bus error behavior [FALSE] 788 789 790 @Param[in] h_Fm A handle to an FM Module. 791 @Param[in] stop TRUE to stop on bus error, FALSE to continue. 792 793 @Return E_OK on success; Error code otherwise. 794 795 @Cautions Allowed only following FM_Config() and before FM_Init(). 796 Only if bus error is enabled. 797 *//***************************************************************************/ 798 t_Error FM_ConfigDmaStopOnBusErr(t_Handle h_Fm, bool stop); 799 800 /**************************************************************************//** 801 @Function FM_ConfigDmaEmergency 802 803 @Description Calling this routine changes the internal driver data base 804 from its default selection of DMA emergency where's it's disabled. 805 806 @Param[in] h_Fm A handle to an FM Module. 807 @Param[in] p_Emergency An OR mask of all required options. 808 809 @Return E_OK on success; Error code otherwise. 810 811 @Cautions Allowed only following FM_Config() and before FM_Init(). 812 *//***************************************************************************/ 813 t_Error FM_ConfigDmaEmergency(t_Handle h_Fm, t_FmDmaEmergency *p_Emergency); 814 815 /**************************************************************************//** 816 @Function FM_ConfigDmaEmergencySmoother 817 818 @Description sets the minimum amount of DATA beats transferred on the AXI 819 READ and WRITE ports before lowering the emergency level. 820 By default smother is disabled. 821 822 @Param[in] h_Fm A handle to an FM Module. 823 @Param[in] emergencyCnt emergency switching counter. 824 825 @Return E_OK on success; Error code otherwise. 826 827 @Cautions Allowed only following FM_Config() and before FM_Init(). 828 *//***************************************************************************/ 829 t_Error FM_ConfigDmaEmergencySmoother(t_Handle h_Fm, uint32_t emergencyCnt); 830 831 /**************************************************************************//** 832 @Function FM_ConfigDmaErr 833 834 @Description Calling this routine changes the internal driver data base 835 from its default DMA error treatment [e_FM_DMA_ERR_CATASTROPHIC] 836 837 @Param[in] h_Fm A handle to an FM Module. 838 @Param[in] dmaErr The selected new choice. 839 840 @Return E_OK on success; Error code otherwise. 841 842 @Cautions Allowed only following FM_Config() and before FM_Init(). 843 *//***************************************************************************/ 844 t_Error FM_ConfigDmaErr(t_Handle h_Fm, e_FmDmaErr dmaErr); 845 846 /**************************************************************************//** 847 @Function FM_ConfigCatastrophicErr 848 849 @Description Calling this routine changes the internal driver data base 850 from its default behavior on catastrophic error [e_FM_CATASTROPHIC_ERR_STALL_PORT] 851 852 @Param[in] h_Fm A handle to an FM Module. 853 @Param[in] catastrophicErr The selected new choice. 854 855 @Return E_OK on success; Error code otherwise. 856 857 @Cautions Allowed only following FM_Config() and before FM_Init(). 858 *//***************************************************************************/ 859 t_Error FM_ConfigCatastrophicErr(t_Handle h_Fm, e_FmCatastrophicErr catastrophicErr); 860 861 /**************************************************************************//** 862 @Function FM_ConfigEnableMuramTestMode 863 864 @Description Calling this routine changes the internal driver data base 865 from its default selection of test mode where it's disabled. 866 867 @Param[in] h_Fm A handle to an FM Module. 868 869 @Return E_OK on success; Error code otherwise. 870 871 @Cautions Allowed only following FM_Config() and before FM_Init(). 872 *//***************************************************************************/ 873 t_Error FM_ConfigEnableMuramTestMode(t_Handle h_Fm); 874 875 /**************************************************************************//** 876 @Function FM_ConfigEnableIramTestMode 877 878 @Description Calling this routine changes the internal driver data base 879 from its default selection of test mode where it's disabled. 880 881 @Param[in] h_Fm A handle to an FM Module. 882 883 @Return E_OK on success; Error code otherwise. 884 885 @Cautions Allowed only following FM_Config() and before FM_Init(). 886 *//***************************************************************************/ 887 t_Error FM_ConfigEnableIramTestMode(t_Handle h_Fm); 888 889 /**************************************************************************//** 890 @Function FM_ConfigHaltOnExternalActivation 891 892 @Description Calling this routine changes the internal driver data base 893 from its default selection of FM behaviour on external halt 894 activation [FALSE]. 895 896 @Param[in] h_Fm A handle to an FM Module. 897 @Param[in] enable TRUE to enable halt on external halt 898 activation. 899 900 @Return E_OK on success; Error code otherwise. 901 902 @Cautions Allowed only following FM_Config() and before FM_Init(). 903 *//***************************************************************************/ 904 t_Error FM_ConfigHaltOnExternalActivation(t_Handle h_Fm, bool enable); 905 906 /**************************************************************************//** 907 @Function FM_ConfigHaltOnUnrecoverableEccError 908 909 @Description Calling this routine changes the internal driver data base 910 from its default selection of FM behaviour on unrecoverable 911 Ecc error [FALSE]. 912 913 @Param[in] h_Fm A handle to an FM Module. 914 @Param[in] enable TRUE to enable halt on unrecoverable Ecc error 915 916 @Return E_OK on success; Error code otherwise. 917 918 @Cautions Allowed only following FM_Config() and before FM_Init(). 919 *//***************************************************************************/ 920 t_Error FM_ConfigHaltOnUnrecoverableEccError(t_Handle h_Fm, bool enable); 921 922 /**************************************************************************//** 923 @Function FM_ConfigException 924 925 @Description Calling this routine changes the internal driver data base 926 from its default selection of exceptions enablement. 927 By default all exceptions are enabled. 928 929 @Param[in] h_Fm A handle to an FM Module. 930 @Param[in] exception The exception to be selected. 931 @Param[in] enable TRUE to enable interrupt, FALSE to mask it. 932 933 @Return E_OK on success; Error code otherwise. 934 935 @Cautions Allowed only following FM_Config() and before FM_Init(). 936 *//***************************************************************************/ 937 t_Error FM_ConfigException(t_Handle h_Fm, e_FmExceptions exception, bool enable); 938 939 /**************************************************************************//** 940 @Function FM_ConfigExternalEccRamsEnable 941 942 @Description Calling this routine changes the internal driver data base 943 from its default [FALSE]. 944 When this option is enabled Rams ECC enable is not effected 945 by the FPM RCR bit, but by a JTAG. 946 947 @Param[in] h_Fm A handle to an FM Module. 948 @Param[in] enable TRUE to enable this option. 949 950 @Return E_OK on success; Error code otherwise. 951 952 @Cautions Allowed only following FM_Config() and before FM_Init(). 953 *//***************************************************************************/ 954 t_Error FM_ConfigExternalEccRamsEnable(t_Handle h_Fm, bool enable); 955 956 /**************************************************************************//** 957 @Function FM_ConfigTnumAgingPeriod 958 959 @Description Calling this routine changes the internal driver data base 960 from its default configuration for aging of dequeue TNUM's 961 in the QMI.[0] 962 Note that this functionality is not available in all chips. 963 964 @Param[in] h_Fm A handle to an FM Module. 965 @Param[in] tnumAgingPeriod Tnum Aging Period in microseconds. 966 Note that period is recalculated in units of 967 64 FM clocks. Driver will pick the closest 968 possible period. 969 970 @Return E_OK on success; Error code otherwise. 971 972 @Cautions Allowed only following FM_Config() and before FM_Init(). 973 *//***************************************************************************/ 974 t_Error FM_ConfigTnumAgingPeriod(t_Handle h_Fm, uint16_t tnumAgingPeriod); 975 976 /** @} */ /* end of FM_advanced_init_grp group */ 977 /** @} */ /* end of FM_init_grp group */ 978 979 980 /**************************************************************************//** 981 @Group FM_runtime_control_grp FM Runtime Control Unit 982 983 @Description FM Runtime control unit API functions, definitions and enums. 984 The FM driver provides a set of control routines for each module. 985 These routines may only be called after the module was fully 986 initialized (both configuration and initialization routines were 987 called). They are typically used to get information from hardware 988 (status, counters/statistics, revision etc.), to modify a current 989 state or to force/enable a required action. Run-time control may 990 be called whenever necessary and as many times as needed. 991 @{ 992 *//***************************************************************************/ 993 994 /**************************************************************************//** 995 @Collection General FM defines. 996 *//***************************************************************************/ 997 #define FM_MAX_NUM_OF_VALID_PORTS (FM_MAX_NUM_OF_OH_PORTS + \ 998 FM_MAX_NUM_OF_1G_RX_PORTS + \ 999 FM_MAX_NUM_OF_10G_RX_PORTS + \ 1000 FM_MAX_NUM_OF_1G_TX_PORTS + \ 1001 FM_MAX_NUM_OF_10G_TX_PORTS) 1002 /* @} */ 1003 1004 /**************************************************************************//** 1005 @Description Structure for Port bandwidth requirement. Port is identified 1006 by type and relative id. 1007 *//***************************************************************************/ 1008 typedef struct t_FmPortBandwidth { 1009 e_FmPortType type; /**< FM port type */ 1010 uint8_t relativePortId; /**< Type relative port id */ 1011 uint8_t bandwidth; /**< bandwidth - (in term of percents) */ 1012 } t_FmPortBandwidth; 1013 1014 /**************************************************************************//** 1015 @Description A Structure containing an array of Port bandwidth requirements. 1016 The user should state the ports requiring bandwidth in terms of 1017 percentage - i.e. all port's bandwidths in the array must add 1018 up to 100. 1019 *//***************************************************************************/ 1020 typedef struct t_FmPortsBandwidthParams { 1021 uint8_t numOfPorts; /**< num of ports listed in the array below */ 1022 t_FmPortBandwidth portsBandwidths[FM_MAX_NUM_OF_VALID_PORTS]; 1023 /**< for each port, it's bandwidth (all port's 1024 bandwidths must add up to 100.*/ 1025 } t_FmPortsBandwidthParams; 1026 1027 /**************************************************************************//** 1028 @Description DMA Emergency control on MURAM 1029 *//***************************************************************************/ 1030 typedef enum e_FmDmaMuramPort { 1031 e_FM_DMA_MURAM_PORT_WRITE, /**< MURAM write port */ 1032 e_FM_DMA_MURAM_PORT_READ /**< MURAM read port */ 1033 } e_FmDmaMuramPort; 1034 1035 /**************************************************************************//** 1036 @Description enum for defining FM counters 1037 *//***************************************************************************/ 1038 typedef enum e_FmCounters { 1039 e_FM_COUNTERS_ENQ_TOTAL_FRAME = 0, /**< QMI total enqueued frames counter */ 1040 e_FM_COUNTERS_DEQ_TOTAL_FRAME, /**< QMI total dequeued frames counter */ 1041 e_FM_COUNTERS_DEQ_0, /**< QMI 0 frames from QMan counter */ 1042 e_FM_COUNTERS_DEQ_1, /**< QMI 1 frames from QMan counter */ 1043 e_FM_COUNTERS_DEQ_2, /**< QMI 2 frames from QMan counter */ 1044 e_FM_COUNTERS_DEQ_3, /**< QMI 3 frames from QMan counter */ 1045 e_FM_COUNTERS_DEQ_FROM_DEFAULT, /**< QMI dequeue from default queue counter */ 1046 e_FM_COUNTERS_DEQ_FROM_CONTEXT, /**< QMI dequeue from FQ context counter */ 1047 e_FM_COUNTERS_DEQ_FROM_FD, /**< QMI dequeue from FD command field counter */ 1048 e_FM_COUNTERS_DEQ_CONFIRM, /**< QMI dequeue confirm counter */ 1049 e_FM_COUNTERS_SEMAPHOR_ENTRY_FULL_REJECT, /**< DMA semaphor reject due to full entry counter */ 1050 e_FM_COUNTERS_SEMAPHOR_QUEUE_FULL_REJECT, /**< DMA semaphor reject due to full CAM queue counter */ 1051 e_FM_COUNTERS_SEMAPHOR_SYNC_REJECT /**< DMA semaphor reject due to sync counter */ 1052 } e_FmCounters; 1053 1054 /**************************************************************************//** 1055 @Description structure for returning revision information 1056 *//***************************************************************************/ 1057 typedef struct t_FmRevisionInfo { 1058 uint8_t majorRev; /**< Major revision */ 1059 uint8_t minorRev; /**< Minor revision */ 1060 } t_FmRevisionInfo; 1061 1062 /**************************************************************************//** 1063 @Description struct for defining DMA status 1064 *//***************************************************************************/ 1065 typedef struct t_FmDmaStatus { 1066 bool cmqNotEmpty; /**< Command queue is not empty */ 1067 bool busError; /**< Bus error occurred */ 1068 bool readBufEccError; /**< Double ECC error on buffer Read */ 1069 bool writeBufEccSysError; /**< Double ECC error on buffer write from system side */ 1070 bool writeBufEccFmError; /**< Double ECC error on buffer write from FM side */ 1071 } t_FmDmaStatus; 1072 1073 1074 #if (defined(DEBUG_ERRORS) && (DEBUG_ERRORS > 0)) 1075 /**************************************************************************//** 1076 @Function FM_DumpRegs 1077 1078 @Description Dumps all FM registers 1079 1080 @Param[in] h_Fm A handle to an FM Module. 1081 1082 @Return E_OK on success; 1083 1084 @Cautions Allowed only FM_Init(). 1085 *//***************************************************************************/ 1086 t_Error FM_DumpRegs(t_Handle h_Fm); 1087 #endif /* (defined(DEBUG_ERRORS) && ... */ 1088 1089 /**************************************************************************//** 1090 @Function FM_SetException 1091 1092 @Description Calling this routine enables/disables the specified exception. 1093 Note: Not available for guest partition. 1094 1095 @Param[in] h_Fm A handle to an FM Module. 1096 @Param[in] exception The exception to be selected. 1097 @Param[in] enable TRUE to enable interrupt, FALSE to mask it. 1098 1099 @Return E_OK on success; Error code otherwise. 1100 1101 @Cautions Allowed only following FM_Init(). 1102 *//***************************************************************************/ 1103 t_Error FM_SetException(t_Handle h_Fm, e_FmExceptions exception, bool enable); 1104 1105 /**************************************************************************//** 1106 @Function FM_SetPortsBandwidth 1107 1108 @Description Sets relative weights between ports when accessing common resources. 1109 Note: Not available for guest partition. 1110 1111 @Param[in] h_Fm A handle to an FM Module. 1112 @Param[in] p_PortsBandwidth A structure of ports bandwidths in percentage, i.e. 1113 total must equal 100. 1114 1115 @Return E_OK on success; Error code otherwise. 1116 1117 @Cautions Allowed only following FM_Init(). 1118 *//***************************************************************************/ 1119 t_Error FM_SetPortsBandwidth(t_Handle h_Fm, t_FmPortsBandwidthParams *p_PortsBandwidth); 1120 1121 /**************************************************************************//** 1122 @Function FM_EnableRamsEcc 1123 1124 @Description Enables ECC mechanism for all the different FM RAM's; E.g. IRAM, 1125 MURAM, Parser, Keygen, Policer, etc. 1126 Note: 1127 If FM_ConfigExternalEccRamsEnable was called to enable external 1128 setting of ECC, this routine effects IRAM ECC only. 1129 This routine is also called by the driver if an ECC exception is 1130 enabled. 1131 Note: Not available for guest partition. 1132 1133 @Param[in] h_Fm A handle to an FM Module. 1134 1135 @Return E_OK on success; Error code otherwise. 1136 1137 @Cautions Allowed only following FM_Config() and before FM_Init(). 1138 *//***************************************************************************/ 1139 t_Error FM_EnableRamsEcc(t_Handle h_Fm); 1140 1141 /**************************************************************************//** 1142 @Function FM_DisableRamsEcc 1143 1144 @Description Disables ECC mechanism for all the different FM RAM's; E.g. IRAM, 1145 MURAM, Parser, Keygen, Policer, etc. 1146 Note: 1147 If FM_ConfigExternalEccRamsEnable was called to enable external 1148 setting of ECC, this routine effects IRAM ECC only. 1149 In opposed to FM_EnableRamsEcc, this routine must be called 1150 explicitly to disable all Rams ECC. 1151 Note: Not available for guest partition. 1152 1153 1154 @Param[in] h_Fm A handle to an FM Module. 1155 1156 @Return E_OK on success; Error code otherwise. 1157 1158 @Cautions Allowed only following FM_Config() and before FM_Init(). 1159 *//***************************************************************************/ 1160 t_Error FM_DisableRamsEcc(t_Handle h_Fm); 1161 1162 /**************************************************************************//** 1163 @Function FM_GetRevision 1164 1165 @Description Returns the FM revision 1166 1167 @Param[in] h_Fm A handle to an FM Module. 1168 @Param[out] p_FmRevisionInfo A structure of revision information parameters. 1169 1170 @Return E_OK on success; Error code otherwise. 1171 1172 @Cautions Allowed only following FM_Init(). 1173 *//***************************************************************************/ 1174 t_Error FM_GetRevision(t_Handle h_Fm, t_FmRevisionInfo *p_FmRevisionInfo); 1175 1176 /**************************************************************************//** 1177 @Function FM_GetCounter 1178 1179 @Description Reads one of the FM counters. 1180 1181 @Param[in] h_Fm A handle to an FM Module. 1182 @Param[in] counter The requested counter. 1183 1184 @Return Counter's current value. 1185 1186 @Cautions Allowed only following FM_Init(). 1187 Note that it is user's responsibility to call this routine only 1188 for enabled counters, and there will be no indication if a 1189 disabled counter is accessed. 1190 *//***************************************************************************/ 1191 uint32_t FM_GetCounter(t_Handle h_Fm, e_FmCounters counter); 1192 1193 /**************************************************************************//** 1194 @Function FM_ModifyCounter 1195 1196 @Description Sets a value to an enabled counter. Use "0" to reset the counter. 1197 Note: Not available for guest partition. 1198 1199 @Param[in] h_Fm A handle to an FM Module. 1200 @Param[in] counter The requested counter. 1201 @Param[in] val The requested value to be written into the counter. 1202 1203 @Return E_OK on success; Error code otherwise. 1204 1205 @Cautions Allowed only following FM_Init(). 1206 *//***************************************************************************/ 1207 t_Error FM_ModifyCounter(t_Handle h_Fm, e_FmCounters counter, uint32_t val); 1208 1209 /**************************************************************************//** 1210 @Function FM_Resume 1211 1212 @Description Release FM after halt FM command or after unrecoverable ECC error. 1213 Note: Not available for guest partition. 1214 1215 @Param[in] h_Fm A handle to an FM Module. 1216 1217 @Return E_OK on success; Error code otherwise. 1218 *//***************************************************************************/ 1219 void FM_Resume(t_Handle h_Fm); 1220 1221 /**************************************************************************//** 1222 @Function FM_SetDmaEmergency 1223 1224 @Description Manual emergency set 1225 Note: Not available for guest partition. 1226 1227 @Param[in] h_Fm A handle to an FM Module. 1228 @Param[in] muramPort MURAM direction select. 1229 @Param[in] enable TRUE to manually enable emergency, FALSE to disable. 1230 1231 @Return None. 1232 1233 @Cautions Allowed only following FM_Init(). 1234 *//***************************************************************************/ 1235 void FM_SetDmaEmergency(t_Handle h_Fm, e_FmDmaMuramPort muramPort, bool enable); 1236 1237 /**************************************************************************//** 1238 @Function FM_SetDmaExtBusPri 1239 1240 @Description Manual emergency set 1241 Note: Not available for guest partition. 1242 1243 @Param[in] h_Fm A handle to an FM Module. 1244 @Param[in] pri External bus priority select 1245 1246 @Return None. 1247 1248 @Cautions Allowed only following FM_Init(). 1249 *//***************************************************************************/ 1250 void FM_SetDmaExtBusPri(t_Handle h_Fm, e_FmDmaExtBusPri pri); 1251 1252 /**************************************************************************//** 1253 @Function FM_ForceIntr 1254 1255 @Description Causes an interrupt event on the requested source. 1256 Note: Not available for guest partition. 1257 1258 @Param[in] h_Fm A handle to an FM Module. 1259 @Param[in] exception An exception to be forced. 1260 1261 @Return E_OK on success; Error code if the exception is not enabled, 1262 or is not able to create interrupt. 1263 1264 @Cautions Allowed only following FM_Init(). 1265 *//***************************************************************************/ 1266 t_Error FM_ForceIntr (t_Handle h_Fm, e_FmExceptions exception); 1267 1268 /**************************************************************************//** 1269 @Function FM_GetDmaStatus 1270 1271 @Description Reads the DMA current status 1272 1273 @Param[in] h_Fm A handle to an FM Module. 1274 @Param[out] p_FmDmaStatus A structure of DMA status parameters. 1275 1276 @Return None 1277 1278 @Cautions Allowed only following FM_Init(). 1279 *//***************************************************************************/ 1280 void FM_GetDmaStatus(t_Handle h_Fm, t_FmDmaStatus *p_FmDmaStatus); 1281 1282 /**************************************************************************//** 1283 @Function FM_GetPcdHandle 1284 1285 @Description Used by FMC in order to get PCD handle 1286 1287 @Param[in] h_Fm A handle to an FM Module. 1288 1289 @Return A handle to the PCD module, NULL if uninitialized. 1290 1291 @Cautions Allowed only following FM_Init(). 1292 *//***************************************************************************/ 1293 t_Handle FM_GetPcdHandle(t_Handle h_Fm); 1294 1295 /**************************************************************************//** 1296 @Function FM_ErrorIsr 1297 Note: Not available for guest partition. 1298 1299 @Description FM interrupt-service-routine for errors. 1300 1301 @Param[in] h_Fm A handle to an FM Module. 1302 1303 @Return E_OK on success; E_EMPTY if no errors found in register, other 1304 error code otherwise. 1305 1306 @Cautions Allowed only following FM_Init(). 1307 This routine should NOT be called from guest-partition 1308 (i.e. guestId != NCSW_MASTER_ID) 1309 *//***************************************************************************/ 1310 t_Error FM_ErrorIsr(t_Handle h_Fm); 1311 1312 /**************************************************************************//** 1313 @Function FM_EventIsr 1314 Note: Not available for guest partition. 1315 1316 @Description FM interrupt-service-routine for normal events. 1317 1318 @Param[in] h_Fm A handle to an FM Module. 1319 1320 @Cautions Allowed only following FM_Init(). 1321 This routine should NOT be called from guest-partition 1322 (i.e. guestId != NCSW_MASTER_ID) 1323 *//***************************************************************************/ 1324 void FM_EventIsr(t_Handle h_Fm); 1325 1326 #if (defined(DEBUG_ERRORS) && (DEBUG_ERRORS > 0)) 1327 /**************************************************************************//** 1328 @Function FmDumpPortRegs 1329 1330 @Description Dumps FM port registers which are part of FM common registers 1331 1332 @Param[in] h_Fm A handle to an FM Module. 1333 @Param[in] hardwarePortId HW port id. 1334 1335 @Return E_OK on success; Error code otherwise. 1336 1337 @Cautions Allowed only FM_Init(). 1338 *//***************************************************************************/ 1339 t_Error FmDumpPortRegs(t_Handle h_Fm,uint8_t hardwarePortId); 1340 #endif /* (defined(DEBUG_ERRORS) && ... */ 1341 1342 1343 /** @} */ /* end of FM_runtime_control_grp group */ 1344 /** @} */ /* end of FM_lib_grp group */ 1345 /** @} */ /* end of FM_grp group */ 1346 1347 #endif /* __FM_EXT */ 1348