keygen_md.h (17692B)
1 /* 2 * This license is set out in https://raw.githubusercontent.com/Broadcom-Network-Switching-Software/OpenBCM/master/Legal/LICENSE file. 3 * 4 * Copyright 2007-2019 Broadcom Inc. All rights reserved. 5 */ 6 7 #ifndef _BCM_INT_FIELD_KEYGEN_MD_H 8 #define _BCM_INT_FIELD_KEYGEN_MD_H 9 10 #include <bcm_int/esw/keygen_api.h> 11 12 #define BCMI_KEYGEN_EXT_SELCODE_DONT_CARE (-1) 13 14 /* 15 * Typedef: 16 * bcmi_keygen_ext_sel_t 17 * Purpose: 18 * Logical table key generation program control selectors. 19 */ 20 typedef struct bcmi_keygen_ext_sel_s { 21 int8 ipbm_source; /* Ingress Port Bitmap Source. */ 22 int8 ipbm_present; /* Post mux IPBM in final key. */ 23 int8 normalize_l3_l4_sel; /* Normalize L3 and L4 address. */ 24 int8 normalize_mac_sel; /* Normalize L2 SA & DA. */ 25 int8 aux_tag_a_sel; /* Auxiliary Tag A Selector. */ 26 int8 aux_tag_b_sel; /* Auxiliary Tag B Selector. */ 27 int8 aux_tag_c_sel; /* Auxiliary Tag C Selector. */ 28 int8 aux_tag_d_sel; /* Auxiliary Tag d Selector. */ 29 int8 tcp_fn_sel; /* TCP function selector. */ 30 int8 tos_fn_sel; /* TOS function selector. */ 31 int8 ttl_fn_sel; /* TTL function selector. */ 32 int8 class_id_cont_a_sel; /* Class ID container A selector. */ 33 int8 class_id_cont_b_sel; /* Class ID container B selector. */ 34 int8 class_id_cont_c_sel; /* Class ID container C selector. */ 35 int8 class_id_cont_d_sel; /* Class ID container D selector. */ 36 int8 src_cont_a_sel; /* SRC container A selector. */ 37 int8 src_cont_b_sel; /* SRC container B selector. */ 38 int8 src_dest_cont_0_sel; /* SRC or DST container 0 selector. */ 39 int8 src_dest_cont_1_sel; /* SRC or DST container 1 selector. */ 40 int8 dst_cont_a_sel; /* DST container A selector. */ 41 int8 dst_cont_b_sel; /* DST container B selector. */ 42 int8 udf_sel; /* UDF0 or UDF1 selector. */ 43 int8 pmux_sel[15]; /* Post muxing extractors. */ 44 int8 alt_ttl_fn_sel; /* ALT TTL function selector. */ 45 int8 ltid_sel; /* LTID funciton selector. */ 46 } bcmi_keygen_ext_sel_t; 47 48 #define BCMI_KEYGEN_EXT_GRANULAR_ARR_SIZE 5 49 50 #define BCMI_KEYGEN_EXT_IN_SECTION_COUNT 5 51 52 #define BCMI_KEYGEN_EXT_SECTION_PASS_THRU (1 << 0) 53 54 #define BCMI_KEYGEN_EXT_SECTION_WITH_GRAN_1 (1 << 1) 55 56 #define BCMI_KEYGEN_EXT_SECTION_WITH_GRAN_2 (1 << 2) 57 58 #define BCMI_KEYGEN_EXT_SECTION_WITH_GRAN_4 (1 << 3) 59 60 #define BCMI_KEYGEN_EXT_SECTION_WITH_GRAN_8 (1 << 4) 61 62 #define BCMI_KEYGEN_EXT_SECTION_WITH_GRAN_16 (1 << 5) 63 64 #define BCMI_KEYGEN_EXT_SECTION_WITH_GRAN_32 (1 << 6) 65 66 #define BCMI_KEYGEN_EXT_SECTION_MULTI_GRAN (1 << 7) 67 68 typedef struct bcmi_keygen_ext_section_gran_s { 69 70 uint8 gran; 71 72 uint8 num_extractors; 73 74 } bcmi_keygen_ext_section_gran_t; 75 76 typedef struct bcmi_keygen_ext_section_gran_info_s { 77 /* granularity information for out section. */ 78 bcmi_keygen_ext_section_gran_t out_gran_info[BCMI_KEYGEN_EXT_GRANULAR_ARR_SIZE]; 79 /* number of valid indices in out_gran_info. */ 80 uint8 out_gran_info_count; 81 /* granularity information for out multi-gran section. */ 82 bcmi_keygen_ext_section_gran_t out_multigran_info[BCMI_KEYGEN_EXT_GRANULAR_ARR_SIZE]; 83 /* number of valid indices in out_multugran_info. */ 84 uint8 out_multigran_info_count; 85 /* granularity information for in section.*/ 86 bcmi_keygen_ext_section_gran_t in_gran_info[BCMI_KEYGEN_EXT_GRANULAR_ARR_SIZE]; 87 /* number of valid indices in in_gran_info. */ 88 uint8 in_gran_info_count; 89 90 } bcmi_keygen_ext_section_gran_info_t; 91 92 /* Note: enumerations in bcmi_keygen_ext_attr_t must have 1-to-1 93 * mapping with enumerations in bcmi_keygen_acl_attr_t. 94 */ 95 typedef enum bcmi_keygen_acl_attr_s { 96 97 BCMI_KEYGEN_ACL_ATTR_MULTI_GRAN = 0, 98 99 BCMI_KEYGEN_ACL_ATTR_MULTI_GRAN_1, 100 101 BCMI_KEYGEN_ACL_ATTR_MULTI_GRAN_2, 102 103 BCMI_KEYGEN_ACL_ATTR_MULTI_GRAN_4, 104 105 BCMI_KEYGEN_ACL_ATTR_MULTI_GRAN_8, 106 107 BCMI_KEYGEN_ACL_ATTR_MULTI_GRAN_16, 108 109 BCMI_KEYGEN_ACL_ATTR_MULTI_GRAN_32, 110 111 BCMI_KEYGEN_ACL_ATTR_PASS_THRU, 112 113 BCMI_KEYGEN_ACL_ATTR_MODE_HALF, 114 115 BCMI_KEYGEN_ACL_ATTR_PMUX_IPBM, 116 117 BCMI_KEYGEN_ACL_ATTR_PMUX_SRC_DST_CONT_0, 118 119 BCMI_KEYGEN_ACL_ATTR_PMUX_SRC_DST_CONT_1, 120 121 BCMI_KEYGEN_ACL_ATTR_PMUX_SRC_DST_CONT_MSB, 122 123 BCMI_KEYGEN_ACL_ATTR_PMUX_SRC_DST_CONT_0_HM, 124 125 BCMI_KEYGEN_ACL_ATTR_PMUX_SRC_DST_CONT_1_HM, 126 127 BCMI_KEYGEN_ACL_ATTR_PMUX_SRC_DST_CONT_MSB_HM, 128 129 BCMI_KEYGEN_ACL_ATTR_PMUX_DROP, 130 131 BCMI_KEYGEN_ACL_ATTR_PMUX_EM_SECOND_LOOKUP_CLASSID_BITS_0_3, 132 133 BCMI_KEYGEN_ACL_ATTR_PMUX_EM_SECOND_LOOKUP_CLASSID_BITS_4_7, 134 135 BCMI_KEYGEN_ACL_ATTR_PMUX_EM_SECOND_LOOKUP_CLASSID_BITS_8_11, 136 137 BCMI_KEYGEN_ACL_ATTR_PMUX_EM_FIRST_LOOKUP_CLASSID_BITS_0_3, 138 139 BCMI_KEYGEN_ACL_ATTR_PMUX_EM_FIRST_LOOKUP_CLASSID_BITS_4_7, 140 141 BCMI_KEYGEN_ACL_ATTR_PMUX_EM_FIRST_LOOKUP_CLASSID_BITS_8_11, 142 143 BCMI_KEYGEN_ACL_ATTR_PMUX_EM_FIRST_LOOKUP_HIT, 144 145 BCMI_KEYGEN_ACL_ATTR_PMUX_EM_SECOND_LOOKUP_HIT, 146 147 BCMI_KEYGEN_ACL_ATTR_PMUX_NAT_NEEDED, 148 149 BCMI_KEYGEN_ACL_ATTR_PMUX_NAT_DST_REALM_ID, 150 151 BCMI_KEYGEN_ACL_ATTR_PMUX_LOOKUP_STATUS_VECTOR_BITS_0_3, 152 153 BCMI_KEYGEN_ACL_ATTR_PMUX_LOOKUP_STATUS_VECTOR_BITS_4_7, 154 155 BCMI_KEYGEN_ACL_ATTR_PMUX_DST_CONTAINER_A, 156 157 BCMI_KEYGEN_ACL_ATTR_PMUX_DST_CONTAINER_B, 158 159 BCMI_KEYGEN_ACL_ATTR_PMUX_PKT_RESOLUTION, 160 161 BCMI_KEYGEN_ACL_ATTR_PMUX_CLASS_ID_C, 162 163 BCMI_KEYGEN_ACL_ATTR_PMUX_CLASS_ID_D, 164 165 BCMI_KEYGEN_ACL_ATTR_PMUX_INT_PRI, 166 167 BCMI_KEYGEN_ACL_ATTR_PMUX_IFP_DROP_VECTOR, 168 169 BCMI_KEYGEN_ACL_ATTR_PMUX_MH_OPCODE, 170 171 BCMI_KEYGEN_ACL_ATTR_MODE_SINGLE_ASET_WIDE, 172 173 BCMI_KEYGEN_ACL_ATTR_QSET_UPDATE, 174 175 BCMI_KEYGEN_ACL_ATTR_PMUX_LTID, 176 177 BCMI_KEYGEN_ACL_ATTR_COUNT 178 179 } bcmi_keygen_acl_attr_t; 180 181 typedef struct bcmi_keygen_acl_attrs_s { 182 SHR_BITDCL w[_SHR_BITDCLSIZE(BCMI_KEYGEN_ACL_ATTR_COUNT)]; 183 } bcmi_keygen_acl_attrs_t; 184 185 #define BCMI_KEYGEN_EXT_FIELD_WORD_COUNT 1 186 187 #define BCMI_KEYGEN_EXT_FIELD_CHUNKS_MAX 128 188 189 #define BCMI_KEYGEN_EXT_FIELDS_MAX 50 190 191 #define BCMI_KEYGEN_EXT_GRAN_COUNT 5 192 193 #define BCMI_KEYGEN_EXT_SECTION_GRAN_COUNT 3 194 195 #define BCMI_KEYGEN_EXT_SECTIONS_COUNT 5 196 197 #define BCMI_KEYGEN_EXT_FIELD_OFFSET_MAX 128 198 199 #define BCMI_KEYGEN_EXT_FIELD_OFFSET_COUNT 16 200 201 typedef struct bcmi_keygen_ext_field_offset_s { 202 203 uint16 offset; 204 205 uint16 width; 206 207 uint8 chunk_id; 208 209 } bcmi_keygen_ext_field_offset_t; 210 211 typedef struct bcmi_keygen_ext_field_offset_info_s { 212 213 uint16 offset_count; 214 215 bcmi_keygen_ext_field_offset_t offsets[BCMI_KEYGEN_EXT_FIELD_OFFSET_MAX]; 216 217 } bcmi_keygen_ext_field_offset_info_t; 218 219 typedef struct bcmi_keygen_ext_field_s { 220 221 bcmi_keygen_ext_section_t section; 222 223 uint8 sec_val; 224 225 uint16 offset; 226 227 uint8 width; 228 229 uint32 req_bmp[BCMI_KEYGEN_EXT_FIELD_WORD_COUNT]; 230 231 uint32 rsp_bmp[BCMI_KEYGEN_EXT_FIELD_WORD_COUNT]; 232 233 } bcmi_keygen_ext_field_t; 234 235 /* When this flag is set, 16-bit granularity extractors are used at 236 * level 2. This flag is set only in case of flowtracker style 237 * extractors. 238 */ 239 #define BCMI_KEYGEN_EXT_FIELD_USE_L2_GRAN16 (1 << 0) 240 241 /* When this flag is set, 8-bit granularity extractors are used at 242 * level 2. This flag is set only in case of flowtracker style 243 * extractors. 244 */ 245 #define BCMI_KEYGEN_EXT_FIELD_USE_L2_GRAN8 (1 << 1) 246 247 /* Qualifier has to be extrctaed to modulo 32 offsets in the final 248 * key.In general keygen algorithm doesnot give any preference to 249 * any qualifier while placing it in the final key. But this flag 250 * ovverrides this behaviour. 251 */ 252 #define BCMI_KEYGEN_EXT_FIELD_EXTRACT_TO_MODULO_32_OFFSET (1 << 2) 253 254 /* If this flag is set, then this field along with some other field, 255 * to which this is sticky, must be extrcated from same part. 256 */ 257 #define BCMI_KEYGEN_EXT_FIELD_IS_STICKY (1 << 3) 258 259 /* If this flag is set, then the corresponding finfo will be extrctaed 260 * at higher offset than the head finfo is extracted in the final key. 261 */ 262 #define BCMI_KEYGEN_EXT_FIELD_EXTRACT_AFTER_STICKY_HEAD (1 << 4) 263 264 #define BCMI_KEYGEN_EXT_SECTION_MAP_MAX 2 265 266 typedef struct bcmi_keygen_ext_field_info_s { 267 268 uint32 flags; 269 270 uint8 extracted; 271 272 int part; 273 274 bcmi_keygen_ext_section_t section; 275 276 uint8 sec_val; 277 278 uint8 size; 279 280 uint8 req_bit_count; 281 282 uint32 req_bmp[BCMI_KEYGEN_EXT_FIELD_WORD_COUNT]; 283 284 uint32 ext_bmp[BCMI_KEYGEN_EXT_FIELD_WORD_COUNT]; 285 286 bcmi_keygen_ext_section_t parent_section[BCMI_KEYGEN_EXT_SECTION_MAP_MAX]; 287 288 uint8 parent_sec_val[BCMI_KEYGEN_EXT_SECTION_MAP_MAX]; 289 290 uint16 parent_field_offset[BCMI_KEYGEN_EXT_SECTION_MAP_MAX]; 291 292 uint16 self_field_offset[BCMI_KEYGEN_EXT_SECTION_MAP_MAX]; 293 294 bcmi_keygen_ext_ctrl_sel_t pri_ctrl_sel[BCMI_KEYGEN_EXT_SECTION_MAP_MAX]; 295 296 uint16 pri_ctrl_sel_val[BCMI_KEYGEN_EXT_SECTION_MAP_MAX]; 297 298 bcmi_keygen_ext_cfg_t *ext_cfg; 299 300 uint8 prev_offset; 301 302 struct bcmi_keygen_ext_field_info_s *prev; 303 304 struct bcmi_keygen_ext_field_info_s *next; 305 306 struct bcmi_keygen_ext_field_info_s *sticky; 307 308 } bcmi_keygen_ext_field_info_t; 309 310 typedef struct bcmi_keygen_ext_field_info_db_s { 311 312 bcmi_keygen_ext_field_info_t *finfo[BCMI_KEYGEN_EXT_SECTION_COUNT]; 313 314 } bcmi_keygen_ext_field_info_db_t; 315 316 typedef bcmi_keygen_ext_section_t bcmi_keygen_ext_section_list_t[BCMI_KEYGEN_EXT_SECTION_COUNT]; 317 318 typedef enum bcmi_keygen_pmux_type_e { 319 320 BCMI_KEYGEN_PMUX_TYPE_IPBM = 0, 321 322 BCMI_KEYGEN_PMUX_TYPE_DROP, 323 324 BCMI_KEYGEN_PMUX_TYPE_NAT_NEEDED, 325 326 BCMI_KEYGEN_PMUX_TYPE_NAT_DST_REALM_ID, 327 328 BCMI_KEYGEN_PMUX_TYPE_SRC_DST_CONT_0, 329 330 BCMI_KEYGEN_PMUX_TYPE_SRC_DST_CONT_1, 331 332 BCMI_KEYGEN_PMUX_TYPE_SRC_DST_CONT_0_SLICE_B, 333 334 BCMI_KEYGEN_PMUX_TYPE_SRC_DST_CONT_1_SLICE_B, 335 336 BCMI_KEYGEN_PMUX_TYPE_SRC_DST_CONT_0_SLICE_C, 337 338 BCMI_KEYGEN_PMUX_TYPE_SRC_DST_CONT_1_SLICE_C, 339 340 BCMI_KEYGEN_PMUX_TYPE_EM_FIRST_LOOKUP_HIT, 341 342 BCMI_KEYGEN_PMUX_TYPE_EM_SECOND_LOOKUP_HIT, 343 344 BCMI_KEYGEN_PMUX_TYPE_EM_FIRST_LOOKUP_CLASSID, 345 346 BCMI_KEYGEN_PMUX_TYPE_EM_SECOND_LOOKUP_CLASSID, 347 348 BCMI_KEYGEN_PMUX_TYPE_COUNT 349 350 } bcmi_keygen_pmux_type_t; 351 352 typedef struct bcmi_keygen_pmux_type_bmp_s { 353 SHR_BITDCL w[_SHR_BITDCLSIZE(BCMI_KEYGEN_PMUX_TYPE_COUNT)]; 354 } bcmi_keygen_pmux_type_bmp_t; 355 356 typedef struct bcmi_keygen_pmux_info_s { 357 358 bcm_field_qualify_t pmux_qual; 359 360 uint8 pmux_part; 361 362 bcmi_keygen_qual_cfg_t *pmux_qual_cfg; 363 364 } bcmi_keygen_pmux_info_t; 365 366 /* This metatdata structure has all the information 367 * required during keygen creation. 368 */ 369 typedef struct bcmi_keygen_md_s { 370 371 bcmi_keygen_qual_cfg_info_t *qual_cfg_info[BCM_FIELD_QUALIFY_MAX]; 372 373 bcmi_keygen_qual_cfg_info_db_t *qual_cfg_info_db[BCMI_KEYGEN_EXT_LEVEL_COUNT]; 374 375 bcmi_keygen_ext_cfg_db_t *ext_cfg_db; 376 377 uint16 rkey_size; 378 379 uint8 *qual_cfg_id_arr; 380 381 uint16 qual_cfg_combinations; 382 383 bcmi_keygen_acl_attrs_t acl_attrs[BCMI_KEYGEN_ENTRY_PARTS_MAX]; 384 385 bcmi_keygen_ext_field_info_t finfo[BCMI_KEYGEN_EXT_FIELDS_MAX]; 386 387 bcmi_keygen_ext_field_info_db_t ext_finfo_db[BCMI_KEYGEN_ENTRY_PARTS_MAX][BCMI_KEYGEN_EXT_LEVEL_COUNT]; 388 389 uint32 bits_extracted[BCMI_KEYGEN_ENTRY_PARTS_MAX][BCMI_KEYGEN_EXT_GRAN_COUNT]; 390 391 uint8 next_part_id[BCMI_KEYGEN_EXT_GRAN_COUNT]; 392 393 uint8 tried_part_bmp[BCMI_KEYGEN_EXT_GRAN_COUNT]; 394 395 bcmi_keygen_ext_section_list_t sections[BCMI_KEYGEN_ENTRY_PARTS_MAX][BCMI_KEYGEN_EXT_LEVEL_COUNT]; 396 397 bcmi_keygen_ext_section_gran_info_t section_gran_info[BCMI_KEYGEN_EXT_SECTION_COUNT]; 398 399 uint8 num_ext_levels; 400 401 bcmi_keygen_ext_field_offset_info_t offset_info; 402 403 bcmi_keygen_ext_sel_t ext_codes[BCMI_KEYGEN_ENTRY_PARTS_MAX]; 404 405 bcmi_keygen_pmux_info_t *pmux_info; 406 407 uint8 num_pmux_qual; 408 409 uint8 pri_ctrl_sel_count[BCMI_KEYGEN_EXT_CTRL_SEL_COUNT]; 410 uint32 pri_ctrl_sel_values[BCMI_KEYGEN_EXT_CTRL_SEL_COUNT]; 411 } bcmi_keygen_md_t; 412 413 #define BCMI_KEYGEN_EXT_SECTION_SIZE_GET(section, size) \ 414 { \ 415 if (BCMI_KEYGEN_EXT_SECTION_L1E32 == section) { \ 416 f_size = 32; \ 417 } else if (BCMI_KEYGEN_EXT_SECTION_L1E16 == section) { \ 418 f_size = 16; \ 419 } else if (BCMI_KEYGEN_EXT_SECTION_L1E8 == section) { \ 420 f_size = 8; \ 421 } else if (BCMI_KEYGEN_EXT_SECTION_L1E4 == section) { \ 422 f_size = 4; \ 423 } else if (BCMI_KEYGEN_EXT_SECTION_L1E2 == section) { \ 424 f_size = 2; \ 425 } else { \ 426 BCMI_KEYGEN_IF_ERR_EXIT(BCM_E_INTERNAL); \ 427 } \ 428 } 429 430 #define BCMI_KEYGEN_EXT_SECTION_BASE_IDX(section, base_idx) \ 431 { \ 432 if (BCMI_KEYGEN_EXT_SECTION_L1E32 == section) { \ 433 base_idx = 0; \ 434 } else if (BCMI_KEYGEN_EXT_SECTION_L1E16 == section) { \ 435 base_idx = 1; \ 436 } else if (BCMI_KEYGEN_EXT_SECTION_L1E8 == section) { \ 437 base_idx = 2; \ 438 } else if (BCMI_KEYGEN_EXT_SECTION_L1E4 == section) { \ 439 base_idx = 3; \ 440 } else if (BCMI_KEYGEN_EXT_SECTION_L1E2 == section) { \ 441 base_idx = 4; \ 442 } else { \ 443 BCMI_KEYGEN_IF_ERR_EXIT(BCM_E_INTERNAL); \ 444 } \ 445 } 446 447 extern int 448 bcmi_keygen_ext_cfg_reset(int unit, 449 bcmi_keygen_cfg_t *keygen_cfg, 450 bcmi_keygen_md_t *keygen_md); 451 extern int 452 bcmi_keygen_ext_cfg_alloc(int unit, 453 bcmi_keygen_cfg_t *keygen_cfg, 454 bcmi_keygen_md_t *keygen_md); 455 extern int 456 bcmi_keygen_ext_cfg_reset_part(int unit, 457 uint8 part, 458 bcmi_keygen_cfg_t *keygen_cfg, 459 bcmi_keygen_md_t *keygen_md); 460 extern int 461 bcmi_keygen_ext_sections_get(int unit, 462 bcmi_keygen_cfg_t *keygen_cfg, 463 bcmi_keygen_md_t *keygen_md); 464 465 extern int 466 bcmi_keygen_ext_alloc(int unit, 467 bcmi_keygen_cfg_t *keygen_cfg, 468 bcmi_keygen_oper_t *keygen_oper, 469 bcmi_keygen_md_t *keygen_md); 470 471 extern int 472 bcmi_keygen_ext_codes_init(int unit, bcmi_keygen_ext_sel_t *ext_codes); 473 474 extern int 475 bcmi_keygen_ext_part_get(int unit, 476 bcmi_keygen_cfg_t *keygen_cfg, 477 bcmi_keygen_md_t *keygen_md, 478 bcmi_keygen_ext_field_info_t *finfo); 479 480 extern int 481 bcmi_keygen_ext_codes_validate(int unit, 482 uint8 part, 483 bcmi_keygen_cfg_t *keygen_cfg, 484 bcmi_keygen_md_t *keygen_md); 485 486 extern int 487 bcmi_keygen_ext_part_incr(int unit, 488 bcmi_keygen_cfg_t *keygen_cfg, 489 bcmi_keygen_md_t *keygen_md, 490 bcmi_keygen_ext_section_t section); 491 492 extern int 493 bcmi_keygen_ext_codes_create(int unit, 494 bcmi_keygen_cfg_t *keygen_cfg, 495 bcmi_keygen_md_t *keygen_md, 496 bcmi_keygen_oper_t *keygen_oper); 497 498 extern int 499 bcmi_keygen_pmux_process(int unit, 500 bcmi_keygen_cfg_t *keygen_cfg, 501 bcmi_keygen_md_t *keygen_md); 502 extern int 503 bcmi_keygen_pmux_info_get(int unit, 504 bcm_field_qualify_t qual, 505 uint8 num_pmux_qual, 506 bcmi_keygen_pmux_info_t *pmux_info_arr, 507 bcmi_keygen_pmux_info_t **pmux_info); 508 509 extern int 510 bcmi_keygen_pmux_qual_offset_get(int unit, 511 bcm_field_qualify_t qual, 512 bcmi_keygen_md_t *keygen_md, 513 bcmi_keygen_cfg_t *keygen_cfg, 514 bcmi_keygen_qual_offset_t *qual_offset); 515 extern int 516 bcmi_keygen_ext_validate(int unit, 517 uint8 part, 518 bcmi_keygen_md_t *keygen_md, 519 bcmi_keygen_ext_cfg_t *ext_cfg); 520 extern int 521 bcmi_keygen_ext_section_gran_info_init(int unit, 522 bcmi_keygen_md_t *keygen_md); 523 524 extern int 525 bcmi_keygen_qual_cfg_max_size_get(int unit, 526 bcmi_keygen_cfg_t *keygen_cfg, 527 bcm_field_qualify_t qual_id, 528 uint16 *qual_cfg_max_size); 529 extern int 530 bcmi_keygen_ext_cfg_update(int unit, 531 bcmi_keygen_cfg_t *keygen_cfg, 532 bcmi_keygen_md_t *keygen_md); 533 534 extern int 535 bcmi_keygen_ext_section_drain_bits_update(int unit, 536 bcmi_keygen_md_t *keygen_md); 537 538 extern int 539 bcmi_keygen_ext_ctrl_sel_validate(int unit, 540 bcmi_keygen_cfg_t *keygen_cfg, 541 bcmi_keygen_md_t *keygen_md); 542 #endif 543