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_port_ext.h 35 36 @Description FM-Port Application Programming Interface. 37 *//***************************************************************************/ 38 #ifndef __FM_PORT_EXT 39 #define __FM_PORT_EXT 40 41 #include "error_ext.h" 42 #include "std_ext.h" 43 #include "fm_pcd_ext.h" 44 #include "fm_ext.h" 45 #include "net_ext.h" 46 47 48 /**************************************************************************//** 49 50 @Group FM_grp Frame Manager API 51 52 @Description FM API functions, definitions and enums 53 54 @{ 55 *//***************************************************************************/ 56 57 /**************************************************************************//** 58 @Group FM_PORT_grp FM Port 59 60 @Description FM Port API 61 62 The FM uses a general module called "port" to represent a Tx port 63 (MAC), an Rx port (MAC), offline parsing flow or host command 64 flow. There may be up to 17 (may change) ports in an FM - 5 Tx 65 ports (4 for the 1G MACs, 1 for the 10G MAC), 5 Rx Ports, and 7 66 Host command/Offline parsing ports. The SW driver manages these 67 ports as sub-modules of the FM, i.e. after an FM is initialized, 68 its ports may be initialized and operated upon. 69 70 The port is initialized aware of its type, but other functions on 71 a port may be indifferent to its type. When necessary, the driver 72 verifies coherency and returns error if applicable. 73 74 On initialization, user specifies the port type and it's index 75 (relative to the port's type). Host command and Offline parsing 76 ports share the same id range, I.e user may not initialized host 77 command port 0 and offline parsing port 0. 78 79 @{ 80 *//***************************************************************************/ 81 82 /**************************************************************************//** 83 @Description An enum for defining port PCD modes. 84 This enum defines the superset of PCD engines support - i.e. not 85 all engines have to be used, but all have to be enabled. The real 86 flow of a specific frame depends on the PCD configuration and the 87 frame headers and payload. 88 *//***************************************************************************/ 89 typedef enum e_FmPortPcdSupport { 90 e_FM_PORT_PCD_SUPPORT_NONE = 0, /**< BMI to BMI, PCD is not used */ 91 e_FM_PORT_PCD_SUPPORT_PRS_ONLY, /**< Use only Parser */ 92 e_FM_PORT_PCD_SUPPORT_PLCR_ONLY, /**< Use only Policer */ 93 e_FM_PORT_PCD_SUPPORT_PRS_AND_PLCR, /**< Use Parser and Policer */ 94 e_FM_PORT_PCD_SUPPORT_PRS_AND_KG, /**< Use Parser and Keygen */ 95 e_FM_PORT_PCD_SUPPORT_PRS_AND_KG_AND_CC, /**< Use Parser, Keygen and Coarse Classification */ 96 e_FM_PORT_PCD_SUPPORT_PRS_AND_KG_AND_CC_AND_PLCR, 97 /**< Use all PCD engines */ 98 e_FM_PORT_PCD_SUPPORT_PRS_AND_KG_AND_PLCR /**< Use Parser, Keygen and Policer */ 99 #ifdef FM_CAPWAP_SUPPORT 100 , 101 e_FM_PORT_PCD_SUPPORT_CC_ONLY, /**< Use only Coarse Classification */ 102 e_FM_PORT_PCD_SUPPORT_CC_AND_KG, /**< Use Coarse Classification,and Keygen */ 103 e_FM_PORT_PCD_SUPPORT_CC_AND_KG_AND_PLCR /**< Use Coarse Classification, Keygen and Policer */ 104 #endif /* FM_CAPWAP_SUPPORT */ 105 } e_FmPortPcdSupport; 106 107 /**************************************************************************//** 108 @Description Port interrupts 109 *//***************************************************************************/ 110 typedef enum e_FmPortExceptions { 111 e_FM_PORT_EXCEPTION_IM_BUSY /**< Independent-Mode Rx-BUSY */ 112 } e_FmPortExceptions; 113 114 115 /**************************************************************************//** 116 @Collection General FM Port defines 117 *//***************************************************************************/ 118 #define FM_PORT_PRS_RESULT_NUM_OF_WORDS 8 /**< Number of 4 bytes words in parser result */ 119 /* @} */ 120 121 /**************************************************************************//** 122 @Collection FM Frame error 123 *//***************************************************************************/ 124 typedef uint32_t fmPortFrameErrSelect_t; /**< typedef for defining Frame Descriptor errors */ 125 126 #define FM_PORT_FRM_ERR_UNSUPPORTED_FORMAT 0x04000000 /**< Offline parsing only! Unsupported Format */ 127 #define FM_PORT_FRM_ERR_LENGTH 0x02000000 /**< Offline parsing only! Length Error */ 128 #define FM_PORT_FRM_ERR_DMA 0x01000000 /**< DMA Data error */ 129 #ifdef FM_CAPWAP_SUPPORT 130 #define FM_PORT_FRM_ERR_NON_FM 0x00400000 /**< non Frame-Manager error; probably come from SEC that 131 was chained to FM */ 132 #endif /* FM_CAPWAP_SUPPORT */ 133 #define FM_PORT_FRM_ERR_PHYSICAL 0x00080000 /**< Rx FIFO overflow, FCS error, code error, running disparity 134 error (SGMII and TBI modes), FIFO parity error. PHY 135 Sequence error, PHY error control character detected. */ 136 #define FM_PORT_FRM_ERR_SIZE 0x00040000 /**< Frame too long OR Frame size exceeds max_length_frame */ 137 #define FM_PORT_FRM_ERR_CLS_DISCARD 0x00020000 /**< classification discard */ 138 #define FM_PORT_FRM_ERR_EXTRACTION 0x00008000 /**< Extract Out of Frame */ 139 #define FM_PORT_FRM_ERR_NO_SCHEME 0x00004000 /**< No Scheme Selected */ 140 #define FM_PORT_FRM_ERR_KEYSIZE_OVERFLOW 0x00002000 /**< Keysize Overflow */ 141 #define FM_PORT_FRM_ERR_COLOR_YELLOW 0x00000400 /**< Frame color is yellow */ 142 #define FM_PORT_FRM_ERR_COLOR_RED 0x00000800 /**< Frame color is red */ 143 #define FM_PORT_FRM_ERR_ILL_PLCR 0x00000200 /**< Illegal Policer Profile selected */ 144 #define FM_PORT_FRM_ERR_PLCR_FRAME_LEN 0x00000100 /**< Policer frame length error */ 145 #define FM_PORT_FRM_ERR_PRS_TIMEOUT 0x00000080 /**< Parser Time out Exceed */ 146 #define FM_PORT_FRM_ERR_PRS_ILL_INSTRUCT 0x00000040 /**< Invalid Soft Parser instruction */ 147 #define FM_PORT_FRM_ERR_PRS_HDR_ERR 0x00000020 /**< Header error was identified during parsing */ 148 #define FM_PORT_FRM_ERR_BLOCK_LIMIT_EXCEEDED 0x00000008 /**< Frame parsed beyind 256 first bytes */ 149 #define FM_PORT_FRM_ERR_PROCESS_TIMEOUT 0x00000001 /**< FPM Frame Processing Timeout Exceeded */ 150 /* @} */ 151 152 153 154 /**************************************************************************//** 155 @Group FM_PORT_init_grp FM Port Initialization Unit 156 157 @Description FM Port Initialization Unit 158 159 @{ 160 *//***************************************************************************/ 161 162 /**************************************************************************//** 163 @Description Exceptions user callback routine, will be called upon an 164 exception passing the exception identification. 165 166 @Param[in] h_App - User's application descriptor. 167 @Param[in] exception - The exception. 168 *//***************************************************************************/ 169 typedef void (t_FmPortExceptionCallback) (t_Handle h_App, e_FmPortExceptions exception); 170 171 /**************************************************************************//** 172 @Description User callback function called by driver with received data. 173 174 User provides this function. Driver invokes it. 175 176 @Param[in] h_App Application's handle originally specified to 177 the API Config function 178 @Param[in] p_Data A pointer to data received 179 @Param[in] length length of received data 180 @Param[in] status receive status and errors 181 @Param[in] position position of buffer in frame 182 @Param[in] h_BufContext A handle of the user acossiated with this buffer 183 184 @Retval e_RX_STORE_RESPONSE_CONTINUE - order the driver to continue Rx 185 operation for all ready data. 186 @Retval e_RX_STORE_RESPONSE_PAUSE - order the driver to stop Rx operation. 187 *//***************************************************************************/ 188 typedef e_RxStoreResponse (t_FmPortImRxStoreCallback) (t_Handle h_App, 189 uint8_t *p_Data, 190 uint16_t length, 191 uint16_t status, 192 uint8_t position, 193 t_Handle h_BufContext); 194 195 /**************************************************************************//** 196 @Description User callback function called by driver when transmit completed. 197 198 User provides this function. Driver invokes it. 199 200 @Param[in] h_App Application's handle originally specified to 201 the API Config function 202 @Param[in] p_Data A pointer to data received 203 @Param[in] status transmit status and errors 204 @Param[in] lastBuffer is last buffer in frame 205 @Param[in] h_BufContext A handle of the user acossiated with this buffer 206 *//***************************************************************************/ 207 typedef void (t_FmPortImTxConfCallback) (t_Handle h_App, 208 uint8_t *p_Data, 209 uint16_t status, 210 t_Handle h_BufContext); 211 212 /**************************************************************************//** 213 @Description A structure of information about each of the external 214 buffer pools used by the port, 215 *//***************************************************************************/ 216 typedef struct t_FmPortExtPoolParams { 217 uint8_t id; /**< External buffer pool id */ 218 uint16_t size; /**< External buffer pool buffer size */ 219 } t_FmPortExtPoolParams; 220 221 /**************************************************************************//** 222 @Description A structure for informing the driver about the external 223 buffer pools allocated in the BM and used by this port. 224 *//***************************************************************************/ 225 typedef struct t_FmPortExtPools { 226 uint8_t numOfPoolsUsed; /**< Number of pools use by this port */ 227 t_FmPortExtPoolParams extBufPool[FM_PORT_MAX_NUM_OF_EXT_POOLS]; 228 /**< Parameters for each port */ 229 } t_FmPortExtPools; 230 231 /**************************************************************************//** 232 @Description structure for additional Rx port parameters 233 *//***************************************************************************/ 234 typedef struct t_FmPortRxParams { 235 uint32_t errFqid; /**< Error Queue Id. */ 236 uint32_t dfltFqid; /**< Default Queue Id. */ 237 uint16_t liodnOffset; /**< Port's LIODN offset. */ 238 t_FmPortExtPools extBufPools; /**< Which external buffer pools are used 239 (up to FM_PORT_MAX_NUM_OF_EXT_POOLS), and their sizes. */ 240 } t_FmPortRxParams; 241 242 /**************************************************************************//** 243 @Description structure for additional non-Rx port parameters 244 *//***************************************************************************/ 245 typedef struct t_FmPortNonRxParams { 246 uint32_t errFqid; /**< Error Queue Id. */ 247 uint32_t dfltFqid; /**< For Tx and HC - Default Confirmation queue, 248 0 means no Tx confirmation for processed 249 frames. For OP - default Rx queue. */ 250 uint32_t qmChannel; /**< QM-channel dedicated to this port; will be used 251 by the FM for dequeue. */ 252 #ifdef FM_OP_PARTITION_ERRATA_FMANx8 253 uint16_t opLiodnOffset; /**< For Offline Parsing ports only. Port's LIODN offset. */ 254 #endif /* FM_OP_PARTITION_ERRATA_FMANx8 */ 255 } t_FmPortNonRxParams; 256 257 /**************************************************************************//** 258 @Description structure for additional Rx port parameters 259 *//***************************************************************************/ 260 typedef struct t_FmPortImRxTxParams { 261 t_Handle h_FmMuram; /**< A handle of the FM-MURAM partition */ 262 uint16_t liodnOffset; /**< For Rx ports only. Port's LIODN Offset. */ 263 uint8_t dataMemId; /**< Memory partition ID for data buffers */ 264 uint32_t dataMemAttributes; /**< Memory attributes for data buffers */ 265 t_BufferPoolInfo rxPoolParams; /**< For Rx ports only. */ 266 t_FmPortImRxStoreCallback *f_RxStore; /**< For Rx ports only. */ 267 t_FmPortImTxConfCallback *f_TxConf; /**< For Tx ports only. */ 268 } t_FmPortImRxTxParams; 269 270 /**************************************************************************//** 271 @Description Union for additional parameters depending on port type 272 *//***************************************************************************/ 273 typedef union u_FmPortSpecificParams { 274 t_FmPortImRxTxParams imRxTxParams; /**< Rx/Tx Independent-Mode port parameter structure */ 275 t_FmPortRxParams rxParams; /**< Rx port parameters structure */ 276 t_FmPortNonRxParams nonRxParams; /**< Non-Rx port parameters structure */ 277 } u_FmPortSpecificParams; 278 279 /**************************************************************************//** 280 @Description structure representing FM initialization parameters 281 *//***************************************************************************/ 282 typedef struct t_FmPortParams { 283 uintptr_t baseAddr; /**< Virtual Address of memory mapped FM Port registers.*/ 284 t_Handle h_Fm; /**< A handle to the FM object this port related to */ 285 e_FmPortType portType; /**< Port type */ 286 uint8_t portId; /**< Port Id - relative to type */ 287 bool independentModeEnable; 288 /**< This port is Independent-Mode - Used for Rx/Tx ports only! */ 289 uint16_t liodnBase; /**< Irrelevant for P4080 rev 1. LIODN base for this port, to be 290 used together with LIODN offset. */ 291 u_FmPortSpecificParams specificParams; /**< Additional parameters depending on port 292 type. */ 293 294 t_FmPortExceptionCallback *f_Exception; /**< Callback routine to be called of PCD exception */ 295 t_Handle h_App; /**< A handle to an application layer object; This handle will 296 be passed by the driver upon calling the above callbacks */ 297 } t_FmPortParams; 298 299 300 /**************************************************************************//** 301 @Function FM_PORT_Config 302 303 @Description Creates descriptor for the FM PORT module. 304 305 The routine returns a handle (descriptor) to the FM PORT object. 306 This descriptor must be passed as first parameter to all other 307 FM PORT function calls. 308 309 No actual initialization or configuration of FM hardware is 310 done by this routine. 311 312 @Param[in] p_FmPortParams - Pointer to data structure of parameters 313 314 @Retval Handle to FM object, or NULL for Failure. 315 *//***************************************************************************/ 316 t_Handle FM_PORT_Config(t_FmPortParams *p_FmPortParams); 317 318 /**************************************************************************//** 319 @Function FM_PORT_Init 320 321 @Description Initializes the FM PORT module 322 323 @Param[in] h_FmPort - FM PORT module descriptor 324 325 @Return E_OK on success; Error code otherwise. 326 *//***************************************************************************/ 327 t_Error FM_PORT_Init(t_Handle h_FmPort); 328 329 /**************************************************************************//** 330 @Function FM_PORT_Free 331 332 @Description Frees all resources that were assigned to FM PORT module. 333 334 Calling this routine invalidates the descriptor. 335 336 @Param[in] h_FmPort - FM PORT module descriptor 337 338 @Return E_OK on success; Error code otherwise. 339 *//***************************************************************************/ 340 t_Error FM_PORT_Free(t_Handle h_FmPort); 341 342 343 /**************************************************************************//** 344 @Group FM_PORT_advanced_init_grp FM Port Advanced Configuration Unit 345 346 @Description Configuration functions used to change default values. 347 348 @{ 349 *//***************************************************************************/ 350 351 /**************************************************************************//** 352 @Description enum for defining QM frame dequeue 353 *//***************************************************************************/ 354 typedef enum e_FmPortDeqType { 355 e_FM_PORT_DEQ_TYPE1, /**< Dequeue from the SP channel - with priority precedence, 356 and Intra-Class Scheduling respected. */ 357 e_FM_PORT_DEQ_TYPE2, /**< Dequeue from the SP channel - with active FQ precedence, 358 and Intra-Class Scheduling respected. */ 359 e_FM_PORT_DEQ_TYPE3 /**< Dequeue from the SP channel - with active FQ precedence, 360 and override Intra-Class Scheduling */ 361 } e_FmPortDeqType; 362 363 #ifdef FM_QMI_DEQ_OPTIONS_SUPPORT 364 /**************************************************************************//** 365 @Description enum for defining QM frame dequeue 366 *//***************************************************************************/ 367 typedef enum e_FmPortDeqPrefetchOption { 368 e_FM_PORT_DEQ_NO_PREFETCH, /**< QMI preforms a dequeue action for a single frame 369 only when a dedicated portID Tnum is waiting. */ 370 e_FM_PORT_DEQ_PARTIAL_PREFETCH, /**< QMI preforms a dequeue action for 3 frames when 371 one dedicated portId tnum is waiting. */ 372 e_FM_PORT_DEQ_FULL_PREFETCH /**< QMI preforms a dequeue action for 3 frames when 373 no dedicated portId tnums are waiting. */ 374 375 } e_FmPortDeqPrefetchOption; 376 #endif /* FM_QMI_DEQ_OPTIONS_SUPPORT */ 377 378 /**************************************************************************//** 379 @Description enum for defining port DMA swap mode 380 *//***************************************************************************/ 381 typedef enum e_FmPortDmaSwap { 382 e_FM_PORT_DMA_NO_SWP, /**< No swap, transfer data as is.*/ 383 e_FM_PORT_DMA_SWP_PPC_LE, /**< The transferred data should be swapped 384 in PowerPc Little Endian mode. */ 385 e_FM_PORT_DMA_SWP_BE /**< The transferred data should be swapped 386 in Big Endian mode */ 387 } e_FmPortDmaSwap; 388 389 /**************************************************************************//** 390 @Description enum for defining port DMA cache attributes 391 *//***************************************************************************/ 392 typedef enum e_FmPortDmaCache { 393 e_FM_PORT_DMA_NO_STASH = 0, /**< Cacheable, no Allocate (No Stashing) */ 394 e_FM_PORT_DMA_STASH = 1 /**< Cacheable and Allocate (Stashing on) */ 395 } e_FmPortDmaCache; 396 397 /**************************************************************************//** 398 @Description enum for defining port default color 399 *//***************************************************************************/ 400 typedef enum e_FmPortColor { 401 e_FM_PORT_COLOR_GREEN, /**< Default port color is green */ 402 e_FM_PORT_COLOR_YELLOW, /**< Default port color is yellow */ 403 e_FM_PORT_COLOR_RED, /**< Default port color is red */ 404 e_FM_PORT_COLOR_OVERRIDE /**< Ignore color */ 405 } e_FmPortColor; 406 407 /**************************************************************************//** 408 @Description struct for defining Dual Tx rate limiting scale 409 *//***************************************************************************/ 410 typedef enum e_FmPortDualRateLimiterScaleDown { 411 e_FM_PORT_DUAL_RATE_LIMITER_NONE = 0, /**< Use only single rate limiter */ 412 e_FM_PORT_DUAL_RATE_LIMITER_SCALE_DOWN_BY_2, /**< Divide high rate limiter by 2 */ 413 e_FM_PORT_DUAL_RATE_LIMITER_SCALE_DOWN_BY_4, /**< Divide high rate limiter by 4 */ 414 e_FM_PORT_DUAL_RATE_LIMITER_SCALE_DOWN_BY_8 /**< Divide high rate limiter by 8 */ 415 } e_FmPortDualRateLimiterScaleDown; 416 417 418 /**************************************************************************//** 419 @Description struct for defining FM port resources 420 *//***************************************************************************/ 421 typedef struct t_FmPortRsrc { 422 uint32_t num; /**< Committed required resource */ 423 uint32_t extra; /**< Extra (not committed) required resource */ 424 } t_FmPortRsrc; 425 426 /**************************************************************************//** 427 @Description struct for defining pool depletion criteria 428 *//***************************************************************************/ 429 typedef struct t_FmPortBufPoolDepletion { 430 bool numberOfPoolsModeEnable; /**< select mode in which pause frames will be sent after 431 a number of pools are depleted */ 432 uint8_t numOfPools; /**< the minimum number of depleted pools that will 433 invoke pause frames transmission. */ 434 bool poolsToConsider[BM_MAX_NUM_OF_POOLS]; 435 /**< For each pool, TRUE if it should be considered for 436 depletion (Note - this pool must be used by this port!) */ 437 bool singlePoolModeEnable; /**< select mode in which pause frames will be sent after 438 a single of pools are depleted */ 439 bool poolsToConsiderForSingleMode[BM_MAX_NUM_OF_POOLS]; 440 /**< For each pool, TRUE if it should be considered for 441 depletion (Note - this pool must be used by this port!) */ 442 } t_FmPortBufPoolDepletion; 443 444 /**************************************************************************//** 445 @Description struct for defining observed pool depletion 446 *//***************************************************************************/ 447 typedef struct t_FmPortObservedBufPoolDepletion { 448 t_FmPortBufPoolDepletion poolDepletionParams;/**< parameters to define pool depletion */ 449 t_FmPortExtPools poolsParams; /**< Which external buffer pools are observed 450 (up to FM_PORT_MAX_NUM_OF_OBSERVED_EXT_POOLS), 451 and their sizes. */ 452 } t_FmPortObservedBufPoolDepletion; 453 454 /**************************************************************************//** 455 @Description struct for defining Tx rate limiting 456 *//***************************************************************************/ 457 typedef struct t_FmPortRateLimit { 458 uint16_t maxBurstSize; /**< in kBytes for Tx ports, in frames 459 for offline parsing ports. (note that 460 for early chips burst size is 461 rounded up to a multiply of 1000 frames).*/ 462 uint32_t rateLimit; /**< in Kb/sec for Tx ports, in frame/sec for 463 offline parsing ports. Rate limit refers to 464 data rate (rather than line rate). */ 465 e_FmPortDualRateLimiterScaleDown rateLimitDivider; /**< For offline parsing ports only. Not-valid 466 for some earlier chip revisions */ 467 } t_FmPortRateLimit; 468 469 /**************************************************************************//** 470 @Description struct for defining define the parameters of 471 the Rx port performance counters 472 *//***************************************************************************/ 473 typedef struct t_FmPortPerformanceCnt { 474 uint8_t taskCompVal; /**< Task compare value */ 475 uint8_t queueCompVal; /**< Rx queue/Tx confirm queue compare 476 value (unused for H/O) */ 477 uint8_t dmaCompVal; /**< Dma compare value */ 478 uint32_t fifoCompVal; /**< Fifo compare value (in bytes) */ 479 } t_FmPortPerformanceCnt; 480 481 /**************************************************************************//** 482 @Description struct for defining buffer content. 483 *//***************************************************************************/ 484 typedef struct t_FmPortBufferPrefixContent { 485 uint16_t privDataSize; /**< Number of bytes to be left at the beginning 486 of the external buffer */ 487 bool passPrsResult; /**< TRUE to pass the parse result to/from the FM */ 488 bool passTimeStamp; /**< TRUE to pass the timeStamp to/from the FM */ 489 bool passHashResult; /**< TRUE to pass the KG hash result to/from the FM */ 490 bool passAllOtherPCDInfo;/**< Add all other Internal-Context information: 491 AD, hash-result, key, etc. */ 492 uint16_t dataAlign; /**< 0 to use driver's default alignment, other value 493 for selecting a data alignment (must be a 494 power of 2) */ 495 #ifdef DEBUG 496 bool passDebugInfo; /**< Debug-information */ 497 #endif /* DEBUG */ 498 #ifdef FM_CAPWAP_SUPPORT 499 uint8_t manipExtraSpace; /**< Maximum extra size needed (insertion-size minus removal-size) */ 500 #endif /* FM_CAPWAP_SUPPORT */ 501 } t_FmPortBufferPrefixContent; 502 503 /**************************************************************************//** 504 @Description struct for defining backup Bm Pools. 505 *//***************************************************************************/ 506 typedef struct t_FmPortBackupBmPools { 507 uint8_t numOfBackupPools; /**< Number of BM backup pools - 508 must be smaller than the total number of 509 pools defined for the specified port.*/ 510 uint8_t poolIds[FM_PORT_MAX_NUM_OF_EXT_POOLS]; 511 /**< numOfBackupPools pool id's, specifying which 512 pools should be used only as backup. Pool 513 id's specified here must be a subset of the 514 pools used by the specified port.*/ 515 } t_FmPortBackupBmPools; 516 517 518 /**************************************************************************//** 519 @Function FM_PORT_ConfigDeqHighPriority 520 521 @Description Calling this routine changes the dequeue priority in the 522 internal driver data base from its default configuration 523 [TRUE] 524 525 May be used for Non-Rx ports only 526 527 @Param[in] h_FmPort A handle to a FM Port module. 528 @Param[in] highPri TRUE to select high priority, FALSE for normal operation. 529 530 @Return E_OK on success; Error code otherwise. 531 532 @Cautions Allowed only following FM_PORT_Config() and before FM_PORT_Init(). 533 *//***************************************************************************/ 534 t_Error FM_PORT_ConfigDeqHighPriority(t_Handle h_FmPort, bool highPri); 535 536 /**************************************************************************//** 537 @Function FM_PORT_ConfigDeqType 538 539 @Description Calling this routine changes the dequeue type parameter in the 540 internal driver data base from its default configuration 541 [e_FM_PORT_DEQ_TYPE1]. 542 543 May be used for Non-Rx ports only 544 545 @Param[in] h_FmPort A handle to a FM Port module. 546 @Param[in] deqType According to QM definition. 547 548 @Return E_OK on success; Error code otherwise. 549 550 @Cautions Allowed only following FM_PORT_Config() and before FM_PORT_Init(). 551 *//***************************************************************************/ 552 t_Error FM_PORT_ConfigDeqType(t_Handle h_FmPort, e_FmPortDeqType deqType); 553 554 #ifdef FM_QMI_DEQ_OPTIONS_SUPPORT 555 /**************************************************************************//** 556 @Function FM_PORT_ConfigDeqPrefetchOption 557 558 @Description Calling this routine changes the dequeue prefetch option parameter in the 559 internal driver data base from its default configuration 560 [e_FM_PORT_DEQ_FULL_PREFETCH] 561 Note: Available for some chips only 562 563 May be used for Non-Rx ports only 564 565 @Param[in] h_FmPort A handle to a FM Port module. 566 @Param[in] deqPrefetchOption New option 567 568 @Return E_OK on success; Error code otherwise. 569 570 @Cautions Allowed only following FM_PORT_Config() and before FM_PORT_Init(). 571 *//***************************************************************************/ 572 t_Error FM_PORT_ConfigDeqPrefetchOption(t_Handle h_FmPort, e_FmPortDeqPrefetchOption deqPrefetchOption); 573 #endif /* FM_QMI_DEQ_OPTIONS_SUPPORT */ 574 575 /**************************************************************************//** 576 @Function FM_PORT_ConfigDeqByteCnt 577 578 @Description Calling this routine changes the dequeue byte count parameter in 579 the internal driver data base from its default configuration [2000]. 580 581 May be used for Non-Rx ports only 582 583 @Param[in] h_FmPort A handle to a FM Port module. 584 @Param[in] deqByteCnt New byte count 585 586 @Return E_OK on success; Error code otherwise. 587 588 @Cautions Allowed only following FM_PORT_Config() and before FM_PORT_Init(). 589 *//***************************************************************************/ 590 t_Error FM_PORT_ConfigDeqByteCnt(t_Handle h_FmPort, uint16_t deqByteCnt); 591 592 /**************************************************************************//** 593 @Function FM_PORT_ConfigTxFifoMinFillLevel 594 595 @Description Calling this routine changes the fifo minimum 596 fill level parameter in the internal driver data base 597 from its default configuration [0] 598 599 May be used for Tx ports only 600 601 @Param[in] h_FmPort A handle to a FM Port module. 602 @Param[in] minFillLevel New value 603 604 @Return E_OK on success; Error code otherwise. 605 606 @Cautions Allowed only following FM_PORT_Config() and before FM_PORT_Init(). 607 *//***************************************************************************/ 608 t_Error FM_PORT_ConfigTxFifoMinFillLevel(t_Handle h_FmPort, uint32_t minFillLevel); 609 610 /**************************************************************************//** 611 @Function FM_PORT_ConfigTxFifoDeqPipelineDepth 612 613 @Description Calling this routine changes the fifo dequeue 614 pipeline depth parameter in the internal driver data base 615 616 from its default configuration: 1G ports: [2], 617 10G port: [8] 618 619 May be used for Tx ports only 620 621 @Param[in] h_FmPort A handle to a FM Port module. 622 @Param[in] deqPipelineDepth New value 623 624 @Return E_OK on success; Error code otherwise. 625 626 @Cautions Allowed only following FM_PORT_Config() and before FM_PORT_Init(). 627 *//***************************************************************************/ 628 t_Error FM_PORT_ConfigTxFifoDeqPipelineDepth(t_Handle h_FmPort, uint8_t deqPipelineDepth); 629 630 /**************************************************************************//** 631 @Function FM_PORT_ConfigTxFifoLowComfLevel 632 633 @Description Calling this routine changes the fifo low comfort level 634 parameter in internal driver data base 635 from its default configuration [5] 636 637 May be used for Tx ports only 638 639 @Param[in] h_FmPort A handle to a FM Port module. 640 @Param[in] fifoLowComfLevel New value 641 642 @Return E_OK on success; Error code otherwise. 643 644 @Cautions Allowed only following FM_PORT_Config() and before FM_PORT_Init(). 645 *//***************************************************************************/ 646 t_Error FM_PORT_ConfigTxFifoLowComfLevel(t_Handle h_FmPort, uint32_t fifoLowComfLevel); 647 648 /**************************************************************************//** 649 @Function FM_PORT_ConfigRxFifoThreshold 650 651 @Description Calling this routine changes the threshold of the FIFO 652 fill level parameter in the internal driver data base 653 from its default configuration [BMI_MAX_FIFO_SIZE] 654 655 If the total number of buffers which are 656 currently in use and associated with the 657 specific RX port exceed this threshold, the 658 BMI will signal the MAC to send a pause frame 659 over the link. 660 661 May be used for Rx ports only 662 663 @Param[in] h_FmPort A handle to a FM Port module. 664 @Param[in] fifoThreshold New value 665 666 @Return E_OK on success; Error code otherwise. 667 668 @Cautions Allowed only following FM_PORT_Config() and before FM_PORT_Init(). 669 *//***************************************************************************/ 670 t_Error FM_PORT_ConfigRxFifoThreshold(t_Handle h_FmPort, uint32_t fifoThreshold); 671 672 /**************************************************************************//** 673 @Function FM_PORT_ConfigRxFifoPriElevationLevel 674 675 @Description Calling this routine changes the priority elevation level 676 parameter in the internal driver data base from its default 677 configuration [BMI_MAX_FIFO_SIZE] 678 679 If the total number of buffers which are currently in use and 680 associated with the specific RX port exceed the amount specified 681 in priElevationLevel, BMI will signal the main FM's DMA to 682 elevate the FM priority on the system bus. 683 684 May be used for Rx ports only 685 686 @Param[in] h_FmPort A handle to a FM Port module. 687 @Param[in] priElevationLevel New value 688 689 @Return E_OK on success; Error code otherwise. 690 691 @Cautions Allowed only following FM_PORT_Config() and before FM_PORT_Init(). 692 *//***************************************************************************/ 693 t_Error FM_PORT_ConfigRxFifoPriElevationLevel(t_Handle h_FmPort, uint32_t priElevationLevel); 694 695 /**************************************************************************//** 696 @Function FM_PORT_ConfigBufferPrefixContent 697 698 @Description Defines the structure, size and content of the application buffer. 699 The prefix will 700 In Tx ports, if 'passPrsResult', the application 701 should set a value to their offsets in the prefix of 702 the FM will save the first 'privDataSize', than, 703 depending on 'passPrsResult' and 'passTimeStamp', copy parse result 704 and timeStamp, and the packet itself (in this order), to the 705 application buffer, and to offset. 706 Calling this routine changes the buffer margins definitions 707 in the internal driver data base from its default 708 configuration: Data size: [0] 709 Pass Parser result: [FALSE]. 710 Pass timestamp: [FALSE]. 711 712 May be used for all ports 713 714 @Param[in] h_FmPort A handle to a FM Port module. 715 @Param[in,out] p_FmPortBufferPrefixContent A structure of parameters describing the 716 structure of the buffer. 717 Out parameter: Start margin - offset 718 of data from start of external buffer. 719 720 @Return E_OK on success; Error code otherwise. 721 722 @Cautions Allowed only following FM_PORT_Config() and before FM_PORT_Init(). 723 *//***************************************************************************/ 724 t_Error FM_PORT_ConfigBufferPrefixContent(t_Handle h_FmPort, t_FmPortBufferPrefixContent *p_FmPortBufferPrefixContent); 725 726 727 /**************************************************************************//** 728 @Function FM_PORT_ConfigCheksumLastBytesIgnore 729 730 @Description Calling this routine changes the number of checksum bytes to ignore 731 parameter in the internal driver data base from its default configuration 732 [0] 733 734 May be used by Tx & Rx ports only 735 736 @Param[in] h_FmPort A handle to a FM Port module. 737 @Param[in] cheksumLastBytesIgnore New value 738 739 @Return E_OK on success; Error code otherwise. 740 741 @Cautions Allowed only following FM_PORT_Config() and before FM_PORT_Init(). 742 *//***************************************************************************/ 743 t_Error FM_PORT_ConfigCheksumLastBytesIgnore(t_Handle h_FmPort, uint8_t cheksumLastBytesIgnore); 744 745 /**************************************************************************//** 746 @Function FM_PORT_ConfigCutBytesFromEnd 747 748 @Description Calling this routine changes the number of bytes to cut from a 749 frame's end parameter in the internal driver data base 750 from its default configuration [4] 751 Note that if the result of (frame length before chop - cutBytesFromEnd) is 752 less than 14 bytes, the chop operation is not executed. 753 754 May be used for Rx ports only 755 756 @Param[in] h_FmPort A handle to a FM Port module. 757 @Param[in] cutBytesFromEnd New value 758 759 @Return E_OK on success; Error code otherwise. 760 761 @Cautions Allowed only following FM_PORT_Config() and before FM_PORT_Init(). 762 *//***************************************************************************/ 763 t_Error FM_PORT_ConfigCutBytesFromEnd(t_Handle h_FmPort, uint8_t cutBytesFromEnd); 764 765 /**************************************************************************//** 766 @Function FM_PORT_ConfigPoolDepletion 767 768 @Description Calling this routine enables pause frame generation depending on the 769 depletion status of BM pools. It also defines the conditions to activate 770 this functionality. By default, this functionality is disabled. 771 772 May be used for Rx ports only 773 774 @Param[in] h_FmPort A handle to a FM Port module. 775 @Param[in] p_BufPoolDepletion A structure of pool depletion parameters 776 777 @Return E_OK on success; Error code otherwise. 778 779 @Cautions Allowed only following FM_PORT_Config() and before FM_PORT_Init(). 780 *//***************************************************************************/ 781 t_Error FM_PORT_ConfigPoolDepletion(t_Handle h_FmPort, t_FmPortBufPoolDepletion *p_BufPoolDepletion); 782 783 /**************************************************************************//** 784 @Function FM_PORT_ConfigObservedPoolDepletion 785 786 @Description Calling this routine enables a mechanism to stop port enqueue 787 depending on the depletion status of selected BM pools. 788 It also defines the conditions to activate 789 this functionality. By default, this functionality is disabled. 790 791 Note: Available for some chips only 792 793 May be used for Offline Parsing ports only 794 795 @Param[in] h_FmPort A handle to a FM Port module. 796 @Param[in] p_FmPortObservedBufPoolDepletion A structure of parameters for pool depletion. 797 798 799 @Return E_OK on success; Error code otherwise. 800 801 @Cautions Allowed only following FM_PORT_Config() and before FM_PORT_Init(). 802 *//***************************************************************************/ 803 t_Error FM_PORT_ConfigObservedPoolDepletion(t_Handle h_FmPort, t_FmPortObservedBufPoolDepletion *p_FmPortObservedBufPoolDepletion); 804 805 /**************************************************************************//** 806 @Function FM_PORT_ConfigExtBufPools 807 808 @Description This routine should be called for offline parsing ports 809 that internally use BM buffer pools. In such cases, e.g. for fragmentation and 810 re-assembly, the FM needs new BM buffers. By calling this routine the user 811 specifies the BM buffer pools that should be used. 812 813 Note: Available for some chips only 814 815 May be used for Offline Parsing ports only 816 817 @Param[in] h_FmPort A handle to a FM Port module. 818 @Param[in] p_FmPortExtPools A structure of parameters for the external pools. 819 820 821 @Return E_OK on success; Error code otherwise. 822 823 @Cautions Allowed only following FM_PORT_Config() and before FM_PORT_Init(). 824 *//***************************************************************************/ 825 t_Error FM_PORT_ConfigExtBufPools(t_Handle h_FmPort, t_FmPortExtPools *p_FmPortExtPools); 826 827 /**************************************************************************//** 828 @Function FM_PORT_ConfigBackupPools 829 830 @Description Calling this routine allows the configuration of some of the BM pools 831 defined for this port as backup pools. 832 A pool configured to be a backup pool will be used only if all other 833 enabled non-backup pools are depleted. 834 835 May be used for Rx ports only 836 837 @Param[in] h_FmPort A handle to a FM Port module. 838 @Param[in] p_FmPortBackupBmPools An array of pool id's. All pools specified here will 839 be defined as backup pools. 840 841 @Return E_OK on success; Error code otherwise. 842 843 @Cautions Allowed only following FM_PORT_Config() and before FM_PORT_Init(). 844 *//***************************************************************************/ 845 t_Error FM_PORT_ConfigBackupPools(t_Handle h_FmPort, t_FmPortBackupBmPools *p_FmPortBackupBmPools); 846 847 /**************************************************************************//** 848 @Function FM_PORT_ConfigFrmDiscardOverride 849 850 @Description Calling this routine changes the error frames destination parameter 851 in the internal driver data base from its default configuration: 852 override = [FALSE] 853 854 May be used for Rx and offline parsing ports only 855 856 @Param[in] h_FmPort A handle to a FM Port module. 857 @Param[in] override TRUE to override dicarding of error frames and 858 enqueueing them to error queue. 859 860 @Return E_OK on success; Error code otherwise. 861 862 @Cautions Allowed only following FM_PORT_Config() and before FM_PORT_Init(). 863 *//***************************************************************************/ 864 t_Error FM_PORT_ConfigFrmDiscardOverride(t_Handle h_FmPort, bool override); 865 866 /**************************************************************************//** 867 @Function FM_PORT_ConfigErrorsToDiscard 868 869 @Description Calling this routine changes the behaviour on error parameter 870 in the internal driver data base from its default configuration: 871 [FM_PORT_FRM_ERR_CLS_DISCARD]. 872 If a requested error was previously defined as "ErrorsToEnqueue" it's 873 definition will change and the frame will be discarded. 874 Errors that were not defined either as "ErrorsToEnqueue" nor as 875 "ErrorsToDiscard", will be forwarded to CPU. 876 877 878 May be used for Rx and offline parsing ports only 879 880 @Param[in] h_FmPort A handle to a FM Port module. 881 @Param[in] errs A list of errors to discard 882 883 @Return E_OK on success; Error code otherwise. 884 885 @Cautions Allowed only following FM_PORT_Config() and before FM_PORT_Init(). 886 *//***************************************************************************/ 887 t_Error FM_PORT_ConfigErrorsToDiscard(t_Handle h_FmPort, fmPortFrameErrSelect_t errs); 888 889 /**************************************************************************//** 890 @Function FM_PORT_ConfigDmaSwapData 891 892 @Description Calling this routine changes the DMA swap data aparameter 893 in the internal driver data base from its default 894 configuration [e_FM_PORT_DMA_NO_SWP] 895 896 May be used for all port types 897 898 @Param[in] h_FmPort A handle to a FM Port module. 899 @Param[in] swapData New selection 900 901 @Return E_OK on success; Error code otherwise. 902 903 @Cautions Allowed only following FM_PORT_Config() and before FM_PORT_Init(). 904 *//***************************************************************************/ 905 t_Error FM_PORT_ConfigDmaSwapData(t_Handle h_FmPort, e_FmPortDmaSwap swapData); 906 907 /**************************************************************************//** 908 @Function FM_PORT_ConfigDmaIcCacheAttr 909 910 @Description Calling this routine changes the internal context cache 911 attribute parameter in the internal driver data base 912 from its default configuration [e_FM_PORT_DMA_NO_STASH] 913 914 May be used for all port types 915 916 @Param[in] h_FmPort A handle to a FM Port module. 917 @Param[in] intContextCacheAttr New selection 918 919 @Return E_OK on success; Error code otherwise. 920 921 @Cautions Allowed only following FM_PORT_Config() and before FM_PORT_Init(). 922 *//***************************************************************************/ 923 t_Error FM_PORT_ConfigDmaIcCacheAttr(t_Handle h_FmPort, e_FmPortDmaCache intContextCacheAttr); 924 925 /**************************************************************************//** 926 @Function FM_PORT_ConfigDmaHdrAttr 927 928 @Description Calling this routine changes the header cache 929 attribute parameter in the internal driver data base 930 from its default configuration [e_FM_PORT_DMA_NO_STASH] 931 932 May be used for all port types 933 934 @Param[in] h_FmPort A handle to a FM Port module. 935 @Param[in] headerCacheAttr New selection 936 937 @Return E_OK on success; Error code otherwise. 938 939 @Cautions Allowed only following FM_PORT_Config() and before FM_PORT_Init(). 940 *//***************************************************************************/ 941 t_Error FM_PORT_ConfigDmaHdrAttr(t_Handle h_FmPort, e_FmPortDmaCache headerCacheAttr); 942 943 /**************************************************************************//** 944 @Function FM_PORT_ConfigDmaScatterGatherAttr 945 946 @Description Calling this routine changes the scatter gather cache 947 attribute parameter in the internal driver data base 948 from its default configuration [e_FM_PORT_DMA_NO_STASH] 949 950 May be used for all port types 951 952 @Param[in] h_FmPort A handle to a FM Port module. 953 @Param[in] scatterGatherCacheAttr New selection 954 955 @Return E_OK on success; Error code otherwise. 956 957 @Cautions Allowed only following FM_PORT_Config() and before FM_PORT_Init(). 958 *//***************************************************************************/ 959 t_Error FM_PORT_ConfigDmaScatterGatherAttr(t_Handle h_FmPort, e_FmPortDmaCache scatterGatherCacheAttr); 960 961 /**************************************************************************//** 962 @Function FM_PORT_ConfigDmaWriteOptimize 963 964 @Description Calling this routine changes the write optimization 965 parameter in the internal driver data base 966 from its default configuration: optimize = [TRUE] 967 968 May be used for non-Tx port types 969 970 @Param[in] h_FmPort A handle to a FM Port module. 971 @Param[in] optimize TRUE to enable optimization, FALSE for normal operation 972 973 @Return E_OK on success; Error code otherwise. 974 975 @Cautions Allowed only following FM_PORT_Config() and before FM_PORT_Init(). 976 *//***************************************************************************/ 977 t_Error FM_PORT_ConfigDmaWriteOptimize(t_Handle h_FmPort, bool optimize); 978 979 /**************************************************************************//** 980 @Function FM_PORT_ConfigDfltColor 981 982 @Description Calling this routine changes the internal default color parameter 983 in the internal driver data base 984 from its default configuration [e_FM_PORT_COLOR_GREEN] 985 986 May be used for all port types 987 988 @Param[in] h_FmPort A handle to a FM Port module. 989 @Param[in] color New selection 990 991 @Return E_OK on success; Error code otherwise. 992 993 @Cautions Allowed only following FM_PORT_Config() and before FM_PORT_Init(). 994 *//***************************************************************************/ 995 t_Error FM_PORT_ConfigDfltColor(t_Handle h_FmPort, e_FmPortColor color); 996 997 /**************************************************************************//** 998 @Function FM_PORT_ConfigSyncReq 999 1000 @Description Calling this routine changes the synchronization attribute parameter 1001 in the internal driver data base from its default configuration: 1002 syncReq = [TRUE] 1003 1004 May be used for all port types 1005 1006 @Param[in] h_FmPort A handle to a FM Port module. 1007 @Param[in] syncReq TRUE to request synchronization, FALSE otherwize. 1008 1009 @Return E_OK on success; Error code otherwise. 1010 1011 @Cautions Allowed only following FM_PORT_Config() and before FM_PORT_Init(). 1012 *//***************************************************************************/ 1013 t_Error FM_PORT_ConfigSyncReq(t_Handle h_FmPort, bool syncReq); 1014 1015 /**************************************************************************//** 1016 @Function FM_PORT_ConfigForwardReuseIntContext 1017 1018 @Description This routine is relevant for Rx ports that are routed to offline 1019 parsing. It changes the internal context reuse option 1020 in the internal driver data base from its default configuration: 1021 reuse = [FALSE] 1022 1023 May be used for Rx ports only 1024 1025 @Param[in] h_FmPort A handle to a FM Port module. 1026 @Param[in] reuse TRUE to reuse internal context on frames 1027 forwarded to offline parsing. 1028 1029 @Return E_OK on success; Error code otherwise. 1030 1031 @Cautions Allowed only following FM_PORT_Config() and before FM_PORT_Init(). 1032 *//***************************************************************************/ 1033 t_Error FM_PORT_ConfigForwardReuseIntContext(t_Handle h_FmPort, bool reuse); 1034 1035 /**************************************************************************//** 1036 @Function FM_PORT_ConfigDontReleaseTxBufToBM 1037 1038 @Description This routine should be called if no Tx confirmation 1039 is done, and yet buffers should not be released to the BM. 1040 Normally, buffers are returned using the Tx confirmation 1041 process. When Tx confirmation is not used (defFqid=0), 1042 buffers are typically released to the BM. This routine 1043 may be called to avoid this behavior and not release the 1044 buffers. 1045 1046 May be used for Tx ports only 1047 1048 @Param[in] h_FmPort A handle to a FM Port module. 1049 1050 @Return E_OK on success; Error code otherwise. 1051 1052 @Cautions Allowed only following FM_PORT_Config() and before FM_PORT_Init(). 1053 *//***************************************************************************/ 1054 t_Error FM_PORT_ConfigDontReleaseTxBufToBM(t_Handle h_FmPort); 1055 1056 /**************************************************************************//** 1057 @Function FM_PORT_ConfigIMMaxRxBufLength 1058 1059 @Description Changes the maximum receive buffer length from its default 1060 configuration: Closest rounded down power of 2 value of the 1061 data buffer size. 1062 1063 The maximum receive buffer length directly affects the structure 1064 of received frames (single- or multi-buffered) and the performance 1065 of both the FM and the driver. 1066 1067 The selection between single- or multi-buffered frames should be 1068 done according to the characteristics of the specific application. 1069 The recommended mode is to use a single data buffer per packet, 1070 as this mode provides the best performance. However, the user can 1071 select to use multiple data buffers per packet. 1072 1073 @Param[in] h_FmPort A handle to a FM Port module. 1074 @Param[in] newVal Maximum receive buffer length (in bytes). 1075 1076 @Return E_OK on success; Error code otherwise. 1077 1078 @Cautions Allowed only following FM_PORT_Config() and before FM_PORT_Init(). 1079 This routine is to be used only if Independent-Mode is enabled. 1080 *//***************************************************************************/ 1081 t_Error FM_PORT_ConfigIMMaxRxBufLength(t_Handle h_FmPort, uint16_t newVal); 1082 1083 /**************************************************************************//** 1084 @Function FM_PORT_ConfigIMRxBdRingLength 1085 1086 @Description Changes the receive BD ring length from its default 1087 configuration:[128] 1088 1089 @Param[in] h_FmPort A handle to a FM Port module. 1090 @Param[in] newVal The desired BD ring length. 1091 1092 @Return E_OK on success; Error code otherwise. 1093 1094 @Cautions Allowed only following FM_PORT_Config() and before FM_PORT_Init(). 1095 This routine is to be used only if Independent-Mode is enabled. 1096 *//***************************************************************************/ 1097 t_Error FM_PORT_ConfigIMRxBdRingLength(t_Handle h_FmPort, uint16_t newVal); 1098 1099 /**************************************************************************//** 1100 @Function FM_PORT_ConfigIMTxBdRingLength 1101 1102 @Description Changes the transmit BD ring length from its default 1103 configuration:[16] 1104 1105 @Param[in] h_FmPort A handle to a FM Port module. 1106 @Param[in] newVal The desired BD ring length. 1107 1108 @Return E_OK on success; Error code otherwise. 1109 1110 @Cautions Allowed only following FM_PORT_Config() and before FM_PORT_Init(). 1111 This routine is to be used only if Independent-Mode is enabled. 1112 *//***************************************************************************/ 1113 t_Error FM_PORT_ConfigIMTxBdRingLength(t_Handle h_FmPort, uint16_t newVal); 1114 1115 /**************************************************************************//** 1116 @Function FM_PORT_ConfigIMFmanCtrlExternalStructsMemory 1117 1118 @Description Configures memory partition and attributes for FMan-Controller 1119 data structures (e.g. BD rings). 1120 Calling this routine changes the internal driver data base 1121 from its default configuration 1122 [0 , MEMORY_ATTR_CACHEABLE]. 1123 1124 @Param[in] h_FmPort A handle to a FM Port module. 1125 @Param[in] memId Memory partition ID. 1126 @Param[in] memAttributes Memory attributes mask (a combination of MEMORY_ATTR_x flags). 1127 1128 @Return E_OK on success; Error code otherwise. 1129 *//***************************************************************************/ 1130 t_Error FM_PORT_ConfigIMFmanCtrlExternalStructsMemory(t_Handle h_FmPort, 1131 uint8_t memId, 1132 uint32_t memAttributes); 1133 1134 /**************************************************************************//** 1135 @Function FM_PORT_ConfigIMPolling 1136 1137 @Description Changes the Rx flow from interrupt driven (default) to polling. 1138 1139 @Param[in] h_FmPort A handle to a FM Port module. 1140 1141 @Return E_OK on success; Error code otherwise. 1142 1143 @Cautions Allowed only following FM_PORT_Config() and before FM_PORT_Init(). 1144 This routine is to be used only if Independent-Mode is enabled. 1145 *//***************************************************************************/ 1146 t_Error FM_PORT_ConfigIMPolling(t_Handle h_FmPort); 1147 1148 /** @} */ /* end of FM_PORT_advanced_init_grp group */ 1149 /** @} */ /* end of FM_PORT_init_grp group */ 1150 1151 1152 /**************************************************************************//** 1153 @Group FM_PORT_runtime_control_grp FM Port Runtime Control Unit 1154 1155 @Description FM Port Runtime control unit API functions, definitions and enums. 1156 1157 @{ 1158 *//***************************************************************************/ 1159 1160 /**************************************************************************//** 1161 @Description enum for defining FM Port counters 1162 *//***************************************************************************/ 1163 typedef enum e_FmPortCounters { 1164 e_FM_PORT_COUNTERS_CYCLE, /**< BMI performance counter */ 1165 e_FM_PORT_COUNTERS_TASK_UTIL, /**< BMI performance counter */ 1166 e_FM_PORT_COUNTERS_QUEUE_UTIL, /**< BMI performance counter */ 1167 e_FM_PORT_COUNTERS_DMA_UTIL, /**< BMI performance counter */ 1168 e_FM_PORT_COUNTERS_FIFO_UTIL, /**< BMI performance counter */ 1169 e_FM_PORT_COUNTERS_RX_PAUSE_ACTIVATION, /**< BMI Rx only performance counter */ 1170 e_FM_PORT_COUNTERS_FRAME, /**< BMI statistics counter */ 1171 e_FM_PORT_COUNTERS_DISCARD_FRAME, /**< BMI statistics counter */ 1172 e_FM_PORT_COUNTERS_DEALLOC_BUF, /**< BMI deallocate buffer statistics counter */ 1173 e_FM_PORT_COUNTERS_RX_BAD_FRAME, /**< BMI Rx only statistics counter */ 1174 e_FM_PORT_COUNTERS_RX_LARGE_FRAME, /**< BMI Rx only statistics counter */ 1175 e_FM_PORT_COUNTERS_RX_OUT_OF_BUFFERS_DISCARD, /**< BMI Rx only statistics counter */ 1176 e_FM_PORT_COUNTERS_RX_FILTER_FRAME, /**< BMI Rx & OP only statistics counter */ 1177 e_FM_PORT_COUNTERS_RX_LIST_DMA_ERR, /**< BMI Rx, OP & HC only statistics counter */ 1178 e_FM_PORT_COUNTERS_WRED_DISCARD, /**< BMI OP & HC only statistics counter */ 1179 e_FM_PORT_COUNTERS_LENGTH_ERR, /**< BMI non-Rx statistics counter */ 1180 e_FM_PORT_COUNTERS_UNSUPPRTED_FORMAT, /**< BMI non-Rx statistics counter */ 1181 e_FM_PORT_COUNTERS_DEQ_TOTAL, /**< QMI counter */ 1182 e_FM_PORT_COUNTERS_ENQ_TOTAL, /**< QMI counter */ 1183 e_FM_PORT_COUNTERS_DEQ_FROM_DEFAULT, /**< QMI counter */ 1184 e_FM_PORT_COUNTERS_DEQ_CONFIRM /**< QMI counter */ 1185 } e_FmPortCounters; 1186 1187 /**************************************************************************//** 1188 @Description Structure for Port id parameters. 1189 Fields commented 'IN' are passed by the port module to be used 1190 by the FM module. 1191 Fields commented 'OUT' will be filled by FM before returning to port. 1192 *//***************************************************************************/ 1193 typedef struct t_FmPortCongestionGrps { 1194 uint16_t numOfCongestionGrpsToConsider; /**< The number of required congestion groups 1195 to define the size of the following array */ 1196 uint8_t congestionGrpsToConsider[FM_PORT_NUM_OF_CONGESTION_GRPS]; 1197 /**< An array of 'numOfCongestionGrpsToConsider' 1198 describing the groups */ 1199 } t_FmPortCongestionGrps; 1200 1201 1202 1203 #if (defined(DEBUG_ERRORS) && (DEBUG_ERRORS > 0)) 1204 /**************************************************************************//** 1205 @Function FM_PORT_DumpRegs 1206 1207 @Description Dump all regs. 1208 1209 Calling this routine invalidates the descriptor. 1210 1211 @Param[in] h_FmPort - FM PORT module descriptor 1212 1213 @Return E_OK on success; Error code otherwise. 1214 1215 @Cautions Allowed only following FM_PORT_Init(). 1216 *//***************************************************************************/ 1217 t_Error FM_PORT_DumpRegs(t_Handle h_FmPort); 1218 #endif /* (defined(DEBUG_ERRORS) && ... */ 1219 1220 /**************************************************************************//** 1221 @Function FM_PORT_GetBufferDataOffset 1222 1223 @Description Relevant for Rx ports. 1224 Returns the data offset from the beginning of the data buffer 1225 1226 @Param[in] h_FmPort - FM PORT module descriptor 1227 1228 @Return data offset. 1229 1230 @Cautions Allowed only following FM_PORT_Init(). 1231 *//***************************************************************************/ 1232 uint32_t FM_PORT_GetBufferDataOffset(t_Handle h_FmPort); 1233 1234 /**************************************************************************//** 1235 @Function FM_PORT_GetBufferICInfo 1236 1237 @Description Returns the Internal Context offset from the beginning of the data buffer 1238 1239 @Param[in] h_FmPort - FM PORT module descriptor 1240 @Param[in] p_Data - A pointer to the data buffer. 1241 1242 @Return Internal context info pointer on success, NULL if 'allOtherInfo' was not 1243 configured for this port. 1244 1245 @Cautions Allowed only following FM_PORT_Init(). 1246 *//***************************************************************************/ 1247 uint8_t * FM_PORT_GetBufferICInfo(t_Handle h_FmPort, char *p_Data); 1248 1249 #ifdef DEBUG 1250 /**************************************************************************//** 1251 @Function FM_PORT_GetBufferDebugInfo 1252 1253 @Description Returns the debug info offset from the beginning of the data buffer 1254 1255 @Param[in] h_FmPort - FM PORT module descriptor 1256 @Param[in] p_Data - A pointer to the data buffer. 1257 1258 @Return Debug info pointer on success, NULL if 'passDebugInfo' was not 1259 configured for this port. 1260 1261 @Cautions Allowed only following FM_PORT_Init(). 1262 *//***************************************************************************/ 1263 uint8_t * FM_PORT_GetBufferDebugInfo(t_Handle h_FmPort, char *p_Data); 1264 #endif /* DEBUG */ 1265 1266 /**************************************************************************//** 1267 @Function FM_PORT_GetBufferPrsResult 1268 1269 @Description Returns the pointer to the parse result in the data buffer. 1270 In Rx ports this is relevant after reception, if parse 1271 result is configured to be part of the data passed to the 1272 application. For non Rx ports it may be used to get the pointer 1273 of the area in the buffer where parse result should be 1274 initialized - if so configured. 1275 See FM_PORT_ConfigBufferPrefixContent for data buffer prefix 1276 configuration. 1277 1278 @Param[in] h_FmPort - FM PORT module descriptor 1279 @Param[in] p_Data - A pointer to the data buffer. 1280 1281 @Return Parse result pointer on success, NULL if parse result was not 1282 configured for this port. 1283 1284 @Cautions Allowed only following FM_PORT_Init(). 1285 *//***************************************************************************/ 1286 t_FmPrsResult * FM_PORT_GetBufferPrsResult(t_Handle h_FmPort, char *p_Data); 1287 1288 /**************************************************************************//** 1289 @Function FM_PORT_GetBufferTimeStamp 1290 1291 @Description Returns the time stamp in the data buffer. 1292 Relevant for Rx ports for getting the buffer time stamp. 1293 See FM_PORT_ConfigBufferPrefixContent for data buffer prefix 1294 configuration. 1295 1296 @Param[in] h_FmPort - FM PORT module descriptor 1297 @Param[in] p_Data - A pointer to the data buffer. 1298 1299 @Return A pointer to the hash result on success, NULL otherwise. 1300 1301 @Cautions Allowed only following FM_PORT_Init(). 1302 *//***************************************************************************/ 1303 uint64_t * FM_PORT_GetBufferTimeStamp(t_Handle h_FmPort, char *p_Data); 1304 1305 /**************************************************************************//** 1306 @Function FM_PORT_GetBufferHashResult 1307 1308 @Description Given a data buffer, on the condition that hash result was defined 1309 as a part of the buffer content (see FM_PORT_ConfigBufferPrefixContent) 1310 this routine will return the pointer to the hash result location in the 1311 buffer prefix. 1312 1313 @Param[in] h_FmPort - FM PORT module descriptor 1314 @Param[in] p_Data - A pointer to the data buffer. 1315 1316 @Return A pointer to the hash result on success, NULL otherwise. 1317 1318 @Cautions Allowed only following FM_PORT_Init(). 1319 *//***************************************************************************/ 1320 uint8_t * FM_PORT_GetBufferHashResult(t_Handle h_FmPort, char *p_Data); 1321 1322 /**************************************************************************//** 1323 @Function FM_PORT_Disable 1324 1325 @Description Gracefully disable an FM port. The port will not start new tasks after all 1326 tasks associated with the port are terminated. 1327 1328 @Param[in] h_FmPort A handle to a FM Port module. 1329 1330 @Return E_OK on success; Error code otherwise. 1331 1332 @Cautions Allowed only following FM_PORT_Init(). 1333 This is a blocking routine, it returns after port is 1334 gracefully stopped, i.e. the port will not except new frames, 1335 but it will finish all frames or tasks which were already began 1336 *//***************************************************************************/ 1337 t_Error FM_PORT_Disable(t_Handle h_FmPort); 1338 1339 /**************************************************************************//** 1340 @Function FM_PORT_Enable 1341 1342 @Description A runtime routine provided to allow disable/enable of port. 1343 1344 @Param[in] h_FmPort A handle to a FM Port module. 1345 1346 @Return E_OK on success; Error code otherwise. 1347 1348 @Cautions Allowed only following FM_PORT_Init(). 1349 *//***************************************************************************/ 1350 t_Error FM_PORT_Enable(t_Handle h_FmPort); 1351 1352 /**************************************************************************//** 1353 @Function FM_PORT_SetRateLimit 1354 1355 @Description Calling this routine enables rate limit algorithm. 1356 By default, this functionality is disabled. 1357 Note that rate-limit mechanism uses the FM time stamp. 1358 The selected rate limit specified here would be 1359 rounded DOWN to the nearest 16M. 1360 1361 May be used for Tx and offline parsing ports only 1362 1363 @Param[in] h_FmPort A handle to a FM Port module. 1364 @Param[in] p_RateLimit A structure of rate limit parameters 1365 1366 @Return E_OK on success; Error code otherwise. 1367 1368 @Cautions Allowed only following FM_PORT_Init(). 1369 *//***************************************************************************/ 1370 t_Error FM_PORT_SetRateLimit(t_Handle h_FmPort, t_FmPortRateLimit *p_RateLimit); 1371 1372 /**************************************************************************//** 1373 @Function FM_PORT_DeleteRateLimit 1374 1375 @Description Calling this routine disables and clears rate limit 1376 initialization. 1377 1378 May be used for Tx and offline parsing ports only 1379 1380 @Param[in] h_FmPort A handle to a FM Port module. 1381 1382 @Return E_OK on success; Error code otherwise. 1383 1384 @Cautions Allowed only following FM_PORT_Init(). 1385 *//***************************************************************************/ 1386 t_Error FM_PORT_DeleteRateLimit(t_Handle h_FmPort); 1387 1388 /**************************************************************************//** 1389 @Function FM_PORT_SetStatisticsCounters 1390 1391 @Description Calling this routine enables/disables port's statistics counters. 1392 By default, counters are enabled. 1393 1394 May be used for all port types 1395 1396 @Param[in] h_FmPort A handle to a FM Port module. 1397 @Param[in] enable TRUE to enable, FALSE to disable. 1398 1399 @Return E_OK on success; Error code otherwise. 1400 1401 @Cautions Allowed only following FM_PORT_Init(). 1402 *//***************************************************************************/ 1403 t_Error FM_PORT_SetStatisticsCounters(t_Handle h_FmPort, bool enable); 1404 1405 /**************************************************************************//** 1406 @Function FM_PORT_SetFrameQueueCounters 1407 1408 @Description Calling this routine enables/disables port's enqueue/dequeue counters. 1409 By default, counters are enabled. 1410 1411 May be used for all ports 1412 1413 @Param[in] h_FmPort A handle to a FM Port module. 1414 @Param[in] enable TRUE to enable, FALSE to disable. 1415 1416 @Return E_OK on success; Error code otherwise. 1417 1418 @Cautions Allowed only following FM_PORT_Init(). 1419 *//***************************************************************************/ 1420 t_Error FM_PORT_SetFrameQueueCounters(t_Handle h_FmPort, bool enable); 1421 1422 /**************************************************************************//** 1423 @Function FM_PORT_SetPerformanceCounters 1424 1425 @Description Calling this routine enables/disables port's performance counters. 1426 By default, counters are enabled. 1427 1428 May be used for all port types 1429 1430 @Param[in] h_FmPort A handle to a FM Port module. 1431 @Param[in] enable TRUE to enable, FALSE to disable. 1432 1433 @Return E_OK on success; Error code otherwise. 1434 1435 @Cautions Allowed only following FM_PORT_Init(). 1436 *//***************************************************************************/ 1437 t_Error FM_PORT_SetPerformanceCounters(t_Handle h_FmPort, bool enable); 1438 1439 /**************************************************************************//** 1440 @Function FM_PORT_SetPerformanceCounters 1441 1442 @Description Calling this routine defines port's performance 1443 counters parameters. 1444 1445 May be used for all port types 1446 1447 @Param[in] h_FmPort A handle to a FM Port module. 1448 @Param[in] p_FmPortPerformanceCnt A pointer to a structure of performance 1449 counters parameters. 1450 1451 @Return E_OK on success; Error code otherwise. 1452 1453 @Cautions Allowed only following FM_PORT_Init(). 1454 *//***************************************************************************/ 1455 t_Error FM_PORT_SetPerformanceCountersParams(t_Handle h_FmPort, t_FmPortPerformanceCnt *p_FmPortPerformanceCnt); 1456 1457 /**************************************************************************//** 1458 @Function FM_PORT_AnalyzePerformanceParams 1459 1460 @Description User may call this routine to so the driver will analyze if the 1461 basic performance parameters are correct and also the driver may 1462 suggest of improvments; The basic parameters are FIFO sizes, number 1463 of DMAs and number of TNUMs for the port. 1464 1465 May be used for all port types 1466 1467 @Param[in] h_FmPort A handle to a FM Port module. 1468 1469 @Return E_OK on success; Error code otherwise. 1470 1471 @Cautions Allowed only following FM_PORT_Init(). 1472 *//***************************************************************************/ 1473 t_Error FM_PORT_AnalyzePerformanceParams(t_Handle h_FmPort); 1474 1475 /**************************************************************************//** 1476 @Function FM_PORT_SetNumOfOpenDmas 1477 1478 @Description Calling this routine updates the number of open DMA requested for 1479 this port. 1480 1481 1482 May be used for all port types. 1483 1484 @Param[in] h_FmPort A handle to a FM Port module. 1485 @Param[in] p_NumOfOpenDmas A structure of resource requested parameters 1486 1487 @Return E_OK on success; Error code otherwise. 1488 1489 @Cautions Allowed only following FM_PORT_Init(). 1490 *//***************************************************************************/ 1491 t_Error FM_PORT_SetNumOfOpenDmas(t_Handle h_FmPort, t_FmPortRsrc *p_NumOfOpenDmas); 1492 1493 /**************************************************************************//** 1494 @Function FM_PORT_SetNumOfTasks 1495 1496 @Description Calling this routine updates the number of tasks requested for 1497 this port. 1498 1499 May be used for all port types. 1500 1501 @Param[in] h_FmPort A handle to a FM Port module. 1502 @Param[in] p_NumOfTasks A structure of resource requested parameters 1503 1504 @Return E_OK on success; Error code otherwise. 1505 1506 @Cautions Allowed only following FM_PORT_Init(). 1507 *//***************************************************************************/ 1508 t_Error FM_PORT_SetNumOfTasks(t_Handle h_FmPort, t_FmPortRsrc *p_NumOfTasks); 1509 1510 /**************************************************************************//** 1511 @Function FM_PORT_SetSizeOfFifo 1512 1513 @Description Calling this routine updates the Fifo size resource requested for 1514 this port. 1515 1516 May be used for all port types - note that only Rx has 'extra' 1517 fifo size. For other ports 'extra' field must be disabled. 1518 1519 @Param[in] h_FmPort A handle to a FM Port module. 1520 @Param[in] p_SizeOfFifo A structure of resource requested parameters 1521 1522 @Return E_OK on success; Error code otherwise. 1523 1524 @Cautions Allowed only following FM_PORT_Init(). 1525 *//***************************************************************************/ 1526 t_Error FM_PORT_SetSizeOfFifo(t_Handle h_FmPort, t_FmPortRsrc *p_SizeOfFifo); 1527 1528 /**************************************************************************//** 1529 @Function FM_PORT_SetAllocBufCounter 1530 1531 @Description Calling this routine enables/disables BM pool allocate 1532 buffer counters. 1533 By default, counters are enabled. 1534 1535 May be used for Rx ports only 1536 1537 @Param[in] h_FmPort A handle to a FM Port module. 1538 @Param[in] poolId BM pool id. 1539 @Param[in] enable TRUE to enable, FALSE to disable. 1540 1541 @Return E_OK on success; Error code otherwise. 1542 1543 @Cautions Allowed only following FM_PORT_Init(). 1544 *//***************************************************************************/ 1545 t_Error FM_PORT_SetAllocBufCounter(t_Handle h_FmPort, uint8_t poolId, bool enable); 1546 1547 /**************************************************************************//** 1548 @Function FM_PORT_GetCounter 1549 1550 @Description Reads one of the FM PORT counters. 1551 1552 @Param[in] h_FmPort A handle to a FM Port module. 1553 @Param[in] fmPortCounter The requested counter. 1554 1555 @Return Counter's current value. 1556 1557 @Cautions Allowed only following FM_PORT_Init(). 1558 Note that it is user's responsibility to call this routine only 1559 for enabled counters, and there will be no indication if a 1560 disabled counter is accessed. 1561 *//***************************************************************************/ 1562 uint32_t FM_PORT_GetCounter(t_Handle h_FmPort, e_FmPortCounters fmPortCounter); 1563 1564 /**************************************************************************//** 1565 @Function FM_PORT_ModifyCounter 1566 1567 @Description Sets a value to an enabled counter. Use "0" to reset the counter. 1568 1569 @Param[in] h_FmPort A handle to a FM Port module. 1570 @Param[in] fmPortCounter The requested counter. 1571 @Param[in] value The requested value to be written into the counter. 1572 1573 @Return E_OK on success; Error code otherwise. 1574 1575 @Cautions Allowed only following FM_PORT_Init(). 1576 *//***************************************************************************/ 1577 t_Error FM_PORT_ModifyCounter(t_Handle h_FmPort, e_FmPortCounters fmPortCounter, uint32_t value); 1578 1579 /**************************************************************************//** 1580 @Function FM_PORT_GetAllocBufCounter 1581 1582 @Description Reads one of the FM PORT buffer counters. 1583 1584 @Param[in] h_FmPort A handle to a FM Port module. 1585 @Param[in] poolId The requested pool. 1586 1587 @Return Counter's current value. 1588 1589 @Cautions Allowed only following FM_PORT_Init(). 1590 Note that it is user's responsibility to call this routine only 1591 for enabled counters, and there will be no indication if a 1592 disabled counter is accessed. 1593 *//***************************************************************************/ 1594 uint32_t FM_PORT_GetAllocBufCounter(t_Handle h_FmPort, uint8_t poolId); 1595 1596 /**************************************************************************//** 1597 @Function FM_PORT_ModifyAllocBufCounter 1598 1599 @Description Sets a value to an enabled counter. Use "0" to reset the counter. 1600 1601 @Param[in] h_FmPort A handle to a FM Port module. 1602 @Param[in] poolId The requested pool. 1603 @Param[in] value The requested value to be written into the counter. 1604 1605 @Return E_OK on success; Error code otherwise. 1606 1607 @Cautions Allowed only following FM_PORT_Init(). 1608 *//***************************************************************************/ 1609 t_Error FM_PORT_ModifyAllocBufCounter(t_Handle h_FmPort, uint8_t poolId, uint32_t value); 1610 1611 /**************************************************************************//** 1612 @Function FM_PORT_AddCongestionGrps 1613 1614 @Description This routine effects the corresponding Tx port. 1615 It should be called in order to enable pause 1616 frame transmission in case of congestion in one or more 1617 of the congestion groups relevant to this port. 1618 Each call to this routine may add one or more congestion 1619 groups to be considered relevant to this port. 1620 1621 May be used for Rx, or RX+OP ports only (depending on chip) 1622 1623 @Param[in] h_FmPort A handle to a FM Port module. 1624 @Param[in] p_CongestionGrps A pointer to an array of congestion groups 1625 id's to consider. 1626 1627 @Return E_OK on success; Error code otherwise. 1628 1629 @Cautions Allowed only following FM_PORT_Init(). 1630 *//***************************************************************************/ 1631 t_Error FM_PORT_AddCongestionGrps(t_Handle h_FmPort, t_FmPortCongestionGrps *p_CongestionGrps); 1632 1633 /**************************************************************************//** 1634 @Function FM_PORT_RemoveCongestionGrps 1635 1636 @Description This routine effects the corresponding Tx port. It should be 1637 called when congestion groups were 1638 defined for this port and are no longer relevant, or pause 1639 frames transmitting is not required on their behalf. 1640 Each call to this routine may remove one or more congestion 1641 groups to be considered relevant to this port. 1642 1643 May be used for Rx, or RX+OP ports only (depending on chip) 1644 1645 @Param[in] h_FmPort A handle to a FM Port module. 1646 @Param[in] p_CongestionGrps A pointer to an array of congestion groups 1647 id's to consider. 1648 1649 @Return E_OK on success; Error code otherwise. 1650 1651 @Cautions Allowed only following FM_PORT_Init(). 1652 *//***************************************************************************/ 1653 t_Error FM_PORT_RemoveCongestionGrps(t_Handle h_FmPort, t_FmPortCongestionGrps *p_CongestionGrps); 1654 1655 /**************************************************************************//** 1656 @Function FM_PORT_IsStalled 1657 1658 @Description A routine for checking whether the specified port is stalled. 1659 1660 @Param[in] h_FmPort A handle to a FM Port module. 1661 1662 @Return TRUE if port is stalled, FALSE otherwize 1663 1664 @Cautions Allowed only following FM_PORT_Init(). 1665 *//***************************************************************************/ 1666 bool FM_PORT_IsStalled(t_Handle h_FmPort); 1667 1668 /**************************************************************************//** 1669 @Function FM_PORT_ReleaseStalled 1670 1671 @Description This routine may be called in case the port was stalled and may 1672 now be released. 1673 1674 @Param[in] h_FmPort A handle to a FM Port module. 1675 1676 @Return E_OK on success; Error code otherwise. 1677 1678 @Cautions Allowed only following FM_PORT_Init(). 1679 *//***************************************************************************/ 1680 t_Error FM_PORT_ReleaseStalled(t_Handle h_FmPort); 1681 1682 /**************************************************************************//** 1683 @Function FM_PORT_SetRxL4ChecksumVerify 1684 1685 @Description This routine is relevant for Rx ports (1G and 10G). The routine 1686 set/clear the L3/L4 checksum verification (on RX side). 1687 Note that this takes affect only if hw-parser is enabled! 1688 1689 @Param[in] h_FmPort A handle to a FM Port module. 1690 @Param[in] l4Checksum boolean indicates whether to do L3/L4 checksum 1691 on frames or not. 1692 1693 @Return E_OK on success; Error code otherwise. 1694 1695 @Cautions Allowed only following FM_PORT_Init(). 1696 *//***************************************************************************/ 1697 t_Error FM_PORT_SetRxL4ChecksumVerify(t_Handle h_FmPort, bool l4Checksum); 1698 1699 /**************************************************************************//** 1700 @Function FM_PORT_SetErrorsRoute 1701 1702 @Description Errors selected for this routine will cause a frame with that error 1703 to be enqueued to error queue. 1704 Errors not selected for this routine will cause a frame with that error 1705 to be enqueued to the one of the other port queues. 1706 By default all errors are defined to be enqueued to error queue. 1707 Errors that were configured to be discarded (at initialization) 1708 may not be selected here. 1709 1710 May be used for Rx and offline parsing ports only 1711 1712 @Param[in] h_FmPort A handle to a FM Port module. 1713 @Param[in] errs A list of errors to enqueue to error queue 1714 1715 @Return E_OK on success; Error code otherwise. 1716 1717 @Cautions Allowed only following FM_PORT_Config() and before FM_PORT_Init(). 1718 *//***************************************************************************/ 1719 t_Error FM_PORT_SetErrorsRoute(t_Handle h_FmPort, fmPortFrameErrSelect_t errs); 1720 1721 /**************************************************************************//** 1722 @Function FM_PORT_SetIMExceptions 1723 1724 @Description Calling this routine enables/disables FM PORT interrupts. 1725 Note: Not available for guest partition. 1726 1727 @Param[in] h_FmPort FM PORT module descriptor. 1728 @Param[in] exception The exception to be selected. 1729 @Param[in] enable TRUE to enable interrupt, FALSE to mask it. 1730 1731 @Return E_OK on success; Error code otherwise. 1732 1733 @Cautions Allowed only following FM_PORT_Init(). 1734 *//***************************************************************************/ 1735 t_Error FM_PORT_SetIMExceptions(t_Handle h_FmPort, e_FmPortExceptions exception, bool enable); 1736 1737 1738 1739 /**************************************************************************//** 1740 @Group FM_PORT_pcd_runtime_control_grp FM Port PCD Runtime Control Unit 1741 1742 @Description FM Port PCD Runtime control unit API functions, definitions and enums. 1743 1744 @{ 1745 *//***************************************************************************/ 1746 1747 /**************************************************************************//** 1748 @Description A structure defining the KG scheme after the parser. 1749 This is relevant only to change scheme selection mode - from 1750 direct to indirect and vice versa, or when the scheme is selected directly, 1751 to select the scheme id. 1752 1753 *//***************************************************************************/ 1754 typedef struct t_FmPcdKgSchemeSelect { 1755 bool direct; /**< TRUE to use 'h_Scheme' directly, FALSE to use LCV.*/ 1756 t_Handle h_DirectScheme; /**< Relevant for 'direct'=TRUE only. 1757 'h_DirectScheme' selects the scheme after parser. */ 1758 } t_FmPcdKgSchemeSelect; 1759 1760 /**************************************************************************//** 1761 @Description A structure of scheme parameters 1762 *//***************************************************************************/ 1763 typedef struct t_FmPcdPortSchemesParams { 1764 uint8_t numOfSchemes; /**< Number of schemes for port to be bound to. */ 1765 t_Handle h_Schemes[FM_PCD_KG_NUM_OF_SCHEMES]; /**< Array of 'numOfSchemes' schemes for the 1766 port to be bound to */ 1767 } t_FmPcdPortSchemesParams; 1768 1769 /**************************************************************************//** 1770 @Description Union for defining port protocol parameters for parser 1771 *//***************************************************************************/ 1772 typedef union u_FmPcdHdrPrsOpts { 1773 /* MPLS */ 1774 struct { 1775 bool labelInterpretationEnable; /**< When this bit is set, the last MPLS label will be 1776 interpreted as described in HW spec table. When the bit 1777 is cleared, the parser will advance to MPLS next parse */ 1778 e_NetHeaderType nextParse; /**< must be equal or higher than IPv4 */ 1779 } mplsPrsOptions; 1780 /* VLAN */ 1781 struct { 1782 uint16_t tagProtocolId1; /**< User defined Tag Protocol Identifier, to be recognized 1783 on VLAN TAG on top of 0x8100 and 0x88A8 */ 1784 uint16_t tagProtocolId2; /**< User defined Tag Protocol Identifier, to be recognized 1785 on VLAN TAG on top of 0x8100 and 0x88A8 */ 1786 } vlanPrsOptions; 1787 /* PPP */ 1788 struct{ 1789 bool enableMTUCheck; /**< Check validity of MTU according to RFC2516 */ 1790 } pppoePrsOptions; 1791 1792 /* IPV6 */ 1793 struct{ 1794 bool routingHdrDisable; /**< Disable routing header */ 1795 } ipv6PrsOptions; 1796 1797 /* UDP */ 1798 struct{ 1799 bool padIgnoreChecksum; /**< TRUE to ignore pad in checksum */ 1800 } udpPrsOptions; 1801 1802 /* TCP */ 1803 struct { 1804 bool padIgnoreChecksum; /**< TRUE to ignore pad in checksum */ 1805 } tcpPrsOptions; 1806 } u_FmPcdHdrPrsOpts; 1807 1808 /**************************************************************************//** 1809 @Description A structure for defining each header for the parser 1810 *//***************************************************************************/ 1811 typedef struct t_FmPcdPrsAdditionalHdrParams { 1812 e_NetHeaderType hdr; /**< Selected header */ 1813 bool errDisable; /**< TRUE to disable error indication */ 1814 bool swPrsEnable; /**< Enable jump to SW parser when this 1815 header is recognized by the HW parser. */ 1816 uint8_t indexPerHdr; /**< Normally 0, if more than one sw parser 1817 attachments exists for the same header, 1818 (in the main sw parser code) use this 1819 index to distinguish between them. */ 1820 bool usePrsOpts; /**< TRUE to use parser options. */ 1821 u_FmPcdHdrPrsOpts prsOpts; /**< A union according to header type, 1822 defining the parser options selected.*/ 1823 } t_FmPcdPrsAdditionalHdrParams; 1824 1825 /**************************************************************************//** 1826 @Description struct for defining port PCD parameters 1827 *//***************************************************************************/ 1828 typedef struct t_FmPortPcdPrsParams { 1829 uint8_t prsResultPrivateInfo; /**< The private info provides a method of inserting 1830 port information into the parser result. This information 1831 may be extracted by Keygen and be used for frames 1832 distribution when a per-port distinction is required, 1833 it may also be used as a port logical id for analyzing 1834 incoming frames. */ 1835 uint8_t parsingOffset; /**< Number of bytes from beginning of packet to start parsing */ 1836 e_NetHeaderType firstPrsHdr; /**< The type of the first header expected at 'parsingOffset' */ 1837 bool includeInPrsStatistics; /**< TRUE to include this port in the parser statistics; 1838 NOTE: this field is not valid when the FN is in "guest" mode. */ 1839 uint8_t numOfHdrsWithAdditionalParams; /**< Normally 0, some headers may get 1840 special parameters */ 1841 t_FmPcdPrsAdditionalHdrParams additionalParams[FM_PCD_PRS_NUM_OF_HDRS]; 1842 /**< 'numOfHdrsWithAdditionalParams' structures 1843 of additional parameters 1844 for each header that requires them */ 1845 bool setVlanTpid1; /**< TRUE to configure user selection of Ethertype to 1846 indicate a VLAN tag (in addition to the TPID values 1847 0x8100 and 0x88A8). */ 1848 uint16_t vlanTpid1; /**< extra tag to use if setVlanTpid1=TRUE. */ 1849 bool setVlanTpid2; /**< TRUE to configure user selection of Ethertype to 1850 indicate a VLAN tag (in addition to the TPID values 1851 0x8100 and 0x88A8). */ 1852 uint16_t vlanTpid2; /**< extra tag to use if setVlanTpid1=TRUE. */ 1853 } t_FmPortPcdPrsParams; 1854 1855 /**************************************************************************//** 1856 @Description struct for defining coarse alassification parameters 1857 *//***************************************************************************/ 1858 typedef struct t_FmPortPcdCcParams { 1859 t_Handle h_CcTree; /**< A handle to a CC tree */ 1860 } t_FmPortPcdCcParams; 1861 1862 /**************************************************************************//** 1863 @Description struct for defining keygen parameters 1864 *//***************************************************************************/ 1865 typedef struct t_FmPortPcdKgParams { 1866 uint8_t numOfSchemes; /**< Number of schemes for port to be bound to. */ 1867 t_Handle h_Schemes[FM_PCD_KG_NUM_OF_SCHEMES]; 1868 /**< Array of 'numOfSchemes' schemes handles for the 1869 port to be bound to */ 1870 bool directScheme; /**< TRUE for going from parser to a specific scheme, 1871 regardless of parser result */ 1872 t_Handle h_DirectScheme; /**< relevant only if direct == TRUE, Scheme handle, 1873 as returned by FM_PCD_KgSetScheme */ 1874 } t_FmPortPcdKgParams; 1875 1876 /**************************************************************************//** 1877 @Description struct for defining policer parameters 1878 *//***************************************************************************/ 1879 typedef struct t_FmPortPcdPlcrParams { 1880 t_Handle h_Profile; /**< Selected profile handle; Relevant for one of 1881 following cases: 1882 e_FM_PORT_PCD_SUPPORT_PLCR_ONLY or 1883 e_FM_PORT_PCD_SUPPORT_PRS_AND_PLCR were selected, 1884 or if any flow uses a KG scheme were policer 1885 profile is not generated 1886 (bypassPlcrProfileGeneration selected) */ 1887 } t_FmPortPcdPlcrParams; 1888 1889 /**************************************************************************//** 1890 @Description struct for defining port PCD parameters 1891 *//***************************************************************************/ 1892 typedef struct t_FmPortPcdParams { 1893 e_FmPortPcdSupport pcdSupport; /**< Relevant for Rx and offline ports only. 1894 Describes the active PCD engines for this port. */ 1895 t_Handle h_NetEnv; /**< HL Unused in PLCR only mode */ 1896 t_FmPortPcdPrsParams *p_PrsParams; /**< Parser parameters for this port */ 1897 t_FmPortPcdCcParams *p_CcParams; /**< Coarse classification parameters for this port */ 1898 t_FmPortPcdKgParams *p_KgParams; /**< Keygen parameters for this port */ 1899 t_FmPortPcdPlcrParams *p_PlcrParams; /**< Policer parameters for this port */ 1900 } t_FmPortPcdParams; 1901 1902 /**************************************************************************//** 1903 @Description A structure for defining the Parser starting point 1904 *//***************************************************************************/ 1905 typedef struct t_FmPcdPrsStart { 1906 uint8_t parsingOffset; /**< Number of bytes from beginning of packet to 1907 start parsing */ 1908 e_NetHeaderType firstPrsHdr; /**< The type of the first header axpected at 1909 'parsingOffset' */ 1910 } t_FmPcdPrsStart; 1911 1912 1913 /**************************************************************************//** 1914 @Function FM_PORT_SetPCD 1915 1916 @Description Calling this routine defines the port's PCD configuration. 1917 It changes it from its default configuration which is PCD 1918 disabled (BMI to BMI) and configures it according to the passed 1919 parameters. 1920 1921 May be used for Rx and offline parsing ports only 1922 1923 @Param[in] h_FmPort A handle to a FM Port module. 1924 @Param[in] p_FmPortPcd A Structure of parameters defining the port's PCD 1925 configuration. 1926 1927 @Return E_OK on success; Error code otherwise. 1928 1929 @Cautions Allowed only following FM_PORT_Init(). 1930 *//***************************************************************************/ 1931 t_Error FM_PORT_SetPCD(t_Handle h_FmPort, t_FmPortPcdParams *p_FmPortPcd); 1932 1933 /**************************************************************************//** 1934 @Function FM_PORT_DeletePCD 1935 1936 @Description Calling this routine releases the port's PCD configuration. 1937 The port returns to its default configuration which is PCD 1938 disabled (BMI to BMI) and all PCD configuration is removed. 1939 1940 May be used for Rx and offline parsing ports which are 1941 in PCD mode only 1942 1943 @Param[in] h_FmPort A handle to a FM Port module. 1944 1945 @Return E_OK on success; Error code otherwise. 1946 1947 @Cautions Allowed only following FM_PORT_Init(). 1948 *//***************************************************************************/ 1949 t_Error FM_PORT_DeletePCD(t_Handle h_FmPort); 1950 1951 /**************************************************************************//** 1952 @Function FM_PORT_AttachPCD 1953 1954 @Description This routine may be called after FM_PORT_DetachPCD was called, 1955 to return to the originally configured PCD support flow. 1956 The couple of routines are used to allow PCD configuration changes 1957 that demand that PCD will not be used while changes take place. 1958 1959 May be used for Rx and offline parsing ports which are 1960 in PCD mode only 1961 1962 @Param[in] h_FmPort A handle to a FM Port module. 1963 1964 @Return E_OK on success; Error code otherwise. 1965 1966 @Cautions Allowed only following FM_PORT_Init(). 1967 *//***************************************************************************/ 1968 t_Error FM_PORT_AttachPCD(t_Handle h_FmPort); 1969 1970 /**************************************************************************//** 1971 @Function FM_PORT_DetachPCD 1972 1973 @Description Calling this routine detaches the port from its PCD functionality. 1974 The port returns to its default flow which is BMI to BMI. 1975 1976 May be used for Rx and offline parsing ports which are 1977 in PCD mode only 1978 1979 @Param[in] h_FmPort A handle to a FM Port module. 1980 1981 @Return E_OK on success; Error code otherwise. 1982 1983 @Cautions Allowed only following FM_PORT_AttachPCD(). 1984 *//***************************************************************************/ 1985 t_Error FM_PORT_DetachPCD(t_Handle h_FmPort); 1986 1987 /**************************************************************************//** 1988 @Function FM_PORT_PcdPlcrAllocProfiles 1989 1990 @Description This routine may be called only for ports that use the Policer in 1991 order to allocate private policer profiles. 1992 1993 @Param[in] h_FmPort A handle to a FM Port module. 1994 @Param[in] numOfProfiles The number of required policer profiles 1995 1996 @Return E_OK on success; Error code otherwise. 1997 1998 @Cautions Allowed only following FM_PORT_Init() and FM_PCD_Init(), and before FM_PORT_SetPCD(). 1999 *//***************************************************************************/ 2000 t_Error FM_PORT_PcdPlcrAllocProfiles(t_Handle h_FmPort, uint16_t numOfProfiles); 2001 2002 /**************************************************************************//** 2003 @Function FM_PORT_PcdPlcrFreeProfiles 2004 2005 @Description This routine should be called for freeing private policer profiles. 2006 2007 @Param[in] h_FmPort A handle to a FM Port module. 2008 2009 @Return E_OK on success; Error code otherwise. 2010 2011 @Cautions Allowed only following FM_PORT_Init() and FM_PCD_Init(), and before FM_PORT_SetPCD(). 2012 *//***************************************************************************/ 2013 t_Error FM_PORT_PcdPlcrFreeProfiles(t_Handle h_FmPort); 2014 2015 /**************************************************************************//** 2016 @Function FM_PORT_PcdKgModifyInitialScheme 2017 2018 @Description This routine may be called only for ports that use the keygen in 2019 order to change the initial scheme frame should be routed to. 2020 The change may be of a scheme id (in case of direct mode), 2021 from direct to indirect, or from indirect to direct - specifying the scheme id. 2022 2023 @Param[in] h_FmPort A handle to a FM Port module. 2024 @Param[in] p_FmPcdKgScheme A structure of parameters for defining whether 2025 a scheme is direct/indirect, and if direct - scheme id. 2026 2027 @Return E_OK on success; Error code otherwise. 2028 2029 @Cautions Allowed only following FM_PORT_Init() and FM_PORT_SetPCD(). 2030 *//***************************************************************************/ 2031 t_Error FM_PORT_PcdKgModifyInitialScheme (t_Handle h_FmPort, t_FmPcdKgSchemeSelect *p_FmPcdKgScheme); 2032 2033 /**************************************************************************//** 2034 @Function FM_PORT_PcdPlcrModifyInitialProfile 2035 2036 @Description This routine may be called for ports with flows 2037 e_FM_PORT_PCD_SUPPORT_PLCR_ONLY or e_FM_PORT_PCD_SUPPORT_PRS_AND_PLCR 2038 only, to change the initial Policer profile frame should be 2039 routed to. The change may be of a profile and/or absolute/direct 2040 mode selection. 2041 2042 @Param[in] h_FmPort A handle to a FM Port module. 2043 @Param[in] h_Profile Policer profile handle 2044 2045 @Return E_OK on success; Error code otherwise. 2046 2047 @Cautions Allowed only following FM_PORT_Init() and FM_PORT_SetPCD(). 2048 *//***************************************************************************/ 2049 t_Error FM_PORT_PcdPlcrModifyInitialProfile (t_Handle h_FmPort, t_Handle h_Profile); 2050 2051 /**************************************************************************//** 2052 @Function FM_PORT_PcdCcModifyTree 2053 2054 @Description This routine may be called for ports that use coarse classification tree 2055 if the user wishes to replace the tree. The routine may not be called while port 2056 receives packets using the PCD functionalities, therefor port must be first detached 2057 from the PCD, only than the routine may be called, and than port be attached to PCD again. 2058 2059 @Param[in] h_FmPort A handle to a FM Port module. 2060 @Param[in] h_CcTree A CC tree that was already built. The tree id as returned from 2061 the BuildTree routine. 2062 2063 @Return E_OK on success; Error code otherwise. 2064 2065 @Cautions Allowed only following FM_PORT_Init(), FM_PORT_SetPCD() and FM_PORT_DetachPCD() 2066 *//***************************************************************************/ 2067 t_Error FM_PORT_PcdCcModifyTree (t_Handle h_FmPort, t_Handle h_CcTree); 2068 2069 /**************************************************************************//** 2070 @Function FM_PORT_PcdKgBindSchemes 2071 2072 @Description These routines may be called for adding more schemes for the 2073 port to be bound to. The selected schemes are not added, 2074 just this specific port starts using them. 2075 2076 @Param[in] h_FmPort A handle to a FM Port module. 2077 @Param[in] p_PortScheme A structure defining the list of schemes to be added. 2078 2079 @Return E_OK on success; Error code otherwise. 2080 2081 @Cautions Allowed only following FM_PORT_Init() and FM_PORT_SetPCD(). 2082 *//***************************************************************************/ 2083 t_Error FM_PORT_PcdKgBindSchemes (t_Handle h_FmPort, t_FmPcdPortSchemesParams *p_PortScheme); 2084 2085 /**************************************************************************//** 2086 @Function FM_PORT_PcdKgUnbindSchemes 2087 2088 @Description These routines may be called for adding more schemes for the 2089 port to be bound to. The selected schemes are not removed or invalidated, 2090 just this specific port stops using them. 2091 2092 @Param[in] h_FmPort A handle to a FM Port module. 2093 @Param[in] p_PortScheme A structure defining the list of schemes to be added. 2094 2095 @Return E_OK on success; Error code otherwise. 2096 2097 @Cautions Allowed only following FM_PORT_Init() and FM_PORT_SetPCD(). 2098 *//***************************************************************************/ 2099 t_Error FM_PORT_PcdKgUnbindSchemes (t_Handle h_FmPort, t_FmPcdPortSchemesParams *p_PortScheme); 2100 2101 /**************************************************************************//** 2102 @Function FM_PORT_PcdPrsModifyStartOffset 2103 2104 @Description Runtime change of the parser start offset within the header. 2105 The routine may not be called while port 2106 receives packets using the PCD functionalities, therefore port must be first detached 2107 from the PCD, only than the routine may be called, and than port be attached to PCD again. 2108 @Param[in] h_FmPort A handle to a FM Port module. 2109 @Param[in] p_FmPcdPrsStart A structure of parameters for defining the 2110 start point for the parser. 2111 2112 @Return E_OK on success; Error code otherwise. 2113 2114 @Cautions Allowed only following FM_PORT_Init(), FM_PORT_SetPCD() and FM_PORT_DetatchPCD(). 2115 *//***************************************************************************/ 2116 t_Error FM_PORT_PcdPrsModifyStartOffset (t_Handle h_FmPort, t_FmPcdPrsStart *p_FmPcdPrsStart); 2117 2118 /** @} */ /* end of FM_PORT_pcd_runtime_control_grp group */ 2119 /** @} */ /* end of FM_PORT_runtime_control_grp group */ 2120 2121 2122 /**************************************************************************//** 2123 @Group FM_PORT_runtime_data_grp FM Port Runtime Data-path Unit 2124 2125 @Description FM Port Runtime data unit API functions, definitions and enums. 2126 This API is valid only if working in Independent-Mode. 2127 2128 @{ 2129 *//***************************************************************************/ 2130 2131 /**************************************************************************//** 2132 @Function FM_PORT_ImTx 2133 2134 @Description Tx function, called to transmit a data buffer on the port. 2135 2136 @Param[in] h_FmPort A handle to a FM Port module. 2137 @Param[in] p_Data A pointer to an LCP data buffer. 2138 @Param[in] length Size of data for transmission. 2139 @Param[in] lastBuffer Buffer position - TRUE for the last buffer 2140 of a frame, including a single buffer frame 2141 @Param[in] h_BufContext A handle of the user acossiated with this buffer 2142 2143 @Return E_OK on success; Error code otherwise. 2144 2145 @Cautions Allowed only following FM_PORT_Init(). 2146 NOTE - This routine can be used only when working in 2147 Independent-Mode mode. 2148 *//***************************************************************************/ 2149 t_Error FM_PORT_ImTx( t_Handle h_FmPort, 2150 uint8_t *p_Data, 2151 uint16_t length, 2152 bool lastBuffer, 2153 t_Handle h_BufContext); 2154 2155 /**************************************************************************//** 2156 @Function FM_PORT_ImTxConf 2157 2158 @Description Tx port confirmation routine, optional, may be called to verify 2159 transmission of all frames. The procedure performed by this 2160 routine will be performed automatically on next buffer transmission, 2161 but if desired, calling this routine will invoke this action on 2162 demand. 2163 2164 @Param[in] h_FmPort A handle to a FM Port module. 2165 2166 @Cautions Allowed only following FM_PORT_Init(). 2167 NOTE - This routine can be used only when working in 2168 Independent-Mode mode. 2169 *//***************************************************************************/ 2170 void FM_PORT_ImTxConf(t_Handle h_FmPort); 2171 2172 /**************************************************************************//** 2173 @Function FM_PORT_ImRx 2174 2175 @Description Rx function, may be called to poll for received buffers. 2176 Normally, Rx process is invoked by the driver on Rx interrupt. 2177 Alternatively, this routine may be called on demand. 2178 2179 @Param[in] h_FmPort A handle to a FM Port module. 2180 2181 @Return E_OK on success; Error code otherwise. 2182 2183 @Cautions Allowed only following FM_PORT_Init(). 2184 NOTE - This routine can be used only when working in 2185 Independent-Mode mode. 2186 *//***************************************************************************/ 2187 t_Error FM_PORT_ImRx(t_Handle h_FmPort); 2188 2189 /** @} */ /* end of FM_PORT_runtime_data_grp group */ 2190 /** @} */ /* end of FM_PORT_grp group */ 2191 /** @} */ /* end of FM_grp group */ 2192 2193 2194 2195 2196 #endif /* __FM_PORT_EXT */ 2197