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 (672221B)


      1 /*
      2  * 
      3  * This license is set out in https://raw.githubusercontent.com/Broadcom-Network-Switching-Software/OpenBCM/master/Legal/LICENSE file.
      4  * 
      5  * Copyright 2007-2019 Broadcom Inc. All rights reserved.
      6  * All Rights Reserved.$
      7  *
      8  * File:       field.c
      9  * Purpose:    BCM56870 Field Processor functions.
     10  */
     11 
     12 #include <soc/defs.h>
     13 #if defined(BCM_TRIDENT3_SUPPORT) && defined(BCM_FIELD_SUPPORT)
     14 #include <shared/bsl.h>
     15 #include <soc/mem.h>
     16 #include <soc/drv.h>
     17 #include <soc/format.h>
     18 #include <soc/tomahawk.h>
     19 #include <bcm/field.h>
     20 #include <bcm_int/esw/trx.h>
     21 #include <bcm_int/esw/field.h>
     22 #include <bcm_int/esw/keygen_api.h>
     23 #include <bcm_int/esw/udf.h>
     24 #include <bcm_int/esw/stack.h>
     25 #include <bcm_int/esw/tomahawk.h>
     26 #include <bcm_int/esw/trident2.h>
     27 #include <bcm_int/esw/trident3.h>
     28 #include "include/soc/esw/cancun.h"
     29 
     30 #if defined(BCM_HELIX5_SUPPORT)
     31 #include <bcm_int/esw/helix5.h>
     32 #endif
     33 
     34 /* IFP Entry/Policy max width */
     35 #define _BCM_FP_MEM_FIELD_BYTES  100
     36 
     37 extern uint8 ifp_td3_action_profile_bitmap[44];
     38 
     39 static soc_reg_t outer_tpid_r[4] = {
     40     PARSER1_ING_OUTER_TPID_0r,
     41     PARSER1_ING_OUTER_TPID_1r,
     42     PARSER1_ING_OUTER_TPID_2r,
     43     PARSER1_ING_OUTER_TPID_3r
     44 };
     45 static soc_reg_t inner_tpid_r[4] = {
     46     PARSER1_ING_INNER_TPID_0r,
     47     PARSER1_ING_INNER_TPID_1r,
     48     PARSER1_ING_INNER_TPID_2r,
     49     PARSER1_ING_INNER_TPID_3r
     50 };
     51 static soc_field_t classfldtbl[][7] = {
     52                        {SLICE_0_F1f, SLICE_0_F2f, SLICE_0_F3f, SLICE_0_F4f,
     53                                      SLICE_0_F6f, SLICE_0_F7f, SLICE_0_F8f},
     54                        {SLICE_1_F1f, SLICE_1_F2f, SLICE_1_F3f, SLICE_1_F4f,
     55                                      SLICE_1_F6f, SLICE_1_F7f, SLICE_1_F8f},
     56                        {SLICE_2_F1f, SLICE_2_F2f, SLICE_2_F3f, SLICE_2_F4f,
     57                                      SLICE_2_F6f, SLICE_2_F7f, SLICE_2_F8f},
     58                        {SLICE_3_F1f, SLICE_3_F2f, SLICE_3_F3f, SLICE_3_F4f,
     59                                      SLICE_3_F6f, SLICE_3_F7f, SLICE_3_F8f}
     60 };
     61 static soc_field_t classIdBfldtbl[4] =
     62                        { SLICE_0f, SLICE_1f, SLICE_2f, SLICE_3f };
     63 static soc_field_t dvpfldtbl[4] =
     64                        { SLICE_0f, SLICE_1f, SLICE_2f, SLICE_3f };
     65 
     66 
     67 #define _FP_TD3_ZONE_0_MATCH_ID_WIDTH 6
     68 #define _FP_TD3_ZONE_1_MATCH_ID_WIDTH 11
     69 #define _FP_TD3_ZONE_2_MATCH_ID_WIDTH 11
     70 #define _FP_TD3_ZONE_3_MATCH_ID_WIDTH 11
     71 #define _FP_TD3_ZONE_4_MATCH_ID_WIDTH 11
     72 
     73 #define _FP_FLEX_OBJ_MAX         2
     74 #define _FP_FLEX_OBJ_STR_SZ     40
     75 #define _FP_FLEX_FLD_STR_SZ     40
     76 
     77 /* Flex Qualifiers CEH data */
     78 typedef struct _bcm_field_flex_qual_ceh_data_s {
     79     bcm_field_qualify_t         qual;
     80     uint8                       thirtytwo_bit_ext_valid;
     81     uint8                       sixteen_bit_ext_valid;
     82     uint8                       eight_bit_ext_valid;
     83     uint8                       four_bit_ext_valid;
     84     uint8                       presel_valid; /* (1 << 0) for IFP and EM
     85                                                  (1 << 1)  for FT */
     86     int8                        num_obj;
     87     char                        obj_str_arr[_FP_FLEX_OBJ_STR_SZ][_FP_FLEX_FLD_STR_SZ];
     88     char                        field_str_arr[_FP_FLEX_OBJ_STR_SZ][_FP_FLEX_FLD_STR_SZ];
     89     soc_cancun_ceh_field_info_t ceh_info[_FP_FLEX_OBJ_MAX];
     90     struct _bcm_field_flex_qual_ceh_data_s *next;
     91 } _bcm_field_flex_qual_ceh_data_t;
     92 
     93 typedef struct _bcm_field_flex_qual_ceh_db_s {
     94     _bcm_field_flex_qual_ceh_data_t *flex_data;
     95 } _bcm_field_flex_qual_ceh_db_t;
     96 
     97 _bcm_field_flex_qual_ceh_db_t fp_flex_db[BCM_MAX_NUM_UNITS];
     98 
     99 typedef struct _flex_ceh_field_type_s {
    100     char  field_str[40];
    101 } _flex_ceh_field_type_t;
    102 
    103 
    104 
    105 int _field_ifp_base_offset_get(int unit,
    106                                soc_format_t fmt,
    107                                soc_field_t field,
    108                                uint32 *base_offset,
    109                                uint32 *field_pos)
    110 {
    111     soc_field_info_t *field_info;
    112 
    113     field_info = soc_format_fieldinfo_get(unit, fmt, field);
    114     if (field_info == NULL) {
    115        return BCM_E_PARAM;
    116     }
    117 
    118     *base_offset = field_info->bp;
    119 
    120     switch (field) {
    121        case ZONE_0_MATCH_IDf:
    122            *field_pos = (fmt == IFP_L0_BUS_SECTION_16BITfmt) ? 36 : 22;
    123             break;
    124        case ZONE_1_MATCH_IDf:
    125            *field_pos = 35;
    126             break;
    127        case ZONE_2_MATCH_IDf:
    128            *field_pos = 34;
    129             break;
    130        case ZONE_3_MATCH_IDf:
    131            *field_pos = 33;
    132             break;
    133        case ZONE_4_MATCH_IDf:
    134            *field_pos = 32;
    135             break;
    136        case OPAQUE_1f:
    137            *field_pos = 42;
    138             break;
    139        case OPAQUE_2f:
    140            *field_pos = 43;
    141             break;
    142        case OPAQUE_3f:
    143            *field_pos = 44;
    144             break;
    145        case OPAQUE_4f:
    146            *field_pos = 45;
    147             break;
    148        case PARSER_1_FLEX_HVE_CHECK_RESULT_15_0f:
    149            *field_pos = 49;
    150             break;
    151        case PARSER_2_FLEX_HVE_CHECK_RESULT_15_0f:
    152            *field_pos = 48;
    153             break;
    154        case ZONE_1_MATCH_ID_7_0f:
    155            *field_pos = 21;
    156             break;
    157        case ZONE_2_MATCH_ID_7_0f:
    158            *field_pos = 20;
    159             break;
    160        case ZONE_3_MATCH_ID_7_0f:
    161            *field_pos = 19;
    162             break;
    163        case ZONE_4_MATCH_ID_7_0f:
    164            *field_pos = 18;
    165             break;
    166        case ZONE_2_MATCH_ID_11_8f:
    167            *field_pos = 36;
    168             break;
    169        case ZONE_4_MATCH_ID_11_8f:
    170            *field_pos = 34;
    171             break;
    172        case PKT_FLOW_ID_2f:
    173            *field_pos = 37;
    174             break;
    175        case PKT_FLOW_ID_1f:
    176            *field_pos = 38;
    177             break;
    178        case PKT_FLOW_ID_0f:
    179            *field_pos = 39;
    180             break;
    181        case UDF_1_CHUNK_5_4f:
    182            *field_pos = 10;
    183             break;
    184        default:
    185             return BCM_E_PARAM;
    186     }
    187 
    188     return BCM_E_NONE;
    189 }
    190 
    191 STATIC int
    192 _fp_flex_qual_ceh_db_insert(int unit, _bcm_field_flex_qual_ceh_data_t *flex_data)
    193 {
    194    static _bcm_field_flex_qual_ceh_data_t *curr_flex_data = NULL;
    195 
    196    if (fp_flex_db[unit].flex_data == NULL) {
    197       curr_flex_data = NULL;
    198    }
    199 
    200    if (curr_flex_data == NULL) {
    201       fp_flex_db[unit].flex_data = flex_data;
    202    } else {
    203       curr_flex_data->next = flex_data;
    204    }
    205 
    206    curr_flex_data = flex_data;
    207 
    208    return BCM_E_NONE;
    209 }
    210 
    211 int
    212 _bcm_field_td3_flex_qual_ceh_db_clear(int unit)
    213 {
    214    _bcm_field_flex_qual_ceh_data_t *flex_data;
    215 
    216    flex_data = fp_flex_db[unit].flex_data;
    217 
    218    while (flex_data != NULL) {
    219       fp_flex_db[unit].flex_data = flex_data->next;
    220       sal_free(flex_data);
    221       flex_data = fp_flex_db[unit].flex_data;
    222    }
    223 
    224    fp_flex_db[unit].flex_data = NULL;
    225 
    226    return BCM_E_NONE;
    227 }
    228 
    229 #define _FP_QUAL_FLEX_QUAL_CEH_DATA_DECL                                          \
    230         _bcm_field_flex_qual_ceh_data_t *_flex_data_= NULL;
    231 
    232 
    233 #define _FP_QUAL_FLEX_DB_ADD(_u_, _qual_, _32bit_ext_, _16bit_ext_, _8bit_ext_, _4bit_ext_,    \
    234                              _presel_valid_, _num_objs_, _obj1_str_, _obj2_str_,  \
    235                               _fld1_str_, _fld2_str_)                             \
    236         {                                                                         \
    237              /* Allocated stage qualifiers configuration array. */                \
    238              _FP_XGS3_ALLOC(_flex_data_, sizeof(_bcm_field_flex_qual_ceh_data_t), \
    239                              "Flex DB data Alloc");                               \
    240              if (_flex_data_ == NULL) {                                           \
    241                 return BCM_E_MEMORY;                                              \
    242              }                                                                    \
    243                                                                                   \
    244              _flex_data_->qual = _qual_;                                          \
    245              _flex_data_->thirtytwo_bit_ext_valid = _32bit_ext_;                    \
    246              _flex_data_->sixteen_bit_ext_valid = _16bit_ext_;                    \
    247              _flex_data_->eight_bit_ext_valid = _8bit_ext_;                       \
    248              _flex_data_->four_bit_ext_valid = _4bit_ext_;                        \
    249              _flex_data_->presel_valid = _presel_valid_;                          \
    250              _flex_data_->num_obj = _num_objs_;                                   \
    251              sal_strcpy(_flex_data_->obj_str_arr[0], _obj1_str_);                 \
    252              sal_strcpy(_flex_data_->obj_str_arr[1], _obj2_str_);                 \
    253              sal_strcpy(_flex_data_->field_str_arr[0], _fld1_str_);               \
    254              sal_strcpy(_flex_data_->field_str_arr[1], _fld2_str_);               \
    255                                                                                   \
    256              _fp_flex_qual_ceh_db_insert(_u_, _flex_data_);                       \
    257              _flex_data_ = NULL;                                                  \
    258        }
    259 
    260 int
    261 _bcm_field_td3_flex_qual_ceh_db_init(int unit)
    262 {
    263     int rv;
    264     int obj_ct;
    265     _bcm_field_flex_qual_ceh_data_t *flex_db;
    266 
    267     _FP_QUAL_FLEX_QUAL_CEH_DATA_DECL;
    268 
    269     _FP_QUAL_FLEX_DB_ADD(unit, bcmFieldQualifyIpIdentifier,             1, 0, 0, 0, 0, 1, "UDF_1_CHUNK_4",   "\0",        "IPV4_IDENTIFIER",       "\0");
    270     _FP_QUAL_FLEX_DB_ADD(unit, bcmFieldQualifyHiGigGbpSrcId,            1, 0, 0, 0, 0, 1, "UDF_1_CHUNK_5",   "\0",        "GBP_SID",               "\0");
    271     _FP_QUAL_FLEX_DB_ADD(unit, bcmFieldQualifySysHdrLocalDstport,       1, 0, 0, 0, 0, 1, "UDF_1_CHUNK_5",   "\0",        "SOBMH_LOCAL_DEST_PORT", "\0");
    272     _FP_QUAL_FLEX_DB_ADD(unit, bcmFieldQualifyTimeStampTxPktType,       1, 0, 0, 0, 0, 1, "UDF_1_CHUNK_5",   "\0",        "SOBMH_TIMESTAMP_HDR_OFFSET", "\0");
    273     _FP_QUAL_FLEX_DB_ADD(unit, bcmFieldQualifySysHdrType,               0, 1, 1, 0, 2, 1, "Z0_MATCH_ID",     "\0",        "COE",               "\0");
    274     if (soc_feature(unit, soc_feature_hgproxy_subtag_coe)) {
    275         _FP_QUAL_FLEX_DB_ADD(unit, bcmFieldQualifySubportTagPresent,        0, 1, 1, 0, 3, 1, "Z1_MATCH_ID", "\0",          "SUBPORT_TAG",    "\0");
    276     }
    277 #if defined(BCM_HELIX5_SUPPORT)
    278     if (SOC_IS_HELIX5(unit)) {
    279         /*
    280          * Presel Valid bitmap representation is like 0th bit for TD3 and 1st bit for HX5.
    281          * Presel Valid bitmap is set to 0x2 as they are not supported in TD3 currently.
    282          * When supported need to mark it as 0x3.
    283          */
    284         _FP_QUAL_FLEX_DB_ADD(unit, bcmFieldQualifyGbpPresent,               0, 1, 1, 0, 2, 1, "Z1_MATCH_ID", "\0",          "GBP",            "\0");
    285     }
    286 #endif /* BCM_HELIX5_SUPPORT */
    287     _FP_QUAL_FLEX_DB_ADD(unit, bcmFieldQualifyNetworkTagType,           0, 1, 1, 0, 3, 1, "Z1_MATCH_ID", "\0",          "VNTAG",          "\0");
    288     _FP_QUAL_FLEX_DB_ADD(unit, bcmFieldQualifyVlanFormat,               0, 1, 1, 0, 3, 1, "Z1_MATCH_ID", "\0",          "OTAG_ITAG",      "\0");
    289     if (soc_feature(unit, soc_feature_CnTag)) {
    290         _FP_QUAL_FLEX_DB_ADD(unit, bcmFieldQualifyCnTagPresent,             0, 1, 1, 0, 3, 1, "Z1_MATCH_ID", "\0",          "CNTAG",          "\0");
    291     }
    292     _FP_QUAL_FLEX_DB_ADD(unit, bcmFieldQualifyL2PktType,                0, 1, 1, 0, 3, 1, "Z1_MATCH_ID", "\0",          "ETH",            "\0");
    293     _FP_QUAL_FLEX_DB_ADD(unit, bcmFieldQualifyPktType,                  0, 1, 1, 0, 3, 1, "Z2_MATCH_ID", "\0",          "MPLS_1_LABEL_WITH_CW",    "\0");
    294     _FP_QUAL_FLEX_DB_ADD(unit, bcmFieldQualifyMplsCwPresent,            0, 1, 1, 0, 1, 2, "Z2_MATCH_ID", "Z2_MATCH_ID", "MPLS",           "MPLS_CW");
    295     _FP_QUAL_FLEX_DB_ADD(unit, bcmFieldQualifyMplsMcastEthertypePresent, 0, 1, 0, 1, 1, 2, "Z2_MATCH_ID", "Z2_MATCH_ID", "MPLS",           "MPLS_WITH_MCAST_ETYPE");
    296     _FP_QUAL_FLEX_DB_ADD(unit, bcmFieldQualifyIpv4OptionHdrType,        0, 1, 1, 0, 3, 2, "Z2_MATCH_ID", "Z2_MATCH_ID", "IPV4",           "AH");
    297     _FP_QUAL_FLEX_DB_ADD(unit, bcmFieldQualifyIpv6ExtensionHdrType,     0, 1, 1, 0, 3, 2, "Z2_MATCH_ID", "Z2_MATCH_ID", "IPV6",           "AH");
    298     _FP_QUAL_FLEX_DB_ADD(unit, bcmFieldQualifyOverlayVlanFormat,        0, 1, 1, 0, 3, 1, "Z3_MATCH_ID", "\0",          "OTAG_ITAG",      "\0");
    299     _FP_QUAL_FLEX_DB_ADD(unit, bcmFieldQualifyOverlayL2PktType,         0, 1, 1, 0, 3, 1, "Z3_MATCH_ID", "\0",          "ETH",            "\0");
    300 #if defined(BCM_HELIX5_SUPPORT)
    301     if (SOC_IS_HELIX5(unit)) {
    302         _FP_QUAL_FLEX_DB_ADD(unit, bcmFieldQualifyHiGigGbpPresent,        0, 1, 1, 0, 2, 1, "Z3_MATCH_ID", "\0",          "GBP",            "\0");
    303     }
    304 #endif /* BCM_HELIX5_SUPPORT */
    305     _FP_QUAL_FLEX_DB_ADD(unit, bcmFieldQualifyGbpSrcId,                 0, 1, 1, 0, 2, 1, "OPAQUE_1",    "\0",          "GBP_SID",        "\0");
    306     _FP_QUAL_FLEX_DB_ADD(unit, bcmFieldQualifyGbpDstId,                 0, 1, 1, 0, 2, 1, "OPAQUE_2",    "\0",          "GBP_DID",        "\0");
    307     _FP_QUAL_FLEX_DB_ADD(unit, bcmFieldQualifyOverlayPktType,           0, 1, 1, 0, 2, 1, "Z4_MATCH_ID", "\0",          "ARP",            "\0");
    308     _FP_QUAL_FLEX_DB_ADD(unit, bcmFieldQualifyOverlayIpv4OptionHdrType, 0, 1, 0, 0, 2, 2, "Z4_MATCH_ID", "Z4_MATCH_ID", "IPV4",           "AH");
    309     _FP_QUAL_FLEX_DB_ADD(unit, bcmFieldQualifyOverlayIpv6ExtensionHdrType, 0, 1, 0, 0, 2, 2, "Z4_MATCH_ID", "Z4_MATCH_ID", "IPV6",           "AH");
    310     _FP_QUAL_FLEX_DB_ADD(unit, bcmFieldQualifyNshServiceIndex,          0, 1, 0, 0, 0, 1, "OPAQUE_2",    "\0",          "SI",             "\0");
    311     _FP_QUAL_FLEX_DB_ADD(unit, bcmFieldQualifyNshServicePathId,         0, 1, 0, 0, 0, 2, "OPAQUE_2",    "OPAQUE_1",    "SPID_7_0",       "SPID_23_8");
    312     _FP_QUAL_FLEX_DB_ADD(unit, bcmFieldQualifyIpFragPkt,                0, 1, 0, 0, 0, 1, "PARSER_1_FLEX_HVE_CHECK_RESULT_15_0", "\0", "IP_FRAGMENTS", "\0");
    313     _FP_QUAL_FLEX_DB_ADD(unit, bcmFieldQualifyOuterPriTaggedPkt,        0, 1, 0, 0, 0, 1, "PARSER_1_FLEX_HVE_CHECK_RESULT_15_0", "\0", "OUTER_PRI_TAGGED", "\0");
    314     _FP_QUAL_FLEX_DB_ADD(unit, bcmFieldQualifyIpInIpPkt,                0, 1, 0, 0, 0, 1, "PARSER_1_FLEX_HVE_CHECK_RESULT_15_0", "\0", "IP_IN_IP", "\0");
    315     _FP_QUAL_FLEX_DB_ADD(unit, bcmFieldQualifyIntPktVersionOne,         0, 1, 0, 0, 0, 1, "PARSER_1_FLEX_HVE_CHECK_RESULT_15_0", "\0", "INT_VERSION_EQ_TO_ONE", "\0");
    316     _FP_QUAL_FLEX_DB_ADD(unit, bcmFieldQualifyIntPktOverflowed,         0, 1, 0, 0, 0, 1, "PARSER_1_FLEX_HVE_CHECK_RESULT_15_0", "\0", "INT_OVERFLOW_FLAG_EQ_TO_ZERO", "\0");
    317     _FP_QUAL_FLEX_DB_ADD(unit, bcmFieldQualifyIntPktFinalHop,           0, 1, 0, 0, 0, 1, "PARSER_1_FLEX_HVE_CHECK_RESULT_15_0", "\0", "INT_HOP_LIMIT_MORE_THAN_HOP_COUNT", "\0");
    318     _FP_QUAL_FLEX_DB_ADD(unit, bcmFieldQualifyIntPktLengthValid,        0, 1, 0, 0, 0, 1, "PARSER_1_FLEX_HVE_CHECK_RESULT_15_0", "\0", "INT_MAX_LEN_MORE_THAN_CUR_LEN", "\0");
    319     _FP_QUAL_FLEX_DB_ADD(unit, bcmFieldQualifyIntPktType,               0, 1, 0, 0, 0, 1, "PARSER_1_FLEX_HVE_CHECK_RESULT_15_0", "\0", "INT_MSG_TYPE_EQ_TO_REQUEST", "\0");
    320     _FP_QUAL_FLEX_DB_ADD(unit, bcmFieldQualifyIpmcV4Pkt,                0, 1, 0, 0, 0, 1, "PARSER_2_FLEX_HVE_CHECK_RESULT_15_0", "\0", "MACDA_V4_IPMC", "\0");
    321     _FP_QUAL_FLEX_DB_ADD(unit, bcmFieldQualifyIpmcV6Pkt,                0, 1, 0, 0, 0, 1, "PARSER_2_FLEX_HVE_CHECK_RESULT_15_0", "\0", "MACDA_V6_IPMC", "\0");
    322     _FP_QUAL_FLEX_DB_ADD(unit, bcmFieldQualifyIpChecksumOkPkt,          0, 1, 0, 0, 0, 1, "PARSER_2_FLEX_HVE_CHECK_RESULT_15_0", "\0", "CHECKSUMOK", "\0");
    323     _FP_QUAL_FLEX_DB_ADD(unit, bcmFieldQualifyNetworkTagMulticastPkt,   0, 1, 0, 0, 0, 1, "PARSER_2_FLEX_HVE_CHECK_RESULT_15_0", "\0", "VNTAG_ETAG_MCAST", "\0");
    324     _FP_QUAL_FLEX_DB_ADD(unit, bcmFieldQualifyIpTtlZeroPkt,             0, 1, 0, 0, 0, 1, "PARSER_2_FLEX_HVE_CHECK_RESULT_15_0", "\0", "IP_PKT_TTL_ZERO", "\0");
    325     _FP_QUAL_FLEX_DB_ADD(unit, bcmFieldQualifyBfdPktVersionOne,         0, 1, 0, 0, 0, 1, "PARSER_1_FLEX_HVE_CHECK_RESULT_15_0", "\0", "BFD_VERSION", "\0");
    326     _FP_QUAL_FLEX_DB_ADD(unit, bcmFieldQualifyGenevePktVersionZero,     0, 1, 0, 0, 0, 1, "PARSER_1_FLEX_HVE_CHECK_RESULT_15_0", "\0", "GENEVE_VERSION_CHECK", "\0");
    327     _FP_QUAL_FLEX_DB_ADD(unit, bcmFieldQualifyGpePktVersionZero,        0, 1, 0, 0, 0, 1, "PARSER_1_FLEX_HVE_CHECK_RESULT_15_0", "\0", "GPE_VERSION_CHECK", "\0");
    328     _FP_QUAL_FLEX_DB_ADD(unit, bcmFieldQualifyGenevePktWithOam,         0, 1, 0, 0, 0, 1, "PARSER_1_FLEX_HVE_CHECK_RESULT_15_0", "\0", "GENEVE_OAM_BIT", "\0");
    329     _FP_QUAL_FLEX_DB_ADD(unit, bcmFieldQualifyGpePktWithOam,            0, 1, 0, 0, 0, 1, "PARSER_1_FLEX_HVE_CHECK_RESULT_15_0", "\0", "GPE_OAM_FLAG", "\0");
    330     _FP_QUAL_FLEX_DB_ADD(unit, bcmFieldQualifyVxlanGbpPresent,          0, 1, 0, 0, 2, 1, "PARSER_1_FLEX_HVE_CHECK_RESULT_15_0", "\0", "VXLAN_GBP", "\0");
    331     _FP_QUAL_FLEX_DB_ADD(unit, bcmFieldQualifyInnerBfdPktVersionOne,    0, 1, 0, 0, 0, 1, "PARSER_2_FLEX_HVE_CHECK_RESULT_15_0", "\0", "BFD_VERSION", "\0");
    332     _FP_QUAL_FLEX_DB_ADD(unit, bcmFieldQualifyTunnelTerminated,         0, 1, 0, 0, 1, 1, "PKT_FLOW_ID_2",                       "\0", "TUNNEL_TERMINATED", "\0");
    333 
    334     flex_db = fp_flex_db[unit].flex_data;
    335 
    336     for (; flex_db != NULL; flex_db = flex_db->next) {
    337        for (obj_ct = 0; obj_ct < flex_db->num_obj; obj_ct++) {
    338            rv = soc_cancun_ceh_obj_field_get(unit, flex_db->obj_str_arr[obj_ct],
    339                                              flex_db->field_str_arr[obj_ct],
    340                                              &flex_db->ceh_info[obj_ct]);
    341            if (SOC_FAILURE(rv)) {
    342                if (rv == SOC_E_NOT_FOUND) {
    343                   LOG_DEBUG(BSL_LS_BCM_FP, (BSL_META("CEH - OBJ:%s FIELD:%s for"
    344                                         " qual[%d] not Found!\n\r"),
    345                                         flex_db->obj_str_arr[obj_ct],
    346                                         flex_db->field_str_arr[obj_ct],
    347                                         flex_db->qual));
    348                   continue;
    349                }
    350                LOG_ERROR(BSL_LS_BCM_FP, (BSL_META("CEH read error for OBJ:%s FIELD:%s \n\r"),
    351                                         flex_db->obj_str_arr[obj_ct],
    352                                         flex_db->field_str_arr[obj_ct]));
    353                return rv;
    354            }
    355            LOG_DEBUG(BSL_LS_BCM_FP, (BSL_META_U(unit, "OBJ:%s FIELD:%s offset:%d width:%d value:%d\n\r"),
    356                                         flex_db->obj_str_arr[obj_ct],
    357                                         flex_db->field_str_arr[obj_ct],
    358                                         flex_db->ceh_info[obj_ct].offset,
    359                                         flex_db->ceh_info[obj_ct].width,
    360                                         flex_db->ceh_info[obj_ct].value));
    361        }
    362     }
    363 
    364     return BCM_E_NONE;
    365 }
    366 
    367 /*
    368  * Function: _field_td3_flex_presel_qual_init
    369  * Purpose:  Initialize Field Flex Presel Stage Qualifiers.
    370  */
    371 STATIC int
    372 _field_td3_flex_presel_qual_init(int unit, _field_stage_t *stage_fc)
    373 {
    374     soc_mem_t mem;
    375     uint8 valid_flags = 0;
    376     uint8 ct, num_flows = 0;
    377     uint32 offset0, width0;
    378     uint32 offset1, width1;
    379     uint32 z0_offset = 0;
    380     uint32 key_start_offset = 0;
    381     uint32 match_id_cont_0_offset = 0;
    382     uint32 match_id_cont_1_offset = 0;
    383     uint32 match_id_cont_2_offset = 0;
    384     uint32 pkt_flow_id_2_offset = 0;
    385     uint32 flow_type[4] = {0};
    386     uint32 flow_offset[4] = {0};
    387     soc_field_info_t *field_info = NULL;
    388     _bcm_field_flex_qual_ceh_data_t *flex_db = NULL;
    389 #if defined(BCM_FLOWTRACKER_SUPPORT)
    390     int rv;
    391     uint32 match_id_offset = 0, z4_offset = 0;
    392     soc_cancun_ceh_field_info_t ceh_info;
    393 #endif
    394 
    395     _FP_QUAL_DECL;
    396 
    397     if (fp_flex_db[unit].flex_data == NULL) {
    398        return BCM_E_INTERNAL;
    399     }
    400 
    401     switch(stage_fc->stage_id) {
    402         case _BCM_FIELD_STAGE_EXACTMATCH:
    403         case _BCM_FIELD_STAGE_INGRESS:
    404             valid_flags = (1 << 0);
    405             if (stage_fc->stage_id == _BCM_FIELD_STAGE_EXACTMATCH) {
    406                 mem = EXACT_MATCH_LOGICAL_TABLE_SELECT_TCAM_ONLYm;
    407             } else {
    408                 mem = IFP_LOGICAL_TABLE_SELECT_TCAM_ONLYm;
    409             }
    410             field_info = soc_mem_fieldinfo_get(unit, mem, KEYf);
    411             if (field_info == NULL) {
    412                 return BCM_E_PARAM;
    413             }
    414             key_start_offset = field_info->bp;
    415 
    416             field_info = soc_mem_fieldinfo_get(unit, mem, MATCH_ID_CONT_0f);
    417             if (field_info == NULL) {
    418                 return BCM_E_PARAM;
    419             }
    420             match_id_cont_0_offset = field_info->bp - key_start_offset;
    421 
    422             field_info = soc_mem_fieldinfo_get(unit, mem, MATCH_ID_CONT_1f);
    423             if (field_info == NULL) {
    424                 return BCM_E_PARAM;
    425             }
    426             match_id_cont_1_offset = field_info->bp - key_start_offset;
    427 
    428             field_info = soc_mem_fieldinfo_get(unit, mem, MATCH_ID_CONT_2f);
    429             if (field_info == NULL) {
    430                 return BCM_E_PARAM;
    431             }
    432             match_id_cont_2_offset = field_info->bp - key_start_offset;
    433 
    434             field_info = soc_mem_fieldinfo_get(unit, mem, PKT_FLOW_ID_2f);
    435             if (field_info == NULL) {
    436                 return BCM_E_PARAM;
    437             }
    438             pkt_flow_id_2_offset = field_info->bp - key_start_offset;
    439             break;
    440 #if defined(BCM_FLOWTRACKER_SUPPORT)
    441         case _BCM_FIELD_STAGE_FLOWTRACKER:
    442             valid_flags = (1 << 1);
    443             mem = BSK_FTFP_LTS_LOGICAL_TBL_SEL_TCAMm;
    444 
    445             field_info = soc_mem_fieldinfo_get(unit, mem, KEYf);
    446             if (field_info == NULL) {
    447                 return BCM_E_PARAM;
    448             }
    449             key_start_offset = field_info->bp;
    450 
    451             field_info = soc_mem_fieldinfo_get(unit, mem, MATCH_IDf);
    452             if (field_info == NULL) {
    453                 return BCM_E_PARAM;
    454             }
    455             match_id_offset = field_info->bp - key_start_offset;
    456 
    457             /* Get Offsets for Zone0/1/2/3/4 */
    458             sal_memset(&ceh_info, 0, sizeof(soc_cancun_ceh_field_info_t));
    459             rv = soc_cancun_ceh_obj_field_get(unit, "MATCH_ID",
    460                     "Z0_MATCH_ID",
    461                     &ceh_info);
    462             BCM_IF_ERROR_RETURN(rv);
    463             z0_offset = match_id_offset + ceh_info.offset;
    464 
    465             sal_memset(&ceh_info, 0, sizeof(soc_cancun_ceh_field_info_t));
    466             rv = soc_cancun_ceh_obj_field_get(unit, "MATCH_ID",
    467                     "Z1_MATCH_ID",
    468                     &ceh_info);
    469             BCM_IF_ERROR_RETURN(rv);
    470             match_id_cont_0_offset = match_id_offset + ceh_info.offset;
    471 
    472             sal_memset(&ceh_info, 0, sizeof(soc_cancun_ceh_field_info_t));
    473             rv = soc_cancun_ceh_obj_field_get(unit, "MATCH_ID",
    474                     "Z2_MATCH_ID",
    475                     &ceh_info);
    476             BCM_IF_ERROR_RETURN(rv);
    477             match_id_cont_1_offset = match_id_offset + ceh_info.offset;
    478 
    479             sal_memset(&ceh_info, 0, sizeof(soc_cancun_ceh_field_info_t));
    480             rv = soc_cancun_ceh_obj_field_get(unit, "MATCH_ID",
    481                     "Z3_MATCH_ID",
    482                     &ceh_info);
    483             BCM_IF_ERROR_RETURN(rv);
    484             match_id_cont_2_offset = match_id_offset + ceh_info.offset;
    485 
    486             sal_memset(&ceh_info, 0, sizeof(soc_cancun_ceh_field_info_t));
    487             rv = soc_cancun_ceh_obj_field_get(unit, "MATCH_ID",
    488                     "Z4_MATCH_ID",
    489                     &ceh_info);
    490             BCM_IF_ERROR_RETURN(rv);
    491             z4_offset = match_id_offset + ceh_info.offset;
    492             break;
    493 #endif
    494         default:
    495             return BCM_E_INTERNAL;
    496     }
    497 
    498     flex_db = fp_flex_db[unit].flex_data;
    499 
    500     for (; flex_db != NULL; flex_db = flex_db->next) {
    501         if (!(flex_db->presel_valid & valid_flags)) {
    502             continue;
    503         }
    504 
    505         width0 = width1 = 0;
    506         offset0 = offset1 = 0;
    507 
    508         if ((stage_fc->stage_id == _BCM_FIELD_STAGE_INGRESS) ||
    509             (stage_fc->stage_id == _BCM_FIELD_STAGE_EXACTMATCH)) {
    510 
    511             /* Population of Zone Match IDs in MATCH_ID_CONTAINERS are dynamic,
    512              * it gets updated based on the packet flows.
    513              *
    514              * IFP_LOGICAL_TABLE_SELECT MATCH_ID_0_CONT MATCH_ID_1_CONT MATCH_ID_2_CONT
    515              * ------------------------ --------------- --------------- ---------------
    516              * Access Flows/Transit flow ZONE_1          ZONE_2          ZONE_4
    517              * L3 Tunnel Termination     ZONE_1          ZONE_2          ZONE_4
    518              * L2 Tunnel Termination     ZONE_2          ZONE_3          ZONE_4
    519              */
    520             /* Assuming object 1 and object 2 has same obj_str_arr */
    521             if (sal_strcmp(flex_db->obj_str_arr[0], "Z0_MATCH_ID") == 0) {
    522                 flow_type[0] = _BCM_FIELD_QUAL_OFFSET_DEFAULT;
    523                 flow_offset[0] = z0_offset + flex_db->ceh_info[0].offset;
    524                 num_flows = 1;
    525             } else if (sal_strcmp(flex_db->obj_str_arr[0], "Z1_MATCH_ID") == 0) {
    526                 flow_type[0] = _BCM_FIELD_QUAL_OFFSET_FLOW_TYPE_TUNNEL_NONE;
    527                 flow_offset[0] = match_id_cont_0_offset + flex_db->ceh_info[0].offset;
    528                 flow_type[1] = _BCM_FIELD_QUAL_OFFSET_FLOW_TYPE_TUNNEL_L3;
    529                 flow_offset[1] = match_id_cont_0_offset + flex_db->ceh_info[0].offset;
    530                 num_flows = 2;
    531             } else if (sal_strcmp(flex_db->obj_str_arr[0], "Z2_MATCH_ID") == 0) {
    532                 flow_type[0] = _BCM_FIELD_QUAL_OFFSET_FLOW_TYPE_TUNNEL_NONE;
    533                 flow_offset[0] = match_id_cont_1_offset + flex_db->ceh_info[0].offset;
    534                 flow_type[1] = _BCM_FIELD_QUAL_OFFSET_FLOW_TYPE_TUNNEL_L3;
    535                 flow_offset[1] = match_id_cont_1_offset + flex_db->ceh_info[0].offset;
    536                 flow_type[2] = _BCM_FIELD_QUAL_OFFSET_FLOW_TYPE_TUNNEL_L2;
    537                 flow_offset[2] = match_id_cont_0_offset + flex_db->ceh_info[0].offset;
    538                 num_flows = 3;
    539             } else if (sal_strcmp(flex_db->obj_str_arr[0], "Z3_MATCH_ID") == 0) {
    540                 flow_type[0] = _BCM_FIELD_QUAL_OFFSET_FLOW_TYPE_TUNNEL_L2;
    541                 flow_offset[0] = match_id_cont_1_offset + flex_db->ceh_info[0].offset;
    542                 num_flows = 1;
    543             } else if (sal_strcmp(flex_db->obj_str_arr[0], "Z4_MATCH_ID") == 0) {
    544                 flow_type[0] = _BCM_FIELD_QUAL_OFFSET_FLOW_TYPE_TUNNEL_NONE;
    545                 flow_offset[0] = match_id_cont_2_offset + flex_db->ceh_info[0].offset;
    546                 flow_type[1] = _BCM_FIELD_QUAL_OFFSET_FLOW_TYPE_TUNNEL_L3;
    547                 flow_offset[1] = match_id_cont_2_offset + flex_db->ceh_info[0].offset;
    548                 flow_type[2] = _BCM_FIELD_QUAL_OFFSET_FLOW_TYPE_TUNNEL_L2;
    549                 flow_offset[2] = match_id_cont_2_offset + flex_db->ceh_info[0].offset;
    550                 num_flows = 3;
    551             } else if (sal_strcmp(flex_db->obj_str_arr[0], "PKT_FLOW_ID_2") == 0) {
    552                 flow_type[0] = _BCM_FIELD_QUAL_OFFSET_DEFAULT;
    553                 flow_offset[0] = pkt_flow_id_2_offset + flex_db->ceh_info[0].offset;
    554                 num_flows = 1;
    555             } else {
    556                 continue;
    557             }
    558 #if defined(BCM_FLOWTRACKER_SUPPORT)
    559         } else if (stage_fc->stage_id == _BCM_FIELD_STAGE_FLOWTRACKER) {
    560 
    561             /* Assuming object 1 and object 2 has same obj_str_arr */
    562             if (sal_strcmp(flex_db->obj_str_arr[0], "Z0_MATCH_ID") == 0) {
    563                 flow_type[0] = _BCM_FIELD_QUAL_OFFSET_DEFAULT;
    564                 flow_offset[0] = z0_offset + flex_db->ceh_info[0].offset;
    565                 num_flows = 1;
    566             } else if (sal_strcmp(flex_db->obj_str_arr[0], "Z1_MATCH_ID") == 0) {
    567                 flow_type[0] = _BCM_FIELD_QUAL_OFFSET_DEFAULT;
    568                 flow_offset[0] = match_id_cont_0_offset + flex_db->ceh_info[0].offset;
    569                 num_flows = 1;
    570             } else if (sal_strcmp(flex_db->obj_str_arr[0], "Z2_MATCH_ID") == 0) {
    571                 flow_type[0] = _BCM_FIELD_QUAL_OFFSET_DEFAULT;
    572                 flow_offset[0] = match_id_cont_1_offset + flex_db->ceh_info[0].offset;
    573                 num_flows = 1;
    574             } else if (sal_strcmp(flex_db->obj_str_arr[0], "Z3_MATCH_ID") == 0) {
    575                 flow_type[0] = _BCM_FIELD_QUAL_OFFSET_DEFAULT;
    576                 flow_offset[0] = match_id_cont_2_offset + flex_db->ceh_info[0].offset;
    577                 num_flows = 1;
    578             } else if (sal_strcmp(flex_db->obj_str_arr[0], "Z4_MATCH_ID") == 0) {
    579                 flow_type[0] = _BCM_FIELD_QUAL_OFFSET_DEFAULT;
    580                 flow_offset[0] = z4_offset + flex_db->ceh_info[0].offset;
    581                 num_flows = 1;
    582             } else {
    583                 continue;
    584             }
    585 #endif
    586         }
    587 
    588         width0 = flex_db->ceh_info[0].width;
    589 
    590         for (ct = 0; ct < num_flows; ct++) {
    591             offset0 = flow_offset[ct];
    592             if (flex_db->num_obj == 1) {
    593                 _FP_PRESEL_QUAL_ADD(unit, stage_fc, flex_db->qual,
    594                             flow_type[ct], _bcmFieldSliceSelDisable,
    595                             0, _bcmFieldQualifierTypePresel,
    596                             offset0, width0);
    597             } else if (flex_db->num_obj == 2) {
    598                offset1 = offset0 + flex_db->ceh_info[1].offset;
    599                width1 = flex_db->ceh_info[1].width;
    600 
    601                _FP_PRESEL_QUAL_TWO_ADD(unit, stage_fc, flex_db->qual,
    602                             flow_type[ct], _bcmFieldSliceSelDisable,
    603                             0, _bcmFieldQualifierTypePresel,
    604                             offset0, width0,
    605                             offset1, width1);
    606             }
    607         }
    608 
    609         LOG_DEBUG(BSL_LS_BCM_FP, (BSL_META_U(unit,
    610                   "%20s :: offset0:%d width0:%d, offset1:%d width1:%d\n\r"),
    611                   _field_qual_name(flex_db->qual), offset0, width0, offset1, width1));
    612     }
    613 
    614     return BCM_E_NONE;
    615 }
    616 
    617 /*
    618  * Function: _field_td3_flex_extractor_qual_init
    619  * Purpose:  Initialize Field Flex Ingress Stage Qualifiers.
    620  */
    621 STATIC int
    622 _field_td3_flex_extractor_qual_init(int unit, _field_stage_t *stage_fc)
    623 {
    624     int    obj_ct, extr, rv;
    625     uint8  valid_field = 0;
    626     uint32 z0_match_id_pos[3] = {0};
    627     uint32 z1_match_id_pos[3] = {0};
    628     uint32 z2_match_id_pos[3] = {0};
    629     uint32 z3_match_id_pos[3] = {0};
    630     uint32 z4_match_id_pos[3] = {0};
    631     uint32 opaque1_pos = 0;
    632     uint32 opaque2_pos = 0;
    633     uint32 opaque3_pos = 0;
    634     uint32 opaque4_pos = 0;
    635     uint32 parser1_flex_hve_chk_pos = 0;
    636     uint32 parser2_flex_hve_chk_pos = 0;
    637     uint32 z0_match_id_offset[3] = {0};
    638     uint32 z1_match_id_offset[3] = {0};
    639     uint32 z2_match_id_offset[3] = {0};
    640     uint32 z3_match_id_offset[3] = {0};
    641     uint32 z4_match_id_offset[3] = {0};
    642     uint32 opaque1_offset = 0;
    643     uint32 opaque2_offset = 0;
    644     uint32 opaque3_offset = 0;
    645     uint32 opaque4_offset = 0;
    646     uint32 parser1_flex_hve_chk_offset = 0;
    647     uint32 parser2_flex_hve_chk_offset = 0;
    648     uint32 field_offset[2] = {0};
    649     uint32 field_pos[2] = {0};
    650     uint32 pkt_flow_id_2_pos = 0;
    651     uint32 pkt_flow_id_2_offset = 0;
    652     uint32 udf_1_chunk_5_4_pos = 0;
    653     uint32 udf_1_chunk_5_4_offset = 0;
    654     _bcm_field_flex_qual_ceh_data_t *flex_db;
    655     bcmi_keygen_qual_flags_bmp_t qual_flags;
    656     bcmi_keygen_ext_section_t ext_sel = BCMI_KEYGEN_EXT_SECTION_DISABLE;
    657     BCMI_KEYGEN_QUAL_CFG_DECL;
    658 
    659     BCMI_KEYGEN_FUNC_ENTER(unit);
    660 
    661 
    662     rv = _field_ifp_base_offset_get(unit,
    663                                     IFP_L0_BUS_SECTION_16BITfmt,
    664                                     ZONE_0_MATCH_IDf,
    665                                     &z0_match_id_offset[0], &z0_match_id_pos[0]);
    666     BCM_IF_ERROR_RETURN(rv);
    667 
    668     rv = _field_ifp_base_offset_get(unit,
    669                                     IFP_L0_BUS_SECTION_16BITfmt,
    670                                     ZONE_1_MATCH_IDf,
    671                                     &z1_match_id_offset[0], &z1_match_id_pos[0]);
    672     BCM_IF_ERROR_RETURN(rv);
    673 
    674     rv = _field_ifp_base_offset_get(unit,
    675                                     IFP_L0_BUS_SECTION_16BITfmt,
    676                                     ZONE_2_MATCH_IDf,
    677                                     &z2_match_id_offset[0],
    678                                     &z2_match_id_pos[0]);
    679     BCM_IF_ERROR_RETURN(rv);
    680 
    681     rv = _field_ifp_base_offset_get(unit,
    682                                     IFP_L0_BUS_SECTION_16BITfmt,
    683                                     ZONE_3_MATCH_IDf,
    684                                     &z3_match_id_offset[0], &z3_match_id_pos[0]);
    685     BCM_IF_ERROR_RETURN(rv);
    686 
    687     rv = _field_ifp_base_offset_get(unit,
    688                                     IFP_L0_BUS_SECTION_16BITfmt,
    689                                     ZONE_4_MATCH_IDf,
    690                                     &z4_match_id_offset[0], &z4_match_id_pos[0]);
    691     BCM_IF_ERROR_RETURN(rv);
    692 
    693     rv = _field_ifp_base_offset_get(unit,
    694                                     IFP_L0_BUS_SECTION_16BITfmt,
    695                                     OPAQUE_1f,
    696                                     &opaque1_offset, &opaque1_pos);
    697     BCM_IF_ERROR_RETURN(rv);
    698 
    699     rv = _field_ifp_base_offset_get(unit,
    700                                     IFP_L0_BUS_SECTION_16BITfmt,
    701                                     OPAQUE_2f,
    702                                     &opaque2_offset, &opaque2_pos);
    703     BCM_IF_ERROR_RETURN(rv);
    704 
    705     rv = _field_ifp_base_offset_get(unit,
    706                                     IFP_L0_BUS_SECTION_16BITfmt,
    707                                     OPAQUE_3f,
    708                                     &opaque3_offset, &opaque3_pos);
    709     BCM_IF_ERROR_RETURN(rv);
    710 
    711     rv = _field_ifp_base_offset_get(unit,
    712                                     IFP_L0_BUS_SECTION_16BITfmt,
    713                                     OPAQUE_4f,
    714                                     &opaque4_offset, &opaque4_pos);
    715     BCM_IF_ERROR_RETURN(rv);
    716 
    717     rv = _field_ifp_base_offset_get(unit,
    718                                     IFP_L0_BUS_SECTION_16BITfmt,
    719                                     PARSER_1_FLEX_HVE_CHECK_RESULT_15_0f,
    720                                     &parser1_flex_hve_chk_offset,
    721                                     &parser1_flex_hve_chk_pos);
    722     BCM_IF_ERROR_RETURN(rv);
    723 
    724     rv = _field_ifp_base_offset_get(unit,
    725                                     IFP_L0_BUS_SECTION_16BITfmt,
    726                                     PARSER_2_FLEX_HVE_CHECK_RESULT_15_0f,
    727                                     &parser2_flex_hve_chk_offset,
    728                                     &parser2_flex_hve_chk_pos);
    729     BCM_IF_ERROR_RETURN(rv);
    730 
    731     rv = _field_ifp_base_offset_get(unit,
    732                                     IFP_L0_BUS_SECTION_16BITfmt,
    733                                     PKT_FLOW_ID_2f,
    734                                     &pkt_flow_id_2_offset,
    735                                     &pkt_flow_id_2_pos);
    736     BCM_IF_ERROR_RETURN(rv);
    737 
    738     rv = _field_ifp_base_offset_get(unit,
    739                                     IFP_L0_BUS_SECTION_32BITfmt,
    740                                     UDF_1_CHUNK_5_4f,
    741                                     &udf_1_chunk_5_4_offset,
    742                                     &udf_1_chunk_5_4_pos);
    743     BCM_IF_ERROR_RETURN(rv);
    744 
    745     /***** 8-bit Extractors *****/
    746     rv = _field_ifp_base_offset_get(unit,
    747                                     IFP_L0_BUS_SECTION_8BITfmt,
    748                                     ZONE_0_MATCH_IDf,
    749                                     &z0_match_id_offset[1],
    750                                     &z0_match_id_pos[1]);
    751     BCM_IF_ERROR_RETURN(rv);
    752 
    753     rv = _field_ifp_base_offset_get(unit,
    754                                     IFP_L0_BUS_SECTION_8BITfmt,
    755                                     ZONE_1_MATCH_ID_7_0f,
    756                                     &z1_match_id_offset[1],
    757                                     &z1_match_id_pos[1]);
    758     BCM_IF_ERROR_RETURN(rv);
    759 
    760     rv = _field_ifp_base_offset_get(unit,
    761                                     IFP_L0_BUS_SECTION_8BITfmt,
    762                                     ZONE_2_MATCH_ID_7_0f,
    763                                     &z2_match_id_offset[1],
    764                                     &z2_match_id_pos[1]);
    765     BCM_IF_ERROR_RETURN(rv);
    766 
    767     rv = _field_ifp_base_offset_get(unit,
    768                                     IFP_L0_BUS_SECTION_8BITfmt,
    769                                     ZONE_3_MATCH_ID_7_0f,
    770                                     &z3_match_id_offset[1],
    771                                     &z3_match_id_pos[1]);
    772     BCM_IF_ERROR_RETURN(rv);
    773 
    774     rv = _field_ifp_base_offset_get(unit,
    775                                     IFP_L0_BUS_SECTION_8BITfmt,
    776                                     ZONE_4_MATCH_ID_7_0f,
    777                                     &z4_match_id_offset[1],
    778                                     &z4_match_id_pos[1]);
    779     BCM_IF_ERROR_RETURN(rv);
    780 
    781     /***** 4-bit Extractors *****/
    782     rv = _field_ifp_base_offset_get(unit,
    783                                     IFP_L0_BUS_SECTION_4BITfmt,
    784                                     ZONE_2_MATCH_ID_11_8f,
    785                                     &z2_match_id_offset[2],
    786                                     &z2_match_id_pos[2]);
    787     BCM_IF_ERROR_RETURN(rv);
    788     rv = _field_ifp_base_offset_get(unit,
    789                                     IFP_L0_BUS_SECTION_4BITfmt,
    790                                     ZONE_4_MATCH_ID_11_8f,
    791                                     &z4_match_id_offset[2],
    792                                     &z4_match_id_pos[2]);
    793     BCM_IF_ERROR_RETURN(rv);
    794 
    795     if (fp_flex_db[unit].flex_data == NULL) {
    796        return BCM_E_INTERNAL;
    797     }
    798 
    799     sal_memset(&qual_flags, 0, sizeof(bcmi_keygen_qual_flags_bmp_t));
    800 
    801     for (extr = 0; extr < 4; extr++) {
    802        flex_db = fp_flex_db[unit].flex_data;
    803 
    804        for (; flex_db != NULL; flex_db = flex_db->next) {
    805            if (0 == extr) {
    806               if (0 == flex_db->thirtytwo_bit_ext_valid) {
    807                  continue;
    808               }
    809               ext_sel = BCMI_KEYGEN_EXT_SECTION_L1E32;
    810            } else if (1 == extr) {
    811               if (0 == flex_db->sixteen_bit_ext_valid) {
    812                  continue;
    813               }
    814               ext_sel = BCMI_KEYGEN_EXT_SECTION_L1E16;
    815            } else if (2 == extr) {
    816               if (0 == flex_db->eight_bit_ext_valid) {
    817                  continue;
    818               }
    819               ext_sel = BCMI_KEYGEN_EXT_SECTION_L1E8;
    820            } else if (3 == extr) {
    821               if (0 == flex_db->four_bit_ext_valid) {
    822                  continue;
    823               }
    824               ext_sel = BCMI_KEYGEN_EXT_SECTION_L1E4;
    825            }
    826 
    827            valid_field = 0;
    828            for (obj_ct = 0; obj_ct < flex_db->num_obj; obj_ct++) {
    829                if (sal_strcmp(flex_db->obj_str_arr[obj_ct], "Z0_MATCH_ID") == 0) {
    830                    field_pos[obj_ct] = z0_match_id_pos[extr-1];
    831                    field_offset[obj_ct] = z0_match_id_offset[extr-1];
    832                    valid_field = 1;
    833                } else if (sal_strcmp(flex_db->obj_str_arr[obj_ct], "Z1_MATCH_ID") == 0) {
    834                    field_pos[obj_ct] = z1_match_id_pos[extr-1];
    835                    field_offset[obj_ct] = z1_match_id_offset[extr-1];
    836                    valid_field = 1;
    837                } else if (sal_strcmp(flex_db->obj_str_arr[obj_ct], "Z2_MATCH_ID") == 0) {
    838                    field_pos[obj_ct] = z2_match_id_pos[extr-1];
    839                    field_offset[obj_ct] = z2_match_id_offset[extr-1];
    840                    valid_field = 1;
    841                } else if (sal_strcmp(flex_db->obj_str_arr[obj_ct], "Z3_MATCH_ID") == 0) {
    842                    field_pos[obj_ct] = z3_match_id_pos[extr-1];
    843                    field_offset[obj_ct] = z3_match_id_offset[extr-1];
    844                    valid_field = 1;
    845                } else if (sal_strcmp(flex_db->obj_str_arr[obj_ct], "Z4_MATCH_ID") == 0) {
    846                    field_pos[obj_ct] = z4_match_id_pos[extr-1];
    847                    field_offset[obj_ct] = z4_match_id_offset[extr-1];
    848                    valid_field = 1;
    849                } else if (sal_strcmp(flex_db->obj_str_arr[obj_ct], "OPAQUE_1") == 0) {
    850                    field_pos[obj_ct] = opaque1_pos;
    851                    field_offset[obj_ct] = opaque1_offset;
    852                    valid_field = 1;
    853                } else if (sal_strcmp(flex_db->obj_str_arr[obj_ct], "OPAQUE_2") == 0) {
    854                    field_pos[obj_ct] = opaque2_pos;
    855                    field_offset[obj_ct] = opaque2_offset;
    856                    valid_field = 1;
    857                } else if (sal_strcmp(flex_db->obj_str_arr[obj_ct], "OPAQUE_3") == 0) {
    858                    field_pos[obj_ct] = opaque3_pos;
    859                    field_offset[obj_ct] = opaque3_offset;
    860                    valid_field = 1;
    861                } else if (sal_strcmp(flex_db->obj_str_arr[obj_ct], "OPAQUE_4") == 0) {
    862                    field_pos[obj_ct] = opaque4_pos;
    863                    field_offset[obj_ct] = opaque4_offset;
    864                    valid_field = 1;
    865                } else if (sal_strcmp(flex_db->obj_str_arr[obj_ct], "PARSER_1_FLEX_HVE_CHECK_RESULT_15_0") == 0) {
    866                    field_pos[obj_ct] = parser1_flex_hve_chk_pos;
    867                    field_offset[obj_ct] = parser1_flex_hve_chk_offset;
    868                    valid_field = 1;
    869                } else if (sal_strcmp(flex_db->obj_str_arr[obj_ct], "PARSER_2_FLEX_HVE_CHECK_RESULT_15_0") == 0) {
    870                    field_pos[obj_ct] = parser2_flex_hve_chk_pos;
    871                    field_offset[obj_ct] = parser2_flex_hve_chk_offset;
    872                    valid_field = 1;
    873                } else if (sal_strcmp(flex_db->obj_str_arr[obj_ct], "PKT_FLOW_ID_2") == 0) {
    874                    field_pos[obj_ct] = pkt_flow_id_2_pos;
    875                    field_offset[obj_ct] = pkt_flow_id_2_offset;
    876                    valid_field = 1;
    877                } else if (0 == sal_strcmp(flex_db->obj_str_arr[obj_ct], "UDF_1_CHUNK_4")) {
    878                    field_pos[obj_ct] = udf_1_chunk_5_4_pos;
    879                    field_offset[obj_ct] = udf_1_chunk_5_4_offset;
    880                    valid_field = 1;
    881                } else if (0 == sal_strcmp(flex_db->obj_str_arr[obj_ct], "UDF_1_CHUNK_5")) {
    882                    field_pos[obj_ct] = udf_1_chunk_5_4_pos;
    883                    field_offset[obj_ct] = udf_1_chunk_5_4_offset + 16;
    884                    valid_field = 1;
    885                }
    886            }
    887 
    888            if (valid_field == 0) {
    889               continue;
    890            }
    891 
    892            if (flex_db->num_obj == 1) {
    893                BCMI_KEYGEN_QUAL_CFG_INIT(unit);
    894                BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(
    895                                 0, ext_sel, field_pos[0],
    896                                 flex_db->ceh_info[0].offset + field_offset[0],
    897                                 flex_db->ceh_info[0].width);
    898                BCMI_KEYGEN_QUAL_CFG_INSERT(unit, stage_fc->qual_cfg_info_db,
    899                                            flex_db->qual, qual_flags);
    900 
    901                LOG_DEBUG(BSL_LS_BCM_FP, (BSL_META_U(unit,
    902                         "%20s :: [%d] pos:%d offset:%d width:%d field_offset:%d\n\r"),
    903                          _field_qual_name(flex_db->qual), extr, field_pos[0],
    904                          flex_db->ceh_info[0].offset,
    905                          flex_db->ceh_info[0].width, field_offset[0]));
    906            } else if (flex_db->num_obj == 2) {
    907                BCMI_KEYGEN_QUAL_CFG_INIT(unit);
    908                BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(
    909                                  0, ext_sel, field_pos[0],
    910                                  flex_db->ceh_info[0].offset + field_offset[0],
    911                                  flex_db->ceh_info[0].width);
    912                BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(
    913                                  1, ext_sel, field_pos[1],
    914                                  flex_db->ceh_info[1].offset + field_offset[1],
    915                                  flex_db->ceh_info[1].width);
    916                BCMI_KEYGEN_QUAL_CFG_INSERT(unit, stage_fc->qual_cfg_info_db,
    917                                  flex_db->qual, qual_flags);
    918 
    919                LOG_DEBUG(BSL_LS_BCM_FP, (BSL_META_U(unit,
    920                         "%20s :: [%d] pos0:%d pos1:%d off0:%d width0:%d off1:%d"
    921                         " width1:%d field_offset0:%d field_offset1:%d\n\r"),
    922                         _field_qual_name(flex_db->qual), extr,
    923                         field_pos[0],
    924                         field_pos[1],
    925                         flex_db->ceh_info[0].offset,
    926                         flex_db->ceh_info[0].width,
    927                         flex_db->ceh_info[1].offset,
    928                         flex_db->ceh_info[1].width,
    929                         field_offset[0],
    930                         field_offset[1]));
    931            } else {
    932                return BCM_E_INTERNAL;
    933            }
    934        }
    935     }
    936 
    937     /******** 8-bit + 4-bit section *******/
    938     {
    939        soc_cancun_ceh_field_info_t ceh_info[3];
    940 
    941        /* ZONE_2_MATCH_ID_7_0 + ZONE_2_MATCH_ID_11_8 */
    942        rv = soc_cancun_ceh_obj_field_get(unit, "Z2_MATCH_ID", "IPV4", &ceh_info[0]);
    943        BCM_IF_ERROR_RETURN(rv);
    944        rv = soc_cancun_ceh_obj_field_get(unit, "Z2_MATCH_ID", "IPV6", &ceh_info[1]);
    945        BCM_IF_ERROR_RETURN(rv);
    946        rv = soc_cancun_ceh_obj_field_get(unit, "Z2_MATCH_ID", "AH", &ceh_info[2]);
    947        BCM_IF_ERROR_RETURN(rv);
    948 
    949        BCMI_KEYGEN_QUAL_CFG_INIT(unit);
    950        BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(
    951                                  0, BCMI_KEYGEN_EXT_SECTION_L1E8,
    952                                  z2_match_id_pos[1],
    953                                  ceh_info[0].offset + z2_match_id_offset[1],
    954                                  ceh_info[0].width);
    955        BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(
    956                                  1, BCMI_KEYGEN_EXT_SECTION_L1E4, z2_match_id_pos[2],
    957                                  ceh_info[2].offset + z2_match_id_offset[2],
    958                                  ceh_info[2].width);
    959        BCMI_KEYGEN_QUAL_CFG_INSERT(
    960                                  unit, stage_fc->qual_cfg_info_db,
    961                                  bcmFieldQualifyIpv4OptionHdrType,
    962                                  qual_flags);
    963 
    964        BCMI_KEYGEN_QUAL_CFG_INIT(unit);
    965        BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(
    966                                  0, BCMI_KEYGEN_EXT_SECTION_L1E8,
    967                                  z2_match_id_pos[1],
    968                                  ceh_info[1].offset + z2_match_id_offset[1],
    969                                  ceh_info[1].width);
    970        BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(
    971                                  1, BCMI_KEYGEN_EXT_SECTION_L1E4,
    972                                  z2_match_id_pos[2],
    973                                  ceh_info[2].offset + z2_match_id_offset[2],
    974                                  ceh_info[2].width);
    975        BCMI_KEYGEN_QUAL_CFG_INSERT(
    976                                  unit, stage_fc->qual_cfg_info_db,
    977                                  bcmFieldQualifyIpv6ExtensionHdrType,
    978                                  qual_flags);
    979 
    980        /* ZONE_4_MATCH_ID_7_0 + ZONE_4_MATCH_ID_11_8 */
    981        rv = soc_cancun_ceh_obj_field_get(unit, "Z4_MATCH_ID", "IPV4", &ceh_info[0]);
    982        BCM_IF_ERROR_RETURN(rv);
    983        rv = soc_cancun_ceh_obj_field_get(unit, "Z4_MATCH_ID", "IPV6", &ceh_info[1]);
    984        BCM_IF_ERROR_RETURN(rv);
    985        rv = soc_cancun_ceh_obj_field_get(unit, "Z4_MATCH_ID", "AH", &ceh_info[2]);
    986        BCM_IF_ERROR_RETURN(rv);
    987 
    988        BCMI_KEYGEN_QUAL_CFG_INIT(unit);
    989        BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(
    990                                  0, BCMI_KEYGEN_EXT_SECTION_L1E8,
    991                                  z4_match_id_pos[1],
    992                                  ceh_info[0].offset + z4_match_id_offset[1],
    993                                  ceh_info[0].width);
    994        BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(
    995                                  1, BCMI_KEYGEN_EXT_SECTION_L1E4,
    996                                  z4_match_id_pos[2],
    997                                  ceh_info[2].offset + z4_match_id_offset[2],
    998                                  ceh_info[2].width);
    999        BCMI_KEYGEN_QUAL_CFG_INSERT(
   1000                                  unit, stage_fc->qual_cfg_info_db,
   1001                                  bcmFieldQualifyOverlayIpv4OptionHdrType,
   1002                                  qual_flags);
   1003 
   1004        BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   1005        BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(
   1006                                  0, BCMI_KEYGEN_EXT_SECTION_L1E8,
   1007                                  z4_match_id_pos[1],
   1008                                  ceh_info[1].offset + z4_match_id_offset[1],
   1009                                  ceh_info[1].width);
   1010        BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(
   1011                                  1, BCMI_KEYGEN_EXT_SECTION_L1E4,
   1012                                  z4_match_id_pos[2],
   1013                                  ceh_info[2].offset + z4_match_id_offset[2],
   1014                                  ceh_info[2].width);
   1015        BCMI_KEYGEN_QUAL_CFG_INSERT(
   1016                                  unit, stage_fc->qual_cfg_info_db,
   1017                                  bcmFieldQualifyOverlayIpv6ExtensionHdrType,
   1018                                  qual_flags);
   1019 
   1020     }
   1021 
   1022 exit:
   1023     BCMI_KEYGEN_FUNC_EXIT();
   1024 }
   1025 
   1026 /*
   1027  * Function: _field_td3_flex_ingress_qualifiers_init
   1028  * Purpose:  Initialize Field Flex Ingress Stage Qualifiers.
   1029  */
   1030 int
   1031 _field_td3_flex_ingress_qualifiers_init(int unit, _field_stage_t *stage_fc)
   1032 {
   1033     int rv;
   1034 
   1035     /* Input parameters check. */
   1036     if (NULL == stage_fc) {
   1037         return (BCM_E_PARAM);
   1038     }
   1039 
   1040     rv = _field_td3_flex_extractor_qual_init(unit, stage_fc);
   1041     return rv;
   1042 }
   1043 
   1044 
   1045 /*
   1046  * Function:
   1047  *    _field_td3_ingress_action_profiles_init
   1048  * Purpose:
   1049  *   Initialize action profiles based on group operational mode.
   1050  * Parameters:
   1051  *     unit - (IN) BCM device number.
   1052  *     stage_fc - (IN/OUT) Stage field control structure.
   1053  *
   1054  * Returns:
   1055  *    BCM_E_PARAM - Null field control structure or stage control parameter.
   1056  *    BCM_E_INTERNAL - Null stage slice control structure.
   1057  *    BCM_E_MEMORY - Allocation failure.
   1058  *    BCM_E_NONE - Success.
   1059  */
   1060 int
   1061 _field_td3_ingress_action_profiles_init(int unit, _field_stage_t *stage_fc)
   1062 {
   1063     soc_mem_t mem;               /* SOC memory names.         */
   1064     int entry_words;             /* Entry size in words.      */
   1065     int inst;                    /* Instance iterator.        */
   1066     int rv;                      /* Operation return status.  */
   1067 
   1068     /* Input parameter check. */
   1069     if (NULL == stage_fc) {
   1070         return (BCM_E_PARAM);
   1071     }
   1072 
   1073     /* Applicable only for Ingress Stage */
   1074     if (stage_fc->stage_id != _BCM_FIELD_STAGE_INGRESS) {
   1075         return (BCM_E_NONE);
   1076     }
   1077 
   1078     switch (stage_fc->oper_mode) {
   1079 
   1080         /* Field Groups operational in Global mode. */
   1081         case bcmFieldGroupOperModeGlobal:
   1082 
   1083             /* Initialize action profile memory name. */
   1084             mem = IFP_POLICY_ACTION_PROFILEm;
   1085 
   1086             /* Determine action profile entry size in number of words. */
   1087             entry_words = soc_mem_entry_words(unit, mem);
   1088 
   1089             /* Create action program profile table. */
   1090             rv = soc_profile_mem_create(unit, &mem, &entry_words, 1,
   1091                     &stage_fc->action_profile[_FP_DEF_INST]);
   1092 
   1093             if (BCM_FAILURE(rv)) {
   1094                 LOG_ERROR(BSL_LS_BCM_FP, (BSL_META_U(unit,
   1095                    "FP(unit %d) Error: action profile creation failed."
   1096                    "=%d\n"), unit, rv));
   1097                 return (rv);
   1098             }
   1099             break;
   1100 
   1101         /* Field Groups operational in Per-Pipe mode. */
   1102         case bcmFieldGroupOperModePipeLocal:
   1103 
   1104             /* Determine action profiles entry size in number of words. */
   1105             entry_words = soc_mem_entry_words(unit,
   1106                                  IFP_POLICY_ACTION_PROFILE_PIPE0m);
   1107 
   1108             for (inst = 0; inst < stage_fc->num_instances; inst++) {
   1109 
   1110                 /* Initialize action program profile memory name. */
   1111                 rv = _bcm_field_mem_instance_get(unit,
   1112                                                    IFP_POLICY_ACTION_PROFILEm,
   1113                                                    inst,
   1114                                                    &mem);
   1115 
   1116                 if (BCM_FAILURE(rv)) {
   1117                     LOG_ERROR(BSL_LS_BCM_FP, (BSL_META_U(unit,
   1118                        "FP(unit %d) Error: Action Profile mem instance"
   1119                        " get failed"
   1120                        "=%d\n"), unit, rv));
   1121                     return (rv);
   1122                 }
   1123 
   1124                 /* Create action program profile table. */
   1125                 rv = soc_profile_mem_create(unit, &mem, &entry_words, 1,
   1126                         &stage_fc->action_profile[inst]);
   1127 
   1128                 if (BCM_FAILURE(rv)) {
   1129                     LOG_ERROR(BSL_LS_BCM_FP, (BSL_META_U(unit,
   1130                        "FP(unit %d) Error: action profile creation failed."
   1131                        "=%d\n"), unit, rv));
   1132                     return (rv);
   1133                 }
   1134             }
   1135             break;
   1136 
   1137         default:
   1138             /*
   1139              * Invalid Group Operational mode, should never hit this condition.
   1140              */
   1141             return (BCM_E_INTERNAL);
   1142     }
   1143 
   1144     return (BCM_E_NONE);
   1145 }
   1146 
   1147 STATIC int
   1148 _field_td3_flex_actions_init(int unit, _field_stage_t *stage_fc)
   1149 {
   1150     int rv1 = BCM_E_UNAVAIL, rv2 = BCM_E_UNAVAIL;
   1151     _FP_ACTION_DECL
   1152     uint8 extr_valid = 0;
   1153     uint8 edit_valid = 0;
   1154     soc_cancun_ceh_field_info_t ceh_info;
   1155     soc_cancun_ceh_field_info_t ceh_info1;
   1156 
   1157     rv1 = soc_cancun_ceh_obj_field_get(unit, "EDIT_CTRL_ID", "INT_ENABLE",
   1158                                               &ceh_info);
   1159     rv2 = soc_cancun_ceh_obj_field_get(unit, "EXTRACTION_CTRL_ID", "INT_ENABLE",
   1160                                               &ceh_info);
   1161     if (SOC_SUCCESS(rv1) && SOC_SUCCESS(rv2)) {
   1162        rv1 = soc_cancun_ceh_obj_field_get(unit, "EDIT_CTRL_ID", "INT_ENABLE_MASK",
   1163                                               &ceh_info);
   1164        rv2 = soc_cancun_ceh_obj_field_get(unit, "EXTRACTION_CTRL_ID", "INT_ENABLE_MASK",
   1165                                               &ceh_info);
   1166        if (SOC_SUCCESS(rv1) && SOC_SUCCESS(rv2)) {
   1167           /* INT Encap Enable Action */
   1168           _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionIntEncapEnable,
   1169                                      0, _FieldActionSetNone, 0, 0, -1);
   1170           extr_valid = 1;
   1171           edit_valid = 1;
   1172        }
   1173     }
   1174 
   1175     if (SOC_SUCCESS(rv2)) {
   1176        /* INT Encap Update Action */
   1177        _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionIntEncapUpdate,
   1178                                     0, _FieldActionSetNone, 0, 0, -1);
   1179        extr_valid = 1;
   1180     }
   1181   
   1182     rv1 = soc_cancun_ceh_obj_field_get(unit, "EDIT_CTRL_ID", "INT_TURNAROUND",
   1183                                               &ceh_info);
   1184     rv2 = soc_cancun_ceh_obj_field_get(unit, "EDIT_CTRL_ID", "INT_TURNAROUND_MASK",
   1185                                               &ceh_info);
   1186     if (SOC_SUCCESS(rv1) && SOC_SUCCESS(rv2)) {
   1187        /* INT TurnAround Action */
   1188        _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionIntTurnAround,
   1189                                      0, _FieldActionSetNone, 0, 0, -1);
   1190        edit_valid = 1;
   1191     }
   1192 
   1193     rv1 = soc_cancun_ceh_obj_field_get(unit, "EXTRACTION_CTRL_ID", "PRESERVE_INCOMING_OTAG",
   1194                                               &ceh_info);
   1195     rv2 = soc_cancun_ceh_obj_field_get(unit, "EXTRACTION_CTRL_ID", "PRESERVE_INCOMING_OTAG_MASK",
   1196                                               &ceh_info);
   1197     if ((BCM_E_NOT_FOUND == rv1) && (BCM_E_NOT_FOUND == rv2)) { 
   1198         rv1 = soc_cancun_ceh_obj_field_get(unit, "EXTRACTION_CTRL_ID", "ADD_ING_OTAG_TO_EGR_OTAG",
   1199                                                   &ceh_info);
   1200         rv2 = soc_cancun_ceh_obj_field_get(unit, "EXTRACTION_CTRL_ID", "ADD_ING_OTAG_TO_EGR_OTAG_MASK",
   1201                                                   &ceh_info);
   1202     }
   1203     if (SOC_SUCCESS(rv1) && SOC_SUCCESS(rv2)) {
   1204        /* bcmFieldActionAddIngOuterVlanToEgrOuterVlan Action */
   1205        _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionAddIngOuterVlanToEgrOuterVlan,
   1206                                      0, _FieldActionSetNone, 0, 0, -1);
   1207        extr_valid = 1;
   1208     }
   1209 
   1210     rv1 = soc_cancun_ceh_obj_field_get(unit, "EXTRACTION_CTRL_ID", "GBP_PRESENT_IN_PKT",
   1211                                               &ceh_info);
   1212     rv2 = soc_cancun_ceh_obj_field_get(unit, "EXTRACTION_CTRL_ID", "GBP_PRESENT_IN_PKT_MASK",
   1213                                               &ceh_info);
   1214     if (SOC_SUCCESS(rv1) && SOC_SUCCESS(rv2)) {
   1215        /* bcmFieldActionGbpClassifierAdd Action */
   1216        _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionGbpClassifierAdd,
   1217                                      0, _FieldActionSetNone, 0, 0, -1);
   1218        extr_valid = 1;
   1219     }
   1220 
   1221 
   1222     rv1 = soc_cancun_ceh_obj_field_get(unit, "EXTRACTION_CTRL_ID", "GBP_SID_DID_CHECK",
   1223                                               &ceh_info);
   1224     rv2 = soc_cancun_ceh_obj_field_get(unit, "EXTRACTION_CTRL_ID", "GBP_SID_DID_CHECK_MASK",
   1225                                               &ceh_info);
   1226     if (SOC_SUCCESS(rv1) && SOC_SUCCESS(rv2)) {
   1227        /* bcmFieldActionGbpSrcMacMcastBitSet Action */
   1228        _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionGbpSrcMacMcastBitSet,
   1229                                      0, _FieldActionSetNone, 0, 0, -1);
   1230        extr_valid = 1;
   1231     }
   1232 
   1233     if (SOC_IS_TRIDENT3X(unit)) {
   1234        /* bcmFieldActionErspan3HdrVlanCosPktCopy Action */
   1235        _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionErspan3HdrVlanCosPktCopy,
   1236                                      0, _FieldActionSetNone, 0, 0, -1);
   1237     }
   1238 
   1239     rv1 = soc_cancun_ceh_obj_field_get(unit, "EDIT_CTRL_ID", "ADD_NSH",
   1240                                               &ceh_info);
   1241     rv2 = soc_cancun_ceh_obj_field_get(unit, "EXTRACTION_CTRL_ID", "SPID_SI_LOOKUP_ENABLE",
   1242                                               &ceh_info);
   1243     if (SOC_SUCCESS(rv1) && SOC_SUCCESS(rv2)) {
   1244        rv1 = soc_cancun_ceh_obj_field_get(unit, "EDIT_CTRL_ID", "ADD_NSH_MASK",
   1245                                               &ceh_info);
   1246        rv2 = soc_cancun_ceh_obj_field_get(unit, "EXTRACTION_CTRL_ID", "SPID_SI_LOOKUP_ENABLE_MASK",
   1247                                               &ceh_info);
   1248        if (SOC_SUCCESS(rv1) && SOC_SUCCESS(rv2)) {
   1249           /* NSH Encap Enable Action */
   1250           _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionNshEncapEnable,
   1251                                      0, _FieldActionSetNone, 0, 0, -1);
   1252           extr_valid = 1;
   1253           edit_valid = 1;
   1254        }
   1255     }
   1256 
   1257     if (extr_valid == 1) {
   1258        /* EXTRACTION_CTRL_ID_ACTION_SET */
   1259        _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, _bcmFieldActionExtractionCtrlId,
   1260                                      0, _FieldActionExtractionCtrlIdActionSet, 0, 16, -1);
   1261     }
   1262 
   1263     if (edit_valid == 1) {
   1264        /* EDIT_CTRL_ID_ACTION_SET */
   1265        _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, _bcmFieldActionEditCtrlId,
   1266                                      0, _FieldActionEditCtrlIdSet, 0, 16, -1);
   1267     }
   1268 
   1269     rv1 = soc_cancun_ceh_obj_field_get(unit, "OPAQUE_2", "SPID_7_0",
   1270                                               &ceh_info);
   1271     rv2 = soc_cancun_ceh_obj_field_get(unit, "OPAQUE_1", "SPID_23_8",
   1272                                               &ceh_info1);
   1273     if (SOC_SUCCESS(rv1) && SOC_SUCCESS(rv2)) {
   1274         _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, _bcmFieldActionOpaque1,
   1275                                      0, _FieldActionOpaque1ActionSet, 0, 16, -1);
   1276         _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, _bcmFieldActionOpaque2,
   1277                                      0, _FieldActionOpaque2ActionSet, 0, 16, -1);
   1278         _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionNshServicePathId,
   1279                                      0, _FieldActionSetNone,
   1280                                      ceh_info.offset,
   1281                                      ceh_info.width, -1,
   1282                                      ceh_info1.offset,
   1283                                      ceh_info1.width, -1);
   1284     }
   1285 
   1286     rv1 = soc_cancun_ceh_obj_field_get(unit, "OPAQUE_1", "GBP_SID",
   1287                                               &ceh_info);
   1288     if (SOC_SUCCESS(rv1)) {
   1289         _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, _bcmFieldActionOpaque1,
   1290                                      0, _FieldActionOpaque1ActionSet, 0, 16, -1);
   1291         _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc,
   1292                                      bcmFieldActionGbpSrcIdNew, 0,
   1293                                      _FieldActionSetNone,
   1294                                      ceh_info.offset,
   1295                                      ceh_info.width, -1);
   1296     }
   1297 
   1298     rv1 = soc_cancun_ceh_obj_field_get(unit, "OPAQUE_1", "LARGE_SCALE_NAT_DST_EDIT_INDEX",
   1299                                               &ceh_info);
   1300     if (SOC_SUCCESS(rv1)) {
   1301         _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, _bcmFieldActionOpaque1,
   1302                                      0, _FieldActionOpaque1ActionSet, 0, 16, -1);
   1303         _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc,
   1304                                      bcmFieldActionAssignNatClassId, 0,
   1305                                      _FieldActionSetNone,
   1306                                      ceh_info.offset,
   1307                                      ceh_info.width, -1);
   1308     }
   1309     rv1 = soc_cancun_ceh_obj_field_get(unit, "OPAQUE_2", "GBP_DID",
   1310                                               &ceh_info);
   1311     if (SOC_SUCCESS(rv1)) {
   1312         _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, _bcmFieldActionOpaque2,
   1313                                      0, _FieldActionOpaque2ActionSet, 0, 16, -1);
   1314         _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc,
   1315                                      bcmFieldActionGbpDstIdNew, 0,
   1316                                      _FieldActionSetNone,
   1317                                      ceh_info.offset,
   1318                                      ceh_info.width, -1);
   1319     }
   1320 
   1321     rv1 = soc_cancun_ceh_obj_field_get(unit, "OPAQUE_2", "SI",
   1322                                               &ceh_info);
   1323     if (SOC_SUCCESS(rv1)) {
   1324         _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, _bcmFieldActionOpaque2,
   1325                                      0, _FieldActionOpaque2ActionSet, 0, 16, -1);
   1326         _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc,
   1327                                      bcmFieldActionNshServiceIndex, 0,
   1328                                      _FieldActionSetNone,
   1329                                      ceh_info.offset,
   1330                                      ceh_info.width, -1);
   1331     }
   1332 
   1333     rv1 = soc_cancun_ceh_obj_field_get(unit, "OPAQUE_3", "CHANGE_L2_FIELDS_EDIT_INDEX",
   1334                                               &ceh_info);
   1335     if (SOC_SUCCESS(rv1)) {
   1336         _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, _bcmFieldActionOpaque3,
   1337                                      0, _FieldActionOpaque3ActionSet, 0, 16, -1);
   1338         _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc,
   1339                                      bcmFieldActionAssignChangeL2FieldsClassId, 0,
   1340                                      _FieldActionOpaque3ActionSet,
   1341                                      ceh_info.offset,
   1342                                      ceh_info.width, -1);
   1343     }
   1344     return BCM_E_NONE;
   1345 }
   1346 
   1347 /*
   1348  * Function:
   1349  *     _field_td3_common_actions_init
   1350  * Purpose:
   1351  *     Initialize device stage lookup qaualifiers
   1352  *     select codes & offsets
   1353  * Parameters:
   1354  *     unit       - (IN) BCM device number.
   1355  *     stage_fc   - (IN) Field Processor stage control structure.
   1356  * Returns:
   1357  *     BCM_E_NONE
   1358  */
   1359 int
   1360 _field_td3_common_actions_init(int unit, _field_stage_t *stage_fc)
   1361 {
   1362     _FP_ACTION_DECL
   1363     uint32 offset = 0;                  /* General variable to carry offset. */
   1364     uint32 profile_one_offset = 0;      /* Offset of PROFILE_ONE_SET. */
   1365     uint32 input_priority_set = 0;      /* Offset of CHANGE_INPUT_PRIORITY_SET*/
   1366     uint32 int_cn_set = 0;              /* Offset of CHANGE_INT_CN_SET. */
   1367     uint32 cos_or_int_pri_set = 0;      /* Offset of CHANGE_COS_OR_INT_PRI_SET*/
   1368     uint32 drop_precendence_set = 0;   /* Offset of CHANGE_DROP_PRECEDENCE_SET*/
   1369 
   1370     uint32 profile_two_offset = 0;      /* Offset of PROFILE_TWO_SET. */
   1371     uint32 dscp_tos_set = 0;            /* Offset of CHANGE_DSCP_TOS_SET. */
   1372     uint32 pkt_pri_set = 0;             /* Offset of CHANGE_PKT_PRI_SET. */
   1373     uint32 ecn_set = 0;                 /* Offset of CHANGE_ECN_SET. */
   1374 
   1375     uint32 redirect_offset = 0;         /* Offset of REDIRECT_SET. */
   1376     uint32 l3swl2change_offset = 0;     /* Offset of L3SW_CHANGE_L2_SET. */
   1377     uint32 nat_offset = 0;              /* Offset of NAT_SET. */
   1378     uint32 mirror_offset = 0;           /* Offset of MIRROR_SET. */
   1379     uint32 lb_offset = 0;               /* Offset of LB_CONTROL_SET. */
   1380     uint32 nat_override_offset = 0;     /* Offset of NAT_OVERRIDE_SET. */
   1381     uint32 copytocpu_offset = 0;        /* Offset of COPY_TO_CPU_SET. */
   1382     uint32 cutthrough_offset = 0;       /* Offset of CUT_THRU_OVERRIDE_SET. */
   1383     uint32 urpf_offset = 0;             /* Offset of URPF_OVERRIDE_SET. */
   1384     uint32 ttl_offset = 0;              /* Offset of TTL_SET. */
   1385     uint32 cpucos_offset = 0;           /* Offset of CHANGE_CPU_COS_SET. */
   1386     uint32 drop_offset = 0;             /* Offset of DROP_SET. */
   1387     uint32 mirror_override_offset = 0;  /* Offset of MIRROR_OVERRIDE_SET. */
   1388     uint32 sflow_offset = 0;            /* Offset of SFLOW_SET. */
   1389     uint32 debug_offset = 0;            /* Offset of INSTRUMENTATION_SET */
   1390 
   1391     /* New action sets for TD3 */
   1392 #if 0
   1393     uint32 ifp_meter_set = 0;            /* Offset of METER_SET. */
   1394     uint32 fcoe_vsan_set = 0;            /* Offset of FCOE_VSAN_SET. */
   1395     uint32 edit_ctrl_id_action_set = 0;  /* Offset of EDIT_CTRL_ID_ACTION_SET.*/
   1396     uint32 ifp_counter_set = 0;          /* Offset of COUNTER_SET. */
   1397     uint32 green_to_pid_set = 0;         /* Offset of GREEN_TO_PID_SET. */
   1398     uint32 ignore_fcoe_zone_check_set = 0;
   1399                              /* Offset of IGNORE_FCOE_ZONE_CHECK_SET. */
   1400     uint32 rx_timestamp_insertion_set = 0;
   1401                              /* Offset of RX_TIMESTAMP_INSERTION_SET. */
   1402     uint32 tx_timestamp_insertion_set = 0;
   1403                              /* Offset of TX_TIMESTAMP_INSERTION_SET. */
   1404     uint32 opaque_1_action_set = 0;      /* Offset of OPAQUE_1_ACTION_SET. */
   1405     uint32 opaque_2_action_set = 0;      /* Offset of OPAQUE_2_ACTION_SET. */
   1406     uint32 opaque_3_action_set = 0;      /* Offset of OPAQUE_3_ACTION_SET. */
   1407     uint32 opaque_4_action_set = 0;      /* Offset of OPAQUE_4_ACTION_SET. */
   1408     uint32 loopback_profile_action_set = 0;
   1409                               /* Offset of LOOPBACK_PROFILE_ACTION_SET. */
   1410 #endif
   1411 
   1412     /* Input parameters check. */
   1413     if (NULL == stage_fc) {
   1414         return (BCM_E_PARAM);
   1415     }
   1416 
   1417     if (stage_fc->stage_id == _BCM_FIELD_STAGE_EXACTMATCH) {
   1418         /* Offset of CHANGE_INPUT_PRIORITY_SET within the
   1419            profile_set_1. */
   1420         input_priority_set = 51;
   1421         /* Offset of CHANGE_INT_CN_SET within the
   1422            profile_set_1. */
   1423         int_cn_set = 42;
   1424         /* Offset of CHANGE_COS_OR_INT_PRI_SET within the
   1425            profile_set_1. */
   1426         cos_or_int_pri_set = 6;
   1427         /* Offset of CHANGE_DROP_PRECEDENCE_SET within the
   1428            profile_set_1. */
   1429         drop_precendence_set = 0;
   1430         profile_two_offset= SOC_IS_HELIX5(unit) ? 62 : 56;
   1431         /* Offset of CHANGE_DSCP_TOS_SET within the
   1432            profile_set_2. */
   1433         dscp_tos_set = 27;
   1434         /* Offset of CHANGE_PKT_PRI_SET within the
   1435            profile_set_1. */
   1436         pkt_pri_set = 9;
   1437         /* Offset of CHANGE_ECN_SET within the
   1438            profile_set_2. */
   1439         ecn_set = 0;
   1440     }
   1441 
   1442     /* IFP_PROFILE_SET_1(56b) */
   1443     offset = profile_one_offset + input_priority_set;
   1444     _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionUntaggedPacketPriorityNew,
   1445                                       0, _FieldActionChangeInputPrioritySet,
   1446                                       offset + 1, 4, -1, offset + 0, 1, 1);
   1447 
   1448     offset = profile_one_offset + drop_precendence_set;
   1449     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionRpDropPrecedence,
   1450                                  0, _FieldActionChangeDropPrecendenceSet, offset + 0, 2, -1);
   1451     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionYpDropPrecedence,
   1452                                  0, _FieldActionChangeDropPrecendenceSet, offset + 2, 2, -1);
   1453     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionGpDropPrecedence,
   1454                                  0, _FieldActionChangeDropPrecendenceSet, offset + 4, 2, -1);
   1455     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionDropPrecedence,
   1456                                  0, _FieldActionChangeDropPrecendenceSet,
   1457                                   offset + 4, 2, -1);
   1458 
   1459 
   1460     offset = profile_one_offset + cos_or_int_pri_set;
   1461     if (SOC_IS_HELIX5(unit)) {
   1462         _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionRpCosQNew,
   1463                                                    0, _FieldActionChangeCosOrIntPriSet,
   1464                                                    offset , 10, -1, offset + 30, 4, 1);
   1465         _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionRpCosMapNew,
   1466                                                    0, _FieldActionChangeCosOrIntPriSet,
   1467                                                    offset , 2, -1, offset + 30, 4, 2);
   1468         _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionRpPrioIntCopy,
   1469                                                    0, _FieldActionChangeCosOrIntPriSet,
   1470                                                    offset + 30, 4, 4);
   1471         _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionRpPrioIntNew,
   1472                                                    0, _FieldActionChangeCosOrIntPriSet,
   1473                                                    offset , 8, -1, offset + 30, 4, 5);
   1474         _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionRpPrioIntTos,
   1475                                                    0, _FieldActionChangeCosOrIntPriSet,
   1476                                                    offset + 30, 4, 6);
   1477         _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionRpPrioIntCancel,
   1478                                                    0, _FieldActionChangeCosOrIntPriSet,
   1479                                                    offset + 30, 4, 7);
   1480         _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionRpUcastCosQNew,
   1481                                                    0, _FieldActionChangeCosOrIntPriSet,
   1482                                                    offset , 5, -1, offset + 30, 4, 8);
   1483         _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionRpMcastCosQNew,
   1484                                                    0, _FieldActionChangeCosOrIntPriSet,
   1485                                                    offset + 5, 5, -1, offset + 30, 4, 9);
   1486 
   1487         _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionYpCosQNew,
   1488                                                    0, _FieldActionChangeCosOrIntPriSet,
   1489                                                    offset + 10, 10, -1, offset + 34, 4, 1);
   1490         _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionYpCosMapNew,
   1491                                                    0, _FieldActionChangeCosOrIntPriSet,
   1492                                                    offset + 10, 2, -1, offset + 34, 4, 2);
   1493         _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionYpPrioIntCopy,
   1494                                                    0, _FieldActionChangeCosOrIntPriSet,
   1495                                                    offset + 34, 4, 4);
   1496         _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionYpPrioIntNew,
   1497                                                    0, _FieldActionChangeCosOrIntPriSet,
   1498                                                    offset + 10, 8, -1, offset + 34, 4, 5);
   1499         _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionYpPrioIntTos,
   1500                                                    0, _FieldActionChangeCosOrIntPriSet,
   1501                                                    offset + 34, 4, 6);
   1502         _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionYpPrioIntCancel,
   1503                                                    0, _FieldActionChangeCosOrIntPriSet,
   1504                                                    offset + 34, 4, 7);
   1505         _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionYpUcastCosQNew,
   1506                                                    0, _FieldActionChangeCosOrIntPriSet,
   1507                                                    offset + 10, 5, -1, offset + 34, 4, 8);
   1508         _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionYpMcastCosQNew,
   1509                                                    0, _FieldActionChangeCosOrIntPriSet,
   1510                                                    offset + 15, 5, -1, offset + 34, 4, 9);
   1511 
   1512         _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionGpCosQNew,
   1513                                                    0, _FieldActionChangeCosOrIntPriSet,
   1514                                                    offset + 20, 10, -1, offset + 38, 4, 1);
   1515         _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionGpCosMapNew,
   1516                                                    0, _FieldActionChangeCosOrIntPriSet,
   1517                                                    offset + 20, 2, -1, offset + 38, 4, 2);
   1518         _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionGpPrioIntCopy,
   1519                                                    0, _FieldActionChangeCosOrIntPriSet,
   1520                                                    offset + 38, 4, 4);
   1521         _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionGpPrioIntNew,
   1522                                                    0, _FieldActionChangeCosOrIntPriSet,
   1523                                                    offset + 20, 8, -1, offset + 38, 4, 5);
   1524         _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionGpPrioIntTos,
   1525                                                    0, _FieldActionChangeCosOrIntPriSet,
   1526                                                    offset + 38, 4, 6);
   1527         _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionGpPrioIntCancel,
   1528                                                    0, _FieldActionChangeCosOrIntPriSet,
   1529                                                    offset + 38, 4, 7);
   1530         _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionGpUcastCosQNew,
   1531                                                   0, _FieldActionChangeCosOrIntPriSet,
   1532                                                   offset + 20, 5, -1, offset + 38, 4, 8);
   1533         _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionGpMcastCosQNew,
   1534                                                   0, _FieldActionChangeCosOrIntPriSet,
   1535                                                   offset + 25, 5, -1, offset + 38, 4, 9);
   1536         _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionCosQNew,
   1537                                                   0, _FieldActionChangeCosOrIntPriSet,
   1538                                                   offset + 20, 10, -1, offset + 38, 4, 1);
   1539         _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionPrioIntCopy,
   1540                                                   0, _FieldActionChangeCosOrIntPriSet,
   1541                                                   offset + 38, 4, 4);
   1542         _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionPrioIntNew,
   1543                                                   0, _FieldActionChangeCosOrIntPriSet,
   1544                                                   offset + 20, 10, -1, offset + 38, 4, 5);
   1545         _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionPrioIntTos,
   1546                                                   0, _FieldActionChangeCosOrIntPriSet,
   1547                                                   offset + 38, 4, 6);
   1548         _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionPrioIntCancel,
   1549                                                   0, _FieldActionChangeCosOrIntPriSet,
   1550                                                   offset + 38, 4, 7);
   1551         _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionUcastCosQNew,
   1552                                                   0, _FieldActionChangeCosOrIntPriSet,
   1553                                                   offset + 20, 5, -1, offset + 38, 4, 8);
   1554         _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionMcastCosQNew,
   1555                                                   0, _FieldActionChangeCosOrIntPriSet,
   1556                                                   offset + 25, 5, -1, offset + 38, 4, 9);
   1557     _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionCosMapNew,
   1558                                                   0, _FieldActionChangeCosOrIntPriSet,
   1559                                                   offset + 20, 2, -1, offset + 38, 4, 2);
   1560     } else {
   1561         _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionRpCosQNew,
   1562                                                    0, _FieldActionChangeCosOrIntPriSet,
   1563                                                    offset , 8, -1, offset + 24, 4, 1);
   1564         _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionRpCosMapNew,
   1565                                                    0, _FieldActionChangeCosOrIntPriSet,
   1566                                                    offset , 2, -1, offset + 24, 4, 2);
   1567         _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionRpPrioIntCopy,
   1568                                                    0, _FieldActionChangeCosOrIntPriSet,
   1569                                                    offset + 24, 4, 4);
   1570         _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionRpPrioIntNew,
   1571                                                    0, _FieldActionChangeCosOrIntPriSet,
   1572                                                    offset , 8, -1, offset + 24, 4, 5);
   1573         _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionRpPrioIntTos,
   1574                                                    0, _FieldActionChangeCosOrIntPriSet,
   1575                                                    offset + 24, 4, 6);
   1576         _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionRpPrioIntCancel,
   1577                                                    0, _FieldActionChangeCosOrIntPriSet,
   1578                                                    offset + 24, 4, 7);
   1579         _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionRpUcastCosQNew,
   1580                                                    0, _FieldActionChangeCosOrIntPriSet,
   1581                                                    offset , 4, -1, offset + 24, 4, 8);
   1582         _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionRpMcastCosQNew,
   1583                                                    0, _FieldActionChangeCosOrIntPriSet,
   1584                                                    offset + 4, 4, -1, offset + 24, 4, 9);
   1585 
   1586         _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionYpCosQNew,
   1587                                                    0, _FieldActionChangeCosOrIntPriSet,
   1588                                                    offset + 8, 8, -1, offset + 28, 4, 1);
   1589         _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionYpCosMapNew,
   1590                                                    0, _FieldActionChangeCosOrIntPriSet,
   1591                                                    offset + 8, 2, -1, offset + 28, 4, 2);
   1592         _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionYpPrioIntCopy,
   1593                                                    0, _FieldActionChangeCosOrIntPriSet,
   1594                                                    offset + 28, 4, 4);
   1595         _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionYpPrioIntNew,
   1596                                                    0, _FieldActionChangeCosOrIntPriSet,
   1597                                                    offset + 8, 8, -1, offset + 28, 4, 5);
   1598         _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionYpPrioIntTos,
   1599                                                    0, _FieldActionChangeCosOrIntPriSet,
   1600                                                    offset + 28, 4, 6);
   1601         _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionYpPrioIntCancel,
   1602                                                    0, _FieldActionChangeCosOrIntPriSet,
   1603                                                    offset + 28, 4, 7);
   1604         _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionYpUcastCosQNew,
   1605                                                    0, _FieldActionChangeCosOrIntPriSet,
   1606                                                    offset + 8, 4, -1, offset + 28, 4, 8);
   1607         _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionYpMcastCosQNew,
   1608                                                    0, _FieldActionChangeCosOrIntPriSet,
   1609                                                    offset + 12, 4, -1, offset + 28, 4, 9);
   1610 
   1611         _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionGpCosQNew,
   1612                                                    0, _FieldActionChangeCosOrIntPriSet,
   1613                                                    offset + 16, 8, -1, offset + 32, 4, 1);
   1614         _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionGpCosMapNew,
   1615                                                    0, _FieldActionChangeCosOrIntPriSet,
   1616                                                    offset + 16, 2, -1, offset + 32, 4, 2);
   1617         _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionGpPrioIntCopy,
   1618                                                    0, _FieldActionChangeCosOrIntPriSet,
   1619                                                    offset + 32, 4, 4);
   1620         _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionGpPrioIntNew,
   1621                                                    0, _FieldActionChangeCosOrIntPriSet,
   1622                                                    offset + 16, 8, -1, offset + 32, 4, 5);
   1623         _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionGpPrioIntTos,
   1624                                                    0, _FieldActionChangeCosOrIntPriSet,
   1625                                                    offset + 32, 4, 6);
   1626         _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionGpPrioIntCancel,
   1627                                                    0, _FieldActionChangeCosOrIntPriSet,
   1628                                                    offset + 32, 4, 7);
   1629         _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionGpUcastCosQNew,
   1630                                                   0, _FieldActionChangeCosOrIntPriSet,
   1631                                                   offset + 16, 4, -1, offset + 32, 4, 8);
   1632         _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionGpMcastCosQNew,
   1633                                                   0, _FieldActionChangeCosOrIntPriSet,
   1634                                                   offset + 20, 4, -1, offset + 32, 4, 9);
   1635         _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionCosQNew,
   1636                                                   0, _FieldActionChangeCosOrIntPriSet,
   1637                                                   offset + 16, 8, -1, offset + 32, 4, 1);
   1638         _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionPrioIntCopy,
   1639                                                   0, _FieldActionChangeCosOrIntPriSet,
   1640                                                   offset + 32, 4, 4);
   1641         _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionPrioIntNew,
   1642                                                   0, _FieldActionChangeCosOrIntPriSet,
   1643                                                   offset + 16, 8, -1, offset + 32, 4, 5);
   1644         _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionPrioIntTos,
   1645                                                   0, _FieldActionChangeCosOrIntPriSet,
   1646                                                   offset + 32, 4, 6);
   1647         _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionPrioIntCancel,
   1648                                                   0, _FieldActionChangeCosOrIntPriSet,
   1649                                                   offset + 32, 4, 7);
   1650         _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionUcastCosQNew,
   1651                                                   0, _FieldActionChangeCosOrIntPriSet,
   1652                                                   offset + 16, 4, -1, offset + 32, 4, 8);
   1653         _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionMcastCosQNew,
   1654                                                   0, _FieldActionChangeCosOrIntPriSet,
   1655                                                   offset + 20, 4, -1, offset + 32, 4, 9);
   1656         _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionCosMapNew,
   1657                                                   0, _FieldActionChangeCosOrIntPriSet,
   1658                                                   offset + 16, 2, -1, offset + 32, 4, 2);
   1659     }
   1660 
   1661     if (soc_feature(unit, soc_feature_ecn_wred)) {
   1662     offset = profile_one_offset + int_cn_set;
   1663         _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc,
   1664                            bcmFieldActionGpIntCongestionNotificationNew,
   1665                            _BCM_FIELD_ACTION_NO_EM_SUPPORT,
   1666                            _FieldActionChangeIntCNSet,
   1667                            offset + 4, 2, -1, offset + 8, 1, 1);
   1668         _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc,
   1669                            bcmFieldActionYpIntCongestionNotificationNew,
   1670                            _BCM_FIELD_ACTION_NO_EM_SUPPORT,
   1671                            _FieldActionChangeIntCNSet,
   1672                            offset + 2, 2, -1, offset + 7, 1, 1);
   1673        _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc,
   1674                           bcmFieldActionRpIntCongestionNotificationNew,
   1675                           _BCM_FIELD_ACTION_NO_EM_SUPPORT,
   1676                           _FieldActionChangeIntCNSet,
   1677                           offset, 2, -1, offset + 6, 1, 1);
   1678     }
   1679     if (soc_feature(unit, soc_feature_field_action_pfc_class)) {
   1680        _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc,
   1681                           bcmFieldActionPfcClassNew,
   1682                           0, _FieldActionChangeInputPrioritySet,
   1683                           offset + 1, 4, -1, offset + 0, 1, 1);
   1684     }
   1685 
   1686     /* IFP_MIRROR_SET(12b) */
   1687     offset = mirror_offset;
   1688 
   1689     _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionMirrorIngress,
   1690                                           0, _FieldActionMirrorSet,
   1691                                           offset + 8, 4, 0, offset , 8, 0);
   1692 
   1693     _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionMirrorEgress,
   1694                                           0, _FieldActionMirrorSet,
   1695                                           offset + 8, 4, 0, offset , 8, 0);
   1696 
   1697     /* IFP_LB_CONTROLS_SET(3b) */
   1698     offset = lb_offset;
   1699 
   1700     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc,
   1701                        bcmFieldActionHgTrunkRandomRoundRobinHashCancel,
   1702                        0, _FieldActionLbControlSet,
   1703                        offset + 0, 1, 1);
   1704     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc,
   1705                        bcmFieldActionTrunkRandomRoundRobinHashCancel,
   1706                        0, _FieldActionLbControlSet,
   1707                        offset + 1, 1, 1);
   1708     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc,
   1709                        bcmFieldActionEcmpRandomRoundRobinHashCancel,
   1710                        0, _FieldActionLbControlSet,
   1711                        offset + 2, 1, 1);
   1712 
   1713     /* IFP_NAT_OVERRIDE_SET(1b) */
   1714     offset = nat_override_offset;
   1715 
   1716     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionNatCancel,
   1717                                  0, _FieldActionNatOverrideSet, offset + 0, 1, 1);
   1718     /* IFP_COPY_TO_CPU_SET(17b) */
   1719     offset = copytocpu_offset;
   1720 
   1721     _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionRpCopyToCpu,
   1722                                         0, _FieldActionCopyToCpuSet,
   1723                                         offset + 9, 8, -1, offset + 0, 3, 1);
   1724     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionRpCopyToCpuCancel,
   1725                                         0, _FieldActionCopyToCpuSet,
   1726                                         offset + 0, 3, 2);
   1727     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionRpSwitchToCpuCancel,
   1728                                         0, _FieldActionCopyToCpuSet,
   1729                                         offset + 0, 3, 3);
   1730     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionRpSwitchToCpuReinstate,
   1731                                         0, _FieldActionCopyToCpuSet,
   1732                                         offset + 0, 3, 4);
   1733     _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionRpTimeStampToCpu,
   1734                                         0, _FieldActionCopyToCpuSet,
   1735                                         offset + 9, 8, -1, offset + 0, 3, 5);
   1736 
   1737     _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionYpCopyToCpu,
   1738                                         0, _FieldActionCopyToCpuSet,
   1739                                         offset + 9, 8, -1, offset + 3, 3, 1);
   1740     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionYpCopyToCpuCancel,
   1741                                         0, _FieldActionCopyToCpuSet,
   1742                                         offset + 3, 3, 2);
   1743     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionYpSwitchToCpuCancel,
   1744                                         0, _FieldActionCopyToCpuSet,
   1745                                         offset + 3, 3, 3);
   1746     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionYpSwitchToCpuReinstate,
   1747                                         0, _FieldActionCopyToCpuSet,
   1748                                         offset + 3, 3, 4);
   1749     _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionYpTimeStampToCpu,
   1750                                         0, _FieldActionCopyToCpuSet,
   1751                                         offset + 9, 8, -1, offset + 3, 3, 5);
   1752 
   1753     _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionGpCopyToCpu,
   1754                                         0, _FieldActionCopyToCpuSet,
   1755                                         offset + 9, 8, -1, offset + 6, 3, 1);
   1756     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionGpCopyToCpuCancel,
   1757                                         0, _FieldActionCopyToCpuSet,
   1758                                         offset + 6, 3, 2);
   1759     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionGpSwitchToCpuCancel,
   1760                                         0, _FieldActionCopyToCpuSet,
   1761                                         offset + 6, 3, 3);
   1762     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionGpSwitchToCpuReinstate,
   1763                                         0, _FieldActionCopyToCpuSet,
   1764                                         offset + 6, 3, 4);
   1765     _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionGpTimeStampToCpu,
   1766                                         0, _FieldActionCopyToCpuSet,
   1767                                         offset + 9, 8, -1, offset + 6, 3, 5);
   1768 
   1769     _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionCopyToCpu,
   1770                                         0, _FieldActionCopyToCpuSet,
   1771                                         offset + 9, 8, -1, offset + 6, 3, 1);
   1772     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionCopyToCpuCancel,
   1773                                         0, _FieldActionCopyToCpuSet,
   1774                                         offset + 6, 3, 2);
   1775     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionSwitchToCpuCancel,
   1776                                         0, _FieldActionCopyToCpuSet,
   1777                                         offset + 6, 3, 3);
   1778     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionSwitchToCpuReinstate,
   1779                                         0, _FieldActionCopyToCpuSet,
   1780                                         offset + 6, 3, 4);
   1781     _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionTimeStampToCpu,
   1782                                         0, _FieldActionCopyToCpuSet,
   1783                                         offset + 9, 8, -1, offset + 6, 3, 5);
   1784 #if defined(BCM_HELIX5_SUPPORT)
   1785     if (SOC_IS_HELIX5(unit)) {
   1786         _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionOamCopyToCpu,
   1787                                             0, _FieldActionCopyToCpuSet,
   1788                                             offset + 9, 8, -1, offset + 6, 3, 7);
   1789         _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionGpOamCopyToCpu,
   1790                                             0, _FieldActionCopyToCpuSet,
   1791                                             offset + 9, 8, -1, offset + 6, 3, 7);
   1792         _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionYpOamCopyToCpu,
   1793                                             0, _FieldActionCopyToCpuSet,
   1794                                             offset + 9, 8, -1, offset + 3, 3, 7);
   1795         _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionRpOamCopyToCpu,
   1796                                             0, _FieldActionCopyToCpuSet,
   1797                                             offset + 9, 8, -1, offset + 0, 3, 7);
   1798     }
   1799 #endif /* BCM_HELIX5_SUPPORT */
   1800     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionTimeStampToCpuCancel,
   1801                                         0, _FieldActionCopyToCpuSet, 0, 0, 0);
   1802     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionGpTimeStampToCpuCancel,
   1803                                         0, _FieldActionCopyToCpuSet, 0, 0, 0);
   1804     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionYpTimeStampToCpuCancel,
   1805                                         0, _FieldActionCopyToCpuSet, 0, 0, 0);
   1806     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionRpTimeStampToCpuCancel,
   1807                                         0, _FieldActionCopyToCpuSet, 0, 0, 0);
   1808 
   1809     /* IFP_CUT_THRU_OVERRIDE_SET(1b) */
   1810     offset = cutthrough_offset;
   1811     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionDoNotCutThrough,
   1812                                  0, _FieldActionCutThrOverrideSet, offset + 0, 1, 1);
   1813 
   1814     /* IFP_URPF_OVERRIDE_SET(1b) */
   1815     offset = urpf_offset;
   1816 
   1817     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionDoNotCheckUrpf,
   1818                                  0, _FieldActionUrpfOverrideSet, offset + 0, 1, 1);
   1819 
   1820     /* IFP_TTL_SET(1b) */
   1821     offset = ttl_offset;
   1822 
   1823     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionDoNotChangeTtl,
   1824                                  0, _FieldActionTtlOverrideSet, offset + 0, 1, 1);
   1825 
   1826     /* IFP_PROFILE_SET_2(52b) */
   1827     offset = profile_two_offset + ecn_set;
   1828 
   1829     _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionRpEcnNew,
   1830                                         0, _FieldActionChangeEcnSet,
   1831                                         offset + 0, 2, -1, offset + 6, 1, 1);
   1832     _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionYpEcnNew,
   1833                                         0, _FieldActionChangeEcnSet,
   1834                                         offset + 2, 2, -1, offset + 7, 1, 1);
   1835     _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionGpEcnNew,
   1836                                         0, _FieldActionChangeEcnSet,
   1837                                         offset + 4, 2, -1, offset + 8, 1, 1);
   1838     _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionEcnNew,
   1839                                         0, _FieldActionChangeEcnSet,
   1840                                         offset + 4, 2, -1, offset + 8, 1, 1);
   1841 
   1842 
   1843     offset = profile_two_offset + pkt_pri_set;
   1844 
   1845     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionRpDot1pPreserve,
   1846                                  0, _FieldActionChangePktPriSet, offset + 9, 3, 3);
   1847     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionRpPrioPktCopy,
   1848                                  0, _FieldActionChangePktPriSet, offset + 9, 3, 4);
   1849     _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionRpPrioPktNew,
   1850                                        0, _FieldActionChangePktPriSet,
   1851                                        offset , 3, -1, offset + 9, 3, 5);
   1852     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionRpPrioPktTos,
   1853                                  0, _FieldActionChangePktPriSet, offset + 9, 3, 6);
   1854     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionRpPrioPktCancel,
   1855                                  0, _FieldActionChangePktPriSet, offset + 9, 3, 7);
   1856 
   1857     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionYpDot1pPreserve,
   1858                                  0, _FieldActionChangePktPriSet, offset + 12, 3, 3);
   1859     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionYpPrioPktCopy,
   1860                                  0, _FieldActionChangePktPriSet, offset + 12, 3, 4);
   1861     _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionYpPrioPktNew,
   1862                                  0, _FieldActionChangePktPriSet,
   1863                                  offset + 3, 3, -1, offset + 12, 3, 5);
   1864     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionYpPrioPktTos,
   1865                                  0, _FieldActionChangePktPriSet, offset + 12, 3, 6);
   1866     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionYpPrioPktCancel,
   1867                                  0, _FieldActionChangePktPriSet, offset + 12, 3, 7);
   1868 
   1869     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionGpDot1pPreserve,
   1870                                  0, _FieldActionChangePktPriSet, offset + 15, 3, 3);
   1871     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionGpPrioPktCopy,
   1872                                  0, _FieldActionChangePktPriSet, offset + 15, 3, 4);
   1873     _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionGpPrioPktNew,
   1874                                  0, _FieldActionChangePktPriSet,
   1875                                  offset + 6, 3, -1, offset + 15, 3, 5);
   1876     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionGpPrioPktTos,
   1877                                  0, _FieldActionChangePktPriSet, offset + 15, 3, 6);
   1878     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionGpPrioPktCancel,
   1879                                  0, _FieldActionChangePktPriSet, offset + 15, 3, 7);
   1880     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionPrioPktCopy,
   1881                                  0, _FieldActionChangePktPriSet,
   1882                                  offset + 15, 3, 4);
   1883     _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionPrioPktNew,
   1884                                  0, _FieldActionChangePktPriSet,
   1885                                  offset + 6, 3, -1, offset + 15, 3, 5);
   1886     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionPrioPktTos,
   1887                                  0, _FieldActionChangePktPriSet,
   1888                                  offset + 15, 3, 6);
   1889     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionPrioPktCancel,
   1890                                  0, _FieldActionChangePktPriSet,
   1891                                  offset + 15, 3, 7);
   1892     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionDot1pPreserve,
   1893                                  0, _FieldActionChangePktPriSet,
   1894                                  offset + 15, 3, 3);
   1895 
   1896 
   1897     offset = profile_two_offset + dscp_tos_set;
   1898 
   1899     _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionRpDscpNew,
   1900                                       0, _FieldActionChangeDscpTosSet,
   1901                                       offset + 13, 6, -1, offset , 2, 1);
   1902     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionRpDscpCancel,
   1903                                       0, _FieldActionChangeDscpTosSet,
   1904                                       offset , 2, 2);
   1905     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionRpDscpPreserve,
   1906                                       0, _FieldActionChangeDscpTosSet,
   1907                                       offset , 2, 3);
   1908 
   1909     _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionYpDscpNew,
   1910                                       0, _FieldActionChangeDscpTosSet,
   1911                                       offset + 7, 6, -1, offset + 2, 2, 1);
   1912     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionYpDscpCancel,
   1913                                       0, _FieldActionChangeDscpTosSet,
   1914                                       offset + 2, 2, 2);
   1915     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionYpDscpPreserve,
   1916                                       0, _FieldActionChangeDscpTosSet,
   1917                                       offset + 2, 2, 3);
   1918 
   1919     _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionGpDscpNew,
   1920                                       0, _FieldActionChangeDscpTosSet,
   1921                                       offset + 19, 6, -1, offset + 4, 3, 3);
   1922     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionGpDscpCancel,
   1923                                       0, _FieldActionChangeDscpTosSet,
   1924                                       offset + 4, 3, 4);
   1925     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionGpDscpPreserve,
   1926                                       0, _FieldActionChangeDscpTosSet,
   1927                                       offset + 4, 3, 5);
   1928 
   1929     _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionGpTosPrecedenceNew,
   1930                                       0, _FieldActionChangeDscpTosSet,
   1931                                       offset + 19, 6, -1, offset + 4, 3, 1);
   1932     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionGpTosPrecedenceCopy,
   1933                                       0, _FieldActionChangeDscpTosSet,
   1934                                       offset + 4, 3, 2);
   1935     _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionDscpNew,
   1936                                       0, _FieldActionChangeDscpTosSet,
   1937                                       offset + 19, 6, -1, offset + 4, 3, 3);
   1938     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionDscpCancel,
   1939                                       0, _FieldActionChangeDscpTosSet,
   1940                                       offset + 4, 3, 4);
   1941     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionDscpPreserve,
   1942                                       0, _FieldActionChangeDscpTosSet,
   1943                                       offset + 4, 3, 5);
   1944 
   1945     /* IFP_L3SW_CHANGE_L2_SET(33b) */
   1946     offset = l3swl2change_offset;
   1947     _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionChangeL2Fields,
   1948                                       0, _FieldActionL3SwChangeL2Set,
   1949                                       offset + 0, SOC_IS_HELIX5(unit) ? 15 : 16, -1,
   1950                                       offset + 19, 4, 1);
   1951     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionChangeL2FieldsCancel,
   1952                                       0, _FieldActionL3SwChangeL2Set,
   1953                                       offset + 19, 4, 2);
   1954     _FP_ACTION_WITH_ASET_ADD_THREE(unit, stage_fc, bcmFieldActionFabricQueue,
   1955                                       0, _FieldActionL3SwChangeL2Set,
   1956                      offset + 0, 2, -1,  offset + 2, 16, -1, offset + 19, 4, 3);
   1957     _FP_ACTION_WITH_ASET_ADD_THREE(unit, stage_fc, bcmFieldActionL3Switch,
   1958                                    _BCM_FIELD_ACTION_L3SWITCH_NEXT_HOP,
   1959                                    _FieldActionL3SwChangeL2Set,
   1960                                    offset + 0, SOC_IS_HELIX5(unit) ? 15 : 16, -1,
   1961                                    offset + 17, 1, 0, offset + 19, 4, 6);
   1962     _FP_ACTION_WITH_ASET_ADD_THREE(unit, stage_fc, bcmFieldActionL3Switch,
   1963                                    _BCM_FIELD_ACTION_L3SWITCH_ECMP,
   1964                                    _FieldActionL3SwChangeL2Set,
   1965                                    offset + 0, SOC_IS_HELIX5(unit) ? 10 : 12, -1,
   1966                                    offset + 17, 1, 1, offset + 19, 4, 6);
   1967     _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionMultipathHash,
   1968                                       0, _FieldActionL3SwChangeL2Set,
   1969                                       offset + 12, 3, -1, offset + 19, 4, 6);
   1970     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionL3SwitchCancel,
   1971                                       0, _FieldActionL3SwChangeL2Set,
   1972                                       offset + 19, 4, 7);
   1973     _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionEgressClassSelect,
   1974                                       0, _FieldActionL3SwChangeL2Set,
   1975                                       offset + 0, 4, -1, offset + 19, 4, 8);
   1976     _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionHiGigClassSelect,
   1977                                       0, _FieldActionL3SwChangeL2Set,
   1978                                       offset + 4, 3, -1, offset + 19, 4, 8);
   1979     _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionNewClassId,
   1980                                       0, _FieldActionL3SwChangeL2Set,
   1981                                       offset + 7, 9, -1, offset + 19, 4, 8);
   1982     _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionBFDSessionIdNew,
   1983                                       0, _FieldActionL3SwChangeL2Set,
   1984                                       offset + 0, 12, -1, offset + 19, 4, 9);
   1985     /* IFP_CHANGE_CPU_COS_SET(8b) */
   1986     offset = cpucos_offset;
   1987 
   1988     _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionCosQCpuNew,
   1989                                         0, _FieldActionChangeCpuCosSet,
   1990                                         offset + 0, 6, -1, offset + 6, 2, 1);
   1991     _FP_ACTION_WITH_ASET_ADD_THREE(unit, stage_fc, bcmFieldActionServicePoolIdNew, 0,
   1992                                                    _FieldActionChangeCpuCosSet,
   1993                                                               offset + 2, 2, -1,
   1994                                                               offset + 5, 1, 1,
   1995                                                               offset + 6, 2, 2);
   1996     _FP_ACTION_WITH_ASET_ADD_FOUR(unit, stage_fc, bcmFieldActionServicePoolIdPrecedenceNew,
   1997                                                               0, _FieldActionChangeCpuCosSet,
   1998                                                               offset + 2, 2, -1,
   1999                                                               offset + 0, 2, -1,
   2000                                                               offset + 4, 2, 3,
   2001                                                               offset + 6, 2, 2);
   2002 
   2003     /* IFP_DROP_SET(6b) */
   2004     offset = drop_offset;
   2005 
   2006     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionRpDrop,
   2007                                  0, _FieldActionDropSet, offset + 0, 2, 1);
   2008     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionRpDropCancel,
   2009                                  0, _FieldActionDropSet, offset + 0, 2, 2);
   2010     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionYpDrop,
   2011                                  0, _FieldActionDropSet, offset + 2, 2, 1);
   2012     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionYpDropCancel,
   2013                                  0, _FieldActionDropSet,  offset + 2, 2, 2);
   2014     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionGpDrop,
   2015                                  0, _FieldActionDropSet, offset + 4, 2, 1);
   2016     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionGpDropCancel,
   2017                                  0, _FieldActionDropSet, offset + 4, 2, 2);
   2018     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionDrop,
   2019                                  0, _FieldActionDropSet, offset + 4, 2, 1);
   2020     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionDropCancel,
   2021                                  0, _FieldActionDropSet, offset + 4, 2, 2);
   2022 
   2023     /* IFP_MIRROR_OVERRIDE_SET(1b) */
   2024     offset = mirror_override_offset;
   2025 
   2026     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionMirrorOverride,
   2027                                  0, _FieldActionMirrorOverrideSet, offset + 0, 1, 1);
   2028 
   2029     /* IFP_SFLOW_SET(1b) */
   2030     offset = sflow_offset;
   2031 
   2032     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionIngSampleEnable,
   2033                                  0, _FieldActionSflowSet, offset + 0, 1, 1);
   2034 
   2035     /* IFP_INSTRUMENTATION_SET*/
   2036     offset = debug_offset;
   2037     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionPacketTraceEnable,
   2038                              0,
   2039                              _FieldActionInstrumentationSet, offset + 0, 1, 1);
   2040 
   2041     /* IFP_REDIRECT_SET(38b) */
   2042     offset = redirect_offset;
   2043 
   2044     _FP_ACTION_WITH_ASET_ADD_FOUR(unit, stage_fc, bcmFieldActionRedirect,
   2045                                                 _BCM_FIELD_ACTION_REDIRECT_DGLP,
   2046                                                 _FieldActionRedirectSet,
   2047                                          offset + 6, 16, -1, offset + 22 , 1, 0,
   2048                                             offset + 3, 3, 0, offset + 0, 3, 1);
   2049     _FP_ACTION_WITH_ASET_ADD_THREE(unit, stage_fc, bcmFieldActionRedirect,
   2050                                                  _BCM_FIELD_ACTION_REDIRECT_DVP,
   2051                                                 _FieldActionRedirectSet,
   2052                                           offset + 6, 14, -1,
   2053                                             offset + 3, 3, 6, offset + 0, 3, 1);
   2054     _FP_ACTION_WITH_ASET_ADD_FOUR(unit, stage_fc, bcmFieldActionRedirect,
   2055                                                _BCM_FIELD_ACTION_REDIRECT_TRUNK,
   2056                                                 _FieldActionRedirectSet,
   2057                                           offset + 6, 16, -1, offset + 22, 1, 1,
   2058                                             offset + 3, 3, 0, offset + 0, 3, 1);
   2059     _FP_ACTION_WITH_ASET_ADD_FOUR(unit, stage_fc, bcmFieldActionRedirectTrunk,
   2060                                                 _BCM_FIELD_ACTION_REDIRECT_TRUNK,
   2061                                                 _FieldActionRedirectSet,
   2062                                           offset + 6, 16, -1, offset + 22, 1, 1,
   2063                                             offset + 3, 3, 0, offset + 0, 3, 1);
   2064     _FP_ACTION_WITH_ASET_ADD_THREE(unit, stage_fc, bcmFieldActionRedirectTrunk,
   2065                                             _BCM_FIELD_ACTION_REDIRECT_DVP,
   2066                                             _FieldActionRedirectSet,
   2067                                           offset + 6, 14, -1,
   2068                                           offset + 3, 3, 6, offset + 0, 3, 1);
   2069     _FP_ACTION_WITH_ASET_ADD_FOUR(unit, stage_fc,
   2070                                      bcmFieldActionUnmodifiedPacketRedirectPort,
   2071                                                 _BCM_FIELD_ACTION_REDIRECT_DGLP,
   2072                                                 _FieldActionRedirectSet,
   2073                                           offset + 6, 16, -1, offset + 22, 1, 0,
   2074                                             offset + 3, 3, 1, offset + 0, 3, 1);
   2075     _FP_ACTION_WITH_ASET_ADD_THREE(unit, stage_fc, bcmFieldActionRedirectEgrNextHop,
   2076                                             _BCM_FIELD_ACTION_REDIRECT_NEXT_HOP,
   2077                                                 _FieldActionRedirectSet,
   2078                         offset + 6, 16, -1, offset + 3, 3, 2, offset + 0, 3, 1);
   2079     _FP_ACTION_WITH_ASET_ADD_THREE(unit, stage_fc, bcmFieldActionRedirectEgrNextHop,
   2080                                                 _BCM_FIELD_ACTION_REDIRECT_ECMP,
   2081                                                 _FieldActionRedirectSet,
   2082                         offset + 6, 16, -1, offset + 3, 3, 3, offset + 0, 3, 1);
   2083     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionRedirectCancel,
   2084                                    0, _FieldActionRedirectSet, offset + 0, 3, 2);
   2085     _FP_ACTION_WITH_ASET_ADD_THREE(unit, stage_fc, bcmFieldActionRedirectPbmp, 0,
   2086                                           _FieldActionRedirectSet,
   2087                        offset + 6, 10, -1, offset + 23, 2, 0, offset + 0, 3, 3);
   2088     _FP_ACTION_WITH_ASET_ADD_THREE(unit, stage_fc, bcmFieldActionRedirectVlan, 0,
   2089                                           _FieldActionRedirectSet,
   2090                         offset + 18, 1, 0, offset + 23, 2, 1, offset + 0, 3, 3);
   2091     _FP_ACTION_WITH_ASET_ADD_FOUR(unit, stage_fc, bcmFieldActionRedirectBcastPbmp, 0,
   2092                                           _FieldActionRedirectSet,
   2093                                           offset + 6, 10, -1, offset + 18, 1, 1,
   2094                                           offset + 23, 2, 1, offset + 0, 3, 3);
   2095     _FP_ACTION_WITH_ASET_ADD_THREE(unit, stage_fc, bcmFieldActionRedirectMcast, 0,
   2096                                            _FieldActionRedirectSet,offset + 6, 14, -1,
   2097                                            offset + 23, 2, 2, offset + 0, 3, 3);
   2098     _FP_ACTION_WITH_ASET_ADD_THREE(unit, stage_fc, bcmFieldActionRedirectIpmc, 0,
   2099                                           _FieldActionRedirectSet,offset + 6, 14, -1,
   2100                                           offset + 23, 2, 3, offset + 0, 3, 3);
   2101     _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionEgressMask, 0,
   2102                                           _FieldActionRedirectSet,
   2103                                           offset + 6, 10, -1, offset + 0, 3, 4);
   2104     _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionEgressPortsAdd, 0,
   2105                                           _FieldActionRedirectSet,
   2106                                           offset + 6, 10, -1, offset + 0, 3, 5);
   2107     _FP_ACTION_WITH_ASET_ADD_THREE(unit, stage_fc, bcmFieldActionFabricEHAddOrUpdate, 0,
   2108                                           _FieldActionRedirectSet, offset + 3, 32, -1,
   2109                                           offset + 35, 3, -1, offset + 0, 3, 6);
   2110 
   2111     /* IFP_NAT_SET(12b) */
   2112     offset = nat_offset;
   2113 
   2114     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionNat,
   2115                                     0, _FieldActionNatSet, offset + 11, 1, 1);
   2116     _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionNatEgressOverride,
   2117                                     0, _FieldActionNatSet,
   2118                                     offset + 0, 10, -1, offset + 10, 1, -1);
   2119 
   2120     /* ExactMatch Action Class Id (12b) */
   2121     _FP_ACTION_ADD_ONE(unit, stage_fc, bcmFieldActionExactMatchClassId,
   2122                        _BCM_FIELD_ACTION_NO_IFP_SUPPORT, 0, 12, 0);
   2123 
   2124 
   2125     /* All actions which have corresponding Colored(Gp/Yp/Rp) Actions needs to be
   2126      * initialized with some default configuration(offset = 0, width = 0, value = 0).
   2127      */
   2128     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionColorIndependent,
   2129                                  0, _FieldActionGreenToPidSet, 0, 0, 0);
   2130 
   2131     /* TD3 New actions initialzation */
   2132 #if defined(INCLUDE_L3)
   2133     /* PROTECTION_SWITCHING_DROP_OVERIDE_SET (1b) */
   2134     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionRecoverableDropCancel,
   2135                                  0, _FieldActionProtectionSwitchingDropOverrideSet,
   2136                                  0, 1, 1);
   2137 
   2138     /* IFP_DLB_ALTERNATE_PATH_CONTROL_SET (10b) */
   2139     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionDgm,
   2140                                  0, _FieldActionIfpDlbAlternatePathControlSet, 0, 1, 1);
   2141     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionDgmThreshold,
   2142                                  0, _FieldActionIfpDlbAlternatePathControlSet, 7, 3, -1);
   2143     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionDgmBias,
   2144                                  0, _FieldActionIfpDlbAlternatePathControlSet, 4, 3, -1);
   2145     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionDgmCost,
   2146                                  0, _FieldActionIfpDlbAlternatePathControlSet, 1, 3, -1);
   2147 
   2148     /* ECMP_DLB_ACTION_SET (2b) */
   2149     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionDynamicEcmpEnable,
   2150                                  0, _FieldActionEcmpDlbActionSet, 0, 1, 1);
   2151     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionDynamicEcmpCancel,
   2152                                  0, _FieldActionEcmpDlbActionSet, 1, 1, 1);
   2153 #endif /* INCLUDE_L3 */
   2154     /* HGT_LAG_DLB_ACTION_SET (2b) */
   2155     if (soc_feature(unit, soc_feature_lag_dlb)) {
   2156         _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionDynamicTrunkEnable,
   2157                                      0, _FieldActionHgtLagDlbActionSet, 0, 1, 1);
   2158         _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionDynamicTrunkCancel,
   2159                                      0, _FieldActionHgtLagDlbActionSet, 1, 1, 1);
   2160     }
   2161 
   2162     if (soc_feature(unit, soc_feature_hg_dlb)) {
   2163         _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionDynamicHgTrunkEnable,
   2164                                      0, _FieldActionHgtLagDlbActionSet, 0, 1, 1);
   2165         _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionDynamicHgTrunkCancel,
   2166                                      0, _FieldActionHgtLagDlbActionSet, 1, 1, 1);
   2167     }
   2168 
   2169     /* ECMP1_RH_ACTION_SET */
   2170 
   2171     /* ECMP2_RH_ACTION_SET */
   2172     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionEcmpResilientHashEnable,
   2173                                  0, _FieldActionEcmp2RhActionSet, 0, 1, 1);
   2174     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionEcmpResilientHashDisable,
   2175                                  0, _FieldActionEcmp2RhActionSet, 1, 1, 1);
   2176 
   2177     /* LAG_RH_ACTION_SET */
   2178     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionTrunkResilientHashEnable,
   2179                                  0, _FieldActionLagRhActionSet, 0, 1, 1);
   2180     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionTrunkResilientHashDisable,
   2181                                  0, _FieldActionLagRhActionSet, 1, 1, 1);
   2182 
   2183     /* HGT_RH_ACTION_SET */
   2184     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionHiGigTrunkResilientHashEnable,
   2185                                  0, _FieldActionHgtRhActionSet, 0, 1, 1);
   2186     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionHiGigTrunkResilientHashDisable,
   2187                                  0, _FieldActionHgtRhActionSet, 1, 1, 1);
   2188 
   2189     /* LOOPBACK_PROFILE_ACTION_SET */
   2190     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionLoopbackType,
   2191                                  0, _FieldActionLoopbackProfileActionSet, 0, 4, -1);
   2192 
   2193     /* OPAQUE_4_ACTION_SET */
   2194     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionAssignOpaqueObject4,
   2195                                  0, _FieldActionOpaque4ActionSet, 0, 16, -1);
   2196     /* OPAQUE_3_ACTION_SET */
   2197     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionAssignOpaqueObject3,
   2198                                  0, _FieldActionOpaque3ActionSet, 0, 16, -1);
   2199     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionLoopbackSubtype,
   2200                                  0, _FieldActionOpaque3ActionSet, 0, 16, -1);
   2201     /* OPAQUE_2_ACTION_SET */
   2202     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionAssignOpaqueObject2,
   2203                                  0, _FieldActionOpaque2ActionSet, 0, 16, -1);
   2204     /* OPAQUE_1_ACTION_SET */
   2205     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionAssignOpaqueObject1,
   2206                                  0, _FieldActionOpaque1ActionSet, 0, 16, -1);
   2207     /* EXTRACTION_CTRL_ID_ACTION_SET */
   2208     _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionAssignExtractionCtrlId,
   2209                                  0, _FieldActionExtractionCtrlIdActionSet,
   2210                                  0, 8, -1,
   2211                                  8, 8, -1);
   2212     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionEgressFlowControlEnable,
   2213                                  0, _FieldActionExtractionCtrlIdActionSet,
   2214                                  0, 16, -1);
   2215     /* EDIT_CTRL_ID_ACTION_SET */
   2216     _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionAssignEditCtrlId,
   2217                                  0, _FieldActionEditCtrlIdSet,
   2218                                  0, 8, -1,
   2219                                  8, 8, -1);
   2220     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionEgressFlowEncapEnable,
   2221                                  0, _FieldActionEditCtrlIdSet,
   2222                                  0, 16, -1);
   2223     /* TX_TIMESTAMP_INSERTION_SET (4b) */
   2224     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionEgressTimeStampInsert,
   2225                                  0, _FieldActionTxTimestampInsertionSet, 0, 2, 1);
   2226     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionEgressTimeStampInsertCancel,
   2227                                  0, _FieldActionTxTimestampInsertionSet, 0, 2, 2);
   2228 
   2229     /* RX_TIMESTAMP_INSERTION_SET (4b) */
   2230     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionIngressTimeStampInsert,
   2231                                  0, _FieldActionRxTimestampInsertionSet, 0, 2, 1);
   2232     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionIngressTimeStampInsertCancel,
   2233                                  0, _FieldActionRxTimestampInsertionSet, 0, 2, 2);
   2234 
   2235     /* IGNORE_FCOE_ZONE_CHECK_SET (1b) */
   2236     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionFibreChanZoneCheckActionCancel,
   2237                                  0, _FieldActionIgnoreFcoEZoneCheckSet, 0, 1, 1);
   2238 
   2239     /* FCOE_VSAN_SET (16b) */
   2240     _FP_ACTION_WITH_ASET_ADD_TWO(unit, stage_fc, bcmFieldActionFibreChanIntVsanPri,
   2241                                  0, _FieldActionFcoEVsanSet, 0, 1, 1, 1, 3, -1);
   2242     _FP_ACTION_WITH_ASET_ADD_ONE(unit, stage_fc, bcmFieldActionFibreChanVsanId,
   2243                                  0, _FieldActionFcoEVsanSet, 4, 12, -1);
   2244 
   2245 
   2246     return (_field_td3_flex_actions_init(unit, stage_fc));
   2247 }
   2248 
   2249 /*
   2250  * Function:
   2251  *     _field_td3_ingress_entry_policy_mem_install
   2252  * Purpose:
   2253  *     Install the entry actions into the policy table.
   2254  * Parameters:
   2255  *     unit         - (IN) BCM device number
   2256  *     f_ent        - (IN) entry structure to get policy info from
   2257  *     policy_mem   - (IN) Policy table memory
   2258  *     tcam_idx     - (IN) Common index of various tables
   2259  * Returns:
   2260  *     BCM_E_XXX
   2261  */
   2262 int
   2263 _field_td3_ingress_entry_policy_mem_install(int unit, _field_entry_t *f_ent,
   2264                                            soc_mem_t policy_mem, int tcam_idx)
   2265 {
   2266     int               rv=BCM_E_NONE;
   2267                                        /* Operation return status.            */
   2268     int               policy_idx;      /* Policy index in the Policy table.   */
   2269     uint32            abuf[_BCM_FP_MEM_FIELD_BYTES] = {0};
   2270                                        /* Action Profile Data Buffer. */
   2271     _field_group_t *fg = NULL;         /* Field Group Control.        */
   2272     ifp_policy_table_entry_t ibuf_nar; /* Narrow Entry Buffer.      */
   2273     ifp_policy_table_wide_entry_t ibuf_wide;    /* Wide Entry Buffer.        */
   2274     uint32 *bufp = NULL;               /* Hardware Buffer Ptr.      */
   2275     uint32 ap_idx;                     /* Action profile Index*/
   2276     uint8 entry_part;                  /* Entry part number */
   2277     _field_entry_t *f_ent_primary = NULL;
   2278 
   2279     /* Input parameters check. */
   2280     if (NULL == f_ent) {
   2281         return (BCM_E_PARAM);
   2282     }
   2283     fg = f_ent->group;
   2284     /* Get Hardware Buffer Pointer and memory identifier. */
   2285     if ((fg->flags & _FP_GROUP_SPAN_SINGLE_SLICE) &&
   2286            !(fg->flags & _FP_GROUP_INTRASLICE_DOUBLEWIDE)) {
   2287         bufp = (uint32 *)&ibuf_nar;
   2288     } else {
   2289         bufp = (uint32 *)&ibuf_wide;
   2290     }
   2291 
   2292     /* Initialize exact match entries. */
   2293     sal_memcpy(bufp, soc_mem_entry_null(unit, policy_mem),
   2294                 soc_mem_entry_words(unit, policy_mem) * sizeof(uint32));
   2295 
   2296     /* (Intra Slice) Double Wide/ Triple wide modes,
   2297      * IFP_TCAM_WIDE have 256 entries
   2298      * but IFP_POLICY_TABLE will have 512 entries.
   2299      */
   2300     policy_idx = tcam_idx;
   2301     _bcm_field_th_entry_flags_to_tcam_part(unit, f_ent->flags,
   2302                                    fg->flags, &entry_part);
   2303     ap_idx = fg->action_profile_idx[entry_part];
   2304     if (ap_idx != -1) {
   2305         /* Set Action Profile Data. */
   2306         rv = _field_entry_get(unit, f_ent->eid, _FP_ENTRY_PRIMARY, &f_ent_primary);
   2307         if (BCM_FAILURE(rv)) {
   2308             return (rv);
   2309         }
   2310 
   2311         rv = _field_th_entry_action_profile_data_set(unit,
   2312                                             f_ent_primary,
   2313                                             &ap_idx, policy_mem,
   2314                                             abuf);
   2315         BCM_IF_ERROR_RETURN(rv);
   2316         /* Write the POLICY Table */
   2317         /* Set Action Data in entry Buffer. */
   2318         soc_mem_field32_set(unit, policy_mem,
   2319                             bufp,
   2320                             DATA_TYPEf, ap_idx);
   2321         soc_mem_field_set(unit, policy_mem,
   2322                             bufp,
   2323                             POLICY_DATAf, abuf);
   2324 
   2325         rv = soc_th_ifp_mem_write(unit, policy_mem,
   2326                              MEM_BLOCK_ALL, policy_idx, bufp);
   2327     }
   2328     return (rv);
   2329 }
   2330 
   2331 /*
   2332  * Function:
   2333  *  _field_td3_field_group_aset_update
   2334  * Purpose:
   2335  *  Update group aset as per aset updated by user.
   2336  * Parameters:
   2337  *  unit     - (IN) BCM device number
   2338  *  fg       - (IN/OUT) field group structure
   2339  *  aset     - (IN) User specified action set
   2340  * Returns:
   2341  *  BCM_E_XXX
   2342  * Notes:
   2343  *  This function logic takes care of IFP stage in TD3.
   2344  *  It will add action from aset provided by user as input.
   2345  *  Final group aset will be union of field group aset
   2346  *  already present and aset provided by user. It will update
   2347  *  aset only if group mode does not change due to new actions.
   2348  */
   2349 int
   2350 _field_td3_field_group_aset_update(int unit, _field_group_t *fg,
   2351                                          bcm_field_aset_t  *aset)
   2352 {
   2353     int rv = BCM_E_NONE;                   /* operational status */
   2354     _field_control_t *fc = NULL;           /* field control structure */
   2355     _field_stage_t *stage_fc = NULL;       /* stage control strucutre */
   2356     _field_entry_t *f_ent = NULL;          /* field entry strucutre */
   2357     soc_mem_t action_profile_mem, policy_mem;
   2358                                            /* policy profile and policy memory */
   2359     ifp_policy_table_entry_t ifp_act_policy_narrow;
   2360                                            /* narrow policy entry */
   2361     ifp_policy_table_wide_entry_t ifp_act_policy_wide;
   2362                                            /* wide policy entry */
   2363     uint32 *act_policy_entry = NULL;       /* policy entry pointer */
   2364     ifp_policy_action_profile_entry_t
   2365             ifp_act_prof_entry[MAX_ACT_PROF_ENTRIES_PER_GROUP];
   2366                                            /* policy profile entry */
   2367     ifp_policy_action_profile_entry_t
   2368             ifp_act_prof_entry_new[MAX_ACT_PROF_ENTRIES_PER_GROUP];
   2369                                            /* policy profile entry */
   2370     void *act_prof_entry[MAX_ACT_PROF_ENTRIES_PER_GROUP];
   2371                                            /* policy profile entry pointer */
   2372     void *act_prof_entry_new[MAX_ACT_PROF_ENTRIES_PER_GROUP];
   2373                                            /* policy profile entry pointer */
   2374     void *entries[1];                      /* policy profile entry generic pointer */
   2375     uint16 min_hw_aset_idx_loc[MAX_ACT_PROF_ENTRIES_PER_GROUP];
   2376                                            /* minimum hw action set index */
   2377     uint32 old_ap_idx[MAX_ACT_PROF_ENTRIES_PER_GROUP];
   2378                                            /* old action profile index */
   2379     uint32 new_ap_idx[MAX_ACT_PROF_ENTRIES_PER_GROUP];
   2380                                            /* new action profile index */
   2381     bcm_field_aset_t aset_incoming;        /* input user action set */
   2382     _bcm_field_aset_t aset_orig;           /* field group original action set */
   2383     _bcm_field_aset_t aset_new;            /* new action set to add */
   2384     uint8 hw_bitmap_entries = 0;           /* no. of hw bitmap enties */
   2385     int hw_aset_idx = 0;                   /* hw action set iter */
   2386     uint16 ap_idx = 0;                     /* action profile index iter */
   2387     uint16 a_idx = 0, aset_diff = 0;       /* action iter and diff */
   2388     _bcm_field_action_set_t *action_set_ptr = NULL;
   2389                                            /* action set pointer */
   2390     _bcm_field_action_conf_t *action_conf_ptr = NULL;
   2391                                            /* action configuration pointer */
   2392     bcm_field_group_mode_t mode = 0;       /* field group mode */
   2393     uint16 mode_violation = 0;             /* field group mode violation */
   2394     uint16 multi_mode = 0, multi_mode_transition = 0;
   2395                                            /* group multi mode variables */
   2396     uint16 aset_size_old = 0, aset_size_new = 0;
   2397                                            /* action set size */
   2398     uint16 group_new_action_profile = 0;   /* new action profile */
   2399     uint16 entry_new_action_profile = 0;   /* new action profile */
   2400     uint16 entry_install_flag = 0;         /* entry install flag */
   2401     uint32 act_valid = 0;                  /* action set valid */
   2402     uint8 field_action_set = 0;            /* field action set */
   2403     uint32 abuf[_BCM_FP_MEM_FIELD_BYTES] = {0};
   2404                                            /* action data buffer */
   2405     int eid = 0, idx = 0, tmp = 0, tcam_idx = 0;
   2406                                            /* entry variables */
   2407     int parts_count = 0;                   /* entry parts count */
   2408 
   2409     /* input params validation */
   2410     if ((fg == NULL) || (fg->stage_id != _BCM_FIELD_STAGE_INGRESS)) {
   2411         return (BCM_E_INTERNAL);
   2412     }
   2413 
   2414     /* get field and stage control */
   2415     BCM_IF_ERROR_RETURN(_field_control_get(unit, &fc));
   2416     BCM_IF_ERROR_RETURN(_field_stage_control_get(unit, fg->stage_id, &stage_fc));
   2417 
   2418     /* assign memory */
   2419     action_profile_mem = IFP_POLICY_ACTION_PROFILEm;
   2420     if ((fg->flags & _FP_GROUP_SPAN_SINGLE_SLICE) &&
   2421        !(fg->flags & _FP_GROUP_INTRASLICE_DOUBLEWIDE)) {
   2422         policy_mem = IFP_POLICY_TABLEm;
   2423         act_policy_entry = (uint32 *)&ifp_act_policy_narrow;
   2424     } else {
   2425         policy_mem = IFP_POLICY_TABLE_WIDEm;
   2426         act_policy_entry = (uint32 *)&ifp_act_policy_wide;
   2427     }
   2428 
   2429     /* initialize local params */
   2430     sal_memset(&(aset_incoming), 0, sizeof(bcm_field_aset_t));
   2431     sal_memset(&(aset_orig), 0, sizeof(_bcm_field_aset_t));
   2432     sal_memset(&(aset_new), 0, sizeof(_bcm_field_aset_t));
   2433     sal_memset(&ifp_act_policy_narrow, 0, sizeof(ifp_act_policy_narrow));
   2434     sal_memset(&ifp_act_policy_wide, 0, sizeof(ifp_act_policy_wide));
   2435     for (ap_idx = 0; ap_idx < MAX_ACT_PROF_ENTRIES_PER_GROUP; ap_idx++) {
   2436         act_prof_entry[ap_idx] = &ifp_act_prof_entry[ap_idx];
   2437         act_prof_entry_new[ap_idx] = &ifp_act_prof_entry_new[ap_idx];
   2438         sal_memcpy(act_prof_entry[ap_idx], soc_mem_entry_null(unit, action_profile_mem),
   2439                         soc_mem_entry_words(unit, action_profile_mem) * sizeof(uint32));
   2440         sal_memcpy(act_prof_entry_new[ap_idx], soc_mem_entry_null(unit, action_profile_mem),
   2441                         soc_mem_entry_words(unit, action_profile_mem) * sizeof(uint32));
   2442         min_hw_aset_idx_loc[ap_idx] = -1;
   2443         old_ap_idx[ap_idx] = -1;
   2444         new_ap_idx[ap_idx] = -1;
   2445     }
   2446     sal_memcpy(&aset_incoming, aset, sizeof(bcm_field_aset_t));
   2447     hw_bitmap_entries = sizeof(ifp_td3_action_profile_bitmap)/sizeof(uint8);
   2448 
   2449     /* copy field group original aset */
   2450     sal_memcpy(&aset_orig, &fg->aset, sizeof(_bcm_field_aset_t));
   2451 
   2452     /* calculate action size with old field group aset */
   2453     BCM_IF_ERROR_RETURN(_field_calc_group_aset_size(unit, fg, &aset_size_old));
   2454 
   2455     /* check if old group was in multi mode or not */
   2456     if (aset_size_old > _FP_ASET_DATA_SIZE_FOR_POLICY_WIDE) {
   2457         multi_mode = 1;
   2458     }
   2459 
   2460     /* update new and field group aset */
   2461     for (a_idx = 0; a_idx < bcmFieldActionCount; a_idx++) {
   2462         if (BCM_FIELD_ASET_TEST(aset_incoming, a_idx)) {
   2463             if (!_field_stage_action_support_check(unit, fg, a_idx)) {
   2464                 LOG_ERROR(BSL_LS_BCM_FP,
   2465                          (BSL_META_U(unit, "FP(unit %d) Error: action =%s is"
   2466                                     "not supported for given group stage.\n"),
   2467                                     unit, _field_action_name(a_idx)));
   2468                 rv = BCM_E_UNAVAIL;
   2469                 goto cleanup;
   2470             }
   2471             if (!BCM_FIELD_ASET_TEST(fg->aset, a_idx)) {
   2472                 BCM_FIELD_ASET_ADD(aset_new, a_idx);
   2473                 BCM_FIELD_ASET_ADD(fg->aset, a_idx);
   2474                 aset_diff = 1;
   2475             }
   2476         }
   2477     }
   2478 
   2479     /* if no aset difference then return success as nothing to do */
   2480     if (!aset_diff) {
   2481         return (BCM_E_NONE);
   2482     }
   2483 
   2484     /* Update internal pseudo actions for the given aset */
   2485     rv = _bcm_field_qset_update_with_internal_actions(unit, fg);
   2486     if (BCM_FAILURE(rv)) {
   2487         goto cleanup;
   2488     }
   2489 
   2490     /* calculate action size with updated field group aset */
   2491     rv = _field_calc_group_aset_size(unit, fg, &aset_size_new);
   2492     if (BCM_FAILURE(rv)) {
   2493         goto cleanup;
   2494     }
   2495 
   2496     /* get field group mode */
   2497     rv = _bcm_esw_field_group_mode_get(fg->flags, &mode);
   2498     if (BCM_FAILURE(rv)) {
   2499         goto cleanup;
   2500     }
   2501 
   2502     /* check new aset_size can accomodate in group mode */
   2503     if (mode == bcmFieldGroupModeSingle) {
   2504         if (aset_size_new > _FP_ASET_DATA_SIZE_FOR_POLICY_NARROW) {
   2505             mode_violation = 1;
   2506         }
   2507     } else if (mode == bcmFieldGroupModeDouble ||
   2508                mode == bcmFieldGroupModeTriple) {
   2509         if (aset_size_new > _FP_ASET_DATA_SIZE_WITH_ALL_ACTIONS) {
   2510             mode_violation = 1;
   2511         }
   2512         if ((!multi_mode) && (aset_size_new > _FP_ASET_DATA_SIZE_FOR_POLICY_WIDE)) {
   2513             multi_mode_transition = 1;
   2514         }
   2515     } else if (mode == bcmFieldGroupModeIntraSliceDouble) {
   2516         if (aset_size_new > _FP_ASET_DATA_SIZE_FOR_POLICY_WIDE) {
   2517             mode_violation = 1;
   2518         }
   2519     } else {
   2520         rv = BCM_E_INTERNAL;
   2521         goto cleanup;
   2522     }
   2523 
   2524     /* if group mode is violated return error */
   2525     if (mode_violation) {
   2526         LOG_ERROR(BSL_LS_BCM_FP,
   2527                  (BSL_META_U(unit, "FP(unit %d) Error: New Aset size =%d cannot"
   2528                              "be accomodated in this group mode.\n"),
   2529                              unit, aset_size_new));
   2530         rv = BCM_E_PARAM;
   2531         goto cleanup;
   2532     }
   2533 
   2534     /* check if there is any other group with same action_profile index */
   2535     rv = _field_group_check_action_profile(unit, fg, &group_new_action_profile);
   2536     if (BCM_FAILURE(rv)) {
   2537         goto cleanup;
   2538     }
   2539 
   2540     /* get min aset location in both action profile */
   2541     for (ap_idx = 0; ap_idx < MAX_ACT_PROF_ENTRIES_PER_GROUP; ap_idx++) {
   2542         if (fg->action_profile_idx[ap_idx] != -1) {
   2543             entries[0] = act_prof_entry[ap_idx];
   2544             soc_profile_mem_get(unit,
   2545                                 &stage_fc->action_profile[fg->instance],
   2546                                 fg->action_profile_idx[ap_idx], 1, entries);
   2547             for (hw_aset_idx = (hw_bitmap_entries-1); hw_aset_idx >= 0; hw_aset_idx--) {
   2548                 _bcm_field_th_val_get(act_prof_entry[ap_idx], &act_valid, hw_aset_idx, 1);
   2549                 if (act_valid) {
   2550                     min_hw_aset_idx_loc[ap_idx] = hw_aset_idx;
   2551                 }
   2552             }
   2553 
   2554         }
   2555     }
   2556 
   2557     /* verify if new actions can be updated with same profile
   2558      * or new profile has to be created. */
   2559     action_set_ptr = stage_fc->action_set_ptr;
   2560     if ((!multi_mode) && (!multi_mode_transition)) {
   2561 
   2562         /* now update action profile entry with new action set */
   2563         for (a_idx = 0; a_idx < _bcmFieldActionCount; a_idx++) {
   2564             if (BCM_FIELD_ASET_TEST(aset_new, a_idx)) {
   2565                 action_conf_ptr = stage_fc->f_action_arr[a_idx];
   2566                 if (NULL != action_conf_ptr) {
   2567                     field_action_set = action_conf_ptr->offset->aset;
   2568                 } else if (a_idx == bcmFieldActionPolicerGroup) {
   2569                     field_action_set = _FieldActionMeterSet;
   2570                 } else if (a_idx == bcmFieldActionStatGroup) {
   2571                     field_action_set = _FieldActionCounterSet;
   2572                 } else {
   2573                     rv = BCM_E_INTERNAL;
   2574                     goto cleanup;
   2575                 }
   2576                 if ((0 == field_action_set) ||
   2577                     (0 == action_set_ptr[field_action_set].size)) {
   2578                     continue;
   2579                 } else {
   2580                     soc_mem_field32_set(unit, action_profile_mem, act_prof_entry[0],
   2581                             action_set_ptr[field_action_set].hw_field, 1);
   2582                     soc_mem_field32_set(unit, action_profile_mem, act_prof_entry_new[0],
   2583                             action_set_ptr[field_action_set].hw_field, 1);
   2584                 }
   2585             }
   2586         }
   2587         /* now check new action set position with earlier to judge profile update need */
   2588         for (hw_aset_idx = hw_bitmap_entries-1; hw_aset_idx >= 0; hw_aset_idx--) {
   2589             _bcm_field_th_val_get(act_prof_entry_new[0], &act_valid, hw_aset_idx, 1);
   2590             if (act_valid) {
   2591                 if (hw_aset_idx > min_hw_aset_idx_loc[0]) {
   2592                     entry_new_action_profile = 1;
   2593                     break;
   2594                 }
   2595             }
   2596         }
   2597 
   2598     } else if ((!multi_mode) && (multi_mode_transition)) {
   2599 
   2600         /* Entry moving from one to two action profile, clear earlier entry first */
   2601         sal_memcpy(act_prof_entry[0], soc_mem_entry_null(unit, action_profile_mem),
   2602                 soc_mem_entry_words(unit, action_profile_mem) * sizeof(uint32));
   2603         sal_memcpy(act_prof_entry[1], soc_mem_entry_null(unit, action_profile_mem),
   2604                 soc_mem_entry_words(unit, action_profile_mem) * sizeof(uint32));
   2605         entry_new_action_profile = 1;
   2606         for (a_idx = 0; a_idx < _bcmFieldActionCount; a_idx++) {
   2607             if (BCM_FIELD_ASET_TEST(fg->aset, a_idx)) {
   2608                 action_conf_ptr = stage_fc->f_action_arr[a_idx];
   2609                 if (NULL != action_conf_ptr) {
   2610                     field_action_set = action_conf_ptr->offset->aset;
   2611                 } else if (a_idx == bcmFieldActionPolicerGroup) {
   2612                     field_action_set = _FieldActionMeterSet;
   2613                 } else if (a_idx == bcmFieldActionStatGroup) {
   2614                     field_action_set = _FieldActionCounterSet;
   2615                 } else {
   2616                     rv = BCM_E_INTERNAL;
   2617                     goto cleanup;
   2618                 }
   2619                 if ((0 == field_action_set) ||
   2620                     (0 == action_set_ptr[field_action_set].size)) {
   2621                     continue;
   2622                 } else {
   2623                     if (1 == action_set_ptr[field_action_set].is_color_dependent) {
   2624                         soc_mem_field32_set(unit, action_profile_mem, act_prof_entry[0],
   2625                                 action_set_ptr[field_action_set].hw_field, 1);
   2626                     } else {
   2627                         soc_mem_field32_set(unit, action_profile_mem, act_prof_entry[1],
   2628                                 action_set_ptr[field_action_set].hw_field, 1);
   2629                     }
   2630                 }
   2631             }
   2632         }
   2633 
   2634     } else {
   2635 
   2636         for (a_idx = 0; a_idx < _bcmFieldActionCount; a_idx++) {
   2637             if (BCM_FIELD_ASET_TEST(aset_new, a_idx)) {
   2638                 action_conf_ptr = stage_fc->f_action_arr[a_idx];
   2639                 if (NULL != action_conf_ptr) {
   2640                     field_action_set = action_conf_ptr->offset->aset;
   2641                 } else if (a_idx == bcmFieldActionPolicerGroup) {
   2642                     field_action_set = _FieldActionMeterSet;
   2643                 } else if (a_idx == bcmFieldActionStatGroup) {
   2644                     field_action_set = _FieldActionCounterSet;
   2645                 } else {
   2646                     rv = BCM_E_INTERNAL;
   2647                     goto cleanup;
   2648                 }
   2649                 if ((0 == field_action_set) ||
   2650                     (0 == action_set_ptr[field_action_set].size)) {
   2651                     continue;
   2652                 } else {
   2653                     if (1 == action_set_ptr[field_action_set].is_color_dependent) {
   2654                         soc_mem_field32_set(unit, action_profile_mem, act_prof_entry[0],
   2655                                 action_set_ptr[field_action_set].hw_field, 1);
   2656                         soc_mem_field32_set(unit, action_profile_mem, act_prof_entry_new[0],
   2657                                 action_set_ptr[field_action_set].hw_field, 1);
   2658                     } else {
   2659                         soc_mem_field32_set(unit, action_profile_mem, act_prof_entry[1],
   2660                                 action_set_ptr[field_action_set].hw_field, 1);
   2661                         soc_mem_field32_set(unit, action_profile_mem, act_prof_entry_new[1],
   2662                                 action_set_ptr[field_action_set].hw_field, 1);
   2663                     }
   2664                 }
   2665             }
   2666         }
   2667 
   2668         /* now check new action set position with earlier to judge profile update need */
   2669         for (hw_aset_idx = hw_bitmap_entries-1; hw_aset_idx >= 0; hw_aset_idx--) {
   2670             _bcm_field_th_val_get(act_prof_entry_new[0], &act_valid, hw_aset_idx, 1);
   2671             if (act_valid) {
   2672                 if (hw_aset_idx > min_hw_aset_idx_loc[0]) {
   2673                     entry_new_action_profile = 1;
   2674                     break;
   2675                 }
   2676             }
   2677         }
   2678 
   2679         for (hw_aset_idx = hw_bitmap_entries-1; hw_aset_idx >= 0; hw_aset_idx--) {
   2680             _bcm_field_th_val_get(act_prof_entry_new[1], &act_valid, hw_aset_idx, 1);
   2681             if (act_valid) {
   2682                 if (hw_aset_idx > min_hw_aset_idx_loc[1]) {
   2683                     entry_new_action_profile = 1;
   2684                     break;
   2685                 }
   2686             }
   2687         }
   2688     }
   2689 
   2690     /* check if there is any entry installed in group */
   2691     while (tmp < fg->group_status.entry_count) {
   2692         eid = (fg->entry_arr[tmp])->eid;
   2693 
   2694         rv = _field_entry_get(unit, eid, _FP_ENTRY_PRIMARY, &f_ent);
   2695         if (BCM_FAILURE(rv)) {
   2696             goto cleanup;
   2697         }
   2698 
   2699         if (f_ent->flags & _FP_ENTRY_INSTALLED) {
   2700             entry_install_flag = 1;
   2701             break;
   2702         }
   2703         tmp++;
   2704     }
   2705 
   2706     /* if no entry is installed but action set is different,still update same profile */
   2707     if (entry_new_action_profile) {
   2708         if (!entry_install_flag) {
   2709             entry_new_action_profile = 0;
   2710         }
   2711     }
   2712 
   2713     /* time to update action profile and group entries */
   2714     if (group_new_action_profile || entry_new_action_profile) {
   2715 
   2716         /* create new profile entry and get new action profile index */
   2717         if ((!multi_mode) && (!multi_mode_transition)) {
   2718             entries[0] = act_prof_entry[0];
   2719             rv = soc_profile_mem_add(unit,
   2720                                      &stage_fc->action_profile[fg->instance],
   2721                                      entries, 1, &new_ap_idx[0]);
   2722             if (BCM_FAILURE(rv)) {
   2723                 goto cleanup;
   2724             }
   2725             old_ap_idx[0] = fg->action_profile_idx[0];
   2726             fg->action_profile_idx[0] = new_ap_idx[0];
   2727         } else if ((!multi_mode) && (multi_mode_transition)) {
   2728             entries[0] = act_prof_entry[0];
   2729             rv = soc_profile_mem_add(unit,
   2730                                      &stage_fc->action_profile[fg->instance],
   2731                                      entries, 1, &new_ap_idx[0]);
   2732             if (BCM_FAILURE(rv)) {
   2733                 goto cleanup;
   2734             }
   2735             entries[0] = act_prof_entry[1];
   2736             rv = soc_profile_mem_add(unit,
   2737                                      &stage_fc->action_profile[fg->instance],
   2738                                      entries, 1, &new_ap_idx[1]);
   2739             if (BCM_FAILURE(rv)) {
   2740                 goto cleanup;
   2741             }
   2742             old_ap_idx[0] = fg->action_profile_idx[0];
   2743             fg->action_profile_idx[0] = new_ap_idx[0];
   2744             fg->action_profile_idx[1] = new_ap_idx[1];
   2745         } else {
   2746             entries[0] = act_prof_entry[0];
   2747             rv = soc_profile_mem_add(unit,
   2748                                      &stage_fc->action_profile[fg->instance],
   2749                                      entries, 1, &new_ap_idx[0]);
   2750             if (BCM_FAILURE(rv)) {
   2751                 goto cleanup;
   2752             }
   2753             entries[0] = act_prof_entry[1];
   2754             rv = soc_profile_mem_add(unit,
   2755                                      &stage_fc->action_profile[fg->instance],
   2756                                      entries, 1, &new_ap_idx[1]);
   2757             if (BCM_FAILURE(rv)) {
   2758                 goto cleanup;
   2759             }
   2760             old_ap_idx[0] = fg->action_profile_idx[0];
   2761             old_ap_idx[1] = fg->action_profile_idx[1];
   2762             fg->action_profile_idx[0] = new_ap_idx[0];
   2763             fg->action_profile_idx[1] = new_ap_idx[1];
   2764         }
   2765 
   2766         /* loop through all entries in group and update only installed entries */
   2767         while (tmp < fg->group_status.entry_count) {
   2768             eid = (fg->entry_arr[tmp])->eid;
   2769 
   2770             /* get entry description structure. */
   2771             rv = _field_entry_get(unit, eid, _FP_ENTRY_PRIMARY, &f_ent);
   2772             if (BCM_FAILURE(rv)) {
   2773                 goto cleanup;
   2774             }
   2775 
   2776             if (f_ent->flags & _FP_ENTRY_INSTALLED) {
   2777                 rv = _bcm_field_entry_tcam_parts_count(unit, fg->stage_id,
   2778                                                        fg->flags, &parts_count);
   2779                 if (BCM_FAILURE(rv)) {
   2780                     goto cleanup;
   2781                 }
   2782 
   2783                 for (idx = 0; idx < parts_count; idx++) {
   2784                     sal_memset(abuf, 0, sizeof(abuf));
   2785                     /* Install entry per part here, first get tcam_idx */
   2786                     rv = _bcm_field_entry_tcam_idx_get(unit, f_ent + idx, &tcam_idx);
   2787                     if (BCM_FAILURE(rv)) {
   2788                         goto cleanup;
   2789                     }
   2790 
   2791                     /* set action profile data. */
   2792                     if (new_ap_idx[idx] != -1) {
   2793                         rv = _field_th_entry_action_profile_data_set(unit,
   2794                                                                      f_ent,
   2795                                                                      &new_ap_idx[idx],
   2796                                                                      policy_mem,
   2797                                                                      abuf);
   2798                         if (BCM_FAILURE(rv)) {
   2799                             goto cleanup;
   2800                         }
   2801 
   2802                         /* write the policy table */
   2803                         soc_mem_field32_set(unit, policy_mem,
   2804                                             act_policy_entry,
   2805                                             DATA_TYPEf, new_ap_idx[idx]);
   2806                         soc_mem_field_set(unit, policy_mem,
   2807                                           act_policy_entry,
   2808                                           POLICY_DATAf, abuf);
   2809 
   2810                         rv = soc_th_ifp_mem_write(unit, policy_mem,
   2811                                                   MEM_BLOCK_ALL, tcam_idx,
   2812                                                   act_policy_entry);
   2813                         if (BCM_FAILURE(rv)) {
   2814                             goto cleanup;
   2815                         }
   2816                     }
   2817                 }
   2818             }
   2819             tmp++;
   2820         }
   2821 
   2822         /* delete old profile index entry */
   2823         for (ap_idx = 0; ap_idx < MAX_ACT_PROF_ENTRIES_PER_GROUP; ap_idx++) {
   2824             if (old_ap_idx[ap_idx] != -1) {
   2825                 BCM_IF_ERROR_RETURN(soc_profile_mem_delete(unit,
   2826                                     &stage_fc->action_profile[fg->instance],
   2827                                     old_ap_idx[ap_idx]));
   2828             }
   2829         }
   2830 
   2831     } else {
   2832 
   2833         /* update action profile entry at same index */
   2834         for (ap_idx = 0; ap_idx < MAX_ACT_PROF_ENTRIES_PER_GROUP; ap_idx++) {
   2835             entries[0] = act_prof_entry[ap_idx];
   2836             if (fg->action_profile_idx[ap_idx] != -1) {
   2837                 soc_profile_mem_set(unit,
   2838                         &stage_fc->action_profile[fg->instance],
   2839                         entries,
   2840                         fg->action_profile_idx[ap_idx]);
   2841             }
   2842         }
   2843     }
   2844 
   2845     return rv;
   2846 
   2847 cleanup:
   2848     /* restore original field group aset */
   2849     sal_memcpy(&fg->aset, &aset_orig, sizeof(_bcm_field_aset_t));
   2850     for (ap_idx = 0; ap_idx < MAX_ACT_PROF_ENTRIES_PER_GROUP; ap_idx++) {
   2851         if (new_ap_idx[ap_idx] != -1) {
   2852             BCM_IF_ERROR_RETURN(soc_profile_mem_delete(unit,
   2853                                 &stage_fc->action_profile[fg->instance],
   2854                                 new_ap_idx[ap_idx]));
   2855         }
   2856     }
   2857 
   2858     return rv;
   2859 }
   2860 
   2861 /*
   2862  * Function:
   2863  *    _field_td3_presel_qualifiers_init
   2864  *
   2865  * Purpose:
   2866  *    Initialize Field Ingress Stage Preselector Qualifiers.
   2867  *
   2868  * Parameters:
   2869  *    unit       - (IN) BCM device number.
   2870  *    stage_fc   - (IN/OUT) Field Processor stage control structure.
   2871  *
   2872  * Returns:
   2873  *    BCM_E_PARAM       - Null field stage control structure.
   2874  *    BCM_E_MEMORY      - Allocation failure.
   2875  *    BCM_E_INTERNAL    - Invalid CAP Stage ID.
   2876  *    BCM_E_NONE        - Success.
   2877  */
   2878 int
   2879 _field_td3_presel_qualifiers_init(int unit, _field_stage_t *stage_fc)
   2880 {
   2881     /*
   2882      * All the qualifiers offset mentioned are the actual individual HW field
   2883      * offset in IFP_LOGICAL_TABLE_SELECT Memory which are starting from bit
   2884      * position 2. "KEY" overlap field in the memory is used during write,
   2885      * hence to accomidate in the field, the offsets of the qualifiers has to
   2886      * be substracted by 2.
   2887      */
   2888     static int8 key_base_off;
   2889     soc_mem_t mem = INVALIDm;
   2890     soc_field_info_t *field_info = NULL;
   2891     _FP_QUAL_DECL;
   2892 
   2893     /* Allocated stage qualifiers configuration array. */
   2894     _FP_XGS3_ALLOC(stage_fc->f_presel_qual_arr,
   2895         (_bcmFieldQualifyCount * sizeof(_bcm_field_qual_info_t *)),
   2896         "IFP Preselector qualifiers");
   2897 
   2898     if (stage_fc->f_presel_qual_arr == 0) {
   2899         return (BCM_E_MEMORY);
   2900     }
   2901 
   2902     if (stage_fc->stage_id == _BCM_FIELD_STAGE_EXACTMATCH) {
   2903        mem = EXACT_MATCH_LOGICAL_TABLE_SELECT_TCAM_ONLYm;
   2904 #if defined(BCM_FLOWTRACKER_SUPPORT)
   2905     } else if (stage_fc->stage_id == _BCM_FIELD_STAGE_FLOWTRACKER) {
   2906        mem = BSK_FTFP_LTS_LOGICAL_TBL_SEL_TCAMm;
   2907 #endif
   2908     } else {
   2909        mem = IFP_LOGICAL_TABLE_SELECT_TCAM_ONLYm;
   2910     }
   2911 
   2912     field_info = soc_mem_fieldinfo_get(unit, mem, KEYf);
   2913     if (field_info == NULL) {
   2914        return BCM_E_PARAM;
   2915     }
   2916     key_base_off = field_info->bp;
   2917 
   2918     /* Preselector qualifiers. */
   2919     /* SOURCE_CLASS - 32 */
   2920     field_info = soc_mem_fieldinfo_get(unit, mem, SOURCE_CLASSf);
   2921     if (field_info != NULL) {
   2922         _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualifyMixedSrcClassId,
   2923             0, _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
   2924             field_info->bp - key_base_off, 32);
   2925     }
   2926 
   2927     /* EXACT_MATCH_LOGICAL_TABLE_ID_0 - 5 */
   2928     field_info = soc_mem_fieldinfo_get(unit, mem, EXACT_MATCH_LOGICAL_TABLE_ID_0f);
   2929     if (field_info != NULL) {
   2930         _FP_PRESEL_QUAL_ADD(unit, stage_fc,
   2931             _bcmFieldQualifyExactMatchGroupClassIdLookup0,
   2932             _BCM_FIELD_QUAL_OFFSET_NO_EM_SUPPORT,
   2933             _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
   2934             field_info->bp - key_base_off, 5);
   2935     }
   2936 
   2937     /* EXACT_MATCH_LOGICAL_TABLE_ID_1 - 5 */
   2938     field_info = soc_mem_fieldinfo_get(unit, mem, EXACT_MATCH_LOGICAL_TABLE_ID_1f);
   2939     if (field_info != NULL) {
   2940         _FP_PRESEL_QUAL_ADD(unit, stage_fc,
   2941             _bcmFieldQualifyExactMatchGroupClassIdLookup1,
   2942             _BCM_FIELD_QUAL_OFFSET_NO_EM_SUPPORT,
   2943             _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
   2944             field_info->bp - key_base_off, 5);
   2945     }
   2946 
   2947     /* VFI_VALID - 1 */
   2948     field_info = soc_mem_fieldinfo_get(unit, mem, VFI_VALIDf);
   2949     if (field_info != NULL) {
   2950         _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualifyInterfaceClassL2Type,
   2951             0, _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
   2952             field_info->bp - key_base_off , 1);
   2953     }
   2954     /* CPU_PKT_PROFILE_KEY_CONTROL - 1 */
   2955 #if 0
   2956     _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualify,
   2957         0, _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
   2958         45 - key_base_off , 1);
   2959 #endif
   2960     /* MIRROR - 1 */
   2961     field_info = soc_mem_fieldinfo_get(unit, mem, MIRRORf);
   2962     if (field_info != NULL) {
   2963         _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualifyMirrorCopy,
   2964             0, _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
   2965             field_info->bp - key_base_off , 1);
   2966     }
   2967 
   2968     /* DROP - 1 */
   2969     field_info = soc_mem_fieldinfo_get(unit, mem, DROPf);
   2970     if (field_info != NULL) {
   2971         _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualifyDrop,
   2972             0, _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
   2973             field_info->bp - key_base_off , 1);
   2974     }
   2975 
   2976     /* PKT_RESOLUTION - 6 */
   2977     field_info = soc_mem_fieldinfo_get(unit, mem, PKT_RESOLUTIONf);
   2978     if (field_info != NULL) {
   2979         _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualifyPacketRes,
   2980             _BCM_FIELD_QUAL_OFFSET_NO_EM_SUPPORT,
   2981             _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
   2982             field_info->bp - key_base_off , 6);
   2983     }
   2984 
   2985     /* FORWARDING_TYPE - 4 */
   2986     field_info = soc_mem_fieldinfo_get(unit, mem, FORWARDING_TYPEf);
   2987     if (field_info != NULL) {
   2988         _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualifyForwardingType,
   2989             0, _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
   2990             field_info->bp - key_base_off , 4);
   2991     }
   2992 
   2993     /* LOOKUP_STATUS_VECTOR - 19 */
   2994     field_info = soc_mem_fieldinfo_get(unit, mem, LOOKUP_STATUS_VECTORf);
   2995     if (field_info != NULL) {
   2996         _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualifyVlanTranslationHit,
   2997             0, _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
   2998             field_info->bp+0 - key_base_off , 3);
   2999         _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualifyForwardingVlanValid,
   3000             0, _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
   3001             field_info->bp+3 - key_base_off , 1);
   3002         _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualifyIngressStpState,
   3003             0, _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
   3004             field_info->bp+4 - key_base_off , 2);
   3005         _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualifyStpState,
   3006             0, _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
   3007             field_info->bp+4 - key_base_off , 2);
   3008         _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualifyL2SrcHit,
   3009             _BCM_FIELD_QUAL_OFFSET_NO_EM_SUPPORT,
   3010             _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
   3011             field_info->bp+6 - key_base_off , 1);
   3012         _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualifyL2SrcStatic,
   3013             _BCM_FIELD_QUAL_OFFSET_NO_EM_SUPPORT,
   3014             _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
   3015             field_info->bp+7 - key_base_off , 1);
   3016         _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualifyL2DestHit,
   3017             _BCM_FIELD_QUAL_OFFSET_NO_EM_SUPPORT,
   3018             _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
   3019             field_info->bp+8 - key_base_off , 1);
   3020         _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualifyL2CacheHit,
   3021             _BCM_FIELD_QUAL_OFFSET_NO_EM_SUPPORT,
   3022             _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
   3023             field_info->bp+9 - key_base_off , 1);
   3024         _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualifyL3SrcHostHit,
   3025             _BCM_FIELD_QUAL_OFFSET_NO_EM_SUPPORT,
   3026              _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
   3027             field_info->bp+10 - key_base_off , 1);
   3028         _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualifyIpmcStarGroupHit,
   3029             _BCM_FIELD_QUAL_OFFSET_NO_EM_SUPPORT,
   3030             _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
   3031             field_info->bp+10 - key_base_off , 1);
   3032         _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualifyL3DestHostHit,
   3033             _BCM_FIELD_QUAL_OFFSET_NO_EM_SUPPORT,
   3034             _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
   3035             field_info->bp+11 - key_base_off , 1);
   3036         _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualifyL3SrcRouteHit,
   3037             _BCM_FIELD_QUAL_OFFSET_NO_EM_SUPPORT,
   3038             _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
   3039             field_info->bp+12 - key_base_off , 1);
   3040         _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualifyL2StationMove,
   3041             _BCM_FIELD_QUAL_OFFSET_NO_EM_SUPPORT,
   3042             _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
   3043             field_info->bp+13 - key_base_off , 1);
   3044         _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualifyDosAttack,
   3045             _BCM_FIELD_QUAL_OFFSET_NO_FT_SUPPORT,
   3046             _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
   3047             field_info->bp+14 - key_base_off , 1);
   3048         _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualifyIpTunnelHit,
   3049             0, _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
   3050             field_info->bp+15 - key_base_off , 1);
   3051         _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualifyMplsLabel1Hit,
   3052             0, _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
   3053             field_info->bp+16 - key_base_off , 1);
   3054         _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualifyTrillEgressRbridgeHit,
   3055             0, _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
   3056             field_info->bp+16 - key_base_off , 1);
   3057         _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualifyL2GreSrcIpHit,
   3058             0, _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
   3059             field_info->bp+16 - key_base_off , 1);
   3060         _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualifyMimSrcGportHit,
   3061             0, _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
   3062             field_info->bp+16 - key_base_off , 1);
   3063         _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualifyMplsLabel2Hit,
   3064             0, _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
   3065             field_info->bp+17 - key_base_off , 1);
   3066         _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualifyTrillIngressRbridgeHit,
   3067             0, _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
   3068             field_info->bp+17 - key_base_off , 1);
   3069         _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualifyL2GreVfiHit,
   3070             0, _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
   3071             field_info->bp+17 - key_base_off , 1);
   3072         _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualifyMimVfiHit,
   3073             0, _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
   3074             field_info->bp+17 - key_base_off , 1);
   3075         _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualifyMplsTerminated,
   3076             0, _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
   3077             field_info->bp+18 - key_base_off , 1);
   3078         _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualifyIpmcStarGroupHit,
   3079             0, _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
   3080             field_info->bp+19 - key_base_off , 1);
   3081         _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualifyL3DestRouteHit,
   3082             0, _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
   3083             field_info->bp+23 - key_base_off , 1);
   3084     }
   3085 
   3086     /* SVP_VALID - 1 */
   3087     field_info = soc_mem_fieldinfo_get(unit, mem, SVP_VALIDf);
   3088     if (field_info != NULL) {
   3089         _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualifySrcVirtualPortValid,
   3090             0, _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
   3091             field_info->bp - key_base_off , 1);
   3092     }
   3093     /* TUNNEL_TERMINATED - 1 */
   3094     field_info = soc_mem_fieldinfo_get(unit, mem, TUNNEL_TERMINATEDf);
   3095     if (field_info != NULL) {
   3096         _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualifyMyStation2Hit,
   3097             0, _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
   3098             field_info->bp - key_base_off , 1);
   3099     }
   3100     /* MY_STATION_HIT - 1 */
   3101     field_info = soc_mem_fieldinfo_get(unit, mem, MY_STATION_HITf);
   3102     if (field_info != NULL) {
   3103         _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualifyMyStationHit,
   3104             0, _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
   3105             field_info->bp - key_base_off , 1);
   3106     }
   3107 
   3108     /* L4_VALID - 1 */
   3109     field_info = soc_mem_fieldinfo_get(unit, mem, L4_VALIDf);
   3110     if (field_info != NULL) {
   3111         _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualifyL4Ports,
   3112             0, _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
   3113             field_info->bp - key_base_off , 1);
   3114     }
   3115 
   3116     /* L3_TYPE - 5 */
   3117     field_info = soc_mem_fieldinfo_get(unit, mem, L3_TYPEf);
   3118     if (field_info != NULL) {
   3119         _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualifyIpType,
   3120             0, _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
   3121             field_info->bp - key_base_off , 5);
   3122     }
   3123 
   3124     /* PKT_FLOW_ID_0 - 171 */
   3125     field_info = soc_mem_fieldinfo_get(unit, mem, PKT_FLOW_ID_0f);
   3126     if (field_info != NULL) {
   3127         _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualifyFrontPanelPkt,
   3128             0, _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
   3129             field_info->bp+4 - key_base_off , 8);
   3130         _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualifyHiGigProxy,
   3131             0, _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
   3132             field_info->bp+4 - key_base_off , 8);
   3133         _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualifyHiGigProxyTunnelType,
   3134             0, _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
   3135             field_info->bp+4 - key_base_off , 8);
   3136         _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualifyLoopbackType,
   3137             0, _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
   3138             field_info->bp+4 - key_base_off , 8);
   3139     }
   3140 
   3141     /* PKT_FLOW_ID_1 - 157 */
   3142     field_info = soc_mem_fieldinfo_get(unit, mem, PKT_FLOW_ID_1f);
   3143     if (field_info != NULL) {
   3144         _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualifyTunnelSubType,
   3145             0, _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
   3146             field_info->bp - key_base_off , 6);
   3147         _FP_PRESEL_QUAL_ADD(unit, stage_fc, bcmFieldQualifyTunnelType,
   3148             0, _bcmFieldSliceSelDisable, 0, _bcmFieldQualifierTypePresel,
   3149             field_info->bp+10 - key_base_off, 4);
   3150     }
   3151     /* Additional fields for flowtracker stage */
   3152 #if defined(BCM_FLOWTRACKER_SUPPORT)
   3153     if ((stage_fc->stage_id == _BCM_FIELD_STAGE_FLOWTRACKER) &&
   3154         (soc_feature(unit, soc_feature_field_flowtracker_support))) {
   3155         BCM_IF_ERROR_RETURN(_field_hx5_ft_presel_qualifiers_init(unit, stage_fc));
   3156     }
   3157 #endif
   3158 
   3159     return _field_td3_flex_presel_qual_init(unit, stage_fc);
   3160 }
   3161 
   3162 /*
   3163  * Function:
   3164  *     _bcm_field_td3_action_params_check
   3165  * Purpose:
   3166  *     Check field action parameters.
   3167  * Parameters:
   3168  *     unit     - BCM device number
   3169  *     f_ent    - Field entry structure.
   3170  *     fa       - field action
   3171  * Returns:
   3172  *     BCM_E_XXX
   3173  */
   3174 STATIC int
   3175 _bcm_field_td3_action_params_check(int unit,
   3176                               _field_entry_t  *f_ent,
   3177                               _field_action_t *fa)
   3178 {
   3179     if (NULL == f_ent ||
   3180         NULL == fa) {
   3181         LOG_VERBOSE(BSL_LS_BCM_FP, (BSL_META("Invalid Parameters\n")));
   3182         return BCM_E_PARAM;
   3183     }
   3184 
   3185     if (_BCM_FIELD_STAGE_EXTERNAL == f_ent->group->stage_id) {
   3186         return BCM_E_INTERNAL;
   3187     }
   3188 
   3189     switch (f_ent->group->stage_id) {
   3190         case _BCM_FIELD_STAGE_LOOKUP:
   3191            switch (fa->action) {
   3192               case bcmFieldActionVlanActions:
   3193                   if (f_ent->vlan_action_set == NULL) {
   3194                      return BCM_E_INTERNAL;
   3195                   }
   3196                   BCM_IF_ERROR_RETURN(_bcm_trx_vlan_action_verify(unit,
   3197                                               f_ent->vlan_action_set));
   3198                   return BCM_E_NONE;
   3199                   break;
   3200               case bcmFieldActionAssignOpaqueObject4:
   3201               case bcmFieldActionAssignOpaqueObject3:
   3202               case bcmFieldActionAssignOpaqueObject2:
   3203               case bcmFieldActionAssignOpaqueObject1:
   3204                   if (fa->param[0] >> 16) {
   3205                       return BCM_E_PARAM;
   3206                   }
   3207                   break;
   3208               case bcmFieldActionAssignExtractionCtrlId:
   3209                   if ((fa->param[0] >> 8) || (fa->param[1] >> 8)) {
   3210                       return BCM_E_PARAM;
   3211                   }
   3212                   break;
   3213 #if defined (BCM_HELIX5_SUPPORT)
   3214               case bcmFieldActionCosMapSelect:
   3215                   if (bcmFieldCosMapSelectCount <= fa->param[0]) {
   3216                       return BCM_E_PARAM;
   3217                   }
   3218                   break;
   3219 #endif
   3220               default:
   3221                   break;
   3222            }
   3223            break;
   3224         default:
   3225             ;
   3226     }
   3227 
   3228     return _bcm_field_th_action_params_check(unit, f_ent, fa);
   3229 }
   3230 
   3231 /*
   3232  * Routine to Set Match ID width partition for each zone
   3233  * for a given stage.
   3234  */
   3235 int
   3236 _bcm_field_td3_zone_match_id_partition_init(int unit,
   3237                                             _field_stage_t *stage_fc)
   3238 {
   3239     uint8 inst;
   3240     uint32 entry;
   3241     soc_reg_t *reg;
   3242     soc_reg_t ifp_ing_match_id_cfg_reg[_FP_MAX_NUM_PIPES + 1] =
   3243              {
   3244                  IFP_ING_ZONE_MATCH_ID_CONFIG_PIPE0r,
   3245                  IFP_ING_ZONE_MATCH_ID_CONFIG_PIPE1r,
   3246                  INVALIDr,
   3247                  INVALIDr,
   3248 #if defined (BCM_TOMAHAWK3_SUPPORT)
   3249                  INVALIDr,
   3250                  INVALIDr,
   3251                  INVALIDr,
   3252                  INVALIDr,
   3253 #endif
   3254                  IFP_ING_ZONE_MATCH_ID_CONFIGr
   3255              };
   3256     soc_reg_t em_ing_match_id_cfg_reg[_FP_MAX_NUM_PIPES + 1] =
   3257              {
   3258                  EXACT_MATCH_ING_ZONE_MATCH_ID_CONFIG_PIPE0r,
   3259                  EXACT_MATCH_ING_ZONE_MATCH_ID_CONFIG_PIPE1r,
   3260                  INVALIDr,
   3261                  INVALIDr,
   3262 #if defined (BCM_TOMAHAWK3_SUPPORT)
   3263                  INVALIDr,
   3264                  INVALIDr,
   3265                  INVALIDr,
   3266                  INVALIDr,
   3267 #endif
   3268                  EXACT_MATCH_ING_ZONE_MATCH_ID_CONFIGr
   3269              };
   3270 
   3271     if (stage_fc->stage_id == _BCM_FIELD_STAGE_INGRESS) {
   3272        reg = ifp_ing_match_id_cfg_reg;
   3273     } else if (stage_fc->stage_id == _BCM_FIELD_STAGE_EXACTMATCH) {
   3274        reg = em_ing_match_id_cfg_reg;
   3275     } else {
   3276        return BCM_E_PARAM;
   3277     }
   3278 
   3279     for (inst = 0; inst < stage_fc->num_instances; inst++) {
   3280        if (stage_fc->oper_mode == bcmFieldGroupOperModeGlobal) {
   3281           inst = _FP_MAX_NUM_PIPES;
   3282        }
   3283 
   3284        entry = 0;
   3285        soc_reg_field_set(unit, reg[inst], &entry, ZONE_0_MATCH_ID_WIDTHf, _FP_TD3_ZONE_0_MATCH_ID_WIDTH);
   3286        soc_reg_field_set(unit, reg[inst], &entry, ZONE_1_MATCH_ID_WIDTHf, _FP_TD3_ZONE_1_MATCH_ID_WIDTH);
   3287        soc_reg_field_set(unit, reg[inst], &entry, ZONE_2_MATCH_ID_WIDTHf, _FP_TD3_ZONE_2_MATCH_ID_WIDTH);
   3288        soc_reg_field_set(unit, reg[inst], &entry, ZONE_3_MATCH_ID_WIDTHf, _FP_TD3_ZONE_3_MATCH_ID_WIDTH);
   3289        soc_reg_field_set(unit, reg[inst], &entry, ZONE_4_MATCH_ID_WIDTHf, _FP_TD3_ZONE_4_MATCH_ID_WIDTH);
   3290 
   3291        BCM_IF_ERROR_RETURN (soc_reg32_set(unit, reg[inst], REG_PORT_ANY, 0, entry));
   3292     }
   3293 
   3294     return BCM_E_NONE;
   3295 }
   3296 
   3297 /*
   3298  * Function:
   3299  *     _bcm_field_td3_action_support_check
   3300  * Purpose:
   3301  *     Check if action is supported by tomahawk for the given stage.
   3302  * Parameters:
   3303  *     unit     - (IN) BCM device number.
   3304  *     f_ent    - (IN) Field entry structure to get policy info from.
   3305  *     action   - (IN) Action to check(bcmFieldActionXXX)
   3306  *     result   - (OUT)
   3307  *               TRUE   - action is supported by device
   3308  *               FALSE  - action is NOT supported by device
   3309  * Returns:
   3310  *     BCM_E_XXX
   3311  */
   3312 int
   3313 _bcm_field_td3_action_support_check(int unit,
   3314                                     _field_entry_t *f_ent,
   3315                                     bcm_field_action_t action,
   3316                                     int *result)
   3317 {
   3318     if ((NULL == result) || (NULL == f_ent)) {
   3319         return BCM_E_PARAM;
   3320     }
   3321 
   3322     switch (f_ent->group->stage_id) {
   3323         case _BCM_FIELD_STAGE_LOOKUP:
   3324              switch (action) {
   3325                   case bcmFieldActionVlanActions:
   3326                   case bcmFieldActionPacketTraceEnable:
   3327                   case bcmFieldActionAssignOpaqueObject4:
   3328                   case bcmFieldActionAssignOpaqueObject3:
   3329                   case bcmFieldActionAssignOpaqueObject2:
   3330                   case bcmFieldActionAssignOpaqueObject1:
   3331                   case bcmFieldActionAssignExtractionCtrlId:
   3332                       *result = TRUE;
   3333                       return BCM_E_NONE;
   3334 #if defined (BCM_HELIX5_SUPPORT)
   3335                   case bcmFieldActionCosMapSelect:
   3336                       *result = SOC_IS_HELIX5(unit);
   3337                       return BCM_E_NONE;
   3338 #endif
   3339                   case bcmFieldActionFlowtrackerGroupId:
   3340                       *result = soc_feature(unit, soc_feature_mv2_style_flowtracker)
   3341                                                                       ? TRUE : FALSE;
   3342                       return BCM_E_NONE;
   3343                   case bcmFieldActionOuterVlanCfiNew:
   3344                   case bcmFieldActionOuterVlanAdd:
   3345                   case bcmFieldActionOuterVlanNew:
   3346                   case bcmFieldActionOuterVlanPrioNew:
   3347                   case bcmFieldActionOuterVlanPrioCopyInner:
   3348                   case bcmFieldActionOuterVlanCfiCopyInner:
   3349                   case bcmFieldActionOuterVlanCopyInner:
   3350                   case bcmFieldActionOuterVlanLookup:
   3351                   case bcmFieldActionInnerVlanCfiNew:
   3352                   case bcmFieldActionInnerVlanAdd:
   3353                   case bcmFieldActionInnerVlanDelete:
   3354                   case bcmFieldActionInnerVlanNew:
   3355                   case bcmFieldActionInnerVlanPrioNew:
   3356                   case bcmFieldActionInnerVlanPrioCopyOuter:
   3357                   case bcmFieldActionInnerVlanCfiCopyOuter:
   3358                   case bcmFieldActionInnerVlanCopyOuter:
   3359                   case bcmFieldActionPrioPktNew:
   3360                   case bcmFieldActionPrioPktAndIntNew:
   3361                        *result = FALSE;
   3362                        return BCM_E_NONE;
   3363                   default:
   3364                        break;
   3365              }
   3366              break;
   3367         default:
   3368              break;
   3369     }
   3370 
   3371     return _bcm_field_th_action_support_check(unit, f_ent, action, result);
   3372 }
   3373 
   3374 /*
   3375  * Function:
   3376  *     _bcm_field_td3_action_get
   3377  * Purpose:
   3378  *     Get the actions to be written
   3379  * Parameters:
   3380  *     unit     - BCM device number
   3381  *     mem      - Policy table memory
   3382  *     f_ent    - entry structure to get policy info from
   3383  *     tcam_idx - index into TCAM
   3384  *     fa       - field action
   3385  *     buf      - (OUT) Field Policy table entry
   3386  * Returns:
   3387  *     BCM_E_NONE
   3388  *     BCM_E_PARAM - Action parameter out-of-range or unrecognized action.
   3389  * Notes:
   3390  *     This is a simple read/modify/write pattern.
   3391  *     FP unit lock should be held by calling function.
   3392  */
   3393 int
   3394 _bcm_field_td3_action_get(int             unit,
   3395                           soc_mem_t       mem,
   3396                           _field_entry_t  *f_ent,
   3397                           int             tcam_idx,
   3398                           _field_action_t *fa,
   3399                           uint32          *buf
   3400                           )
   3401 {
   3402     bcm_vlan_action_set_t *actions;
   3403 
   3404     if (NULL == f_ent || NULL == fa || NULL == buf) {
   3405         return (BCM_E_PARAM);
   3406     }
   3407 
   3408     switch (fa->action) {
   3409         case bcmFieldActionVlanActions:
   3410             if ((f_ent->vlan_action_set == NULL) ||
   3411                 (fa->hw_index == _FP_INVALID_INDEX)) {
   3412                return BCM_E_CONFIG;
   3413             }
   3414             actions = f_ent->vlan_action_set;
   3415             PolicySet(unit, mem, buf, NEW_INNER_CFIf, actions->new_inner_cfi);
   3416             PolicySet(unit, mem, buf, NEW_INNER_DOT1Pf, actions->new_inner_pkt_prio);
   3417             PolicySet(unit, mem, buf, NEW_OUTER_CFIf, actions->new_outer_cfi);
   3418             PolicySet(unit, mem, buf, NEW_OUTER_DOT1Pf, actions->priority);
   3419             PolicySet(unit, mem, buf, NEW_INNER_VLANf, actions->new_inner_vlan);
   3420             PolicySet(unit, mem, buf, NEW_OUTER_VLANf, actions->new_outer_vlan);
   3421             PolicySet(unit, mem, buf, TAG_ACTION_PROFILE_PTRf, fa->hw_index);
   3422             break;
   3423         case bcmFieldActionPacketTraceEnable:
   3424             PolicySet(unit, mem, buf, INSTRUMENTATION_TRIGGERS_ENABLEf, 0x1);
   3425             break;
   3426         default:
   3427             return (BCM_E_UNAVAIL);
   3428     }
   3429 
   3430     return BCM_E_NONE;
   3431 }
   3432 
   3433 /*
   3434  * Function to allocate HW resource for ING_VLAN_TAG_ACTION_PROFILE_TABLE
   3435  * for the given VLAN action set.
   3436  */
   3437 int _bcm_field_td3_vlan_action_hw_alloc(int unit, _field_entry_t *f_ent)
   3438 {
   3439     int               rv;
   3440     uint32            profile_idx;
   3441     _field_action_t  *fa;
   3442 
   3443     if (f_ent == NULL) {
   3444        return BCM_E_PARAM;
   3445     }
   3446 
   3447     /* Extract action info from the entry structure. */
   3448     for (fa = f_ent->actions;
   3449          ((fa != NULL) && (_FP_ACTION_VALID & fa->flags));
   3450          fa = fa->next) {
   3451         /* Allocate mtp destination only for mirroring actions */
   3452         if (bcmFieldActionVlanActions != fa->action) {
   3453             continue;
   3454         }
   3455 
   3456         if(_FP_ACTION_MODIFY & fa->flags) {
   3457             fa->old_index = fa->hw_index;
   3458             fa->hw_index = _FP_INVALID_INDEX;
   3459         }
   3460 
   3461         if (_FP_INVALID_INDEX == fa->hw_index) {
   3462             rv = _bcm_trx_vlan_action_profile_entry_add(unit,
   3463                                       f_ent->vlan_action_set,
   3464                                                &profile_idx);
   3465             if ((BCM_E_RESOURCE == rv) &&
   3466                (_FP_INVALID_INDEX != fa->old_index)) {
   3467                int ref_count = 0;
   3468 
   3469                /*
   3470                 * Retrieve the reference count and if ref_count <= 1,
   3471                 * delete the profile and add new profile.
   3472                 */
   3473                rv = _bcm_trx_vlan_action_profile_ref_count_get(unit,
   3474                                          fa->old_index, &ref_count);
   3475                if (BCM_FAILURE(rv)) {
   3476                   return rv;
   3477                }
   3478 
   3479                 if (ref_count > 1) {
   3480                     return (BCM_E_RESOURCE);
   3481                 }
   3482 
   3483                /*
   3484                 * Destroy old profile ONLY if it is not used by other entries.
   3485                 */
   3486                 rv = _bcm_trx_vlan_action_profile_entry_delete(unit,
   3487                                                      fa->old_index);
   3488                 if (BCM_FAILURE(rv)) {
   3489                    return rv;
   3490                 }
   3491 
   3492                 /* Destroy old profile is no longer required. */
   3493                 fa->old_index = _FP_INVALID_INDEX;
   3494 
   3495                 /* Reallocate profile for new action. */
   3496                 rv = _bcm_trx_vlan_action_profile_entry_add(unit,
   3497                                           f_ent->vlan_action_set,
   3498                                                    &profile_idx);
   3499                 if (BCM_FAILURE(rv)) {
   3500                    return rv;
   3501                 }
   3502             }
   3503             fa->hw_index = profile_idx;
   3504         }
   3505         break;
   3506     }
   3507 
   3508     return BCM_E_NONE;
   3509 }
   3510 
   3511 /*
   3512  * Function to free HW resource allocated for ING_VLAN_TAG_ACTION_PROFILE_TABLE
   3513  * for the given VLAN action set.
   3514  */
   3515 int
   3516 _bcm_field_td3_vlan_action_hw_free(int unit, _field_entry_t *f_ent, uint32 flags)
   3517 {
   3518     _field_action_t *fa;  /* Field action descriptor. */
   3519     int rv = BCM_E_NONE;  /* Operation return status. */
   3520 
   3521     if (f_ent->group->stage_id != _BCM_FIELD_STAGE_LOOKUP) {
   3522         return (BCM_E_NONE);
   3523     }
   3524 
   3525     /* Extract the policy info from the entry structure. */
   3526     for (fa = f_ent->actions; fa != NULL; fa = fa->next) {
   3527         switch (fa->action) {
   3528           case bcmFieldActionVlanActions:
   3529               if ((flags & _FP_ACTION_RESOURCE_FREE) &&
   3530                   (_FP_INVALID_INDEX != fa->hw_index)) {
   3531                   rv = _bcm_trx_vlan_action_profile_entry_delete(unit,
   3532                                                         fa->hw_index);
   3533                   if (BCM_E_NOT_FOUND == rv) {
   3534                       /*
   3535                        * This issue should occur only when VlanActions is added and installed
   3536                        * in the Field Entry and user triggered 'rc'.
   3537                        * During 'rc', All VLAN action profiles are getting cleared by
   3538                        * PORT/VLAN module init.
   3539                        * Profile entry delete is expected to fail with BCM_E_NOTFOUND error.
   3540                        */
   3541                       LOG_ERROR(BSL_LS_BCM_FP,
   3542                               (BSL_META_U(unit,
   3543                                           "Warning: Failed to delete the profile index of"
   3544                                           " Action 'VlanActions' for Entry %d "
   3545                                           "\n"),
   3546                                f_ent->eid));
   3547                       /* Overwrite the error as SUCCESS if BCM_E_NOTFOUND */
   3548                       rv = BCM_E_NONE;
   3549                   }
   3550                   BCM_IF_ERROR_RETURN(rv);
   3551                   fa->hw_index = _FP_INVALID_INDEX;
   3552               }
   3553 
   3554               if ((flags & _FP_ACTION_OLD_RESOURCE_FREE) &&
   3555                   (_FP_INVALID_INDEX != fa->old_index)) {
   3556                   rv = _bcm_trx_vlan_action_profile_entry_delete(unit,
   3557                                                         fa->old_index);
   3558                   BCM_IF_ERROR_RETURN(rv);
   3559                   fa->old_index = _FP_INVALID_INDEX;
   3560               }
   3561               break;
   3562           default:
   3563               break;
   3564         }
   3565     }
   3566     return (rv);
   3567 }
   3568 
   3569 /*
   3570  * Update bcm_vlan_action_set_t structure from HW for a given profile index
   3571  * and FP Policy memory.
   3572  * Note: Policy entry must contain the policy mem data.
   3573  */
   3574 int _bcm_field_td3_vlan_action_profile_entry_get(int unit,
   3575                                                  soc_mem_t policy_mem,
   3576                                                  uint32 *policy_entry,
   3577                                                  uint32 profile_index,
   3578                                                  bcm_vlan_action_set_t *actions)
   3579 {
   3580     if ((NULL == policy_entry) || (actions == NULL)) {
   3581        return BCM_E_PARAM;
   3582     }
   3583 
   3584     _bcm_trx_vlan_action_profile_entry_get(unit, actions, profile_index);
   3585 
   3586     actions->new_inner_pkt_prio = PolicyGet(unit, policy_mem, policy_entry, NEW_INNER_DOT1Pf);
   3587     actions->new_outer_cfi = PolicyGet(unit, policy_mem, policy_entry, NEW_OUTER_CFIf);
   3588     actions->new_inner_cfi = PolicyGet(unit, policy_mem, policy_entry, NEW_INNER_CFIf);
   3589     actions->priority = PolicyGet(unit, policy_mem, policy_entry, NEW_OUTER_DOT1Pf);
   3590     actions->new_inner_vlan = PolicyGet(unit, policy_mem, policy_entry, NEW_INNER_VLANf);
   3591     actions->new_outer_vlan = PolicyGet(unit, policy_mem, policy_entry, NEW_OUTER_VLANf);
   3592 
   3593     return BCM_E_NONE;
   3594 }
   3595 /*
   3596  * Function:
   3597  *     _field_td3_egress_qualifiers_init
   3598  * Purpose:
   3599  *     Initialize device stage egress qaualifiers
   3600  *     select codes & offsets
   3601  * Parameters:
   3602  *     unit       - (IN) BCM device number.
   3603  *     stage_fc   - (IN) Field Processor stage control structure.
   3604  *
   3605  * Returns:
   3606  *     BCM_E_NONE
   3607  */
   3608 int
   3609 _field_td3_egress_qualifiers_init(int unit, _field_stage_t *stage_fc)
   3610 {
   3611     _FP_QUAL_DECL;
   3612     _key_fld_ = KEYf;
   3613 
   3614     /* Input parameters check. */
   3615     if (NULL == stage_fc) {
   3616         return (BCM_E_PARAM);
   3617     }
   3618 
   3619     /* Allocated stage qualifiers configuration array. */
   3620     _FP_XGS3_ALLOC(stage_fc->f_qual_arr,
   3621         (_bcmFieldQualifyCount * sizeof(_bcm_field_qual_info_t *)),
   3622          "Field qualifiers");
   3623     if (NULL == stage_fc->f_qual_arr) {
   3624         return (BCM_E_MEMORY);
   3625     }
   3626 
   3627     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyStageEgress,
   3628                  _bcmFieldSliceSelDisable, 0, 0, 0);
   3629 
   3630    /* EFP_KEY4(L2 Key) Qualifiers */
   3631     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyL4Ports,
   3632                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4, 0, 1);
   3633     /* EG_NEXT_HOP_CLASS_ID */
   3634     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClass,
   3635                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4,
   3636                                _bcmFieldSliceSelEgrDvpKey4, 1,
   3637                                2, 12);
   3638     /* EG_L3_INTF_CLASS_ID */
   3639     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc,
   3640                                bcmFieldQualifyEgressClassL3Interface,
   3641                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4,
   3642                                _bcmFieldSliceSelEgrDvpKey4, 2,
   3643                                2, 12);
   3644     /* EG_DVP_CLASS_ID */
   3645     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassTrill,
   3646                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4,
   3647                                _bcmFieldSliceSelEgrDvpKey4, 3,
   3648                                2, 12);
   3649     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassWlan,
   3650                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4,
   3651                                _bcmFieldSliceSelEgrDvpKey4, 3,
   3652                                2, 12);
   3653     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassL2Gre,
   3654                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4,
   3655                                _bcmFieldSliceSelEgrDvpKey4, 3,
   3656                                2, 12);
   3657     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassVxlan,
   3658                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4,
   3659                                _bcmFieldSliceSelEgrDvpKey4, 3,
   3660                                2, 12);
   3661 
   3662     /* DVP_VALID + DVP + SPARE_DVP */
   3663     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstMplsGport,
   3664                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4,
   3665                                _bcmFieldSliceSelEgrDvpKey4, 0,
   3666                                1, 17);
   3667     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstMplsGports,
   3668                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4,
   3669                                _bcmFieldSliceSelEgrDvpKey4, 0,
   3670                                1, 17);
   3671     if (soc_feature(unit, soc_feature_niv)) {
   3672         _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstNivGport,
   3673                                    _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4,
   3674                                    _bcmFieldSliceSelEgrDvpKey4, 0,
   3675                                    1, 17);
   3676         _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstNivGports,
   3677                                    _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4,
   3678                                    _bcmFieldSliceSelEgrDvpKey4, 0,
   3679                                    1, 17);
   3680     }
   3681     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstMimGport,
   3682                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4,
   3683                                _bcmFieldSliceSelEgrDvpKey4, 0,
   3684                                1, 17);
   3685     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstMimGports,
   3686                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4,
   3687                                _bcmFieldSliceSelEgrDvpKey4, 0,
   3688                                1, 17);
   3689     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstVxlanGport,
   3690                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4,
   3691                                _bcmFieldSliceSelEgrDvpKey4, 0,
   3692                                1, 17);
   3693     _FP_QUAL_EXT_ADD(unit, stage_fc, bcmFieldQualifyDstVxlanGports,
   3694                               _bcmFieldDevSelDisable, 0,
   3695                               _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4,
   3696                               _bcmFieldSliceSelEgrDvpKey4, 0,
   3697                               0,
   3698                               1, 17,
   3699                               227, 2, /* DVP TYPE */
   3700                               0, 0,
   3701                               0
   3702                               );
   3703     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstVlanGport,
   3704                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4,
   3705                                _bcmFieldSliceSelEgrDvpKey4, 0,
   3706                                1, 17);
   3707     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstVlanGports,
   3708                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4,
   3709                                _bcmFieldSliceSelEgrDvpKey4, 0,
   3710                                1, 17);
   3711     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstGport,
   3712                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4,
   3713                                _bcmFieldSliceSelEgrDvpKey4, 0,
   3714                                1, 17);
   3715     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstGports,
   3716                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4,
   3717                                _bcmFieldSliceSelEgrDvpKey4, 0,
   3718                                1, 17);
   3719     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc,
   3720                                bcmFieldQualifyDestVirtualPortValid,
   3721                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4,
   3722                                _bcmFieldSliceSelEgrDvpKey4, 0,
   3723                                1, 1);
   3724 
   3725     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyIntPriority,
   3726                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4, 18, 4);
   3727     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyColor,
   3728                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4, 22, 2);
   3729     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyL2Format,
   3730                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4, 24, 2);
   3731     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyEtherType,
   3732                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4, 26, 16);
   3733     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifySrcMac,
   3734                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4, 42, 48);
   3735     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyDstMac,
   3736                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4, 90, 48);
   3737     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyHiGigProxy,
   3738                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4, 139, 1);
   3739     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyHiGig,
   3740                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4, 140, 1);
   3741     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyInnerVlan,
   3742                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4, 141, 16);
   3743     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyInnerVlanCfi,
   3744                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4, 141, 1);
   3745     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyInnerVlanPri,
   3746                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4, 142, 3);
   3747     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyInnerVlanId,
   3748                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4, 145, 12);
   3749     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyInPort,
   3750                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4, 157, 8);
   3751     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyL3Routable,
   3752                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4, 165, 1);
   3753     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyMirrorCopy,
   3754                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4, 166, 1);
   3755     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyOuterVlan,
   3756                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4, 167, 16);
   3757     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyOuterVlanId,
   3758                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4, 167, 12);
   3759     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyOuterVlanCfi,
   3760                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4, 179, 1);
   3761     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyOuterVlanPri,
   3762                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4, 180, 3);
   3763     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyVlanFormat,
   3764                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4, 183, 2);
   3765     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyDstHiGig,
   3766                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4, 185, 1);
   3767     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyInterfaceClassPort,
   3768                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4,
   3769                                _bcmFieldSliceSelEgrClassF4, 0,
   3770                                186, 8);
   3771     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifySrcClassL2,
   3772                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4,
   3773                                _bcmFieldSliceSelEgrClassF4, 0,
   3774                                194, 13
   3775                                );
   3776     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifySrcClassL3,
   3777                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4,
   3778                                _bcmFieldSliceSelEgrClassF4, 0,
   3779                                194, 13
   3780                                );
   3781     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstClassField,
   3782                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4,
   3783                                _bcmFieldSliceSelEgrClassF4, 0,
   3784                                194, 13
   3785                                );
   3786     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifySrcClassField,
   3787                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4,
   3788                                _bcmFieldSliceSelEgrClassF4, 0,
   3789                                194, 13
   3790                                );
   3791     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstClassL2,
   3792                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4,
   3793                                _bcmFieldSliceSelEgrClassF4, 0,
   3794                                194, 13
   3795                                );
   3796     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstClassL3,
   3797                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4,
   3798                                _bcmFieldSliceSelEgrClassF4, 0,
   3799                                194, 13
   3800                                );
   3801     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyInterfaceClassL2,
   3802                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4,
   3803                                _bcmFieldSliceSelEgrClassF4, 0,
   3804                                194, 13
   3805                                );
   3806     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyInterfaceClassL3,
   3807                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4,
   3808                                _bcmFieldSliceSelEgrClassF4, 0,
   3809                                194, 13
   3810                                );
   3811     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyIngressClassField,
   3812                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4,
   3813                                _bcmFieldSliceSelEgrClassF4, 0,
   3814                                194, 13
   3815                                );
   3816     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc,
   3817                                bcmFieldQualifyIngressInterfaceClassPort,
   3818                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4,
   3819                                _bcmFieldSliceSelEgrClassF4, 0,
   3820                                194, 13
   3821                                );
   3822     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc,
   3823                                bcmFieldQualifyIngressInterfaceClassVPort,
   3824                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4,
   3825                                _bcmFieldSliceSelEgrClassF4, 0,
   3826                                194, 12
   3827                                );
   3828     /*
   3829      * bcmFieldQualifyInterfaceClassPort refers to EGR_PORT_GROUP_ID which gets
   3830      * passed in CLASS_ID container for 0, 1 and 2 encoding of
   3831      * EFP_CLASS_ID_A_SELECT for KEY4.
   3832      */
   3833     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyInterfaceClassPort,
   3834                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4,
   3835                                _bcmFieldSliceSelEgrClassF4, 1,
   3836                                186, 8);
   3837     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyOutPort,
   3838                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4,
   3839                                _bcmFieldSliceSelEgrClassF4, 1,
   3840                                194, 8);
   3841     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyInterfaceClassPort,
   3842                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4,
   3843                                _bcmFieldSliceSelEgrClassF4, 2,
   3844                                186, 8);
   3845     _FP_QUAL_EXT_ADD(unit, stage_fc, bcmFieldQualifyCpuQueue,
   3846                      _bcmFieldDevSelDisable, 0,
   3847                      _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4,
   3848                      _bcmFieldSliceSelEgrClassF4, 2,
   3849                      0,
   3850                      194, 6, /* CpuCos - 6 bits */
   3851                      0, 0,
   3852                      0, 0,
   3853                      0
   3854                      );
   3855     _FP_QUAL_EXT_ADD(unit, stage_fc, bcmFieldQualifyDstPort,
   3856                                _bcmFieldDevSelDisable, 0,
   3857                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4,
   3858                                _bcmFieldSliceSelEgrClassF4, 3,
   3859                                0,
   3860                                194, 8, /* DST_PORT */
   3861                                186, 8, /* DST_MODID */
   3862                                0, 0,
   3863                                0
   3864                                );
   3865 
   3866     /* CLASS_ID_B */
   3867     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifySrcClassL2,
   3868                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4,
   3869                                _bcmFieldSliceSelEgrClassIdBF4, 0,
   3870                                207, 15);
   3871     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifySrcClassL3,
   3872                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4,
   3873                                _bcmFieldSliceSelEgrClassIdBF4, 0,
   3874                                207, 15);
   3875     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstClassField,
   3876                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4,
   3877                                _bcmFieldSliceSelEgrClassIdBF4, 0,
   3878                                207, 15);
   3879     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifySrcClassField,
   3880                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4,
   3881                                _bcmFieldSliceSelEgrClassIdBF4, 0,
   3882                                207, 15);
   3883     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstClassL2,
   3884                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4,
   3885                                _bcmFieldSliceSelEgrClassIdBF4, 0,
   3886                                207, 15);
   3887     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstClassL3,
   3888                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4,
   3889                                _bcmFieldSliceSelEgrClassIdBF4, 0,
   3890                                207, 15);
   3891     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyInterfaceClassL2,
   3892                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4,
   3893                                _bcmFieldSliceSelEgrClassIdBF4, 0,
   3894                                207, 15);
   3895     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyInterfaceClassL3,
   3896                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4,
   3897                                _bcmFieldSliceSelEgrClassIdBF4, 0,
   3898                                207, 15);
   3899     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyIngressClassField,
   3900                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4,
   3901                                _bcmFieldSliceSelEgrClassIdBF4, 0,
   3902                                207, 15);
   3903     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc,
   3904                                bcmFieldQualifyIngressInterfaceClassPort,
   3905                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4,
   3906                                _bcmFieldSliceSelEgrClassIdBF4, 0,
   3907                                207, 15);
   3908     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc,
   3909                                bcmFieldQualifyIngressInterfaceClassVPort,
   3910                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4,
   3911                                _bcmFieldSliceSelEgrClassIdBF4, 0,
   3912                                207, 15);
   3913     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClass,
   3914                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4,
   3915                                _bcmFieldSliceSelEgrClassIdBF4, 1,
   3916                                207, 15);
   3917     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassTunnel,
   3918                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4,
   3919                                _bcmFieldSliceSelEgrClassIdBF4, 2,
   3920                                207, 15);
   3921     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc,
   3922                                bcmFieldQualifyEgressClassL3Interface,
   3923                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4,
   3924                                _bcmFieldSliceSelEgrClassIdBF4, 3,
   3925                                207, 15);
   3926     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc,
   3927                                bcmFieldQualifyEgressClassL3InterfaceTunnel,
   3928                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4,
   3929                                _bcmFieldSliceSelEgrClassIdBF4, 4,
   3930                                207, 15);
   3931     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassTrill,
   3932                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4,
   3933                                _bcmFieldSliceSelEgrClassIdBF4, 5,
   3934                                207, 15);
   3935     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassL2Gre,
   3936                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4,
   3937                                _bcmFieldSliceSelEgrClassIdBF4, 5,
   3938                                207, 15);
   3939     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassVxlan,
   3940                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4,
   3941                                _bcmFieldSliceSelEgrClassIdBF4, 5,
   3942                                207, 15);
   3943     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassWlan,
   3944                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4,
   3945                                _bcmFieldSliceSelEgrClassIdBF4, 5,
   3946                                207, 15);
   3947     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyOutPort,
   3948                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4,
   3949                                _bcmFieldSliceSelEgrClassIdBF4, 6,
   3950                                207, 15);
   3951     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyCpuQueue,
   3952                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4,
   3953                                _bcmFieldSliceSelEgrClassIdBF4, 7,
   3954                                207, 15);
   3955     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstMplsGport,
   3956                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4,
   3957                                _bcmFieldSliceSelEgrClassIdBF4, 8,
   3958                                207, 15);
   3959     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstMimGport,
   3960                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4,
   3961                                _bcmFieldSliceSelEgrClassIdBF4, 8,
   3962                                207, 15);
   3963     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstVxlanGport,
   3964                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4,
   3965                                _bcmFieldSliceSelEgrClassIdBF4, 8,
   3966                                207, 15);
   3967     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressForwardingClassId,
   3968                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4,
   3969                                _bcmFieldSliceSelEgrClassIdBF4, 9,
   3970                                207, 15);
   3971 
   3972     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyIpType,
   3973                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4, 222, 5);
   3974     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyForwardingVlanId,
   3975                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4, 227, 12);
   3976     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyVrf,
   3977                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4, 227, 13);
   3978     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyVpn,
   3979                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4, 227,
   3980                  SOC_IS_HELIX5(unit) ? 12 : 13);
   3981 
   3982     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyForwardingType,
   3983                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4, 241, 2);
   3984     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyIntCongestionNotification,
   3985                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4, 243, 2);
   3986     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyDrop,
   3987                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4, 245, 1);
   3988     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyVlanTranslationHit,
   3989                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4, 246, 2);
   3990 
   3991     /* EFP_KEY1(IPv4 Key) Qualifiers */
   3992 
   3993     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyL4Ports,
   3994                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1, 0, 1);
   3995     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyIntPriority,
   3996                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1, 1, 4);
   3997     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyColor,
   3998                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1, 5, 2);
   3999     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyIpFrag,
   4000                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1, 7, 2);
   4001     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyTcpControl,
   4002                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1, 9, 8);
   4003     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyL4DstPort,
   4004                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1, 17, 16);
   4005     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyL4SrcPort,
   4006                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1, 33, 16);
   4007     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyIcmpTypeCode,
   4008                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1, 33, 16);
   4009     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyTtl,
   4010                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1, 49, 8);
   4011     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyIpProtocol,
   4012                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1, 57, 8);
   4013     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyDstIp,
   4014                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1, 65, 32);
   4015     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifySrcIp,
   4016                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1, 97, 32);
   4017     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyTos,
   4018                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1, 129, 8);
   4019     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyHiGigProxy,
   4020                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1, 137, 1);
   4021     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyHiGig,
   4022                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1, 138, 1);
   4023     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyInnerVlanId,
   4024                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1, 139, 12);
   4025     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyInPort,
   4026                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1, 151, 8);
   4027     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyL3Routable,
   4028                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1, 159, 1);
   4029     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyMirrorCopy,
   4030                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1, 160, 1);
   4031     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyOuterVlan,
   4032                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1, 161, 16);
   4033     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyOuterVlanId,
   4034                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1, 161, 12);
   4035     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyOuterVlanCfi,
   4036                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1, 173, 1);
   4037     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyOuterVlanPri,
   4038                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1, 174, 3);
   4039     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyVlanFormat,
   4040                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1, 177, 2);
   4041     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyDstHiGig,
   4042                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1, 179, 1);
   4043     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyInterfaceClassPort,
   4044                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1,
   4045                                _bcmFieldSliceSelEgrDestPortF1, 0,
   4046                                180, 8);
   4047     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyOutPort,
   4048                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1,
   4049                                _bcmFieldSliceSelEgrDestPortF1, 0,
   4050                                188, 8);
   4051     _FP_QUAL_EXT_ADD(unit, stage_fc, bcmFieldQualifyDstPort,
   4052                                _bcmFieldDevSelDisable, 0,
   4053                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1,
   4054                                _bcmFieldSliceSelEgrDestPortF1, 1,
   4055                                0,
   4056                                180, 8, /* DST_PORT */
   4057                                188, 8, /* DST_MODID */
   4058                                0, 0,
   4059                                0);
   4060     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyIpType,
   4061                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1, 196, 5);
   4062     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifySrcClassL2,
   4063                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1,
   4064                                _bcmFieldSliceSelEgrClassF1, 0,
   4065                                201, 13
   4066                                );
   4067     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifySrcClassL3,
   4068                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1,
   4069                                _bcmFieldSliceSelEgrClassF1, 0,
   4070                                201, 13
   4071                                );
   4072     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstClassField,
   4073                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1,
   4074                                _bcmFieldSliceSelEgrClassF1, 0,
   4075                                201, 13
   4076                                );
   4077     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifySrcClassField,
   4078                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1,
   4079                                _bcmFieldSliceSelEgrClassF1, 0,
   4080                                201, 13
   4081                                );
   4082     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstClassL2,
   4083                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1,
   4084                                _bcmFieldSliceSelEgrClassF1, 0,
   4085                                201, 13
   4086                                );
   4087     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstClassL3,
   4088                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1,
   4089                                _bcmFieldSliceSelEgrClassF1, 0,
   4090                                201, 13
   4091                                );
   4092     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyInterfaceClassL2,
   4093                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1,
   4094                                _bcmFieldSliceSelEgrClassF1, 0,
   4095                                201, 13
   4096                                );
   4097     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyInterfaceClassL3,
   4098                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1,
   4099                                _bcmFieldSliceSelEgrClassF1, 0,
   4100                                201, 13
   4101                                );
   4102     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClass,
   4103                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1,
   4104                                _bcmFieldSliceSelEgrClassF1, 1,
   4105                                201, 12
   4106                                );
   4107     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc,
   4108                                bcmFieldQualifyEgressClassL3Interface,
   4109                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1,
   4110                                _bcmFieldSliceSelEgrClassF1, 2,
   4111                                201, 12
   4112                                );
   4113     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassTrill,
   4114                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1,
   4115                                _bcmFieldSliceSelEgrClassF1, 3,
   4116                                201, 12
   4117                                );
   4118     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassL2Gre,
   4119                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1,
   4120                                _bcmFieldSliceSelEgrClassF1, 3,
   4121                                201, 12
   4122                                );
   4123     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassVxlan,
   4124                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1,
   4125                                _bcmFieldSliceSelEgrClassF1, 3,
   4126                                201, 12
   4127                                );
   4128     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyIngressClassField,
   4129                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1,
   4130                                _bcmFieldSliceSelEgrClassF1, 0,
   4131                                201, 13
   4132                                );
   4133     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc,
   4134                                bcmFieldQualifyIngressInterfaceClassPort,
   4135                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1,
   4136                                _bcmFieldSliceSelEgrClassF1, 0,
   4137                                201, 13
   4138                                );
   4139    _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc,
   4140                                bcmFieldQualifyIngressInterfaceClassVPort,
   4141                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1,
   4142                                _bcmFieldSliceSelEgrClassF1, 0,
   4143                                201, 13
   4144                                );
   4145     /* CLASS_ID_B */
   4146     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifySrcClassL2,
   4147                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1,
   4148                                _bcmFieldSliceSelEgrClassIdBF1, 0,
   4149                                214, 15);
   4150     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifySrcClassL3,
   4151                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1,
   4152                                _bcmFieldSliceSelEgrClassIdBF1, 0,
   4153                                214, 15);
   4154     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstClassField,
   4155                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1,
   4156                                _bcmFieldSliceSelEgrClassIdBF1, 0,
   4157                                214, 15);
   4158     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifySrcClassField,
   4159                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1,
   4160                                _bcmFieldSliceSelEgrClassIdBF1, 0,
   4161                                214, 15);
   4162     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstClassL2,
   4163                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1,
   4164                                _bcmFieldSliceSelEgrClassIdBF1, 0,
   4165                                214, 15);
   4166     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstClassL3,
   4167                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1,
   4168                                _bcmFieldSliceSelEgrClassIdBF1, 0,
   4169                                214, 15);
   4170     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyInterfaceClassL2,
   4171                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1,
   4172                                _bcmFieldSliceSelEgrClassIdBF1, 0,
   4173                                214, 15);
   4174     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyInterfaceClassL3,
   4175                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1,
   4176                                _bcmFieldSliceSelEgrClassIdBF1, 0,
   4177                                214, 15);
   4178     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyIngressClassField,
   4179                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1,
   4180                                _bcmFieldSliceSelEgrClassIdBF1, 0,
   4181                                214, 15);
   4182     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc,
   4183                                bcmFieldQualifyIngressInterfaceClassPort,
   4184                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1,
   4185                                _bcmFieldSliceSelEgrClassIdBF1, 0,
   4186                                214, 15);
   4187     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc,
   4188                                bcmFieldQualifyIngressInterfaceClassVPort,
   4189                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1,
   4190                                _bcmFieldSliceSelEgrClassIdBF1, 0,
   4191                                214, 15);
   4192     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClass,
   4193                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1,
   4194                                _bcmFieldSliceSelEgrClassIdBF1, 1,
   4195                                214, 15);
   4196     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassTunnel,
   4197                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1,
   4198                                _bcmFieldSliceSelEgrClassIdBF1, 2,
   4199                                214, 15);
   4200     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc,
   4201                                bcmFieldQualifyEgressClassL3Interface,
   4202                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1,
   4203                                _bcmFieldSliceSelEgrClassIdBF1, 3,
   4204                                214, 15);
   4205     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc,
   4206                                bcmFieldQualifyEgressClassL3InterfaceTunnel,
   4207                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1,
   4208                                _bcmFieldSliceSelEgrClassIdBF1, 4,
   4209                                214, 15);
   4210     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassTrill,
   4211                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1,
   4212                                _bcmFieldSliceSelEgrClassIdBF1, 5,
   4213                                214, 15);
   4214     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassL2Gre,
   4215                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1,
   4216                                _bcmFieldSliceSelEgrClassIdBF1, 5,
   4217                                214, 15);
   4218     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassVxlan,
   4219                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1,
   4220                                _bcmFieldSliceSelEgrClassIdBF1, 5,
   4221                                214, 15);
   4222     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassWlan,
   4223                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1,
   4224                                _bcmFieldSliceSelEgrClassIdBF1, 5,
   4225                                214, 15);
   4226     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyOutPort,
   4227                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1,
   4228                                _bcmFieldSliceSelEgrClassIdBF1, 6,
   4229                                214, 15);
   4230     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyCpuQueue,
   4231                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1,
   4232                                _bcmFieldSliceSelEgrClassIdBF1, 7,
   4233                                214, 15);
   4234     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstMplsGport,
   4235                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1,
   4236                                _bcmFieldSliceSelEgrClassIdBF1, 8,
   4237                                214, 15);
   4238     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstMimGport,
   4239                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1,
   4240                                _bcmFieldSliceSelEgrClassIdBF1, 8,
   4241                                214, 15);
   4242     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstVxlanGport,
   4243                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1,
   4244                                _bcmFieldSliceSelEgrClassIdBF1, 8,
   4245                                214, 15);
   4246     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressForwardingClassId,
   4247                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1,
   4248                                _bcmFieldSliceSelEgrClassIdBF1, 9,
   4249                                214, 15);
   4250 
   4251     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyForwardingVlanId,
   4252                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1, 229, 12);
   4253     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyVrf,
   4254                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1, 229, 13);
   4255     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyVpn,
   4256                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1, 229,
   4257                  SOC_IS_HELIX5(unit) ? 12 : 13);
   4258 
   4259     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyForwardingType,
   4260                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1, 243, 2);
   4261     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyIntCongestionNotification,
   4262                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1, 245, 2);
   4263     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyDrop,
   4264                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1, 247, 1);
   4265     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyIp4,
   4266                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY1, 0, 0);
   4267     /* EFP_KEY2 (IPv6 Singlewide Key) Qualifiers */
   4268 
   4269     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyL4Ports,
   4270                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2, 0, 1);
   4271     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyIpProtocol,
   4272                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2, 1, 8);
   4273     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifySrcIp6,
   4274                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2,
   4275                                _bcmFieldSliceIp6AddrSelect,
   4276                                _BCM_FIELD_EGRESS_SLICE_V6_KEY_MODE_SIP6,
   4277                                9, 128);
   4278     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstIp6,
   4279                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2,
   4280                                _bcmFieldSliceIp6AddrSelect,
   4281                                _BCM_FIELD_EGRESS_SLICE_V6_KEY_MODE_DIP6,
   4282                                9, 128);
   4283     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifySrcIp6High,
   4284                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2,
   4285                                _bcmFieldSliceIp6AddrSelect,
   4286                                _BCM_FIELD_EGRESS_SLICE_V6_KEY_MODE_SIP_DIP_64,
   4287                                9, 64);
   4288     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstIp6High,
   4289                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2,
   4290                                _bcmFieldSliceIp6AddrSelect,
   4291                                _BCM_FIELD_EGRESS_SLICE_V6_KEY_MODE_SIP_DIP_64,
   4292                                73, 64);
   4293     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyTos,
   4294                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2, 137, 8);
   4295     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyHiGigProxy,
   4296                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2, 145, 1);
   4297     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyHiGig,
   4298                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2, 146, 1);
   4299     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyInnerVlanId,
   4300                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2, 147, 12);
   4301     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyInPort,
   4302                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2, 159, 8);
   4303     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyL3Routable,
   4304                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2, 167, 1);
   4305     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyMirrorCopy,
   4306                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2, 168, 1);
   4307     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyOuterVlan,
   4308                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2, 169, 16);
   4309     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyOuterVlanId,
   4310                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2, 169, 12);
   4311     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyOuterVlanCfi,
   4312                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2, 181, 1);
   4313     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyOuterVlanPri,
   4314                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2, 182, 3);
   4315     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyVlanFormat,
   4316                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2, 185, 2);
   4317     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyDstHiGig,
   4318                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2, 187, 1);
   4319     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyInterfaceClassPort,
   4320                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2,
   4321                                _bcmFieldSliceSelEgrClassF2, 0,
   4322                                188, 8);
   4323     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifySrcClassL2,
   4324                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2,
   4325                                _bcmFieldSliceSelEgrClassF2, 0,
   4326                                196, 13
   4327                                );
   4328     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifySrcClassL3,
   4329                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2,
   4330                                _bcmFieldSliceSelEgrClassF2, 0,
   4331                                196, 13
   4332                                );
   4333     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstClassField,
   4334                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2,
   4335                                _bcmFieldSliceSelEgrClassF2, 0,
   4336                                196, 13
   4337                                );
   4338     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifySrcClassField,
   4339                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2,
   4340                                _bcmFieldSliceSelEgrClassF2, 0,
   4341                                196, 13
   4342                                );
   4343     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstClassL2,
   4344                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2,
   4345                                _bcmFieldSliceSelEgrClassF2, 0,
   4346                                196, 13
   4347                                );
   4348     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstClassL3,
   4349                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2,
   4350                                _bcmFieldSliceSelEgrClassF2, 0,
   4351                                196, 13
   4352                                );
   4353     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyInterfaceClassL2,
   4354                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2,
   4355                                _bcmFieldSliceSelEgrClassF2, 0,
   4356                                196, 13
   4357                                );
   4358     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyInterfaceClassL3,
   4359                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2,
   4360                                _bcmFieldSliceSelEgrClassF2, 0,
   4361                                196, 13
   4362                                );
   4363     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyIngressClassField,
   4364                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2,
   4365                                _bcmFieldSliceSelEgrClassF2, 0,
   4366                                196, 13
   4367                                );
   4368     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc,
   4369                                bcmFieldQualifyIngressInterfaceClassPort,
   4370                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2,
   4371                                _bcmFieldSliceSelEgrClassF2, 0,
   4372                                196, 13);
   4373     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc,
   4374                                bcmFieldQualifyIngressInterfaceClassVPort,
   4375                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2,
   4376                                _bcmFieldSliceSelEgrClassF2, 0,
   4377                                196, 13);
   4378     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc,
   4379                                bcmFieldQualifyEgressClassL3Interface,
   4380                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2,
   4381                                _bcmFieldSliceSelEgrClassF2, 2,
   4382                                196, 12
   4383                                );
   4384     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyInterfaceClassPort,
   4385                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2,
   4386                                _bcmFieldSliceSelEgrClassF2, 3,
   4387                                188, 8);
   4388     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyInterfaceClassPort,
   4389                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2,
   4390                                _bcmFieldSliceSelEgrClassF2, 4,
   4391                                188, 8);
   4392     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassTrill,
   4393                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2,
   4394                                _bcmFieldSliceSelEgrClassF2, 4,
   4395                                196, 12
   4396                                );
   4397     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassWlan,
   4398                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2,
   4399                                _bcmFieldSliceSelEgrClassF2, 4,
   4400                                196, 12
   4401                                );
   4402     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassL2Gre,
   4403                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2,
   4404                                _bcmFieldSliceSelEgrClassF2, 4,
   4405                                196, 12
   4406                                );
   4407     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassVxlan,
   4408                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2,
   4409                                _bcmFieldSliceSelEgrClassF2, 4,
   4410                                196, 12
   4411                                );
   4412     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyOutPort,
   4413                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2,
   4414                                _bcmFieldSliceSelEgrClassF2, 3,
   4415                                196, 8
   4416                                );
   4417     _FP_QUAL_EXT_ADD(unit, stage_fc, bcmFieldQualifyDstPort,
   4418                                _bcmFieldDevSelDisable, 0,
   4419                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2,
   4420                                _bcmFieldSliceSelEgrClassF2, 5,
   4421                                0,
   4422                                196, 8, /* DST_PORT */
   4423                                188, 8, /* DST_MODID */
   4424                                0, 0,
   4425                                0
   4426                                );
   4427     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyInterfaceClassPort,
   4428                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2,
   4429                                _bcmFieldSliceSelEgrClassF2, 6,
   4430                                187, 8);
   4431     /* EGR_L3_NEXT_HOP.MPLS.CLASS_ID */
   4432     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClass,
   4433                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2,
   4434                                _bcmFieldSliceSelEgrClassF2, 6,
   4435                                196, 12);
   4436     /* CLASS_ID_B */
   4437     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifySrcClassL2,
   4438                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2,
   4439                                _bcmFieldSliceSelEgrClassIdBF2, 0,
   4440                                209, 15);
   4441     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifySrcClassL3,
   4442                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2,
   4443                                _bcmFieldSliceSelEgrClassIdBF2, 0,
   4444                                209, 15);
   4445     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstClassField,
   4446                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2,
   4447                                _bcmFieldSliceSelEgrClassIdBF2, 0,
   4448                                209, 15);
   4449     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifySrcClassField,
   4450                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2,
   4451                                _bcmFieldSliceSelEgrClassIdBF2, 0,
   4452                                209, 15);
   4453     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstClassL2,
   4454                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2,
   4455                                _bcmFieldSliceSelEgrClassIdBF2, 0,
   4456                                209, 15);
   4457     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstClassL3,
   4458                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2,
   4459                                _bcmFieldSliceSelEgrClassIdBF2, 0,
   4460                                209, 15);
   4461     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyInterfaceClassL2,
   4462                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2,
   4463                                _bcmFieldSliceSelEgrClassIdBF2, 0,
   4464                                209, 15);
   4465     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyInterfaceClassL3,
   4466                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2,
   4467                                _bcmFieldSliceSelEgrClassIdBF2, 0,
   4468                                209, 15);
   4469     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyIngressClassField,
   4470                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2,
   4471                                _bcmFieldSliceSelEgrClassIdBF2, 0,
   4472                                209, 15);
   4473     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc,
   4474                                bcmFieldQualifyIngressInterfaceClassPort,
   4475                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2,
   4476                                _bcmFieldSliceSelEgrClassIdBF2, 0,
   4477                                209, 15);
   4478     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc,
   4479                                bcmFieldQualifyIngressInterfaceClassVPort,
   4480                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2,
   4481                                _bcmFieldSliceSelEgrClassIdBF2, 0,
   4482                                209, 15);
   4483     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClass,
   4484                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2,
   4485                                _bcmFieldSliceSelEgrClassIdBF2, 1,
   4486                                209, 15);
   4487     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassTunnel,
   4488                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2,
   4489                                _bcmFieldSliceSelEgrClassIdBF2, 2,
   4490                                209, 15);
   4491     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc,
   4492                                bcmFieldQualifyEgressClassL3Interface,
   4493                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2,
   4494                                _bcmFieldSliceSelEgrClassIdBF2, 3,
   4495                                209, 15);
   4496     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc,
   4497                                bcmFieldQualifyEgressClassL3InterfaceTunnel,
   4498                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2,
   4499                                _bcmFieldSliceSelEgrClassIdBF2, 4,
   4500                                209, 15);
   4501     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassTrill,
   4502                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2,
   4503                                _bcmFieldSliceSelEgrClassIdBF2, 5,
   4504                                209, 15);
   4505     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassL2Gre,
   4506                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2,
   4507                                _bcmFieldSliceSelEgrClassIdBF2, 5,
   4508                                209, 15);
   4509     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassVxlan,
   4510                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2,
   4511                                _bcmFieldSliceSelEgrClassIdBF2, 5,
   4512                                209, 15);
   4513     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassWlan,
   4514                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2,
   4515                                _bcmFieldSliceSelEgrClassIdBF2, 5,
   4516                                209, 15);
   4517     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyInterfaceClassPort,
   4518                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2,
   4519                                _bcmFieldSliceSelEgrClassF2, 6,
   4520                                188, 8);
   4521     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyOutPort,
   4522                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2,
   4523                                _bcmFieldSliceSelEgrClassIdBF2, 6,
   4524                                209, 15);
   4525     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyCpuQueue,
   4526                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2,
   4527                                _bcmFieldSliceSelEgrClassIdBF2, 7,
   4528                                209, 15);
   4529     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstMplsGport,
   4530                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2,
   4531                                _bcmFieldSliceSelEgrClassIdBF2, 8,
   4532                                209, 15);
   4533     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstMimGport,
   4534                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2,
   4535                                _bcmFieldSliceSelEgrClassIdBF2, 8,
   4536                                209, 15);
   4537     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstVxlanGport,
   4538                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2,
   4539                                _bcmFieldSliceSelEgrClassIdBF2, 8,
   4540                                209, 15);
   4541     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressForwardingClassId,
   4542                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2,
   4543                                _bcmFieldSliceSelEgrClassIdBF2, 9,
   4544                                209, 15);
   4545 
   4546     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyIpType,
   4547                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2, 224, 5);
   4548 
   4549     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyForwardingVlanId,
   4550                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2, 229, 12);
   4551     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyVrf,
   4552                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2, 229, 13);
   4553     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyVpn,
   4554                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2, 229,
   4555                  SOC_IS_HELIX5(unit) ? 12 : 13);
   4556 
   4557     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyForwardingType,
   4558                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2, 243, 2);
   4559     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyIntCongestionNotification,
   4560                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2, 245, 2);
   4561     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyDrop,
   4562                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2, 247, 1);
   4563     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyIp6,
   4564                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY2, 0, 0);
   4565 
   4566     /* EFP_KEY3 (IPv6 Double Wide Key) Qualifiers */
   4567 
   4568     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyL4Ports,
   4569                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY3, 0, 1);
   4570     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyIntPriority,
   4571                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY3, 1, 4);
   4572     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyColor,
   4573                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY3, 5, 2);
   4574     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyIpFrag,
   4575                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY3, 7, 2);
   4576     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyTcpControl,
   4577                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY3, 9, 8);
   4578     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyL4DstPort,
   4579                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY3, 17, 16);
   4580     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyL4SrcPort,
   4581                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY3, 33, 16);
   4582     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyIcmpTypeCode,
   4583                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY3, 33, 16);
   4584     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyTtl,
   4585                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY3, 49, 8);
   4586     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyDstIp6,
   4587                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY3, 57, 128);
   4588     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyExtensionHeaderSubCode,
   4589                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY3, 185, 8);
   4590     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyExtensionHeaderType,
   4591                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY3, 193, 8);
   4592     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyIpType,
   4593                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY3, 201, 5);
   4594     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClass,
   4595                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY3,
   4596                                _bcmFieldSliceSelEgrClassF3, 0,
   4597                                206, 12);
   4598     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc,
   4599                                bcmFieldQualifyEgressClassL3Interface,
   4600                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY3,
   4601                                _bcmFieldSliceSelEgrClassF3, 1,
   4602                                206, 12);
   4603     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassTrill,
   4604                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY3,
   4605                                _bcmFieldSliceSelEgrClassF3, 3,
   4606                                206, 12);
   4607     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassL2Gre,
   4608                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY3,
   4609                                _bcmFieldSliceSelEgrClassF3, 3,
   4610                                206, 12);
   4611     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassVxlan,
   4612                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY3,
   4613                                _bcmFieldSliceSelEgrClassF3, 3,
   4614                                206, 12);
   4615 
   4616     /* CLASS_ID_B */
   4617     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifySrcClassL2,
   4618                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY3,
   4619                                _bcmFieldSliceSelEgrClassIdBF3, 0,
   4620                                219, 15);
   4621     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifySrcClassL3,
   4622                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY3,
   4623                                _bcmFieldSliceSelEgrClassIdBF3, 0,
   4624                                219, 15);
   4625     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstClassField,
   4626                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY3,
   4627                                _bcmFieldSliceSelEgrClassIdBF3, 0,
   4628                                219, 15);
   4629     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifySrcClassField,
   4630                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY3,
   4631                                _bcmFieldSliceSelEgrClassIdBF3, 0,
   4632                                219, 15);
   4633     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstClassL2,
   4634                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY3,
   4635                                _bcmFieldSliceSelEgrClassIdBF3, 0,
   4636                                219, 15);
   4637     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstClassL3,
   4638                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY3,
   4639                                _bcmFieldSliceSelEgrClassIdBF3, 0,
   4640                                219, 15);
   4641     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyInterfaceClassL2,
   4642                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY3,
   4643                                _bcmFieldSliceSelEgrClassIdBF3, 0,
   4644                                219, 15);
   4645     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyInterfaceClassL3,
   4646                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY3,
   4647                                _bcmFieldSliceSelEgrClassIdBF3, 0,
   4648                                219, 15);
   4649     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyIngressClassField,
   4650                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY3,
   4651                                _bcmFieldSliceSelEgrClassIdBF3, 0,
   4652                                219, 15);
   4653     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc,
   4654                                bcmFieldQualifyIngressInterfaceClassPort,
   4655                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY3,
   4656                                _bcmFieldSliceSelEgrClassIdBF3, 0,
   4657                                219, 15);
   4658     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc,
   4659                                bcmFieldQualifyIngressInterfaceClassVPort,
   4660                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY3,
   4661                                _bcmFieldSliceSelEgrClassIdBF3, 0,
   4662                                219, 15);
   4663     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClass,
   4664                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY3,
   4665                                _bcmFieldSliceSelEgrClassIdBF3, 1,
   4666                                219, 15);
   4667     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassTunnel,
   4668                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY3,
   4669                                _bcmFieldSliceSelEgrClassIdBF3, 2,
   4670                                219, 15);
   4671     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc,
   4672                                bcmFieldQualifyEgressClassL3Interface,
   4673                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY3,
   4674                                _bcmFieldSliceSelEgrClassIdBF3, 3,
   4675                                219, 15);
   4676     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc,
   4677                                bcmFieldQualifyEgressClassL3InterfaceTunnel,
   4678                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY3,
   4679                                _bcmFieldSliceSelEgrClassIdBF3, 4,
   4680                                219, 15);
   4681     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassTrill,
   4682                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY3,
   4683                                _bcmFieldSliceSelEgrClassIdBF3, 5,
   4684                                219, 15);
   4685     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassL2Gre,
   4686                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY3,
   4687                                _bcmFieldSliceSelEgrClassIdBF3, 5,
   4688                                219, 15);
   4689     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassVxlan,
   4690                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY3,
   4691                                _bcmFieldSliceSelEgrClassIdBF3, 5,
   4692                                219, 15);
   4693     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassWlan,
   4694                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY3,
   4695                                _bcmFieldSliceSelEgrClassIdBF3, 5,
   4696                                219, 15);
   4697     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyOutPort,
   4698                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY3,
   4699                                _bcmFieldSliceSelEgrClassIdBF3, 6,
   4700                                219, 15);
   4701     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyCpuQueue,
   4702                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY3,
   4703                                _bcmFieldSliceSelEgrClassIdBF3, 7,
   4704                                219, 15);
   4705     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstMplsGport,
   4706                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY3,
   4707                                _bcmFieldSliceSelEgrClassIdBF3, 8,
   4708                                219, 15);
   4709     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstMimGport,
   4710                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY3,
   4711                                _bcmFieldSliceSelEgrClassIdBF3, 8,
   4712                                219, 15);
   4713     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstVxlanGport,
   4714                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY3,
   4715                                _bcmFieldSliceSelEgrClassIdBF3, 8,
   4716                                219, 15);
   4717     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressForwardingClassId,
   4718                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY3,
   4719                                _bcmFieldSliceSelEgrClassIdBF3, 9,
   4720                                219, 15);
   4721 
   4722 
   4723     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyIntCongestionNotification,
   4724                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY3, 234, 2);
   4725     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyDrop,
   4726                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY3, 236, 1);
   4727     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyIp6,
   4728                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY3, 0, 0);
   4729 
   4730 
   4731     /* FCOE EFP_KEY5 */
   4732     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyFibreChanVFTFabricId,
   4733                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5, 0, 12);
   4734     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyFibreChanVFTHopCount,
   4735                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5, 12, 8);
   4736     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyFibreChanVFTValid,
   4737                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5, 20, 1);
   4738     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyFibreChanRCtl,
   4739                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5, 21, 8);
   4740     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyFibreChanDFCtl,
   4741                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5, 29, 8);
   4742     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyFibreChanFCtl,
   4743                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5, 37, 24);
   4744     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyFibreChanType,
   4745                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5, 61, 8);
   4746     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyFibreChanDstId,
   4747                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5, 69, 24);
   4748     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyFibreChanSrcId,
   4749                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5, 93, 24);
   4750     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyFibreChanCSCtl,
   4751                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5, 117, 8);
   4752     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyHiGigProxy,
   4753                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5, 125, 1);
   4754     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyHiGig,
   4755                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5, 126, 1);
   4756     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyInnerVlanId,
   4757                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5, 127, 12);
   4758     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyInPort,
   4759                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5, 139, 8);
   4760     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyL3Routable,
   4761                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5, 147, 1);
   4762     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyMirrorCopy,
   4763                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5, 148, 1);
   4764     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyOuterVlan,
   4765                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5, 149, 16);
   4766     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyOuterVlanId,
   4767                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5, 149, 12);
   4768     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyOuterVlanCfi,
   4769                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5, 161, 1);
   4770     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyOuterVlanPri,
   4771                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5, 162, 3);
   4772     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyVlanFormat,
   4773                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5, 165, 2);
   4774     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyDstHiGig,
   4775                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5, 167, 1);
   4776     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyInterfaceClassPort,
   4777                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5,
   4778                                _bcmFieldSliceSelEgrDestPortF5, 0,
   4779                                168, 8
   4780                                );
   4781     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyOutPort,
   4782                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5,
   4783                                _bcmFieldSliceSelEgrDestPortF5, 0,
   4784                                176, 8
   4785                                );
   4786     _FP_QUAL_EXT_ADD(unit, stage_fc, bcmFieldQualifyDstPort,
   4787                                _bcmFieldDevSelDisable, 0,
   4788                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5,
   4789                                _bcmFieldSliceSelEgrDestPortF5, 1,
   4790                                0,
   4791                                176, 8, /* DST_PORT */
   4792                                168, 8, /* DST_MODID */
   4793                                0, 0,
   4794                                0
   4795                                );
   4796     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyDrop,
   4797                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5, 184, 1);
   4798     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyForwardingVlanId,
   4799                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5, 185, 12);
   4800     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyVrf,
   4801                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5, 185, 13);
   4802     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyVpn,
   4803                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5, 185,
   4804                  SOC_IS_HELIX5(unit) ? 12 : 13);
   4805     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyForwardingType,
   4806                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5, 199, 2);
   4807     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifySrcClassL2,
   4808                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5, 201, 13);
   4809     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifySrcClassL3,
   4810                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5, 201, 13);
   4811     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyDstClassField,
   4812                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5, 201, 13);
   4813     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifySrcClassField,
   4814                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5, 201, 13);
   4815     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyDstClassL2,
   4816                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5, 201, 13);
   4817     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyDstClassL3,
   4818                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5, 201, 13);
   4819     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyInterfaceClassL2,
   4820                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5, 201, 13);
   4821     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyInterfaceClassL3,
   4822                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5, 201, 13);
   4823     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyIngressClassField,
   4824                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5, 201, 13);
   4825     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyIngressInterfaceClassPort,
   4826                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5, 201, 13);
   4827     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyIngressInterfaceClassVPort,
   4828                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5, 201, 13);
   4829     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyFibreChanCSCtl,
   4830                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5, 229, 3);
   4831     /* CLASS_ID_B */
   4832     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifySrcClassL3,
   4833                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5,
   4834                                _bcmFieldSliceSelEgrClassIdBF4, 0,
   4835                                214, 15);
   4836     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstClassField,
   4837                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5,
   4838                                _bcmFieldSliceSelEgrClassIdBF4, 0,
   4839                                214, 15);
   4840     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifySrcClassField,
   4841                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5,
   4842                                _bcmFieldSliceSelEgrClassIdBF4, 0,
   4843                                214, 15);
   4844     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstClassL2,
   4845                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5,
   4846                                _bcmFieldSliceSelEgrClassIdBF4, 0,
   4847                                214, 15);
   4848     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstClassL3,
   4849                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5,
   4850                                _bcmFieldSliceSelEgrClassIdBF4, 0,
   4851                                214, 15);
   4852     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyInterfaceClassL2,
   4853                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5,
   4854                                _bcmFieldSliceSelEgrClassIdBF4, 0,
   4855                                214, 15);
   4856     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyInterfaceClassL3,
   4857                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5,
   4858                                _bcmFieldSliceSelEgrClassIdBF4, 0,
   4859                                214, 15);
   4860     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyIngressClassField,
   4861                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5,
   4862                                _bcmFieldSliceSelEgrClassIdBF4, 0,
   4863                                214, 15);
   4864     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc,
   4865                                bcmFieldQualifyIngressInterfaceClassPort,
   4866                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5,
   4867                                _bcmFieldSliceSelEgrClassIdBF4, 0,
   4868                                214, 15);
   4869     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc,
   4870                                bcmFieldQualifyIngressInterfaceClassVPort,
   4871                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5,
   4872                                _bcmFieldSliceSelEgrClassIdBF4, 0,
   4873                                214, 15);
   4874     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClass,
   4875                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5,
   4876                                _bcmFieldSliceSelEgrClassIdBF4, 1,
   4877                                214, 15);
   4878     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassTunnel,
   4879                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5,
   4880                                _bcmFieldSliceSelEgrClassIdBF4, 2,
   4881                                214, 15);
   4882     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc,
   4883                                bcmFieldQualifyEgressClassL3Interface,
   4884                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5,
   4885                                _bcmFieldSliceSelEgrClassIdBF4, 3,
   4886                                214, 15);
   4887     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc,
   4888                                bcmFieldQualifyEgressClassL3InterfaceTunnel,
   4889                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5,
   4890                                _bcmFieldSliceSelEgrClassIdBF4, 4,
   4891                                214, 15);
   4892     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassTrill,
   4893                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5,
   4894                                _bcmFieldSliceSelEgrClassIdBF4, 5,
   4895                                214, 15);
   4896     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassL2Gre,
   4897                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5,
   4898                                _bcmFieldSliceSelEgrClassIdBF4, 5,
   4899                                214, 15);
   4900     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassVxlan,
   4901                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5,
   4902                                _bcmFieldSliceSelEgrClassIdBF4, 5,
   4903                                214, 15);
   4904     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassWlan,
   4905                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5,
   4906                                _bcmFieldSliceSelEgrClassIdBF4, 5,
   4907                                214, 15);
   4908     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyOutPort,
   4909                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5,
   4910                                _bcmFieldSliceSelEgrClassIdBF4, 6,
   4911                                214, 15);
   4912     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyCpuQueue,
   4913                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5,
   4914                                _bcmFieldSliceSelEgrClassIdBF4, 7,
   4915                                214, 15);
   4916     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstMplsGport,
   4917                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5,
   4918                                _bcmFieldSliceSelEgrClassIdBF4, 8,
   4919                                214, 15);
   4920     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstMimGport,
   4921                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5,
   4922                                _bcmFieldSliceSelEgrClassIdBF4, 8,
   4923                                214, 15);
   4924     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstVxlanGport,
   4925                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5,
   4926                                _bcmFieldSliceSelEgrClassIdBF4, 8,
   4927                                214, 15);
   4928     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressForwardingClassId,
   4929                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY5,
   4930                                _bcmFieldSliceSelEgrClassIdBF5, 9,
   4931                                214, 15);
   4932 
   4933 
   4934     /*EFP_KEY6 (HiGiG Key)  Qualifiers*/
   4935     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyFabricQueueTag,
   4936                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6, 0, 32);
   4937     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyHiGigDstMulticast,
   4938                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6, 148, 1);
   4939     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyHiGigDstMulticastGroupId,
   4940                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6, 128, 16);
   4941     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyHiGigTrafficClass,
   4942                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6, 144, 4);
   4943     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyHiGigDstModuleGport,
   4944                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6, 136, 8);
   4945     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyHiGigDstPortGport,
   4946                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6, 128, 8);
   4947     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyHiGigDstModPortGport,
   4948                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6, 128, 16);
   4949     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyHiGigSrcModuleGport,
   4950                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6, 120, 8);
   4951     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyHiGigSrcPortGport,
   4952                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6, 112, 8);
   4953     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyHiGigSrcModPortGport,
   4954                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6, 112, 16);
   4955     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyHiGigLoadBalanceID,
   4956                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6, 104, 8);
   4957     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyHiGigColor,
   4958                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6, 102, 2);
   4959     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyHiGigExtendedHeaderPresent,
   4960                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6, 101, 1);
   4961     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyHiGigIntCongestionNotification,
   4962                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6, 99, 2);
   4963     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyHiGigMirrorOrSwitchPkt,
   4964                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6, 88, 1);
   4965     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyHiGigIngressTagged,
   4966                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6, 91, 1);
   4967     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyHiGigDstTrunk,
   4968                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6, 95, 1);
   4969     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyHiGigDstTrunkId,
   4970                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6, 92, 3);
   4971     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyHiGigIngressL3SwitchPkt,
   4972                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6, 85, 1);
   4973     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyHiGigLabelType,
   4974                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6, 86, 2);
   4975     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyHiGigMplsPkt,
   4976                 _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6, 84, 1);
   4977     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyHiGigLabel,
   4978                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6, 64, 20);
   4979     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyHiGigReplicationId,
   4980                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6, 64, 19);
   4981     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyHiGigVlan,
   4982                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6, 48, 16);
   4983     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyHiGigPortFilteringMode,
   4984                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6, 46, 2);
   4985     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyHiGigSrcTrunk,
   4986                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6, 45, 1);
   4987     _FP_QUAL_EXT_ADD(unit, stage_fc, bcmFieldQualifyHiGigPreserveFlags,
   4988                  _bcmFieldDevSelDisable, 0,
   4989                 _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6,
   4990                 _bcmFieldDevSelDisable, 0,
   4991                 0,
   4992                 44, 1,
   4993                 43, 1,
   4994                 0, 0,
   4995                 0);
   4996     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyHiGigIngressClassificationTag,
   4997                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6, 80, 16);
   4998     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyHiGigEgressMcast,
   4999                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6, 95, 1);
   5000     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyHiGigForwardingType,
   5001                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6, 90, 5);
   5002     _FP_QUAL_EXT_ADD(unit, stage_fc, bcmFieldQualifyHiGigVni,
   5003                  _bcmFieldDevSelDisable, 0,
   5004                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6,
   5005                  _bcmFieldDevSelDisable, 0,
   5006                  0,
   5007                  80, 10,
   5008                  36, 4,
   5009                  0, 0,
   5010                  0);
   5011     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyHiGigDstGport,
   5012                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6, 64, 16);
   5013     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyHiGigMulticastIndex,
   5014                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6, 64, 16);
   5015     _FP_QUAL_EXT_ADD(unit, stage_fc, bcmFieldQualifyHiGigVpReplicationId,
   5016                  _bcmFieldDevSelDisable, 0,
   5017                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6,
   5018                  _bcmFieldDevSelDisable, 0,
   5019                  0,
   5020                  64, 16,
   5021                  40, 3,
   5022                  0, 0,
   5023                  0);
   5024     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyHiGigSrcGport,
   5025                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6, 48, 16);
   5026     _FP_QUAL_EXT_ADD(unit, stage_fc, bcmFieldQualifyHiGigDoNotFlags,
   5027                  _bcmFieldDevSelDisable, 0,
   5028                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6,
   5029                  _bcmFieldDevSelDisable, 0,
   5030                  0,
   5031                  46, 1,
   5032                  45, 1,
   5033                  0, 0,
   5034                  0);
   5035     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyHiGigVpLagFailoverPacket,
   5036                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6, 44, 1);
   5037     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyHiGigProtectionSwitchingStatus,
   5038                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6, 43, 1);
   5039     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyHiGigMirrorToVp,
   5040                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6, 47, 1);
   5041     _FP_QUAL_EXT_ADD(unit, stage_fc, bcmFieldQualifyHiGigVpPreserveFlags,
   5042                  _bcmFieldDevSelDisable, 0,
   5043                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6,
   5044                  _bcmFieldDevSelDisable, 0,
   5045                  0,
   5046                  35, 1,
   5047                  34, 1,
   5048                  0, 0,
   5049                  0);
   5050     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyHiGigDstType,
   5051                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6, 33, 1);
   5052     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyHiGigSrcType,
   5053                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6, 32, 1);
   5054     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyHiGigOffloadEngineClassificationTag,
   5055                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6, 80, 16);
   5056     _FP_QUAL_EXT_ADD(unit, stage_fc, bcmFieldQualifyHiGigOffloadEngineDeferredFlags,
   5057                  _bcmFieldDevSelDisable, 0,
   5058                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6,
   5059                  _bcmFieldDevSelDisable, 0,
   5060                  0,
   5061                  79, 1,
   5062                  76, 1,
   5063                  72, 1,
   5064                  0);
   5065     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyHiGigOffloadEngineVxltStatus,
   5066                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6, 77, 2);
   5067     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyHiGigOffloadEnginePktPriNew,
   5068                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6, 73, 3);
   5069     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyHiGigOffloadEngineDscpNew,
   5070                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6, 66, 6);
   5071     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyHiGigOffloadEnginePreserveDscp,
   5072                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6, 47, 1);
   5073     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyHiGigOffloadEnginePreserveDot1p,
   5074                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6, 46, 1);
   5075     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyHiGigOffloadEngineSrcType,
   5076                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6, 43, 1);
   5077     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyMHOpcode,
   5078                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6, 40, 3);
   5079 
   5080     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyHiGigProxy,
   5081                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6, 160, 1);
   5082     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyHiGig,
   5083                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6, 161, 1);
   5084     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyInPort,
   5085                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6, 162, 8);
   5086     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyInterfaceClassPort,
   5087                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6, 170, 8);
   5088     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyOutPort,
   5089                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6, 178, 8);
   5090     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifySrcClassL2,
   5091                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6,
   5092                                _bcmFieldSliceSelEgrClassF6, 0,
   5093                                186, 13
   5094                                );
   5095     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifySrcClassL3,
   5096                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6,
   5097                                _bcmFieldSliceSelEgrClassF6, 0,
   5098                                186, 13
   5099                                );
   5100     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstClassField,
   5101                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6,
   5102                                _bcmFieldSliceSelEgrClassF6, 0,
   5103                                186, 13
   5104                                );
   5105     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifySrcClassField,
   5106                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6,
   5107                                _bcmFieldSliceSelEgrClassF6, 0,
   5108                                186, 13
   5109                                );
   5110     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstClassL2,
   5111                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6,
   5112                                _bcmFieldSliceSelEgrClassF6, 0,
   5113                                186, 13
   5114                                );
   5115     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstClassL3,
   5116                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6,
   5117                                _bcmFieldSliceSelEgrClassF6, 0,
   5118                                186, 13
   5119                                );
   5120     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyInterfaceClassL2,
   5121                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6,
   5122                                _bcmFieldSliceSelEgrClassF6, 0,
   5123                                186, 13
   5124                                );
   5125     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyInterfaceClassL3,
   5126                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6,
   5127                                _bcmFieldSliceSelEgrClassF6, 0,
   5128                                186, 13
   5129                                );
   5130     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyIngressClassField,
   5131                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6,
   5132                                _bcmFieldSliceSelEgrClassF6, 0,
   5133                                186, 13
   5134                                );
   5135     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc,
   5136                                bcmFieldQualifyIngressInterfaceClassPort,
   5137                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6,
   5138                                _bcmFieldSliceSelEgrClassF6, 0,
   5139                                186, 13
   5140                                );
   5141     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc,
   5142                                bcmFieldQualifyIngressInterfaceClassVPort,
   5143                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6,
   5144                                _bcmFieldSliceSelEgrClassF6, 0,
   5145                                186, 13
   5146                                );
   5147 
   5148     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClass,
   5149                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6,
   5150                                _bcmFieldSliceSelEgrClassF3, 1,
   5151                                186, 12);
   5152     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc,
   5153                                bcmFieldQualifyEgressClassL3Interface,
   5154                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6,
   5155                                _bcmFieldSliceSelEgrClassF6, 2,
   5156                                186, 12);
   5157     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassTrill,
   5158                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6,
   5159                                _bcmFieldSliceSelEgrClassF6, 3,
   5160                                186, 12);
   5161     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassL2Gre,
   5162                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6,
   5163                                _bcmFieldSliceSelEgrClassF6, 3,
   5164                                186, 12);
   5165     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassVxlan,
   5166                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6,
   5167                                _bcmFieldSliceSelEgrClassF6, 3,
   5168                                186, 12);
   5169 
   5170 
   5171     /* CLASS_ID_B */
   5172     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifySrcClassL2,
   5173                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6,
   5174                                _bcmFieldSliceSelEgrClassIdBF6, 0,
   5175                                199, 15);
   5176     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifySrcClassL3,
   5177                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6,
   5178                                _bcmFieldSliceSelEgrClassIdBF6, 0,
   5179                                199, 15);
   5180     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstClassField,
   5181                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6,
   5182                                _bcmFieldSliceSelEgrClassIdBF6, 0,
   5183                                199, 15);
   5184     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifySrcClassField,
   5185                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6,
   5186                                _bcmFieldSliceSelEgrClassIdBF6, 0,
   5187                                199, 15);
   5188     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstClassL2,
   5189                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6,
   5190                                _bcmFieldSliceSelEgrClassIdBF6, 0,
   5191                                199, 15);
   5192     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstClassL3,
   5193                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6,
   5194                                _bcmFieldSliceSelEgrClassIdBF6, 0,
   5195                                199, 15);
   5196     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyInterfaceClassL2,
   5197                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6,
   5198                                _bcmFieldSliceSelEgrClassIdBF6, 0,
   5199                                199, 15);
   5200     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyInterfaceClassL3,
   5201                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6,
   5202                                _bcmFieldSliceSelEgrClassIdBF6, 0,
   5203                                199, 15);
   5204     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyIngressClassField,
   5205                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6,
   5206                                _bcmFieldSliceSelEgrClassIdBF6, 0,
   5207                                199, 15);
   5208     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc,
   5209                                bcmFieldQualifyIngressInterfaceClassPort,
   5210                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6,
   5211                                _bcmFieldSliceSelEgrClassIdBF6, 0,
   5212                                199, 15);
   5213     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc,
   5214                                bcmFieldQualifyIngressInterfaceClassVPort,
   5215                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6,
   5216                                _bcmFieldSliceSelEgrClassIdBF6, 0,
   5217                                199, 15);
   5218     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClass,
   5219                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6,
   5220                                _bcmFieldSliceSelEgrClassIdBF6, 1,
   5221                                199, 15);
   5222     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassTunnel,
   5223                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6,
   5224                                _bcmFieldSliceSelEgrClassIdBF6, 2,
   5225                                199, 15);
   5226     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc,
   5227                                bcmFieldQualifyEgressClassL3Interface,
   5228                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6,
   5229                                _bcmFieldSliceSelEgrClassIdBF6, 3,
   5230                                199, 15);
   5231     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc,
   5232                                bcmFieldQualifyEgressClassL3InterfaceTunnel,
   5233                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6,
   5234                                _bcmFieldSliceSelEgrClassIdBF6, 4,
   5235                                199, 15);
   5236     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassTrill,
   5237                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6,
   5238                                _bcmFieldSliceSelEgrClassIdBF6, 5,
   5239                                199, 15);
   5240     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassL2Gre,
   5241                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6,
   5242                                _bcmFieldSliceSelEgrClassIdBF6, 5,
   5243                                199, 15);
   5244     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassVxlan,
   5245                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6,
   5246                                _bcmFieldSliceSelEgrClassIdBF6, 5,
   5247                                199, 15);
   5248     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassWlan,
   5249                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6,
   5250                                _bcmFieldSliceSelEgrClassIdBF6, 5,
   5251                                199, 15);
   5252     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyOutPort,
   5253                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6,
   5254                                _bcmFieldSliceSelEgrClassIdBF6, 6,
   5255                                199, 15);
   5256     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyCpuQueue,
   5257                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6,
   5258                                _bcmFieldSliceSelEgrClassIdBF6, 7,
   5259                                199, 15);
   5260     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstMplsGport,
   5261                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6,
   5262                                _bcmFieldSliceSelEgrClassIdBF6, 8,
   5263                                199, 15);
   5264     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstMimGport,
   5265                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6,
   5266                                _bcmFieldSliceSelEgrClassIdBF6, 8,
   5267                                199, 15);
   5268     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstVxlanGport,
   5269                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6,
   5270                                _bcmFieldSliceSelEgrClassIdBF6, 8,
   5271                                199, 15);
   5272     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressForwardingClassId,
   5273                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6,
   5274                                _bcmFieldSliceSelEgrClassIdBF6, 9,
   5275                                199, 15);
   5276 
   5277 
   5278     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyIntCongestionNotification,
   5279                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6, 214, 2);
   5280     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyDrop,
   5281                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY6, 216, 1);
   5282 
   5283     /* EFP_KEY7(Loopback Key) qualifiers */
   5284 
   5285     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyLoopBackQueue,
   5286                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY7, 116, 4);
   5287     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyLoopbackType,
   5288                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY7, 111, 5);
   5289     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyLoopBackSrcGport,
   5290                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY7, 94, 16);
   5291     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyPktIsVisible,
   5292                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY7, 93, 1);
   5293     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyLoopBackCpuMasqueradePktProfile,
   5294                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY7, 90, 3);
   5295     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyLoopBackColor,
   5296                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY7, 4, 2);
   5297     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyLoopBackTrafficClass,
   5298                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY7, 0, 4);
   5299     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyLoopBackPacketProcessingPort,
   5300                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY7, 0, 8);
   5301     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyHiGigProxy,
   5302                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY7, 128, 1);
   5303     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyHiGig,
   5304                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY7, 129, 1);
   5305     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyInPort,
   5306                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY7, 130, 8);
   5307     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyInterfaceClassPort,
   5308                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY7, 138, 8);
   5309     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyOutPort,
   5310                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY7, 146, 8);
   5311     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyIntPriority,
   5312                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4, 154, 4);
   5313     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyColor,
   5314                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY4, 158, 2);
   5315 
   5316     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifySrcClassL2,
   5317                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY7,
   5318                                _bcmFieldSliceSelEgrClassF7, 0,
   5319                                160, 13
   5320                                );
   5321     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifySrcClassL3,
   5322                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY7,
   5323                                _bcmFieldSliceSelEgrClassF7, 0,
   5324                                160, 13
   5325                                );
   5326     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstClassField,
   5327                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY7,
   5328                                _bcmFieldSliceSelEgrClassF7, 0,
   5329                                160, 13
   5330                                );
   5331     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifySrcClassField,
   5332                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY7,
   5333                                _bcmFieldSliceSelEgrClassF7, 0,
   5334                                160, 13
   5335                                );
   5336     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstClassL2,
   5337                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY7,
   5338                                _bcmFieldSliceSelEgrClassF7, 0,
   5339                                160, 13
   5340                                );
   5341     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstClassL3,
   5342                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY7,
   5343                                _bcmFieldSliceSelEgrClassF7, 0,
   5344                                160, 13
   5345                                );
   5346     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyInterfaceClassL2,
   5347                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY7,
   5348                                _bcmFieldSliceSelEgrClassF7, 0,
   5349                                160, 13
   5350                                );
   5351     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyInterfaceClassL3,
   5352                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY7,
   5353                                _bcmFieldSliceSelEgrClassF7, 0,
   5354                                160, 13
   5355                                );
   5356     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyIngressClassField,
   5357                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY7,
   5358                                _bcmFieldSliceSelEgrClassF7, 0,
   5359                                160, 13
   5360                                );
   5361     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc,
   5362                                bcmFieldQualifyIngressInterfaceClassPort,
   5363                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY7,
   5364                                _bcmFieldSliceSelEgrClassF7, 0,
   5365                                160, 13
   5366                                );
   5367     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc,
   5368                                bcmFieldQualifyIngressInterfaceClassVPort,
   5369                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY7,
   5370                                _bcmFieldSliceSelEgrClassF7, 0,
   5371                                160, 13
   5372                                );
   5373 
   5374     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClass,
   5375                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY7,
   5376                                _bcmFieldSliceSelEgrClassF7, 1,
   5377                                160, 12);
   5378     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc,
   5379                                bcmFieldQualifyEgressClassL3Interface,
   5380                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY7,
   5381                                _bcmFieldSliceSelEgrClassF7, 2,
   5382                                160, 12);
   5383     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassTrill,
   5384                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY7,
   5385                                _bcmFieldSliceSelEgrClassF7, 3,
   5386                                160, 12);
   5387     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassL2Gre,
   5388                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY7,
   5389                                _bcmFieldSliceSelEgrClassF7, 3,
   5390                                160, 12);
   5391     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassVxlan,
   5392                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY7,
   5393                                _bcmFieldSliceSelEgrClassF7, 3,
   5394                                160, 12);
   5395     
   5396 
   5397     /* CLASS_ID_B */
   5398     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifySrcClassL2,
   5399                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY7,
   5400                                _bcmFieldSliceSelEgrClassIdBF7, 0,
   5401                                173, 15);
   5402     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifySrcClassL3,
   5403                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY7,
   5404                                _bcmFieldSliceSelEgrClassIdBF7, 0,
   5405                                173, 15);
   5406     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstClassField,
   5407                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY7,
   5408                                _bcmFieldSliceSelEgrClassIdBF7, 0,
   5409                                173, 15);
   5410     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifySrcClassField,
   5411                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY7,
   5412                                _bcmFieldSliceSelEgrClassIdBF7, 0,
   5413                                173, 15);
   5414     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstClassL2,
   5415                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY7,
   5416                                _bcmFieldSliceSelEgrClassIdBF7, 0,
   5417                                173, 15);
   5418     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstClassL3,
   5419                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY7,
   5420                                _bcmFieldSliceSelEgrClassIdBF7, 0,
   5421                                173, 15);
   5422     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyInterfaceClassL2,
   5423                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY7,
   5424                                _bcmFieldSliceSelEgrClassIdBF7, 0,
   5425                                173, 15);
   5426     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyInterfaceClassL3,
   5427                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY7,
   5428                                _bcmFieldSliceSelEgrClassIdBF7, 0,
   5429                                173, 15);
   5430     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyIngressClassField,
   5431                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY7,
   5432                                _bcmFieldSliceSelEgrClassIdBF7, 0,
   5433                                173, 15);
   5434     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc,
   5435                                bcmFieldQualifyIngressInterfaceClassPort,
   5436                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY7,
   5437                                _bcmFieldSliceSelEgrClassIdBF7, 0,
   5438                                173, 15);
   5439     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc,
   5440                                bcmFieldQualifyIngressInterfaceClassVPort,
   5441                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY7,
   5442                                _bcmFieldSliceSelEgrClassIdBF7, 0,
   5443                                173, 15);
   5444     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClass,
   5445                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY7,
   5446                                _bcmFieldSliceSelEgrClassIdBF7, 1,
   5447                                173, 15);
   5448     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassTunnel,
   5449                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY7,
   5450                                _bcmFieldSliceSelEgrClassIdBF7, 2,
   5451                                173, 15);
   5452     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc,
   5453                                bcmFieldQualifyEgressClassL3Interface,
   5454                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY7,
   5455                                _bcmFieldSliceSelEgrClassIdBF7, 3,
   5456                                173, 15);
   5457     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc,
   5458                                bcmFieldQualifyEgressClassL3InterfaceTunnel,
   5459                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY7,
   5460                                _bcmFieldSliceSelEgrClassIdBF7, 4,
   5461                                173, 15);
   5462     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassTrill,
   5463                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY7,
   5464                                _bcmFieldSliceSelEgrClassIdBF7, 5,
   5465                                173, 15);
   5466     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassL2Gre,
   5467                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY7,
   5468                                _bcmFieldSliceSelEgrClassIdBF7, 5,
   5469                                173, 15);
   5470     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassVxlan,
   5471                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY7,
   5472                                _bcmFieldSliceSelEgrClassIdBF7, 5,
   5473                                173, 15);
   5474     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassWlan,
   5475                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY7,
   5476                                _bcmFieldSliceSelEgrClassIdBF7, 5,
   5477                                173, 15);
   5478     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyOutPort,
   5479                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY7,
   5480                                _bcmFieldSliceSelEgrClassIdBF7, 6,
   5481                                173, 15);
   5482     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyCpuQueue,
   5483                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY7,
   5484                                _bcmFieldSliceSelEgrClassIdBF7, 7,
   5485                                173, 15);
   5486     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstMplsGport,
   5487                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY7,
   5488                                _bcmFieldSliceSelEgrClassIdBF7, 8,
   5489                                173, 15);
   5490     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstMimGport,
   5491                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY7,
   5492                                _bcmFieldSliceSelEgrClassIdBF7, 8,
   5493                                173, 15);
   5494     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstVxlanGport,
   5495                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY7,
   5496                                _bcmFieldSliceSelEgrClassIdBF7, 8,
   5497                                173, 15);
   5498     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressForwardingClassId,
   5499                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY7,
   5500                                _bcmFieldSliceSelEgrClassIdBF7, 9,
   5501                                173, 15);
   5502 
   5503 
   5504     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyIntCongestionNotification,
   5505                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY7, 188, 2);
   5506     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyDrop,
   5507                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY7, 190, 1);
   5508 
   5509     /* EFP_KEY8(Bytes After L2 Key) Qualifiers */
   5510     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyL2PayLoad,
   5511                     _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8,
   5512                     _bcmFieldSliceSelDisable, 0, 59, 144);
   5513 
   5514     /* DVP_VALID + DVP + SPARE_DVP */
   5515     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstMplsGport,
   5516                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8,
   5517                                _bcmFieldSliceSelEgrDvpKey8, 0,
   5518                                0, 16);
   5519     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstMimGport,
   5520                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8,
   5521                                _bcmFieldSliceSelEgrDvpKey8, 0,
   5522                                0, 16);
   5523     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstVxlanGport,
   5524                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8,
   5525                                _bcmFieldSliceSelEgrDvpKey8, 0,
   5526                                0, 17);
   5527     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc,
   5528                                bcmFieldQualifyDestVirtualPortValid,
   5529                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8,
   5530                                _bcmFieldSliceSelEgrDvpKey8, 0,
   5531                                0, 1);
   5532     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClass,
   5533                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8,
   5534                                _bcmFieldSliceSelEgrDvpKey8, 1,
   5535                                1, 12);
   5536     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc,
   5537                                bcmFieldQualifyEgressClassL3Interface,
   5538                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8,
   5539                                _bcmFieldSliceSelEgrDvpKey8, 2,
   5540                                1, 12);
   5541     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassTrill,
   5542                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8,
   5543                                _bcmFieldSliceSelEgrDvpKey8, 3,
   5544                                1, 12);
   5545     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassL2Gre,
   5546                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8,
   5547                                _bcmFieldSliceSelEgrDvpKey8, 3,
   5548                                1, 12);
   5549     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassVxlan,
   5550                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8,
   5551                                _bcmFieldSliceSelEgrDvpKey8, 3,
   5552                                1, 12);
   5553 
   5554     /* CLASS_ID_B */
   5555     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifySrcClassL2,
   5556                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8,
   5557                                _bcmFieldSliceSelEgrClassIdBF8, 0,
   5558                                216, 15);
   5559     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifySrcClassL3,
   5560                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8,
   5561                                _bcmFieldSliceSelEgrClassIdBF8, 0,
   5562                                216, 15);
   5563     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstClassField,
   5564                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8,
   5565                                _bcmFieldSliceSelEgrClassIdBF8, 0,
   5566                                216, 15);
   5567     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifySrcClassField,
   5568                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8,
   5569                                _bcmFieldSliceSelEgrClassIdBF8, 0,
   5570                                216, 15);
   5571     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstClassL2,
   5572                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8,
   5573                                _bcmFieldSliceSelEgrClassIdBF8, 0,
   5574                                216, 15);
   5575     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstClassL3,
   5576                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8,
   5577                                _bcmFieldSliceSelEgrClassIdBF8, 0,
   5578                                216, 15);
   5579     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyInterfaceClassL2,
   5580                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8,
   5581                                _bcmFieldSliceSelEgrClassIdBF8, 0,
   5582                                216, 15);
   5583     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyInterfaceClassL3,
   5584                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8,
   5585                                _bcmFieldSliceSelEgrClassIdBF8, 0,
   5586                                216, 15);
   5587     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyIngressClassField,
   5588                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8,
   5589                                _bcmFieldSliceSelEgrClassIdBF8, 0,
   5590                                216, 15);
   5591     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc,
   5592                                bcmFieldQualifyIngressInterfaceClassPort,
   5593                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8,
   5594                                _bcmFieldSliceSelEgrClassIdBF8, 0,
   5595                                216, 15);
   5596     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc,
   5597                                bcmFieldQualifyIngressInterfaceClassVPort,
   5598                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8,
   5599                                _bcmFieldSliceSelEgrClassIdBF8, 0,
   5600                                216, 15);
   5601     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClass,
   5602                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8,
   5603                                _bcmFieldSliceSelEgrClassIdBF8, 1,
   5604                                216, 15);
   5605     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassTunnel,
   5606                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8,
   5607                                _bcmFieldSliceSelEgrClassIdBF8, 2,
   5608                                216, 15);
   5609     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc,
   5610                                bcmFieldQualifyEgressClassL3Interface,
   5611                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8,
   5612                                _bcmFieldSliceSelEgrClassIdBF8, 3,
   5613                                216, 15);
   5614     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc,
   5615                                bcmFieldQualifyEgressClassL3InterfaceTunnel,
   5616                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8,
   5617                                _bcmFieldSliceSelEgrClassIdBF8, 4,
   5618                                216, 15);
   5619     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassTrill,
   5620                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8,
   5621                                _bcmFieldSliceSelEgrClassIdBF8, 5,
   5622                                216, 15);
   5623     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassL2Gre,
   5624                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8,
   5625                                _bcmFieldSliceSelEgrClassIdBF8, 5,
   5626                                216, 15);
   5627     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassVxlan,
   5628                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8,
   5629                                _bcmFieldSliceSelEgrClassIdBF8, 5,
   5630                                216, 15);
   5631     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressClassWlan,
   5632                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8,
   5633                                _bcmFieldSliceSelEgrClassIdBF8, 5,
   5634                                216, 15);
   5635     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyOutPort,
   5636                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8,
   5637                                _bcmFieldSliceSelEgrClassIdBF8, 6,
   5638                                216, 15);
   5639     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyCpuQueue,
   5640                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8,
   5641                                _bcmFieldSliceSelEgrClassIdBF8, 7,
   5642                                216, 15);
   5643     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstMplsGport,
   5644                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8,
   5645                                _bcmFieldSliceSelEgrClassIdBF8, 8,
   5646                                216, 15);
   5647     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstMimGport,
   5648                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8,
   5649                                _bcmFieldSliceSelEgrClassIdBF8, 8,
   5650                                216, 15);
   5651     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstVxlanGport,
   5652                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8,
   5653                                _bcmFieldSliceSelEgrClassIdBF8, 8,
   5654                                216, 15);
   5655     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyEgressForwardingClassId,
   5656                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8,
   5657                                _bcmFieldSliceSelEgrClassIdBF8, 9,
   5658                                216, 15);
   5659 
   5660     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyIntPriority,
   5661                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8, 17, 4);
   5662     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyColor,
   5663                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8, 21, 2);
   5664     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyEtherType,
   5665                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8, 23, 16);
   5666     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyHiGigProxy,
   5667                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8, 39, 1);
   5668     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyHiGig,
   5669                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8, 40, 1);
   5670     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyInPort,
   5671                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8, 41, 8);
   5672     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyMirrorCopy,
   5673                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8, 49, 1);
   5674     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyDstHiGig,
   5675                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8, 50, 1);
   5676     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyInterfaceClassPort,
   5677                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8, 51, 8);
   5678     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyOutPort,
   5679                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8,
   5680                                _bcmFieldSliceSelEgrClassF8, 1,
   5681                                203, 8);
   5682     _FP_QUAL_EXT_ADD(unit, stage_fc, bcmFieldQualifyCpuQueue,
   5683                      _bcmFieldDevSelDisable, 0,
   5684                      _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8,
   5685                      _bcmFieldSliceSelEgrClassF8, 2,
   5686                      0,
   5687                      203, 6, /* CpuCos - 6 bits */
   5688                      0, 0,
   5689                      0, 0,
   5690                      0
   5691                      );
   5692     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifySrcClassL2,
   5693                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8,
   5694                                _bcmFieldSliceSelEgrClassF8, 0,
   5695                                203, 13
   5696                                );
   5697     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifySrcClassL3,
   5698                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8,
   5699                                _bcmFieldSliceSelEgrClassF8, 0,
   5700                                203, 13
   5701                                );
   5702     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstClassField,
   5703                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8,
   5704                                _bcmFieldSliceSelEgrClassF8, 0,
   5705                                203, 13
   5706                                );
   5707     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifySrcClassField,
   5708                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8,
   5709                                _bcmFieldSliceSelEgrClassF8, 0,
   5710                                203, 13
   5711                                );
   5712     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstClassL2,
   5713                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8,
   5714                                _bcmFieldSliceSelEgrClassF8, 0,
   5715                                203, 13
   5716                                );
   5717     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyDstClassL3,
   5718                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8,
   5719                                _bcmFieldSliceSelEgrClassF8, 0,
   5720                                203, 13
   5721                                );
   5722     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyInterfaceClassL2,
   5723                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8,
   5724                                _bcmFieldSliceSelEgrClassF8, 0,
   5725                                203, 13
   5726                                );
   5727     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyInterfaceClassL3,
   5728                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8,
   5729                                _bcmFieldSliceSelEgrClassF8, 0,
   5730                                203, 13
   5731                                );
   5732     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc, bcmFieldQualifyIngressClassField,
   5733                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8,
   5734                                _bcmFieldSliceSelEgrClassF8, 0,
   5735                                203, 13
   5736                                );
   5737     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc,
   5738                                bcmFieldQualifyIngressInterfaceClassPort,
   5739                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8,
   5740                                _bcmFieldSliceSelEgrClassF8, 0,
   5741                                203, 13
   5742                                );
   5743     _FP_QUAL_TWO_SLICE_SEL_ADD(unit, stage_fc,
   5744                                bcmFieldQualifyIngressInterfaceClassVPort,
   5745                                _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8,
   5746                                _bcmFieldSliceSelEgrClassF8, 0,
   5747                                203, 13
   5748                                );
   5749     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyForwardingVlanId,
   5750                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8, 231, 12);
   5751     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyVrf,
   5752                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8, 231, 14);
   5753     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyVpn,
   5754                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8, 231,
   5755                  SOC_IS_HELIX5(unit) ? 12 : 14);
   5756 
   5757     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyForwardingType,
   5758                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8, 245, 2);
   5759     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyIntCongestionNotification,
   5760                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8, 247, 2);
   5761     _FP_QUAL_ADD(unit, stage_fc, bcmFieldQualifyDrop,
   5762                  _bcmFieldSliceSelFpf3, _BCM_FIELD_EFP_KEY8, 249, 1);
   5763 
   5764     return (BCM_E_NONE);
   5765 }
   5766 /*
   5767  * Function:
   5768  *     _bcm_field_td3_egress_secondary_selcode_set
   5769  *
   5770  * Purpose:
   5771  *     Sets the secondary select codes based on field values in different
   5772  *     registers EFP_CLASSID_SELECTORr, EFP_KEY4_DVP_SELECTORr
   5773  *
   5774  * Parameters:
   5775  *     unit             - (IN) BCM unit number.
   5776  *     fg               - (IN/OUT) Select code information filled into the group
   5777  *     slice_idx        - (IN) Slice id
   5778  *     part_idx         - (IN) Part id of the given slice in the given group
   5779  *
   5780  * Returns:
   5781  *     BCM_E_XXX
   5782  */
   5783 int
   5784 _bcm_field_td3_egress_secondary_selcodes_set(int unit, _field_group_t *fg,
   5785                                              int slice_idx, uint8 part_idx)
   5786 {
   5787     soc_field_t field = INVALIDf;   /* H/W Register field.            */
   5788     uint64 reg_val64;    /* 64 bit H/W Register value.     */
   5789     uint32 reg_val;
   5790     uint32 fldval;       /* Field in a H/W register value. */
   5791     uint8  num_fields;   /* Number of fields.              */
   5792     soc_reg_t reg = INVALIDr;       /* H/W register.                  */
   5793     int rv = BCM_E_NONE; /* Operation status.              */
   5794     int idx;             /* Index.                         */
   5795     int inst;            /* Instance.                      */
   5796     _field_stage_t     *stage_fc = NULL;
   5797     soc_reg_t       efp_classid_sel_reg;
   5798     soc_reg_t       efp_classid_b_sel_reg;
   5799     soc_reg_t       efp_key4_dvp_reg;
   5800     soc_reg_t       efp_key8_dvp_reg;
   5801     soc_reg_t       efp_dst_port_reg;
   5802 
   5803     static const soc_field_t efp_dest_port_selector_flds[][2] = {
   5804              {SLICE_0_F1_DEST_SELf, SLICE_0_F5_DEST_SELf},
   5805              {SLICE_1_F1_DEST_SELf, SLICE_1_F5_DEST_SELf},
   5806              {SLICE_2_F1_DEST_SELf, SLICE_2_F5_DEST_SELf},
   5807              {SLICE_3_F1_DEST_SELf, SLICE_3_F5_DEST_SELf},
   5808         };
   5809 
   5810 
   5811     if (NULL == fg) {
   5812         return BCM_E_PARAM;
   5813     }
   5814 
   5815     BCM_IF_ERROR_RETURN(_field_stage_control_get(unit, _BCM_FIELD_STAGE_EGRESS, &stage_fc));
   5816     if (stage_fc->oper_mode == bcmFieldGroupOperModeGlobal) {
   5817        inst = _FP_GLOBAL_INST;
   5818     } else {
   5819        inst = fg->instance;
   5820     }
   5821 
   5822     BCM_IF_ERROR_RETURN(_bcm_field_reg_instance_get(unit,
   5823                                                        EFP_CLASSID_SELECTOR_Ar,
   5824                                                        inst,
   5825                                                        &efp_classid_sel_reg));
   5826     BCM_IF_ERROR_RETURN(_bcm_field_reg_instance_get(unit,
   5827                                   EFP_CLASSID_B_SELECTOR_KEY_TYPEr,
   5828                                   inst, &efp_classid_b_sel_reg));
   5829     BCM_IF_ERROR_RETURN(_bcm_field_reg_instance_get(unit,
   5830                                                    EFP_KEY4_DVP_SELECTORr,
   5831                                                    inst, &efp_key4_dvp_reg));
   5832     BCM_IF_ERROR_RETURN(_bcm_field_reg_instance_get(unit,
   5833                                                    EFP_KEY8_DVP_SELECTORr,
   5834                                                    inst, &efp_key8_dvp_reg));
   5835     BCM_IF_ERROR_RETURN(_bcm_field_reg_instance_get(unit,
   5836                                                        EFP_DEST_PORT_SELECTORr,
   5837                                                        inst,
   5838                                                        &efp_dst_port_reg));
   5839 
   5840     fg->sel_codes[part_idx].egr_class_f1_sel = _FP_SELCODE_DONT_CARE;
   5841     fg->sel_codes[part_idx].egr_class_f2_sel = _FP_SELCODE_DONT_CARE;
   5842     fg->sel_codes[part_idx].egr_class_f3_sel = _FP_SELCODE_DONT_CARE;
   5843     fg->sel_codes[part_idx].egr_class_f4_sel = _FP_SELCODE_DONT_CARE;
   5844     fg->sel_codes[part_idx].egr_class_f6_sel = _FP_SELCODE_DONT_CARE;
   5845     fg->sel_codes[part_idx].egr_class_f7_sel = _FP_SELCODE_DONT_CARE;
   5846     fg->sel_codes[part_idx].egr_class_f8_sel = _FP_SELCODE_DONT_CARE;
   5847     fg->sel_codes[part_idx].egr_key4_dvp_sel = _FP_SELCODE_DONT_CARE;
   5848     fg->sel_codes[part_idx].egr_key8_dvp_sel = _FP_SELCODE_DONT_CARE;
   5849     fg->sel_codes[part_idx].egr_key4_mdl_sel = _FP_SELCODE_DONT_CARE;
   5850     fg->sel_codes[part_idx].egr_classId_B_f1_sel = _FP_SELCODE_DONT_CARE;
   5851     fg->sel_codes[part_idx].egr_classId_B_f2_sel = _FP_SELCODE_DONT_CARE;
   5852     fg->sel_codes[part_idx].egr_classId_B_f3_sel = _FP_SELCODE_DONT_CARE;
   5853     fg->sel_codes[part_idx].egr_classId_B_f4_sel = _FP_SELCODE_DONT_CARE;
   5854     fg->sel_codes[part_idx].egr_classId_B_f5_sel = _FP_SELCODE_DONT_CARE;
   5855     fg->sel_codes[part_idx].egr_classId_B_f6_sel = _FP_SELCODE_DONT_CARE;
   5856     fg->sel_codes[part_idx].egr_classId_B_f7_sel = _FP_SELCODE_DONT_CARE;
   5857     fg->sel_codes[part_idx].egr_classId_B_f8_sel = _FP_SELCODE_DONT_CARE;
   5858     fg->sel_codes[part_idx].egr_dest_port_f1_sel = _FP_SELCODE_DONT_CARE;
   5859     fg->sel_codes[part_idx].egr_dest_port_f5_sel = _FP_SELCODE_DONT_CARE;
   5860 
   5861 
   5862     reg = efp_classid_sel_reg;
   5863     rv = soc_reg_get(unit, reg, REG_PORT_ANY, 0, &reg_val64);
   5864     num_fields = sizeof(classfldtbl[0]) /
   5865                    sizeof(classfldtbl[0][0]);
   5866 
   5867     if (BCM_SUCCESS(rv)) {
   5868         for (idx = 0 ; idx < num_fields; idx++) {
   5869             field = classfldtbl[slice_idx][idx];
   5870             if (!soc_reg_field_valid(unit, reg, field)) {
   5871                 continue;
   5872             }
   5873 
   5874             fldval =  soc_reg64_field32_get(unit, reg, reg_val64, field);
   5875 
   5876             switch(idx) {
   5877                 case 0:
   5878                      fg->sel_codes[part_idx].egr_class_f1_sel = fldval;
   5879                      break;
   5880                 case 1:
   5881                      fg->sel_codes[part_idx].egr_class_f2_sel = fldval;
   5882                      break;
   5883                 case 2:
   5884                      fg->sel_codes[part_idx].egr_class_f3_sel = fldval;
   5885                      break;
   5886                 case 3:
   5887                      fg->sel_codes[part_idx].egr_class_f4_sel = fldval;
   5888                      break;
   5889                 case 4:
   5890                      fg->sel_codes[part_idx].egr_class_f6_sel = fldval;
   5891                      break;
   5892                 case 5:
   5893                      fg->sel_codes[part_idx].egr_class_f7_sel = fldval;
   5894                      break;
   5895                 case 6:
   5896                      fg->sel_codes[part_idx].egr_class_f8_sel = fldval;
   5897                      break;
   5898                 default:
   5899                      LOG_ERROR(BSL_LS_BCM_FP,
   5900                                (BSL_META_U(unit,
   5901                                            "FP(unit %d) Error:Invalid field in efp classid_A selector \n"),
   5902                                 unit));
   5903                      return BCM_E_INTERNAL;
   5904             }
   5905         }
   5906     }
   5907 
   5908     reg = efp_classid_b_sel_reg;
   5909 
   5910     for (idx = 0 ; idx < 8; idx++) {
   5911         BCM_IF_ERROR_RETURN(soc_reg32_get(unit, reg, REG_PORT_ANY, idx, &reg_val));
   5912         if (!soc_reg_field_valid(unit, reg, classIdBfldtbl[slice_idx])) {
   5913             continue;
   5914         }
   5915 
   5916         fldval = soc_reg_field_get(unit, reg, reg_val, classIdBfldtbl[slice_idx]);
   5917 
   5918         switch(idx) {
   5919             case 0:
   5920                  fg->sel_codes[part_idx].egr_classId_B_f1_sel = fldval;
   5921                  break;
   5922             case 1:
   5923                  fg->sel_codes[part_idx].egr_classId_B_f2_sel = fldval;
   5924                  break;
   5925             case 2:
   5926                  fg->sel_codes[part_idx].egr_classId_B_f3_sel = fldval;
   5927                  break;
   5928             case 3:
   5929                  fg->sel_codes[part_idx].egr_classId_B_f4_sel = fldval;
   5930                  break;
   5931             case 4:
   5932                  fg->sel_codes[part_idx].egr_classId_B_f5_sel = fldval;
   5933                  break;
   5934             case 5:
   5935                  fg->sel_codes[part_idx].egr_classId_B_f6_sel = fldval;
   5936                  break;
   5937             case 6:
   5938                  fg->sel_codes[part_idx].egr_classId_B_f7_sel = fldval;
   5939                  break;
   5940             case 7:
   5941                  fg->sel_codes[part_idx].egr_classId_B_f8_sel = fldval;
   5942                  break;
   5943                  /* coverity[dead_error_begin] */
   5944             default:
   5945                  LOG_ERROR(BSL_LS_BCM_FP,
   5946                            (BSL_META_U(unit,
   5947                                        "FP(unit %d) Error:Invalid field in efp classid_B selector \n"),
   5948                             unit));
   5949                  return BCM_E_INTERNAL;
   5950         }
   5951     }
   5952 
   5953     reg = efp_key4_dvp_reg;
   5954     rv = soc_reg32_get(unit, reg, REG_PORT_ANY, 0, &reg_val);
   5955 
   5956     if (BCM_SUCCESS(rv)) {
   5957         field = dvpfldtbl[slice_idx];
   5958         if (soc_reg_field_valid(unit, reg, field)) {
   5959             fldval = soc_reg_field_get(unit, reg, reg_val, field);
   5960             fg->sel_codes[part_idx].egr_key4_dvp_sel = fldval;
   5961         }
   5962     }
   5963 
   5964     reg = efp_key8_dvp_reg;
   5965     rv = soc_reg32_get(unit, reg, REG_PORT_ANY, 0, &reg_val);
   5966 
   5967     if (BCM_SUCCESS(rv)) {
   5968 
   5969         field = dvpfldtbl[slice_idx];
   5970         if (soc_reg_field_valid(unit, reg, field)) {
   5971 
   5972             fldval = soc_reg_field_get(unit, reg, reg_val, field);
   5973             fg->sel_codes[part_idx].egr_key8_dvp_sel = fldval;
   5974         }
   5975     }
   5976 
   5977     if (SOC_REG_IS_VALID(unit, EFP_DEST_PORT_SELECTORr)) {
   5978 
   5979         reg = efp_dst_port_reg;
   5980         rv = soc_reg32_get(unit, reg, REG_PORT_ANY, 0, &reg_val);
   5981 
   5982         if (BCM_SUCCESS(rv)) {
   5983             num_fields = sizeof(efp_dest_port_selector_flds[0]) /
   5984                              sizeof(efp_dest_port_selector_flds[0][0]);
   5985             for (idx = 0 ; idx < num_fields; idx++) {
   5986                 field = efp_dest_port_selector_flds[slice_idx][idx];
   5987                 if (!soc_reg_field_valid(unit, reg, field)) {
   5988                     continue;
   5989                 }
   5990                 fldval = soc_reg_field_get(unit, reg, reg_val, field);
   5991 
   5992                 switch(idx) {
   5993                     case 0:
   5994                         fg->sel_codes[part_idx].egr_dest_port_f1_sel = fldval;
   5995                         break;
   5996                     case 1:
   5997                         fg->sel_codes[part_idx].egr_dest_port_f5_sel = fldval;
   5998                         break;
   5999                     default:
   6000                         LOG_ERROR(BSL_LS_BCM_FP,
   6001                                 (BSL_META_U(unit,
   6002                                  "FP(unit %d) Error"
   6003                                  ":Invalid field in efp dest port selector \n"),
   6004                                  unit));
   6005                         return BCM_E_INTERNAL;
   6006                 }
   6007             }
   6008         }
   6009 
   6010     }
   6011 
   6012     return BCM_E_NONE;
   6013 }
   6014 /*
   6015  * Function:
   6016  *     _field_td3_egress_selcodes_install
   6017  *
   6018  * Purpose:
   6019  *     Writes the field egress secondary select codes.
   6020  *
   6021  * Parameters:
   6022  *     unit          - (IN) BCM device number
   6023  *     fg            - (IN) Installed group structure.
   6024  *     slice_numb    - (IN) Slice number to set mode for.
   6025  *     selcode_index - (IN) Index to group slecodes.
   6026  *
   6027  *
   6028  * Returns:
   6029  *     BCM_E_INTERNAL - On read/write errors
   6030  *     BCM_E_NONE     - Success
   6031  *
   6032  * Note:
   6033  *     Unit lock should be held by calling function.
   6034  */
   6035 
   6036 int
   6037 _field_td3_egress_selcodes_install(int            unit,
   6038                                    _field_group_t *fg,
   6039                                    uint8          slice_num,
   6040                                    int            selcode_idx
   6041                                    )
   6042 {
   6043     int             inst =-1;
   6044     uint8           idx; /* Index to EFP keys. */
   6045     uint8           idx_b; /* Index to EFP CLASSID B keys. */
   6046     uint32          reg_val;
   6047     _field_sel_t    *sel;
   6048     _field_stage_t  *stage_fc = NULL;
   6049     soc_reg_t       efp_classid_sel_r = INVALIDr;
   6050     soc_reg_t       efp_classid_b_sel_reg = INVALIDr;
   6051     soc_reg_t       efp_key4_dvp_reg = INVALIDr;
   6052     soc_reg_t       efp_key8_dvp_reg = INVALIDr;
   6053     soc_reg_t       efp_dst_port_reg = INVALIDr;
   6054 
   6055     static const soc_field_t efp_dest_port_selector_flds[][2] = {
   6056              {SLICE_0_F1_DEST_SELf, SLICE_0_F5_DEST_SELf},
   6057              {SLICE_1_F1_DEST_SELf, SLICE_1_F5_DEST_SELf},
   6058              {SLICE_2_F1_DEST_SELf, SLICE_2_F5_DEST_SELf},
   6059              {SLICE_3_F1_DEST_SELf, SLICE_3_F5_DEST_SELf},
   6060         };
   6061 
   6062     if (NULL == fg) {
   6063         return BCM_E_PARAM;
   6064     }
   6065 
   6066     /* Max number of slices on Tomahawk for EFP is 4(slice 0 - slice 3) */
   6067     if (slice_num >= 4)  {
   6068         return BCM_E_INTERNAL;
   6069     }
   6070 
   6071     sel = &fg->sel_codes[selcode_idx];
   6072     if (sel == NULL) {
   6073        return BCM_E_INTERNAL;
   6074     }
   6075 
   6076     BCM_IF_ERROR_RETURN(_field_stage_control_get(unit, fg->stage_id,
   6077                                                  &stage_fc));
   6078 
   6079     if (stage_fc->oper_mode == bcmFieldGroupOperModeGlobal) {
   6080        inst = _FP_GLOBAL_INST;
   6081     } else {
   6082        inst = fg->instance;
   6083     }
   6084 
   6085     BCM_IF_ERROR_RETURN(_bcm_field_reg_instance_get(unit,
   6086                                                        EFP_CLASSID_SELECTOR_Ar,
   6087                                                        inst,
   6088                                                        &efp_classid_sel_r));
   6089     BCM_IF_ERROR_RETURN(_bcm_field_reg_instance_get(unit,
   6090                                   EFP_CLASSID_B_SELECTOR_KEY_TYPEr,
   6091                                   inst, &efp_classid_b_sel_reg));
   6092     BCM_IF_ERROR_RETURN(_bcm_field_reg_instance_get(unit,
   6093                                                    EFP_KEY4_DVP_SELECTORr,
   6094                                                    inst, &efp_key4_dvp_reg));
   6095     BCM_IF_ERROR_RETURN(_bcm_field_reg_instance_get(unit,
   6096                                                    EFP_KEY8_DVP_SELECTORr,
   6097                                                    inst, &efp_key8_dvp_reg));
   6098     BCM_IF_ERROR_RETURN(_bcm_field_reg_instance_get(unit,
   6099                                                     EFP_DEST_PORT_SELECTORr,
   6100                                                     inst,
   6101                                                     &efp_dst_port_reg));
   6102 
   6103     idx = 0;
   6104     /* Class Id Selector codes for different EFP keys (KEY1 - KEY8) */
   6105     if (sel->egr_class_f1_sel != _FP_SELCODE_DONT_CARE) {
   6106         BCM_IF_ERROR_RETURN(soc_reg_field32_modify(unit,
   6107                                                    efp_classid_sel_r,
   6108                                                    REG_PORT_ANY,
   6109                                                    classfldtbl[slice_num][idx],
   6110                                                    sel->egr_class_f1_sel
   6111                                                    ));
   6112     }
   6113     idx_b = 0;
   6114     if (sel->egr_classId_B_f1_sel != _FP_SELCODE_DONT_CARE) {
   6115         BCM_IF_ERROR_RETURN(soc_reg32_get(unit,
   6116                                       efp_classid_b_sel_reg,
   6117                                       REG_PORT_ANY,
   6118                                       idx_b,
   6119                                       &reg_val
   6120                                       ));
   6121         soc_reg_field_set(unit,
   6122                           efp_classid_b_sel_reg,
   6123                           &reg_val,
   6124                           classIdBfldtbl[slice_num],
   6125                           sel->egr_classId_B_f1_sel);
   6126         BCM_IF_ERROR_RETURN(soc_reg32_set(unit,
   6127                                       efp_classid_b_sel_reg,
   6128                                       REG_PORT_ANY,
   6129                                       idx_b,
   6130                                       reg_val));
   6131     }
   6132     idx++;
   6133     if (sel->egr_class_f2_sel != _FP_SELCODE_DONT_CARE) {
   6134         BCM_IF_ERROR_RETURN(soc_reg_field32_modify(unit,
   6135                                                    efp_classid_sel_r,
   6136                                                    REG_PORT_ANY,
   6137                                                    classfldtbl[slice_num][idx],
   6138                                                    sel->egr_class_f2_sel
   6139                                                    ));
   6140     }
   6141     idx_b++;
   6142     if (sel->egr_classId_B_f2_sel != _FP_SELCODE_DONT_CARE) {
   6143         BCM_IF_ERROR_RETURN(soc_reg32_get(unit,
   6144                                       efp_classid_b_sel_reg,
   6145                                       REG_PORT_ANY,
   6146                                       idx_b,
   6147                                       &reg_val
   6148                                       ));
   6149         soc_reg_field_set(unit,
   6150                           efp_classid_b_sel_reg,
   6151                           &reg_val,
   6152                           classIdBfldtbl[slice_num],
   6153                           sel->egr_classId_B_f2_sel);
   6154         BCM_IF_ERROR_RETURN(soc_reg32_set(unit,
   6155                                       efp_classid_b_sel_reg,
   6156                                       REG_PORT_ANY,
   6157                                       idx_b,
   6158                                       reg_val));
   6159     }
   6160     idx++;
   6161     if (sel->egr_class_f3_sel != _FP_SELCODE_DONT_CARE) {
   6162         BCM_IF_ERROR_RETURN(soc_reg_field32_modify(unit,
   6163                                                    efp_classid_sel_r,
   6164                                                    REG_PORT_ANY,
   6165                                                    classfldtbl[slice_num][idx],
   6166                                                    sel->egr_class_f3_sel
   6167                                                    ));
   6168     }
   6169     idx_b++;
   6170     if (sel->egr_classId_B_f3_sel != _FP_SELCODE_DONT_CARE) {
   6171         BCM_IF_ERROR_RETURN(soc_reg32_get(unit,
   6172                                       efp_classid_b_sel_reg,
   6173                                       REG_PORT_ANY,
   6174                                       idx_b,
   6175                                       &reg_val
   6176                                       ));
   6177         soc_reg_field_set(unit,
   6178                           efp_classid_b_sel_reg,
   6179                           &reg_val,
   6180                           classIdBfldtbl[slice_num],
   6181                           sel->egr_classId_B_f3_sel);
   6182         BCM_IF_ERROR_RETURN(soc_reg32_set(unit,
   6183                                       efp_classid_b_sel_reg,
   6184                                       REG_PORT_ANY,
   6185                                       idx_b,
   6186                                       reg_val));
   6187     }
   6188 
   6189     idx++;
   6190     if (sel->egr_class_f4_sel != _FP_SELCODE_DONT_CARE) {
   6191         BCM_IF_ERROR_RETURN(soc_reg_field32_modify(unit,
   6192                                                    efp_classid_sel_r,
   6193                                                    REG_PORT_ANY,
   6194                                                    classfldtbl[slice_num][idx],
   6195                                                    sel->egr_class_f4_sel
   6196                                                    ));
   6197     }
   6198     idx_b++;
   6199     if (sel->egr_classId_B_f4_sel != _FP_SELCODE_DONT_CARE) {
   6200         BCM_IF_ERROR_RETURN(soc_reg32_get(unit,
   6201                                       efp_classid_b_sel_reg,
   6202                                       REG_PORT_ANY,
   6203                                       idx_b,
   6204                                       &reg_val
   6205                                       ));
   6206         soc_reg_field_set(unit,
   6207                           efp_classid_b_sel_reg,
   6208                           &reg_val,
   6209                           classIdBfldtbl[slice_num],
   6210                           sel->egr_classId_B_f4_sel);
   6211         BCM_IF_ERROR_RETURN(soc_reg32_set(unit,
   6212                                       efp_classid_b_sel_reg,
   6213                                       REG_PORT_ANY,
   6214                                       idx_b,
   6215                                       reg_val));
   6216     }
   6217 
   6218     idx_b++;
   6219     if (sel->egr_classId_B_f5_sel != _FP_SELCODE_DONT_CARE) {
   6220         BCM_IF_ERROR_RETURN(soc_reg32_get(unit,
   6221                                       efp_classid_b_sel_reg,
   6222                                       REG_PORT_ANY,
   6223                                       idx_b,
   6224                                       &reg_val
   6225                                       ));
   6226         soc_reg_field_set(unit,
   6227                           efp_classid_b_sel_reg,
   6228                           &reg_val,
   6229                           classIdBfldtbl[slice_num],
   6230                           sel->egr_classId_B_f5_sel);
   6231         BCM_IF_ERROR_RETURN(soc_reg32_set(unit,
   6232                                       efp_classid_b_sel_reg,
   6233                                       REG_PORT_ANY,
   6234                                       idx_b,
   6235                                       reg_val));
   6236     }
   6237 
   6238     idx++;
   6239     if (sel->egr_class_f6_sel != _FP_SELCODE_DONT_CARE) {
   6240         BCM_IF_ERROR_RETURN(soc_reg_field32_modify(unit,
   6241                                                    efp_classid_sel_r,
   6242                                                    REG_PORT_ANY,
   6243                                                    classfldtbl[slice_num][idx],
   6244                                                    sel->egr_class_f6_sel
   6245                                                    ));
   6246     }
   6247     idx_b++;
   6248     if (sel->egr_classId_B_f6_sel != _FP_SELCODE_DONT_CARE) {
   6249         BCM_IF_ERROR_RETURN(soc_reg32_get(unit,
   6250                                       efp_classid_b_sel_reg,
   6251                                       REG_PORT_ANY,
   6252                                       idx_b,
   6253                                       &reg_val
   6254                                       ));
   6255         soc_reg_field_set(unit,
   6256                           efp_classid_b_sel_reg,
   6257                           &reg_val,
   6258                           classIdBfldtbl[slice_num],
   6259                           sel->egr_classId_B_f6_sel);
   6260         BCM_IF_ERROR_RETURN(soc_reg32_set(unit,
   6261                                       efp_classid_b_sel_reg,
   6262                                       REG_PORT_ANY,
   6263                                       idx_b,
   6264                                       reg_val));
   6265     }
   6266 
   6267     idx++;
   6268     if (sel->egr_class_f7_sel != _FP_SELCODE_DONT_CARE) {
   6269         BCM_IF_ERROR_RETURN(soc_reg_field32_modify(unit,
   6270                                                    efp_classid_sel_r,
   6271                                                    REG_PORT_ANY,
   6272                                                    classfldtbl[slice_num][idx],
   6273                                                    sel->egr_class_f7_sel
   6274                                                    ));
   6275     }
   6276     idx_b++;
   6277     if (sel->egr_classId_B_f7_sel != _FP_SELCODE_DONT_CARE) {
   6278         BCM_IF_ERROR_RETURN(soc_reg32_get(unit,
   6279                                       efp_classid_b_sel_reg,
   6280                                       REG_PORT_ANY,
   6281                                       idx_b,
   6282                                       &reg_val
   6283                                       ));
   6284         soc_reg_field_set(unit,
   6285                           efp_classid_b_sel_reg,
   6286                           &reg_val,
   6287                           classIdBfldtbl[slice_num],
   6288                           sel->egr_classId_B_f7_sel);
   6289         BCM_IF_ERROR_RETURN(soc_reg32_set(unit,
   6290                                       efp_classid_b_sel_reg,
   6291                                       REG_PORT_ANY,
   6292                                       idx_b,
   6293                                       reg_val));
   6294     }
   6295 
   6296     idx++;
   6297     if (sel->egr_class_f8_sel != _FP_SELCODE_DONT_CARE) {
   6298         BCM_IF_ERROR_RETURN(soc_reg_field32_modify(unit,
   6299                                                    efp_classid_sel_r,
   6300                                                    REG_PORT_ANY,
   6301                                                    classfldtbl[slice_num][idx],
   6302                                                    sel->egr_class_f8_sel
   6303                                                    ));
   6304     }
   6305     idx_b++;
   6306     if (sel->egr_classId_B_f8_sel != _FP_SELCODE_DONT_CARE) {
   6307         BCM_IF_ERROR_RETURN(soc_reg32_get(unit,
   6308                                       efp_classid_b_sel_reg,
   6309                                       REG_PORT_ANY,
   6310                                       idx_b,
   6311                                       &reg_val
   6312                                       ));
   6313         soc_reg_field_set(unit,
   6314                           efp_classid_b_sel_reg,
   6315                           &reg_val,
   6316                           classIdBfldtbl[slice_num],
   6317                           sel->egr_classId_B_f8_sel);
   6318         BCM_IF_ERROR_RETURN(soc_reg32_set(unit,
   6319                                       efp_classid_b_sel_reg,
   6320                                       REG_PORT_ANY,
   6321                                       idx_b,
   6322                                       reg_val));
   6323     }
   6324 
   6325     /* SELECTOR CODES for EFP_KEY4_DVP_SELECTOR register */
   6326     if (sel->egr_key4_dvp_sel != _FP_SELCODE_DONT_CARE) {
   6327         BCM_IF_ERROR_RETURN(soc_reg_field32_modify(unit,
   6328                                                    efp_key4_dvp_reg,
   6329                                                    REG_PORT_ANY,
   6330                                                    dvpfldtbl[slice_num],
   6331                                                    sel->egr_key4_dvp_sel
   6332                                                   ));
   6333     }
   6334     /* SELECTOR CODES for EFP_KEY8_DVP_SELECTOR register */
   6335     if (sel->egr_key8_dvp_sel != _FP_SELCODE_DONT_CARE) {
   6336         BCM_IF_ERROR_RETURN(soc_reg_field32_modify(unit,
   6337                                                    efp_key8_dvp_reg,
   6338                                                    REG_PORT_ANY,
   6339                                                    dvpfldtbl[slice_num],
   6340                                                    sel->egr_key8_dvp_sel
   6341                                                   ));
   6342     }
   6343 
   6344     /* SELECTOR CODES for EFP_DEST_PORT_SELECTORr */
   6345     if (SOC_REG_IS_VALID(unit, EFP_DEST_PORT_SELECTORr)) {
   6346         if (sel->egr_dest_port_f1_sel != _FP_SELCODE_DONT_CARE) {
   6347             BCM_IF_ERROR_RETURN(soc_reg_field32_modify(unit,
   6348                         efp_dst_port_reg,
   6349                         REG_PORT_ANY,
   6350                         efp_dest_port_selector_flds[slice_num][0],
   6351                         sel->egr_dest_port_f1_sel
   6352                         )
   6353                     );
   6354         }
   6355         if (sel->egr_dest_port_f5_sel != _FP_SELCODE_DONT_CARE) {
   6356             BCM_IF_ERROR_RETURN(soc_reg_field32_modify(unit,
   6357                         efp_dst_port_reg,
   6358                         REG_PORT_ANY,
   6359                         efp_dest_port_selector_flds[slice_num][1],
   6360                         sel->egr_dest_port_f5_sel
   6361                         )
   6362                     );
   6363         }
   6364     }
   6365 
   6366     return (BCM_E_NONE);
   6367 }
   6368 
   6369 /*
   6370  * Function:
   6371  *  _bcm_field_td3_em_key_attributes_init
   6372  * Purpose:
   6373  *  Initialize Exact Match Key Attribute memory.
   6374  * Parameters:
   6375  *  unit     - (IN) BCM device number.
   6376  *  stage_fc - (IN) Field Processor stage control structure.
   6377  * Returns:
   6378  *  BCM_E_XXX
   6379  * Notes:
   6380  */
   6381 int
   6382 _bcm_field_td3_em_key_attributes_init(int unit, _field_stage_t *stage_fc)
   6383 {
   6384     exact_match_key_attributes_entry_t em_entry;
   6385                                       /* key attributes Entry buffer.  */
   6386     uint32 *em_key_attr_entry = NULL; /* Hardware Buffer Ptr.      */
   6387     int idx;
   6388     soc_mem_t mem;                    /* Memory Identifier.        */
   6389     int mem_inst = 0;
   6390     static soc_mem_t em_key_attributes_mem;
   6391 
   6392     mem = EXACT_MATCH_KEY_ATTRIBUTESm;
   6393 
   6394     /* assign exact match key attribute entry buffer. */
   6395     em_key_attr_entry = (uint32 *)&em_entry;
   6396 
   6397     for (idx = 0; idx < stage_fc->num_instances; idx++) {
   6398 
   6399         if (stage_fc->oper_mode == bcmFieldGroupOperModeGlobal) {
   6400             mem_inst = _FP_GLOBAL_INST;
   6401         } else if (stage_fc->oper_mode == bcmFieldGroupOperModePipeLocal) {
   6402             mem_inst = idx;
   6403         } else {
   6404             return BCM_E_INTERNAL;
   6405         }
   6406 
   6407         BCM_IF_ERROR_RETURN(_bcm_field_mem_instance_get(unit,
   6408                     EXACT_MATCH_KEY_ATTRIBUTESm,
   6409                     mem_inst, &em_key_attributes_mem));
   6410 
   6411         /* Initialize buffer to 0 */
   6412         sal_memcpy(em_key_attr_entry, soc_mem_entry_null(unit, mem),
   6413                 soc_mem_entry_words(unit, mem) * sizeof(uint32));
   6414         /* Mode 128: entry 0 */
   6415         /* Read entry into SW buffer. */
   6416         BCM_IF_ERROR_RETURN(soc_mem_read(unit, em_key_attributes_mem,
   6417                     MEM_BLOCK_ANY, 0, em_key_attr_entry));
   6418 
   6419         /* Mode 128: Set BUCKET_MODE. */
   6420         soc_mem_field32_set(unit, em_key_attributes_mem,
   6421                 em_key_attr_entry, BUCKET_MODEf, 1);
   6422         /* Mode 128: Set KEY_BASE_WIDTH. */
   6423         soc_mem_field32_set(unit, em_key_attributes_mem,
   6424                 em_key_attr_entry, KEY_BASE_WIDTHf, 1);
   6425         /* Mode 128: Set KEY_WIDTH. */
   6426         soc_mem_field32_set(unit, em_key_attributes_mem,
   6427                 em_key_attr_entry, KEY_WIDTHf, 6);
   6428         /* Mode 128: Set DATA_BASE_WIDTH. */
   6429         soc_mem_field32_set(unit, em_key_attributes_mem,
   6430                 em_key_attr_entry, DATA_BASE_WIDTHf, 0);
   6431 
   6432         /* Install entry in hardware. */
   6433         BCM_IF_ERROR_RETURN(soc_mem_write(unit, em_key_attributes_mem,
   6434                     MEM_BLOCK_ALL, 0, em_key_attr_entry));
   6435 
   6436         /* Initialize buffer to 0 */
   6437         sal_memcpy(em_key_attr_entry, soc_mem_entry_null(unit, mem),
   6438                 soc_mem_entry_words(unit, mem) * sizeof(uint32));
   6439         /* Mode 160: entry 1 */
   6440         /* Read entry into SW buffer. */
   6441         BCM_IF_ERROR_RETURN(soc_mem_read(unit, em_key_attributes_mem,
   6442                     MEM_BLOCK_ANY, 1, em_key_attr_entry));
   6443 
   6444         /* Mode 160: Set BUCKET_MODE. */
   6445         soc_mem_field32_set(unit, em_key_attributes_mem,
   6446                 em_key_attr_entry, BUCKET_MODEf, 1);
   6447         /* Mode 160: Set KEY_BASE_WIDTH. */
   6448         soc_mem_field32_set(unit, em_key_attributes_mem,
   6449                 em_key_attr_entry, KEY_BASE_WIDTHf, 1);
   6450         /* Mode 160: Set KEY_WIDTH. */
   6451         soc_mem_field32_set(unit, em_key_attributes_mem,
   6452                 em_key_attr_entry, KEY_WIDTHf, 14);
   6453         /* Mode 160: Set DATA_BASE_WIDTH. */
   6454         soc_mem_field32_set(unit, em_key_attributes_mem,
   6455                 em_key_attr_entry, DATA_BASE_WIDTHf, 0);
   6456         /* Install entry in hardware. */
   6457         BCM_IF_ERROR_RETURN(soc_mem_write(unit, em_key_attributes_mem,
   6458                     MEM_BLOCK_ALL, 1, em_key_attr_entry));
   6459 
   6460         /* Initialize buffer to 0 */
   6461         sal_memcpy(em_key_attr_entry, soc_mem_entry_null(unit, mem),
   6462                 soc_mem_entry_words(unit, mem) * sizeof(uint32));
   6463         /* Mode 320: entry 2 */
   6464         /* Read entry into SW buffer. */
   6465         BCM_IF_ERROR_RETURN(soc_mem_read(unit, em_key_attributes_mem,
   6466                     MEM_BLOCK_ANY, 2, em_key_attr_entry));
   6467 
   6468         /* Mode 320: Set BUCKET_MODE. */
   6469         soc_mem_field32_set(unit, em_key_attributes_mem,
   6470                 em_key_attr_entry, BUCKET_MODEf, 2);
   6471         /* Mode 320: Set KEY_BASE_WIDTH. */
   6472         soc_mem_field32_set(unit, em_key_attributes_mem,
   6473                 em_key_attr_entry, KEY_BASE_WIDTHf, 3);
   6474         /* Mode 320: Set KEY_WIDTH. */
   6475         soc_mem_field32_set(unit, em_key_attributes_mem,
   6476                 em_key_attr_entry, KEY_WIDTHf, 1);
   6477         /* Mode 320: Set DATA_BASE_WIDTH. */
   6478         soc_mem_field32_set(unit, em_key_attributes_mem,
   6479                 em_key_attr_entry, DATA_BASE_WIDTHf, 0);
   6480 
   6481         /* Install entry in hardware. */
   6482         BCM_IF_ERROR_RETURN(soc_mem_write(unit, em_key_attributes_mem,
   6483                     MEM_BLOCK_ALL, 2, em_key_attr_entry));
   6484     }
   6485     return BCM_E_NONE;
   6486 }
   6487 
   6488 
   6489 /*    _field_td3_stage_quals_ibus_map_init
   6490  * Purpose:
   6491  *    Initialize Field Ingress Stage Qualifiers to their extractors mapping.
   6492  * Parameters:
   6493  *    unit       - (IN) BCM device number.
   6494  *    stage_fc   - (IN/OUT) Field Processor stage control structure.
   6495  *
   6496  * Returns:
   6497  *    BCM_E_PARAM - Null field stage control structure.
   6498  *    BCM_E_MEMORY - Allocation failure.
   6499  *    BCM_E_INTERNAL - Invalid CAP Stage ID.
   6500  *    BCM_E_NONE - Success.
   6501  */
   6502 int
   6503 _field_td3_stage_quals_ibus_map_init(int unit, _field_stage_t *stage_fc)
   6504 {
   6505     uint32 cancun_ver = 0;
   6506     bcmi_keygen_qual_flags_bmp_t qual_flags;
   6507     bcmi_keygen_qual_cfg_info_db_t *db = NULL;
   6508     BCMI_KEYGEN_QUAL_CFG_DECL;
   6509 
   6510     BCMI_KEYGEN_FUNC_ENTER(unit);
   6511 
   6512     /*
   6513      * L0 BUS extractor sections offset:
   6514      *    - 32bit extractor = 0
   6515      *    - 16bit extractor = 608
   6516      *    - 8bit extractor  = 1120
   6517      *    - 4bit extractor  = 1280
   6518      *    - 2bit extractor  = 1400
   6519      */
   6520 
   6521     /* Input parameters check. */
   6522     if (NULL == stage_fc) {
   6523         return (BCM_E_PARAM);
   6524     }
   6525 
   6526     /* Allocate stage qualifiers extraction mapping array. */
   6527     _FP_XGS3_ALLOC(stage_fc->qual_cfg_info_db,
   6528          sizeof(bcmi_keygen_qual_cfg_info_db_t),
   6529          "IFP qualifiers");
   6530     if (NULL == stage_fc->qual_cfg_info_db) {
   6531         return (BCM_E_MEMORY);
   6532     }
   6533 
   6534     db = stage_fc->qual_cfg_info_db;
   6535     sal_memset(&qual_flags, 0, sizeof(bcmi_keygen_qual_flags_bmp_t));
   6536 
   6537     /* UDF Qualifiers. */
   6538     /*************** 32 BIT Section *************/
   6539     /* UDF_1_CHUNK_1_0 */
   6540     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6541     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 8, 256, 16);
   6542     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, _bcmFieldQualifyData0, qual_flags);
   6543 
   6544     /* UDF_1_CHUNK_1_0 */
   6545     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6546     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 8, 272, 16);
   6547     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, _bcmFieldQualifyData1, qual_flags);
   6548 
   6549     /* UDF_1_CHUNK_3_2 */
   6550     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6551     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 9, 288, 16);
   6552     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, _bcmFieldQualifyData2, qual_flags);
   6553 
   6554     /* UDF_1_CHUNK_3_2 */
   6555     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6556     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 9, 304, 16);
   6557     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, _bcmFieldQualifyData3, qual_flags);
   6558 
   6559     /* UDF_1_CHUNK_5_4 */
   6560     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6561     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 10, 320, 16);
   6562     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, _bcmFieldQualifyData4, qual_flags);
   6563 
   6564     /* UDF_1_CHUNK_5_4 */
   6565     /* Identifier field in IP Header is mapped to CHUNK 4 */
   6566     BCM_IF_ERROR_RETURN(soc_cancun_version_get(unit, &cancun_ver));
   6567     if (SOC_CANCUN_VERSION_DEF_5_2_2 > cancun_ver) {
   6568         BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6569         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 10, 320, 16);
   6570         BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyIpIdentifier, qual_flags);
   6571     }
   6572 
   6573     /* UDF_1_CHUNK_5_4 */
   6574     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6575     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 10, 336, 16);
   6576     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, _bcmFieldQualifyData5, qual_flags);
   6577 
   6578     /* UDF_2_CHUNK_1_0 */
   6579     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6580     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 5, 160, 16);
   6581     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, _bcmFieldQualifyData8, qual_flags);
   6582 
   6583     /* UDF_2_CHUNK_1_0 */
   6584     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6585     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 5, 176, 16);
   6586     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, _bcmFieldQualifyData9, qual_flags);
   6587 
   6588     /* UDF_2_CHUNK_3_2 */
   6589     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6590     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 6, 192, 16);
   6591     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, _bcmFieldQualifyData10, qual_flags);
   6592 
   6593     /* UDF_2_CHUNK_3_2 */
   6594     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6595     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 6, 208, 16);
   6596     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, _bcmFieldQualifyData11, qual_flags);
   6597 
   6598     /* UDF_2_CHUNK_3_2 */
   6599     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6600     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 6, 192, 32);
   6601     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyINTReserved4Bytes, qual_flags);
   6602     /* UDF_2_CHUNK_5_4 */
   6603     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6604     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 7, 224, 16);
   6605     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, _bcmFieldQualifyData12, qual_flags);
   6606 
   6607     /* UDF_2_CHUNK_5_4 */
   6608     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6609     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 7, 240, 16);
   6610     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, _bcmFieldQualifyData13, qual_flags);
   6611 
   6612     /* UDF_2_CHUNK_5_4 */
   6613     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6614     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 7, 224, 32);
   6615     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyINTProbeMarker2, qual_flags);
   6616 
   6617     /*************** 16 BIT Section *************/
   6618     /* UDF_1_CHUNK_6 */
   6619     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6620     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 8, 128, 16);
   6621     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, _bcmFieldQualifyData6, qual_flags);
   6622 
   6623     /* UDF_1_CHUNK_7 */
   6624     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6625     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 9, 144, 16);
   6626     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, _bcmFieldQualifyData7, qual_flags);
   6627     
   6628     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6629     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 9, 144, 16);
   6630     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyLoopbackSubtype, qual_flags);
   6631 
   6632     /* UDF_2_CHUNK_6 */
   6633     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6634     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 6, 96, 16);
   6635     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, _bcmFieldQualifyData14, qual_flags);
   6636 
   6637     /* UDF_2_CHUNK_7 */
   6638     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6639     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 7, 112, 16);
   6640     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, _bcmFieldQualifyData15, qual_flags);
   6641 
   6642     /* UDF_2_CHUNK_6 and UDF_2_CHUNK_7 */
   6643     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6644     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 6, 96, 16);
   6645     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E16, 7, 112, 16);
   6646     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyINTProbeMarker1, qual_flags);
   6647     
   6648     /* OPAQUE_4 */
   6649     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6650     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 45, 720, 16);
   6651     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyOpaqueObject4, qual_flags);
   6652 
   6653     /* OPAQUE_3 */
   6654     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6655     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 44, 704, 16);
   6656     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyOpaqueObject3, qual_flags);
   6657 
   6658     /* OPAQUE_2 */
   6659     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6660     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 43, 688, 16);
   6661     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyOpaqueObject2, qual_flags);
   6662 
   6663     /* OPAQUE_1 */
   6664     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6665     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 42, 672, 16);
   6666     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyOpaqueObject1, qual_flags);
   6667 
   6668     /* Packet Fields */
   6669     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6670     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 25, 400, 16);
   6671     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyOuterVlan, qual_flags);
   6672 
   6673     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6674     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 25, 400, 12);
   6675     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyOuterVlanId, qual_flags);
   6676 
   6677     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6678     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 4, 32, 8);
   6679     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E4, 5, 20, 4);
   6680     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyOuterVlanId, qual_flags);
   6681 
   6682     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6683     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 25, 412, 1);
   6684     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyOuterVlanCfi, qual_flags);
   6685 
   6686     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6687     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 25, 413, 3);
   6688     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyOuterVlanPri, qual_flags);
   6689 
   6690     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6691     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 26, 416, 16);
   6692     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInnerVlan, qual_flags);
   6693 
   6694     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6695     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 26, 416, 12);
   6696     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInnerVlanId, qual_flags);
   6697 
   6698     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6699     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 3, 24, 8);
   6700     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E4, 4, 16, 4);
   6701     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInnerVlanId, qual_flags);
   6702 
   6703     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6704     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 26, 428, 1);
   6705     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInnerVlanCfi, qual_flags);
   6706 
   6707     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6708     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 26, 429, 3);
   6709     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInnerVlanPri, qual_flags);
   6710 
   6711     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6712     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 2, 64, 32);
   6713     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E16, 30, 480, 16);
   6714     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcMac, qual_flags);
   6715 
   6716     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6717     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 3, 96, 32);
   6718     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E16, 31, 496, 16);
   6719     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstMac, qual_flags);
   6720 
   6721     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6722     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 11, 352, 32);
   6723     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcIp, qual_flags);
   6724 
   6725     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6726     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 15, 480, 32);
   6727     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstIp, qual_flags);
   6728 
   6729     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6730     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 11, 352, 32);
   6731     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E32, 12, 384, 32);
   6732     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(2, BCMI_KEYGEN_EXT_SECTION_L1E32, 13, 416, 32);
   6733     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(3, BCMI_KEYGEN_EXT_SECTION_L1E32, 14, 448, 32);
   6734     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcIp6, qual_flags);
   6735 
   6736     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6737     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 11, 352, 32);
   6738     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E32, 12, 384, 32);
   6739     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcIp6Low, qual_flags);
   6740 
   6741     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6742     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 13, 416, 32);
   6743     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E32, 14, 448, 32);
   6744     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcIp6High, qual_flags);
   6745 
   6746     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6747     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 15, 480, 32);
   6748     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E32, 16, 512, 32);
   6749     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(2, BCMI_KEYGEN_EXT_SECTION_L1E32, 17, 544, 32);
   6750     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(3, BCMI_KEYGEN_EXT_SECTION_L1E32, 18, 576, 32);
   6751     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstIp6, qual_flags);
   6752 
   6753     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6754     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 15, 480, 32);
   6755     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E32, 16, 512, 32);
   6756     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstIp6Low, qual_flags);
   6757 
   6758     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6759     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 17, 544, 32);
   6760     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E32, 18, 576, 32);
   6761     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstIp6High, qual_flags);
   6762 
   6763     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6764     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 29, 464, 16);
   6765     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyEtherType, qual_flags);
   6766 
   6767     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6768     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 28, 448, 16);
   6769     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyL4SrcPort, qual_flags);
   6770 
   6771     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6772     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 28, 448, 16);
   6773     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db,
   6774             bcmFieldQualifyIcmpTypeCode, qual_flags);
   6775 
   6776     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6777     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 27, 432, 16);
   6778     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyL4DstPort, qual_flags);
   6779 
   6780     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6781     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 4, 128, 32);
   6782     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyISid, qual_flags);
   6783 
   6784     /* L1E4, 15 for Lookup status vector 5 */
   6785     /* L1E4, 16 for FLOW_1_HDR_VALID_CHK_RES_FOR_KEYGEN */
   6786     /* L1E4, 17 for FLOW_2_HDR_VALID_CHK_RES_FOR_KEYGEN */
   6787     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6788     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 4, 128, 24);
   6789     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyL2GreVsid, qual_flags);
   6790     
   6791     /* INGRESS_FIELD_BUS_CONTAINER_A 32-bit Mux */
   6792     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6793     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 0, 16, 12);
   6794     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_B, 11);
   6795     BCMI_KEYGEN_QUAL_CFG_SEC_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_ING_FBUS_CONT, _bcmFieldIngFieldBusContOuterVlan);
   6796     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyIncomingOuterVlanId, qual_flags);
   6797 
   6798     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6799     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 1, 48, 12);
   6800     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 11);
   6801     BCMI_KEYGEN_QUAL_CFG_SEC_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_ING_FBUS_CONT, _bcmFieldIngFieldBusContOuterVlan);
   6802     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyIncomingOuterVlanId, qual_flags);
   6803     /* INGRESS_FIELD_BUS_CONTAINER_B 32-bit Mux */
   6804     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6805     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 0, 16, 12);
   6806     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_B, 12);
   6807     BCMI_KEYGEN_QUAL_CFG_SEC_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_ING_FBUS_CONT, _bcmFieldIngFieldBusContOuterVlan);
   6808     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyIncomingOuterVlanId, qual_flags);
   6809 
   6810     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6811     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 1, 48, 12);
   6812     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 12);
   6813     BCMI_KEYGEN_QUAL_CFG_SEC_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_ING_FBUS_CONT, _bcmFieldIngFieldBusContOuterVlan);
   6814     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyIncomingOuterVlanId, qual_flags);
   6815     /* INGRESS_FIELD_BUS_CONTAINER_C 32-bit Mux */
   6816     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6817     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 0, 16, 12);
   6818     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_B, 13);
   6819     BCMI_KEYGEN_QUAL_CFG_SEC_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_ING_FBUS_CONT, _bcmFieldIngFieldBusContOuterVlan);
   6820     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyIncomingOuterVlanId, qual_flags);
   6821 
   6822     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6823     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 1, 48, 12);
   6824     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 13);
   6825     BCMI_KEYGEN_QUAL_CFG_SEC_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_ING_FBUS_CONT, _bcmFieldIngFieldBusContOuterVlan);
   6826     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyIncomingOuterVlanId, qual_flags);
   6827     /* INGRESS_FIELD_BUS_CONTAINER_D 32-bit Mux */
   6828     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6829     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 0, 16, 12);
   6830     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_B, 14);
   6831     BCMI_KEYGEN_QUAL_CFG_SEC_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_ING_FBUS_CONT, _bcmFieldIngFieldBusContOuterVlan);
   6832     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyIncomingOuterVlanId, qual_flags);
   6833 
   6834     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6835     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 1, 48, 12);
   6836     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 14);
   6837     BCMI_KEYGEN_QUAL_CFG_SEC_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_ING_FBUS_CONT, _bcmFieldIngFieldBusContOuterVlan);
   6838     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyIncomingOuterVlanId, qual_flags);
   6839 
   6840     /* INGRESS_FIELD_BUS_CONTAINER_A 16-bit Mux */
   6841     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6842     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 3, 48, 12);
   6843     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_B, 11);
   6844     BCMI_KEYGEN_QUAL_CFG_SEC_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_ING_FBUS_CONT, _bcmFieldIngFieldBusContOuterVlan);
   6845     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyIncomingOuterVlanId, qual_flags);
   6846 
   6847     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6848     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 5, 80, 12);
   6849     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 11);
   6850     BCMI_KEYGEN_QUAL_CFG_SEC_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_ING_FBUS_CONT, _bcmFieldIngFieldBusContOuterVlan);
   6851     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyIncomingOuterVlanId, qual_flags);
   6852 
   6853     /* INGRESS_FIELD_BUS_CONTAINER_B 16-bit Mux */
   6854     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6855     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 3, 48, 12);
   6856     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_B, 12);
   6857     BCMI_KEYGEN_QUAL_CFG_SEC_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_ING_FBUS_CONT, _bcmFieldIngFieldBusContOuterVlan);
   6858     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyIncomingOuterVlanId, qual_flags);
   6859 
   6860     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6861     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 5, 80, 12);
   6862     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 12);
   6863     BCMI_KEYGEN_QUAL_CFG_SEC_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_ING_FBUS_CONT, _bcmFieldIngFieldBusContOuterVlan);
   6864     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyIncomingOuterVlanId, qual_flags);
   6865 
   6866     /* INGRESS_FIELD_BUS_CONTAINER_C 16-bit Mux */
   6867     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6868     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 3, 48, 12);
   6869     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_B, 13);
   6870     BCMI_KEYGEN_QUAL_CFG_SEC_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_ING_FBUS_CONT, _bcmFieldIngFieldBusContOuterVlan);
   6871     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyIncomingOuterVlanId, qual_flags);
   6872 
   6873     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6874     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 5, 80, 12);
   6875     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 13);
   6876     BCMI_KEYGEN_QUAL_CFG_SEC_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_ING_FBUS_CONT, _bcmFieldIngFieldBusContOuterVlan);
   6877     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyIncomingOuterVlanId, qual_flags);
   6878 
   6879     /* INGRESS_FIELD_BUS_CONTAINER_D 16-bit Mux */
   6880     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6881     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 3, 48, 12);
   6882     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_B, 14);
   6883     BCMI_KEYGEN_QUAL_CFG_SEC_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_ING_FBUS_CONT, _bcmFieldIngFieldBusContOuterVlan);
   6884     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyIncomingOuterVlanId, qual_flags);
   6885 
   6886     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6887     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 5, 80, 12);
   6888     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 14);
   6889     BCMI_KEYGEN_QUAL_CFG_SEC_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_ING_FBUS_CONT, _bcmFieldIngFieldBusContOuterVlan);
   6890     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyIncomingOuterVlanId, qual_flags);
   6891 
   6892     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6893     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 0, 0, 24);
   6894     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_B, 7);
   6895     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyVxlanNetworkId, qual_flags);
   6896 
   6897     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6898     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 1, 32, 24);
   6899     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 7);
   6900     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyVxlanNetworkId, qual_flags);
   6901 
   6902     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6903     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 4, 128, 24);
   6904     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyVxlanNetworkId, qual_flags);
   6905 
   6906     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6907     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 2, 32, 16);
   6908     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E16, 3, 48, 8);
   6909     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_B, 7);
   6910     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyVxlanNetworkId, qual_flags);
   6911 
   6912     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6913     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 4, 64, 16);
   6914     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E16, 5, 80, 8);
   6915     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 7);
   6916     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyVxlanNetworkId, qual_flags);
   6917 
   6918     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6919     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 0, 24, 8);
   6920     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_B, 7);
   6921     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyVxlanFlags, qual_flags);
   6922 
   6923     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6924     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 1, 56, 8);
   6925     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 7);
   6926     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyVxlanFlags, qual_flags);
   6927 
   6928     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6929     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 4, 152, 8);
   6930     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyVxlanFlags, qual_flags);
   6931 
   6932     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6933     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 3, 56, 8);
   6934     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_B, 7);
   6935     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyVxlanFlags, qual_flags);
   6936 
   6937     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6938     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 5, 88, 8);
   6939     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 7);
   6940     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyVxlanFlags, qual_flags);
   6941 
   6942     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6943     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 0, 0, 24);
   6944     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_B, 8);
   6945     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyVxlanHeaderBits8_31, qual_flags);
   6946 
   6947     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6948     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 1, 32, 24);
   6949     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 8);
   6950     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyVxlanHeaderBits8_31, qual_flags);
   6951 
   6952     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6953     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 2, 32, 16);
   6954     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E16, 3, 48, 8);
   6955     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_B, 8);
   6956     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyVxlanHeaderBits8_31, qual_flags);
   6957 
   6958     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6959     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 4, 64, 16);
   6960     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E16, 5, 80, 8);
   6961     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 8);
   6962     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyVxlanHeaderBits8_31, qual_flags);
   6963 
   6964     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6965     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 0, 24, 8);
   6966     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_B, 8);
   6967     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyVxlanHeaderBits56_63, qual_flags);
   6968 
   6969     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6970     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 1, 56, 8);
   6971     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 8);
   6972     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyVxlanHeaderBits56_63, qual_flags);
   6973 
   6974     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6975     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 3, 56, 8);
   6976     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_B, 8);
   6977     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyVxlanHeaderBits56_63, qual_flags);
   6978 
   6979     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6980     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 5, 88, 8);
   6981     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 8);
   6982     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyVxlanHeaderBits56_63, qual_flags);
   6983 
   6984     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6985     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 0, 0, 32);
   6986     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_B, 0);
   6987     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyETag, qual_flags);
   6988 
   6989     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6990     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 1, 32, 32);
   6991     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 0);
   6992     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyETag, qual_flags);
   6993 
   6994     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   6995     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 2, 32, 16);
   6996     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E16, 3, 48, 16);
   6997     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_B, 0);
   6998     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyETag, qual_flags);
   6999 
   7000     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7001     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 4, 64, 16);
   7002     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E16, 5, 80, 16);
   7003     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 0);
   7004     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyETag, qual_flags);
   7005 
   7006     if (soc_feature(unit, soc_feature_niv)) {
   7007         BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7008         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 0, 0, 32);
   7009         BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_B, 0);
   7010         BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyVnTag, qual_flags);
   7011 
   7012         BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7013         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 1, 32, 32);
   7014         BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 0);
   7015         BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyVnTag, qual_flags);
   7016 
   7017         BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7018         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 2, 32, 16);
   7019         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E16, 3, 48, 16);
   7020         BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_B, 0);
   7021         BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyVnTag, qual_flags);
   7022 
   7023         BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7024         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 4, 64, 16);
   7025         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E16, 5, 80, 16);
   7026         BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 0);
   7027         BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyVnTag, qual_flags);
   7028     }
   7029 
   7030     if (soc_feature(unit, soc_feature_CnTag)) {
   7031         BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7032         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 0, 0, 32);
   7033         BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_B, 1);
   7034         BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyCnTag, qual_flags);
   7035 
   7036         BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7037         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 1, 32, 32);
   7038         BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 1);
   7039         BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyCnTag, qual_flags);
   7040 
   7041         BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7042         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 2, 32, 16);
   7043         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E16, 3, 48, 16);
   7044         BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_B, 1);
   7045         BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyCnTag, qual_flags);
   7046 
   7047         BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7048         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 4, 64, 16);
   7049         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E16, 5, 80, 16);
   7050         BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 1);
   7051         BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyCnTag, qual_flags);
   7052     }
   7053 
   7054     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7055     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 0, 0, 32);
   7056     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_B, 2);
   7057     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyFabricQueueTag, qual_flags);
   7058 
   7059     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7060     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 1, 32, 32);
   7061     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 2);
   7062     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyFabricQueueTag, qual_flags);
   7063 
   7064     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7065     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 2, 32, 16);
   7066     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E16, 3, 48, 16);
   7067     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_B, 2);
   7068     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyFabricQueueTag, qual_flags);
   7069 
   7070     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7071     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 4, 64, 16);
   7072     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E16, 5, 80, 16);
   7073     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 2);
   7074     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyFabricQueueTag, qual_flags);
   7075 
   7076     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7077     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 0, 0, 32);
   7078     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_B, 3);
   7079     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyMplsForwardingLabel, qual_flags);
   7080 
   7081     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7082     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 1, 32, 32);
   7083     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 3);
   7084     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyMplsForwardingLabel, qual_flags);
   7085 
   7086     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7087     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 2, 32, 16);
   7088     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E16, 3, 48, 16);
   7089     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_B, 3);
   7090     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyMplsForwardingLabel, qual_flags);
   7091 
   7092     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7093     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 4, 64, 16);
   7094     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E16, 5, 80, 16);
   7095     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 3);
   7096     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyMplsForwardingLabel, qual_flags);
   7097 
   7098     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7099     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 0, 12, 20);
   7100     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_B, 3);
   7101     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyMplsForwardingLabelId, qual_flags);
   7102 
   7103     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7104     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 1, 44, 20);
   7105     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 3);
   7106     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyMplsForwardingLabelId, qual_flags);
   7107 
   7108     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7109     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 2, 44, 4);
   7110     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E16, 3, 48, 16);
   7111     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_B, 3);
   7112     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyMplsForwardingLabelId, qual_flags);
   7113 
   7114     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7115     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 4, 76, 4);
   7116     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E16, 5, 80, 16);
   7117     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 3);
   7118     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyMplsForwardingLabelId, qual_flags);
   7119 
   7120     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7121     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 0, 0, 8);
   7122     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_B, 3);
   7123     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyMplsForwardingLabelTtl, qual_flags);
   7124 
   7125     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7126     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 1, 32, 8);
   7127     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 3);
   7128     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyMplsForwardingLabelTtl, qual_flags);
   7129 
   7130     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7131     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 2, 32, 8);
   7132     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 3);
   7133     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyMplsForwardingLabelTtl, qual_flags);
   7134 
   7135     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7136     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 4, 64, 8);
   7137     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 3);
   7138     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyMplsForwardingLabelTtl, qual_flags);
   7139 
   7140     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7141     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 0, 9, 3);
   7142     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_B, 3);
   7143     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyMplsForwardingLabelExp, qual_flags);
   7144 
   7145     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7146     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 1, 41, 3);
   7147     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 3);
   7148     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyMplsForwardingLabelExp, qual_flags);
   7149 
   7150     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7151     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 2, 41, 3);
   7152     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_B, 3);
   7153     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyMplsForwardingLabelExp, qual_flags);
   7154 
   7155     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7156     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 4, 73, 3);
   7157     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 3);
   7158     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyMplsForwardingLabelExp, qual_flags);
   7159 
   7160     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7161     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 0, 8, 1);
   7162     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_B, 3);
   7163     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyMplsForwardingLabelBos, qual_flags);
   7164 
   7165     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7166     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 1, 40, 1);
   7167     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 3);
   7168     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyMplsForwardingLabelBos, qual_flags);
   7169 
   7170     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7171     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 2, 40, 1);
   7172     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_B, 3);
   7173     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyMplsForwardingLabelBos, qual_flags);
   7174 
   7175     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7176     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 4, 72, 1);
   7177     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 3);
   7178     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyMplsForwardingLabelBos, qual_flags);
   7179 
   7180     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7181     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 0, 0, 32);
   7182     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_B, 4);
   7183     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyMplsControlWord, qual_flags);
   7184 
   7185     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7186     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 1, 32, 32);
   7187     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 4);
   7188     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyMplsControlWord, qual_flags);
   7189 
   7190     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7191     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 2, 32, 16);
   7192     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E16, 3, 48, 16);
   7193     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_B, 4);
   7194     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyMplsControlWord, qual_flags);
   7195 
   7196     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7197     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 4, 64, 16);
   7198     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E16, 5, 80, 16);
   7199     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 4);
   7200     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyMplsControlWord, qual_flags);
   7201 
   7202     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7203     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 0, 0, 20);
   7204     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_B, 9);
   7205     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyIp6FlowLabel, qual_flags);
   7206 
   7207     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7208     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 1, 32, 20);
   7209     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 9);
   7210     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyIp6FlowLabel, qual_flags);
   7211 
   7212     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7213     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 2, 32, 16);
   7214     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E16, 3, 48, 4);
   7215     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_B, 9);
   7216     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyIp6FlowLabel, qual_flags);
   7217 
   7218     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7219     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 4, 64, 16);
   7220     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E16, 5, 80, 4);
   7221     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 9);
   7222     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyIp6FlowLabel, qual_flags);
   7223 
   7224     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7225     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 12, 96, 8);
   7226     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_TTL_FN, 2);
   7227     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyTtl, qual_flags);
   7228 
   7229     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7230     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 11, 88, 8);
   7231     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_TOS_FN, 2);
   7232     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyTos, qual_flags);
   7233 
   7234     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7235     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 13, 104, 8);
   7236     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyIpProtocol, qual_flags);
   7237 
   7238     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7239     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 2, 8, 4);
   7240     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E4, 3, 12, 4);
   7241     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_TCP_FN, 2);
   7242     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyTcpControl, qual_flags);
   7243 
   7244     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7245     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 27, 432, 16);
   7246     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyFcoeRxID, qual_flags);
   7247 
   7248     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7249     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 28, 448, 16);
   7250     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyFcoeOxID, qual_flags);
   7251 
   7252     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7253     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 16, 256, 5);
   7254     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, _bcmFieldQualifyExactMatchGroupClassIdLookup0, qual_flags);
   7255 
   7256     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7257     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 16, 264, 5);
   7258     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, _bcmFieldQualifyExactMatchGroupClassIdLookup1, qual_flags);
   7259 
   7260     /* For stage ingress, the extractors are fixed for ltid and
   7261      * ltid init for ingress is done along with pmux init
   7262      */
   7263 
   7264     if (soc_feature(unit, soc_feature_fp_ltid_match_all_parts) &&
   7265         (stage_fc->stage_id == _BCM_FIELD_STAGE_INGRESS)) {
   7266         BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7267         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 5, 40, 5);
   7268         BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_LTID, 1);
   7269         BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, _bcmFieldQualifyPreLogicalTableId1, qual_flags);
   7270 
   7271         BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7272         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 5, 40, 5);
   7273         BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_LTID, 2);
   7274         BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, _bcmFieldQualifyPreLogicalTableId2, qual_flags);
   7275     }
   7276 
   7277     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7278     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 15, 120, 8);
   7279     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyExtensionHeaderType, qual_flags);
   7280 
   7281     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7282     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 14, 112, 8);
   7283     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyExtensionHeader2Type, qual_flags);
   7284 
   7285     if (SOC_IS_HELIX5(unit)) {
   7286         /* RANGE_CHECK_MASK_RESULT */
   7287         BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7288         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 26, 208, 8);
   7289         BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyRangeCheckGroup, qual_flags);
   7290     }
   7291 
   7292     SHR_BITSET(qual_flags.w, BCMI_KEYGEN_QUAL_FLAGS_NOT_IN_EM);
   7293     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7294     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 31, 124, 4);
   7295     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyMHOpcode, qual_flags);
   7296     SHR_BITCLR(qual_flags.w, BCMI_KEYGEN_QUAL_FLAGS_NOT_IN_EM);
   7297 
   7298     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7299     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E2, 15, 30, 2);
   7300     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyIpFlags, qual_flags);
   7301 
   7302     /*Packet Types*/
   7303     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7304     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E2, 17, 35, 1);
   7305     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyHiGig, qual_flags);
   7306 
   7307     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7308     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E2, 5, 11, 1);
   7309     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyHiGigProxy, qual_flags);
   7310 
   7311     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7312     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E2, 5, 10, 1);
   7313     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyCpuVisibilityPacket, qual_flags);
   7314 
   7315     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7316     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 13, 54, 1);
   7317     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDosAttack, qual_flags);
   7318 
   7319     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7320     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 0, 1, 1);
   7321     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_D, 0);
   7322     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyL4Ports, qual_flags);
   7323 
   7324     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7325     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 1, 17, 1);
   7326     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_C, 0);
   7327     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyL4Ports, qual_flags);
   7328 
   7329     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7330     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E2, 6, 13, 1);
   7331     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyL4Ports, qual_flags);
   7332 
   7333     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7334     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E2, 17, 34, 1);
   7335     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyMirrorCopy, qual_flags);
   7336 
   7337     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7338     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E2, 16, 32, 2);
   7339     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyIpFrag, qual_flags);
   7340 
   7341     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7342     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E2, 0, 0, 2);
   7343     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyNatSrcRealmId, qual_flags);
   7344 
   7345     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7346     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E2, 6, 12, 1);
   7347     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyIpFragNonOrFirst, qual_flags);
   7348 
   7349     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7350     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 1, 16, 1);
   7351     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_C, 0);
   7352     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyIpFragNonOrFirst, qual_flags);
   7353 
   7354     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7355     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 0, 0, 1);
   7356     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_D, 0);
   7357     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyIpFragNonOrFirst, qual_flags);
   7358 
   7359     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7360     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E2, 4, 8, 1);
   7361     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyIcmpError, qual_flags);
   7362 
   7363 #if 0
   7364     /*removed from td3 reg file */
   7365     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7366     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E2, 4, 9, 1);
   7367     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyRepCopy, qual_flags);
   7368 #endif
   7369 
   7370     /*Table HIT/Lookup Status bits*/
   7371     SHR_BITSET(qual_flags.w, BCMI_KEYGEN_QUAL_FLAGS_NOT_IN_EM);
   7372     /* not supported for EM */
   7373     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7374     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 11, 46, 1);
   7375     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyL2SrcHit, qual_flags);
   7376 
   7377     /* not supported for EM */
   7378     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7379     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 12, 48, 1);
   7380     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyL2DestHit, qual_flags);
   7381 
   7382     /* not supported for EM */
   7383     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7384     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 12, 50, 1);
   7385     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyL3SrcHostHit, qual_flags);
   7386 
   7387     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7388     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 12, 50, 1);
   7389     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyIpmcStarGroupHit, qual_flags);
   7390 
   7391     /* not supported for EM */
   7392     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7393     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 12, 51, 1);
   7394     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyL3DestHostHit, qual_flags);
   7395 
   7396     /* not supported for EM */
   7397     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7398     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 13, 52, 1);
   7399     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyL3SrcRouteHit, qual_flags);
   7400 
   7401     /* not supported for EM */
   7402     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7403     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 13, 53, 1);
   7404     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyL2StationMove, qual_flags);
   7405 
   7406     /* not supported for EM */
   7407     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7408     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 12, 49, 1);
   7409     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyL2CacheHit, qual_flags);
   7410 
   7411     /* not supported for EM */
   7412     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7413     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 11, 47, 1);
   7414     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyL2SrcStatic, qual_flags);
   7415 
   7416     SHR_BITCLR(qual_flags.w, BCMI_KEYGEN_QUAL_FLAGS_NOT_IN_EM);
   7417 
   7418     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7419     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 13, 55, 1);
   7420     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyIpTunnelHit, qual_flags);
   7421 
   7422     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7423     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 10, 40, 3);
   7424     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyVlanTranslationHit, qual_flags);
   7425 
   7426     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7427     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 14, 56, 1);
   7428     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyMplsLabel1Hit, qual_flags);
   7429 
   7430     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7431     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 14, 56, 1);
   7432     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyTrillEgressRbridgeHit, qual_flags);
   7433 
   7434     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7435     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 14, 56, 1);
   7436     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyL2GreSrcIpHit, qual_flags);
   7437 
   7438     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7439     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 14, 56, 1);
   7440     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyMimSrcGportHit, qual_flags);
   7441 
   7442     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7443     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 14, 57, 1);
   7444     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyMplsLabel2Hit, qual_flags);
   7445 
   7446     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7447     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 14, 57, 1);
   7448     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyTrillIngressRbridgeHit, qual_flags);
   7449 
   7450     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7451     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 14, 57, 1);
   7452     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyL2GreVfiHit, qual_flags);
   7453 
   7454     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7455     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 14, 57, 1);
   7456     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyMimVfiHit, qual_flags);
   7457 
   7458     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7459     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E2, 7, 14, 2);
   7460     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyIntCongestionNotification, qual_flags);
   7461 
   7462     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7463     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E2, 14, 29, 1);
   7464     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyMyStationHit, qual_flags);
   7465 
   7466     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7467     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 14, 58, 1);
   7468     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyMplsTerminated, qual_flags);
   7469 
   7470     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7471     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E2, 13, 27, 1);
   7472     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstIpLocal, qual_flags);
   7473 
   7474     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7475     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E2, 14, 28, 1);
   7476     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyL3Routable, qual_flags);
   7477 
   7478     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7479     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 0, 0, 16);
   7480     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_D, 3);
   7481     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyRtag7AHashUpper, qual_flags);
   7482 
   7483     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7484     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 1, 16, 16);
   7485     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_C, 3);
   7486     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyRtag7AHashUpper, qual_flags);
   7487 
   7488     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7489     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 3, 48, 16);
   7490     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_B, 5);
   7491     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyRtag7AHashUpper, qual_flags);
   7492 
   7493     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7494     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 5, 80, 16);
   7495     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 5);
   7496     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyRtag7AHashUpper, qual_flags);
   7497 
   7498     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7499     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 0, 16, 16);
   7500     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_B, 5);
   7501     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyRtag7AHashUpper, qual_flags);
   7502 
   7503     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7504     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 1, 48, 16);
   7505     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 5);
   7506     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyRtag7AHashUpper, qual_flags);
   7507 
   7508     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7509     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 0, 0, 16);
   7510     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_D, 5);
   7511     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyRtag7BHashUpper, qual_flags);
   7512 
   7513     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7514     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 1, 16, 16);
   7515     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_C, 5);
   7516     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyRtag7BHashUpper, qual_flags);
   7517 
   7518     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7519     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 3, 48, 16);
   7520     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_B, 6);
   7521     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyRtag7BHashUpper, qual_flags);
   7522 
   7523     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7524     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 5, 80, 16);
   7525     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 6);
   7526     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyRtag7BHashUpper, qual_flags);
   7527 
   7528     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7529     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 0, 16, 16);
   7530     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_B, 6);
   7531     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyRtag7BHashUpper, qual_flags);
   7532 
   7533     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7534     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 1, 48, 16);
   7535     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 6);
   7536     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyRtag7BHashUpper, qual_flags);
   7537 
   7538     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7539     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 0, 0, 16);
   7540     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_D, 4);
   7541     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyRtag7AHashLower, qual_flags);
   7542 
   7543     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7544     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 1, 16, 16);
   7545     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_C, 4);
   7546     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyRtag7AHashLower, qual_flags);
   7547 
   7548     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7549     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 2, 32, 16);
   7550     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_B, 5);
   7551     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyRtag7AHashLower, qual_flags);
   7552 
   7553     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7554     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 4, 64, 16);
   7555     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 5);
   7556     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyRtag7AHashLower, qual_flags);
   7557 
   7558     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7559     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 0, 0, 16);
   7560     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_B, 5);
   7561     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyRtag7AHashLower, qual_flags);
   7562 
   7563     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7564     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 1, 32, 16);
   7565     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 5);
   7566     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyRtag7AHashLower, qual_flags);
   7567 
   7568     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7569     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 0, 0, 16);
   7570     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_D, 6);
   7571     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyRtag7BHashLower, qual_flags);
   7572 
   7573     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7574     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 1, 16, 16);
   7575     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_C, 6);
   7576     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyRtag7BHashLower, qual_flags);
   7577 
   7578     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7579     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 2, 32, 16);
   7580     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_B, 6);
   7581     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyRtag7BHashLower, qual_flags);
   7582 
   7583     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7584     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 4, 64, 16);
   7585     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 6);
   7586     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyRtag7BHashLower, qual_flags);
   7587 
   7588     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7589     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 0, 0, 16);
   7590     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_B, 6);
   7591     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyRtag7BHashLower, qual_flags);
   7592 
   7593     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7594     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 1, 32, 16);
   7595     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 6);
   7596     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyRtag7BHashLower, qual_flags);
   7597 
   7598     /*Class Ids from different Tables*/
   7599 
   7600     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7601     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 15, 240, 12);
   7602     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_A, 0);
   7603     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassPort, qual_flags);
   7604 
   7605     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7606     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 14, 224, 12);
   7607     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_B, 0);
   7608     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassPort, qual_flags);
   7609 
   7610     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7611     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 9, 72, 8);
   7612     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_A, 0);
   7613     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassPort, qual_flags);
   7614 
   7615     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7616     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 8, 64, 8);
   7617     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_B, 0);
   7618     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassPort, qual_flags);
   7619 
   7620     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7621     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 9, 36, 4);
   7622     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_A, 0);
   7623     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassPort, qual_flags);
   7624 
   7625     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7626     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 8, 32, 4);
   7627     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_B, 0);
   7628     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassPort, qual_flags);
   7629 
   7630     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7631     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 15, 240, 12);
   7632     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_A, 1);
   7633     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassL3, qual_flags);
   7634 
   7635     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7636     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 14, 224, 12);
   7637     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_B, 1);
   7638     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassL3, qual_flags);
   7639 
   7640     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7641     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 9, 72, 8);
   7642     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_A, 1);
   7643     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassL3, qual_flags);
   7644 
   7645     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7646     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 8, 64, 8);
   7647     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_B, 1);
   7648     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassL3, qual_flags);
   7649 
   7650     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7651     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 9, 36, 4);
   7652     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_A, 1);
   7653     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassL3, qual_flags);
   7654 
   7655     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7656     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 8, 32, 4);
   7657     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_B, 1);
   7658     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassL3, qual_flags);
   7659 
   7660     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7661     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 15, 240, 12);
   7662     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_A, 2);
   7663     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassVPort, qual_flags);
   7664 
   7665     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7666     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 14, 224, 12);
   7667     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_B, 2);
   7668     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassVPort, qual_flags);
   7669 
   7670     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7671     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 9, 72, 8);
   7672     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_A, 2);
   7673     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassVPort, qual_flags);
   7674 
   7675     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7676     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 8, 64, 8);
   7677     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_B, 2);
   7678     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassVPort, qual_flags);
   7679 
   7680     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7681     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 9, 36, 4);
   7682     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_A, 2);
   7683     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassVPort, qual_flags);
   7684 
   7685     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7686     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 8, 32, 4);
   7687     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_B, 2);
   7688     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassVPort, qual_flags);
   7689 
   7690     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7691     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 15, 240, 12);
   7692     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_A, 3);
   7693     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassL2, qual_flags);
   7694 
   7695     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7696     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 14, 224, 12);
   7697     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_B, 3);
   7698     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassL2, qual_flags);
   7699 
   7700     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7701     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 9, 72, 8);
   7702     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_A, 3);
   7703     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassL2, qual_flags);
   7704 
   7705     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7706     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 8, 64, 8);
   7707     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_B, 3);
   7708     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassL2, qual_flags);
   7709 
   7710     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7711     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 9, 36, 4);
   7712     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_A, 3);
   7713     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassL2, qual_flags);
   7714 
   7715     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7716     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 8, 32, 4);
   7717     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_B, 3);
   7718     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassL2, qual_flags);
   7719 
   7720     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7721     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 15, 240, 10);
   7722     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_A, 4);
   7723     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstClassField, qual_flags);
   7724 
   7725     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7726     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 14, 224, 10);
   7727     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_B, 4);
   7728     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstClassField, qual_flags);
   7729 
   7730     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7731     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 13, 208, 8);
   7732     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_C, 4);
   7733     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstClassField, qual_flags);
   7734 
   7735     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7736     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 12, 192, 8);
   7737     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_D, 4);
   7738     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstClassField, qual_flags);
   7739 
   7740     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7741     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 9, 72, 8);
   7742     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_A, 4);
   7743     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstClassField, qual_flags);
   7744 
   7745     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7746     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 8, 64, 8);
   7747     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_B, 4);
   7748     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstClassField, qual_flags);
   7749 
   7750     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7751     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 7, 56, 8);
   7752     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_C, 4);
   7753     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstClassField, qual_flags);
   7754 
   7755     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7756     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 6, 48, 8);
   7757     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_D, 4);
   7758     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstClassField, qual_flags);
   7759 
   7760     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7761     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 9, 36, 4);
   7762     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_A, 4);
   7763     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstClassField, qual_flags);
   7764 
   7765     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7766     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 8, 32, 4);
   7767     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_B, 4);
   7768     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstClassField, qual_flags);
   7769 
   7770     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7771     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 7, 28, 4);
   7772     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_C, 4);
   7773     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstClassField, qual_flags);
   7774 
   7775     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7776     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 6, 24, 4);
   7777     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_D, 4);
   7778     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstClassField, qual_flags);
   7779 
   7780     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7781     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 15, 240, 10);
   7782     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_A, 5);
   7783     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcClassField, qual_flags);
   7784 
   7785     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7786     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 14, 224, 10);
   7787     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_B, 5);
   7788     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcClassField, qual_flags);
   7789 
   7790     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7791     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 13, 216, 8);
   7792     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_C, 4);
   7793     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcClassField, qual_flags);
   7794 
   7795     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7796     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 12, 200, 8);
   7797     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_D, 4);
   7798     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcClassField, qual_flags);
   7799 
   7800     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7801     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 9, 72, 8);
   7802     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_A, 5);
   7803     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcClassField, qual_flags);
   7804 
   7805     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7806     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 8, 64, 8);
   7807     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_B, 5);
   7808     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcClassField, qual_flags);
   7809 
   7810     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7811     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 9, 36, 4);
   7812     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_A, 5);
   7813     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcClassField, qual_flags);
   7814 
   7815     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7816     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 8, 32, 4);
   7817     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_B, 5);
   7818     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcClassField, qual_flags);
   7819 
   7820     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7821     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 15, 248, 8);
   7822     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_A, 6);
   7823     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceLookupClassPort, qual_flags);
   7824 
   7825     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7826     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 14, 232, 8);
   7827     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_B, 6);
   7828     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceLookupClassPort, qual_flags);
   7829 
   7830     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7831     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 15, 240, 8);
   7832     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_A, 6);
   7833     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceIngressKeySelectClassPort, qual_flags);
   7834 
   7835     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7836     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 14, 224, 8);
   7837     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_B, 6);
   7838     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceIngressKeySelectClassPort, qual_flags);
   7839 
   7840     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7841     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 9, 72, 8);
   7842     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_A, 6);
   7843     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceIngressKeySelectClassPort, qual_flags);
   7844 
   7845     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7846     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 8, 64, 8);
   7847     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_B, 6);
   7848     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceIngressKeySelectClassPort, qual_flags);
   7849 
   7850     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7851     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 9, 36, 4);
   7852     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_A, 6);
   7853     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceIngressKeySelectClassPort, qual_flags);
   7854 
   7855     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7856     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 8, 32, 4);
   7857     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_B, 6);
   7858     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceIngressKeySelectClassPort, qual_flags);
   7859 
   7860     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7861     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 15, 240, 8);
   7862     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_A, 7);
   7863     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyUdfClass, qual_flags);
   7864 
   7865     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7866     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 14, 224, 8);
   7867     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_B, 7);
   7868     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyUdfClass, qual_flags);
   7869 
   7870     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7871     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 9, 72, 8);
   7872     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_A, 7);
   7873     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyUdfClass, qual_flags);
   7874 
   7875     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7876     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 8, 64, 8);
   7877     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_B, 7);
   7878     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyUdfClass, qual_flags);
   7879 
   7880     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7881     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 9, 36, 4);
   7882     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_A, 7);
   7883     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyUdfClass, qual_flags);
   7884 
   7885     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7886     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 8, 32, 4);
   7887     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_B, 7);
   7888     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyUdfClass, qual_flags);
   7889 
   7890     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7891     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 13, 208, 10);
   7892     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_C, 0);
   7893     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcClassL2, qual_flags);
   7894 
   7895     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7896     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 12, 192, 10);
   7897     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_D, 0);
   7898     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcClassL2, qual_flags);
   7899 
   7900     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7901     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 13, 216, 8);
   7902     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_C, 5);
   7903     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcClassL2, qual_flags);
   7904 
   7905     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7906     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 12, 200, 8);
   7907     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_D, 5);
   7908     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcClassL2, qual_flags);
   7909 
   7910     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7911     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 7, 56, 8);
   7912     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_C, 0);
   7913     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcClassL2, qual_flags);
   7914 
   7915     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7916     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 6, 48, 8);
   7917     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_D, 0);
   7918     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcClassL2, qual_flags);
   7919 
   7920     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7921     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 7, 28, 4);
   7922     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_C, 0);
   7923     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcClassL2, qual_flags);
   7924 
   7925     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7926     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 6, 24, 4);
   7927     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_D, 0);
   7928     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcClassL2, qual_flags);
   7929 
   7930     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7931     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 13, 208, 10);
   7932     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_C, 1);
   7933     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstClassL2, qual_flags);
   7934 
   7935     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7936     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 12, 192, 10);
   7937     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_D, 1);
   7938     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstClassL2, qual_flags);
   7939 
   7940     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7941     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 13, 208, 8);
   7942     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_C, 5);
   7943     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstClassL2, qual_flags);
   7944 
   7945     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7946     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 12, 192, 8);
   7947     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_D, 5);
   7948     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstClassL2, qual_flags);
   7949 
   7950     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7951     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 7, 56, 8);
   7952     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_C, 1);
   7953     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstClassL2, qual_flags);
   7954 
   7955     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7956     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 7, 56, 8);
   7957     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_C, 5);
   7958     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstClassL2, qual_flags);
   7959 
   7960     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7961     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 6, 48, 8);
   7962     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_D, 1);
   7963     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstClassL2, qual_flags);
   7964 
   7965     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7966     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 6, 48, 8);
   7967     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_D, 5);
   7968     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstClassL2, qual_flags);
   7969 
   7970     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7971     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 7, 28, 4);
   7972     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_C, 1);
   7973     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstClassL2, qual_flags);
   7974 
   7975     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7976     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 7, 28, 4);
   7977     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_C, 5);
   7978     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstClassL2, qual_flags);
   7979 
   7980     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7981     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 6, 24, 4);
   7982     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_D, 1);
   7983     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstClassL2, qual_flags);
   7984 
   7985     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7986     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 6, 24, 4);
   7987     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_D, 5);
   7988     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstClassL2, qual_flags);
   7989 
   7990     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7991     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 13, 208, 12);
   7992     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_C, 2);
   7993     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcClassL3, qual_flags);
   7994 
   7995     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   7996     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 12, 192, 12);
   7997     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_D, 2);
   7998     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcClassL3, qual_flags);
   7999 
   8000     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8001     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 13, 216, 8);
   8002     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_C, 6);
   8003     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcClassL3, qual_flags);
   8004 
   8005     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8006     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 12, 200, 8);
   8007     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_D, 6);
   8008     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcClassL3, qual_flags);
   8009 
   8010     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8011     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 7, 56, 8);
   8012     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_C, 2);
   8013     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcClassL3, qual_flags);
   8014 
   8015     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8016     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 6, 48, 8);
   8017     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_D, 2);
   8018     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcClassL3, qual_flags);
   8019 
   8020     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8021     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 7, 28, 4);
   8022     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_C, 2);
   8023     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcClassL3, qual_flags);
   8024 
   8025     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8026     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 6, 24, 4);
   8027     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_D, 2);
   8028     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcClassL3, qual_flags);
   8029 
   8030     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8031     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 13, 208, 12);
   8032     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_C, 3);
   8033     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstClassL3, qual_flags);
   8034 
   8035     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8036     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 12, 192, 12);
   8037     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_D, 3);
   8038     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstClassL3, qual_flags);
   8039 
   8040     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8041     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 13, 208, 8);
   8042     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_C, 6);
   8043     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstClassL3, qual_flags);
   8044 
   8045     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8046     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 12, 192, 8);
   8047     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_D, 6);
   8048     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstClassL3, qual_flags);
   8049 
   8050     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8051     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 7, 56, 8);
   8052     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_C, 3);
   8053     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstClassL3, qual_flags);
   8054 
   8055     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8056     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 7, 56, 8);
   8057     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_C, 6);
   8058     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstClassL3, qual_flags);
   8059 
   8060     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8061     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 6, 48, 8);
   8062     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_D, 3);
   8063     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstClassL3, qual_flags);
   8064 
   8065     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8066     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 6, 48, 8);
   8067     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_D, 6);
   8068     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstClassL3, qual_flags);
   8069 
   8070     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8071     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 7, 28, 4);
   8072     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_C, 3);
   8073     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstClassL3, qual_flags);
   8074 
   8075     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8076     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 7, 28, 4);
   8077     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_C, 6);
   8078     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstClassL3, qual_flags);
   8079 
   8080     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8081     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 6, 24, 4);
   8082     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_D, 3);
   8083     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstClassL3, qual_flags);
   8084 
   8085     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8086     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 6, 24, 4);
   8087     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_D, 6);
   8088     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstClassL3, qual_flags);
   8089 
   8090     /* Control selectors 7-13 are not supported in EM */
   8091     SHR_BITSET(qual_flags.w, BCMI_KEYGEN_QUAL_FLAGS_NOT_IN_EM);
   8092 
   8093     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8094     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 15, 240, 12);
   8095     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_A, 7);
   8096     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyVlanTranslateClassId, qual_flags);
   8097 
   8098     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8099     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 14, 224, 12);
   8100     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_B, 7);
   8101     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyVlanTranslateClassId, qual_flags);
   8102 
   8103     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8104     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 13, 208, 12);
   8105     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_C, 7);
   8106     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyVlanTranslateClassId, qual_flags);
   8107 
   8108     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8109     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 12, 192, 12);
   8110     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_D, 7);
   8111     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyVlanTranslateClassId, qual_flags);
   8112 
   8113     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8114     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 9, 72, 8);
   8115     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_A, 7);
   8116     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyVlanTranslateClassId, qual_flags);
   8117 
   8118     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8119     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 8, 64, 8);
   8120     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_B, 7);
   8121     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyVlanTranslateClassId, qual_flags);
   8122 
   8123     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8124     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 7, 56, 7);
   8125     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_C, 7);
   8126     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyVlanTranslateClassId, qual_flags);
   8127 
   8128     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8129     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 6, 48, 8);
   8130     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_D, 7);
   8131     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyVlanTranslateClassId, qual_flags);
   8132 
   8133     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8134     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 9, 36, 4);
   8135     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_A, 7);
   8136     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyVlanTranslateClassId, qual_flags);
   8137 
   8138     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8139     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 8, 32, 4);
   8140     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_B, 7);
   8141     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyVlanTranslateClassId, qual_flags);
   8142 
   8143     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8144     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 7, 28, 4);
   8145     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_C, 7);
   8146     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyVlanTranslateClassId, qual_flags);
   8147 
   8148     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8149     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 6, 24, 4);
   8150     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_D, 7);
   8151     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyVlanTranslateClassId, qual_flags);
   8152 
   8153     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8154     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 15, 240, 12);
   8155     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_A, 9);
   8156     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassMplsLookup1, qual_flags);
   8157 
   8158     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8159     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 14, 224, 12);
   8160     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_B, 9);
   8161     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassMplsLookup1, qual_flags);
   8162 
   8163     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8164     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 13, 208, 12);
   8165     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_C, 9);
   8166     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassMplsLookup1, qual_flags);
   8167 
   8168     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8169     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 12, 192, 12);
   8170     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_D, 9);
   8171     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassMplsLookup1, qual_flags);
   8172 
   8173     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8174     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 9, 72, 8);
   8175     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_A, 9);
   8176     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassMplsLookup1, qual_flags);
   8177 
   8178     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8179     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 8, 64, 8);
   8180     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_B, 9);
   8181     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassMplsLookup1, qual_flags);
   8182 
   8183     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8184     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 7, 56, 8);
   8185     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_C, 9);
   8186     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassMplsLookup1, qual_flags);
   8187 
   8188     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8189     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 6, 48, 8);
   8190     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_D, 9);
   8191     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassMplsLookup1, qual_flags);
   8192 
   8193     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8194     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 9, 36, 4);
   8195     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_A, 9);
   8196     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassMplsLookup1, qual_flags);
   8197 
   8198     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8199     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 8, 32, 4);
   8200     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_B, 9);
   8201     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassMplsLookup1, qual_flags);
   8202 
   8203     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8204     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 7, 28, 4);
   8205     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_C, 9);
   8206     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassMplsLookup1, qual_flags);
   8207 
   8208     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8209     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 6, 24, 4);
   8210     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_D, 9);
   8211     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassMplsLookup1, qual_flags);
   8212 
   8213     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8214     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 15, 240, 12);
   8215     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_A, 10);
   8216     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassMplsLookup2, qual_flags);
   8217 
   8218     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8219     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 14, 224, 12);
   8220     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_B, 10);
   8221     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassMplsLookup2, qual_flags);
   8222 
   8223     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8224     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 13, 208, 12);
   8225     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_C, 10);
   8226     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassMplsLookup2, qual_flags);
   8227 
   8228     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8229     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 12, 192, 12);
   8230     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_D, 10);
   8231     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassMplsLookup2, qual_flags);
   8232 
   8233     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8234     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 9, 72, 8);
   8235     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_A, 10);
   8236     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassMplsLookup2, qual_flags);
   8237 
   8238     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8239     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 8, 64, 8);
   8240     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_B, 10);
   8241     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassMplsLookup2, qual_flags);
   8242 
   8243     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8244     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 7, 56, 8);
   8245     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_C, 10);
   8246     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassMplsLookup2, qual_flags);
   8247 
   8248     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8249     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 6, 48, 8);
   8250     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_D, 10);
   8251     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassMplsLookup2, qual_flags);
   8252 
   8253     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8254     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 9, 36, 4);
   8255     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_A, 10);
   8256     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassMplsLookup2, qual_flags);
   8257 
   8258     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8259     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 8, 32, 4);
   8260     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_B, 10);
   8261     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassMplsLookup2, qual_flags);
   8262 
   8263     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8264     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 7, 28, 4);
   8265     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_C, 10);
   8266     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassMplsLookup2, qual_flags);
   8267 
   8268     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8269     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 6, 24, 4);
   8270     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_D, 10);
   8271     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassMplsLookup2, qual_flags);
   8272 
   8273 #if 0
   8274     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8275     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 15, 240, 12);
   8276     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_A, );
   8277     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassMplsLookup3, qual_flags);
   8278 
   8279     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8280     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 14, 224, 12);
   8281     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_B, 11);
   8282     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassMplsLookup3, qual_flags);
   8283 
   8284     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8285     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 13, 208, 12);
   8286     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_C, 11);
   8287     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassMplsLookup3, qual_flags);
   8288 
   8289     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8290     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 12, 192, 12);
   8291     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_D, 11);
   8292     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassMplsLookup3, qual_flags);
   8293 #endif
   8294 
   8295     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8296     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 15, 240, 12);
   8297     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_A, 11);
   8298     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassL3Tunnel, qual_flags);
   8299 
   8300     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8301     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 14, 224, 12);
   8302     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_B, 11);
   8303     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassL3Tunnel, qual_flags);
   8304 
   8305     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8306     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 13, 208, 12);
   8307     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_C, 11);
   8308     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassL3Tunnel, qual_flags);
   8309 
   8310     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8311     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 12, 192, 12);
   8312     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_D, 11);
   8313     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassL3Tunnel, qual_flags);
   8314 
   8315     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8316     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 9, 72, 8);
   8317     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_A, 11);
   8318     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassL3Tunnel, qual_flags);
   8319 
   8320     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8321     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 8, 64, 8);
   8322     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_B, 11);
   8323     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassL3Tunnel, qual_flags);
   8324 
   8325     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8326     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 7, 56, 8);
   8327     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_C, 11);
   8328     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassL3Tunnel, qual_flags);
   8329 
   8330     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8331     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 6, 48, 8);
   8332     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_D, 11);
   8333     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassL3Tunnel, qual_flags);
   8334 
   8335     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8336     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 9, 36, 4);
   8337     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_A, 11);
   8338     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassL3Tunnel, qual_flags);
   8339 
   8340     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8341     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 8, 32, 4);
   8342     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_B, 11);
   8343     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassL3Tunnel, qual_flags);
   8344 
   8345     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8346     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 7, 28, 4);
   8347     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_C, 11);
   8348     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassL3Tunnel, qual_flags);
   8349 
   8350     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8351     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 6, 24, 4);
   8352     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_D, 11);
   8353     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInterfaceClassL3Tunnel, qual_flags);
   8354 
   8355     if (soc_feature(unit, soc_feature_flex_flowtracker_ver_1)) {
   8356         /* BROADSCAN_GROUP_CLASS_ID */
   8357         BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8358         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 15, 240, 12);
   8359         BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_A, 15);
   8360         BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyFlowtrackerClassId, qual_flags);
   8361 
   8362         BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8363         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 14, 224, 12);
   8364         BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_B, 15);
   8365         BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyFlowtrackerClassId, qual_flags);
   8366 
   8367         BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8368         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 13, 208, 12);
   8369         BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_C, 15);
   8370         BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyFlowtrackerClassId, qual_flags);
   8371 
   8372         BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8373         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 12, 192, 12);
   8374         BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_D, 15);
   8375         BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyFlowtrackerClassId, qual_flags);
   8376 
   8377         BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8378         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 9, 72, 8);
   8379         BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_A, 15);
   8380         BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyFlowtrackerClassId, qual_flags);
   8381 
   8382         BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8383         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 8, 64, 8);
   8384         BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_B, 15);
   8385         BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyFlowtrackerClassId, qual_flags);
   8386 
   8387         BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8388         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 7, 56, 8);
   8389         BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_C, 15);
   8390         BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyFlowtrackerClassId, qual_flags);
   8391 
   8392         BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8393         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 6, 48, 8);
   8394         BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_D, 15);
   8395         BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyFlowtrackerClassId, qual_flags);
   8396 
   8397         BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8398         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 9, 36, 4);
   8399         BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_A, 15);
   8400         BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyFlowtrackerClassId, qual_flags);
   8401 
   8402         BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8403         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 8, 32, 4);
   8404         BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_B, 15);
   8405         BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyFlowtrackerClassId, qual_flags);
   8406 
   8407         BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8408         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 7, 28, 4);
   8409         BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_C, 15);
   8410         BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyFlowtrackerClassId, qual_flags);
   8411 
   8412         BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8413         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 6, 24, 4);
   8414         BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_CLASSID_D, 15);
   8415         BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyFlowtrackerClassId, qual_flags);
   8416     }
   8417     SHR_BITCLR(qual_flags.w, BCMI_KEYGEN_QUAL_FLAGS_NOT_IN_EM);
   8418 
   8419     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8420     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 5, 46, 2);
   8421     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyGroupClass, qual_flags);
   8422 
   8423     /* Ingress/Egress Objects */
   8424     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8425     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 10, 43, 1);
   8426     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyForwardingVlanValid, qual_flags);
   8427 
   8428     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8429     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 11, 44, 2);
   8430     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyIngressStpState, qual_flags);
   8431 
   8432     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8433     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 11, 44, 2);
   8434     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyStpState, qual_flags);
   8435 
   8436     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8437     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 17, 272, 12);
   8438     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyForwardingVlanId, qual_flags);
   8439 
   8440     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8441     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E2, 8, 16, 1);
   8442     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcVirtualPortValid, qual_flags);
   8443 
   8444     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8445     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E2, 8, 17, 1);
   8446     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDestVirtualPortValid, qual_flags);
   8447 
   8448     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8449     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 10, 160, 16);
   8450     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E2, 2, 5, 1);
   8451     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_A, 0);
   8452     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcModPortGport, qual_flags);
   8453 
   8454     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8455     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 10, 160, 16);
   8456     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E2, 2, 5, 1);
   8457     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_A, 0);
   8458     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcModPortGports, qual_flags);
   8459 
   8460     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8461     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 10, 160, 16);
   8462     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E2, 2, 5, 1);
   8463     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_A, 0);
   8464     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcPort, qual_flags);
   8465 
   8466     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8467     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 10, 160, 16);
   8468     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E2, 2, 5, 1);
   8469     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_A, 0);
   8470     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcTrunkMemberGport, qual_flags);
   8471 
   8472     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8473     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 10, 168, 8);
   8474     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E2, 2, 5, 1);
   8475     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_A, 0);
   8476     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcModuleGport, qual_flags);
   8477 
   8478     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8479     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 11, 176, 16);
   8480     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E2, 2, 4, 1);
   8481     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_B, 0);
   8482     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcModPortGport, qual_flags);
   8483 
   8484     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8485     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 11, 176, 16);
   8486     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E2, 2, 4, 1);
   8487     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_B, 0);
   8488     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcModPortGports, qual_flags);
   8489 
   8490     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8491     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 11, 176, 16);
   8492     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E2, 2, 4, 1);
   8493     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_B, 0);
   8494     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcPort, qual_flags);
   8495 
   8496     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8497     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 11, 176, 16);
   8498     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E2, 2, 4, 1);
   8499     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_B, 0);
   8500     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcTrunkMemberGport, qual_flags);
   8501 
   8502     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8503     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 11, 182, 8);
   8504     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E2, 2, 5, 1);
   8505     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_B, 0);
   8506     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcModuleGport, qual_flags);
   8507 
   8508     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8509     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 10, 160, 16);
   8510     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E2, 2, 5, 1);
   8511     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_A, 1);
   8512     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcTrunk, qual_flags);
   8513 
   8514     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8515     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 11, 176, 14);
   8516     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E2, 2, 4, 1);
   8517     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_B, 1);
   8518     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcTrunk, qual_flags);
   8519 
   8520     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8521     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 10, 160, 14);
   8522     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E2, 2, 5, 1);
   8523     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_A, 2);
   8524     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcMplsGport, qual_flags);
   8525 
   8526     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8527     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 11, 176, 14);
   8528     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E2, 2, 4, 1);
   8529     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_B, 2);
   8530     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcMplsGport, qual_flags);
   8531 
   8532     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8533     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 10, 160, 14);
   8534     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E2, 2, 5, 1);
   8535     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_A, 2);
   8536     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcMplsGports, qual_flags);
   8537 
   8538     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8539     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 11, 176, 14);
   8540     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E2, 2, 4, 1);
   8541     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_B, 2);
   8542     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcMplsGports, qual_flags);
   8543 
   8544     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8545     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 10, 160, 14);
   8546     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E2, 2, 5, 1);
   8547     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_A, 2);
   8548     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcMimGport, qual_flags);
   8549 
   8550     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8551     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 11, 176, 14);
   8552     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E2, 2, 4, 1);
   8553     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_B, 2);
   8554     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcMimGport, qual_flags);
   8555 
   8556     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8557     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 10, 160, 14);
   8558     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E2, 2, 5, 1);
   8559     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_A, 2);
   8560     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcMimGports, qual_flags);
   8561 
   8562     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8563     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 11, 176, 14);
   8564     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E2, 2, 4, 1);
   8565     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_B, 2);
   8566     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcMimGports, qual_flags);
   8567 
   8568     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8569     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 10, 160, 14);
   8570     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E2, 2, 5, 1);
   8571     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_A, 2);
   8572     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcWlanGport, qual_flags);
   8573 
   8574     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8575     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 11, 176, 14);
   8576     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E2, 2, 4, 1);
   8577     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_B, 2);
   8578     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcWlanGport, qual_flags);
   8579 
   8580     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8581     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 10, 160, 14);
   8582     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E2, 2, 5, 1);
   8583     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_A, 2);
   8584     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcWlanGports, qual_flags);
   8585 
   8586     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8587     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 11, 176, 14);
   8588     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E2, 2, 4, 1);
   8589     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_B, 2);
   8590     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcWlanGports, qual_flags);
   8591 
   8592     if (soc_feature(unit, soc_feature_niv)) {
   8593         BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8594         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 10, 160, 14);
   8595         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E2, 2, 5, 1);
   8596         BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_A, 2);
   8597         BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcNivGport, qual_flags);
   8598 
   8599         BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8600         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 11, 176, 14);
   8601         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E2, 2, 4, 1);
   8602         BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_B, 2);
   8603         BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcNivGport, qual_flags);
   8604 
   8605         BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8606         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 10, 160, 14);
   8607         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E2, 2, 5, 1);
   8608         BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_A, 2);
   8609         BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcNivGports, qual_flags);
   8610 
   8611         BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8612         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 11, 176, 14);
   8613         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E2, 2, 4, 1);
   8614         BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_B, 2);
   8615         BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcNivGports, qual_flags);
   8616     }
   8617 
   8618     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8619     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 10, 160, 14);
   8620     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E2, 2, 5, 1);
   8621     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_A, 2);
   8622     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcVxlanGport, qual_flags);
   8623 
   8624     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8625     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 11, 176, 14);
   8626     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E2, 2, 4, 1);
   8627     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_B, 2);
   8628     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcVxlanGport, qual_flags);
   8629 
   8630     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8631     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 10, 160, 14);
   8632     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E2, 2, 5, 1);
   8633     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_A, 2);
   8634     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcVxlanGports, qual_flags);
   8635 
   8636     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8637     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 11, 176, 14);
   8638     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E2, 2, 4, 1);
   8639     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_B, 2);
   8640     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcVxlanGports, qual_flags);
   8641 
   8642     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8643     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 10, 160, 14);
   8644     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E2, 2, 5, 1);
   8645     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_A, 2);
   8646     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcVlanGport, qual_flags);
   8647 
   8648     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8649     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 11, 176, 14);
   8650     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E2, 2, 4, 1);
   8651     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_B, 2);
   8652     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcVlanGport, qual_flags);
   8653 
   8654     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8655     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 10, 160, 14);
   8656     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E2, 2, 5, 1);
   8657     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_A, 2);
   8658     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcVlanGports, qual_flags);
   8659 
   8660     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8661     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 11, 176, 14);
   8662     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E2, 2, 4, 1);
   8663     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_B, 2);
   8664     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcVlanGports, qual_flags);
   8665 
   8666     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8667     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 2, 16, 8);
   8668     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E4, 32, 128, 4);
   8669     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyVrf, qual_flags);
   8670 
   8671     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8672     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 17, 272, 12);
   8673     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyVrf, qual_flags);
   8674 
   8675     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8676     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 1, 8, 8);
   8677     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E4, 0, 0, 4);
   8678     /* HX5 has 4k depth VFI */
   8679     if (!SOC_IS_HELIX5(unit)) {
   8680         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(2, BCMI_KEYGEN_EXT_SECTION_L1E2, 1, 2, 2);
   8681     }
   8682     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyVpn, qual_flags);
   8683 
   8684     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8685     /* HX5 has only 4k depth VFI */
   8686     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 17, 272, SOC_IS_HELIX5(unit) ? 12 : 14);
   8687     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyVpn, qual_flags);
   8688 
   8689     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8690     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 18, 288, 13);
   8691     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyL3Ingress, qual_flags);
   8692 
   8693     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8694     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 0, 0, 8);
   8695     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInPort, qual_flags);
   8696 
   8697     /*Miscellaneous*/
   8698     SHR_BITSET(qual_flags.w, BCMI_KEYGEN_QUAL_FLAGS_NOT_IN_EM);
   8699     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8700     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 30, 120, 4);
   8701     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyIntPriority, qual_flags);
   8702 
   8703     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8704     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E2, 23, 46, 2);
   8705     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyColor, qual_flags);
   8706     SHR_BITCLR(qual_flags.w, BCMI_KEYGEN_QUAL_FLAGS_NOT_IN_EM);
   8707 
   8708     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8709     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E2, 24, 49, 1);
   8710     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db,
   8711             bcmFieldQualifyRouterAlertLabelValid, qual_flags);
   8712 
   8713     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8714     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E2, 24, 48, 1);
   8715     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db,
   8716             bcmFieldQualifyGenericAssociatedChannelLabelValid, qual_flags);
   8717 
   8718     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8719     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E2, 25, 50, 2);
   8720     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db,
   8721             bcmFieldQualifyMplsControlWordValid, qual_flags);
   8722 
   8723     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8724     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E2, 12, 24, 1);
   8725     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_MAC_NORM, 1);
   8726     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyMacAddrsNormalized, qual_flags);
   8727 
   8728     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8729     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E2, 12, 25, 1);
   8730     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_L3_L4_NORM, 1);
   8731     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyIpAddrsNormalized, qual_flags);
   8732 
   8733     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8734     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E2, 19, 38, 2);
   8735     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyVlanFormat, qual_flags);
   8736 
   8737     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8738     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E2, 20, 40, 2);
   8739     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyTranslatedVlanFormat, qual_flags);
   8740 
   8741     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8742     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 11, 352, 32);
   8743     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E32, 12, 384, 32);
   8744     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(2, BCMI_KEYGEN_EXT_SECTION_L1E32, 13, 416, 32);
   8745     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(3, BCMI_KEYGEN_EXT_SECTION_L1E32, 14, 448, 32);
   8746     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(4, BCMI_KEYGEN_EXT_SECTION_L1E32, 15, 480, 32);
   8747     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(5, BCMI_KEYGEN_EXT_SECTION_L1E32, 16, 512, 32);
   8748     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(6, BCMI_KEYGEN_EXT_SECTION_L1E32, 17, 544, 32);
   8749     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(7, BCMI_KEYGEN_EXT_SECTION_L1E32, 18, 576, 32);
   8750     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyL2PayLoad, qual_flags);
   8751 
   8752     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8753     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 17, 544, 32);
   8754     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E32, 18, 576, 32);
   8755     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db,
   8756             bcmFieldQualifyL2PayloadFirstEightBytes, qual_flags);
   8757 
   8758     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8759     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E2, 26, 52, 2);
   8760     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyIpInfo, qual_flags);
   8761 
   8762     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8763     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 0, 0, 32);
   8764     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_B, 10);
   8765     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyBfdYourDiscriminator, qual_flags);
   8766 
   8767     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8768     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 1, 32, 32);
   8769     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 10);
   8770     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyBfdYourDiscriminator, qual_flags);
   8771 
   8772     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8773     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 2, 32, 16);
   8774     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E16, 3, 48, 16);
   8775     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_B, 10);
   8776     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyBfdYourDiscriminator, qual_flags);
   8777 
   8778     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8779     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 4, 64, 16);
   8780     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E16, 5, 80, 16);
   8781     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_A, 10);
   8782     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyBfdYourDiscriminator, qual_flags);
   8783 
   8784     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8785     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 0, 0, 16);
   8786     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_D, 2);
   8787     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyPacketLength, qual_flags);
   8788 
   8789     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8790     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 1, 16, 16);
   8791     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_C, 2);
   8792     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyPacketLength, qual_flags);
   8793 
   8794     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8795     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 23, 368, 16);
   8796     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E16, 24, 384, 16);
   8797     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyRangeCheck, qual_flags);
   8798 
   8799     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8800     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 11, 176, 16);
   8801     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E2, 3, 6, 1);
   8802     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_B, 0);
   8803     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcTrunkMemberGport, qual_flags);
   8804 
   8805     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8806     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 29, 116, 4);
   8807     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyMplsForwardingLabelAction, qual_flags);
   8808 
   8809 
   8810     
   8811     SHR_BITSET(qual_flags.w, BCMI_KEYGEN_QUAL_FLAGS_NOT_IN_EM);
   8812     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8813     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 10, 80, 8);
   8814     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyPacketRes, qual_flags);
   8815     SHR_BITCLR(qual_flags.w, BCMI_KEYGEN_QUAL_FLAGS_NOT_IN_EM);
   8816 
   8817     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8818     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 1, 4, 4);
   8819     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E2, 3, 6, 1);
   8820     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyIpType, qual_flags);
   8821 
   8822     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8823     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E2, 18, 36, 2);
   8824     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyL2Format, qual_flags);
   8825 
   8826     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8827     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E2, 22, 44, 2);
   8828     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyInnerTpid, qual_flags);
   8829 
   8830     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8831     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E2, 21, 42, 2);
   8832     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyOuterTpid, qual_flags);
   8833 
   8834     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8835     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 18, 72, 4);
   8836     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyForwardingType, qual_flags);
   8837 
   8838     /* Compression Qualifiers */
   8839 
   8840     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8841     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 20, 80, 4);
   8842     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyFcoeOxIDClass, qual_flags);
   8843 
   8844     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8845     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 19, 76, 4);
   8846     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyFcoeRxIDClass, qual_flags);
   8847 
   8848     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8849     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 20, 80, 4);
   8850     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyL4SrcPortClass, qual_flags);
   8851 
   8852     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8853     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 0, 6, 4);
   8854     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_D, 0);
   8855     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyL4SrcPortClass, qual_flags);
   8856 
   8857     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8858     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 1, 22, 4);
   8859     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_C, 0);
   8860     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyL4SrcPortClass, qual_flags);
   8861 
   8862     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8863     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 19, 76, 4);
   8864     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyL4DstPortClass, qual_flags);
   8865 
   8866     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8867     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 0, 2, 4);
   8868     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_D, 0);
   8869     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyL4DstPortClass, qual_flags);
   8870 
   8871     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8872     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 1, 18, 4);
   8873     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_C, 0);
   8874     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyL4DstPortClass, qual_flags);
   8875 
   8876     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8877     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 22, 88, 4);
   8878     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyIpProtocolClass, qual_flags);
   8879 
   8880     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8881     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 0, 10, 4);
   8882     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_D, 0);
   8883     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyIpProtocolClass, qual_flags);
   8884 
   8885     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8886     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 1, 26, 4);
   8887     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_C, 0);
   8888     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyIpProtocolClass, qual_flags);
   8889 
   8890     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8891     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 21, 84, 4);
   8892     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyEtherTypeClass, qual_flags);
   8893 
   8894     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8895     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 12, 96, 8);
   8896     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_TTL_FN, 0);
   8897     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyTtlClassZero, qual_flags);
   8898 
   8899     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8900     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 12, 96, 8);
   8901     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_TTL_FN, 1);
   8902     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyTtlClassOne, qual_flags);
   8903 
   8904     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8905     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 11, 88, 8);
   8906     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_TOS_FN, 0);
   8907     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyTosClassZero, qual_flags);
   8908 
   8909     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8910     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 11, 88, 8);
   8911     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_TOS_FN, 1);
   8912     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyTosClassOne, qual_flags);
   8913 
   8914     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8915     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 2, 8, 4);
   8916     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E4, 3, 12, 4);
   8917     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_TCP_FN, 0);
   8918     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyTcpClassZero, qual_flags);
   8919 
   8920     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8921     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 2, 8, 4);
   8922     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E4, 3, 12, 4);
   8923     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_TCP_FN, 1);
   8924     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyTcpClassOne, qual_flags);
   8925 
   8926     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8927     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 21, 336, 16);
   8928     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E16, 22, 352, 16);
   8929     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(2, BCMI_KEYGEN_EXT_SECTION_L1E4, 23, 92, 4);
   8930     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcIpClass, qual_flags);
   8931 
   8932     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8933     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 21, 336, 16);
   8934     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcIpClassLower, qual_flags);
   8935 
   8936     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8937     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 22, 352, 16);
   8938     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcIpClassUpper, qual_flags);
   8939 
   8940     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8941     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 23, 92, 4);
   8942     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcIpClassMsbNibble, qual_flags);
   8943 
   8944     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8945     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 21, 336, 16);
   8946     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E16, 22, 352, 16);
   8947     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(2, BCMI_KEYGEN_EXT_SECTION_L1E4, 23, 92, 4);
   8948     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcIp6Class, qual_flags);
   8949 
   8950     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8951     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 21, 336, 16);
   8952     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcIp6ClassLower, qual_flags);
   8953 
   8954     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8955     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 22, 352, 16);
   8956     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcIp6ClassUpper, qual_flags);
   8957 
   8958     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8959     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 23, 92, 4);
   8960     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifySrcIp6ClassMsbNibble, qual_flags);
   8961 
   8962     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8963     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 19, 304, 16);
   8964     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E16, 20, 320, 16);
   8965     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(2, BCMI_KEYGEN_EXT_SECTION_L1E4, 24, 96, 4);
   8966     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstIpClass, qual_flags);
   8967 
   8968     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8969     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 19, 304, 16);
   8970     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstIpClassLower, qual_flags);
   8971 
   8972     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8973     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 20, 320, 16);
   8974     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstIpClassUpper, qual_flags);
   8975 
   8976     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8977     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 24, 96, 4);
   8978     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstIpClassMsbNibble, qual_flags);
   8979 
   8980     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8981     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 19, 304, 16);
   8982     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E16, 20, 320, 16);
   8983     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(2, BCMI_KEYGEN_EXT_SECTION_L1E4, 24, 96, 4);
   8984     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstIp6Class, qual_flags);
   8985 
   8986     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8987     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 19, 304, 16);
   8988     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstIp6ClassLower, qual_flags);
   8989 
   8990     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8991     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 20, 320, 16);
   8992     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstIp6ClassUpper, qual_flags);
   8993 
   8994     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8995     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 24, 96, 4);
   8996     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstIp6ClassMsbNibble, qual_flags);
   8997 
   8998     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   8999     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 21, 336, 16);
   9000     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E16, 22, 352, 16);
   9001     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(2, BCMI_KEYGEN_EXT_SECTION_L1E4, 23, 92, 4);
   9002     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyFibreChanSrcIdClass, qual_flags);
   9003 
   9004     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9005     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 21, 336, 16);
   9006     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyFibreChanSrcIdClassLower, qual_flags);
   9007 
   9008     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9009     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 22, 352, 16);
   9010     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyFibreChanSrcIdClassUpper, qual_flags);
   9011 
   9012     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9013     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 23, 92, 4);
   9014     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyFibreChanSrcIdClassMsbNibble, qual_flags);
   9015 
   9016     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9017     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 19, 304, 16);
   9018     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1, BCMI_KEYGEN_EXT_SECTION_L1E16, 20, 320, 16);
   9019     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(2, BCMI_KEYGEN_EXT_SECTION_L1E4, 24, 96, 4);
   9020     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyFibreChanDstIdClass, qual_flags);
   9021 
   9022     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9023     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 19, 304, 16);
   9024     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyFibreChanDstIdClassLower, qual_flags);
   9025 
   9026     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9027     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 20, 320, 16);
   9028     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyFibreChanDstIdClassUpper, qual_flags);
   9029 
   9030     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9031     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 24, 96, 4);
   9032     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyFibreChanDstIdClassMsbNibble, qual_flags);
   9033 
   9034     /*Fiber Channel Qualifiers */
   9035     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9036     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 11, 360, 24);
   9037     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyFibreChanSrcId, qual_flags);
   9038 
   9039     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9040     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 11, 355, 3);
   9041     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyFibreChanInner, qual_flags);
   9042 
   9043     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9044     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 11, 352, 3);
   9045     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyFibreChanOuter, qual_flags);
   9046 
   9047     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9048     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 12, 392, 24);
   9049     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyFibreChanFCtl, qual_flags);
   9050 
   9051     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9052     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 12, 384, 8);
   9053     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyFcoeSOF, qual_flags);
   9054 
   9055     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9056     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 15, 488, 24);
   9057     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyFibreChanDstId, qual_flags);
   9058 
   9059     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9060     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E32, 15, 480, 8);
   9061     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyFibreChanRCtl, qual_flags);
   9062 
   9063     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9064     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 11, 88, 8);
   9065     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyFibreChanCSCtl, qual_flags);
   9066 
   9067     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9068     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 12, 96, 8);
   9069     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyFibreChanVFTHopCount, qual_flags);
   9070 
   9071     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9072     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 0, 12, 3);
   9073     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_D, 7);
   9074     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyFibreChanVFTPri, qual_flags);
   9075 
   9076     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9077     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 0, 0, 12);
   9078     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_D, 7);
   9079     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyFibreChanVFTFabricId, qual_flags);
   9080 
   9081     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9082     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 1, 28, 3);
   9083     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_C, 7);
   9084     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyFibreChanVFTPri, qual_flags);
   9085 
   9086     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9087     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 1, 16, 12);
   9088     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_AUX_TAG_C, 7);
   9089     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyFibreChanVFTFabricId, qual_flags);
   9090 
   9091     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9092     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 13, 104, 8);
   9093     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyFibreChanType, qual_flags);
   9094 
   9095     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9096     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 15, 120, 8);
   9097     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyFibreChanDFCtl, qual_flags);
   9098 
   9099     SHR_BITSET(qual_flags.w, BCMI_KEYGEN_QUAL_FLAGS_PMUX);
   9100 
   9101     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9102     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0,
   9103         BCMI_KEYGEN_EXT_SECTION_LTID, 0, 144, 4);
   9104     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1,
   9105         BCMI_KEYGEN_EXT_SECTION_LTID, 1, 150, 1);
   9106     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db,
   9107         _bcmFieldQualifyPreLogicalTableId, qual_flags);
   9108 
   9109     SHR_BITSET(qual_flags.w, BCMI_KEYGEN_QUAL_FLAGS_NOT_IN_EM);
   9110     /* Post Mux Qualifers */
   9111     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9112     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_DROP, 0, 159, 1);
   9113     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDrop, qual_flags);
   9114 
   9115     /* NAT Qualifiers */
   9116     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9117     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9118         (0, BCMI_KEYGEN_EXT_SECTION_NAT_NEEDED, 1, 158, 1);
   9119     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyNatNeeded, qual_flags);
   9120 
   9121     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9122     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9123         (0, BCMI_KEYGEN_EXT_SECTION_NAT_DST_REALMID, 2, 156, 2);
   9124     BCMI_KEYGEN_QUAL_CFG_INSERT
   9125         (unit, db, bcmFieldQualifyNatDstRealmId, qual_flags);
   9126 
   9127     /* Exact Match Class Id  and HIT status Qualifiers. */
   9128     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9129     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0,
   9130         BCMI_KEYGEN_EXT_SECTION_EM_FIRST_LOOKUP_CLASSID_BITS_0_3, 8, 120, 4);
   9131     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1,
   9132         BCMI_KEYGEN_EXT_SECTION_EM_FIRST_LOOKUP_CLASSID_BITS_4_7, 9, 124, 4);
   9133     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(2,
   9134         BCMI_KEYGEN_EXT_SECTION_EM_FIRST_LOOKUP_CLASSID_BITS_8_11, 10, 128, 4);
   9135     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db,
   9136                   _bcmFieldQualifyExactMatchActionClassIdLookup0, qual_flags);
   9137 
   9138     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9139     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0,
   9140         BCMI_KEYGEN_EXT_SECTION_EM_SECOND_LOOKUP_CLASSID_BITS_0_3, 5, 132, 4);
   9141     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(1,
   9142         BCMI_KEYGEN_EXT_SECTION_EM_SECOND_LOOKUP_CLASSID_BITS_4_7, 6, 136, 4);
   9143     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(2,
   9144         BCMI_KEYGEN_EXT_SECTION_EM_SECOND_LOOKUP_CLASSID_BITS_8_11, 7, 140, 4);
   9145     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db,
   9146                    _bcmFieldQualifyExactMatchActionClassIdLookup1, qual_flags);
   9147 
   9148     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9149     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0,
   9150         BCMI_KEYGEN_EXT_SECTION_EM_FIRST_LOOKUP_HIT, 3, 154, 1);
   9151     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db,
   9152         _bcmFieldQualifyExactMatchHitStatusLookup0, qual_flags);
   9153 
   9154     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9155     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0,
   9156         BCMI_KEYGEN_EXT_SECTION_EM_SECOND_LOOKUP_HIT, 3, 155, 1);
   9157     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db,
   9158         _bcmFieldQualifyExactMatchHitStatusLookup1, qual_flags);
   9159 
   9160     /* Destination Port Object(PORT/LAG/VP/VPLAG) -
   9161      * Any other Mode than SINGLE.
   9162      */
   9163     SHR_BITSET(qual_flags.w, BCMI_KEYGEN_QUAL_FLAGS_PMUX);
   9164     SHR_BITSET(qual_flags.w, BCMI_KEYGEN_QUAL_FLAGS_NOT_IN_SINGLE);
   9165     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9166     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9167         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_0, 14, 48, 16);
   9168     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9169         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 152, 1);
   9170     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_0, 4);
   9171     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstPort, qual_flags);
   9172 
   9173     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9174     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9175         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_1, 13, 64, 16);
   9176     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9177         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 153, 1);
   9178     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_1, 4);
   9179     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstPort, qual_flags);
   9180 
   9181     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9182     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9183         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_0, 14, 48, 16);
   9184     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9185         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 152, 1);
   9186     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_0, 4);
   9187     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstTrunk, qual_flags);
   9188 
   9189     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9190     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9191         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_1, 13, 64, 16);
   9192     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9193         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 153, 1);
   9194     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_1, 4);
   9195     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstTrunk, qual_flags);
   9196 
   9197     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9198     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9199         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_0, 14, 48, 16);
   9200     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9201         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 152, 1);
   9202     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_0, 5);
   9203     BCMI_KEYGEN_QUAL_CFG_INSERT
   9204         (unit, db, bcmFieldQualifyDstMimGport, qual_flags);
   9205 
   9206     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9207     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9208         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_1, 13, 64, 16);
   9209     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9210         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 153, 1);
   9211     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_1, 5);
   9212     BCMI_KEYGEN_QUAL_CFG_INSERT
   9213         (unit, db, bcmFieldQualifyDstMimGport, qual_flags);
   9214 
   9215     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9216     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9217         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_0, 14, 48, 16);
   9218     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9219         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 152, 1);
   9220     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_0, 5);
   9221     BCMI_KEYGEN_QUAL_CFG_INSERT
   9222         (unit, db, bcmFieldQualifyDstMimGports, qual_flags);
   9223 
   9224     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9225     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9226         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_1, 13, 64, 16);
   9227     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9228         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 153, 1);
   9229     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_1, 5);
   9230     BCMI_KEYGEN_QUAL_CFG_INSERT
   9231         (unit, db, bcmFieldQualifyDstMimGports, qual_flags);
   9232 
   9233     if (soc_feature(unit, soc_feature_niv)) {
   9234         BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9235         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9236             (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_0, 14, 48, 16);
   9237         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9238             (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 152, 1);
   9239         BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_0, 5);
   9240         BCMI_KEYGEN_QUAL_CFG_INSERT
   9241             (unit, db, bcmFieldQualifyDstNivGport, qual_flags);
   9242 
   9243         BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9244         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9245             (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_1, 13, 64, 16);
   9246         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9247             (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 153, 1);
   9248         BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_1, 5);
   9249         BCMI_KEYGEN_QUAL_CFG_INSERT
   9250             (unit, db, bcmFieldQualifyDstNivGport, qual_flags);
   9251 
   9252         BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9253         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9254             (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_0, 14, 48, 16);
   9255         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9256             (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 152, 1);
   9257         BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_0, 5);
   9258         BCMI_KEYGEN_QUAL_CFG_INSERT
   9259             (unit, db, bcmFieldQualifyDstNivGports, qual_flags);
   9260 
   9261         BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9262         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9263             (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_1, 13, 64, 16);
   9264         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9265             (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 153, 1);
   9266         BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_1, 5);
   9267         BCMI_KEYGEN_QUAL_CFG_INSERT
   9268             (unit, db, bcmFieldQualifyDstNivGports, qual_flags);
   9269     }
   9270 
   9271     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9272     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9273         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_0, 14, 48, 16);
   9274     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9275         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 152, 1);
   9276     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_0, 5);
   9277     BCMI_KEYGEN_QUAL_CFG_INSERT
   9278         (unit, db, bcmFieldQualifyDstVxlanGport, qual_flags);
   9279 
   9280     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9281     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9282         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_1, 13, 64, 16);
   9283     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9284         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 153, 1);
   9285     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_1, 5);
   9286     BCMI_KEYGEN_QUAL_CFG_INSERT
   9287         (unit, db, bcmFieldQualifyDstVxlanGport, qual_flags);
   9288 
   9289     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9290     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9291         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_0, 14, 48, 16);
   9292     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9293         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 152, 1);
   9294     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_0, 5);
   9295     BCMI_KEYGEN_QUAL_CFG_INSERT
   9296         (unit, db, bcmFieldQualifyDstVxlanGports, qual_flags);
   9297 
   9298     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9299     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9300         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_1, 13, 64, 16);
   9301     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9302         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 153, 1);
   9303     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_1, 5);
   9304     BCMI_KEYGEN_QUAL_CFG_INSERT
   9305         (unit, db, bcmFieldQualifyDstVxlanGports, qual_flags);
   9306 
   9307     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9308     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9309         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_0, 14, 48, 16);
   9310     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9311         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 152, 1);
   9312     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_0, 5);
   9313     BCMI_KEYGEN_QUAL_CFG_INSERT
   9314         (unit, db, bcmFieldQualifyDstVlanGport, qual_flags);
   9315 
   9316     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9317     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9318         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_1, 13, 64, 16);
   9319     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9320         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 153, 1);
   9321     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_1, 5);
   9322     BCMI_KEYGEN_QUAL_CFG_INSERT
   9323         (unit, db, bcmFieldQualifyDstVlanGport, qual_flags);
   9324 
   9325     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9326     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9327         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_0, 14, 48, 16);
   9328     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9329         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 152, 1);
   9330     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_0, 5);
   9331     BCMI_KEYGEN_QUAL_CFG_INSERT
   9332         (unit, db, bcmFieldQualifyDstVlanGports, qual_flags);
   9333 
   9334     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9335     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9336         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_1, 13, 64, 16);
   9337     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9338         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 153, 1);
   9339     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_1, 5);
   9340     BCMI_KEYGEN_QUAL_CFG_INSERT
   9341         (unit, db, bcmFieldQualifyDstVlanGports, qual_flags);
   9342 
   9343     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9344     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9345         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_0, 14, 48, 16);
   9346     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9347         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 152, 1);
   9348     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_0, 5);
   9349     BCMI_KEYGEN_QUAL_CFG_INSERT
   9350         (unit, db, bcmFieldQualifyDstMplsGport, qual_flags);
   9351 
   9352     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9353     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9354         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_1, 13, 64, 16);
   9355     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9356         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 153, 1);
   9357     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_1, 5);
   9358     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstMplsGport, qual_flags);
   9359 
   9360     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9361     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9362         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_0, 14, 48, 16);
   9363     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9364         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 152, 1);
   9365     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_0, 5);
   9366     BCMI_KEYGEN_QUAL_CFG_INSERT
   9367         (unit, db, bcmFieldQualifyDstMplsGports, qual_flags);
   9368 
   9369     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9370     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9371         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_1, 13, 64, 16);
   9372     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9373         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 153, 1);
   9374     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_1, 5);
   9375     BCMI_KEYGEN_QUAL_CFG_INSERT
   9376         (unit, db, bcmFieldQualifyDstMplsGports, qual_flags);
   9377 
   9378     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9379     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9380         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_0, 14, 48, 16);
   9381     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9382         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 152, 1);
   9383     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_0, 5);
   9384     BCMI_KEYGEN_QUAL_CFG_INSERT
   9385         (unit, db, bcmFieldQualifyDstWlanGport, qual_flags);
   9386 
   9387     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9388     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9389         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_1, 13, 64, 16);
   9390     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9391         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 153, 1);
   9392     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_1, 5);
   9393     BCMI_KEYGEN_QUAL_CFG_INSERT
   9394         (unit, db, bcmFieldQualifyDstWlanGport, qual_flags);
   9395 
   9396     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9397     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9398         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_0, 14, 48, 16);
   9399     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9400         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 152, 1);
   9401     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_0, 5);
   9402     BCMI_KEYGEN_QUAL_CFG_INSERT
   9403         (unit, db, bcmFieldQualifyDstWlanGports, qual_flags);
   9404 
   9405     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9406     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9407         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_1, 13, 64, 16);
   9408     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9409         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 153, 1);
   9410     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_1, 5);
   9411     BCMI_KEYGEN_QUAL_CFG_INSERT
   9412         (unit, db, bcmFieldQualifyDstWlanGports, qual_flags);
   9413 
   9414     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9415     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9416         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_0, 14, 48, 16);
   9417     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9418         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 152, 1);
   9419     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_0, 9);
   9420     BCMI_KEYGEN_QUAL_CFG_INSERT
   9421         (unit, db, bcmFieldQualifyDstL3EgressNextHops, qual_flags);
   9422 
   9423     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9424     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9425         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_0, 14, 48, 16);
   9426     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9427         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 152, 1);
   9428     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_0, 9);
   9429     BCMI_KEYGEN_QUAL_CFG_INSERT
   9430         (unit, db, bcmFieldQualifyDstL3Egress, qual_flags);
   9431 
   9432     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9433     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9434         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_1, 13, 64, 16);
   9435     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9436         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 153, 1);
   9437     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_1, 9);
   9438     BCMI_KEYGEN_QUAL_CFG_INSERT
   9439         (unit, db, bcmFieldQualifyDstL3EgressNextHops, qual_flags);
   9440 
   9441     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9442     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9443         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_1, 13, 64, 16);
   9444     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9445         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 153, 1);
   9446     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_1, 9);
   9447     BCMI_KEYGEN_QUAL_CFG_INSERT
   9448         (unit, db, bcmFieldQualifyDstL3Egress, qual_flags);
   9449 
   9450     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9451     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9452         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_0, 14, 48, 16);
   9453     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9454         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 152, 1);
   9455     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_0, 10);
   9456     BCMI_KEYGEN_QUAL_CFG_INSERT
   9457         (unit, db, bcmFieldQualifyDstL3EgressNextHopsUnderlay, qual_flags);
   9458 
   9459     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9460     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9461         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_0, 14, 48, 16);
   9462     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9463         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 152, 1);
   9464     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_0, 10);
   9465     BCMI_KEYGEN_QUAL_CFG_INSERT
   9466         (unit, db, bcmFieldQualifyDstL3EgressUnderlay, qual_flags);
   9467 
   9468     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9469     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9470         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_1, 13, 64, 16);
   9471     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9472         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 153, 1);
   9473     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_1, 10);
   9474     BCMI_KEYGEN_QUAL_CFG_INSERT
   9475         (unit, db, bcmFieldQualifyDstL3EgressNextHopsUnderlay, qual_flags);
   9476 
   9477     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9478     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9479         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_1, 13, 64, 16);
   9480     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9481         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 153, 1);
   9482     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_1, 10);
   9483     BCMI_KEYGEN_QUAL_CFG_INSERT
   9484         (unit, db, bcmFieldQualifyDstL3EgressUnderlay, qual_flags);
   9485 
   9486     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9487     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9488         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_0, 14, 48, 16);
   9489     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9490         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 152, 1);
   9491     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_0, 7);
   9492     BCMI_KEYGEN_QUAL_CFG_INSERT
   9493         (unit, db, bcmFieldQualifyDstMultipath, qual_flags);
   9494 
   9495     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9496     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9497         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_1, 13, 64, 16);
   9498     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9499         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 153, 1);
   9500     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_1, 7);
   9501     BCMI_KEYGEN_QUAL_CFG_INSERT
   9502         (unit, db, bcmFieldQualifyDstMultipath, qual_flags);
   9503 
   9504     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9505     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9506         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_0, 14, 48, 16);
   9507     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9508         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 152, 1);
   9509     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_0, 7);
   9510     BCMI_KEYGEN_QUAL_CFG_INSERT
   9511         (unit, db, bcmFieldQualifyDstMultipathOverlay, qual_flags);
   9512 
   9513     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9514     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9515         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_1, 13, 64, 16);
   9516     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9517         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 153, 1);
   9518     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_1, 7);
   9519     BCMI_KEYGEN_QUAL_CFG_INSERT
   9520         (unit, db, bcmFieldQualifyDstMultipathOverlay, qual_flags);
   9521 
   9522     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9523     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9524         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_0, 14, 48, 16);
   9525     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9526         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 152, 1);
   9527     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_0, 8);
   9528     BCMI_KEYGEN_QUAL_CFG_INSERT
   9529         (unit, db, bcmFieldQualifyDstMultipathUnderlay, qual_flags);
   9530 
   9531     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9532     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9533         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_1, 13, 64, 16);
   9534     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9535         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 153, 1);
   9536     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_1, 8);
   9537     BCMI_KEYGEN_QUAL_CFG_INSERT
   9538         (unit, db, bcmFieldQualifyDstMultipathUnderlay, qual_flags);
   9539 
   9540     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9541     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9542         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_0, 14, 48, 16);
   9543     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9544         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 152, 1);
   9545     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_0, 11);
   9546     BCMI_KEYGEN_QUAL_CFG_INSERT
   9547         (unit, db, bcmFieldQualifyDstL3MulticastGroup, qual_flags);
   9548 
   9549     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9550     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9551         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_1, 13, 64, 16);
   9552     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9553         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 153, 1);
   9554     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_1, 11);
   9555     BCMI_KEYGEN_QUAL_CFG_INSERT
   9556         (unit, db, bcmFieldQualifyDstL3MulticastGroup, qual_flags);
   9557 
   9558     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9559     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9560         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_0, 14, 48, 16);
   9561     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9562         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 152, 1);
   9563     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_0, 12);
   9564     BCMI_KEYGEN_QUAL_CFG_INSERT
   9565         (unit, db, bcmFieldQualifyDstL2MulticastGroup, qual_flags);
   9566 
   9567     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9568     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9569         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_1, 13, 64, 16);
   9570     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9571         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 153, 1);
   9572     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_1, 12);
   9573     BCMI_KEYGEN_QUAL_CFG_INSERT
   9574         (unit, db, bcmFieldQualifyDstL2MulticastGroup, qual_flags);
   9575 
   9576     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9577     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_IPBM, 0, 0, 34);
   9578     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_IPBM_PRESENT, 3);
   9579     BCMI_KEYGEN_QUAL_CFG_INSERT
   9580         (unit, db, bcmFieldQualifyDevicePortBitmap, qual_flags);
   9581 
   9582     if (soc_feature(unit, soc_feature_ifp_no_inports_support)) {
   9583        BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9584        BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_IPBM, 0, 0, 34);
   9585        BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_IPBM_PRESENT, 1);
   9586        BCMI_KEYGEN_QUAL_CFG_INSERT
   9587            (unit, db, bcmFieldQualifySystemPortBitmap, qual_flags);
   9588     } else {
   9589        BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9590        BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_IPBM, 0, 0, 34);
   9591        BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_IPBM_PRESENT, 1);
   9592        BCMI_KEYGEN_QUAL_CFG_INSERT
   9593            (unit, db, bcmFieldQualifyInPorts, qual_flags);
   9594     }
   9595 
   9596     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9597     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_IPBM, 0, 0, 34);
   9598     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_IPBM_PRESENT, 2);
   9599     BCMI_KEYGEN_QUAL_CFG_INSERT
   9600         (unit, db, bcmFieldQualifySourceGportBitmap, qual_flags);
   9601 
   9602     /* Destination Port Object(PORT/LAG/VP/VPLAG) - SINGLE Wide Mode */
   9603     SHR_BITCLR(qual_flags.w, BCMI_KEYGEN_QUAL_FLAGS_NOT_IN_SINGLE);
   9604     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9605     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9606         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_0, 12, 88, 16);
   9607     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9608         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 152, 1);
   9609     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_0, 4);
   9610     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstPort, qual_flags);
   9611 
   9612     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9613     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9614         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_1, 11, 104, 16);
   9615     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9616         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 153, 1);
   9617     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_1, 4);
   9618     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstPort, qual_flags);
   9619 
   9620     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9621     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9622         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_0, 12, 88, 16);
   9623     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9624         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 152, 1);
   9625     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_0, 4);
   9626     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstTrunk, qual_flags);
   9627 
   9628     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9629     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9630         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_1, 11, 104, 16);
   9631     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9632         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 153, 1);
   9633     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_1, 4);
   9634     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyDstTrunk, qual_flags);
   9635 
   9636     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9637     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9638         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_0, 12, 88, 16);
   9639     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9640         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 152, 1);
   9641     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_0, 5);
   9642     BCMI_KEYGEN_QUAL_CFG_INSERT
   9643         (unit, db, bcmFieldQualifyDstMimGport, qual_flags);
   9644 
   9645     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9646     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9647         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_1, 11, 104, 16);
   9648     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9649         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 153, 1);
   9650     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_1, 5);
   9651     BCMI_KEYGEN_QUAL_CFG_INSERT
   9652         (unit, db, bcmFieldQualifyDstMimGport, qual_flags);
   9653 
   9654     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9655     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9656         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_0, 12, 88, 16);
   9657     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9658         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 152, 1);
   9659     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_0, 5);
   9660     BCMI_KEYGEN_QUAL_CFG_INSERT
   9661         (unit, db, bcmFieldQualifyDstMimGports, qual_flags);
   9662 
   9663     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9664     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9665         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_1, 11, 104, 16);
   9666     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9667         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 153, 1);
   9668     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_1, 5);
   9669     BCMI_KEYGEN_QUAL_CFG_INSERT
   9670         (unit, db, bcmFieldQualifyDstMimGports, qual_flags);
   9671 
   9672     if (soc_feature(unit, soc_feature_niv)) {
   9673         BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9674         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9675             (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_0, 12, 88, 16);
   9676         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9677             (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 152, 1);
   9678         BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_0, 5);
   9679         BCMI_KEYGEN_QUAL_CFG_INSERT
   9680             (unit, db, bcmFieldQualifyDstNivGport, qual_flags);
   9681 
   9682         BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9683         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9684             (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_1, 11, 104, 16);
   9685         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9686             (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 153, 1);
   9687         BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_1, 5);
   9688         BCMI_KEYGEN_QUAL_CFG_INSERT
   9689             (unit, db, bcmFieldQualifyDstNivGport, qual_flags);
   9690 
   9691         BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9692         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9693             (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_0, 12, 88, 16);
   9694         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9695             (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 152, 1);
   9696         BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_0, 5);
   9697         BCMI_KEYGEN_QUAL_CFG_INSERT
   9698             (unit, db, bcmFieldQualifyDstNivGports, qual_flags);
   9699 
   9700         BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9701         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9702             (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_1, 11, 104, 16);
   9703         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9704             (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 153, 1);
   9705         BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_1, 5);
   9706         BCMI_KEYGEN_QUAL_CFG_INSERT
   9707             (unit, db, bcmFieldQualifyDstNivGports, qual_flags);
   9708     }
   9709 
   9710     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9711     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9712         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_0, 12, 88, 16);
   9713     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9714         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 152, 1);
   9715     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_0, 5);
   9716     BCMI_KEYGEN_QUAL_CFG_INSERT
   9717         (unit, db, bcmFieldQualifyDstVxlanGport, qual_flags);
   9718 
   9719     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9720     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9721         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_1, 11, 104, 16);
   9722     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9723         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 153, 1);
   9724     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_1, 5);
   9725     BCMI_KEYGEN_QUAL_CFG_INSERT
   9726         (unit, db, bcmFieldQualifyDstVxlanGport, qual_flags);
   9727 
   9728     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9729     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9730         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_0, 12, 88, 16);
   9731     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9732         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 152, 1);
   9733     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_0, 5);
   9734     BCMI_KEYGEN_QUAL_CFG_INSERT
   9735         (unit, db, bcmFieldQualifyDstVxlanGports, qual_flags);
   9736 
   9737     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9738     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9739         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_1, 11, 104, 16);
   9740     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9741         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 153, 1);
   9742     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_1, 5);
   9743     BCMI_KEYGEN_QUAL_CFG_INSERT
   9744         (unit, db, bcmFieldQualifyDstVxlanGports, qual_flags);
   9745 
   9746     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9747     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9748         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_0, 12, 88, 16);
   9749     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9750         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 152, 1);
   9751     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_0, 5);
   9752     BCMI_KEYGEN_QUAL_CFG_INSERT
   9753         (unit, db, bcmFieldQualifyDstVlanGport, qual_flags);
   9754 
   9755     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9756     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9757         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_1, 11, 104, 16);
   9758     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9759         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 153, 1);
   9760     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_1, 5);
   9761     BCMI_KEYGEN_QUAL_CFG_INSERT
   9762         (unit, db, bcmFieldQualifyDstVlanGport, qual_flags);
   9763 
   9764     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9765     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9766         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_0, 12, 88, 16);
   9767     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9768         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 152, 1);
   9769     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_0, 5);
   9770     BCMI_KEYGEN_QUAL_CFG_INSERT
   9771         (unit, db, bcmFieldQualifyDstVlanGports, qual_flags);
   9772 
   9773     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9774     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9775         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_1, 11, 104, 16);
   9776     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9777         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 153, 1);
   9778     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_1, 5);
   9779     BCMI_KEYGEN_QUAL_CFG_INSERT
   9780         (unit, db, bcmFieldQualifyDstVlanGports, qual_flags);
   9781 
   9782     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9783     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9784         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_0, 12, 88, 16);
   9785     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9786         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 152, 1);
   9787     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_0, 5);
   9788     BCMI_KEYGEN_QUAL_CFG_INSERT
   9789         (unit, db, bcmFieldQualifyDstWlanGport, qual_flags);
   9790 
   9791     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9792     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9793         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_1, 11, 104, 16);
   9794     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9795         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 153, 1);
   9796     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_1, 5);
   9797     BCMI_KEYGEN_QUAL_CFG_INSERT
   9798         (unit, db, bcmFieldQualifyDstWlanGport, qual_flags);
   9799 
   9800     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9801     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9802         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_0, 12, 88, 16);
   9803     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9804         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 152, 1);
   9805     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_0, 5);
   9806     BCMI_KEYGEN_QUAL_CFG_INSERT
   9807         (unit, db, bcmFieldQualifyDstWlanGports, qual_flags);
   9808 
   9809     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9810     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9811         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_1, 11, 104, 16);
   9812     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9813         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 153, 1);
   9814     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_1, 5);
   9815     BCMI_KEYGEN_QUAL_CFG_INSERT
   9816         (unit, db, bcmFieldQualifyDstWlanGports, qual_flags);
   9817 
   9818     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9819     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9820         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_0, 12, 88, 16);
   9821     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9822         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 152, 1);
   9823     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_0, 5);
   9824     BCMI_KEYGEN_QUAL_CFG_INSERT
   9825         (unit, db, bcmFieldQualifyDstMplsGport, qual_flags);
   9826 
   9827     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9828     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9829         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_1, 11, 104, 16);
   9830     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9831         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 153, 1);
   9832     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_1, 5);
   9833     BCMI_KEYGEN_QUAL_CFG_INSERT
   9834         (unit, db, bcmFieldQualifyDstMplsGport, qual_flags);
   9835 
   9836     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9837     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9838         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_0, 12, 88, 16);
   9839     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9840         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 152, 1);
   9841     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_0, 5);
   9842     BCMI_KEYGEN_QUAL_CFG_INSERT
   9843         (unit, db, bcmFieldQualifyDstMplsGports, qual_flags);
   9844 
   9845     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9846     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9847         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_1, 11, 104, 16);
   9848     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9849         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 153, 1);
   9850     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_1, 5);
   9851     BCMI_KEYGEN_QUAL_CFG_INSERT
   9852         (unit, db, bcmFieldQualifyDstMplsGports, qual_flags);
   9853 
   9854     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9855     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9856         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_0, 12, 88, 16);
   9857     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9858         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 152, 1);
   9859     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_0, 9);
   9860     BCMI_KEYGEN_QUAL_CFG_INSERT
   9861         (unit, db, bcmFieldQualifyDstL3EgressNextHops, qual_flags);
   9862 
   9863     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9864     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9865         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_0, 12, 88, 16);
   9866     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9867         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 152, 1);
   9868     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_0, 9);
   9869     BCMI_KEYGEN_QUAL_CFG_INSERT
   9870         (unit, db, bcmFieldQualifyDstL3Egress, qual_flags);
   9871 
   9872     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9873     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9874         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_1, 11, 104, 16);
   9875     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9876         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 153, 1);
   9877     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_1, 9);
   9878     BCMI_KEYGEN_QUAL_CFG_INSERT
   9879         (unit, db, bcmFieldQualifyDstL3EgressNextHops, qual_flags);
   9880 
   9881     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9882     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9883         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_1, 11, 104, 16);
   9884     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9885         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 153, 1);
   9886     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_1, 9);
   9887     BCMI_KEYGEN_QUAL_CFG_INSERT
   9888         (unit, db, bcmFieldQualifyDstL3Egress, qual_flags);
   9889 
   9890     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9891     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9892         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_0, 12, 88, 16);
   9893     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9894         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 152, 1);
   9895     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_0, 10);
   9896     BCMI_KEYGEN_QUAL_CFG_INSERT
   9897         (unit, db, bcmFieldQualifyDstL3EgressNextHopsUnderlay, qual_flags);
   9898 
   9899     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9900     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9901         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_0, 12, 88, 16);
   9902     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9903         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 152, 1);
   9904     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_0, 10);
   9905     BCMI_KEYGEN_QUAL_CFG_INSERT
   9906         (unit, db, bcmFieldQualifyDstL3EgressUnderlay, qual_flags);
   9907 
   9908     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9909     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9910         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_1, 11, 104, 16);
   9911     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9912         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 153, 1);
   9913     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_1, 10);
   9914     BCMI_KEYGEN_QUAL_CFG_INSERT
   9915         (unit, db, bcmFieldQualifyDstL3EgressNextHopsUnderlay, qual_flags);
   9916 
   9917     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9918     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9919         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_1, 11, 104, 16);
   9920     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9921         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 153, 1);
   9922     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_1, 9);
   9923     BCMI_KEYGEN_QUAL_CFG_INSERT
   9924         (unit, db, bcmFieldQualifyDstL3Egress, qual_flags);
   9925 
   9926     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9927     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9928         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_0, 12, 88, 16);
   9929     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9930         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 152, 1);
   9931     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_0, 7);
   9932     BCMI_KEYGEN_QUAL_CFG_INSERT
   9933         (unit, db, bcmFieldQualifyDstMultipath, qual_flags);
   9934 
   9935     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9936     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9937         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_1, 11, 104, 16);
   9938     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9939         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 153, 1);
   9940     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_1, 7);
   9941     BCMI_KEYGEN_QUAL_CFG_INSERT
   9942         (unit, db, bcmFieldQualifyDstMultipath, qual_flags);
   9943 
   9944     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9945     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9946         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_0, 12, 88, 16);
   9947     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9948         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 152, 1);
   9949     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_0, 7);
   9950     BCMI_KEYGEN_QUAL_CFG_INSERT
   9951         (unit, db, bcmFieldQualifyDstMultipathOverlay, qual_flags);
   9952 
   9953     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9954     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9955         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_1, 11, 104, 16);
   9956     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9957         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 153, 1);
   9958     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_1, 7);
   9959     BCMI_KEYGEN_QUAL_CFG_INSERT
   9960         (unit, db, bcmFieldQualifyDstMultipathOverlay, qual_flags);
   9961 
   9962     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9963     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9964         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_0, 12, 88, 16);
   9965     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9966         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 152, 1);
   9967     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_0, 8);
   9968     BCMI_KEYGEN_QUAL_CFG_INSERT
   9969         (unit, db, bcmFieldQualifyDstMultipathUnderlay, qual_flags);
   9970 
   9971     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9972     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9973         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_1, 11, 104, 16);
   9974     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9975         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 153, 1);
   9976     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_1, 8);
   9977     BCMI_KEYGEN_QUAL_CFG_INSERT
   9978         (unit, db, bcmFieldQualifyDstMultipathUnderlay, qual_flags);
   9979 
   9980     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9981     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9982         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_0, 12, 88, 16);
   9983     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9984         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 152, 1);
   9985     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_0, 11);
   9986     BCMI_KEYGEN_QUAL_CFG_INSERT
   9987         (unit, db, bcmFieldQualifyDstL3MulticastGroup, qual_flags);
   9988 
   9989     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9990     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9991         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_1, 11, 104, 16);
   9992     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
   9993         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 153, 1);
   9994     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_1, 11);
   9995     BCMI_KEYGEN_QUAL_CFG_INSERT
   9996         (unit, db, bcmFieldQualifyDstL3MulticastGroup, qual_flags);
   9997 
   9998     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
   9999     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
  10000         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_0, 12, 88, 16);
  10001     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
  10002         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 152, 1);
  10003     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_0, 12);
  10004     BCMI_KEYGEN_QUAL_CFG_INSERT
  10005         (unit, db, bcmFieldQualifyDstL2MulticastGroup, qual_flags);
  10006 
  10007     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
  10008     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
  10009         (0, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINER_1, 11, 104, 16);
  10010     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD
  10011         (1, BCMI_KEYGEN_EXT_SECTION_SRC_DST_CONTAINERS_MSB, 4, 153, 1);
  10012     BCMI_KEYGEN_QUAL_CFG_PRI_CTRL_SEL_ADD(BCMI_KEYGEN_EXT_CTRL_SEL_SRC_DST_1, 12);
  10013     BCMI_KEYGEN_QUAL_CFG_INSERT
  10014         (unit, db, bcmFieldQualifyDstL2MulticastGroup, qual_flags);
  10015 
  10016     /* Non Post MUX qualifiers initialization starts from here */
  10017     sal_memset(&qual_flags, 0, sizeof(bcmi_keygen_qual_flags_bmp_t));
  10018     if (SOC_IS_HELIX5(unit)) {
  10019         /* WIRED_WIRELESS */
  10020         BCMI_KEYGEN_QUAL_CFG_INIT(unit);
  10021         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E2, 27, 54, 1);
  10022         BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyCosMapSelect, qual_flags);
  10023     }
  10024     if (soc_feature(unit, soc_feature_flex_flowtracker_ver_1)) {
  10025 
  10026         /* BROADSCAN_LEARN */
  10027         BCMI_KEYGEN_QUAL_CFG_INIT(unit);
  10028         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E2, 27, 54 + 1, 1);
  10029         BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyFlowtrackerLearn, qual_flags);
  10030 
  10031         /* BROADSCAN_GROUP_ID */
  10032         BCMI_KEYGEN_QUAL_CFG_INIT(unit);
  10033         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 52, 832, 16);
  10034         BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyFlowtrackerGroupId, qual_flags);
  10035 
  10036         /* BROADSCAN_EVENT_VECTOR */
  10037         /* GROUP_VALID */
  10038         BCMI_KEYGEN_QUAL_CFG_INIT(unit);
  10039         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 51, 816, 1);
  10040         BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyFlowtrackerGroupValid, qual_flags);
  10041 
  10042         /* DO_NOT_FT */
  10043         BCMI_KEYGEN_QUAL_CFG_INIT(unit);
  10044         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 51, 816 + 1, 1);
  10045         BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyFlowtrackerDisabled, qual_flags);
  10046 
  10047         /* ALU16_EVENTS */
  10048         BCMI_KEYGEN_QUAL_CFG_INIT(unit);
  10049         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 51, 816 + 2, 8);
  10050         BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyFlowtrackerCheck, qual_flags);
  10051 
  10052         /* INITIAL_OR_SAMPLE_COPY_TO_COLLECTOR */
  10053         BCMI_KEYGEN_QUAL_CFG_INIT(unit);
  10054         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 51, 816 + 10, 1);
  10055         BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyFlowtrackerCollectorCopy, qual_flags);
  10056 
  10057         /* FLOW_METER_EXCEED */
  10058         BCMI_KEYGEN_QUAL_CFG_INIT(unit);
  10059         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 51, 816 + 11, 1);
  10060         BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyFlowtrackerMeteringExceeded, qual_flags);
  10061 
  10062         /* FT_TABLE_FULL */
  10063         BCMI_KEYGEN_QUAL_CFG_INIT(unit);
  10064         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 51, 816 + 12, 1);
  10065         BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyFlowtrackerFlowTableFull, qual_flags);
  10066 
  10067         /* GROUP_FLOW_EXCEED */
  10068         BCMI_KEYGEN_QUAL_CFG_INIT(unit);
  10069         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 51, 816 + 13, 1);
  10070         BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyFlowtrackerGroupFlowExceeded, qual_flags);
  10071 
  10072         /* EXPORT_FIFO_FULL */
  10073         BCMI_KEYGEN_QUAL_CFG_INIT(unit);
  10074         BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 51, 816 + 14, 1);
  10075         BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyFlowtrackerExportQueueFull, qual_flags);
  10076 
  10077         /* BROADSCAN_INDEX_VALID */
  10078     }
  10079 
  10080     /* FCOE_VSAN_ID (40) */
  10081     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
  10082     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 40, 640, 16);
  10083     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyFibreChanVFTVsanId, qual_flags);
  10084 
  10085     /* PKT_FLOW_ID_0 (39) - 624 */
  10086     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
  10087     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 39, 628, 8);
  10088     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyFrontPanelPkt, qual_flags);
  10089 
  10090     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
  10091     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 39, 628, 8);
  10092     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyLoopbackType, qual_flags);
  10093 
  10094     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
  10095     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 39, 628, 8);
  10096     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyHiGigProxyTunnelType, qual_flags);
  10097 
  10098     /* PKT_FLOW_ID_1 (38) - 608 */
  10099     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
  10100     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 38, 608, 6);
  10101     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyTunnelSubType, qual_flags);
  10102 
  10103     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
  10104     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 38, 618, 4);
  10105     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyTunnelType, qual_flags);
  10106 
  10107     /* LOOKUP_STATUS_VECTOR_4 - 19th Bit */
  10108     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
  10109     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 14, 59, 1);
  10110     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyIpmcStarGroupHit, qual_flags);
  10111 
  10112     /* LOOKUP_STATUS_VECTOR_5 - 23rd Bit */
  10113     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
  10114     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E4, 15, 63, 1);
  10115     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyL3DestRouteHit, qual_flags);
  10116 
  10117     /************* 2 BIT Section **********/
  10118     /* L3_TYPE_1 - 1st Bit */
  10119     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
  10120     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E2, 3, 7, 1);
  10121     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyPimBidirDfStatus, qual_flags);
  10122 
  10123     /* CW_VALID_PROTECTION_DROP - 1st Bit */
  10124     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
  10125     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E2, 25, 51, 1);
  10126     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyRecoverableDrop, qual_flags);
  10127 
  10128 
  10129     /* 8 BIT Section - BFD_BUS (IFP_BFD_BUS_FORMAT) */
  10130     /* MPLS_CONTROL_PKT */
  10131     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
  10132     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 16, 128, 1);
  10133     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyMplsControlPkt, qual_flags);
  10134 
  10135     /* GOOD_BFD_PKT */
  10136     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
  10137     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 16, 129, 1);
  10138     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyBfdGoodPkt, qual_flags);
  10139 
  10140     /* BFD_DIP_LOOPBACK */
  10141     BCMI_KEYGEN_QUAL_CFG_INIT(unit);
  10142     BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E8, 16, 130, 1);
  10143     BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, bcmFieldQualifyBfdPktWithDstIpLoopbackAddr, qual_flags);
  10144 
  10145 
  10146     if (!soc_feature(unit, soc_feature_ifp_no_inports_support)) {
  10147        /* OPAQUE_3 */
  10148        BCMI_KEYGEN_QUAL_CFG_INIT(unit);
  10149        BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 44, 704, 16);
  10150        BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, _bcmFieldQualifyInPorts_1, qual_flags);
  10151 
  10152        /* OPAQUE_4 */
  10153        BCMI_KEYGEN_QUAL_CFG_INIT(unit);
  10154        BCMI_KEYGEN_QUAL_CFG_OFFSET_ADD(0, BCMI_KEYGEN_EXT_SECTION_L1E16, 45, 720, 16);
  10155        BCMI_KEYGEN_QUAL_CFG_INSERT(unit, db, _bcmFieldQualifyInPorts_2, qual_flags);
  10156     }
  10157 
  10158 
  10159     return _field_td3_flex_extractor_qual_init(unit, stage_fc);
  10160 
  10161 exit:
  10162     BCMI_KEYGEN_FUNC_EXIT();
  10163 }
  10164 
  10165 /*
  10166  * Function: _bcm_field_td3_ForwardingType_set
  10167  *
  10168  * Purpose:
  10169  *     Add qualification data to an entry for IP Type.
  10170  *
  10171  * Parameters:
  10172  *     unit     - (IN) BCM unit number.
  10173  *     stage_id - (IN) Stage ID.
  10174  *     entry    - (IN) Entry ID.
  10175  *     type     - (IN) Forwarding type.
  10176  *     data     - (OUT) Data.
  10177  *     mask     - (OUT) Mask.
  10178  *
  10179  * Returns:
  10180  *     BCM_E_XXX
  10181  */
  10182 int
  10183 _bcm_field_td3_forwardingType_set(int unit, _field_stage_id_t stage_id,
  10184                                  bcm_field_entry_t entry,
  10185                                  bcm_field_ForwardingType_t type,
  10186                                  uint32 *data, uint32 *mask)
  10187 {
  10188 
  10189     if (NULL == data || NULL == mask) {
  10190        return BCM_E_PARAM;
  10191     }
  10192 
  10193     switch (stage_id) {
  10194        case _BCM_FIELD_STAGE_INGRESS:
  10195        case _BCM_FIELD_STAGE_EXACTMATCH:
  10196        case _BCM_FIELD_STAGE_FLOWTRACKER:
  10197            switch (type) {
  10198             case bcmFieldForwardingTypeAny:
  10199                 *data = 0;
  10200                 *mask = 0;
  10201                 break;
  10202             case bcmFieldForwardingTypeL2:
  10203                 *data = 0;
  10204                 *mask = 0xE;
  10205                 break;
  10206             case bcmFieldForwardingTypeL2Independent:
  10207                 *data = 0;
  10208                 *mask = 0xF;
  10209                 break;
  10210             case bcmFieldForwardingTypeL2Shared:
  10211                 *data = 1;
  10212                 *mask = 0xF;
  10213                 break;
  10214             case bcmFieldForwardingTypeL2Vpn:
  10215                 *data = 2;
  10216                 *mask = 0xF;
  10217                 break;
  10218             case bcmFieldForwardingTypeL2SharedVpn:
  10219                 *data = 3;
  10220                 *mask = 0xF;
  10221                 break;
  10222             case bcmFieldForwardingTypePortDirect:
  10223                 *data = 4;
  10224                 *mask = 0xF;
  10225                 break;
  10226             case bcmFieldForwardingTypeSvpDirect:
  10227                 *data = 5;
  10228                 *mask = 0xF;
  10229                 break;
  10230             case bcmFieldForwardingTypeVlanDirect:
  10231                 *data = 6;
  10232                 *mask = 0xF;
  10233                 break;
  10234             case bcmFieldForwardingTypeL2VpnDirect:
  10235 /* PTP_VFI */
  10236                 *data = 7;
  10237                 *mask = 0xF;
  10238                 break;
  10239             case bcmFieldForwardingTypeL3:
  10240                 *data = 8;
  10241                 *mask = 0xF;
  10242                 break;
  10243             case bcmFieldForwardingTypeL3Direct:
  10244                 *data = 9;
  10245                 *mask = 0xF;
  10246                 break;
  10247             case bcmFieldForwardingTypeMpls:
  10248                 *data = 10;
  10249                 *mask = 0xF;
  10250                 break;
  10251             default:
  10252                return (BCM_E_PARAM);
  10253           }
  10254           break;
  10255       default:
  10256           return BCM_E_INTERNAL;
  10257     }
  10258 
  10259     return BCM_E_NONE;
  10260 }
  10261 
  10262 /*
  10263  * Function:
  10264  *      _bcm_field_td3_forwardingType_get
  10265  * Purpose:
  10266  *      Get match criteria for bcmFieildQualifyForwardingType
  10267  *                     qualifier from the field entry.
  10268  * Parameters:
  10269  *      unit     - (IN) Unit number.
  10270  *      stage_id - (IN) Stage ID.
  10271  *      entry    - (IN) BCM field entry id.
  10272  *      type     - (OUT) Qualifier match forwarding type.
  10273  * Returns:
  10274  *      BCM_E_XXX
  10275  * Notes:
  10276  */
  10277 int
  10278 _bcm_field_td3_forwardingType_get(int unit, _field_stage_id_t stage_id,
  10279                                  bcm_field_entry_t entry,
  10280                                  uint32 data,  uint32 mask,
  10281                                  bcm_field_ForwardingType_t *type)
  10282 {
  10283     if (NULL == type) {
  10284        return BCM_E_PARAM;
  10285     }
  10286 
  10287     switch (stage_id) {
  10288        case _BCM_FIELD_STAGE_INGRESS:
  10289        case _BCM_FIELD_STAGE_EXACTMATCH:
  10290        case _BCM_FIELD_STAGE_FLOWTRACKER:
  10291           if ((0 == data) && (mask == 0)) {
  10292               *type = bcmFieldForwardingTypeAny;
  10293           } else if ((0 == data) && (mask == 0xE)) {
  10294               *type = bcmFieldForwardingTypeL2;
  10295           } else if ((0 == data) && (mask == 0xF)) {
  10296               *type = bcmFieldForwardingTypeL2Independent;
  10297           } else if ((1 == data) && (mask == 0xF)) {
  10298               *type = bcmFieldForwardingTypeL2Shared;
  10299           } else if ((2 == data) && (mask == 0xF)) {
  10300               *type =  bcmFieldForwardingTypeL2Vpn;
  10301           } else if ((7 == data) && (mask == 0xF)) {
  10302               *type = bcmFieldForwardingTypeL2VpnDirect;
  10303           } else if ((9 == data) && (mask == 0xF)) {
  10304               *type = bcmFieldForwardingTypeL3Direct;
  10305           } else if ((8 == data) && (mask == 0xF)) {
  10306               *type = bcmFieldForwardingTypeL3;
  10307           } else if ((10 == data) && (mask == 0xF)) {
  10308               *type = bcmFieldForwardingTypeMpls;
  10309           } else {
  10310               return (BCM_E_INTERNAL);
  10311           }
  10312            break;
  10313        default:
  10314            return BCM_E_INTERNAL;
  10315     }
  10316 
  10317     return BCM_E_NONE;
  10318 }
  10319 /* Function    : _bcm_field_td3_tpid_hw_encode
  10320  * Description : Encode tpid value to hw specific value.
  10321  * Parameters  : (IN) unit   BCM driver unit
  10322  *               (IN) tpid   TPID to encode
  10323  *               (OUT) hw_code HW code.
  10324  * Returns     : BCM_E_XXX
  10325  */
  10326 int
  10327 _bcm_field_td3_tpid_hw_encode(int unit, uint16 tpid, uint16 outer_tpid,
  10328                                                      uint32 *hw_code)
  10329 {
  10330     int rv = BCM_E_NONE;  /* Operation return status. */
  10331     soc_reg_t *tpid_r;
  10332     uint32 reg_val;
  10333     uint16 tpid_value;
  10334     int idx;
  10335 
  10336     if (outer_tpid == 1) {
  10337 	tpid_r = outer_tpid_r;
  10338     } else {
  10339 	tpid_r = inner_tpid_r;
  10340     }
  10341     for (idx=0; idx<4; idx++) {
  10342 	BCM_IF_ERROR_RETURN(soc_reg32_get(unit, tpid_r[idx],
  10343                                              REG_PORT_ANY, 0,
  10344                                              &reg_val));
  10345         tpid_value = soc_reg_field_get(unit, tpid_r[idx],
  10346                                              reg_val, TPIDf);
  10347 	if (tpid == tpid_value) {
  10348 	    *hw_code = idx;
  10349 	    break;
  10350 	}
  10351     }
  10352     if (idx == 4) {
  10353     /* None of the TPID REG values matched with
  10354      * the user qualified value. Return error */
  10355       rv = (BCM_E_UNAVAIL);
  10356     }
  10357     return rv;
  10358 }
  10359 /* Function    : _field_tpid_hw_decode
  10360  * Description : Encode tpid value to hw specific value.
  10361  * Parameters  : (IN) unit   BCM driver unit
  10362  *               (IN) hw_code HW code.
  10363  *               (OUT) tpid  decoded TPID
  10364  * Returns     : BCM_E_XXX
  10365  */
  10366 int
  10367 _bcm_field_td3_tpid_hw_decode(int unit, uint32 hw_code, uint16 outer_tpid,
  10368                                                            uint16 *tpid)
  10369 {
  10370     soc_reg_t *tpid_r;
  10371     uint32 reg_val;
  10372 
  10373     if (outer_tpid == 1) {
  10374 	tpid_r = outer_tpid_r;
  10375     } else {
  10376 	tpid_r = inner_tpid_r;
  10377     }
  10378     if (hw_code >= 4) {
  10379         return (BCM_E_PARAM);
  10380     }
  10381     BCM_IF_ERROR_RETURN(soc_reg32_get(unit, tpid_r[hw_code],
  10382                                       REG_PORT_ANY, 0,
  10383                                       &reg_val));
  10384     *tpid = soc_reg_field_get(unit, tpid_r[hw_code],
  10385                               reg_val, TPIDf);
  10386     return (BCM_E_NONE);
  10387 }
  10388 
  10389 /* Function    : _field_td3_drop_vector_mask_init
  10390  * Description : To initialize drop vector mask for IFP and EM stages.
  10391  * Parameters  : (IN) unit   BCM driver unit
  10392  *               (IN) stage.
  10393  *               (OUT) Drop vector in Hw set to default values
  10394  * Returns     : BCM_E_XXX
  10395  */
  10396 int
  10397 _bcm_field_td3_drop_vector_mask_init(int unit)
  10398 {
  10399     uint32 drop_vector_mask[3];
  10400     uint32 entry_buf[_BCM_FP_MEM_FIELD_BYTES] = {0};
  10401     soc_format_t fmt = PKT_PROC_DROP_VECTORfmt;
  10402 
  10403 
  10404      /* drop vector mask is 96 bits width. Setting all bits to 1. */
  10405      sal_memset(drop_vector_mask, -1, sizeof(uint32) * 3);
  10406 
  10407      /* clear the entry */
  10408      sal_memset(entry_buf, 0x0, sizeof(entry_buf));
  10409      /* IFP_EM_DROP_VECTOR_MASK_PROFILE_1 for IFP_TCAM */
  10410      soc_mem_field_set(unit, IFP_EM_DROP_VECTOR_MASK_PROFILE_1m,
  10411                        entry_buf, IFP_EM_KEY_MASK_0f, drop_vector_mask);
  10412      soc_mem_field_set(unit, IFP_EM_DROP_VECTOR_MASK_PROFILE_1m,
  10413                        entry_buf, IFP_EM_KEY_MASK_1f, drop_vector_mask);
  10414      /* MEM write */
  10415      BCM_IF_ERROR_RETURN(soc_mem_write(unit,
  10416                        IFP_EM_DROP_VECTOR_MASK_PROFILE_1m,
  10417                        MEM_BLOCK_ANY, 1, entry_buf));
  10418 
  10419      /* clear the entry for writing profile 0*/
  10420      sal_memset(entry_buf, 0x0, sizeof(entry_buf));
  10421      /* PFMf */
  10422      soc_format_field32_set(unit, fmt, drop_vector_mask, PFMf, 0);
  10423      /* PVLAN_VP_EFILTERf */
  10424      soc_format_field32_set(unit, fmt, drop_vector_mask, PVLAN_VP_EFILTERf, 0);
  10425      /* MC_PBM_ZEROf */
  10426      soc_format_field32_set(unit, fmt, drop_vector_mask, RESERVED_81f, 0);
  10427      /* MULTICAST_INDEX_ERRORf */
  10428      soc_format_field32_set(unit, fmt, drop_vector_mask, MULTICAST_INDEX_ERRORf, 0);
  10429 
  10430      /* IFP_EM_DROP_VECTOR_MASK_PROFILE_0 is for IFP_LOGICAL_TABLE_SELECT */
  10431      soc_mem_field_set(unit, IFP_EM_DROP_VECTOR_MASK_PROFILE_0m, entry_buf,
  10432                        IFP_EM_LOGICAL_TABLE_SELECT_KEY_MASKf, drop_vector_mask);
  10433      /* MEM write */
  10434      BCM_IF_ERROR_RETURN(soc_mem_write(unit,
  10435                        IFP_EM_DROP_VECTOR_MASK_PROFILE_0m,
  10436                        MEM_BLOCK_ANY, 1, entry_buf));
  10437      return (BCM_E_NONE);
  10438 }
  10439 
  10440 STATIC
  10441 _flex_ceh_field_type_t flex_pkt_type_arr[bcmFieldPktTypeLastCount] = {
  10442     {"MPLS"},
  10443     {"MPLS"},
  10444     {"MPLS_1_LABEL"},
  10445     {"MPLS_2_LABEL"},
  10446     {"MPLS_3_LABEL"},
  10447     {"MPLS_4_LABEL"},
  10448     {"MPLS_5_LABEL"},
  10449     {"MPLS_6_LABEL"},
  10450     {"MPLS_7_LABEL"},
  10451     {"MPLS_MORE_THAN_7_LABEL"},
  10452     {"FCOE"},
  10453     {"FCOE"},
  10454     {"FCOE_VFT"},
  10455     {"FCOE_ENCAP"},
  10456     {"FCOE_IFR"},
  10457     {"FCOE_STD"},
  10458     {"FCOE_VFT_STD"},
  10459     {"FCOE_ENCAP_STD"},
  10460     {"FCOE_IFR_STD"},
  10461     {"FIP"},
  10462     {"1588"},
  10463     {"ARP"},
  10464     {"RARP"},
  10465     {"UNKNOWN_ETHERTYPE"},
  10466     {"MIM"},
  10467     {"OAM"},
  10468     {"CNM"},
  10469     {"NSH_OVER_L2"},
  10470     {"NSH_OVER_MPLS_1_LABEL"},
  10471     {"NSH_OVER_MPLS_2_LABEL"},
  10472     {"IPV4"},
  10473     {"IPV4"},
  10474     {"NSH"},
  10475     {"GPE_NSH"},
  10476     {"GRE"},
  10477     {"BFD"},
  10478     {"VXLAN"},
  10479     {"GPE"},
  10480     {"GENEVE_NSH"},
  10481     {"1588_UDP"},
  10482     {"VXLAN_FLEX"},
  10483     {"IPINIP"},
  10484     {"IPINGRE"},
  10485     {"NVGRE"},
  10486     {"GENEVE"},
  10487     {"GUE"},
  10488     {"TCP"},
  10489     {"UDP"},
  10490     {"ICMP"},
  10491     {"IGMP"},
  10492     {"IP_WITH_EXTRA_4_BYTES"},
  10493     {"SCTP"},
  10494     {"MPLS_IN_IP_WITH_ONE_LABEL"},
  10495     {"MPLS_IN_IP_WITH_ONE_LABEL"},
  10496     {"MPLS_IN_IP_WITH_TWO_LABEL"},
  10497     {"MPLS_IN_IP_WITH_THREE_LABEL"},
  10498     {"MPLS_IN_IP_WITH_FOUR_LABEL"},
  10499     {"MPLS_IN_IP_WITH_ONE_LABEL_AND_CW"},
  10500     {"MPLS_IN_IP_WITH_ONE_LABEL_AND_CW"},
  10501     {"MPLS_IN_IP_WITH_TWO_LABEL_AND_CW"},
  10502     {"MPLS_IN_IP_WITH_THREE_LABEL_AND_CW"},
  10503     {"MPLS_IN_IP_WITH_FOUR_LABEL_AND_CW"},
  10504     {"IPV6"},
  10505     {"IPV6"},
  10506     {"NSH"},
  10507     {"GPE_NSH"},
  10508     {"GRE"},
  10509     {"BFD"},
  10510     {"VXLAN"},
  10511     {"GPE"},
  10512     {"GENEVE_NSH"},
  10513     {"1588_UDP"},
  10514     {"VXLAN_FLEX"},
  10515     {"IPINIP"},
  10516     {"IPINGRE"},
  10517     {"NVGRE"},
  10518     {"GENEVE"},
  10519     {"GUE"},
  10520     {"TCP"},
  10521     {"UDP"},
  10522     {"ICMP"},
  10523     {"IGMP"},
  10524     {"IP_WITH_EXTRA_4_BYTES"},
  10525     {"SCTP"},
  10526     {"MPLS_IN_IP_WITH_ONE_LABEL"},
  10527     {"MPLS_IN_IP_WITH_ONE_LABEL"},
  10528     {"MPLS_IN_IP_WITH_TWO_LABEL"},
  10529     {"MPLS_IN_IP_WITH_THREE_LABEL"},
  10530     {"MPLS_IN_IP_WITH_FOUR_LABEL"},
  10531     {"MPLS_IN_IP_WITH_ONE_LABEL_AND_CW"},
  10532     {"MPLS_IN_IP_WITH_ONE_LABEL_AND_CW"},
  10533     {"MPLS_IN_IP_WITH_TWO_LABEL_AND_CW"},
  10534     {"MPLS_IN_IP_WITH_THREE_LABEL_AND_CW"},
  10535     {"MPLS_IN_IP_WITH_FOUR_LABEL_AND_CW"},
  10536     {"NSH_OVER_MPLS_3_LABEL"},
  10537     {"INT"},
  10538     {"INT"},
  10539     {"INT"},
  10540     {"GPE_INT"},
  10541     {"GPE_INT"},
  10542     {"GPE_INT"},
  10543     {"TCP_INT"},
  10544     {"TCP_INT"},
  10545     {"TCP_INT"},
  10546 };
  10547 
  10548 int
  10549 _bcm_field_td3_qualify_PktType(int unit, bcm_field_pkt_type_t type,
  10550                                uint32 *data, uint32 *mask)
  10551 {
  10552     int rv;
  10553     uint32 mplsType = 0x0;
  10554     uint32 fcoEType = 0x0;
  10555     uint32 ipv4Type = 0x0;
  10556     uint32 ipv6Type = 0x0;
  10557     uint32 hw_data = 0x0;
  10558     uint32 hw_mask = 0x0;
  10559 
  10560     soc_cancun_ceh_field_info_t ceh_info;
  10561 
  10562     rv = (soc_cancun_ceh_obj_field_get(unit, "Z2_MATCH_ID",
  10563                                        flex_pkt_type_arr[type].field_str,
  10564                                        &ceh_info));
  10565     if (SOC_FAILURE(rv)) {
  10566        LOG_ERROR(BSL_LS_BCM_FP, (BSL_META(
  10567                "type:%d obj_str:%s field_str:%s\n\r"), type, "Z2_MATCH_ID",
  10568                flex_pkt_type_arr[type].field_str));
  10569        /*
  10570         * Ignore if CANCUN mapping was not found. Could be the Mapping is no longer
  10571         * supported in the current CANCUN release or for this chip.
  10572         */
  10573        rv  = (BCM_E_NOT_FOUND == rv) ? (BCM_E_UNAVAIL) : rv ;
  10574        return rv;
  10575     }
  10576     if (sal_strcmp(flex_pkt_type_arr[type].field_str, "MPLS") == 0) {
  10577        mplsType = ceh_info.value;
  10578     } else if (sal_strcmp(flex_pkt_type_arr[type].field_str, "FCOE") == 0) {
  10579        fcoEType = ceh_info.value;
  10580     } else if (sal_strcmp(flex_pkt_type_arr[type].field_str, "IPV4") == 0) {
  10581        ipv4Type = ceh_info.value;
  10582     } else if (sal_strcmp(flex_pkt_type_arr[type].field_str, "IPV6") == 0) {
  10583        ipv6Type = ceh_info.value;
  10584     }
  10585 
  10586     hw_mask = (1 << ceh_info.width) - 1;
  10587     hw_data = ceh_info.value;
  10588 
  10589     LOG_DEBUG(BSL_LS_BCM_FP, (BSL_META_U(unit,
  10590              "Type:%d - offset:%d width:%d value:%d data:0x%x mask:0x%x\n\r"),
  10591              type, ceh_info.offset, ceh_info.width, ceh_info.value, hw_data, hw_mask));
  10592 
  10593     switch (type) {
  10594        case bcmFieldPktTypeMplsNot:
  10595             *data = 0;
  10596             *mask = mplsType;
  10597             break;
  10598        case bcmFieldPktTypeMplsAny:
  10599             *data = mplsType;
  10600             *mask = mplsType;
  10601             break;
  10602        case bcmFieldPktTypeFCoENot:
  10603             *data = 0;
  10604             *mask = fcoEType;
  10605             break;
  10606        case bcmFieldPktTypeFCoEAny:
  10607             *data = fcoEType;
  10608             *mask = fcoEType;
  10609             break;
  10610        case bcmFieldPktTypeIp4Not:
  10611             *data = 0x0;
  10612             *mask = ipv4Type;
  10613             break;
  10614        case bcmFieldPktTypeIp4Any:
  10615             *data = ipv4Type;
  10616             *mask = ipv4Type;
  10617             break;
  10618        case bcmFieldPktTypeIp4Nsh:
  10619        case bcmFieldPktTypeIp4GpeNsh:
  10620        case bcmFieldPktTypeIp4Gre:
  10621        case bcmFieldPktTypeIp4Bfd:
  10622        case bcmFieldPktTypeIp4Vxlan:
  10623        case bcmFieldPktTypeIp4Gpe:
  10624        case bcmFieldPktTypeIp4GeneveNsh:
  10625        case bcmFieldPktTypeIp41588Udp:
  10626        case bcmFieldPktTypeIp4VxlanFlex:
  10627        case bcmFieldPktTypeIp4IPinIP:
  10628        case bcmFieldPktTypeIp4IPinGre:
  10629        case bcmFieldPktTypeIp4Nvgre:
  10630        case bcmFieldPktTypeIp4Geneve:
  10631        case bcmFieldPktTypeIp4Gue:
  10632        case bcmFieldPktTypeIp4Tcp:
  10633        case bcmFieldPktTypeIp4Udp:
  10634        case bcmFieldPktTypeIp4Icmp:
  10635        case bcmFieldPktTypeIp4Igmp:
  10636        case bcmFieldPktTypeIp4IpWithExtra4Bytes:
  10637        case bcmFieldPktTypeIp4Sctp:
  10638        case bcmFieldPktTypeIpv4UdpINT:
  10639        case bcmFieldPktTypeIpv4IOAM:
  10640        case bcmFieldPktTypeIpv4TcpINT:
  10641        case bcmFieldPktTypeIp4MplsInIpAny:
  10642        case bcmFieldPktTypeIp4MplsInIpWithOneLabel:
  10643        case bcmFieldPktTypeIp4MplsInIpWithTwoLabel:
  10644        case bcmFieldPktTypeIp4MplsInIpWithThreeLabel:
  10645        case bcmFieldPktTypeIp4MplsInIpWithFourLabel:
  10646        case bcmFieldPktTypeIp4MplsInIpWithAnyCw:
  10647        case bcmFieldPktTypeIp4MplsInIpWithOneLabelAndCw:
  10648        case bcmFieldPktTypeIp4MplsInIpWithTwoLabelAndCw:
  10649        case bcmFieldPktTypeIp4MplsInIpWithThreeLabelAndCw:
  10650        case bcmFieldPktTypeIp4MplsInIpWithFourLabelAndCw:
  10651             rv = (soc_cancun_ceh_obj_field_get(unit, "Z2_MATCH_ID",
  10652                                                "IPV4", &ceh_info));
  10653             if (SOC_FAILURE(rv)) {
  10654                LOG_ERROR(BSL_LS_BCM_FP, (BSL_META("type:%d obj_str:%s field_str:%s\n\r"),
  10655                          type, "Z2_MATCH_ID", "IPV4"));
  10656                return rv;
  10657             }
  10658             *mask = (1 << ceh_info.width) - 1;
  10659             *data = ((hw_data << ceh_info.width) | ceh_info.value);
  10660             *mask = ((hw_mask << ceh_info.width) | *mask);
  10661             break;
  10662 
  10663        case bcmFieldPktTypeIp6Not:
  10664             *data = 0x0;
  10665             *mask = ipv6Type;
  10666             break;
  10667        case bcmFieldPktTypeIp6Any:
  10668             *data = ipv6Type;
  10669             *mask = ipv6Type;
  10670             break;
  10671        case bcmFieldPktTypeIp6Nsh:
  10672        case bcmFieldPktTypeIp6GpeNsh:
  10673        case bcmFieldPktTypeIp6Gre:
  10674        case bcmFieldPktTypeIp6Bfd:
  10675        case bcmFieldPktTypeIp6Vxlan:
  10676        case bcmFieldPktTypeIp6Gpe:
  10677        case bcmFieldPktTypeIp6GeneveNsh:
  10678        case bcmFieldPktTypeIp61588Udp:
  10679        case bcmFieldPktTypeIp6VxlanFlex:
  10680        case bcmFieldPktTypeIp6IPinIP:
  10681        case bcmFieldPktTypeIp6IPinGre:
  10682        case bcmFieldPktTypeIp6Nvgre:
  10683        case bcmFieldPktTypeIp6Geneve:
  10684        case bcmFieldPktTypeIp6Gue:
  10685        case bcmFieldPktTypeIp6Tcp:
  10686        case bcmFieldPktTypeIp6Udp:
  10687        case bcmFieldPktTypeIp6Icmp:
  10688        case bcmFieldPktTypeIp6Igmp:
  10689        case bcmFieldPktTypeIp6IpWithExtra4Bytes:
  10690        case bcmFieldPktTypeIp6Sctp:
  10691        case bcmFieldPktTypeIpv6UdpINT:
  10692        case bcmFieldPktTypeIpv6IOAM:
  10693        case bcmFieldPktTypeIpv6TcpINT:
  10694        case bcmFieldPktTypeIp6MplsInIpAny:
  10695        case bcmFieldPktTypeIp6MplsInIpWithOneLabel:
  10696        case bcmFieldPktTypeIp6MplsInIpWithTwoLabel:
  10697        case bcmFieldPktTypeIp6MplsInIpWithThreeLabel:
  10698        case bcmFieldPktTypeIp6MplsInIpWithFourLabel:
  10699        case bcmFieldPktTypeIp6MplsInIpWithAnyCw:
  10700        case bcmFieldPktTypeIp6MplsInIpWithOneLabelAndCw:
  10701        case bcmFieldPktTypeIp6MplsInIpWithTwoLabelAndCw:
  10702        case bcmFieldPktTypeIp6MplsInIpWithThreeLabelAndCw:
  10703        case bcmFieldPktTypeIp6MplsInIpWithFourLabelAndCw:
  10704             rv = (soc_cancun_ceh_obj_field_get(unit, "Z2_MATCH_ID",
  10705                                                "IPV6", &ceh_info));
  10706             if (SOC_FAILURE(rv)) {
  10707                LOG_ERROR(BSL_LS_BCM_FP, (BSL_META("type:%d obj_str:%s field_str:%s\n\r"),
  10708                         type, "Z2_MATCH_ID", "IPV6"));
  10709                return rv;
  10710             }
  10711             *mask = (1 << ceh_info.width) - 1;
  10712             *data = ((hw_data << ceh_info.width) | ceh_info.value);
  10713             *mask = ((hw_mask << ceh_info.width) | *mask);
  10714             break;
  10715 
  10716        case bcmFieldPktTypeUdpINT:
  10717        case bcmFieldPktTypeIOAM:
  10718        case bcmFieldPktTypeTcpINT:
  10719             rv = (soc_cancun_ceh_obj_field_get(unit, "Z2_MATCH_ID",
  10720                                                "IPV4", &ceh_info));
  10721             if (SOC_FAILURE(rv)) {
  10722                LOG_ERROR(BSL_LS_BCM_FP, (BSL_META("type:%d obj_str:%s field_str:%s\n\r"),
  10723                          type, "Z2_MATCH_ID", "IPV4"));
  10724                return rv;
  10725             }
  10726             *data = (hw_data << ceh_info.width);
  10727             *mask = (hw_mask << ceh_info.width);
  10728             break;
  10729 
  10730        default:
  10731             *data = hw_data;
  10732             *mask = hw_mask;
  10733             break;
  10734     }
  10735 
  10736     return BCM_E_NONE;
  10737 }
  10738 
  10739 
  10740 int
  10741 _bcm_field_td3_qualify_PktType_get(int unit,
  10742                                    uint32 data,
  10743                                    uint32 mask,
  10744                                    bcm_field_pkt_type_t *type)
  10745 {
  10746     int rv;
  10747     int idx;
  10748     uint32 mplsType = 0x0;
  10749     uint32 fcoEType = 0x0;
  10750     uint32 ipv4Type = 0x0;
  10751     uint32 ipv6Type = 0x0;
  10752     uint32 ipv4Mask = 0x0;
  10753     uint32 ipv6Mask = 0x0;
  10754     uint32 ipv4Width = 0x0;
  10755     uint32 ipv6Width = 0x0;
  10756     uint8 hw_data = 0;
  10757     uint8 hw_mask = 0;
  10758     soc_cancun_ceh_field_info_t ceh_info;
  10759 
  10760     *type = bcmFieldPktTypeLastCount;
  10761 
  10762     /* Check if it is generic INT type (for v4/v6 over UDP) */
  10763     rv = (soc_cancun_ceh_obj_field_get(unit, "Z2_MATCH_ID",
  10764                                        "INT", &ceh_info));
  10765     if (SOC_FAILURE(rv)) {
  10766        LOG_ERROR(BSL_LS_BCM_FP, (BSL_META("obj_str:%s field_str:%s\n\r"),
  10767                  "Z2_MATCH_ID", "INT"));
  10768        return rv;
  10769     }
  10770     if ((data == ceh_info.value) && (mask == ((1 << ceh_info.width) - 1))) {
  10771        *type = bcmFieldPktTypeUdpINT;
  10772        return rv;
  10773     }
  10774 
  10775     /* Check if it is generic IOAM type (without IP) */
  10776     rv = (soc_cancun_ceh_obj_field_get(unit, "Z2_MATCH_ID",
  10777                                        "GPE_INT", &ceh_info));
  10778     if (SOC_FAILURE(rv)) {
  10779        LOG_ERROR(BSL_LS_BCM_FP, (BSL_META("obj_str:%s field_str:%s\n\r"),
  10780                    "Z2_MATCH_ID", "GPE_INT"));
  10781        return rv;
  10782     }
  10783     if ((data == ceh_info.value) && (mask == ((1 << ceh_info.width) - 1))) {
  10784        *type = bcmFieldPktTypeIOAM;
  10785        return rv;
  10786     }
  10787 
  10788     /* Check if it is generic INT type (for v4/v6 over TCP) */
  10789     rv = (soc_cancun_ceh_obj_field_get(unit, "Z2_MATCH_ID",
  10790                                        "TCP_INT", &ceh_info));
  10791     if (SOC_FAILURE(rv)) {
  10792        LOG_ERROR(BSL_LS_BCM_FP, (BSL_META("obj_str:%s field_str:%s\n\r"),
  10793                    "Z2_MATCH_ID", "TCP_INT"));
  10794        return rv;
  10795     }
  10796     if ((data == ceh_info.value) && (mask == ((1 << ceh_info.width) - 1))) {
  10797        *type = bcmFieldPktTypeTcpINT;
  10798        return rv;
  10799     }
  10800 
  10801 
  10802     rv = (soc_cancun_ceh_obj_field_get(unit, "Z2_MATCH_ID",
  10803                                        "IPV4", &ceh_info));
  10804     if (SOC_FAILURE(rv)) {
  10805        LOG_ERROR(BSL_LS_BCM_FP, (BSL_META("obj_str:%s field_str:%s\n\r"),
  10806                    "Z2_MATCH_ID", "IPV4"));
  10807        return rv;
  10808     }
  10809     ipv4Type = ceh_info.value;
  10810     ipv4Mask = (1 << ceh_info.width) - 1;
  10811     ipv4Width = ceh_info.width;
  10812 
  10813     rv = (soc_cancun_ceh_obj_field_get(unit, "Z2_MATCH_ID",
  10814                                        "IPV6", &ceh_info));
  10815     if (SOC_FAILURE(rv)) {
  10816        LOG_ERROR(BSL_LS_BCM_FP, (BSL_META("obj_str:%s field_str:%s\n\r"),
  10817                   "Z2_MATCH_ID", "IPV6"));
  10818        return rv;
  10819     }
  10820     ipv6Type = ceh_info.value;
  10821     ipv6Mask = (1 << ceh_info.width) - 1;
  10822     ipv6Width = ceh_info.width;
  10823 
  10824     for (idx = 0; idx < COUNTOF(flex_pkt_type_arr); idx++) {
  10825         rv = (soc_cancun_ceh_obj_field_get(unit, "Z2_MATCH_ID",
  10826                                            flex_pkt_type_arr[idx].field_str,
  10827                                            &ceh_info));
  10828         /*
  10829          * Ignore if CANCUN mapping was not found. Could be the Mapping is no longer
  10830          * supported in the current CANCUN release or for this chip.
  10831          */
  10832         if (BCM_E_NOT_FOUND == rv) {
  10833             LOG_DEBUG(BSL_LS_BCM_FP, (BSL_META("type:%d obj_str:%s field_str:%s\n\r"), idx, "Z2_MATCH_ID",
  10834                         flex_pkt_type_arr[idx].field_str));
  10835             continue;
  10836         }
  10837         if (SOC_FAILURE(rv)) {
  10838            LOG_ERROR(BSL_LS_BCM_FP, (BSL_META("type:%d obj_str:%s field_str:%s\n\r"), idx, "Z2_MATCH_ID",
  10839                    flex_pkt_type_arr[idx].field_str));
  10840            return rv;
  10841         }
  10842         if (sal_strcmp(flex_pkt_type_arr[idx].field_str, "MPLS") == 0) {
  10843            mplsType = ceh_info.value;
  10844            if ((data == 0) && (mask == mplsType)) {
  10845               *type = bcmFieldPktTypeMplsNot;
  10846            } else  if ((data == mplsType) && (mask == mplsType)) {
  10847               *type = bcmFieldPktTypeMplsAny;
  10848            }
  10849         } else if (sal_strcmp(flex_pkt_type_arr[idx].field_str, "FCOE") == 0) {
  10850            fcoEType = ceh_info.value;
  10851            if ((data == 0) && (mask == fcoEType)) {
  10852               *type = bcmFieldPktTypeFCoENot;
  10853            } else if ((data == fcoEType) && (mask == fcoEType)) {
  10854               *type = bcmFieldPktTypeFCoEAny;
  10855            }
  10856         } else if (sal_strcmp(flex_pkt_type_arr[idx].field_str, "IPV4") == 0) {
  10857            ipv4Type = ceh_info.value;
  10858            ipv6Type = 0;
  10859            if ((data == 0x0) && (mask == ipv4Type)) {
  10860               *type = bcmFieldPktTypeIp4Not;
  10861            } else if ((data == ipv4Type) && (mask == ipv4Type)) {
  10862               *type = bcmFieldPktTypeIp4Any;
  10863            }
  10864         } else if (sal_strcmp(flex_pkt_type_arr[idx].field_str, "IPV6") == 0) {
  10865            ipv6Type = ceh_info.value;
  10866            ipv4Type = 0;
  10867            if ((data == 0x0) && (mask == ipv6Type)) {
  10868               *type = bcmFieldPktTypeIp6Not;
  10869            } else if ((data == ipv6Type) && (mask == ipv6Type)) {
  10870               *type = bcmFieldPktTypeIp6Any;
  10871            }
  10872         }
  10873 
  10874         if (*type != bcmFieldPktTypeLastCount) {
  10875             return BCM_E_NONE;
  10876         }
  10877 
  10878         hw_mask = (1 << ceh_info.width) - 1;
  10879         hw_data = ceh_info.value;
  10880 
  10881         if (data & ipv4Type) {
  10882            hw_data <<= ipv4Width;
  10883            hw_data |= ipv4Type;
  10884            hw_mask <<= ipv4Width;
  10885            hw_mask |= ipv4Mask;
  10886         } else if (data & ipv6Type) {
  10887            hw_data <<= ipv6Width;
  10888            hw_data |= ipv6Type;
  10889            hw_mask <<= ipv6Width;
  10890            hw_mask |= ipv6Mask;
  10891         }
  10892 
  10893         LOG_DEBUG(BSL_LS_BCM_FP, (BSL_META_U(unit,
  10894                   "data:0x%x mask:0x%x hw_data:0x%x hw_mask:0x%x\n\r"),
  10895                    data, mask, hw_data, hw_mask));
  10896 
  10897         if ((hw_data == data) && (hw_mask == mask)) {
  10898            *type = idx;
  10899            return BCM_E_NONE;
  10900         }
  10901     }
  10902 
  10903     return BCM_E_PARAM;
  10904 }
  10905 
  10906 STATIC
  10907 _flex_ceh_field_type_t flex_ip_option_type_arr[bcmFieldIpOptionHdrTypeLastCount] = {
  10908     {"AH"},
  10909     {"ESP"},
  10910     {"WESP"},
  10911     {"AH_ESP"},
  10912     {"AH_WESP"},
  10913     {"GENERIC"},
  10914     {"FRAGMENTATION"},
  10915     {"GENERIC_GENERIC"},
  10916     {"GENERIC_FRAGMENTATION"},
  10917     {"GENERIC_AH"},
  10918     {"GENERIC_ESP"},
  10919     {"GENERIC_WESP"},
  10920     {"FRAGMENTATION_AH"},
  10921     {"FRAGMENTATION_ESP"},
  10922     {"FRAGMENTATION_WESP"}};
  10923 
  10924 int
  10925 _bcm_field_td3_qualify_IpOptionHdrType(int unit, bcm_field_qualify_t qual_id,
  10926                                        bcm_field_ip_option_hdr_type_t type,
  10927                                        uint8 *data, uint8 *mask)
  10928 {
  10929    int rv;
  10930    uint8 hw_data;
  10931    uint8 hw_mask;
  10932    uint8 ip_type_data;
  10933    uint8 ip_type_mask;
  10934    uint8 ip_type_width;
  10935 
  10936    soc_cancun_ceh_field_info_t ceh_info;
  10937 
  10938    if ((qual_id == bcmFieldQualifyIpv4OptionHdrType) ||
  10939        (qual_id == bcmFieldQualifyOverlayIpv4OptionHdrType)) {
  10940         rv = (soc_cancun_ceh_obj_field_get(unit, "Z2_MATCH_ID",
  10941                                            "IPV4", &ceh_info));
  10942         if (SOC_FAILURE(rv)) {
  10943            LOG_ERROR(BSL_LS_BCM_FP, (BSL_META(
  10944                      "obj_str:%s field_str:%s\n\r"), "Z2_MATCH_ID", "IPV4"));
  10945            /*
  10946             * Ignore if CANCUN mapping was not found. Could be the Mapping is no longer
  10947             * supported in the current CANCUN release or for this chip.
  10948             */
  10949            rv  = (BCM_E_NOT_FOUND == rv) ? (BCM_E_UNAVAIL) : rv ;
  10950            return rv;
  10951         }
  10952         ip_type_data = ceh_info.value;
  10953         ip_type_width = ceh_info.width;
  10954    } else {
  10955         rv = (soc_cancun_ceh_obj_field_get(unit, "Z2_MATCH_ID",
  10956                                            "IPV6", &ceh_info));
  10957         if (SOC_FAILURE(rv)) {
  10958            LOG_ERROR(BSL_LS_BCM_FP, (BSL_META(
  10959                     "obj_str:%s field_str:%s\n\r"), "Z2_MATCH_ID", "IPV6"));
  10960            /*
  10961             * Ignore if CANCUN mapping was not found. Could be the Mapping is no longer
  10962             * supported in the current CANCUN release or for this chip.
  10963             */
  10964            rv  = (BCM_E_NOT_FOUND == rv) ? (BCM_E_UNAVAIL) : rv ;
  10965            return rv;
  10966         }
  10967         ip_type_data = ceh_info.value;
  10968         ip_type_width = ceh_info.width;
  10969    }
  10970 
  10971    ip_type_mask = (1 << ip_type_width) - 1;
  10972 
  10973    rv = (soc_cancun_ceh_obj_field_get(unit, "Z2_MATCH_ID",
  10974                                       flex_ip_option_type_arr[type].field_str,
  10975                                       &ceh_info));
  10976    if (SOC_FAILURE(rv)) {
  10977       LOG_ERROR(BSL_LS_BCM_FP, (BSL_META(
  10978               "type:%d obj_str:%s field_str:%s\n\r"), type, "Z2_MATCH_ID",
  10979               flex_ip_option_type_arr[type].field_str));
  10980       /*
  10981        * Ignore if CANCUN mapping was not found. Could be the Mapping is no longer
  10982        * supported in the current CANCUN release or for this chip.
  10983        */
  10984       rv  = (BCM_E_NOT_FOUND == rv) ? (BCM_E_UNAVAIL) : rv ;
  10985       return rv;
  10986    }
  10987 
  10988    hw_mask = (1 << ceh_info.width) - 1;
  10989    hw_data = ceh_info.value;
  10990 
  10991    hw_data <<= ip_type_width;
  10992    hw_mask <<= ip_type_width;
  10993 
  10994    hw_data |= ip_type_data;
  10995    hw_mask |= ip_type_mask;
  10996 
  10997    LOG_DEBUG(BSL_LS_BCM_FP, (BSL_META_U(unit,
  10998             "Type:%d - offset:%d width:%d value:%d data:0x%x mask:0x%x\n\r"),
  10999             type, ceh_info.offset, ceh_info.width, ceh_info.value, hw_data, hw_mask));
  11000 
  11001    *data = hw_data;
  11002    *mask = hw_mask;
  11003 
  11004    return BCM_E_NONE;
  11005 }
  11006 
  11007 int
  11008 _bcm_field_td3_qualify_IpOptionHdrType_get(int unit,
  11009                                            bcm_field_qualify_t qual_id,
  11010                                            uint8 data,
  11011                                            uint8 mask,
  11012                                            bcm_field_ip_option_hdr_type_t *type)
  11013 {
  11014     int rv;
  11015     int idx;
  11016     uint8 hw_data = 0;
  11017     uint8 hw_mask = 0;
  11018     uint8 ip_type_data;
  11019     uint8 ip_type_mask;
  11020     uint8 ip_type_width;
  11021 
  11022     soc_cancun_ceh_field_info_t ceh_info;
  11023 
  11024     if ((qual_id == bcmFieldQualifyIpv4OptionHdrType) ||
  11025        (qual_id == bcmFieldQualifyOverlayIpv4OptionHdrType)) {
  11026         rv = (soc_cancun_ceh_obj_field_get(unit, "Z2_MATCH_ID",
  11027                                            "IPV4", &ceh_info));
  11028         if (SOC_FAILURE(rv)) {
  11029            LOG_ERROR(BSL_LS_BCM_FP, (BSL_META(
  11030                     "obj_str:%s field_str:%s\n\r"), "Z2_MATCH_ID", "IPV4"));
  11031            return rv;
  11032         }
  11033         ip_type_data = ceh_info.value;
  11034         ip_type_width = ceh_info.width;
  11035     } else {
  11036         rv = (soc_cancun_ceh_obj_field_get(unit, "Z2_MATCH_ID",
  11037                                            "IPV6", &ceh_info));
  11038         if (SOC_FAILURE(rv)) {
  11039            LOG_ERROR(BSL_LS_BCM_FP, (BSL_META(
  11040                      "obj_str:%s field_str:%s\n\r"), "Z2_MATCH_ID", "IPV6"));
  11041            return rv;
  11042         }
  11043         ip_type_data = ceh_info.value;
  11044         ip_type_width = ceh_info.width;
  11045     }
  11046 
  11047     ip_type_mask = (1 << ip_type_width) - 1;
  11048 
  11049     for (idx = 0; idx < bcmFieldIpOptionHdrTypeLastCount; idx++) {
  11050         if (sal_strcmp(flex_ip_option_type_arr[idx].field_str, "\0") == 0) {
  11051            continue;
  11052         }
  11053 
  11054         rv = (soc_cancun_ceh_obj_field_get(unit, "Z2_MATCH_ID",
  11055                                            flex_ip_option_type_arr[idx].field_str,
  11056                                            &ceh_info));
  11057         /*
  11058          * Ignore if CANCUN mapping was not found. Could be the Mapping is no longer
  11059          * supported in the current CANCUN release or for this chip.
  11060          */
  11061         if (BCM_E_NOT_FOUND == rv) {
  11062            LOG_DEBUG(BSL_LS_BCM_FP, (BSL_META(
  11063                      "type:%d obj_str:%s field_str:%s\n\r"), idx, "Z2_MATCH_ID",
  11064                       flex_ip_option_type_arr[idx].field_str));
  11065            continue;
  11066         }
  11067         if (SOC_FAILURE(rv)) {
  11068            LOG_ERROR(BSL_LS_BCM_FP, (BSL_META(
  11069                      "type:%d obj_str:%s field_str:%s\n\r"), idx, "Z2_MATCH_ID",
  11070                       flex_ip_option_type_arr[idx].field_str));
  11071            return rv;
  11072         }
  11073         hw_mask = (1 << ceh_info.width) - 1;
  11074         hw_data = ceh_info.value;
  11075 
  11076         hw_data <<= ip_type_width;
  11077         hw_mask <<= ip_type_width;
  11078 
  11079         hw_data |= ip_type_data;
  11080         hw_mask |= ip_type_mask;
  11081 
  11082         LOG_DEBUG(BSL_LS_BCM_FP, (BSL_META_U(unit,
  11083                   "type:%d data:0x%x mask:0x%x hw_data:0x%x hw_mask:0x%x\n\r"),
  11084                   idx, data, mask, hw_data, hw_mask));
  11085 
  11086         if ((hw_data == data) && (hw_mask == mask)) {
  11087            *type = idx;
  11088            return BCM_E_NONE;
  11089         }
  11090     }
  11091 
  11092     return BCM_E_PARAM;
  11093 }
  11094 
  11095 STATIC
  11096 _flex_ceh_field_type_t flex_l2_pkt_type_arr[bcmFieldL2PktTypeLastCount] = {
  11097       {"ETH"},
  11098       {"SNAP"},
  11099       {"LLC"}};
  11100 
  11101 int
  11102 _bcm_field_td3_qualify_L2PktType(int unit,
  11103                                  bcm_field_l2_pkt_type_t type,
  11104                                  uint8 *data,
  11105                                  uint8 *mask)
  11106 {
  11107     int rv;
  11108     uint32 hw_data = 0x0;
  11109     uint32 hw_mask = 0x0;
  11110 
  11111     soc_cancun_ceh_field_info_t ceh_info;
  11112 
  11113     if (sal_strcmp(flex_l2_pkt_type_arr[type].field_str, "\0") != 0) {
  11114         rv = (soc_cancun_ceh_obj_field_get(unit, "Z1_MATCH_ID",
  11115                                             flex_l2_pkt_type_arr[type].field_str,
  11116                                             &ceh_info));
  11117         if (SOC_FAILURE(rv)) {
  11118            LOG_ERROR(BSL_LS_BCM_FP, (BSL_META(
  11119                   "type:%d obj_str:%s field_str:%s\n\r"), type, "Z1_MATCH_ID",
  11120                    flex_l2_pkt_type_arr[type].field_str));
  11121            /*
  11122             * Ignore if CANCUN mapping was not found. Could be the Mapping is no longer
  11123             * supported in the current CANCUN release or for this chip.
  11124             */
  11125            rv  = (BCM_E_NOT_FOUND == rv) ? (BCM_E_UNAVAIL) : rv ;
  11126            return rv;
  11127         }
  11128         hw_mask = (1 << ceh_info.width) - 1;
  11129         hw_data = ceh_info.value;
  11130 
  11131         *data = hw_data;
  11132         *mask = hw_mask;
  11133         LOG_DEBUG(BSL_LS_BCM_FP, (BSL_META_U(unit,
  11134               "Type:%d - offset:%d width:%d value:%d data:0x%x mask:0x%x\n\r"),
  11135               type, ceh_info.offset, ceh_info.width,
  11136               ceh_info.value, hw_data, hw_mask));
  11137     }
  11138 
  11139     return BCM_E_NONE;
  11140 }
  11141 
  11142 int
  11143 _bcm_field_td3_qualify_L2PktType_get(int unit,
  11144                                      uint8 data,
  11145                                      uint8 mask,
  11146                                      bcm_field_l2_pkt_type_t *type)
  11147 {
  11148     int rv;
  11149     int idx;
  11150     uint8 hw_data = 0;
  11151     uint8 hw_mask = 0;
  11152     soc_cancun_ceh_field_info_t ceh_info;
  11153 
  11154     for (idx = 0; idx < bcmFieldL2PktTypeLastCount; idx++) {
  11155 
  11156         if (sal_strcmp(flex_l2_pkt_type_arr[idx].field_str, "\0") == 0) {
  11157            continue;
  11158         }
  11159 
  11160         rv = (soc_cancun_ceh_obj_field_get(unit, "Z1_MATCH_ID",
  11161                                            flex_l2_pkt_type_arr[idx].field_str,
  11162                                            &ceh_info));
  11163         /*
  11164          * Ignore if CANCUN mapping was not found. Could be the Mapping is no longer
  11165          * supported in the current CANCUN release or for this chip.
  11166          */
  11167         if (BCM_E_NOT_FOUND == rv) {
  11168             LOG_DEBUG(BSL_LS_BCM_FP, (BSL_META(
  11169                             "type:%d obj_str:%s field_str:%s\n\r"), idx, "Z1_MATCH_ID",
  11170                         flex_l2_pkt_type_arr[idx].field_str));
  11171             continue;
  11172         }
  11173         if (SOC_FAILURE(rv)) {
  11174            LOG_ERROR(BSL_LS_BCM_FP, (BSL_META(
  11175                    "type:%d obj_str:%s field_str:%s\n\r"), idx, "Z1_MATCH_ID",
  11176                    flex_l2_pkt_type_arr[idx].field_str));
  11177            return rv;
  11178         }
  11179 
  11180         hw_mask = (1 << ceh_info.width) - 1;
  11181         hw_data = ceh_info.value;
  11182 
  11183         LOG_DEBUG(BSL_LS_BCM_FP, (BSL_META_U(unit,
  11184                   "data:0x%x mask:0x%x hw_data:0x%x hw_mask:0x%x\n\r"),
  11185                   data, mask, hw_data, hw_mask));
  11186 
  11187         if ((hw_data == data) && (hw_mask == mask)) {
  11188            *type = idx;
  11189            return BCM_E_NONE;
  11190         }
  11191     }
  11192 
  11193     return BCM_E_PARAM;
  11194 }
  11195 
  11196 STATIC
  11197 _flex_ceh_field_type_t flex_nwtag_type_arr[bcmFieldNetworkTagLastCount] = {
  11198       {"VNTAG"},
  11199       {"ETAG"}};
  11200 
  11201  int
  11202 _bcm_field_td3_qualify_NetworkTagType(int unit,
  11203                                       bcm_field_network_tag_type_t type,
  11204                                       uint8 *data, uint8 *mask)
  11205  {
  11206     int rv;
  11207     uint32 hw_data = 0x0;
  11208     uint32 hw_mask = 0x0;
  11209 
  11210     soc_cancun_ceh_field_info_t ceh_info;
  11211 
  11212     if ((bcmFieldNetworkTagVnTag == type) &&
  11213         !soc_feature(unit, soc_feature_niv)) {
  11214         return BCM_E_PARAM;
  11215     }
  11216     rv = (soc_cancun_ceh_obj_field_get(unit, "Z1_MATCH_ID",
  11217                                         flex_nwtag_type_arr[type].field_str,
  11218                                         &ceh_info));
  11219     if (SOC_FAILURE(rv)) {
  11220        LOG_ERROR(BSL_LS_BCM_FP, (BSL_META(
  11221                "type:%d obj_str:%s field_str:%s\n\r"), type, "Z1_MATCH_ID",
  11222                flex_nwtag_type_arr[type].field_str));
  11223        /*
  11224         * Ignore if CANCUN mapping was not found. Could be the Mapping is no longer
  11225         * supported in the current CANCUN release or for this chip.
  11226         */
  11227        rv  = (BCM_E_NOT_FOUND == rv) ? (BCM_E_UNAVAIL) : rv ;
  11228        return rv;
  11229     }
  11230     hw_mask = (1 << ceh_info.width) - 1;
  11231     hw_data = ceh_info.value;
  11232 
  11233     LOG_DEBUG(BSL_LS_BCM_FP, (BSL_META_U(unit,
  11234             "Type:%d - offset:%d width:%d value:%d data:0x%x mask:0x%x\n\r"),
  11235             type, ceh_info.offset, ceh_info.width,
  11236             ceh_info.value, hw_data, hw_mask));
  11237 
  11238     *data = hw_data;
  11239     *mask = hw_mask;
  11240 
  11241     return BCM_E_NONE;
  11242  }
  11243 
  11244 
  11245  int
  11246 _bcm_field_td3_qualify_NetworkTagType_get(int       unit,
  11247                                           uint8     data,
  11248                                           uint8     mask,
  11249                                           bcm_field_network_tag_type_t *type)
  11250 {
  11251     int rv;
  11252     int idx;
  11253     uint8 hw_data = 0;
  11254     uint8 hw_mask = 0;
  11255     soc_cancun_ceh_field_info_t ceh_info;
  11256 
  11257     for (idx = 0; idx < bcmFieldNetworkTagLastCount; idx++) {
  11258         if (sal_strcmp(flex_nwtag_type_arr[idx].field_str, "\0") == 0) {
  11259            continue;
  11260         }
  11261 
  11262         rv = (soc_cancun_ceh_obj_field_get(unit, "Z1_MATCH_ID",
  11263                                            flex_nwtag_type_arr[idx].field_str,
  11264                                            &ceh_info));
  11265         /*
  11266          * Ignore if CANCUN mapping was not found. Could be the Mapping is no longer
  11267          * supported in the current CANCUN release or for this chip.
  11268          */
  11269         if (BCM_E_NOT_FOUND == rv) {
  11270             LOG_DEBUG(BSL_LS_BCM_FP, (BSL_META(
  11271                             "type:%d obj_str:%s field_str:%s\n\r"), idx, "Z1_MATCH_ID",
  11272                         flex_nwtag_type_arr[idx].field_str));
  11273             continue;
  11274         }
  11275         if (SOC_FAILURE(rv)) {
  11276            LOG_ERROR(BSL_LS_BCM_FP, (BSL_META(
  11277                   "type:%d obj_str:%s field_str:%s\n\r"), idx, "Z1_MATCH_ID",
  11278                   flex_nwtag_type_arr[idx].field_str));
  11279            return rv;
  11280         }
  11281 
  11282         hw_mask = (1 << ceh_info.width) - 1;
  11283         hw_data = ceh_info.value;
  11284 
  11285         LOG_DEBUG(BSL_LS_BCM_FP, (BSL_META_U(unit,
  11286                   "data:0x%x mask:0x%x hw_data:0x%x hw_mask:0x%x\n\r"),
  11287                    data, mask, hw_data, hw_mask));
  11288 
  11289         if ((hw_data == data) && (hw_mask == mask)) {
  11290            *type = idx;
  11291            return BCM_E_NONE;
  11292         }
  11293     }
  11294 
  11295     return BCM_E_PARAM;
  11296 }
  11297 
  11298 int
  11299 _bcm_field_td3_qualify_TimeStampTxPktType(int unit,
  11300                        bcm_field_timestamp_transmit_pkt_type_t ts_pkt_type,
  11301                        uint16 *data,
  11302                        uint16 *mask)
  11303 {
  11304     bcm_error_t rv = BCM_E_NONE;
  11305     if ((NULL == data) || (NULL == mask)) {
  11306         return BCM_E_PARAM;
  11307     }
  11308     switch (ts_pkt_type) {
  11309         case bcmFieldTimestampTwampOwamp:
  11310              *data = BCM_PKT_HDR_TS_OFFSET_TWAMP_OWAMP;
  11311              *mask = 0xffff;
  11312              break;
  11313         default:
  11314              return BCM_E_UNAVAIL;
  11315     }
  11316     return rv;
  11317 }
  11318 
  11319 int
  11320 _bcm_field_td3_qualify_TimeStampTxPktType_get(int unit,
  11321                        uint16 data,
  11322                        uint16 mask,
  11323                        bcm_field_timestamp_transmit_pkt_type_t *ts_pkt_type)
  11324 {
  11325     bcm_error_t rv = BCM_E_NONE;
  11326     if (NULL == ts_pkt_type) {
  11327         return BCM_E_PARAM;
  11328     }
  11329     switch (data & mask) {
  11330         case BCM_PKT_HDR_TS_OFFSET_TWAMP_OWAMP:
  11331              *ts_pkt_type = bcmFieldTimestampTwampOwamp;
  11332              break;
  11333         default:
  11334              return BCM_E_INTERNAL;
  11335     }
  11336     return rv;
  11337 }
  11338 
  11339 STATIC
  11340 _flex_ceh_field_type_t flex_syshdr_type_arr[bcmFieldSysHdrLastCount] = {
  11341     {"NO_SYS_HDR"},
  11342     {"COE"},
  11343     {"LOOPBACK"},
  11344     {"LOOPBACK"},
  11345     {"GENERIC_LOOPBACK"},
  11346     {"CPU_MASQUERADE"},
  11347     {"HIGIG"},
  11348     {"HIGIG"},
  11349     {"PPD0"},
  11350     {"PPD2"},
  11351     {"PPD0_EH_TYPE0"},
  11352     {"PPD0_EH_TYPE1"},
  11353     {"PPD0_EH_TYPE2"},
  11354     {"PPD2_EH_TYPE0"},
  11355     {"PPD2_EH_TYPE1"},
  11356     {"PPD2_EH_TYPE2"},
  11357     {"UNKNOWN_PPD_TYPE"},
  11358     {"UNKNOWN_PPD_TYPE_WITH_EH"},
  11359     {"PPD1"},
  11360     {"PPD1_WITH_EH"},
  11361     {"SOBMH_TS"},
  11362     };
  11363 
  11364 int
  11365 _bcm_field_td3_qualify_SysHdrType(int unit,
  11366                                   bcm_field_sys_hdr_type_t type,
  11367                                   uint8 *data, uint8 *mask)
  11368 {
  11369     int rv;
  11370     soc_cancun_ceh_field_info_t ceh_info;
  11371 
  11372 #if 0
  11373         {bcmFieldSysHdrHiGigTypePpd0WithCustomEhType,       "PPD0_WITH_CUSTOM_EH_TYPE"},
  11374         {bcmFieldSysHdrHiGigTypePpd1WithCustomEhType,       "PPD2_WITH_CUSTOM_EH_TYPE"},
  11375         {bcmFieldSysHdrHiGigTypeUnknownPpdWithCustomEhType, "UNKNOWN_PPD_WITH_CUSTOM_EH_TYPE"},
  11376         {bcmFieldSysHdrHiGigTypeSubPort,                    "HIGIG_WITH_COE"};
  11377 #endif
  11378     if ((bcmFieldSysHdrSubPort == type) &&
  11379         !soc_feature(unit, soc_feature_hgproxy_subtag_coe)) {
  11380         return BCM_E_PARAM;
  11381     }
  11382     rv = (soc_cancun_ceh_obj_field_get(unit, "Z0_MATCH_ID",
  11383                                        flex_syshdr_type_arr[type].field_str,
  11384                                        &ceh_info));
  11385     if (SOC_FAILURE(rv)) {
  11386        LOG_ERROR(BSL_LS_BCM_FP, (BSL_META(
  11387                "type:%d obj_str:%s field_str:%s\n\r"), type, "Z0_MATCH_ID",
  11388                flex_syshdr_type_arr[type].field_str));
  11389        /*
  11390         * Ignore if CANCUN mapping was not found. Could be the Mapping is no longer
  11391         * supported in the current CANCUN release or for this chip.
  11392         */
  11393        rv  = (BCM_E_NOT_FOUND == rv) ? (BCM_E_UNAVAIL) : rv ;
  11394        return rv;
  11395     }
  11396 
  11397     *mask = (1 << ceh_info.width) - 1;
  11398     *data = ceh_info.value;
  11399 
  11400     LOG_DEBUG(BSL_LS_BCM_FP, (BSL_META_U(unit,
  11401               "Type:%d - offset:%d width:%d value:%d mask:0x%x\n\r"),
  11402               type, ceh_info.offset, ceh_info.width, ceh_info.value, *mask));
  11403 
  11404 
  11405     switch(type) {
  11406        case bcmFieldSysHdrHiGigNot:
  11407        case bcmFieldSysHdrLoopbackNot:
  11408             *data = 0x0;
  11409             *mask <<= ceh_info.offset;
  11410             break;
  11411        case bcmFieldSysHdrHiGigAny:
  11412        case bcmFieldSysHdrLoopbackAny:
  11413        case bcmFieldSysHdrTxTimestamp:
  11414             *data <<= ceh_info.offset;
  11415             *mask <<= ceh_info.offset;
  11416             break;
  11417        default:
  11418             break;
  11419     }
  11420 
  11421     return BCM_E_NONE;
  11422 }
  11423 
  11424 int
  11425 _bcm_field_td3_qualify_SysHdrType_get(int unit, uint8 data, uint8 mask,
  11426                                       bcm_field_sys_hdr_type_t *type)
  11427 {
  11428     int idx;
  11429     int rv;
  11430     uint8 lbType;
  11431     uint8 hgType;
  11432     uint8 hw_data = 0;
  11433     uint8 hw_mask = 0;
  11434     soc_cancun_ceh_field_info_t ceh_info;
  11435 
  11436     rv = (soc_cancun_ceh_obj_field_get(unit, "Z0_MATCH_ID", "LOOPBACK",
  11437                                        &ceh_info));
  11438     SOC_IF_ERROR_RETURN(rv);
  11439     lbType = ceh_info.value;
  11440     lbType <<= ceh_info.offset;
  11441     rv = (soc_cancun_ceh_obj_field_get(unit, "Z0_MATCH_ID", "HIGIG",
  11442                                        &ceh_info));
  11443     SOC_IF_ERROR_RETURN(rv);
  11444     hgType = ceh_info.value;
  11445     hgType <<= ceh_info.offset;
  11446 
  11447     *type = bcmFieldSysHdrLastCount;
  11448 
  11449     if (data == 0x0 && mask == lbType) {
  11450        *type = bcmFieldSysHdrLoopbackNot;
  11451     } else if (data == lbType && mask == lbType) {
  11452        *type = bcmFieldSysHdrLoopbackAny;
  11453     } else if (data == 0x0 && mask == hgType) {
  11454        *type = bcmFieldSysHdrHiGigNot;
  11455     } else if (data == hgType && mask == hgType) {
  11456        *type = bcmFieldSysHdrHiGigAny;
  11457     }
  11458 
  11459     if (*type != bcmFieldSysHdrLastCount) {
  11460        return BCM_E_NONE;
  11461     }
  11462 
  11463     for (idx = 0; idx < COUNTOF(flex_syshdr_type_arr); idx++) {
  11464         rv = (soc_cancun_ceh_obj_field_get(unit, "Z0_MATCH_ID",
  11465                                            flex_syshdr_type_arr[idx].field_str,
  11466                                            &ceh_info));
  11467         /*
  11468          * Ignore if CANCUN mapping was not found. Could be the Mapping is no longer
  11469          * supported in the current CANCUN release or for this chip.
  11470          */
  11471         if (BCM_E_NOT_FOUND == rv) {
  11472            LOG_DEBUG(BSL_LS_BCM_FP, (BSL_META(
  11473                     "type:%d obj_str:%s field_str:%s\n\r"), idx, "Z0_MATCH_ID",
  11474                     flex_syshdr_type_arr[idx].field_str));
  11475            continue;
  11476         }
  11477         if (SOC_FAILURE(rv)) {
  11478            LOG_ERROR(BSL_LS_BCM_FP, (BSL_META(
  11479                     "type:%d obj_str:%s field_str:%s\n\r"), idx, "Z0_MATCH_ID",
  11480                     flex_syshdr_type_arr[idx].field_str));
  11481            return rv;
  11482         }
  11483 
  11484         hw_mask = (1 << ceh_info.width) - 1;
  11485         hw_data = ceh_info.value;
  11486 
  11487         LOG_DEBUG(BSL_LS_BCM_FP, (BSL_META_U(unit,
  11488                   "data:0x%x mask:0x%x hw_data:0x%x hw_mask:0x%x\n\r"),
  11489                   data, mask, hw_data, hw_mask));
  11490 
  11491         if ((hw_data == data) && (hw_mask == mask)) {
  11492            *type = idx;
  11493            return BCM_E_NONE;
  11494         }
  11495     }
  11496 
  11497     return BCM_E_PARAM;
  11498 }
  11499 
  11500 STATIC
  11501 _flex_ceh_field_type_t flex_tunnel_type_arr[bcmFieldTunnelTypeCount] = {
  11502             {"\0"},
  11503             {"\0"},
  11504             {"\0"},
  11505             {"\0"},
  11506             {"\0"},
  11507             {"\0"},
  11508             {"\0"},
  11509             {"\0"},
  11510             {"\0"},
  11511             {"\0"},
  11512             {"\0"},
  11513             {"\0"},
  11514             {"\0"},
  11515             {"\0"},
  11516             {"\0"},
  11517             {"\0"},
  11518             {"\0"},
  11519             {"VXLAN_FLEX"},
  11520             {"GPE"},
  11521             {"GENEVE"},
  11522             {"MPLS_OVER_GRE"},
  11523             {"NSH"}};
  11524 
  11525 
  11526 int
  11527 _bcm_field_td3_qualify_TunnelType(int unit,
  11528                                   bcm_field_TunnelType_t tunnel_type,
  11529                                   uint32 *tcam_data,
  11530                                   uint32 *tcam_mask)
  11531 {
  11532     int rv;
  11533     soc_cancun_ceh_field_info_t ceh_info;
  11534 
  11535     if (sal_strcmp(flex_tunnel_type_arr[tunnel_type].field_str, "\0") != 0) {
  11536         uint32 hw_data, hw_mask;
  11537 
  11538         rv = (soc_cancun_ceh_obj_field_get(unit, "PKT_FLOW_ID_1",
  11539                                            flex_tunnel_type_arr[tunnel_type].field_str,
  11540                                            &ceh_info));
  11541         if (SOC_FAILURE(rv)) {
  11542            LOG_ERROR(BSL_LS_BCM_FP, (BSL_META("tunnel_type:%d obj_str:%s field_str:%s\n\r"),
  11543                                tunnel_type, "PKT_FLOW_ID_1",
  11544                                flex_tunnel_type_arr[tunnel_type].field_str));
  11545            /*
  11546             * Ignore if CANCUN mapping was not found. Could be the Mapping is no longer
  11547             * supported in the current CANCUN release or for this chip.
  11548             */
  11549            rv  = (BCM_E_NOT_FOUND == rv) ? (BCM_E_UNAVAIL) : rv ;
  11550            return rv;
  11551         }
  11552 
  11553         hw_mask = (1 << ceh_info.width) - 1;
  11554         hw_data = ceh_info.value;
  11555 
  11556         LOG_DEBUG(BSL_LS_BCM_FP, (BSL_META_U(unit, "Type:%d - offset:%d width:%d value:%d data:0x%x mask:0x%x\n\r"),
  11557                                 tunnel_type, ceh_info.offset, ceh_info.width, ceh_info.value, hw_data, hw_mask));
  11558         *tcam_data = hw_data;
  11559         *tcam_mask = hw_mask;
  11560 
  11561         return BCM_E_NONE;
  11562     } else {
  11563         switch (tunnel_type) {
  11564             case bcmFieldTunnelTypeNone:
  11565                 *tcam_data = 0x1;
  11566                 *tcam_mask = 0xf;
  11567                 break;
  11568             case bcmFieldTunnelTypeMpls:
  11569                 *tcam_data = 0x6;
  11570                 *tcam_mask = 0xf;
  11571                 break;
  11572             case bcmFieldTunnelTypeMim:
  11573                 *tcam_data = 0x2;
  11574                 *tcam_mask = 0xf;
  11575                 break;
  11576             case bcmFieldTunnelTypeIp:
  11577                 *tcam_data = 0x5;
  11578                 *tcam_mask = 0xf;
  11579                 break;
  11580             case bcmFieldTunnelTypeL2Gre:
  11581                 *tcam_data = 0x3;
  11582                 *tcam_mask = 0xf;
  11583                 break;
  11584             case bcmFieldTunnelTypeVxlan:
  11585                 *tcam_data = 0x4;
  11586                 *tcam_mask = 0xf;
  11587                 break;
  11588             default:
  11589                 return (BCM_E_PARAM);
  11590         }
  11591 
  11592     }
  11593 
  11594     return (BCM_E_NONE);
  11595 }
  11596 
  11597 int
  11598 _bcm_field_td3_qualify_TunnelType_get(int unit,
  11599                                       uint8 tcam_data,
  11600                                       uint8 tcam_mask,
  11601                                       bcm_field_TunnelType_t *tunnel_type)
  11602 {
  11603     int idx;
  11604     int rv;
  11605     uint8 hw_data = 0;
  11606     uint8 hw_mask = 0;
  11607     soc_cancun_ceh_field_info_t ceh_info;
  11608 
  11609     for (idx = 0; idx < COUNTOF(flex_tunnel_type_arr); idx++) {
  11610         if (sal_strcmp(flex_tunnel_type_arr[idx].field_str, "\0") == 0) {
  11611            continue;
  11612         }
  11613 
  11614         rv = (soc_cancun_ceh_obj_field_get(unit, "PKT_FLOW_ID_1",
  11615                                            flex_tunnel_type_arr[idx].field_str,
  11616                                            &ceh_info));
  11617         /*
  11618          * Ignore if CANCUN mapping was not found. Could be the Mapping is no longer
  11619          * supported in the current CANCUN release or for this chip.
  11620          */
  11621         if (BCM_E_NOT_FOUND == rv) {
  11622            LOG_DEBUG(BSL_LS_BCM_FP, (BSL_META("tunnel_type:%d obj_str:%s field_str:%s\n\r"),
  11623                                     idx, "PKT_FLOW_ID_1",
  11624                                     flex_tunnel_type_arr[idx].field_str));
  11625            continue;
  11626         }
  11627         if (SOC_FAILURE(rv)) {
  11628            LOG_ERROR(BSL_LS_BCM_FP, (BSL_META("tunnel_type:%d obj_str:%s field_str:%s\n\r"),
  11629                                     idx, "PKT_FLOW_ID_1",
  11630                                     flex_tunnel_type_arr[idx].field_str));
  11631            return rv;
  11632         }
  11633 
  11634         hw_mask = (1 << ceh_info.width) - 1;
  11635         hw_data = ceh_info.value;
  11636 
  11637         LOG_DEBUG(BSL_LS_BCM_FP, (BSL_META_U(unit, "data:0x%x mask:0x%x hw_data:0x%x hw_mask:0x%x\n\r"),
  11638                                    tcam_data, tcam_mask, hw_data, hw_mask));
  11639 
  11640         if ((hw_data == tcam_data) && (hw_mask == tcam_mask)) {
  11641            *tunnel_type = idx;
  11642            return BCM_E_NONE;
  11643         }
  11644     }
  11645 
  11646     switch (tcam_data & tcam_mask) {
  11647         case 0x5:
  11648             *tunnel_type = bcmFieldTunnelTypeIp;
  11649             break;
  11650         case 0x6:
  11651             *tunnel_type = bcmFieldTunnelTypeMpls;
  11652             break;
  11653         case 0x2:
  11654             *tunnel_type = bcmFieldTunnelTypeMim;
  11655             break;
  11656         case 0x3:
  11657             *tunnel_type = bcmFieldTunnelTypeL2Gre;
  11658             break;
  11659         case 0x4:
  11660             *tunnel_type = bcmFieldTunnelTypeVxlan;
  11661             break;
  11662         case 0x1:
  11663             if(tcam_mask) {
  11664                 *tunnel_type = bcmFieldTunnelTypeNone;
  11665                 break;
  11666             }
  11667         default:
  11668             return (BCM_E_INTERNAL);
  11669     }
  11670 
  11671     return BCM_E_NONE;
  11672 }
  11673 
  11674 
  11675 int
  11676 _bcm_field_td3_qualify_LoopbackType(bcm_field_LoopbackType_t loopback_type,
  11677                                     uint32                   *tcam_data,
  11678                                     uint32                   *tcam_mask)
  11679 {
  11680     uint32 lbType = 1 << 4;
  11681 
  11682     switch (loopback_type) {
  11683         case bcmFieldLoopbackTypeAny:
  11684             *tcam_data = lbType | 6;
  11685             *tcam_mask = 0xff;
  11686             break;
  11687         case bcmFieldLoopbackTypeTunnelAny:
  11688             *tcam_data = lbType | 7;
  11689             *tcam_mask = 0xff;
  11690             break;
  11691         default:
  11692             return (BCM_E_UNAVAIL);
  11693     }
  11694 
  11695     return (BCM_E_NONE);
  11696 }
  11697 
  11698 int
  11699 _bcm_field_td3_qualify_LoopbackType_get(uint8                    tcam_data,
  11700                                         uint8                    tcam_mask,
  11701                                         bcm_field_LoopbackType_t *loopback_type
  11702                                         )
  11703 {
  11704     switch (tcam_data & tcam_mask) {
  11705         case 0x16:
  11706             *loopback_type = bcmFieldLoopbackTypeAny;
  11707             break;
  11708         case 0x17:
  11709             *loopback_type = bcmFieldLoopbackTypeTunnelAny;
  11710             break;
  11711         default:
  11712             return (BCM_E_INTERNAL);
  11713     }
  11714 
  11715     return (BCM_E_NONE);
  11716 }
  11717 
  11718 STATIC
  11719 _flex_ceh_field_type_t flex_loopback_subtype_arr[bcmFieldLoopbackSubtypeCount] = {
  11720             {"LOOPBACK_SUBTYPE"}};
  11721 
  11722 int
  11723 _bcm_field_td3_qualify_LoopbackSubtype(int unit, 
  11724                                        bcm_field_loopback_subtype_t subtype,
  11725                                        uint32  *hw_data, uint32 *hw_mask)
  11726 {
  11727     int rv = BCM_E_UNAVAIL;
  11728     soc_cancun_ceh_field_info_t ceh_info;
  11729 
  11730     rv = (soc_cancun_ceh_obj_field_get(unit, "UDF_1_CHUNK_7",
  11731                                        flex_loopback_subtype_arr[subtype].field_str,
  11732                                        &ceh_info));
  11733     if (SOC_FAILURE(rv)) {
  11734        LOG_ERROR(BSL_LS_BCM_FP, (BSL_META("subtype:%d obj_str:%s field_str:%s\n\r"),
  11735                         subtype, "UDF_1_CHUNK_7",
  11736                         flex_loopback_subtype_arr[subtype].field_str));
  11737        /*
  11738         * Ignore if CANCUN mapping was not found. Could be the Mapping is no longer
  11739         * supported in the current CANCUN release or for this chip.
  11740         */
  11741        rv  = (BCM_E_NOT_FOUND == rv) ? (BCM_E_UNAVAIL) : rv ;
  11742        return rv;
  11743     }
  11744 
  11745     *hw_mask = (1 << ceh_info.width) - 1;
  11746     *hw_data = ceh_info.value;
  11747 
  11748     return BCM_E_NONE;
  11749 }
  11750 
  11751 int
  11752 _bcm_field_td3_qualify_LoopbackSubtype_get(int unit,
  11753                                            uint8                    tcam_data,
  11754                                            uint8                    tcam_mask,
  11755                                            bcm_field_loopback_subtype_t *subtype)
  11756 {
  11757     int idx;
  11758     int rv;
  11759     uint8 hw_data = 0x0;
  11760     uint8 hw_mask = 0x0;
  11761     soc_cancun_ceh_field_info_t ceh_info;
  11762 
  11763     for (idx = 0; idx < COUNTOF(flex_loopback_subtype_arr); idx++) {
  11764         rv = (soc_cancun_ceh_obj_field_get(unit, "UDF_1_CHUNK_7",
  11765                                            flex_loopback_subtype_arr[idx].field_str,
  11766                                            &ceh_info));
  11767         /*
  11768          * Ignore if CANCUN mapping was not found. Could be the Mapping is no longer
  11769          * supported in the current CANCUN release or for this chip.
  11770          */
  11771         if (BCM_E_NOT_FOUND == rv) {
  11772            LOG_DEBUG(BSL_LS_BCM_FP, (BSL_META("subtype:%d obj_str:%s field_str:%s\n\r"),
  11773                        idx, "UDF_1_CHUNK_7",
  11774                        flex_loopback_subtype_arr[idx].field_str));
  11775            continue;
  11776         }
  11777         if (SOC_FAILURE(rv)) {
  11778            LOG_ERROR(BSL_LS_BCM_FP, (BSL_META("subtype:%d obj_str:%s field_str:%s\n\r"),
  11779                      idx, "UDF_1_CHUNK_7",
  11780                      flex_loopback_subtype_arr[idx].field_str));
  11781            return rv;
  11782         }
  11783 
  11784         hw_mask = (1 << ceh_info.width) - 1;
  11785         hw_data = ceh_info.value;
  11786 
  11787         LOG_DEBUG(BSL_LS_BCM_FP, (BSL_META_U(unit, "data:0x%x mask:0x%x hw_data:0x%x hw_mask:0x%x\n\r"),
  11788                                     tcam_data, tcam_mask, hw_data, hw_mask));
  11789 
  11790         if ((hw_data == tcam_data) && (hw_mask == tcam_mask)) {
  11791            *subtype = idx;
  11792            return BCM_E_NONE;
  11793         }
  11794     }
  11795 
  11796     return (BCM_E_PARAM);
  11797 }
  11798 
  11799 /* PKT_FLOW types */
  11800 #define _FP_PKT_FLOW_0_FRONT_PANEL                       0x10
  11801 #define _FP_PKT_FLOW_0_SYSTEM_HDR_PROXY_LEAF_ONLY_ANY    0x12
  11802 #define _FP_PKT_FLOW_0_SYSTEM_HDR_PROXY_LEAF_ONLY_VXLAN  0x13
  11803 #define _FP_PKT_FLOW_0_SYSTEM_HDR_PROXY_LEAF_ONLY_NVGRE  0x14
  11804 #define _FP_PKT_FLOW_0_SYSTEM_HDR_PROXY_LEAF_ONLY_MIM    0x15
  11805 
  11806 int
  11807 _bcm_field_td3_qualify_flow_type(int unit, int qual_id,
  11808                                  uint8 data, uint8 mask,
  11809                                  uint8 *tcam_data, uint8 *tcam_mask)
  11810 {
  11811    if (data & ~(0x1)) {
  11812       return BCM_E_PARAM;
  11813    }
  11814 
  11815    switch (qual_id) {
  11816       case bcmFieldQualifyFrontPanelPkt:
  11817            *tcam_data = _FP_PKT_FLOW_0_FRONT_PANEL;
  11818            *tcam_mask = 0xff;
  11819            break;
  11820       default:
  11821            return BCM_E_PARAM;
  11822    }
  11823 
  11824    if (data == 0) {
  11825       *tcam_mask = *tcam_data;
  11826       *tcam_data = 0x0;
  11827    }
  11828 
  11829    return BCM_E_NONE;
  11830 }
  11831 
  11832 int
  11833 _bcm_field_td3_qualify_flow_type_get(int unit, int qual_id,
  11834                                      uint8 tcam_data, uint8 tcam_mask,
  11835                                      uint8 *data, uint8 *mask)
  11836 {
  11837    switch (tcam_data & tcam_mask) {
  11838       case _FP_PKT_FLOW_0_FRONT_PANEL:
  11839            *data = 0x1;
  11840            *mask = 0x1;
  11841            break;
  11842       case 0:
  11843            *data = 0x0;
  11844            *mask = 0x1;
  11845       default:
  11846            return BCM_E_PARAM;
  11847    }
  11848 
  11849    return BCM_E_NONE;
  11850 }
  11851 
  11852 int
  11853 _bcm_field_td3_qualify_HiGigProxyTunnelType(bcm_field_higig_proxy_tunnel_type_t type,
  11854                                             uint8 *tcam_data, uint8 *tcam_mask)
  11855 {
  11856    switch (type) {
  11857       case bcmFieldHiGigProxyTunnelTypeAny:
  11858            *tcam_data = _FP_PKT_FLOW_0_SYSTEM_HDR_PROXY_LEAF_ONLY_ANY;
  11859            *tcam_mask = 0xff;
  11860            break;
  11861       case bcmFieldHiGigProxyTunnelTypeVxlan:
  11862            *tcam_data = _FP_PKT_FLOW_0_SYSTEM_HDR_PROXY_LEAF_ONLY_VXLAN;
  11863            *tcam_mask = 0xff;
  11864            break;
  11865       case bcmFieldHiGigProxyTunnelTypeL2Gre:
  11866            *tcam_data = _FP_PKT_FLOW_0_SYSTEM_HDR_PROXY_LEAF_ONLY_NVGRE;
  11867            *tcam_mask = 0xff;
  11868            break;
  11869       case bcmFieldHiGigProxyTunnelTypeMim:
  11870            *tcam_data = _FP_PKT_FLOW_0_SYSTEM_HDR_PROXY_LEAF_ONLY_MIM;
  11871            *tcam_mask = 0xff;
  11872            break;
  11873       default:
  11874            return BCM_E_PARAM;
  11875    }
  11876 
  11877    return BCM_E_NONE;
  11878 }
  11879 
  11880 int
  11881 _bcm_field_td3_qualify_HiGigProxyTunnelType_get(uint8 tcam_data, uint8 tcam_mask,
  11882                                        bcm_field_higig_proxy_tunnel_type_t *type)
  11883 {
  11884    if (tcam_mask != 0xff) {
  11885       return BCM_E_INTERNAL;
  11886    }
  11887 
  11888    switch (tcam_data) {
  11889       case _FP_PKT_FLOW_0_SYSTEM_HDR_PROXY_LEAF_ONLY_ANY:
  11890            *type = bcmFieldHiGigProxyTunnelTypeAny;
  11891            break;
  11892       case _FP_PKT_FLOW_0_SYSTEM_HDR_PROXY_LEAF_ONLY_VXLAN:
  11893            *type = bcmFieldHiGigProxyTunnelTypeVxlan;
  11894            break;
  11895       case _FP_PKT_FLOW_0_SYSTEM_HDR_PROXY_LEAF_ONLY_NVGRE:
  11896            *type = bcmFieldHiGigProxyTunnelTypeL2Gre;
  11897            break;
  11898       case _FP_PKT_FLOW_0_SYSTEM_HDR_PROXY_LEAF_ONLY_MIM:
  11899            *type = bcmFieldHiGigProxyTunnelTypeMim;
  11900            break;
  11901       default:
  11902            return BCM_E_INTERNAL;
  11903    }
  11904 
  11905    return BCM_E_NONE;
  11906 }
  11907 
  11908 int
  11909 _bcm_field_td3_qualify_InterfaceClassL2Type(bcm_field_interface_class_l2_type_t type,
  11910                                             uint8 *tcam_data, uint8 *tcam_mask)
  11911 {
  11912    switch (type) {
  11913       case bcmFieldInterfaceClassL2TypeVlan:
  11914            *tcam_data = 0;
  11915            *tcam_mask = 1;
  11916            break;
  11917       case bcmFieldInterfaceClassL2TypeVfi:
  11918            *tcam_data = 1;
  11919            *tcam_mask = 1;
  11920            break;
  11921       default:
  11922            return BCM_E_PARAM;
  11923    }
  11924 
  11925    return BCM_E_NONE;
  11926 }
  11927 
  11928 int
  11929 _bcm_field_td3_qualify_InterfaceClassL2Type_get(uint8 tcam_data, uint8 tcam_mask,
  11930                                        bcm_field_interface_class_l2_type_t *type)
  11931 {
  11932    switch (tcam_data) {
  11933       case 0:
  11934            *type = bcmFieldInterfaceClassL2TypeVlan;
  11935            break;
  11936       case 1:
  11937            *type = bcmFieldInterfaceClassL2TypeVfi;
  11938            break;
  11939       default:
  11940            return BCM_E_INTERNAL;
  11941    }
  11942 
  11943    return BCM_E_NONE;
  11944 }
  11945 
  11946 STATIC
  11947 _flex_ceh_field_type_t flex_tunnel_subtype_arr[bcmFieldTunnelSubTypeCount] = {
  11948             {"GPE_NSH_PYLD_L3"},
  11949             {"L2_NSH_PYLD_L3"},
  11950             {"MPLS_NSH_PYLD_L3"}};
  11951 
  11952 int
  11953 _bcm_field_td3_qualify_TunnelSubType(int unit,
  11954                                      bcm_field_TunnelSubType_t subtype,
  11955                                      uint32 *tcam_data,
  11956                                      uint32 *tcam_mask)
  11957 {
  11958     int rv;
  11959     uint32 hw_data = 0x0;
  11960     uint32 hw_mask = 0x0;
  11961     soc_cancun_ceh_field_info_t ceh_info;
  11962 
  11963     rv = (soc_cancun_ceh_obj_field_get(unit, "PKT_FLOW_ID_1",
  11964                                        flex_tunnel_subtype_arr[subtype].field_str,
  11965                                        &ceh_info));
  11966     if (SOC_FAILURE(rv)) {
  11967        LOG_ERROR(BSL_LS_BCM_FP, (BSL_META("subtype:%d obj_str:%s field_str:%s\n\r"),
  11968                         subtype, "PKT_FLOW_ID_1",
  11969                         flex_tunnel_subtype_arr[subtype].field_str));
  11970        /*
  11971         * Ignore if CANCUN mapping was not found. Could be the Mapping is no longer
  11972         * supported in the current CANCUN release or for this chip.
  11973         */
  11974        rv  = (BCM_E_NOT_FOUND == rv) ? (BCM_E_UNAVAIL) : rv ;
  11975        return rv;
  11976     }
  11977 
  11978     hw_mask = (1 << ceh_info.width) - 1;
  11979     hw_data = ceh_info.value;
  11980 
  11981     *tcam_data = hw_data;
  11982     *tcam_mask = hw_mask;
  11983     LOG_DEBUG(BSL_LS_BCM_FP, (BSL_META_U(unit, "Type:%d - offset:%d width:%d value:%d data:0x%x mask:0x%x\n\r"),
  11984                              subtype, ceh_info.offset, ceh_info.width, ceh_info.value, hw_data, hw_mask));
  11985 
  11986     return (BCM_E_NONE);
  11987 }
  11988 
  11989 int
  11990 _bcm_field_td3_qualify_TunnelSubType_get(int unit,
  11991                                          uint8 tcam_data,
  11992                                          uint8 tcam_mask,
  11993                                          bcm_field_TunnelSubType_t *tunnel_type)
  11994 {
  11995     int idx;
  11996     int rv;
  11997     uint8 hw_data = 0x0;
  11998     uint8 hw_mask = 0x0;
  11999     soc_cancun_ceh_field_info_t ceh_info;
  12000 
  12001     for (idx = 0; idx < COUNTOF(flex_tunnel_subtype_arr); idx++) {
  12002         rv = (soc_cancun_ceh_obj_field_get(unit, "PKT_FLOW_ID_1",
  12003                                            flex_tunnel_subtype_arr[idx].field_str,
  12004                                            &ceh_info));
  12005         /*
  12006          * Ignore if CANCUN mapping was not found. Could be the Mapping is no longer
  12007          * supported in the current CANCUN release or for this chip.
  12008          */
  12009         if (BCM_E_NOT_FOUND == rv) {
  12010            LOG_DEBUG(BSL_LS_BCM_FP, (BSL_META("subtype:%d obj_str:%s field_str:%s\n\r"),
  12011                        idx, "PKT_FLOW_ID_1",
  12012                        flex_tunnel_subtype_arr[idx].field_str));
  12013            continue;
  12014         }
  12015         if (SOC_FAILURE(rv)) {
  12016            LOG_ERROR(BSL_LS_BCM_FP, (BSL_META("subtype:%d obj_str:%s field_str:%s\n\r"), idx, "PKT_FLOW_ID_1",
  12017                    flex_tunnel_subtype_arr[idx].field_str));
  12018            return rv;
  12019         }
  12020 
  12021         hw_mask = (1 << ceh_info.width) - 1;
  12022         hw_data = ceh_info.value;
  12023 
  12024         LOG_DEBUG(BSL_LS_BCM_FP, (BSL_META_U(unit, "data:0x%x mask:0x%x hw_data:0x%x hw_mask:0x%x\n\r"),
  12025                                     tcam_data, tcam_mask, hw_data, hw_mask));
  12026 
  12027         if ((hw_data == tcam_data) && (hw_mask == tcam_mask)) {
  12028            *tunnel_type = idx;
  12029            return BCM_E_NONE;
  12030         }
  12031     }
  12032 
  12033     return (BCM_E_PARAM);
  12034 }
  12035 
  12036 
  12037 int
  12038 _bcm_field_td3_qualify_VlanFormat(int unit,
  12039                                   bcm_field_qualify_t qual_id,
  12040                                   uint8 data,
  12041                                   uint8 mask,
  12042                                   uint8 *hw_data,
  12043                                   uint8 *hw_mask)
  12044 {
  12045     int rv;
  12046     uint8 otag_val;
  12047     uint8 itag_val;
  12048     uint8 notag_val;
  12049     uint8 otag_offset;
  12050     uint8 itag_offset;
  12051     uint8 otag_itag_offset;
  12052     soc_cancun_ceh_field_info_t ceh_info;
  12053 
  12054     rv = (soc_cancun_ceh_obj_field_get(unit, "Z1_MATCH_ID",
  12055                                      "NO_OTAG_ITAG", &ceh_info));
  12056     if (SOC_FAILURE(rv)) {
  12057        LOG_ERROR(BSL_LS_BCM_FP, (BSL_META(
  12058                  "Error: obj_str:%s field_str:%s\n\r"), "Z1_MATCH_ID",
  12059                   "NO_OTAG_ITAG"));
  12060        return rv;
  12061     }
  12062     notag_val = ceh_info.value;
  12063 
  12064     rv = (soc_cancun_ceh_obj_field_get(unit, "Z1_MATCH_ID",
  12065                                        "SINGLE_OTAG", &ceh_info));
  12066     if (SOC_FAILURE(rv)) {
  12067        LOG_ERROR(BSL_LS_BCM_FP, (BSL_META(
  12068                  "Error: obj_str:%s field_str:%s\n\r"), "Z1_MATCH_ID",
  12069                   "OTAG"));
  12070        return rv;
  12071     }
  12072     otag_val = ceh_info.value;
  12073     otag_offset = ceh_info.offset;
  12074 
  12075     rv = (soc_cancun_ceh_obj_field_get(unit, "Z1_MATCH_ID",
  12076                                        "SINGLE_ITAG", &ceh_info));
  12077     if (SOC_FAILURE(rv)) {
  12078        LOG_ERROR(BSL_LS_BCM_FP, (BSL_META(
  12079                  "Error: obj_str:%s field_str:%s\n\r"), "Z1_MATCH_ID",
  12080                   "ITAG"));
  12081        return rv;
  12082     }
  12083     itag_val = ceh_info.value;
  12084     itag_offset = ceh_info.offset;
  12085 
  12086     rv = (soc_cancun_ceh_obj_field_get(unit, "Z1_MATCH_ID",
  12087                                        "OTAG_ITAG", &ceh_info));
  12088     if (SOC_FAILURE(rv)) {
  12089        LOG_ERROR(BSL_LS_BCM_FP, (BSL_META(
  12090                  "Error: obj_str:%s field_str:%s\n\r"), "Z1_MATCH_ID",
  12091                   "OTAG_ITAG"));
  12092        return rv;
  12093     }
  12094     otag_itag_offset = ceh_info.offset;
  12095 
  12096     if (data == BCM_FIELD_VLAN_FORMAT_OUTER_TAGGED) {
  12097        *hw_data = otag_val << (otag_offset - otag_itag_offset);
  12098     } else if (data == BCM_FIELD_VLAN_FORMAT_INNER_TAGGED) {
  12099        *hw_data = itag_val << (itag_offset - otag_itag_offset);
  12100     } else if (data == (BCM_FIELD_VLAN_FORMAT_OUTER_TAGGED |
  12101                         BCM_FIELD_VLAN_FORMAT_INNER_TAGGED)) {
  12102        *hw_data = ceh_info.value;
  12103     } else if (data & ~(BCM_FIELD_VLAN_FORMAT_OUTER_TAGGED |
  12104                         BCM_FIELD_VLAN_FORMAT_INNER_TAGGED)) {
  12105        *hw_data = notag_val;
  12106     }
  12107 
  12108     if (mask == BCM_FIELD_VLAN_FORMAT_OUTER_TAGGED) {
  12109        *hw_mask = otag_val << (otag_offset - otag_itag_offset);
  12110     } else if (mask == BCM_FIELD_VLAN_FORMAT_INNER_TAGGED) {
  12111        *hw_mask = itag_val << (itag_offset - otag_itag_offset);
  12112     } else if (mask == (BCM_FIELD_VLAN_FORMAT_OUTER_TAGGED |
  12113                         BCM_FIELD_VLAN_FORMAT_INNER_TAGGED)) {
  12114        *hw_mask = (1 << ceh_info.width) - 1;
  12115     } else {
  12116        return BCM_E_PARAM;
  12117     }
  12118 
  12119     return BCM_E_NONE;
  12120 }
  12121 
  12122 int
  12123 _bcm_field_td3_qualify_VlanFormat_get(int unit,
  12124                                   bcm_field_qualify_t qual_id,
  12125                                   uint8 hw_data,
  12126                                   uint8 hw_mask,
  12127                                   uint8 *data,
  12128                                   uint8 *mask)
  12129 {
  12130     int rv;
  12131     uint8 otag_val;
  12132     uint8 itag_val;
  12133     uint8 notag_val;
  12134     uint8 otag_offset;
  12135     uint8 itag_offset;
  12136     uint8 otag_itag_offset;
  12137     soc_cancun_ceh_field_info_t ceh_info;
  12138 
  12139     rv = (soc_cancun_ceh_obj_field_get(unit, "Z1_MATCH_ID",
  12140                                      "NO_OTAG_ITAG", &ceh_info));
  12141     if (SOC_FAILURE(rv)) {
  12142        LOG_ERROR(BSL_LS_BCM_FP, (BSL_META(
  12143                  "Error: obj_str:%s field_str:%s\n\r"), "Z1_MATCH_ID",
  12144                   "NO_OTAG_ITAG"));
  12145        return rv;
  12146     }
  12147     notag_val = ceh_info.value;
  12148 
  12149     rv = (soc_cancun_ceh_obj_field_get(unit, "Z1_MATCH_ID",
  12150                                        "SINGLE_OTAG", &ceh_info));
  12151     if (SOC_FAILURE(rv)) {
  12152        LOG_ERROR(BSL_LS_BCM_FP, (BSL_META(
  12153                  "Error: obj_str:%s field_str:%s\n\r"), "Z1_MATCH_ID",
  12154                   "OTAG"));
  12155        return rv;
  12156     }
  12157     otag_val = ceh_info.value;
  12158     otag_offset = ceh_info.offset;
  12159 
  12160     rv = (soc_cancun_ceh_obj_field_get(unit, "Z1_MATCH_ID",
  12161                                        "SINGLE_ITAG", &ceh_info));
  12162     if (SOC_FAILURE(rv)) {
  12163        LOG_ERROR(BSL_LS_BCM_FP, (BSL_META(
  12164                  "Error: obj_str:%s field_str:%s\n\r"), "Z1_MATCH_ID",
  12165                   "ITAG"));
  12166        return rv;
  12167     }
  12168     itag_val = ceh_info.value;
  12169     itag_offset = ceh_info.offset;
  12170 
  12171     rv = (soc_cancun_ceh_obj_field_get(unit, "Z1_MATCH_ID",
  12172                                        "OTAG_ITAG", &ceh_info));
  12173     if (SOC_FAILURE(rv)) {
  12174        LOG_ERROR(BSL_LS_BCM_FP, (BSL_META(
  12175                  "Error: obj_str:%s field_str:%s\n\r"), "Z1_MATCH_ID",
  12176                   "OTAG_ITAG"));
  12177        return rv;
  12178     }
  12179     otag_itag_offset = ceh_info.offset;
  12180 
  12181     if ((hw_data >> (otag_offset - otag_itag_offset)) == otag_val) {
  12182        *data = BCM_FIELD_VLAN_FORMAT_OUTER_TAGGED;
  12183     } else if ((hw_data >> (itag_offset - otag_itag_offset)) == itag_val) {
  12184        *data = BCM_FIELD_VLAN_FORMAT_INNER_TAGGED;
  12185     } else if (hw_data == notag_val) {
  12186        *data = ~(BCM_FIELD_VLAN_FORMAT_OUTER_TAGGED |
  12187                  BCM_FIELD_VLAN_FORMAT_INNER_TAGGED);
  12188     } else if (hw_data == ceh_info.value) {
  12189        *data = BCM_FIELD_VLAN_FORMAT_OUTER_TAGGED |
  12190                BCM_FIELD_VLAN_FORMAT_INNER_TAGGED;
  12191     }
  12192 
  12193     if ((hw_mask >> (otag_offset - otag_itag_offset)) == otag_val) {
  12194        *mask = BCM_FIELD_VLAN_FORMAT_OUTER_TAGGED;
  12195     } else if ((hw_mask >> (itag_offset - otag_itag_offset)) == itag_val) {
  12196        *mask = BCM_FIELD_VLAN_FORMAT_INNER_TAGGED;
  12197     } else if (hw_mask == ((1 << ceh_info.width) - 1)) {
  12198        *mask = (BCM_FIELD_VLAN_FORMAT_OUTER_TAGGED |
  12199                 BCM_FIELD_VLAN_FORMAT_INNER_TAGGED);
  12200     }
  12201 
  12202     return BCM_E_NONE;
  12203 }
  12204 
  12205 int
  12206 _bcm_field_td3_qualify_MplsType(int unit, bcm_field_qualify_t qual_id,
  12207                                 uint8 data, uint8 mask,
  12208                                 uint8 *hw_data, uint8 *hw_mask)
  12209 {
  12210     int rv;
  12211     soc_cancun_ceh_field_info_t ceh_info;
  12212 
  12213     rv = (soc_cancun_ceh_obj_field_get(unit, "Z2_MATCH_ID",
  12214                                        "MPLS",
  12215                                        &ceh_info));
  12216     if (SOC_FAILURE(rv)) {
  12217        LOG_ERROR(BSL_LS_BCM_FP, (BSL_META(
  12218                "obj_str:%s field_str:%s\n\r"), "Z2_MATCH_ID",
  12219                "MPLS"));
  12220        return rv;
  12221     }
  12222 
  12223     *hw_data = data << ceh_info.width;
  12224     *hw_data |= ceh_info.value;
  12225 
  12226     *hw_mask = mask << ceh_info.width;
  12227     *hw_mask |= ((1 << ceh_info.width) - 1);
  12228 
  12229     return BCM_E_NONE;
  12230 }
  12231 
  12232 int
  12233 _bcm_field_td3_qualify_MplsType_get(int unit, bcm_field_qualify_t qual_id,
  12234                                     uint8 hw_data, uint8 hw_mask,
  12235                                     uint8 *data, uint8 *mask)
  12236 {
  12237     int rv;
  12238     soc_cancun_ceh_field_info_t ceh_info;
  12239 
  12240     rv = (soc_cancun_ceh_obj_field_get(unit, "Z2_MATCH_ID",
  12241                                        "MPLS",
  12242                                        &ceh_info));
  12243     if (SOC_FAILURE(rv)) {
  12244        LOG_ERROR(BSL_LS_BCM_FP, (BSL_META(
  12245                "obj_str:%s field_str:%s\n\r"), "Z2_MATCH_ID",
  12246                "MPLS"));
  12247        return rv;
  12248     }
  12249 
  12250     *data = hw_data >> ceh_info.width;
  12251     *mask = hw_mask >> ceh_info.width;
  12252 
  12253     return BCM_E_NONE;
  12254 }
  12255 
  12256 /*********************************** UDF Routines ***************************************/
  12257 
  12258 /* UDF Chunk to Qualifier Mapping */
  12259 uint32 _bcm_udf_chunk_to_qual_mapping[_BCM_UDF_OFFSET_CHUNKS16] =
  12260                         {
  12261                            _bcmFieldQualifyData0,  /* Chunk 0  */
  12262                            _bcmFieldQualifyData1,  /* Chunk 1  */
  12263                            _bcmFieldQualifyData2,  /* Chunk 2  */
  12264                            _bcmFieldQualifyData3,  /* Chunk 3  */
  12265                            _bcmFieldQualifyData4,  /* Chunk 4  */
  12266                            _bcmFieldQualifyData5,  /* Chunk 5  */
  12267                            _bcmFieldQualifyData6,  /* Chunk 6  */
  12268                            _bcmFieldQualifyData7,  /* Chunk 7  */
  12269                            _bcmFieldQualifyData8,  /* Chunk 8  */
  12270                            _bcmFieldQualifyData9,  /* Chunk 9  */
  12271                            _bcmFieldQualifyData10, /* Chunk 10 */
  12272                            _bcmFieldQualifyData11, /* Chunk 11 */
  12273                            _bcmFieldQualifyData12, /* Chunk 12 */
  12274                            _bcmFieldQualifyData13, /* Chunk 13 */
  12275                            _bcmFieldQualifyData14, /* Chunk 14 */
  12276                            _bcmFieldQualifyData15  /* Chunk 15 */
  12277                         };
  12278 
  12279 /*
  12280  * Function:
  12281  *      _bcm_field_td3_udf_chunks_to_int_qset
  12282  * Purpose:
  12283  *      Sets internal data qualifiers corresponding to the
  12284  *      offset chunks used by the UDF.
  12285  * Parameters:
  12286  *      unit            - (IN)  Unit number.
  12287  *      chunk_bmap     - (IN)  UDF offsets chunks map
  12288  *      qset            - (OUT) Qualifier set
  12289  * Returns:
  12290  *      BCM_E_NONE
  12291  * Notes:
  12292  */
  12293 int
  12294 _bcm_field_td3_udf_chunks_to_int_qset(int unit, uint32 chunk_bmap,
  12295                                       bcm_field_qset_t *qset)
  12296 {
  12297     int idx, max_chunks;
  12298 
  12299     if (qset == NULL) {
  12300        return BCM_E_PARAM;
  12301     }
  12302 
  12303     max_chunks = _BCM_UDF_CTRL_MAX_UDF_CHUNKS(unit);
  12304 
  12305     for (idx = 0; idx < max_chunks; idx++) {
  12306         if(chunk_bmap & (1 << idx)) {
  12307             BCM_FIELD_QSET_ADD_INTERNAL(*qset,
  12308                                         _bcm_udf_chunk_to_qual_mapping[idx]);
  12309         }
  12310     }
  12311     return BCM_E_NONE;
  12312 }
  12313 
  12314 
  12315 STATIC
  12316 int _bcm_field_td3_qset_id_multi_set(
  12317     int unit,
  12318     bcm_field_qualify_t qualifier,
  12319     int num_objects,
  12320     int objects_list[],
  12321     bcm_field_qset_t *qset)
  12322 {
  12323     int idx;
  12324     int rv = BCM_E_NONE;
  12325     uint32 udf_chunks = 0;
  12326     _bcm_udf_td3_obj_info_t *obj_info = NULL;
  12327 
  12328 
  12329     if (qualifier != bcmFieldQualifyUdf) {
  12330        return BCM_E_UNAVAIL;
  12331     }
  12332 
  12333     if (qset == NULL) {
  12334        return BCM_E_PARAM;
  12335     }
  12336 
  12337     for (idx = 0; idx < num_objects; idx++) {
  12338         /* Fetch udf info for hw_bmap */
  12339         rv = _bcm_udf_td3_object_info_get(unit, objects_list[idx], &obj_info);
  12340         if (BCM_FAILURE(rv)) {
  12341             return rv;
  12342         }
  12343 
  12344         udf_chunks |= obj_info->chunk_bmap;
  12345     }
  12346 
  12347     /* Update udf_chuks bmap with qset */
  12348     for (idx = 0; idx < _BCM_UDF_CTRL_MAX_UDF_CHUNKS(unit); idx++) {
  12349         /* coverity[ptr_arith] */
  12350         if (SHR_BITGET(qset->udf_map, idx)) {
  12351             SHR_BITSET(&udf_chunks, idx);
  12352         }
  12353     }
  12354     /* Update qset with internal data qualifiers based on udf_chunks */
  12355     rv = _bcm_field_td3_udf_chunks_to_int_qset(unit, udf_chunks, qset);
  12356     if (BCM_FAILURE(rv)) {
  12357         return rv;
  12358     }
  12359 
  12360     /* se ting udf_map helps in gets/deletes */
  12361     for (idx = 0; idx < _BCM_UDF_CTRL_MAX_UDF_CHUNKS(unit); idx++) {
  12362         /* coverity[ptr_arith] */
  12363         if (SHR_BITGET(&udf_chunks, idx)) {
  12364             SHR_BITSET(qset->udf_map, idx);
  12365         }
  12366     }
  12367 
  12368     return rv;
  12369 }
  12370 
  12371 STATIC int
  12372 _bcm_field_td3_qset_id_multi_get(
  12373     int unit,
  12374     bcm_field_qset_t qset,
  12375     bcm_field_qualify_t qualifier,
  12376     int max,
  12377     int *objects_list,
  12378     int *actual)
  12379 {
  12380     int idx = 0;
  12381     uint32 udf_chunks = 0;
  12382 
  12383 
  12384     if (qualifier != bcmFieldQualifyUdf) {
  12385        return BCM_E_UNAVAIL;
  12386     }
  12387 
  12388     if ((objects_list == NULL) || (actual == NULL)) {
  12389        return BCM_E_PARAM;
  12390     }
  12391 
  12392     for (idx = 0; idx < _BCM_UDF_CTRL_MAX_UDF_CHUNKS(unit); idx++) {
  12393         /* coverity[ptr_arith] */
  12394         if (SHR_BITGET(qset.udf_map, idx)) {
  12395             SHR_BITSET(&udf_chunks, idx);
  12396         }
  12397     }
  12398 
  12399     return _bcm_udf_td3_chunk_id_multi_get(unit, udf_chunks,
  12400                                            max, objects_list,
  12401                                            actual);
  12402 }
  12403 
  12404 STATIC int
  12405 _bcm_field_td3_qset_id_multi_delete(
  12406     int unit,
  12407     bcm_field_qualify_t qualifier,
  12408     int num_objects,
  12409     int objects_list[],
  12410     bcm_field_qset_t *qset)
  12411 {
  12412     int idx;
  12413     int rv = BCM_E_NONE;
  12414     uint32 udf_chunks = 0;
  12415     _bcm_udf_td3_obj_info_t *obj_info = NULL;
  12416 
  12417 
  12418     if (qualifier != bcmFieldQualifyUdf) {
  12419        return BCM_E_UNAVAIL;
  12420     }
  12421 
  12422     if (qset == NULL) {
  12423        return BCM_E_PARAM;
  12424     }
  12425 
  12426     for (idx = 0; idx < num_objects; idx++) {
  12427         /* Fetch udf info for hw_bmap */
  12428         rv = _bcm_udf_td3_object_info_get(unit, objects_list[idx], &obj_info);
  12429         if (BCM_FAILURE(rv)) {
  12430             return rv;
  12431         }
  12432 
  12433         udf_chunks |= obj_info->chunk_bmap;
  12434     }
  12435 
  12436     /* Update qset with internal data qualifiers based on udf_chunks */
  12437     rv = _bcm_field_td3_udf_chunks_to_int_qset(unit, udf_chunks, qset);
  12438     if (BCM_FAILURE(rv)) {
  12439         return rv;
  12440     }
  12441 
  12442     /* setting udf_map helps in gets/deletes */
  12443     for (idx = 0; idx < _BCM_UDF_CTRL_MAX_UDF_CHUNKS(unit); idx++) {
  12444         /* coverity[ptr_arith] */
  12445         if (SHR_BITGET(&udf_chunks, idx)) {
  12446             SHR_BITCLR(qset->udf_map, idx);
  12447         }
  12448     }
  12449 
  12450     return rv;
  12451 }
  12452 
  12453 
  12454 /*
  12455  * Function:
  12456  *      _bcm_field_td3_qualify_udf
  12457  * Purpose:
  12458  *      Add UDF data that the packet must match to trigger qualifier.
  12459  * Parameters:
  12460  *      unit            - (IN)  Unit number.
  12461  *      eid             - (IN)  Field Entry.
  12462  *      udf_id          - (IN)  UDF ID.
  12463  *      length          - (IN)  Number of bytes to match in field entry.
  12464  *      data            - (IN)  Input data to qualify the entry.
  12465  *      mask            - (IN)  Input mask to qualify the entry.
  12466  * Returns:
  12467  *      BCM_E_xxx
  12468  * Notes:
  12469  */
  12470 STATIC int
  12471 _bcm_field_td3_qualify_udf(
  12472     int unit,
  12473     bcm_field_entry_t eid,
  12474     bcm_udf_id_t udf_id,
  12475     int length,
  12476     uint8 *data,
  12477     uint8 *mask)
  12478 {
  12479     int rv;
  12480     int gran;
  12481     int chunk;
  12482     int bytes;
  12483     int len = 0;
  12484     int bits = 8;
  12485     uint32 q_data, q_mask;
  12486     int      size = 0;
  12487     uint8    hints_present;
  12488     uint8    pdata[32];
  12489     uint8    pmask[32];
  12490     uint32 chunk_bmap = 0;
  12491     _bcm_field_internal_qualify_t qual;
  12492     _field_entry_t *f_ent = NULL;
  12493     _bcm_udf_td3_obj_info_t *obj_info = NULL;
  12494 
  12495     /* Fetch udf info for hw_bmap */
  12496     rv = _bcm_udf_td3_object_info_get(unit, udf_id, &obj_info);
  12497     if (BCM_FAILURE(rv)) {
  12498        return rv;
  12499     }
  12500 
  12501     /* If provided entry data length is greater than UDF width */
  12502     if ((length > obj_info->width) || (length <= 0)) {
  12503         return (BCM_E_PARAM);
  12504     }
  12505 
  12506     /* Chunk Granularity */
  12507     gran = _BCM_UDF_CTRL_OFFSET_GRAN(unit);
  12508 
  12509     chunk_bmap = obj_info->chunk_bmap;
  12510 
  12511     /* Get entry info. */
  12512     BCM_IF_ERROR_RETURN(_field_entry_get(unit, eid,
  12513                        _FP_ENTRY_PRIMARY, &f_ent));
  12514 
  12515     sal_memset(pdata, 0, 32 * sizeof(uint8));
  12516     sal_memset(pmask, 0, 32 * sizeof(uint8));
  12517     sal_memcpy(pdata, data, length);
  12518     sal_memcpy(pmask, mask, length);
  12519 
  12520     rv = _field_udf_hints_present_get(unit, eid, udf_id, &hints_present);
  12521     if (BCM_FAILURE(rv)) {
  12522         return rv;
  12523     }
  12524 
  12525     size = hints_present ? length : obj_info->width;
  12526     /*
  12527      * If the size is odd number,
  12528      * make it even by adding 1 to it as the pdata and pmask are already filled
  12529      * with 0s at that size + 1 position.
  12530      */
  12531     size = (size == 1) ? (size + 1) : size;
  12532     len = size - 1;
  12533     /* Update udf_chuks bmap with qset */
  12534     for (chunk = _BCM_UDF_CTRL_MAX_UDF_CHUNKS(unit) - 1; chunk >= 0; chunk--) {
  12535         if(chunk_bmap & (1 << chunk)) {
  12536             qual = _bcm_udf_chunk_to_qual_mapping[chunk];
  12537             q_data = q_mask = 0;
  12538             for (bytes = gran - 1; bytes >= 0; bytes--) {
  12539                 if (len < 0) {
  12540                    break;
  12541                 }
  12542                 q_data |= pdata[len] << ((gran - 1 - bytes) * bits);
  12543                 q_mask |= pmask[len] << ((gran - 1 - bytes) * bits);
  12544                 len--;
  12545             }
  12546 
  12547             if (f_ent->group->stage_id != _BCM_FIELD_STAGE_LOOKUP) {
  12548                /* coverity[address_of : FALSE] */
  12549                /* coverity[callee_ptr_arith : FALSE] */
  12550                rv = _bcm_field_th_qualify_set(unit, eid, qual,
  12551                                               &q_data, &q_mask,
  12552                                               _FP_QUALIFIER_ADD);
  12553                if ((BCM_E_PARAM == rv) && hints_present) {
  12554                    if (!BCM_FIELD_QSET_TEST_INTERNAL(f_ent->group->qset, qual)) {
  12555                        rv = BCM_E_NONE;
  12556                    }
  12557                }
  12558             } else {
  12559                rv = _field_qualify32(unit, eid, qual, q_data, q_mask);
  12560             }
  12561             BCM_IF_ERROR_RETURN(rv);
  12562         }
  12563     }
  12564 
  12565     return BCM_E_NONE;
  12566 }
  12567 
  12568 STATIC int
  12569 _bcm_field_td3_qualify_udf_get(
  12570     int unit,
  12571     bcm_field_entry_t eid,
  12572     bcm_udf_id_t udf_id,
  12573     int max_length,
  12574     uint8 *data,
  12575     uint8 *mask,
  12576     int *actual_length)
  12577 {
  12578     int rv;
  12579     int gran;
  12580     int chunk;
  12581     int bytes;
  12582     int len = 0;
  12583     int bits = 8;
  12584     uint8    hints_present;
  12585     uint32 q_data, q_mask;
  12586     uint32 chunk_bmap = 0;
  12587     _bcm_field_internal_qualify_t qual;
  12588     _field_entry_t *f_ent = NULL;
  12589     _bcm_udf_td3_obj_info_t *obj_info = NULL;
  12590 
  12591     /* Input parameters check. */
  12592     if ((NULL == data) || (NULL == mask) ||
  12593         (NULL == actual_length) || (max_length == 0)) {
  12594         return (BCM_E_PARAM);
  12595     }
  12596 
  12597     /* Fetch udf info for hw_bmap */
  12598     rv = _bcm_udf_td3_object_info_get(unit, udf_id, &obj_info);
  12599     if (BCM_FAILURE(rv)) {
  12600        return rv;
  12601     }
  12602 
  12603     /*
  12604      * If provided entry data length is less than data length used
  12605      * to create qualifier then return error
  12606      */
  12607     if (max_length < obj_info->width) {
  12608         return (BCM_E_PARAM);
  12609     }
  12610 
  12611 
  12612     /* Chunk Granularity */
  12613     gran = _BCM_UDF_CTRL_OFFSET_GRAN(unit);
  12614 
  12615     chunk_bmap = obj_info->chunk_bmap;
  12616 
  12617     /* Get entry info. */
  12618     BCM_IF_ERROR_RETURN(_bcm_field_entry_get_by_id(unit, eid, &f_ent));
  12619 
  12620 
  12621     rv = _field_udf_hints_present_get(unit, eid, udf_id, &hints_present);
  12622     BCM_IF_ERROR_RETURN(rv);
  12623 
  12624     /* Update udf_chuks bmap with qset */
  12625     for (chunk = 0; chunk < _BCM_UDF_CTRL_MAX_UDF_CHUNKS(unit); chunk++) {
  12626         if(chunk_bmap & (1 << chunk)) {
  12627             qual = _bcm_udf_chunk_to_qual_mapping[chunk];
  12628             q_data = q_mask = 0;
  12629             rv = _bcm_field_entry_qualifier_uint32_get(unit, eid, qual,
  12630                                                        &q_data, &q_mask);
  12631             if ((BCM_E_NOT_FOUND == rv) && hints_present) {
  12632                 if (!BCM_FIELD_QSET_TEST_INTERNAL(f_ent->group->qset, qual)) {
  12633                     rv = BCM_E_NONE;
  12634                 }
  12635             }
  12636             BCM_IF_ERROR_RETURN(rv);
  12637 
  12638             for (bytes = 0; bytes < gran; bytes++) {
  12639                 if (len >= max_length) {
  12640                    break;
  12641                 }
  12642 
  12643                 data[len] = q_data >> ((gran - 1 - bytes) * bits);
  12644                 mask[len] = q_mask >> ((gran - 1 - bytes) * bits);
  12645                 len++;
  12646             }
  12647         }
  12648     }
  12649     *actual_length = len;
  12650 
  12651     return BCM_E_NONE;
  12652 }
  12653 
  12654 int
  12655 _field_td3_flex_action_set(int unit,
  12656                            _field_action_t *fa,
  12657                            _bcm_field_action_offset_t *a_offset)
  12658 {
  12659     int               rv1 = BCM_E_UNAVAIL;
  12660     int               rv2 = BCM_E_UNAVAIL;
  12661     int                         valid = 0;
  12662     char                   *object = NULL;
  12663     char              *object_mask = NULL;
  12664     soc_cancun_ceh_field_info_t ceh_info1;
  12665     soc_cancun_ceh_field_info_t ceh_info2;
  12666 
  12667     switch (fa->action) {
  12668         case bcmFieldActionEgressFlowControlEnable:
  12669             valid = 0;
  12670             switch (fa->param[0]) {
  12671                 case bcmFieldEgressFlowControlLoopbackRedirect:
  12672                      object = "REDIRECT_TO_DEST";
  12673                      object_mask = "REDIRECT_TO_DEST_MASK";
  12674                      valid = 1;
  12675                      break;
  12676                 case bcmFieldEgressFlowControlAppendIncomingOuterVlan:
  12677                      object = "PRESERVE_INCOMING_OTAG";
  12678                      object_mask = "PRESERVE_INCOMING_OTAG_MASK";
  12679                      valid = 1;
  12680                      break;
  12681                 case bcmFieldEgressFlowControlAppendOuterVlanNew:
  12682                      object = "ASSIGN_PRESERVE_OTAG";
  12683                      object_mask = "ASSIGN_PRESERVE_OTAG_MASK";
  12684                      valid = 1;
  12685                      break;
  12686                 case bcmFieldEgressFlowControlTranslateSnatSrcIpOnly:
  12687                      object = "SIP_ONLY_TRANSLATE";
  12688                      object_mask = "SIP_ONLY_TRANSLATE_MASK";
  12689                      valid = 1;
  12690                      break;
  12691                 case bcmFieldEgressFlowControlTranslateDnatSrcIpDstIp:
  12692                      object = "SIP_DIP_TRANSLATE";
  12693                      object_mask = "SIP_DIP_TRANSLATE_MASK";
  12694                      valid = 1;
  12695                      break;
  12696                 case bcmFieldEgressFlowControlTranslateSnatSrcIpDstIp:
  12697                      object = "SIP_DIP_TRANSLATE_SNAT";
  12698                      object_mask = "SIP_DIP_TRANSLATE_SNAT_MASK";
  12699                      valid = 1;
  12700                      break;
  12701                 case bcmFieldEgressFlowControlTranslateSnaptSrcIpL4SrcPort:
  12702                      object = "SIP_L4SRC_PORT_TRANSLATE";
  12703                      object_mask = "SIP_L4SRC_PORT_TRANSLATE_MASK";
  12704                      valid = 1;
  12705                      break;
  12706                 case bcmFieldEgressFlowControlTranslateSnaptSrcIpDstIpL4SrcPortL4DstPort:
  12707                      object = "SIP_L4SRC_PORT_DIP_L4DST_PORT_TRANSLATE_SNAT";
  12708                      object_mask = "SIP_L4SRC_PORT_DIP_L4DST_PORT_TRANSLATE_SNAT_MASK";
  12709                      valid = 1;
  12710                      break;
  12711                 case bcmFieldEgressFlowControlTranslateDnaptSrcIpDstIpL4SrcPortL4DstPort:
  12712                      object = "SIP_L4SRC_PORT_DIP_L4DST_PORT_TRANSLATE";
  12713                      object_mask = "SIP_L4SRC_PORT_DIP_L4DST_PORT_TRANSLATE_MASK";
  12714                      valid = 1;
  12715                      break;
  12716                 case bcmFieldEgressFlowControlTranslateDnatDstIpOnly:
  12717                      object = "DIP_ONLY_TRANSLATE";
  12718                      object_mask = "DIP_ONLY_TRANSLATE_MASK";
  12719                      valid = 1;
  12720                      break;
  12721                 case bcmFieldEgressFlowControlTranslateDnaptDstIpL4DstPort:
  12722                      object = "DIP_L4DST_PORT_TRANSLATE";
  12723                      object_mask = "DIP_L4DST_PORT_TRANSLATE_MASK";
  12724                      valid = 1;
  12725                      break;
  12726                 case bcmFieldEgressFlowControlTranslateIpmc:
  12727                      object = "IPMC_TRANSLATE";
  12728                      object_mask = "IPMC_TRANSLATE_MASK";
  12729                      valid = 1;
  12730                      break;
  12731                 case bcmFieldEgressFlowControlSrcMacDstMacVlanNew:
  12732                      object = "CHANGE_L2_FIELDS_DA_SA_VLAN";
  12733                      object_mask = "CHANGE_L2_FIELDS_DA_SA_VLAN_MASK";
  12734                      valid = 1;
  12735                      break;
  12736                 case bcmFieldEgressFlowControlDstMacVlanNew:
  12737                      object = "CHANGE_L2_FIELDS_DA_VLAN";
  12738                      object_mask = "CHANGE_L2_FIELDS_DA_VLAN_MASK";
  12739                      valid = 1;
  12740                      break;
  12741                 case bcmFieldEgressFlowControlSrcMacVlanNew:
  12742                      object = "CHANGE_L2_FIELDS_SA_VLAN";
  12743                      object_mask = "CHANGE_L2_FIELDS_SA_VLAN_MASK";
  12744                      valid = 1;
  12745                      break;
  12746                 case bcmFieldEgressFlowControlVlanNew:
  12747                      object = "CHANGE_L2_FIELDS_VLAN";
  12748                      object_mask = "CHANGE_L2_FIELDS_VLAN_MASK";
  12749                      valid = 1;
  12750                      break;
  12751                 default:
  12752                     break;
  12753             }
  12754             if (valid)  {
  12755                     rv1 = soc_cancun_ceh_obj_field_get(unit, "EXTRACTION_CTRL_ID",
  12756                                                         object, &ceh_info1);
  12757                     rv2 = soc_cancun_ceh_obj_field_get(unit, "EXTRACTION_CTRL_ID",
  12758                                                         object_mask, &ceh_info2);
  12759                     if (SOC_FAILURE(rv1) || SOC_FAILURE(rv2)) {
  12760                         return BCM_E_UNAVAIL;
  12761                     }
  12762                     a_offset->value[0] = ceh_info1.value;
  12763                     a_offset->value[0] |= ((ceh_info2.value) << ceh_info2.offset);
  12764             }
  12765             break;
  12766         case bcmFieldActionEgressFlowEncapEnable:
  12767             valid = 0;
  12768             switch (fa->param[0]) {
  12769                 case bcmFieldEgressFlowEncapAppendIncomingOuterVlan:
  12770                      object = "PRESERVE_INCOMING_OTAG";
  12771                      object_mask = "PRESERVE_INCOMING_OTAG_MASK";
  12772                      valid = 1;
  12773                      break;
  12774                 case bcmFieldEgressFlowEncapTwampOwampTxTimestamp:
  12775                      object = "TWAMP_OWAMP_TS";
  12776                      object_mask = "TWAMP_OWAMP_TS_MASK";
  12777                      valid = 1;
  12778                      break;
  12779                 default:
  12780                     break;
  12781             }
  12782             if (valid)  {
  12783                     rv1 = soc_cancun_ceh_obj_field_get(unit, "EDIT_CTRL_ID",
  12784                                                         object, &ceh_info1);
  12785                     rv2 = soc_cancun_ceh_obj_field_get(unit, "EDIT_CTRL_ID",
  12786                                                         object_mask, &ceh_info2);
  12787                     if (SOC_FAILURE(rv1) || SOC_FAILURE(rv2)) {
  12788                         return BCM_E_UNAVAIL;
  12789                     }
  12790                     a_offset->value[0] = ceh_info1.value;
  12791                     a_offset->value[0] |= ((ceh_info2.value) << ceh_info2.offset);
  12792             }
  12793             break;
  12794         case bcmFieldActionAssignChangeL2FieldsClassId:
  12795             rv1 = soc_cancun_ceh_obj_field_get(unit, "OPAQUE_3",
  12796                                                "CHANGE_L2_FIELDS_EDIT_INDEX",
  12797                                                &ceh_info1);
  12798             if (SOC_FAILURE(rv1)) {
  12799                 return BCM_E_UNAVAIL;
  12800             }
  12801             a_offset->value[0] = fa->param[0];
  12802             break;
  12803         case bcmFieldActionLoopbackSubtype:
  12804             switch (fa->param[0]) {
  12805                 case bcmFieldLoopbackSubtypeIfa: 
  12806                     rv1 = soc_cancun_ceh_obj_field_get(unit, "OPAQUE_3",
  12807                                                        "IFA_LOOPBACK_SUBTYPE",
  12808                                                         &ceh_info1);
  12809                     if (SOC_FAILURE(rv1)) {
  12810                         return BCM_E_UNAVAIL;
  12811                     }
  12812                     a_offset->value[0] = ceh_info1.value;
  12813                     break;
  12814                 default:
  12815                     break;
  12816             }
  12817             break;
  12818         case bcmFieldActionLoopbackType:
  12819             switch (fa->param[0]) {
  12820                 case bcmFieldLoopbackTypeRedirect: 
  12821                     rv1 = soc_cancun_ceh_obj_field_get(unit, "LOOPBACK_PROFILE_PTR",
  12822                                                        "REDIRECT_TO_DEST",
  12823                                                         &ceh_info1);
  12824                     if (SOC_FAILURE(rv1)) {
  12825                         return BCM_E_UNAVAIL;
  12826                     }
  12827                     a_offset->value[0] = ceh_info1.value;
  12828                     break;
  12829                 case bcmFieldLoopbackTypeMasquerade: 
  12830                     rv1 = soc_cancun_ceh_obj_field_get(unit, "LOOPBACK_PROFILE_PTR",
  12831                                                        "CPU_MASQUERADE",
  12832                                                         &ceh_info1);
  12833                     if (SOC_FAILURE(rv1)) {
  12834                         return BCM_E_UNAVAIL;
  12835                     }
  12836                     a_offset->value[0] = ceh_info1.value;
  12837                     break;
  12838                 default:
  12839                     break;
  12840             }
  12841             break;
  12842         default: 
  12843             break;
  12844     }
  12845 
  12846     return BCM_E_NONE;
  12847 }
  12848 
  12849 int
  12850 _bcm_field_td3_internal_action_profile_data_set(int unit,
  12851                                                 _field_entry_t *f_ent,
  12852                                                 _field_action_t *fa,
  12853                                                 _field_em_action_set_t *acts_buf)
  12854 {
  12855     int                         rv, rv1, rv2, val;
  12856     uint8                       field_action_set = 0;
  12857     _field_stage_t              *stage_fc;
  12858     _field_em_action_set_t      *edit_acts = NULL;
  12859     _field_em_action_set_t      *ext_acts = NULL;
  12860     _field_em_action_set_t      *opaque_acts = NULL;
  12861     _field_em_action_set_t      *opaque_acts1 = NULL;
  12862     _bcm_field_action_conf_t    *action_conf_ptr;
  12863     _bcm_field_action_offset_t  edit_action_offset;
  12864     _bcm_field_action_offset_t  ext_action_offset;
  12865     _bcm_field_action_offset_t  opaque_action_offset;
  12866     _bcm_field_action_offset_t  opaque_action_offset1;
  12867     soc_cancun_ceh_field_info_t ceh_info1;
  12868     soc_cancun_ceh_field_info_t ceh_info2;
  12869 
  12870     if ((fa->action != bcmFieldActionIntEncapEnable) &&
  12871         (fa->action != bcmFieldActionIntTurnAround) &&
  12872         (fa->action != bcmFieldActionIntEncapUpdate) &&
  12873         (fa->action != bcmFieldActionAddIngOuterVlanToEgrOuterVlan) &&
  12874         (fa->action != bcmFieldActionErspan3HdrVlanCosPktCopy) &&
  12875         (fa->action != bcmFieldActionGbpClassifierAdd) &&
  12876         (fa->action != bcmFieldActionGbpSrcMacMcastBitSet) &&
  12877         (fa->action != bcmFieldActionGbpSrcIdNew) &&
  12878         (fa->action != bcmFieldActionGbpDstIdNew) &&
  12879         (fa->action != bcmFieldActionAssignNatClassId) &&
  12880         (fa->action != bcmFieldActionErspan3HdrGbpSrcIdAdd) &&
  12881         (fa->action != bcmFieldActionErspan3HdrUdf2Add) &&
  12882         (fa->action != bcmFieldActionNshEncapEnable) &&
  12883         (fa->action != bcmFieldActionNshServicePathId) &&
  12884         (fa->action != bcmFieldActionNshServiceIndex)) {
  12885         return BCM_E_NONE;
  12886     }
  12887 
  12888     /* Get stage control structure. */
  12889     rv = _field_stage_control_get(unit, f_ent->group->stage_id, &stage_fc);
  12890     BCM_IF_ERROR_RETURN(rv);
  12891 
  12892     if ((fa->action == bcmFieldActionIntEncapEnable) ||
  12893         (fa->action == bcmFieldActionIntTurnAround) ||
  12894         (fa->action == bcmFieldActionNshEncapEnable)) {
  12895        /* Get action conf ptr from stage structure for EditCtrlId */
  12896        action_conf_ptr = stage_fc->f_action_arr[_bcmFieldActionEditCtrlId];
  12897        if (NULL != action_conf_ptr) {
  12898           /* get the aset enum from action_conf_pointer */
  12899           field_action_set = action_conf_ptr->offset->aset;
  12900        } else {
  12901           return BCM_E_INTERNAL;
  12902        }
  12903 
  12904        /* Set Action Set Buffer. */
  12905        edit_acts = &acts_buf[field_action_set];
  12906 
  12907        rv = _bcm_field_action_offset_get(unit, stage_fc, _bcmFieldActionEditCtrlId, &edit_action_offset, 0);
  12908        BCM_IF_ERROR_RETURN(rv);
  12909     }
  12910 
  12911     if ((fa->action == bcmFieldActionIntEncapEnable) ||
  12912         (fa->action == bcmFieldActionIntEncapUpdate) ||
  12913         (fa->action == bcmFieldActionAddIngOuterVlanToEgrOuterVlan) ||
  12914         (fa->action == bcmFieldActionErspan3HdrVlanCosPktCopy) ||
  12915         (fa->action == bcmFieldActionGbpClassifierAdd) ||
  12916         (fa->action == bcmFieldActionGbpSrcMacMcastBitSet) ||
  12917         (fa->action == bcmFieldActionNshEncapEnable)) {
  12918        action_conf_ptr = stage_fc->f_action_arr[_bcmFieldActionExtractionCtrlId];
  12919        if (NULL != action_conf_ptr) {
  12920           /* get the aset enum from action_conf_pointer */
  12921           field_action_set = action_conf_ptr->offset->aset;
  12922        } else {
  12923           return BCM_E_INTERNAL;
  12924        }
  12925 
  12926        /* Set Action Set Buffer. */
  12927        ext_acts = &acts_buf[field_action_set];
  12928 
  12929        rv = _bcm_field_action_offset_get(unit, stage_fc, _bcmFieldActionExtractionCtrlId, &ext_action_offset, 0);
  12930        BCM_IF_ERROR_RETURN(rv);
  12931     }
  12932 
  12933     if ((fa->action == bcmFieldActionErspan3HdrGbpSrcIdAdd) ||
  12934         (fa->action == bcmFieldActionErspan3HdrUdf2Add) ||
  12935         (fa->action == bcmFieldActionAssignNatClassId) ||
  12936         (fa->action == bcmFieldActionGbpSrcIdNew) ||
  12937         (fa->action == bcmFieldActionGbpDstIdNew) ||
  12938         (fa->action == bcmFieldActionNshServiceIndex)) {
  12939        int _action;
  12940 
  12941        if (bcmFieldActionErspan3HdrGbpSrcIdAdd == fa->action) {
  12942           _action = _bcmFieldActionOpaque3;
  12943        } else if ((fa->action == bcmFieldActionErspan3HdrUdf2Add) ||
  12944                   (bcmFieldActionAssignNatClassId == fa->action) ||
  12945                   (bcmFieldActionGbpSrcIdNew == fa->action)) {
  12946           _action = _bcmFieldActionOpaque1;
  12947        } else {
  12948           _action = _bcmFieldActionOpaque2;
  12949        }
  12950 
  12951        action_conf_ptr = stage_fc->f_action_arr[_action];
  12952        if (NULL != action_conf_ptr) {
  12953           /* get the aset enum from action_conf_pointer */
  12954           field_action_set = action_conf_ptr->offset->aset;
  12955        } else {
  12956           return BCM_E_INTERNAL;
  12957        }
  12958 
  12959        /* Set Action Set Buffer. */
  12960        opaque_acts = &acts_buf[field_action_set];
  12961 
  12962        rv = _bcm_field_action_offset_get(unit, stage_fc, _action, &opaque_action_offset, 0);
  12963        BCM_IF_ERROR_RETURN(rv);
  12964 
  12965     }
  12966 
  12967     if (fa->action == bcmFieldActionNshServicePathId) {
  12968        int _action;
  12969 
  12970        _action = _bcmFieldActionOpaque2;
  12971        action_conf_ptr = stage_fc->f_action_arr[_action];
  12972        if (NULL != action_conf_ptr) {
  12973           /* get the aset enum from action_conf_pointer */
  12974           field_action_set = action_conf_ptr->offset->aset;
  12975        } else {
  12976           return BCM_E_INTERNAL;
  12977        }
  12978 
  12979        /* Set Action Set Buffer. */
  12980        opaque_acts = &acts_buf[field_action_set];
  12981 
  12982        rv = _bcm_field_action_offset_get(unit, stage_fc, _action, &opaque_action_offset, 0);
  12983        BCM_IF_ERROR_RETURN(rv);
  12984 
  12985 
  12986        _action = _bcmFieldActionOpaque1;
  12987        action_conf_ptr = stage_fc->f_action_arr[_action];
  12988        if (NULL != action_conf_ptr) {
  12989           /* get the aset enum from action_conf_pointer */
  12990           field_action_set = action_conf_ptr->offset->aset;
  12991        } else {
  12992           return BCM_E_INTERNAL;
  12993        }
  12994 
  12995        /* Set Action Set Buffer. */
  12996        opaque_acts1 = &acts_buf[field_action_set];
  12997 
  12998        rv = _bcm_field_action_offset_get(unit, stage_fc, _action, &opaque_action_offset1, 0);
  12999        BCM_IF_ERROR_RETURN(rv);
  13000     }
  13001 
  13002     switch (fa->action) {
  13003        case bcmFieldActionIntEncapEnable:
  13004            rv1 = soc_cancun_ceh_obj_field_get(unit, "EDIT_CTRL_ID", "INT_ENABLE",
  13005                                               &ceh_info1);
  13006            rv2 = soc_cancun_ceh_obj_field_get(unit, "EDIT_CTRL_ID", "INT_ENABLE_MASK",
  13007                                               &ceh_info2);
  13008            if (SOC_FAILURE(rv1) || SOC_FAILURE(rv2)) {
  13009               return BCM_E_INTERNAL;
  13010            }
  13011            edit_action_offset.value[0] = ceh_info1.value;
  13012            edit_action_offset.value[0] |= ((ceh_info2.value) << ceh_info2.offset);
  13013            ACTION_SET(unit, f_ent, edit_acts->data, &edit_action_offset);
  13014            edit_acts->valid = 1;
  13015 
  13016            rv1 = soc_cancun_ceh_obj_field_get(unit, "EXTRACTION_CTRL_ID", "INT_ENABLE",
  13017                                               &ceh_info1);
  13018            rv2 = soc_cancun_ceh_obj_field_get(unit, "EXTRACTION_CTRL_ID", "INT_ENABLE_MASK",
  13019                                               &ceh_info2);
  13020            if (SOC_FAILURE(rv1) || SOC_FAILURE(rv2)) {
  13021               return BCM_E_INTERNAL;
  13022            }
  13023            ext_action_offset.value[0] = ceh_info1.value;
  13024            ext_action_offset.value[0] |= ((ceh_info2.value) << ceh_info2.offset);
  13025            ACTION_SET(unit, f_ent, ext_acts->data, &ext_action_offset);
  13026            ext_acts->valid = 1;
  13027            break;
  13028 
  13029        case bcmFieldActionIntEncapUpdate:
  13030            rv1 = soc_cancun_ceh_obj_field_get(unit, "EXTRACTION_CTRL_ID", "INT_ENABLE",
  13031                                               &ceh_info1);
  13032            rv2 = soc_cancun_ceh_obj_field_get(unit, "EXTRACTION_CTRL_ID", "INT_ENABLE_MASK",
  13033                                               &ceh_info2);
  13034            if (SOC_FAILURE(rv1) || SOC_FAILURE(rv2)) {
  13035               return BCM_E_INTERNAL;
  13036            }
  13037            ext_action_offset.value[0] = ceh_info1.value;
  13038            ext_action_offset.value[0] |= ((ceh_info2.value) << ceh_info2.offset);
  13039            ACTION_SET(unit, f_ent, ext_acts->data, &ext_action_offset);
  13040            ext_acts->valid = 1;
  13041            break;
  13042 
  13043        case bcmFieldActionIntTurnAround:
  13044            rv1 = soc_cancun_ceh_obj_field_get(unit, "EDIT_CTRL_ID", "INT_TURNAROUND",
  13045                                               &ceh_info1);
  13046            rv2 = soc_cancun_ceh_obj_field_get(unit, "EDIT_CTRL_ID", "INT_TURNAROUND_MASK",
  13047                                               &ceh_info2);
  13048            if (SOC_FAILURE(rv1) || SOC_FAILURE(rv2)) {
  13049               return BCM_E_INTERNAL;
  13050            }
  13051            edit_action_offset.value[0] = ceh_info1.value;
  13052            edit_action_offset.value[0] |= ((ceh_info2.value) << ceh_info2.offset);
  13053            ACTION_SET(unit, f_ent, edit_acts->data, &edit_action_offset);
  13054            edit_acts->valid = 1;
  13055            break;
  13056 
  13057        case bcmFieldActionAddIngOuterVlanToEgrOuterVlan:
  13058            rv1 = soc_cancun_ceh_obj_field_get(unit, "EXTRACTION_CTRL_ID",
  13059                                               "PRESERVE_INCOMING_OTAG", &ceh_info1);
  13060            rv2 = soc_cancun_ceh_obj_field_get(unit, "EXTRACTION_CTRL_ID",
  13061                                               "PRESERVE_INCOMING_OTAG_MASK", &ceh_info2);
  13062            if (SOC_FAILURE(rv1) || SOC_FAILURE(rv2)) {
  13063                if ((BCM_E_NOT_FOUND == rv1) && (BCM_E_NOT_FOUND == rv2)) { 
  13064                    rv1 = soc_cancun_ceh_obj_field_get(unit, "EXTRACTION_CTRL_ID",
  13065                                                       "ADD_ING_OTAG_TO_EGR_OTAG",
  13066                                                       &ceh_info1);
  13067                    rv2 = soc_cancun_ceh_obj_field_get(unit, "EXTRACTION_CTRL_ID",
  13068                                                       "ADD_ING_OTAG_TO_EGR_OTAG_MASK",
  13069                                                       &ceh_info2);
  13070                }
  13071                if (SOC_FAILURE(rv1) || SOC_FAILURE(rv2)) {
  13072                    return BCM_E_INTERNAL;
  13073                }
  13074            }
  13075            ext_action_offset.value[0] = ceh_info1.value;
  13076            ext_action_offset.value[0] |= ((ceh_info2.value) << ceh_info2.offset);
  13077            ACTION_SET(unit, f_ent, ext_acts->data, &ext_action_offset);
  13078            ext_acts->valid = 1;
  13079            break;
  13080 
  13081        case bcmFieldActionErspan3HdrVlanCosPktCopy:
  13082            ext_action_offset.value[0] = _BCM_FIELD_EXTR_CTRL_ID_ERSPAN3_VLAN_PKT_COPY;
  13083            ext_action_offset.value[0] |= 0xff00;
  13084            ACTION_SET(unit, f_ent, ext_acts->data, &ext_action_offset);
  13085            ext_acts->valid = 1;
  13086            break;
  13087 
  13088        case bcmFieldActionGbpSrcMacMcastBitSet:
  13089            rv1 = soc_cancun_ceh_obj_field_get(unit, "EXTRACTION_CTRL_ID",
  13090                                               "GBP_SID_DID_CHECK", &ceh_info1);
  13091            rv2 = soc_cancun_ceh_obj_field_get(unit, "EXTRACTION_CTRL_ID",
  13092                                               "GBP_SID_DID_CHECK_MASK", &ceh_info2);
  13093            if (SOC_FAILURE(rv1) || SOC_FAILURE(rv2)) {
  13094               return BCM_E_INTERNAL;
  13095            }
  13096            ext_action_offset.value[0] = ceh_info1.value;
  13097            ext_action_offset.value[0] |= ((ceh_info2.value) << ceh_info2.offset);
  13098            ACTION_SET(unit, f_ent, ext_acts->data, &ext_action_offset);
  13099            ext_acts->valid = 1;
  13100            break;
  13101 
  13102        case bcmFieldActionGbpClassifierAdd:
  13103            rv1 = soc_cancun_ceh_obj_field_get(unit, "EXTRACTION_CTRL_ID",
  13104                                               "GBP_PRESENT_IN_PKT", &ceh_info1);
  13105            rv2 = soc_cancun_ceh_obj_field_get(unit, "EXTRACTION_CTRL_ID",
  13106                                               "GBP_PRESENT_IN_PKT_MASK", &ceh_info2);
  13107            if (SOC_FAILURE(rv1) || SOC_FAILURE(rv2)) {
  13108               return BCM_E_INTERNAL;
  13109            }
  13110            ext_action_offset.value[0] = ceh_info1.value;
  13111            ext_action_offset.value[0] |= ((ceh_info2.value) << ceh_info2.offset);
  13112            ACTION_SET(unit, f_ent, ext_acts->data, &ext_action_offset);
  13113            ext_acts->valid = 1;
  13114            break;
  13115 
  13116        case bcmFieldActionErspan3HdrGbpSrcIdAdd:
  13117        case bcmFieldActionErspan3HdrUdf2Add:
  13118        case bcmFieldActionAssignNatClassId:
  13119        case bcmFieldActionGbpDstIdNew:
  13120        case bcmFieldActionGbpSrcIdNew:
  13121            opaque_action_offset.value[0] = fa->param[0];
  13122            ACTION_SET(unit, f_ent, opaque_acts->data, &opaque_action_offset);
  13123            opaque_acts->valid = 1;
  13124            break;
  13125        case bcmFieldActionNshEncapEnable:
  13126            rv1 = soc_cancun_ceh_obj_field_get(unit, "EDIT_CTRL_ID", "ADD_NSH",
  13127                                               &ceh_info1);
  13128            rv2 = soc_cancun_ceh_obj_field_get(unit, "EDIT_CTRL_ID", "ADD_NSH_MASK",
  13129                                               &ceh_info2);
  13130            if (SOC_FAILURE(rv1) || SOC_FAILURE(rv2)) {
  13131               return BCM_E_INTERNAL;
  13132            }
  13133            edit_action_offset.value[0] = ceh_info1.value;
  13134            edit_action_offset.value[0] |= ((ceh_info2.value) << ceh_info2.offset);
  13135            ACTION_SET(unit, f_ent, edit_acts->data, &edit_action_offset);
  13136            edit_acts->valid = 1;
  13137 
  13138            rv1 = soc_cancun_ceh_obj_field_get(unit, "EXTRACTION_CTRL_ID", "SPID_SI_LOOKUP_ENABLE",
  13139                                               &ceh_info1);
  13140            rv2 = soc_cancun_ceh_obj_field_get(unit, "EXTRACTION_CTRL_ID", "SPID_SI_LOOKUP_ENABLE_MASK",
  13141                                               &ceh_info2);
  13142            if (SOC_FAILURE(rv1) || SOC_FAILURE(rv2)) {
  13143               return BCM_E_INTERNAL;
  13144            }
  13145            ext_action_offset.value[0] = ceh_info1.value;
  13146            ext_action_offset.value[0] |= ((ceh_info2.value) << ceh_info2.offset);
  13147            ACTION_SET(unit, f_ent, ext_acts->data, &ext_action_offset);
  13148            ext_acts->valid = 1;
  13149            break;
  13150        case bcmFieldActionNshServiceIndex:
  13151            rv = soc_cancun_ceh_obj_field_get(unit, "OPAQUE_2", "SI",
  13152                                               &ceh_info1);
  13153            BCM_IF_ERROR_RETURN(rv);
  13154            opaque_action_offset.width[0] = ceh_info1.width;
  13155            opaque_action_offset.value[0] = fa->param[0];
  13156            ACTION_SET(unit, f_ent, opaque_acts->data, &opaque_action_offset);
  13157            opaque_acts->valid = 1;
  13158            break;
  13159        case bcmFieldActionNshServicePathId:
  13160            rv = soc_cancun_ceh_obj_field_get(unit, "OPAQUE_2", "SPID_7_0",
  13161                                               &ceh_info1);
  13162            BCM_IF_ERROR_RETURN(rv);
  13163            opaque_action_offset.offset[0] = ceh_info1.offset;
  13164            opaque_action_offset.width[0] = ceh_info1.width;
  13165            val = ((1 << opaque_action_offset.width[0]) - 1) & fa->param[0];
  13166            opaque_action_offset.value[0] = val;
  13167 
  13168            rv = soc_cancun_ceh_obj_field_get(unit, "OPAQUE_1", "SPID_23_8",
  13169                                               &ceh_info1);
  13170            BCM_IF_ERROR_RETURN(rv);
  13171            opaque_action_offset1.offset[0] = ceh_info1.offset;
  13172            opaque_action_offset1.width[0] = ceh_info1.width;
  13173            val = (fa->param[0] >> opaque_action_offset.width[0]);
  13174            opaque_action_offset1.value[0] = val;
  13175 
  13176            ACTION_SET(unit, f_ent, opaque_acts->data, &opaque_action_offset);
  13177            opaque_acts->valid = 1;
  13178            ACTION_SET(unit, f_ent, opaque_acts1->data, &opaque_action_offset1);
  13179            opaque_acts1->valid = 1;
  13180            break;
  13181 
  13182        default:
  13183            return BCM_E_INTERNAL;
  13184     }
  13185 
  13186     return BCM_E_NONE;
  13187 }
  13188 
  13189 /*
  13190  * Function:
  13191  *     _bcm_field_td3_em_udf_keygen_mask_get
  13192  * Purpose:
  13193  *  Get the mask to be applied for data qualifiers.
  13194  * Parameters:
  13195  *  unit         - (IN)     BCM device number.
  13196  *  fg           - (IN)     Field group structure.
  13197  *  qid          - (IN)     Qualifier number.
  13198  *  mask         - (OUT)    Mask to be applied.
  13199  * Returns:
  13200  *  BCM_E_XXX
  13201  */
  13202 int _bcm_field_td3_em_udf_keygen_mask_get(int unit,
  13203                                          _field_group_t *fg,
  13204                                          uint16 qid, uint32 *mask)
  13205 {
  13206     uint8 chunk;
  13207     uint16 qual;
  13208     _field_hints_t        *f_ht = NULL;      /* Field hints Structure. */
  13209     _field_hint_t         *hint_node = NULL; /* Field hint Structure. */
  13210 
  13211     /* Parameters Check. */
  13212     if (NULL == fg) {
  13213         return BCM_E_PARAM;
  13214     }
  13215 
  13216     /* Update udf_chuks bmap with qset */
  13217     for (chunk = 0; chunk < _BCM_UDF_CTRL_MAX_UDF_CHUNKS(unit); chunk++) {
  13218         qual = _bcm_udf_chunk_to_qual_mapping[chunk];
  13219         if (qid == qual) {
  13220             if (!fg->hintid) {
  13221                 /* coverity[ptr_arith] */
  13222                 if (SHR_BITGET(fg->qset.udf_map, chunk)) {
  13223                     *mask |= 0xFFFF;
  13224                 }
  13225             } else {
  13226                 if (!SHR_BITGET(fg->qset.udf_map, chunk)) {
  13227                     return BCM_E_NONE;
  13228                 }
  13229                 BCM_IF_ERROR_RETURN(_field_hints_control_get (unit, fg->hintid, &f_ht));
  13230                 /* Not a valid hint Id. */
  13231                 if (NULL == f_ht) {
  13232                     *mask |= 0xFFFF;
  13233                     return BCM_E_NONE;
  13234                 }
  13235                 /* No hints are attached to the hintid. */
  13236                 if (NULL == f_ht->hints) {
  13237                     *mask |= 0xFFFF;
  13238                     return BCM_E_NONE;
  13239                 }
  13240                 /* Go through all the hints in the hintid. */
  13241                 hint_node = f_ht->hints;
  13242                 while (NULL != hint_node) {
  13243                     if (bcmFieldHintTypeExtraction == hint_node->hint->hint_type) {
  13244                         BCM_IF_ERROR_RETURN(_bcm_th_qual_hint_bmp_get(unit, qual, 1, hint_node, mask,
  13245                                                                   0, NULL, NULL));
  13246                     }
  13247                     hint_node = hint_node->next;
  13248                 }
  13249             }
  13250             if (0 == *mask) {
  13251                 *mask |= 0xFFFF;
  13252             }
  13253         }
  13254     }
  13255 
  13256     return BCM_E_NONE;
  13257 }
  13258 
  13259 /*
  13260  * Function:
  13261  *     _bcm_field_td3_ifp_inports_entry_tcam_install
  13262  * Purpose:
  13263  *     Set the per-pipe PBMP in the Ingress TCAM
  13264  * Parameters:
  13265  *     unit         - (IN) BCM device number
  13266  *     f_ent        - (IN) entry structure to get policy info from
  13267  *     tcam_idx     - (IN) Index in the TCAM memory.
  13268  *     _f_pbmp      - (IN) Reference to field PBMP.
  13269  *     num_pipe     - (IN) Number of Pipes the _f_pbmp has.
  13270  * Returns:
  13271  *     BCM_E_XXX
  13272  */
  13273 int
  13274 _bcm_field_td3_ifp_inports_entry_tcam_install(int unit, _field_entry_t *f_ent,
  13275                                               int tcam_idx, uint8 set_pbmp,
  13276                                              _field_pbmp_t *_f_pbmp,
  13277                                               int num_pipe)
  13278 {
  13279     int            rv = BCM_E_NONE;
  13280     int            inst = -1;
  13281     int            valid = 0;
  13282     char           buf_ipbm[100];
  13283     uint32         entry_buf[_BCM_FP_MEM_FIELD_BYTES] = {0};
  13284     _field_tcam_t  *tcam = NULL;
  13285     soc_mem_t      ifp_tcam_wide = INVALIDm;
  13286     static uint32 pbm_34_49[2];
  13287     static uint32 pbm_50_65[2];
  13288     static uint32 pbm_34_49_mask[2];
  13289     static uint32 pbm_50_65_mask[2];
  13290     static bcm_pbmp_t ipbm_data[2];
  13291     static bcm_pbmp_t ipbm_mask[2];
  13292     static uint8  no_pbm_access = 0;
  13293 
  13294     if (f_ent == NULL || _f_pbmp == NULL) {
  13295        return BCM_E_PARAM;
  13296     }
  13297 
  13298     /* Update the valid bit based on the mode and group flags */
  13299     valid = (f_ent->group->flags & _FP_GROUP_LOOKUP_ENABLED) ? 3 : 0;
  13300 
  13301     tcam = &f_ent->tcam;
  13302 
  13303     if (no_pbm_access == 0) {
  13304        uint8       set_data = 0;
  13305        bcm_port_t  port = 0;
  13306        bcm_port_t  temp_p = 0;
  13307        uint8 ipbm_hit, opq1_hit, opq2_hit;
  13308 
  13309        for (inst = 0; inst < num_pipe; inst++) {
  13310           pbm_34_49[inst] = 0;
  13311           pbm_50_65[inst] = 0;
  13312           pbm_34_49_mask[inst] = 0;
  13313           pbm_50_65_mask[inst] = 0;
  13314           BCM_PBMP_CLEAR(ipbm_data[inst]);
  13315           BCM_PBMP_CLEAR(ipbm_mask[inst]);
  13316        }
  13317 
  13318        for (inst = 0; inst < num_pipe; inst++) {
  13319           BCM_PBMP_ITER(_f_pbmp[inst].mask, port) {
  13320               ipbm_hit = opq1_hit = opq2_hit = 0;
  13321 
  13322               if (BCM_PBMP_MEMBER(_f_pbmp[inst].data, port)) {
  13323                  set_data = 1;
  13324               }
  13325 
  13326               if (port < _FP_TD3_TCAM_IPBMP_SIZE) {
  13327                  BCM_PBMP_PORT_ADD(ipbm_mask[inst], port);
  13328 
  13329                  if (set_data == 1) {
  13330                     BCM_PBMP_PORT_ADD(ipbm_data[inst], port);
  13331                  }
  13332                  ipbm_hit = 1;
  13333               } else if (port < (_FP_TD3_TCAM_IPBMP_SIZE + _FP_FLEX_PBMP_SIZE)) {
  13334                  temp_p = port - _FP_TD3_TCAM_IPBMP_SIZE;
  13335 
  13336                  if (set_data == 1) {
  13337                     pbm_34_49[inst] |= 1 << temp_p;
  13338                  }
  13339 
  13340                  pbm_34_49_mask[inst] |= 1 << temp_p;
  13341                  opq1_hit = 1;
  13342               } else if (port < (_FP_TD3_TCAM_IPBMP_SIZE + (_FP_FLEX_PBMP_SIZE * 2))) {
  13343                  temp_p = port - (_FP_TD3_TCAM_IPBMP_SIZE + _FP_FLEX_PBMP_SIZE);
  13344 
  13345                  if (set_data == 1) {
  13346                     pbm_50_65[inst] |= 1 << temp_p;
  13347                  }
  13348 
  13349                  pbm_50_65_mask[inst] |= 1 << temp_p;
  13350                  opq2_hit=1;
  13351               }
  13352 
  13353               LOG_DEBUG(BSL_LS_BCM_FP, (BSL_META(
  13354                   "INST:%d port:%d temp_p:%d dev_port:%d ipbm_hit:%d opq1_hit:%d"
  13355                   " opq2_hit:%d set_data:%d\n\r"),
  13356                   inst, port, temp_p, port+66, ipbm_hit, opq1_hit, opq2_hit, set_data));
  13357               set_data = 0;
  13358           }
  13359 
  13360           LOG_DEBUG(BSL_LS_BCM_FP, (BSL_META(
  13361                  "INSTANCE:%d ipbm_data:%s ipbm_mask:%s pbm_34_49:0x%x "
  13362                  "pbm_34_49_mask:0x%x pbm_50_65:0x%x pbm_50_65_mask:0x%x\n\r"),
  13363                  inst, SOC_PBMP_FMT(ipbm_data[inst], buf_ipbm),
  13364                  SOC_PBMP_FMT(ipbm_mask[inst], buf_ipbm),
  13365                  pbm_34_49[inst], pbm_34_49_mask[inst], pbm_50_65[inst],
  13366                  pbm_50_65_mask[inst]));
  13367 
  13368           if (soc_feature(unit, soc_feature_xy_tcam_x0y)) {
  13369              BCM_PBMP_XOR(ipbm_mask[inst], ipbm_data[inst]);
  13370              BCM_PBMP_CLEAR(ipbm_data[inst]);
  13371 
  13372              pbm_34_49_mask[inst] ^= pbm_34_49[inst];
  13373              pbm_34_49[inst] = 0;
  13374 
  13375              pbm_50_65_mask[inst] ^= pbm_50_65[inst];
  13376              pbm_50_65[inst] = 0;
  13377 
  13378             LOG_DEBUG(BSL_LS_BCM_FP, (BSL_META(
  13379               "INSTANCE:%d ipbm_data:%s ipbm_mask:%s pbm_34_49:0x%x "
  13380               "pbm_34_49_mask:0x%x pbm_50_65:0x%x pbm_50_65_mask:0x%x\n\r"),
  13381               inst, SOC_PBMP_FMT(ipbm_data[inst], buf_ipbm),
  13382               SOC_PBMP_FMT(ipbm_mask[inst], buf_ipbm),
  13383               pbm_34_49[inst], pbm_34_49_mask[inst], pbm_50_65[inst],
  13384               pbm_50_65_mask[inst]));
  13385           }
  13386        }
  13387        no_pbm_access = 1;
  13388     }
  13389 
  13390     for (inst = 0; inst < num_pipe; inst++) {
  13391         rv = _bcm_field_th_qualify_set(unit, f_ent->eid,
  13392                                    _bcmFieldQualifyInPorts_1,
  13393                                    &pbm_34_49[inst],
  13394                                    &pbm_34_49_mask[inst],
  13395                                    _FP_QUALIFIER_ADD);
  13396         BCM_IF_ERROR_RETURN(rv);
  13397 
  13398         rv = _bcm_field_th_qualify_set(unit, f_ent->eid,
  13399                                    _bcmFieldQualifyInPorts_2,
  13400                                    &pbm_50_65[inst],
  13401                                    &pbm_50_65_mask[inst],
  13402                                    _FP_QUALIFIER_ADD);
  13403         BCM_IF_ERROR_RETURN(rv);
  13404 
  13405         BCM_IF_ERROR_RETURN(_bcm_field_mem_instance_get(unit,
  13406                                               IFP_TCAM_WIDEm,
  13407                                               inst,
  13408                                               &ifp_tcam_wide));
  13409 
  13410         sal_memset(entry_buf, 0x0, sizeof(entry_buf));
  13411         soc_mem_field_set(unit, ifp_tcam_wide, entry_buf, KEYf, tcam->key);
  13412         soc_mem_field_set(unit, ifp_tcam_wide, entry_buf, MASKf, tcam->mask);
  13413 
  13414         if (set_pbmp == 1) {
  13415             soc_mem_field_set(unit, ifp_tcam_wide, entry_buf,
  13416                                IPBMf, (uint32 *)&ipbm_data[inst]);
  13417             soc_mem_field_width_fit_set(unit, ifp_tcam_wide, entry_buf,
  13418                                IPBM_MASKf, (uint32 *)&ipbm_mask[inst]);
  13419             no_pbm_access = 0;
  13420         }
  13421 
  13422         soc_mem_field32_set(unit, ifp_tcam_wide, entry_buf, VALIDf, valid);
  13423         BCM_IF_ERROR_RETURN(soc_th_ifp_mem_write(unit,
  13424                                         ifp_tcam_wide,
  13425                                         MEM_BLOCK_ALL,
  13426                                         tcam_idx,
  13427                                         entry_buf));
  13428     }
  13429 
  13430     return BCM_E_NONE;
  13431 }
  13432 
  13433 
  13434 /*
  13435  * Function:
  13436  *      _bcm_field_td3_qualify_InPorts
  13437  * Purpose:
  13438  *      Match on IPBM Source bitmap for the given bitmap.
  13439  * Parameters:
  13440  *      unit  - (IN) Unit number.
  13441  *      entry - (IN) BCM field entry id.
  13442  *      qual  - (IN) IPBM Qualifier type
  13443  *      data  - (IN) IPBM data
  13444  *      mask  - (IN) IPBM Mask
  13445  * Returns:
  13446  *      BCM_E_XXX
  13447  * Notes:
  13448  */
  13449 STATIC int
  13450 _bcm_field_td3_qualify_InPorts(int unit,
  13451                                bcm_field_entry_t entry,
  13452                                bcm_field_qualify_t qual,
  13453                                bcm_pbmp_t data,
  13454                                bcm_pbmp_t mask)
  13455 {
  13456     int               rv = BCM_E_NONE;
  13457     bcm_port_t        port;
  13458     bcm_pbmp_t        lb_pbm;
  13459     bcm_pbmp_t        temp_pbm;
  13460     bcm_pbmp_t        valid_pbm;
  13461     _field_group_t   *fg =  NULL;
  13462     _field_entry_t   *f_ent = NULL;
  13463     _field_stage_t   *stage_fc = NULL;
  13464     bcm_pbmp_t        ipbm_data;
  13465     bcm_pbmp_t        ipbm_mask;
  13466     uint32            pbm_34_49 = 0;
  13467     uint32            pbm_50_65 = 0;
  13468     uint32            pbm_34_49_mask = 0;
  13469     uint32            pbm_50_65_mask = 0;
  13470 
  13471     /* Validate the qualifier. */
  13472     if (!_BCM_FIELD_IS_PBMP_QUALIFIER(qual)) {
  13473         return BCM_E_PARAM;
  13474     }
  13475 
  13476     if (qual != bcmFieldQualifyInPorts) {
  13477         return _bcm_field_th_qualify_InPorts(unit, entry, qual, data, mask);
  13478     }
  13479 
  13480     /* Get field entry structure pointer. */
  13481     rv = _field_entry_get(unit, entry, _FP_ENTRY_PRIMARY, &f_ent);
  13482     BCM_IF_ERROR_RETURN(rv);
  13483 
  13484     fg = f_ent->group;
  13485     /* Get the stage control structure. */
  13486     rv = _field_stage_control_get(unit, fg->stage_id, &stage_fc);
  13487     BCM_IF_ERROR_RETURN(rv);
  13488 
  13489     /* Confirm that InPorts/PortBitmap Qualifiers are in group's Qset. */
  13490     if (!_BCM_FIELD_QSET_PBMP_TEST(fg->qset)) {
  13491         LOG_ERROR(BSL_LS_BCM_FP, (BSL_META_U(unit,
  13492                   "Error: %s not in Group=%d Qset.\n"),
  13493                   _field_qual_name(qual), fg->gid));
  13494         return (BCM_E_NOT_FOUND);
  13495     }
  13496 
  13497     if (bcmFieldGroupOperModePipeLocal == stage_fc->oper_mode) {
  13498        BCM_PBMP_ASSIGN(valid_pbm, PBMP_PIPE(unit, fg->instance));
  13499        BCM_PBMP_ASSIGN(lb_pbm, valid_pbm);
  13500        BCM_PBMP_AND(lb_pbm, PBMP_LB(unit));
  13501        BCM_PBMP_REMOVE(valid_pbm, PBMP_LB(unit));
  13502     } else {
  13503        /*
  13504         * In-case of Atomic update, InPorts/PortBitmap qualifiers are not
  13505         * support in Global mode.
  13506         */
  13507        if (soc_property_get(unit, spn_FIELD_ATOMIC_UPDATE, FALSE) == TRUE) {
  13508           return BCM_E_UNAVAIL;
  13509        }
  13510 
  13511        BCM_IF_ERROR_RETURN(_bcm_field_valid_pbmp_get(unit, &valid_pbm));
  13512        BCM_PBMP_ASSIGN(lb_pbm, PBMP_LB(unit));
  13513     }
  13514 
  13515     /* Validate data */
  13516     BCM_PBMP_ASSIGN(temp_pbm, valid_pbm);
  13517     BCM_PBMP_OR(temp_pbm, data);
  13518     if (BCM_PBMP_NEQ(temp_pbm, valid_pbm)) {
  13519        return BCM_E_PARAM;
  13520     }
  13521 
  13522     /*
  13523      * Check and clear invalid ports in the mask.
  13524      */
  13525     BCM_PBMP_AND(valid_pbm, mask);
  13526     BCM_PBMP_ASSIGN(mask, valid_pbm);
  13527     BCM_PBMP_OR(mask, lb_pbm);
  13528 
  13529     if (bcmFieldGroupOperModePipeLocal == stage_fc->oper_mode) {
  13530        uint8       set_data = 0;
  13531        bcm_port_t  temp_p = 0;
  13532        uint8 ipbm_hit, opq1_hit, opq2_hit;
  13533        char           buf_ipbm[100];
  13534 
  13535        BCM_PBMP_CLEAR(ipbm_data);
  13536        BCM_PBMP_CLEAR(ipbm_mask);
  13537        BCM_PBMP_CLEAR(f_ent->pbmp.data);
  13538        BCM_PBMP_CLEAR(f_ent->pbmp.mask);
  13539 
  13540        BCM_PBMP_ITER(mask, port) {
  13541           ipbm_hit = opq1_hit = opq2_hit = 0;
  13542           temp_p = port - (_BCM_TD3_NUM_PIPE_PORTS * fg->instance);
  13543 
  13544           BCM_PBMP_PORT_ADD(f_ent->pbmp.mask, port);
  13545           if (BCM_PBMP_MEMBER(data, port)) {
  13546              set_data = 1;
  13547              BCM_PBMP_PORT_ADD(f_ent->pbmp.data, port);
  13548           }
  13549 
  13550           if (temp_p < _FP_TD3_TCAM_IPBMP_SIZE) {
  13551              BCM_PBMP_PORT_ADD(ipbm_mask, temp_p);
  13552 
  13553              if (set_data == 1) {
  13554                 BCM_PBMP_PORT_ADD(ipbm_data, temp_p);
  13555              }
  13556              ipbm_hit = 1;
  13557           } else if (temp_p < (_FP_TD3_TCAM_IPBMP_SIZE + _FP_FLEX_PBMP_SIZE)) {
  13558              temp_p = temp_p - _FP_TD3_TCAM_IPBMP_SIZE;
  13559 
  13560              if (set_data == 1) {
  13561                 pbm_34_49 |= 1 << temp_p;
  13562              } 
  13563 
  13564              pbm_34_49_mask |= 1 << temp_p;
  13565 
  13566              opq1_hit = 1;   
  13567           } else if (temp_p < (_FP_TD3_TCAM_IPBMP_SIZE + (_FP_FLEX_PBMP_SIZE * 2))) {
  13568              temp_p = temp_p - (_FP_TD3_TCAM_IPBMP_SIZE + _FP_FLEX_PBMP_SIZE);
  13569 
  13570              if (set_data == 1) {
  13571                 pbm_50_65 |= 1 << temp_p;
  13572              }
  13573 
  13574              pbm_50_65_mask |= 1 << temp_p;
  13575              opq2_hit = 1;
  13576           } else {
  13577              LOG_ERROR(BSL_LS_BCM_FP, (BSL_META(
  13578                  "InPorts Param exceeds %d ports in the bitmap.\n\r"),
  13579                  _FP_TD3_TCAM_IPBMP_SIZE + (_FP_FLEX_PBMP_SIZE * 2)));
  13580              return BCM_E_PARAM;
  13581           }
  13582 
  13583           LOG_DEBUG(BSL_LS_BCM_FP, (BSL_META(
  13584             "INST:%d port:%d temp_p:%d ipbm_hit:%d opq1_hit:%d opq2_hit:%d set_data:%d\n\r"),
  13585             fg->instance, port, temp_p, ipbm_hit, opq1_hit, opq2_hit, set_data));
  13586 
  13587           LOG_DEBUG(BSL_LS_BCM_FP, (BSL_META(
  13588                  "INST:%d ipbm_data:%s ipbm_mask:%s\n\r"
  13589                  "       pbm_34_49:0x%x pbm_34_49_mask:0x%x pbm_50_65:0x%x pbm_50_65_mask:0x%x\n\r"
  13590                  "       HW_val:0x%x\n\r"),
  13591                  fg->instance, SOC_PBMP_FMT(ipbm_data, buf_ipbm),
  13592                  SOC_PBMP_FMT(ipbm_mask, buf_ipbm),
  13593                  pbm_34_49, pbm_34_49_mask, pbm_50_65,
  13594                  pbm_50_65_mask, ((ipbm_hit == 1) ? temp_p : (1 << temp_p))));
  13595 
  13596           set_data = 0;
  13597        }
  13598 
  13599        if (soc_feature(unit, soc_feature_xy_tcam_x0y)) {
  13600           BCM_PBMP_XOR(ipbm_mask, ipbm_data);
  13601           BCM_PBMP_CLEAR(ipbm_data);
  13602 
  13603           pbm_34_49_mask ^= pbm_34_49;
  13604           pbm_34_49 = 0;
  13605 
  13606           pbm_50_65_mask ^= pbm_50_65;
  13607           pbm_50_65 = 0;
  13608 
  13609           LOG_DEBUG(BSL_LS_BCM_FP, (BSL_META(
  13610                  "INSTANCE:%d ipbm_data:%s ipbm_mask:%s\n\r"
  13611                  "            pbm_34_49:0x%x pbm_34_49_mask:0x%x pbm_50_65:0x%x pbm_50_65_mask:0x%x\n\r"),
  13612                  fg->instance, SOC_PBMP_FMT(ipbm_data, buf_ipbm),
  13613                  SOC_PBMP_FMT(ipbm_mask, buf_ipbm),
  13614                  pbm_34_49, pbm_34_49_mask, pbm_50_65,
  13615                  pbm_50_65_mask));
  13616 
  13617        }
  13618 
  13619        /* coverity[address_of : FALSE] */
  13620        /* coverity[callee_ptr_arith : FALSE] */
  13621        rv = _bcm_field_th_qualify_set(unit, entry, qual,
  13622                                       (uint32 *)&ipbm_data,
  13623                                       (uint32 *)&ipbm_mask,
  13624                                       _FP_QUALIFIER_ADD);
  13625        BCM_IF_ERROR_RETURN(rv);
  13626        rv = _bcm_field_th_qualify_set(unit, entry,
  13627                                       _bcmFieldQualifyInPorts_1,
  13628                                       (uint32 *)&pbm_34_49,
  13629                                       (uint32 *)&pbm_34_49_mask,
  13630                                       _FP_QUALIFIER_ADD);
  13631        BCM_IF_ERROR_RETURN(rv);
  13632        rv = _bcm_field_th_qualify_set(unit, entry,
  13633                                       _bcmFieldQualifyInPorts_2,
  13634                                       (uint32 *)&pbm_50_65,
  13635                                       (uint32 *)&pbm_50_65_mask,
  13636                                       _FP_QUALIFIER_ADD);
  13637        BCM_IF_ERROR_RETURN(rv);
  13638     } else {
  13639        BCM_PBMP_ASSIGN(f_ent->pbmp.data, data);
  13640        BCM_PBMP_ASSIGN(f_ent->pbmp.mask, mask);
  13641     }
  13642 
  13643     f_ent->flags |= _FP_ENTRY_DIRTY;
  13644 
  13645     return BCM_E_NONE;
  13646 }
  13647 
  13648 /*
  13649  * Initialize IPBM and Opaque object fields of source_trunk_map table
  13650  * to unique values to achieve InPorts functionality.
  13651  */
  13652 int
  13653 _bcm_td3_field_inports_flex_config_init(int unit, int port)
  13654 {
  13655     int rv;
  13656     int temp_p;
  13657     int stm_idx;
  13658     int my_modid;
  13659     int pipe_port;
  13660     uint32 ipbm_val = 0;
  13661     uint32 opq_obj_val = 0;
  13662     uint8 opaque_3 = 3;
  13663     uint8 opaque_4 = 4;
  13664     soc_mem_t mem = SOURCE_TRUNK_MAP_TABLEm;
  13665     soc_field_t ipbm_fld = IPBM_INDEXf;
  13666     soc_field_t opq_obj_fld = OPAQUE_OBJECTf;
  13667     source_trunk_map_table_entry_t stm_entry;
  13668 
  13669     if (soc_feature(unit, soc_feature_ifp_no_inports_support)) {
  13670        return BCM_E_NONE;
  13671     }
  13672 
  13673     if (!(SOC_MEM_FIELD_VALID(unit, mem, ipbm_fld) &&
  13674           SOC_MEM_FIELD_VALID(unit, mem, opq_obj_fld))) {
  13675         return BCM_E_CONFIG;
  13676     }
  13677 
  13678     BCM_IF_ERROR_RETURN(bcm_esw_stk_my_modid_get(unit, &my_modid));
  13679 
  13680     /* Get index to source trunk map table */
  13681     BCM_IF_ERROR_RETURN(_bcm_esw_src_mod_port_table_index_get(unit, my_modid,
  13682                                                             port, &stm_idx));
  13683     /* Read source trunk map table. */
  13684     rv = soc_mem_read(unit, mem, MEM_BLOCK_ANY, stm_idx, &stm_entry);
  13685     BCM_IF_ERROR_RETURN(rv);
  13686 
  13687     /* Set IPBM_INDEX for HG Ports */
  13688     pipe_port = (port >= _BCM_TD3_NUM_PIPE_PORTS) ?
  13689              (port - _BCM_TD3_NUM_PIPE_PORTS) : port;
  13690 
  13691     /* Set IPBM_INDEX */
  13692     ipbm_val = (pipe_port < _FP_TD3_TCAM_IPBMP_SIZE) ? pipe_port : _FP_TD3_TCAM_IPBMP_SIZE+1;
  13693     soc_mem_field32_set(unit, mem, &stm_entry, ipbm_fld, ipbm_val);
  13694 
  13695     /* Set OPAQUE_OBJECT */
  13696     if (pipe_port >= _FP_TD3_TCAM_IPBMP_SIZE) {
  13697        if (pipe_port >= (_FP_TD3_TCAM_IPBMP_SIZE + _FP_FLEX_PBMP_SIZE)) {
  13698           opq_obj_val = opaque_4;
  13699           temp_p = pipe_port - (_FP_TD3_TCAM_IPBMP_SIZE + _FP_FLEX_PBMP_SIZE);
  13700        } else {
  13701           opq_obj_val = opaque_3;
  13702           temp_p = pipe_port - _FP_TD3_TCAM_IPBMP_SIZE;
  13703        }
  13704        opq_obj_val = ((1 << temp_p) << 3) | opq_obj_val;
  13705        soc_mem_field32_set(unit, mem, &stm_entry, opq_obj_fld, opq_obj_val);
  13706     }
  13707 
  13708     /* Write source trunk map table */
  13709     rv = soc_mem_write(unit, mem, MEM_BLOCK_ALL, stm_idx, &stm_entry);
  13710     BCM_IF_ERROR_RETURN(rv);
  13711 
  13712     return rv;
  13713 }
  13714 
  13715 int
  13716 _bcm_field_td3_inports_flex_init(int unit)
  13717 {
  13718     int rv;
  13719     int port;
  13720     int min_port = 0;
  13721     int max_port = 0;
  13722 
  13723     if (soc_feature(unit, soc_feature_ifp_no_inports_support)) {
  13724        return BCM_E_NONE;
  13725     }
  13726 
  13727     max_port = _BCM_TD3_NUM_PIPE_PORTS * NUM_PIPE(unit);
  13728 
  13729     for (port = min_port; port < max_port; port++) {
  13730        rv = _bcm_td3_field_inports_flex_config_init(unit, port);
  13731        BCM_IF_ERROR_RETURN(rv);
  13732     }
  13733 
  13734     return BCM_E_NONE;
  13735 }
  13736 
  13737 
  13738 /*
  13739  * Update free available control selector for a given container.
  13740  */
  13741 STATIC int
  13742 _field_ing_fbus_cont_free_ctrl_sel_val_get(int unit, int instance,
  13743                                          _field_stage_t *stage_fc,
  13744                                                   uint16 cont_val,
  13745                                                uint8 *free_arr_ct,
  13746                                      uint8 *free_ctrl_sel_val_arr,
  13747                                         int8  *found_ctrl_sel_val)
  13748 {
  13749     int idx;
  13750     int ct = 0;
  13751     uint16 cont;
  13752     uint8 cont_sel[_FP_MAX_IBUS_CONTS] = {11, 12, 13, 14};
  13753 
  13754     for (idx = 0; idx < _FP_MAX_IBUS_CONTS; idx++) {
  13755        if (stage_fc->ifbus_cont_stat[instance][idx].ref_count != 0) {
  13756           cont = stage_fc->ifbus_cont_stat[instance][idx].cont_val;
  13757           if (cont_val == cont) {
  13758              *found_ctrl_sel_val = cont_sel[idx];
  13759              ct = 0;
  13760              break;
  13761           }
  13762           continue;
  13763        }
  13764 
  13765        free_ctrl_sel_val_arr[ct++] = cont_sel[idx];
  13766     }
  13767 
  13768     *free_arr_ct = ct;
  13769 
  13770     return BCM_E_NONE;
  13771 }
  13772 
  13773 /*
  13774  * Retrieve qualifier selector values.
  13775  */
  13776 int
  13777 _bcm_field_qual_cfg_info_db_update(int unit,
  13778                                    int instance,
  13779                                    bcm_field_qualify_t qual,
  13780                                    _field_stage_t *stage_fc)
  13781 {
  13782     int rv;
  13783     uint8 cfg = 0;
  13784     uint16 cont_val = 0;
  13785     int8 found_ctrl_val = -1;
  13786     uint8 allocated_cont = 0;
  13787     uint8 num_qual_cfg = 0;
  13788     uint8 free_ct = _FP_MAX_IBUS_CONTS;
  13789     uint8 free_pri_ctrl_val_arr[_FP_MAX_IBUS_CONTS] = {0};
  13790     bcmi_keygen_qual_cfg_info_db_t *qual_db;
  13791     bcmi_keygen_qual_cfg_t *qual_cfg_arr = NULL;
  13792     bcmi_keygen_qual_cfg_t *new_qual_cfg_arr = NULL;
  13793     bcmi_keygen_qual_cfg_t new_qual_cfg[_FP_MAX_IBUS_CONTS * 2];
  13794 
  13795     if (stage_fc == NULL) {
  13796        return BCM_E_NONE;
  13797     }
  13798 
  13799     qual_db = stage_fc->qual_cfg_info_db;
  13800 
  13801     /*
  13802      * Retrieve Qualifier container Id.
  13803      */
  13804     if ((qual_db == NULL) ||
  13805         (qual_db->qual_cfg_info[qual] == NULL)) {
  13806         return BCM_E_PARAM;
  13807     }
  13808 
  13809     cont_val = qual_db->qual_cfg_info[qual]->qual_cfg_arr->sec_ctrl_sel_val;
  13810 
  13811     rv = _field_ing_fbus_cont_free_ctrl_sel_val_get(unit, instance,
  13812                                                    stage_fc,
  13813                                                    cont_val,
  13814                                                    &free_ct,
  13815                                                    free_pri_ctrl_val_arr,
  13816                                                    &found_ctrl_val);
  13817     BCM_IF_ERROR_RETURN(rv);
  13818 
  13819     /*
  13820      * If the given qual is already allocated to any container,
  13821      * use the same container
  13822      */
  13823     if (found_ctrl_val != -1) {
  13824        allocated_cont = found_ctrl_val;
  13825     } else {
  13826        /* All containers are already used. */
  13827        if (free_ct == 0) {
  13828           return BCM_E_RESOURCE;
  13829        }
  13830 
  13831        /* Reserve one container and retrieve the selcodes for the same */
  13832        allocated_cont = free_pri_ctrl_val_arr[0];
  13833     }
  13834  
  13835     qual_cfg_arr = qual_db->qual_cfg_info[qual]->qual_cfg_arr;
  13836     for (cfg = 0; cfg < qual_db->qual_cfg_info[qual]->num_qual_cfg; cfg++) {
  13837         if (qual_cfg_arr[cfg].pri_ctrl_sel_val == allocated_cont) {
  13838            sal_memcpy(&new_qual_cfg[num_qual_cfg], &qual_cfg_arr[cfg],
  13839                           sizeof(bcmi_keygen_qual_cfg_t));
  13840            num_qual_cfg += 1;
  13841         }
  13842     }
  13843 
  13844     new_qual_cfg_arr = NULL;
  13845     _FP_XGS3_ALLOC(new_qual_cfg_arr,
  13846                    num_qual_cfg * sizeof(bcmi_keygen_qual_cfg_t),
  13847                    "Qual DB new_qual_cfg_arr alloc");
  13848     if (new_qual_cfg_arr == NULL) {
  13849        return BCM_E_MEMORY;
  13850     }
  13851 
  13852     sal_memcpy(new_qual_cfg_arr, new_qual_cfg,
  13853              (num_qual_cfg * sizeof(bcmi_keygen_qual_cfg_t)));
  13854 
  13855     qual_db->qual_cfg_info[qual]->qual_cfg_arr = new_qual_cfg_arr;
  13856     qual_db->qual_cfg_info[qual]->num_qual_cfg = num_qual_cfg;
  13857     
  13858     rv = _bcm_field_td3_field_bus_cont_sel_install(unit, instance, stage_fc,
  13859                                                    NULL, qual);
  13860     return rv;
  13861 }
  13862 
  13863 /*
  13864  * Function to configure ING field bus container value.
  13865  */
  13866 int
  13867 _bcm_field_td3_field_bus_cont_sel_install(int unit,
  13868                                           int instance,
  13869                                           _field_stage_t *stage_fc,
  13870                                           _field_group_t *fg,
  13871                                           bcm_field_qualify_t qual)
  13872 {
  13873     int rv;
  13874     uint8 cont = 0;
  13875     uint32 reg_val = 0;
  13876     uint16 cont_val = 0;
  13877     uint8 ctrl_sel_val = 0;
  13878     soc_reg_t reg = INVALIDr;
  13879     soc_field_t field = INVALIDf;
  13880 
  13881     if (instance >= NUM_PIPE(unit)) {
  13882        return BCM_E_PARAM;
  13883     }
  13884 
  13885     if (stage_fc->stage_id == _BCM_FIELD_STAGE_INGRESS) {
  13886        reg = IFP_AUX_TAG_FIELD_BUS_CONTAINER_SELr;
  13887     } else if (stage_fc->stage_id == _BCM_FIELD_STAGE_EXACTMATCH) {
  13888        reg = EXACT_MATCH_AUX_TAG_FIELD_BUS_CONTAINER_SELr;
  13889     } else {
  13890        return BCM_E_PARAM;
  13891     }
  13892 
  13893     cont_val =
  13894       stage_fc->qual_cfg_info_db->qual_cfg_info[qual]->qual_cfg_arr->sec_ctrl_sel_val;
  13895     ctrl_sel_val =
  13896       stage_fc->qual_cfg_info_db->qual_cfg_info[qual]->qual_cfg_arr->pri_ctrl_sel_val;
  13897 
  13898     if ((stage_fc->ifbus_cont_stat[instance][cont].cont_val == cont_val) &&
  13899         (stage_fc->ifbus_cont_stat[instance][cont].ref_count != 0)) {
  13900         stage_fc->ifbus_cont_stat[instance][cont].ref_count += 1;
  13901         return BCM_E_NONE;
  13902     }
  13903 
  13904     switch (ctrl_sel_val) {
  13905        case 11:
  13906             cont = 0;
  13907             field = INGRESS_FIELD_BUS_CONTAINER_Af;
  13908             break;
  13909        case 12:
  13910             cont = 1;
  13911             field = INGRESS_FIELD_BUS_CONTAINER_Bf;
  13912             break;
  13913        case 13:
  13914             cont = 2;
  13915             field = INGRESS_FIELD_BUS_CONTAINER_Cf;
  13916             break;
  13917        case 14:
  13918             cont = 3;
  13919             field = INGRESS_FIELD_BUS_CONTAINER_Df;
  13920             break;
  13921        default:
  13922             return BCM_E_PARAM;
  13923     }
  13924 
  13925     if (stage_fc->oper_mode == bcmFieldGroupOperModePipeLocal) {
  13926        reg = SOC_REG_UNIQUE_ACC(unit, reg)[instance];
  13927     }
  13928 
  13929     rv = soc_reg32_get(unit, reg, REG_PORT_ANY, 0, &reg_val);
  13930     BCM_IF_ERROR_RETURN(rv);
  13931 
  13932     soc_reg_field_set(unit, reg, &reg_val, field, cont_val);
  13933 
  13934     rv = soc_reg32_set(unit, reg, REG_PORT_ANY, 0, reg_val);
  13935     BCM_IF_ERROR_RETURN(rv);
  13936 
  13937     /* update stage db */
  13938     stage_fc->ifbus_cont_stat[instance][cont].cont_val = cont_val;
  13939     stage_fc->ifbus_cont_stat[instance][cont].ref_count++;
  13940 
  13941     return BCM_E_NONE;
  13942 }
  13943 
  13944 /*
  13945  * Function to configure ING field bus container value.
  13946  */
  13947 int
  13948 _bcm_field_td3_field_bus_cont_sel_remove(int unit,
  13949                                          int instance,
  13950                                          _field_stage_t *stage_fc,
  13951                                          _field_group_t *fg,
  13952                                          bcm_field_qualify_t qual)
  13953 {
  13954     int rv;
  13955     uint8 cont = 0;
  13956     uint8 ctrl_val = 0;
  13957     uint32 reg_val = 0;
  13958     uint16 cont_val = 0;
  13959     soc_reg_t reg = INVALIDr;
  13960     soc_field_t field = INVALIDf;
  13961 
  13962     if (instance >= NUM_PIPE(unit)) {
  13963        return BCM_E_PARAM;
  13964     }
  13965 
  13966     if (stage_fc->stage_id == _BCM_FIELD_STAGE_INGRESS) {
  13967        reg = IFP_AUX_TAG_FIELD_BUS_CONTAINER_SELr;
  13968     } else if (stage_fc->stage_id == _BCM_FIELD_STAGE_EXACTMATCH) {
  13969        reg = EXACT_MATCH_AUX_TAG_FIELD_BUS_CONTAINER_SELr;
  13970     } else {
  13971        return BCM_E_PARAM;
  13972     }
  13973 
  13974     cont_val =
  13975       stage_fc->qual_cfg_info_db->qual_cfg_info[qual]->qual_cfg_arr->sec_ctrl_sel_val;
  13976     ctrl_val =
  13977       stage_fc->qual_cfg_info_db->qual_cfg_info[qual]->qual_cfg_arr->pri_ctrl_sel_val;
  13978 
  13979     switch (ctrl_val) {
  13980        case 11:
  13981             cont = 0;
  13982             field = INGRESS_FIELD_BUS_CONTAINER_Af;
  13983             break;
  13984        case 12:
  13985             cont = 1;
  13986             field = INGRESS_FIELD_BUS_CONTAINER_Bf;
  13987             break;
  13988        case 13:
  13989             cont = 2;
  13990             field = INGRESS_FIELD_BUS_CONTAINER_Cf;
  13991             break;
  13992        case 14:
  13993             cont = 3;
  13994             field = INGRESS_FIELD_BUS_CONTAINER_Df;
  13995             break;
  13996        default:
  13997             return BCM_E_PARAM;
  13998     }
  13999 
  14000 
  14001     if (stage_fc->ifbus_cont_stat[instance][cont].cont_val == cont_val) {
  14002        if (stage_fc->ifbus_cont_stat[instance][cont].ref_count == 0) {
  14003           return BCM_E_INTERNAL;
  14004        }
  14005        stage_fc->ifbus_cont_stat[instance][cont].ref_count -= 1;
  14006        if (stage_fc->ifbus_cont_stat[instance][cont].ref_count != 0) {
  14007           return BCM_E_NONE;
  14008        }
  14009     } else {
  14010        return BCM_E_INTERNAL;
  14011     }
  14012 
  14013     if (stage_fc->oper_mode == bcmFieldGroupOperModePipeLocal) {
  14014        reg = SOC_REG_UNIQUE_ACC(unit, reg)[instance];
  14015     }
  14016 
  14017     rv = soc_reg32_get(unit, reg, REG_PORT_ANY, 0, &reg_val);
  14018     BCM_IF_ERROR_RETURN(rv);
  14019 
  14020     soc_reg_field_set(unit, reg, &reg_val, field, 0x0);
  14021 
  14022     rv = soc_reg32_set(unit, reg, REG_PORT_ANY, 0, reg_val);
  14023     BCM_IF_ERROR_RETURN(rv);
  14024 
  14025     /* update stage db */
  14026     stage_fc->ifbus_cont_stat[instance][cont].cont_val = -1;
  14027 
  14028     return BCM_E_NONE;
  14029 }
  14030 
  14031 int _bcm_field_td3_qset_udf_chunk_validate(int unit,
  14032                                            bcm_udf_chunk_info_t *udf_info,
  14033                                            bcm_udf_alloc_hints_t *hints)
  14034 {
  14035 #define _BCM_FIELD_IS_QUAL_USES_UDF_CHUNK(_qual_, _chunk_)    \
  14036     (BCM_FIELD_QSET_TEST(hints->qset, _qual_)                 \
  14037         && (udf_info->chunk_bmap & (1 << _chunk_)))
  14038 
  14039     if (_BCM_FIELD_IS_QUAL_USES_UDF_CHUNK(bcmFieldQualifyIpIdentifier, 4)
  14040         || _BCM_FIELD_IS_QUAL_USES_UDF_CHUNK(bcmFieldQualifyHiGigGbpSrcId, 5)
  14041         || _BCM_FIELD_IS_QUAL_USES_UDF_CHUNK(bcmFieldQualifyLoopbackSubtype, 7)) {
  14042         return BCM_E_UNAVAIL;
  14043     }
  14044 
  14045     return BCM_E_NONE;
  14046 }
  14047 
  14048 int
  14049 _bcm_field_td3_qualify_VlanTranslationHit(int               unit,
  14050                                           bcm_field_entry_t entry,
  14051                                           uint8             *data,
  14052                                           uint8             *mask)
  14053 {
  14054     uint8 data1 = 0;
  14055     uint8 mask1 = 0;
  14056     uint8 valid_range;
  14057 
  14058     if (NULL == data || NULL == mask) {
  14059        return BCM_E_PARAM;
  14060     }
  14061 
  14062     valid_range = BCM_FIELD_VXLT_LOOKUP_STATUS_FIRST_HIT |
  14063                   BCM_FIELD_VXLT_LOOKUP_STATUS_SECOND_HIT |
  14064                   BCM_FIELD_VXLT_LOOKUP_STATUS_HIT;
  14065     /* exact match mask. */
  14066     if (0xff == *mask) {
  14067       *mask = valid_range;
  14068     }
  14069 
  14070     if (((BCM_FIELD_VXLT_LOOKUP_STATUS_NO_HIT != *data)
  14071          || (BCM_FIELD_VXLT_LOOKUP_STATUS_NO_HIT != *mask))
  14072          && ((*data & ~(valid_range)) || (*mask & ~(valid_range)))) {
  14073         LOG_ERROR(BSL_LS_BCM_FP,
  14074                   (BSL_META_U(unit,
  14075                   "Error: Invalid input paramaeters *data=0x%x *mask=0x%x\n"),
  14076                    *data, *mask));
  14077         return BCM_E_PARAM;
  14078     }
  14079 
  14080     if (BCM_FIELD_VXLT_LOOKUP_STATUS_NO_HIT == *data) {
  14081         data1 = 0;
  14082     } else {
  14083         if (*data & BCM_FIELD_VXLT_LOOKUP_STATUS_FIRST_HIT) {
  14084            data1 |= 0x1;
  14085         }
  14086 
  14087         if ((*data & BCM_FIELD_VXLT_LOOKUP_STATUS_HIT)
  14088             || (*data & BCM_FIELD_VXLT_LOOKUP_STATUS_SECOND_HIT)) {
  14089            data1 |= 0x2;
  14090         }
  14091     }
  14092 
  14093     if (BCM_FIELD_VXLT_LOOKUP_STATUS_NO_HIT ==  *mask) {
  14094         mask1 = 0x0;
  14095     } else {
  14096         if (*mask & BCM_FIELD_VXLT_LOOKUP_STATUS_FIRST_HIT) {
  14097            mask1 |= 0x1;
  14098         }
  14099 
  14100         if (*mask & BCM_FIELD_VXLT_LOOKUP_STATUS_HIT) {
  14101            mask1 |= 0x2;
  14102         }
  14103 
  14104         if (*mask & BCM_FIELD_VXLT_LOOKUP_STATUS_SECOND_HIT) {
  14105            mask1 |= 0x3;
  14106         }
  14107     }
  14108 
  14109     *data = data1;
  14110     *mask = mask1;
  14111     return (BCM_E_NONE);
  14112 }
  14113 
  14114 /*
  14115  * Function:
  14116  *    _bcm_field_td3_functions_init
  14117  *
  14118  * Purpose:
  14119  *    Set up functions pointers
  14120  *
  14121  * Parameters:
  14122  *    functions - (IN/OUT) Pointer to device specific field module utility
  14123  *                         routines.
  14124  *
  14125  * Returns:
  14126  *     Nothing
  14127  */
  14128 void
  14129 _bcm_field_td3_functions_init(_field_funct_t *functions)
  14130 {
  14131     (void) _bcm_field_th_functions_init(functions);
  14132 
  14133     functions->fp_action_support_check =
  14134                                             _bcm_field_td3_action_support_check;
  14135     functions->fp_action_params_check  =
  14136                                              _bcm_field_td3_action_params_check;
  14137     functions->fp_vlan_actions_profile_hw_alloc =
  14138                                             _bcm_field_td3_vlan_action_hw_alloc;
  14139     functions->fp_vlan_actions_profile_hw_free =
  14140                                              _bcm_field_td3_vlan_action_hw_free;
  14141     functions->fp_zone_match_id_partition_init =
  14142                                     _bcm_field_td3_zone_match_id_partition_init;
  14143     functions->fp_entry_stat_extended_attach =
  14144                                   _bcm_field_td2plus_entry_stat_extended_attach;
  14145     functions->fp_entry_stat_extended_get =
  14146                                      _bcm_field_td2plus_entry_stat_extended_get;
  14147     functions->fp_qset_id_multi_set = _bcm_field_td3_qset_id_multi_set;
  14148     functions->fp_qset_id_multi_get = _bcm_field_td3_qset_id_multi_get;
  14149     functions->fp_qset_id_multi_delete = _bcm_field_td3_qset_id_multi_delete;
  14150     functions->fp_qualify_udf = _bcm_field_td3_qualify_udf;
  14151     functions->fp_qualify_udf_get = _bcm_field_td3_qualify_udf_get;
  14152     functions->fp_qualify_packet_res = _bcm_field_th_qualify_PacketRes;
  14153     functions->fp_qualify_packet_res_get = _bcm_field_th_qualify_PacketRes_get;
  14154     functions->fp_qualify_inports = _bcm_field_td3_qualify_InPorts;
  14155 }
  14156 
  14157 
  14158 #endif /* BCM_TRIDENT3_SUPPORT */