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

field.c (263824B)


      1  /*
      2   * 
      3   *
      4   *
      5   * This license is set out in https://raw.githubusercontent.com/Broadcom-Network-Switching-Software/OpenBCM/master/Legal/LICENSE file.
      6   * 
      7   * Copyright 2007-2019 Broadcom Inc. All rights reserved.
      8   *
      9   * File:        field.c
     10   * Purpose:     Field Processor module routines specific to BCM56980(Tomahawk3)
     11  */
     12 #include <shared/bsl.h>
     13 
     14 #include <soc/defs.h>
     15 #include <bcm_int/esw/tomahawk.h>
     16 
     17 #if defined(BCM_TOMAHAWK3_SUPPORT) && defined(BCM_FIELD_SUPPORT)
     18 #include <bcm_int/esw/field.h>
     19 #include <bcm/field.h>
     20 #include <bcm_int/esw/tomahawk3.h>
     21 #if defined(BCM_ESW_SUPPORT)
     22 #include <bcm_int/esw/xgs4.h>
     23 #endif
     24 
     25 
     26 
     27 /* UDF Chunk to Qualifier Mapping */
     28 uint32 _bcm_th3_udf_chunk_to_qual_mapping[UDF_OFFSET_CHUNKS16] =
     29                         {
     30                            _bcmFieldQualifyData0,  /* Chunk 0  */
     31                            _bcmFieldQualifyData1,  /* Chunk 1  */
     32                            _bcmFieldQualifyData2,  /* Chunk 2  */
     33                            _bcmFieldQualifyData3,  /* Chunk 3  */
     34                            _bcmFieldQualifyData4,  /* Chunk 4  */
     35                            _bcmFieldQualifyData5,  /* Chunk 5  */
     36                            _bcmFieldQualifyData6,  /* Chunk 6  */
     37                            _bcmFieldQualifyData7,  /* Chunk 7  */
     38                            _bcmFieldQualifyData8,  /* Chunk 8  */
     39                            _bcmFieldQualifyData9,  /* Chunk 9  */
     40                            _bcmFieldQualifyData10, /* Chunk 10 */
     41                            _bcmFieldQualifyData11, /* Chunk 11 */
     42                            _bcmFieldQualifyData12, /* Chunk 12 */
     43                            _bcmFieldQualifyData13, /* Chunk 13 */
     44                            _bcmFieldQualifyData14, /* Chunk 14 */
     45                            _bcmFieldQualifyData15  /* Chunk 15 */
     46                         };
     47 
     48 /*
     49  * Function:
     50  *    _field_th3_presel_qualifiers_init
     51  *
     52  * Purpose:
     53  *    Initialize Field Ingress Stage Preselector Qualifiers.
     54  *
     55  * Parameters:
     56  *    unit       - (IN) BCM device number.
     57  *    stage_fc   - (IN/OUT) Field Processor stage control structure.
     58  *
     59  * Returns:
     60  *    BCM_E_PARAM       - Null field stage control structure.
     61  *    BCM_E_MEMORY      - Allocation failure.
     62  *    BCM_E_INTERNAL    - Invalid CAP Stage ID.
     63  *    BCM_E_NONE        - Success.
     64  */
     65 int
     66 _field_th3_presel_qualifiers_init(int unit, _field_stage_t *stage_fc)
     67 {
     68     /*
     69      * All the qualifiers offset mentioned are the actual individual HW field
     70      * offset in IFP_LOGICAL_TABLE_SELECT Memory which are starting from bit
     71      * position 1. "KEY" overlap field in the memory is used during write,
     72      * hence to accomidate in the field, the offsets of the qualifiers has to
     73      * be substracted by 1.
     74      */
     75     uint8 mixed_src_class_offset = 0;
     76     uint8 em_lt_id_offset = 0;
     77     uint8 cpu_tx_offset = 0;
     78     
     79     uint8 drop_offset = 0;
     80     uint8 pkt_res_offset = 0;
     81     uint8 fwd_type_offset = 0;
     82     uint8 lookup_status_offset = 0;
     83     uint8 mystation_hit_offset = 0;
     84     uint8 tunnel_type_offset = 0;
     85     uint8 lb_type_offset = 0;
     86     uint8 lb_offset = 0;
     87     uint8 l4pkt_offset = 0;
     88     uint8 ip_type_offset = 0;
     89     _FP_QUAL_DECL;
     90 
     91 
     92     /* Exact match stage qualifier offset are not same as in IFP presel.
     93      * Hence during init here need to take care of offset position
     94      * accordingly.
     95      */
     96     if (stage_fc->stage_id == _BCM_FIELD_STAGE_EXACTMATCH) {
     97         mixed_src_class_offset = 0;
     98         
     99         drop_offset = 33;
    100         cpu_tx_offset = 34;
    101         fwd_type_offset = 42;
    102         lookup_status_offset = 46;
    103         mystation_hit_offset = 65;
    104         tunnel_type_offset = 66;
    105         lb_type_offset = 66;
    106         lb_offset = 69;
    107         l4pkt_offset = 72;
    108         ip_type_offset = 73;
    109     } else if(stage_fc->stage_id == _BCM_FIELD_STAGE_INGRESS) {
    110         mixed_src_class_offset = 0;
    111         em_lt_id_offset = 32;
    112         
    113         cpu_tx_offset = 36;
    114         drop_offset = 47;
    115         pkt_res_offset = 48;
    116         fwd_type_offset = 54;
    117         lookup_status_offset = 58;
    118         mystation_hit_offset = 77;
    119         tunnel_type_offset = 78;
    120         lb_type_offset = 78;
    121         lb_offset = 81;
    122         l4pkt_offset = 84;
    123         ip_type_offset = 85;
    124     } else {
    125         return BCM_E_NONE;
    126     }
    127 
    128     /* Allocated stage qualifiers configuration array. */
    129     _FP_XGS3_ALLOC(stage_fc->f_presel_qual_arr,
    130         (_bcmFieldQualifyCount * sizeof(_bcm_field_qual_info_t *)),
    131         "IFP Preselector qualifiers");
    132     if (stage_fc->f_presel_qual_arr == 0) {
    133         return (BCM_E_MEMORY);
    134     }
    135 
    136     _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualifyMixedSrcClassId,
    137         0, _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
    138         mixed_src_class_offset, 32);
    139 
    140     _FP_PRESEL_QUAL_ADD(unit, stage_fc,
    141         _bcmFieldQualifyExactMatchGroupClassIdLookup0,
    142         _BCM_FIELD_QUAL_OFFSET_NO_EM_SUPPORT,
    143         _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
    144         em_lt_id_offset, 4);
    145 
    146 #if 0
    147     _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmfFieldQualifyCpuTxDestType,
    148         0, _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
    149         cpu_tx_dest_type_offset, 4);
    150     _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmfFieldQualifyCpuTxFlowType,
    151         0, _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
    152         cpu_tx_flow_type, 2);
    153     _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualifyCpuPktProfileCtrl,
    154         0, _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
    155         cpu_pkt_prof_ctrl_offset, 1);
    156 #endif
    157 
    158     _FP_PRESEL_QUAL_ADD(unit, stage_fc, _bcmFieldQualifyCpuTxCtrl,
    159         0, _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
    160         cpu_tx_offset, 6);
    161 
    162     _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualifyDrop,
    163         0, _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
    164         drop_offset, 1);
    165 
    166     _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualifyPacketRes,
    167         _BCM_FIELD_QUAL_OFFSET_NO_EM_SUPPORT,
    168         _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
    169         pkt_res_offset, 6);
    170 
    171     _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualifyForwardingType,
    172         0, _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
    173         fwd_type_offset, 4);
    174 
    175     _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualifyMyStationHit,
    176         0, _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
    177         mystation_hit_offset, 1);
    178 
    179     
    180     _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualifyLoopbackType,
    181         0, _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
    182         tunnel_type_offset, 4);
    183 
    184     
    185     _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualifyTunnelType,
    186         0, _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
    187         lb_type_offset, 4);
    188 
    189     
    190     _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualifyLoopback,
    191         0, _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
    192         lb_offset, 1);
    193 
    194     _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualifyL4Ports,
    195         0, _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
    196         l4pkt_offset, 1);
    197 
    198     _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualifyIpType,
    199         0, _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
    200         ip_type_offset, 4);
    201 
    202     _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualifyIngressStpState,
    203         0, _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
    204         lookup_status_offset, 2);
    205 
    206     _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualifyStpState,
    207         0, _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
    208         lookup_status_offset, 2);
    209 
    210     _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualifyDosAttack,
    211         0, _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
    212         lookup_status_offset + 2, 1);
    213 
    214     _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualifyForwardingVlanValid,
    215         0, _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
    216         lookup_status_offset + 3, 1);
    217 
    218     
    219     _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualifyMplsLabel1Hit,
    220         _BCM_FIELD_QUAL_OFFSET_NO_EM_SUPPORT,
    221         _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
    222         lookup_status_offset + 4, 1);
    223 
    224     _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualifyMplsLabel2Hit,
    225         _BCM_FIELD_QUAL_OFFSET_NO_EM_SUPPORT,
    226         _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
    227         lookup_status_offset + 5, 1);
    228 
    229    
    230 #if 0
    231     _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualifyMplsBosTerminated,
    232         0, _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
    233         lookup_status_offset + 6, 1);
    234 #endif
    235 
    236     _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualifyIpTunnelHit,
    237         0, _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
    238         lookup_status_offset + 7, 1);
    239 
    240     return (BCM_E_NONE);
    241 }
    242 
    243 int
    244 _bcm_field_th3_common_actions_init(int unit, _field_stage_t *stage_fc)
    245 {
    246     _FP_ACTION_DECL
    247     uint32 offset = 0;                  /* General variable to carry offset. */
    248     uint32 profile_one_offset = 0;      /* Offset of PROFILE_ONE_SET. */
    249     uint32 profile_two_offset = 0;      /* Offset of PROFILE_TWO_SET. */
    250     uint32 redirect_offset = 0;         /* Offset of REDIRECT_SET. */
    251     uint32 l3swl2change_offset = 0;     /* Offset of L3SW_CHANGE_L2_SET. */
    252     uint32 mirror_offset = 0;           /* Offset of MIRROR_SET. */
    253     uint32 lb_offset = 0;               /* Offset of LB_CONTROL_SET. */
    254     uint32 copytocpu_offset = 0;        /* Offset of COPY_TO_CPU_SET. */
    255     uint32 cutthrough_offset = 0;       /* Offset of CUT_THRU_OVERRIDE_SET. */
    256     uint32 ttl_offset = 0;              /* Offset of TTL_SET. */
    257     uint32 cpucos_offset = 0;           /* Offset of CHANGE_CPU_COS_SET. */
    258     uint32 drop_offset = 0;             /* Offset of DROP_SET. */
    259     uint32 mirror_override_offset = 0;  /* Offset of MIRROR_OVERRIDE_SET. */
    260     uint32 sflow_offset = 0;            /* Offset of SFLOW_SET. */
    261     uint32 debug_offset = 0;            /* Offset of INSTRUMENTATION_TRIGGERS_ENABLE. */
    262     uint32 ddrop_offset = 0;            /* Offset of DELAYED_DROP_SET. */
    263     uint32 dredirect_offset = 0;        /* Offset of DELAYED_REDIRECT_SET. */
    264     uint32 dlb_alt_path_offset = 0;     /* Offset of DLB_ALTERNATE_PATH_CONTROL_SET. */
    265     uint32 dlb_ecmp_offset = 0;         /* Offset of DLB_ECMP_SET. */
    266     uint32 dlb_ecmp_monitor_offset = 0; /* Offset of DLB_ECMP_MONITOR_SET. */
    267     uint32 timestamp_offset = 0;        /* Offset of TIMESTAMP_SET. */
    268     uint32 etrap_offset = 0;            /* Offset of ELEPHANT_TRAP_SET. */
    269     uint32 int_offset = 0;              /* Offset of INBAND_TELEMETRY_SET. */
    270 
    271 
    272     /* Input parameters check. */
    273     if (NULL == stage_fc) {
    274         return (BCM_E_PARAM);
    275     }
    276     if (stage_fc->stage_id == _BCM_FIELD_STAGE_INGRESS) {
    277         redirect_offset        = 0;  /* Start of the IFP_POLICY_TABLE */
    278         cpucos_offset          = 38; /* REDIRECT_SET(38b) */
    279         copytocpu_offset       = 46; /* REDIRECT_SET(38b) +
    280                                       * CHANGE_CPU_COS_SET(8b) */
    281         cutthrough_offset      = 88; /* REDIRECT_SET(38b) +
    282                                       * CHANGE_CPU_COS_SET(8b) +
    283                                       * COPY_TO_CPU_SET(17b) +
    284                                       * COUNTER_SET(25b) */
    285         ddrop_offset           = 89; /* REDIRECT_SET(38b) +
    286                                       * CHANGE_CPU_COS_SET(8b) +
    287                                       * COPY_TO_CPU_SET(17b) +
    288                                       * COUNTER_SET(25b) +
    289                                       * CUT_THRU_OVERRIDE_SET(1b) */
    290         dredirect_offset       = 97; /* REDIRECT_SET(38b) +
    291                                       * CHANGE_CPU_COS_SET(8b) +
    292                                       * COPY_TO_CPU_SET(17b) +
    293                                       * COUNTER_SET(25b) +
    294                                       * CUT_THRU_OVERRIDE_SET(1b) +
    295                                       * DELAYED_DROP_SET(8b) */
    296         dlb_alt_path_offset     = 113; /* REDIRECT_SET(38b) +
    297                                         * CHANGE_CPU_COS_SET(8b) +
    298                                         * COPY_TO_CPU_SET(17b) +
    299                                         * COUNTER_SET(25b) +
    300                                         * CUT_THRU_OVERRIDE_SET(1b) +
    301                                         * DELAYED_DROP_SET(8b) +
    302                                         * DELAYED_REDIRECT_SET(16b) */
    303         dlb_ecmp_monitor_offset = 123; /* REDIRECT_SET(38b) +
    304                                         * CHANGE_CPU_COS_SET(8b) +
    305                                         * COPY_TO_CPU_SET(17b) +
    306                                         * COUNTER_SET(25b) +
    307                                         * CUT_THRU_OVERRIDE_SET(1b) +
    308                                         * DELAYED_DROP_SET(8b) +
    309                                         * DELAYED_REDIRECT_SET(16b) +
    310                                         * DLB_ALTERNATE_PATH_CONTROL_SET(10b) */
    311         dlb_ecmp_offset         = 125; /* REDIRECT_SET(38b) +
    312                                         * CHANGE_CPU_COS_SET(8b) +
    313                                         * COPY_TO_CPU_SET(17b) +
    314                                         * COUNTER_SET(25b) +
    315                                         * CUT_THRU_OVERRIDE_SET(1b) +
    316                                         * DELAYED_DROP_SET(8b) +
    317                                         * DELAYED_REDIRECT_SET(16b) +
    318                                         * DLB_ALTERNATE_PATH_CONTROL_SET(10b) +
    319                                         * DLB_ECMP_MONITOR_SET(2b) */
    320         drop_offset             = 127; /* REDIRECT_SET(38b) +
    321                                         * CHANGE_CPU_COS_SET(8b) +
    322                                         * COPY_TO_CPU_SET(17b) +
    323                                         * COUNTER_SET(25b) +
    324                                         * CUT_THRU_OVERRIDE_SET(1b) +
    325                                         * DELAYED_DROP_SET(8b) +
    326                                         * DELAYED_REDIRECT_SET(16b) +
    327                                         * DLB_ALTERNATE_PATH_CONTROL_SET(10b) +
    328                                         * DLB_ECMP_MONITOR_SET(2b) +
    329                                         * DLB_ECMP_SET(2b) */
    330         etrap_offset            = 133; /* REDIRECT_SET(38b) +
    331                                         * CHANGE_CPU_COS_SET(8b) +
    332                                         * COPY_TO_CPU_SET(17b) +
    333                                         * COUNTER_SET(25b) +
    334                                         * CUT_THRU_OVERRIDE_SET(1b) +
    335                                         * DELAYED_DROP_SET(8b) +
    336                                         * DELAYED_REDIRECT_SET(16b) +
    337                                         * DLB_ALTERNATE_PATH_CONTROL_SET(10b) +
    338                                         * DLB_ECMP_MONITOR_SET(2b) +
    339                                         * DLB_ECMP_SET(2b) +
    340                                         * DROP_SET(6b) */
    341         int_offset              = 140; /* REDIRECT_SET(38b) +
    342                                         * CHANGE_CPU_COS_SET(8b) +
    343                                         * COPY_TO_CPU_SET(17b) +
    344                                         * COUNTER_SET(25b) +
    345                                         * CUT_THRU_OVERRIDE_SET(1b) +
    346                                         * DELAYED_DROP_SET(8b) +
    347                                         * DELAYED_REDIRECT_SET(16b) +
    348                                         * DLB_ALTERNATE_PATH_CONTROL_SET(10b) +
    349                                         * DLB_ECMP_MONITOR_SET(2b) +
    350                                         * DLB_ECMP_SET(2b) +
    351                                         * DROP_SET(6b) +
    352                                         * ELEPHANT_TRAP_SET(6b) +
    353                                         * GREEN_TO_PID_SET(1b) */
    354         debug_offset           = 142;  /* REDIRECT_SET(38b) +
    355                                         * CHANGE_CPU_COS_SET(8b) +
    356                                         * COPY_TO_CPU_SET(17b) +
    357                                         * COUNTER_SET(25b) +
    358                                         * CUT_THRU_OVERRIDE_SET(1b) +
    359                                         * DELAYED_DROP_SET(8b) +
    360                                         * DELAYED_REDIRECT_SET(16b) +
    361                                         * DLB_ALTERNATE_PATH_CONTROL_SET(10b) +
    362                                         * DLB_ECMP_MONITOR_SET(2b) +
    363                                         * DLB_ECMP_SET(2b) +
    364                                         * DROP_SET(6b) +
    365                                         * ELEPHANT_TRAP_SET(6b) +
    366                                         * GREEN_TO_PID_SET(1b) +
    367                                         * INBAND_TELEMETRY_SET(2b) */
    368         l3swl2change_offset    = 143;  /* REDIRECT_SET(38b) +
    369                                         * CHANGE_CPU_COS_SET(8b) +
    370                                         * COPY_TO_CPU_SET(17b) +
    371                                         * COUNTER_SET(25b) +
    372                                         * CUT_THRU_OVERRIDE_SET(1b) +
    373                                         * DELAYED_DROP_SET(8b) +
    374                                         * DELAYED_REDIRECT_SET(16b) +
    375                                         * DLB_ALTERNATE_PATH_CONTROL_SET(10b) +
    376                                         * DLB_ECMP_MONITOR_SET(2b) +
    377                                         * DLB_ECMP_SET(2b) +
    378                                         * DROP_SET(6b) +
    379                                         * ELEPHANT_TRAP_SET(6b) +
    380                                         * GREEN_TO_PID_SET(1b) +
    381                                         * INBAND_TELEMETRY_SET(2b) +
    382                                         * INSTRUMENTATION_SET(1b) */
    383         lb_offset              = 166;  /* REDIRECT_SET(38b) +
    384                                         * CHANGE_CPU_COS_SET(8b) +
    385                                         * COPY_TO_CPU_SET(17b) +
    386                                         * COUNTER_SET(25b) +
    387                                         * CUT_THRU_OVERRIDE_SET(1b) +
    388                                         * DELAYED_DROP_SET(8b) +
    389                                         * DELAYED_REDIRECT_SET(16b) +
    390                                         * DLB_ALTERNATE_PATH_CONTROL_SET(10b) +
    391                                         * DLB_ECMP_MONITOR_SET(2b) +
    392                                         * DLB_ECMP_SET(2b) +
    393                                         * DROP_SET(6b) +
    394                                         * ELEPHANT_TRAP_SET(6b) +
    395                                         * GREEN_TO_PID_SET(1b) +
    396                                         * INBAND_TELEMETRY_SET(2b) +
    397                                         * INSTRUMENTATION_SET(1b) +
    398                                         * L3SW_CHANGE_L2_SET(23b) */
    399         mirror_override_offset = 184;  /* REDIRECT_SET(38b) +
    400                                         * CHANGE_CPU_COS_SET(8b) +
    401                                         * COPY_TO_CPU_SET(17b) +
    402                                         * COUNTER_SET(25b) +
    403                                         * CUT_THRU_OVERRIDE_SET(1b) +
    404                                         * DELAYED_DROP_SET(8b) +
    405                                         * DELAYED_REDIRECT_SET(16b) +
    406                                         * DLB_ALTERNATE_PATH_CONTROL_SET(10b) +
    407                                         * DLB_ECMP_MONITOR_SET(2b) +
    408                                         * DLB_ECMP_SET(2b) +
    409                                         * DROP_SET(6b) +
    410                                         * ELEPHANT_TRAP_SET(6b) +
    411                                         * GREEN_TO_PID_SET(1b) +
    412                                         * INBAND_TELEMETRY_SET(2b) +
    413                                         * INSTRUMENTATION_SET(1b) +
    414                                         * L3SW_CHANGE_L2_SET(23b) +
    415                                         * LB_CONTROLS_SET(2b) +
    416                                         * METER_SET(16b) */
    417         mirror_offset          = 185;  /* REDIRECT_SET(38b) +
    418                                         * CHANGE_CPU_COS_SET(8b) +
    419                                         * COPY_TO_CPU_SET(17b) +
    420                                         * COUNTER_SET(25b) +
    421                                         * CUT_THRU_OVERRIDE_SET(1b) +
    422                                         * DELAYED_DROP_SET(8b) +
    423                                         * DELAYED_REDIRECT_SET(16b) +
    424                                         * DLB_ALTERNATE_PATH_CONTROL_SET(10b) +
    425                                         * DLB_ECMP_MONITOR_SET(2b) +
    426                                         * DLB_ECMP_SET(2b) +
    427                                         * DROP_SET(6b) +
    428                                         * ELEPHANT_TRAP_SET(6b) +
    429                                         * GREEN_TO_PID_SET(1b) +
    430                                         * INBAND_TELEMETRY_SET(2b) +
    431                                         * INSTRUMENTATION_SET(1b) +
    432                                         * L3SW_CHANGE_L2_SET(23b) +
    433                                         * LB_CONTROLS_SET(2b) +
    434                                         * METER_SET(16b) +
    435                                         * MIRROR_OVERRIDE_SET(1b) */
    436         profile_one_offset     = 200;  /* REDIRECT_SET(38b) +
    437                                         * CHANGE_CPU_COS_SET(8b) +
    438                                         * COPY_TO_CPU_SET(17b) +
    439                                         * COUNTER_SET(25b) +
    440                                         * CUT_THRU_OVERRIDE_SET(1b) +
    441                                         * DELAYED_DROP_SET(8b) +
    442                                         * DELAYED_REDIRECT_SET(16b) +
    443                                         * DLB_ALTERNATE_PATH_CONTROL_SET(10b) +
    444                                         * DLB_ECMP_MONITOR_SET(2b) +
    445                                         * DLB_ECMP_SET(2b) +
    446                                         * DROP_SET(6b) +
    447                                         * ELEPHANT_TRAP_SET(6b) +
    448                                         * GREEN_TO_PID_SET(1b) +
    449                                         * INBAND_TELEMETRY_SET(2b) +
    450                                         * INSTRUMENTATION_SET(1b) +
    451                                         * L3SW_CHANGE_L2_SET(23b) +
    452                                         * LB_CONTROLS_SET(2b) +
    453                                         * METER_SET(16b) +
    454                                         * MIRROR_OVERRIDE_SET(1b) +
    455                                         * MIRROR_SET(15b) */
    456         profile_two_offset     = 256;  /* REDIRECT_SET(38b) +
    457                                         * CHANGE_CPU_COS_SET(8b) +
    458                                         * COPY_TO_CPU_SET(17b) +
    459                                         * COUNTER_SET(25b) +
    460                                         * CUT_THRU_OVERRIDE_SET(1b) +
    461                                         * DELAYED_DROP_SET(8b) +
    462                                         * DELAYED_REDIRECT_SET(16b) +
    463                                         * DLB_ALTERNATE_PATH_CONTROL_SET(10b) +
    464                                         * DLB_ECMP_MONITOR_SET(2b) +
    465                                         * DLB_ECMP_SET(2b) +
    466                                         * DROP_SET(6b) +
    467                                         * ELEPHANT_TRAP_SET(6b) +
    468                                         * GREEN_TO_PID_SET(1b) +
    469                                         * INBAND_TELEMETRY_SET(2b) +
    470                                         * INSTRUMENTATION_SET(1b) +
    471                                         * L3SW_CHANGE_L2_SET(23b) +
    472                                         * LB_CONTROLS_SET(2b) +
    473                                         * METER_SET(16b) +
    474                                         * MIRROR_OVERRIDE_SET(1b) +
    475                                         * MIRROR_SET(15b) +
    476                                         * PROFILE_SET_1(56b) */
    477         sflow_offset           = 313;  /* REDIRECT_SET(38b) +
    478                                         * CHANGE_CPU_COS_SET(8b) +
    479                                         * COPY_TO_CPU_SET(17b) +
    480                                         * COUNTER_SET(25b) +
    481                                         * CUT_THRU_OVERRIDE_SET(1b) +
    482                                         * DELAYED_DROP_SET(8b) +
    483                                         * DELAYED_REDIRECT_SET(16b) +
    484                                         * DLB_ALTERNATE_PATH_CONTROL_SET(10b) +
    485                                         * DLB_ECMP_MONITOR_SET(2b) +
    486                                         * DLB_ECMP_SET(2b) +
    487                                         * DROP_SET(6b) +
    488                                         * ELEPHANT_TRAP_SET(6b) +
    489                                         * GREEN_TO_PID_SET(1b) +
    490                                         * INBAND_TELEMETRY_SET(2b) +
    491                                         * INSTRUMENTATION_SET(1b) +
    492                                         * L3SW_CHANGE_L2_SET(23b) +
    493                                         * LB_CONTROLS_SET(2b) +
    494                                         * METER_SET(16b) +
    495                                         * MIRROR_OVERRIDE_SET(1b) +
    496                                         * MIRROR_SET(15b) +
    497                                         * PROFILE_SET_1(56b) +
    498                                         * PROFILE_SET_2(52b) +
    499                                         * PROTECTION_SWITCHING_SET(1b) +
    500                                         * RESERVED_SET(4b) */
    501 
    502         timestamp_offset       = 314;  /* REDIRECT_SET(38b) +
    503                                         * CHANGE_CPU_COS_SET(8b) +
    504                                         * COPY_TO_CPU_SET(17b) +
    505                                         * COUNTER_SET(25b) +
    506                                         * CUT_THRU_OVERRIDE_SET(1b) +
    507                                         * DELAYED_DROP_SET(8b) +
    508                                         * DELAYED_REDIRECT_SET(16b) +
    509                                         * DLB_ALTERNATE_PATH_CONTROL_SET(10b) +
    510                                         * DLB_ECMP_MONITOR_SET(2b) +
    511                                         * DLB_ECMP_SET(2b) +
    512                                         * DROP_SET(6b) +
    513                                         * ELEPHANT_TRAP_SET(6b) +
    514                                         * GREEN_TO_PID_SET(1b) +
    515                                         * INBAND_TELEMETRY_SET(2b) +
    516                                         * INSTRUMENTATION_SET(1b) +
    517                                         * L3SW_CHANGE_L2_SET(23b) +
    518                                         * LB_CONTROLS_SET(2b) +
    519                                         * METER_SET(16b) +
    520                                         * MIRROR_OVERRIDE_SET(1b) +
    521                                         * MIRROR_SET(15b) +
    522                                         * PROFILE_SET_1(56b) +
    523                                         * PROFILE_SET_2(52b) +
    524                                         * PROTECTION_SWITCHING_SET(1b) +
    525                                         * RESERVED_SET(4b) +
    526                                         * SFLOW_SET(1b) */
    527 
    528         ttl_offset             = 318;  /* REDIRECT_SET(38b) +
    529                                         * CHANGE_CPU_COS_SET(8b) +
    530                                         * COPY_TO_CPU_SET(17b) +
    531                                         * COUNTER_SET(25b) +
    532                                         * CUT_THRU_OVERRIDE_SET(1b) +
    533                                         * DELAYED_DROP_SET(8b) +
    534                                         * DELAYED_REDIRECT_SET(16b) +
    535                                         * DLB_ALTERNATE_PATH_CONTROL_SET(10b) +
    536                                         * DLB_ECMP_MONITOR_SET(2b) +
    537                                         * DLB_ECMP_SET(2b) +
    538                                         * DROP_SET(6b) +
    539                                         * ELEPHANT_TRAP_SET(6b) +
    540                                         * GREEN_TO_PID_SET(1b) +
    541                                         * INBAND_TELEMETRY_SET(2b) +
    542                                         * INSTRUMENTATION_SET(1b) +
    543                                         * L3SW_CHANGE_L2_SET(23b) +
    544                                         * LB_CONTROLS_SET(2b) +
    545                                         * METER_SET(16b) +
    546                                         * MIRROR_OVERRIDE_SET(1b) +
    547                                         * MIRROR_SET(15b) +
    548                                         * PROFILE_SET_1(56b) +
    549                                         * PROFILE_SET_2(52b) +
    550                                         * PROTECTION_SWITCHING_SET(1b) +
    551                                         * RESERVED_SET(4b) +
    552                                         * SFLOW_SET(1b) +
    553                                         * TIMESTAMP_SET(4b) */
    554     } else if (stage_fc->stage_id == _BCM_FIELD_STAGE_EXACTMATCH) {
    555         soc_field_info_t * f_info;
    556         f_info = soc_mem_fieldinfo_get(unit, EXACT_MATCH_QOS_ACTIONS_PROFILEm, PROFILE_SET_2f);
    557         profile_two_offset = f_info->bp;
    558     }
    559 
    560     offset = redirect_offset;
    561     _FP_ACTION_WITH_ASET_ADD_FOUR(unit, stage_fc,
    562                                   bcmFieldActionRedirect,
    563                                   _BCM_FIELD_ACTION_REDIRECT_DGLP,
    564                                   _FieldActionRedirectSet,
    565                                   offset + 6, 8, -1,
    566                                   offset + 14 , 1, 0, offset + 3, 3, 0,
    567                                   offset + 0, 3, 1);
    568     _FP_ACTION_WITH_ASET_ADD_FOUR(unit, stage_fc,
    569                                   bcmFieldActionUnmodifiedPacketRedirectPort,
    570                                   _BCM_FIELD_ACTION_REDIRECT_DGLP,
    571                                   _FieldActionRedirectSet,
    572                                   offset + 6, 8, -1,
    573                                   offset + 14 , 1, 0, offset + 3, 3, 1,
    574                                   offset + 0, 3, 1);
    575     _FP_ACTION_WITH_ASET_ADD_FOUR(unit, stage_fc, bcmFieldActionRedirect,
    576                                   _BCM_FIELD_ACTION_REDIRECT_TRUNK,
    577                                   _FieldActionRedirectSet,
    578                                   offset + 6, 8, -1, offset + 14, 1, 1,
    579                                   offset + 3, 3, 0, offset + 0, 3, 1);
    580     _FP_ACTION_WITH_ASET_ADD_FOUR(unit, stage_fc,
    581                                   bcmFieldActionRedirectTrunk,
    582                                   _BCM_FIELD_ACTION_REDIRECT_TRUNK,
    583                                   _FieldActionRedirectSet,
    584                                   offset + 6, 8, -1, offset + 14, 1, 1,
    585                                   offset + 3, 3, 0, offset + 0, 3, 1);
    586 
    587     _FP_ACTION_WITH_ASET_ADD_THREE(unit, stage_fc,
    588                                    bcmFieldActionRedirectEgrNextHop,
    589                                    _BCM_FIELD_ACTION_REDIRECT_NEXT_HOP,
    590                                    _FieldActionRedirectSet,
    591                                    offset + 6, 16, -1,
    592                                    offset + 3, 3, 2, offset + 0, 3, 1);
    593     _FP_ACTION_WITH_ASET_ADD_THREE(unit, stage_fc,
    594                                    bcmFieldActionRedirectEgrNextHop,
    595                                    _BCM_FIELD_ACTION_REDIRECT_ECMP,
    596                                    _FieldActionRedirectSet,
    597                                    offset + 6, 12, -1,
    598                                    offset + 3, 3, 3, offset + 0, 3, 1);
    599     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionRedirectCancel,
    600                                  0, _FieldActionRedirectSet, offset + 0, 3, 2);
    601     _FP_ACTION_WITH_ASET_ADD_THREE(unit, stage_fc,
    602                                    bcmFieldActionRedirectPbmp, 0,
    603                                    _FieldActionRedirectSet,
    604                                    offset + 6, 8, -1, offset + 23, 2, 0,
    605                                    offset + 0, 3, 3);
    606     _FP_ACTION_WITH_ASET_ADD_THREE(unit, stage_fc,
    607                                    bcmFieldActionRedirectVlan, 0,
    608                                    _FieldActionRedirectSet,
    609                                    offset + 17, 1, 0, offset + 23, 2, 1,
    610                                    offset + 0, 3, 3);
    611     _FP_ACTION_WITH_ASET_ADD_FOUR(unit, stage_fc,
    612                                   bcmFieldActionRedirectBcastPbmp, 0,
    613                                   _FieldActionRedirectSet,
    614                                   offset + 6, 8, -1, offset + 17, 1, 1,
    615                                   offset + 23, 2, 1, offset + 0, 3, 3);
    616     _FP_ACTION_WITH_ASET_ADD_THREE(unit, stage_fc,
    617                                    bcmFieldActionRedirectMcast, 0,
    618                                    _FieldActionRedirectSet,
    619                                    offset + 6, 10, -1, offset + 23, 2, 2,
    620                                    offset + 0, 3, 3);
    621     _FP_ACTION_WITH_ASET_ADD_THREE(unit, stage_fc,
    622                                    bcmFieldActionRedirectIpmc, 0,
    623                                    _FieldActionRedirectSet,
    624                                    offset + 6, 9, -1, offset + 23, 2, 3,
    625                                    offset + 0, 3, 3);
    626     _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc,
    627                                  bcmFieldActionEgressMask, 0,
    628                                  _FieldActionRedirectSet,
    629                                  offset + 6, 8, -1, offset + 0, 3, 4);
    630     _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc,
    631                                  bcmFieldActionEgressPortsAdd, 0,
    632                                  _FieldActionRedirectSet,
    633                                  offset + 6, 8, -1, offset + 0, 3, 5);
    634 
    635     /* IFP_CHANGE_CPU_COS_SET(8b) */
    636     offset = cpucos_offset;
    637     _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc,
    638                                  bcmFieldActionCosQCpuNew, 0,
    639                                  _FieldActionChangeCpuCosSet,
    640                                  offset + 2, 6, -1, offset + 0, 2, 1);
    641     _FP_ACTION_WITH_ASET_ADD_THREE(unit, stage_fc,
    642                                    bcmFieldActionServicePoolIdNew, 0,
    643                                    _FieldActionChangeCpuCosSet,
    644                                    offset + 4, 2, -1, offset + 6, 2, 2,
    645                                    offset + 0, 2, 2);
    646     _FP_ACTION_WITH_ASET_ADD_FOUR(unit, stage_fc,
    647                                   bcmFieldActionServicePoolIdPrecedenceNew, 0,
    648                                   _FieldActionChangeCpuCosSet,
    649                                   offset + 4, 2, -1, offset + 2, 2, -1,
    650                                   offset + 6, 2, 3, offset + 0, 2, 2);
    651 
    652     /* IFP_COPY_TO_CPU_SET(17b) */
    653     offset = copytocpu_offset;
    654 
    655     _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionRpCopyToCpu,
    656                                         0, _FieldActionCopyToCpuSet,
    657                                         offset + 3, 8, -1, offset + 11, 3, 1);
    658     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionRpCopyToCpuCancel,
    659                                         0, _FieldActionCopyToCpuSet,
    660                                         offset + 11, 3, 2);
    661     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionRpSwitchToCpuCancel,
    662                                         0, _FieldActionCopyToCpuSet,
    663                                         offset + 11, 3, 3);
    664     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionRpSwitchToCpuReinstate,
    665                                         0, _FieldActionCopyToCpuSet,
    666                                         offset + 11, 3, 4);
    667     _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionRpTimeStampToCpu,
    668                                         0, _FieldActionCopyToCpuSet,
    669                                         offset + 3, 8, -1, offset + 11, 3, 5);
    670 
    671     _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionYpCopyToCpu,
    672                                         0, _FieldActionCopyToCpuSet,
    673                                         offset + 3, 8, -1, offset + 14, 3, 1);
    674     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionYpCopyToCpuCancel,
    675                                         0, _FieldActionCopyToCpuSet,
    676                                         offset + 14, 3, 2);
    677     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionYpSwitchToCpuCancel,
    678                                         0, _FieldActionCopyToCpuSet,
    679                                         offset + 14, 3, 3);
    680     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionYpSwitchToCpuReinstate,
    681                                         0, _FieldActionCopyToCpuSet,
    682                                         offset + 14, 3, 4);
    683     _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionYpTimeStampToCpu,
    684                                         0, _FieldActionCopyToCpuSet,
    685                                         offset + 3, 8, -1, offset + 14, 3, 5);
    686 
    687     _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionGpCopyToCpu,
    688                                         0, _FieldActionCopyToCpuSet,
    689                                         offset + 3, 8, -1, offset + 0, 3, 1);
    690     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionGpCopyToCpuCancel,
    691                                         0, _FieldActionCopyToCpuSet,
    692                                         offset + 0, 3, 2);
    693     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionGpSwitchToCpuCancel,
    694                                         0, _FieldActionCopyToCpuSet,
    695                                         offset + 0, 3, 3);
    696     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionGpSwitchToCpuReinstate,
    697                                         0, _FieldActionCopyToCpuSet,
    698                                         offset + 0, 3, 4);
    699     _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionGpTimeStampToCpu,
    700                                         0, _FieldActionCopyToCpuSet,
    701                                         offset + 3, 8, -1, offset + 0, 3, 5);
    702 
    703     /* IFP_CUT_THRU_OVERRIDE_SET(1b) */
    704     offset = cutthrough_offset;
    705     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionDoNotCutThrough,
    706                                  0, _FieldActionCutThrOverrideSet, offset + 0, 1, 1);
    707 
    708 
    709     /* DLB_ALTERNATE_PATH_CONTROL_SET(10b) */
    710     offset = dlb_alt_path_offset;
    711     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionDgm,
    712                                  0, _FieldActionIfpDlbAlternatePathControlSet,
    713                                  offset + 0, 1, 1);
    714     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionDgmThreshold,
    715                                  0, _FieldActionIfpDlbAlternatePathControlSet,
    716                                  offset + 7, 3, -1);
    717     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionDgmCost,
    718                                  0, _FieldActionIfpDlbAlternatePathControlSet,
    719                                  offset + 4, 3, -1);
    720     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionDgmBias,
    721                                  0, _FieldActionIfpDlbAlternatePathControlSet,
    722                                  offset + 1, 3, -1);
    723 
    724     /* DLB_ECMP_MONITOR_SET(2b) */
    725     offset = dlb_ecmp_monitor_offset;
    726     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionDlbEcmpMonitorEnable,
    727                                  0, _FieldActionEcmpDlbMonitorSet,
    728                                  offset + 0, 2, 0);
    729 
    730     /* DLB_ECMP_SET(2b) */
    731     offset = dlb_ecmp_offset;
    732     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionDynamicEcmpCancel,
    733                             0, _FieldActionEcmpDlbActionSet, offset + 0, 1, 1);
    734     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionDynamicEcmpEnable,
    735                             0, _FieldActionEcmpDlbActionSet, offset + 1, 1, 1);
    736 
    737     /* IFP_DROP_SET(6b) */
    738     offset = drop_offset;
    739     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionRpDrop,
    740                                  0, _FieldActionDropSet, offset + 2, 2, 1);
    741     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionRpDropCancel,
    742                                  0, _FieldActionDropSet, offset + 2, 2, 2);
    743     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionYpDrop,
    744                                  0, _FieldActionDropSet, offset + 4, 2, 1);
    745     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionYpDropCancel,
    746                                  0, _FieldActionDropSet,  offset + 4, 2, 2);
    747     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionGpDrop,
    748                                  0, _FieldActionDropSet, offset + 0, 2, 1);
    749     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionGpDropCancel,
    750                                  0, _FieldActionDropSet, offset + 0, 2, 2);
    751 
    752     /* IFP_INSTRUMENTATION_TRIGGERS_ENABLE_SET(1b)*/
    753     offset = debug_offset;
    754     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionPacketTraceEnable,
    755                                        _BCM_FIELD_ACTION_NO_EM_SUPPORT,
    756                                        _FieldActionInstrumentationSet,
    757                                        offset + 0, 1, 1);
    758 
    759     /* IFP_L3SW_CHANGE_L2_SET(23b) */
    760     offset = l3swl2change_offset;
    761     _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionChangeL2Fields,
    762                                  0, _FieldActionL3SwChangeL2Set,
    763                                  offset + 0, 16, -1, offset + 19, 4, 1);
    764     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc,
    765                                  bcmFieldActionChangeL2FieldsCancel,
    766                                  0, _FieldActionL3SwChangeL2Set,
    767                                  offset + 19, 4, 2);
    768     _FP_ACTION_WITH_ASET_ADD_THREE(unit, stage_fc, bcmFieldActionL3Switch,
    769                                    _BCM_FIELD_ACTION_L3SWITCH_NEXT_HOP,
    770                                    _FieldActionL3SwChangeL2Set,
    771                                    offset + 0, 16, -1, offset + 17, 1, 0,
    772                                    offset + 19, 4, 6);
    773     _FP_ACTION_WITH_ASET_ADD_THREE(unit, stage_fc, bcmFieldActionL3Switch,
    774                                    _BCM_FIELD_ACTION_L3SWITCH_ECMP,
    775                                    _FieldActionL3SwChangeL2Set,
    776                                    offset + 0, 12, -1, offset + 17, 1, 1,
    777                                    offset + 19, 4, 6);
    778     _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionMultipathHash,
    779                                  0, _FieldActionL3SwChangeL2Set,
    780                                  offset + 12, 3, -1, offset + 19, 4, 6);
    781     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionL3SwitchCancel,
    782                                  0, _FieldActionL3SwChangeL2Set,
    783                                  offset + 19, 4, 7);
    784     _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc,
    785                                  bcmFieldActionEgressClassSelect,
    786                                  0, _FieldActionL3SwChangeL2Set,
    787                                  offset + 0, 4, -1, offset + 19, 4, 8);
    788     _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc,
    789                                  bcmFieldActionNewClassId, 0,
    790                                  _FieldActionL3SwChangeL2Set,
    791                                  offset + 7, 9, -1, offset + 19, 4, 8);
    792 
    793     
    794     _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc,
    795                                  bcmFieldActionBFDSessionIdNew, 0,
    796                                  _FieldActionL3SwChangeL2Set,
    797                                  offset + 0, 12, -1, offset + 19, 4, 9);
    798 
    799     /* IFP_LB_CONTROLS_SET(3b) */
    800     offset = lb_offset;
    801     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc,
    802                        bcmFieldActionTrunkRandomRoundRobinHashCancel,
    803                        0, _FieldActionLbControlSet,
    804                        offset + 0, 1, 1);
    805     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc,
    806                        bcmFieldActionEcmpRandomRoundRobinHashCancel,
    807                        0, _FieldActionLbControlSet,
    808                        offset + 1, 1, 1);
    809 
    810     /* IFP_MIRROR_OVERRIDE_SET(1b) */
    811     offset = mirror_override_offset;
    812 
    813      _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionMirrorOverride,
    814                                  0, _FieldActionMirrorOverrideSet, offset + 0, 1, 1);
    815 
    816     /* IFP_MIRROR_SET(12b) */
    817     offset = mirror_offset;
    818 
    819     _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionMirrorIngress,
    820                                           0, _FieldActionMirrorSet,
    821                                           offset, 4, 0, offset + 7 , 8, 0);
    822     _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionMirrorEgress,
    823                                           0, _FieldActionMirrorSet,
    824                                           offset, 4, 0, offset + 7, 8, 0);
    825     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionMirrorZeroingEnable,
    826                                           0, _FieldActionMirrorSet,
    827                                           offset + 4, 3, 0);
    828 
    829     /* ExactMatch Action Class Id (12b) */
    830     _FP_ACTION_ADD_ONE(unit, stage_fc, bcmFieldActionExactMatchClassId,
    831                        _BCM_FIELD_ACTION_NO_IFP_SUPPORT, 0, 12, 0);
    832 
    833     /* IFP_PROFILE_SET_1(56b) */
    834     offset = profile_one_offset;
    835     _FP_ACTION_ADD_TWO(unit, stage_fc, bcmFieldActionUntaggedPacketPriorityNew,
    836                                       0, offset + 18, 4, -1, offset + 0, 1, 1);
    837     _FP_ACTION_ADD_ONE(unit, stage_fc, bcmFieldActionRpDropPrecedence,
    838                                                          0, offset + 35, 2, -1);
    839     _FP_ACTION_ADD_ONE(unit, stage_fc, bcmFieldActionYpDropPrecedence,
    840                                                          0, offset + 52, 2, -1);
    841     _FP_ACTION_ADD_ONE(unit, stage_fc, bcmFieldActionGpDropPrecedence,
    842                                                          0, offset + 14, 2, -1);
    843 
    844     _FP_ACTION_ADD_TWO(unit, stage_fc, bcmFieldActionRpCosQNew,
    845                                      0, offset + 27, 8, -1, offset + 22, 4, 1);
    846     _FP_ACTION_ADD_TWO(unit, stage_fc, bcmFieldActionRpCosMapNew,
    847                                      0, offset + 27, 2, -1, offset + 22, 4, 2);
    848     _FP_ACTION_ADD_TWO(unit, stage_fc, bcmFieldActionRpPrioIntNew,
    849                                      0, offset + 27, 8, -1, offset + 22, 4, 5);
    850     _FP_ACTION_ADD_ONE(unit, stage_fc, bcmFieldActionRpPrioIntTos,
    851                                                          0, offset + 22, 4, 6);
    852     _FP_ACTION_ADD_ONE(unit, stage_fc, bcmFieldActionRpPrioIntCancel,
    853                                                          0, offset + 22, 4, 7);
    854     _FP_ACTION_ADD_TWO(unit, stage_fc, bcmFieldActionRpUcastCosQNew,
    855                                      0, offset + 27, 4, -1, offset + 22, 4, 8);
    856     _FP_ACTION_ADD_TWO(unit, stage_fc, bcmFieldActionRpMcastCosQNew,
    857                                      0, offset + 31, 4, -1, offset + 22, 4, 9);
    858 
    859     _FP_ACTION_ADD_TWO(unit, stage_fc, bcmFieldActionYpCosQNew,
    860                                      0, offset + 44, 8, -1, offset + 39, 4, 1);
    861     _FP_ACTION_ADD_TWO(unit, stage_fc, bcmFieldActionYpCosMapNew,
    862                                      0, offset + 44, 2, -1, offset + 39, 4, 2);
    863     _FP_ACTION_ADD_TWO(unit, stage_fc, bcmFieldActionYpPrioIntNew,
    864                                      0, offset + 44, 8, -1, offset + 39, 4, 5);
    865     _FP_ACTION_ADD_ONE(unit, stage_fc, bcmFieldActionYpPrioIntTos,
    866                                                          0, offset + 39, 4, 6);
    867     _FP_ACTION_ADD_ONE(unit, stage_fc, bcmFieldActionYpPrioIntCancel,
    868                                                          0, offset + 39, 4, 7);
    869     _FP_ACTION_ADD_TWO(unit, stage_fc, bcmFieldActionYpUcastCosQNew,
    870                                      0, offset + 44, 4, -1, offset + 39, 4, 8);
    871     _FP_ACTION_ADD_TWO(unit, stage_fc, bcmFieldActionYpMcastCosQNew,
    872                                      0, offset + 48, 4, -1, offset + 39, 4, 9);
    873 
    874     _FP_ACTION_ADD_TWO(unit, stage_fc, bcmFieldActionGpCosQNew,
    875                                        0, offset + 6, 8, -1, offset + 1, 4, 1);
    876     _FP_ACTION_ADD_TWO(unit, stage_fc, bcmFieldActionGpCosMapNew,
    877                                        0, offset + 6, 2, -1, offset + 1, 4, 2);
    878     _FP_ACTION_ADD_TWO(unit, stage_fc, bcmFieldActionGpPrioIntNew,
    879                                        0, offset + 6, 8, -1, offset + 1, 4, 5);
    880     _FP_ACTION_ADD_ONE(unit, stage_fc, bcmFieldActionGpPrioIntTos,
    881                                                           0, offset + 1, 4, 6);
    882     _FP_ACTION_ADD_ONE(unit, stage_fc, bcmFieldActionGpPrioIntCancel,
    883                                                           0, offset + 1, 4, 7);
    884     _FP_ACTION_ADD_TWO(unit, stage_fc, bcmFieldActionGpUcastCosQNew,
    885                                        0, offset + 6, 4, -1, offset + 1, 4, 8);
    886     _FP_ACTION_ADD_TWO(unit, stage_fc, bcmFieldActionGpMcastCosQNew,
    887                                       0, offset + 10, 4, -1, offset + 1, 4, 9);
    888 
    889     if (soc_feature(unit, soc_feature_ecn_wred)) {
    890         _FP_ACTION_ADD_TWO(unit, stage_fc,
    891                            bcmFieldActionGpIntCongestionNotificationNew,
    892                            _BCM_FIELD_ACTION_NO_EM_SUPPORT,
    893                            offset + 16, 2, -1, offset + 5, 1, 1);
    894         _FP_ACTION_ADD_TWO(unit, stage_fc,
    895                            bcmFieldActionYpIntCongestionNotificationNew,
    896                            _BCM_FIELD_ACTION_NO_EM_SUPPORT,
    897                            offset + 54, 2, -1, offset + 43, 1, 1);
    898        _FP_ACTION_ADD_TWO(unit, stage_fc,
    899                           bcmFieldActionRpIntCongestionNotificationNew,
    900                           _BCM_FIELD_ACTION_NO_EM_SUPPORT,
    901                           offset + 37, 2, -1, offset + 26, 1, 1);
    902     }
    903 
    904     if (soc_feature(unit, soc_feature_field_action_pfc_class)) {
    905        _FP_ACTION_ADD_TWO(unit, stage_fc,
    906                           bcmFieldActionPfcClassNew,
    907                           0, offset + 18, 4, -1, offset + 0, 1, 1);
    908     }
    909 
    910     /* IFP_PROFILE_SET_2(52b) */
    911     offset = profile_two_offset;
    912 
    913     _FP_ACTION_ADD_TWO(unit, stage_fc, bcmFieldActionRpEcnNew,
    914                                       0, offset + 30, 2, -1, offset + 20, 1, 1);
    915     _FP_ACTION_ADD_TWO(unit, stage_fc, bcmFieldActionYpEcnNew,
    916                                       0, offset + 47, 2, -1, offset + 37, 1, 1);
    917     _FP_ACTION_ADD_TWO(unit, stage_fc, bcmFieldActionGpEcnNew,
    918                                        0, offset + 13, 2, -1, offset + 3, 1, 1);
    919 
    920     _FP_ACTION_ADD_ONE(unit, stage_fc, bcmFieldActionRpDot1pPreserve,
    921                                                           0, offset + 21, 3, 3);
    922     _FP_ACTION_ADD_TWO(unit, stage_fc, bcmFieldActionRpPrioPktNew,
    923                                       0, offset + 32, 3, -1, offset + 21, 3, 5);
    924     _FP_ACTION_ADD_ONE(unit, stage_fc, bcmFieldActionRpPrioPktTos,
    925                                                           0, offset + 21, 3, 6);
    926     _FP_ACTION_ADD_ONE(unit, stage_fc, bcmFieldActionRpPrioPktCancel,
    927                                                           0, offset + 21, 3, 7);
    928 
    929     _FP_ACTION_ADD_ONE(unit, stage_fc, bcmFieldActionYpDot1pPreserve,
    930                                                           0, offset + 38, 3, 3);
    931     _FP_ACTION_ADD_TWO(unit, stage_fc, bcmFieldActionYpPrioPktNew,
    932                                       0, offset + 49, 3, -1, offset + 38, 3, 5);
    933     _FP_ACTION_ADD_ONE(unit, stage_fc, bcmFieldActionYpPrioPktTos,
    934                                                           0, offset + 38, 3, 6);
    935     _FP_ACTION_ADD_ONE(unit, stage_fc, bcmFieldActionYpPrioPktCancel,
    936                                                           0, offset + 38, 3, 7);
    937 
    938     _FP_ACTION_ADD_ONE(unit, stage_fc, bcmFieldActionGpDot1pPreserve,
    939                                                            0, offset + 4, 3, 3);
    940     _FP_ACTION_ADD_TWO(unit, stage_fc, bcmFieldActionGpPrioPktNew,
    941                                        0, offset + 15, 3, -1, offset + 4, 3, 5);
    942     _FP_ACTION_ADD_ONE(unit, stage_fc, bcmFieldActionGpPrioPktTos,
    943                                                            0, offset + 4, 3, 6);
    944     _FP_ACTION_ADD_ONE(unit, stage_fc, bcmFieldActionGpPrioPktCancel,
    945                                                            0, offset + 4, 3, 7);
    946 
    947     _FP_ACTION_ADD_TWO(unit, stage_fc, bcmFieldActionRpDscpNew,
    948                                       0, offset + 24, 6, -1, offset + 18, 2, 1);
    949     _FP_ACTION_ADD_ONE(unit, stage_fc, bcmFieldActionRpDscpCancel,
    950                                                           0, offset + 18, 2, 2);
    951     _FP_ACTION_ADD_ONE(unit, stage_fc, bcmFieldActionRpDscpPreserve,
    952                                                           0, offset + 18, 2, 3);
    953 
    954     _FP_ACTION_ADD_TWO(unit, stage_fc, bcmFieldActionYpDscpNew,
    955                                       0, offset + 41, 6, -1, offset + 35, 2, 1);
    956     _FP_ACTION_ADD_ONE(unit, stage_fc, bcmFieldActionYpDscpCancel,
    957                                                           0, offset + 35, 2, 2);
    958     _FP_ACTION_ADD_ONE(unit, stage_fc, bcmFieldActionYpDscpPreserve,
    959                                                           0, offset + 35, 2, 3);
    960 
    961     _FP_ACTION_ADD_TWO(unit, stage_fc, bcmFieldActionGpDscpNew,
    962                                       0, offset + 7, 6, -1, offset + 0, 3, 3);
    963     _FP_ACTION_ADD_ONE(unit, stage_fc, bcmFieldActionGpDscpCancel,
    964                                                           0, offset + 0, 3, 4);
    965     _FP_ACTION_ADD_ONE(unit, stage_fc, bcmFieldActionGpDscpPreserve,
    966                                                           0, offset + 0, 3, 5);
    967 
    968     _FP_ACTION_ADD_TWO(unit, stage_fc, bcmFieldActionGpTosPrecedenceNew,
    969                                       0, offset + 7, 6, -1, offset + 0, 3, 1);
    970     _FP_ACTION_ADD_ONE(unit, stage_fc, bcmFieldActionGpTosPrecedenceCopy,
    971                                                           0, offset + 0, 3, 2);
    972     /* IFP_SFLOW_SET(1b) */
    973     offset = sflow_offset;
    974 
    975     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionIngSampleEnable,
    976                                  0, _FieldActionSflowSet, offset + 0, 1, 1);
    977 
    978     /* TIMESTAMP_SET(4b) */
    979     offset = timestamp_offset;
    980     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionIngressTimeStampInsert,
    981                                         0, _FieldActionTimestampInsertionSet,
    982                                         offset + 0, 2, 1);
    983     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionIngressTimeStampInsertCancel,
    984                                         0, _FieldActionTimestampInsertionSet,
    985                                         offset + 0, 2, 2);
    986     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionEgressTimeStampInsert,
    987                                         0, _FieldActionTimestampInsertionSet,
    988                                         offset + 2, 2, 1);
    989     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionEgressTimeStampInsertCancel,
    990                                         0, _FieldActionTimestampInsertionSet,
    991                                         offset + 2, 2, 2);
    992 
    993     /* IFP_TTL_SET(1b) */
    994     offset = ttl_offset;
    995 
    996     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionDoNotChangeTtl,
    997                                  0, _FieldActionTtlOverrideSet, offset + 0, 1, 1);
    998 
    999 
   1000     /* All actions which have corresponding Colored(Gp/Yp/Rp) Actions needs to be
   1001      * initialized with some default configuration(offset = 0, width = 0, value = 0).
   1002      */
   1003     _FP_ACTION_ADD_ONE(unit, stage_fc, bcmFieldActionCosQNew, 0, 0, 0, 0);
   1004     _FP_ACTION_ADD_ONE(unit, stage_fc, bcmFieldActionPrioIntNew, 0, 0, 0, 0);
   1005     _FP_ACTION_ADD_ONE(unit, stage_fc, bcmFieldActionPrioIntTos, 0, 0, 0, 0);
   1006     _FP_ACTION_ADD_ONE(unit, stage_fc, bcmFieldActionPrioIntCancel, 0, 0, 0, 0);
   1007     _FP_ACTION_ADD_ONE(unit, stage_fc, bcmFieldActionUcastCosQNew, 0, 0, 0, 0);
   1008     _FP_ACTION_ADD_ONE(unit, stage_fc, bcmFieldActionMcastCosQNew, 0, 0, 0, 0);
   1009     _FP_ACTION_ADD_ONE(unit, stage_fc, bcmFieldActionDropPrecedence, 0, 0, 0, 0);
   1010     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionColorIndependent,
   1011                                  0, _FieldActionGreenToPidSet, 0, 0, 0);
   1012     _FP_ACTION_ADD_ONE(unit, stage_fc, bcmFieldActionEcnNew, 0, 0, 0, 0);
   1013     _FP_ACTION_ADD_ONE(unit, stage_fc, bcmFieldActionPrioPktNew, 0, 0, 0, 0);
   1014     _FP_ACTION_ADD_ONE(unit, stage_fc, bcmFieldActionPrioPktTos, 0, 0, 0, 0);
   1015     _FP_ACTION_ADD_ONE(unit, stage_fc, bcmFieldActionPrioPktCancel, 0, 0, 0, 0);
   1016     _FP_ACTION_ADD_ONE(unit, stage_fc, bcmFieldActionDscpNew, 0, 0, 0, 0);
   1017     _FP_ACTION_ADD_ONE(unit, stage_fc, bcmFieldActionDscpCancel, 0, 0, 0, 0);
   1018     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionCopyToCpu,
   1019                                  0, _FieldActionCopyToCpuSet, 0, 0, 0);
   1020     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionCopyToCpuCancel,
   1021                                  0, _FieldActionCopyToCpuSet, 0, 0, 0);
   1022     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionSwitchToCpuCancel,
   1023                                  0, _FieldActionCopyToCpuSet, 0, 0, 0);
   1024     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionSwitchToCpuReinstate,
   1025                                  0, _FieldActionCopyToCpuSet, 0, 0, 0);
   1026     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionTimeStampToCpu,
   1027                                  0, _FieldActionCopyToCpuSet, 0, 0, 0);
   1028     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionDrop,
   1029                                  0, _FieldActionDropSet, 0, 0, 0);
   1030     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionDropCancel,
   1031                                  0, _FieldActionDropSet, 0, 0, 0);
   1032     _FP_ACTION_ADD_ONE(unit, stage_fc, bcmFieldActionCosMapNew, 0, 0, 0, 0);
   1033     _FP_ACTION_ADD_ONE(unit, stage_fc, bcmFieldActionDscpPreserve, 0, 0, 0, 0);
   1034     _FP_ACTION_ADD_ONE(unit, stage_fc, bcmFieldActionDot1pPreserve, 0, 0, 0, 0);
   1035 
   1036     /* ELEPHANT_TRAP_SET */
   1037     offset = etrap_offset;
   1038     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionElephantColorDisable,
   1039                                         0, _FieldActionElephantTrapSet,
   1040                                         offset + 0, 1, 1);
   1041     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionElephantColorEnable,
   1042                                         0, _FieldActionElephantTrapSet,
   1043                                         offset + 1, 1, 1);
   1044     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionElephantLookupDisable,
   1045                                         0, _FieldActionElephantTrapSet,
   1046                                         offset + 2, 1, 1);
   1047     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionElephantLookupEnable,
   1048                                         0, _FieldActionElephantTrapSet,
   1049                                         offset + 3, 1, 1);
   1050     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionElephantQueueDisable,
   1051                                         0, _FieldActionElephantTrapSet,
   1052                                         offset + 4, 1, 1);
   1053     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionElephantQueueEnable,
   1054                                         0, _FieldActionElephantTrapSet,
   1055                                         offset + 5, 1, 1);
   1056     /* INBAND_TELEMETRY_SET */
   1057     offset = int_offset;
   1058     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionIntEncapDisable,
   1059                                      0, _FieldActionInbandTelemetrySet,
   1060                                      offset + 0, 1, 1);
   1061     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionIntEncapEnable,
   1062                                      0, _FieldActionInbandTelemetrySet,
   1063                                      offset + 1, 1, 1);
   1064 
   1065     /* DELAYED ACTIONS */
   1066     offset = ddrop_offset;
   1067     _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionMatchPbmpDrop,
   1068                                  0, _FieldActionDelayedDropSet,
   1069                                  offset + 0, 7, -1, offset + 7, 1, 1);
   1070     offset = dredirect_offset;
   1071     _FP_ACTION_WITH_ASET_ADD_THREE(unit, stage_fc,
   1072                                    bcmFieldActionMatchPbmpRedirect,
   1073                                    0, _FieldActionDelayedRedirectSet,
   1074                                    offset + 0, 7, -1, offset + 8, 8, -1,
   1075                                    offset + 7, 1, 1);
   1076 
   1077     return BCM_E_NONE;
   1078 }
   1079 
   1080 int
   1081 _bcm_field_th3_extractors_init(int unit, _field_stage_t *stage_fc)
   1082 {
   1083     int level = 0;                   /* Extractor hierarchy level.          */
   1084     int gran = 0;                    /* Extractor granularity.              */
   1085     int ext_num = 0;                 /* Extractor number.                   */
   1086     int part;                        /* Entry part number.                  */
   1087     bcmi_keygen_ext_attrs_t ext_attrs;
   1088     bcmi_keygen_ext_attrs_t temp_attrs;
   1089     bcmi_keygen_ext_attrs_t *attrs = &temp_attrs;
   1090     uint32 ext_attrs_size = 0;
   1091     BCMI_KEYGEN_EXT_CFG_DECL;              /* Extractors config declaration.      */
   1092     bcmi_keygen_ext_cfg_db_t *ext_cfg_db = NULL;
   1093     BCMI_KEYGEN_FUNC_ENTER(unit);
   1094 
   1095     BCMI_KEYGEN_NULL_CHECK(stage_fc, BCM_E_PARAM);
   1096 
   1097     ext_attrs_size = sizeof(bcmi_keygen_ext_attrs_t);
   1098     sal_memset(attrs, 0, ext_attrs_size);
   1099 
   1100     _FP_XGS3_ALLOC(stage_fc->ext_cfg_db_arr,
   1101                    (BCMI_KEYGEN_MODE_COUNT * sizeof(bcmi_keygen_ext_cfg_db_t *)),
   1102                     "Field Extractors Data base Array");
   1103     if (NULL == stage_fc->ext_cfg_db_arr) {
   1104         return (BCM_E_MEMORY);
   1105     }
   1106 
   1107     _FP_XGS3_ALLOC(ext_cfg_db,
   1108                    sizeof(bcmi_keygen_ext_cfg_db_t), "Field Extractors DB");
   1109     if (NULL == ext_cfg_db) {
   1110         return (BCM_E_MEMORY);
   1111     }
   1112     stage_fc->ext_cfg_db_arr[BCMI_KEYGEN_MODE_DBLINTRA] = ext_cfg_db;
   1113     /* Initialize Level_1 32-bit extractor section. */
   1114     level = 1;
   1115     gran = 32;
   1116     ext_num = 0;
   1117     part = 0;
   1118     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, ext_num,
   1119         BCMI_KEYGEN_EXT_SECTION_L1E32, BCMI_KEYGEN_EXT_SECTION_L2S1, 0, attrs);
   1120     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 1),
   1121         BCMI_KEYGEN_EXT_SECTION_L1E32, BCMI_KEYGEN_EXT_SECTION_L2S1, 32, attrs);
   1122     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 2),
   1123         BCMI_KEYGEN_EXT_SECTION_L1E32, BCMI_KEYGEN_EXT_SECTION_L2S2, 0, attrs);
   1124     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 3),
   1125         BCMI_KEYGEN_EXT_SECTION_L1E32, BCMI_KEYGEN_EXT_SECTION_L2S2, 32, attrs);
   1126 
   1127     /* Initialize Level_1 16-bit extractors section. */
   1128     level = 1;
   1129     gran = 16;
   1130     ext_num = 0;
   1131     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, ext_num,
   1132         BCMI_KEYGEN_EXT_SECTION_L1E16, BCMI_KEYGEN_EXT_SECTION_L2S1, 64, attrs);
   1133     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 1),
   1134         BCMI_KEYGEN_EXT_SECTION_L1E16, BCMI_KEYGEN_EXT_SECTION_L2S1, 80, attrs);
   1135     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 2),
   1136         BCMI_KEYGEN_EXT_SECTION_L1E16, BCMI_KEYGEN_EXT_SECTION_L2S1, 96, attrs);
   1137     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 3),
   1138         BCMI_KEYGEN_EXT_SECTION_L1E16, BCMI_KEYGEN_EXT_SECTION_L2S1, 112, attrs);
   1139     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 4),
   1140         BCMI_KEYGEN_EXT_SECTION_L1E16, BCMI_KEYGEN_EXT_SECTION_L2S1, 128, attrs);
   1141 
   1142     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 5),
   1143         BCMI_KEYGEN_EXT_SECTION_L1E16, BCMI_KEYGEN_EXT_SECTION_L2S2, 64, attrs);
   1144     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 6),
   1145         BCMI_KEYGEN_EXT_SECTION_L1E16, BCMI_KEYGEN_EXT_SECTION_L2S2, 80, attrs);
   1146     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 7),
   1147         BCMI_KEYGEN_EXT_SECTION_L1E16, BCMI_KEYGEN_EXT_SECTION_L2S2, 96, attrs);
   1148     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 8),
   1149         BCMI_KEYGEN_EXT_SECTION_L1E16, BCMI_KEYGEN_EXT_SECTION_L2S2, 112, attrs);
   1150     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 9),
   1151         BCMI_KEYGEN_EXT_SECTION_L1E16, BCMI_KEYGEN_EXT_SECTION_L2S2, 128, attrs);
   1152 
   1153     /* Initialize Level_1 8-bit extractors section. */
   1154     level = 1;
   1155     gran = 8;
   1156     ext_num = 0;
   1157     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, ext_num,
   1158         BCMI_KEYGEN_EXT_SECTION_L1E8, BCMI_KEYGEN_EXT_SECTION_L2S2, 144, attrs);
   1159     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 1),
   1160         BCMI_KEYGEN_EXT_SECTION_L1E8, BCMI_KEYGEN_EXT_SECTION_L2S2, 152, attrs);
   1161     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 2),
   1162         BCMI_KEYGEN_EXT_SECTION_L1E8, BCMI_KEYGEN_EXT_SECTION_L2S2, 160, attrs);
   1163     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 3),
   1164         BCMI_KEYGEN_EXT_SECTION_L1E8, BCMI_KEYGEN_EXT_SECTION_L2S2, 168, attrs);
   1165     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 4),
   1166         BCMI_KEYGEN_EXT_SECTION_L1E8, BCMI_KEYGEN_EXT_SECTION_L2S2, 176, attrs);
   1167     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1168     SHR_BITSET(ext_attrs.w, BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_LTID);
   1169     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 5),
   1170         BCMI_KEYGEN_EXT_SECTION_L1E8, BCMI_KEYGEN_EXT_SECTION_L2S2,
   1171         184, &ext_attrs);
   1172 
   1173     /* Initialize Level_1 4-bit extractors section. */
   1174     level = 1;
   1175     gran = 4;
   1176     ext_num = 0;
   1177     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, ext_num,
   1178         BCMI_KEYGEN_EXT_SECTION_L1E4, BCMI_KEYGEN_EXT_SECTION_L2S2, 192, attrs);
   1179     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 1),
   1180         BCMI_KEYGEN_EXT_SECTION_L1E4, BCMI_KEYGEN_EXT_SECTION_L2S2, 196, attrs);
   1181     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 2),
   1182         BCMI_KEYGEN_EXT_SECTION_L1E4, BCMI_KEYGEN_EXT_SECTION_L2S2, 200, attrs);
   1183     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 3),
   1184         BCMI_KEYGEN_EXT_SECTION_L1E4, BCMI_KEYGEN_EXT_SECTION_L2S2, 204, attrs);
   1185     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 4),
   1186         BCMI_KEYGEN_EXT_SECTION_L1E4, BCMI_KEYGEN_EXT_SECTION_L2S2, 208, attrs);
   1187     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 5),
   1188         BCMI_KEYGEN_EXT_SECTION_L1E4, BCMI_KEYGEN_EXT_SECTION_L2S2, 212, attrs);
   1189     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 6),
   1190         BCMI_KEYGEN_EXT_SECTION_L1E4, BCMI_KEYGEN_EXT_SECTION_L2S2, 216, attrs);
   1191     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 7),
   1192         BCMI_KEYGEN_EXT_SECTION_L1E4, BCMI_KEYGEN_EXT_SECTION_L2S2, 220, attrs);
   1193     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 8),
   1194         BCMI_KEYGEN_EXT_SECTION_L1E4, BCMI_KEYGEN_EXT_SECTION_L2S2, 224, attrs);
   1195     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 9),
   1196         BCMI_KEYGEN_EXT_SECTION_L1E4, BCMI_KEYGEN_EXT_SECTION_L2S2, 228, attrs);
   1197 
   1198     /* Initialize Level_2 16-bit extractors section. */
   1199     level = 2;
   1200     gran = 16;
   1201     ext_num = 0;
   1202     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1203     SHR_BITSET(ext_attrs.w, BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_IPBM);
   1204     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, ext_num,
   1205         BCMI_KEYGEN_EXT_SECTION_L2S1, BCMI_KEYGEN_EXT_SECTION_L3S1, 0, &ext_attrs);
   1206     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1207     SHR_BITSET(ext_attrs.w, BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_DST_CONTAINER_A);
   1208     SHR_BITSET(ext_attrs.w, BCMI_KEYGEN_EXT_ATTR_NOT_WITH_MODE_SINGLE_ASET_WIDE);
   1209     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 1),
   1210         BCMI_KEYGEN_EXT_SECTION_L2S1, BCMI_KEYGEN_EXT_SECTION_L3S1, 20, &ext_attrs);
   1211     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1212     SHR_BITSET(ext_attrs.w, BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_DST_CONTAINER_B);
   1213     SHR_BITSET(ext_attrs.w, BCMI_KEYGEN_EXT_ATTR_NOT_WITH_MODE_SINGLE_ASET_WIDE);
   1214     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 2),
   1215         BCMI_KEYGEN_EXT_SECTION_L2S1, BCMI_KEYGEN_EXT_SECTION_L3S1, 36, &ext_attrs);
   1216     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1217     SHR_BITSET(ext_attrs.w, BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_CLASS_ID_C);
   1218     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 3),
   1219         BCMI_KEYGEN_EXT_SECTION_L2S1, BCMI_KEYGEN_EXT_SECTION_L3S1, 52, &ext_attrs);
   1220     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1221     SHR_BITSET(ext_attrs.w, BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_CLASS_ID_D);
   1222     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 4),
   1223         BCMI_KEYGEN_EXT_SECTION_L2S1, BCMI_KEYGEN_EXT_SECTION_L3S1, 68, attrs);
   1224 
   1225     /* Initialize Level_2 4-bit extractors section. */
   1226     level = 2;
   1227     gran = 4;
   1228     ext_num = 0;
   1229     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1230     SHR_BITSET(ext_attrs.w, BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_IPBM);
   1231     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, ext_num,
   1232         BCMI_KEYGEN_EXT_SECTION_L2S2, BCMI_KEYGEN_EXT_SECTION_L3S1, 16, &ext_attrs);
   1233     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1234     SHR_BITSET(ext_attrs.w,
   1235         BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_EM_FIRST_LOOKUP_CLASSID_BITS_0_3);
   1236     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 1),
   1237         BCMI_KEYGEN_EXT_SECTION_L2S2, BCMI_KEYGEN_EXT_SECTION_L3S1, 84, &ext_attrs);
   1238     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1239     SHR_BITSET(ext_attrs.w,
   1240         BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_EM_FIRST_LOOKUP_CLASSID_BITS_4_7);
   1241     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 2),
   1242         BCMI_KEYGEN_EXT_SECTION_L2S2, BCMI_KEYGEN_EXT_SECTION_L3S1, 88, &ext_attrs);
   1243     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1244     SHR_BITSET(ext_attrs.w,
   1245         BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_EM_FIRST_LOOKUP_CLASSID_BITS_8_11);
   1246     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 3),
   1247         BCMI_KEYGEN_EXT_SECTION_L2S2, BCMI_KEYGEN_EXT_SECTION_L3S1, 92, &ext_attrs);
   1248     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1249     SHR_BITSET(ext_attrs.w,
   1250         BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_LOOKUP_STATUS_VECTOR_BITS_0_3);
   1251     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 4),
   1252         BCMI_KEYGEN_EXT_SECTION_L2S2, BCMI_KEYGEN_EXT_SECTION_L3S1, 96, &ext_attrs);
   1253     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1254     SHR_BITSET(ext_attrs.w,
   1255         BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_LOOKUP_STATUS_VECTOR_BITS_4_7);
   1256     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 5),
   1257         BCMI_KEYGEN_EXT_SECTION_L2S2, BCMI_KEYGEN_EXT_SECTION_L3S1, 100, &ext_attrs);
   1258     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1259     SHR_BITSET(ext_attrs.w,
   1260         BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_PKT_RESOLUTION);
   1261     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 6),
   1262         BCMI_KEYGEN_EXT_SECTION_L2S2, BCMI_KEYGEN_EXT_SECTION_L3S1, 104, &ext_attrs);
   1263     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1264     SHR_BITSET(ext_attrs.w,
   1265         BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_PKT_RESOLUTION);
   1266     SHR_BITSET(ext_attrs.w,
   1267         BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_DST_CONTAINER_A);
   1268     SHR_BITSET(ext_attrs.w,
   1269         BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_DST_CONTAINER_B);
   1270     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 7),
   1271         BCMI_KEYGEN_EXT_SECTION_L2S2, BCMI_KEYGEN_EXT_SECTION_L3S1, 108, &ext_attrs);
   1272     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1273     SHR_BITSET(ext_attrs.w, BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_IFP_DROP_VECTOR);
   1274     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 8),
   1275         BCMI_KEYGEN_EXT_SECTION_L2S2, BCMI_KEYGEN_EXT_SECTION_L3S1, 112, &ext_attrs);
   1276     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1277     SHR_BITSET(ext_attrs.w, BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_INT_PRI);
   1278     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 9),
   1279         BCMI_KEYGEN_EXT_SECTION_L2S2, BCMI_KEYGEN_EXT_SECTION_L3S1, 116, &ext_attrs);
   1280     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1281     SHR_BITSET(ext_attrs.w, BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_MH_OPCODE);
   1282     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 10),
   1283         BCMI_KEYGEN_EXT_SECTION_L2S2, BCMI_KEYGEN_EXT_SECTION_L3S1, 120, &ext_attrs);
   1284     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1285     SHR_BITSET(ext_attrs.w, BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_LTID);
   1286     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num +11),
   1287         BCMI_KEYGEN_EXT_SECTION_L2S2, BCMI_KEYGEN_EXT_SECTION_L3S1, 124, &ext_attrs);
   1288     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1289     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 12),
   1290         BCMI_KEYGEN_EXT_SECTION_L2S2, BCMI_KEYGEN_EXT_SECTION_L3S1, 128, &ext_attrs);
   1291     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 13),
   1292         BCMI_KEYGEN_EXT_SECTION_L2S2, BCMI_KEYGEN_EXT_SECTION_L3S1, 132, &ext_attrs);
   1293     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 14),
   1294         BCMI_KEYGEN_EXT_SECTION_L2S2, BCMI_KEYGEN_EXT_SECTION_L3S1, 136, &ext_attrs);
   1295     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 15),
   1296         BCMI_KEYGEN_EXT_SECTION_L2S2, BCMI_KEYGEN_EXT_SECTION_L3S1, 140, &ext_attrs);
   1297 
   1298     /* Initialize Level2 2-bit extractors section. */
   1299     level = 2;
   1300     gran = 2;
   1301     ext_num = 0;
   1302     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1303     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, ext_num,
   1304         BCMI_KEYGEN_EXT_SECTION_L2S2, BCMI_KEYGEN_EXT_SECTION_L3S1, 144, &ext_attrs);
   1305     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 1),
   1306         BCMI_KEYGEN_EXT_SECTION_L2S2, BCMI_KEYGEN_EXT_SECTION_L3S1, 146, &ext_attrs);
   1307     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 2),
   1308         BCMI_KEYGEN_EXT_SECTION_L2S2, BCMI_KEYGEN_EXT_SECTION_L3S1, 148, &ext_attrs);
   1309     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 3),
   1310         BCMI_KEYGEN_EXT_SECTION_L2S2, BCMI_KEYGEN_EXT_SECTION_L3S1, 150, &ext_attrs);
   1311     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 4),
   1312         BCMI_KEYGEN_EXT_SECTION_L2S2, BCMI_KEYGEN_EXT_SECTION_L3S1, 152, &ext_attrs);
   1313     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 5),
   1314         BCMI_KEYGEN_EXT_SECTION_L2S2, BCMI_KEYGEN_EXT_SECTION_L3S1, 154, &ext_attrs);
   1315     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 6),
   1316         BCMI_KEYGEN_EXT_SECTION_L2S2, BCMI_KEYGEN_EXT_SECTION_L3S1, 156, &ext_attrs);
   1317 
   1318     /* Initialize Level2 1-bit extractors section. */
   1319     gran = 1;
   1320     ext_num = 0;
   1321     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1322     SHR_BITSET(ext_attrs.w,
   1323          BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_EM_FIRST_LOOKUP_HIT);
   1324     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, ext_num,
   1325         BCMI_KEYGEN_EXT_SECTION_L2S2, BCMI_KEYGEN_EXT_SECTION_L3S1, 158, &ext_attrs);
   1326 
   1327     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1328     SHR_BITSET(ext_attrs.w, BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_DROP);
   1329     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 1),
   1330         BCMI_KEYGEN_EXT_SECTION_L2S2, BCMI_KEYGEN_EXT_SECTION_L3S1, 159, &ext_attrs);
   1331 
   1332     level = 3;
   1333     gran = 160;
   1334     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1335     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, 0,
   1336         BCMI_KEYGEN_EXT_SECTION_L3S1, BCMI_KEYGEN_EXT_SECTION_DISABLE, 0, attrs);
   1337 
   1338     /* 320 bits mode - Initialize Level_1 32-bit extractor section. */
   1339     ext_cfg_db = NULL;
   1340     _FP_XGS3_ALLOC(ext_cfg_db,
   1341                    sizeof(bcmi_keygen_ext_cfg_db_t), "Field Extractors DB");
   1342     if (NULL == ext_cfg_db) {
   1343         return (BCM_E_MEMORY);
   1344     }
   1345     stage_fc->ext_cfg_db_arr[BCMI_KEYGEN_MODE_DBLINTER] = ext_cfg_db;
   1346 
   1347     /* Initialize Level_1 32-bit extractor section. */
   1348     level = 1;
   1349     gran = 32;
   1350     ext_num = 0;
   1351     part = 0;
   1352     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, ext_num,
   1353         BCMI_KEYGEN_EXT_SECTION_L1E32, BCMI_KEYGEN_EXT_SECTION_L2AS1, 0, attrs);
   1354     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 1),
   1355         BCMI_KEYGEN_EXT_SECTION_L1E32, BCMI_KEYGEN_EXT_SECTION_L2AS1, 32, attrs);
   1356     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 2),
   1357         BCMI_KEYGEN_EXT_SECTION_L1E32, BCMI_KEYGEN_EXT_SECTION_L2AS2, 0, attrs);
   1358     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 3),
   1359         BCMI_KEYGEN_EXT_SECTION_L1E32, BCMI_KEYGEN_EXT_SECTION_L2AS2, 32, attrs);
   1360 
   1361     /* Initialize Level_1 16-bit extractors section. */
   1362     level = 1;
   1363     gran = 16;
   1364     ext_num = 0;
   1365     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, ext_num,
   1366         BCMI_KEYGEN_EXT_SECTION_L1E16, BCMI_KEYGEN_EXT_SECTION_L2AS1, 64, attrs);
   1367     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 1),
   1368         BCMI_KEYGEN_EXT_SECTION_L1E16, BCMI_KEYGEN_EXT_SECTION_L2AS1, 80, attrs);
   1369     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 2),
   1370         BCMI_KEYGEN_EXT_SECTION_L1E16, BCMI_KEYGEN_EXT_SECTION_L2AS1, 96, attrs);
   1371     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 3),
   1372         BCMI_KEYGEN_EXT_SECTION_L1E16, BCMI_KEYGEN_EXT_SECTION_L2AS1, 112, attrs);
   1373     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 4),
   1374         BCMI_KEYGEN_EXT_SECTION_L1E16, BCMI_KEYGEN_EXT_SECTION_L2AS1, 128, attrs);
   1375 
   1376     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 5),
   1377         BCMI_KEYGEN_EXT_SECTION_L1E16, BCMI_KEYGEN_EXT_SECTION_L2AS2, 64, attrs);
   1378     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 6),
   1379         BCMI_KEYGEN_EXT_SECTION_L1E16, BCMI_KEYGEN_EXT_SECTION_L2AS2, 80, attrs);
   1380     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 7),
   1381         BCMI_KEYGEN_EXT_SECTION_L1E16, BCMI_KEYGEN_EXT_SECTION_L2AS2, 96, attrs);
   1382     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 8),
   1383         BCMI_KEYGEN_EXT_SECTION_L1E16, BCMI_KEYGEN_EXT_SECTION_L2AS2, 112, attrs);
   1384     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 9),
   1385         BCMI_KEYGEN_EXT_SECTION_L1E16, BCMI_KEYGEN_EXT_SECTION_L2AS2, 128, attrs);
   1386 
   1387     /* Initialize Level_1 8-bit extractors section. */
   1388     level = 1;
   1389     gran = 8;
   1390     ext_num = 0;
   1391     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, ext_num,
   1392         BCMI_KEYGEN_EXT_SECTION_L1E8, BCMI_KEYGEN_EXT_SECTION_L2AS2, 144, attrs);
   1393     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 1),
   1394         BCMI_KEYGEN_EXT_SECTION_L1E8, BCMI_KEYGEN_EXT_SECTION_L2AS2, 152, attrs);
   1395     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 2),
   1396         BCMI_KEYGEN_EXT_SECTION_L1E8, BCMI_KEYGEN_EXT_SECTION_L2AS2, 160, attrs);
   1397     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 3),
   1398         BCMI_KEYGEN_EXT_SECTION_L1E8, BCMI_KEYGEN_EXT_SECTION_L2AS2, 168, attrs);
   1399     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 4),
   1400         BCMI_KEYGEN_EXT_SECTION_L1E8, BCMI_KEYGEN_EXT_SECTION_L2AS2, 176, attrs);
   1401     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1402     SHR_BITSET(ext_attrs.w, BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_LTID);
   1403     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 5),
   1404         BCMI_KEYGEN_EXT_SECTION_L1E8, BCMI_KEYGEN_EXT_SECTION_L2AS2,
   1405         184, &ext_attrs);
   1406 
   1407     /* Initialize Level_1 4-bit extractors section. */
   1408     level = 1;
   1409     gran = 4;
   1410     ext_num = 0;
   1411     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, ext_num,
   1412         BCMI_KEYGEN_EXT_SECTION_L1E4, BCMI_KEYGEN_EXT_SECTION_L2AS2, 192, attrs);
   1413     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 1),
   1414         BCMI_KEYGEN_EXT_SECTION_L1E4, BCMI_KEYGEN_EXT_SECTION_L2AS2, 196, attrs);
   1415     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 2),
   1416         BCMI_KEYGEN_EXT_SECTION_L1E4, BCMI_KEYGEN_EXT_SECTION_L2AS2, 200, attrs);
   1417     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 3),
   1418         BCMI_KEYGEN_EXT_SECTION_L1E4, BCMI_KEYGEN_EXT_SECTION_L2AS2, 204, attrs);
   1419     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 4),
   1420         BCMI_KEYGEN_EXT_SECTION_L1E4, BCMI_KEYGEN_EXT_SECTION_L2AS2, 208, attrs);
   1421     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 5),
   1422         BCMI_KEYGEN_EXT_SECTION_L1E4, BCMI_KEYGEN_EXT_SECTION_L2AS2, 212, attrs);
   1423     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 6),
   1424         BCMI_KEYGEN_EXT_SECTION_L1E4, BCMI_KEYGEN_EXT_SECTION_L2AS2, 216, attrs);
   1425     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 7),
   1426         BCMI_KEYGEN_EXT_SECTION_L1E4, BCMI_KEYGEN_EXT_SECTION_L2AS2, 220, attrs);
   1427     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 8),
   1428         BCMI_KEYGEN_EXT_SECTION_L1E4, BCMI_KEYGEN_EXT_SECTION_L2AS2, 224, attrs);
   1429     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 9),
   1430         BCMI_KEYGEN_EXT_SECTION_L1E4, BCMI_KEYGEN_EXT_SECTION_L2AS2, 228, attrs);
   1431 
   1432     /* Initialize Level_2 16-bit extractors section. */
   1433     level = 2;
   1434     gran = 16;
   1435     ext_num = 0;
   1436     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1437     SHR_BITSET(ext_attrs.w, BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_IPBM);
   1438     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, ext_num,
   1439         BCMI_KEYGEN_EXT_SECTION_L2AS1, BCMI_KEYGEN_EXT_SECTION_L3AS1, 0, &ext_attrs);
   1440     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1441     SHR_BITSET(ext_attrs.w, BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_DST_CONTAINER_A);
   1442     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 1),
   1443         BCMI_KEYGEN_EXT_SECTION_L2AS1, BCMI_KEYGEN_EXT_SECTION_L3AS1, 20, &ext_attrs);
   1444     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1445     SHR_BITSET(ext_attrs.w, BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_DST_CONTAINER_B);
   1446     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 2),
   1447         BCMI_KEYGEN_EXT_SECTION_L2AS1, BCMI_KEYGEN_EXT_SECTION_L3AS1, 36, &ext_attrs);
   1448     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1449     SHR_BITSET(ext_attrs.w, BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_CLASS_ID_C);
   1450     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 3),
   1451         BCMI_KEYGEN_EXT_SECTION_L2AS1, BCMI_KEYGEN_EXT_SECTION_L3AS1, 52, &ext_attrs);
   1452     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1453     SHR_BITSET(ext_attrs.w, BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_CLASS_ID_D);
   1454     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 4),
   1455         BCMI_KEYGEN_EXT_SECTION_L2AS1, BCMI_KEYGEN_EXT_SECTION_L3AS1, 68, attrs);
   1456 
   1457     /* Initialize Level_2 4-bit extractors section. */
   1458     level = 2;
   1459     gran = 4;
   1460     ext_num = 0;
   1461     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1462     SHR_BITSET(ext_attrs.w, BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_IPBM);
   1463     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, ext_num,
   1464         BCMI_KEYGEN_EXT_SECTION_L2AS2, BCMI_KEYGEN_EXT_SECTION_L3AS1, 16, &ext_attrs);
   1465     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1466     SHR_BITSET(ext_attrs.w,
   1467         BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_EM_FIRST_LOOKUP_CLASSID_BITS_0_3);
   1468     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 1),
   1469         BCMI_KEYGEN_EXT_SECTION_L2AS2, BCMI_KEYGEN_EXT_SECTION_L3AS1, 84, &ext_attrs);
   1470     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1471     SHR_BITSET(ext_attrs.w,
   1472         BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_EM_FIRST_LOOKUP_CLASSID_BITS_4_7);
   1473     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 2),
   1474         BCMI_KEYGEN_EXT_SECTION_L2AS2, BCMI_KEYGEN_EXT_SECTION_L3AS1, 88, &ext_attrs);
   1475     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1476     SHR_BITSET(ext_attrs.w,
   1477         BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_EM_FIRST_LOOKUP_CLASSID_BITS_8_11);
   1478     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 3),
   1479         BCMI_KEYGEN_EXT_SECTION_L2AS2, BCMI_KEYGEN_EXT_SECTION_L3AS1, 92, &ext_attrs);
   1480     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1481     SHR_BITSET(ext_attrs.w,
   1482         BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_LOOKUP_STATUS_VECTOR_BITS_0_3);
   1483     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 4),
   1484         BCMI_KEYGEN_EXT_SECTION_L2AS2, BCMI_KEYGEN_EXT_SECTION_L3AS1, 96, &ext_attrs);
   1485     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1486     SHR_BITSET(ext_attrs.w,
   1487         BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_LOOKUP_STATUS_VECTOR_BITS_4_7);
   1488     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 5),
   1489         BCMI_KEYGEN_EXT_SECTION_L2AS2, BCMI_KEYGEN_EXT_SECTION_L3AS1, 100, &ext_attrs);
   1490     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1491     SHR_BITSET(ext_attrs.w,
   1492         BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_PKT_RESOLUTION);
   1493     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 6),
   1494         BCMI_KEYGEN_EXT_SECTION_L2AS2, BCMI_KEYGEN_EXT_SECTION_L3AS1, 104, &ext_attrs);
   1495     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1496     SHR_BITSET(ext_attrs.w,
   1497         BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_PKT_RESOLUTION);
   1498     SHR_BITSET(ext_attrs.w,
   1499         BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_DST_CONTAINER_A);
   1500     SHR_BITSET(ext_attrs.w,
   1501         BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_DST_CONTAINER_B);
   1502     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 7),
   1503         BCMI_KEYGEN_EXT_SECTION_L2AS2, BCMI_KEYGEN_EXT_SECTION_L3AS1, 108, &ext_attrs);
   1504     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1505     SHR_BITSET(ext_attrs.w, BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_IFP_DROP_VECTOR);
   1506     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 8),
   1507         BCMI_KEYGEN_EXT_SECTION_L2AS2, BCMI_KEYGEN_EXT_SECTION_L3AS1, 112, &ext_attrs);
   1508     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1509     SHR_BITSET(ext_attrs.w, BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_INT_PRI);
   1510     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 9),
   1511         BCMI_KEYGEN_EXT_SECTION_L2AS2, BCMI_KEYGEN_EXT_SECTION_L3AS1, 116, &ext_attrs);
   1512     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1513     SHR_BITSET(ext_attrs.w, BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_MH_OPCODE);
   1514     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 10),
   1515         BCMI_KEYGEN_EXT_SECTION_L2AS2, BCMI_KEYGEN_EXT_SECTION_L3AS1, 120, &ext_attrs);
   1516     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1517     SHR_BITSET(ext_attrs.w, BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_LTID);
   1518     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 11) ,
   1519         BCMI_KEYGEN_EXT_SECTION_L2AS2, BCMI_KEYGEN_EXT_SECTION_L3AS1, 124, &ext_attrs);
   1520     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1521     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 12),
   1522         BCMI_KEYGEN_EXT_SECTION_L2AS2, BCMI_KEYGEN_EXT_SECTION_L3AS1, 128, &ext_attrs);
   1523     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 13),
   1524         BCMI_KEYGEN_EXT_SECTION_L2AS2, BCMI_KEYGEN_EXT_SECTION_L3AS1, 132, &ext_attrs);
   1525     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 14),
   1526         BCMI_KEYGEN_EXT_SECTION_L2AS2, BCMI_KEYGEN_EXT_SECTION_L3AS1, 136, &ext_attrs);
   1527     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 15),
   1528         BCMI_KEYGEN_EXT_SECTION_L2AS2, BCMI_KEYGEN_EXT_SECTION_L3AS1, 140, &ext_attrs);
   1529 
   1530     /* Initialize Level2 2-bit extractors section. */
   1531     level = 2;
   1532     gran = 2;
   1533     ext_num = 0;
   1534     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1535     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, ext_num,
   1536         BCMI_KEYGEN_EXT_SECTION_L2AS2, BCMI_KEYGEN_EXT_SECTION_L3AS1, 144, &ext_attrs);
   1537     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 1),
   1538         BCMI_KEYGEN_EXT_SECTION_L2AS2, BCMI_KEYGEN_EXT_SECTION_L3AS1, 146, &ext_attrs);
   1539     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 2),
   1540         BCMI_KEYGEN_EXT_SECTION_L2AS2, BCMI_KEYGEN_EXT_SECTION_L3AS1, 148, &ext_attrs);
   1541     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 3),
   1542         BCMI_KEYGEN_EXT_SECTION_L2AS2, BCMI_KEYGEN_EXT_SECTION_L3AS1, 150, &ext_attrs);
   1543     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 4),
   1544         BCMI_KEYGEN_EXT_SECTION_L2AS2, BCMI_KEYGEN_EXT_SECTION_L3AS1, 152, &ext_attrs);
   1545     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 5),
   1546         BCMI_KEYGEN_EXT_SECTION_L2AS2, BCMI_KEYGEN_EXT_SECTION_L3AS1, 154, &ext_attrs);
   1547     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 6),
   1548         BCMI_KEYGEN_EXT_SECTION_L2AS2, BCMI_KEYGEN_EXT_SECTION_L3AS1, 156, &ext_attrs);
   1549 
   1550     /* Initialize Level2 1-bit extractors section. */
   1551     gran = 1;
   1552     ext_num = 0;
   1553     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1554     SHR_BITSET(ext_attrs.w,
   1555          BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_EM_FIRST_LOOKUP_HIT);
   1556     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, ext_num,
   1557         BCMI_KEYGEN_EXT_SECTION_L2AS2, BCMI_KEYGEN_EXT_SECTION_L3AS1, 158, &ext_attrs);
   1558 
   1559     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1560     SHR_BITSET(ext_attrs.w, BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_DROP);
   1561     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 1),
   1562         BCMI_KEYGEN_EXT_SECTION_L2AS2, BCMI_KEYGEN_EXT_SECTION_L3AS1, 159, &ext_attrs);
   1563 
   1564 
   1565     /* Initialize Level_1 32-bit extractor section. */
   1566     level = 1;
   1567     gran = 32;
   1568     ext_num = 0;
   1569     part = 1;
   1570     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1571     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, ext_num,
   1572         BCMI_KEYGEN_EXT_SECTION_L1E32, BCMI_KEYGEN_EXT_SECTION_L2BS1, 0, attrs);
   1573     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 1),
   1574         BCMI_KEYGEN_EXT_SECTION_L1E32, BCMI_KEYGEN_EXT_SECTION_L2BS1, 32, attrs);
   1575     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 2),
   1576         BCMI_KEYGEN_EXT_SECTION_L1E32, BCMI_KEYGEN_EXT_SECTION_L2BS2, 0, attrs);
   1577     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 3),
   1578         BCMI_KEYGEN_EXT_SECTION_L1E32, BCMI_KEYGEN_EXT_SECTION_L2BS2, 32, attrs);
   1579 
   1580     /* Initialize Level_1 16-bit extractors section. */
   1581     level = 1;
   1582     gran = 16;
   1583     ext_num = 0;
   1584     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, ext_num,
   1585         BCMI_KEYGEN_EXT_SECTION_L1E16, BCMI_KEYGEN_EXT_SECTION_L2BS1, 64, attrs);
   1586     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 1),
   1587         BCMI_KEYGEN_EXT_SECTION_L1E16, BCMI_KEYGEN_EXT_SECTION_L2BS1, 80, attrs);
   1588     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 2),
   1589         BCMI_KEYGEN_EXT_SECTION_L1E16, BCMI_KEYGEN_EXT_SECTION_L2BS1, 96, attrs);
   1590     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 3),
   1591         BCMI_KEYGEN_EXT_SECTION_L1E16, BCMI_KEYGEN_EXT_SECTION_L2BS1, 112, attrs);
   1592     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 4),
   1593         BCMI_KEYGEN_EXT_SECTION_L1E16, BCMI_KEYGEN_EXT_SECTION_L2BS1, 128, attrs);
   1594 
   1595     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 5),
   1596         BCMI_KEYGEN_EXT_SECTION_L1E16, BCMI_KEYGEN_EXT_SECTION_L2BS2, 64, attrs);
   1597     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 6),
   1598         BCMI_KEYGEN_EXT_SECTION_L1E16, BCMI_KEYGEN_EXT_SECTION_L2BS2, 80, attrs);
   1599     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 7),
   1600         BCMI_KEYGEN_EXT_SECTION_L1E16, BCMI_KEYGEN_EXT_SECTION_L2BS2, 96, attrs);
   1601     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 8),
   1602         BCMI_KEYGEN_EXT_SECTION_L1E16, BCMI_KEYGEN_EXT_SECTION_L2BS2, 112, attrs);
   1603     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 9),
   1604         BCMI_KEYGEN_EXT_SECTION_L1E16, BCMI_KEYGEN_EXT_SECTION_L2BS2, 128, attrs);
   1605 
   1606     /* Initialize Level_1 8-bit extractors section. */
   1607     level = 1;
   1608     gran = 8;
   1609     ext_num = 0;
   1610     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, ext_num,
   1611         BCMI_KEYGEN_EXT_SECTION_L1E8, BCMI_KEYGEN_EXT_SECTION_L2BS2, 144, attrs);
   1612     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 1),
   1613         BCMI_KEYGEN_EXT_SECTION_L1E8, BCMI_KEYGEN_EXT_SECTION_L2BS2, 152, attrs);
   1614     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 2),
   1615         BCMI_KEYGEN_EXT_SECTION_L1E8, BCMI_KEYGEN_EXT_SECTION_L2BS2, 160, attrs);
   1616     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 3),
   1617         BCMI_KEYGEN_EXT_SECTION_L1E8, BCMI_KEYGEN_EXT_SECTION_L2BS2, 168, attrs);
   1618     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 4),
   1619         BCMI_KEYGEN_EXT_SECTION_L1E8, BCMI_KEYGEN_EXT_SECTION_L2BS2, 176, attrs);
   1620     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 5),
   1621         BCMI_KEYGEN_EXT_SECTION_L1E8, BCMI_KEYGEN_EXT_SECTION_L2BS2, 184, attrs);
   1622 
   1623     /* Initialize Level_1 4-bit extractors section. */
   1624     level = 1;
   1625     gran = 4;
   1626     ext_num = 0;
   1627     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, ext_num,
   1628         BCMI_KEYGEN_EXT_SECTION_L1E4, BCMI_KEYGEN_EXT_SECTION_L2BS2, 192, attrs);
   1629     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 1),
   1630         BCMI_KEYGEN_EXT_SECTION_L1E4, BCMI_KEYGEN_EXT_SECTION_L2BS2, 196, attrs);
   1631     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 2),
   1632         BCMI_KEYGEN_EXT_SECTION_L1E4, BCMI_KEYGEN_EXT_SECTION_L2BS2, 200, attrs);
   1633     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 3),
   1634         BCMI_KEYGEN_EXT_SECTION_L1E4, BCMI_KEYGEN_EXT_SECTION_L2BS2, 204, attrs);
   1635     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 4),
   1636         BCMI_KEYGEN_EXT_SECTION_L1E4, BCMI_KEYGEN_EXT_SECTION_L2BS2, 208, attrs);
   1637     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 5),
   1638         BCMI_KEYGEN_EXT_SECTION_L1E4, BCMI_KEYGEN_EXT_SECTION_L2BS2, 212, attrs);
   1639     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 6),
   1640         BCMI_KEYGEN_EXT_SECTION_L1E4, BCMI_KEYGEN_EXT_SECTION_L2BS2, 216, attrs);
   1641     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 7),
   1642         BCMI_KEYGEN_EXT_SECTION_L1E4, BCMI_KEYGEN_EXT_SECTION_L2BS2, 220, attrs);
   1643     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 8),
   1644         BCMI_KEYGEN_EXT_SECTION_L1E4, BCMI_KEYGEN_EXT_SECTION_L2BS2, 224, attrs);
   1645     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 9),
   1646         BCMI_KEYGEN_EXT_SECTION_L1E4, BCMI_KEYGEN_EXT_SECTION_L2BS2, 228, attrs);
   1647 
   1648     /* Initialize Level_2 16-bit extractors section. */
   1649     level = 2;
   1650     gran = 16;
   1651     ext_num = 0;
   1652     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1653     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, ext_num,
   1654         BCMI_KEYGEN_EXT_SECTION_L2BS1, BCMI_KEYGEN_EXT_SECTION_L3BS1, 0, &ext_attrs);
   1655     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1656     SHR_BITSET(ext_attrs.w, BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_DST_CONTAINER_A);
   1657     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 1),
   1658         BCMI_KEYGEN_EXT_SECTION_L2BS1, BCMI_KEYGEN_EXT_SECTION_L3BS1, 20, &ext_attrs);
   1659     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1660     SHR_BITSET(ext_attrs.w, BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_DST_CONTAINER_B);
   1661     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 2),
   1662         BCMI_KEYGEN_EXT_SECTION_L2BS1, BCMI_KEYGEN_EXT_SECTION_L3BS1, 36, &ext_attrs);
   1663     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1664     SHR_BITSET(ext_attrs.w, BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_CLASS_ID_C);
   1665     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 3),
   1666         BCMI_KEYGEN_EXT_SECTION_L2BS1, BCMI_KEYGEN_EXT_SECTION_L3BS1, 52, &ext_attrs);
   1667     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1668     SHR_BITSET(ext_attrs.w, BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_CLASS_ID_D);
   1669     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 4),
   1670         BCMI_KEYGEN_EXT_SECTION_L2BS1, BCMI_KEYGEN_EXT_SECTION_L3BS1, 68, attrs);
   1671 
   1672     /* Initialize Level_2 4-bit extractors section. */
   1673     level = 2;
   1674     gran = 4;
   1675     ext_num = 0;
   1676     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1677     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, ext_num,
   1678         BCMI_KEYGEN_EXT_SECTION_L2BS2, BCMI_KEYGEN_EXT_SECTION_L3BS1, 16, &ext_attrs);
   1679     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 1),
   1680         BCMI_KEYGEN_EXT_SECTION_L2BS2, BCMI_KEYGEN_EXT_SECTION_L3BS1, 84, &ext_attrs);
   1681     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 2),
   1682         BCMI_KEYGEN_EXT_SECTION_L2BS2, BCMI_KEYGEN_EXT_SECTION_L3BS1, 88, &ext_attrs);
   1683     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 3),
   1684         BCMI_KEYGEN_EXT_SECTION_L2BS2, BCMI_KEYGEN_EXT_SECTION_L3BS1, 92, &ext_attrs);
   1685     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 4),
   1686         BCMI_KEYGEN_EXT_SECTION_L2BS2, BCMI_KEYGEN_EXT_SECTION_L3BS1, 96, &ext_attrs);
   1687     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 5),
   1688         BCMI_KEYGEN_EXT_SECTION_L2BS2, BCMI_KEYGEN_EXT_SECTION_L3BS1, 100, &ext_attrs);
   1689     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 6),
   1690         BCMI_KEYGEN_EXT_SECTION_L2BS2, BCMI_KEYGEN_EXT_SECTION_L3BS1, 104, &ext_attrs);
   1691     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1692     SHR_BITSET(ext_attrs.w,
   1693         BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_DST_CONTAINER_A);
   1694     SHR_BITSET(ext_attrs.w,
   1695         BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_DST_CONTAINER_B);
   1696     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 7),
   1697         BCMI_KEYGEN_EXT_SECTION_L2BS2, BCMI_KEYGEN_EXT_SECTION_L3BS1, 108, &ext_attrs);
   1698     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1699     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 8),
   1700         BCMI_KEYGEN_EXT_SECTION_L2BS2, BCMI_KEYGEN_EXT_SECTION_L3BS1, 112, &ext_attrs);
   1701     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 9),
   1702         BCMI_KEYGEN_EXT_SECTION_L2BS2, BCMI_KEYGEN_EXT_SECTION_L3BS1, 116, &ext_attrs);
   1703     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 10),
   1704         BCMI_KEYGEN_EXT_SECTION_L2BS2, BCMI_KEYGEN_EXT_SECTION_L3BS1, 120, &ext_attrs);
   1705     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 11),
   1706         BCMI_KEYGEN_EXT_SECTION_L2BS2, BCMI_KEYGEN_EXT_SECTION_L3BS1, 124, &ext_attrs);
   1707     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 12),
   1708         BCMI_KEYGEN_EXT_SECTION_L2BS2, BCMI_KEYGEN_EXT_SECTION_L3BS1, 128, &ext_attrs);
   1709     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 13),
   1710         BCMI_KEYGEN_EXT_SECTION_L2BS2, BCMI_KEYGEN_EXT_SECTION_L3BS1, 132, &ext_attrs);
   1711     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 14),
   1712         BCMI_KEYGEN_EXT_SECTION_L2BS2, BCMI_KEYGEN_EXT_SECTION_L3BS1, 136, &ext_attrs);
   1713     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 15),
   1714         BCMI_KEYGEN_EXT_SECTION_L2BS2, BCMI_KEYGEN_EXT_SECTION_L3BS1, 140, &ext_attrs);
   1715 
   1716     /* Initialize Level2 2-bit extractors section. */
   1717     level = 2;
   1718     gran = 2;
   1719     ext_num = 0;
   1720     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1721     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, ext_num,
   1722         BCMI_KEYGEN_EXT_SECTION_L2BS2, BCMI_KEYGEN_EXT_SECTION_L3BS1, 144, &ext_attrs);
   1723     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 1),
   1724         BCMI_KEYGEN_EXT_SECTION_L2BS2, BCMI_KEYGEN_EXT_SECTION_L3BS1, 146, &ext_attrs);
   1725     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 2),
   1726         BCMI_KEYGEN_EXT_SECTION_L2BS2, BCMI_KEYGEN_EXT_SECTION_L3BS1, 148, &ext_attrs);
   1727     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 3),
   1728         BCMI_KEYGEN_EXT_SECTION_L2BS2, BCMI_KEYGEN_EXT_SECTION_L3BS1, 150, &ext_attrs);
   1729     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 4),
   1730         BCMI_KEYGEN_EXT_SECTION_L2BS2, BCMI_KEYGEN_EXT_SECTION_L3BS1, 152, &ext_attrs);
   1731     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 5),
   1732         BCMI_KEYGEN_EXT_SECTION_L2BS2, BCMI_KEYGEN_EXT_SECTION_L3BS1, 154, &ext_attrs);
   1733     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 6),
   1734         BCMI_KEYGEN_EXT_SECTION_L2BS2, BCMI_KEYGEN_EXT_SECTION_L3BS1, 156, &ext_attrs);
   1735 
   1736     /* Initialize Level2 1-bit extractors section. */
   1737     gran = 1;
   1738     ext_num = 0;
   1739     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1740     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, ext_num,
   1741         BCMI_KEYGEN_EXT_SECTION_L2BS2, BCMI_KEYGEN_EXT_SECTION_L3BS1, 158, &ext_attrs);
   1742 
   1743     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1744     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 1),
   1745         BCMI_KEYGEN_EXT_SECTION_L2BS2, BCMI_KEYGEN_EXT_SECTION_L3BS1, 159, &ext_attrs);
   1746 
   1747 
   1748     level = 3;
   1749     gran = 160;
   1750     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, 0, level, gran, 0,
   1751         BCMI_KEYGEN_EXT_SECTION_L3AS1, BCMI_KEYGEN_EXT_SECTION_DISABLE, 0, attrs);
   1752     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, 1, level, gran, 0,
   1753         BCMI_KEYGEN_EXT_SECTION_L3BS1, BCMI_KEYGEN_EXT_SECTION_DISABLE, 0, attrs);
   1754 
   1755 
   1756     /* 480 bit mode - Initialize Level_1 32-bit extractor section. */
   1757     ext_cfg_db = NULL;
   1758     _FP_XGS3_ALLOC(ext_cfg_db,
   1759                    sizeof(bcmi_keygen_ext_cfg_db_t), "Field Extractors DB");
   1760     if (NULL == ext_cfg_db) {
   1761         return (BCM_E_MEMORY);
   1762     }
   1763     stage_fc->ext_cfg_db_arr[BCMI_KEYGEN_MODE_TRIPLE] = ext_cfg_db;
   1764 
   1765     /* Initialize Level_1 32-bit extractor section. */
   1766     level = 1;
   1767     gran = 32;
   1768     ext_num = 0;
   1769     part = 0;
   1770     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, ext_num,
   1771         BCMI_KEYGEN_EXT_SECTION_L1E32, BCMI_KEYGEN_EXT_SECTION_L2AS1, 0, attrs);
   1772     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 1),
   1773         BCMI_KEYGEN_EXT_SECTION_L1E32, BCMI_KEYGEN_EXT_SECTION_L2AS1, 32, attrs);
   1774     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 2),
   1775         BCMI_KEYGEN_EXT_SECTION_L1E32, BCMI_KEYGEN_EXT_SECTION_L2AS2, 0, attrs);
   1776     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 3),
   1777         BCMI_KEYGEN_EXT_SECTION_L1E32, BCMI_KEYGEN_EXT_SECTION_L2AS2, 32, attrs);
   1778 
   1779     /* Initialize Level_1 16-bit extractors section. */
   1780     level = 1;
   1781     gran = 16;
   1782     ext_num = 0;
   1783     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, ext_num,
   1784         BCMI_KEYGEN_EXT_SECTION_L1E16, BCMI_KEYGEN_EXT_SECTION_L2AS1, 64, attrs);
   1785     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 1),
   1786         BCMI_KEYGEN_EXT_SECTION_L1E16, BCMI_KEYGEN_EXT_SECTION_L2AS1, 80, attrs);
   1787     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 2),
   1788         BCMI_KEYGEN_EXT_SECTION_L1E16, BCMI_KEYGEN_EXT_SECTION_L2AS1, 96, attrs);
   1789     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 3),
   1790         BCMI_KEYGEN_EXT_SECTION_L1E16, BCMI_KEYGEN_EXT_SECTION_L2AS1, 112, attrs);
   1791     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 4),
   1792         BCMI_KEYGEN_EXT_SECTION_L1E16, BCMI_KEYGEN_EXT_SECTION_L2AS1, 128, attrs);
   1793 
   1794     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 5),
   1795         BCMI_KEYGEN_EXT_SECTION_L1E16, BCMI_KEYGEN_EXT_SECTION_L2AS2, 64, attrs);
   1796     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 6),
   1797         BCMI_KEYGEN_EXT_SECTION_L1E16, BCMI_KEYGEN_EXT_SECTION_L2AS2, 80, attrs);
   1798     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 7),
   1799         BCMI_KEYGEN_EXT_SECTION_L1E16, BCMI_KEYGEN_EXT_SECTION_L2AS2, 96, attrs);
   1800     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 8),
   1801         BCMI_KEYGEN_EXT_SECTION_L1E16, BCMI_KEYGEN_EXT_SECTION_L2AS2, 112, attrs);
   1802     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 9),
   1803         BCMI_KEYGEN_EXT_SECTION_L1E16, BCMI_KEYGEN_EXT_SECTION_L2AS2, 128, attrs);
   1804 
   1805     /* Initialize Level_1 8-bit extractors section. */
   1806     level = 1;
   1807     gran = 8;
   1808     ext_num = 0;
   1809     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, ext_num,
   1810         BCMI_KEYGEN_EXT_SECTION_L1E8, BCMI_KEYGEN_EXT_SECTION_L2AS2, 144, attrs);
   1811     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 1),
   1812         BCMI_KEYGEN_EXT_SECTION_L1E8, BCMI_KEYGEN_EXT_SECTION_L2AS2, 152, attrs);
   1813     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 2),
   1814         BCMI_KEYGEN_EXT_SECTION_L1E8, BCMI_KEYGEN_EXT_SECTION_L2AS2, 160, attrs);
   1815     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 3),
   1816         BCMI_KEYGEN_EXT_SECTION_L1E8, BCMI_KEYGEN_EXT_SECTION_L2AS2, 168, attrs);
   1817     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 4),
   1818         BCMI_KEYGEN_EXT_SECTION_L1E8, BCMI_KEYGEN_EXT_SECTION_L2AS2, 176, attrs);
   1819     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1820     SHR_BITSET(ext_attrs.w, BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_LTID);
   1821     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 5),
   1822         BCMI_KEYGEN_EXT_SECTION_L1E8, BCMI_KEYGEN_EXT_SECTION_L2AS2,
   1823         184, &ext_attrs);
   1824 
   1825     /* Initialize Level_1 4-bit extractors section. */
   1826     level = 1;
   1827     gran = 4;
   1828     ext_num = 0;
   1829     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, ext_num,
   1830         BCMI_KEYGEN_EXT_SECTION_L1E4, BCMI_KEYGEN_EXT_SECTION_L2AS2, 192, attrs);
   1831     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 1),
   1832         BCMI_KEYGEN_EXT_SECTION_L1E4, BCMI_KEYGEN_EXT_SECTION_L2AS2, 196, attrs);
   1833     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 2),
   1834         BCMI_KEYGEN_EXT_SECTION_L1E4, BCMI_KEYGEN_EXT_SECTION_L2AS2, 200, attrs);
   1835     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 3),
   1836         BCMI_KEYGEN_EXT_SECTION_L1E4, BCMI_KEYGEN_EXT_SECTION_L2AS2, 204, attrs);
   1837     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 4),
   1838         BCMI_KEYGEN_EXT_SECTION_L1E4, BCMI_KEYGEN_EXT_SECTION_L2AS2, 208, attrs);
   1839     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 5),
   1840         BCMI_KEYGEN_EXT_SECTION_L1E4, BCMI_KEYGEN_EXT_SECTION_L2AS2, 212, attrs);
   1841     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 6),
   1842         BCMI_KEYGEN_EXT_SECTION_L1E4, BCMI_KEYGEN_EXT_SECTION_L2AS2, 216, attrs);
   1843     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 7),
   1844         BCMI_KEYGEN_EXT_SECTION_L1E4, BCMI_KEYGEN_EXT_SECTION_L2AS2, 220, attrs);
   1845     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 8),
   1846         BCMI_KEYGEN_EXT_SECTION_L1E4, BCMI_KEYGEN_EXT_SECTION_L2AS2, 224, attrs);
   1847     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 9),
   1848         BCMI_KEYGEN_EXT_SECTION_L1E4, BCMI_KEYGEN_EXT_SECTION_L2AS2, 228, attrs);
   1849 
   1850     /* Initialize Level_2 16-bit extractors section. */
   1851     level = 2;
   1852     gran = 16;
   1853     ext_num = 0;
   1854     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1855     SHR_BITSET(ext_attrs.w, BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_IPBM);
   1856     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, ext_num,
   1857         BCMI_KEYGEN_EXT_SECTION_L2AS1, BCMI_KEYGEN_EXT_SECTION_L3AS1, 0, &ext_attrs);
   1858     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1859     SHR_BITSET(ext_attrs.w, BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_DST_CONTAINER_A);
   1860     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 1),
   1861         BCMI_KEYGEN_EXT_SECTION_L2AS1, BCMI_KEYGEN_EXT_SECTION_L3AS1, 20, &ext_attrs);
   1862     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1863     SHR_BITSET(ext_attrs.w, BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_DST_CONTAINER_B);
   1864     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 2),
   1865         BCMI_KEYGEN_EXT_SECTION_L2AS1, BCMI_KEYGEN_EXT_SECTION_L3AS1, 36, &ext_attrs);
   1866     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1867     SHR_BITSET(ext_attrs.w, BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_CLASS_ID_C);
   1868     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 3),
   1869         BCMI_KEYGEN_EXT_SECTION_L2AS1, BCMI_KEYGEN_EXT_SECTION_L3AS1, 52, &ext_attrs);
   1870     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1871     SHR_BITSET(ext_attrs.w, BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_CLASS_ID_D);
   1872     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 4),
   1873         BCMI_KEYGEN_EXT_SECTION_L2AS1, BCMI_KEYGEN_EXT_SECTION_L3AS1, 68, attrs);
   1874 
   1875     /* Initialize Level_2 4-bit extractors section. */
   1876     level = 2;
   1877     gran = 4;
   1878     ext_num = 0;
   1879     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1880     SHR_BITSET(ext_attrs.w, BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_IPBM);
   1881     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, ext_num,
   1882         BCMI_KEYGEN_EXT_SECTION_L2AS2, BCMI_KEYGEN_EXT_SECTION_L3AS1, 16, &ext_attrs);
   1883     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1884     SHR_BITSET(ext_attrs.w,
   1885         BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_EM_FIRST_LOOKUP_CLASSID_BITS_0_3);
   1886     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 1),
   1887         BCMI_KEYGEN_EXT_SECTION_L2AS2, BCMI_KEYGEN_EXT_SECTION_L3AS1, 84, &ext_attrs);
   1888     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1889     SHR_BITSET(ext_attrs.w,
   1890         BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_EM_FIRST_LOOKUP_CLASSID_BITS_4_7);
   1891     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 2),
   1892         BCMI_KEYGEN_EXT_SECTION_L2AS2, BCMI_KEYGEN_EXT_SECTION_L3AS1, 88, &ext_attrs);
   1893     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1894     SHR_BITSET(ext_attrs.w,
   1895         BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_EM_FIRST_LOOKUP_CLASSID_BITS_8_11);
   1896     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 3),
   1897         BCMI_KEYGEN_EXT_SECTION_L2AS2, BCMI_KEYGEN_EXT_SECTION_L3AS1, 92, &ext_attrs);
   1898     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1899     SHR_BITSET(ext_attrs.w,
   1900         BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_LOOKUP_STATUS_VECTOR_BITS_0_3);
   1901     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 4),
   1902         BCMI_KEYGEN_EXT_SECTION_L2AS2, BCMI_KEYGEN_EXT_SECTION_L3AS1, 96, &ext_attrs);
   1903     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1904     SHR_BITSET(ext_attrs.w,
   1905         BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_LOOKUP_STATUS_VECTOR_BITS_4_7);
   1906     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 5),
   1907         BCMI_KEYGEN_EXT_SECTION_L2AS2, BCMI_KEYGEN_EXT_SECTION_L3AS1, 100, &ext_attrs);
   1908     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1909     SHR_BITSET(ext_attrs.w,
   1910         BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_PKT_RESOLUTION);
   1911     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 6),
   1912         BCMI_KEYGEN_EXT_SECTION_L2AS2, BCMI_KEYGEN_EXT_SECTION_L3AS1, 104, &ext_attrs);
   1913     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1914     SHR_BITSET(ext_attrs.w,
   1915         BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_PKT_RESOLUTION);
   1916     SHR_BITSET(ext_attrs.w,
   1917         BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_DST_CONTAINER_A);
   1918     SHR_BITSET(ext_attrs.w,
   1919         BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_DST_CONTAINER_B);
   1920     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 7),
   1921         BCMI_KEYGEN_EXT_SECTION_L2AS2, BCMI_KEYGEN_EXT_SECTION_L3AS1, 108, &ext_attrs);
   1922     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1923     SHR_BITSET(ext_attrs.w, BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_IFP_DROP_VECTOR);
   1924     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 8),
   1925         BCMI_KEYGEN_EXT_SECTION_L2AS2, BCMI_KEYGEN_EXT_SECTION_L3AS1, 112, &ext_attrs);
   1926     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1927     SHR_BITSET(ext_attrs.w, BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_INT_PRI);
   1928     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 9),
   1929         BCMI_KEYGEN_EXT_SECTION_L2AS2, BCMI_KEYGEN_EXT_SECTION_L3AS1, 116, &ext_attrs);
   1930     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1931     SHR_BITSET(ext_attrs.w, BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_MH_OPCODE);
   1932     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 10),
   1933         BCMI_KEYGEN_EXT_SECTION_L2AS2, BCMI_KEYGEN_EXT_SECTION_L3AS1, 120, &ext_attrs);
   1934     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1935     SHR_BITSET(ext_attrs.w, BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_LTID);
   1936     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 11),
   1937         BCMI_KEYGEN_EXT_SECTION_L2AS2, BCMI_KEYGEN_EXT_SECTION_L3AS1,
   1938         124, &ext_attrs);
   1939     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1940     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 12),
   1941         BCMI_KEYGEN_EXT_SECTION_L2AS2, BCMI_KEYGEN_EXT_SECTION_L3AS1, 128, &ext_attrs);
   1942     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 13),
   1943         BCMI_KEYGEN_EXT_SECTION_L2AS2, BCMI_KEYGEN_EXT_SECTION_L3AS1, 132, &ext_attrs);
   1944     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 14),
   1945         BCMI_KEYGEN_EXT_SECTION_L2AS2, BCMI_KEYGEN_EXT_SECTION_L3AS1, 136, &ext_attrs);
   1946     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 15),
   1947         BCMI_KEYGEN_EXT_SECTION_L2AS2, BCMI_KEYGEN_EXT_SECTION_L3AS1, 140, &ext_attrs);
   1948 
   1949     /* Initialize Level2 2-bit extractors section. */
   1950     level = 2;
   1951     gran = 2;
   1952     ext_num = 0;
   1953     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1954     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, ext_num,
   1955         BCMI_KEYGEN_EXT_SECTION_L2AS2, BCMI_KEYGEN_EXT_SECTION_L3AS1, 144, &ext_attrs);
   1956     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 1),
   1957         BCMI_KEYGEN_EXT_SECTION_L2AS2, BCMI_KEYGEN_EXT_SECTION_L3AS1, 146, &ext_attrs);
   1958     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 2),
   1959         BCMI_KEYGEN_EXT_SECTION_L2AS2, BCMI_KEYGEN_EXT_SECTION_L3AS1, 148, &ext_attrs);
   1960     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 3),
   1961         BCMI_KEYGEN_EXT_SECTION_L2AS2, BCMI_KEYGEN_EXT_SECTION_L3AS1, 150, &ext_attrs);
   1962     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 4),
   1963         BCMI_KEYGEN_EXT_SECTION_L2AS2, BCMI_KEYGEN_EXT_SECTION_L3AS1, 152, &ext_attrs);
   1964     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 5),
   1965         BCMI_KEYGEN_EXT_SECTION_L2AS2, BCMI_KEYGEN_EXT_SECTION_L3AS1, 154, &ext_attrs);
   1966     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 6),
   1967         BCMI_KEYGEN_EXT_SECTION_L2AS2, BCMI_KEYGEN_EXT_SECTION_L3AS1, 156, &ext_attrs);
   1968 
   1969     /* Initialize Level2 1-bit extractors section. */
   1970     gran = 1;
   1971     ext_num = 0;
   1972     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1973     SHR_BITSET(ext_attrs.w,
   1974          BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_EM_FIRST_LOOKUP_HIT);
   1975     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, ext_num,
   1976         BCMI_KEYGEN_EXT_SECTION_L2AS2, BCMI_KEYGEN_EXT_SECTION_L3AS1, 158, &ext_attrs);
   1977 
   1978     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1979     SHR_BITSET(ext_attrs.w, BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_DROP);
   1980     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 1),
   1981         BCMI_KEYGEN_EXT_SECTION_L2AS2, BCMI_KEYGEN_EXT_SECTION_L3AS1, 159, &ext_attrs);
   1982 
   1983     /* Initialize Level_1 32-bit extractor section. */
   1984     level = 1;
   1985     gran = 32;
   1986     ext_num = 0;
   1987     part = 1;
   1988     sal_memset(&ext_attrs, 0, ext_attrs_size);
   1989     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, ext_num,
   1990         BCMI_KEYGEN_EXT_SECTION_L1E32, BCMI_KEYGEN_EXT_SECTION_L2BS1, 0, attrs);
   1991     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 1),
   1992         BCMI_KEYGEN_EXT_SECTION_L1E32, BCMI_KEYGEN_EXT_SECTION_L2BS1, 32, attrs);
   1993     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 2),
   1994         BCMI_KEYGEN_EXT_SECTION_L1E32, BCMI_KEYGEN_EXT_SECTION_L2BS2, 0, attrs);
   1995     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 3),
   1996         BCMI_KEYGEN_EXT_SECTION_L1E32, BCMI_KEYGEN_EXT_SECTION_L2BS2, 32, attrs);
   1997 
   1998     /* Initialize Level_1 16-bit extractors section. */
   1999     level = 1;
   2000     gran = 16;
   2001     ext_num = 0;
   2002     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, ext_num,
   2003         BCMI_KEYGEN_EXT_SECTION_L1E16, BCMI_KEYGEN_EXT_SECTION_L2BS1, 64, attrs);
   2004     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 1),
   2005         BCMI_KEYGEN_EXT_SECTION_L1E16, BCMI_KEYGEN_EXT_SECTION_L2BS1, 80, attrs);
   2006     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 2),
   2007         BCMI_KEYGEN_EXT_SECTION_L1E16, BCMI_KEYGEN_EXT_SECTION_L2BS1, 96, attrs);
   2008     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 3),
   2009         BCMI_KEYGEN_EXT_SECTION_L1E16, BCMI_KEYGEN_EXT_SECTION_L2BS1, 112, attrs);
   2010     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 4),
   2011         BCMI_KEYGEN_EXT_SECTION_L1E16, BCMI_KEYGEN_EXT_SECTION_L2BS1, 128, attrs);
   2012 
   2013     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 5),
   2014         BCMI_KEYGEN_EXT_SECTION_L1E16, BCMI_KEYGEN_EXT_SECTION_L2BS2, 64, attrs);
   2015     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 6),
   2016         BCMI_KEYGEN_EXT_SECTION_L1E16, BCMI_KEYGEN_EXT_SECTION_L2BS2, 80, attrs);
   2017     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 7),
   2018         BCMI_KEYGEN_EXT_SECTION_L1E16, BCMI_KEYGEN_EXT_SECTION_L2BS2, 96, attrs);
   2019     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 8),
   2020         BCMI_KEYGEN_EXT_SECTION_L1E16, BCMI_KEYGEN_EXT_SECTION_L2BS2, 112, attrs);
   2021     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 9),
   2022         BCMI_KEYGEN_EXT_SECTION_L1E16, BCMI_KEYGEN_EXT_SECTION_L2BS2, 128, attrs);
   2023 
   2024     /* Initialize Level_1 8-bit extractors section. */
   2025     level = 1;
   2026     gran = 8;
   2027     ext_num = 0;
   2028     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, ext_num,
   2029         BCMI_KEYGEN_EXT_SECTION_L1E8, BCMI_KEYGEN_EXT_SECTION_L2BS2, 144, attrs);
   2030     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 1),
   2031         BCMI_KEYGEN_EXT_SECTION_L1E8, BCMI_KEYGEN_EXT_SECTION_L2BS2, 152, attrs);
   2032     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 2),
   2033         BCMI_KEYGEN_EXT_SECTION_L1E8, BCMI_KEYGEN_EXT_SECTION_L2BS2, 160, attrs);
   2034     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 3),
   2035         BCMI_KEYGEN_EXT_SECTION_L1E8, BCMI_KEYGEN_EXT_SECTION_L2BS2, 168, attrs);
   2036     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 4),
   2037         BCMI_KEYGEN_EXT_SECTION_L1E8, BCMI_KEYGEN_EXT_SECTION_L2BS2, 176, attrs);
   2038     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 5),
   2039         BCMI_KEYGEN_EXT_SECTION_L1E8, BCMI_KEYGEN_EXT_SECTION_L2BS2, 184, attrs);
   2040 
   2041     /* Initialize Level_1 4-bit extractors section. */
   2042     level = 1;
   2043     gran = 4;
   2044     ext_num = 0;
   2045     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, ext_num,
   2046         BCMI_KEYGEN_EXT_SECTION_L1E4, BCMI_KEYGEN_EXT_SECTION_L2BS2, 192, attrs);
   2047     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 1),
   2048         BCMI_KEYGEN_EXT_SECTION_L1E4, BCMI_KEYGEN_EXT_SECTION_L2BS2, 196, attrs);
   2049     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 2),
   2050         BCMI_KEYGEN_EXT_SECTION_L1E4, BCMI_KEYGEN_EXT_SECTION_L2BS2, 200, attrs);
   2051     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 3),
   2052         BCMI_KEYGEN_EXT_SECTION_L1E4, BCMI_KEYGEN_EXT_SECTION_L2BS2, 204, attrs);
   2053     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 4),
   2054         BCMI_KEYGEN_EXT_SECTION_L1E4, BCMI_KEYGEN_EXT_SECTION_L2BS2, 208, attrs);
   2055     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 5),
   2056         BCMI_KEYGEN_EXT_SECTION_L1E4, BCMI_KEYGEN_EXT_SECTION_L2BS2, 212, attrs);
   2057     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 6),
   2058         BCMI_KEYGEN_EXT_SECTION_L1E4, BCMI_KEYGEN_EXT_SECTION_L2BS2, 216, attrs);
   2059     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 7),
   2060         BCMI_KEYGEN_EXT_SECTION_L1E4, BCMI_KEYGEN_EXT_SECTION_L2BS2, 220, attrs);
   2061     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 8),
   2062         BCMI_KEYGEN_EXT_SECTION_L1E4, BCMI_KEYGEN_EXT_SECTION_L2BS2, 224, attrs);
   2063     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 9),
   2064         BCMI_KEYGEN_EXT_SECTION_L1E4, BCMI_KEYGEN_EXT_SECTION_L2BS2, 228, attrs);
   2065 
   2066     /* Initialize Level_2 16-bit extractors section. */
   2067     level = 2;
   2068     gran = 16;
   2069     ext_num = 0;
   2070     sal_memset(&ext_attrs, 0, ext_attrs_size);
   2071     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, ext_num,
   2072         BCMI_KEYGEN_EXT_SECTION_L2BS1, BCMI_KEYGEN_EXT_SECTION_L3BS1, 0, &ext_attrs);
   2073     sal_memset(&ext_attrs, 0, ext_attrs_size);
   2074     SHR_BITSET(ext_attrs.w, BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_DST_CONTAINER_A);
   2075     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 1),
   2076         BCMI_KEYGEN_EXT_SECTION_L2BS1, BCMI_KEYGEN_EXT_SECTION_L3BS1, 20, &ext_attrs);
   2077     sal_memset(&ext_attrs, 0, ext_attrs_size);
   2078     SHR_BITSET(ext_attrs.w, BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_DST_CONTAINER_B);
   2079     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 2),
   2080         BCMI_KEYGEN_EXT_SECTION_L2BS1, BCMI_KEYGEN_EXT_SECTION_L3BS1, 36, &ext_attrs);
   2081     sal_memset(&ext_attrs, 0, ext_attrs_size);
   2082     SHR_BITSET(ext_attrs.w, BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_CLASS_ID_C);
   2083     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 3),
   2084         BCMI_KEYGEN_EXT_SECTION_L2BS1, BCMI_KEYGEN_EXT_SECTION_L3BS1, 52, &ext_attrs);
   2085     sal_memset(&ext_attrs, 0, ext_attrs_size);
   2086     SHR_BITSET(ext_attrs.w, BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_CLASS_ID_D);
   2087     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 4),
   2088         BCMI_KEYGEN_EXT_SECTION_L2BS1, BCMI_KEYGEN_EXT_SECTION_L3BS1, 68, attrs);
   2089 
   2090     /* Initialize Level_2 4-bit extractors section. */
   2091     level = 2;
   2092     gran = 4;
   2093     ext_num = 0;
   2094     sal_memset(&ext_attrs, 0, ext_attrs_size);
   2095     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, ext_num,
   2096         BCMI_KEYGEN_EXT_SECTION_L2BS2, BCMI_KEYGEN_EXT_SECTION_L3BS1, 16, &ext_attrs);
   2097     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 1),
   2098         BCMI_KEYGEN_EXT_SECTION_L2BS2, BCMI_KEYGEN_EXT_SECTION_L3BS1, 84, &ext_attrs);
   2099     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 2),
   2100         BCMI_KEYGEN_EXT_SECTION_L2BS2, BCMI_KEYGEN_EXT_SECTION_L3BS1, 88, &ext_attrs);
   2101     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 3),
   2102         BCMI_KEYGEN_EXT_SECTION_L2BS2, BCMI_KEYGEN_EXT_SECTION_L3BS1, 92, &ext_attrs);
   2103     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 4),
   2104         BCMI_KEYGEN_EXT_SECTION_L2BS2, BCMI_KEYGEN_EXT_SECTION_L3BS1, 96, &ext_attrs);
   2105     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 5),
   2106         BCMI_KEYGEN_EXT_SECTION_L2BS2, BCMI_KEYGEN_EXT_SECTION_L3BS1, 100, &ext_attrs);
   2107     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 6),
   2108         BCMI_KEYGEN_EXT_SECTION_L2BS2, BCMI_KEYGEN_EXT_SECTION_L3BS1, 104, &ext_attrs);
   2109     sal_memset(&ext_attrs, 0, ext_attrs_size);
   2110     SHR_BITSET(ext_attrs.w,
   2111         BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_DST_CONTAINER_A);
   2112     SHR_BITSET(ext_attrs.w,
   2113         BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_DST_CONTAINER_B);
   2114     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 7),
   2115         BCMI_KEYGEN_EXT_SECTION_L2BS2, BCMI_KEYGEN_EXT_SECTION_L3BS1, 108, &ext_attrs);
   2116     sal_memset(&ext_attrs, 0, ext_attrs_size);
   2117     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 8),
   2118         BCMI_KEYGEN_EXT_SECTION_L2BS2, BCMI_KEYGEN_EXT_SECTION_L3BS1, 112, &ext_attrs);
   2119     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 9),
   2120         BCMI_KEYGEN_EXT_SECTION_L2BS2, BCMI_KEYGEN_EXT_SECTION_L3BS1, 116, &ext_attrs);
   2121     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 10),
   2122         BCMI_KEYGEN_EXT_SECTION_L2BS2, BCMI_KEYGEN_EXT_SECTION_L3BS1, 120, &ext_attrs);
   2123     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 11),
   2124         BCMI_KEYGEN_EXT_SECTION_L2BS2, BCMI_KEYGEN_EXT_SECTION_L3BS1, 124, &ext_attrs);
   2125     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 12),
   2126         BCMI_KEYGEN_EXT_SECTION_L2BS2, BCMI_KEYGEN_EXT_SECTION_L3BS1, 128, &ext_attrs);
   2127     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 13),
   2128         BCMI_KEYGEN_EXT_SECTION_L2BS2, BCMI_KEYGEN_EXT_SECTION_L3BS1, 132, &ext_attrs);
   2129     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 14),
   2130         BCMI_KEYGEN_EXT_SECTION_L2BS2, BCMI_KEYGEN_EXT_SECTION_L3BS1, 136, &ext_attrs);
   2131     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 15),
   2132         BCMI_KEYGEN_EXT_SECTION_L2BS2, BCMI_KEYGEN_EXT_SECTION_L3BS1, 140, &ext_attrs);
   2133 
   2134     /* Initialize Level2 2-bit extractors section. */
   2135     level = 2;
   2136     gran = 2;
   2137     ext_num = 0;
   2138     sal_memset(&ext_attrs, 0, ext_attrs_size);
   2139     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, ext_num,
   2140         BCMI_KEYGEN_EXT_SECTION_L2BS2, BCMI_KEYGEN_EXT_SECTION_L3BS1, 144, &ext_attrs);
   2141     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 1),
   2142         BCMI_KEYGEN_EXT_SECTION_L2BS2, BCMI_KEYGEN_EXT_SECTION_L3BS1, 146, &ext_attrs);
   2143     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 2),
   2144         BCMI_KEYGEN_EXT_SECTION_L2BS2, BCMI_KEYGEN_EXT_SECTION_L3BS1, 148, &ext_attrs);
   2145     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 3),
   2146         BCMI_KEYGEN_EXT_SECTION_L2BS2, BCMI_KEYGEN_EXT_SECTION_L3BS1, 150, &ext_attrs);
   2147     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 4),
   2148         BCMI_KEYGEN_EXT_SECTION_L2BS2, BCMI_KEYGEN_EXT_SECTION_L3BS1, 152, &ext_attrs);
   2149     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 5),
   2150         BCMI_KEYGEN_EXT_SECTION_L2BS2, BCMI_KEYGEN_EXT_SECTION_L3BS1, 154, &ext_attrs);
   2151     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 6),
   2152         BCMI_KEYGEN_EXT_SECTION_L2BS2, BCMI_KEYGEN_EXT_SECTION_L3BS1, 156, &ext_attrs);
   2153 
   2154     /* Initialize Level2 1-bit extractors section. */
   2155     gran = 1;
   2156     ext_num = 0;
   2157     sal_memset(&ext_attrs, 0, ext_attrs_size);
   2158     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, ext_num,
   2159         BCMI_KEYGEN_EXT_SECTION_L2BS2, BCMI_KEYGEN_EXT_SECTION_L3BS1, 158, &ext_attrs);
   2160 
   2161     sal_memset(&ext_attrs, 0, ext_attrs_size);
   2162     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 1),
   2163         BCMI_KEYGEN_EXT_SECTION_L2BS2, BCMI_KEYGEN_EXT_SECTION_L3BS1, 159, &ext_attrs);
   2164 
   2165 
   2166     /* Initialize Level_1 32-bit extractor section. */
   2167     level = 1;
   2168     gran = 32;
   2169     ext_num = 0;
   2170     part = 2;
   2171     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, ext_num,
   2172         BCMI_KEYGEN_EXT_SECTION_L1E32, BCMI_KEYGEN_EXT_SECTION_L2CS1, 0, attrs);
   2173     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 1),
   2174         BCMI_KEYGEN_EXT_SECTION_L1E32, BCMI_KEYGEN_EXT_SECTION_L2CS1, 32, attrs);
   2175     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 2),
   2176         BCMI_KEYGEN_EXT_SECTION_L1E32, BCMI_KEYGEN_EXT_SECTION_L2CS2, 0, attrs);
   2177     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 3),
   2178         BCMI_KEYGEN_EXT_SECTION_L1E32, BCMI_KEYGEN_EXT_SECTION_L2CS2, 32, attrs);
   2179 
   2180     /* Initialize Level_1 16-bit extractors section. */
   2181     level = 1;
   2182     gran = 16;
   2183     ext_num = 0;
   2184     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, ext_num,
   2185         BCMI_KEYGEN_EXT_SECTION_L1E16, BCMI_KEYGEN_EXT_SECTION_L2CS1, 64, attrs);
   2186     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 1),
   2187         BCMI_KEYGEN_EXT_SECTION_L1E16, BCMI_KEYGEN_EXT_SECTION_L2CS1, 80, attrs);
   2188     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 2),
   2189         BCMI_KEYGEN_EXT_SECTION_L1E16, BCMI_KEYGEN_EXT_SECTION_L2CS1, 96, attrs);
   2190     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 3),
   2191         BCMI_KEYGEN_EXT_SECTION_L1E16, BCMI_KEYGEN_EXT_SECTION_L2CS1, 112, attrs);
   2192     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 4),
   2193         BCMI_KEYGEN_EXT_SECTION_L1E16, BCMI_KEYGEN_EXT_SECTION_L2CS1, 128, attrs);
   2194 
   2195     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 5),
   2196         BCMI_KEYGEN_EXT_SECTION_L1E16, BCMI_KEYGEN_EXT_SECTION_L2CS2, 64, attrs);
   2197     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 6),
   2198         BCMI_KEYGEN_EXT_SECTION_L1E16, BCMI_KEYGEN_EXT_SECTION_L2CS2, 80, attrs);
   2199     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 7),
   2200         BCMI_KEYGEN_EXT_SECTION_L1E16, BCMI_KEYGEN_EXT_SECTION_L2CS2, 96, attrs);
   2201     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 8),
   2202         BCMI_KEYGEN_EXT_SECTION_L1E16, BCMI_KEYGEN_EXT_SECTION_L2CS2, 112, attrs);
   2203     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 9),
   2204         BCMI_KEYGEN_EXT_SECTION_L1E16, BCMI_KEYGEN_EXT_SECTION_L2CS2, 128, attrs);
   2205 
   2206     /* Initialize Level_1 8-bit extractors section. */
   2207     level = 1;
   2208     gran = 8;
   2209     ext_num = 0;
   2210     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, ext_num,
   2211         BCMI_KEYGEN_EXT_SECTION_L1E8, BCMI_KEYGEN_EXT_SECTION_L2CS2, 144, attrs);
   2212     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 1),
   2213         BCMI_KEYGEN_EXT_SECTION_L1E8, BCMI_KEYGEN_EXT_SECTION_L2CS2, 152, attrs);
   2214     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 2),
   2215         BCMI_KEYGEN_EXT_SECTION_L1E8, BCMI_KEYGEN_EXT_SECTION_L2CS2, 160, attrs);
   2216     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 3),
   2217         BCMI_KEYGEN_EXT_SECTION_L1E8, BCMI_KEYGEN_EXT_SECTION_L2CS2, 168, attrs);
   2218     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 4),
   2219         BCMI_KEYGEN_EXT_SECTION_L1E8, BCMI_KEYGEN_EXT_SECTION_L2CS2, 176, attrs);
   2220     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 5),
   2221         BCMI_KEYGEN_EXT_SECTION_L1E8, BCMI_KEYGEN_EXT_SECTION_L2CS2, 184, attrs);
   2222 
   2223     /* Initialize Level_1 4-bit extractors section. */
   2224     level = 1;
   2225     gran = 4;
   2226     ext_num = 0;
   2227     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, ext_num,
   2228         BCMI_KEYGEN_EXT_SECTION_L1E4, BCMI_KEYGEN_EXT_SECTION_L2CS2, 192, attrs);
   2229     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 1),
   2230         BCMI_KEYGEN_EXT_SECTION_L1E4, BCMI_KEYGEN_EXT_SECTION_L2CS2, 196, attrs);
   2231     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 2),
   2232         BCMI_KEYGEN_EXT_SECTION_L1E4, BCMI_KEYGEN_EXT_SECTION_L2CS2, 200, attrs);
   2233     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 3),
   2234         BCMI_KEYGEN_EXT_SECTION_L1E4, BCMI_KEYGEN_EXT_SECTION_L2CS2, 204, attrs);
   2235     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 4),
   2236         BCMI_KEYGEN_EXT_SECTION_L1E4, BCMI_KEYGEN_EXT_SECTION_L2CS2, 208, attrs);
   2237     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 5),
   2238         BCMI_KEYGEN_EXT_SECTION_L1E4, BCMI_KEYGEN_EXT_SECTION_L2CS2, 212, attrs);
   2239     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 6),
   2240         BCMI_KEYGEN_EXT_SECTION_L1E4, BCMI_KEYGEN_EXT_SECTION_L2CS2, 216, attrs);
   2241     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 7),
   2242         BCMI_KEYGEN_EXT_SECTION_L1E4, BCMI_KEYGEN_EXT_SECTION_L2CS2, 220, attrs);
   2243     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 8),
   2244         BCMI_KEYGEN_EXT_SECTION_L1E4, BCMI_KEYGEN_EXT_SECTION_L2CS2, 224, attrs);
   2245     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 9),
   2246         BCMI_KEYGEN_EXT_SECTION_L1E4, BCMI_KEYGEN_EXT_SECTION_L2CS2, 228, attrs);
   2247 
   2248     /* Initialize Level_2 16-bit extractors section. */
   2249     level = 2;
   2250     gran = 16;
   2251     ext_num = 0;
   2252     sal_memset(&ext_attrs, 0, ext_attrs_size);
   2253     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, ext_num,
   2254         BCMI_KEYGEN_EXT_SECTION_L2CS1, BCMI_KEYGEN_EXT_SECTION_L3CS1, 0, &ext_attrs);
   2255     sal_memset(&ext_attrs, 0, ext_attrs_size);
   2256     SHR_BITSET(ext_attrs.w, BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_DST_CONTAINER_A);
   2257     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 1),
   2258         BCMI_KEYGEN_EXT_SECTION_L2CS1, BCMI_KEYGEN_EXT_SECTION_L3CS1, 20, &ext_attrs);
   2259     sal_memset(&ext_attrs, 0, ext_attrs_size);
   2260     SHR_BITSET(ext_attrs.w, BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_DST_CONTAINER_B);
   2261     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 2),
   2262         BCMI_KEYGEN_EXT_SECTION_L2CS1, BCMI_KEYGEN_EXT_SECTION_L3CS1, 36, &ext_attrs);
   2263     sal_memset(&ext_attrs, 0, ext_attrs_size);
   2264     SHR_BITSET(ext_attrs.w, BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_CLASS_ID_C);
   2265     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 3),
   2266         BCMI_KEYGEN_EXT_SECTION_L2CS1, BCMI_KEYGEN_EXT_SECTION_L3CS1, 52, &ext_attrs);
   2267     sal_memset(&ext_attrs, 0, ext_attrs_size);
   2268     SHR_BITSET(ext_attrs.w, BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_CLASS_ID_D);
   2269     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 4),
   2270         BCMI_KEYGEN_EXT_SECTION_L2CS1, BCMI_KEYGEN_EXT_SECTION_L3CS1, 68, attrs);
   2271 
   2272     /* Initialize Level_2 4-bit extractors section. */
   2273     level = 2;
   2274     gran = 4;
   2275     ext_num = 0;
   2276     sal_memset(&ext_attrs, 0, ext_attrs_size);
   2277     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, ext_num,
   2278         BCMI_KEYGEN_EXT_SECTION_L2CS2, BCMI_KEYGEN_EXT_SECTION_L3CS1, 16, &ext_attrs);
   2279     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 1),
   2280         BCMI_KEYGEN_EXT_SECTION_L2CS2, BCMI_KEYGEN_EXT_SECTION_L3CS1, 84, &ext_attrs);
   2281     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 2),
   2282         BCMI_KEYGEN_EXT_SECTION_L2CS2, BCMI_KEYGEN_EXT_SECTION_L3CS1, 88, &ext_attrs);
   2283     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 3),
   2284         BCMI_KEYGEN_EXT_SECTION_L2CS2, BCMI_KEYGEN_EXT_SECTION_L3CS1, 92, &ext_attrs);
   2285     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 4),
   2286         BCMI_KEYGEN_EXT_SECTION_L2CS2, BCMI_KEYGEN_EXT_SECTION_L3CS1, 96, &ext_attrs);
   2287     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 5),
   2288         BCMI_KEYGEN_EXT_SECTION_L2CS2, BCMI_KEYGEN_EXT_SECTION_L3CS1, 100, &ext_attrs);
   2289     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 6),
   2290         BCMI_KEYGEN_EXT_SECTION_L2CS2, BCMI_KEYGEN_EXT_SECTION_L3CS1, 104, &ext_attrs);
   2291     sal_memset(&ext_attrs, 0, ext_attrs_size);
   2292     SHR_BITSET(ext_attrs.w,
   2293         BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_DST_CONTAINER_A);
   2294     SHR_BITSET(ext_attrs.w,
   2295         BCMI_KEYGEN_EXT_ATTR_NOT_WITH_PMUX_DST_CONTAINER_B);
   2296     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 7),
   2297         BCMI_KEYGEN_EXT_SECTION_L2CS2, BCMI_KEYGEN_EXT_SECTION_L3CS1, 108, &ext_attrs);
   2298     sal_memset(&ext_attrs, 0, ext_attrs_size);
   2299     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 8),
   2300         BCMI_KEYGEN_EXT_SECTION_L2CS2, BCMI_KEYGEN_EXT_SECTION_L3CS1, 112, &ext_attrs);
   2301     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 9),
   2302         BCMI_KEYGEN_EXT_SECTION_L2CS2, BCMI_KEYGEN_EXT_SECTION_L3CS1, 116, &ext_attrs);
   2303     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 10),
   2304         BCMI_KEYGEN_EXT_SECTION_L2CS2, BCMI_KEYGEN_EXT_SECTION_L3CS1, 120, &ext_attrs);
   2305     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 11),
   2306         BCMI_KEYGEN_EXT_SECTION_L2CS2, BCMI_KEYGEN_EXT_SECTION_L3CS1, 124, &ext_attrs);
   2307     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 12),
   2308         BCMI_KEYGEN_EXT_SECTION_L2CS2, BCMI_KEYGEN_EXT_SECTION_L3CS1, 128, &ext_attrs);
   2309     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 13),
   2310         BCMI_KEYGEN_EXT_SECTION_L2CS2, BCMI_KEYGEN_EXT_SECTION_L3CS1, 132, &ext_attrs);
   2311     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 14),
   2312         BCMI_KEYGEN_EXT_SECTION_L2CS2, BCMI_KEYGEN_EXT_SECTION_L3CS1, 136, &ext_attrs);
   2313     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 15),
   2314         BCMI_KEYGEN_EXT_SECTION_L2CS2, BCMI_KEYGEN_EXT_SECTION_L3CS1, 140, &ext_attrs);
   2315 
   2316     /* Initialize Level2 2-bit extractors section. */
   2317     level = 2;
   2318     gran = 2;
   2319     ext_num = 0;
   2320     sal_memset(&ext_attrs, 0, ext_attrs_size);
   2321     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, ext_num,
   2322         BCMI_KEYGEN_EXT_SECTION_L2CS2, BCMI_KEYGEN_EXT_SECTION_L3CS1, 144, &ext_attrs);
   2323     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 1),
   2324         BCMI_KEYGEN_EXT_SECTION_L2CS2, BCMI_KEYGEN_EXT_SECTION_L3CS1, 146, &ext_attrs);
   2325     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 2),
   2326         BCMI_KEYGEN_EXT_SECTION_L2CS2, BCMI_KEYGEN_EXT_SECTION_L3CS1, 148, &ext_attrs);
   2327     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 3),
   2328         BCMI_KEYGEN_EXT_SECTION_L2CS2, BCMI_KEYGEN_EXT_SECTION_L3CS1, 150, &ext_attrs);
   2329     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 4),
   2330         BCMI_KEYGEN_EXT_SECTION_L2CS2, BCMI_KEYGEN_EXT_SECTION_L3CS1, 152, &ext_attrs);
   2331     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 5),
   2332         BCMI_KEYGEN_EXT_SECTION_L2CS2, BCMI_KEYGEN_EXT_SECTION_L3CS1, 154, &ext_attrs);
   2333     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 6),
   2334         BCMI_KEYGEN_EXT_SECTION_L2CS2, BCMI_KEYGEN_EXT_SECTION_L3CS1, 156, &ext_attrs);
   2335 
   2336     /* Initialize Level2 1-bit extractors section. */
   2337     gran = 1;
   2338     ext_num = 0;
   2339     sal_memset(&ext_attrs, 0, ext_attrs_size);
   2340     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, ext_num,
   2341         BCMI_KEYGEN_EXT_SECTION_L2CS2, BCMI_KEYGEN_EXT_SECTION_L3CS1, 158, &ext_attrs);
   2342 
   2343     sal_memset(&ext_attrs, 0, ext_attrs_size);
   2344     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, part, level, gran, (ext_num + 1),
   2345         BCMI_KEYGEN_EXT_SECTION_L2CS2, BCMI_KEYGEN_EXT_SECTION_L3CS1, 159, &ext_attrs);
   2346 
   2347     level = 3;
   2348     gran = 160;
   2349     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, 0, level, gran, 0,
   2350         BCMI_KEYGEN_EXT_SECTION_L3AS1, BCMI_KEYGEN_EXT_SECTION_DISABLE, 0, attrs);
   2351     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, 1, level, gran, 0,
   2352         BCMI_KEYGEN_EXT_SECTION_L3BS1, BCMI_KEYGEN_EXT_SECTION_DISABLE, 0, attrs);
   2353     BCMI_KEYGEN_EXT_CFG_ADD(unit, ext_cfg_db, 2, level, gran, 0,
   2354         BCMI_KEYGEN_EXT_SECTION_L3CS1, BCMI_KEYGEN_EXT_SECTION_DISABLE, 0, attrs);
   2355 exit:
   2356     BCMI_KEYGEN_FUNC_EXIT();
   2357 }
   2358 
   2359 /*
   2360  * Function:
   2361  *  _bcm_field_th3_em_key_attributes_init
   2362  * Purpose:
   2363  *  Initialize Exact Match Key Attribute memory.
   2364  * Parameters:
   2365  *  unit     - (IN) BCM device number.
   2366  *  stage_fc - (IN) Field Processor stage control structure.
   2367  * Returns:
   2368  *  BCM_E_XXX
   2369  * Notes:
   2370  */
   2371 int
   2372 _bcm_field_th3_em_key_attributes_init(int unit, _field_stage_t *stage_fc,
   2373                                       _field_control_t *fc)
   2374 {
   2375     exact_match_key_attributes_entry_t em_entry;
   2376                                       /* key attributes Entry buffer.  */
   2377     uint32 *em_key_attr_entry = NULL; /* Hardware Buffer Ptr.      */
   2378     int idx;
   2379     soc_mem_t mem;                    /* Memory Identifier.        */
   2380     int mem_inst = 0;
   2381     static soc_mem_t em_key_attributes_mem;
   2382 
   2383     mem = EXACT_MATCH_KEY_ATTRIBUTESm;
   2384 
   2385     /* Assign exact match key attribute entry buffer. */
   2386     em_key_attr_entry = (uint32 *)&em_entry;
   2387 
   2388     for (idx = 0; idx < stage_fc->num_instances; idx++) {
   2389         if (!(fc->pipe_map & (1 << idx))) {
   2390              continue;
   2391         }
   2392         if (stage_fc->oper_mode == bcmFieldGroupOperModeGlobal) {
   2393             mem_inst = _FP_GLOBAL_INST;
   2394         } else if (stage_fc->oper_mode == bcmFieldGroupOperModePipeLocal) {
   2395             mem_inst = idx;
   2396         } else {
   2397             return BCM_E_INTERNAL;
   2398         }
   2399 
   2400         BCM_IF_ERROR_RETURN(_bcm_field_mem_instance_get(unit,
   2401                             EXACT_MATCH_KEY_ATTRIBUTESm,
   2402                             mem_inst, &em_key_attributes_mem));
   2403 
   2404         /* Initialize buffer to 0 */
   2405         sal_memcpy(em_key_attr_entry, soc_mem_entry_null(unit, mem),
   2406                    soc_mem_entry_words(unit, mem) * sizeof(uint32));
   2407 
   2408         /* Mode 128: entry 0 */
   2409         /* Read entry into SW buffer. */
   2410         BCM_IF_ERROR_RETURN(soc_mem_read(unit, em_key_attributes_mem,
   2411                             MEM_BLOCK_ANY, 0, em_key_attr_entry));
   2412 
   2413         /* Mode 128: Set BUCKET_MODE. */
   2414         soc_mem_field32_set(unit, em_key_attributes_mem,
   2415                 em_key_attr_entry, BUCKET_MODEf, 0);
   2416         /* Mode 128: Set KEY_BASE_WIDTH. */
   2417         soc_mem_field32_set(unit, em_key_attributes_mem,
   2418                 em_key_attr_entry, KEY_BASE_WIDTHf, 1);
   2419         /* Mode 128: Set KEY_WIDTH. */
   2420         soc_mem_field32_set(unit, em_key_attributes_mem,
   2421                 em_key_attr_entry, KEY_WIDTHf, 3);
   2422         /* Mode 128: Set DATA_BASE_WIDTH. */
   2423         soc_mem_field32_set(unit, em_key_attributes_mem,
   2424                 em_key_attr_entry, DATA_BASE_WIDTHf, 0);
   2425 
   2426         /* Install entry in hardware. */
   2427         BCM_IF_ERROR_RETURN(soc_mem_write(unit, em_key_attributes_mem,
   2428                     MEM_BLOCK_ALL, 0, em_key_attr_entry));
   2429 
   2430         /* Initialize buffer to 0 */
   2431         sal_memcpy(em_key_attr_entry, soc_mem_entry_null(unit, mem),
   2432                 soc_mem_entry_words(unit, mem) * sizeof(uint32));
   2433         /* Mode 160: entry 1 */
   2434         /* Read entry into SW buffer. */
   2435         BCM_IF_ERROR_RETURN(soc_mem_read(unit, em_key_attributes_mem,
   2436                     MEM_BLOCK_ANY, 1, em_key_attr_entry));
   2437 
   2438         /* Mode 160: Set BUCKET_MODE. */
   2439         soc_mem_field32_set(unit, em_key_attributes_mem,
   2440                 em_key_attr_entry, BUCKET_MODEf, 0);
   2441         /* Mode 160: Set KEY_BASE_WIDTH. */
   2442         soc_mem_field32_set(unit, em_key_attributes_mem,
   2443                 em_key_attr_entry, KEY_BASE_WIDTHf, 1);
   2444         /* Mode 160: Set KEY_WIDTH. */
   2445         soc_mem_field32_set(unit, em_key_attributes_mem,
   2446                 em_key_attr_entry, KEY_WIDTHf, 11);
   2447         /* Mode 160: Set DATA_BASE_WIDTH. */
   2448         soc_mem_field32_set(unit, em_key_attributes_mem,
   2449                 em_key_attr_entry, DATA_BASE_WIDTHf, 0);
   2450         /* Install entry in hardware. */
   2451         BCM_IF_ERROR_RETURN(soc_mem_write(unit, em_key_attributes_mem,
   2452                     MEM_BLOCK_ALL, 1, em_key_attr_entry));
   2453 
   2454         /* Initialize buffer to 0 */
   2455         sal_memcpy(em_key_attr_entry, soc_mem_entry_null(unit, mem),
   2456                 soc_mem_entry_words(unit, mem) * sizeof(uint32));
   2457         /* Mode 320: entry 2 */
   2458         /* Read entry into SW buffer. */
   2459         BCM_IF_ERROR_RETURN(soc_mem_read(unit, em_key_attributes_mem,
   2460                     MEM_BLOCK_ANY, 2, em_key_attr_entry));
   2461 
   2462         /* Mode 320: Set BUCKET_MODE. */
   2463         soc_mem_field32_set(unit, em_key_attributes_mem,
   2464                 em_key_attr_entry, BUCKET_MODEf, 0);
   2465         /* Mode 320: Set KEY_BASE_WIDTH. */
   2466         soc_mem_field32_set(unit, em_key_attributes_mem,
   2467                 em_key_attr_entry, KEY_BASE_WIDTHf, 2);
   2468         /* Mode 320: Set KEY_WIDTH. */
   2469         soc_mem_field32_set(unit, em_key_attributes_mem,
   2470                 em_key_attr_entry, KEY_WIDTHf, 21);
   2471         /* Mode 320: Set DATA_BASE_WIDTH. */
   2472         soc_mem_field32_set(unit, em_key_attributes_mem,
   2473                 em_key_attr_entry, DATA_BASE_WIDTHf, 1);
   2474 
   2475         /* Install entry in hardware. */
   2476         BCM_IF_ERROR_RETURN(soc_mem_write(unit, em_key_attributes_mem,
   2477                     MEM_BLOCK_ALL, 2, em_key_attr_entry));
   2478     }
   2479     return BCM_E_NONE;
   2480 }
   2481 
   2482 int
   2483 _bcm_field_th3_qualifiers_init(int unit, _field_stage_t *stage_fc)
   2484 {
   2485     bcmi_keygen_qual_flags_bmp_t qual_flags;
   2486     bcmi_keygen_qual_cfg_info_db_t *db = NULL;
   2487     BCMI_KEYGEN_QUAL_CFG_DECL;
   2488 
   2489     BCMI_KEYGEN_FUNC_ENTER(unit);
   2490 
   2491     /* L0 BUS extractor sections offset:
   2492      *    - 32bit extractor = 0
   2493      *    - 16bit extractor = 608
   2494      *    - 8bit extractor  = 1120
   2495      *    - 4bit extractor  = 1280
   2496      *    - 2bit extractor  = 1400
   2497      */
   2498 
   2499     /* Input parameters check. */
   2500     if (NULL == stage_fc) {
   2501         return (BCM_E_PARAM);
   2502     }
   2503 
   2504     _FP_XGS3_ALLOC(stage_fc->qual_cfg_info_db,
   2505          sizeof(bcmi_keygen_qual_cfg_info_db_t),
   2506          "IFP qualifiers");
   2507     if (NULL == stage_fc->qual_cfg_info_db) {
   2508         return (BCM_E_MEMORY);
   2509     }
   2510     db = stage_fc->qual_cfg_info_db;
   2511     sal_memset(&qual_flags, 0, sizeof(bcmi_keygen_qual_flags_bmp_t));
   2512 
   2513     /* Pseudo qualifiers */
   2514     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2515     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyStage, qual_flags);
   2516     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2517     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyStageIngress, qual_flags);
   2518     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2519     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyStageIngressExactMatch, qual_flags);
   2520     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2521     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyExactMatchHitStatus, qual_flags);
   2522     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2523     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyExactMatchActionClassId, qual_flags);
   2524     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2525     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyExactMatchGroupClassId, qual_flags);
   2526 
   2527     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2528     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 2, 64, 32);
   2529     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E16, 19, 304, 16);
   2530     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcMac, qual_flags);
   2531 
   2532     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2533     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 3, 96, 32);
   2534     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E16, 20, 320, 16);
   2535     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstMac, qual_flags);
   2536 
   2537     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2538     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 4, 128, 32);
   2539     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcIp, qual_flags);
   2540 
   2541     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2542     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 8, 256, 32);
   2543     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstIp, qual_flags);
   2544 
   2545     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2546     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 4, 128, 32);
   2547     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E32, 5, 160, 32);
   2548     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(2, BCMI_KEYGEN_EXT_SECTION_L1E32, 6, 192, 32);
   2549     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(3, BCMI_KEYGEN_EXT_SECTION_L1E32, 7, 224, 32);
   2550     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcIp6, qual_flags);
   2551 
   2552     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2553     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 4, 128, 32);
   2554     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E32, 5, 160, 32);
   2555     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcIp6Low, qual_flags);
   2556 
   2557     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2558     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 6, 192, 32);
   2559     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E32, 7, 224, 32);
   2560     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcIp6High, qual_flags);
   2561 
   2562     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2563     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32,  8, 256, 32);
   2564     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E32,  9, 288, 32);
   2565     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(2, BCMI_KEYGEN_EXT_SECTION_L1E32, 10, 320, 32);
   2566     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(3, BCMI_KEYGEN_EXT_SECTION_L1E32, 11, 352, 32);
   2567     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstIp6, qual_flags);
   2568 
   2569     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2570     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 8, 256, 32);
   2571     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E32, 9, 288, 32);
   2572     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstIp6Low, qual_flags);
   2573 
   2574     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2575     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 10, 320, 32);
   2576     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E32, 11, 352, 32);
   2577     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstIp6High, qual_flags);
   2578 
   2579     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2580     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 11, 352, 32);
   2581     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E32, 10, 320, 32);
   2582     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(2, BCMI_KEYGEN_EXT_SECTION_L1E32,  9, 288, 32);
   2583     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(3, BCMI_KEYGEN_EXT_SECTION_L1E32,  8, 256, 32);
   2584     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(4, BCMI_KEYGEN_EXT_SECTION_L1E32,  7, 224, 32);
   2585     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(5, BCMI_KEYGEN_EXT_SECTION_L1E32,  6, 192, 32);
   2586     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(6, BCMI_KEYGEN_EXT_SECTION_L1E32,  5, 160, 32);
   2587     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(7, BCMI_KEYGEN_EXT_SECTION_L1E32,  4, 128, 32);
   2588     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyL2PayLoad, qual_flags);
   2589 
   2590     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2591     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 11, 352, 32);
   2592     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E32, 10, 320, 32);
   2593     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db,
   2594                         bcmFieldQualifyL2PayloadFirstEightBytes, qual_flags);
   2595 
   2596     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2597     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 1, 32, 8);
   2598     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 3);
   2599     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyMplsForwardingLabelTtl, qual_flags);
   2600 
   2601     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2602     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 1, 40, 1);
   2603     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 3);
   2604     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyMplsForwardingLabelBos, qual_flags);
   2605 
   2606     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2607     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 1, 41, 3);
   2608     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 3);
   2609     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyMplsForwardingLabelExp, qual_flags);
   2610 
   2611     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2612     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 1, 44, 20);
   2613     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 3);
   2614     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyMplsForwardingLabelId, qual_flags);
   2615 
   2616     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2617     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 1, 32, 32);
   2618     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 3);
   2619     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyMplsForwardingLabel, qual_flags);
   2620 
   2621     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2622     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 0, 0, 8);
   2623     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_B, 3);
   2624     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyMplsForwardingLabelTtl, qual_flags);
   2625 
   2626     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2627     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 0, 8, 1);
   2628     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_B, 3);
   2629     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyMplsForwardingLabelBos, qual_flags);
   2630 
   2631     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2632     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 0, 9, 3);
   2633     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_B, 3);
   2634     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyMplsForwardingLabelExp, qual_flags);
   2635 
   2636     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2637     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 0, 12, 20);
   2638     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_B, 3);
   2639     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyMplsForwardingLabelId, qual_flags);
   2640 
   2641     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2642     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 0, 0, 32);
   2643     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_B, 3);
   2644     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyMplsForwardingLabel, qual_flags);
   2645 
   2646     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2647     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 0, 0, 32);
   2648     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_B, 4);
   2649     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyMplsControlWord, qual_flags);
   2650 
   2651     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2652     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 1, 32, 32);
   2653     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 4);
   2654     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyMplsControlWord, qual_flags);
   2655 
   2656     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2657     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 0, 16, 16);
   2658     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_B, 5);
   2659     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyRtag7AHashUpper, qual_flags);
   2660 
   2661     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2662     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 1, 48, 16);
   2663     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 5);
   2664     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyRtag7AHashUpper, qual_flags);
   2665 
   2666     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2667     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 0, 0, 16);
   2668     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_B, 5);
   2669     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyRtag7AHashLower, qual_flags);
   2670 
   2671     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2672     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 1, 32, 16);
   2673     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 5);
   2674     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyRtag7AHashLower, qual_flags);
   2675 
   2676     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2677     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 0, 16, 16);
   2678     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_B, 6);
   2679     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyRtag7BHashUpper, qual_flags);
   2680 
   2681     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2682     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 1, 48, 16);
   2683     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 6);
   2684     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyRtag7BHashUpper, qual_flags);
   2685 
   2686     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2687     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 0, 0, 16);
   2688     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_B, 6);
   2689     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyRtag7BHashLower, qual_flags);
   2690 
   2691     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2692     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 1, 32, 16);
   2693     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 6);
   2694     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyRtag7BHashLower, qual_flags);
   2695 
   2696     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2697     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 0, 0, 20);
   2698     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_B, 9);
   2699     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyIp6FlowLabel, qual_flags);
   2700 
   2701     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2702     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 1, 32, 20);
   2703     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 9);
   2704     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyIp6FlowLabel, qual_flags);
   2705 
   2706     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2707     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 0, 0, 32);
   2708     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_B, 10);
   2709     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyBfdYourDiscriminator, qual_flags);
   2710 
   2711     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2712     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 1, 32, 32);
   2713     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 10);
   2714     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyBfdYourDiscriminator, qual_flags);
   2715 
   2716     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2717     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 0, 0, 16);
   2718     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_B, 11);
   2719     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyPacketLength, qual_flags);
   2720 
   2721     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2722     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 1, 32, 16);
   2723     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 11);
   2724     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyPacketLength, qual_flags);
   2725 
   2726     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2727     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 0, 0, 32);
   2728     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_B, 12);
   2729     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyOpaqueTagLow, qual_flags);
   2730 
   2731     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2732     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 1, 32, 32);
   2733     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 12);
   2734     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyOpaqueTagLow, qual_flags);
   2735 
   2736     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2737     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 0, 0, 32);
   2738     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_B, 13);
   2739     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyOpaqueTagHigh, qual_flags);
   2740 
   2741     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2742     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 1, 32, 32);
   2743     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 13);
   2744     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyOpaqueTagHigh, qual_flags);
   2745 
   2746     /* UDF1 Qualifiers. */
   2747     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2748     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 0, 0, 16);
   2749     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_UDF, 0);
   2750     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, _bcmFieldQualifyData7, qual_flags);
   2751 
   2752     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2753     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 1, 16, 16);
   2754     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_UDF, 0);
   2755     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, _bcmFieldQualifyData6, qual_flags);
   2756 
   2757     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2758     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 2, 32, 16);
   2759     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_UDF, 0);
   2760     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, _bcmFieldQualifyData5, qual_flags);
   2761 
   2762     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2763     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 3, 48, 16);
   2764     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_UDF, 0);
   2765     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, _bcmFieldQualifyData4, qual_flags);
   2766 
   2767     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2768     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 4, 64, 16);
   2769     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_UDF, 0);
   2770     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, _bcmFieldQualifyData3, qual_flags);
   2771 
   2772     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2773     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 5, 80, 16);
   2774     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_UDF, 0);
   2775     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, _bcmFieldQualifyData2, qual_flags);
   2776 
   2777     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2778     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 6, 96, 16);
   2779     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_UDF, 0);
   2780     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, _bcmFieldQualifyData1, qual_flags);
   2781 
   2782     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2783     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 7, 112, 16);
   2784     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_UDF, 0);
   2785     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, _bcmFieldQualifyData0, qual_flags);
   2786 
   2787     /* UDF2 Qualifiers. */
   2788     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2789     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 0, 0, 16);
   2790     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_UDF, 1);
   2791     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, _bcmFieldQualifyData15, qual_flags);
   2792 
   2793     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2794     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 1, 16, 16);
   2795     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_UDF, 1);
   2796     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, _bcmFieldQualifyData14, qual_flags);
   2797 
   2798     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2799     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 2, 32, 16);
   2800     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_UDF, 1);
   2801     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, _bcmFieldQualifyData13, qual_flags);
   2802 
   2803     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2804     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 3, 48, 16);
   2805     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_UDF, 1);
   2806     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, _bcmFieldQualifyData12, qual_flags);
   2807 
   2808     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2809     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 4, 64, 16);
   2810     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_UDF, 1);
   2811     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, _bcmFieldQualifyData11, qual_flags);
   2812 
   2813     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2814     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 5, 80, 16);
   2815     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_UDF, 1);
   2816     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, _bcmFieldQualifyData10, qual_flags);
   2817 
   2818     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2819     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 6, 96, 16);
   2820     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_UDF, 1);
   2821     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, _bcmFieldQualifyData9, qual_flags);
   2822 
   2823     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2824     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 7, 112, 16);
   2825     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_UDF, 1);
   2826     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, _bcmFieldQualifyData8, qual_flags);
   2827 
   2828     
   2829     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2830     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 8, 128, 9);
   2831     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_A, 0);
   2832     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcPort, qual_flags);
   2833 
   2834     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2835     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 8, 128, 9);
   2836     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_A, 0);
   2837     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcTrunkMemberGport, qual_flags);
   2838 
   2839     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2840     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 8, 128, 9);
   2841     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_A, 0);
   2842     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcModPortGport, qual_flags);
   2843 
   2844     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2845     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 8, 128, 9);
   2846     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_A, 0);
   2847     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcModPortGports, qual_flags);
   2848 
   2849     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2850     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 9, 144, 9);
   2851     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_B, 0);
   2852     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcPort, qual_flags);
   2853 
   2854     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2855     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 9, 144, 9);
   2856     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_B, 0);
   2857     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcTrunkMemberGport, qual_flags);
   2858 
   2859     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2860     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 9, 144, 9);
   2861     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_B, 0);
   2862     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcModPortGport, qual_flags);
   2863 
   2864     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2865     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 9, 144, 9);
   2866     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_B, 0);
   2867     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcModPortGports, qual_flags);
   2868 
   2869     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2870     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 8, 128, 9);
   2871     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_A, 1);
   2872     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcTrunk, qual_flags);
   2873 
   2874     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2875     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 9, 144, 9);
   2876     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_B, 1);
   2877     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcTrunk, qual_flags);
   2878 
   2879     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2880     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 10, 160, 12);
   2881     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_B, 0);
   2882     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassPort, qual_flags);
   2883 
   2884     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2885     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 10, 160, 12);
   2886     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_B, 1);
   2887     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassL3, qual_flags);
   2888 
   2889     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2890     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 10, 160, 8);
   2891     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_B, 2);
   2892     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstClassField, qual_flags);
   2893 
   2894     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2895     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 10, 168, 8);
   2896     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_B, 2);
   2897     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcClassField, qual_flags);
   2898 
   2899     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2900     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 10, 160, 12);
   2901     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_B, 3);
   2902     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassL2, qual_flags);
   2903 
   2904     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2905     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 10, 160, 10);
   2906     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_B, 4);
   2907     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstClassField, qual_flags);
   2908 
   2909     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2910     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 10, 160, 10);
   2911     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_B, 5);
   2912     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcClassField, qual_flags);
   2913 
   2914     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2915     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 10, 160, 8);
   2916     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_B, 6);
   2917     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceIngressKeySelectClassPort, qual_flags);
   2918 
   2919     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2920     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 10, 168, 8);
   2921     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_B, 6);
   2922     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceLookupClassPort, qual_flags);
   2923 
   2924     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2925     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 10, 160, 8);
   2926     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_B, 7);
   2927     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyUdfClass, qual_flags);
   2928 
   2929     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2930     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 11, 176, 12);
   2931     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_A, 0);
   2932     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassPort, qual_flags);
   2933 
   2934     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2935     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 11, 176, 12);
   2936     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_A, 1);
   2937     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassL3, qual_flags);
   2938 
   2939     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2940     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 11, 176, 8);
   2941     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_A, 2);
   2942     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstClassField, qual_flags);
   2943 
   2944     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2945     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 11, 184, 8);
   2946     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_A, 2);
   2947     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcClassField, qual_flags);
   2948 
   2949     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2950     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 11, 176, 12);
   2951     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_A, 3);
   2952     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassL2, qual_flags);
   2953 
   2954     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2955     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 11, 176, 10);
   2956     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_A, 4);
   2957     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstClassField, qual_flags);
   2958 
   2959     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2960     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 11, 176, 10);
   2961     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_A, 5);
   2962     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcClassField, qual_flags);
   2963 
   2964     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2965     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 11, 176, 8);
   2966     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_A, 6);
   2967     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceIngressKeySelectClassPort, qual_flags);
   2968 
   2969     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2970     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 11, 184, 8);
   2971     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_A, 6);
   2972     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceLookupClassPort, qual_flags);
   2973 
   2974     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2975     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 11, 176, 8);
   2976     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_A, 7);
   2977     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyUdfClass, qual_flags);
   2978 
   2979     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2980     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 12, 192, 12);
   2981     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyForwardingVlanId, qual_flags);
   2982 
   2983     
   2984     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2985     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 12, 192, 12);
   2986     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyVrf, qual_flags);
   2987 
   2988     
   2989     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2990     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 12, 192, 14);
   2991     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyVpn, qual_flags);
   2992 
   2993     
   2994     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2995     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 13, 208, 13);
   2996     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyL3Ingress, qual_flags);
   2997 
   2998     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   2999     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 14, 224, 16);
   3000     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyOuterVlan, qual_flags);
   3001 
   3002     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3003     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 14, 224, 12);
   3004     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyOuterVlanId, qual_flags);
   3005 
   3006     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3007     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 14, 236, 1);
   3008     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyOuterVlanCfi, qual_flags);
   3009 
   3010     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3011     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 14, 237, 3);
   3012     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyOuterVlanPri, qual_flags);
   3013 
   3014     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3015     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 16, 256, 16);
   3016     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyL4DstPort, qual_flags);
   3017 
   3018     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3019     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 17, 272, 16);
   3020     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyL4SrcPort, qual_flags);
   3021 
   3022     /* Overlay on same region as L4SrcPort */
   3023     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3024     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 17, 272, 16);
   3025     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyIcmpTypeCode, qual_flags);
   3026 
   3027     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3028     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 18, 288, 16);
   3029     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyEtherType, qual_flags);
   3030 
   3031     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3032     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 21, 336, 16);
   3033     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E16, 22, 352, 16);
   3034     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(2, BCMI_KEYGEN_EXT_SECTION_L1E16, 23, 368, 16);
   3035     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(3, BCMI_KEYGEN_EXT_SECTION_L1E16, 24, 384, 16);
   3036     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyRangeCheck, qual_flags);
   3037 
   3038     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3039     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 0, 0, 8);
   3040     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInPort, qual_flags);
   3041 
   3042     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3043     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 1, 8, 8);
   3044     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E4, 13, 52, 4);
   3045     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyVrf, qual_flags);
   3046 
   3047     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3048     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 2, 16, 8);
   3049     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E4, 3, 12, 4);
   3050     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyOuterVlanId, qual_flags);
   3051 
   3052     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3053     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 3, 24, 8);
   3054     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_B, 0);
   3055     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassPort, qual_flags);
   3056 
   3057     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3058     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 3, 24, 8);
   3059     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_B, 1);
   3060     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassL3, qual_flags);
   3061 
   3062     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3063     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 3, 24, 8);
   3064     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_B, 2);
   3065     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstClassField, qual_flags);
   3066 
   3067     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3068     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 3, 24, 8);
   3069     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_B, 2);
   3070     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcClassField, qual_flags);
   3071 
   3072     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3073     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 3, 24, 8);
   3074     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_B, 3);
   3075     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassL2, qual_flags);
   3076 
   3077     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3078     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 3, 24, 8);
   3079     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_B, 4);
   3080     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstClassField, qual_flags);
   3081 
   3082     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3083     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 3, 24, 8);
   3084     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_B, 5);
   3085     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcClassField, qual_flags);
   3086 
   3087     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3088     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 3, 24, 8);
   3089     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_B, 6);
   3090     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceIngressKeySelectClassPort, qual_flags);
   3091 
   3092     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3093     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 3, 24, 8);
   3094     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_B, 6);
   3095     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceLookupClassPort, qual_flags);
   3096 
   3097     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3098     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 3, 24, 8);
   3099     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_B, 7);
   3100     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyUdfClass, qual_flags);
   3101 
   3102     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3103     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 4, 32, 8);
   3104     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_A, 0);
   3105     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassPort, qual_flags);
   3106 
   3107     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3108     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 4, 32, 8);
   3109     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_A, 1);
   3110     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassL3, qual_flags);
   3111 
   3112     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3113     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 4, 32, 8);
   3114     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_A, 2);
   3115     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstClassField, qual_flags);
   3116 
   3117     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3118     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 4, 32, 8);
   3119     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_A, 2);
   3120     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcClassField, qual_flags);
   3121 
   3122     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3123     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 4, 32, 8);
   3124     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_A, 3);
   3125     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassL2, qual_flags);
   3126 
   3127     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3128     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 4, 32, 8);
   3129     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_A, 4);
   3130     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstClassField, qual_flags);
   3131 
   3132     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3133     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 4, 32, 8);
   3134     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_A, 5);
   3135     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcClassField, qual_flags);
   3136 
   3137     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3138     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 4, 32, 8);
   3139     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_A, 6);
   3140     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceIngressKeySelectClassPort, qual_flags);
   3141 
   3142     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3143     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 4, 32, 8);
   3144     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_A, 6);
   3145     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceLookupClassPort, qual_flags);
   3146 
   3147     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3148     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 4, 32, 8);
   3149     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_A, 7);
   3150     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyUdfClass, qual_flags);
   3151 
   3152     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3153     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 12, 192, 12);
   3154     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyForwardingVlanId, qual_flags);
   3155 
   3156     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3157     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 6, 48, 8);
   3158     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_TOS_FN, 2);
   3159     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyTos, qual_flags);
   3160 
   3161     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3162     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 6, 48, 8);
   3163     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_TOS_FN, 0);
   3164     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyTosClassZero, qual_flags);
   3165 
   3166     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3167     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 6, 48, 8);
   3168     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_TOS_FN, 1);
   3169     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyTosClassOne, qual_flags);
   3170 
   3171     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3172     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 7, 56, 8);
   3173     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_TTL_FN, 2);
   3174     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyTtl, qual_flags);
   3175 
   3176     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3177     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 7, 56, 8);
   3178     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_TTL_FN, 0);
   3179     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyTtlClassZero, qual_flags);
   3180 
   3181     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3182     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 7, 56, 8);
   3183     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_TTL_FN, 1);
   3184     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyTtlClassOne, qual_flags);
   3185 
   3186     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3187     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 8, 64, 8);
   3188     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyIpProtocol, qual_flags);
   3189 
   3190     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3191     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 9, 72, 8);
   3192     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyExtensionHeader2Type, qual_flags);
   3193 
   3194     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3195     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 10, 80, 8);
   3196     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyExtensionHeaderType, qual_flags);
   3197 
   3198     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3199     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 11, 88, 8);
   3200     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyExtensionHeaderSubCode, qual_flags);
   3201 
   3202     /* ltid is assigned fixed offset to avoid issues
   3203      * with matching on ltid with value 0
   3204      */
   3205 
   3206     if (soc_feature(unit, soc_feature_fp_ltid_match_all_parts) &&
   3207         (stage_fc->stage_id == _BCM_FIELD_STAGE_INGRESS)) {
   3208         BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3209         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 12, 96, 4);
   3210         BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_LTID, 1);
   3211         BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, _bcmFieldQualifyPreLogicalTableId1, qual_flags);
   3212 
   3213         BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3214         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 12, 96, 4);
   3215         BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_LTID, 2);
   3216         BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, _bcmFieldQualifyPreLogicalTableId2, qual_flags);
   3217     }
   3218 
   3219     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3220     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 12, 101, 2);
   3221     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyGroupClass, qual_flags);
   3222 
   3223     /* EM_LOOKUP_CONTROL */
   3224     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3225     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 13, 104, 4);
   3226     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, _bcmFieldQualifyExactMatchGroupClassIdLookup0, qual_flags);
   3227 
   3228     
   3229 
   3230     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3231     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 15, 120, 8);
   3232     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_TCP_FN, 2);
   3233     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyTcpControl, qual_flags);
   3234 
   3235     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3236     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 15, 120, 8);
   3237     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_TCP_FN, 0);
   3238     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyTcpClassZero, qual_flags);
   3239 
   3240     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3241     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 15, 120, 8);
   3242     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_TCP_FN, 1);
   3243     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyTcpClassOne, qual_flags);
   3244 
   3245     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3246     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 16, 128, 8);
   3247     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_ALT_TTL_FN, 1);
   3248     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyIpTunnelTtl, qual_flags);
   3249 
   3250     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3251     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 16, 128, 8);
   3252     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_ALT_TTL_FN, 0);
   3253     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyIpTunnelTtlClassZero, qual_flags);
   3254 
   3255     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3256     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 17, 136, 8);
   3257     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E8, 18, 144, 8);
   3258     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyRangeCheckGroup, qual_flags);
   3259 
   3260     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3261     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 0, 0, 4);
   3262     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyIpType, qual_flags);
   3263 
   3264     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3265     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 4, 16, 2);
   3266     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyIngressStpState, qual_flags);
   3267 
   3268     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3269     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 4, 16, 2);
   3270     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyStpState, qual_flags);
   3271 
   3272     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3273     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 4, 18, 1);
   3274     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDosAttack, qual_flags);
   3275 
   3276     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3277     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 4, 19, 1);
   3278     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyForwardingVlanValid, qual_flags);
   3279 
   3280     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3281     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 5, 23, 1);
   3282     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyIpTunnelHit, qual_flags);
   3283 
   3284     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3285     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 5, 22, 1);
   3286     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyMplsTerminated, qual_flags);
   3287 
   3288     
   3289     SHR_BITSET(qual_flags.w, BCMI_KEYGEN_QUAL_FLAGS_NOT_IN_EM);
   3290     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3291     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 5, 20, 1);
   3292     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyMplsLabel1Hit, qual_flags);
   3293 
   3294     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3295     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 5, 21, 1);
   3296     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyMplsLabel2Hit, qual_flags);
   3297     SHR_BITCLR(qual_flags.w, BCMI_KEYGEN_QUAL_FLAGS_NOT_IN_EM);
   3298 
   3299     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3300     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 6, 24, 4);
   3301     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyForwardingType, qual_flags);
   3302 
   3303     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3304     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 7, 28, 4);
   3305     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyEtherTypeClass, qual_flags);
   3306 
   3307     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3308     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 8, 32, 4);
   3309     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyIpProtocolClass, qual_flags);
   3310 
   3311     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3312     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 11, 44, 4);
   3313     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyMplsForwardingLabelAction, qual_flags);
   3314 
   3315     
   3316 
   3317     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3318     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 16, 64, 2);
   3319     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyIpFlags, qual_flags);
   3320 
   3321     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3322     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 16, 66, 2);
   3323     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyIpFrag, qual_flags);
   3324 
   3325     SHR_BITSET(qual_flags.w, BCMI_KEYGEN_QUAL_FLAGS_NOT_IN_EM);
   3326     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3327     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 17, 68, 2);
   3328     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyColor, qual_flags);
   3329 
   3330     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3331     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 17, 70, 2);
   3332     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyIntCongestionNotification, qual_flags);
   3333     SHR_BITCLR(qual_flags.w, BCMI_KEYGEN_QUAL_FLAGS_NOT_IN_EM);
   3334 
   3335     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3336     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 18, 72, 1);
   3337     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyIpFragNonOrFirst, qual_flags);
   3338 
   3339     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3340     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 18, 73, 1);
   3341     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyL4Ports, qual_flags);
   3342 
   3343     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3344     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 18, 74, 1);
   3345     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyIpInfo, qual_flags);
   3346 
   3347     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3348     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 18, 75, 1);
   3349     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyIcmpError, qual_flags);
   3350 
   3351     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3352     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 19, 76, 2);
   3353     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyL2Format, qual_flags);
   3354 
   3355     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3356     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 20, 81, 1);
   3357     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyL3Routable, qual_flags);
   3358 
   3359     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3360     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 20, 80, 1);
   3361     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyMyStationHit, qual_flags);
   3362 
   3363     
   3364     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3365     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 21, 84, 2);
   3366     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInnerTpid, qual_flags);
   3367 
   3368     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3369     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 21, 86, 2);
   3370     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyOuterTpid, qual_flags);
   3371 
   3372     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3373     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 22, 88, 4);
   3374     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyTunnelType, qual_flags);
   3375 
   3376     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3377     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 22, 88, 4);
   3378     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyLoopbackType, qual_flags);
   3379 
   3380     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3381     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 22, 91, 1);
   3382     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyLoopback, qual_flags);
   3383 
   3384     
   3385 
   3386     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3387     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 24, 96, 2);
   3388     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyVlanFormat, qual_flags);
   3389 
   3390     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3391     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 24, 98, 2);
   3392     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyTranslatedVlanFormat, qual_flags);
   3393 
   3394     /********************** Post Mux Qualifiers. **********************/
   3395     /******************************************************************/
   3396     SHR_BITSET(qual_flags.w, BCMI_KEYGEN_QUAL_FLAGS_PMUX);
   3397 
   3398     /* ltid is assigned fixed offset to avoid
   3399      * issues with matching on ltid with value 0
   3400      */
   3401     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3402     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_LTID,
   3403         0, 124, 4);
   3404     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db,
   3405         _bcmFieldQualifyPreLogicalTableId, qual_flags);
   3406 
   3407     /*
   3408      * Exact-Match doesn't support Post-Mux qualifiers.
   3409      * Set the flag NOT_IN_EM to avoid initilization.
   3410      */
   3411     SHR_BITSET(qual_flags.w, BCMI_KEYGEN_QUAL_FLAGS_NOT_IN_EM);
   3412 
   3413     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3414     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_DROP, 0, 159, 1);
   3415     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDrop, qual_flags);
   3416 
   3417     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3418     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   3419         (0, BCMI_KEYGEN_EXT_SECTION_EM_FIRST_LOOKUP_HIT, 1, 158, 1);
   3420     BCMI_KEYGEN_QUAL_CFG_INSERT
   3421         (unit, db, _bcmFieldQualifyExactMatchHitStatusLookup0, qual_flags);
   3422 
   3423     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3424     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   3425         (0, BCMI_KEYGEN_EXT_SECTION_EM_FIRST_LOOKUP_CLASSID_BITS_0_3, 2, 84, 4);
   3426     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   3427         (1, BCMI_KEYGEN_EXT_SECTION_EM_FIRST_LOOKUP_CLASSID_BITS_4_7, 3, 88, 4);
   3428     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(2,
   3429         BCMI_KEYGEN_EXT_SECTION_EM_FIRST_LOOKUP_CLASSID_BITS_8_11, 4, 91, 4);
   3430     BCMI_KEYGEN_QUAL_CFG_INSERT
   3431         (unit, db, _bcmFieldQualifyExactMatchActionClassIdLookup0, qual_flags);
   3432 
   3433     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3434     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   3435         (0, BCMI_KEYGEN_EXT_SECTION_INT_PRI, 13, 116, 4);
   3436     BCMI_KEYGEN_QUAL_CFG_INSERT
   3437         (unit, db, bcmFieldQualifyIntPriority, qual_flags);
   3438 
   3439     /* Class Id C */
   3440     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3441     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   3442         (0, BCMI_KEYGEN_EXT_SECTION_CLASS_ID_C, 10, 52, 16);
   3443     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_C, 0);
   3444     BCMI_KEYGEN_QUAL_CFG_INSERT
   3445         (unit, db, bcmFieldQualifySrcClassL2, qual_flags);
   3446 
   3447     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3448     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   3449         (0, BCMI_KEYGEN_EXT_SECTION_CLASS_ID_C, 10, 52, 16);
   3450     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_C, 1);
   3451     BCMI_KEYGEN_QUAL_CFG_INSERT
   3452         (unit, db, bcmFieldQualifyDstClassL2, qual_flags);
   3453 
   3454     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3455     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   3456         (0, BCMI_KEYGEN_EXT_SECTION_CLASS_ID_C, 10, 52, 16);
   3457     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_C, 2);
   3458     BCMI_KEYGEN_QUAL_CFG_INSERT
   3459         (unit, db, bcmFieldQualifySrcClassL3, qual_flags);
   3460 
   3461     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3462     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   3463         (0, BCMI_KEYGEN_EXT_SECTION_CLASS_ID_C, 10, 52, 16);
   3464     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_C, 3);
   3465     BCMI_KEYGEN_QUAL_CFG_INSERT
   3466         (unit, db, bcmFieldQualifyDstClassL3, qual_flags);
   3467 
   3468     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3469     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   3470         (0, BCMI_KEYGEN_EXT_SECTION_CLASS_ID_C, 10, 60, 8);
   3471     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_C, 5);
   3472     BCMI_KEYGEN_QUAL_CFG_INSERT
   3473         (unit, db, bcmFieldQualifySrcClassL2, qual_flags);
   3474 
   3475     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3476     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   3477         (0, BCMI_KEYGEN_EXT_SECTION_CLASS_ID_C, 10, 52, 8);
   3478     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_C, 5);
   3479     BCMI_KEYGEN_QUAL_CFG_INSERT
   3480         (unit, db, bcmFieldQualifyDstClassL2, qual_flags);
   3481 
   3482     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3483     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   3484         (0, BCMI_KEYGEN_EXT_SECTION_CLASS_ID_C, 10, 60, 8);
   3485     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_C, 6);
   3486     BCMI_KEYGEN_QUAL_CFG_INSERT
   3487         (unit, db, bcmFieldQualifySrcClassL3, qual_flags);
   3488 
   3489     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3490     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   3491         (0, BCMI_KEYGEN_EXT_SECTION_CLASS_ID_C, 10, 52, 8);
   3492     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_C, 6);
   3493     BCMI_KEYGEN_QUAL_CFG_INSERT
   3494         (unit, db, bcmFieldQualifyDstClassL3, qual_flags);
   3495 
   3496     /* Class Id D */
   3497     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3498     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   3499         (0, BCMI_KEYGEN_EXT_SECTION_CLASS_ID_D, 11, 68, 16);
   3500     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_D, 0);
   3501     BCMI_KEYGEN_QUAL_CFG_INSERT
   3502         (unit, db, bcmFieldQualifySrcClassL2, qual_flags);
   3503 
   3504     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3505     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   3506         (0, BCMI_KEYGEN_EXT_SECTION_CLASS_ID_D, 11, 68, 16);
   3507     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_D, 1);
   3508     BCMI_KEYGEN_QUAL_CFG_INSERT
   3509         (unit, db, bcmFieldQualifyDstClassL2, qual_flags);
   3510 
   3511     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3512     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   3513         (0, BCMI_KEYGEN_EXT_SECTION_CLASS_ID_D, 11, 68, 16);
   3514     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_D, 2);
   3515     BCMI_KEYGEN_QUAL_CFG_INSERT
   3516         (unit, db, bcmFieldQualifySrcClassL3, qual_flags);
   3517 
   3518     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3519     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   3520         (0, BCMI_KEYGEN_EXT_SECTION_CLASS_ID_D, 11, 68, 16);
   3521     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_D, 3);
   3522     BCMI_KEYGEN_QUAL_CFG_INSERT
   3523         (unit, db, bcmFieldQualifyDstClassL3, qual_flags);
   3524 
   3525     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3526     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   3527         (0, BCMI_KEYGEN_EXT_SECTION_CLASS_ID_D, 11, 76, 8);
   3528     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_D, 5);
   3529     BCMI_KEYGEN_QUAL_CFG_INSERT
   3530         (unit, db, bcmFieldQualifySrcClassL2, qual_flags);
   3531 
   3532     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3533     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   3534         (0, BCMI_KEYGEN_EXT_SECTION_CLASS_ID_D, 11, 68, 8);
   3535     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_D, 5);
   3536     BCMI_KEYGEN_QUAL_CFG_INSERT
   3537         (unit, db, bcmFieldQualifyDstClassL2, qual_flags);
   3538 
   3539     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3540     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   3541         (0, BCMI_KEYGEN_EXT_SECTION_CLASS_ID_D, 11, 76, 8);
   3542     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_D, 6);
   3543     BCMI_KEYGEN_QUAL_CFG_INSERT
   3544         (unit, db, bcmFieldQualifySrcClassL3, qual_flags);
   3545 
   3546     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3547     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   3548         (0, BCMI_KEYGEN_EXT_SECTION_CLASS_ID_D, 11, 68, 8);
   3549     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_D, 6);
   3550     BCMI_KEYGEN_QUAL_CFG_INSERT
   3551         (unit, db, bcmFieldQualifyDstClassL3, qual_flags);
   3552 
   3553     /* Destination Container 0 */
   3554     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3555     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   3556         (0, BCMI_KEYGEN_EXT_SECTION_DST_CONTAINER_A, 7, 20, 9);
   3557     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_DST_A, 1);
   3558     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstPort, qual_flags);
   3559 
   3560     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3561     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   3562         (0, BCMI_KEYGEN_EXT_SECTION_DST_CONTAINER_A, 7, 20, 9);
   3563     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_DST_A, 1);
   3564     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstTrunk, qual_flags);
   3565 
   3566     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3567     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   3568         (0, BCMI_KEYGEN_EXT_SECTION_DST_CONTAINER_A, 7, 20, 16);
   3569     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   3570         (1, BCMI_KEYGEN_EXT_SECTION_DST_CONTAINER_A, 7, 110, 1);
   3571     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_DST_A, 2);
   3572     BCMI_KEYGEN_QUAL_CFG_INSERT
   3573         (unit, db, bcmFieldQualifyDstMultipath, qual_flags);
   3574 
   3575     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3576     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   3577         (0, BCMI_KEYGEN_EXT_SECTION_DST_CONTAINER_A, 7, 20, 16);
   3578     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   3579         (1, BCMI_KEYGEN_EXT_SECTION_DST_CONTAINER_A, 7, 110, 1);
   3580     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_DST_A, 2);
   3581     BCMI_KEYGEN_QUAL_CFG_INSERT
   3582         (unit, db, bcmFieldQualifyDstL3EgressNextHops, qual_flags);
   3583 
   3584     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3585     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   3586         (0, BCMI_KEYGEN_EXT_SECTION_DST_CONTAINER_A, 7, 20, 16);
   3587     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   3588         (1, BCMI_KEYGEN_EXT_SECTION_DST_CONTAINER_A, 7, 110, 1);
   3589     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_DST_A, 2);
   3590     BCMI_KEYGEN_QUAL_CFG_INSERT
   3591         (unit, db, bcmFieldQualifyDstL3Egress, qual_flags);
   3592 
   3593     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3594     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   3595         (0, BCMI_KEYGEN_EXT_SECTION_DST_CONTAINER_A, 7, 20, 16);
   3596     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   3597         (1, BCMI_KEYGEN_EXT_SECTION_DST_CONTAINER_A, 7, 110, 1);
   3598     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_DST_A, 4);
   3599     BCMI_KEYGEN_QUAL_CFG_INSERT
   3600         (unit, db, bcmFieldQualifyDstL3MulticastGroup, qual_flags);
   3601 
   3602     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3603     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   3604         (0, BCMI_KEYGEN_EXT_SECTION_DST_CONTAINER_A, 7, 20, 16);
   3605     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   3606         (1, BCMI_KEYGEN_EXT_SECTION_DST_CONTAINER_A, 7, 110, 1);
   3607     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_DST_A, 5);
   3608     BCMI_KEYGEN_QUAL_CFG_INSERT
   3609         (unit, db, bcmFieldQualifyDstL2MulticastGroup, qual_flags);
   3610 
   3611     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3612     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   3613         (0, BCMI_KEYGEN_EXT_SECTION_DST_CONTAINER_B, 8, 36, 9);
   3614     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_DST_B, 1);
   3615     BCMI_KEYGEN_QUAL_CFG_INSERT
   3616         (unit, db, bcmFieldQualifyDstPort, qual_flags);
   3617 
   3618     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3619     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   3620         (0, BCMI_KEYGEN_EXT_SECTION_DST_CONTAINER_B, 8, 36, 9);
   3621     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_DST_B, 1);
   3622     BCMI_KEYGEN_QUAL_CFG_INSERT
   3623         (unit, db, bcmFieldQualifyDstTrunk, qual_flags);
   3624 
   3625     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3626     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   3627         (0, BCMI_KEYGEN_EXT_SECTION_DST_CONTAINER_B, 8, 36, 16);
   3628     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   3629         (1, BCMI_KEYGEN_EXT_SECTION_DST_CONTAINER_B, 8, 111, 1);
   3630     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_DST_B, 2);
   3631     BCMI_KEYGEN_QUAL_CFG_INSERT
   3632         (unit, db, bcmFieldQualifyDstMultipath, qual_flags);
   3633 
   3634     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3635     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   3636         (0, BCMI_KEYGEN_EXT_SECTION_DST_CONTAINER_B, 8, 36, 16);
   3637     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   3638         (1, BCMI_KEYGEN_EXT_SECTION_DST_CONTAINER_B, 8, 111, 1);
   3639     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_DST_B, 2);
   3640     BCMI_KEYGEN_QUAL_CFG_INSERT
   3641         (unit, db, bcmFieldQualifyDstL3EgressNextHops, qual_flags);
   3642 
   3643     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3644     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   3645         (0, BCMI_KEYGEN_EXT_SECTION_DST_CONTAINER_B, 8, 36, 16);
   3646     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   3647         (1, BCMI_KEYGEN_EXT_SECTION_DST_CONTAINER_B, 8, 111, 1);
   3648     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_DST_B, 2);
   3649     BCMI_KEYGEN_QUAL_CFG_INSERT
   3650         (unit, db, bcmFieldQualifyDstL3Egress, qual_flags);
   3651 
   3652     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3653     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   3654         (0, BCMI_KEYGEN_EXT_SECTION_DST_CONTAINER_B, 8, 36, 16);
   3655     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   3656         (1, BCMI_KEYGEN_EXT_SECTION_DST_CONTAINER_B, 8, 111, 1);
   3657     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_DST_B, 4);
   3658     BCMI_KEYGEN_QUAL_CFG_INSERT
   3659         (unit, db, bcmFieldQualifyDstL3MulticastGroup, qual_flags);
   3660 
   3661     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3662     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   3663         (0, BCMI_KEYGEN_EXT_SECTION_DST_CONTAINER_B, 8, 36, 16);
   3664     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   3665         (1, BCMI_KEYGEN_EXT_SECTION_DST_CONTAINER_B, 8, 111, 1);
   3666     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_DST_B, 5);
   3667     BCMI_KEYGEN_QUAL_CFG_INSERT
   3668         (unit, db, bcmFieldQualifyDstL2MulticastGroup, qual_flags);
   3669 
   3670     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3671     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   3672         (0, BCMI_KEYGEN_EXT_SECTION_MH_OPCODE, 14, 120, 3);
   3673     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyMHOpcode, qual_flags);
   3674 
   3675     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3676     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   3677         (0, BCMI_KEYGEN_EXT_SECTION_PKT_RESOLUTION, 9, 104, 6);
   3678     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyPacketRes, qual_flags);
   3679 
   3680     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3681     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   3682         (0, BCMI_KEYGEN_EXT_SECTION_LOOKUP_STATUS_VECTOR_BITS_0_3, 5, 98, 1);
   3683     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyL2SrcHit, qual_flags);
   3684 
   3685     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3686     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   3687         (0, BCMI_KEYGEN_EXT_SECTION_LOOKUP_STATUS_VECTOR_BITS_0_3, 5, 99, 1);
   3688     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyL2DestHit, qual_flags);
   3689 
   3690     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3691     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   3692         (0, BCMI_KEYGEN_EXT_SECTION_LOOKUP_STATUS_VECTOR_BITS_4_7, 6, 102, 1);
   3693     BCMI_KEYGEN_QUAL_CFG_INSERT
   3694         (unit, db, bcmFieldQualifyL3SrcHostHit, qual_flags);
   3695 
   3696     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3697     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   3698         (0, BCMI_KEYGEN_EXT_SECTION_LOOKUP_STATUS_VECTOR_BITS_4_7, 6, 102, 1);
   3699     BCMI_KEYGEN_QUAL_CFG_INSERT
   3700         (unit, db, bcmFieldQualifyIpmcStarGroupHit, qual_flags);
   3701 
   3702     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3703     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   3704         (0, BCMI_KEYGEN_EXT_SECTION_LOOKUP_STATUS_VECTOR_BITS_4_7, 6, 101, 1);
   3705     BCMI_KEYGEN_QUAL_CFG_INSERT
   3706         (unit, db, bcmFieldQualifyL3DestHostHit, qual_flags);
   3707 
   3708     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3709     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   3710         (0, BCMI_KEYGEN_EXT_SECTION_LOOKUP_STATUS_VECTOR_BITS_4_7, 6, 103, 1);
   3711     BCMI_KEYGEN_QUAL_CFG_INSERT
   3712         (unit, db, bcmFieldQualifyL3DestRouteHit, qual_flags);
   3713 
   3714 #if 0
   3715     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3716     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   3717         (0, BCMI_KEYGEN_EXT_SECTION_LOOKUP_STATUS_VECTOR_BITS_4_7, 6, 100, 1);
   3718     BCMI_KEYGEN_QUAL_CFG_INSERT
   3719         (unit, db, bcmFieldQualifyL2StationMove, qual_flags);
   3720 #endif
   3721 
   3722     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3723     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   3724         (0, BCMI_KEYGEN_EXT_SECTION_LOOKUP_STATUS_VECTOR_BITS_0_3, 5, 97, 1);
   3725     BCMI_KEYGEN_QUAL_CFG_INSERT
   3726         (unit, db, bcmFieldQualifyL2CacheHit, qual_flags);
   3727 
   3728     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3729     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   3730         (0, BCMI_KEYGEN_EXT_SECTION_LOOKUP_STATUS_VECTOR_BITS_0_3, 5, 96, 1);
   3731     BCMI_KEYGEN_QUAL_CFG_INSERT
   3732         (unit, db, bcmFieldQualifyL2CacheHit, qual_flags);
   3733 
   3734     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3735     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_IPBM, 0, 0, 20);
   3736     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_IPBM_PRESENT, 0);
   3737     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInPorts, qual_flags);
   3738 
   3739     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3740     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_IPBM, 0, 0, 20);
   3741     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_IPBM_PRESENT, 1);
   3742     BCMI_KEYGEN_QUAL_CFG_INSERT
   3743         (unit, db, bcmFieldQualifySystemPortBitmap, qual_flags);
   3744 
   3745     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   3746     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_IPBM, 0, 0, 20);
   3747     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_IPBM_PRESENT, 3);
   3748     BCMI_KEYGEN_QUAL_CFG_INSERT
   3749         (unit, db, bcmFieldQualifyDevicePortBitmap, qual_flags);
   3750 
   3751     SHR_BITCLR(qual_flags.w, BCMI_KEYGEN_QUAL_FLAGS_NOT_IN_EM);
   3752     /********************** END Of Post Mux Qualifiers. **********************/
   3753 
   3754     
   3755 
   3756 exit:
   3757     BCMI_KEYGEN_FUNC_EXIT();
   3758 }
   3759 
   3760 int
   3761 _bcm_field_th3_keygen_profile1_entry_pack(int unit, _field_stage_t *stage_fc,
   3762                                _field_group_t *fg, int part, soc_mem_t mem,
   3763                                ifp_key_gen_program_profile_entry_t *prof1_entry)
   3764 {
   3765     int idx; /* Iterator index. */
   3766     static const soc_field_t l1_32_sel[] = /* 32 bit extractors. */
   3767         {
   3768             L1_C_E32_SEL_0f,
   3769             L1_C_E32_SEL_1f,
   3770             L1_B_E32_SEL_0f,
   3771             L1_B_E32_SEL_1f
   3772         };
   3773     static const soc_field_t l1_16_sel[] = /* 16 bit extractors. */
   3774         {
   3775             L1_C_E16_SEL_0f,
   3776             L1_C_E16_SEL_1f,
   3777             L1_C_E16_SEL_2f,
   3778             L1_C_E16_SEL_3f,
   3779             L1_C_E16_SEL_4f,
   3780             L1_B_E16_SEL_0f,
   3781             L1_B_E16_SEL_1f,
   3782             L1_B_E16_SEL_2f,
   3783             L1_B_E16_SEL_3f,
   3784             L1_B_E16_SEL_4f,
   3785         };
   3786     static const soc_field_t l1_8_sel[] = /* 8 bit extractors. */
   3787         {
   3788             L1_A_E8_SEL_0f,
   3789             L1_A_E8_SEL_1f,
   3790             L1_A_E8_SEL_2f,
   3791             L1_A_E8_SEL_3f,
   3792             L1_A_E8_SEL_4f,
   3793             L1_A_E8_SEL_5f,
   3794         };
   3795     static const soc_field_t l1_4_sel[] = /* 4 bit extractors. */
   3796         {
   3797             L1_A_E4_SEL_0f,
   3798             L1_A_E4_SEL_1f,
   3799             L1_A_E4_SEL_2f,
   3800             L1_A_E4_SEL_3f,
   3801             L1_A_E4_SEL_4f,
   3802             L1_A_E4_SEL_5f,
   3803             L1_A_E4_SEL_6f,
   3804             L1_A_E4_SEL_7f,
   3805             L1_A_E4_SEL_8f,
   3806             L1_A_E4_SEL_9f
   3807         };
   3808 
   3809     static const soc_field_t l2_16_sel[] = /* 16 bit extractors. */
   3810         {
   3811             L2_E16_SEL_0f,
   3812             L2_E16_SEL_1f,
   3813             L2_E16_SEL_2f,
   3814             L2_E16_SEL_3f,
   3815             L2_E16_SEL_4f,
   3816         };
   3817     static const soc_field_t l2_4_sel[] = /* 4 bit extractors. */
   3818         {
   3819             L2_E4_SEL_0f,
   3820             L2_E4_SEL_1f,
   3821             L2_E4_SEL_2f,
   3822             L2_E4_SEL_3f,
   3823             L2_E4_SEL_4f,
   3824             L2_E4_SEL_5f,
   3825             L2_E4_SEL_6f,
   3826             L2_E4_SEL_7f,
   3827             L2_E4_SEL_8f,
   3828             L2_E4_SEL_9f,
   3829             L2_E4_SEL_10f,
   3830             L2_E4_SEL_11f,
   3831             L2_E4_SEL_12f,
   3832             L2_E4_SEL_13f,
   3833             L2_E4_SEL_14f,
   3834             L2_E4_SEL_15f,
   3835         };
   3836     static const soc_field_t l2_2_sel[] = /* 2 bit extractors. */
   3837         {
   3838             L2_E2_SEL_0f,
   3839             L2_E2_SEL_1f,
   3840             L2_E2_SEL_2f,
   3841             L2_E2_SEL_3f,
   3842             L2_E2_SEL_4f,
   3843             L2_E2_SEL_5f,
   3844             L2_E2_SEL_6f
   3845         };
   3846     static const soc_field_t l2_1_sel[] = /* 1 bit extractors. */
   3847         {
   3848             L2_E1_SEL_0f,
   3849             L2_E1_SEL_1f,
   3850         };
   3851 
   3852     /* Input parameters check. */
   3853     if ((NULL == stage_fc) || (NULL == fg) || (NULL == prof1_entry)) {
   3854         return (BCM_E_PARAM);
   3855     }
   3856 
   3857     /* Set 32bit extractor selcode values. */
   3858     for (idx = 0; idx < 4; idx++) {
   3859         if (_FP_EXT_SELCODE_DONT_CARE != fg->ext_codes[part].l1_e32_sel[idx]) {
   3860             soc_mem_field32_set(unit, mem, prof1_entry, l1_32_sel[idx],
   3861                 fg->ext_codes[part].l1_e32_sel[idx]);
   3862         }
   3863     }
   3864 
   3865     /* Set 16bit extractor selcode values. */
   3866     for (idx = 0; idx < 10; idx++) {
   3867         if (_FP_EXT_SELCODE_DONT_CARE != fg->ext_codes[part].l1_e16_sel[idx]) {
   3868             soc_mem_field32_set(unit, mem, prof1_entry, l1_16_sel[idx],
   3869                 fg->ext_codes[part].l1_e16_sel[idx]);
   3870         }
   3871     }
   3872 
   3873     /* Set 8bit extractor selcode values. */
   3874     for (idx = 0; idx < 6; idx++) {
   3875         if (_FP_EXT_SELCODE_DONT_CARE != fg->ext_codes[part].l1_e8_sel[idx]) {
   3876             soc_mem_field32_set(unit, mem, prof1_entry, l1_8_sel[idx],
   3877                 fg->ext_codes[part].l1_e8_sel[idx]);
   3878         }
   3879     }
   3880 
   3881     /* Set 4bit extractor selcode values. */
   3882     for (idx = 0; idx < 10; idx++) {
   3883         if (_FP_EXT_SELCODE_DONT_CARE != fg->ext_codes[part].l1_e4_sel[idx]) {
   3884             soc_mem_field32_set(unit, mem, prof1_entry, l1_4_sel[idx],
   3885                 fg->ext_codes[part].l1_e4_sel[idx]);
   3886         }
   3887     }
   3888 
   3889     /* Set 16bit extractor selcode values. */
   3890     for (idx = 0; idx < 5; idx++) {
   3891         if (_FP_EXT_SELCODE_DONT_CARE != fg->ext_codes[part].l2_e16_sel[idx]) {
   3892             soc_mem_field32_set(unit, mem, prof1_entry, l2_16_sel[idx],
   3893                 fg->ext_codes[part].l2_e16_sel[idx]);
   3894         }
   3895     }
   3896 
   3897     /* Set 4bit extractor selcode values. */
   3898     for (idx = 0; idx < 16; idx++) {
   3899         if (_FP_EXT_SELCODE_DONT_CARE != fg->ext_codes[part].l2_e4_sel[idx]) {
   3900             soc_mem_field32_set(unit, mem, prof1_entry, l2_4_sel[idx],
   3901                 fg->ext_codes[part].l2_e4_sel[idx]);
   3902         }
   3903     }
   3904 
   3905     /* Set 2bit extractor selcode values. */
   3906     for (idx = 0; idx < 7; idx++) {
   3907         if (_FP_EXT_SELCODE_DONT_CARE != fg->ext_codes[part].l2_e2_sel[idx]) {
   3908             soc_mem_field32_set(unit, mem, prof1_entry, l2_2_sel[idx],
   3909                 fg->ext_codes[part].l2_e2_sel[idx]);
   3910         }
   3911     }
   3912 
   3913     /* Set 1bit extractor selcode values. */
   3914     for (idx = 0; idx < 2; idx++) {
   3915         if (_FP_EXT_SELCODE_DONT_CARE != fg->ext_codes[part].l2_e1_sel[idx]) {
   3916             soc_mem_field32_set(unit, mem, prof1_entry, l2_1_sel[idx],
   3917                 fg->ext_codes[part].l2_e1_sel[idx]);
   3918         }
   3919     }
   3920 
   3921     return (BCM_E_NONE);
   3922 }
   3923 
   3924 int
   3925 _bcm_field_th3_keygen_em_profile_entry_pack(int unit, _field_stage_t *stage_fc,
   3926                                             _field_group_t *fg, int part, soc_mem_t mem,
   3927                                             exact_match_key_gen_program_profile_entry_t *prof_entry)
   3928 {
   3929     int idx; /* Iterator index. */
   3930     static const soc_field_t l1_32_sel[] = /* 32 bit extractors. */
   3931     {
   3932         L1_C_E32_SEL_0f,
   3933         L1_C_E32_SEL_1f,
   3934         L1_B_E32_SEL_0f,
   3935         L1_B_E32_SEL_1f
   3936     };
   3937     static const soc_field_t l1_16_sel[] = /* 16 bit extractors. */
   3938     {
   3939         L1_C_E16_SEL_0f,
   3940         L1_C_E16_SEL_1f,
   3941         L1_C_E16_SEL_2f,
   3942         L1_C_E16_SEL_3f,
   3943         L1_C_E16_SEL_4f,
   3944         L1_B_E16_SEL_0f,
   3945         L1_B_E16_SEL_1f,
   3946         L1_B_E16_SEL_2f,
   3947         L1_B_E16_SEL_3f,
   3948         L1_B_E16_SEL_4f,
   3949     };
   3950     static const soc_field_t l1_8_sel[] = /* 8 bit extractors. */
   3951     {
   3952         L1_A_E8_SEL_0f,
   3953         L1_A_E8_SEL_1f,
   3954         L1_A_E8_SEL_2f,
   3955         L1_A_E8_SEL_3f,
   3956         L1_A_E8_SEL_4f,
   3957         L1_A_E8_SEL_5f,
   3958     };
   3959     static const soc_field_t l1_4_sel[] = /* 4 bit extractors. */
   3960     {
   3961         L1_A_E4_SEL_0f,
   3962         L1_A_E4_SEL_1f,
   3963         L1_A_E4_SEL_2f,
   3964         L1_A_E4_SEL_3f,
   3965         L1_A_E4_SEL_4f,
   3966         L1_A_E4_SEL_5f,
   3967         L1_A_E4_SEL_6f,
   3968         L1_A_E4_SEL_7f,
   3969         L1_A_E4_SEL_8f,
   3970         L1_A_E4_SEL_9f
   3971     };
   3972 
   3973     static const soc_field_t l2_16_sel[] = /* 16 bit extractors. */
   3974     {
   3975         L2_E16_SEL_0f,
   3976         L2_E16_SEL_1f,
   3977         L2_E16_SEL_2f,
   3978         L2_E16_SEL_3f,
   3979         L2_E16_SEL_4f,
   3980     };
   3981     static const soc_field_t l2_4_sel[] = /* 4 bit extractors. */
   3982     {
   3983         L2_E4_SEL_0f,
   3984         L2_E4_SEL_1f,
   3985         L2_E4_SEL_2f,
   3986         L2_E4_SEL_3f,
   3987         L2_E4_SEL_4f,
   3988         L2_E4_SEL_5f,
   3989         L2_E4_SEL_6f,
   3990         L2_E4_SEL_7f,
   3991         L2_E4_SEL_8f,
   3992         L2_E4_SEL_9f,
   3993         L2_E4_SEL_10f,
   3994         L2_E4_SEL_11f,
   3995         L2_E4_SEL_12f,
   3996         L2_E4_SEL_13f,
   3997         L2_E4_SEL_14f,
   3998         L2_E4_SEL_15f,
   3999     };
   4000     static const soc_field_t l2_2_sel[] = /* 2 bit extractors. */
   4001     {
   4002         L2_E2_SEL_0f,
   4003         L2_E2_SEL_1f,
   4004         L2_E2_SEL_2f,
   4005         L2_E2_SEL_3f,
   4006         L2_E2_SEL_4f,
   4007         L2_E2_SEL_5f,
   4008         L2_E2_SEL_6f
   4009     };
   4010 
   4011     static const soc_field_t l2_1_sel[] = /* 1 bit extractors. */
   4012     {
   4013         L2_E1_SEL_0f,
   4014         L2_E1_SEL_1f,
   4015     };
   4016 
   4017     /* Input parameters check. */
   4018     if ((NULL == stage_fc) || (NULL == fg) || (NULL == prof_entry)) {
   4019         return (BCM_E_PARAM);
   4020     }
   4021 
   4022     /* Set 32bit extractor selcode values. */
   4023     for (idx = 0; idx < 4; idx++) {
   4024         if (_FP_EXT_SELCODE_DONT_CARE != fg->ext_codes[part].l1_e32_sel[idx]) {
   4025             soc_mem_field32_set(unit, mem, prof_entry, l1_32_sel[idx],
   4026                     fg->ext_codes[part].l1_e32_sel[idx]);
   4027         }
   4028     }
   4029 
   4030     /* Set 16bit extractor selcode values. */
   4031     for (idx = 0; idx < 10; idx++) {
   4032         if (_FP_EXT_SELCODE_DONT_CARE != fg->ext_codes[part].l1_e16_sel[idx]) {
   4033             soc_mem_field32_set(unit, mem, prof_entry, l1_16_sel[idx],
   4034                     fg->ext_codes[part].l1_e16_sel[idx]);
   4035         }
   4036     }
   4037 
   4038     /* Set 8bit extractor selcode values. */
   4039     for (idx = 0; idx < 6; idx++) {
   4040         if (_FP_EXT_SELCODE_DONT_CARE != fg->ext_codes[part].l1_e8_sel[idx]) {
   4041             soc_mem_field32_set(unit, mem, prof_entry, l1_8_sel[idx],
   4042                     fg->ext_codes[part].l1_e8_sel[idx]);
   4043         }
   4044     }
   4045 
   4046     /* Set 4bit extractor selcode values. */
   4047     for (idx = 0; idx < 10; idx++) {
   4048         if (_FP_EXT_SELCODE_DONT_CARE != fg->ext_codes[part].l1_e4_sel[idx]) {
   4049             soc_mem_field32_set(unit, mem, prof_entry, l1_4_sel[idx],
   4050                     fg->ext_codes[part].l1_e4_sel[idx]);
   4051         }
   4052     }
   4053 
   4054     /* Set 16bit extractor selcode values. */
   4055     for (idx = 0; idx < 5; idx++) {
   4056         if (_FP_EXT_SELCODE_DONT_CARE != fg->ext_codes[part].l2_e16_sel[idx]) {
   4057             soc_mem_field32_set(unit, mem, prof_entry, l2_16_sel[idx],
   4058                     fg->ext_codes[part].l2_e16_sel[idx]);
   4059         }
   4060     }
   4061 
   4062     /* Set 4bit extractor selcode values. */
   4063     for (idx = 0; idx < 16; idx++) {
   4064         if (_FP_EXT_SELCODE_DONT_CARE != fg->ext_codes[part].l2_e4_sel[idx]) {
   4065             soc_mem_field32_set(unit, mem, prof_entry, l2_4_sel[idx],
   4066                     fg->ext_codes[part].l2_e4_sel[idx]);
   4067         }
   4068     }
   4069 
   4070     /* Set 2bit extractor selcode values. */
   4071     for (idx = 0; idx < 5; idx++) {
   4072         if (_FP_EXT_SELCODE_DONT_CARE != fg->ext_codes[part].l2_e2_sel[idx]) {
   4073             soc_mem_field32_set(unit, mem, prof_entry, l2_2_sel[idx],
   4074                     fg->ext_codes[part].l2_e2_sel[idx]);
   4075         }
   4076     }
   4077 
   4078     /* Set 1bit extractor selcode values. */
   4079     for (idx = 0; idx < 2; idx++) {
   4080         if (_FP_EXT_SELCODE_DONT_CARE != fg->ext_codes[part].l2_e1_sel[idx]) {
   4081             soc_mem_field32_set(unit, mem, prof_entry, l2_1_sel[idx],
   4082                 fg->ext_codes[part].l2_e1_sel[idx]);
   4083         }
   4084     }
   4085 
   4086     return (BCM_E_NONE);
   4087 }
   4088 
   4089 /*
   4090  * Function:
   4091  *      _bcm_field_th_udf_chunks_to_int_qset
   4092  * Purpose:
   4093  *      Sets internal data qualifiers corrspeonding to the
   4094  *      offset chunks used by the UDF.
   4095  * Parameters:
   4096  *      unit                - (IN)  Unit number.
   4097  *      udf_chunks_bmap     - (IN)  UDF offsets chunks map
   4098  *      qset                - (OUT) Qualifier set
   4099  * Returns:
   4100  *      BCM_E_NONE
   4101  * Notes:
   4102  */
   4103 int
   4104 _bcm_field_th3_udf_chunks_to_int_qset(int unit, uint32 udf_chunks_bmap,
   4105                                       bcm_field_qset_t *qset)
   4106 {
   4107     int idx, max_chunks = 0;
   4108 
   4109     max_chunks = BCMI_XGS4_UDF_CTRL_MAX_UDF_CHUNKS(unit);
   4110 
   4111 
   4112     for (idx = 0; idx < max_chunks; idx++) {
   4113         if (udf_chunks_bmap & (1 << idx)) {
   4114             BCM_FIELD_QSET_ADD_INTERNAL(*qset, _bcm_th3_udf_chunk_to_qual_mapping[idx]);
   4115         }
   4116     }
   4117     return BCM_E_NONE;
   4118 }
   4119 
   4120 /*
   4121  * Function:
   4122  *      _bcm_field_th3_qualify_udf
   4123  * Purpose:
   4124  *      Add UDF data that the packet must match to trigger qualifier.
   4125  * Parameters:
   4126  *      unit            - (IN)  Unit number.
   4127  *      eid             - (IN)  Field Entry.
   4128  *      udf_id          - (IN)  UDF ID.
   4129  *      length          - (IN)  Number of bytes to match in field entry.
   4130  *      data            - (IN)  Input data to qualify the entry.
   4131  *      mask            - (IN)  Input mask to qualify the entry.
   4132  * Returns:
   4133  *      BCM_E_xxx
   4134  * Notes:
   4135  */
   4136 int
   4137 _bcm_field_th3_qualify_udf(
   4138     int unit,
   4139     bcm_field_entry_t eid,
   4140     bcm_udf_id_t udf_id,
   4141     int length,
   4142     uint8 *data,
   4143     uint8 *mask)
   4144 {
   4145     int rv;
   4146     int gran;
   4147     int chunk;
   4148     int bytes;
   4149     int len = 0;
   4150     int bits = 8;
   4151     uint32 q_data, q_mask;
   4152     uint32 chunk_bmap = 0;
   4153     _bcm_field_internal_qualify_t qual;
   4154     bcmi_xgs4_udf_offset_info_t *offset_info = NULL;
   4155     int byte_offset;        /* Byte offset in the word.   */
   4156 
   4157     /* Get UDF info. */
   4158     rv = bcmi_xgs4_udf_offset_node_get(unit, udf_id, &offset_info);
   4159     if (BCM_FAILURE(rv)) {
   4160         return rv;
   4161     }
   4162     /* If provided entry data length is greater than UDF width */
   4163     if ((length > offset_info->width) || (length <= 0)) {
   4164         return (BCM_E_PARAM);
   4165     }
   4166 
   4167     /* Chunk Granularity */
   4168     gran = BCMI_XGS4_UDF_CTRL_OFFSET_GRAN(unit);
   4169 
   4170     chunk_bmap = offset_info->hw_bmap;
   4171     byte_offset = offset_info->byte_offset;
   4172 
   4173     /* Update udf_chuks bmap with qset */
   4174     for (chunk = 0; chunk < BCMI_XGS4_UDF_CTRL_MAX_UDF_CHUNKS(unit); chunk++) {
   4175         if(chunk_bmap & (1 << chunk)) {
   4176             qual = _bcm_th3_udf_chunk_to_qual_mapping[chunk];
   4177             q_data = q_mask = 0;
   4178             for (bytes = byte_offset; bytes < gran; bytes++) {
   4179                 if (len >= length) {
   4180                    break;
   4181                 }
   4182                 q_data |= data[len] << ((gran - 1 - bytes) * bits);
   4183                 q_mask |= mask[len] << ((gran - 1 - bytes) * bits);
   4184                 len++;
   4185             }
   4186             byte_offset = 0;
   4187             rv = _field_qualify32(unit, eid, qual, q_data, q_mask);
   4188             BCM_IF_ERROR_RETURN(rv);
   4189         }
   4190     }
   4191     return BCM_E_NONE;
   4192 }
   4193 
   4194 int
   4195 _bcm_field_th3_qualify_udf_get(
   4196     int unit,
   4197     bcm_field_entry_t eid,
   4198     bcm_udf_id_t udf_id,
   4199     int max_length,
   4200     uint8 *data,
   4201     uint8 *mask,
   4202     int *actual_length)
   4203 {
   4204     int rv;
   4205     int gran;
   4206     int chunk;
   4207     int bytes;
   4208     int len = 0;
   4209     int bits = 8;
   4210     uint32 q_data, q_mask;
   4211     uint32 chunk_bmap = 0;
   4212     _bcm_field_internal_qualify_t qual;
   4213     bcmi_xgs4_udf_offset_info_t *offset_info = NULL;
   4214     int byte_offset;        /* Byte offset in the word.   */
   4215 
   4216     /* Input parameters check. */
   4217     if ((NULL == data) || (NULL == mask) ||
   4218         (NULL == actual_length) || (max_length == 0)) {
   4219         return (BCM_E_PARAM);
   4220     }
   4221 
   4222     /* Get UDF info. */
   4223     rv = bcmi_xgs4_udf_offset_node_get(unit, udf_id, &offset_info);
   4224     if (BCM_FAILURE(rv)) {
   4225         return rv;
   4226     }
   4227 
   4228     /*
   4229      * If provided entry data length is less than data length used
   4230      * to create qualifier then return error
   4231      */
   4232     if (max_length < offset_info->width) {
   4233         return (BCM_E_PARAM);
   4234     }
   4235 
   4236 
   4237     /* Chunk Granularity */
   4238     gran = BCMI_XGS4_UDF_CTRL_OFFSET_GRAN(unit);
   4239 
   4240     chunk_bmap = offset_info->hw_bmap;
   4241     byte_offset = offset_info->byte_offset;
   4242 
   4243     /* Update udf_chuks bmap with qset */
   4244     for (chunk = 0; chunk < BCMI_XGS4_UDF_CTRL_MAX_UDF_CHUNKS(unit); chunk++) {
   4245         if(chunk_bmap & (1 << chunk)) {
   4246             qual = _bcm_th3_udf_chunk_to_qual_mapping[chunk];
   4247             q_data = q_mask = 0;
   4248             rv = _bcm_field_entry_qualifier_uint32_get(unit, eid, qual,
   4249                                                        &q_data, &q_mask);
   4250             BCM_IF_ERROR_RETURN(rv);
   4251 
   4252             for (bytes = byte_offset; bytes < gran; bytes++) {
   4253                 if (len >= max_length) {
   4254                    break;
   4255                 }
   4256 
   4257                 data[len] = q_data >> ((gran - 1 - bytes) * bits);
   4258                 mask[len] = q_mask >> ((gran - 1 - bytes) * bits);
   4259                 len++;
   4260             }
   4261             byte_offset = 0;
   4262         }
   4263     }
   4264     *actual_length = len;
   4265     return BCM_E_NONE;
   4266 }
   4267 
   4268 /*
   4269  * Function: _bcm_field_th3_ForwardingType_set
   4270  *
   4271  * Purpose:
   4272  *     Add qualification data to an entry for IP Type.
   4273  *
   4274  * Parameters:
   4275  *     unit     - (IN) BCM unit number.
   4276  *     stage_id - (IN) Stage ID.
   4277  *     entry    - (IN) Entry ID.
   4278  *     type     - (IN) Forwarding type.
   4279  *     data     - (OUT) Data.
   4280  *     mask     - (OUT) Mask.
   4281  *
   4282  * Returns:
   4283  *     BCM_E_XXX
   4284  */
   4285 int
   4286 _bcm_field_th3_forwardingType_set(int unit, _field_stage_id_t stage_id,
   4287                                  bcm_field_entry_t entry,
   4288                                  bcm_field_ForwardingType_t type,
   4289                                  uint32 *data, uint32 *mask)
   4290 {
   4291 
   4292     if (NULL == data || NULL == mask) {
   4293        return BCM_E_PARAM;
   4294     }
   4295 
   4296     switch (stage_id) {
   4297        case _BCM_FIELD_STAGE_INGRESS:
   4298        case _BCM_FIELD_STAGE_EXACTMATCH:
   4299            switch (type) {
   4300             case bcmFieldForwardingTypeAny:
   4301                 *data = 0;
   4302                 *mask = 0;
   4303                 break;
   4304             case bcmFieldForwardingTypeL2:
   4305                 *data = 0;
   4306                 *mask = 0xE;
   4307                 break;
   4308             case bcmFieldForwardingTypeL2Independent:
   4309                 *data = 0;
   4310                 *mask = 0xF;
   4311                 break;
   4312             case bcmFieldForwardingTypeL2Shared:
   4313                 *data = 1;
   4314                 *mask = 0xF;
   4315                 break;
   4316             case bcmFieldForwardingTypeL3Direct:
   4317                 *data = 4;
   4318                 *mask = 0xF;
   4319                 break;
   4320             case bcmFieldForwardingTypeL3:
   4321                 *data = 5;
   4322                 *mask = 0xF;
   4323                 break;
   4324             case bcmFieldForwardingTypeMpls:
   4325                 *data = 7;
   4326                 *mask = 0xF;
   4327                 break;
   4328             default:
   4329                return (BCM_E_PARAM);
   4330           }
   4331           break;
   4332       default:
   4333           return BCM_E_INTERNAL;
   4334     }
   4335 
   4336     return BCM_E_NONE;
   4337 }
   4338 
   4339 /*
   4340  * Function:
   4341  *      _bcm_field_th3_forwardingType_get
   4342  * Purpose:
   4343  *      Get match criteria for bcmFieildQualifyForwardingType
   4344  *                     qualifier from the field entry.
   4345  * Parameters:
   4346  *      unit     - (IN) Unit number.
   4347  *      stage_id - (IN) Stage ID.
   4348  *      entry    - (IN) BCM field entry id.
   4349  *      type     - (OUT) Qualifier match forwarding type.
   4350  * Returns:
   4351  *      BCM_E_XXX
   4352  * Notes:
   4353  */
   4354 int
   4355 _bcm_field_th3_forwardingType_get(int unit, _field_stage_id_t stage_id,
   4356                                  bcm_field_entry_t entry,
   4357                                  uint32 data,  uint32 mask,
   4358                                  bcm_field_ForwardingType_t *type)
   4359 {
   4360     if (NULL == type) {
   4361        return BCM_E_PARAM;
   4362     }
   4363 
   4364     switch (stage_id) {
   4365        case _BCM_FIELD_STAGE_INGRESS:
   4366        case _BCM_FIELD_STAGE_EXACTMATCH:
   4367           if ((0 == data) && (mask == 0)) {
   4368               *type = bcmFieldForwardingTypeAny;
   4369           } else if ((0 == data) && (mask == 0xE)) {
   4370               *type = bcmFieldForwardingTypeL2;
   4371           } else if ((0 == data) && (mask == 0xF)) {
   4372               *type = bcmFieldForwardingTypeL2Independent;
   4373           } else if ((1 == data) && (mask == 0xF)) {
   4374               *type = bcmFieldForwardingTypeL2Shared;
   4375           } else if ((4 == data) && (mask == 0xF)) {
   4376               *type = bcmFieldForwardingTypeL3Direct;
   4377           } else if ((5 == data) && (mask == 0xF)) {
   4378               *type = bcmFieldForwardingTypeL3;
   4379           } else if ((7 == data) && (mask == 0xF)) {
   4380               *type = bcmFieldForwardingTypeMpls;
   4381           } else {
   4382               return (BCM_E_INTERNAL);
   4383           }
   4384            break;
   4385        default:
   4386            return BCM_E_INTERNAL;
   4387     }
   4388 
   4389     return BCM_E_NONE;
   4390 }
   4391 
   4392 
   4393 /*
   4394  * Function:
   4395  *     _bcm_field_th3_qualify_ip_type
   4396  * Purpose:
   4397  *     Install ip type qualifier into TCAM
   4398  * Parameters:
   4399  *     unit  - (IN) BCM device number
   4400  *     entry - (IN) Field entry index
   4401  *     type  - (IN) Ip Type.
   4402  *     qual  - (IN) Qualifier(IpType/InnerIpType)
   4403  * Returns:
   4404  *     BCM_E_XXX
   4405  * Notes:
   4406  */
   4407 
   4408 
   4409 int
   4410 _bcm_field_th3_qualify_ip_type(int unit, bcm_field_entry_t entry,
   4411                                bcm_field_IpType_t type,
   4412                                bcm_field_qualify_t qual)
   4413 {
   4414 
   4415     uint32              data = 0,
   4416                         mask = 0;
   4417 
   4418     switch (type) {
   4419       case bcmFieldIpTypeAny:
   4420           data = 0x0;
   4421           mask = 0x0;
   4422           break;
   4423       case bcmFieldIpTypeNonIp:
   4424           data = 0xf;
   4425           mask = 0xf;
   4426           break;
   4427       case bcmFieldIpTypeIp:
   4428           data = 0x0;
   4429           mask = 0x8;
   4430           break;
   4431           break;
   4432       case bcmFieldIpTypeIpv4NoOpts:
   4433           data = 0x0;
   4434           mask = 0xf;
   4435           break;
   4436       case bcmFieldIpTypeIpv4WithOpts:
   4437           data = 0x1;
   4438           mask = 0xf;
   4439           break;
   4440       case bcmFieldIpTypeIpv4Any:
   4441           data = 0x0;
   4442           mask = 0xe;
   4443           break;
   4444       case bcmFieldIpTypeIpv6NoExtHdr:
   4445           data = 0x4;
   4446           mask = 0xf;
   4447           break;
   4448       case bcmFieldIpTypeIpv6OneExtHdr:
   4449           data = 0x5;
   4450           mask = 0xf;
   4451           break;
   4452       case bcmFieldIpTypeIpv6TwoExtHdr:
   4453           data = 0x6;
   4454           mask = 0xf;
   4455           break;
   4456       case bcmFieldIpTypeIpv6:
   4457           data = 0x4;
   4458           mask = 0xc;
   4459           break;
   4460       case bcmFieldIpTypeArp:
   4461           data = 0x8;
   4462           mask = 0xe;
   4463           break;
   4464       case bcmFieldIpTypeArpRequest:
   4465           data = 0x8;
   4466           mask = 0xf;
   4467           break;
   4468       case bcmFieldIpTypeArpReply:
   4469           data = 0x9;
   4470           mask = 0xf;
   4471           break;
   4472       case bcmFieldIpTypeTrill:
   4473           data = 0xa;
   4474           mask = 0xf;
   4475           break;
   4476       case bcmFieldIpTypeMplsUnicast:
   4477           data = 0xc;
   4478           mask = 0xf;
   4479           break;
   4480       case bcmFieldIpTypeMplsMulticast:
   4481           data = 0xd;
   4482           mask = 0xf;
   4483           break;
   4484       case bcmFieldIpTypeMim:
   4485           data = 0xe;
   4486           mask = 0xf;
   4487           break;
   4488       default:
   4489           LOG_DEBUG(BSL_LS_BCM_FP,
   4490                     (BSL_META_U(unit,
   4491                      "FP(unit %d) vverb: entry=%d qualifying"
   4492                      " on Invalid Iptype=%#x\n))"),
   4493                      unit, entry, type));
   4494           return (BCM_E_UNAVAIL);
   4495     }
   4496     LOG_DEBUG(BSL_LS_BCM_FP,
   4497               (BSL_META_U(unit,
   4498                           "FP(unit %d) vverb: entry=%d qualifying on Iptype, "
   4499                           "data=%#x, mask=%#x\n))"),
   4500                unit, entry, data, mask));
   4501 
   4502     return _field_qualify32(unit, entry, qual,
   4503                             data, mask);
   4504 }
   4505 
   4506 
   4507 /*
   4508  * Function:
   4509  *     _bcm_field_th3_qualify_ip_type_encode_get
   4510  * Purpose:
   4511  *     Get ip type qualifier encode value for given data and mask.
   4512  * Parameters:
   4513  *     unit     - (IN) BCM device number
   4514  *     data     - (IN) qualifier data.
   4515  *     mask     - (IN) qualifier mask.
   4516  *     type     - (OUT) Ip Type.
   4517  * Returns:
   4518  *     BCM_E_XXX
   4519  * Notes:
   4520  */
   4521 int
   4522 _bcm_field_th3_qualify_ip_type_encode_get(int unit,
   4523                                           uint32 hw_data,
   4524                                           uint32 hw_mask,
   4525                                           bcm_field_IpType_t *type)
   4526 {
   4527 
   4528     if ((0 == hw_data) && (0 == hw_mask)) {
   4529         *type = bcmFieldIpTypeAny;
   4530     } else if ((0x0 == hw_data) && (0x8 == hw_mask)) {
   4531         *type = bcmFieldIpTypeIp;
   4532     } else if ((0xf == hw_data) && (0xf == hw_mask)) {
   4533         *type = bcmFieldIpTypeNonIp;
   4534     } else if ((0x0 == hw_data) && (0xf == hw_mask)) {
   4535         *type = bcmFieldIpTypeIpv4NoOpts;
   4536     } else if ((0x1 == hw_data) && (0xf == hw_mask)) {
   4537         *type = bcmFieldIpTypeIpv4WithOpts;
   4538     } else if ((0x0 == hw_data) && (0xe == hw_mask)) {
   4539         *type = bcmFieldIpTypeIpv4Any;
   4540     } else if ((0x4 == hw_data) && (0xf == hw_mask)) {
   4541         *type = bcmFieldIpTypeIpv6NoExtHdr;
   4542     } else if ((0x5 == hw_data) && (0xf == hw_mask)) {
   4543         *type = bcmFieldIpTypeIpv6OneExtHdr;
   4544     } else if ((0x6 == hw_data) && (0xf == hw_mask)) {
   4545         *type = bcmFieldIpTypeIpv6TwoExtHdr;
   4546     } else if ((0x4 == hw_data) && (0xc == hw_mask)) {
   4547         *type = bcmFieldIpTypeIpv6;
   4548     } else if ((0x8 == hw_data) && (0xe == hw_mask)) {
   4549         *type = bcmFieldIpTypeArp;
   4550     } else if ((0x8 == hw_data) && (0xf == hw_mask)) {
   4551         *type = bcmFieldIpTypeArpRequest;
   4552     } else if ((0x9 == hw_data) && (0xf == hw_mask)) {
   4553         *type = bcmFieldIpTypeArpReply;
   4554     } else if ((0xa == hw_data) && (0xf == hw_mask)) {
   4555         *type = bcmFieldIpTypeTrill;
   4556     } else if ((0xc == hw_data) && (0xf == hw_mask)) {
   4557         *type = bcmFieldIpTypeMplsUnicast;
   4558     } else if ((0xd == hw_data) && (0xf == hw_mask)) {
   4559         *type = bcmFieldIpTypeMplsMulticast;
   4560     } else if ((0xe == hw_data) && (0xf == hw_mask)) {
   4561         *type = bcmFieldIpTypeMim;
   4562     } else
   4563     {
   4564         return (BCM_E_INTERNAL);
   4565     }
   4566     return (BCM_E_NONE);
   4567 }
   4568 
   4569 /*
   4570  * Function:
   4571  *     _field_th3_stage_action_support_check
   4572  * Purpose:
   4573  *     Check if action is supported by tomahawk for the given stage.
   4574  * Parameters:
   4575  *     unit     - (IN) BCM device number.
   4576  *     stage    - (IN) Field processor stage.
   4577  *     action   - (IN) Action to check(bcmFieldActionXXX)
   4578  *     result   - (OUT)
   4579  *               TRUE   - action is supported by device
   4580  *               FALSE  - action is NOT supported by device
   4581  * Returns:
   4582  *     BCM_E_XXX
   4583  */
   4584 
   4585 int
   4586 _field_th3_stage_action_support_check(int unit,
   4587                                      unsigned stage,
   4588                                      bcm_field_action_t action,
   4589                                      int *result)
   4590 {
   4591     if (NULL == result) {
   4592         return BCM_E_PARAM;
   4593     }
   4594 
   4595     switch (stage) {
   4596         case _BCM_FIELD_STAGE_INGRESS:
   4597              switch (action) {
   4598                   case bcmFieldActionIntEncapEnable:
   4599                   case bcmFieldActionIntEncapDisable:
   4600                   case bcmFieldActionElephantColorEnable:
   4601                   case bcmFieldActionElephantColorDisable:
   4602                   case bcmFieldActionElephantQueueEnable:
   4603                   case bcmFieldActionElephantQueueDisable:
   4604                   case bcmFieldActionElephantLookupEnable:
   4605                   case bcmFieldActionElephantLookupDisable:
   4606                   case bcmFieldActionMatchPbmpDrop:
   4607                   case bcmFieldActionMatchPbmpRedirect:
   4608                   case bcmFieldActionDlbEcmpMonitorEnable:
   4609                   case bcmFieldActionMirrorZeroingEnable:
   4610                        *result = TRUE;
   4611                        return BCM_E_NONE;
   4612                   default:
   4613                        break;
   4614              }
   4615              break;
   4616         case _BCM_FIELD_STAGE_LOOKUP:
   4617              switch (action) {
   4618                   case bcmFieldActionOuterVlanCfiCopyInner:
   4619                   case bcmFieldActionOuterVlanPrioCopyInner:
   4620                   case bcmFieldActionOuterVlanCopyInner:
   4621                   case bcmFieldActionInnerVlanAdd:
   4622                   case bcmFieldActionInnerVlanNew:
   4623                   case bcmFieldActionInnerVlanDelete:
   4624                   case bcmFieldActionInnerVlanCopyOuter:
   4625                   case bcmFieldActionInnerVlanPrioNew:
   4626                   case bcmFieldActionInnerVlanPrioCopyOuter:
   4627                   case bcmFieldActionInnerVlanCfiNew:
   4628                   case bcmFieldActionInnerVlanCfiCopyOuter:
   4629                   case bcmFieldActionIngressGportSet:
   4630                   case bcmFieldActionIncomingMplsPortSet:
   4631                        *result = FALSE;
   4632                        return BCM_E_NONE;
   4633                   case bcmFieldActionMplsLookupEnable:
   4634                   case bcmFieldActionTerminationAllowed:
   4635                   case bcmFieldActionVisibilityEnable:
   4636                   case bcmFieldActionL3IngressStrengthSet:
   4637                        *result = TRUE;
   4638                        return BCM_E_NONE;
   4639                   default:
   4640                        break;
   4641              }
   4642              break;
   4643        case _BCM_FIELD_STAGE_EGRESS:
   4644              switch (action) {
   4645                   case bcmFieldActionLoopbackSrcModuleGportNew:
   4646                   case bcmFieldActionLoopbackSrcGportNew:
   4647                   case bcmFieldActionHiGigDstModuleGportNew:
   4648                   case bcmFieldActionHiGigDstPortGportNew:
   4649                   case bcmFieldActionHiGigDstGportNew:
   4650                   case bcmFieldActionGpHiGigDropPrecedenceNew:
   4651                   case bcmFieldActionYpHiGigDropPrecedenceNew:
   4652                   case bcmFieldActionRpHiGigDropPrecedenceNew:
   4653                   case bcmFieldActionHiGigDropPrecedenceNew:
   4654                   case bcmFieldActionGpHiGigIntPriNew:
   4655                   case bcmFieldActionYpHiGigIntPriNew:
   4656                   case bcmFieldActionRpHiGigIntPriNew:
   4657                   case bcmFieldActionHiGigIntPriNew:
   4658                   case bcmFieldActionGpHGCongestionClassNew:
   4659                   case bcmFieldActionYpHGCongestionClassNew:
   4660                   case bcmFieldActionRpHGCongestionClassNew:
   4661                   case bcmFieldActionVxlanHeaderFlags:
   4662                   case bcmFieldActionVxlanHeaderBits8_31_Set:
   4663                   case bcmFieldActionVxlanHeaderBits56_63_Set:
   4664                   case bcmFieldActionIpFix:
   4665                   case bcmFieldActionIpFixCancel:
   4666                   case bcmFieldActionInnerVlanNew:
   4667                   case bcmFieldActionYpEcnNew:
   4668                   case bcmFieldActionGpEcnNew:
   4669                   case bcmFieldActionRpEcnNew:
   4670                   case bcmFieldActionRpDscpNew:
   4671                   case bcmFieldActionYpDscpNew:
   4672                   case bcmFieldActionGpDscpNew:
   4673                   case bcmFieldActionInnerVlanPrioNew:
   4674                   case bcmFieldActionRpInnerVlanPrioNew:
   4675                   case bcmFieldActionGpInnerVlanPrioNew:
   4676                   case bcmFieldActionYpInnerVlanPrioNew:
   4677                   case bcmFieldActionYpDrop:
   4678                   case bcmFieldActionRpDrop:
   4679                   case bcmFieldActionGpDrop:
   4680                   case bcmFieldActionYpOuterVlanPrioNew:
   4681                   case bcmFieldActionRpOuterVlanPrioNew:
   4682                   case bcmFieldActionGpOuterVlanPrioNew:
   4683                   case bcmFieldActionInnerVlanCfiNew:
   4684                   case bcmFieldActionGpInnerVlanCfiNew:
   4685                   case bcmFieldActionRpInnerVlanCfiNew:
   4686                   case bcmFieldActionYpInnerVlanCfiNew:
   4687                   case bcmFieldActionYpOuterVlanCfiNew:
   4688                   case bcmFieldActionRpOuterVlanCfiNew:
   4689                   case bcmFieldActionGpOuterVlanCfiNew:
   4690                        *result = FALSE;
   4691                        return BCM_E_NONE;
   4692                   case bcmFieldActionLatencyMonitorEnable:
   4693                   case bcmFieldActionLatencyMonitorDisable:
   4694                        *result = TRUE;
   4695                        return BCM_E_NONE;
   4696                   default:
   4697                        break;
   4698              }
   4699         default:
   4700              break;
   4701     }
   4702 
   4703     return (_field_th_stage_action_support_check(unit, stage,
   4704                                                       action, result));
   4705 }
   4706 
   4707 
   4708 /*
   4709  * Function:
   4710  *      _bcm_field_th3_qualify_LoopbackType
   4711  * Purpose:
   4712  *      Encode the loopback type qualifier
   4713  * Parameters:
   4714  *      loopback_type - (IN) Loopback Type
   4715  *      tcam_data     - (OUT) Qualifier data
   4716  *      tcam_mask     - (OUT) Qualifier mask
   4717  * Returns:
   4718  *      BCM_E_XXX
   4719  */
   4720 int _bcm_field_th3_qualify_LoopbackType(
   4721         bcm_field_LoopbackType_t loopback_type,
   4722         uint32                   *tcam_data,
   4723         uint32                   *tcam_mask)
   4724 {
   4725     switch (loopback_type) {
   4726         case bcmFieldLoopbackTypeAny:
   4727             *tcam_data = 0xf;
   4728             *tcam_mask = 0xf;
   4729             break;
   4730         default:
   4731             return (BCM_E_UNAVAIL);
   4732     }
   4733 
   4734     return (BCM_E_NONE);
   4735 
   4736 }
   4737 
   4738 /*
   4739  * Function:
   4740  *      _bcm_field_th3_qualify_LoopbackType_get
   4741  * Purpose:
   4742  *      Decode the loopback type qualifier
   4743  * Parameters:
   4744  *      unit  - (IN) BCM device number
   4745  *      tcam_data     - (IN) Qualifier data
   4746  *      tcam_mask     - (IN) Qualifier mask
   4747  *      loopback_type - (OUT) Loopback Type
   4748  * Returns:
   4749  *      BCM_E_XXX
   4750  */
   4751 int
   4752 _bcm_field_th3_qualify_LoopbackType_get(
   4753             uint8                    tcam_data,
   4754             uint8                    tcam_mask,
   4755             bcm_field_LoopbackType_t *loopback_type)
   4756 {
   4757     switch (tcam_data & tcam_mask) {
   4758         case 0xf:
   4759             *loopback_type = bcmFieldLoopbackTypeAny;
   4760             break;
   4761         default:
   4762             return (BCM_E_INTERNAL);
   4763     }
   4764 
   4765     return (BCM_E_NONE);
   4766 }
   4767 
   4768 
   4769 int
   4770 _bcm_field_th3_qualify_TunnelType(bcm_field_TunnelType_t tunnel_type,
   4771                                   uint32                 *tcam_data,
   4772                                   uint32                 *tcam_mask
   4773                                   )
   4774 {
   4775     switch (tunnel_type) {
   4776         case bcmFieldTunnelTypeAny:
   4777             *tcam_data = 0x0;
   4778             *tcam_mask = 0x0;
   4779             break;
   4780         case bcmFieldTunnelTypeNone:
   4781             *tcam_data = 0x0;
   4782             *tcam_mask = 0xf;
   4783             break;
   4784         case bcmFieldTunnelTypeIp:
   4785             *tcam_data = 0x1;
   4786             *tcam_mask = 0xf;
   4787             break;
   4788         case bcmFieldTunnelTypeMpls:
   4789             *tcam_data = 0x2;
   4790             *tcam_mask = 0xf;
   4791             break;
   4792          default:
   4793             return (BCM_E_UNAVAIL);
   4794     }
   4795     return (BCM_E_NONE);
   4796 }
   4797 
   4798 int
   4799 _bcm_field_th3_qualify_TunnelType_get(uint8                  tcam_data,
   4800                                       uint8                  tcam_mask,
   4801                                       bcm_field_TunnelType_t *tunnel_type
   4802                                       )
   4803 {
   4804     switch (tcam_data & tcam_mask) {
   4805         case 0x1:
   4806             *tunnel_type = bcmFieldTunnelTypeIp;
   4807             break;
   4808         case 0x2:
   4809             *tunnel_type = bcmFieldTunnelTypeMpls;
   4810             break;
   4811         case 0x0:
   4812             if(tcam_mask) {
   4813                 *tunnel_type = bcmFieldTunnelTypeNone;
   4814                 break;
   4815             }
   4816         default:
   4817             return (BCM_E_INTERNAL);
   4818     }
   4819 
   4820     return (BCM_E_NONE);
   4821 }
   4822 
   4823 
   4824 /*
   4825  * Function:
   4826  *     _bcm_field_th3_tcam_idx_to_slice_offset
   4827  *
   4828  * Purpose:
   4829  *     Given stage and tcam_index,
   4830  *     calculate slice and entry offset in the
   4831  *
   4832  * Parameters:
   4833  *     unit     - (IN) BCM device number.
   4834  *     stage_fc - (IN) Pointer to field stage structure.
   4835  *     f_ent    - (IN) Reference to field entry structure.
   4836  *     tcam_idx - (IN) Entry tcam index.
   4837  *     slice    - (OUT) Entry slice number.
   4838  *     slice_idx -(OUT) Entry offset in the slice.
   4839  * Returns:
   4840  *     BCM_E_XXX
   4841  */
   4842 int
   4843 _bcm_field_th3_tcam_idx_to_slice_offset(int unit, _field_stage_t *stage_fc,
   4844                                        _field_entry_t *f_ent, int tcam_idx,
   4845                                        int *slice, int *slice_idx)
   4846 {
   4847     _field_slice_t  *fs;                  /* Field Slice number.  */
   4848     int             idx;                  /* Slice iterator.      */
   4849 
   4850    /* Input parameters check. */
   4851     if ((NULL == stage_fc) || (NULL == slice_idx) || (NULL == slice)
   4852         || (NULL == f_ent)) {
   4853         return (BCM_E_PARAM);
   4854     }
   4855 
   4856     for (idx = 0; idx < stage_fc->tcam_slices; idx++) {
   4857         fs = stage_fc->slices[f_ent->group->instance] + idx;
   4858 
   4859         if (tcam_idx <(fs->start_tcam_idx + fs->entry_count)) {
   4860             *slice = idx;
   4861             *slice_idx = tcam_idx - fs->start_tcam_idx;
   4862             break;
   4863         }
   4864     }
   4865 
   4866     /* TCAM index sanity check. */
   4867     if (idx == stage_fc->tcam_slices) {
   4868         return (BCM_E_PARAM);
   4869     }
   4870 
   4871     return (BCM_E_NONE);
   4872 }
   4873 
   4874 
   4875 /* Function    : _field_th3_qualify_IpFrag
   4876  * Description : qualify on Ip Frag Info.
   4877  * Parameters  : (IN) unit       BCM device number
   4878  *               (IN) entry      Field entry to qualify
   4879  *               (IN) qual_id    Field qualifier id.
   4880  *               (IN) frag_info  bcm_field_IpFrag_t to qualify
   4881  * Returns     : BCM_E_XXX
   4882  */
   4883 int
   4884 _field_th3_qualify_IpFrag(int unit, bcm_field_entry_t entry,
   4885                       bcm_field_qualify_t qual_id,
   4886                       bcm_field_IpFrag_t frag_info)
   4887 {
   4888     int             rv;
   4889     uint32          data;
   4890     uint32          mask;
   4891 
   4892      /*
   4893      * 01 : Whole packet
   4894      * 10 : First fragment
   4895      */
   4896     switch(frag_info) {
   4897       case bcmFieldIpFragNonOrFirst:
   4898           /* Non-fragmented packet */
   4899           data = 0x02;
   4900           mask = 0x02;
   4901           break;
   4902       case bcmFieldIpFragFirst:
   4903           /* First fragment of fragmented packet*/
   4904           data = 0x02;
   4905           mask = 0x03;
   4906           break;
   4907       case bcmFieldIpFragNon:
   4908           /* Non-fragmented packet */
   4909           data = 0x01;
   4910           mask = 0x01;
   4911           break;
   4912       case bcmFieldIpFragAny:
   4913           /* Any fragment of fragmented packet */
   4914           data = 0x00;
   4915           mask = 0x01;
   4916           break;
   4917       case bcmFieldIpFragNotFirst:
   4918           /* Not the first fragment */
   4919           data = 0x00;
   4920           mask = 0x03;
   4921           break;
   4922       default:
   4923           return (BCM_E_PARAM);
   4924     }
   4925 
   4926     rv = _field_qualify32(unit, entry, qual_id, data, mask);
   4927     return (rv);
   4928 }
   4929 
   4930 
   4931 /* Function    : _field_th3_qualify_IpFrag_get
   4932  * Description : qualify on Ip Frag Info.
   4933  * Parameters  : (IN) unit       BCM device number
   4934  *               (IN) entry      Field entry to qualify
   4935  *               (IN) qual_id    Field qualifier id.
   4936  *               (OUT) frag_info  bcm_field_IpFrag_t to qualify
   4937  * Returns     : BCM_E_XXX
   4938  */
   4939 int
   4940 _field_th3_qualify_IpFrag_get(int unit, bcm_field_entry_t entry,
   4941                           bcm_field_qualify_t qual_id,
   4942                           bcm_field_IpFrag_t *frag_info)
   4943 {
   4944     uint32    hw_data = 0;       /* HW buffer data.             */
   4945     uint32    hw_mask = 0;       /* HW buffer mask.             */
   4946     int       rv;                /* Operation return stauts.    */
   4947 
   4948     /* Input parameters check. */
   4949     if (NULL == frag_info) {
   4950         return (BCM_E_PARAM);
   4951     }
   4952 
   4953     /* Read qualifier match value and mask. */
   4954     rv = _bcm_field_entry_qualifier_uint32_get(unit, entry,
   4955                                                qual_id,
   4956                                                &hw_data, &hw_mask);
   4957     BCM_IF_ERROR_RETURN(rv);
   4958 
   4959     if ((hw_data == 0x2) && (hw_mask == 0x2)) {
   4960         *frag_info = bcmFieldIpFragNonOrFirst;
   4961     } else  if ((hw_data == 0x2) && (hw_mask == 0x3)) {
   4962         *frag_info = bcmFieldIpFragFirst;
   4963     } else  if ((hw_data == 0x1) && (hw_mask == 0x1)) {
   4964         *frag_info = bcmFieldIpFragNon;
   4965     } else  if ((hw_data == 0x0) && (hw_mask == 0x3)) {
   4966         *frag_info = bcmFieldIpFragNotFirst;
   4967     } else  if ((hw_data == 0x0) && (hw_mask == 0x1)) {
   4968         *frag_info = bcmFieldIpFragAny;
   4969     } else {
   4970         return (BCM_E_INTERNAL);
   4971     }
   4972 
   4973     return (BCM_E_NONE);
   4974 }
   4975 
   4976 /*
   4977  * Function:
   4978  *     _field_th3_redirect_profile_get
   4979  * Purpose:
   4980  *     Get the redirect profile for the unit
   4981  * Parameters:
   4982  *     unit             - BCM device number
   4983  *     redirect_profile - (OUT) redirect profile
   4984  * Returns:
   4985  *     BCM_E_XXX
   4986  * Notes:
   4987  *     For triumph, External TCAM and IFP refer to same IFP_REDIRECTION_PROFILEm
   4988  */
   4989 int
   4990 _bcm_field_th3_redirect_profile_get(int unit,
   4991                                 soc_profile_mem_t **redirect_profile)
   4992 {
   4993     _field_control_t *fc = NULL;
   4994  
   4995     /* Get field control structure. */
   4996     BCM_IF_ERROR_RETURN(_field_control_get(unit, &fc));
   4997  
   4998     *redirect_profile = &fc->redirect_profile1;
   4999 
   5000     return (BCM_E_NONE);
   5001 }
   5002 
   5003 /*
   5004  * Function:
   5005  *     _bcm_field_th3_redirect_profile_ref_count_get
   5006  * Purpose:
   5007  *     Get redirect profile entry use count.
   5008  * Parameters:
   5009  *     unit      - (IN) BCM device number.
   5010  *     index     - (IN) Profile entry index.
   5011  *     ref_count - (OUT) redirect profile use count.
   5012  * Returns:
   5013  *     BCM_E_XXX
   5014  */
   5015 int
   5016 _bcm_field_th3_redirect_profile_ref_count_get(int unit,
   5017                                               int index,
   5018                                               int *ref_count)
   5019 {
   5020     soc_profile_mem_t *redirect_profile;
   5021 
   5022     if (NULL == ref_count) {
   5023         return (BCM_E_PARAM);
   5024     }
   5025 
   5026     /* Get the redirect profile */
   5027     BCM_IF_ERROR_RETURN
   5028         (_bcm_field_th3_redirect_profile_get(unit, &redirect_profile));
   5029 
   5030     BCM_IF_ERROR_RETURN(soc_profile_mem_ref_count_get(unit, redirect_profile,
   5031                                                       index, ref_count));
   5032     return (BCM_E_NONE);
   5033 }
   5034 
   5035 /*
   5036  * Function:
   5037  *     _bcm_field_th3_redirect_profile_delete
   5038  * Purpose:
   5039  *     Delete redirect profile entry.
   5040  * Parameters:
   5041  *     unit      - (IN) BCM device number.
   5042  *     index     - (IN) Profile entry index.
   5043  * Returns:
   5044  *     BCM_E_XXX
   5045  */
   5046 int
   5047 _bcm_field_th3_redirect_profile_delete(int unit, int index)
   5048 {
   5049     soc_profile_mem_t *redirect_profile;
   5050 
   5051     /* Get the redirect profile */
   5052     BCM_IF_ERROR_RETURN
   5053         (_bcm_field_th3_redirect_profile_get(unit, &redirect_profile));
   5054 
   5055     BCM_IF_ERROR_RETURN(soc_profile_mem_delete(unit, redirect_profile, index));
   5056     return (BCM_E_NONE);
   5057 }
   5058 
   5059 /*
   5060  * Function:
   5061  *    _field_th3_class_ctype_supported
   5062  * Purpose:
   5063  *    Check if the class type is supported for the device.
   5064  * Parameters:
   5065  *     unit        - (IN) BCM Device number.
   5066  *     ctype       - (IN) Field Class Type.
   5067  * Returns:
   5068  *     BCM_E_XXX
   5069  */
   5070 int
   5071 _field_th3_class_ctype_supported(int unit,
   5072                                  _field_class_type_t ctype)
   5073 {
   5074     int rv = BCM_E_NONE;
   5075 
   5076     switch(ctype) {
   5077         case _FieldClassEtherType:
   5078         case _FieldClassTtl:
   5079         case _FieldClassToS:
   5080         case _FieldClassIpProto:
   5081         case _FieldClassTcp:
   5082         case _FieldClassIpTunnelTtl:
   5083               rv = BCM_E_NONE;
   5084               break;
   5085         default:
   5086               rv = BCM_E_UNAVAIL;
   5087               break;
   5088     }
   5089     return rv;
   5090 }
   5091 
   5092 /*
   5093  * Function:
   5094  *  _bcm_field_th3_qual_class_size_get
   5095  * Purpose:
   5096  *  Get Field Qualifier Class Size
   5097  * Parameters:
   5098  *  unit        - (IN) BCM device number.
   5099  *  qual        - (IN) Field Qualifier.
   5100  *  class_size  - (OUT) Field Qualifier Class Size.
   5101  * Returns:
   5102  *  BCM_E_XXX
   5103  * Notes:
   5104  *  This api returns class size for provided qualifier
   5105  *  Size provided is in bits.
   5106  */
   5107 int
   5108 _bcm_field_th3_qual_class_size_get(int unit, bcm_field_qualify_t qual,
   5109                                                    uint16 *class_size)
   5110 {
   5111     int rv = BCM_E_NONE;        /* Operation Return Status */
   5112 
   5113     switch (qual) {
   5114         case bcmFieldQualifyEtherType:
   5115             *class_size = _FP_QUAL_CLASS_SIZE_ETHERTYPE;
   5116             break;
   5117         case bcmFieldQualifyTtl:
   5118             *class_size = _FP_QUAL_CLASS_SIZE_TTL;
   5119             break;
   5120         case bcmFieldQualifyTos:
   5121             *class_size = _FP_QUAL_CLASS_SIZE_TOS;
   5122             break;
   5123         case bcmFieldQualifyIpProtocol:
   5124             *class_size = _FP_QUAL_CLASS_SIZE_IP_PROTO;
   5125             break;
   5126         case bcmFieldQualifyTcpControl:
   5127             *class_size = _FP_QUAL_CLASS_SIZE_TCP;
   5128             break;
   5129         case bcmFieldQualifyVrf:
   5130             *class_size = _FP_QUAL_CLASS_SIZE_SRC_COMPRESSION;
   5131             break;
   5132         case bcmFieldQualifyIpTunnelTtl:
   5133             *class_size = _FP_QUAL_CLASS_SIZE_IPTUNNELTTL;
   5134             break;
   5135         default:
   5136             rv = BCM_E_PARAM;
   5137     }
   5138 
   5139     return (rv);
   5140 }
   5141 
   5142 /*
   5143  * Function:
   5144  *     _bcm_th3_field_ddrop_profile_alloc
   5145  * Purpose:
   5146  *     Allocate redirect profile index
   5147  * Parameters:
   5148  *     unit     - (IN) BCM device number.
   5149  *     f_ent    - (IN) Field entry structure to get policy info from.
   5150  *     fa       - (IN) Field action.
   5151  * Returns:
   5152  *     BCM_E_XXX
   5153  */
   5154 int
   5155 _bcm_field_th3_ddrop_profile_alloc(int unit, _field_entry_t *f_ent,
   5156                                    _field_action_t *fa)
   5157 {
   5158     ifp_egress_port_check_for_drop_entry_t entry_arr[1];
   5159     uint32            *entry_ptr[1];
   5160     soc_profile_mem_t *ddrop_profile;
   5161     int               rv;
   5162     void              *entries[1];
   5163     soc_mem_t         profile_mem = IFP_EGRESS_PORT_CHECK_FOR_DROPm;
   5164 
   5165     entry_ptr[0] = (uint32 *)(&entry_arr[0]);
   5166     entries[0] = (void *)&entry_arr[0];
   5167 
   5168     if ((NULL == f_ent) || (NULL == fa)) {
   5169         return (BCM_E_PARAM);
   5170     }
   5171 
   5172     /* Reset redirection profile entry. */
   5173     sal_memset(entry_arr, 0, sizeof(ifp_egress_port_check_for_drop_entry_t));
   5174 
   5175     /* Get the redirect profile */
   5176     rv = _bcm_field_ddrop_profile_get(unit, &ddrop_profile);
   5177     BCM_IF_ERROR_RETURN(rv);
   5178 
   5179     soc_mem_pbmp_field_set(unit, profile_mem, entry_ptr[0],
   5180                            PORT_BITMAPf, (fa->egress_pbmp));
   5181 
   5182     soc_mem_field32_set(unit, profile_mem, entry_ptr[0],
   5183                         ELEPHANT_PKT_ONLYf, (fa->elephant_pkts_only));
   5184 
   5185     rv = soc_profile_mem_add(unit, ddrop_profile, entries,
   5186                              1, (uint32*)&fa->hw_index);
   5187     return (rv);
   5188 }
   5189 
   5190 /*
   5191  * Function:
   5192  *     _bcm_th3_field_dredirect_profile_alloc
   5193  * Purpose:
   5194  *     Allocate redirect profile index
   5195  * Parameters:
   5196  *     unit     - (IN) BCM device number.
   5197  *     f_ent    - (IN) Field entry structure to get policy info from.
   5198  *     fa       - (IN) Field action.
   5199  * Returns:
   5200  *     BCM_E_XXX
   5201  */
   5202 int
   5203 _bcm_field_th3_dredirect_profile_alloc(int unit, _field_entry_t *f_ent,
   5204                                    _field_action_t *fa)
   5205 {
   5206     ifp_egress_port_check_for_redirect_entry_t entry_arr[1];
   5207     uint32            *entry_ptr[1];
   5208     soc_profile_mem_t *dredirect_profile;
   5209     int               rv;
   5210     void              *entries[1];
   5211     soc_mem_t         profile_mem = IFP_EGRESS_PORT_CHECK_FOR_REDIRECTm;
   5212 
   5213     entry_ptr[0] = (uint32 *)(&entry_arr[0]);
   5214     entries[0] = (void *)&entry_arr[0];
   5215 
   5216     if ((NULL == f_ent) || (NULL == fa)) {
   5217         return (BCM_E_PARAM);
   5218     }
   5219 
   5220     /* Reset redirection profile entry. */
   5221     sal_memset(entry_arr, 0, sizeof(ifp_egress_port_check_for_redirect_entry_t));
   5222 
   5223     /* Get the redirect profile */
   5224     rv = _bcm_field_dredirect_profile_get(unit, &dredirect_profile);
   5225     BCM_IF_ERROR_RETURN(rv);
   5226 
   5227     soc_mem_pbmp_field_set(unit, profile_mem, entry_ptr[0],
   5228                            PORT_BITMAPf, (fa->egress_pbmp));
   5229 
   5230     soc_mem_field32_set(unit, profile_mem, entry_ptr[0],
   5231                         ELEPHANT_PKT_ONLYf, (fa->elephant_pkts_only));
   5232     rv = soc_profile_mem_add(unit, dredirect_profile, entries,
   5233                              1, (uint32*)&fa->hw_index);
   5234     return (rv);
   5235 }
   5236 
   5237 int
   5238 _bcm_field_th3_internal_em_group_create(int unit,
   5239                                     _field_control_t *fc) {
   5240 
   5241     int id = _FP_PRESEL_INTERNAL_RESERVED_ID;
   5242     uint32 data32, mask32;
   5243     _field_presel_entry_t     *f_presel = NULL; /* Internal Presel descriptor */
   5244     _field_presel_info_t      *presel_info;     /* Presel information structure */
   5245     _bcm_field_presel_flags_t flags = _bcmFieldPreselCreateWithId;
   5246     int rv = 0;
   5247     int classifier_id = 0;
   5248     bcm_field_group_config_t group_config;
   5249     bcm_port_t        port;
   5250     bcm_pbmp_t        redirect_pbm;
   5251     uint32  param[_FP_ACTION_PARAM_SZ];
   5252     int i;
   5253 
   5254     /* Create Presel ID */
   5255 
   5256     /* Get the preselector information */
   5257     presel_info = fc->presel_info;
   5258     if (presel_info == NULL) {
   5259        LOG_ERROR(BSL_LS_BCM_FP, (BSL_META_U(unit,
   5260              "ERROR: Field control for Presel Information returns NULL.\n\r")));
   5261        return BCM_E_INTERNAL;
   5262     }
   5263     /* Check if presel ID is already created */
   5264     if (BCM_FIELD_PRESEL_TEST(presel_info->presel_set, id)) {
   5265        LOG_ERROR(BSL_LS_BCM_FP, (BSL_META_U(unit,
   5266               "ERROR: Preselector ID[%d] is already created.\n\r"), id));
   5267        return BCM_E_EXISTS;
   5268     }
   5269     /* Allocate presel descriptor. */
   5270     _FP_XGS3_ALLOC(f_presel, sizeof (_field_presel_entry_t), "Field Presel entity");
   5271     if (NULL == f_presel) {
   5272        return BCM_E_MEMORY;
   5273     }
   5274     /* Initialize the newly created presel id */
   5275     f_presel->presel_id   = id;
   5276     /* Initialize the hw index to No HW resources allocated */
   5277     f_presel->hw_index    = _FP_INVALID_INDEX;
   5278     /* Initialize internal flags and stage information */
   5279     f_presel->flags       = flags;
   5280     /* Insert Presel into Preselector database */
   5281     if (fc->presel_db == NULL) {
   5282         sal_free(f_presel);
   5283         return BCM_E_INTERNAL;
   5284     }
   5285     fc->presel_db[id] = f_presel;
   5286     /* Update preselector global information */
   5287     /* coverity[negative_shift : FALSE] */
   5288     BCM_FIELD_PRESEL_ADD(presel_info->presel_set, id);
   5289 
   5290     rv = bcm_esw_field_qualify_Stage(unit, id | BCM_FIELD_QUALIFY_PRESEL,
   5291                                      bcmFieldStageIngressExactMatch);
   5292 
   5293     if (BCM_FAILURE(rv)) {
   5294         sal_free(f_presel);
   5295         fc->presel_db[id] = NULL;
   5296         BCM_FIELD_PRESEL_REMOVE(presel_info->presel_set, id);
   5297         return rv;
   5298     }
   5299 
   5300     /* Key: CPU_TX_CTRL
   5301      * Upper 2 bits should be 2, which indicates  the CPU TX flow
   5302      * Lower 4 bits should be a reserved encoding, say 15
   5303      * ((0x2 << 4) | (0xf))
   5304      */
   5305     data32 = 0x2f;
   5306     mask32 = 0x3f;
   5307     /* coverity[address_of : FALSE] */
   5308     /* coverity[callee_ptr_arith : FALSE] */
   5309     rv = _bcm_field_presel_qualify_set(unit, id | BCM_FIELD_QUALIFY_PRESEL,
   5310                                        _bcmFieldQualifyCpuTxCtrl,
   5311                                        &data32, &mask32);
   5312 
   5313     if (BCM_FAILURE(rv)) {
   5314         sal_free(f_presel);
   5315         fc->presel_db[id] = NULL;
   5316         BCM_FIELD_PRESEL_REMOVE(presel_info->presel_set, id);
   5317         return rv;
   5318     }
   5319 
   5320     rv = bcm_esw_field_action_add(unit, id | BCM_FIELD_QUALIFY_PRESEL,
   5321                                   bcmFieldActionGroupClassSet, 0x3, 0);
   5322 
   5323     if (BCM_FAILURE(rv)) {
   5324         sal_free(f_presel);
   5325         fc->presel_db[id] = NULL;
   5326         BCM_FIELD_PRESEL_REMOVE(presel_info->presel_set, id);
   5327         return rv;
   5328     }
   5329 
   5330     bcm_field_group_config_t_init(&group_config);
   5331     BCM_FIELD_QSET_INIT(group_config.qset);
   5332     BCM_FIELD_ASET_INIT(group_config.aset);
   5333     BCM_FIELD_QSET_ADD(group_config.qset, bcmFieldQualifyGroupClass);
   5334     BCM_FIELD_QSET_ADD(group_config.qset, bcmFieldQualifyStageIngressExactMatch);
   5335     BCM_FIELD_ASET_ADD(group_config.aset, bcmFieldActionCosMapNew);
   5336     BCM_FIELD_ASET_ADD(group_config.aset, bcmFieldActionStatGroup);
   5337     BCM_FIELD_ASET_ADD(group_config.aset, bcmFieldActionEgressPortsAdd);
   5338 
   5339     BCM_FIELD_PRESEL_ADD(group_config.preselset, id);
   5340     group_config.flags = BCM_FIELD_GROUP_CREATE_WITH_PRESELSET;
   5341     group_config.group =  _FP_INTERNAL_RESERVED_EM_ID;
   5342     group_config.flags |= BCM_FIELD_GROUP_CREATE_WITH_ID;
   5343     rv = _bcm_field_th_group_add(unit, 0, &group_config);
   5344 
   5345     if (BCM_FAILURE(rv)) {
   5346         sal_free(f_presel);
   5347         fc->presel_db[id] = NULL;
   5348         BCM_FIELD_PRESEL_REMOVE(presel_info->presel_set, id);
   5349         return rv;
   5350     }
   5351 
   5352     rv = _bcm_field_entry_create_id(unit,group_config.group,
   5353                                     _FP_INTERNAL_RESERVED_EM_ID);
   5354     BCM_IF_ERROR_RETURN(rv);
   5355 
   5356     rv = bcm_esw_field_qualify_GroupClass(unit, _FP_INTERNAL_RESERVED_EM_ID,
   5357                                           0x3, 0x3);
   5358     BCM_IF_ERROR_RETURN(rv);
   5359 
   5360     rv = _bcm_th3_cosq_field_reserved_classifier_get(unit, &classifier_id,
   5361                                                      &port);
   5362     BCM_IF_ERROR_RETURN(rv);
   5363 
   5364     rv = bcm_esw_field_action_add(unit, _FP_INTERNAL_RESERVED_EM_ID,
   5365                                   bcmFieldActionCosMapNew, classifier_id, 0);
   5366     BCM_IF_ERROR_RETURN(rv);
   5367 
   5368     BCM_PBMP_CLEAR(redirect_pbm);
   5369     BCM_PBMP_PORT_ADD(redirect_pbm, port);
   5370 
   5371     for (i = 0; (i < _FP_ACTION_PARAM_SZ) && (i < SOC_PBMP_WORD_MAX) ; i++) {
   5372         param[i] = SOC_PBMP_WORD_GET(redirect_pbm, i);
   5373     }
   5374     rv = _bcm_field_action_ports_add(unit, _FP_INTERNAL_RESERVED_EM_ID,
   5375                                      bcmFieldActionEgressPortsAdd,
   5376                                      param[0], param[1], param[2],
   5377                                      param[3], param[4], param[5]);
   5378 
   5379     BCM_IF_ERROR_RETURN(rv);
   5380 
   5381     rv = bcm_esw_field_entry_install(unit, _FP_INTERNAL_RESERVED_EM_ID);
   5382     BCM_IF_ERROR_RETURN(rv);
   5383 
   5384     return BCM_E_NONE;
   5385 
   5386 }
   5387 
   5388 /*
   5389  * Function:
   5390  *     _bcm_field_th3_em_udf_keygen_mask_get
   5391  * Purpose:
   5392  *  Get the mask to be applied for data qualifiers.
   5393  * Parameters:
   5394  *  unit         - (IN)     BCM device number.
   5395  *  fg           - (IN)     Field group structure.
   5396  *  qid          - (IN)     Qualifier number.
   5397  *  mask         - (OUT)    Mask to be applied.
   5398  * Returns:
   5399  *  BCM_E_XXX
   5400  */
   5401 int _bcm_field_th3_em_udf_keygen_mask_get(int unit,
   5402                                          _field_group_t *fg,
   5403                                          uint16 qid, uint32 *mask)
   5404 {
   5405     int rv = BCM_E_NONE; /* Operational status. */
   5406     uint8 idx = 0;       /* Index Variable. */
   5407     _field_stage_t *stage_fc = NULL; /* Stage operational Structure. */
   5408 
   5409     /* Parameters Check. */
   5410     if (NULL == fg) {
   5411         return BCM_E_PARAM;
   5412     }
   5413 
   5414     /* Exact Match and IFP shares UDF's */
   5415     rv = _field_stage_control_get(unit, _BCM_FIELD_STAGE_INGRESS, &stage_fc);
   5416     BCM_IF_ERROR_RETURN(rv);
   5417 
   5418     if (stage_fc->data_ctrl == NULL) {
   5419        return BCM_E_INTERNAL;
   5420     }
   5421 
   5422     /* Derive the offset of byte bit map in QSET's udf_map
   5423      * for a data qualifier. */
   5424     *mask = 0;
   5425     switch (qid) {
   5426          case _bcmFieldQualifyData0:
   5427               idx = stage_fc->data_ctrl->num_elems * 2;
   5428               break;
   5429          case _bcmFieldQualifyData1:
   5430               idx = (stage_fc->data_ctrl->num_elems * 2) + 2;
   5431               break;
   5432          case _bcmFieldQualifyData2:
   5433               idx = (stage_fc->data_ctrl->num_elems * 2) + 4;
   5434               break;
   5435          case _bcmFieldQualifyData3:
   5436               idx = (stage_fc->data_ctrl->num_elems * 2) + 6;
   5437               break;
   5438          case _bcmFieldQualifyData4:
   5439               idx = (stage_fc->data_ctrl->num_elems * 2) + 8;
   5440               break;
   5441          case _bcmFieldQualifyData5:
   5442               idx = (stage_fc->data_ctrl->num_elems * 2) + 10;
   5443               break;
   5444          case _bcmFieldQualifyData6:
   5445               idx = (stage_fc->data_ctrl->num_elems * 2) + 12;
   5446               break;
   5447          case _bcmFieldQualifyData7:
   5448               idx = (stage_fc->data_ctrl->num_elems * 2) + 14;
   5449               break;
   5450          case _bcmFieldQualifyData8:
   5451               idx = (stage_fc->data_ctrl->num_elems * 2) + 16;
   5452               break;
   5453          case _bcmFieldQualifyData9:
   5454               idx = (stage_fc->data_ctrl->num_elems * 2) + 18;
   5455               break;
   5456          case _bcmFieldQualifyData10:
   5457               idx = (stage_fc->data_ctrl->num_elems * 2) + 20;
   5458               break;
   5459          case _bcmFieldQualifyData11:
   5460               idx = (stage_fc->data_ctrl->num_elems * 2) + 22;
   5461               break;
   5462          case _bcmFieldQualifyData12:
   5463               idx = (stage_fc->data_ctrl->num_elems * 2) + 24;
   5464               break;
   5465          case _bcmFieldQualifyData13:
   5466               idx = (stage_fc->data_ctrl->num_elems * 2) + 26;
   5467               break;
   5468          case _bcmFieldQualifyData14:
   5469               idx = (stage_fc->data_ctrl->num_elems * 2) + 28;
   5470               break;
   5471          case _bcmFieldQualifyData15:
   5472               idx = (stage_fc->data_ctrl->num_elems * 2) + 30;
   5473               break;
   5474          default:
   5475               *mask = 0xFFFFFFFF;
   5476               break;
   5477     }
   5478 
   5479     if (idx) {
   5480         if (SHR_BITGET(fg->qset.udf_map, idx)) {
   5481             *mask |= 0xFF;
   5482         }
   5483 
   5484         if (SHR_BITGET(fg->qset.udf_map, idx + 1)) {
   5485             *mask |= 0xFF00;
   5486         }
   5487     }
   5488 
   5489     return BCM_E_NONE;
   5490 }
   5491 #endif