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

triumph3.h (73472B)


      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  * All Rights Reserved.$
      7  *
      8  * File:        triumph3.h
      9  * Purpose:     Function declarations for Triumph3 Internal functions.
     10  */
     11 
     12 #ifndef _BCM_INT_TRIUMPH3_H_
     13 #define _BCM_INT_TRIUMPH3_H_
     14 
     15 #if defined(BCM_TRIUMPH3_SUPPORT) || defined(BCM_HURRICANE2_SUPPORT) || defined(BCM_KATANA2_SUPPORT)
     16 
     17 #include <bcm_int/esw/mbcm.h>
     18 #include <soc/tnl_term.h>
     19 #include <bcm_int/esw/firebolt.h>
     20 #include <bcm_int/esw/cosq.h>
     21 #include <bcm_int/esw/oam.h>
     22 #include <bcm/failover.h>
     23 #include <bcm/oam.h>
     24 #include <bcm_int/esw/flex_ctr.h>
     25 #include <bcm_int/esw/l2gre.h>
     26 
     27 #define _BCM_TR3_L3_PORT_MASK        0x7f
     28 #define _BCM_TR3_L3_MODID_MASK       0xff
     29 #define _BCM_TR3_L3_MODID_SHIFT      0x7
     30 #define _BCM_TR3_L3_DEFAULT_MTU_SIZE 0x3fff
     31 #define _BCM_TR3_DEFIP_TCAM_DEPTH    1024
     32 #define _BCM_HX4_RANGER_DEFIP_TCAM_DEPTH 128
     33 
     34 /* A six bit marker of alternating 1 and 0 used as an
     35  * invalid entry marker for ESM host entries. This is used
     36  * in recovering the host free entry pointers as a work-around
     37  * for unavailablility of soc_tr3_get_vbit() function */ 
     38 #define _TR3_ESM_HOST_ENTRY_INVALID_MARKER 0x2a
     39 
     40 /* L2 Internal functions */
     41 extern int bcm_tr3_l2_init(int unit);
     42 extern int bcm_tr3_l2_detach(int unit);
     43 extern int bcm_tr3_l2_addr_add(int unit, bcm_l2_addr_t *l2addr);
     44 extern int bcm_tr3_l2_addr_delete(int unit, bcm_mac_t mac, bcm_vlan_t vid);
     45 extern int bcm_tr3_l2_addr_delete_by_port(int unit,
     46                                           bcm_module_t mod, bcm_port_t port,
     47                                           uint32 flags);
     48 extern int bcm_tr3_l2_addr_delete_by_mac(int unit, bcm_mac_t mac,
     49                                          uint32 flags);
     50 extern int bcm_tr3_l2_addr_delete_by_vlan(int unit, bcm_vlan_t vid,
     51                                           uint32 flags);
     52 extern int bcm_tr3_l2_addr_delete_by_trunk(int unit, bcm_trunk_t tid,
     53                                            uint32 flags);
     54 extern int bcm_tr3_l2_addr_delete_by_mac_port(int unit, bcm_mac_t mac,
     55                                               bcm_module_t mod,
     56                                               bcm_port_t port,
     57                                               uint32 flags);
     58 extern int bcm_tr3_l2_addr_delete_by_vlan_port(int unit, bcm_vlan_t vid,
     59                                                bcm_module_t mod,
     60                                                bcm_port_t port,
     61                                                uint32 flags);
     62 extern int bcm_tr3_l2_addr_delete_by_vlan_trunk(int unit, bcm_vlan_t vid,
     63                                                 bcm_trunk_t tid,
     64                                                 uint32 flags);
     65 extern int bcm_tr3_l2_addr_delete_mcast(int unit, int bulk);
     66 extern int _bcm_tr3_l2_addr_get(int unit, sal_mac_addr_t mac, bcm_vlan_t vid,
     67                                 int check_l2_only, bcm_l2_addr_t *l2addr);
     68 extern int bcm_tr3_l2_addr_get(int unit, sal_mac_addr_t mac,
     69                                bcm_vlan_t vid, bcm_l2_addr_t *l2addr);
     70 
     71 extern int bcm_tr3_l2_port_native(int unit, int modid, int port);
     72 extern int bcm_tr3_l2_addr_register(int unit,
     73                                     bcm_l2_addr_callback_t fn,
     74                                     void *fn_data);
     75 extern int bcm_tr3_l2_addr_unregister(int unit,
     76                                       bcm_l2_addr_callback_t fn,
     77                                       void *fn_data);
     78 extern int bcm_tr3_l2_age_timer_set(int unit, int age_seconds);
     79 extern int bcm_tr3_l2_age_timer_get(int unit, int *age_seconds);
     80 extern int bcm_tr3_l2_tunnel_add(int unit, bcm_mac_t mac, bcm_vlan_t vlan);
     81 extern int bcm_tr3_l2_tunnel_delete(int unit, bcm_mac_t mac, bcm_vlan_t vlan);
     82 extern int bcm_tr3_l2_tunnel_delete_all(int unit);
     83 extern int bcm_tr3_l2_clear(int unit);
     84 extern int bcm_tr3_l2_learn_limit_set(int unit, bcm_l2_learn_limit_t *limit);
     85 extern int bcm_tr3_l2_learn_limit_get(int unit, bcm_l2_learn_limit_t *limit);
     86 extern int bcm_tr3_l2_learn_class_set(int unit, int lclass,
     87                                       int lclass_prio, uint32 flags);
     88 extern int bcm_tr3_l2_learn_class_get(int unit, int lclass,
     89                                       int *lclass_prio, uint32 *flags);
     90 extern int bcm_tr3_l2_learn_port_class_set(int unit, bcm_gport_t port,
     91                                            int lclass);
     92 extern int bcm_tr3_l2_learn_port_class_get(int unit, bcm_gport_t port,
     93                                            int *lclass);
     94 extern int bcm_tr3_l2_traverse(int unit, _bcm_l2_traverse_t *trav_st);
     95 extern int bcm_tr3_l2_replace(int unit, uint32 flags,
     96                               bcm_l2_addr_t *match_addr,
     97                               bcm_module_t new_module, bcm_port_t new_port,
     98                               bcm_trunk_t new_trunk);
     99 extern int bcm_tr3_l2_conflict_get(int unit, bcm_l2_addr_t *addr, 
    100                                    bcm_l2_addr_t *cf_array,  int cf_max, 
    101                                    int *cf_count);
    102 
    103 extern int bcm_tr3_l2_cache_init(int unit);
    104 extern int bcm_tr3_l2_cache_set(int unit, int index,
    105                                 bcm_l2_cache_addr_t *addr, int *index_used);
    106 extern int bcm_tr3_l2_cache_get(int unit, int index,
    107                                 bcm_l2_cache_addr_t *addr);
    108 extern int bcm_tr3_l2_cache_delete(int unit, int index);
    109 extern int bcm_tr3_l2_cache_delete_all(int unit);
    110 
    111 extern int bcm_tr3_failover_ring_config_set(int unit,
    112                                             bcm_failover_ring_t *failover_ring);
    113 extern int bcm_tr3_failover_ring_config_get(int unit,
    114                                             bcm_failover_ring_t *failover_ring);
    115 extern int bcm_tr3_l2_ring_replace(int unit, bcm_l2_ring_t *l2_ring);
    116 extern int _field_tr3_logical_meter_pools_init(int unit,
    117                                                 _field_stage_t *stage_fc);
    118 extern int _field_tr3_logical_meter_pool_entry_alloc (int unit,
    119                                                _field_stage_t *stage_fc,
    120                                                uint8 pool_slice_id,
    121                                                _field_policer_t *f_pl);
    122 extern int _field_tr3_logical_meter_pool_free(int unit,
    123                                               _field_stage_t *stage_fc,
    124                                               uint8 logical_pool_idx);
    125 extern int _field_tr3_logical_meter_pool_entry_free (int unit,
    126                                             _field_stage_t *stage_fc,
    127                                             _field_policer_t *f_pl);
    128 extern int _field_tr3_logical_meter_pool_entry_free_old (int unit,
    129                                             _field_stage_t *stage_fc,
    130                                             _field_policer_t *f_pl);
    131 extern int _field_scache_logical_ingress_meter_pool_recover (int  unit,
    132                                             _field_control_t *fc,
    133                                             _field_stage_t   *stage_fc);
    134 extern int
    135 _bcm_tr3_cosq_localport_resolve(int unit, bcm_gport_t gport,
    136                                bcm_port_t *local_port);
    137 
    138 #define _BCM_TR3_L2_SELECT_L2_ENTRY_1       0x1
    139 #define _BCM_TR3_L2_SELECT_L2_ENTRY_2       0x2
    140 #define _BCM_TR3_L2_SELECT_EXT_L2_ENTRY_1   0x4
    141 #define _BCM_TR3_L2_SELECT_EXT_L2_ENTRY_2   0x8
    142 
    143 typedef struct _bcm_tr3_l2_entries_s {
    144     ext_l2_entry_1_entry_t ext_l2_entry_1;
    145     ext_l2_entry_2_entry_t ext_l2_entry_2;
    146     l2_entry_1_entry_t l2_entry_1;
    147     l2_entry_2_entry_t l2_entry_2;
    148     uint8 entry_flags;
    149 } _bcm_tr3_l2_entries_t;
    150 
    151 
    152 #if defined(INCLUDE_L3)
    153 
    154 #define BCM_TR3_ESM_HOST_TBL_PRESENT(_u_)                          \
    155            ((soc_feature(_u_, soc_feature_esm_support))         && \
    156             (SOC_MEM_IS_ENABLED(_u_, EXT_IPV4_UCASTm))          && \
    157             (SOC_MEM_IS_ENABLED(_u_, EXT_IPV4_UCAST_WIDEm))     && \
    158             (SOC_MEM_IS_ENABLED(_u_, EXT_IPV6_128_UCASTm))      && \
    159             (SOC_MEM_IS_ENABLED(_u_, EXT_IPV6_128_UCAST_WIDEm))) 
    160             
    161 #define BCM_TR3_ESM_LPM_TBL_PRESENT(_u_, _mem_)                \
    162            ((soc_feature(_u_, soc_feature_esm_support))     && \
    163             (SOC_MEM_IS_ENABLED(_u_, _mem_))                && \
    164             (soc_mem_index_count(_u_, _mem_))) 
    165 
    166 #if 0
    167 #define BCM_TR3_ESM_HOST_TBL_PRESENT(_u_) 0
    168 
    169 #define BCM_TR3_ESM_LPM_TBL_PRESENT(_u_) 0
    170 #endif /* if 0 */
    171 
    172 #define BCM_TR3_MEM_IS_ESM(_u_, _mem_)              \
    173             ((BCM_TR3_ESM_HOST_TBL_PRESENT(_u_)) && \
    174              ((EXT_IPV4_UCASTm == _mem_)      ||  \
    175               (EXT_IPV4_UCAST_WIDEm == _mem_) ||  \
    176               (EXT_IPV6_128_UCASTm == _mem_)  ||  \
    177               (EXT_IPV6_128_UCAST_WIDEm == _mem_)))
    178 
    179 #define BCM_TR3_L3_USE_EMBEDDED_NEXT_HOP(_u_, _intf_, _nhidx_) \
    180              ((_nhidx_ == BCM_XGS3_L3_INVALID_INDEX)      &&   \
    181               (!BCM_XGS3_L3_EGRESS_IDX_VALID(_u_, _intf_)) &&  \
    182               (BCM_XGS3_L3_EGRESS_MODE_ISSET(_u_))         &&  \
    183               soc_feature(unit, soc_feature_l3_extended_host_entry))
    184             
    185 #define BCM_TR3_ISM_L3_HOST_TABLE_MEM(_u_, _intf_, _v6_, _mem_, _nhidx_)                \
    186             _mem_ = (_v6_) ? ((BCM_TR3_L3_USE_EMBEDDED_NEXT_HOP(_u_, _intf_, _nhidx_))? \
    187                              L3_ENTRY_4m:L3_ENTRY_2m) :                                 \
    188                            ((BCM_TR3_L3_USE_EMBEDDED_NEXT_HOP(_u_, _intf_, _nhidx_))?   \
    189                              L3_ENTRY_2m:L3_ENTRY_1m)
    190 
    191 #define BCM_TR3_ESM_L3_HOST_TABLE_MEM(_u_, _intf_, _v6_, _mem_, _nhidx_)                \
    192             _mem_ = (_v6_) ? ((BCM_TR3_L3_USE_EMBEDDED_NEXT_HOP(_u_, _intf_, _nhidx_))? \
    193                              EXT_IPV6_128_UCAST_WIDEm:EXT_IPV6_128_UCASTm) :            \
    194                            ((BCM_TR3_L3_USE_EMBEDDED_NEXT_HOP(_u_, _intf_, _nhidx_))?   \
    195                              EXT_IPV4_UCAST_WIDEm:EXT_IPV4_UCASTm)
    196 
    197 #define  BCM_TR3_ISM_L3_HOST_TABLE_FLD(_u_, _mem_, _v6_, _fld_)                               \
    198               _fld_ = (_bcm_l3_fields_t *) INT_TO_PTR((_v6_) ?                                \
    199                        ((_mem_ == L3_ENTRY_2m) ?                                              \
    200                          BCM_XGS3_L3_MEM_FIELDS(_u_,v6): BCM_XGS3_L3_MEM_FIELDS(_u_, v6_4)) : \
    201                        ((_mem_ == L3_ENTRY_1m) ?                                              \
    202                          BCM_XGS3_L3_MEM_FIELDS(_u_,v4): BCM_XGS3_L3_MEM_FIELDS(_u_, v4_2)))
    203 
    204 #define  BCM_TR3_ESM_L3_HOST_TABLE_FLD(_u_, _mem_, _v6_, _fld_)                                    \
    205               _fld_ = (_bcm_l3_fields_t *) INT_TO_PTR((_v6_) ?                                     \
    206                                ((_mem_ == EXT_IPV6_128_UCASTm) ?                                   \
    207                                  BCM_XGS3_L3_MEM_FIELDS(_u_,v6_esm): BCM_XGS3_L3_MEM_FIELDS(_u_, v6_esm_wide)) : \
    208                                ((_mem_ == EXT_IPV4_UCASTm) ?                                       \
    209                                  BCM_XGS3_L3_MEM_FIELDS(_u_,v4_esm): BCM_XGS3_L3_MEM_FIELDS(_u_, v4_esm_wide)))
    210 
    211 #define BCM_TR3_ISM_L3_HOST_ENTRY_BUF(_v6_, _mem_, _buf_, _v4ent_, _v4v6ent_, _v6ent_)  \
    212             _buf_ = ((_v6_) ?                                                           \
    213                      ((_mem_ == L3_ENTRY_2m) ? (uint32 *) &_v4v6ent_ :                  \
    214                        (uint32 *) &_v6ent_) :                                           \
    215                      ((_mem_ == L3_ENTRY_1m) ? (uint32 *) &_v4ent_ :                    \
    216                        (uint32 *) &_v4v6ent_)) 
    217 
    218 #define BCM_TR3_ESM_L3_HOST_ENTRY_BUF(_v6_, _mem_, _buf_, _v4ent_, _v4wide_, _v6ent_, _v6wide_)  \
    219             _buf_ = ((_v6_) ?                                                                    \
    220                      ((_mem_ == EXT_IPV6_128_UCASTm ) ? (uint32 *) &_v6ent_ :                    \
    221                        (uint32 *) &_v6wide_) :                                                   \
    222                      ((_mem_ == EXT_IPV4_UCASTm) ? (uint32 *) &_v4ent_ :                         \
    223                        (uint32 *) &_v4wide_)) 
    224 
    225 /* Return array index given the table name */
    226 #define BCM_TR3_ESM_TBL_ENUMERATE(_mem_, _tbl_)              \
    227             _tbl_ = ((EXT_IPV4_UCASTm == _mem_) ? 0 :          \
    228                      ((EXT_IPV4_UCAST_WIDEm == _mem_) ? 1:     \
    229                       ((EXT_IPV6_128_UCASTm == _mem_) ? 2 : 3)))            
    230                  
    231 /* L3 Internal Functions */
    232 
    233 /* Host table support */
    234 extern int _bcm_tr3_l3_add(int unit, _bcm_l3_cfg_t *l3cfg, int nh_idx);
    235 extern int _bcm_tr3_l3_get(int unit, _bcm_l3_cfg_t *l3cfg, int *nh_idx);
    236 extern int _bcm_tr3_l3_del(int unit, _bcm_l3_cfg_t *l3cfg);
    237 extern int _bcm_tr3_l3_del_match(int unit, int flags, void *pattern,
    238                        bcm_xgs3_ent_op_cb cmp_func,
    239                        bcm_l3_host_traverse_cb notify_cb, void *user_data);
    240 extern int _bcm_tr3_l3_get_by_idx(int unit, void *dma_ptr, int idx,
    241                                    _bcm_l3_cfg_t *l3cfg, int *nh_idx);
    242 extern int bcm_tr3_l3_conflict_get(int unit, bcm_l3_key_t *ipkey, bcm_l3_key_t *cf_array,
    243                                    int cf_max, int *cf_count);
    244 extern int _bcm_tr3_l3_intf_mtu_get(int unit, _bcm_l3_intf_cfg_t *intf_info);
    245 extern int _bcm_tr3_l3_intf_mtu_set(int unit, _bcm_l3_intf_cfg_t *intf_info);
    246 extern int _bcm_tr3_mtu_profile_index_get(int unit, uint32 mtu, uint32 *index);
    247 extern int _bcm_tr3_l3_ecmp_grp_get(int unit, int ecmp_grp, int ecmp_group_size, int *nh_idx);
    248 extern int _bcm_tr3_l3_ecmp_grp_add(int unit, int ecmp_grp, void *buf, void *info);
    249 extern int _bcm_tr3_l3_ecmp_grp_del(int unit, int ecmp_grp, void *info);
    250 extern int _bcm_tr3_nh_update_match(int unit, _bcm_l3_trvrs_data_t *trv_data);
    251 extern int _bcm_tr3_l3_tnl_term_entry_init(int unit,
    252                                 bcm_tunnel_terminator_t *tnl_info,
    253                                 soc_tunnel_term_t *entry);
    254 extern int _bcm_tr3_l3_tnl_term_entry_parse(int unit, soc_tunnel_term_t *entry,
    255                                   bcm_tunnel_terminator_t *tnl_info);
    256 extern int _bcm_tr3_l3_tnl_term_add(int unit, uint32 *entry_ptr, 
    257                                 bcm_tunnel_terminator_t *tnl_info);
    258 extern int
    259 _bcm_tr3_mpls_tunnel_switch_frr_entry_key_init(int unit,
    260              bcm_mpls_tunnel_switch_t *info, soc_tunnel_term_t *tnl_entry);
    261 
    262 
    263 extern int _bcm_tr3_l3_traverse(int unit, int flags, uint32 start, uint32 end,
    264                                  bcm_l3_host_traverse_cb cb, void *user_data);
    265                               
    266 extern int bcm_tr3_l3_replace(int unit, _bcm_l3_cfg_t *l3cfg);
    267 extern int bcm_tr3_l3_del_intf(int unit, _bcm_l3_cfg_t *l3cfg, int negate);
    268 
    269 /*ISM LPM */
    270 extern int _bcm_tr3_l3_lpm_get(int unit, _bcm_defip_cfg_t *lpm_cfg, int *nh_ecmp_idx);
    271 extern int _bcm_tr3_l3_lpm_add(int unit, _bcm_defip_cfg_t *lpm_cfg, int nh_ecmp_idx);
    272 extern int _bcm_tr3_l3_lpm_del(int unit, _bcm_defip_cfg_t *lpm_cfg);
    273 extern int _bcm_tr3_l3_lpm_update_match(int unit, _bcm_l3_trvrs_data_t *trv_data);
    274 extern int _bcm_tr3_l3_defip_init(int unit);
    275 extern int _bcm_tr3_l3_defip_deinit(int unit);
    276 extern int _bcm_tr3_l3_defip_urpf_enable(int unit, int enable);
    277 /* ESM LPM */
    278 extern int _bcm_tr3_ext_lpm_init(int unit, soc_mem_t mem);
    279 extern int _bcm_tr3_ext_lpm_deinit(int unit, soc_mem_t mem);
    280 extern int _bcm_tr3_ext_lpm_add(int unit, _bcm_defip_cfg_t *data, int nh_ecmp_idx);
    281 extern int _bcm_tr3_ext_lpm_delete(int unit, _bcm_defip_cfg_t *key);
    282 extern int _bcm_tr3_ext_lpm_match(int unit, _bcm_defip_cfg_t *key, int *next_hop_index) ;
    283 extern int _bcm_tr3_defip_traverse(int unit, _bcm_l3_trvrs_data_t *trv_data);
    284 /* ESM host table*/
    285 extern int _bcm_tr3_esm_host_tbl_init(int unit);
    286 extern int _bcm_tr3_esm_host_tbl_deinit(int unit);
    287 
    288 /* L3 IPMC */
    289 extern int _bcm_tr3_l3_ipmc_get_by_idx(int unit, void *dma_ptr, int idx,
    290                                        _bcm_l3_cfg_t *l3cfg);
    291 extern int _bcm_tr3_l3_ipmc_get(int unit, _bcm_l3_cfg_t *l3cfg);
    292 extern int _bcm_tr3_l3_ipmc_add(int unit, _bcm_l3_cfg_t *l3cfg);
    293 extern int _bcm_tr3_l3_ipmc_del(int unit, _bcm_l3_cfg_t *l3cfg);
    294 
    295 extern int _bcm_tr3_l3_ipmc_nh_add(int unit, int nh_index,
    296             bcm_l3_egress_t *l3_egress);
    297 extern int _bcm_tr3_l3_ipmc_nh_entry_parse(int unit, uint32 *ing_nh, 
    298             uint32 *egr_nh, uint32 *egr_nh_2, bcm_l3_egress_t *l3_egress);
    299 
    300 /* Internal route table support */
    301 extern int _bcm_tr3_lpm_add(int unit, _bcm_defip_cfg_t *lpm_cfg, int nh_ecmp_idx);
    302 
    303 /* Flex stat - L3 host table */
    304 extern bcm_error_t _bcm_tr3_l3_host_stat_attach(
    305             int unit,
    306             bcm_l3_host_t *info,
    307             uint32 stat_counter_id);
    308 extern bcm_error_t _bcm_tr3_l3_host_stat_detach(
    309             int unit,
    310             bcm_l3_host_t *info);
    311 extern bcm_error_t _bcm_tr3_l3_host_stat_counter_get(
    312             int unit,
    313             int sync_mode,
    314             bcm_l3_host_t *info,
    315             bcm_l3_stat_t stat,
    316             uint32 num_entries,
    317             uint32 *counter_indexes,
    318             bcm_stat_value_t *counter_values);
    319 extern bcm_error_t _bcm_tr3_l3_host_stat_counter_set(
    320             int unit,
    321             bcm_l3_host_t *info,
    322             bcm_l3_stat_t stat,
    323             uint32 num_entries,
    324             uint32 *counter_indexes,
    325             bcm_stat_value_t *counter_values);
    326 extern bcm_error_t _bcm_tr3_l3_host_stat_id_get(
    327             int unit,
    328             bcm_l3_host_t *info,
    329             bcm_l3_stat_t stat,
    330             uint32 *stat_counter_id);
    331 
    332 #ifdef BCM_WARM_BOOT_SUPPORT
    333 extern int _bcm_tr3_l3_esm_host_state_recover(int unit);
    334 extern int _bcm_tr3_mpls_match_key_recover(int unit);
    335 #else
    336 #define _bcm_tr3_l3_esm_host_state_recover(_u) (BCM_E_UNAVAIL)
    337 #endif /* BCM_WARM_BOOT_SUPPORT */
    338 
    339 /* L3 ECMP DLB */
    340 extern void _bcm_tr3_ecmp_dlb_deinit(int unit);
    341 extern int _bcm_tr3_ecmp_dlb_init(int unit);
    342 extern int bcm_tr3_l3_egress_dlb_attr_set(int unit, int nh_index,
    343         bcm_l3_egress_t *egr);
    344 extern int bcm_tr3_l3_egress_dlb_attr_destroy(int unit, int nh_index);
    345 extern int bcm_tr3_l3_egress_dlb_attr_get(int unit, int nh_index,
    346         bcm_l3_egress_t *egr);
    347 extern int bcm_tr3_l3_egress_ecmp_dlb_create(int unit,
    348         bcm_l3_egress_ecmp_t *ecmp, int intf_count, bcm_if_t *intf_array);
    349 extern int bcm_tr3_l3_egress_ecmp_dlb_destroy(int unit,
    350         bcm_if_t mpintf);
    351 extern int bcm_tr3_l3_egress_ecmp_dlb_get(int unit,
    352         bcm_l3_egress_ecmp_t *ecmp);
    353 extern int _bcm_tr3_ecmp_dlb_config_set(int unit, bcm_switch_control_t type,
    354         int arg);
    355 extern int _bcm_tr3_ecmp_dlb_config_get(int unit, bcm_switch_control_t type,
    356         int *arg);
    357 extern int bcm_tr3_l3_egress_ecmp_member_status_set(int unit, bcm_if_t intf,
    358         int status);
    359 extern int bcm_tr3_l3_egress_ecmp_member_status_get(int unit, bcm_if_t intf,
    360         int *status);
    361 extern int bcm_tr3_l3_egress_ecmp_dlb_ethertype_set(int unit, uint32 flags,
    362         int ethertype_count, int *ethertype_array);
    363 extern int bcm_tr3_l3_egress_ecmp_dlb_ethertype_get(int unit, uint32 *flags,
    364         int ethertype_max, int *ethertype_array, int *ethertype_count);
    365 
    366 #ifdef BCM_WARM_BOOT_SUPPORT
    367 extern int bcm_tr3_ecmp_dlb_wb_alloc_size_get(int unit, int *size);
    368 extern int bcm_tr3_ecmp_dlb_sync(int unit, uint8 **scache_ptr);
    369 extern int bcm_tr3_ecmp_dlb_scache_recover(int unit, uint8 **scache_ptr);
    370 extern int bcm_tr3_ecmp_dlb_hw_recover(int unit);
    371 #endif /* BCM_WARM_BOOT_SUPPORT */
    372 
    373 #ifndef BCM_SW_STATE_DUMP_DISABLE
    374 extern void bcm_tr3_ecmp_dlb_sw_dump(int unit);
    375 extern void _bcm_tr3_esm_host_tbl_sw_dump(int unit);
    376 #endif /* BCM_SW_STATE_DUMP_DISABLE */
    377 
    378 /* Wlan Internal functions */
    379 extern int _bcm_tr3_wlan_tunnel_set_roam(int unit, bcm_gport_t tunnel_id);
    380 extern int _bcm_tr3_wlan_tunnel_get_roam(int unit, bcm_gport_t tunnel_id);
    381 
    382 extern int bcm_tr3_wlan_client_add(int,bcm_wlan_client_t *);
    383 extern int bcm_tr3_wlan_client_delete(int,bcm_mac_t);
    384 extern int bcm_tr3_wlan_client_delete_all(int);
    385 extern int bcm_tr3_wlan_client_get(int,bcm_mac_t,bcm_wlan_client_t *);
    386 extern int bcm_tr3_wlan_client_traverse(int,bcm_wlan_client_traverse_cb,void *);
    387 extern int bcm_tr3_wlan_detach(int);
    388 extern int bcm_tr3_wlan_init(int);
    389 extern int bcm_tr3_wlan_port_add(int,bcm_wlan_port_t *);
    390 extern int bcm_tr3_wlan_port_delete(int,bcm_gport_t);
    391 extern int bcm_tr3_wlan_port_delete_all(int);
    392 extern int bcm_tr3_wlan_port_get(int,bcm_gport_t,bcm_wlan_port_t *);
    393 extern int bcm_tr3_wlan_port_traverse(int,bcm_wlan_port_traverse_cb,void *);
    394 extern int bcm_tr3_wlan_tunnel_initiator_create(int,bcm_tunnel_initiator_t *);
    395 extern int bcm_tr3_wlan_tunnel_initiator_destroy(int,bcm_gport_t);
    396 extern int bcm_tr3_wlan_tunnel_initiator_get(int,bcm_tunnel_initiator_t *);
    397 extern int _bcm_tr3_wlan_port_resolve(int unit, bcm_gport_t wlan_port,
    398                                     bcm_module_t *modid, bcm_port_t *port,
    399                                     bcm_trunk_t *trunk_id, int *id);
    400 extern int bcm_tr3_wlan_port_learn_set(int unit, bcm_gport_t port, uint32 flags);
    401 extern int bcm_tr3_wlan_port_learn_get(int unit, bcm_gport_t port, uint32 *flags);
    402 extern int bcm_tr3_wlan_tunnel_terminator_vlan_set(int unit, bcm_gport_t tunnel, 
    403                                               bcm_vlan_vector_t vlan_vec);
    404 extern int bcm_tr3_wlan_tunnel_terminator_vlan_get(int unit, bcm_gport_t tunnel, 
    405                                               bcm_vlan_vector_t *vlan_vec);
    406 extern int bcm_tr3_wlan_lport_field_set(int unit, bcm_gport_t wlan_port_id, 
    407                                         soc_field_t field, int value);
    408 extern int bcm_tr3_wlan_lport_field_get(int unit, bcm_gport_t wlan_port_id, 
    409                                         soc_field_t field, int *value);
    410 extern int _bcm_tr3_wlan_port_set(int unit, bcm_gport_t wlan_port_id, 
    411                                   soc_field_t field, uint32 value);
    412 extern int _bcm_tr3_qos_wlan_port_map_set(int unit, bcm_gport_t port, 
    413                                     int egr_map, int pri_index);
    414 extern int bcm_tr3_wlan_port_untagged_vlan_get(int unit, bcm_gport_t port, 
    415                                                bcm_vlan_t *vid_ptr);
    416 extern int bcm_tr3_wlan_port_untagged_vlan_set(int unit, bcm_gport_t port, 
    417                                                bcm_vlan_t vid);
    418 extern int bcm_tr3_wlan_port_untagged_prio_get(int unit, bcm_gport_t port, 
    419                                                int *prio_ptr);
    420 extern int bcm_tr3_wlan_port_untagged_prio_set(int unit, bcm_gport_t port, 
    421                                                int prio);
    422 extern int _bcm_tr3_wlan_trunk_block_mask_update(int unit);
    423 
    424 /* IPMC internal functions */
    425 extern int bcm_tr3_ipmc_repl_init(int unit);
    426 extern int bcm_tr3_ipmc_repl_detach(int unit);
    427 extern int bcm_tr3_ipmc_repl_set(int unit, int ipmc_id, bcm_port_t port,
    428                          bcm_vlan_vector_t vlan_vec);
    429 extern int bcm_tr3_ipmc_repl_get(int unit, int index, bcm_port_t port,
    430                          bcm_vlan_vector_t vlan_vec);
    431 extern int bcm_tr3_ipmc_repl_add(int unit, int index, bcm_port_t port,
    432                          bcm_vlan_t vlan);
    433 extern int bcm_tr3_ipmc_repl_delete(int unit, int index, bcm_port_t port,
    434                             bcm_vlan_t vlan);
    435 extern int bcm_tr3_ipmc_repl_delete_all(int unit, int index,
    436                                 bcm_port_t port);
    437 extern int bcm_tr3_ipmc_egress_intf_add(int unit, int index, bcm_port_t port,
    438                                 bcm_l3_intf_t *l3_intf);
    439 extern int bcm_tr3_ipmc_egress_intf_delete(int unit, int index, bcm_port_t port,
    440                                    bcm_l3_intf_t *l3_intf);
    441 extern int bcm_tr3_ipmc_egress_intf_set(int unit, int mc_index,
    442                                        bcm_port_t port, int if_count,
    443                                        bcm_if_t *if_array, int is_l3,
    444                                        int check_port);
    445 extern int bcm_tr3_ipmc_egress_intf_get(int unit, int mc_index,
    446                                        bcm_port_t port,
    447                                        int if_max, bcm_if_t *if_array,
    448                                        int *if_count);
    449 extern int _bcm_tr3_ipmc_egress_intf_add(int unit, int index, bcm_port_t port,
    450                                        int encap_id, int is_l3);
    451 extern int _bcm_tr3_ipmc_egress_intf_delete(int unit, int index,
    452                                        bcm_port_t port, int if_max,
    453                                        int encap_id, int is_l3);
    454 extern int bcm_tr3_ipmc_trill_mac_update(int unit, uint32 mac_field,
    455                                          uint8 flag);
    456 extern int bcm_tr3_ipmc_l3_intf_next_hop_free(int unit, int intf);
    457 extern int bcm_tr3_ipmc_l3_intf_next_hop_get(int unit, int intf, int *nh_index);
    458 extern int bcm_tr3_ipmc_l3_intf_next_hop_l3_egress_set(int unit, int intf);
    459 extern int bcm_tr3_ipmc_port_attach_repl_init(int unit, bcm_port_t port);
    460 extern int bcm_tr3_ipmc_port_detach_repl_deinit(int unit, bcm_port_t port);
    461 extern int bcm_sb2_ipmc_repl_extq_port_alloc(int unit, bcm_port_t port);
    462 extern void bcm_sb2_ipmc_repl_extq_port_free(int unit, bcm_port_t port);
    463 extern int bcm_sb2_ipmc_repl_detach(int unit);
    464 #ifdef BCM_WARM_BOOT_SUPPORT
    465 extern int bcm_tr3_ipmc_repl_l3_intf_scache_size_get(int unit, uint32 *size);
    466 extern int bcm_tr3_ipmc_repl_l3_intf_sync(int unit, uint8 **scache_ptr);
    467 extern int bcm_tr3_ipmc_repl_l3_intf_scache_recover(int unit, uint8 **scache_ptr);
    468 extern int bcm_tr3_ipmc_repl_l3_intf_nh_map_scache_size_get(int unit, uint32 *size);
    469 extern int bcm_tr3_ipmc_repl_l3_intf_nh_map_sync(int unit, uint8 **scache_ptr);
    470 extern int bcm_tr3_ipmc_repl_l3_intf_nh_map_scache_recover(int unit, uint8 **scache_ptr);
    471 extern int bcm_tr3_ipmc_repl_l3_intf_trill_nh_map_scache_size_get(int unit, uint32 *size);
    472 extern int bcm_tr3_ipmc_repl_l3_intf_trill_nh_map_sync(int unit, uint8 **scache_ptr);
    473 extern int bcm_tr3_ipmc_repl_l3_intf_trill_nh_map_scache_recover(int unit, uint8 **scache_ptr);
    474 #endif /* BCM_WARM_BOOT_SUPPORT */
    475 
    476 extern int bcm_tr3_failover_egr_check (int unit, bcm_l3_egress_t  *egr);
    477 extern int bcm_tr3_failover_prot_nhi_set(int unit, uint32 flags, int nh_index, uint32 prot_nh_index, 
    478                                            bcm_multicast_t  mc_group, bcm_failover_t failover_id);
    479 extern int bcm_tr3_failover_prot_nhi_cleanup  (int unit, int nh_index);
    480 extern int bcm_tr3_failover_prot_nhi_get(int unit, int nh_index, 
    481             bcm_failover_t  *failover_id, int  *prot_nh_index, bcm_multicast_t  *mc_group);
    482 extern int bcm_tr3_failover_prot_nhi_update  (int unit, int old_nh_index, int new_nh_index);
    483 extern int bcm_tr3_failover_mpls_check (int unit, bcm_mpls_port_t  *mpls_port);
    484 extern int bcm_tr3_failover_extender_check(int unit, bcm_extender_port_t *extender_port);
    485 extern int bcm_tr3_failover_status_set(int unit, bcm_failover_element_t *failover, int value);
    486 extern int bcm_tr3_failover_status_get(int unit, bcm_failover_element_t *failover, int  *value);
    487 extern int bcm_tr3_l2gre_egress_set(int unit, int nh_index, uint32 flags);
    488 extern int bcm_tr3_l2gre_egress_reset(int unit, int nh_index);
    489 extern int bcm_tr3_l2gre_egress_get(int unit, bcm_l3_egress_t *egr, int nh_index);
    490 extern int bcm_tr3_mpls_tunnel_switch_traverse(int unit,
    491                                    bcm_mpls_tunnel_switch_traverse_cb cb,
    492                                    void *user_data);
    493 extern int bcm_tr3_mpls_tunnel_switch_get(int unit, bcm_mpls_tunnel_switch_t *info);
    494 extern int bcm_tr3_mpls_tunnel_switch_delete_all(int unit);
    495 extern  int bcm_tr3_mpls_tunnel_switch_delete(int unit, bcm_mpls_tunnel_switch_t *info);
    496 extern int bcm_tr3_mpls_tunnel_switch_add(int unit, bcm_mpls_tunnel_switch_t *info);
    497 extern int _bcm_tr3_mpls_match_add(int unit, bcm_mpls_port_t *mpls_port, int vp, int update);
    498 extern int _bcm_tr3_mpls_match_delete(int unit, int vp, int sw_clear);
    499 extern int _bcm_tr3_mpls_match_get(int unit, bcm_mpls_port_t *mpls_port, int vp);
    500 extern int _bcm_tr3_mpls_failover_nw_port_match_get(int unit, bcm_mpls_port_t *mpls_port,
    501                                     int vp, mpls_entry_entry_t *return_ment);
    502 
    503 extern bcm_error_t bcm_tr3_mpls_port_stat_attach(
    504                    int         unit,
    505                    bcm_vpn_t   vpn,
    506                    bcm_gport_t port,
    507                    uint32      stat_counter_id);
    508 extern bcm_error_t bcm_tr3_mpls_port_stat_detach(
    509                    int         unit, 
    510                    bcm_vpn_t   vpn,
    511                    bcm_gport_t port);
    512 extern bcm_error_t bcm_tr3_mpls_port_stat_counter_get(
    513                    int                  unit,
    514                    int                  sync_mode,
    515                    bcm_vpn_t            vpn,
    516                    bcm_gport_t          port,
    517                    bcm_mpls_stat_t      stat,
    518                    uint32               num_entries,
    519                    uint32               *counter_indexes,
    520                    bcm_stat_value_t     *counter_values);
    521 extern bcm_error_t bcm_tr3_mpls_port_stat_counter_set(
    522                    int                  unit,
    523                    bcm_vpn_t            vpn,
    524                    bcm_gport_t          port,
    525                    bcm_mpls_stat_t      stat,
    526                    uint32               num_entries,
    527                    uint32               *counter_indexes,
    528                    bcm_stat_value_t     *counter_values);
    529 extern bcm_error_t bcm_tr3_mpls_port_stat_id_get(
    530                    int                  unit,
    531                    bcm_vpn_t            vpn,
    532                    bcm_gport_t          port,
    533                    bcm_mpls_stat_t      stat,
    534                    uint32               *stat_counter_id);
    535 extern bcm_error_t bcm_tr3_mpls_label_stat_attach(
    536                    int              unit,
    537                    bcm_mpls_label_t label,
    538                    bcm_gport_t      port,
    539                    uint32           stat_counter_id);
    540 extern bcm_error_t bcm_tr3_mpls_label_stat_detach(
    541                    int              unit,
    542                    bcm_mpls_label_t label,
    543                    bcm_gport_t      port);
    544 extern bcm_error_t bcm_tr3_mpls_label_stat_counter_get(
    545                    int                  unit,
    546                    int                  sync_mode,
    547                    bcm_mpls_label_t     label,
    548                    bcm_gport_t          port,
    549                    bcm_mpls_stat_t      stat,
    550                    uint32               num_entries,
    551                    uint32               *counter_indexes,
    552                    bcm_stat_value_t     *counter_values);
    553 extern bcm_error_t bcm_tr3_mpls_label_stat_counter_set(
    554                    int                  unit,
    555                    bcm_mpls_label_t     label,
    556                    bcm_gport_t          port,
    557                    bcm_mpls_stat_t      stat,
    558                    uint32               num_entries,
    559                    uint32               *counter_indexes,
    560                    bcm_stat_value_t     *counter_values);
    561 extern bcm_error_t bcm_tr3_mpls_label_stat_id_get(
    562                    int                  unit,
    563                    bcm_mpls_label_t     label,
    564                    bcm_gport_t          port,
    565                    bcm_mpls_stat_t      stat,
    566                    uint32               *stat_counter_id);
    567 extern int bcm_tr3_mpls_label_stat_enable_set(
    568            int              unit,
    569            bcm_mpls_label_t label,
    570            bcm_gport_t      port,
    571            int              enable);
    572 extern int bcm_tr3_mpls_label_stat_get(
    573            int              unit, 
    574            int              sync_mode,
    575            bcm_mpls_label_t label, 
    576            bcm_gport_t      port,
    577            bcm_mpls_stat_t  stat,
    578            uint64           *val);
    579 extern int bcm_tr3_mpls_label_stat_get32(
    580            int              unit,
    581            int              sync_mode,
    582            bcm_mpls_label_t label, 
    583            bcm_gport_t      port, 
    584            bcm_mpls_stat_t  stat,
    585            uint32           *val);
    586 extern int bcm_tr3_mpls_label_stat_clear(
    587            int              unit,
    588            bcm_mpls_label_t label, 
    589            bcm_gport_t      port, 
    590            bcm_mpls_stat_t  stat);
    591 
    592 extern bcm_error_t _bcm_tr3_mim_vpn_stat_get_table_info(
    593            int                        unit,
    594            bcm_mim_vpn_t              vpn,
    595            uint32                     *num_of_tables,
    596            bcm_stat_flex_table_info_t *table_info);
    597 
    598 extern bcm_error_t _bcm_tr3_mim_lookup_id_stat_get_table_info(
    599            int                        unit,
    600            int                        lookup_id,
    601            uint32                     *num_of_tables,
    602            bcm_stat_flex_table_info_t *table_info);
    603 
    604 
    605 extern int _bcm_tr3_l2_hash_dynamic_replace(int unit,
    606                                             _bcm_tr3_l2_entries_t *l2_entries);
    607 
    608 extern int _bcm_tr3_l2gre_port_resolve(
    609            int unit, 
    610            bcm_gport_t l2gre_port_id, 
    611            bcm_if_t encap_id, 
    612            bcm_module_t *modid, 
    613            bcm_port_t *port,
    614            bcm_trunk_t *trunk_id, 
    615            int *id);
    616 
    617 extern int _bcm_tr3_l2gre_multicast_enable(int unit, bcm_multicast_t group, 
    618                                         bcm_gport_t l2gre_port_id);
    619 extern  int  bcm_tr3_l2gre_lock(int unit);
    620 extern void bcm_tr3_l2gre_unlock(int unit);
    621 extern void _bcm_tr3_l2gre_sw_dump(int unit);
    622 extern int bcm_tr3_l2gre_init(int unit);
    623 extern int bcm_tr3_l2gre_cleanup(int unit);
    624 extern int bcm_tr3_l2gre_vpn_create(int unit, bcm_l2gre_vpn_config_t *info);
    625 extern int bcm_tr3_l2gre_vpn_destroy(int unit, bcm_vpn_t l2vpn);
    626 extern int bcm_tr3_l2gre_vpn_destroy_all(int unit);
    627 extern int bcm_tr3_l2gre_vpn_traverse(int unit, bcm_l2gre_vpn_traverse_cb cb, void *user_data);
    628 extern int bcm_tr3_l2gre_vpn_get( int unit, bcm_vpn_t l2vpn, bcm_l2gre_vpn_config_t *info);
    629 extern int bcm_tr3_l2gre_port_add(int unit, bcm_vpn_t vpn, bcm_l2gre_port_t  *l2gre_port);
    630 extern int bcm_tr3_l2gre_port_delete(int unit, bcm_vpn_t vpn, bcm_gport_t l2gre_port_id);
    631 extern int bcm_tr3_l2gre_port_delete_all(int unit, bcm_vpn_t vpn);
    632 extern int bcm_tr3_l2gre_port_get(int unit, bcm_vpn_t l2vpn, bcm_l2gre_port_t *l2gre_port);
    633 extern int bcm_tr3_l2gre_port_get_all( int unit, bcm_vpn_t l2vpn, int port_max, bcm_l2gre_port_t *port_array, int *port_count);
    634 extern int bcm_tr3_l2gre_tunnel_initiator_create(int unit, bcm_tunnel_initiator_t *info);
    635 extern int bcm_tr3_l2gre_tunnel_initiator_destroy(int unit, bcm_gport_t l2gre_tunnel_id);
    636 extern int bcm_tr3_l2gre_tunnel_initiator_destroy_all(int unit);
    637 extern int bcm_tr3_l2gre_tunnel_initiator_get(int unit, bcm_tunnel_initiator_t *info);
    638 extern int bcm_tr3_l2gre_tunnel_initiator_traverse(int unit, bcm_tunnel_initiator_traverse_cb cb, void *user_data);
    639 extern int bcm_tr3_l2gre_tunnel_terminator_create(int unit, bcm_tunnel_terminator_t *info);
    640 extern int bcm_tr3_l2gre_tunnel_terminator_update(int unit, bcm_tunnel_terminator_t *tnl_info);
    641 extern int bcm_tr3_l2gre_tunnel_terminator_destroy(int unit, bcm_gport_t l2gre_tunnel_id);
    642 extern int bcm_tr3_l2gre_tunnel_terminator_destroy_all(int unit);
    643 extern int bcm_tr3_l2gre_tunnel_terminator_get( int unit, bcm_tunnel_terminator_t *info);
    644 extern int bcm_tr3_l2gre_tunnel_terminator_traverse(int unit, bcm_tunnel_terminator_traverse_cb cb, void *user_data);
    645 extern int _bcm_tr3_l2gre_vpn_get(int unit, int vfi_index, bcm_vlan_t *vid);
    646 extern int bcm_tr3_l2gre_multicast_leaf_entry_check(int unit, bcm_ip_t mc_ip_addr, bcm_ip_t  src_ip_addr, int multicast_flag);
    647 extern int _bcm_esw_l2gre_match_add(int unit, bcm_l2gre_port_t *l2gre_port, int vp, bcm_vpn_t vpn);
    648 extern int _bcm_esw_l2gre_match_delete(int unit,  int vp);
    649 extern int _bcm_esw_l2gre_match_get(int unit, bcm_l2gre_port_t *l2gre_port, int vp);
    650 extern void  bcm_tr3_l2gre_port_match_count_adjust(int unit, int vp, int step);
    651 extern int bcm_tr3_l2gre_match_add(int unit, bcm_l2gre_port_t *l2gre_port, int vp, bcm_vpn_t vpn);
    652 extern int bcm_tr3_l2gre_match_delete(int unit,  int vp);
    653 extern int bcm_tr3_l2gre_match_get(int unit, bcm_l2gre_port_t *l2gre_port, int vp);
    654 extern int bcm_tr3_l2gre_match_trunk_add(int unit, bcm_trunk_t tgid, int vp);
    655 extern int bcm_tr3_l2gre_match_trunk_delete(int unit, bcm_trunk_t tgid, int vp);
    656 extern int bcm_tr3_l2gre_port_untagged_profile_set (int unit, bcm_port_t port);
    657 extern int bcm_tr3_l2gre_port_untagged_profile_reset(int unit, bcm_port_t port);
    658 extern int bcm_tr3_l2gre_match_tunnel_entry_set(int unit, int vp, bcm_l2gre_port_t *l2gre_port);
    659 extern int bcm_tr3_l2gre_match_tunnel_entry_reset(int unit, int vp);
    660 extern void bcm_tr3_l2gre_match_clear (int unit, int vp);
    661 extern int _bcm_tr3_l2gre_eline_vp_configure (int unit, int vfi_index, int active_vp, 
    662                   source_vp_entry_t *svp, int tpid_enable, bcm_l2gre_port_t  *l2gre_port);
    663 extern int _bcm_tr3_l2gre_elan_vp_configure (int unit, int vfi_index, int active_vp, 
    664                   source_vp_entry_t *svp, int tpid_enable, bcm_l2gre_port_t  *l2gre_port);
    665 extern int _bcm_esw_l2gre_eline_vp_configure (int unit, int vfi_index, int active_vp, 
    666                   source_vp_entry_t *svp, int tpid_enable, bcm_l2gre_port_t  *l2gre_port);
    667 extern int _bcm_esw_l2gre_elan_vp_configure (int unit, int vfi_index, int active_vp, 
    668                   source_vp_entry_t *svp, int tpid_enable, bcm_l2gre_port_t  *l2gre_port);
    669 extern int bcm_tr3_l2gre_trunk_member_add (int unit, bcm_trunk_t trunk_id, 
    670                                              int trunk_member_count, bcm_port_t *trunk_member_array);
    671 extern int bcm_tr3_l2gre_trunk_member_delete(int unit, bcm_trunk_t trunk_id, 
    672                                              int trunk_member_count, bcm_port_t *trunk_member_array); 
    673 extern int bcm_tr3_l2gre_port_learn_set(int unit, bcm_gport_t l2gre_port_id,
    674 	                                          uint32 flags);
    675 extern int bcm_tr3_l2gre_port_learn_get(int unit, bcm_gport_t l2gre_port_id, 
    676 	                                          uint32 *flags);
    677 extern int _bcm_tr3_mpls_entry_convert_to_extd_entry_key(int unit, mpls_entry_entry_t *mpls_entry_entry,
    678                                                          mpls_entry_extd_entry_t *mpls_entry_extd_entry);
    679 #ifdef BCM_WARM_BOOT_SUPPORT
    680 extern int _bcm_tr3_l2gre_sync(int unit);
    681 #endif /* BCM_WARM_BOOT_SUPPORT */
    682 
    683 #if defined(INCLUDE_BFD)
    684 extern int bcmi_tr3_bfd_init(int unit);
    685 #endif /* INCLUDE_BFD */
    686 
    687 #ifdef BCM_WARM_BOOT_SUPPORT
    688 extern int _bcm_tr3_ipmc_repl_reload(int unit);
    689 #endif /* BCM_WARM_BOOT_SUPPORT */
    690 
    691 #ifndef BCM_SW_STATE_DUMP_DISABLE
    692 extern void _bcm_tr3_ipmc_repl_sw_dump(int unit);
    693 #endif /* BCM_SW_STATE_DUMP_DISABLE */
    694 
    695 /* NIV */
    696 extern int bcm_tr3_niv_forward_add(int unit,
    697         bcm_niv_forward_t *iv_fwd_entry);
    698 extern int bcm_tr3_niv_forward_delete(int unit,
    699         bcm_niv_forward_t *iv_fwd_entry);
    700 extern int bcm_tr3_niv_forward_delete_all(int unit);
    701 extern int bcm_tr3_niv_forward_get(int unit,
    702         bcm_niv_forward_t *iv_fwd_entry);
    703 extern int bcm_tr3_niv_forward_traverse(int unit,
    704         bcm_niv_forward_traverse_cb cb, void *user_data);
    705 
    706 #ifdef BCM_WARM_BOOT_SUPPORT
    707 extern int bcm_tr3_extender_required_scache_size_get(int unit, uint32 *size);
    708 extern int _bcm_tr3_extender_sync(int unit, uint8 **scache_ptr);
    709 #endif
    710 
    711 /* Port Extender */
    712 extern int bcm_tr3_extender_init(int unit);
    713 extern int bcm_tr3_extender_cleanup(int unit);
    714 extern int bcm_tr3_extender_match_key_get(int unit,
    715                                           bcm_gport_t extender_port_id,
    716                                           void * vent);
    717 extern int _bcm_tr3_extender_port_match_add(int unit, bcm_gport_t port,
    718                                             uint16 extended_port_vid,
    719                                             bcm_vlan_t vlan, int vp);
    720 extern int _bcm_tr3_extender_port_match_delete(int unit, bcm_gport_t port,
    721                                                uint16 extended_port_vid,
    722                                                bcm_vlan_t vlan, int vp);
    723 extern int bcm_tr3_extender_port_add(int unit,
    724         bcm_extender_port_t *extender_port);
    725 extern int bcm_tr3_extender_port_delete(int unit,
    726         bcm_gport_t extender_port_id);
    727 extern int bcm_tr3_extender_port_delete_all(int unit);
    728 extern int bcm_tr3_extender_port_get(int unit,
    729         bcm_extender_port_t *extender_port);
    730 extern int bcm_tr3_extender_port_traverse(int unit,
    731         bcm_extender_port_traverse_cb cb, void *user_data);
    732 extern int bcm_tr3_extender_forward_add(int unit,
    733         bcm_extender_forward_t *extender_forward_entry);
    734 extern int bcm_tr3_extender_forward_delete(int unit,
    735         bcm_extender_forward_t *extender_forward_entry);
    736 extern int bcm_tr3_extender_forward_delete_all(int unit);
    737 extern int bcm_tr3_extender_forward_get(int unit,
    738         bcm_extender_forward_t *extender_forward_entry);
    739 extern int bcm_tr3_extender_forward_traverse(int unit,
    740         bcm_extender_forward_traverse_cb cb, void *user_data);
    741 
    742 extern int _bcm_tr3_extender_port_resolve(int unit,
    743         bcm_gport_t extender_port_id,
    744         bcm_module_t *modid, bcm_port_t *port,
    745         bcm_trunk_t *trunk_id, int *id);
    746 
    747 extern int bcm_tr3_extender_egress_add(int unit,
    748         bcm_gport_t extender_port,
    749         bcm_extender_egress_t *extender_egress);
    750 extern int bcm_tr3_extender_egress_delete(int unit,
    751         bcm_gport_t extender_port,
    752         bcm_extender_egress_t *extender_egress);
    753 extern int bcm_tr3_extender_egress_delete_all(int unit,
    754         bcm_gport_t extender_port);
    755 extern int bcm_tr3_extender_egress_get(int unit,
    756         bcm_gport_t extender_port,
    757         bcm_extender_egress_t *extender_egress);
    758 extern int bcm_tr3_extender_egress_get_all(int unit,
    759         bcm_gport_t extender_port,
    760         int array_size,
    761         bcm_extender_egress_t *extender_egress_array,
    762         int *count);
    763 extern int bcm_tr3_extender_egress_set(int unit,
    764         bcm_gport_t extender_port,
    765         int array_size,
    766         bcm_extender_egress_t *extender_egress_array);
    767 
    768 extern int bcm_tr3_etag_ethertype_set(int unit, int ethertype);
    769 extern int bcm_tr3_etag_ethertype_get(int unit, int *ethertype);
    770 
    771 extern int bcm_tr3_extender_untagged_add(int unit, bcm_vlan_t vlan, int vp,
    772                                        int flags, int *egr_vt_added);
    773 extern int bcm_tr3_extender_untagged_delete(int unit, bcm_vlan_t vlan, int vp);
    774 extern int bcm_tr3_extender_untagged_get(int unit, bcm_vlan_t vlan, int vp,
    775                                        int *flags);
    776 extern int bcm_tr3_extender_port_untagged_vlan_set(int unit, bcm_port_t port,
    777                                        bcm_vlan_t vlan);
    778 extern int bcm_tr3_extender_port_untagged_vlan_get(int unit, bcm_port_t port,
    779                                        bcm_vlan_t *vid_ptr);
    780 
    781 #ifndef BCM_SW_STATE_DUMP_DISABLE
    782 extern void bcm_tr3_extender_sw_dump(int unit);
    783 #endif /* BCM_SW_STATE_DUMP_DISABLE */
    784 
    785 #endif /* INCLUDE_L3 */
    786 
    787 #if defined(BCM_FIELD_SUPPORT)
    788 #ifdef BCM_HELIX4_SUPPORT
    789 extern int _bcm_field_helix4_stage_init(int unit, _field_stage_t *stage_fc);
    790 #endif
    791 extern int _bcm_field_tr3_stage_init(int unit, _field_stage_t *stage_fc);
    792 extern int _bcm_field_tr3_external_present(int unit);
    793 extern int _bcm_field_tr3_meter_pool_info(int            unit,
    794                                           _field_stage_t *stage_fc,
    795                                           int            *num_pools,
    796                                           int            *pairs_per_pool,
    797                                           uint16         *pool_size
    798                                           );
    799 extern int _bcm_field_tr3_cntr_pool_info(int            unit,
    800                                          _field_stage_t *stage_fc,
    801                                          unsigned       *num_pools,
    802                                          unsigned       *cntrs_per_pool
    803                                          );
    804 extern int _bcm_field_tr3_slice_enable_set(int            unit,
    805                                            _field_stage_t *stage_fc,
    806                                            _field_group_t *fg,
    807                                            _field_slice_t *fs,
    808                                            unsigned       endis
    809                                            );
    810 extern int _bcm_field_tr3_slice_clear(int            unit,
    811                                       _field_group_t *fg,
    812                                       _field_slice_t *fs
    813                                       );
    814 extern int _bcm_field_tr3_group_qset_update(int unit, _field_group_t *fg);
    815 extern int _bcm_field_tr3_group_default_aset_set(int unit, _field_group_t *fg);
    816 extern int _bcm_field_tr3_aset_install(int unit, _field_group_t *fg);
    817 extern int _bcm_field_tr3_qualify_PacketRes(int               unit, 
    818                                             bcm_field_entry_t entry, 
    819                                             uint32            *data, 
    820                                             uint32            *mask
    821                                             );
    822 extern int _bcm_field_tr3_qualify_PacketRes_get(int               unit, 
    823                                                 bcm_field_entry_t entry, 
    824                                                 uint32            *data, 
    825                                                 uint32            *mask
    826                                                 );
    827 extern int
    828 _bcm_field_tr3_qualify_LoopbackType(bcm_field_LoopbackType_t loopback_type,
    829                                     uint32                   *tcam_data,
    830                                     uint32                   *tcam_mask
    831                                     );
    832 extern int
    833 _bcm_field_tr3_qualify_LoopbackType_get(uint8                    tcam_data,
    834                                         uint8                    tcam_mask,
    835                                         bcm_field_LoopbackType_t *loopback_type
    836                                         );
    837 extern int 
    838 _bcm_field_tr3_qualify_TunnelType(bcm_field_TunnelType_t tunnel_type,
    839                                   uint32                 *tcam_data,
    840                                   uint32                 *tcam_mask
    841                                   );
    842 extern int 
    843 _bcm_field_tr3_qualify_TunnelType_get(uint8                  tcam_data,
    844                                       uint8                  tcam_mask,
    845                                       bcm_field_TunnelType_t *tunnel_type
    846                                       );
    847 extern int _bcm_field_tr3_qualify_class(int                 unit,
    848                                         bcm_field_entry_t   entry,
    849                                         bcm_field_qualify_t qual,
    850                                         uint32              *data,
    851                                         uint32              *mask
    852                                         );
    853 extern int _bcm_field_tr3_qualify_class_get(int                 unit,
    854                                             bcm_field_entry_t   entry,
    855                                             bcm_field_qualify_t qual,
    856                                             uint32              *data,
    857                                             uint32              *mask
    858                                             );
    859 extern int _bcm_field_tr3_qual_tcam_key_mask_get(int            unit,
    860                                                  _field_entry_t *f_ent,
    861                                                  _field_tcam_t  *tcam
    862                                                  );
    863 extern int _bcm_field_tr3_qual_tcam_key_mask_set(int            unit,
    864                                                  _field_entry_t *f_ent,
    865                                                  unsigned       validf
    866                                                  );
    867 extern int _bcm_field_tr3_action_get(int             unit,
    868                                      soc_mem_t       mem,
    869                                      _field_entry_t  *f_ent,
    870                                      int             tcam_idx,
    871                                      _field_action_t *fa,
    872                                      uint32          *buf
    873                                      );
    874 extern int _bcm_field_tr3_policer_mode_support(int            unit,
    875                                                _field_entry_t *f_ent,
    876                                                int            lvl,
    877                                                _field_policer_t *f_pl
    878                                                );
    879 extern int _bcm_field_tr3_policer_action_set(int            unit,
    880                                              _field_entry_t *f_ent,
    881                                              soc_mem_t      mem,
    882                                              uint32         *buf
    883                                              );
    884 extern int _bcm_field_tr3_stat_hw_mode_get(int unit, _field_stat_t *f_st);
    885 extern int _bcm_field_tr3_counter_hw_alloc(int            unit,
    886                                            _field_entry_t *f_ent
    887                                            );
    888 extern int 
    889 _bcm_esw_tr3_ext_stat_flex_detach_ingress_table_counters(int             unit,
    890                                                         _field_entry_t  *f_ent
    891                                                         );
    892 extern int _bcm_field_tr3_stat_hw_free(int            unit,
    893                                        _field_entry_t *f_ent
    894                                        );
    895 extern int _bcm_field_tr3_stat_action_set(int            unit,
    896                                           _field_entry_t *f_ent,
    897                                           soc_mem_t      mem,
    898                                           int            tcam_idx,
    899                                           uint32         *buf
    900                                           );
    901 extern int _bcm_field_tr3_stat_hw_mode_max(_field_stage_id_t stage_id,
    902                                            int               *hw_mode_max
    903                                            );
    904 extern int _bcm_field_tr3_stat_hw_mode_to_bmap(int               unit,
    905                                                uint16             mode, 
    906                                                _field_stage_id_t stage_id, 
    907                                                uint32            *hw_bmap,
    908                                                uint8             *hw_entry_count
    909                                                );
    910 extern int _bcm_field_tr3_counter_mem_get(int            unit,
    911                                           _field_stage_t *stage_fc,
    912                                           soc_mem_t      *counter_x_mem,
    913                                           soc_mem_t      *counter_y_mem
    914                                           );
    915 extern int _bcm_field_tr3_external_policy_mem_get(int             unit,
    916                                                   _field_action_t *fa,
    917                                                   soc_mem_t       *mem
    918                                                   );
    919 extern int _bcm_field_tr3_external_policy_install(int            unit,
    920                                                   _field_stage_t *stage_fc,
    921                                                   _field_entry_t *f_ent
    922                                                   );
    923 extern int _bcm_field_tr3_external_entry_move(int unit, _field_entry_t *f_ent,
    924                                    int index1, int index2);
    925 
    926 extern int _bcm_field_tr3_external_hw_entry_clear(int unit, int slice, int index);
    927 
    928 extern int _bcm_field_tr3_hw_clear(int unit, _field_stage_t *stage_fc);
    929 extern int _bcm_field_tr3_init(int unit, _field_control_t *fc);
    930 #endif /* BCM_FIELD_SUPPORT */
    931 
    932 extern int bcm_tr3_cosq_init(int unit);
    933 extern void bcm_tr3_cosq_stat_init(int unit);
    934 extern int bcm_tr3_cosq_detach(int unit, int software_state_only);
    935 
    936 extern int bcm_tr3_cosq_config_set(int unit, int numq);
    937 
    938 extern int bcm_tr3_cosq_config_get(int unit, int *numq);
    939 
    940 extern int bcm_tr3_cosq_mapping_set(int unit, bcm_port_t gport, 
    941                         bcm_cos_t priority, bcm_cos_queue_t cosq);
    942 
    943 extern int bcm_tr3_cosq_mapping_get(int unit, bcm_port_t gport,
    944                         bcm_cos_t priority, bcm_cos_queue_t *cosq);
    945 
    946 extern int bcm_tr3_cosq_port_sched_set(int unit, bcm_pbmp_t pbm,
    947                            int mode, const int *weights, int delay);
    948 
    949 extern int bcm_tr3_cosq_port_sched_get(int unit, bcm_pbmp_t pbm,
    950                            int *mode, int *weights, int *delay);
    951 
    952 extern int bcm_tr3_cosq_sched_weight_max_get(int unit, int mode, 
    953                                                 int *weight_max);
    954 
    955 extern int bcm_tr3_cosq_discard_set(int unit, uint32 flags);
    956 
    957 extern int bcm_tr3_cosq_discard_get(int unit, uint32 *flags);
    958 
    959 extern int
    960 bcm_tr3_cosq_gport_discard_set(int unit, bcm_gport_t gport,
    961                                bcm_cos_queue_t cosq,
    962                                bcm_cosq_gport_discard_t *discard);
    963 
    964 extern int
    965 _bcm_tr3_cosq_pfc_class_resolve(bcm_switch_control_t sctype, int *type,
    966                                int *class);
    967 
    968 extern int
    969 bcm_tr3_cosq_port_pfc_op(int unit, bcm_port_t port,
    970                         bcm_switch_control_t sctype, _bcm_cosq_op_t op,
    971                         bcm_gport_t *gport, int gport_count);
    972 
    973 extern int
    974 bcm_tr3_cosq_port_pfc_get(int unit, bcm_port_t port,
    975                          bcm_switch_control_t sctype,
    976                          bcm_gport_t *gport, int gport_count,
    977                          int *actual_gport_count);
    978 
    979 extern int
    980 bcm_tr3_cosq_gport_discard_get(int unit, bcm_gport_t gport,
    981                               bcm_cos_queue_t cosq,
    982                               bcm_cosq_gport_discard_t *discard);
    983 
    984 extern int
    985 bcm_tr3_cosq_gport_add(int unit, bcm_gport_t port, int numq, uint32 flags,
    986                       bcm_gport_t *gport,int internal);
    987 
    988 extern int
    989 bcm_tr3_cosq_gport_detach(int unit, bcm_gport_t sched_gport,
    990                          bcm_gport_t input_gport, bcm_cos_queue_t cosq);
    991 
    992 extern int
    993 bcm_tr3_cosq_discard_port_get(int unit, bcm_port_t port, 
    994                  bcm_cos_queue_t cosq, uint32 color, int *drop_start, 
    995                         int *drop_slope, int *average_time);
    996 
    997 extern int
    998 bcm_tr3_cosq_gport_delete(int unit, bcm_gport_t gport);
    999 
   1000 extern int
   1001 bcm_tr3_cosq_gport_get(int unit, bcm_gport_t gport, bcm_gport_t *port,
   1002                       int *numq, uint32 *flags);
   1003 
   1004 extern int
   1005 bcm_tr3_cosq_gport_traverse(int unit, bcm_cosq_gport_traverse_cb cb,
   1006                            void *user_data);
   1007 
   1008 extern int
   1009 bcm_tr3_cosq_discard_port_set(int unit, bcm_port_t port, 
   1010                             bcm_cos_queue_t cosq,
   1011                             uint32 color, int drop_start, int drop_slope,
   1012                             int average_time);
   1013 
   1014 extern int
   1015 bcm_tr3_cosq_gport_attach(int unit, bcm_gport_t sched_gport,
   1016                          bcm_gport_t input_gport, bcm_cos_queue_t cosq);
   1017 
   1018 extern int
   1019 bcm_tr3_cosq_gport_attach_get(int unit, bcm_gport_t sched_gport,
   1020                              bcm_gport_t *input_gport, bcm_cos_queue_t *cosq);
   1021 
   1022 extern int
   1023 bcm_tr3_cosq_gport_child_get(int unit, bcm_gport_t in_gport,
   1024                              bcm_cos_queue_t cosq, bcm_gport_t *out_gport);
   1025 
   1026 extern int
   1027 bcm_tr3_cosq_port_bandwidth_set(int unit, bcm_port_t port,
   1028                                bcm_cos_queue_t cosq,
   1029                                uint32 min_quantum, uint32 max_quantum,
   1030                                uint32 burst_quantum, uint32 flags);
   1031 
   1032 extern int
   1033 bcm_tr3_cosq_port_bandwidth_get(int unit, bcm_port_t port,
   1034                                bcm_cos_queue_t cosq,
   1035                                uint32 *min_quantum, uint32 *max_quantum,
   1036                                uint32 *burst_quantum, uint32 *flags);
   1037 
   1038 extern int
   1039 bcm_tr3_cosq_port_pps_set(int unit, bcm_port_t port, bcm_cos_queue_t cosq,
   1040                          int pps);
   1041 
   1042 extern int
   1043 bcm_tr3_cosq_port_pps_get(int unit, bcm_port_t port, bcm_cos_queue_t cosq,
   1044                          int *pps);
   1045 
   1046 extern int bcm_tr3_cosq_port_burst_set(int unit, bcm_port_t port, 
   1047                                        bcm_cos_queue_t cosq, int burst);
   1048 
   1049 extern int
   1050 bcm_tr3_cosq_stat_set(int unit, bcm_gport_t port, bcm_cos_queue_t cosq,
   1051                      bcm_cosq_stat_t stat, uint64 value);
   1052 
   1053 extern int
   1054 bcm_tr3_cosq_stat_get(int unit, bcm_port_t port, bcm_cos_queue_t cosq,
   1055                      bcm_cosq_stat_t stat, int sync_mode, uint64 *value);
   1056 
   1057 extern int
   1058 bcm_tr3_cosq_port_burst_get(int unit, bcm_port_t port, bcm_cos_queue_t cosq,
   1059                            int *burst);
   1060 
   1061 extern int
   1062 bcm_tr3_cosq_control_set(int unit, bcm_gport_t gport, bcm_cos_queue_t cosq,
   1063                         bcm_cosq_control_t type, int arg);
   1064 
   1065 extern int
   1066 bcm_tr3_cosq_control_get(int unit, bcm_gport_t gport, bcm_cos_queue_t cosq,
   1067                         bcm_cosq_control_t type, int *arg);
   1068 
   1069 extern int
   1070 bcm_tr3_cosq_gport_bandwidth_burst_set(int unit, bcm_gport_t gport,
   1071                                       bcm_cos_queue_t cosq,
   1072                                       uint32 kbits_burst_min, 
   1073                                       uint32 kbits_burst_max);
   1074 
   1075 extern int
   1076 bcm_tr3_cosq_gport_bandwidth_burst_get(int unit, bcm_gport_t gport,
   1077                                        bcm_cos_queue_t cosq,
   1078                                        uint32 *kbits_burst_min,
   1079                                        uint32 *kbits_burst_max);
   1080 extern int
   1081 bcm_tr3_cosq_gport_bandwidth_set(int unit, bcm_gport_t gport,
   1082                                 bcm_cos_queue_t cosq, uint32 kbits_sec_min,
   1083                                 uint32 kbits_sec_max, uint32 flags);
   1084 
   1085 extern int
   1086 bcm_tr3_cosq_gport_bandwidth_get(int unit, bcm_gport_t gport,
   1087                                 bcm_cos_queue_t cosq, uint32 *kbits_sec_min,
   1088                                 uint32 *kbits_sec_max, uint32 *flags);
   1089 
   1090 extern int bcm_tr3_cosq_congestion_queue_set(int unit, bcm_port_t port,
   1091                                             bcm_cos_queue_t cosq, int index);
   1092 extern int bcm_tr3_cosq_congestion_queue_get(int unit, bcm_port_t port,
   1093                                             bcm_cos_queue_t cosq, int *index);
   1094 extern int bcm_tr3_cosq_congestion_quantize_set(int unit, bcm_port_t port,
   1095                                                bcm_cos_queue_t cosq,
   1096                                                int weight_code, int setpoint);
   1097 extern int bcm_tr3_cosq_congestion_quantize_get(int unit, bcm_port_t port,
   1098                                                bcm_cos_queue_t cosq,
   1099                                                int *weight_code,
   1100                                                int *setpoint);
   1101 extern int bcm_tr3_cosq_congestion_sample_int_set(int unit, bcm_port_t port,
   1102                                                  bcm_cos_queue_t cosq,
   1103                                                  int min, int max);
   1104 extern int bcm_tr3_cosq_congestion_sample_int_get(int unit, bcm_port_t port,
   1105                                                  bcm_cos_queue_t cosq,
   1106                                                  int *min, int *max);
   1107 extern int bcm_tr3_cosq_drop_status_enable_set(int unit, bcm_port_t port,
   1108                                               int enable);
   1109 extern int _bcm_tr3_get_def_qbase(int unit, bcm_port_t inport, int qtype, 
   1110                             int *pbase, int *pnumq);
   1111 
   1112 extern int bcm_tr3_cosq_gport_sched_set(int unit, bcm_gport_t gport,
   1113                                        bcm_cos_queue_t cosq, int mode,
   1114                                        int weight);
   1115 extern int bcm_tr3_cosq_gport_sched_get(int unit, bcm_gport_t gport,
   1116                                        bcm_cos_queue_t cosq, int *mode,
   1117                                        int *weight);
   1118 extern int
   1119 _bcm_tr3_cosq_port_resolve(int unit, bcm_gport_t gport, bcm_module_t *modid,
   1120                           bcm_port_t *port, bcm_trunk_t *trunk_id, int *id,
   1121                           int *qnum);
   1122 
   1123 
   1124 extern int 
   1125 bcm_tr3_cosq_gport_congestion_config_set(int unit, bcm_gport_t port, 
   1126                                          bcm_cos_queue_t cosq, 
   1127                                          bcm_cosq_congestion_info_t *config);
   1128 
   1129 extern int 
   1130 bcm_tr3_cosq_gport_congestion_config_get(int unit, bcm_gport_t port, 
   1131                                          bcm_cos_queue_t cosq, 
   1132                                          bcm_cosq_congestion_info_t *config);
   1133 /* Routines to program IFP_COS_MAP table. */
   1134 extern int
   1135 bcm_tr3_cosq_field_classifier_id_create(int unit,
   1136                                         bcm_cosq_classifier_t *classifier,
   1137                                         int *classifier_id);
   1138 extern int 
   1139 bcm_tr3_cosq_field_classifier_map_set(int unit,
   1140                                       int classifier_id,
   1141                                       int array_count,
   1142                                       bcm_cos_t *priority_array,
   1143                                       bcm_cos_queue_t *cosq_array);
   1144 extern int
   1145 bcm_tr3_cosq_field_classifier_map_get(int unit,
   1146                                       int classifier_id,
   1147                                       int array_max,
   1148                                       bcm_cos_t *priority_array,
   1149                                       bcm_cos_queue_t *cosq_array,
   1150                                       int *array_count);
   1151 extern int
   1152 bcm_tr3_cosq_field_classifier_map_clear(int unit, int classifier_id);
   1153 
   1154 extern int
   1155 bcm_tr3_cosq_field_classifier_id_destroy(int unit, int classifier_id);
   1156 
   1157 extern int
   1158 bcm_tr3_cosq_field_classifier_get(int unit, int classifier_id,
   1159                                   bcm_cosq_classifier_t *classifier);
   1160 extern int 
   1161 bcm_tr3_cosq_service_classifier_id_create(int unit,
   1162         bcm_cosq_classifier_t *classifier,
   1163         int *classifier_id);
   1164 
   1165 extern int 
   1166 bcm_tr3_cosq_service_classifier_id_destroy(int unit,
   1167         int classifier_id);
   1168 
   1169 extern int 
   1170 bcm_tr3_cosq_service_classifier_get(int unit,
   1171         int classifier_id,
   1172         bcm_cosq_classifier_t *classifier);
   1173 
   1174 extern int 
   1175 bcm_tr3_cosq_service_map_set(int unit, bcm_port_t port,
   1176         int classifier_id,
   1177         bcm_gport_t queue_group,
   1178         int array_count,
   1179         bcm_cos_t *priority_array,
   1180         bcm_cos_queue_t *cosq_array);
   1181 
   1182 extern int 
   1183 bcm_tr3_cosq_service_map_get(int unit, bcm_port_t port,
   1184         int classifier_id,
   1185         bcm_gport_t *queue_group,
   1186         int array_max,
   1187         bcm_cos_t *priority_array,
   1188         bcm_cos_queue_t *cosq_array,
   1189         int *array_count);
   1190 
   1191 extern int 
   1192 bcm_tr3_cosq_service_map_clear(int unit,
   1193         bcm_gport_t port,
   1194         int classifier_id);
   1195 
   1196 extern int 
   1197 bcm_tr3_cosq_classifier_id_get(int unit,
   1198         bcm_cosq_classifier_t *classifier,
   1199         int array_count,
   1200         bcm_cos_t *priority_array,
   1201         bcm_cos_queue_t *cosq_array,
   1202         int *classifier_id);
   1203 
   1204 extern int
   1205 bcm_tr3_cosq_cpu_cosq_enable_set(
   1206         int unit, 
   1207         bcm_cos_queue_t cosq, 
   1208         int enable);
   1209 
   1210 extern int
   1211 bcm_tr3_cosq_cpu_cosq_enable_get(
   1212         int unit, 
   1213         bcm_cos_queue_t cosq, 
   1214         int *enable);
   1215 
   1216 typedef enum {
   1217     _BCM_TR3_COSQ_INDEX_STYLE_BUCKET,
   1218     _BCM_TR3_COSQ_INDEX_STYLE_QCN,
   1219     _BCM_TR3_COSQ_INDEX_STYLE_WRED,
   1220     _BCM_TR3_COSQ_INDEX_STYLE_WRED_PORT,
   1221     _BCM_TR3_COSQ_INDEX_STYLE_SCHEDULER,
   1222     _BCM_TR3_COSQ_INDEX_STYLE_UCAST_DROP,
   1223     _BCM_TR3_COSQ_INDEX_STYLE_COS,
   1224     _BCM_TR3_COSQ_INDEX_STYLE_UCAST_QUEUE,
   1225     _BCM_TR3_COSQ_INDEX_STYLE_MCAST_QUEUE,
   1226     _BCM_TR3_COSQ_INDEX_STYLE_EXT_UCAST_QUEUE,
   1227     _BCM_TR3_COSQ_INDEX_STYLE_EGR_POOL,
   1228     _BCM_TR3_COSQ_INDEX_STYLE_EGR_PERQ_UCAST,
   1229     _BCM_TR3_COSQ_INDEX_STYLE_EGR_PERQ_MCAST,
   1230     _BCM_TR3_COSQ_INDEX_STYLE_UC_EGR_POOL,
   1231     _BCM_TR3_COSQ_INDEX_STYLE_COUNT
   1232 } _bcm_tr3_cosq_index_style_t;
   1233 
   1234 extern int
   1235 _bcm_tr3_cosq_index_resolve(int unit, bcm_port_t port, bcm_cos_queue_t cosq, 
   1236                            _bcm_tr3_cosq_index_style_t style,                 
   1237                            bcm_port_t *local_port, int *index, int *count);
   1238 
   1239 extern int 
   1240 bcm_tr3_switch_qcn_mac_set(int unit, bcm_switch_control_t type,
   1241                         soc_mem_t mem,soc_field_t field, void* entry,
   1242                         uint32 mac_field);
   1243 
   1244 extern int 
   1245 bcm_tr3_switch_qcn_mac_get(int unit, bcm_switch_control_t type,
   1246                         soc_mem_t mem,soc_field_t field, void* entry,
   1247                         uint32 *mac_field);
   1248 /* Cross Connect */
   1249 extern int 
   1250 bcm_tr3_l2_cross_connect_add(int unit, bcm_vlan_t outer_vlan, 
   1251                             bcm_vlan_t inner_vlan, bcm_gport_t port_1, 
   1252                             bcm_gport_t port_2);
   1253 extern int 
   1254 bcm_tr3_l2_cross_connect_delete(int unit, bcm_vlan_t outer_vlan, 
   1255                                bcm_vlan_t inner_vlan);
   1256 
   1257 extern int
   1258 bcm_tr3_l2_cross_connect_delete_all(int unit);
   1259 
   1260 extern int
   1261 bcm_tr3_l2_cross_connect_traverse(int unit,
   1262                                  bcm_vlan_cross_connect_traverse_cb cb,
   1263                                  void *user_data);
   1264 
   1265 
   1266 extern int 
   1267 bcm_tr3_cosq_bst_profile_set(int unit, 
   1268                              bcm_gport_t gport, 
   1269                              bcm_cos_queue_t cosq, 
   1270                              bcm_bst_stat_id_t bid,
   1271                              bcm_cosq_bst_profile_t *profile);
   1272 
   1273 extern int 
   1274 bcm_tr3_cosq_bst_profile_get(int unit, 
   1275                              bcm_gport_t gport, 
   1276                              bcm_cos_queue_t cosq, 
   1277                              bcm_bst_stat_id_t bid,
   1278                              bcm_cosq_bst_profile_t *profile);
   1279 
   1280 extern int 
   1281 bcm_tr3_cosq_bst_stat_get(int unit, 
   1282                               bcm_gport_t gport, 
   1283                               bcm_cos_queue_t cosq, 
   1284                               bcm_bst_stat_id_t bid,
   1285                               uint32 options,
   1286                               uint64 *value);
   1287 extern int 
   1288 bcm_tr3_cosq_bst_stat_multi_get(int unit,
   1289                                 bcm_gport_t gport,
   1290                                 bcm_cos_queue_t cosq,
   1291                                 uint32 options,
   1292                                 int max_values,
   1293                                 bcm_bst_stat_id_t *id_list,
   1294                                 uint64 *values);
   1295 extern int 
   1296 bcm_tr3_cosq_bst_stat_clear(int unit, 
   1297                             bcm_gport_t gport, 
   1298                             bcm_cos_queue_t cosq, 
   1299                             bcm_bst_stat_id_t bid);
   1300 
   1301 extern int bcm_tr3_cosq_bst_stat_sync(int unit, bcm_bst_stat_id_t bid);
   1302 
   1303 extern int
   1304 bcm_tr3_cosq_gport_mapping_set(int unit, bcm_port_t ing_port,
   1305                               bcm_cos_t int_pri, uint32 flags,
   1306                               bcm_gport_t gport, bcm_cos_queue_t cosq);
   1307 
   1308 extern int
   1309 bcm_tr3_cosq_gport_mapping_get(int unit, bcm_port_t ing_port,
   1310                               bcm_cos_t int_pri, uint32 flags,
   1311                               bcm_gport_t *gport, bcm_cos_queue_t *cosq);
   1312 
   1313 extern int bcm_tr3_cosq_sync(int unit);
   1314 extern void bcm_tr3_cosq_sw_dump(int unit);
   1315 
   1316 extern int bcm_tr3_oam_init(int unit);
   1317 
   1318 extern int bcm_tr3_oam_detach(int unit);
   1319 
   1320 extern int bcm_tr3_oam_group_create(int unit, bcm_oam_group_info_t *group_info);
   1321 
   1322 extern int bcm_tr3_oam_group_get(int unit, bcm_oam_group_t group,
   1323                                  bcm_oam_group_info_t *group_info);
   1324 
   1325 extern int bcm_tr3_oam_group_destroy(int unit, bcm_oam_group_t group);
   1326 
   1327 extern int bcm_tr3_oam_group_destroy_all(int unit);
   1328 
   1329 extern int bcm_tr3_oam_group_traverse(int unit, bcm_oam_group_traverse_cb cb,
   1330                                       void *user_data);
   1331 
   1332 extern int bcm_tr3_oam_endpoint_create(int unit,
   1333                                        bcm_oam_endpoint_info_t *endpoint_info);
   1334 
   1335 extern int bcm_tr3_oam_endpoint_get(int unit, bcm_oam_endpoint_t endpoint,
   1336                                     bcm_oam_endpoint_info_t *endpoint_info);
   1337 
   1338 extern int bcm_tr3_oam_endpoint_destroy(int unit, bcm_oam_endpoint_t endpoint);
   1339 
   1340 extern int bcm_tr3_oam_endpoint_destroy_all(int unit, bcm_oam_group_t group);
   1341 
   1342 extern int bcm_tr3_oam_endpoint_traverse(int unit, bcm_oam_group_t group,
   1343                                          bcm_oam_endpoint_traverse_cb cb,
   1344                                          void *user_data);
   1345 
   1346 extern int bcm_tr3_oam_event_register(int unit, bcm_oam_event_types_t event_types,
   1347                                       bcm_oam_event_cb cb, void *user_data);
   1348 
   1349 extern int bcm_tr3_oam_event_unregister(int unit, bcm_oam_event_types_t event_types,
   1350                                         bcm_oam_event_cb cb);
   1351 
   1352 extern int bcm_tr3_port_esm_eligible_set(int unit, bcm_port_t port, int value);
   1353 extern int bcm_tr3_port_esm_eligible_get(int unit, bcm_port_t port, int *value);
   1354 extern int bcm_tr3_port_extender_type_set(int unit, bcm_port_t port,
   1355         int value);
   1356 extern int bcm_tr3_port_extender_type_get(int unit, bcm_port_t port,
   1357         int *value);
   1358 #if defined(INCLUDE_L3)
   1359 extern int bcm_tr3_port_etag_pcp_de_source_set(int unit, bcm_port_t port,
   1360         int value);
   1361 extern int bcm_tr3_port_etag_pcp_de_source_get(int unit, bcm_port_t port,
   1362         int *value);
   1363 #endif
   1364 
   1365 extern int bcm_tr3_port_ibod_sync_recovery(int unit, bcm_pbmp_t pbmp);
   1366 
   1367 extern int bcm_tr3_port_pps_rate_egress_set(int unit, bcm_port_t port,
   1368                                             uint32 pps, uint32 burst);
   1369 
   1370 extern int bcm_tr3_port_pps_rate_egress_get(int unit, bcm_port_t port,
   1371                                             uint32 *pps, uint32 *burst);
   1372 
   1373 extern int
   1374 bcm_tr3_port_rate_egress_set(int unit, bcm_port_t port,
   1375                      uint32 kbits_sec, uint32 kbits_burst, uint32 mode);
   1376 
   1377 extern int
   1378 bcm_tr3_port_rate_egress_get(int unit, bcm_port_t port,
   1379                         uint32 *kbits_sec, uint32 *kbits_burst, uint32 *mode);
   1380 
   1381 #if defined(INCLUDE_BHH)
   1382 extern int bcm_tr3_oam_loopback_add(int unit, bcm_oam_loopback_t *loopback_p);
   1383 extern int bcm_tr3_oam_loopback_get(int unit, bcm_oam_loopback_t *loopback_p);
   1384 extern int bcm_tr3_oam_loopback_delete(int unit, bcm_oam_loopback_t *loopback_p);
   1385 extern int bcm_tr3_oam_loss_add( int unit, bcm_oam_loss_t *loss_ptr);
   1386 extern int bcm_tr3_oam_loss_delete( int unit, bcm_oam_loss_t *loss_ptr);
   1387 extern int bcm_tr3_oam_loss_get( int unit, bcm_oam_loss_t *loss_ptr);
   1388 extern int bcm_tr3_oam_delay_add( int unit, bcm_oam_delay_t *delay_ptr);
   1389 extern int bcm_tr3_oam_delay_delete( int unit, bcm_oam_delay_t *delay_ptr);
   1390 extern int bcm_tr3_oam_delay_get( int unit, bcm_oam_delay_t *delay_ptr);
   1391 extern int bcm_tr3_oam_csf_add(int unit, bcm_oam_csf_t *csf_ptr);
   1392 extern int bcm_tr3_oam_csf_delete(int unit, bcm_oam_csf_t *csf_ptr);
   1393 extern int bcm_tr3_oam_csf_get(int unit, bcm_oam_csf_t *csf_ptr);
   1394 extern int bcm_tr3_oam_endpoint_faults_multi_get( int unit, uint32 flags,
   1395                           bcm_oam_protocol_type_t endpoint_protocol,
   1396                           uint32 max_endpoints, bcm_oam_endpoint_fault_t *faults,
   1397                           uint32 *endpoint_count);
   1398 extern int bcm_tr3_oam_trunk_ports_add(int unit, bcm_gport_t trunk_gport,
   1399                                        int max_ports, bcm_gport_t *port_arr);
   1400 extern int bcm_tr3_oam_trunk_ports_delete(int unit, bcm_gport_t trunk_gport,
   1401                                           int max_ports, bcm_gport_t *port_arr);
   1402 extern int bcm_tr3_oam_trunk_ports_get(int unit, bcm_gport_t trunk_gport,
   1403                                        int max_ports, bcm_gport_t *port_arr,
   1404                                        int *port_count);
   1405 extern int bcm_tr3_oam_mpls_tp_channel_type_tx_set(int unit,
   1406                                                    bcm_oam_mpls_tp_channel_type_t channel_type,
   1407                                                    int value);
   1408 extern int bcm_tr3_oam_mpls_tp_channel_type_tx_get(int unit,
   1409                                                    bcm_oam_mpls_tp_channel_type_t channel_type,
   1410                                                    int *value);
   1411 #endif /* INCLUDE_BHH */
   1412 
   1413 /* BHH API */
   1414 
   1415 #ifdef BCM_WARM_BOOT_SUPPORT /* BCM_WARM_BOOT_SUPPORT */
   1416 extern int _bcm_tr3_oam_sync(int unit);
   1417 #endif /* !BCM_WARM_BOOT_SUPPORT */
   1418 
   1419 #ifdef BCM_WARM_BOOT_SUPPORT_SW_DUMP /* BCM_WARM_BOOT_SUPPORT_SW_DUMP*/
   1420 extern void _bcm_tr3_oam_sw_dump(int unit);
   1421 #endif /* !BCM_WARM_BOOT_SUPPORT_SW_DUMP */
   1422 
   1423 #if defined(INCLUDE_L3)
   1424 extern int
   1425 _bcm_tr3_mpls_tunnel_switch_frr_entry_key_get(int unit, 
   1426         soc_tunnel_term_t *tnl_entry,
   1427         bcm_mpls_tunnel_switch_t *info);
   1428 extern int
   1429 _bcm_tr3_mpls_tunnel_switch_frr_set(int unit, bcm_mpls_tunnel_switch_t *info);
   1430 
   1431 extern void
   1432 _bcm_tr3_mpls_tunnel_switch_frr_parse(int unit, soc_tunnel_term_t *tnl_entry,
   1433         bcm_mpls_tunnel_switch_t *tnl_info);
   1434 
   1435 extern int
   1436 _bcm_tr3_mpls_tunnel_switch_frr_delete(int unit,
   1437         bcm_mpls_tunnel_switch_t *tnl_info);
   1438 
   1439 extern int
   1440 _bcm_tr3_mpls_tunnel_switch_frr_get(int unit,
   1441         bcm_mpls_tunnel_switch_t *tnl_info, int *index);
   1442 #endif
   1443 extern int bcm_tr3_port_drain_cells(int unit, int port);
   1444 extern int
   1445 _bcm_tr3_port_enqueue_set(int unit, bcm_port_t gport,
   1446                                     int enable);
   1447 extern int
   1448 _bcm_tr3_port_tx_set(int unit, bcm_port_t gport, int enable);
   1449 
   1450 extern int
   1451 _bcm_tr3_port_enqueue_get(int unit, bcm_port_t gport,
   1452                                             int *enable);
   1453 
   1454 extern int bcm_tr3_bfd_l2_hash_dynamic_replace(int unit, void *l2x_entry);
   1455 extern int _bcm_tr3_l2gre_vpn_is_valid( int unit, bcm_vpn_t l2vpn);
   1456 extern int
   1457 bcm_tr3_cosq_pfc_class_mapping_set(int unit,
   1458     bcm_gport_t port,
   1459     int array_count,
   1460     bcm_cosq_pfc_class_mapping_t *mapping_array);
   1461 extern int 
   1462 bcm_tr3_cosq_pfc_class_mapping_get(int unit,
   1463     bcm_gport_t port,
   1464     int array_max,
   1465     bcm_cosq_pfc_class_mapping_t *mapping_array,
   1466     int *array_count);
   1467 int
   1468 _soc_tr3_cosq_axp_node_validate(int unit, int local_port, int level,
   1469     int to_cos);
   1470 
   1471 int
   1472 _bcm_tr3_l2_hash_pending_override(int unit, _bcm_tr3_l2_entries_t *l2_entries);
   1473 #endif /* BCM_TRIUMPH3_SUPPORT  */
   1474 
   1475 #endif /* !_BCM_INT_TRIUMPH3_H_ */