openbcm

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

trx.h (62767B)


      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-2020 Broadcom Inc. All rights reserved.
      6  *
      7  * File:        trx.h
      8  * Purpose:     Function declarations for Triumph Micro Architecture 
      9  *              based devices.
     10  */
     11 
     12 #ifndef _BCM_INT_TRX_H_
     13 #define _BCM_INT_TRX_H_
     14 
     15 #if defined(BCM_TRX_SUPPORT)
     16 #include <bcm_int/esw/firebolt.h>
     17 
     18 #if defined(INCLUDE_L3)
     19 #define BCM_TRX_DEFIP128_HASH_SZ            (0x6)
     20 #define BCM_TRX_DEFIP128(_unit_)             l3_trx_defip_128[(_unit_)]
     21 #define BCM_TRX_DEFIP128_ARR(_unit_)         BCM_TRX_DEFIP128((_unit_))->entry_array
     22 #define BCM_TRX_DEFIP128_IDX_MAX(_unit_)     BCM_TRX_DEFIP128((_unit_))->idx_max
     23 #define BCM_TRX_DEFIP128_USED_COUNT(_unit_)  BCM_TRX_DEFIP128((_unit_))->used_count
     24 #define BCM_TRX_DEFIP128_TOTAL(_unit_)       BCM_TRX_DEFIP128((_unit_))->total_count
     25 #define BCM_TRX_DEFIP128_URPF_OFFSET(_unit_) BCM_TRX_DEFIP128((_unit_))->urpf_offset
     26 #define BCM_TRX_DEFIP128_ENTRY_SET(_unit_, _idx_, _plen_, _hash_)          \
     27             BCM_TRX_DEFIP128_ARR((_unit_))[(_idx_)].prefix_len = (_plen_); \
     28             BCM_TRX_DEFIP128_ARR((_unit_))[(_idx_)].entry_hash = (_hash_)
     29 
     30 /* Macro to know if L3 defip memories are enabled in external tcam.*/ 
     31 #define EXT_TCAM_IS_L3_ENABLED(_u_)   ((SOC_MEM_IS_ENABLED(_u_, EXT_IPV4_DEFIPm) &&   \
     32                                         soc_mem_index_count(_u_, EXT_IPV4_DEFIPm)) || \
     33                                        (SOC_MEM_IS_ENABLED(_u_, EXT_IPV6_64_DEFIPm) &&   \
     34                                         soc_mem_index_count(_u_, EXT_IPV6_64_DEFIPm)) || \
     35                                        (SOC_MEM_IS_ENABLED(_u_, EXT_IPV6_128_DEFIPm) &&   \
     36                                         soc_mem_index_count(_u_, EXT_IPV6_128_DEFIPm)))      
     37 
     38 typedef struct _bcm_l3_defip_128_entry_s {
     39     uint8  prefix_len; /* Route entry  prefix length.*/
     40     uint8  entry_hash; /* Route entry key hash.      */
     41 } _bcm_l3_defip_128_entry_t;
     42 
     43 typedef struct _bcm_l3_defip_128_table_s {
     44     _bcm_l3_defip_128_entry_t *entry_array; /* Cam entries array.          */
     45     uint16 idx_max;                   /* Last cam entry index.             */
     46     uint16 used_count;                /* Used cam entry count.             */
     47     uint16 total_count;               /* Total number of available entries.*/
     48     uint16 urpf_offset;               /* Src lookup start offset.          */
     49 } _bcm_l3_defip_128_table_t;
     50 
     51 extern int _bcm_trx_defip_128_init(int unit);
     52 extern int _bcm_trx_defip_128_deinit(int unit);
     53 extern int _bcm_trx_defip_128_get(int unit, _bcm_defip_cfg_t *lpm_cfg,
     54                                   int *nh_ecmp_idx); 
     55 extern int _bcm_trx_defip_128_add(int unit, _bcm_defip_cfg_t *lpm_cfg,
     56                                   int nh_ecmp_idx);
     57 extern int _bcm_trx_defip_128_delete(int unit, _bcm_defip_cfg_t *lpm_cfg);
     58 extern int _bcm_trx_defip_128_update_match(int unit, _bcm_l3_trvrs_data_t *trv_data);
     59 extern int _bcm_trx_l3_defip_mem_get(int unit, uint32 flags, 
     60                                      int plen, soc_mem_t *mem);
     61 extern int _bcm_trx_l3_defip_verify_internal_mem_usage(int unit);
     62 extern int _bcm_trx_tnl_type_to_hw_code(int unit, bcm_tunnel_type_t tnl_type, 
     63                                         int *hw_code, int *entry_type);
     64 extern int _bcm_trx_tnl_hw_code_to_type(int unit, int hw_tnl_type, 
     65                                          int entry_type, bcm_tunnel_type_t
     66                                          *tunnel_type);
     67 extern int _bcm_trx_tunnel_dscp_map_port_set(int unit, bcm_port_t port,
     68                                              bcm_tunnel_dscp_map_t *dscp_map);
     69 extern int _bcm_trx_tunnel_dscp_map_port_get(int unit, bcm_port_t port,
     70                                              bcm_tunnel_dscp_map_t *dscp_map);
     71 extern int bcm_trx_multicast_init(int unit);
     72 extern int bcm_trx_multicast_detach(int unit);
     73 extern int bcm_trx_multicast_group_get(int unit, bcm_multicast_t group,
     74                                         uint32 *flags);
     75 extern int bcm_trx_multicast_group_traverse(int unit,
     76                              bcm_multicast_group_traverse_cb_t trav_fn, 
     77                                             uint32 flags, void *user_data);
     78 extern int _field_trx_meter_index_in_use(int unit, _field_stage_t *stage_fc,
     79                                 _field_slice_t *fs, _field_meter_pool_t *f_mp,
     80                                 uint32 meter_pair_mode, uint32 meter_offset,
     81                                 int idx);
     82 extern int _field_trx_meter_pool_resolve(int unit, _field_stage_t *stage_fc,
     83                                          int meter_pair_idx, int *pool_num,
     84                                          int *meter_idx);
     85 
     86 
     87 #ifdef BCM_WARM_BOOT_SUPPORT
     88 extern int _bcm_trx_multicast_sync(int unit);
     89 #endif /* BCM_WARM_BOOT_SUPPORT */
     90 #endif /* INCLUDE_L3 */
     91 
     92 #define _BCM_TRX_INT_PRI_MAX             15
     93 #define _BCM_TRX_INT_PRI_MIN             0
     94 
     95 #define _BCM_TRX_TAG_ACTION_NONE         0
     96 #define _BCM_TRX_TAG_ACTION_ADD          1
     97 #define _BCM_TRX_TAG_ACTION_REPLACE      2
     98 #define _BCM_TRX_TAG_ACTION_DELETE       3
     99 #define _BCM_TRX_TAG_ACTION_COPY         4
    100 #if defined(BCM_TRIDENT2_SUPPORT)
    101 #define _BCM_TRX_TAG_ACTION_COPY_VSAN    5
    102 #define _BCM_TRX_TAG_ACTION_REPLACE_VSAN 6
    103 #endif
    104 
    105 #define _BCM_TRX_PRI_CFI_ACTION_NONE     0
    106 #define _BCM_TRX_PRI_CFI_ACTION_ADD      1
    107 #define _BCM_TRX_PRI_CFI_ACTION_REPLACE  2
    108 #define _BCM_TRX_PRI_CFI_ACTION_COPY     3
    109 #if defined(BCM_TRIDENT2_SUPPORT)
    110 #define _BCM_TRX_PRI_CFI_ACTION_COPY_VSAN    4
    111 #define _BCM_TRX_PRI_CFI_ACTION_REPLACE_VSAN 5
    112 #endif
    113 
    114 /* Number of lookup types in bcm_vlan_block_t structure. */
    115 #define _BCM_VLAN_BLOCK_LOOKUP_TYPES (4)
    116 
    117 #define _BCM_TRX_TAG_ACTION_ENCODE(_action_) \
    118     ((_action_) == bcmVlanActionNone ? _BCM_TRX_TAG_ACTION_NONE :       \
    119      (_action_) == bcmVlanActionAdd ? _BCM_TRX_TAG_ACTION_ADD :         \
    120      (_action_) == bcmVlanActionReplace ? _BCM_TRX_TAG_ACTION_REPLACE : \
    121      (_action_) == bcmVlanActionDelete ? _BCM_TRX_TAG_ACTION_DELETE :   \
    122      _BCM_TRX_TAG_ACTION_COPY)
    123 
    124 #define _BCM_TRX_TAG_ACTION_DECODE(_hw_action_) \
    125     ((_hw_action_) == _BCM_TRX_TAG_ACTION_NONE ? bcmVlanActionNone :    \
    126      (_hw_action_) == _BCM_TRX_TAG_ACTION_ADD ? bcmVlanActionAdd :      \
    127      (_hw_action_) == _BCM_TRX_TAG_ACTION_REPLACE ? bcmVlanActionReplace : \
    128      (_hw_action_) == _BCM_TRX_TAG_ACTION_DELETE ? bcmVlanActionDelete : \
    129      bcmVlanActionCopy)
    130 
    131 #if defined(BCM_TRIDENT2_SUPPORT)
    132 /* extended version for fcoe capable chips */
    133 
    134 #define _BCM_TRX_TAG_ACTION_ENCODE_EGR_FCOE_EXT(_action_) \
    135     ((_action_) == bcmVlanActionNone ? _BCM_TRX_TAG_ACTION_NONE :       \
    136      (_action_) == bcmVlanActionAdd ? _BCM_TRX_TAG_ACTION_ADD :         \
    137      (_action_) == bcmVlanActionReplace ? _BCM_TRX_TAG_ACTION_REPLACE : \
    138      (_action_) == bcmVlanActionDelete ? _BCM_TRX_TAG_ACTION_DELETE :   \
    139      (_action_) == bcmVlanActionCopyVsan ? _BCM_TRX_TAG_ACTION_COPY_VSAN : \
    140      (_action_) == bcmVlanActionReplaceVsan ? _BCM_TRX_TAG_ACTION_REPLACE_VSAN : \
    141      _BCM_TRX_TAG_ACTION_COPY)
    142 
    143 #define _BCM_TRX_TAG_ACTION_DECODE_EGR_FCOE_EXT(_hw_action_) \
    144     ((_hw_action_) == _BCM_TRX_TAG_ACTION_NONE ? bcmVlanActionNone :    \
    145      (_hw_action_) == _BCM_TRX_TAG_ACTION_ADD ? bcmVlanActionAdd :      \
    146      (_hw_action_) == _BCM_TRX_TAG_ACTION_REPLACE ? bcmVlanActionReplace : \
    147      (_hw_action_) == _BCM_TRX_TAG_ACTION_DELETE ? bcmVlanActionDelete : \
    148      (_hw_action_) == _BCM_TRX_TAG_ACTION_COPY_VSAN ? bcmVlanActionCopyVsan : \
    149      (_hw_action_) == _BCM_TRX_TAG_ACTION_REPLACE_VSAN ? bcmVlanActionReplaceVsan : \
    150      bcmVlanActionCopy)
    151 
    152 #endif
    153 
    154 
    155 #define _BCM_TRX_PRI_CFI_ACTION_ENCODE(_action_) \
    156     ((_action_) == bcmVlanActionNone ? _BCM_TRX_PRI_CFI_ACTION_NONE :       \
    157      (_action_) == bcmVlanActionAdd ? _BCM_TRX_PRI_CFI_ACTION_ADD :         \
    158      (_action_) == bcmVlanActionReplace ? _BCM_TRX_PRI_CFI_ACTION_REPLACE : \
    159      _BCM_TRX_PRI_CFI_ACTION_COPY)
    160 
    161 #define _BCM_TRX_PRI_CFI_ACTION_DECODE(_hw_action_) \
    162     ((_hw_action_) == _BCM_TRX_PRI_CFI_ACTION_NONE ? bcmVlanActionNone :    \
    163      (_hw_action_) == _BCM_TRX_PRI_CFI_ACTION_ADD ? bcmVlanActionAdd :      \
    164      (_hw_action_) == _BCM_TRX_PRI_CFI_ACTION_REPLACE ? bcmVlanActionReplace : \
    165      bcmVlanActionCopy)
    166 
    167 #if defined(BCM_TRIDENT2_SUPPORT)
    168 /* extended version for fcoe capable chips */
    169 #define _BCM_TRX_PRI_CFI_ACTION_ENCODE_FCOE_EXT(_action_) \
    170     ((_action_) == bcmVlanActionNone ? _BCM_TRX_PRI_CFI_ACTION_NONE :       \
    171      (_action_) == bcmVlanActionAdd ? _BCM_TRX_PRI_CFI_ACTION_ADD :         \
    172      (_action_) == bcmVlanActionReplace ? _BCM_TRX_PRI_CFI_ACTION_REPLACE : \
    173      (_action_) == bcmVlanActionCopyVsan ? _BCM_TRX_PRI_CFI_ACTION_COPY_VSAN : \
    174      (_action_) == bcmVlanActionReplaceVsan ? _BCM_TRX_PRI_CFI_ACTION_REPLACE_VSAN : \
    175      _BCM_TRX_PRI_CFI_ACTION_COPY)
    176 
    177 #define _BCM_TRX_PRI_CFI_ACTION_DECODE_FCOE_EXT(_hw_action_) \
    178     ((_hw_action_) == _BCM_TRX_PRI_CFI_ACTION_NONE ? bcmVlanActionNone :    \
    179      (_hw_action_) == _BCM_TRX_PRI_CFI_ACTION_ADD ? bcmVlanActionAdd :      \
    180      (_hw_action_) == _BCM_TRX_PRI_CFI_ACTION_REPLACE ? bcmVlanActionReplace : \
    181      (_hw_action_) == _BCM_TRX_PRI_CFI_ACTION_COPY_VSAN ? bcmVlanActionCopyVsan : \
    182      (_hw_action_) == _BCM_TRX_PRI_CFI_ACTION_REPLACE_VSAN ? bcmVlanActionReplaceVsan : \
    183      bcmVlanActionCopy)
    184 #endif
    185 
    186 /*
    187  * Vlan block profile structure.  
    188  *
    189  * Purpose  : Implement different block functionality per vlan.
    190  */
    191 typedef struct _trx_vlan_block_s {
    192     soc_pbmp_t first_mask;
    193     soc_pbmp_t second_mask;
    194     uint8 broadcast_mask_sel;
    195     uint8 unknown_unicast_mask_sel;
    196     uint8 unknown_mulitcast_mask_sel;
    197     uint8 known_mulitcast_mask_sel;
    198 } _trx_vlan_block_t;
    199 
    200 /* Default Engress Vlan Translate Action Profile Table Index */
    201 #define BCM_TRX_EGR_VLAN_ACTION_PROFILE_DEFAULT  0
    202 
    203 typedef union egr_qos_l2_map_entry_t_ {
    204     egr_zone_1_dot1p_mapping_table_1_entry_t table_v2;
    205     egr_pri_cng_map_entry_t table_v1;
    206 }egr_qos_l2_map_entry_t;
    207 
    208 typedef union egr_qos_l3_map_entry_t_ {
    209     egr_zone_4_qos_mapping_table_entry_t table_v2;
    210     egr_dscp_table_entry_t table_v1;
    211 }egr_qos_l3_map_entry_t;
    212 
    213 extern int _bcm_trx_vlan_action_verify(int unit, bcm_vlan_action_set_t *action);
    214 #ifdef BCM_TRIDENT2PLUS_SUPPORT
    215 extern int
    216 _bcm_misc_port_profile_entry_add(int unit, void **entries, int entries_per_set, uint32 *index);
    217 extern int _bcm_misc_port_profile_entry_get(int unit, int index, int count, void **entries);
    218 extern int _bcm_misc_port_profile_entry_delete(int unit, int index);
    219 extern int
    220 _bcm_misc_port_profile_mem_reference(int unit, int index, int entries_per_set);
    221 extern int _bcm_misc_port_profile_field32_modify(int unit, int table_id,
    222                                                  soc_field_t field, uint32 value);
    223 #endif /* BCM_TRIDENT2PLUS_SUPPORT */
    224 extern int _bcm_trx_vlan_action_profile_init(int unit);
    225 #if defined(BCM_TOMAHAWK_SUPPORT) || defined(BCM_TRIDENT3_SUPPORT) || \
    226     defined(BCM_KATANA2_SUPPORT)
    227 extern int _bcm_th_port_vlan_action_profile_reinit(int unit);
    228 #endif
    229 extern int _bcm_trx_vlan_action_profile_entry_add(int unit,
    230                                       bcm_vlan_action_set_t *action,
    231                                       uint32 *index);
    232 extern void _bcm_trx_vlan_action_profile_entry_increment(int unit, uint32 index);
    233 extern void _bcm_trx_vlan_action_profile_entry_get(int unit,
    234                                       bcm_vlan_action_set_t *action,
    235                                       uint32 index);
    236 extern int _bcm_trx_vlan_action_profile_entry_delete(int unit, uint32 index);
    237 extern int _bcm_trx_vlan_action_profile_detach(int unit);
    238 
    239 extern int _bcm_trx_vlan_range_profile_entry_delete(int unit, uint32 index);
    240 extern void _bcm_trx_vlan_range_profile_entry_increment(int unit, uint32 index);
    241 
    242 extern int _bcm_trx_egr_vlan_action_profile_entry_add(int unit,
    243                                       bcm_vlan_action_set_t *action,
    244                                       uint32 *index);
    245 extern void _bcm_trx_egr_vlan_action_profile_entry_increment(int unit, uint32 index);
    246 extern void _bcm_trx_egr_vlan_action_profile_entry_get(int unit,
    247                                           bcm_vlan_action_set_t *action,
    248                                           uint32 index);
    249 extern int _bcm_trx_egr_vlan_action_profile_entry_delete(int unit, uint32 index);
    250 
    251 extern int _bcm_trx_vlan_ip_action_add(int unit, bcm_vlan_ip_t *vlan_ip,
    252                                       bcm_vlan_action_set_t *action);
    253 extern int _bcm_trx_vlan_ip_action_get(int unit, bcm_vlan_ip_t *vlan_ip,
    254                                       bcm_vlan_action_set_t *action);
    255 extern int _bcm_trx_vlan_ip_action_traverse(int unit, 
    256                                             bcm_vlan_ip_action_traverse_cb cb, 
    257                                             void *user_data);
    258 
    259 
    260 extern int _bcm_trx_vlan_ip_delete(int unit, bcm_vlan_ip_t *vlan_ip);
    261 extern int _bcm_trx_vlan_ip_delete_all(int unit);
    262 extern int _bcm_trx_vlan_mac_action_add(int unit, bcm_mac_t mac,
    263                                        bcm_vlan_action_set_t *action);
    264 extern int _bcm_trx_vlan_mac_delete(int unit, bcm_mac_t mac);
    265 extern int _bcm_trx_vlan_mac_delete_all(int unit);
    266 
    267 extern int _bcm_trx_vlan_port_prot_match_get(int unit, 
    268                                              bcm_port_frametype_t frame, 
    269                                              bcm_port_ethertype_t ether, 
    270                                              int *match_idx);
    271 extern int _bcm_trx_vlan_port_prot_empty_get(int unit, int *empty_idx);
    272 
    273 extern int _bcm_trx_lltag_vlan_translate_entry_assemble(int unit, void *vent,
    274                                       bcm_gport_t port,
    275                                       bcm_vlan_translate_key_t key_type,
    276                                       bcm_vlan_t lltag_vlan,
    277                                       bcm_vlan_t other_vlan);
    278 
    279 extern int _bcm_trx_vlan_translate_entry_assemble(int unit, void *vent,
    280                                       bcm_gport_t port,
    281                                       bcm_vlan_translate_key_t key_type,
    282                                       bcm_vlan_t inner_vlan, 
    283                                       bcm_vlan_t outer_vlan);
    284 
    285 extern int _bcm_trx_vlan_translate_action_add(int unit,
    286                                              bcm_gport_t port,
    287                                              bcm_vlan_translate_key_t key_type,
    288                                              bcm_vlan_t outer_vlan,
    289                                              bcm_vlan_t inner_vlan,
    290                                              bcm_vlan_action_set_t *action);
    291 extern int _bcm_trx_vlan_translate_action_delete(int unit,
    292                                                 bcm_gport_t port,
    293                                                 bcm_vlan_translate_key_t key_type,
    294                                                 bcm_vlan_t outer_vlan,
    295                                                 bcm_vlan_t inner_vlan);
    296 extern int _bcm_trx_vlan_translate_action_delete_all(int unit);
    297 extern int _bcm_trx_vlan_translate_action_get (int unit, 
    298                                               bcm_gport_t port, 
    299                                               bcm_vlan_translate_key_t key_type, 
    300                                               bcm_vlan_t outer_vid,
    301                                               bcm_vlan_t inner_vid,
    302                                               bcm_vlan_action_set_t *action);
    303 extern int _bcm_trx_vlan_translate_action_range_add(int unit,
    304                                                    bcm_gport_t port,
    305                                                    bcm_vlan_t outer_vlan_low,
    306                                                    bcm_vlan_t outer_vlan_high,
    307                                                    bcm_vlan_t inner_vlan_low,
    308                                                    bcm_vlan_t inner_vlan_high,
    309                                                    bcm_vlan_action_set_t *action);
    310 extern int _bcm_trx_vlan_translate_action_range_get(int unit,
    311                                                    bcm_gport_t port,
    312                                                    bcm_vlan_t outer_vlan_low,
    313                                                    bcm_vlan_t outer_vlan_high,
    314                                                    bcm_vlan_t inner_vlan_low,
    315                                                    bcm_vlan_t inner_vlan_high,
    316                                                    bcm_vlan_action_set_t *action);
    317 extern int _bcm_trx_vlan_translate_action_range_delete(int unit,
    318                                                       bcm_gport_t port,
    319                                                       bcm_vlan_t outer_vlan_low,
    320                                                       bcm_vlan_t outer_vlan_high,
    321                                                       bcm_vlan_t inner_vlan_low,
    322                                                       bcm_vlan_t inner_vlan_high);
    323 extern int _bcm_trx_vlan_translate_action_range_delete_all(int unit);
    324 extern int _bcm_trx_vlan_translate_action_range_traverse(int unit, 
    325                                   _bcm_vlan_translate_traverse_t *trvs_info);
    326 
    327 extern int _bcm_trx_vlan_translate_parse(int unit, soc_mem_t mem, uint32 *vent, 
    328                                   _bcm_vlan_translate_traverse_t *trvs_info);
    329 extern int _bcm_trx_vlan_translate_egress_entry_assemble(int unit,
    330                                               void *vent,
    331                                               int port_class,
    332                                               bcm_vlan_t outer_vlan,
    333                                               bcm_vlan_t inner_vlan,
    334                                               bcm_vlan_translate_key_t key_type);
    335 extern int _bcm_trx_vlan_translate_egress_action_add(int unit, int port_class,
    336                                          bcm_vlan_t outer_vlan,
    337                                          bcm_vlan_t inner_vlan,
    338                                          bcm_vlan_translate_key_t key_type,
    339                                          bcm_vlan_action_set_t *action);
    340 extern int _bcm_trx_vlan_translate_egress_action_get(int unit, int port_class,
    341                                          bcm_vlan_t outer_vlan,
    342                                          bcm_vlan_t inner_vlan,
    343                                          bcm_vlan_translate_key_t key_type,
    344                                          bcm_vlan_action_set_t *action);
    345 extern int _bcm_trx_vlan_translate_egress_action_delete(int unit, int port_class,
    346                                             bcm_vlan_t outer_vlan,
    347                                             bcm_vlan_t inner_vlan,
    348                                             bcm_vlan_translate_key_t key_type);
    349 extern int _bcm_trx_vlan_mac_action_traverse(int unit, 
    350                                              bcm_vlan_mac_action_traverse_cb cb, 
    351                                              void *user_data);
    352 extern int _bcm_trx_vlan_mac_action_get(int unit, bcm_mac_t  mac,
    353                              bcm_vlan_action_set_t *action);
    354 extern int _bcm_trx_vlan_translate_egress_action_delete_all(int unit);
    355 
    356 #ifndef BCM_SW_STATE_DUMP_DISABLE
    357 extern void _bcm_trx_vlan_sw_dump(int unit);
    358 #endif /* BCM_SW_STATE_DUMP_DISABLE */
    359 
    360 extern int bcm_trx_metro_l2_tunnel_add(int unit, bcm_mac_t mac, bcm_vlan_t vlan);
    361 extern int bcm_trx_metro_l2_tunnel_delete(int unit, bcm_mac_t mac, bcm_vlan_t vlan);
    362 extern int bcm_trx_metro_l2_tunnel_delete_all(int unit);
    363 extern int _bcm_common_init(int unit);
    364 extern int _bcm_common_cleanup(int unit);
    365 extern int _bcm_common_scache_sync(int unit);
    366 extern int _bcm_mac_da_profile_entry_add(int unit, void **entries, 
    367                                          int entries_per_set, uint32 *index);
    368 extern int _bcm_mac_da_profile_entry_delete(int unit, int index);
    369 
    370 /* LPORT Profile Table */
    371 extern int _bcm_lport_profile_mem_reference_unique(int unit, int index,
    372                                             int entries_per_set, int pipe);
    373 extern int _bcm_lport_profile_mem_reference(int unit, int index,
    374                                             int entries_per_set);
    375 extern int _bcm_lport_profile_entry_add_unique(int unit, void **entries,
    376                               int entries_per_set, int pipe, uint32 *index);
    377 extern int _bcm_lport_profile_entry_add(int unit, void **entries, 
    378                                          int entries_per_set, uint32 *index);
    379 extern int _bcm_lport_profile_entry_delete_unique(int unit, int index, int pipe);
    380 extern int _bcm_lport_profile_entry_delete(int unit, int index);
    381 extern int _bcm_lport_profile_entry_get(int unit, int index, int count,
    382                                         void **entries);
    383 extern int _bcm_lport_profile_fields32_modify(int unit, int table_id,
    384                                               int field_count,
    385                                               soc_field_t *fields,
    386                                               uint32 *values);
    387 extern int _bcm_lport_profile_field32_modify(int unit, int table_id,
    388                                              soc_field_t field,
    389                                              uint32 value);
    390 
    391 /* LPORT_1 Profile Table */
    392 extern int _bcm_lport_ind_profile_mem_reference(int unit, int index,
    393                                             int entries_per_set);
    394 extern int _bcm_lport_ind_profile_entry_add(int unit, void **entries, 
    395                                          int entries_per_set, uint32 *index);
    396 extern int _bcm_lport_ind_profile_entry_delete(int unit, int index);
    397 extern int _bcm_lport_ind_profile_entry_get(int unit, int index, int count,
    398                                         void **entries);
    399 extern int _bcm_lport_ind_profile_fields32_modify(int unit, int table_id,
    400                                               int field_count,
    401                                               soc_field_t *fields,
    402                                               uint32 *values);
    403 extern int _bcm_lport_ind_profile_field32_modify(int unit, int table_id,
    404                                              soc_field_t field,
    405                                              uint32 value);
    406 
    407 /* RTAG7_1 Profile Table */
    408 extern int _bcm_rtag7_ind_profile_mem_reference(int unit, int index,
    409                                             int entries_per_set);
    410 extern int _bcm_rtag7_ind_profile_entry_add(int unit, void **entries, 
    411                                          int entries_per_set, uint32 *index);
    412 extern int _bcm_rtag7_ind_profile_entry_delete(int unit, int index);
    413 extern int _bcm_rtag7_ind_profile_entry_get(int unit, int index, int count,
    414                                         void **entries);
    415 extern int _bcm_rtag7_ind_profile_fields32_modify(int unit, int table_id,
    416                                               int field_count,
    417                                               soc_field_t *fields,
    418                                               uint32 *values);
    419 extern int _bcm_rtag7_ind_profile_field32_modify(int unit, int table_id,
    420                                              soc_field_t field,
    421                                              uint32 value);
    422 
    423 /* EGR LPORT Profile Table */
    424 #define _BCM_EGR_LPROF_MEM_COUNT    9
    425 extern int _bcm_egr_lport_profile_mem_index_get(int unit, soc_mem_t mem,
    426                                                 int *index);
    427 extern int _bcm_egr_lport_profile_mem_reference(int unit, int index,
    428                                             int entries_per_set);
    429 extern int _bcm_egr_lport_profile_entry_add(int unit, void **entries,
    430                                          int entries_per_set, uint32 *index);
    431 extern int _bcm_egr_lport_profile_entry_delete(int unit, int index);
    432 extern int _bcm_egr_lport_profile_entry_get(int unit, int index, int count,
    433                                         void **entries);
    434 extern int _bcm_egr_lport_profile_fields32_modify(int unit, soc_mem_t mem,
    435                 int field_count, soc_field_t *fields, uint32 *values);
    436 extern int _bcm_egr_lport_profile_field32_modify(int unit, soc_mem_t mem,
    437                 soc_field_t field, uint32 value);
    438 
    439 #define _BCM_TR2_PRI_CNG_MAP_SIZE (16)
    440 extern int _bcm_ing_pri_cng_map_entry_add(int unit, void **entries, 
    441                                          int entries_per_set, uint32 *index);
    442 
    443 extern int _bcm_ing_vft_pri_map_entry_add(int unit, void **entries, 
    444                                          int entries_per_set, uint32 *index);
    445 extern int _bcm_ing_l2_vlan_etag_map_entry_add(int unit, 
    446                             void **entries, int entries_per_set, uint32 *index);
    447 extern int _bcm_egr_l2_vlan_etag_map_entry_add(int unit, 
    448                             void **entries, int entries_per_set, uint32 *index);
    449 extern int _bcm_egr_vft_pri_map_entry_add(int unit, void **entries, 
    450                                          int entries_per_set, uint32 *index);
    451 extern int _bcm_ing_vft_pri_map_entry_del(int unit, int index);
    452 extern int _bcm_ing_l2_vlan_etag_map_entry_del(int unit, int index);
    453 extern int _bcm_egr_l2_vlan_etag_map_entry_del(int unit, int index);
    454 extern int _bcm_egr_vft_pri_map_entry_del(int unit, int index);
    455 extern int _bcm_ing_vft_pri_map_entry_get(int unit, int index, int count, 
    456                                           void **entries);
    457 extern int _bcm_ing_vft_pri_map_entry_reference(int unit, int index,
    458                                      int entries_per_set_override); 
    459 extern int _bcm_ing_l2_vlan_etag_map_entry_get(int unit, int index, 
    460                                            int count, void **entries);
    461 extern int _bcm_ing_l2_vlan_etag_map_entry_reference(int unit, int index,
    462                                      int entries_per_set_override);
    463 extern int _bcm_egr_vft_pri_map_entry_get(int unit, int index, int count, 
    464                                           void **entries);
    465 extern int _bcm_egr_vft_pri_map_entry_reference(int unit, int index,
    466                                      int entries_per_set_override); 
    467 extern int _bcm_egr_l2_vlan_etag_map_entry_get(int unit, int index, 
    468                                            int count, void **entries);
    469 extern int _bcm_egr_l2_vlan_etag_map_entry_reference(int unit, int index,
    470                                      int entries_per_set_override);
    471 extern int _bcm_egr_vsan_intpri_map_entry_add(int unit, void **entries, 
    472                                               int entries_per_set, 
    473                                               uint32 *index);
    474 extern int _bcm_egr_vsan_intpri_map_entry_del(int unit, int index);
    475 extern int _bcm_egr_vsan_intpri_map_entry_get(int unit, int index, int count, 
    476                                               void **entries);
    477 extern int _bcm_egr_vsan_intpri_map_entry_reference(int unit, int index,
    478                                      int entries_per_set_override);
    479 extern int _bcm_egr_vft_fields_entry_add(int unit, void **entries, 
    480                                          int entries_per_set, 
    481                                          uint32 *index);
    482 extern int _bcm_egr_vft_fields_entry_del(int unit, int index);
    483 extern int _bcm_egr_vft_fields_entry_get(int unit, int index, int count, 
    484                                          void **entries);
    485 extern int _bcm_egr_vft_fields_entry_reference(int unit, int index,
    486                                                int entries_per_set_override);
    487 
    488 extern int _bcm_ing_pri_cng_map_entry_delete(int unit, int index);
    489 extern int _bcm_ing_pri_cng_map_entry_get(int unit, int index, int count,
    490                                           void **entries);
    491 extern int _bcm_ing_pri_cng_map_entry_reference(int unit, int index, 
    492                                                 int entries_per_set_override);
    493 extern int _bcm_egr_mpls_combo_map_entry_add(int unit, void **entries, 
    494                                              int entries_per_set,
    495                                              uint32 *index);
    496 extern int _bcm_egr_mpls_combo_map_entry_update(int unit, void **entries, 
    497                                                 uint32 index);
    498 extern int _bcm_egr_mpls_combo_map_entry_delete(int unit, int index) ;
    499 extern int _bcm_egr_mpls_combo_map_entry_reference(int unit, int index, 
    500                                                    int entries_per_set_override);
    501 extern int _bcm_egr_mpls_combo_map_entry_write_mode_get(int unit,
    502                                                 uint32 index, int *mode);
    503 extern int _bcm_egr_qos_profile_mem_reference(int unit, int index, int entries_per_set);
    504 extern int _bcm_egr_qos_profile_entry_add(int unit, void **entries, 
    505                               int entries_per_set, uint32 *index);
    506 extern int _bcm_egr_qos_profile_entry_delete(int unit, int index); 
    507 extern int _bcm_egr_qos_profile_entry_get(int unit, int index, int count, void **entries);
    508 extern int _bcm_dscp_table_entry_add(int unit, void **entries, 
    509                                          int entries_per_set, uint32 *index);
    510 extern int _bcm_dscp_table_entry_delete(int unit, int index);
    511 extern int _bcm_dscp_table_entry_reference(int unit, int index,
    512                                            int entries_per_set_override);
    513 extern int _bcm_dscp_table_entry_ref_count_get(int unit, uint32 index,
    514                                                 int* ref_count);
    515 extern int _bcm_dscp_table_entry_get(int unit, int index, int count,
    516                                           void **entries);
    517 extern int  _bcm_dscp_table_entry_range(int unit, int *index_min, 
    518                                         int *index_max);
    519 extern int
    520 _bcm_egr_dscp_table_entry_ref_count_get(int unit, uint32 index, int *ref_count);
    521 
    522 extern int
    523 _bcm_egr_dscp_table_entry_get(int unit, int index, int count, void **entries);
    524 
    525 extern int _bcm_egr_dscp_table_entry_set(int unit, void **entries, uint32 index);
    526 
    527 extern int _bcm_egr_dscp_table_entry_add(int unit, void **entries, 
    528                                          int entries_per_set, uint32 *index, uint32 flags);
    529 extern int _bcm_egr_dscp_table_entry_delete(int unit, int index);
    530 extern int _bcm_egr_dscp_table_entry_reference(int unit, int index, 
    531                                                int entries_per_set_override);
    532 extern int _bcm_prot_pkt_ctrl_add(int unit, uint32 prot_pkt_ctrl,
    533                                   uint32 igmp_mld_pkt_ctrl, uint32 *index);
    534 extern int _bcm_prot_pkt_ctrl_delete(int unit, uint32 index);
    535 extern int _bcm_prot_pkt_ctrl_get(int unit, uint32 index,
    536                                   uint32 *prot_pkt_ctrl,
    537                                   uint32 *igmp_mld_pkt_ctrl);
    538 extern int _bcm_prot_pkt_ctrl_reference(int unit, uint32 index);
    539 extern int _bcm_prot_pkt_ctrl_ref_count_get(int unit, uint32 index,
    540                                             int* ref_count);
    541 extern int _bcm_ing_l3_nh_attrib_entry_add(int unit, void **entries, 
    542                               int entries_per_set, uint32 *index);
    543 extern int _bcm_ing_l3_nh_attrib_entry_delete(int unit, int index) ;
    544 extern int _bcm_ing_l3_nh_attrib_entry_reference(int unit, int index, 
    545                                 int entries_per_set_override);
    546 extern void _bcm_common_profile_mem_ref_cnt_update(int unit, soc_mem_t mem, 
    547                                                    int profile_ptr, int count);
    548 
    549 #ifdef BCM_TRIDENT2_SUPPORT
    550 extern int _bcm_l3_iif_profile_entry_add(int unit, void **entries, 
    551                               int entries_per_set, uint32 *index);
    552 extern int _bcm_l3_iif_profile_entry_delete(int unit, int index);
    553 extern int _bcm_l3_iif_profile_entry_get(int unit, int index, int count,
    554                                          void **entries);
    555 extern int _bcm_l3_iif_profile_entry_reference(int unit, int index, 
    556                                 int entries_per_set_override);
    557 extern int _bcm_l3_iif_profile_entry_update(int unit, void **entries, 
    558                                             uint32 *index);
    559 extern int
    560 _bcm_l3_iif_profile_entry_reference_get(int unit, int index, 
    561                                 int *ref_count);
    562 extern int _bcm_l3_ip4_options_profile_entry_add(int unit, void **entries, 
    563                               int entries_per_set, uint32 *index);
    564 extern int _bcm_l3_ip4_options_profile_entry_delete(int unit, int index);
    565 extern int _bcm_l3_ip4_options_profile_entry_get(int unit, int index, 
    566                                                  int count, void **entries);
    567 extern int _bcm_l3_ip4_options_profile_entry_reference(int unit, int index, 
    568                                 int entries_per_set_override);
    569 extern int _bcm_l3_ip4_options_profile_entry_update(int unit, void **entries,
    570                                                     uint32 index);
    571 extern int _bcm_fc_map_profile_entry_add(int unit, void **entries, 
    572                                          int entries_per_set, uint32 *index);
    573 extern int _bcm_fc_map_profile_entry_delete(int unit, int index);
    574 extern int _bcm_fc_map_profile_entry_get(int unit, int index, int count, 
    575                                          void **entries);
    576 extern int _bcm_fc_map_profile_entry_reference(int unit, int index,
    577                                                int entries_per_set_override);
    578 extern int _bcm_l3_iif_profile_sw_state_set(int unit, void **entries,
    579                                             int entries_per_set, uint32 index);
    580 
    581 #endif /* BCM_TRIDENT2_SUPPORT */
    582 
    583 #ifdef BCM_TRIDENT2PLUS_SUPPORT
    584 extern int _bcm_vfi_profile_entry_add(int unit, void **entries, 
    585                                       int entries_per_set, uint32 *index);
    586 extern int _bcm_vfi_profile_entry_delete(int unit, int index);
    587 extern int _bcm_vfi_profile_entry_get(int unit, int index, int count,
    588                                       void **entries);
    589 extern int _bcm_vfi_profile_entry_reference(int unit, int index, 
    590                                             int entries_per_set_override);
    591 #endif /* BCM_TRIDENT2PLUS_SUPPORT */
    592 
    593 #ifdef BCM_TRIDENT3_SUPPORT
    594 #define _BCM_TD3_PRI_CNG_MAP_SIZE (64)
    595 #endif /* BCM_TRIDENT3_SUPPORT */
    596 
    597 #ifdef BCM_KATANA_SUPPORT
    598 extern int _bcm_offset_map_table_entry_add(int unit, void **entries,
    599                                 int entries_per_set, uint32 *index);
    600 extern int _bcm_offset_map_table_entry_delete(int unit, int index);
    601 extern int _bcm_offset_map_table_entry_get(int unit, int index, 
    602                                            int count, void **entries);
    603 extern int _bcm_offset_map_table_entry_reference(int unit, int index,
    604                                 int entries_per_set_override);
    605 #endif /*BCM_KATANA_SUPPORT */
    606 #if defined(BCM_KATANA2_SUPPORT) || defined(BCM_TOMAHAWK_SUPPORT) || defined(BCM_TRIDENT2PLUS_SUPPORT)
    607 extern int _bcm_port_vlan_protocol_data_entry_add(
    608            int unit, void **entries, int entries_per_set, uint32 *index);
    609 extern int _bcm_port_vlan_protocol_data_entry_delete(
    610            int unit, int index);
    611 #endif
    612 #if defined(BCM_KATANA2_SUPPORT) || defined(BCM_TOMAHAWK_SUPPORT)
    613 extern int _bcm_port_vlan_protocol_data_entry_get(
    614            int unit, int index, int count, void **entries);
    615 extern int _bcm_port_vlan_protocol_data_entry_reference(
    616            int unit, int index, int entries_per_set_override);
    617 extern int
    618 _bcm_trx_vlan_protocol_data_profile_update(
    619     int unit, bcm_pbmp_t update_pbm, int prot_idx,
    620     bcm_vlan_action_set_t *action);
    621 
    622 extern int
    623 _bcm_trx_vlan_port_default_action_profile_set(int unit, bcm_port_t port,
    624                                       bcm_vlan_action_set_t *action);
    625 
    626 extern int
    627 _bcm_trx_vlan_port_default_action_profile_delete(int unit, bcm_port_t port);
    628 #endif /*BCM_KATANA2_SUPPORT */
    629 #ifdef BCM_SABER2_SUPPORT
    630 extern int
    631 _bcm_service_pri_map_table_entry_add(int unit, void **entries,
    632                                 int entries_per_set, uint32 *index);
    633 extern int
    634 _bcm_service_pri_map_table_entry_delete(int unit, int index);
    635 extern int
    636 _bcm_service_pri_map_table_entry_get(int unit, int index, int count, 
    637                                       void **entries);
    638 extern int
    639 _bcm_service_pri_map_table_entry_reference(int unit, int index,
    640                                 int entries_per_set_override);
    641 #endif
    642 #ifdef BCM_HURRICANE3_SUPPORT
    643 extern int _bcm_egr_header_encap_data_entry_add(int unit, void **entries, 
    644            int entries_per_set, uint32 *index);
    645 extern int _bcm_egr_header_encap_data_entry_delete(int unit, int index);
    646 extern int _bcm_egr_header_encap_data_entry_update(int unit, 
    647            void **entries, uint32 index);
    648 extern int _bcm_egr_header_encap_data_entry_ref_count_get(int unit, 
    649            uint32 index, int *ref_count);
    650 extern int _bcm_egr_header_encap_data_entry_search(int unit, void **entries,
    651            int entries_per_set, uint32 *index);
    652 extern int _bcm_custom_header_match_entry_add(int unit, void **entries, 
    653            int entries_per_set, uint32 *index);
    654 extern int _bcm_custom_header_match_entry_delete(int unit, int index);
    655 extern int _bcm_custom_header_match_entry_update(int unit, 
    656            void **entries, uint32 index);
    657 extern int _bcm_custom_header_match_entry_get(int unit, int index, 
    658            int count, void **entries);
    659 extern int _bcm_custom_header_match_entry_ref_count_get(int unit, 
    660            uint32 index, int *ref_count);
    661 #endif /* BCM_HURRICANE3_SUPPORT */
    662 #ifdef BCM_TOMAHAWK_SUPPORT
    663 extern int
    664 _bcm_ing_tunnel_term_map_entry_add(int unit, void **entries, 
    665                                    int entries_per_set, uint32 *index);
    666 extern int
    667 _bcm_ing_tunnel_term_map_entry_delete(int unit, int index);
    668 extern int
    669 _bcm_ing_tunnel_term_map_entry_get(int unit, int index, int count, void **entries);
    670 extern int
    671 _bcm_ing_tunnel_term_map_entry_reference(int unit, int index,
    672                                          int entries_per_set_override);
    673 #endif
    674 
    675 #if (defined(BCM_TOMAHAWK2_SUPPORT) || defined(BCM_TRIDENT3_SUPPORT))
    676 extern int
    677 _bcm_ing_exp_to_ip_ecn_map_entry_add(int unit, void **entries, 
    678                                      int entries_per_set, uint32 *index);
    679 extern int
    680 _bcm_ing_exp_to_ip_ecn_map_entry_delete(int unit, int index); 
    681 extern int
    682 _bcm_ing_exp_to_ip_ecn_map_entry_get(int unit, int index, int count, void **entries);
    683 extern int
    684 _bcm_ing_exp_to_ip_ecn_map_entry_reference(int unit, int index,
    685                                            int entries_per_set_override);
    686 extern int
    687 _bcm_egr_ip_ecn_to_exp_map_entry_add(int unit, void **entries, 
    688                                      int entries_per_set, uint32 *index);
    689 extern int
    690 _bcm_egr_ip_ecn_to_exp_map_entry_delete(int unit, int index); 
    691 extern int
    692 _bcm_egr_ip_ecn_to_exp_map_entry_get(int unit, int index, int count, void **entries);
    693 extern int
    694 _bcm_egr_ip_ecn_to_exp_map_entry_reference(int unit, int index, int entries_per_set_override); 
    695 extern int
    696 _bcm_egr_int_cn_to_exp_map_entry_add(int unit, void **entries, 
    697                                      int entries_per_set, uint32 *index);
    698 extern int
    699 _bcm_egr_int_cn_to_exp_map_entry_delete(int unit, int index); 
    700 extern int
    701 _bcm_egr_int_cn_to_exp_map_entry_get(int unit, int index, int count, void **entries);
    702 extern int
    703 _bcm_egr_int_cn_to_exp_map_entry_reference(int unit, int index,
    704                                            int entries_per_set_override); 
    705 #endif /* BCM_TOMAHAWK2_SUPPORT */
    706 
    707 #ifdef BCM_WARM_BOOT_SUPPORT_SW_DUMP
    708 extern void _bcm_common_sw_dump(int unit);
    709 #endif /* BCM_WARM_BOOT_SUPPORT_SW_DUMP */
    710 
    711 extern int _bcm_trx_egr_src_port_outer_tpid_set(int unit, int tpid_index,
    712                                                 int enable);
    713 extern int _bcm_trx_source_trunk_map_set(int unit, bcm_port_t port, 
    714                                          soc_field_t field, uint32 value);
    715 extern int _bcm_trx_source_trunk_map_get(int unit, bcm_port_t port, 
    716                                          soc_field_t field, uint32 *value);
    717 extern int _bcm_trx_port_force_vlan_set(int unit, bcm_port_t port,
    718                                         bcm_vlan_t vlan, int pkt_prio,
    719                                         uint32 flags);
    720 
    721 extern int _bcm_trx_port_force_vlan_get(int unit, bcm_port_t port,
    722                                         bcm_vlan_t *vlan, int *pkt_prio, 
    723                                         uint32 *flags);
    724 extern int  _bcm_trx_port_dtag_mode_set(int unit, bcm_port_t port, int mode);
    725 extern int  _bcm_trx_port_dtag_mode_get(int unit, bcm_port_t port, int *mode);
    726 extern int _bcm_trx_lport_tab_default_entry_add(int unit, 
    727                                                 soc_profile_mem_t *prof);
    728 extern int _bcm_trx_egr_lport_tab_default_entry_add(int unit, 
    729                                                 soc_profile_mem_t *prof);
    730 extern int _bcm_trx_rtag7_tab_default_entry_add(int unit, 
    731                                                 soc_profile_mem_t *prof);
    732 extern int _bcm_trx_lport_tab_default_entry_index_get(int unit);
    733 extern int _bcm_trx_rtag7_tab_default_entry_index_get(int unit);
    734 extern int _bcm_trx_egr_lport_tab_default_entry_index_get(int unit);
    735 extern int _bcm_trx_port_control_egress_class_select_set(int unit, 
    736                                                          bcm_port_t port,
    737                                                          uint32 value);
    738 extern int _bcm_trx_port_control_egress_class_select_get(int unit, 
    739                                                          bcm_port_t port,
    740                                                          uint32 *value);
    741 extern int _bcm_trx_port_control_higig_class_select_set(int unit,
    742                                                          bcm_port_t port,
    743                                                          uint32 value);
    744 extern int _bcm_trx_port_control_higig_class_select_get(int unit,
    745                                                          bcm_port_t port,
    746                                                          uint32 *value);
    747 
    748 extern int _bcm_trx_gport_to_nhi_set(int unit, int gport,
    749                                         int nh_index);
    750 
    751 extern int _bcm_trx_gport_to_nhi_get(int unit, int gport, 
    752                                                   int* nh_index);
    753 
    754 /* HW encodings */
    755 #define _BCM_TRX_PORT_FORCE_FORWARD_DISABLE  0
    756 #define _BCM_TRX_PORT_FORCE_FORWARD_ALL      1
    757 #define _BCM_TRX_PORT_FORCE_FORWARD_LOCAL    2
    758 
    759 #if defined(BCM_FIELD_SUPPORT)
    760 #define _BCM_FIELD_SC_INGRESS_SINGLE_WIDE_SLICE_SZ  (128)
    761 #define _BCM_FIELD_SC_INGRESS_DOUBLE_WIDE_SLICE_SZ  (256)
    762 #define _BCM_FIELD_SC_INGRESS_DOUBLE_WIDE_SLICE0 (8) 
    763 #define _BCM_FIELD_TD_INGRESS_SINGLE_WIDE_SLICE_SZ  (128)
    764 #define _BCM_FIELD_TD_INGRESS_DOUBLE_WIDE_SLICE_SZ  (256)
    765 #define _BCM_FIELD_TD_INGRESS_DOUBLE_WIDE_SLICE0 (4) 
    766 #define _BCM_FIELD_TD2_INGRESS_LARGE_SLICE_SZ  (512)
    767 #define _BCM_FIELD_TD2_INGRESS_SMALL_SLICE_SZ  (256)
    768 #define _BCM_FIELD_TD2_INGRESS_DOUBLE_WIDE_SLICE0 (4) 
    769 
    770 #define _FP_TRX_RANGE_CHECKER_LOWER_MAX (23)
    771 extern int _bcm_field_trx_tcp_ttl_tos_init(int unit);
    772 extern int _bcm_trx_range_checker_selcodes_update(int unit,
    773                                                   bcm_field_entry_t entry);
    774 extern int _bcm_field_trx_write_slice_map_vfp(int unit, _field_stage_t *stage_fc);
    775 extern int _bcm_field_trx_write_slice_map_egress(int unit, _field_stage_t *stage_fc);
    776 extern int _bcm_field_trx_mirror_ingress_add(int unit, soc_mem_t mem, 
    777                                              _field_entry_t *f_ent,
    778                                              _field_action_t *fa, uint32 *buf);
    779 extern int _bcm_field_trx_mirror_egress_add(int unit, soc_mem_t mem, 
    780                                             _field_entry_t *f_ent,
    781                                             _field_action_t *fa, uint32 *buf);
    782 extern int _bcm_field_trx_mirror_ingress_delete(int unit, soc_mem_t mem, 
    783                                                 _field_entry_t *f_ent, 
    784                                                 bcm_gport_t *mirror_dest, 
    785                                                 uint32 *buf);
    786 extern int _bcm_field_trx_mirror_egress_delete(int unit, soc_mem_t mem, 
    787                                                _field_entry_t *f_ent, 
    788                                                bcm_gport_t *mirror_dest, 
    789                                                uint32 *buf);
    790 extern int _bcm_field_trx_action_support_check(int unit, _field_entry_t *f_ent,
    791                                                 bcm_field_action_t action, 
    792                                                 int *result);
    793 extern int _bcm_field_trx_stage_action_support_check(int                unit,
    794                                                      unsigned           stage,
    795                                                      bcm_field_action_t action, 
    796                                                      int                *result
    797                                                      );
    798 extern int _bcm_field_trx_action_conflict_check(int                unit,
    799                                                 _field_entry_t     *f_ent, 
    800                                                 bcm_field_action_t action1,
    801                                                 bcm_field_action_t action
    802                                                 );
    803 extern int _bcm_field_trx_qualify_ip_type(int unit, bcm_field_entry_t entry,
    804                                           bcm_field_IpType_t type,
    805                                           bcm_field_qualify_t qual);
    806 extern int _bcm_field_trx_qualify_ip_type_get(int unit, bcm_field_entry_t entry,
    807                                               bcm_field_IpType_t *type,
    808                                               bcm_field_qualify_t qual);
    809 extern int _bcm_field_trx_qualify_ip_type_encode_get(int unit, uint32 hw_data,
    810                                                      uint32 hw_mask,
    811                                                      bcm_field_IpType_t *type);
    812 extern int _bcm_field_trx_egress_key_match_type_set(int unit, 
    813                                                     _field_entry_t *f_ent);
    814 extern int _bcm_field_trx_action_delete(int unit, _field_entry_t *f_ent,
    815                                         _field_action_t *fa, int tcam_idx, 
    816                                         uint32 param0, uint32 param1);
    817 extern int _bcm_field_trx_tcam_get(int unit, soc_mem_t mem, 
    818                                    _field_entry_t *f_ent, uint32 *buf);
    819 extern int _bcm_field_trx_action_counter_update(int unit, soc_mem_t mem, 
    820                                                 _field_entry_t *f_ent, 
    821                                                 _field_action_t *fa,
    822                                                 uint32 *buf);
    823 extern int _bcm_field_trx_action_get(int unit, soc_mem_t mem,
    824                                      _field_entry_t *f_ent, 
    825                                       int tcam_idx, _field_action_t *fa, 
    826                                       uint32 *buf);
    827 extern int _bcm_field_trx_range_check_set(int unit, int range, uint32 flags, 
    828                                           int enable, bcm_l4_port_t min, 
    829                                           bcm_l4_port_t max);
    830 extern int _bcm_field_trx_redirect_profile_delete(int unit, int index);
    831 extern int _bcm_field_trx_redirect_profile_alloc(int unit, _field_entry_t *f_ent, 
    832                                           _field_action_t *fa);
    833 extern int _bcm_field_trx_redirect_profile_ref_count_get(int unit, int index,
    834                                                          int *ref_count);
    835 extern int _bcm_field_trx_stat_hw_mode_to_bmap(int unit, uint16 mode, 
    836                                                _field_stage_id_t stage_id, 
    837                                                uint32 *hw_bmap,
    838                                                uint8 *hw_entry_count);
    839 extern int _bcm_field_trx_stat_index_get(int unit, _field_stat_t *f_st, 
    840                                          bcm_field_stat_t stat,
    841                                          int *idx1, int *idx2, int *idx3, 
    842                                          uint32 *flags);
    843 extern int _bcm_field_trx_stat_action_set(int unit, _field_entry_t *f_ent, 
    844                                           soc_mem_t mem, int tcam_idx,
    845                                           uint32 *buf);
    846 extern int _bcm_field_trx_selcodes_install(int unit, _field_group_t *fg, 
    847                                            uint8 slice_numb, bcm_pbmp_t pbmp, 
    848                                            int selcode_index);
    849 extern int _bcm_field_trx_policer_install(int unit, _field_entry_t *f_ent, 
    850                                           _field_policer_t *f_pl);
    851 extern int _field_entry_policer_update_actual_hw_rates(int unit, 
    852         soc_mem_t policer_mem, int instance, _field_entry_t *f_ent, _field_policer_t *f_pl);
    853 extern int _bcm_field_trx_policer_packet_counter_get(int unit,
    854                                           _field_policer_t *f_pl, uint32 *count);
    855 extern int _bcm_field_trx_policer_packet_reset_counter_get(int unit,
    856                                           _field_policer_t *f_pl, uint32 *count);
    857 extern int _bcm_field_trx_policer_action_set(int unit, _field_entry_t *f_ent,
    858                                              soc_mem_t mem, uint32 *buf);
    859 extern int _bcm_field_trx_control_arp_set(int unit,  
    860                                           bcm_field_control_t control,
    861                                           uint32 state);
    862 extern int _bcm_field_trx_egress_selcode_get(int unit, _field_stage_t *stage_fc, 
    863                                bcm_field_qset_t *qset_req,
    864                                _field_group_t *fg);
    865 extern int _bcm_field_trx_slice_clear(int unit, _field_group_t *fg, _field_slice_t *fs); 
    866 extern int _bcm_field_trx_ingress_slice_clear(int unit, uint8 slice_numb);
    867 extern int _bcm_field_trx_egress_slice_clear(int unit, uint8 slice_numb);
    868 extern int _bcm_field_trx_action_params_check(int unit,_field_entry_t *f_ent, 
    869                                                _field_action_t *fa);
    870 extern int
    871 _bcm_field_trx_vlan_format_qualify_is_double_tagged(unsigned data,
    872                                                     unsigned mask
    873                                                     );
    874 extern int
    875 _bcm_field_trx_action_depends_check(int             unit,
    876                                     _field_entry_t  *f_ent, 
    877                                     _field_action_t *fa
    878                                     );
    879 extern int _bcm_field_trx2_data_qualifier_ethertype_delete(int unit, int qual_id,
    880                                  bcm_field_data_ethertype_t *etype);
    881 extern int _bcm_field_trx2_data_qualifier_ethertype_add(int unit, int qual_id,
    882                                  bcm_field_data_ethertype_t *etype);
    883 extern int _bcm_field_trx2_data_qualifier_ip_protocol_add(int unit,  int qual_id,
    884                           bcm_field_data_ip_protocol_t *ip_protocol);
    885 extern int _bcm_field_trx2_data_qualifier_ip_protocol_delete(int unit,  int qual_id,
    886                           bcm_field_data_ip_protocol_t *ip_protocol);
    887 extern int _bcm_field_trx2_data_qualifier_packet_format_add(int unit,int qual_id,
    888                                 bcm_field_data_packet_format_t *packet_format);
    889 extern int _bcm_field_trx2_data_qualifier_packet_format_delete(int unit,int qual_id,
    890                                 bcm_field_data_packet_format_t *packet_format);
    891 extern int _bcm_field_trx2_l2_actions_hw_free(int unit, _field_entry_t *f_ent,
    892                                              uint32 flags);
    893 extern int _bcm_field_trx2_l2_actions_hw_alloc(int unit, _field_entry_t *f_ent);
    894 extern int _bcm_field_trx2_udf_tcam_entry_parse(int unit, uint32 *hw_buf, uint32 *flags);
    895 extern int _bcm_field_trx_ingress_pfs_bmap_get(int            unit,
    896                                                _field_group_t *fg,
    897                                                bcm_pbmp_t     *pbmp,
    898                                                int            selcode_index,
    899                                                SHR_BITDCL     *pfs_bmp
    900                                                );
    901 extern int _bcm_field_trx_ingress_selcodes_install(int            unit,
    902                                                    _field_group_t *fg,
    903                                                    uint8          slice_num,
    904                                                    bcm_pbmp_t     *pbmp,
    905                                                    int            selcode_idx
    906                                                    );
    907 extern int _bcm_field_trx_mode_set(int            unit,
    908                                    uint8          slice_numb,
    909                                    _field_group_t *fg,
    910                                    uint8          flags
    911                                    );
    912 extern int _bcm_field_trx_egress_mode_set(int            unit,
    913                                           uint8          slice_numb,
    914                                           _field_group_t *fg,
    915                                           uint8          flags
    916                                           );
    917 extern int _field_trx_group_qual_add(_bcm_field_group_qual_t *grp_qual,
    918                                      unsigned                 qid,
    919                                      _bcm_field_qual_offset_t *qual_offset
    920                                      );
    921 
    922 extern int _bcm_field_trx_qset_get(int unit, bcm_field_qset_t *qset_in,
    923                                    _field_stage_t *stage_fc,
    924                                    int pri_sel_val_primary,
    925                                    int pri_sel_val_secondary,
    926                                    bcm_field_qset_t *qset_out,
    927                                    _field_group_t *fg);
    928 
    929 extern int _bcm_field_trx_egress_default_selcode_get(int unit, 
    930                                                      _field_stage_t *stage_fc,
    931                                                      bcm_field_qset_t *qset_req,
    932                                                      uint8 key_pri, 
    933                                                      uint8 key_sec,
    934                                                      _field_group_t *fg);
    935 
    936 extern int _bcm_field_trx_lookup_selcodes_install(int unit, 
    937                                                   _field_group_t *fg,
    938                                                   uint8 slice_numb, 
    939                                                   int selcode_index);
    940 
    941 extern int _bcm_field_trx_policer_hw_update(int unit, _field_entry_t *f_ent,
    942                                      _field_policer_t *f_pl, uint8 index_mtr,
    943                                      uint32 bucket_size, uint32 refresh_rate,
    944                                      uint32 granularity, soc_mem_t meter_table);
    945 
    946 extern const soc_field_t _bcm_trx2_aux_tag_1_field[], _bcm_trx2_aux_tag_2_field[];
    947 extern const soc_field_t _bcm_field_trx_vfp_double_wide_sel[];
    948 extern const soc_field_t _bcm_field_trx_vfp_field_sel[][2];
    949 extern const soc_field_t _bcm_field_trx_vfp_ip_header_sel[];
    950 extern const soc_field_t _bcm_field_trx_slice_pairing_field[];
    951 extern const soc_field_t _bcm_field_trx_dw_f4_sel[];
    952 extern const soc_field_t _bcm_field_trx_slice_wide_mode_field[16];
    953 extern const soc_field_t _bcm_field_trx_field_sel[16][3];
    954 extern const soc_field_t _bcm_field_trx_d_type_sel[];
    955 extern const soc_field_t _bcm_field_trx_s_type_sel[];
    956 extern const soc_field_t _trx_ifp_double_wide_key[];
    957 extern const soc_field_t _bcm_trx2_vrf_force_forwarding_enable_field[];
    958 extern const soc_field_t _bcm_ifp_normalize_fldtbl[][2];
    959 #endif /* BCM_FIELD_SUPPORT */
    960 extern int _bcm_trx_vlan_block_set (int unit, bcm_vlan_t vid, 
    961                                     bcm_vlan_block_t *block);
    962 extern int _bcm_trx_vlan_block_get (int unit, bcm_vlan_t vid, 
    963                                     bcm_vlan_block_t *block);
    964 extern int _bcm_trx_vp_tpid_add(int unit, bcm_gport_t vport, uint16 tpid, int color_select);
    965 extern int _bcm_trx_vp_tpid_delete(int unit, bcm_gport_t vport, uint16 tpid);
    966 extern int _bcm_trx_vp_tpid_delete_all(int unit, bcm_gport_t vport);
    967 extern int _bcm_trx_vp_tpid_set(int unit, bcm_gport_t vport, uint16 tpid);
    968 extern int _bcm_trx_vp_tpid_get(int unit, bcm_gport_t vport, uint16 *tpid);
    969 extern int _bcm_trx_vp_tpid_get_all(int unit, bcm_gport_t vport, int size,
    970                          uint16 *tpid_array, int *color_array, int *count);
    971 
    972 extern int _bcm_trx_port_cml_hw2flags(int unit, uint32 val, uint32 *flgas);
    973 extern int _bcm_trx_port_cml_flags2hw(int unit, uint32 flags, uint32 *val);
    974 
    975 extern int _bcm_trx_defip128_used_count_get(int unit);
    976 extern int _bcm_trx_defip128_idx_max_get(int unit);
    977 extern int _bcm_trx_defip128_array_idx_prefix_len_get(int unit, int arr_idx);
    978 extern int _field_trx_meter_table_get(int unit, _field_stage_id_t stage_id,
    979                                       soc_mem_t *mem_x, soc_mem_t *mem_y);
    980 #endif /* BCM_TRX_SUPPORT */
    981 #if defined(BCM_TRIDENT_SUPPORT)
    982 extern int _bcm_field_trident_stat_hw_mode_to_bmap(int unit, uint16 mode, 
    983                                                _field_stage_id_t stage_id, 
    984                                                uint32 *hw_bmap,
    985                                                uint8 *hw_entry_count);
    986 #endif /* BCM_TRIDENT_SUPPORT */
    987 
    988 #if defined(BCM_TRIDENT2_SUPPORT)
    989 
    990 extern int _bcm_trx_ing_vlan_action_profile_entry_no_mod_add(
    991                                int                                 unit, 
    992                                ing_vlan_tag_action_profile_entry_t *entry, 
    993                                uint32                              *index);
    994 extern int _bcm_trx_egr_vlan_action_profile_entry_no_mod_add(
    995                                int                                 unit, 
    996                                egr_vlan_tag_action_profile_entry_t *entry, 
    997                                uint32                              *index);
    998 #endif /* BCM_TRIDENT2_SUPPORT */
    999 
   1000 
   1001 #ifdef BCM_FLOWTRACKER_SUPPORT
   1002 extern int
   1003 bcmi_ft_group_age_profile_entry_add(int unit, void **entries,
   1004                               int entries_per_set, uint32 *index);
   1005 
   1006 extern int
   1007 bcmi_ft_group_age_profile_entry_delete(int unit, int index);
   1008 
   1009 extern int
   1010 bcmi_ft_group_age_profile_refcount_set(int unit, uint32 index);
   1011 
   1012 extern int
   1013 bcmi_ft_group_flow_limit_profile_entry_add(int unit, void **entries,
   1014                               int entries_per_set, uint32 *index);
   1015 
   1016 extern int
   1017 bcmi_ft_group_flow_limit_profile_entry_delete(int unit, int index);
   1018 
   1019 extern int
   1020 bcmi_ft_group_flow_limit_profile_refcount_set(int unit, uint32 index);
   1021 
   1022 extern int
   1023 bcmi_ft_group_collector_copy_profile_entry_add(int unit, void **entries,
   1024                               int entries_per_set, uint32 *index);
   1025 
   1026 extern int
   1027 bcmi_ft_group_collector_copy_profile_entry_delete(int unit, int index);
   1028 
   1029 extern int
   1030 bcmi_ft_group_collector_copy_profile_refcount_set(int unit, uint32 index);
   1031 
   1032 extern int
   1033 bcmi_ft_group_alu_mask_profile_entry_add(int unit, int profile_idx,
   1034                     void **entries, int entries_per_set, uint32 *index);
   1035 
   1036 extern int
   1037 bcmi_ft_group_alu_mask_profile_entry_delete(int unit, int profile_idx,
   1038                     int index);
   1039 
   1040 extern int
   1041 bcmi_ft_group_alu_mask_profile_refcount_set(int unit, int profile_idx,
   1042                     uint32 index);
   1043 
   1044 extern int
   1045 bcmi_ft_group_alu_mask_profile_refcount_get(int unit, int profile_idx,
   1046                              int index, int *ref_cnt);
   1047 
   1048 extern int
   1049 bcmi_ft_group_pdd_profile_entry_add(int unit, void **entries,
   1050                               int entries_per_set, uint32 *index);
   1051 
   1052 extern int
   1053 bcmi_ft_group_pdd_profile_entry_delete(int unit, int index);
   1054 
   1055 extern int
   1056 bcmi_ft_group_pdd_profile_refcount_set(int unit, uint32 index);
   1057 
   1058 extern int
   1059 bcmi_ft_group_pdd_profile_refcount_get(int unit,
   1060                             int index, int *ref_cnt);
   1061 
   1062 extern int
   1063 bcmi_ft_group_meter_profile_entry_add(int unit, void **entries,
   1064                               int entries_per_set, uint32 *index);
   1065 extern int
   1066 bcmi_ft_group_meter_profile_entry_delete(int unit, int index);
   1067 
   1068 extern int
   1069 bcmi_ft_group_meter_profile_refcount_set(int unit, uint32 index);
   1070 
   1071 
   1072 extern int
   1073 bcmi_ft_group_timestamp_profile_entry_add(int unit, void **entries,
   1074                               int entries_per_set, uint32 *index);
   1075 extern int
   1076 bcmi_ft_group_timestamp_profile_entry_delete(int unit, int index);
   1077 
   1078 extern int
   1079 bcmi_ft_group_timestamp_profile_refcount_set(int unit, uint32 index);
   1080 
   1081 #endif /* BCM_FLOWTRACKER_SUPPORT */
   1082 
   1083 extern int _bcm_trx_system_reserved_vlan_ing_set(int unit, int arg);
   1084 extern int _bcm_trx_system_reserved_vlan_egr_set(int unit, int arg);
   1085 extern int _bcm_trx_system_reserved_vlan_ing_get(int unit, int *arg);
   1086 
   1087 extern int _vlan_block_bitmap_min(int unit, bcm_pbmp_t *array,
   1088                                   int arr_size, bcm_pbmp_t *min_pbm);
   1089 extern int _vlan_block_bitmap_clear(int unit, bcm_pbmp_t *array,
   1090                                     int arr_size, bcm_pbmp_t mask);
   1091 extern int _vlan_block_select_get(int unit, bcm_pbmp_t request,
   1092                                   bcm_pbmp_t first, bcm_pbmp_t second,
   1093                                   uint8 *sel);
   1094 extern int _vlan_block_mask_create(int unit, bcm_pbmp_t first_mask,
   1095                                    bcm_pbmp_t second_mask, uint8 select,
   1096                                    bcm_pbmp_t *result_mask);
   1097 
   1098 #if defined(BCM_TRX_SUPPORT)
   1099 extern int _bcm_trx_vlan_match_action_add(int unit, uint32 options,
   1100                                     bcm_gport_t svp_port,
   1101                                     bcm_vlan_match_info_t *vlan_match_info,
   1102                                     bcm_vlan_action_set_t *action_set);
   1103 extern int _bcm_trx_vlan_match_action_get(int unit, bcm_gport_t svp_port,
   1104                                     bcm_vlan_match_info_t *vlan_match_info,
   1105                                     bcm_vlan_action_set_t *action_set);
   1106 extern int _bcm_trx_vlan_match_action_delete(int unit, bcm_gport_t svp_port,
   1107                                     bcm_vlan_match_info_t *vlan_match_info);
   1108 extern int _bcm_trx_vlan_match_action_multi_get(int unit,
   1109                                     bcm_vlan_match_t match,
   1110                                     bcm_gport_t svp_port, int size,
   1111                                     bcm_vlan_match_info_t *match_info_array,
   1112                                     bcm_vlan_action_set_t *action_set, int *count);
   1113 extern int _bcm_vlan_match_action_multi_get(int unit, bcm_gport_t port,
   1114                                     int size, bcm_port_match_info_t *match_array,
   1115                                     int start, int *count);
   1116 extern int _bcm_trx_vlan_match_action_delete_all(int unit,
   1117                                     bcm_vlan_match_t match, bcm_gport_t svp_port);
   1118 #endif /* BCM_TRX_SUPPORT */
   1119 
   1120 extern int
   1121 bcmi_subport_tunnel_pbmp_profile_entry_add(int unit, void **entries,
   1122                               int entries_per_set, uint32 *index);
   1123 
   1124 extern int
   1125 bcmi_subport_tunnel_pbmp_profile_entry_delete(int unit, int index);
   1126 
   1127 extern int
   1128 bcmi_subport_tunnel_pbmp_profile_refcount_set(int unit, int index);
   1129 
   1130 extern int
   1131 bcmi_subport_tunnel_pbmp_profile_refcount_get(int unit, int index, int *ref);
   1132 
   1133 
   1134 #endif  /* !_BCM_INT_TRX_H_ */