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_pcd_ext.h 35 36 @Description FM PCD ... 37 *//***************************************************************************/ 38 #ifndef __FM_PCD_EXT 39 #define __FM_PCD_EXT 40 41 #include "std_ext.h" 42 #include "net_ext.h" 43 #include "list_ext.h" 44 #include "fm_ext.h" 45 46 47 /**************************************************************************//** 48 49 @Group FM_grp Frame Manager API 50 51 @Description FM API functions, definitions and enums 52 53 @{ 54 *//***************************************************************************/ 55 56 /**************************************************************************//** 57 @Group FM_PCD_grp FM PCD 58 59 @Description FM PCD API functions, definitions and enums 60 61 The FM PCD module is responsible for the initialization of all 62 global classifying FM modules. This includes the parser general and 63 common registers, the key generator global and common registers, 64 and the Policer global and common registers. 65 In addition, the FM PCD SW module will initialize all required 66 key generator schemes, coarse classification flows, and Policer 67 profiles. When An FM module is configured to work with one of these 68 entities, it will register to it using the FM PORT API. The PCD 69 module will manage the PCD resources - i.e. resource management of 70 Keygen schemes, etc. 71 72 @{ 73 *//***************************************************************************/ 74 75 /**************************************************************************//** 76 @Collection General PCD defines 77 *//***************************************************************************/ 78 typedef uint32_t fmPcdEngines_t; /**< options as defined below: */ 79 80 #define FM_PCD_NONE 0 /**< No PCD Engine indicated */ 81 #define FM_PCD_PRS 0x80000000 /**< Parser indicated */ 82 #define FM_PCD_KG 0x40000000 /**< Keygen indicated */ 83 #define FM_PCD_CC 0x20000000 /**< Coarse classification indicated */ 84 #define FM_PCD_PLCR 0x10000000 /**< Policer indicated */ 85 #define FM_PCD_MANIP 0x08000000 /**< Manipulation indicated */ 86 87 #define FM_PCD_MAX_NUM_OF_PRIVATE_HDRS 2 /**< Number of units/headers saved for user */ 88 89 #define FM_PCD_PRS_NUM_OF_HDRS 16 /**< Number of headers supported by HW parser */ 90 #define FM_PCD_MAX_NUM_OF_DISTINCTION_UNITS (32 - FM_PCD_MAX_NUM_OF_PRIVATE_HDRS) 91 /**< number of distinction units is limited by 92 register size (32), - reserved bits for 93 private headers. */ 94 95 #define FM_PCD_MAX_NUM_OF_INTERCHANGEABLE_HDRS 4 /**< Maximum number of interchangeable headers in a distinction unit */ 96 #define FM_PCD_KG_NUM_OF_GENERIC_REGS 8 /**< Total number of generic KG registers */ 97 #define FM_PCD_KG_MAX_NUM_OF_EXTRACTS_PER_KEY 35 /**< Max number allowed on any configuration. 98 For reason of HW implementation, in most 99 cases less than this will be allowed. The 100 driver will return error in initialization 101 time if resource is overused. */ 102 #define FM_PCD_KG_NUM_OF_EXTRACT_MASKS 4 /**< Total number of masks allowed on KG extractions. */ 103 #define FM_PCD_KG_NUM_OF_DEFAULT_GROUPS 16 /**< Number of default value logical groups */ 104 105 #define FM_PCD_PRS_NUM_OF_LABELS 32 /**< Max number of SW parser label */ 106 #define FM_PCD_SW_PRS_SIZE 0x00000800 /**< Total size of sw parser area */ 107 #define FM_PCD_PRS_SW_OFFSET 0x00000040 /**< Size of illegal addresses at the beginning 108 of the SW parser area */ 109 #define FM_PCD_PRS_SW_PATCHES_SIZE 0x00000200 /**< Number of bytes saved for patches */ 110 #define FM_PCD_PRS_SW_TAIL_SIZE 4 /**< Number of bytes that must be cleared at 111 the end of the SW parser area */ 112 #define FM_SW_PRS_MAX_IMAGE_SIZE (FM_PCD_SW_PRS_SIZE-FM_PCD_PRS_SW_OFFSET-FM_PCD_PRS_SW_TAIL_SIZE-FM_PCD_PRS_SW_PATCHES_SIZE) 113 /**< Max possible size of SW parser code */ 114 115 #define FM_PCD_MAX_MANIP_INSRT_TEMPLATE_SIZE 128 /**< Max possible size of insertion template for 116 insert manipulation*/ 117 /* @} */ 118 119 120 /**************************************************************************//** 121 @Group FM_PCD_init_grp FM PCD Initialization Unit 122 123 @Description FM PCD Initialization Unit 124 125 @{ 126 *//***************************************************************************/ 127 128 /**************************************************************************//** 129 @Description PCD counters 130 *//***************************************************************************/ 131 typedef enum e_FmPcdCounters { 132 e_FM_PCD_KG_COUNTERS_TOTAL, /**< Policer counter */ 133 e_FM_PCD_PLCR_COUNTERS_YELLOW, /**< Policer counter */ 134 e_FM_PCD_PLCR_COUNTERS_RED, /**< Policer counter */ 135 e_FM_PCD_PLCR_COUNTERS_RECOLORED_TO_RED, /**< Policer counter */ 136 e_FM_PCD_PLCR_COUNTERS_RECOLORED_TO_YELLOW, /**< Policer counter */ 137 e_FM_PCD_PLCR_COUNTERS_TOTAL, /**< Policer counter */ 138 e_FM_PCD_PLCR_COUNTERS_LENGTH_MISMATCH, /**< Policer counter */ 139 e_FM_PCD_PRS_COUNTERS_PARSE_DISPATCH, /**< Parser counter */ 140 e_FM_PCD_PRS_COUNTERS_L2_PARSE_RESULT_RETURNED, /**< Parser counter */ 141 e_FM_PCD_PRS_COUNTERS_L3_PARSE_RESULT_RETURNED, /**< Parser counter */ 142 e_FM_PCD_PRS_COUNTERS_L4_PARSE_RESULT_RETURNED, /**< Parser counter */ 143 e_FM_PCD_PRS_COUNTERS_SHIM_PARSE_RESULT_RETURNED, /**< Parser counter */ 144 e_FM_PCD_PRS_COUNTERS_L2_PARSE_RESULT_RETURNED_WITH_ERR, /**< Parser counter */ 145 e_FM_PCD_PRS_COUNTERS_L3_PARSE_RESULT_RETURNED_WITH_ERR, /**< Parser counter */ 146 e_FM_PCD_PRS_COUNTERS_L4_PARSE_RESULT_RETURNED_WITH_ERR, /**< Parser counter */ 147 e_FM_PCD_PRS_COUNTERS_SHIM_PARSE_RESULT_RETURNED_WITH_ERR, /**< Parser counter */ 148 e_FM_PCD_PRS_COUNTERS_SOFT_PRS_CYCLES, /**< Parser counter */ 149 e_FM_PCD_PRS_COUNTERS_SOFT_PRS_STALL_CYCLES, /**< Parser counter */ 150 e_FM_PCD_PRS_COUNTERS_HARD_PRS_CYCLE_INCL_STALL_CYCLES, /**< Parser counter */ 151 e_FM_PCD_PRS_COUNTERS_MURAM_READ_CYCLES, /**< MURAM counter */ 152 e_FM_PCD_PRS_COUNTERS_MURAM_READ_STALL_CYCLES, /**< MURAM counter */ 153 e_FM_PCD_PRS_COUNTERS_MURAM_WRITE_CYCLES, /**< MURAM counter */ 154 e_FM_PCD_PRS_COUNTERS_MURAM_WRITE_STALL_CYCLES, /**< MURAM counter */ 155 e_FM_PCD_PRS_COUNTERS_FPM_COMMAND_STALL_CYCLES /**< FPM counter */ 156 } e_FmPcdCounters; 157 158 /**************************************************************************//** 159 @Description PCD interrupts 160 *//***************************************************************************/ 161 typedef enum e_FmPcdExceptions { 162 e_FM_PCD_KG_EXCEPTION_DOUBLE_ECC, /**< Keygen ECC error */ 163 e_FM_PCD_PLCR_EXCEPTION_DOUBLE_ECC, /**< Read Buffer ECC error */ 164 e_FM_PCD_KG_EXCEPTION_KEYSIZE_OVERFLOW, /**< Write Buffer ECC error on system side */ 165 e_FM_PCD_PLCR_EXCEPTION_INIT_ENTRY_ERROR, /**< Write Buffer ECC error on FM side */ 166 e_FM_PCD_PLCR_EXCEPTION_PRAM_SELF_INIT_COMPLETE, /**< Self init complete */ 167 e_FM_PCD_PLCR_EXCEPTION_ATOMIC_ACTION_COMPLETE, /**< Atomic action complete */ 168 e_FM_PCD_PRS_EXCEPTION_DOUBLE_ECC, /**< Parser ECC error */ 169 e_FM_PCD_PRS_EXCEPTION_SINGLE_ECC /**< Parser single ECC */ 170 } e_FmPcdExceptions; 171 172 173 /**************************************************************************//** 174 @Description Exceptions user callback routine, will be called upon an 175 exception passing the exception identification. 176 177 @Param[in] h_App - User's application descriptor. 178 @Param[in] exception - The exception. 179 *//***************************************************************************/ 180 typedef void (t_FmPcdExceptionCallback) (t_Handle h_App, e_FmPcdExceptions exception); 181 182 /**************************************************************************//** 183 @Description Exceptions user callback routine, will be called upon an exception 184 passing the exception identification. 185 186 @Param[in] h_App - User's application descriptor. 187 @Param[in] exception - The exception. 188 @Param[in] index - id of the relevant source (may be scheme or profile id). 189 *//***************************************************************************/ 190 typedef void (t_FmPcdIdExceptionCallback) ( t_Handle h_App, 191 e_FmPcdExceptions exception, 192 uint16_t index); 193 194 /**************************************************************************//** 195 @Description A callback for enqueuing frame onto a QM queue. 196 197 @Param[in] h_App - User's application descriptor. 198 @Param[in] p_Fd - Frame descriptor for the frame. 199 200 @Return E_OK on success; Error code otherwise. 201 *//***************************************************************************/ 202 typedef t_Error (t_FmPcdQmEnqueueCallback) (t_Handle h_QmArg, void *p_Fd); 203 204 /**************************************************************************//** 205 @Description A structure for Host-Command 206 When using Host command for PCD functionalities, a dedicated port 207 must be used. If this routine is called for a PCD in a single partition 208 environment, or it is the Master partition in a Multi partition 209 environment, The port will be initialized by the PCD driver 210 initialization routine. 211 *//***************************************************************************/ 212 typedef struct t_FmPcdHcParams { 213 uintptr_t portBaseAddr; /**< Host-Command Port Virtual Address of 214 memory mapped registers.*/ 215 uint8_t portId; /**< Host-Command Port Id (0-6 relative 216 to Host-Command/Offline parsing ports) */ 217 uint16_t liodnBase; /**< Irrelevant for P4080 rev 1. LIODN base for this port, to be 218 used together with LIODN offset. */ 219 uint32_t errFqid; /**< Host-Command Port Error Queue Id. */ 220 uint32_t confFqid; /**< Host-Command Port Confirmation queue Id. */ 221 uint32_t qmChannel; /**< Host-Command port - QM-channel dedicated to 222 this port will be used by the FM for dequeue. */ 223 t_FmPcdQmEnqueueCallback *f_QmEnqueue; /**< Call back routine for enqueuing a frame to the QM */ 224 t_Handle h_QmArg; /**< A handle of the QM module */ 225 } t_FmPcdHcParams; 226 227 /**************************************************************************//** 228 @Description The main structure for PCD initialization 229 *//***************************************************************************/ 230 typedef struct t_FmPcdParams { 231 bool prsSupport; /**< TRUE if Parser will be used for any 232 of the FM ports */ 233 bool ccSupport; /**< TRUE if Coarse Classification will be used for any 234 of the FM ports */ 235 bool kgSupport; /**< TRUE if Keygen will be used for any 236 of the FM ports */ 237 bool plcrSupport; /**< TRUE if Policer will be used for any 238 of the FM ports */ 239 t_Handle h_Fm; /**< A handle to the FM module */ 240 uint8_t numOfSchemes; /**< Number of schemes dedicated to this partition. */ 241 bool useHostCommand; /**< Optional for single partition, Mandatory for Multi partition */ 242 t_FmPcdHcParams hc; /**< Relevant only if useHostCommand=TRUE. 243 Host Command parameters. */ 244 245 t_FmPcdExceptionCallback *f_Exception; /**< Relevant for master (or single) partition only: Callback routine 246 to be called of PCD exception */ 247 t_FmPcdIdExceptionCallback *f_ExceptionId; /**< Relevant for master (or single) partition only: Callback routine 248 to be used for a single scheme and 249 profile exceptions */ 250 t_Handle h_App; /**< Relevant for master (or single) partition only: A handle to an 251 application layer object; This handle will 252 be passed by the driver upon calling the above callbacks */ 253 } t_FmPcdParams; 254 255 256 /**************************************************************************//** 257 @Function FM_PCD_Config 258 259 @Description Basic configuration of the PCD module. 260 Creates descriptor for the FM PCD module. 261 262 @Param[in] p_FmPcdParams A structure of parameters for the initialization of PCD. 263 264 @Return A handle to the initialized module. 265 *//***************************************************************************/ 266 t_Handle FM_PCD_Config(t_FmPcdParams *p_FmPcdParams); 267 268 /**************************************************************************//** 269 @Function FM_PCD_Init 270 271 @Description Initialization of the PCD module. 272 273 @Param[in] h_FmPcd - FM PCD module descriptor. 274 275 @Return E_OK on success; Error code otherwise. 276 *//***************************************************************************/ 277 t_Error FM_PCD_Init(t_Handle h_FmPcd); 278 279 /**************************************************************************//** 280 @Function FM_PCD_Free 281 282 @Description Frees all resources that were assigned to FM module. 283 284 Calling this routine invalidates the descriptor. 285 286 @Param[in] h_FmPcd - FM PCD module descriptor. 287 288 @Return E_OK on success; Error code otherwise. 289 *//***************************************************************************/ 290 t_Error FM_PCD_Free(t_Handle h_FmPcd); 291 292 /**************************************************************************//** 293 @Group FM_PCD_advanced_init_grp FM PCD Advanced Configuration Unit 294 295 @Description Configuration functions used to change default values. 296 297 @{ 298 *//***************************************************************************/ 299 300 /**************************************************************************//** 301 @Function FM_PCD_ConfigPlcrNumOfSharedProfiles 302 303 @Description Calling this routine changes the internal driver data base 304 from its default selection of exceptions enablement. 305 [4]. 306 307 @Param[in] h_FmPcd FM PCD module descriptor. 308 @Param[in] numOfSharedPlcrProfiles Number of profiles to 309 be shared between ports on this partition 310 311 @Return E_OK on success; Error code otherwise. 312 *//***************************************************************************/ 313 t_Error FM_PCD_ConfigPlcrNumOfSharedProfiles(t_Handle h_FmPcd, uint16_t numOfSharedPlcrProfiles); 314 315 /**************************************************************************//** 316 @Function FM_PCD_ConfigException 317 318 @Description Calling this routine changes the internal driver data base 319 from its default selection of exceptions enablement. 320 By default all exceptions are enabled. 321 322 @Param[in] h_FmPcd FM PCD module descriptor. 323 @Param[in] exception The exception to be selected. 324 @Param[in] enable TRUE to enable interrupt, FALSE to mask it. 325 326 @Return E_OK on success; Error code otherwise. 327 328 @Cautions Not available for guest partition. 329 *//***************************************************************************/ 330 t_Error FM_PCD_ConfigException(t_Handle h_FmPcd, e_FmPcdExceptions exception, bool enable); 331 332 /**************************************************************************//** 333 @Function FM_PCD_ConfigPlcrAutoRefreshMode 334 335 @Description Calling this routine changes the internal driver data base 336 from its default selection of exceptions enablement. 337 By default autorefresh is enabled. 338 339 @Param[in] h_FmPcd FM PCD module descriptor. 340 @Param[in] enable TRUE to enable, FALSE to disable 341 342 @Return E_OK on success; Error code otherwise. 343 344 @Cautions Not available for guest partition. 345 *//***************************************************************************/ 346 t_Error FM_PCD_ConfigPlcrAutoRefreshMode(t_Handle h_FmPcd, bool enable); 347 348 /**************************************************************************//** 349 @Function FM_PCD_ConfigPrsMaxCycleLimit 350 351 @Description Calling this routine changes the internal data structure for 352 the maximum parsing time from its default value 353 [0]. 354 355 @Param[in] h_FmPcd FM PCD module descriptor. 356 @Param[in] value 0 to disable the mechanism, or new 357 maximum parsing time. 358 359 @Return E_OK on success; Error code otherwise. 360 361 @Cautions Not available for guest partition. 362 *//***************************************************************************/ 363 t_Error FM_PCD_ConfigPrsMaxCycleLimit(t_Handle h_FmPcd,uint16_t value); 364 365 /** @} */ /* end of FM_PCD_advanced_init_grp group */ 366 /** @} */ /* end of FM_PCD_init_grp group */ 367 368 369 /**************************************************************************//** 370 @Group FM_PCD_Runtime_grp FM PCD Runtime Unit 371 372 @Description FM PCD Runtime Unit 373 374 The runtime control allows creation of PCD infrastructure modules 375 such as Network Environment Characteristics, Classification Plan 376 Groups and Coarse Classification Trees. 377 It also allows on-the-fly initialization, modification and removal 378 of PCD modules such as Keygen schemes, coarse classification nodes 379 and Policer profiles. 380 381 382 In order to explain the programming model of the PCD driver interface 383 a few terms should be explained, and will be used below. 384 * Distinction Header - One of the 16 protocols supported by the FM parser, 385 or one of the shim headers (1 or 2). May be a header with a special 386 option (see below). 387 * Interchangeable Headers Group- This is a group of Headers recognized 388 by either one of them. For example, if in a specific context the user 389 chooses to treat IPv4 and IPV6 in the same way, they may create an 390 interchangeable Headers Unit consisting of these 2 headers. 391 * A Distinction Unit - a Distinction Header or an Interchangeable Headers 392 Group. 393 * Header with special option - applies to ethernet, mpls, vlan, ipv4 and 394 ipv6, includes multicast, broadcast and other protocol specific options. 395 In terms of hardware it relates to the options available in the classification 396 plan. 397 * Network Environment Characteristics - a set of Distinction Units that define 398 the total recognizable header selection for a certain environment. This is 399 NOT the list of all headers that will ever appear in a flow, but rather 400 everything that needs distinction in a flow, where distinction is made by keygen 401 schemes and coarse classification action descriptors. 402 403 The PCD runtime modules initialization is done in stages. The first stage after 404 initializing the PCD module itself is to establish a Network Flows Environment 405 Definition. The application may choose to establish one or more such environments. 406 Later, when needed, the application will have to state, for some of its modules, 407 to which single environment it belongs. 408 409 @{ 410 *//***************************************************************************/ 411 412 /**************************************************************************//** 413 @Description A structure for sw parser labels 414 *//***************************************************************************/ 415 typedef struct t_FmPcdPrsLabelParams { 416 uint32_t instructionOffset; /**< SW parser label instruction offset (2 bytes 417 resolution), relative to Parser RAM. */ 418 e_NetHeaderType hdr; /**< The existance of this header will envoke 419 the sw parser code. */ 420 uint8_t indexPerHdr; /**< Normally 0, if more than one sw parser 421 attachments for the same header, use this 422 index to distinguish between them. */ 423 } t_FmPcdPrsLabelParams; 424 425 /**************************************************************************//** 426 @Description A structure for sw parser 427 *//***************************************************************************/ 428 typedef struct t_FmPcdPrsSwParams { 429 bool override; /**< FALSE to invoke a check that nothing else 430 was loaded to this address, including 431 internal patches. 432 TRUE to override any existing code.*/ 433 uint32_t size; /**< SW parser code size */ 434 uint16_t base; /**< SW parser base (in instruction counts! 435 must be larger than 0x20)*/ 436 uint8_t *p_Code; /**< SW parser code */ 437 uint32_t swPrsDataParams[FM_PCD_PRS_NUM_OF_HDRS]; 438 /**< SW parser data (parameters) */ 439 uint8_t numOfLabels; /**< Number of labels for SW parser. */ 440 t_FmPcdPrsLabelParams labelsTable[FM_PCD_PRS_NUM_OF_LABELS]; 441 /**< SW parser labels table, containing 442 numOfLabels entries */ 443 } t_FmPcdPrsSwParams; 444 445 446 /**************************************************************************//** 447 @Function FM_PCD_Enable 448 449 @Description This routine should be called after PCD is initialized for enabling all 450 PCD engines according to their existing configuration. 451 452 @Param[in] h_FmPcd FM PCD module descriptor. 453 454 @Return E_OK on success; Error code otherwise. 455 456 @Cautions Allowed only following FM_PCD_Init() and when PCD is disabled. 457 *//***************************************************************************/ 458 t_Error FM_PCD_Enable(t_Handle h_FmPcd); 459 460 /**************************************************************************//** 461 @Function FM_PCD_Disable 462 463 @Description This routine may be called when PCD is enabled in order to 464 disable all PCD engines. It may be called 465 only when none of the ports in the system are using the PCD. 466 467 @Param[in] h_FmPcd FM PCD module descriptor. 468 469 @Return E_OK on success; Error code otherwise. 470 471 @Cautions Allowed only following FM_PCD_Init() and when PCD is enabled. 472 *//***************************************************************************/ 473 t_Error FM_PCD_Disable(t_Handle h_FmPcd); 474 475 476 /**************************************************************************//** 477 @Function FM_PCD_GetCounter 478 479 @Description Reads one of the FM PCD counters. 480 481 @Param[in] h_FmPcd FM PCD module descriptor. 482 @Param[in] counter The requested counter. 483 484 @Return Counter's current value. 485 486 @Cautions Allowed only following FM_PCD_Init(). 487 Note that it is user's responsibility to call this routine only 488 for enabled counters, and there will be no indication if a 489 disabled counter is accessed. 490 *//***************************************************************************/ 491 uint32_t FM_PCD_GetCounter(t_Handle h_FmPcd, e_FmPcdCounters counter); 492 493 /**************************************************************************//** 494 @Function FM_PCD_PrsLoadSw 495 496 @Description This routine may be called in order to load software parsing code. 497 498 499 @Param[in] h_FmPcd FM PCD module descriptor. 500 @Param[in] p_SwPrs A pointer to a structure of software 501 parser parameters, including the software 502 parser image. 503 504 @Return E_OK on success; Error code otherwise. 505 506 @Cautions Allowed only following FM_PCD_Init() and when PCD is disabled. 507 Not available for guest partition. 508 *//***************************************************************************/ 509 t_Error FM_PCD_PrsLoadSw(t_Handle h_FmPcd, t_FmPcdPrsSwParams *p_SwPrs); 510 511 /**************************************************************************//** 512 @Function FM_PCD_KgSetDfltValue 513 514 @Description Calling this routine sets a global default value to be used 515 by the keygen when parser does not recognize a required 516 field/header. 517 By default default values are 0. 518 519 @Param[in] h_FmPcd FM PCD module descriptor. 520 @Param[in] valueId 0,1 - one of 2 global default values. 521 @Param[in] value The requested default value. 522 523 @Return E_OK on success; Error code otherwise. 524 525 @Cautions Allowed only following FM_PCD_Init() and when PCD is disabled. 526 Not available for guest partition. 527 *//***************************************************************************/ 528 t_Error FM_PCD_KgSetDfltValue(t_Handle h_FmPcd, uint8_t valueId, uint32_t value); 529 530 /**************************************************************************//** 531 @Function FM_PCD_KgSetAdditionalDataAfterParsing 532 533 @Description Calling this routine allows the keygen to access data past 534 the parser finishing point. 535 536 @Param[in] h_FmPcd FM PCD module descriptor. 537 @Param[in] payloadOffset the number of bytes beyond the parser location. 538 539 @Return E_OK on success; Error code otherwise. 540 541 @Cautions Allowed only following FM_PCD_Init() and when PCD is disabled. 542 Not available for guest partition. 543 *//***************************************************************************/ 544 t_Error FM_PCD_KgSetAdditionalDataAfterParsing(t_Handle h_FmPcd, uint8_t payloadOffset); 545 546 /**************************************************************************//** 547 @Function FM_PCD_SetException 548 549 @Description Calling this routine enables/disables PCD interrupts. 550 551 @Param[in] h_FmPcd FM PCD module descriptor. 552 @Param[in] exception The exception to be selected. 553 @Param[in] enable TRUE to enable interrupt, FALSE to mask it. 554 555 @Return E_OK on success; Error code otherwise. 556 557 @Cautions Allowed only following FM_PCD_Init(). 558 Not available for guest partition. 559 *//***************************************************************************/ 560 t_Error FM_PCD_SetException(t_Handle h_FmPcd, e_FmPcdExceptions exception, bool enable); 561 562 /**************************************************************************//** 563 @Function FM_PCD_ModifyCounter 564 565 @Description Sets a value to an enabled counter. Use "0" to reset the counter. 566 567 @Param[in] h_FmPcd FM PCD module descriptor. 568 @Param[in] counter The requested counter. 569 @Param[in] value The requested value to be written into the counter. 570 571 @Return E_OK on success; Error code otherwise. 572 573 @Cautions Allowed only following FM_PCD_Init(). 574 Not available for guest partition. 575 *//***************************************************************************/ 576 t_Error FM_PCD_ModifyCounter(t_Handle h_FmPcd, e_FmPcdCounters counter, uint32_t value); 577 578 /**************************************************************************//** 579 @Function FM_PCD_SetPlcrStatistics 580 581 @Description This routine may be used to enable/disable policer statistics 582 counter. By default the statistics is enabled. 583 584 @Param[in] h_FmPcd FM PCD module descriptor 585 @Param[in] enable TRUE to enable, FALSE to disable. 586 587 @Return E_OK on success; Error code otherwise. 588 589 @Cautions Allowed only following FM_PCD_Init(). 590 Not available for guest partition. 591 *//***************************************************************************/ 592 t_Error FM_PCD_SetPlcrStatistics(t_Handle h_FmPcd, bool enable); 593 594 /**************************************************************************//** 595 @Function FM_PCD_SetPrsStatistics 596 597 @Description Defines whether to gather parser statistics including all ports. 598 599 @Param[in] h_FmPcd FM PCD module descriptor. 600 @Param[in] enable TRUE to enable, FALSE to disable. 601 602 @Return None 603 604 @Cautions Allowed only following FM_PCD_Init(). 605 Not available for guest partition. 606 *//***************************************************************************/ 607 void FM_PCD_SetPrsStatistics(t_Handle h_FmPcd, bool enable); 608 609 /**************************************************************************//** 610 @Function FM_PCD_ForceIntr 611 612 @Description Causes an interrupt event on the requested source. 613 614 @Param[in] h_FmPcd FM PCD module descriptor. 615 @Param[in] exception An exception to be forced. 616 617 @Return E_OK on success; Error code if the exception is not enabled, 618 or is not able to create interrupt. 619 620 @Cautions Allowed only following FM_PCD_Init(). 621 Not available for guest partition. 622 *//***************************************************************************/ 623 t_Error FM_PCD_ForceIntr (t_Handle h_FmPcd, e_FmPcdExceptions exception); 624 625 /**************************************************************************//** 626 @Function FM_PCD_HcTxConf 627 628 @Description This routine should be called to confirm frames that were 629 received on the HC confirmation queue. 630 631 @Param[in] h_FmPcd A handle to an FM PCD Module. 632 @Param[in] p_Fd Frame descriptor of the received frame. 633 634 @Cautions Allowed only following FM_PCD_Init(). Allowed only if 'useHostCommand' 635 option was selected in the initialization. 636 *//***************************************************************************/ 637 void FM_PCD_HcTxConf(t_Handle h_FmPcd, t_DpaaFD *p_Fd); 638 639 #if (defined(DEBUG_ERRORS) && (DEBUG_ERRORS > 0)) 640 /**************************************************************************//** 641 @Function FM_PCD_DumpRegs 642 643 @Description Dumps all PCD registers 644 645 @Param[in] h_FmPcd A handle to an FM PCD Module. 646 647 @Return E_OK on success; Error code otherwise. 648 649 @Cautions Allowed only following FM_PCD_Init(). 650 *//***************************************************************************/ 651 t_Error FM_PCD_DumpRegs(t_Handle h_FmPcd); 652 653 /**************************************************************************//** 654 @Function FM_PCD_KgDumpRegs 655 656 @Description Dumps all PCD KG registers 657 658 @Param[in] h_FmPcd A handle to an FM PCD Module. 659 660 @Return E_OK on success; Error code otherwise. 661 662 @Cautions Allowed only following FM_PCD_Init(). 663 *//***************************************************************************/ 664 t_Error FM_PCD_KgDumpRegs(t_Handle h_FmPcd); 665 666 /**************************************************************************//** 667 @Function FM_PCD_PlcrDumpRegs 668 669 @Description Dumps all PCD Plcr registers 670 671 @Param[in] h_FmPcd A handle to an FM PCD Module. 672 673 @Return E_OK on success; Error code otherwise. 674 675 @Cautions Allowed only following FM_PCD_Init(). 676 *//***************************************************************************/ 677 t_Error FM_PCD_PlcrDumpRegs(t_Handle h_FmPcd); 678 679 /**************************************************************************//** 680 @Function FM_PCD_PlcrProfileDumpRegs 681 682 @Description Dumps all PCD Plcr registers 683 684 @Param[in] h_FmPcd A handle to an FM PCD Module. 685 @Param[in] h_Profile A handle to a profile. 686 687 @Return E_OK on success; Error code otherwise. 688 689 @Cautions Allowed only following FM_PCD_Init(). 690 *//***************************************************************************/ 691 t_Error FM_PCD_PlcrProfileDumpRegs(t_Handle h_FmPcd, t_Handle h_Profile); 692 693 /**************************************************************************//** 694 @Function FM_PCD_PrsDumpRegs 695 696 @Description Dumps all PCD Prs registers 697 698 @Param[in] h_FmPcd A handle to an FM PCD Module. 699 700 @Return E_OK on success; Error code otherwise. 701 702 @Cautions Allowed only following FM_PCD_Init(). 703 *//***************************************************************************/ 704 t_Error FM_PCD_PrsDumpRegs(t_Handle h_FmPcd); 705 706 /**************************************************************************//** 707 @Function FM_PCD_HcDumpRegs 708 709 @Description Dumps HC Port registers 710 711 @Param[in] h_FmPcd A handle to an FM PCD Module. 712 713 @Return E_OK on success; Error code otherwise. 714 715 @Cautions Allowed only following FM_PCD_Init(). 716 *//***************************************************************************/ 717 t_Error FM_PCD_HcDumpRegs(t_Handle h_FmPcd); 718 #endif /* (defined(DEBUG_ERRORS) && ... */ 719 720 721 722 /**************************************************************************//** 723 @Group FM_PCD_Runtime_tree_buildgrp FM PCD Tree building Unit 724 725 @Description FM PCD Runtime Unit 726 727 This group contains routines for setting, deleting and modifying 728 PCD resources, for defining the total PCD tree. 729 @{ 730 *//***************************************************************************/ 731 732 /**************************************************************************//** 733 @Collection Definitions of coarse classification 734 parameters as required by keygen (when coarse classification 735 is the next engine after this scheme). 736 *//***************************************************************************/ 737 #define FM_PCD_MAX_NUM_OF_CC_NODES 255 738 #define FM_PCD_MAX_NUM_OF_CC_TREES 8 739 #define FM_PCD_MAX_NUM_OF_CC_GROUPS 16 740 #define FM_PCD_MAX_NUM_OF_CC_UNITS 4 741 #define FM_PCD_MAX_NUM_OF_KEYS 256 742 #define FM_PCD_MAX_SIZE_OF_KEY 56 743 #define FM_PCD_MAX_NUM_OF_CC_ENTRIES_IN_GRP 16 744 /* @} */ 745 746 /**************************************************************************//** 747 @Collection A set of definitions to allow protocol 748 special option description. 749 *//***************************************************************************/ 750 typedef uint32_t protocolOpt_t; /**< A general type to define a protocol option. */ 751 752 typedef protocolOpt_t ethProtocolOpt_t; /**< Ethernet protocol options. */ 753 #define ETH_BROADCAST 0x80000000 /**< Ethernet Broadcast. */ 754 #define ETH_MULTICAST 0x40000000 /**< Ethernet Multicast. */ 755 756 typedef protocolOpt_t vlanProtocolOpt_t; /**< Vlan protocol options. */ 757 #define VLAN_STACKED 0x20000000 /**< Vlan Stacked. */ 758 759 typedef protocolOpt_t mplsProtocolOpt_t; /**< MPLS protocol options. */ 760 #define MPLS_STACKED 0x10000000 /**< MPLS Stacked. */ 761 762 typedef protocolOpt_t ipv4ProtocolOpt_t; /**< IPv4 protocol options. */ 763 #define IPV4_BROADCAST_1 0x08000000 /**< IPv4 Broadcast. */ 764 #define IPV4_MULTICAST_1 0x04000000 /**< IPv4 Multicast. */ 765 #define IPV4_UNICAST_2 0x02000000 /**< Tunneled IPv4 - Unicast. */ 766 #define IPV4_MULTICAST_BROADCAST_2 0x01000000 /**< Tunneled IPv4 - Broadcast/Multicast. */ 767 768 typedef protocolOpt_t ipv6ProtocolOpt_t; /**< IPv6 protocol options. */ 769 #define IPV6_MULTICAST_1 0x00800000 /**< IPv6 Multicast. */ 770 #define IPV6_UNICAST_2 0x00400000 /**< Tunneled IPv6 - Unicast. */ 771 #define IPV6_MULTICAST_2 0x00200000 /**< Tunneled IPv6 - Multicast. */ 772 /* @} */ 773 774 /**************************************************************************//** 775 @Description A type used for returning the order of the key extraction. 776 each value in this array represents the index of the extraction 777 command as defined by the user in the initialization extraction array. 778 The valid size of this array is the user define number of extractions 779 required (also marked by the second '0' in this array). 780 *//***************************************************************************/ 781 typedef uint8_t t_FmPcdKgKeyOrder [FM_PCD_KG_MAX_NUM_OF_EXTRACTS_PER_KEY]; 782 783 /**************************************************************************//** 784 @Description All PCD engines 785 *//***************************************************************************/ 786 typedef enum e_FmPcdEngine { 787 e_FM_PCD_INVALID = 0, /**< Invalid PCD engine indicated*/ 788 e_FM_PCD_DONE, /**< No PCD Engine indicated */ 789 e_FM_PCD_KG, /**< Keygen indicated */ 790 e_FM_PCD_CC, /**< Coarse classification indicated */ 791 e_FM_PCD_PLCR, /**< Policer indicated */ 792 e_FM_PCD_PRS /**< Parser indicated */ 793 } e_FmPcdEngine; 794 795 /**************************************************************************//** 796 @Description An enum for selecting extraction by header types 797 *//***************************************************************************/ 798 typedef enum e_FmPcdExtractByHdrType { 799 e_FM_PCD_EXTRACT_FROM_HDR, /**< Extract bytes from header */ 800 e_FM_PCD_EXTRACT_FROM_FIELD, /**< Extract bytes from header field */ 801 e_FM_PCD_EXTRACT_FULL_FIELD /**< Extract a full field */ 802 } e_FmPcdExtractByHdrType; 803 804 /**************************************************************************//** 805 @Description An enum for selecting extraction source 806 (when it is not the header) 807 *//***************************************************************************/ 808 typedef enum e_FmPcdExtractFrom { 809 e_FM_PCD_EXTRACT_FROM_FRAME_START, /**< KG & CC: Extract from beginning of frame */ 810 e_FM_PCD_EXTRACT_FROM_DFLT_VALUE, /**< KG only: Extract from a default value */ 811 e_FM_PCD_EXTRACT_FROM_CURR_END_OF_PARSE, /**< KG only: Extract from the point where parsing had finished */ 812 e_FM_PCD_EXTRACT_FROM_KEY, /**< CC only: Field where saved KEY */ 813 e_FM_PCD_EXTRACT_FROM_HASH, /**< CC only: Field where saved HASH */ 814 e_FM_PCD_EXTRACT_FROM_PARSE_RESULT, /**< KG & CC: Extract from the parser result */ 815 e_FM_PCD_EXTRACT_FROM_ENQ_FQID, /**< KG & CC: Extract from enqueue FQID */ 816 e_FM_PCD_EXTRACT_FROM_FLOW_ID /**< CC only: Field where saved Dequeue FQID */ 817 } e_FmPcdExtractFrom; 818 819 /**************************************************************************//** 820 @Description An enum for selecting extraction type 821 *//***************************************************************************/ 822 typedef enum e_FmPcdExtractType { 823 e_FM_PCD_EXTRACT_BY_HDR, /**< Extract according to header */ 824 e_FM_PCD_EXTRACT_NON_HDR, /**< Extract from data that is not the header */ 825 e_FM_PCD_KG_EXTRACT_PORT_PRIVATE_INFO /**< Extract private info as specified by user */ 826 } e_FmPcdExtractType; 827 828 /**************************************************************************//** 829 @Description An enum for selecting a default 830 *//***************************************************************************/ 831 typedef enum e_FmPcdKgExtractDfltSelect { 832 e_FM_PCD_KG_DFLT_GBL_0, /**< Default selection is KG register 0 */ 833 e_FM_PCD_KG_DFLT_GBL_1, /**< Default selection is KG register 1 */ 834 e_FM_PCD_KG_DFLT_PRIVATE_0, /**< Default selection is a per scheme register 0 */ 835 e_FM_PCD_KG_DFLT_PRIVATE_1, /**< Default selection is a per scheme register 1 */ 836 e_FM_PCD_KG_DFLT_ILLEGAL /**< Illegal selection */ 837 } e_FmPcdKgExtractDfltSelect; 838 839 /**************************************************************************//** 840 @Description An enum defining all default groups - 841 each group shares a default value, one of 4 user 842 initialized values. 843 *//***************************************************************************/ 844 typedef enum e_FmPcdKgKnownFieldsDfltTypes { 845 e_FM_PCD_KG_MAC_ADDR, /**< MAC Address */ 846 e_FM_PCD_KG_TCI, /**< TCI field */ 847 e_FM_PCD_KG_ENET_TYPE, /**< ENET Type */ 848 e_FM_PCD_KG_PPP_SESSION_ID, /**< PPP Session id */ 849 e_FM_PCD_KG_PPP_PROTOCOL_ID, /**< PPP Protocol id */ 850 e_FM_PCD_KG_MPLS_LABEL, /**< MPLS label */ 851 e_FM_PCD_KG_IP_ADDR, /**< IP addr */ 852 e_FM_PCD_KG_PROTOCOL_TYPE, /**< Protocol type */ 853 e_FM_PCD_KG_IP_TOS_TC, /**< TOS or TC */ 854 e_FM_PCD_KG_IPV6_FLOW_LABEL, /**< IPV6 flow label */ 855 e_FM_PCD_KG_IPSEC_SPI, /**< IPSEC SPI */ 856 e_FM_PCD_KG_L4_PORT, /**< L4 Port */ 857 e_FM_PCD_KG_TCP_FLAG, /**< TCP Flag */ 858 e_FM_PCD_KG_GENERIC_FROM_DATA, /**< grouping implemented by sw, 859 any data extraction that is not the full 860 field described above */ 861 e_FM_PCD_KG_GENERIC_FROM_DATA_NO_V, /**< grouping implemented by sw, 862 any data extraction without validation */ 863 e_FM_PCD_KG_GENERIC_NOT_FROM_DATA /**< grouping implemented by sw, 864 extraction from parser result or 865 direct use of default value */ 866 } e_FmPcdKgKnownFieldsDfltTypes; 867 868 /**************************************************************************//** 869 @Description enum for defining header index when headers may repeat 870 *//***************************************************************************/ 871 typedef enum e_FmPcdHdrIndex { 872 e_FM_PCD_HDR_INDEX_NONE = 0, /**< used when multiple headers not used, also 873 to specify regular IP (not tunneled). */ 874 e_FM_PCD_HDR_INDEX_1, /**< may be used for VLAN, MPLS, tunneled IP */ 875 e_FM_PCD_HDR_INDEX_2, /**< may be used for MPLS, tunneled IP */ 876 e_FM_PCD_HDR_INDEX_3, /**< may be used for MPLS */ 877 e_FM_PCD_HDR_INDEX_LAST = 0xFF /**< may be used for VLAN, MPLS */ 878 } e_FmPcdHdrIndex; 879 880 /**************************************************************************//** 881 @Description A structure for selcting the policer profile functional type 882 *//***************************************************************************/ 883 typedef enum e_FmPcdProfileTypeSelection { 884 e_FM_PCD_PLCR_PORT_PRIVATE, /**< Port dedicated profile */ 885 e_FM_PCD_PLCR_SHARED /**< Shared profile (shared within partition) */ 886 } e_FmPcdProfileTypeSelection; 887 888 /**************************************************************************//** 889 @Description A structure for selcting the policer profile algorithem 890 *//***************************************************************************/ 891 typedef enum e_FmPcdPlcrAlgorithmSelection { 892 e_FM_PCD_PLCR_PASS_THROUGH, /**< Policer pass through */ 893 e_FM_PCD_PLCR_RFC_2698, /**< Policer algorythm RFC 2698 */ 894 e_FM_PCD_PLCR_RFC_4115 /**< Policer algorythm RFC 4115 */ 895 } e_FmPcdPlcrAlgorithmSelection; 896 897 /**************************************************************************//** 898 @Description A structure for selcting the policer profile color mode 899 *//***************************************************************************/ 900 typedef enum e_FmPcdPlcrColorMode { 901 e_FM_PCD_PLCR_COLOR_BLIND, /**< Color blind */ 902 e_FM_PCD_PLCR_COLOR_AWARE /**< Color aware */ 903 } e_FmPcdPlcrColorMode; 904 905 /**************************************************************************//** 906 @Description A structure for selcting the policer profile color functional mode 907 *//***************************************************************************/ 908 typedef enum e_FmPcdPlcrColor { 909 e_FM_PCD_PLCR_GREEN, /**< Green */ 910 e_FM_PCD_PLCR_YELLOW, /**< Yellow */ 911 e_FM_PCD_PLCR_RED, /**< Red */ 912 e_FM_PCD_PLCR_OVERRIDE /**< Color override */ 913 } e_FmPcdPlcrColor; 914 915 /**************************************************************************//** 916 @Description A structure for selcting the policer profile packet frame length selector 917 *//***************************************************************************/ 918 typedef enum e_FmPcdPlcrFrameLengthSelect { 919 e_FM_PCD_PLCR_L2_FRM_LEN, /**< L2 frame length */ 920 e_FM_PCD_PLCR_L3_FRM_LEN, /**< L3 frame length */ 921 e_FM_PCD_PLCR_L4_FRM_LEN, /**< L4 frame length */ 922 e_FM_PCD_PLCR_FULL_FRM_LEN /**< Full frame length */ 923 } e_FmPcdPlcrFrameLengthSelect; 924 925 /**************************************************************************//** 926 @Description An enum for selecting rollback frame 927 *//***************************************************************************/ 928 typedef enum e_FmPcdPlcrRollBackFrameSelect { 929 e_FM_PCD_PLCR_ROLLBACK_L2_FRM_LEN, /**< Rollback L2 frame length */ 930 e_FM_PCD_PLCR_ROLLBACK_FULL_FRM_LEN /**< Rollback Full frame length */ 931 } e_FmPcdPlcrRollBackFrameSelect; 932 933 /**************************************************************************//** 934 @Description A structure for selcting the policer profile packet or byte mode 935 *//***************************************************************************/ 936 typedef enum e_FmPcdPlcrRateMode { 937 e_FM_PCD_PLCR_BYTE_MODE, /**< Byte mode */ 938 e_FM_PCD_PLCR_PACKET_MODE /**< Packet mode */ 939 } e_FmPcdPlcrRateMode; 940 941 /**************************************************************************//** 942 @Description An enum for defining action of frame 943 *//***************************************************************************/ 944 typedef enum e_FmPcdDoneAction { 945 e_FM_PCD_ENQ_FRAME = 0, /**< Enqueue frame */ 946 e_FM_PCD_DROP_FRAME /**< Drop frame */ 947 } e_FmPcdDoneAction; 948 949 /**************************************************************************//** 950 @Description A structure for selecting the policer counter 951 *//***************************************************************************/ 952 typedef enum e_FmPcdPlcrProfileCounters { 953 e_FM_PCD_PLCR_PROFILE_GREEN_PACKET_TOTAL_COUNTER, /**< Green packets counter */ 954 e_FM_PCD_PLCR_PROFILE_YELLOW_PACKET_TOTAL_COUNTER, /**< Yellow packets counter */ 955 e_FM_PCD_PLCR_PROFILE_RED_PACKET_TOTAL_COUNTER, /**< Red packets counter */ 956 e_FM_PCD_PLCR_PROFILE_RECOLOURED_YELLOW_PACKET_TOTAL_COUNTER, /**< Recolored yellow packets counter */ 957 e_FM_PCD_PLCR_PROFILE_RECOLOURED_RED_PACKET_TOTAL_COUNTER /**< Recolored red packets counter */ 958 } e_FmPcdPlcrProfileCounters; 959 960 /**************************************************************************//** 961 @Description A structure for selecting action 962 *//***************************************************************************/ 963 typedef enum e_FmPcdAction { 964 e_FM_PCD_ACTION_NONE, /**< NONE */ 965 e_FM_PCD_ACTION_EXACT_MATCH, /**< Exact match on the selected extraction*/ 966 e_FM_PCD_ACTION_INDEXED_LOOKUP /**< Indexed lookup on the selected extraction*/ 967 } e_FmPcdAction; 968 969 #if defined(FM_CAPWAP_SUPPORT) 970 /**************************************************************************//** 971 @Description An enum for selecting type of insert manipulation 972 *//***************************************************************************/ 973 typedef enum e_FmPcdManipInsrtType { 974 e_FM_PCD_MANIP_INSRT_NONE = 0, /**< No insertion */ 975 e_FM_PCD_MANIP_INSRT_TO_START_OF_FRAME_INT_FRAME_HDR, /**< Insert internal frame header to start of frame */ 976 e_FM_PCD_MANIP_INSRT_TO_START_OF_FRAME_TEMPLATE /**< Insert template to start of frame*/ 977 } e_FmPcdManipInsrtType; 978 979 /**************************************************************************//** 980 @Description An enum for selecting type of remove manipulation 981 *//***************************************************************************/ 982 typedef enum e_FmPcdManipRmvParamsType { 983 e_FM_PCD_MANIP_RMV_NONE = 0, /**< No remove */ 984 e_FM_PCD_MANIP_RMV_FROM_START_OF_FRAME_TILL_SPECIFIC_LOCATION, /**< Remove from start of frame till (excluding) specified indication */ 985 e_FM_PCD_MANIP_RMV_FROM_START_OF_FRAME_INCLUDE_SPECIFIC_LOCATION, /**< Remove from start of frame till (including) specified indication */ 986 e_FM_PCD_MANIP_RMV_INT_FRAME_HDR /**< Remove internal frame header to start of frame */ 987 } e_FmPcdManipRmvParamsType; 988 989 /**************************************************************************//** 990 @Description An enum for selecting type of location 991 *//***************************************************************************/ 992 typedef enum e_FmPcdManipLocateType { 993 e_FM_PCD_MANIP_LOC_BY_HDR = 0, /**< Locate according to header */ 994 e_FM_PCD_MANIP_LOC_NON_HDR /**< Locate from data that is not the header */ 995 } e_FmPcdManipLocateType; 996 997 /**************************************************************************//** 998 @Description An enum for selecting type of Timeout mode 999 *//***************************************************************************/ 1000 typedef enum e_FmPcdManipReassemTimeOutMode { 1001 e_FM_PCD_MANIP_TIME_OUT_BETWEEN_FRAMES, /**< limits the time of the reassm process from the first frag to the last */ 1002 e_FM_PCD_MANIP_TIME_OUT_BETWEEN_FRAG /**< limits the time of receiving the fragment */ 1003 } e_FmPcdManipReassemTimeOutMode; 1004 1005 /**************************************************************************//** 1006 @Description An enum for selecting type of WaysNumber mode 1007 *//***************************************************************************/ 1008 typedef enum e_FmPcdManipReassemWaysNumber { 1009 e_FM_PCD_MANIP_ONE_WAY_HASH = 1, /**< -------------- */ 1010 e_FM_PCD_MANIP_TWO_WAYS_HASH, /**< -------------- */ 1011 e_FM_PCD_MANIP_THREE_WAYS_HASH, /**< -------------- */ 1012 e_FM_PCD_MANIP_FOUR_WAYS_HASH, /**< four ways hash */ 1013 e_FM_PCD_MANIP_FIVE_WAYS_HASH, /**< -------------- */ 1014 e_FM_PCD_MANIP_SIX_WAYS_HASH, /**< -------------- */ 1015 e_FM_PCD_MANIP_SEVEN_WAYS_HASH, /**< -------------- */ 1016 e_FM_PCD_MANIP_EIGHT_WAYS_HASH /**< eight ways hash*/ 1017 } e_FmPcdManipReassemWaysNumber; 1018 1019 /**************************************************************************//** 1020 @Description An enum for selecting type of statistics mode 1021 *//***************************************************************************/ 1022 typedef enum e_FmPcdStatsType { 1023 e_FM_PCD_STATS_PER_FLOWID = 0 /**< type where flowId used as index for getting statistics */ 1024 } e_FmPcdStatsType; 1025 1026 #endif /* FM_CAPWAP_SUPPORT */ 1027 1028 1029 /**************************************************************************//** 1030 @Description A Union of protocol dependent special options 1031 *//***************************************************************************/ 1032 typedef union u_FmPcdHdrProtocolOpt { 1033 ethProtocolOpt_t ethOpt; /**< Ethernet options */ 1034 vlanProtocolOpt_t vlanOpt; /**< Vlan options */ 1035 mplsProtocolOpt_t mplsOpt; /**< MPLS options */ 1036 ipv4ProtocolOpt_t ipv4Opt; /**< IPv4 options */ 1037 ipv6ProtocolOpt_t ipv6Opt; /**< IPv6 options */ 1038 } u_FmPcdHdrProtocolOpt; 1039 1040 /**************************************************************************//** 1041 @Description A union holding all known protocol fields 1042 *//***************************************************************************/ 1043 typedef union t_FmPcdFields { 1044 headerFieldEth_t eth; /**< eth */ 1045 headerFieldVlan_t vlan; /**< vlan */ 1046 headerFieldLlcSnap_t llcSnap; /**< llcSnap */ 1047 headerFieldPppoe_t pppoe; /**< pppoe */ 1048 headerFieldMpls_t mpls; /**< mpls */ 1049 headerFieldIpv4_t ipv4; /**< ipv4 */ 1050 headerFieldIpv6_t ipv6; /**< ipv6 */ 1051 headerFieldUdp_t udp; /**< udp */ 1052 headerFieldTcp_t tcp; /**< tcp */ 1053 headerFieldSctp_t sctp; /**< sctp */ 1054 headerFieldDccp_t dccp; /**< dccp */ 1055 headerFieldGre_t gre; /**< gre */ 1056 headerFieldMinencap_t minencap; /**< minencap */ 1057 headerFieldIpsecAh_t ipsecAh; /**< ipsecAh */ 1058 headerFieldIpsecEsp_t ipsecEsp; /**< ipsecEsp */ 1059 headerFieldUdpEncapEsp_t udpEncapEsp; /**< udpEncapEsp */ 1060 } t_FmPcdFields; 1061 1062 /**************************************************************************//** 1063 @Description structure for defining header extraction for key generation 1064 *//***************************************************************************/ 1065 typedef struct t_FmPcdFromHdr { 1066 uint8_t size; /**< Size in byte */ 1067 uint8_t offset; /**< Byte offset */ 1068 } t_FmPcdFromHdr; 1069 1070 /**************************************************************************//** 1071 @Description structure for defining field extraction for key generation 1072 *//***************************************************************************/ 1073 typedef struct t_FmPcdFromField { 1074 t_FmPcdFields field; /**< Field selection */ 1075 uint8_t size; /**< Size in byte */ 1076 uint8_t offset; /**< Byte offset */ 1077 } t_FmPcdFromField; 1078 1079 /**************************************************************************//** 1080 @Description A structure of parameters used to define a single network 1081 environment unit. 1082 A unit should be defined if it will later be used by one or 1083 more PCD engines to distinguich between flows. 1084 *//***************************************************************************/ 1085 typedef struct t_FmPcdDistinctionUnit { 1086 struct { 1087 e_NetHeaderType hdr; /**< One of the headers supported by the FM */ 1088 u_FmPcdHdrProtocolOpt opt; /**< only one option !! */ 1089 } hdrs[FM_PCD_MAX_NUM_OF_INTERCHANGEABLE_HDRS]; 1090 } t_FmPcdDistinctionUnit; 1091 1092 /**************************************************************************//** 1093 @Description A structure of parameters used to define the different 1094 units supported by a specific PCD Network Environment 1095 Characteristics module. Each unit represent 1096 a protocol or a group of protocols that may be used later 1097 by the different PCD engined to distinguich between flows. 1098 *//***************************************************************************/ 1099 typedef struct t_FmPcdNetEnvParams { 1100 uint8_t numOfDistinctionUnits; /**< Number of different units to be identified */ 1101 t_FmPcdDistinctionUnit units[FM_PCD_MAX_NUM_OF_DISTINCTION_UNITS]; /**< An array of numOfDistinctionUnits of the 1102 different units to be identified */ 1103 } t_FmPcdNetEnvParams; 1104 1105 /**************************************************************************//** 1106 @Description structure for defining a single extraction action 1107 when creating a key 1108 *//***************************************************************************/ 1109 typedef struct t_FmPcdExtractEntry { 1110 e_FmPcdExtractType type; /**< Extraction type select */ 1111 union { 1112 struct { 1113 e_NetHeaderType hdr; /**< Header selection */ 1114 bool ignoreProtocolValidation; 1115 /**< Ignore protocol validation */ 1116 e_FmPcdHdrIndex hdrIndex; /**< Relevant only for MPLS, VLAN and tunneled 1117 IP. Otherwise should be cleared.*/ 1118 e_FmPcdExtractByHdrType type; /**< Header extraction type select */ 1119 union { 1120 t_FmPcdFromHdr fromHdr; /**< Extract bytes from header parameters */ 1121 t_FmPcdFromField fromField; /**< Extract bytes from field parameters*/ 1122 t_FmPcdFields fullField; /**< Extract full filed parameters*/ 1123 } extractByHdrType; 1124 } extractByHdr; /**< used when type = e_FM_PCD_KG_EXTRACT_BY_HDR */ 1125 struct { 1126 e_FmPcdExtractFrom src; /**< Non-header extraction source */ 1127 e_FmPcdAction action; /**< Relevant for CC Only */ 1128 uint16_t icIndxMask; /**< Relevant only for CC where 1129 action=e_FM_PCD_ACTION_INDEXED_LOOKUP */ 1130 uint8_t offset; /**< Byte offset */ 1131 uint8_t size; /**< Size in byte */ 1132 } extractNonHdr; /**< used when type = e_FM_PCD_KG_EXTRACT_NON_HDR */ 1133 }; 1134 } t_FmPcdExtractEntry; 1135 1136 /**************************************************************************//** 1137 @Description A structure for defining masks for each extracted 1138 field in the key. 1139 *//***************************************************************************/ 1140 typedef struct t_FmPcdKgExtractMask { 1141 uint8_t extractArrayIndex; /**< Index in the extraction array, as initialized by user */ 1142 uint8_t offset; /**< Byte offset */ 1143 uint8_t mask; /**< A byte mask (selected bits will be used) */ 1144 } t_FmPcdKgExtractMask; 1145 1146 /**************************************************************************//** 1147 @Description A structure for defining default selection per groups 1148 of fields 1149 *//***************************************************************************/ 1150 typedef struct t_FmPcdKgExtractDflt { 1151 e_FmPcdKgKnownFieldsDfltTypes type; /**< Default type select*/ 1152 e_FmPcdKgExtractDfltSelect dfltSelect; /**< Default register select */ 1153 } t_FmPcdKgExtractDflt; 1154 1155 /**************************************************************************//** 1156 @Description A structure for defining all parameters needed for 1157 generation a key and using a hash function 1158 *//***************************************************************************/ 1159 typedef struct t_FmPcdKgKeyExtractAndHashParams { 1160 uint32_t privateDflt0; /**< Scheme default register 0 */ 1161 uint32_t privateDflt1; /**< Scheme default register 1 */ 1162 uint8_t numOfUsedExtracts; /**< defines the valid size of the following array */ 1163 t_FmPcdExtractEntry extractArray [FM_PCD_KG_MAX_NUM_OF_EXTRACTS_PER_KEY]; /**< An array of extractions definition. */ 1164 uint8_t numOfUsedDflts; /**< defines the valid size of the following array */ 1165 t_FmPcdKgExtractDflt dflts[FM_PCD_KG_NUM_OF_DEFAULT_GROUPS]; 1166 /**< For each extraction used in this scheme, specify the required 1167 default register to be used when header is not found. 1168 types not specified in this array will get undefined value. */ 1169 uint8_t numOfUsedMasks; /**< defines the valid size of the following array */ 1170 t_FmPcdKgExtractMask masks[FM_PCD_KG_NUM_OF_EXTRACT_MASKS]; 1171 uint8_t hashShift; /**< hash result right shift. Select the 24 bits out of the 64 hash 1172 result. 0 means using the 24 LSB's, otherwise use the 1173 24 LSB's after shifting right.*/ 1174 uint32_t hashDistributionNumOfFqids; /**< must be > 1 and a power of 2. Represents the range 1175 of queues for the key and hash functionality */ 1176 uint8_t hashDistributionFqidsShift; /**< selects the FQID bits that will be effected by the hash */ 1177 bool symmetricHash; /**< TRUE to generate the same hash for frames with swapped source and 1178 destination fields on all layers; If TRUE, driver will check that for 1179 all layers, if SRC extraction is selected, DST extraction must also be 1180 selected, and vice versa. */ 1181 } t_FmPcdKgKeyExtractAndHashParams; 1182 1183 /**************************************************************************//** 1184 @Description A structure of parameters for defining a single 1185 Fqid mask (extracted OR). 1186 *//***************************************************************************/ 1187 typedef struct t_FmPcdKgExtractedOrParams { 1188 e_FmPcdExtractType type; /**< Extraction type select */ 1189 union { 1190 struct { /**< used when type = e_FM_PCD_KG_EXTRACT_BY_HDR */ 1191 e_NetHeaderType hdr; 1192 e_FmPcdHdrIndex hdrIndex; /**< Relevant only for MPLS, VLAN and tunneled 1193 IP. Otherwise should be cleared.*/ 1194 bool ignoreProtocolValidation; 1195 /**< continue extraction even if protocol is not recognized */ 1196 } extractByHdr; 1197 e_FmPcdExtractFrom src; /**< used when type = e_FM_PCD_KG_EXTRACT_NON_HDR */ 1198 }; 1199 uint8_t extractionOffset; /**< Offset for extraction (in bytes). */ 1200 e_FmPcdKgExtractDfltSelect dfltValue; /**< Select register from which extraction is taken if 1201 field not found */ 1202 uint8_t mask; /**< Extraction mask (specified bits are used) */ 1203 uint8_t bitOffsetInFqid; /**< 0-31, Selects which bits of the 24 FQID bits to effect using 1204 the extracted byte; Assume byte is placed as the 8 MSB's in 1205 a 32 bit word where the lower bits 1206 are the FQID; i.e if bitOffsetInFqid=1 than its LSB 1207 will effect the FQID MSB, if bitOffsetInFqid=24 than the 1208 extracted byte will effect the 8 LSB's of the FQID, 1209 if bitOffsetInFqid=31 than the byte's MSB will effect 1210 the FQID's LSB; 0 means - no effect on FQID; 1211 Note that one, and only one of 1212 bitOffsetInFqid or bitOffsetInPlcrProfile must be set (i.e, 1213 extracted byte must effect either FQID or Policer profile).*/ 1214 uint8_t bitOffsetInPlcrProfile; 1215 /**< 0-15, Selects which bits of the 8 policer profile id bits to 1216 effect using the extracted byte; Assume byte is placed 1217 as the 8 MSB's in a 16 bit word where the lower bits 1218 are the policer profile id; i.e if bitOffsetInPlcrProfile=1 1219 than its LSB will effect the profile MSB, if bitOffsetInFqid=8 1220 than the extracted byte will effect the whole policer profile id, 1221 if bitOffsetInFqid=15 than the byte's MSB will effect 1222 the Policer Profile id's LSB; 1223 0 means - no effect on policer profile; Note that one, and only one of 1224 bitOffsetInFqid or bitOffsetInPlcrProfile must be set (i.e, 1225 extracted byte must effect either FQID or Policer profile).*/ 1226 } t_FmPcdKgExtractedOrParams; 1227 1228 /**************************************************************************//** 1229 @Description A structure for configuring scheme counter 1230 *//***************************************************************************/ 1231 typedef struct t_FmPcdKgSchemeCounter { 1232 bool update; /**< FALSE to keep the current counter state 1233 and continue from that point, TRUE to update/reset 1234 the counter when the scheme is written. */ 1235 uint32_t value; /**< If update=TRUE, this value will be written into the 1236 counter. clear this field to reset the counter. */ 1237 } t_FmPcdKgSchemeCounter; 1238 1239 /**************************************************************************//** 1240 @Description A structure for defining policer profile 1241 parameters as required by keygen (when policer 1242 is the next engine after this scheme). 1243 *//***************************************************************************/ 1244 typedef struct t_FmPcdKgPlcrProfile { 1245 bool sharedProfile; /**< TRUE if this profile is shared between ports 1246 (i.e. managed by master partition) May not be TRUE 1247 if profile is after Coarse Classification*/ 1248 bool direct; /**< if TRUE, directRelativeProfileId only selects the profile 1249 id, if FALSE fqidOffsetRelativeProfileIdBase is used 1250 together with fqidOffsetShift and numOfProfiles 1251 parameters, to define a range of profiles from 1252 which the keygen result will determine the 1253 destination policer profile. */ 1254 union { 1255 uint16_t directRelativeProfileId; /**< Used if 'direct' is TRUE, to select policer profile. 1256 This parameter should 1257 indicate the policer profile offset within the port's 1258 policer profiles or SHARED window. */ 1259 struct { 1260 uint8_t fqidOffsetShift; /**< shift of KG results without the qid base */ 1261 uint8_t fqidOffsetRelativeProfileIdBase; 1262 /**< OR of KG results without the qid base 1263 This parameter should indicate the policer profile 1264 offset within the port's policer profiles window or 1265 SHARED window depends on sharedProfile */ 1266 uint8_t numOfProfiles; /**< Range of profiles starting at base */ 1267 } indirectProfile; 1268 } profileSelect; 1269 } t_FmPcdKgPlcrProfile; 1270 1271 /**************************************************************************//** 1272 @Description A structure for CC parameters if CC is the next engine after KG 1273 *//***************************************************************************/ 1274 typedef struct t_FmPcdKgCc { 1275 t_Handle h_CcTree; /**< A handle to a CC Tree */ 1276 uint8_t grpId; /**< CC group id within the CC tree */ 1277 bool plcrNext; /**< TRUE if after CC, in case of data frame, 1278 policing is required. */ 1279 bool bypassPlcrProfileGeneration; 1280 /**< TRUE to bypass keygen policer profile 1281 generation (profile selected is the one selected at 1282 port initialization). */ 1283 t_FmPcdKgPlcrProfile plcrProfile; /**< only if plcrNext=TRUE and bypassPlcrProfileGeneration=FALSE */ 1284 } t_FmPcdKgCc; 1285 1286 /**************************************************************************//** 1287 @Description A structure for initializing a keygen single scheme 1288 *//***************************************************************************/ 1289 typedef struct t_FmPcdKgSchemeParams { 1290 bool modify; /**< TRUE to change an existing scheme */ 1291 union 1292 { 1293 uint8_t relativeSchemeId; /**< if modify=FALSE:Partition relative scheme id */ 1294 t_Handle h_Scheme; /**< if modify=TRUE: a handle of the existing scheme */ 1295 }id; 1296 bool alwaysDirect; /**< This scheme is reached only directly, i.e. no need for match vector. Keygen will ignore 1297 it when matching */ 1298 struct { /**< HL Relevant only if alwaysDirect = FALSE */ 1299 t_Handle h_NetEnv; /**< A handle to the Network environment as returned 1300 by FM_PCD_SetNetEnvCharacteristics() */ 1301 uint8_t numOfDistinctionUnits; /**< Number of netenv units listed in unitIds array */ 1302 uint8_t unitIds[FM_PCD_MAX_NUM_OF_DISTINCTION_UNITS]; 1303 /**< Indexes as passed to SetNetEnvCharacteristics array*/ 1304 } netEnvParams; 1305 bool useHash; /**< use the KG Hash functionality */ 1306 t_FmPcdKgKeyExtractAndHashParams keyExtractAndHashParams; 1307 /**< used only if useHash = TRUE */ 1308 bool bypassFqidGeneration; /**< Normally - FALSE, TRUE to avoid FQID update in the IC; 1309 In such a case FQID after KG will be the default FQID 1310 defined for the relevant port, or the FQID defined by CC 1311 in cases where CC was the previous engine. */ 1312 uint32_t baseFqid; /**< Base FQID; Relevant only if bypassFqidGeneration = FALSE; 1313 If hash is used and an even distribution is expected 1314 according to hashDistributionNumOfFqids, baseFqid must be aligned to 1315 hashDistributionNumOfFqids. */ 1316 uint8_t numOfUsedExtractedOrs; /**< Number of Fqid masks listed in extractedOrs array*/ 1317 t_FmPcdKgExtractedOrParams extractedOrs[FM_PCD_KG_NUM_OF_GENERIC_REGS]; 1318 /**< IN: FM_PCD_KG_NUM_OF_GENERIC_REGS 1319 registers are shared between qidMasks 1320 functionality and some of the extraction 1321 actions; Normally only some will be used 1322 for qidMask. Driver will return error if 1323 resource is full at initialization time. */ 1324 e_FmPcdEngine nextEngine; /**< may be BMI, PLCR or CC */ 1325 union { /**< depends on nextEngine */ 1326 e_FmPcdDoneAction doneAction; /**< Used when next engine is BMI (done) */ 1327 t_FmPcdKgPlcrProfile plcrProfile; /**< Used when next engine is PLCR */ 1328 t_FmPcdKgCc cc; /**< Used when next engine is CC */ 1329 } kgNextEngineParams; 1330 t_FmPcdKgSchemeCounter schemeCounter; /**< A structure of parameters for updating 1331 the scheme counter */ 1332 } t_FmPcdKgSchemeParams; 1333 1334 /**************************************************************************//** 1335 @Description A structure for defining CC params when CC is the 1336 next engine after a CC node. 1337 *//***************************************************************************/ 1338 typedef struct t_FmPcdCcNextCcParams { 1339 t_Handle h_CcNode; /**< A handle of the next CC node */ 1340 } t_FmPcdCcNextCcParams; 1341 1342 /**************************************************************************//** 1343 @Description A structure for defining PLCR params when PLCR is the 1344 next engine after a CC node. 1345 *//***************************************************************************/ 1346 typedef struct t_FmPcdCcNextPlcrParams { 1347 bool overrideParams; /**< TRUE if CC override previously decided parameters*/ 1348 bool sharedProfile; /**< Relevant only if overrideParams=TRUE: 1349 TRUE if this profile is shared between ports */ 1350 uint16_t newRelativeProfileId; /**< Relevant only if overrideParams=TRUE: 1351 (otherwise profile id is taken from keygen); 1352 This parameter should indicate the policer 1353 profile offset within the port's 1354 policer profiles or from SHARED window.*/ 1355 uint32_t newFqid; /**< Relevant only if overrideParams=TRUE: 1356 FQID for enqueuing the frame; 1357 In earlier chips if policer next engine is KEYGEN, 1358 this parameter can be 0, because the KEYGEN 1359 always decides the enqueue FQID.*/ 1360 bool statisticsEn; /**< In the case of TRUE Statistic counter is 1361 incremented for each received frame passed through 1362 this Coarse Classification entry.*/ 1363 } t_FmPcdCcNextPlcrParams; 1364 1365 /**************************************************************************//** 1366 @Description A structure for defining enqueue params when BMI is the 1367 next engine after a CC node. 1368 *//***************************************************************************/ 1369 typedef struct t_FmPcdCcNextEnqueueParams { 1370 1371 e_FmPcdDoneAction action; /**< Action - when next engine is BMI (done) */ 1372 bool overrideFqid; /**< TRUE if CC override previously decided Fqid(by Keygen), 1373 relevant if action = e_FM_PCD_ENQ_FRAME */ 1374 uint32_t newFqid; /**< Valid if overrideFqid=TRUE, FQID for enqueuing the frame 1375 (otherwise FQID is taken from keygen), 1376 relevant if action = e_FM_PCD_ENQ_FRAME*/ 1377 bool statisticsEn; /**< In the case of TRUE Statistic counter is 1378 incremented for each received frame passed through 1379 this Coarse Classification entry.*/ 1380 } t_FmPcdCcNextEnqueueParams; 1381 1382 /**************************************************************************//** 1383 @Description A structure for defining KG params when KG is the 1384 next engine after a CC node. 1385 *//***************************************************************************/ 1386 typedef struct t_FmPcdCcNextKgParams { 1387 bool overrideFqid; /**< TRUE if CC override previously decided Fqid (by keygen), 1388 Note - this parameters irrelevant for earlier chips*/ 1389 uint32_t newFqid; /**< Valid if overrideFqid=TRUE, FQID for enqueuing the frame 1390 (otherwise FQID is taken from keygen), 1391 Note - this parameters irrelevant for earlier chips*/ 1392 t_Handle h_DirectScheme; /**< Direct scheme handle to go to. */ 1393 bool statisticsEn; /**< In the case of TRUE Statistic counter is 1394 incremented for each received frame passed through 1395 this Coarse Classification entry.*/ 1396 } t_FmPcdCcNextKgParams; 1397 1398 /**************************************************************************//** 1399 @Description A structure for defining next engine params after a CC node. 1400 *//***************************************************************************/ 1401 typedef struct t_FmPcdCcNextEngineParams { 1402 e_FmPcdEngine nextEngine; /**< User has to initialize parameters 1403 according to nextEngine definition */ 1404 union { 1405 t_FmPcdCcNextCcParams ccParams; /**< Parameters in case next engine is CC */ 1406 t_FmPcdCcNextPlcrParams plcrParams; /**< Parameters in case next engine is PLCR */ 1407 t_FmPcdCcNextEnqueueParams enqueueParams; /**< Parameters in case next engine is BMI */ 1408 t_FmPcdCcNextKgParams kgParams; /**< Parameters in case next engine is KG */ 1409 } params; 1410 #if defined(FM_CAPWAP_SUPPORT) 1411 t_Handle h_Manip; /**< Handler to headerManip. 1412 Relevant if next engine of the type result 1413 (e_FM_PCD_PLCR, e_FM_PCD_KG, e_FM_PCD_DONE) */ 1414 #endif /* defined(FM_CAPWAP_SUPPORT) || ... */ 1415 } t_FmPcdCcNextEngineParams; 1416 1417 /**************************************************************************//** 1418 @Description A structure for defining a single CC Key parameters 1419 *//***************************************************************************/ 1420 typedef struct t_FmPcdCcKeyParams { 1421 uint8_t *p_Key; /**< pointer to the key of the size defined in keySize*/ 1422 uint8_t *p_Mask; /**< pointer to the Mask per key of the size defined 1423 in keySize. p_Key and p_Mask (if defined) has to be 1424 of the same size defined in the keySize */ 1425 t_FmPcdCcNextEngineParams ccNextEngineParams; 1426 /**< parameters for the next for the defined Key in 1427 the p_Key */ 1428 } t_FmPcdCcKeyParams; 1429 1430 /**************************************************************************//** 1431 @Description A structure for defining CC Keys parameters 1432 *//***************************************************************************/ 1433 typedef struct t_KeysParams { 1434 uint8_t numOfKeys; /**< Number Of relevant Keys */ 1435 uint8_t keySize; /**< size of the key - in the case of the extraction of 1436 the type FULL_FIELD keySize has to be as standard size of the relevant 1437 key. In the another type of extraction keySize has to be as size of extraction. 1438 In the case of action = e_FM_PCD_ACTION_INDEXED_LOOKUP the size of keySize has to be 2*/ 1439 t_FmPcdCcKeyParams keyParams[FM_PCD_MAX_NUM_OF_KEYS]; 1440 /**< it's array with numOfKeys entries each entry in 1441 the array of the type t_FmPcdCcKeyParams */ 1442 t_FmPcdCcNextEngineParams ccNextEngineParamsForMiss; 1443 /**< parameters for the next step of 1444 unfound (or undefined) key . Not relevant in the case 1445 of action = e_FM_PCD_ACTION_INDEXED_LOOKUP*/ 1446 } t_KeysParams; 1447 1448 /**************************************************************************//** 1449 @Description A structure for defining the CC node params 1450 *//***************************************************************************/ 1451 typedef struct t_FmPcdCcNodeParams { 1452 t_FmPcdExtractEntry extractCcParams; /**< params which defines extraction parameters */ 1453 t_KeysParams keysParams; /**< params which defines Keys parameters of the 1454 extraction defined in extractCcParams */ 1455 } t_FmPcdCcNodeParams; 1456 1457 /**************************************************************************//** 1458 @Description A structure for defining each CC tree group in term of 1459 NetEnv units and the action to be taken in each case. 1460 the unitIds list must be in order from lower to higher indexes. 1461 1462 t_FmPcdCcNextEngineParams is a list of 2^numOfDistinctionUnits 1463 structures where each defines the next action to be taken for 1464 each units combination. for example: 1465 numOfDistinctionUnits = 2 1466 unitIds = {1,3} 1467 p_NextEnginePerEntriesInGrp[0] = t_FmPcdCcNextEngineParams for the case that 1468 unit 1 - not found; unit 3 - not found; 1469 p_NextEnginePerEntriesInGrp[1] = t_FmPcdCcNextEngineParams for the case that 1470 unit 1 - not found; unit 3 - found; 1471 p_NextEnginePerEntriesInGrp[2] = t_FmPcdCcNextEngineParams for the case that 1472 unit 1 - found; unit 3 - not found; 1473 p_NextEnginePerEntriesInGrp[3] = t_FmPcdCcNextEngineParams for the case that 1474 unit 1 - found; unit 3 - found; 1475 *//***************************************************************************/ 1476 typedef struct t_FmPcdCcGrpParams { 1477 uint8_t numOfDistinctionUnits; /**< up to 4 */ 1478 uint8_t unitIds[FM_PCD_MAX_NUM_OF_CC_UNITS]; 1479 /**< Indexes of the units as defined in 1480 FM_PCD_SetNetEnvCharacteristics() */ 1481 t_FmPcdCcNextEngineParams nextEnginePerEntriesInGrp[FM_PCD_MAX_NUM_OF_CC_ENTRIES_IN_GRP]; 1482 /**< Max size is 16 - if only one group used */ 1483 } t_FmPcdCcGrpParams; 1484 1485 /**************************************************************************//** 1486 @Description A structure for defining the CC tree groups 1487 *//***************************************************************************/ 1488 typedef struct t_FmPcdCcTreeParams { 1489 t_Handle h_NetEnv; /**< A handle to the Network environment as returned 1490 by FM_PCD_SetNetEnvCharacteristics() */ 1491 uint8_t numOfGrps; /**< Number of CC groups within the CC tree */ 1492 t_FmPcdCcGrpParams ccGrpParams[FM_PCD_MAX_NUM_OF_CC_GROUPS]; /**< Parameters for each group. */ 1493 } t_FmPcdCcTreeParams; 1494 1495 /**************************************************************************//** 1496 @Description A structure for defining parameters for byte rate 1497 *//***************************************************************************/ 1498 typedef struct t_FmPcdPlcrByteRateModeParams { 1499 e_FmPcdPlcrFrameLengthSelect frameLengthSelection; /**< Frame length selection */ 1500 e_FmPcdPlcrRollBackFrameSelect rollBackFrameSelection; /**< relevant option only e_FM_PCD_PLCR_L2_FRM_LEN, 1501 e_FM_PCD_PLCR_FULL_FRM_LEN */ 1502 } t_FmPcdPlcrByteRateModeParams; 1503 1504 /**************************************************************************//** 1505 @Description A structure for selcting the policer profile RFC-2698 or 1506 RFC-4115 parameters 1507 *//***************************************************************************/ 1508 typedef struct t_FmPcdPlcrNonPassthroughAlgParams { 1509 e_FmPcdPlcrRateMode rateMode; /**< Byte / Packet */ 1510 t_FmPcdPlcrByteRateModeParams byteModeParams; /**< Valid for Byte NULL for Packet */ 1511 uint32_t comittedInfoRate; /**< KBits/Sec or Packets/Sec */ 1512 uint32_t comittedBurstSize; /**< Bytes/Packets */ 1513 uint32_t peakOrAccessiveInfoRate; /**< KBits/Sec or Packets/Sec */ 1514 uint32_t peakOrAccessiveBurstSize; /**< Bytes/Packets */ 1515 } t_FmPcdPlcrNonPassthroughAlgParams; 1516 1517 /**************************************************************************//** 1518 @Description A union for defining Policer next engine parameters 1519 *//***************************************************************************/ 1520 typedef union u_FmPcdPlcrNextEngineParams { 1521 e_FmPcdDoneAction action; /**< Action - when next engine is BMI (done) */ 1522 t_Handle h_Profile; /**< Policer profile handle - used when next engine 1523 is PLCR, must be a SHARED profile */ 1524 t_Handle h_DirectScheme; /**< Direct scheme select - when next engine is Keygen */ 1525 } u_FmPcdPlcrNextEngineParams; 1526 1527 /**************************************************************************//** 1528 @Description A structure for selecting the policer profile entry parameters 1529 *//***************************************************************************/ 1530 typedef struct t_FmPcdPlcrProfileParams { 1531 bool modify; /**< TRUE to change an existing profile */ 1532 union { 1533 struct { 1534 e_FmPcdProfileTypeSelection profileType; /**< Type of policer profile */ 1535 t_Handle h_FmPort; /**< Relevant for per-port profiles only */ 1536 uint16_t relativeProfileId; /**< Profile id - relative to shared group or to port */ 1537 } newParams; /**< use it when modify=FALSE */ 1538 t_Handle h_Profile; /**< A handle to a profile - use it when modify=TRUE */ 1539 } id; 1540 e_FmPcdPlcrAlgorithmSelection algSelection; /**< Profile Algorithm PASS_THROUGH, RFC_2698, RFC_4115 */ 1541 e_FmPcdPlcrColorMode colorMode; /**< COLOR_BLIND, COLOR_AWARE */ 1542 1543 union { 1544 e_FmPcdPlcrColor dfltColor; /**< For Color-Blind Pass-Through mode. the policer will re-color 1545 any incoming packet with the default value. */ 1546 e_FmPcdPlcrColor override; /**< For Color-Aware modes. The profile response to a 1547 pre-color value of 2'b11. */ 1548 } color; 1549 1550 t_FmPcdPlcrNonPassthroughAlgParams nonPassthroughAlgParams; /**< RFC2698 or RFC4115 params */ 1551 1552 e_FmPcdEngine nextEngineOnGreen; /**< Green next engine type */ 1553 u_FmPcdPlcrNextEngineParams paramsOnGreen; /**< Green next engine params */ 1554 1555 e_FmPcdEngine nextEngineOnYellow; /**< Yellow next engine type */ 1556 u_FmPcdPlcrNextEngineParams paramsOnYellow; /**< Yellow next engine params */ 1557 1558 e_FmPcdEngine nextEngineOnRed; /**< Red next engine type */ 1559 u_FmPcdPlcrNextEngineParams paramsOnRed; /**< Red next engine params */ 1560 1561 bool trapProfileOnFlowA; /**< Trap on flow A */ 1562 bool trapProfileOnFlowB; /**< Trap on flow B */ 1563 bool trapProfileOnFlowC; /**< Trap on flow C */ 1564 } t_FmPcdPlcrProfileParams; 1565 1566 #if defined(FM_CAPWAP_SUPPORT) 1567 /**************************************************************************//** 1568 @Description A structure for selecting the location of manipulation 1569 *//***************************************************************************/ 1570 typedef struct t_FmPcdManipLocationParams { 1571 e_FmPcdManipLocateType type; /**< location of manipulation type select */ 1572 struct { /**< used when type = e_FM_PCD_MANIP_BY_HDR */ 1573 e_NetHeaderType hdr; /**< Header selection */ 1574 e_FmPcdHdrIndex hdrIndex; /**< Relevant only for MPLS, VLAN and tunneled 1575 IP. Otherwise should be cleared. */ 1576 bool byField; /**< TRUE if the location of manipulation is according to some field in the specific header*/ 1577 t_FmPcdFields fullField; /**< Relevant only when byField = TRUE: Extract field */ 1578 } manipByHdr; 1579 } t_FmPcdManipLocationParams; 1580 1581 /**************************************************************************//** 1582 @Description structure for defining insert manipulation 1583 of the type e_FM_PCD_MANIP_INSRT_TO_START_OF_FRAME_TEMPLATE 1584 *//***************************************************************************/ 1585 typedef struct t_FmPcdManipInsrtByTemplateParams { 1586 uint8_t size; /**< size of insert template to the start of the frame. */ 1587 uint8_t hdrTemplate[FM_PCD_MAX_MANIP_INSRT_TEMPLATE_SIZE]; 1588 /**< array of the insertion template. */ 1589 1590 bool modifyOuterIp; /**< TRUE if user want to modify some fields in outer IP. */ 1591 struct { 1592 uint16_t ipOuterOffset; /**< offset of outer IP in the insert template, relevant if modifyOuterIp = TRUE.*/ 1593 uint16_t dscpEcn; /**< value of dscpEcn in IP outer, relevant if modifyOuterIp = TRUE. 1594 in IPV4 dscpEcn only byte - it has to be adjusted to the right*/ 1595 bool udpPresent; /**< TRUE if UDP is present in the insert template, relevant if modifyOuterIp = TRUE.*/ 1596 uint8_t udpOffset; /**< offset in the insert template of UDP, relevant if modifyOuterIp = TRUE and udpPresent=TRUE.*/ 1597 uint8_t ipIdentGenId; /**< Used by FMan-CTRL to calculate IP-identification field,relevant if modifyOuterIp = TRUE.*/ 1598 bool recalculateLength; /**< TRUE if recalculate length has to be performed due to the engines in the path which can change the frame later, relevant if modifyOuterIp = TRUE.*/ 1599 struct { 1600 uint8_t blockSize; /**< The CAAM block-size; Used by FMan-CTRL to calculate the IP-total-len field.*/ 1601 uint8_t extraBytesAddedAlignedToBlockSize; /**< Used by FMan-CTRL to calculate the IP-total-len field and UDP length*/ 1602 uint8_t extraBytesAddedNotAlignedToBlockSize;/**< Used by FMan-CTRL to calculate the IP-total-len field and UDP length.*/ 1603 } recalculateLengthParams; /**< recalculate length parameters - relevant if modifyOuterIp = TRUE and recalculateLength = TRUE */ 1604 } modifyOuterIpParams; /**< Outer IP modification parameters - ignored if modifyOuterIp is FALSE */ 1605 1606 bool modifyOuterVlan; /**< TRUE if user wants to modify vpri field in the outer VLAN header*/ 1607 struct { 1608 uint8_t vpri; /**< value of vpri, relevant if modifyOuterVlan = TRUE 1609 vpri only 3 bits, it has to be adjusted to the right*/ 1610 } modifyOuterVlanParams; 1611 } t_FmPcdManipInsrtByTemplateParams; 1612 #endif /* defined(FM_CAPWAP_SUPPORT) || ... */ 1613 1614 1615 #ifdef FM_CAPWAP_SUPPORT 1616 /**************************************************************************//** 1617 @Description structure for defining CAPWAP fragmentation 1618 *//***************************************************************************/ 1619 typedef struct t_CapwapFragmentationParams { 1620 uint16_t sizeForFragmentation; /**< if length of the frame is greater than this value, CAPWAP fragmentation will be executed.*/ 1621 bool headerOptionsCompr; /**< TRUE - first fragment include the CAPWAP header options field, 1622 and all other fragments exclude the CAPWAP options field, 1623 FALSE - all fragments include CAPWAP header options field. */ 1624 } t_CapwapFragmentationParams; 1625 1626 /**************************************************************************//** 1627 @Description structure for defining CAPWAP Re-assembly 1628 *//***************************************************************************/ 1629 typedef struct t_CapwapReassemblyParams { 1630 uint16_t maxNumFramesInProcess; /**< Number of frames which can be processed by Reassembly in the same time. 1631 It has to be power of 2. 1632 In the case numOfFramesPerHashEntry == e_FM_PCD_MANIP_FOUR_WAYS_HASH, 1633 maxNumFramesInProcess has to be in the range of 4 - 512, 1634 In the case numOfFramesPerHashEntry == e_FM_PCD_MANIP_EIGHT_WAYS_HASH, 1635 maxNumFramesInProcess has to be in the range of 8 - 2048 */ 1636 bool haltOnDuplicationFrag; /**< In the case of TRUE, Reassembly process halted due to duplicated fragment, 1637 and all processed fragments passed for enqueue with error indication. 1638 In the case of FALSE, only duplicated fragment passed for enqueue with error indication */ 1639 1640 e_FmPcdManipReassemTimeOutMode timeOutMode; /**< Expiration delay initialized by Reassembly process */ 1641 uint32_t fqidForTimeOutFrames; /**< Fqid in which time out frames will enqueue during Time Out Process */ 1642 uint32_t timeoutRoutineRequestTime; 1643 /**< Represents the time interval in microseconds between consecutive 1644 timeout routine requests It has to be power of 2. */ 1645 uint32_t timeoutThresholdForReassmProcess; 1646 /**< Represents the time interval in microseconds which defines 1647 if opened frame (at least one fragment was processed but not all the fragments)is found as too old*/ 1648 1649 e_FmPcdManipReassemWaysNumber numOfFramesPerHashEntry;/**< Number of frames per hash entry needed for reassembly process */ 1650 } t_CapwapReassemblyParams; 1651 #endif /* FM_CAPWAP_SUPPORT */ 1652 1653 1654 #if defined(FM_CAPWAP_SUPPORT) 1655 /**************************************************************************//** 1656 @Description structure for defining fragmentation/reassembly 1657 *//***************************************************************************/ 1658 typedef struct t_FmPcdManipFragOrReasmParams { 1659 bool frag; /**< TRUE if using the structure for fragmentation, 1660 otherwise this structure is used for reassembly */ 1661 uint8_t extBufPoolIndx; /**< Index of the buffer pool ID which was configured for port 1662 and can be used for manipulation; 1663 NOTE: This field is relevant only for CAPWAP fragmentation 1664 and reassembly */ 1665 e_NetHeaderType hdr; /**< Header selection */ 1666 union { 1667 #ifdef FM_CAPWAP_SUPPORT 1668 t_CapwapFragmentationParams capwapFragParams; /**< Structure for CAPWAP fragmentation, relevant if frag = TRUE, hdr = HEADER_TYPE_CAPWAP */ 1669 t_CapwapReassemblyParams capwapReasmParams; /**< Structure for CAPWAP reassembly, relevant if frag = FALSE, hdr = HEADER_TYPE_CAPWAP */ 1670 #endif /* FM_CAPWAP_SUPPORT */ 1671 }; 1672 } t_FmPcdManipFragOrReasmParams; 1673 1674 /**************************************************************************//** 1675 @Description structure for defining insert manipulation 1676 *//***************************************************************************/ 1677 typedef struct t_FmPcdManipInsrtParams { 1678 e_FmPcdManipInsrtType type; /**< Type of insert manipulation */ 1679 union { 1680 t_FmPcdManipInsrtByTemplateParams insrtByTemplateParams; 1681 /**< parameters for insert manipulation, relevant if 1682 type = e_FM_PCD_MANIP_INSRT_TO_START_OF_FRAME_TEMPLATE */ 1683 }; 1684 } t_FmPcdManipInsrtParams; 1685 1686 /**************************************************************************//** 1687 @Description structure for defining remove manipulation 1688 *//***************************************************************************/ 1689 typedef struct t_FmPcdManipRmvParams { 1690 e_FmPcdManipRmvParamsType type; /**< Type of remove manipulation */ 1691 t_FmPcdManipLocationParams rmvSpecificLocationParams; 1692 /**< Specified location of remove manipulation; 1693 This params should be initialized in cases: 1694 - e_FM_PCD_MANIP_RMV_FROM_START_OF_FRAME_TILL_SPECIFIC_LOCATION 1695 - e_FM_PCD_MANIP_RMV_FROM_START_OF_FRAME_INCLUDE_SPECIFIC_LOCATION */ 1696 } t_FmPcdManipRmvParams; 1697 1698 /**************************************************************************//** 1699 @Description structure for defining manipulation 1700 *//***************************************************************************/ 1701 typedef struct t_FmPcdManipParams { 1702 bool rmv; /**< TRUE, if defined remove manipulation */ 1703 t_FmPcdManipRmvParams rmvParams; /**< Parameters for remove manipulation, relevant if rmv = TRUE */ 1704 1705 bool insrt; /**< TRUE, if defined insert manipulation */ 1706 t_FmPcdManipInsrtParams insrtParams; /**< Parameters for insert manipulation, relevant if insrt = TRUE */ 1707 1708 bool fragOrReasm; /**< TRUE, if defined fragmentation/reassembly manipulation */ 1709 t_FmPcdManipFragOrReasmParams fragOrReasmParams; /**< Parameters for fragmentation/reassembly manipulation, relevant if fragOrReasm = TRUE */ 1710 1711 /**< General parameters */ 1712 bool treatFdStatusFieldsAsErrors; 1713 /**< Set to TRUE when the port that is using this manip is chained 1714 to SEC (i.e. the traffic was forwarded from SEC) */ 1715 } t_FmPcdManipParams; 1716 1717 /**************************************************************************//** 1718 @Description structure for defining statistics node 1719 *//***************************************************************************/ 1720 typedef struct t_FmPcdStatsParams { 1721 e_FmPcdStatsType type; /**< type of statistics node */ 1722 } t_FmPcdStatsParams; 1723 #endif /* defined(FM_CAPWAP_SUPPORT) || ... */ 1724 1725 1726 /**************************************************************************//** 1727 @Function FM_PCD_SetNetEnvCharacteristics 1728 1729 @Description Define a set of Network Environment Characteristics. 1730 When setting an environment it is important to understand its 1731 application. It is not meant to describe the flows that will run 1732 on the ports using this environment, but what the user means TO DO 1733 with the PCD mechanisms in order to parse-classify-distribute those 1734 frames. 1735 By specifying a distinction unit, the user means it would use that option 1736 for distinction between frames at either a keygen scheme keygen or a coarse 1737 classification action descriptor. Using interchangeable headers to define a 1738 unit means that the user is indifferent to which of the interchangeable 1739 headers is present in the frame, and they want the distinction to be based 1740 on the presence of either one of them. 1741 Depending on context, there are limitations to the use of environments. A 1742 port using the PCD functionality is bound to an environment. Some or even 1743 all ports may share an environment but also an environment per port is 1744 possible. When initializing a scheme, a classification plan group (see below), 1745 or a coarse classification tree, one of the initialized environments must be 1746 stated and related to. When a port is bound to a scheme, a classification 1747 plan group, or a coarse classification tree, it MUST be bound to the same 1748 environment. 1749 The different PCD modules, may relate (for flows definition) ONLY on 1750 distinction units as defined by their environment. When initializing a 1751 scheme for example, it may not choose to select IPV4 as a match for 1752 recognizing flows unless it was defined in the relating environment. In 1753 fact, to guide the user through the configuration of the PCD, each module's 1754 characterization in terms of flows is not done using protocol names, but using 1755 environment indexes. 1756 In terms of HW implementation, the list of distinction units sets the LCV vectors 1757 and later used for match vector, classification plan vectors and coarse classification 1758 indexing. 1759 1760 @Param[in] h_FmPcd FM PCD module descriptor. 1761 @Param[in] p_NetEnvParams A structure of parameters for the initialization of 1762 the network environment. 1763 1764 @Return A handle to the initialized object on success; NULL code otherwise. 1765 1766 @Cautions Allowed only following FM_PCD_Init(). 1767 *//***************************************************************************/ 1768 t_Handle FM_PCD_SetNetEnvCharacteristics(t_Handle h_FmPcd, t_FmPcdNetEnvParams *p_NetEnvParams); 1769 1770 /**************************************************************************//** 1771 @Function FM_PCD_DeleteNetEnvCharacteristics 1772 1773 @Description Deletes a set of Network Environment Characteristics. 1774 1775 @Param[in] h_FmPcd FM PCD module descriptor. 1776 @Param[in] h_NetEnv A handle to the Network environment. 1777 1778 @Return E_OK on success; Error code otherwise. 1779 *//***************************************************************************/ 1780 t_Error FM_PCD_DeleteNetEnvCharacteristics(t_Handle h_FmPcd, t_Handle h_NetEnv); 1781 1782 /**************************************************************************//** 1783 @Function FM_PCD_KgSetScheme 1784 1785 @Description Initializing or modifying and enabling a scheme for the keygen. 1786 This routine should be called for adding or modifying a scheme. 1787 When a scheme needs modifying, the API requires that it will be 1788 rewritten. In such a case 'modify' should be TRUE. If the 1789 routine is called for a valid scheme and 'modify' is FALSE, 1790 it will return error. 1791 1792 @Param[in] h_FmPcd A handle to an FM PCD Module. 1793 @Param[in,out] p_Scheme A structure of parameters for defining the scheme 1794 1795 @Return A handle to the initialized scheme on success; NULL code otherwise. 1796 1797 @Cautions Allowed only following FM_PCD_Init(). 1798 *//***************************************************************************/ 1799 t_Handle FM_PCD_KgSetScheme (t_Handle h_FmPcd, 1800 t_FmPcdKgSchemeParams *p_Scheme); 1801 1802 /**************************************************************************//** 1803 @Function FM_PCD_KgDeleteScheme 1804 1805 @Description Deleting an initialized scheme. 1806 1807 @Param[in] h_FmPcd A handle to an FM PCD Module. 1808 @Param[in] h_Scheme scheme handle as returned by FM_PCD_KgSetScheme 1809 1810 @Return E_OK on success; Error code otherwise. 1811 @Cautions Allowed only following FM_PCD_Init(). 1812 *//***************************************************************************/ 1813 t_Error FM_PCD_KgDeleteScheme(t_Handle h_FmPcd, t_Handle h_Scheme); 1814 1815 /**************************************************************************//** 1816 @Function FM_PCD_KgGetSchemeCounter 1817 1818 @Description Reads scheme packet counter. 1819 1820 @Param[in] h_FmPcd FM PCD module descriptor. 1821 @Param[in] h_Scheme scheme handle as returned by FM_PCD_KgSetScheme. 1822 1823 @Return Counter's current value. 1824 1825 @Cautions Allowed only following FM_PCD_Init(). 1826 *//***************************************************************************/ 1827 uint32_t FM_PCD_KgGetSchemeCounter(t_Handle h_FmPcd, t_Handle h_Scheme); 1828 1829 /**************************************************************************//** 1830 @Function FM_PCD_KgSetSchemeCounter 1831 1832 @Description Writes scheme packet counter. 1833 1834 @Param[in] h_FmPcd FM PCD module descriptor. 1835 @Param[in] h_Scheme scheme handle as returned by FM_PCD_KgSetScheme. 1836 @Param[in] value New scheme counter value - typically '0' for 1837 resetting the counter. 1838 @Return E_OK on success; Error code otherwise. 1839 1840 @Cautions Allowed only following FM_PCD_Init(). 1841 *//***************************************************************************/ 1842 t_Error FM_PCD_KgSetSchemeCounter(t_Handle h_FmPcd, t_Handle h_Scheme, uint32_t value); 1843 1844 /**************************************************************************//** 1845 @Function FM_PCD_CcBuildTree 1846 1847 @Description This routine must be called to define a complete coarse 1848 classification tree. This is the way to define coarse 1849 classification to a certain flow - the keygen schemes 1850 may point only to trees defined in this way. 1851 1852 @Param[in] h_FmPcd FM PCD module descriptor. 1853 @Param[in] p_FmPcdCcTreeParams A structure of parameters to define the tree. 1854 1855 @Return A handle to the initialized object on success; NULL code otherwise. 1856 1857 @Cautions Allowed only following FM_PCD_Init(). 1858 *//***************************************************************************/ 1859 t_Handle FM_PCD_CcBuildTree (t_Handle h_FmPcd, 1860 t_FmPcdCcTreeParams *p_FmPcdCcTreeParams); 1861 1862 /**************************************************************************//** 1863 @Function FM_PCD_CcDeleteTree 1864 1865 @Description Deleting an built tree. 1866 1867 @Param[in] h_FmPcd A handle to an FM PCD Module. 1868 @Param[in] h_CcTree A handle to a CC tree. 1869 1870 @Cautions Allowed only following FM_PCD_Init(). 1871 *//***************************************************************************/ 1872 t_Error FM_PCD_CcDeleteTree(t_Handle h_FmPcd, t_Handle h_CcTree); 1873 1874 /**************************************************************************//** 1875 @Function FM_PCD_CcSetNode 1876 1877 @Description This routine should be called for each CC (coarse classification) 1878 node. The whole CC tree should be built bottom up so that each 1879 node points to already defined nodes. 1880 1881 @Param[in] h_FmPcd FM PCD module descriptor. 1882 @Param[in] p_CcNodeParam A structure of parameters defining the CC node 1883 1884 @Return A handle to the initialized object on success; NULL code otherwise. 1885 1886 @Cautions Allowed only following FM_PCD_Init(). 1887 *//***************************************************************************/ 1888 t_Handle FM_PCD_CcSetNode(t_Handle h_FmPcd, 1889 t_FmPcdCcNodeParams *p_CcNodeParam); 1890 1891 /**************************************************************************//** 1892 @Function FM_PCD_CcDeleteNode 1893 1894 @Description Deleting an built node. 1895 1896 @Param[in] h_FmPcd A handle to an FM PCD Module. 1897 @Param[in] h_CcNode A handle to a CC node. 1898 1899 @Cautions Allowed only following FM_PCD_Init(). 1900 *//***************************************************************************/ 1901 t_Error FM_PCD_CcDeleteNode(t_Handle h_FmPcd, t_Handle h_CcNode); 1902 1903 /**************************************************************************//** 1904 @Function FM_PCD_CcTreeModifyNextEngine 1905 1906 @Description Modify the Next Engine Parameters in the entry of the tree. 1907 1908 @Param[in] h_FmPcd A handle to an FM PCD Module. 1909 @Param[in] h_CcTree A handle to the tree 1910 @Param[in] grpId A Group index in the tree 1911 @Param[in] index Entry index in the group defined by grpId 1912 @Param[in] p_FmPcdCcNextEngineParams A structure for defining new next engine params 1913 1914 @Return E_OK on success; Error code otherwise. 1915 1916 @Cautions Allowed only following FM_PCD_CcBuildTree(). 1917 *//***************************************************************************/ 1918 t_Error FM_PCD_CcTreeModifyNextEngine(t_Handle h_FmPcd, t_Handle h_CcTree, uint8_t grpId, uint8_t index, t_FmPcdCcNextEngineParams *p_FmPcdCcNextEngineParams); 1919 1920 /**************************************************************************//** 1921 @Function FM_PCD_CcNodeModifyNextEngine 1922 1923 @Description Modify the Next Engine Parameters in the relevant key entry of the node. 1924 1925 @Param[in] h_FmPcd A handle to an FM PCD Module. 1926 @Param[in] h_CcNode A handle to the node 1927 @Param[in] keyIndex Key index for Next Engine Params modifications 1928 @Param[in] p_FmPcdCcNextEngineParams A structure for defining new next engine params 1929 1930 @Return E_OK on success; Error code otherwise. 1931 1932 @Cautions Allowed only following FM_PCD_CcSetNode(). 1933 *//***************************************************************************/ 1934 t_Error FM_PCD_CcNodeModifyNextEngine(t_Handle h_FmPcd, t_Handle h_CcNode, uint8_t keyIndex, t_FmPcdCcNextEngineParams *p_FmPcdCcNextEngineParams); 1935 1936 /**************************************************************************//** 1937 @Function FM_PCD_CcNodeModifyMissNextEngine 1938 1939 @Description Modify the Next Engine Parameters of the Miss key case of the node. 1940 1941 @Param[in] h_FmPcd A handle to an FM PCD Module. 1942 @Param[in] h_CcNode A handle to the node 1943 @Param[in] p_FmPcdCcNextEngineParams A structure for defining new next engine params 1944 1945 @Return E_OK on success; Error code otherwise. 1946 1947 @Cautions Allowed only following FM_PCD_CcSetNode(). 1948 *//***************************************************************************/ 1949 t_Error FM_PCD_CcNodeModifyMissNextEngine(t_Handle h_FmPcd, t_Handle h_CcNode, t_FmPcdCcNextEngineParams *p_FmPcdCcNextEngineParams); 1950 1951 /**************************************************************************//** 1952 @Function FM_PCD_CcNodeRemoveKey 1953 1954 @Description Remove the key (include Next Engine Parameters of this key) defined by the index of the relevant node . 1955 1956 @Param[in] h_FmPcd A handle to an FM PCD Module. 1957 @Param[in] h_CcNode A handle to the node 1958 @Param[in] keyIndex Key index for removing 1959 1960 @Return E_OK on success; Error code otherwise. 1961 1962 @Cautions Allowed only following FM_PCD_CcSetNode() not only of the relevant node but also 1963 the node that points to this node 1964 *//***************************************************************************/ 1965 t_Error FM_PCD_CcNodeRemoveKey(t_Handle h_FmPcd, t_Handle h_CcNode, uint8_t keyIndex); 1966 1967 /**************************************************************************//** 1968 @Function FM_PCD_CcNodeAddKey 1969 1970 @Description Add the key(include Next Engine Parameters of this key)in the index defined by the keyIndex . 1971 1972 @Param[in] h_FmPcd A handle to an FM PCD Module. 1973 @Param[in] h_CcNode A handle to the node 1974 @Param[in] keyIndex Key index for adding 1975 @Param[in] keySize Key size of added key 1976 @Param[in] p_KeyParams A pointer to the parameters includes new key with Next Engine Parameters 1977 1978 @Return E_OK on success; Error code otherwise. 1979 1980 @Cautions Allowed only following FM_PCD_CcSetNode() not only of the relevant node but also 1981 the node that points to this node 1982 *//***************************************************************************/ 1983 t_Error FM_PCD_CcNodeAddKey(t_Handle h_FmPcd, t_Handle h_CcNode, uint8_t keyIndex, uint8_t keySize, t_FmPcdCcKeyParams *p_KeyParams); 1984 1985 /**************************************************************************//** 1986 @Function FM_PCD_CcNodeModifyKeyAndNextEngine 1987 1988 @Description Modify the key and Next Engine Parameters of this key in the index defined by the keyIndex . 1989 1990 @Param[in] h_FmPcd A handle to an FM PCD Module. 1991 @Param[in] h_CcNode A handle to the node 1992 @Param[in] keyIndex Key index for adding 1993 @Param[in] keySize Key size of added key 1994 @Param[in] p_KeyParams A pointer to the parameters includes modified key and modified Next Engine Parameters 1995 1996 @Return E_OK on success; Error code otherwise. 1997 1998 @Cautions Allowed only following FM_PCD_CcSetNode() not only of the relevant node but also 1999 the node that points to this node 2000 *//***************************************************************************/ 2001 t_Error FM_PCD_CcNodeModifyKeyAndNextEngine(t_Handle h_FmPcd, t_Handle h_CcNode, uint8_t keyIndex, uint8_t keySize, t_FmPcdCcKeyParams *p_KeyParams); 2002 2003 /**************************************************************************//** 2004 @Function FM_PCD_CcNodeModifyKey 2005 2006 @Description Modify the key in the index defined by the keyIndex . 2007 2008 @Param[in] h_FmPcd A handle to an FM PCD Module. 2009 @Param[in] h_CcNode A handle to the node 2010 @Param[in] keyIndex Key index for adding 2011 @Param[in] keySize Key size of added key 2012 @Param[in] p_Key A pointer to the new key 2013 @Param[in] p_Mask A pointer to the new mask if relevant, otherwise pointer to NULL 2014 2015 @Return E_OK on success; Error code otherwise. 2016 2017 @Cautions Allowed only following FM_PCD_CcSetNode() not only of the relevant node but also 2018 the node that points to this node 2019 *//***************************************************************************/ 2020 t_Error FM_PCD_CcNodeModifyKey(t_Handle h_FmPcd, t_Handle h_CcNode, uint8_t keyIndex, uint8_t keySize, uint8_t *p_Key, uint8_t *p_Mask); 2021 2022 /**************************************************************************//** 2023 @Function FM_PCD_CcNodeGetKeyCounter 2024 2025 @Description This routine may be used to get a counter of specific key in a CC 2026 Node; This counter reflects how many frames passed that were matched 2027 this key. 2028 2029 @Param[in] h_FmPcd A handle to an FM PCD Module. 2030 @Param[in] h_CcNode A handle to the node 2031 @Param[in] keyIndex Key index for adding 2032 2033 @Return The specific key counter. 2034 2035 @Cautions Allowed only following FM_PCD_CcSetNode() not only of the relevant node but also 2036 the node that points to this node 2037 *//***************************************************************************/ 2038 uint32_t FM_PCD_CcNodeGetKeyCounter(t_Handle h_FmPcd, t_Handle h_CcNode, uint8_t keyIndex); 2039 2040 /**************************************************************************//** 2041 @Function FM_PCD_PlcrSetProfile 2042 2043 @Description Sets a profile entry in the policer profile table. 2044 The routine overrides any existing value. 2045 2046 @Param[in] h_FmPcd A handle to an FM PCD Module. 2047 @Param[in] p_Profile A structure of parameters for defining a 2048 policer profile entry. 2049 2050 @Return A handle to the initialized object on success; NULL code otherwise. 2051 2052 @Cautions Allowed only following FM_PCD_Init(). 2053 *//***************************************************************************/ 2054 t_Handle FM_PCD_PlcrSetProfile(t_Handle h_FmPcd, 2055 t_FmPcdPlcrProfileParams *p_Profile); 2056 2057 /**************************************************************************//** 2058 @Function FM_PCD_PlcrDeleteProfile 2059 2060 @Description Delete a profile entry in the policer profile table. 2061 The routine set entry to invalid. 2062 2063 @Param[in] h_FmPcd A handle to an FM PCD Module. 2064 @Param[in] h_Profile A handle to the profile. 2065 2066 @Return E_OK on success; Error code otherwise. 2067 2068 @Cautions Allowed only following FM_PCD_Init(). 2069 *//***************************************************************************/ 2070 t_Error FM_PCD_PlcrDeleteProfile(t_Handle h_FmPcd, t_Handle h_Profile); 2071 2072 /**************************************************************************//** 2073 @Function FM_PCD_PlcrGetProfileCounter 2074 2075 @Description Sets an entry in the classification plan. 2076 The routine overrides any existing value. 2077 2078 @Param[in] h_FmPcd A handle to an FM PCD Module. 2079 @Param[in] h_Profile A handle to the profile. 2080 @Param[in] counter Counter selector. 2081 2082 @Return specific counter value. 2083 2084 @Cautions Allowed only following FM_PCD_Init(). 2085 *//***************************************************************************/ 2086 uint32_t FM_PCD_PlcrGetProfileCounter(t_Handle h_FmPcd, t_Handle h_Profile, e_FmPcdPlcrProfileCounters counter); 2087 2088 /**************************************************************************//** 2089 @Function FM_PCD_PlcrSetProfileCounter 2090 2091 @Description Sets an entry in the classification plan. 2092 The routine overrides any existing value. 2093 2094 @Param[in] h_FmPcd A handle to an FM PCD Module. 2095 @Param[in] h_Profile A handle to the profile. 2096 @Param[in] counter Counter selector. 2097 @Param[in] value value to set counter with. 2098 2099 @Return E_OK on success; Error code otherwise. 2100 2101 @Cautions Allowed only following FM_PCD_Init(). 2102 *//***************************************************************************/ 2103 t_Error FM_PCD_PlcrSetProfileCounter(t_Handle h_FmPcd, t_Handle h_Profile, e_FmPcdPlcrProfileCounters counter, uint32_t value); 2104 2105 #if defined(FM_CAPWAP_SUPPORT) 2106 /**************************************************************************//** 2107 @Function FM_PCD_ManipSetNode 2108 2109 @Description This routine should be called for defining a manipulation 2110 node. A manipulation node must be defined before the CC node 2111 that precedes it. 2112 2113 @Param[in] h_FmPcd FM PCD module descriptor. 2114 @Param[in] p_FmPcdManipParams A structure of parameters defining the manipulation 2115 2116 @Return A handle to the initialized object on success; NULL code otherwise. 2117 2118 @Cautions Allowed only following FM_PCD_Init(). 2119 *//***************************************************************************/ 2120 t_Handle FM_PCD_ManipSetNode(t_Handle h_FmPcd, t_FmPcdManipParams *p_FmPcdManipParams); 2121 2122 /**************************************************************************//** 2123 @Function FM_PCD_ManipDeleteNode 2124 2125 @Description Delete an existing manip node. 2126 2127 @Param[in] h_FmPcd A handle to an FM PCD Module. 2128 @Param[in] h_HdrManipNode A handle to a Manip node. 2129 2130 @Cautions Allowed only following FM_PCD_Init(). 2131 *//***************************************************************************/ 2132 t_Error FM_PCD_ManipDeleteNode(t_Handle h_FmPcd, t_Handle h_HdrManipNode); 2133 #endif /* defined(FM_CAPWAP_SUPPORT) || ... */ 2134 2135 2136 #ifdef FM_CAPWAP_SUPPORT 2137 /**************************************************************************//** 2138 @Function FM_PCD_StatisticsSetNode 2139 2140 @Description This routine should be called for defining a statistics 2141 node. 2142 2143 @Param[in] h_FmPcd FM PCD module descriptor. 2144 @Param[in] p_FmPcdstatsParams A structure of parameters defining the statistics 2145 2146 @Return A handle to the initialized object on success; NULL code otherwise. 2147 2148 @Cautions Allowed only following FM_PCD_Init(). 2149 *//***************************************************************************/ 2150 t_Handle FM_PCD_StatisticsSetNode(t_Handle h_FmPcd, t_FmPcdStatsParams *p_FmPcdstatsParams); 2151 #endif /* FM_CAPWAP_SUPPORT */ 2152 2153 /** @} */ /* end of FM_PCD_Runtime_tree_buildgrp group */ 2154 /** @} */ /* end of FM_PCD_Runtime_grp group */ 2155 /** @} */ /* end of FM_PCD_grp group */ 2156 /** @} */ /* end of FM_grp group */ 2157 2158 2159 2160 #endif /* __FM_PCD_EXT */ 2161