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, ®_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, ®_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, ®_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, ®_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, ®_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 ®_val 6120 )); 6121 soc_reg_field_set(unit, 6122 efp_classid_b_sel_reg, 6123 ®_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 ®_val 6148 )); 6149 soc_reg_field_set(unit, 6150 efp_classid_b_sel_reg, 6151 ®_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 ®_val 6176 )); 6177 soc_reg_field_set(unit, 6178 efp_classid_b_sel_reg, 6179 ®_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 ®_val 6205 )); 6206 soc_reg_field_set(unit, 6207 efp_classid_b_sel_reg, 6208 ®_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 ®_val 6225 )); 6226 soc_reg_field_set(unit, 6227 efp_classid_b_sel_reg, 6228 ®_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 ®_val 6254 )); 6255 soc_reg_field_set(unit, 6256 efp_classid_b_sel_reg, 6257 ®_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 ®_val 6283 )); 6284 soc_reg_field_set(unit, 6285 efp_classid_b_sel_reg, 6286 ®_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 ®_val 6312 )); 6313 soc_reg_field_set(unit, 6314 efp_classid_b_sel_reg, 6315 ®_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 ®_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 ®_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, ®_val); 13930 BCM_IF_ERROR_RETURN(rv); 13931 13932 soc_reg_field_set(unit, 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, ®_val); 14018 BCM_IF_ERROR_RETURN(rv); 14019 14020 soc_reg_field_set(unit, 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 */