field.h (28130B)
1 /*! \file field.h 2 * 3 * Field header file. 4 * This file contains the management for Field. 5 */ 6 /* 7 * This license is set out in https://raw.githubusercontent.com/Broadcom-Network-Switching-Software/OpenBCM/master/Legal/LICENSE file. 8 * 9 * Copyright 2007-2020 Broadcom Inc. All rights reserved. 10 */ 11 12 #ifndef BCMI_LTSW_FIELD_H 13 #define BCMI_LTSW_FIELD_H 14 15 #include <bcm/field.h> 16 #include <bcm_int/ltsw/flexctr.h> 17 18 /****************************************************************************** 19 * Defines 20 */ 21 /*! Invalid field action. */ 22 #define BCMI_LTSW_FIELD_ACTION_INVALID (0) 23 24 /*! Divison factor to caliculate the depth of hash table for 25 * entries. 26 */ 27 #define BCMI_LTSW_FIELD_HASH_DIV_FACTOR (4) 28 29 /* Flags for field qualifier type. */ 30 #define BCM_FIELD_F_ENUM 0x1 31 #define BCM_FIELD_F_STRUCT 0x2 32 #define BCM_FIELD_F_ARRAY 0x4 33 #define BCM_FIELD_F_BMP 0x8 34 35 /* Maximum LT field offset/width map */ 36 #define BCM_FIELD_QUAL_LT_FIELD_MAP_MAX 4 37 38 /*! Maximum number of color action table pools. */ 39 #define BCM_FIELD_COLOR_ACTION_POOL_MAX (8) 40 41 /*! Macros to map the .em field of qualifier map */ 42 #define BCMI_FIELD_STAGE_LTMAP_ALL 0x00 43 #define BCMI_FIELD_STAGE_LTMAP_IFP_ONLY 0x01 44 #define BCMI_FIELD_STAGE_LTMAP_EM_ONLY 0x02 45 #define BCMI_FIELD_STAGE_LTMAP_EM_WITHOUT_PDD 0x04 46 47 /* 48 * Internal version of qset add. 49 */ 50 #define _BCMI_FIELD_BITS_OP(_a, _b, _max, _op) \ 51 { \ 52 int _ct; \ 53 int _max_w = (_max + SHR_BITWID - 1)/SHR_BITWID; \ 54 for (_ct = 0; _ct < (_max_w); _ct++) { \ 55 (_a)[_ct] _op (_b)[_ct]; \ 56 } \ 57 } 58 #define BCMI_FIELD_QSET_ADD(qset, q) SHR_BITSET(((qset).w), (q)) 59 #define BCMI_FIELD_QSET_REMOVE(qset, q) SHR_BITCLR(((qset).w), (q)) 60 #define BCMI_FIELD_QSET_TEST(qset, q) SHR_BITGET(((qset).w), (q)) 61 #define BCMI_FIELD_QSET_OR(_qset, _qset_new, _max_count) \ 62 _BCMI_FIELD_BITS_OP(_qset.w, _qset_new.w, _max_count, |=) 63 #define BCMI_FIELD_ASET_OR(_aset, _aset_new, _max_count) \ 64 _BCMI_FIELD_BITS_OP(_aset.w, _aset_new.w, _max_count, |=) 65 66 #define BCMI_FIELD_STAGE_STRINGS \ 67 {"Ingress", \ 68 "Egress", \ 69 "Lookup", \ 70 "ExactMatch", \ 71 "Flowtracker"} 72 /****************************************************************************** 73 * LTSW field enumerations 74 */ 75 76 /*! 77 * \brief Field stages. 78 */ 79 typedef enum bcmi_ltsw_field_stage_s { 80 81 /*! IFP. */ 82 bcmiFieldStageIngress = 0, 83 84 /*! EFP. */ 85 bcmiFieldStageEgress = 1, 86 87 /*! VFP. */ 88 bcmiFieldStageVlan = 2, 89 90 /*! EM. */ 91 bcmiFieldStageExactMatch = 3, 92 93 /*! Flow Tracker. */ 94 bcmiFieldStageFlowTracker = 4, 95 96 /*! Always last one. */ 97 bcmiFieldStageCount = 5 98 99 } bcmi_ltsw_field_stage_t; 100 101 /*! 102 * \brief Field operational modes. 103 */ 104 typedef enum bcmi_ltsw_field_oper_mode_s { 105 106 /* Operation mode - Global. */ 107 bcmiFieldOperModeGlobal = 0, 108 109 /* Operation mode - Pipe Unique. */ 110 bcmiFieldOperModePipeUnique = 1, 111 112 /* Operation mode - Global Pipe Aware. */ 113 bcmiFieldOperModeGlobalPipeAware = 2, 114 115 /*! Always last one. */ 116 bcmiFieldOperModeCount = 3 117 118 } bcmi_ltsw_field_oper_mode_t; 119 120 /* Enum for qualifier datatypes. */ 121 typedef enum bcm_qual_data_type_e { 122 BCM_QUAL_DATA_TYPE_INT, 123 BCM_QUAL_DATA_TYPE_UINT64, 124 BCM_QUAL_DATA_TYPE_UINT32, 125 BCM_QUAL_DATA_TYPE_UINT16, 126 BCM_QUAL_DATA_TYPE_UINT8, 127 BCM_QUAL_DATA_TYPE_MAC, 128 BCM_QUAL_DATA_TYPE_IP, 129 BCM_QUAL_DATA_TYPE_IP6, 130 BCM_QUAL_DATA_TYPE_PBMP, 131 BCM_QUAL_DATA_TYPE_PORT, 132 BCM_QUAL_DATA_TYPE_GPORT, 133 BCM_QUAL_DATA_TYPE_L4_PORT, 134 BCM_QUAL_DATA_TYPE_TRUNK, 135 BCM_QUAL_DATA_TYPE_VLAN, 136 BCM_QUAL_DATA_TYPE_VPN, 137 BCM_QUAL_DATA_TYPE_IF, 138 BCM_QUAL_DATA_TYPE_IF_GROUP, 139 BCM_QUAL_DATA_TYPE_VRF, 140 BCM_QUAL_DATA_TYPE_COS, 141 BCM_QUAL_DATA_TYPE_MULTICAST, 142 BCM_QUAL_DATA_TYPE_MPLS_LABEL, 143 BCM_QUAL_DATA_TYPE_NAT_ID, 144 BCM_QUAL_DATA_TYPE_CLASS, 145 BCM_QUAL_DATA_TYPE_TRILL_NAME, 146 BCM_QUAL_DATA_TYPE_CUSTOM, 147 BCM_QUAL_DATA_TYPE_STG, 148 BCM_QUAL_DATA_TYPE_INVALID, 149 BCM_QUAL_DATA_TYPE_LLC, 150 BCM_QUAL_DATA_TYPE_SNAP, 151 } bcm_qual_data_type_t; 152 153 /* Internal qualifiers. */ 154 typedef enum bcmi_field_qualify_e { 155 bcmiFieldQualifyB4Chunk0 = bcmFieldQualifyCount, 156 /* [00] 1-byte chunk qualifier 0. */ 157 bcmiFieldQualifyB4Chunk1, /* [01] 1-byte chunk qualifier 1. */ 158 bcmiFieldQualifyB4Chunk2, /* [02] 1-byte chunk qualifier 2. */ 159 bcmiFieldQualifyB4Chunk3, /* [03] 1-byte chunk qualifier 3. */ 160 bcmiFieldQualifyB4Chunk4, /* [04] 1-byte chunk qualifier 4. */ 161 bcmiFieldQualifyB4Chunk5, /* [05] 1-byte chunk qualifier 5. */ 162 bcmiFieldQualifyB4Chunk6, /* [06] 1-byte chunk qualifier 6. */ 163 bcmiFieldQualifyB4Chunk7, /* [07] 1-byte chunk qualifier 7. */ 164 bcmiFieldQualifyB4Chunk8, /* [08] 1-byte chunk qualifier 8. */ 165 bcmiFieldQualifyB4Chunk9, /* [09] 1-byte chunk qualifier 9. */ 166 bcmiFieldQualifyB4Chunk10, /* [10] 1-byte chunk qualifier 10. */ 167 bcmiFieldQualifyB4Chunk11, /* [11] 1-byte chunk qualifier 11. */ 168 bcmiFieldQualifyB4Chunk12, /* [12] 1-byte chunk qualifier 12. */ 169 bcmiFieldQualifyB4Chunk13, /* [13] 1-byte chunk qualifier 13. */ 170 bcmiFieldQualifyB4Chunk14, /* [14] 1-byte chunk qualifier 14. */ 171 bcmiFieldQualifyB4Chunk15, /* [15] 1-byte chunk qualifier 15. */ 172 bcmiFieldQualifyB4Chunk16, /* [16] 1-byte chunk qualifier 16. */ 173 bcmiFieldQualifyB2Chunk0, /* [17] 2-byte chunk qualifier 0. */ 174 bcmiFieldQualifyB2Chunk1, /* [18] 2-byte chunk qualifier 1. */ 175 bcmiFieldQualifyB2Chunk2, /* [19] 2-byte chunk qualifier 2. */ 176 bcmiFieldQualifyB2Chunk3, /* [20] 2-byte chunk qualifier 3. */ 177 bcmiFieldQualifyB2Chunk4, /* [21] 2-byte chunk qualifier 4. */ 178 bcmiFieldQualifyB2Chunk5, /* [22] 2-byte chunk qualifier 5. */ 179 bcmiFieldQualifyB2Chunk6, /* [23] 2-byte chunk qualifier 6. */ 180 bcmiFieldQualifyB2Chunk7, /* [24] 2-byte chunk qualifier 7. */ 181 bcmiFieldQualifyB2Chunk8, /* [25] 2-byte chunk qualifier 8. */ 182 bcmiFieldQualifyB2Chunk9, /* [26] 2-byte chunk qualifier 9. */ 183 bcmiFieldQualifyB2Chunk10, /* [27] 2-byte chunk qualifier 10. */ 184 bcmiFieldQualifyB2Chunk11, /* [28] 2-byte chunk qualifier 11. */ 185 bcmiFieldQualifyB2Chunk12, /* [29] 2-byte chunk qualifier 12. */ 186 bcmiFieldQualifyB2Chunk13, /* [30] 2-byte chunk qualifier 13. */ 187 bcmiFieldQualifyB2Chunk14, /* [31] 2-byte chunk qualifier 14. */ 188 bcmiFieldQualifyB2Chunk15, /* [32] 2-byte chunk qualifier 15. */ 189 bcmiFieldQualifyB2Chunk16, /* [33] 2-byte chunk qualifier 16. */ 190 bcmiFieldQualifyB1Chunk0, /* [34] 4-byte chunk qualifier 0. */ 191 bcmiFieldQualifyB1Chunk1, /* [35] 4-byte chunk qualifier 1. */ 192 bcmiFieldQualifyB1Chunk2, /* [36] 4-byte chunk qualifier 2. */ 193 bcmiFieldQualifyB1Chunk3, /* [37] 4-byte chunk qualifier 3. */ 194 bcmiFieldQualifyB1Chunk4, /* [38] 4-byte chunk qualifier 4. */ 195 bcmiFieldQualifyB1Chunk5, /* [39] 4-byte chunk qualifier 5. */ 196 bcmiFieldQualifyB1Chunk6, /* [40] 4-byte chunk qualifier 6. */ 197 bcmiFieldQualifyB1Chunk7, /* [41] 4-byte chunk qualifier 7. */ 198 bcmiFieldQualifyB1Chunk8, /* [42] 4-byte chunk qualifier 8. */ 199 bcmiFieldQualifyB1Chunk9, /* [43] 4-byte chunk qualifier 9. */ 200 bcmiFieldQualifyB1Chunk10, /* [44] 4-byte chunk qualifier 10. */ 201 bcmiFieldQualifyB1Chunk11, /* [45] 4-byte chunk qualifier 11. */ 202 bcmiFieldQualifyB1Chunk12, /* [46] 4-byte chunk qualifier 12. */ 203 bcmiFieldQualifyB1Chunk13, /* [47] 4-byte chunk qualifier 13. */ 204 bcmiFieldQualifyB1Chunk14, /* [48] 4-byte chunk qualifier 14. */ 205 bcmiFieldQualifyB1Chunk15, /* [49] 4-byte chunk qualifier 15. */ 206 bcmiFieldQualifyB1Chunk16, /* [50] 4-byte chunk qualifier 16. */ 207 bcmiFieldQualifyUdfExtOuter, /* [51] UDF Extraction Outer Payload. */ 208 bcmiFieldQualifyUdfExtInner, /* [52] UDF Extraction Inner Payload. */ 209 bcmiFieldQualifyLastCount, /* [53] Last Count */ 210 } bcmi_field_qualify_t; 211 212 /* Internal qualifiers. */ 213 #define _BCMI_FIELD_QUALIFY_STRINGS \ 214 { \ 215 "B4Chunk0", \ 216 "B4Chunk1", \ 217 "B4Chunk2", \ 218 "B4Chunk3", \ 219 "B4Chunk4", \ 220 "B4Chunk5", \ 221 "B4Chunk6", \ 222 "B4Chunk7", \ 223 "B4Chunk8", \ 224 "B4Chunk9", \ 225 "B4Chunk10", \ 226 "B4Chunk11", \ 227 "B4Chunk12", \ 228 "B4Chunk13", \ 229 "B4Chunk14", \ 230 "B4Chunk15", \ 231 "B4Chunk16", \ 232 "B2Chunk0", \ 233 "B2Chunk1", \ 234 "B2Chunk2", \ 235 "B2Chunk3", \ 236 "B2Chunk4", \ 237 "B2Chunk5", \ 238 "B2Chunk6", \ 239 "B2Chunk7", \ 240 "B2Chunk8", \ 241 "B2Chunk9", \ 242 "B2Chunk10", \ 243 "B2Chunk11", \ 244 "B2Chunk12", \ 245 "B2Chunk13", \ 246 "B2Chunk14", \ 247 "B2Chunk15", \ 248 "B2Chunk16", \ 249 "B1Chunk0", \ 250 "B1Chunk1", \ 251 "B1Chunk2", \ 252 "B1Chunk3", \ 253 "B1Chunk4", \ 254 "B1Chunk5", \ 255 "B1Chunk6", \ 256 "B1Chunk7", \ 257 "B1Chunk8", \ 258 "B1Chunk9", \ 259 "B1Chunk10", \ 260 "B1Chunk11", \ 261 "B1Chunk12", \ 262 "B1Chunk13", \ 263 "B1Chunk14", \ 264 "B1Chunk15", \ 265 "B1Chunk16", \ 266 "UdfExtOuter", \ 267 "UdfExtInner" \ 268 } 269 270 /* Internal Actions. */ 271 typedef enum bcmi_field_action_e { 272 bcmiFieldActionFlexctrOpaque0 = bcmFieldActionCount, 273 bcmiFieldActionFlexctrOpaque1, 274 bcmiFieldActionFlexctrOpaque2, 275 bcmiFieldActionFlexctrOpaque3, 276 bcmiFieldActionFlexctrOpaque4, 277 bcmiFieldActionFlexctrOpaque5, 278 bcmiFieldActionFlexctrOpaque6, 279 bcmiFieldActionFlexctrOpaque7, 280 bcmiFieldActionFlexctrOpaque8, 281 bcmiFieldActionFlexctrOpaque9, 282 bcmiFieldActionFlexctrOpaque10, 283 bcmiFieldActionCount 284 } bcmi_field_action_t; 285 286 #define BCMI_FIELD_MAX_ACTIONS_PER_DB 16 287 /* 288 * Internal Action ASET 289 */ 290 typedef struct bcmi_field_aset_s { 291 uint32_t w[_SHR_BITDCLSIZE(bcmiFieldActionCount)]; 292 bcm_field_action_width_t actions_width[BCMI_FIELD_MAX_ACTIONS_PER_DB]; 293 } bcmi_field_aset_t; 294 295 #define BCMI_FIELD_ASET_INIT(aset) \ 296 sal_memset(&(aset), 0, sizeof(bcmi_field_aset_t)) 297 298 /****************************************************************************** 299 * LTSW field structures 300 */ 301 302 /*! 303 * \brief Qual field information. 304 * 305 * This data structure is used to identify the qualifier, its type and value and mask. 306 */ 307 typedef struct bcm_qual_field_s { 308 /*! Field name. */ 309 bcm_field_qualify_t sdk6_qual_enum; 310 311 /*! Field attribute (ref BCM_FIELD_F_xxx). */ 312 uint16_t flags; 313 314 /*! To indicate max index in an array. */ 315 uint16_t depth; 316 317 /*! Qualifier data type. To represent different 318 * enum types supported in FP like mac_t, IPType etc 319 */ 320 bcm_qual_data_type_t data_type; 321 322 /*! Qualifier data portion */ 323 void *qual_data; 324 325 /*! Qualifier mask portion */ 326 void *qual_mask; 327 328 /*! Enum value in string format. */ 329 const char *enum_name; 330 331 /*! Enum value in number format. */ 332 uint32_t enum_value; 333 334 /*! Mask for enum value in number format. */ 335 uint32_t enum_mask; 336 } bcm_qual_field_t; 337 338 /*! 339 * \brief Qual field information values. 340 * 341 * This data structure is used to retreive supported values for a particular qualifier. 342 */ 343 typedef struct bcm_qual_field_values_s { 344 345 /* Macro Flags supported if qualifier is of macro type. */ 346 uint32 macro_flags[20]; 347 348 /* Macro Flag values supported if qualifier is of macro type. */ 349 uint8 macro_flags_value[20]; 350 351 /* Macro Flags mask values supported if qualifier is of macro type. */ 352 uint8 macro_flags_mask_value[20]; 353 354 /* Macro Flags mask width supported if qualifier is of macro type. */ 355 uint8 macro_flags_mask_width[20]; 356 357 /* Number of values filled. */ 358 uint8 num; 359 } bcm_qual_field_values_t; 360 361 /*! 362 * \brief Field action internal logical field information. 363 * 364 * This data structure is used to map the SDK6 action with 365 * the corresponding SDKLT internal/additional logical field. 366 */ 367 typedef struct bcm_field_qual_internal_map_info_s { 368 /*! Additional Logical field name corresponding to the qualifier. */ 369 const char *lt_field_name; 370 371 /*! Number of offsets within the logical field 372 * that additional info is mapped to. */ 373 uint8_t num_offsets; 374 375 /*! Offset of the additional info in the corresponding logical field. */ 376 uint16_t offset[BCM_FIELD_QUAL_LT_FIELD_MAP_MAX]; 377 378 /*! Width occupied by the additional info in the 379 * corresponding logical field. */ 380 uint16_t width[BCM_FIELD_QUAL_LT_FIELD_MAP_MAX]; 381 382 /*! Additional info Value */ 383 const void *value; 384 } bcm_field_qual_internal_map_info_t; 385 386 /*! 387 * \brief Field qualifier logical field information. 388 * 389 * This data structure is used to map the SDK6 qualifier with 390 * the corresponding SDKLT logical field. 391 */ 392 typedef struct bcm_field_qual_map_info_s { 393 /*! Logical field name corresponding to the qualifier. */ 394 const char *lt_field_name; 395 396 /*! Additional logical field name corresponding to the qualifier 397 * in rule template table. If set to NULL, use name above. */ 398 const char *lt_field_mask_name; 399 400 /*! Additional logical field name corresponding to the qualifier 401 * in group template table. If set to NULL, use name above. */ 402 const char *lt_group_field_name; 403 404 /*! Number of offsets within the logical field 405 * that qualifier is mapped to. */ 406 uint8_t num_offsets; 407 408 /*! Offset of the qualifier in the corresponding logical field. */ 409 uint16_t offset[BCM_FIELD_QUAL_LT_FIELD_MAP_MAX]; 410 411 /*! Width occubpied by the qualifier in the corresponding logical field. */ 412 uint16_t width[BCM_FIELD_QUAL_LT_FIELD_MAP_MAX]; 413 414 /*! Qualifier supported in Exact Match 415 * Possible values: 416 * BCMI_FIELD_STAGE_LTMAP_ALL => Support all stages. 417 * BCMI_FIELD_STAGE_LTMAP_IFP_ONLY => Support IFP only. 418 * BCMI_FIELD_STAGE_LTMAP_EM_ONLY => Support EM only. 419 */ 420 uint8_t em; 421 422 /*! Additional info enum/Macro value needed for 423 * ENUM/MACRO fo SDK6 mapped to SDKLT qualifier. 424 */ 425 uint32_t value; 426 /*! Number of internal additional maps */ 427 uint8_t num_internal_maps; 428 429 /*! Additional Field information */ 430 const bcm_field_qual_internal_map_info_t *internal_map; 431 432 } bcm_field_qual_map_info_t; 433 434 typedef enum bcmi_field_data_type_e { 435 bcmiFieldDataTypeNone = 0, 436 bcmFieldDataTypeEnumtoLtField = 1, 437 bcmFieldDataTypeMacrotoLtField = 2 438 } bcmi_field_data_type_t; 439 440 /*! 441 * \brief Field qualifier map information. 442 * 443 * This data structure is used to map the SDK6 qualifier with 444 * the corresponding SDKLT logical field. 445 */ 446 typedef struct bcm_field_qual_map_s { 447 /*! Field name. */ 448 bcmi_field_qualify_t qual; 449 450 /*! Number of logical fields that the qualifier is mapped to. */ 451 uint32_t num_maps; 452 453 /*! Flag indicating if more than one qualifier share the LT field */ 454 uint8_t flags; 455 456 bcmi_field_data_type_t data_type; 457 /*! List of logical fields that the qualifier is mapped to. */ 458 bcm_field_qual_map_info_t *map; 459 } bcm_field_qual_map_t; 460 461 /*! 462 * \brief Field action internal logical field information. 463 * 464 * This data structure is used to map the SDK6 action with 465 * the corresponding SDKLT internal/additional logical field. 466 */ 467 typedef struct bcm_field_action_internal_map_info_s { 468 /*! Additional Logical field name corresponding to the action. */ 469 const char *lt_field_name; 470 471 /*! Additional logical field name corresponding to the action 472 * in PDD template table. If set to NULL, use name above. */ 473 const char *lt_pdd_field_name; 474 475 /*! Additional logical field name corresponding to the action 476 * in SBR template table. If set to NULL, use name above. */ 477 const char *lt_sbr_field_name; 478 479 /*! SBR configuration */ 480 bool sbr_enabled; 481 482 /*! Number of offsets within the logical field 483 * that additional info is mapped to. */ 484 uint8_t num_offsets; 485 486 /*! Offset of the additional info in the corresponding logical field. */ 487 uint16_t offset[BCM_FIELD_QUAL_LT_FIELD_MAP_MAX]; 488 489 /*! Width occupied by the additional info in the 490 * corresponding logical field. */ 491 uint16_t width[BCM_FIELD_QUAL_LT_FIELD_MAP_MAX]; 492 493 /*! Additional info Value */ 494 uint32_t value; 495 } bcm_field_action_internal_map_info_t; 496 497 #if 0 498 /* Internal 1-byte UDF chunk qualifiers. */ 499 typedef enum bcmi_field_qual_b1_chunk_e { 500 bcmiFieldQualB4Chunk0 = 0, /* [00] 1-byte chunk qualifier 0. */ 501 bcmiFieldQualB4Chunk1, /* [01] 1-byte chunk qualifier 1. */ 502 bcmiFieldQualB4Chunk2, /* [02] 1-byte chunk qualifier 2. */ 503 bcmiFieldQualB4Chunk3, /* [03] 1-byte chunk qualifier 3. */ 504 bcmiFieldQualB4Chunk4, /* [04] 1-byte chunk qualifier 4. */ 505 bcmiFieldQualB4Chunk5, /* [05] 1-byte chunk qualifier 5. */ 506 bcmiFieldQualB4Chunk6, /* [06] 1-byte chunk qualifier 6. */ 507 bcmiFieldQualB4Chunk7, /* [07] 1-byte chunk qualifier 7. */ 508 bcmiFieldQualB4Chunk8, /* [08] 1-byte chunk qualifier 8. */ 509 bcmiFieldQualB4Chunk9, /* [09] 1-byte chunk qualifier 9. */ 510 bcmiFieldQualB4Chunk10, /* [10] 1-byte chunk qualifier 10. */ 511 bcmiFieldQualB4Chunk11, /* [11] 1-byte chunk qualifier 11. */ 512 bcmiFieldQualB4Chunk12, /* [12] 1-byte chunk qualifier 12. */ 513 bcmiFieldQualB4Chunk13, /* [13] 1-byte chunk qualifier 13. */ 514 bcmiFieldQualB4Chunk14, /* [14] 1-byte chunk qualifier 14. */ 515 bcmiFieldQualB4Chunk15, /* [15] 1-byte chunk qualifier 15. */ 516 bcmiFieldQualB4Chunk16, /* [16] 1-byte chunk qualifier 16. */ 517 bcmiFieldQualB4ChunkLastCount, /* [17] Last Count */ 518 } bcmi_field_qual_b1_chunk_t; 519 520 /* Internal 2-byte UDF chunk qualifiers. */ 521 typedef enum bcmi_field_qual_b2_chunk_e { 522 bcmiFieldQualB2Chunk0 = 0, /* [00] 2-byte chunk qualifier 0. */ 523 bcmiFieldQualB2Chunk1, /* [01] 2-byte chunk qualifier 1. */ 524 bcmiFieldQualB2Chunk2, /* [02] 2-byte chunk qualifier 2. */ 525 bcmiFieldQualB2Chunk3, /* [03] 2-byte chunk qualifier 3. */ 526 bcmiFieldQualB2Chunk4, /* [04] 2-byte chunk qualifier 4. */ 527 bcmiFieldQualB2Chunk5, /* [05] 2-byte chunk qualifier 5. */ 528 bcmiFieldQualB2Chunk6, /* [06] 2-byte chunk qualifier 6. */ 529 bcmiFieldQualB2Chunk7, /* [07] 2-byte chunk qualifier 7. */ 530 bcmiFieldQualB2Chunk8, /* [08] 2-byte chunk qualifier 8. */ 531 bcmiFieldQualB2Chunk9, /* [09] 2-byte chunk qualifier 9. */ 532 bcmiFieldQualB2Chunk10, /* [10] 2-byte chunk qualifier 10. */ 533 bcmiFieldQualB2Chunk11, /* [11] 2-byte chunk qualifier 11. */ 534 bcmiFieldQualB2Chunk12, /* [12] 2-byte chunk qualifier 12. */ 535 bcmiFieldQualB2Chunk13, /* [13] 2-byte chunk qualifier 13. */ 536 bcmiFieldQualB2Chunk14, /* [14] 2-byte chunk qualifier 14. */ 537 bcmiFieldQualB2Chunk15, /* [15] 2-byte chunk qualifier 15. */ 538 bcmiFieldQualB2Chunk16, /* [16] 2-byte chunk qualifier 16. */ 539 bcmiFieldQualB2ChunkLastCount, /* [17] Last Count */ 540 } bcmi_field_qual_b2_chunk_t; 541 542 /* Internal 4-byte UDF chunk qualifiers. */ 543 typedef enum bcmi_field_qual_b4_chunk_e { 544 bcmiFieldQualB4Chunk0 = 0, /* [00] 4-byte chunk qualifier 0. */ 545 bcmiFieldQualB4Chunk1, /* [01] 4-byte chunk qualifier 1. */ 546 bcmiFieldQualB4Chunk2, /* [02] 4-byte chunk qualifier 2. */ 547 bcmiFieldQualB4Chunk3, /* [03] 4-byte chunk qualifier 3. */ 548 bcmiFieldQualB4Chunk4, /* [04] 4-byte chunk qualifier 4. */ 549 bcmiFieldQualB4Chunk5, /* [05] 4-byte chunk qualifier 5. */ 550 bcmiFieldQualB4Chunk6, /* [06] 4-byte chunk qualifier 6. */ 551 bcmiFieldQualB4Chunk7, /* [07] 4-byte chunk qualifier 7. */ 552 bcmiFieldQualB4Chunk8, /* [08] 4-byte chunk qualifier 8. */ 553 bcmiFieldQualB4Chunk9, /* [09] 4-byte chunk qualifier 9. */ 554 bcmiFieldQualB4Chunk10, /* [10] 4-byte chunk qualifier 10. */ 555 bcmiFieldQualB4Chunk11, /* [11] 4-byte chunk qualifier 11. */ 556 bcmiFieldQualB4Chunk12, /* [12] 4-byte chunk qualifier 12. */ 557 bcmiFieldQualB4Chunk13, /* [13] 4-byte chunk qualifier 13. */ 558 bcmiFieldQualB4Chunk14, /* [14] 4-byte chunk qualifier 14. */ 559 bcmiFieldQualB4Chunk15, /* [15] 4-byte chunk qualifier 15. */ 560 bcmiFieldQualB4Chunk16, /* [16] 4-byte chunk qualifier 16. */ 561 bcmiFieldQualB4ChunkLastCount, /* [17] Last Count */ 562 } bcmi_field_qual_b4_chunk_t; 563 #endif 564 565 /* Enum to indicate param argument of field API */ 566 typedef enum bcmi_field_action_param_e { 567 bcmiFieldActionParamNone = 0, 568 bcmiFieldActionParam1 = 1, 569 } bcmi_field_action_param_t; 570 571 /*! 572 * \brief Field action logical field information. 573 * 574 * This data structure is used to map the SDK6 action with 575 * the corresponding SDKLT logical field. 576 */ 577 typedef struct bcm_field_action_map_info_s { 578 /*! Logical field name corresponding to the action. */ 579 const char *lt_field_name; 580 581 /*! Additional logical field name corresponding to the action 582 * in PDD template table. If set to NULL, use name above. */ 583 const char *lt_pdd_field_name; 584 585 /*! Additional logical field name corresponding to the action 586 * in SBR template table. If set to NULL, use name above. */ 587 const char *lt_sbr_field_name; 588 589 /*! Number of offsets within the logical field 590 * that action is mapped to. */ 591 uint8_t num_offsets; 592 593 /*! Offset of the action in the corresponding logical field. */ 594 uint16_t offset[BCM_FIELD_QUAL_LT_FIELD_MAP_MAX]; 595 596 /*! Width occubpied by the action in the corresponding logical field. */ 597 uint16_t width[BCM_FIELD_QUAL_LT_FIELD_MAP_MAX]; 598 599 /*! SBR configuration */ 600 bool sbr_enabled; 601 602 /*! Action supported in Exact Match 603 * Possible values: 604 * BCMI_FIELD_STAGE_LTMAP_ALL => Support all stages. 605 * BCMI_FIELD_STAGE_LTMAP_IFP_ONLY => support IFP only. 606 * BCMI_FIELD_STAGE_LTMAP_EM_ONLY => Support EM only. 607 */ 608 uint8_t em; 609 610 /*! Action is Policer action. */ 611 bool policer; 612 613 /*! Action is Policer action and this is a Policer PDD field. */ 614 bool policer_pdd; 615 616 /*! Pool number of color table index. */ 617 int color_index; 618 619 /*! PDD SBR index. */ 620 int pdd_sbr_index; 621 622 /*! Number of internal additional maps */ 623 uint8_t num_internal_maps; 624 625 /*! Additional Field information */ 626 const bcm_field_action_internal_map_info_t *internal_map; 627 628 /*! Param argument of bcm API */ 629 bcmi_field_action_param_t param; 630 } bcm_field_action_map_info_t; 631 632 /*! 633 * \brief Field action map information. 634 * 635 * This data structure is used to map the SDK6 action with 636 * the corresponding SDKLT logical field. 637 */ 638 typedef struct bcm_field_action_map_s { 639 /*! Field name. */ 640 bcm_field_action_t action; 641 642 /*! Number of logical fields that the action is mapped to. */ 643 uint32_t num_maps; 644 645 /*! Flag indicating if more than one actions share the LT field */ 646 uint8_t flags; 647 648 /*! List of logical fields that the action is mapped to. */ 649 const bcm_field_action_map_info_t *map; 650 } bcm_field_action_map_t; 651 652 /*! Set function for Field Control which has complex settings. */ 653 typedef int (*bcm_field_control_set_f)(int unit, uint32 state); 654 655 /*! Get function for Field Control which has complex settings. */ 656 typedef int (*bcm_field_control_get_f)(int unit, uint32 *state); 657 658 /*! 659 * \brief Field control logical field information. 660 * 661 * This data structure is used to store the SDKLT logical field info. 662 */ 663 typedef struct bcm_field_control_map_info_s { 664 /*! Logical table name corresponding to the Field control. */ 665 const char *lt_name; 666 667 /*! Logical field name corresponding to the Field Control. */ 668 const char *lt_field_name; 669 670 /*! Set function for Field Control which has complex settings. */ 671 const bcm_field_control_set_f func_set; 672 673 /*! Get function for Field Control which has complex settings. */ 674 const bcm_field_control_get_f func_get; 675 } bcm_field_control_map_info_t; 676 /*! 677 * \brief Field Control map information. 678 * 679 * This data structure is used to map the SDK6 control Enum with 680 * the corresponding SDKLT logical field. 681 */ 682 typedef struct bcm_field_control_map_s { 683 /*! Field name. */ 684 bcm_field_control_t control; 685 686 /*! Number of logical fields that the Field control is mapped to. */ 687 uint32_t num_maps; 688 689 /*! List of logical fields that the Field Control is mapped to. */ 690 const bcm_field_control_map_info_t *map; 691 } bcm_field_control_map_t; 692 693 694 /* 695 * This data structure is used by flexctr module, to retrive the group info 696 * for a given group ID. 697 */ 698 typedef struct bcmi_field_flexctr_group_info_s { 699 /*! Group's Priority */ 700 int priority; 701 /*! Flex Counter Object ID */ 702 uint32_t flex_ctr_obj_id; 703 /*! Group's Pipe Instance */ 704 int pipe; 705 } bcmi_field_flexctr_group_info_t; 706 707 708 /* LT Map action flags */ 709 #define BCMI_FIELD_ACTION_INTERNAL 0x1 710 711 /****************************************************************************** 712 * LTSW Field Module Functions 713 */ 714 extern int 715 bcmi_ltsw_field_qualifier_set(int unit, 716 bcm_field_entry_t entry, 717 bcm_qual_field_t *qual_info); 718 719 extern int 720 bcmi_ltsw_field_qualifier_get(int unit, 721 bcm_field_entry_t entry, 722 bcm_qual_field_t *qual_info); 723 724 extern int 725 bcmi_ltsw_field_mirror_index_get( 726 int unit, 727 int entry, 728 bcm_field_action_t action, 729 int mirror_cont, 730 bool *enable, 731 int *mirror_index); 732 733 extern int 734 bcmi_ltsw_field_destination_mirror_index_get( 735 int unit, 736 bcm_field_destination_match_t *match, 737 int *mirror_index); 738 739 extern int 740 bcmi_ltsw_field_entry_policer_update_all(int unit, 741 bcm_policer_t policer_id, 742 uint8_t in_use); 743 744 extern int 745 bcmi_ltsw_field_oper_mode_status_get(int unit, 746 bcmi_ltsw_field_stage_t stage, 747 int *mode); 748 extern int 749 bcmi_field_flexctr_group_info_get( 750 int unit, 751 bcm_flexctr_source_t source, 752 int group, 753 bcmi_field_flexctr_group_info_t *info); 754 755 extern int 756 bcmi_ltsw_field_flex_port_update(int unit, 757 bcm_pbmp_t detached_pbmp, 758 bcm_pbmp_t attached_pbmp); 759 extern int 760 bcmi_field_group_dump_brief(int unit, bcm_field_group_t group); 761 762 extern int 763 bcmi_field_presel_dump(int unit, bcm_field_presel_t presel_id); 764 765 extern int 766 bcmi_field_entry_hit_index_get(int unit, 767 bcm_field_entry_t entry, 768 uint32_t *hit_index); 769 extern int 770 bcmi_field_group_is_empty(int unit, 771 bcm_field_group_t group, 772 bool *entry_present); 773 extern int 774 bcmi_field_group_active_entries_get(int unit, 775 bcm_field_group_t group, 776 uint64_t *entries_created); 777 int 778 bcmi_field_group_delete_slice_reserve_entry(int unit, 779 bcm_field_group_t group); 780 #endif /* BCMI_LTSW_FIELD_H */