openbcm

Git mirror of https://github.com/Broadcom-Network-Switching-Software/OpenBCM
git clone git://git.finwo.net/mirror/broadcom/openbcm
Log | Files | Refs | README

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-2020 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