1 /* Copyright (c) 2008-2012 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 /**************************************************************************//** 35 @File fm_ext.h 36 37 @Description FM Application Programming Interface. 38 *//***************************************************************************/ 39 #ifndef __FM_EXT 40 #define __FM_EXT 41 42 #include "error_ext.h" 43 #include "std_ext.h" 44 #include "dpaa_ext.h" 45 #include "fsl_fman_sp.h" 46 47 /**************************************************************************//** 48 @Group FM_grp Frame Manager API 49 50 @Description FM API functions, definitions and enums. 51 52 @{ 53 *//***************************************************************************/ 54 55 /**************************************************************************//** 56 @Group FM_lib_grp FM library 57 58 @Description FM API functions, definitions and enums. 59 60 The FM module is the main driver module and is a mandatory module 61 for FM driver users. This module must be initialized first prior 62 to any other drivers modules. 63 The FM is a "singleton" module. It is responsible of the common 64 HW modules: FPM, DMA, common QMI and common BMI initializations and 65 run-time control routines. This module must be initialized always 66 when working with any of the FM modules. 67 NOTE - We assume that the FM library will be initialized only by core No. 0! 68 69 @{ 70 *//***************************************************************************/ 71 72 /**************************************************************************//** 73 @Description Enum for defining port types 74 *//***************************************************************************/ 75 typedef enum e_FmPortType { 76 e_FM_PORT_TYPE_OH_OFFLINE_PARSING = 0, /**< Offline parsing port */ 77 e_FM_PORT_TYPE_RX, /**< 1G Rx port */ 78 e_FM_PORT_TYPE_RX_10G, /**< 10G Rx port */ 79 e_FM_PORT_TYPE_TX, /**< 1G Tx port */ 80 e_FM_PORT_TYPE_TX_10G, /**< 10G Tx port */ 81 e_FM_PORT_TYPE_DUMMY 82 } e_FmPortType; 83 84 /**************************************************************************//** 85 @Collection General FM defines 86 *//***************************************************************************/ 87 #define FM_MAX_NUM_OF_PARTITIONS 64 /**< Maximum number of partitions */ 88 #define FM_PHYS_ADDRESS_SIZE 6 /**< FM Physical address size */ 89 /* @} */ 90 91 92 #if defined(__MWERKS__) && !defined(__GNUC__) 93 #pragma pack(push,1) 94 #endif /* defined(__MWERKS__) && ... */ 95 96 /**************************************************************************//** 97 @Description FM physical Address 98 *//***************************************************************************/ 99 typedef _Packed struct t_FmPhysAddr { 100 volatile uint8_t high; /**< High part of the physical address */ 101 volatile uint32_t low; /**< Low part of the physical address */ 102 } _PackedType t_FmPhysAddr; 103 104 /**************************************************************************//** 105 @Description Parse results memory layout 106 *//***************************************************************************/ 107 typedef _Packed struct t_FmPrsResult { 108 volatile uint8_t lpid; /**< Logical port id */ 109 volatile uint8_t shimr; /**< Shim header result */ 110 volatile uint16_t l2r; /**< Layer 2 result */ 111 volatile uint16_t l3r; /**< Layer 3 result */ 112 volatile uint8_t l4r; /**< Layer 4 result */ 113 volatile uint8_t cplan; /**< Classification plan id */ 114 volatile uint16_t nxthdr; /**< Next Header */ 115 volatile uint16_t cksum; /**< Running-sum */ 116 volatile uint16_t flags_frag_off; /**< Flags & fragment-offset field of the last IP-header */ 117 volatile uint8_t route_type; /**< Routing type field of a IPv6 routing extension header */ 118 volatile uint8_t rhp_ip_valid; /**< Routing Extension Header Present; last bit is IP valid */ 119 volatile uint8_t shim_off[2]; /**< Shim offset */ 120 volatile uint8_t ip_pid_off; /**< IP PID (last IP-proto) offset */ 121 volatile uint8_t eth_off; /**< ETH offset */ 122 volatile uint8_t llc_snap_off; /**< LLC_SNAP offset */ 123 volatile uint8_t vlan_off[2]; /**< VLAN offset */ 124 volatile uint8_t etype_off; /**< ETYPE offset */ 125 volatile uint8_t pppoe_off; /**< PPP offset */ 126 volatile uint8_t mpls_off[2]; /**< MPLS offset */ 127 volatile uint8_t ip_off[2]; /**< IP offset */ 128 volatile uint8_t gre_off; /**< GRE offset */ 129 volatile uint8_t l4_off; /**< Layer 4 offset */ 130 volatile uint8_t nxthdr_off; /**< Parser end point */ 131 } _PackedType t_FmPrsResult; 132 133 /**************************************************************************//** 134 @Collection FM Parser results 135 *//***************************************************************************/ 136 #define FM_PR_L2_VLAN_STACK 0x00000100 /**< Parse Result: VLAN stack */ 137 #define FM_PR_L2_ETHERNET 0x00008000 /**< Parse Result: Ethernet*/ 138 #define FM_PR_L2_VLAN 0x00004000 /**< Parse Result: VLAN */ 139 #define FM_PR_L2_LLC_SNAP 0x00002000 /**< Parse Result: LLC_SNAP */ 140 #define FM_PR_L2_MPLS 0x00001000 /**< Parse Result: MPLS */ 141 #define FM_PR_L2_PPPoE 0x00000800 /**< Parse Result: PPPoE */ 142 /* @} */ 143 144 /**************************************************************************//** 145 @Collection FM Frame descriptor macros 146 *//***************************************************************************/ 147 #define FM_FD_CMD_FCO 0x80000000 /**< Frame queue Context Override */ 148 #define FM_FD_CMD_RPD 0x40000000 /**< Read Prepended Data */ 149 #define FM_FD_CMD_UPD 0x20000000 /**< Update Prepended Data */ 150 #define FM_FD_CMD_DTC 0x10000000 /**< Do L4 Checksum */ 151 #define FM_FD_CMD_DCL4C 0x10000000 /**< Didn't calculate L4 Checksum */ 152 #define FM_FD_CMD_CFQ 0x00ffffff /**< Confirmation Frame Queue */ 153 154 #define FM_FD_ERR_UNSUPPORTED_FORMAT 0x04000000 /**< Not for Rx-Port! Unsupported Format */ 155 #define FM_FD_ERR_LENGTH 0x02000000 /**< Not for Rx-Port! Length Error */ 156 #define FM_FD_ERR_DMA 0x01000000 /**< DMA Data error */ 157 158 #define FM_FD_IPR 0x00000001 /**< IPR frame (not error) */ 159 160 #define FM_FD_ERR_IPR_NCSP (0x00100000 | FM_FD_IPR) /**< IPR non-consistent-sp */ 161 #define FM_FD_ERR_IPR (0x00200000 | FM_FD_IPR) /**< IPR error */ 162 #define FM_FD_ERR_IPR_TO (0x00300000 | FM_FD_IPR) /**< IPR timeout */ 163 164 #ifdef FM_CAPWAP_SUPPORT 165 #define FM_FD_ERR_CRE 0x00200000 166 #define FM_FD_ERR_CHE 0x00100000 167 #endif /* FM_CAPWAP_SUPPORT */ 168 169 #define FM_FD_ERR_PHYSICAL 0x00080000 /**< Rx FIFO overflow, FCS error, code error, running disparity 170 error (SGMII and TBI modes), FIFO parity error. PHY 171 Sequence error, PHY error control character detected. */ 172 #define FM_FD_ERR_SIZE 0x00040000 /**< Frame too long OR Frame size exceeds max_length_frame */ 173 #define FM_FD_ERR_CLS_DISCARD 0x00020000 /**< classification discard */ 174 #define FM_FD_ERR_EXTRACTION 0x00008000 /**< Extract Out of Frame */ 175 #define FM_FD_ERR_NO_SCHEME 0x00004000 /**< No Scheme Selected */ 176 #define FM_FD_ERR_KEYSIZE_OVERFLOW 0x00002000 /**< Keysize Overflow */ 177 #define FM_FD_ERR_COLOR_RED 0x00000800 /**< Frame color is red */ 178 #define FM_FD_ERR_COLOR_YELLOW 0x00000400 /**< Frame color is yellow */ 179 #define FM_FD_ERR_ILL_PLCR 0x00000200 /**< Illegal Policer Profile selected */ 180 #define FM_FD_ERR_PLCR_FRAME_LEN 0x00000100 /**< Policer frame length error */ 181 #define FM_FD_ERR_PRS_TIMEOUT 0x00000080 /**< Parser Time out Exceed */ 182 #define FM_FD_ERR_PRS_ILL_INSTRUCT 0x00000040 /**< Invalid Soft Parser instruction */ 183 #define FM_FD_ERR_PRS_HDR_ERR 0x00000020 /**< Header error was identified during parsing */ 184 #define FM_FD_ERR_BLOCK_LIMIT_EXCEEDED 0x00000008 /**< Frame parsed beyind 256 first bytes */ 185 186 #define FM_FD_TX_STATUS_ERR_MASK (FM_FD_ERR_UNSUPPORTED_FORMAT | \ 187 FM_FD_ERR_LENGTH | \ 188 FM_FD_ERR_DMA) /**< TX Error FD bits */ 189 190 #define FM_FD_RX_STATUS_ERR_MASK (FM_FD_ERR_UNSUPPORTED_FORMAT | \ 191 FM_FD_ERR_LENGTH | \ 192 FM_FD_ERR_DMA | \ 193 FM_FD_ERR_IPR | \ 194 FM_FD_ERR_IPR_TO | \ 195 FM_FD_ERR_IPR_NCSP | \ 196 FM_FD_ERR_PHYSICAL | \ 197 FM_FD_ERR_SIZE | \ 198 FM_FD_ERR_CLS_DISCARD | \ 199 FM_FD_ERR_COLOR_RED | \ 200 FM_FD_ERR_COLOR_YELLOW | \ 201 FM_FD_ERR_ILL_PLCR | \ 202 FM_FD_ERR_PLCR_FRAME_LEN | \ 203 FM_FD_ERR_EXTRACTION | \ 204 FM_FD_ERR_NO_SCHEME | \ 205 FM_FD_ERR_KEYSIZE_OVERFLOW | \ 206 FM_FD_ERR_PRS_TIMEOUT | \ 207 FM_FD_ERR_PRS_ILL_INSTRUCT | \ 208 FM_FD_ERR_PRS_HDR_ERR | \ 209 FM_FD_ERR_BLOCK_LIMIT_EXCEEDED) /**< RX Error FD bits */ 210 211 #define FM_FD_RX_STATUS_ERR_NON_FM 0x00400000 /**< non Frame-Manager error */ 212 /* @} */ 213 214 /**************************************************************************//** 215 @Description Context A 216 *//***************************************************************************/ 217 typedef _Packed struct t_FmContextA { 218 volatile uint32_t command; /**< ContextA Command */ 219 volatile uint8_t res0[4]; /**< ContextA Reserved bits */ 220 } _PackedType t_FmContextA; 221 222 /**************************************************************************//** 223 @Description Context B 224 *//***************************************************************************/ 225 typedef uint32_t t_FmContextB; 226 227 /**************************************************************************//** 228 @Collection Special Operation options 229 *//***************************************************************************/ 230 typedef uint32_t fmSpecialOperations_t; /**< typedef for defining Special Operation options */ 231 232 #define FM_SP_OP_IPSEC 0x80000000 /**< activate features that related to IPSec (e.g fix Eth-type) */ 233 #define FM_SP_OP_IPSEC_UPDATE_UDP_LEN 0x40000000 /**< update the UDP-Len after Encryption */ 234 #define FM_SP_OP_IPSEC_MANIP 0x20000000 /**< handle the IPSec-manip options */ 235 #define FM_SP_OP_RPD 0x10000000 /**< Set the RPD bit */ 236 #define FM_SP_OP_DCL4C 0x08000000 /**< Set the DCL4C bit */ 237 #define FM_SP_OP_CHECK_SEC_ERRORS 0x04000000 /**< Check SEC errors */ 238 #define FM_SP_OP_CLEAR_RPD 0x02000000 /**< Clear the RPD bit */ 239 #define FM_SP_OP_CAPWAP_DTLS_ENC 0x01000000 /**< activate features that related to CAPWAP-DTLS post Encryption */ 240 #define FM_SP_OP_CAPWAP_DTLS_DEC 0x00800000 /**< activate features that related to CAPWAP-DTLS post Decryption */ 241 #define FM_SP_OP_IPSEC_NO_ETH_HDR 0x00400000 /**< activate features that related to IPSec without Eth hdr */ 242 /* @} */ 243 244 /**************************************************************************//** 245 @Collection Context A macros 246 *//***************************************************************************/ 247 #define FM_CONTEXTA_OVERRIDE_MASK 0x80000000 248 #define FM_CONTEXTA_ICMD_MASK 0x40000000 249 #define FM_CONTEXTA_A1_VALID_MASK 0x20000000 250 #define FM_CONTEXTA_MACCMD_MASK 0x00ff0000 251 #define FM_CONTEXTA_MACCMD_VALID_MASK 0x00800000 252 #define FM_CONTEXTA_MACCMD_SECURED_MASK 0x00100000 253 #define FM_CONTEXTA_MACCMD_SC_MASK 0x000f0000 254 #define FM_CONTEXTA_A1_MASK 0x0000ffff 255 256 #define FM_CONTEXTA_GET_OVERRIDE(contextA) ((((t_FmContextA *)contextA)->command & FM_CONTEXTA_OVERRIDE_MASK) >> (31-0)) 257 #define FM_CONTEXTA_GET_ICMD(contextA) ((((t_FmContextA *)contextA)->command & FM_CONTEXTA_ICMD_MASK) >> (31-1)) 258 #define FM_CONTEXTA_GET_A1_VALID(contextA) ((((t_FmContextA *)contextA)->command & FM_CONTEXTA_A1_VALID_MASK) >> (31-2)) 259 #define FM_CONTEXTA_GET_A1(contextA) ((((t_FmContextA *)contextA)->command & FM_CONTEXTA_A1_MASK) >> (31-31)) 260 #define FM_CONTEXTA_GET_MACCMD(contextA) ((((t_FmContextA *)contextA)->command & FM_CONTEXTA_MACCMD_MASK) >> (31-15)) 261 #define FM_CONTEXTA_GET_MACCMD_VALID(contextA) ((((t_FmContextA *)contextA)->command & FM_CONTEXTA_MACCMD_VALID_MASK) >> (31-8)) 262 #define FM_CONTEXTA_GET_MACCMD_SECURED(contextA) ((((t_FmContextA *)contextA)->command & FM_CONTEXTA_MACCMD_SECURED_MASK) >> (31-11)) 263 #define FM_CONTEXTA_GET_MACCMD_SECURE_CHANNEL(contextA) ((((t_FmContextA *)contextA)->command & FM_CONTEXTA_MACCMD_SC_MASK) >> (31-15)) 264 265 #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) )) 266 #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) )) 267 #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) )) 268 #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) )) 269 #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) )) 270 #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) )) 271 #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) )) 272 #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) )) 273 /* @} */ 274 275 /**************************************************************************//** 276 @Collection Context B macros 277 *//***************************************************************************/ 278 #define FM_CONTEXTB_FQID_MASK 0x00ffffff 279 280 #define FM_CONTEXTB_GET_FQID(contextB) (*((t_FmContextB *)contextB) & FM_CONTEXTB_FQID_MASK) 281 #define FM_CONTEXTB_SET_FQID(contextB,val) (*((t_FmContextB *)contextB) = ((*((t_FmContextB *)contextB) & ~FM_CONTEXTB_FQID_MASK) | ((val) & FM_CONTEXTB_FQID_MASK))) 282 /* @} */ 283 284 #if defined(__MWERKS__) && !defined(__GNUC__) 285 #pragma pack(pop) 286 #endif /* defined(__MWERKS__) && ... */ 287 288 289 /**************************************************************************//** 290 @Description FM Exceptions 291 *//***************************************************************************/ 292 typedef enum e_FmExceptions { 293 e_FM_EX_DMA_BUS_ERROR = 0, /**< DMA bus error. */ 294 e_FM_EX_DMA_READ_ECC, /**< Read Buffer ECC error (Valid for FM rev < 6)*/ 295 e_FM_EX_DMA_SYSTEM_WRITE_ECC, /**< Write Buffer ECC error on system side (Valid for FM rev < 6)*/ 296 e_FM_EX_DMA_FM_WRITE_ECC, /**< Write Buffer ECC error on FM side (Valid for FM rev < 6)*/ 297 e_FM_EX_DMA_SINGLE_PORT_ECC, /**< Single Port ECC error on FM side (Valid for FM rev > 6)*/ 298 e_FM_EX_FPM_STALL_ON_TASKS, /**< Stall of tasks on FPM */ 299 e_FM_EX_FPM_SINGLE_ECC, /**< Single ECC on FPM. */ 300 e_FM_EX_FPM_DOUBLE_ECC, /**< Double ECC error on FPM ram access */ 301 e_FM_EX_QMI_SINGLE_ECC, /**< Single ECC on QMI. */ 302 e_FM_EX_QMI_DOUBLE_ECC, /**< Double bit ECC occurred on QMI */ 303 e_FM_EX_QMI_DEQ_FROM_UNKNOWN_PORTID,/**< Dequeue from unknown port id */ 304 e_FM_EX_BMI_LIST_RAM_ECC, /**< Linked List RAM ECC error */ 305 e_FM_EX_BMI_STORAGE_PROFILE_ECC, /**< Storage Profile ECC Error */ 306 e_FM_EX_BMI_STATISTICS_RAM_ECC, /**< Statistics Count RAM ECC Error Enable */ 307 e_FM_EX_BMI_DISPATCH_RAM_ECC, /**< Dispatch RAM ECC Error Enable */ 308 e_FM_EX_IRAM_ECC, /**< Double bit ECC occurred on IRAM*/ 309 e_FM_EX_MURAM_ECC /**< Double bit ECC occurred on MURAM*/ 310 } e_FmExceptions; 311 312 /**************************************************************************//** 313 @Description Enum for defining port DMA swap mode 314 *//***************************************************************************/ 315 typedef enum e_FmDmaSwapOption { 316 e_FM_DMA_NO_SWP = FMAN_DMA_NO_SWP, /**< No swap, transfer data as is.*/ 317 e_FM_DMA_SWP_PPC_LE = FMAN_DMA_SWP_PPC_LE, /**< The transferred data should be swapped 318 in PowerPc Little Endian mode. */ 319 e_FM_DMA_SWP_BE = FMAN_DMA_SWP_BE /**< The transferred data should be swapped 320 in Big Endian mode */ 321 } e_FmDmaSwapOption; 322 323 /**************************************************************************//** 324 @Description Enum for defining port DMA cache attributes 325 *//***************************************************************************/ 326 typedef enum e_FmDmaCacheOption { 327 e_FM_DMA_NO_STASH = FMAN_DMA_NO_STASH, /**< Cacheable, no Allocate (No Stashing) */ 328 e_FM_DMA_STASH = FMAN_DMA_STASH /**< Cacheable and Allocate (Stashing on) */ 329 } e_FmDmaCacheOption; 330 331 332 /**************************************************************************//** 333 @Group FM_init_grp FM Initialization Unit 334 335 @Description FM Initialization Unit 336 337 Initialization Flow 338 Initialization of the FM Module will be carried out by the application 339 according to the following sequence: 340 - Calling the configuration routine with basic parameters. 341 - Calling the advance initialization routines to change driver's defaults. 342 - Calling the initialization routine. 343 344 @{ 345 *//***************************************************************************/ 346 347 /**************************************************************************//** 348 @Function t_FmExceptionsCallback 349 350 @Description Exceptions user callback routine, will be called upon an 351 exception passing the exception identification. 352 353 @Param[in] h_App - User's application descriptor. 354 @Param[in] exception - The exception. 355 *//***************************************************************************/ 356 typedef void (t_FmExceptionsCallback)(t_Handle h_App, 357 e_FmExceptions exception); 358 359 360 /**************************************************************************//** 361 @Function t_FmBusErrorCallback 362 363 @Description Bus error user callback routine, will be called upon a 364 bus error, passing parameters describing the errors and the owner. 365 366 @Param[in] h_App - User's application descriptor. 367 @Param[in] portType - Port type (e_FmPortType) 368 @Param[in] portId - Port id - relative to type. 369 @Param[in] addr - Address that caused the error 370 @Param[in] tnum - Owner of error 371 @Param[in] liodn - Logical IO device number 372 *//***************************************************************************/ 373 typedef void (t_FmBusErrorCallback) (t_Handle h_App, 374 e_FmPortType portType, 375 uint8_t portId, 376 uint64_t addr, 377 uint8_t tnum, 378 uint16_t liodn); 379 380 /**************************************************************************//** 381 @Description A structure for defining buffer prefix area content. 382 *//***************************************************************************/ 383 typedef struct t_FmBufferPrefixContent { 384 uint16_t privDataSize; /**< Number of bytes to be left at the beginning 385 of the external buffer; Note that the private-area will 386 start from the base of the buffer address. */ 387 bool passPrsResult; /**< TRUE to pass the parse result to/from the FM; 388 User may use FM_PORT_GetBufferPrsResult() in order to 389 get the parser-result from a buffer. */ 390 bool passTimeStamp; /**< TRUE to pass the timeStamp to/from the FM 391 User may use FM_PORT_GetBufferTimeStamp() in order to 392 get the parser-result from a buffer. */ 393 bool passHashResult; /**< TRUE to pass the KG hash result to/from the FM 394 User may use FM_PORT_GetBufferHashResult() in order to 395 get the parser-result from a buffer. */ 396 bool passAllOtherPCDInfo;/**< Add all other Internal-Context information: 397 AD, hash-result, key, etc. */ 398 uint16_t dataAlign; /**< 0 to use driver's default alignment [DEFAULT_FM_SP_bufferPrefixContent_dataAlign], 399 other value for selecting a data alignment (must be a power of 2); 400 if write optimization is used, must be >= 16. */ 401 uint8_t manipExtraSpace; /**< Maximum extra size needed (insertion-size minus removal-size); 402 Note that this field impacts the size of the buffer-prefix 403 (i.e. it pushes the data offset); 404 This field is irrelevant if DPAA_VERSION==10 */ 405 } t_FmBufferPrefixContent; 406 407 /**************************************************************************//** 408 @Description A structure of information about each of the external 409 buffer pools used by a port or storage-profile. 410 *//***************************************************************************/ 411 typedef struct t_FmExtPoolParams { 412 uint8_t id; /**< External buffer pool id */ 413 uint16_t size; /**< External buffer pool buffer size */ 414 } t_FmExtPoolParams; 415 416 /**************************************************************************//** 417 @Description A structure for informing the driver about the external 418 buffer pools allocated in the BM and used by a port or a 419 storage-profile. 420 *//***************************************************************************/ 421 typedef struct t_FmExtPools { 422 uint8_t numOfPoolsUsed; /**< Number of pools use by this port */ 423 t_FmExtPoolParams extBufPool[FM_PORT_MAX_NUM_OF_EXT_POOLS]; 424 /**< Parameters for each port */ 425 } t_FmExtPools; 426 427 /**************************************************************************//** 428 @Description A structure for defining backup BM Pools. 429 *//***************************************************************************/ 430 typedef struct t_FmBackupBmPools { 431 uint8_t numOfBackupPools; /**< Number of BM backup pools - 432 must be smaller than the total number of 433 pools defined for the specified port.*/ 434 uint8_t poolIds[FM_PORT_MAX_NUM_OF_EXT_POOLS]; 435 /**< numOfBackupPools pool id's, specifying which 436 pools should be used only as backup. Pool 437 id's specified here must be a subset of the 438 pools used by the specified port.*/ 439 } t_FmBackupBmPools; 440 441 /**************************************************************************//** 442 @Description A structure for defining BM pool depletion criteria 443 *//***************************************************************************/ 444 typedef struct t_FmBufPoolDepletion { 445 bool poolsGrpModeEnable; /**< select mode in which pause frames will be sent after 446 a number of pools (all together!) are depleted */ 447 uint8_t numOfPools; /**< the number of depleted pools that will invoke 448 pause frames transmission. */ 449 bool poolsToConsider[BM_MAX_NUM_OF_POOLS]; 450 /**< For each pool, TRUE if it should be considered for 451 depletion (Note - this pool must be used by this port!). */ 452 bool singlePoolModeEnable; /**< select mode in which pause frames will be sent after 453 a single-pool is depleted; */ 454 bool poolsToConsiderForSingleMode[BM_MAX_NUM_OF_POOLS]; 455 /**< For each pool, TRUE if it should be considered for 456 depletion (Note - this pool must be used by this port!) */ 457 #if (DPAA_VERSION >= 11) 458 bool pfcPrioritiesEn[FM_MAX_NUM_OF_PFC_PRIORITIES]; 459 /**< This field is used by the MAC as the Priority Enable Vector in the PFC frame which is transmitted */ 460 #endif /* (DPAA_VERSION >= 11) */ 461 } t_FmBufPoolDepletion; 462 463 /**************************************************************************//** 464 @Description A Structure for defining Ucode patch for loading. 465 *//***************************************************************************/ 466 typedef struct t_FmFirmwareParams { 467 uint32_t size; /**< Size of uCode */ 468 uint32_t *p_Code; /**< A pointer to the uCode */ 469 } t_FmFirmwareParams; 470 471 /**************************************************************************//** 472 @Description A Structure for defining FM initialization parameters 473 *//***************************************************************************/ 474 typedef struct t_FmParams { 475 uint8_t fmId; /**< Index of the FM */ 476 uint8_t guestId; /**< FM Partition Id */ 477 uintptr_t baseAddr; /**< A pointer to base of memory mapped FM registers (virtual); 478 this field is optional when the FM runs in "guest-mode" 479 (i.e. guestId != NCSW_MASTER_ID); in that case, the driver will 480 use the memory-map instead of calling the IPC where possible; 481 NOTE that this should include ALL common registers of the FM including 482 the PCD registers area (i.e. until the VSP pages - 880KB). */ 483 t_Handle h_FmMuram; /**< A handle of an initialized MURAM object, 484 to be used by the FM. */ 485 uint16_t fmClkFreq; /**< In Mhz; 486 Relevant when FM not runs in "guest-mode". */ 487 uint16_t fmMacClkRatio; /**< FM MAC Clock ratio, for backward comparability: 488 when fmMacClkRatio = 0, ratio is 2:1 489 when fmMacClkRatio = 1, ratio is 1:1 */ 490 t_FmExceptionsCallback *f_Exception; /**< An application callback routine to handle exceptions; 491 Relevant when FM not runs in "guest-mode". */ 492 t_FmBusErrorCallback *f_BusError; /**< An application callback routine to handle exceptions; 493 Relevant when FM not runs in "guest-mode". */ 494 t_Handle h_App; /**< A handle to an application layer object; This handle will 495 be passed by the driver upon calling the above callbacks; 496 Relevant when FM not runs in "guest-mode". */ 497 uintptr_t irq; /**< FM interrupt source for normal events; 498 Relevant when FM not runs in "guest-mode". */ 499 uintptr_t errIrq; /**< FM interrupt source for errors; 500 Relevant when FM not runs in "guest-mode". */ 501 t_FmFirmwareParams firmware; /**< The firmware parameters structure; 502 Relevant when FM not runs in "guest-mode". */ 503 504 #if (DPAA_VERSION >= 11) 505 uintptr_t vspBaseAddr; /**< A pointer to base of memory mapped FM VSP registers (virtual); 506 i.e. up to 24KB, depending on the specific chip. */ 507 uint8_t partVSPBase; /**< The first Virtual-Storage-Profile-id dedicated to this partition. 508 NOTE: this parameter relevant only when working with multiple partitions. */ 509 uint8_t partNumOfVSPs; /**< Number of VSPs dedicated to this partition. 510 NOTE: this parameter relevant only when working with multiple partitions. */ 511 #endif /* (DPAA_VERSION >= 11) */ 512 } t_FmParams; 513 514 515 /**************************************************************************//** 516 @Function FM_Config 517 518 @Description Creates the FM module and returns its handle (descriptor). 519 This descriptor must be passed as first parameter to all other 520 FM function calls. 521 522 No actual initialization or configuration of FM hardware is 523 done by this routine. All FM parameters get default values that 524 may be changed by calling one or more of the advance config routines. 525 526 @Param[in] p_FmParams - A pointer to a data structure of mandatory FM parameters 527 528 @Return A handle to the FM object, or NULL for Failure. 529 *//***************************************************************************/ 530 t_Handle FM_Config(t_FmParams *p_FmParams); 531 532 /**************************************************************************//** 533 @Function FM_Init 534 535 @Description Initializes the FM module by defining the software structure 536 and configuring the hardware registers. 537 538 @Param[in] h_Fm - FM module descriptor 539 540 @Return E_OK on success; Error code otherwise. 541 *//***************************************************************************/ 542 t_Error FM_Init(t_Handle h_Fm); 543 544 /**************************************************************************//** 545 @Function FM_Free 546 547 @Description Frees all resources that were assigned to FM module. 548 549 Calling this routine invalidates the descriptor. 550 551 @Param[in] h_Fm - FM module descriptor 552 553 @Return E_OK on success; Error code otherwise. 554 *//***************************************************************************/ 555 t_Error FM_Free(t_Handle h_Fm); 556 557 558 /**************************************************************************//** 559 @Group FM_advanced_init_grp FM Advanced Configuration Unit 560 561 @Description Advanced configuration routines are optional routines that may 562 be called in order to change the default driver settings. 563 564 Note: Advanced configuration routines are not available for guest partition. 565 @{ 566 *//***************************************************************************/ 567 568 /**************************************************************************//** 569 @Description Enum for selecting DMA debug mode 570 *//***************************************************************************/ 571 typedef enum e_FmDmaDbgCntMode { 572 e_FM_DMA_DBG_NO_CNT = 0, /**< No counting */ 573 e_FM_DMA_DBG_CNT_DONE, /**< Count DONE commands */ 574 e_FM_DMA_DBG_CNT_COMM_Q_EM, /**< count command queue emergency signals */ 575 e_FM_DMA_DBG_CNT_INT_READ_EM, /**< Count Internal Read buffer emergency signal */ 576 e_FM_DMA_DBG_CNT_INT_WRITE_EM, /**< Count Internal Write buffer emergency signal */ 577 e_FM_DMA_DBG_CNT_FPM_WAIT, /**< Count FPM WAIT signal */ 578 e_FM_DMA_DBG_CNT_SIGLE_BIT_ECC, /**< Single bit ECC errors. */ 579 e_FM_DMA_DBG_CNT_RAW_WAR_PROT /**< Number of times there was a need for RAW & WAR protection. */ 580 } e_FmDmaDbgCntMode; 581 582 /**************************************************************************//** 583 @Description Enum for selecting DMA Cache Override 584 *//***************************************************************************/ 585 typedef enum e_FmDmaCacheOverride { 586 e_FM_DMA_NO_CACHE_OR = 0, /**< No override of the Cache field */ 587 e_FM_DMA_NO_STASH_DATA, /**< Data should not be stashed in system level cache */ 588 e_FM_DMA_MAY_STASH_DATA, /**< Data may be stashed in system level cache */ 589 e_FM_DMA_STASH_DATA /**< Data should be stashed in system level cache */ 590 } e_FmDmaCacheOverride; 591 592 /**************************************************************************//** 593 @Description Enum for selecting DMA External Bus Priority 594 *//***************************************************************************/ 595 typedef enum e_FmDmaExtBusPri { 596 e_FM_DMA_EXT_BUS_NORMAL = 0, /**< Normal priority */ 597 e_FM_DMA_EXT_BUS_EBS, /**< AXI extended bus service priority */ 598 e_FM_DMA_EXT_BUS_SOS, /**< AXI sos priority */ 599 e_FM_DMA_EXT_BUS_EBS_AND_SOS /**< AXI ebs + sos priority */ 600 } e_FmDmaExtBusPri; 601 602 /**************************************************************************//** 603 @Description Enum for choosing the field that will be output on AID 604 *//***************************************************************************/ 605 typedef enum e_FmDmaAidMode { 606 e_FM_DMA_AID_OUT_PORT_ID = 0, /**< 4 LSB of PORT_ID */ 607 e_FM_DMA_AID_OUT_TNUM /**< 4 LSB of TNUM */ 608 } e_FmDmaAidMode; 609 610 /**************************************************************************//** 611 @Description Enum for selecting FPM Catastrophic error behavior 612 *//***************************************************************************/ 613 typedef enum e_FmCatastrophicErr { 614 e_FM_CATASTROPHIC_ERR_STALL_PORT = 0, /**< Port_ID is stalled (only reset can release it) */ 615 e_FM_CATASTROPHIC_ERR_STALL_TASK /**< Only erroneous task is stalled */ 616 } e_FmCatastrophicErr; 617 618 /**************************************************************************//** 619 @Description Enum for selecting FPM DMA Error behavior 620 *//***************************************************************************/ 621 typedef enum e_FmDmaErr { 622 e_FM_DMA_ERR_CATASTROPHIC = 0, /**< Dma error is treated as a catastrophic 623 error (e_FmCatastrophicErr)*/ 624 e_FM_DMA_ERR_REPORT /**< Dma error is just reported */ 625 } e_FmDmaErr; 626 627 /**************************************************************************//** 628 @Description Enum for selecting DMA Emergency level by BMI emergency signal 629 *//***************************************************************************/ 630 typedef enum e_FmDmaEmergencyLevel { 631 e_FM_DMA_EM_EBS = 0, /**< EBS emergency */ 632 e_FM_DMA_EM_SOS /**< SOS emergency */ 633 } e_FmDmaEmergencyLevel; 634 635 /**************************************************************************//** 636 @Collection Enum for selecting DMA Emergency options 637 *//***************************************************************************/ 638 typedef uint32_t fmEmergencyBus_t; /**< DMA emergency options */ 639 640 #define FM_DMA_MURAM_READ_EMERGENCY 0x00800000 /**< Enable emergency for MURAM1 */ 641 #define FM_DMA_MURAM_WRITE_EMERGENCY 0x00400000 /**< Enable emergency for MURAM2 */ 642 #define FM_DMA_EXT_BUS_EMERGENCY 0x00100000 /**< Enable emergency for external bus */ 643 /* @} */ 644 645 /**************************************************************************//** 646 @Description A structure for defining DMA emergency level 647 *//***************************************************************************/ 648 typedef struct t_FmDmaEmergency { 649 fmEmergencyBus_t emergencyBusSelect; /**< An OR of the busses where emergency 650 should be enabled */ 651 e_FmDmaEmergencyLevel emergencyLevel; /**< EBS/SOS */ 652 } t_FmDmaEmergency; 653 654 /**************************************************************************//* 655 @Description structure for defining FM threshold 656 *//***************************************************************************/ 657 typedef struct t_FmThresholds { 658 uint8_t dispLimit; /**< The number of times a frames may 659 be passed in the FM before assumed to 660 be looping. */ 661 uint8_t prsDispTh; /**< This is the number pf packets that may be 662 queued in the parser dispatch queue*/ 663 uint8_t plcrDispTh; /**< This is the number pf packets that may be 664 queued in the policer dispatch queue*/ 665 uint8_t kgDispTh; /**< This is the number pf packets that may be 666 queued in the keygen dispatch queue*/ 667 uint8_t bmiDispTh; /**< This is the number pf packets that may be 668 queued in the BMI dispatch queue*/ 669 uint8_t qmiEnqDispTh; /**< This is the number pf packets that may be 670 queued in the QMI enqueue dispatch queue*/ 671 uint8_t qmiDeqDispTh; /**< This is the number pf packets that may be 672 queued in the QMI dequeue dispatch queue*/ 673 uint8_t fmCtl1DispTh; /**< This is the number pf packets that may be 674 queued in fmCtl1 dispatch queue*/ 675 uint8_t fmCtl2DispTh; /**< This is the number pf packets that may be 676 queued in fmCtl2 dispatch queue*/ 677 } t_FmThresholds; 678 679 /**************************************************************************//* 680 @Description structure for defining DMA thresholds 681 *//***************************************************************************/ 682 typedef struct t_FmDmaThresholds { 683 uint8_t assertEmergency; /**< When this value is reached, 684 assert emergency (Threshold)*/ 685 uint8_t clearEmergency; /**< After emergency is asserted, it is held 686 until this value is reached (Hystheresis) */ 687 } t_FmDmaThresholds; 688 689 /**************************************************************************//** 690 @Function t_FmResetOnInitOverrideCallback 691 692 @Description FMan specific reset on init user callback routine, 693 will be used to override the standard FMan reset on init procedure 694 695 @Param[in] h_Fm - FMan handler 696 *//***************************************************************************/ 697 typedef void (t_FmResetOnInitOverrideCallback)(t_Handle h_Fm); 698 699 /**************************************************************************//** 700 @Function FM_ConfigResetOnInit 701 702 @Description Define whether to reset the FM before initialization. 703 Change the default configuration [DEFAULT_resetOnInit]. 704 705 @Param[in] h_Fm A handle to an FM Module. 706 @Param[in] enable When TRUE, FM will be reset before any initialization. 707 708 @Return E_OK on success; Error code otherwise. 709 710 @Cautions Allowed only following FM_Config() and before FM_Init(). 711 This routine should NOT be called from guest-partition 712 (i.e. guestId != NCSW_MASTER_ID) 713 *//***************************************************************************/ 714 t_Error FM_ConfigResetOnInit(t_Handle h_Fm, bool enable); 715 716 /**************************************************************************//** 717 @Function FM_ConfigResetOnInitOverrideCallback 718 719 @Description Define a special reset of FM before initialization. 720 Change the default configuration [DEFAULT_resetOnInitOverrideCallback]. 721 722 @Param[in] h_Fm A handle to an FM Module. 723 @Param[in] f_ResetOnInitOverride FM specific reset on init user callback routine. 724 725 @Return E_OK on success; Error code otherwise. 726 727 @Cautions Allowed only following FM_Config() and before FM_Init(). 728 This routine should NOT be called from guest-partition 729 (i.e. guestId != NCSW_MASTER_ID) 730 *//***************************************************************************/ 731 t_Error FM_ConfigResetOnInitOverrideCallback(t_Handle h_Fm, t_FmResetOnInitOverrideCallback *f_ResetOnInitOverride); 732 733 /**************************************************************************//** 734 @Function FM_ConfigTotalFifoSize 735 736 @Description Define Total FIFO size for the whole FM. 737 Calling this routine changes the total Fifo size in the internal driver 738 data base from its default configuration [DEFAULT_totalFifoSize] 739 740 @Param[in] h_Fm A handle to an FM Module. 741 @Param[in] totalFifoSize The selected new value. 742 743 @Return E_OK on success; Error code otherwise. 744 745 @Cautions Allowed only following FM_Config() and before FM_Init(). 746 This routine should NOT be called from guest-partition 747 (i.e. guestId != NCSW_MASTER_ID) 748 *//***************************************************************************/ 749 t_Error FM_ConfigTotalFifoSize(t_Handle h_Fm, uint32_t totalFifoSize); 750 751 /**************************************************************************//** 752 @Function FM_ConfigDmaCacheOverride 753 754 @Description Define cache override mode. 755 Calling this routine changes the cache override mode 756 in the internal driver data base from its default configuration [DEFAULT_cacheOverride] 757 758 @Param[in] h_Fm A handle to an FM Module. 759 @Param[in] cacheOverride The selected new value. 760 761 @Return E_OK on success; Error code otherwise. 762 763 @Cautions Allowed only following FM_Config() and before FM_Init(). 764 This routine should NOT be called from guest-partition 765 (i.e. guestId != NCSW_MASTER_ID) 766 *//***************************************************************************/ 767 t_Error FM_ConfigDmaCacheOverride(t_Handle h_Fm, e_FmDmaCacheOverride cacheOverride); 768 769 /**************************************************************************//** 770 @Function FM_ConfigDmaAidOverride 771 772 @Description Define DMA AID override mode. 773 Calling this routine changes the AID override mode 774 in the internal driver data base from its default configuration [DEFAULT_aidOverride] 775 776 @Param[in] h_Fm A handle to an FM Module. 777 @Param[in] aidOverride The selected new value. 778 779 @Return E_OK on success; Error code otherwise. 780 781 @Cautions Allowed only following FM_Config() and before FM_Init(). 782 This routine should NOT be called from guest-partition 783 (i.e. guestId != NCSW_MASTER_ID) 784 *//***************************************************************************/ 785 t_Error FM_ConfigDmaAidOverride(t_Handle h_Fm, bool aidOverride); 786 787 /**************************************************************************//** 788 @Function FM_ConfigDmaAidMode 789 790 @Description Define DMA AID mode. 791 Calling this routine changes the AID mode in the internal 792 driver data base from its default configuration [DEFAULT_aidMode] 793 794 @Param[in] h_Fm A handle to an FM Module. 795 @Param[in] aidMode The selected new value. 796 797 @Return E_OK on success; Error code otherwise. 798 799 @Cautions Allowed only following FM_Config() and before FM_Init(). 800 This routine should NOT be called from guest-partition 801 (i.e. guestId != NCSW_MASTER_ID) 802 *//***************************************************************************/ 803 t_Error FM_ConfigDmaAidMode(t_Handle h_Fm, e_FmDmaAidMode aidMode); 804 805 /**************************************************************************//** 806 @Function FM_ConfigDmaAxiDbgNumOfBeats 807 808 @Description Define DMA AXI number of beats. 809 Calling this routine changes the AXI number of beats in the internal 810 driver data base from its default configuration [DEFAULT_axiDbgNumOfBeats] 811 812 @Param[in] h_Fm A handle to an FM Module. 813 @Param[in] axiDbgNumOfBeats The selected new value. 814 815 @Return E_OK on success; Error code otherwise. 816 817 @Cautions Allowed only following FM_Config() and before FM_Init(). 818 This routine should NOT be called from guest-partition 819 (i.e. guestId != NCSW_MASTER_ID) 820 *//***************************************************************************/ 821 t_Error FM_ConfigDmaAxiDbgNumOfBeats(t_Handle h_Fm, uint8_t axiDbgNumOfBeats); 822 823 /**************************************************************************//** 824 @Function FM_ConfigDmaCamNumOfEntries 825 826 @Description Define number of CAM entries. 827 Calling this routine changes the number of CAM entries in the internal 828 driver data base from its default configuration [DEFAULT_dmaCamNumOfEntries]. 829 830 @Param[in] h_Fm A handle to an FM Module. 831 @Param[in] numOfEntries The selected new value. 832 833 @Return E_OK on success; Error code otherwise. 834 835 @Cautions Allowed only following FM_Config() and before FM_Init(). 836 This routine should NOT be called from guest-partition 837 (i.e. guestId != NCSW_MASTER_ID) 838 *//***************************************************************************/ 839 t_Error FM_ConfigDmaCamNumOfEntries(t_Handle h_Fm, uint8_t numOfEntries); 840 841 /**************************************************************************//** 842 @Function FM_ConfigEnableCounters 843 844 @Description Obsolete, always return E_OK. 845 846 @Param[in] h_Fm A handle to an FM Module. 847 848 @Return E_OK on success; Error code otherwise. 849 *//***************************************************************************/ 850 t_Error FM_ConfigEnableCounters(t_Handle h_Fm); 851 852 /**************************************************************************//** 853 @Function FM_ConfigDmaDbgCounter 854 855 @Description Define DMA debug counter. 856 Calling this routine changes the number of the DMA debug counter in the internal 857 driver data base from its default configuration [DEFAULT_dmaDbgCntMode]. 858 859 @Param[in] h_Fm A handle to an FM Module. 860 @Param[in] fmDmaDbgCntMode An enum selecting the debug counter mode. 861 862 @Return E_OK on success; Error code otherwise. 863 864 @Cautions Allowed only following FM_Config() and before FM_Init(). 865 This routine should NOT be called from guest-partition 866 (i.e. guestId != NCSW_MASTER_ID) 867 *//***************************************************************************/ 868 t_Error FM_ConfigDmaDbgCounter(t_Handle h_Fm, e_FmDmaDbgCntMode fmDmaDbgCntMode); 869 870 /**************************************************************************//** 871 @Function FM_ConfigDmaStopOnBusErr 872 873 @Description Define bus error behavior. 874 Calling this routine changes the bus error behavior definition 875 in the internal driver data base from its default 876 configuration [DEFAULT_dmaStopOnBusError]. 877 878 @Param[in] h_Fm A handle to an FM Module. 879 @Param[in] stop TRUE to stop on bus error, FALSE to continue. 880 881 @Return E_OK on success; Error code otherwise. 882 883 @Cautions Allowed only following FM_Config() and before FM_Init(). 884 Only if bus error is enabled. 885 This routine should NOT be called from guest-partition 886 (i.e. guestId != NCSW_MASTER_ID) 887 *//***************************************************************************/ 888 t_Error FM_ConfigDmaStopOnBusErr(t_Handle h_Fm, bool stop); 889 890 /**************************************************************************//** 891 @Function FM_ConfigDmaEmergency 892 893 @Description Define DMA emergency. 894 Calling this routine changes the DMA emergency definition 895 in the internal driver data base from its default 896 configuration where's it's disabled. 897 898 @Param[in] h_Fm A handle to an FM Module. 899 @Param[in] p_Emergency An OR mask of all required options. 900 901 @Return E_OK on success; Error code otherwise. 902 903 @Cautions Allowed only following FM_Config() and before FM_Init(). 904 This routine should NOT be called from guest-partition 905 (i.e. guestId != NCSW_MASTER_ID) 906 *//***************************************************************************/ 907 t_Error FM_ConfigDmaEmergency(t_Handle h_Fm, t_FmDmaEmergency *p_Emergency); 908 909 /**************************************************************************//** 910 @Function FM_ConfigDmaErr 911 912 @Description DMA error treatment. 913 Calling this routine changes the DMA error treatment 914 in the internal driver data base from its default 915 configuration [DEFAULT_dmaErr]. 916 917 @Param[in] h_Fm A handle to an FM Module. 918 @Param[in] dmaErr The selected new choice. 919 920 @Return E_OK on success; Error code otherwise. 921 922 @Cautions Allowed only following FM_Config() and before FM_Init(). 923 This routine should NOT be called from guest-partition 924 (i.e. guestId != NCSW_MASTER_ID) 925 *//***************************************************************************/ 926 t_Error FM_ConfigDmaErr(t_Handle h_Fm, e_FmDmaErr dmaErr); 927 928 /**************************************************************************//** 929 @Function FM_ConfigCatastrophicErr 930 931 @Description Define FM behavior on catastrophic error. 932 Calling this routine changes the FM behavior on catastrophic 933 error in the internal driver data base from its default 934 [DEFAULT_catastrophicErr]. 935 936 @Param[in] h_Fm A handle to an FM Module. 937 @Param[in] catastrophicErr The selected new choice. 938 939 @Return E_OK on success; Error code otherwise. 940 941 @Cautions Allowed only following FM_Config() and before FM_Init(). 942 This routine should NOT be called from guest-partition 943 (i.e. guestId != NCSW_MASTER_ID) 944 *//***************************************************************************/ 945 t_Error FM_ConfigCatastrophicErr(t_Handle h_Fm, e_FmCatastrophicErr catastrophicErr); 946 947 /**************************************************************************//** 948 @Function FM_ConfigEnableMuramTestMode 949 950 @Description Enable MURAM test mode. 951 Calling this routine changes the internal driver data base 952 from its default selection of test mode where it's disabled. 953 This routine is only avaiable on old FM revisions (FMan v2). 954 955 @Param[in] h_Fm A handle to an FM Module. 956 957 @Return E_OK on success; Error code otherwise. 958 959 @Cautions Allowed only following FM_Config() and before FM_Init(). 960 This routine should NOT be called from guest-partition 961 (i.e. guestId != NCSW_MASTER_ID) 962 *//***************************************************************************/ 963 t_Error FM_ConfigEnableMuramTestMode(t_Handle h_Fm); 964 965 /**************************************************************************//** 966 @Function FM_ConfigEnableIramTestMode 967 968 @Description Enable IRAM test mode. 969 Calling this routine changes the internal driver data base 970 from its default selection of test mode where it's disabled. 971 This routine is only avaiable on old FM revisions (FMan v2). 972 973 @Param[in] h_Fm A handle to an FM Module. 974 975 @Return E_OK on success; Error code otherwise. 976 977 @Cautions Allowed only following FM_Config() and before FM_Init(). 978 This routine should NOT be called from guest-partition 979 (i.e. guestId != NCSW_MASTER_ID) 980 *//***************************************************************************/ 981 t_Error FM_ConfigEnableIramTestMode(t_Handle h_Fm); 982 983 /**************************************************************************//** 984 @Function FM_ConfigHaltOnExternalActivation 985 986 @Description Define FM behavior on external halt activation. 987 Calling this routine changes the FM behavior on external halt 988 activation in the internal driver data base from its default 989 [DEFAULT_haltOnExternalActivation]. 990 991 @Param[in] h_Fm A handle to an FM Module. 992 @Param[in] enable TRUE to enable halt on external halt 993 activation. 994 995 @Return E_OK on success; Error code otherwise. 996 997 @Cautions Allowed only following FM_Config() and before FM_Init(). 998 This routine should NOT be called from guest-partition 999 (i.e. guestId != NCSW_MASTER_ID) 1000 *//***************************************************************************/ 1001 t_Error FM_ConfigHaltOnExternalActivation(t_Handle h_Fm, bool enable); 1002 1003 /**************************************************************************//** 1004 @Function FM_ConfigHaltOnUnrecoverableEccError 1005 1006 @Description Define FM behavior on external halt activation. 1007 Calling this routine changes the FM behavior on unrecoverable 1008 ECC error in the internal driver data base from its default 1009 [DEFAULT_haltOnUnrecoverableEccError]. 1010 This routine is only avaiable on old FM revisions (FMan v2). 1011 1012 @Param[in] h_Fm A handle to an FM Module. 1013 @Param[in] enable TRUE to enable halt on unrecoverable Ecc error 1014 1015 @Return E_OK on success; Error code otherwise. 1016 1017 @Cautions Allowed only following FM_Config() and before FM_Init(). 1018 This routine should NOT be called from guest-partition 1019 (i.e. guestId != NCSW_MASTER_ID) 1020 *//***************************************************************************/ 1021 t_Error FM_ConfigHaltOnUnrecoverableEccError(t_Handle h_Fm, bool enable); 1022 1023 /**************************************************************************//** 1024 @Function FM_ConfigException 1025 1026 @Description Define FM exceptions. 1027 Calling this routine changes the exceptions defaults in the 1028 internal driver data base where all exceptions are enabled. 1029 1030 @Param[in] h_Fm A handle to an FM Module. 1031 @Param[in] exception The exception to be selected. 1032 @Param[in] enable TRUE to enable interrupt, FALSE to mask it. 1033 1034 @Return E_OK on success; Error code otherwise. 1035 1036 @Cautions Allowed only following FM_Config() and before FM_Init(). 1037 This routine should NOT be called from guest-partition 1038 (i.e. guestId != NCSW_MASTER_ID) 1039 *//***************************************************************************/ 1040 t_Error FM_ConfigException(t_Handle h_Fm, e_FmExceptions exception, bool enable); 1041 1042 /**************************************************************************//** 1043 @Function FM_ConfigExternalEccRamsEnable 1044 1045 @Description Select external ECC enabling. 1046 Calling this routine changes the ECC enabling control in the internal 1047 driver data base from its default [DEFAULT_externalEccRamsEnable]. 1048 When this option is enabled Rams ECC enabling is not effected 1049 by FM_EnableRamsEcc/FM_DisableRamsEcc, but by a JTAG. 1050 1051 @Param[in] h_Fm A handle to an FM Module. 1052 @Param[in] enable TRUE to enable this option. 1053 1054 @Return E_OK on success; Error code otherwise. 1055 1056 @Cautions Allowed only following FM_Config() and before FM_Init(). 1057 This routine should NOT be called from guest-partition 1058 (i.e. guestId != NCSW_MASTER_ID) 1059 *//***************************************************************************/ 1060 t_Error FM_ConfigExternalEccRamsEnable(t_Handle h_Fm, bool enable); 1061 1062 /**************************************************************************//** 1063 @Function FM_ConfigTnumAgingPeriod 1064 1065 @Description Define Tnum aging period. 1066 Calling this routine changes the Tnum aging of dequeue TNUMs 1067 in the QMI in the internal driver data base from its default 1068 [DEFAULT_tnumAgingPeriod]. 1069 1070 @Param[in] h_Fm A handle to an FM Module. 1071 @Param[in] tnumAgingPeriod Tnum Aging Period in microseconds. 1072 Note that period is recalculated in units of 1073 64 FM clocks. Driver will pick the closest 1074 possible period. 1075 1076 @Return E_OK on success; Error code otherwise. 1077 1078 @Cautions Allowed only following FM_Config() and before FM_Init(). 1079 This routine should NOT be called from guest-partition 1080 (i.e. guestId != NCSW_MASTER_ID) 1081 NOTE that if some MAC is configured for PFC, '0' value is NOT 1082 allowed. 1083 *//***************************************************************************/ 1084 t_Error FM_ConfigTnumAgingPeriod(t_Handle h_Fm, uint16_t tnumAgingPeriod); 1085 1086 /**************************************************************************//* 1087 @Function FM_ConfigDmaEmergencySmoother 1088 1089 @Description Define DMA emergency smoother. 1090 Calling this routine changes the definition of the minimum 1091 amount of DATA beats transferred on the AXI READ and WRITE 1092 ports before lowering the emergency level. 1093 By default smoother is disabled. 1094 1095 @Param[in] h_Fm A handle to an FM Module. 1096 @Param[in] emergencyCnt emergency switching counter. 1097 1098 @Return E_OK on success; Error code otherwise. 1099 1100 @Cautions Allowed only following FM_Config() and before FM_Init(). 1101 This routine should NOT be called from guest-partition 1102 (i.e. guestId != NCSW_MASTER_ID) 1103 *//***************************************************************************/ 1104 t_Error FM_ConfigDmaEmergencySmoother(t_Handle h_Fm, uint32_t emergencyCnt); 1105 1106 /**************************************************************************//* 1107 @Function FM_ConfigThresholds 1108 1109 @Description Calling this routine changes the internal driver data base 1110 from its default FM threshold configuration: 1111 dispLimit: [DEFAULT_dispLimit] 1112 prsDispTh: [DEFAULT_prsDispTh] 1113 plcrDispTh: [DEFAULT_plcrDispTh] 1114 kgDispTh: [DEFAULT_kgDispTh] 1115 bmiDispTh: [DEFAULT_bmiDispTh] 1116 qmiEnqDispTh: [DEFAULT_qmiEnqDispTh] 1117 qmiDeqDispTh: [DEFAULT_qmiDeqDispTh] 1118 fmCtl1DispTh: [DEFAULT_fmCtl1DispTh] 1119 fmCtl2DispTh: [DEFAULT_fmCtl2DispTh] 1120 1121 1122 @Param[in] h_Fm A handle to an FM Module. 1123 @Param[in] p_FmThresholds A structure of threshold parameters. 1124 1125 @Return E_OK on success; Error code otherwise. 1126 1127 @Cautions Allowed only following FM_Config() and before FM_Init(). 1128 This routine should NOT be called from guest-partition 1129 (i.e. guestId != NCSW_MASTER_ID) 1130 *//***************************************************************************/ 1131 t_Error FM_ConfigThresholds(t_Handle h_Fm, t_FmThresholds *p_FmThresholds); 1132 1133 /**************************************************************************//* 1134 @Function FM_ConfigDmaSosEmergencyThreshold 1135 1136 @Description Calling this routine changes the internal driver data base 1137 from its default dma SOS emergency configuration [DEFAULT_dmaSosEmergency] 1138 1139 @Param[in] h_Fm A handle to an FM Module. 1140 @Param[in] dmaSosEmergency The selected new value. 1141 1142 @Return E_OK on success; Error code otherwise. 1143 1144 @Cautions Allowed only following FM_Config() and before FM_Init(). 1145 This routine should NOT be called from guest-partition 1146 (i.e. guestId != NCSW_MASTER_ID) 1147 *//***************************************************************************/ 1148 t_Error FM_ConfigDmaSosEmergencyThreshold(t_Handle h_Fm, uint32_t dmaSosEmergency); 1149 1150 /**************************************************************************//* 1151 @Function FM_ConfigDmaWriteBufThresholds 1152 1153 @Description Calling this routine changes the internal driver data base 1154 from its default configuration of DMA write buffer threshold 1155 assertEmergency: [DEFAULT_dmaWriteIntBufLow] 1156 clearEmergency: [DEFAULT_dmaWriteIntBufHigh] 1157 This routine is only avaiable on old FM revisions (FMan v2). 1158 1159 @Param[in] h_Fm A handle to an FM Module. 1160 @Param[in] p_FmDmaThresholds A structure of thresholds to define emergency behavior - 1161 When 'assertEmergency' value is reached, emergency is asserted, 1162 then it is held until 'clearEmergency' value is reached. 1163 1164 @Return E_OK on success; Error code otherwise. 1165 1166 @Cautions Allowed only following FM_Config() and before FM_Init(). 1167 This routine should NOT be called from guest-partition 1168 (i.e. guestId != NCSW_MASTER_ID) 1169 *//***************************************************************************/ 1170 t_Error FM_ConfigDmaWriteBufThresholds(t_Handle h_Fm, t_FmDmaThresholds *p_FmDmaThresholds); 1171 1172 /**************************************************************************//* 1173 @Function FM_ConfigDmaCommQThresholds 1174 1175 @Description Calling this routine changes the internal driver data base 1176 from its default configuration of DMA command queue threshold 1177 assertEmergency: [DEFAULT_dmaCommQLow] 1178 clearEmergency: [DEFAULT_dmaCommQHigh] 1179 1180 @Param[in] h_Fm A handle to an FM Module. 1181 @Param[in] p_FmDmaThresholds A structure of thresholds to define emergency behavior - 1182 When 'assertEmergency' value is reached, emergency is asserted, 1183 then it is held until 'clearEmergency' value is reached.. 1184 1185 @Return E_OK on success; Error code otherwise. 1186 1187 @Cautions Allowed only following FM_Config() and before FM_Init(). 1188 This routine should NOT be called from guest-partition 1189 (i.e. guestId != NCSW_MASTER_ID) 1190 *//***************************************************************************/ 1191 t_Error FM_ConfigDmaCommQThresholds(t_Handle h_Fm, t_FmDmaThresholds *p_FmDmaThresholds); 1192 1193 /**************************************************************************//* 1194 @Function FM_ConfigDmaReadBufThresholds 1195 1196 @Description Calling this routine changes the internal driver data base 1197 from its default configuration of DMA read buffer threshold 1198 assertEmergency: [DEFAULT_dmaReadIntBufLow] 1199 clearEmergency: [DEFAULT_dmaReadIntBufHigh] 1200 This routine is only avaiable on old FM revisions (FMan v2). 1201 1202 @Param[in] h_Fm A handle to an FM Module. 1203 @Param[in] p_FmDmaThresholds A structure of thresholds to define emergency behavior - 1204 When 'assertEmergency' value is reached, emergency is asserted, 1205 then it is held until 'clearEmergency' value is reached.. 1206 1207 @Return E_OK on success; Error code otherwise. 1208 1209 @Cautions Allowed only following FM_Config() and before FM_Init(). 1210 This routine should NOT be called from guest-partition 1211 (i.e. guestId != NCSW_MASTER_ID) 1212 *//***************************************************************************/ 1213 t_Error FM_ConfigDmaReadBufThresholds(t_Handle h_Fm, t_FmDmaThresholds *p_FmDmaThresholds); 1214 1215 /**************************************************************************//* 1216 @Function FM_ConfigDmaWatchdog 1217 1218 @Description Calling this routine changes the internal driver data base 1219 from its default watchdog configuration, which is disabled 1220 [DEFAULT_dmaWatchdog]. 1221 1222 @Param[in] h_Fm A handle to an FM Module. 1223 @Param[in] watchDogValue The selected new value - in microseconds. 1224 1225 @Return E_OK on success; Error code otherwise. 1226 1227 @Cautions Allowed only following FM_Config() and before FM_Init(). 1228 This routine should NOT be called from guest-partition 1229 (i.e. guestId != NCSW_MASTER_ID) 1230 *//***************************************************************************/ 1231 t_Error FM_ConfigDmaWatchdog(t_Handle h_Fm, uint32_t watchDogValue); 1232 1233 /** @} */ /* end of FM_advanced_init_grp group */ 1234 /** @} */ /* end of FM_init_grp group */ 1235 1236 1237 /**************************************************************************//** 1238 @Group FM_runtime_control_grp FM Runtime Control Unit 1239 1240 @Description FM Runtime control unit API functions, definitions and enums. 1241 The FM driver provides a set of control routines. 1242 These routines may only be called after the module was fully 1243 initialized (both configuration and initialization routines were 1244 called). They are typically used to get information from hardware 1245 (status, counters/statistics, revision etc.), to modify a current 1246 state or to force/enable a required action. Run-time control may 1247 be called whenever necessary and as many times as needed. 1248 @{ 1249 *//***************************************************************************/ 1250 1251 /**************************************************************************//** 1252 @Collection General FM defines. 1253 *//***************************************************************************/ 1254 #define FM_MAX_NUM_OF_VALID_PORTS (FM_MAX_NUM_OF_OH_PORTS + \ 1255 FM_MAX_NUM_OF_1G_RX_PORTS + \ 1256 FM_MAX_NUM_OF_10G_RX_PORTS + \ 1257 FM_MAX_NUM_OF_1G_TX_PORTS + \ 1258 FM_MAX_NUM_OF_10G_TX_PORTS) /**< Number of available FM ports */ 1259 /* @} */ 1260 1261 /**************************************************************************//* 1262 @Description A Structure for Port bandwidth requirement. Port is identified 1263 by type and relative id. 1264 *//***************************************************************************/ 1265 typedef struct t_FmPortBandwidth { 1266 e_FmPortType type; /**< FM port type */ 1267 uint8_t relativePortId; /**< Type relative port id */ 1268 uint8_t bandwidth; /**< bandwidth - (in term of percents) */ 1269 } t_FmPortBandwidth; 1270 1271 /**************************************************************************//* 1272 @Description A Structure containing an array of Port bandwidth requirements. 1273 The user should state the ports requiring bandwidth in terms of 1274 percentage - i.e. all port's bandwidths in the array must add 1275 up to 100. 1276 *//***************************************************************************/ 1277 typedef struct t_FmPortsBandwidthParams { 1278 uint8_t numOfPorts; /**< The number of relevant ports, which is the 1279 number of valid entries in the array below */ 1280 t_FmPortBandwidth portsBandwidths[FM_MAX_NUM_OF_VALID_PORTS]; 1281 /**< for each port, it's bandwidth (all port's 1282 bandwidths must add up to 100.*/ 1283 } t_FmPortsBandwidthParams; 1284 1285 /**************************************************************************//** 1286 @Description DMA Emergency control on MURAM 1287 *//***************************************************************************/ 1288 typedef enum e_FmDmaMuramPort { 1289 e_FM_DMA_MURAM_PORT_WRITE, /**< MURAM write port */ 1290 e_FM_DMA_MURAM_PORT_READ /**< MURAM read port */ 1291 } e_FmDmaMuramPort; 1292 1293 /**************************************************************************//** 1294 @Description Enum for defining FM counters 1295 *//***************************************************************************/ 1296 typedef enum e_FmCounters { 1297 e_FM_COUNTERS_ENQ_TOTAL_FRAME = 0, /**< QMI total enqueued frames counter */ 1298 e_FM_COUNTERS_DEQ_TOTAL_FRAME, /**< QMI total dequeued frames counter */ 1299 e_FM_COUNTERS_DEQ_0, /**< QMI 0 frames from QMan counter */ 1300 e_FM_COUNTERS_DEQ_1, /**< QMI 1 frames from QMan counter */ 1301 e_FM_COUNTERS_DEQ_2, /**< QMI 2 frames from QMan counter */ 1302 e_FM_COUNTERS_DEQ_3, /**< QMI 3 frames from QMan counter */ 1303 e_FM_COUNTERS_DEQ_FROM_DEFAULT, /**< QMI dequeue from default queue counter */ 1304 e_FM_COUNTERS_DEQ_FROM_CONTEXT, /**< QMI dequeue from FQ context counter */ 1305 e_FM_COUNTERS_DEQ_FROM_FD, /**< QMI dequeue from FD command field counter */ 1306 e_FM_COUNTERS_DEQ_CONFIRM /**< QMI dequeue confirm counter */ 1307 } e_FmCounters; 1308 1309 /**************************************************************************//** 1310 @Description A Structure for returning FM revision information 1311 *//***************************************************************************/ 1312 typedef struct t_FmRevisionInfo { 1313 uint8_t majorRev; /**< Major revision */ 1314 uint8_t minorRev; /**< Minor revision */ 1315 } t_FmRevisionInfo; 1316 1317 /**************************************************************************//** 1318 @Description A Structure for returning FM ctrl code revision information 1319 *//***************************************************************************/ 1320 typedef struct t_FmCtrlCodeRevisionInfo { 1321 uint16_t packageRev; /**< Package revision */ 1322 uint8_t majorRev; /**< Major revision */ 1323 uint8_t minorRev; /**< Minor revision */ 1324 } t_FmCtrlCodeRevisionInfo; 1325 1326 /**************************************************************************//** 1327 @Description A Structure for defining DMA status 1328 *//***************************************************************************/ 1329 typedef struct t_FmDmaStatus { 1330 bool cmqNotEmpty; /**< Command queue is not empty */ 1331 bool busError; /**< Bus error occurred */ 1332 bool readBufEccError; /**< Double ECC error on buffer Read (Valid for FM rev < 6)*/ 1333 bool writeBufEccSysError; /**< Double ECC error on buffer write from system side (Valid for FM rev < 6)*/ 1334 bool writeBufEccFmError; /**< Double ECC error on buffer write from FM side (Valid for FM rev < 6) */ 1335 bool singlePortEccError; /**< Single Port ECC error from FM side (Valid for FM rev >= 6)*/ 1336 } t_FmDmaStatus; 1337 1338 /**************************************************************************//** 1339 @Description A Structure for obtaining FM controller monitor values 1340 *//***************************************************************************/ 1341 typedef struct t_FmCtrlMon { 1342 uint8_t percentCnt[2]; /**< Percentage value */ 1343 } t_FmCtrlMon; 1344 1345 1346 #if (defined(DEBUG_ERRORS) && (DEBUG_ERRORS > 0)) 1347 /**************************************************************************//** 1348 @Function FM_DumpRegs 1349 1350 @Description Dumps all FM registers 1351 1352 @Param[in] h_Fm A handle to an FM Module. 1353 1354 @Return E_OK on success; 1355 1356 @Cautions Allowed only following FM_Init(). 1357 *//***************************************************************************/ 1358 t_Error FM_DumpRegs(t_Handle h_Fm); 1359 #endif /* (defined(DEBUG_ERRORS) && ... */ 1360 1361 /**************************************************************************//** 1362 @Function FM_SetException 1363 1364 @Description Calling this routine enables/disables the specified exception. 1365 1366 @Param[in] h_Fm A handle to an FM Module. 1367 @Param[in] exception The exception to be selected. 1368 @Param[in] enable TRUE to enable interrupt, FALSE to mask it. 1369 1370 @Return E_OK on success; Error code otherwise. 1371 1372 @Cautions Allowed only following FM_Init(). 1373 This routine should NOT be called from guest-partition 1374 (i.e. guestId != NCSW_MASTER_ID) 1375 *//***************************************************************************/ 1376 t_Error FM_SetException(t_Handle h_Fm, e_FmExceptions exception, bool enable); 1377 1378 /**************************************************************************//** 1379 @Function FM_EnableRamsEcc 1380 1381 @Description Enables ECC mechanism for all the different FM RAM's; E.g. IRAM, 1382 MURAM, Parser, Keygen, Policer, etc. 1383 Note: 1384 If FM_ConfigExternalEccRamsEnable was called to enable external 1385 setting of ECC, this routine effects IRAM ECC only. 1386 This routine is also called by the driver if an ECC exception is 1387 enabled. 1388 1389 @Param[in] h_Fm A handle to an FM Module. 1390 1391 @Return E_OK on success; Error code otherwise. 1392 1393 @Cautions Allowed only following FM_Config() and before FM_Init(). 1394 This routine should NOT be called from guest-partition 1395 (i.e. guestId != NCSW_MASTER_ID) 1396 *//***************************************************************************/ 1397 t_Error FM_EnableRamsEcc(t_Handle h_Fm); 1398 1399 /**************************************************************************//** 1400 @Function FM_DisableRamsEcc 1401 1402 @Description Disables ECC mechanism for all the different FM RAM's; E.g. IRAM, 1403 MURAM, Parser, Keygen, Policer, etc. 1404 Note: 1405 If FM_ConfigExternalEccRamsEnable was called to enable external 1406 setting of ECC, this routine effects IRAM ECC only. 1407 In opposed to FM_EnableRamsEcc, this routine must be called 1408 explicitly to disable all Rams ECC. 1409 1410 @Param[in] h_Fm A handle to an FM Module. 1411 1412 @Return E_OK on success; Error code otherwise. 1413 1414 @Cautions Allowed only following FM_Config() and before FM_Init(). 1415 This routine should NOT be called from guest-partition 1416 (i.e. guestId != NCSW_MASTER_ID) 1417 *//***************************************************************************/ 1418 t_Error FM_DisableRamsEcc(t_Handle h_Fm); 1419 1420 /**************************************************************************//** 1421 @Function FM_GetRevision 1422 1423 @Description Returns the FM revision 1424 1425 @Param[in] h_Fm A handle to an FM Module. 1426 @Param[out] p_FmRevisionInfo A structure of revision information parameters. 1427 1428 @Return E_OK on success; Error code otherwise. 1429 1430 @Cautions Allowed only following FM_Init(). 1431 *//***************************************************************************/ 1432 t_Error FM_GetRevision(t_Handle h_Fm, t_FmRevisionInfo *p_FmRevisionInfo); 1433 1434 /**************************************************************************//** 1435 @Function FM_GetFmanCtrlCodeRevision 1436 1437 @Description Returns the Fman controller code revision 1438 1439 @Param[in] h_Fm A handle to an FM Module. 1440 @Param[out] p_RevisionInfo A structure of revision information parameters. 1441 1442 @Return E_OK on success; Error code otherwise. 1443 1444 @Cautions Allowed only following FM_Init(). 1445 *//***************************************************************************/ 1446 t_Error FM_GetFmanCtrlCodeRevision(t_Handle h_Fm, t_FmCtrlCodeRevisionInfo *p_RevisionInfo); 1447 1448 /**************************************************************************//** 1449 @Function FM_GetCounter 1450 1451 @Description Reads one of the FM counters. 1452 1453 @Param[in] h_Fm A handle to an FM Module. 1454 @Param[in] counter The requested counter. 1455 1456 @Return Counter's current value. 1457 1458 @Cautions Allowed only following FM_Init(). 1459 Note that it is user's responsibility to call this routine only 1460 for enabled counters, and there will be no indication if a 1461 disabled counter is accessed. 1462 *//***************************************************************************/ 1463 uint32_t FM_GetCounter(t_Handle h_Fm, e_FmCounters counter); 1464 1465 /**************************************************************************//** 1466 @Function FM_ModifyCounter 1467 1468 @Description Sets a value to an enabled counter. Use "0" to reset the counter. 1469 1470 @Param[in] h_Fm A handle to an FM Module. 1471 @Param[in] counter The requested counter. 1472 @Param[in] val The requested value to be written into the counter. 1473 1474 @Return E_OK on success; Error code otherwise. 1475 1476 @Cautions Allowed only following FM_Init(). 1477 This routine should NOT be called from guest-partition 1478 (i.e. guestId != NCSW_MASTER_ID) 1479 *//***************************************************************************/ 1480 t_Error FM_ModifyCounter(t_Handle h_Fm, e_FmCounters counter, uint32_t val); 1481 1482 /**************************************************************************//** 1483 @Function FM_Resume 1484 1485 @Description Release FM after halt FM command or after unrecoverable ECC error. 1486 1487 @Param[in] h_Fm A handle to an FM Module. 1488 1489 @Return E_OK on success; Error code otherwise. 1490 1491 @Cautions Allowed only following FM_Init(). 1492 This routine should NOT be called from guest-partition 1493 (i.e. guestId != NCSW_MASTER_ID) 1494 *//***************************************************************************/ 1495 void FM_Resume(t_Handle h_Fm); 1496 1497 /**************************************************************************//** 1498 @Function FM_SetDmaEmergency 1499 1500 @Description Manual emergency set 1501 1502 @Param[in] h_Fm A handle to an FM Module. 1503 @Param[in] muramPort MURAM direction select. 1504 @Param[in] enable TRUE to manually enable emergency, FALSE to disable. 1505 1506 @Return None. 1507 1508 @Cautions Allowed only following FM_Init(). 1509 This routine should NOT be called from guest-partition 1510 (i.e. guestId != NCSW_MASTER_ID) 1511 *//***************************************************************************/ 1512 void FM_SetDmaEmergency(t_Handle h_Fm, e_FmDmaMuramPort muramPort, bool enable); 1513 1514 /**************************************************************************//** 1515 @Function FM_SetDmaExtBusPri 1516 1517 @Description Set the DMA external bus priority 1518 1519 @Param[in] h_Fm A handle to an FM Module. 1520 @Param[in] pri External bus priority select 1521 1522 @Return None. 1523 1524 @Cautions Allowed only following FM_Init(). 1525 This routine should NOT be called from guest-partition 1526 (i.e. guestId != NCSW_MASTER_ID) 1527 *//***************************************************************************/ 1528 void FM_SetDmaExtBusPri(t_Handle h_Fm, e_FmDmaExtBusPri pri); 1529 1530 /**************************************************************************//** 1531 @Function FM_GetDmaStatus 1532 1533 @Description Reads the DMA current status 1534 1535 @Param[in] h_Fm A handle to an FM Module. 1536 @Param[out] p_FmDmaStatus A structure of DMA status parameters. 1537 1538 @Cautions Allowed only following FM_Init(). 1539 *//***************************************************************************/ 1540 void FM_GetDmaStatus(t_Handle h_Fm, t_FmDmaStatus *p_FmDmaStatus); 1541 1542 /**************************************************************************//** 1543 @Function FM_ErrorIsr 1544 1545 @Description FM interrupt-service-routine for errors. 1546 1547 @Param[in] h_Fm A handle to an FM Module. 1548 1549 @Return E_OK on success; E_EMPTY if no errors found in register, other 1550 error code otherwise. 1551 1552 @Cautions Allowed only following FM_Init(). 1553 This routine should NOT be called from guest-partition 1554 (i.e. guestId != NCSW_MASTER_ID) 1555 *//***************************************************************************/ 1556 t_Error FM_ErrorIsr(t_Handle h_Fm); 1557 1558 /**************************************************************************//** 1559 @Function FM_EventIsr 1560 1561 @Description FM interrupt-service-routine for normal events. 1562 1563 @Param[in] h_Fm A handle to an FM Module. 1564 1565 @Cautions Allowed only following FM_Init(). 1566 This routine should NOT be called from guest-partition 1567 (i.e. guestId != NCSW_MASTER_ID) 1568 *//***************************************************************************/ 1569 void FM_EventIsr(t_Handle h_Fm); 1570 1571 /**************************************************************************//** 1572 @Function FM_GetSpecialOperationCoding 1573 1574 @Description Return a specific coding according to the input mask. 1575 1576 @Param[in] h_Fm A handle to an FM Module. 1577 @Param[in] spOper special operation mask. 1578 @Param[out] p_SpOperCoding special operation code. 1579 1580 @Return E_OK on success; Error code otherwise. 1581 1582 @Cautions Allowed only following FM_Init(). 1583 *//***************************************************************************/ 1584 t_Error FM_GetSpecialOperationCoding(t_Handle h_Fm, 1585 fmSpecialOperations_t spOper, 1586 uint8_t *p_SpOperCoding); 1587 1588 /**************************************************************************//** 1589 @Function FM_CtrlMonStart 1590 1591 @Description Start monitoring utilization of all available FM controllers. 1592 1593 In order to obtain FM controllers utilization the following sequence 1594 should be used: 1595 -# FM_CtrlMonStart() 1596 -# FM_CtrlMonStop() 1597 -# FM_CtrlMonGetCounters() - issued for each FM controller 1598 1599 @Param[in] h_Fm A handle to an FM Module. 1600 1601 @Return E_OK on success; Error code otherwise. 1602 1603 @Cautions Allowed only following FM_Init(). 1604 This routine should NOT be called from guest-partition 1605 (i.e. guestId != NCSW_MASTER_ID). 1606 *//***************************************************************************/ 1607 t_Error FM_CtrlMonStart(t_Handle h_Fm); 1608 1609 /**************************************************************************//** 1610 @Function FM_CtrlMonStop 1611 1612 @Description Stop monitoring utilization of all available FM controllers. 1613 1614 In order to obtain FM controllers utilization the following sequence 1615 should be used: 1616 -# FM_CtrlMonStart() 1617 -# FM_CtrlMonStop() 1618 -# FM_CtrlMonGetCounters() - issued for each FM controller 1619 1620 @Param[in] h_Fm A handle to an FM Module. 1621 1622 @Return E_OK on success; Error code otherwise. 1623 1624 @Cautions Allowed only following FM_Init(). 1625 This routine should NOT be called from guest-partition 1626 (i.e. guestId != NCSW_MASTER_ID). 1627 *//***************************************************************************/ 1628 t_Error FM_CtrlMonStop(t_Handle h_Fm); 1629 1630 /**************************************************************************//** 1631 @Function FM_CtrlMonGetCounters 1632 1633 @Description Obtain FM controller utilization parameters. 1634 1635 In order to obtain FM controllers utilization the following sequence 1636 should be used: 1637 -# FM_CtrlMonStart() 1638 -# FM_CtrlMonStop() 1639 -# FM_CtrlMonGetCounters() - issued for each FM controller 1640 1641 @Param[in] h_Fm A handle to an FM Module. 1642 @Param[in] fmCtrlIndex FM Controller index for that utilization results 1643 are requested. 1644 @Param[in] p_Mon Pointer to utilization results structure. 1645 1646 @Return E_OK on success; Error code otherwise. 1647 1648 @Cautions Allowed only following FM_Init(). 1649 This routine should NOT be called from guest-partition 1650 (i.e. guestId != NCSW_MASTER_ID). 1651 *//***************************************************************************/ 1652 t_Error FM_CtrlMonGetCounters(t_Handle h_Fm, uint8_t fmCtrlIndex, t_FmCtrlMon *p_Mon); 1653 1654 1655 /**************************************************************************//* 1656 @Function FM_ForceIntr 1657 1658 @Description Causes an interrupt event on the requested source. 1659 1660 @Param[in] h_Fm A handle to an FM Module. 1661 @Param[in] exception An exception to be forced. 1662 1663 @Return E_OK on success; Error code if the exception is not enabled, 1664 or is not able to create interrupt. 1665 1666 @Cautions Allowed only following FM_Init(). 1667 This routine should NOT be called from guest-partition 1668 (i.e. guestId != NCSW_MASTER_ID) 1669 *//***************************************************************************/ 1670 t_Error FM_ForceIntr (t_Handle h_Fm, e_FmExceptions exception); 1671 1672 /**************************************************************************//* 1673 @Function FM_SetPortsBandwidth 1674 1675 @Description Sets relative weights between ports when accessing common resources. 1676 1677 @Param[in] h_Fm A handle to an FM Module. 1678 @Param[in] p_PortsBandwidth A structure of ports bandwidths in percentage, i.e. 1679 total must equal 100. 1680 1681 @Return E_OK on success; Error code otherwise. 1682 1683 @Cautions Allowed only following FM_Init(). 1684 This routine should NOT be called from guest-partition 1685 (i.e. guestId != NCSW_MASTER_ID) 1686 *//***************************************************************************/ 1687 t_Error FM_SetPortsBandwidth(t_Handle h_Fm, t_FmPortsBandwidthParams *p_PortsBandwidth); 1688 1689 /**************************************************************************//* 1690 @Function FM_GetMuramHandle 1691 1692 @Description Gets the corresponding MURAM handle 1693 1694 @Param[in] h_Fm A handle to an FM Module. 1695 1696 @Return MURAM handle; NULL otherwise. 1697 1698 @Cautions Allowed only following FM_Init(). 1699 This routine should NOT be called from guest-partition 1700 (i.e. guestId != NCSW_MASTER_ID) 1701 *//***************************************************************************/ 1702 t_Handle FM_GetMuramHandle(t_Handle h_Fm); 1703 1704 /** @} */ /* end of FM_runtime_control_grp group */ 1705 /** @} */ /* end of FM_lib_grp group */ 1706 /** @} */ /* end of FM_grp group */ 1707 1708 1709 #ifdef NCSW_BACKWARD_COMPATIBLE_API 1710 typedef t_FmFirmwareParams t_FmPcdFirmwareParams; 1711 typedef t_FmBufferPrefixContent t_FmPortBufferPrefixContent; 1712 typedef t_FmExtPoolParams t_FmPortExtPoolParams; 1713 typedef t_FmExtPools t_FmPortExtPools; 1714 typedef t_FmBackupBmPools t_FmPortBackupBmPools; 1715 typedef t_FmBufPoolDepletion t_FmPortBufPoolDepletion; 1716 typedef e_FmDmaSwapOption e_FmPortDmaSwapOption; 1717 typedef e_FmDmaCacheOption e_FmPortDmaCacheOption; 1718 1719 #define FM_CONTEXTA_GET_OVVERIDE FM_CONTEXTA_GET_OVERRIDE 1720 #define FM_CONTEXTA_SET_OVVERIDE FM_CONTEXTA_SET_OVERRIDE 1721 1722 #define e_FM_EX_BMI_PIPELINE_ECC e_FM_EX_BMI_STORAGE_PROFILE_ECC 1723 #define e_FM_PORT_DMA_NO_SWP e_FM_DMA_NO_SWP 1724 #define e_FM_PORT_DMA_SWP_PPC_LE e_FM_DMA_SWP_PPC_LE 1725 #define e_FM_PORT_DMA_SWP_BE e_FM_DMA_SWP_BE 1726 #define e_FM_PORT_DMA_NO_STASH e_FM_DMA_NO_STASH 1727 #define e_FM_PORT_DMA_STASH e_FM_DMA_STASH 1728 #endif /* NCSW_BACKWARD_COMPATIBLE_API */ 1729 1730 1731 #endif /* __FM_EXT */ 1732