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

tomahawk3.h (42575B)


      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:        tomahawk3.h
      8  * Purpose:     Function declarations for Tomahawk3 Internal functions.
      9  */
     10 
     11 #ifndef _BCM_INT_TOMAHAWK3_H_
     12 #define _BCM_INT_TOMAHAWK3_H_
     13 
     14 #include <soc/defs.h>
     15 #include <soc/mem.h>
     16 #include <soc/mcm/memregs.h>
     17 #include <bcm/types.h>
     18 #include <bcm/oob.h>
     19 #include <soc/esw/port.h>
     20 #include <bcm_int/esw/l2.h>
     21 #include <bcm_int/esw/trx.h>
     22 #include <bcm_int/esw/field.h>
     23 #include <bcm_int/tomahawk3_dispatch.h>
     24 #include <soc/tnl_term.h>
     25 #include <bcm_int/esw/mpls.h>
     26 
     27 #if defined(BCM_TOMAHAWK3_SUPPORT)
     28 #include <soc/tomahawk3.h>
     29 
     30 #define _BCM_TH3_PORT_RATE_MIN_KILOBITS 32
     31 #define _BCM_TH3_PORT_RATE_MAX_KILOBITS 400*1000*1000
     32 
     33 extern int _th3_l2_init[BCM_MAX_NUM_UNITS];
     34 /*
     35  * Define:
     36  *  TH3_L2_INIT
     37  * Purpose:
     38  *  Causes a routine to return BCM_E_INIT (or some other
     39  *  error) if L2 software module is not yet initialized.
     40  */
     41 #define TH3_L2_INIT(unit) do {                             \
     42     if (_th3_l2_init[unit] < 0) return _th3_l2_init[unit]; \
     43     if (_th3_l2_init[unit] == 0) return BCM_E_INIT;        \
     44     } while (0);
     45 
     46 extern int bcm_th3_l2_init(int unit);
     47 extern int bcm_th3_l2_term(int unit);
     48 extern int bcm_th3_l2_station_add(int unit, int *station_id,
     49                                   bcm_l2_station_t *station);
     50 extern int bcm_th3_l2_station_get(int unit, int station_id,
     51                                   bcm_l2_station_t *station);
     52 extern int bcm_th3_l2_station_delete(int unit, int station_id);
     53 extern int bcm_th3_l2_station_delete_all(int unit);
     54 extern int bcm_th3_l2_learn_start(int unit, int cfg_interval);
     55 extern int _bcm_l2_match_ctrl_init(int unit);
     56 extern void _bcm_l2_match_ctrl_deinit(int unit);
     57 extern int _bcm_th3_l2_station_control_init(int unit);
     58 extern int _bcm_th3_l2_station_control_deinit(int unit);
     59 extern int _bcm_th3_l2_station_control_get(int unit,
     60                                            _bcm_l2_station_control_t **sc);
     61 extern int bcm_th3_l2_station_size_get(int unit, int *size);
     62 extern int bcm_th3_l2_station_traverse(int unit,
     63                                        bcm_l2_station_traverse_cb trav_fn,
     64                                        void *user_data);
     65 extern int _bcm_th3_l2_station_entry_get(int unit, int sid,
     66                                          _bcm_l2_station_entry_t **ent_p);
     67 extern int _bcm_th3_l2_station_reload(int unit);
     68 extern int _bcm_th3_l2_station_entry_last_sid_set(int unit, int overlay, int sid);
     69 extern int bcm_th3_l2_cache_init(int unit);
     70 extern int bcm_th3_l2_addr_add(int unit, bcm_l2_addr_t *l2addr);
     71 extern int _bcm_th3_l2_hash_dynamic_replace(int unit, l2x_entry_t *l2x_entry);
     72 extern int bcm_th3_l2_addr_delete(int unit, bcm_mac_t mac, bcm_vlan_t vid);
     73 extern int _bcm_th3_l2_addr_get(int unit, sal_mac_addr_t mac, bcm_vlan_t vid,
     74                int check_l2_only, bcm_l2_addr_t *l2addr);
     75 extern int bcm_th3_l2_conflict_get(int unit, bcm_l2_addr_t *addr,
     76                bcm_l2_addr_t *cf_array, int cf_max, int *cf_count);
     77 extern int bcm_th3_l2_addr_get(int unit, sal_mac_addr_t mac, bcm_vlan_t vid,
     78               bcm_l2_addr_t *l2addr);
     79 extern int _bcm_th3_l2_to_l2x(int unit, l2x_entry_t *l2x_entry,
     80                bcm_l2_addr_t *l2addr, int key_only);
     81 extern int _bcm_th3_l2_gport_parse(int unit, bcm_l2_addr_t *l2addr,
     82                _bcm_l2_gport_params_t *params);
     83 extern int _bcm_th3_l2_from_l2x(int unit, bcm_l2_addr_t *l2addr,
     84                l2x_entry_t *l2x_entry);
     85 extern int bcm_th3_mcast_addr_add(int unit, bcm_mcast_addr_t *mcaddr);
     86 extern int bcm_th3_mcast_addr_remove(int unit, sal_mac_addr_t mac,
     87                                      bcm_vlan_t vid);
     88 extern int bcm_th3_mcast_port_get(int unit, sal_mac_addr_t mac, bcm_vlan_t vid,
     89                                   bcm_mcast_addr_t *mcaddr);
     90 extern int bcm_th3_mcast_init(int unit);
     91 extern int _bcm_th3_mcast_detach(int unit);
     92 extern int bcm_th3_mcast_addr_add_w_l2mcindex(int unit,
     93                                               bcm_mcast_addr_t *mcaddr);
     94 extern int bcm_th3_mcast_addr_remove_w_l2mcindex(int unit,
     95                                                  bcm_mcast_addr_t *mcaddr);
     96 extern int bcm_th3_mcast_port_add(int unit, bcm_mcast_addr_t *mcaddr);
     97 extern int bcm_th3_mcast_port_remove(int unit, bcm_mcast_addr_t *mcaddr);
     98 extern void _bcm_th3_l2_register_callback(int unit,
     99                                           int pflags,
    100                                           l2x_entry_t *entry_del,
    101                                           l2x_entry_t *entry_add,
    102                                           void *fn_data);
    103 extern int _bcm_th3_l2_cross_connect_add(
    104     int unit, bcm_vlan_t outer_vlan, uint8 *destt, int *destv);
    105 #if defined(BCM_WARM_BOOT_SUPPORT)
    106 extern int _bcm_th3_l2_wb_sync(int unit);
    107 extern int _bcm_th3_l2_cross_connect_entry_add_all(int unit);
    108 #endif
    109 #ifdef BCM_WARM_BOOT_SUPPORT_SW_DUMP
    110 extern void _bcm_th3_l2_sw_dump(int unit);
    111 #endif /* BCM_WARM_BOOT_SUPPORT_SW_DUMP */
    112 
    113 extern int bcmi_th3_port_fn_drv_init(int unit);
    114 extern int bcmi_th3_port_soc_resource_init(int unit, int nport,
    115                                 bcm_port_resource_t *resource,
    116                                 soc_port_resource_t *soc_resource);
    117 extern int bcmi_th3_port_resource_validate(int unit,
    118                             soc_port_schedule_state_t *port_schedule_state);
    119 extern int bcmi_th3_pre_flexport_tdm(int unit,
    120                             soc_port_schedule_state_t *port_schedule_state);
    121 extern int bcmi_th3_post_flexport_tdm(int unit,
    122                             soc_port_schedule_state_t *port_schedule_state);
    123 extern int bcmi_th3_cdport_update(int unit,
    124                             soc_port_schedule_state_t *port_schedule_state);
    125 extern int bcmi_th3_port_attach_mmu(int unit, int port);
    126 extern int bcmi_th3_port_detach_asf(int unit, bcm_port_t port);
    127 extern int bcmi_th3_port_enable(int unit,
    128                             soc_port_schedule_state_t *port_schedule_state);
    129 extern int bcmi_th3_port_disable(int unit,
    130                             soc_port_schedule_state_t *port_schedule_state);
    131 extern int bcmi_th3_port_speed_1g_update(int unit, bcm_port_t port, int speed);
    132 extern int bcmi_th3_speed_ability_get(int unit, bcm_port_t port,
    133                                       bcm_port_abil_t *mask);
    134 extern int bcmi_th3_tsc_xgxs_reset(int unit, pbmp_t pbmp);
    135 
    136 /* FIELD */
    137 #if defined(BCM_FIELD_SUPPORT)
    138 extern int _bcm_field_th3_common_actions_init(int unit,
    139                                               _field_stage_t *stage_fc);
    140 extern int _bcm_field_th3_extractors_init(int unit, _field_stage_t *stage_fc);
    141 extern int _bcm_field_th3_qualifiers_init(int unit, _field_stage_t *stage_fc);
    142 extern int
    143 _bcm_field_th3_keygen_profile1_entry_pack(int unit, _field_stage_t *stage_fc,
    144                                _field_group_t *fg, int part, soc_mem_t mem,
    145                                ifp_key_gen_program_profile_entry_t *prof1_entry);
    146 extern int
    147 _bcm_field_th3_keygen_em_profile_entry_pack(int unit, _field_stage_t *stage_fc,
    148                                             _field_group_t *fg, int part, soc_mem_t mem,
    149                                             exact_match_key_gen_program_profile_entry_t *prof_entry);
    150 extern int
    151 _field_th3_presel_qualifiers_init(int unit, _field_stage_t *stage_fc);
    152 
    153 extern int
    154 _bcm_field_th3_udf_chunks_to_int_qset(int unit, uint32 udf_chunks_bmap,
    155                                      bcm_field_qset_t *qset);
    156 extern int
    157 _field_th3_qualify_IpFrag_get(int unit, bcm_field_entry_t entry,
    158                           bcm_field_qualify_t qual_id,
    159                           bcm_field_IpFrag_t *frag_info);
    160 extern int
    161 _field_th3_qualify_IpFrag(int unit, bcm_field_entry_t entry,
    162                       bcm_field_qualify_t qual_id,
    163                       bcm_field_IpFrag_t frag_info);
    164 extern int
    165 _bcm_field_th3_redirect_profile_get(int unit,
    166                                 soc_profile_mem_t **redirect_profile);
    167 extern int
    168 _bcm_field_th3_redirect_profile_ref_count_get(int unit,
    169                                               int index,
    170                                               int *ref_count);
    171 extern int
    172 _bcm_field_th3_redirect_profile_delete(int unit, int index);
    173 
    174 extern int
    175 _bcm_field_th3_qual_class_size_get(int unit, bcm_field_qualify_t qual,
    176                                                    uint16 *class_size);
    177 extern int
    178 _field_th3_class_ctype_supported(int unit,
    179                                  _field_class_type_t ctype);
    180 extern int
    181 _bcm_field_th3_internal_em_group_create(int unit,
    182                                     _field_control_t *fc);
    183 extern int
    184 _bcm_field_th3_em_udf_keygen_mask_get(int unit,
    185                                       _field_group_t *fg,
    186                                       uint16 qid, uint32 *mask);
    187 
    188 #endif
    189 
    190 /* VLAN */
    191 #define BCM_TH3_EGR_ACTION_PROFILE_DEFAULT  \
    192         BCM_TRX_EGR_VLAN_ACTION_PROFILE_DEFAULT
    193 
    194 /* VLAN Port Bitmap Profile Mgmt function declarations */
    195 extern int bcm_tomahawk3_vlan_detach(int unit);
    196 extern int bcm_th3_vlan_port_add(
    197     int unit, bcm_vlan_t vid, pbmp_t pbmp, pbmp_t ubmp, pbmp_t ing_pbmp);
    198 extern int bcm_th3_vlan_port_remove(
    199     int unit, bcm_vlan_t vid, pbmp_t pbmp, pbmp_t ubmp, pbmp_t ing_pbmp);
    200 extern int _bcm_th3_vlan_pbmp_profile_init(int unit);
    201 extern int _bcm_th3_vlan_pbmp_profile_destroy(int unit);
    202 extern int _bcm_th3_vlan_pbmp_profile_entry_add(
    203                 int unit, bcm_pbmp_t port_bitmap, uint32 *index);
    204 extern int _bcm_th3_vlan_pbmp_profile_entry_delete(int unit, uint32 index);
    205 extern int _bcm_th3_vlan_pbmp_profile_entry_get(
    206                 int unit, uint32 index, bcm_pbmp_t *pbmp);
    207 extern int _bcm_th3_vlan_pbmp_index_get(
    208                 int unit, bcm_vlan_t vlan_id, uint32 *index);
    209 extern int _bcm_th3_vlan_pbmp_index_set(
    210                 int unit, bcm_vlan_t vlan_id, uint32 index);
    211 extern int _bcm_th3_vlan_pbmp_port_add(
    212                 int unit, void *entry, bcm_pbmp_t *pbmp);
    213 extern int _bcm_th3_vlan_pbmp_port_remove(
    214                 int unit, void *entry, bcm_pbmp_t *pbmp);
    215 extern int _bcm_th3_vlan_action_profile_init(int unit);
    216 extern int _bcm_th3_vlan_action_profile_detach(int unit);
    217 extern int _bcm_th3_ing_vlan_action_profile_entry_add(int unit,
    218                                       bcm_vlan_action_set_t *action,
    219                                       int *index);
    220 extern void _bcm_th3_ing_vlan_action_profile_entry_get(int unit,
    221                                       bcm_vlan_action_set_t *action,
    222                                       int index);
    223 extern int _bcm_th3_ing_vlan_action_profile_entry_delete(
    224                                                     int unit, uint32 index);
    225 extern int _bcm_th3_egr_vlan_action_profile_entry_add(int unit,
    226                                       bcm_vlan_action_set_t *action,
    227                                       int *index);
    228 extern void _bcm_th3_egr_vlan_action_profile_entry_get(int unit,
    229                                       bcm_vlan_action_set_t *action,
    230                                       uint32 index);
    231 extern int _bcm_th3_egr_vlan_action_profile_entry_delete(
    232                                                     int unit, uint32 index);
    233 extern void _bcm_th3_egr_vlan_action_profile_entry_increment(
    234                                                     int unit, uint32 index);
    235 extern int _bcm_th3_vlan_port_egress_default_action_set(int unit,
    236                             bcm_port_t port, bcm_vlan_action_set_t *action);
    237 extern int _bcm_th3_vlan_port_egress_default_action_get(int unit,
    238                             bcm_port_t port, bcm_vlan_action_set_t *action);
    239 extern int _bcm_th3_vlan_port_egress_default_action_delete(
    240                                                     int unit, bcm_port_t port);
    241 extern int _bcm_th3_vlan_port_default_action_set(int unit,
    242                             bcm_port_t port, bcm_vlan_action_set_t *action);
    243 extern int _bcm_th3_vlan_port_default_action_get(int unit,
    244                             bcm_port_t port, bcm_vlan_action_set_t *action);
    245 extern int _bcm_th3_vlan_port_default_action_delete(int unit, bcm_port_t port);
    246 extern int _bcm_th3_vlan_xconnect_db_init(int unit);
    247 extern int _bcm_th3_vlan_xconnect_db_destroy(int unit);
    248 extern int _bcm_th3_vlan_xconnect_db_entry_add(
    249     int unit, bcm_vlan_t ovlan, uint8 *destt, int *destv);
    250 extern int _bcm_th3_vlan_xconnect_db_entry_delete(int unit, bcm_vlan_t ovlan);
    251 extern int _bcm_th3_vlan_xconnect_db_entry_delete_all(int unit);
    252 extern int _bcm_th3_vlan_xconnect_traverse(
    253     int unit, bcm_vlan_cross_connect_traverse_cb cb, void *user_data);
    254 #if defined(BCM_WARM_BOOT_SUPPORT)
    255 extern int _bcm_th3_vlan_sync(int unit);
    256 extern int bcm_th3_cosq_sync(int unit);
    257 extern int _bcm_th3_vlan_xconnect_db_reinit(int unit);
    258 #endif /* BCM_WARM_BOOT_SUPPORT */
    259 #ifndef BCM_SW_STATE_DUMP_DISABLE
    260 extern void _bcm_th3_vlan_sw_tag_action_profile_dump(int unit);
    261 #endif /* BCM_SW_STATE_DUMP_DISABLE */
    262 
    263 /* L3 */
    264 #ifdef INCLUDE_L3
    265 #define BCM_TH3_L3_ECMP_WEIGHTED_MAX_PATHS (4096)
    266 #define BCM_TH3_L3_ECMP_NON_WEIGHTED_MAX_PATHS (128)
    267 #define BCM_TH3_L3_ECMP_MAX_DLB_GROUPS (128)
    268 #define BCM_TH3_L3_ECMP_DLB_MAX_PATHS (64)
    269 
    270 /* When MAX_ECMP_MODE is configured, 2 entries are used up
    271    for each ECMP group, so need to reserve enough space in this
    272    mode by reserving 2 entries for each group */
    273 
    274 #define BCM_TH3_L3_ECMP_DLB_START(_unit) \
    275                     ((soc_mem_index_count(unit, L3_ECMP_COUNTm)) -   \
    276                      BCM_TH3_L3_ECMP_MAX_DLB_GROUPS)
    277 
    278 #define BCM_TH3_L3_ECMP_DLB_END(_unit) \
    279                     (soc_mem_index_max(unit, L3_ECMP_COUNTm))
    280 
    281 /* ECMP LB mode encodings match hardware values */
    282 #define BCM_TH3_L3_ECMP_LB_MODE_WEIGHTED_256  0x3
    283 #define BCM_TH3_L3_ECMP_LB_MODE_WEIGHTED_512  0x4
    284 #define BCM_TH3_L3_ECMP_LB_MODE_WEIGHTED_1024 0x5
    285 #define BCM_TH3_L3_ECMP_LB_MODE_WEIGHTED_2048 0x6
    286 #define BCM_TH3_L3_ECMP_LB_MODE_WEIGHTED_4096 0x7
    287 
    288 extern int _bcm_th3_l3_ecmp_dlb_get_id(int unit, int ecmp_grp_idx);
    289 
    290 extern int _bcm_th3_l3_egress_ecmp_dlb_resource_validate(int unit, 
    291                                   bcm_l3_egress_ecmp_t *ecmp, int dlb_id);
    292 
    293 extern int
    294 _bcm_th3_l3_ecmp_dlb_port_member_set(int unit, int *port_array, int primary_count,
    295                                      int unique_intfs, int dlb_id);
    296 
    297 extern int
    298 _bcm_th3_l3_ecmp_dlb_nhi_member_set(int unit, int *intf_array, int primary_count,
    299                                     int unique_intfs, int dlb_id);
    300 
    301 extern int
    302 _bcm_th3_l3_ecmp_dlb_port_get(int unit, bcm_l3_egress_ecmp_t *ecmp,
    303                                  int dlb_id, int primary_count, int intf_count,
    304                                  bcm_if_t *intf_array, int *port_array);
    305 
    306 extern int
    307 _bcm_th3_l3_ecmp_dlb_scaling_factor_encode(int unit, int scaling_factor,
    308                                         int *scaling_factor_hw);
    309 
    310 extern int
    311 _bcm_th3_l3_ecmp_dlb_scaling_factor_decode(int unit, int scaling_factor_hw,
    312                                         int *scaling_factor);
    313 
    314 extern int
    315 _bcm_th3_ecmp_dlb_member_recover(int unit);
    316 
    317 extern int
    318 bcm_th3_l3_ecmp_dlb_mon_config_set(int unit,
    319                                    bcm_if_t ecmp_intf,
    320                                    bcm_l3_ecmp_dlb_mon_cfg_t *dlb_mon_cfg);
    321 
    322 extern int
    323 bcm_th3_l3_ecmp_dlb_mon_config_get(int unit,
    324                                    bcm_if_t intf,
    325                                    bcm_l3_ecmp_dlb_mon_cfg_t *dlb_mon_cfg);
    326 
    327 extern int _bcm_th3_l3_tnl_term_entry_init(int unit, bcm_tunnel_terminator_t *tnl_info,
    328                                 soc_tunnel_term_t *entry);
    329 extern int _bcm_th3_l3_tnl_term_add(int unit, uint32 *entry_ptr, bcm_tunnel_terminator_t *tnl_info);
    330 extern int _bcm_th3_l3_tnl_term_entry_parse(int unit, soc_tunnel_term_t *entry,
    331                                   bcm_tunnel_terminator_t *tnl_info);
    332 extern soc_profile_mem_t *_bcm_get_tnl_port_bitmap_profile(int unit);
    333 extern int _bcm_tnl_port_bitmap_profile_init(int unit);
    334 
    335 extern int bcm_th3_mpls_l3_nh_info_get(int unit, bcm_mpls_tunnel_switch_t *info, int nh_index);
    336 extern int
    337 _bcm_th3_mpls_egr_nh_label_set (int unit,
    338                                        bcm_mpls_tunnel_switch_t *info,
    339                                        bcm_l3_egress_t *egr_obj,
    340                                        int label_action,
    341                                        int hw_map_idx,
    342                                        egr_l3_next_hop_entry_t *pegr_nh);
    343 extern int
    344 bcm_th3_mpls_swap_nh_info_add (int unit, bcm_l3_egress_t *egr, int nh_index, uint32 flags);
    345 extern int
    346 bcm_th3_mpls_l3_label_add (int unit, bcm_l3_egress_t *egr, int nh_index, uint32 flags);
    347 
    348 
    349 extern int bcm_th3_mpls_swap_nh_info_get(int unit, bcm_l3_egress_t *egr, int nh_index);
    350 
    351 extern int bcm_th3_failover_init(int unit);
    352 extern int bcm_th3_failover_cleanup(int unit);
    353 extern int bcm_th3_failover_egress_set(int unit, bcm_if_t intf,
    354                                        bcm_l3_egress_t *failover_egr);
    355 extern int bcm_th3_failover_egress_get(int unit, bcm_if_t intf,
    356                                        bcm_l3_egress_t *failover_egr);
    357 extern int bcm_th3_failover_egress_clear(int unit, bcm_if_t intf);
    358 extern int bcm_th3_failover_egress_status_set(int unit, bcm_if_t intf,
    359                                               int enable);
    360 extern int bcm_th3_failover_egress_status_get(int unit, bcm_if_t intf,
    361                                               int *enable);
    362 
    363 #endif /* INCLUDE_L3 */
    364 
    365 extern int bcm_th3_trunk_modify(int unit, bcm_trunk_t tid,
    366         bcm_trunk_info_t *trunk_info, int member_count,
    367         bcm_trunk_member_t *member_array, trunk_private_t *t_info,
    368         int op, bcm_trunk_member_t *member);
    369 extern int bcm_th3_trunk_get(int unit, bcm_trunk_t tid,
    370         bcm_trunk_info_t *trunk_info, int member_max,
    371         bcm_trunk_member_t *member_array, int *member_count,
    372         trunk_private_t *t_info);
    373 extern int bcm_th3_trunk_destroy(int unit, bcm_trunk_t tid,
    374         trunk_private_t *t_info);
    375 extern int bcm_th3_trunk_mcast_join(int unit, bcm_trunk_t tid,
    376         bcm_vlan_t vid, sal_mac_addr_t mac, trunk_private_t *t_info);
    377 
    378 /* Cosq */
    379 
    380 extern int
    381 _bcm_th3_cosq_egress_sp_get(int unit, bcm_gport_t gport, bcm_cos_queue_t cosq,
    382                            int *p_pool_start, int *p_pool_end);
    383 extern int _bcm_th3_cosq_port_inp_pri_to_pg_profile_set(int unit,
    384                     bcm_port_t port, int profile_id);
    385 extern int _bcm_th3_cosq_port_inp_pri_to_pg_profile_get(int unit,
    386                     bcm_port_t port, int *profile_id);
    387 extern int _bcm_th3_cosq_port_pg_profile_set(int unit,
    388                     bcm_port_t port, int profile_id);
    389 extern int _bcm_th3_cosq_port_pg_profile_get(int unit,
    390                     bcm_port_t port, int *profile_id);
    391 
    392 extern void bcm_th3_cosq_sw_dump(int unit);
    393 extern int _bcm_th3_cosq_localport_resolve(int unit, bcm_gport_t gport,
    394                                bcm_port_t *local_port);
    395 extern int bcm_th3_rx_queue_channel_set_test(int unit, bcm_cos_queue_t queue_id,
    396                                   bcm_rx_chan_t chan_id);
    397 extern int _bcm_th3_cosq_port_resolve(int unit, bcm_gport_t gport, bcm_module_t *modid,
    398                           bcm_port_t *port, bcm_trunk_t *trunk_id, int *id,
    399                           int *qnum);
    400 extern int _bcm_th3_cosq_gport_tree_create(int unit, bcm_port_t port);
    401 extern int bcm_th3_cosq_gport_add(int unit, bcm_gport_t port, int numq, uint32 flags,
    402                       bcm_gport_t *gport);
    403 extern int bcm_th3_cosq_gport_delete(int unit, bcm_gport_t gport);
    404 extern int bcm_th3_cosq_gport_detach(int unit, bcm_gport_t sched_gport,
    405                          bcm_gport_t input_gport, bcm_cos_queue_t cosq);
    406 extern int bcm_th3_cosq_gport_child_get(int unit, bcm_gport_t in_gport,
    407                             bcm_cos_queue_t cosq,
    408                             bcm_gport_t *out_gport);
    409 
    410 extern int bcm_th3_cosq_port_sched_set(int unit, bcm_pbmp_t pbm,
    411                                       int mode, const int *weights, int delay);
    412 extern int bcm_th3_cosq_port_sched_get(int unit, bcm_pbmp_t pbm,
    413                                       int *mode, int *weights, int *delay);
    414 extern int bcm_th3_cosq_config_get(int unit, int *numq);
    415 extern int bcm_th3_cosq_config_set(int unit, int numq);
    416 extern int bcm_th3_cosq_gport_attach(int unit, bcm_gport_t input_gport,
    417                          bcm_gport_t parent_gport, bcm_cos_queue_t cosq);
    418 extern int bcm_th3_cosq_gport_sched_set(int unit, bcm_gport_t gport,
    419                            bcm_cos_queue_t cosq, int mode, int weight);
    420 extern int bcm_th3_cosq_gport_sched_get(int unit, bcm_gport_t gport,
    421                             bcm_cos_queue_t cosq, int *mode, int *weight);
    422 extern int bcm_th3_cosq_gport_traverse(int unit, bcm_cosq_gport_traverse_cb cb,
    423                            void *user_data);
    424 extern int bcm_th3_cosq_gport_traverse_by_port(int unit, bcm_gport_t port,
    425                                                bcm_cosq_gport_traverse_cb cb,
    426                                                void *user_data);
    427 extern int bcm_th3_cosq_gport_attach_get(int unit, bcm_gport_t sched_gport,
    428                              bcm_gport_t *input_gport, bcm_cos_queue_t *cosq);
    429 extern int bcm_th3_cosq_sched_weight_max_get(int unit, int mode,
    430                                             int *weight_max);
    431 extern int bcm_th3_cosq_gport_get(int unit, bcm_gport_t gport, bcm_gport_t *port,
    432                                  int *numq, uint32 *flags);
    433 /* WRED API's */
    434 extern int bcm_th3_cosq_discard_port_set(int unit, bcm_port_t port, bcm_cos_queue_t cosq,
    435                              uint32 color, int drop_start, int drop_slope,
    436                              int average_time);
    437 extern int bcm_th3_cosq_discard_port_get(int unit, bcm_port_t port, bcm_cos_queue_t cosq,
    438                              uint32 color, int *drop_start, int *drop_slope,
    439                              int *average_time);
    440 extern int bcm_th3_cosq_discard_set(int unit, uint32 flags);
    441 extern int bcm_th3_cosq_discard_get(int unit, uint32 *flags);
    442 extern int bcm_th3_cosq_gport_discard_set(int unit, bcm_gport_t gport,
    443                               bcm_cos_queue_t cosq,
    444                               bcm_cosq_buffer_id_t buffer,
    445                               bcm_cosq_gport_discard_t *discard);
    446 extern int bcm_th3_cosq_gport_discard_get(int unit, bcm_gport_t gport,
    447                               bcm_cos_queue_t cosq,
    448                               bcm_cosq_buffer_id_t buffer,
    449                               bcm_cosq_gport_discard_t *discard);
    450 extern int bcm_th3_cosq_wred_resolution_entry_create(int unit, int *index);
    451 extern int bcm_th3_cosq_wred_resolution_entry_destroy(int unit, int index);
    452 extern int bcm_th3_cosq_wred_resolution_set(int unit, int index,
    453                                            bcm_cosq_discard_rule_t *rule);
    454 extern int bcm_th3_cosq_wred_resolution_get(int unit, int index, int max,
    455                                            bcm_cosq_discard_rule_t *rule,
    456                                            int *count);
    457 
    458 /* Shaper API's */
    459 /* Utility routines for metering and egress rate control */
    460 #define _BCM_TH3_METER_FLAG_NON_LINEAR           0x01
    461 #define _BCM_TH3_METER_FLAG_PACKET_MODE          0x02
    462 #define _BCM_TH3_METER_FLAG_FP_POLICER           0x04
    463 
    464 extern uint32 _bcm_th3_default_burst_size(int unit, int port, uint32 kbits_sec);
    465 extern uint32 _bcm_th3_bucket_encoding_to_rate(int unit, uint32 refresh_rate,
    466                                 uint32 bucket_max, uint32 granularity,
    467                                 uint32 flags, uint32 *rate_quantum,
    468                                 uint32 *burst_quantum);
    469 extern int _bcm_th3_rate_to_bucket_encoding(int unit, uint32 rate_quantum,
    470                                 uint32 burst_quantum, uint32 flags,
    471                                 int refresh_bitsize, int bucket_max_bitsize,
    472                                 uint32 *refresh_rate, uint32 *bucketsize,
    473                                 uint32 *granularity);
    474 extern int bcm_th3_cosq_gport_bandwidth_set(int unit, bcm_gport_t gport,
    475                                            bcm_cos_queue_t cosq,
    476                                            uint32 kbits_sec_min,
    477                                            uint32 kbits_sec_max,
    478                                            uint32 flags);
    479 extern int bcm_th3_cosq_gport_bandwidth_get(int unit, bcm_gport_t gport,
    480                                            bcm_cos_queue_t cosq,
    481                                            uint32 *kbits_sec_min,
    482                                            uint32 *kbits_sec_max,
    483                                            uint32 *flags);
    484 extern int bcm_th3_cosq_gport_bandwidth_burst_set(int unit, bcm_gport_t gport,
    485                                                  bcm_cos_queue_t cosq,
    486                                                  uint32 kbits_burst_min,
    487                                                  uint32 kbits_burst_max);
    488 extern int bcm_th3_cosq_gport_bandwidth_burst_get(int unit, bcm_gport_t gport,
    489                                                  bcm_cos_queue_t cosq,
    490                                                  uint32 *kbits_burst_min,
    491                                                  uint32 *kbits_burst_max);
    492 extern int bcm_th3_cosq_port_burst_set(int unit, bcm_port_t port,
    493                                       bcm_cos_queue_t cosq, int burst);
    494 extern int bcm_th3_cosq_port_burst_get(int unit, bcm_port_t port,
    495                                       bcm_cos_queue_t cosq,
    496                                       int *burst);
    497 extern int bcm_th3_cosq_port_pps_set(int unit, bcm_port_t port,
    498                                     bcm_cos_queue_t cosq, int pps);
    499 extern int bcm_th3_cosq_port_pps_get(int unit, bcm_port_t port,
    500                                     bcm_cos_queue_t cosq, int *pps);
    501 extern int bcm_th3_port_rate_egress_set(int unit, bcm_port_t port,
    502                                        uint32 bandwidth, uint32 burst,
    503                                        uint32 mode);
    504 extern int bcm_th3_port_rate_egress_get(int unit, bcm_port_t port,
    505                                        uint32 *bandwidth, uint32 *burst,
    506                                        uint32 *mode);
    507 extern int bcmi_th3_device_speed_check(int unit, int speed, int lanes);
    508 extern int bcmi_tomahawk3_reconfigure_ports(int unit,
    509             soc_port_schedule_state_t *port_schedule_state);
    510 extern int
    511 bcmi_th3_port_fast_reboot_epc_link_bmap_save(int unit, pbmp_t mask);
    512 
    513 
    514 
    515 extern int bcm_th3_cosq_init(int unit);
    516 extern int bcm_th3_cosq_detach(int unit, int software_state_only);
    517 
    518 typedef enum {
    519     _BCM_TH3_COSQ_INDEX_STYLE_WRED_QUEUE,
    520     _BCM_TH3_COSQ_INDEX_STYLE_WRED_PORT,
    521     _BCM_TH3_COSQ_INDEX_STYLE_WRED_DEVICE,
    522     _BCM_TH3_COSQ_INDEX_STYLE_UCAST_QUEUE,
    523     _BCM_TH3_COSQ_INDEX_STYLE_MCAST_QUEUE,
    524     _BCM_TH3_COSQ_INDEX_STYLE_EGR_POOL,
    525     _BCM_TH3_COSQ_INDEX_STYLE_COS,
    526     _BCM_TH3_COSQ_INDEX_STYLE_COUNT
    527 } _bcm_th3_cosq_index_style_t;
    528 
    529 extern int bcm_th3_cosq_buffer_id_multi_get(int unit, bcm_gport_t gport,
    530                                   bcm_cos_queue_t cosq, bcm_cosq_dir_t direction,
    531                                   int array_max, bcm_cosq_buffer_id_t *buf_id_array,
    532                                   int *array_count);
    533 extern int bcm_th3_cosq_cpu_cosq_enable_set(int unit, bcm_cos_queue_t cosq,
    534                                            int enable);
    535 extern int bcm_th3_cosq_cpu_cosq_enable_get(int unit, bcm_cos_queue_t cosq,
    536                                            int *enable);
    537 extern int bcm_th3_cosq_control_set(int unit, bcm_gport_t gport,
    538                                    bcm_cos_queue_t cosq,
    539                                    bcm_cosq_buffer_id_t buffer,
    540                                    bcm_cosq_control_t type, int arg);
    541 extern int bcm_th3_cosq_control_get(int unit, bcm_gport_t gport,
    542                                    bcm_cos_queue_t cosq,
    543                                    bcm_cosq_buffer_id_t buffer,
    544                                    bcm_cosq_control_t type, int *arg);
    545 extern int
    546 bcm_th3_cosq_service_pool_set(int unit, bcm_service_pool_id_t id,
    547                                       bcm_cosq_service_pool_t cosq_service_pool);
    548 
    549 extern int
    550 bcm_th3_cosq_service_pool_get(int unit, bcm_service_pool_id_t id,
    551                                       bcm_cosq_service_pool_t *cosq_service_pool);
    552 
    553 extern int bcm_th3_cosq_mapping_set(int unit, bcm_port_t gport,
    554                                    bcm_cos_t priority, bcm_cos_queue_t cosq);
    555 extern int bcm_th3_cosq_mapping_get(int unit, bcm_port_t gport,
    556                                    bcm_cos_t priority, bcm_cos_queue_t *cosq);
    557 extern int bcm_th3_cosq_gport_mapping_set(int unit, bcm_port_t ing_port,
    558                                          bcm_cos_t int_pri, uint32 flags,
    559                                          bcm_gport_t gport,
    560                                          bcm_cos_queue_t cosq);
    561 extern int bcm_th3_cosq_gport_mapping_get(int unit, bcm_port_t ing_port,
    562                                          bcm_cos_t int_pri, uint32 flags,
    563                                          bcm_gport_t *gport,
    564                                          bcm_cos_queue_t *cosq);
    565 
    566 extern int _bcm_th3_get_num_ucq(int unit);
    567 extern int _bcm_th3_get_num_mcq(int unit);
    568 extern int _bcm_th3_cosq_pipe_get(int unit, bcm_gport_t gport, int *pipe);
    569 extern int _bcm_th3_mmu_set_shared_size(int unit, int itm, int shd_size);
    570 extern int _bcm_th3_mmu_get_shared_size(int unit, int itm, int *shd_size);
    571 extern int _bcm_th3_cosq_ingress_sp_set_by_pg(int unit, bcm_gport_t gport,
    572                             bcm_cos_queue_t pri_grp, int arg);
    573 extern int _bcm_th3_cosq_ingress_hdrm_pool_set_by_pg(int unit, bcm_gport_t gport,
    574                             bcm_cos_queue_t pri_grp, int arg);
    575 extern int _bcm_th3_cosq_ingress_sp_get_by_pg(int unit, bcm_gport_t gport,
    576                             bcm_cos_queue_t pri_grp, int *arg);
    577 extern int _bcm_th3_cosq_ingress_hdrm_pool_get_by_pg(int unit, bcm_gport_t gport,
    578                             bcm_cos_queue_t pri_grp, int *arg);
    579 extern int _bcm_th3_cosq_egr_pool_set(int unit, bcm_gport_t gport, 
    580                           bcm_cos_queue_t cosq,
    581                           bcm_cosq_buffer_id_t buffer,
    582                           bcm_cosq_control_t type, int arg);
    583 extern int _bcm_th3_cosq_egr_pool_get(int unit, bcm_gport_t gport, 
    584                           bcm_cos_queue_t cosq,
    585                           bcm_cosq_buffer_id_t buffer,
    586                           bcm_cosq_control_t type, int *arg);
    587 extern int _bcm_th3_cosq_index_resolve(int unit, bcm_port_t port, bcm_cos_queue_t cosq,
    588                            _bcm_th3_cosq_index_style_t style,
    589                            bcm_port_t *local_port, int *index, int *count);
    590 extern int _bcm_th3_cosq_ing_res_set(int unit, bcm_gport_t gport, bcm_cos_queue_t cosq,
    591                           bcm_cosq_control_t type, int arg);
    592 extern int _bcm_th3_cosq_ing_res_get(int unit, bcm_gport_t gport, bcm_cos_queue_t cosq,
    593                           bcm_cosq_control_t type, int* arg);
    594 extern int _bcm_th3_cosq_egr_queue_set(int unit, bcm_gport_t gport, bcm_cos_queue_t cosq,
    595                             bcm_cosq_control_t type, int arg);
    596 extern int _bcm_th3_cosq_egr_queue_get(int unit, bcm_gport_t gport, bcm_cos_queue_t cosq,
    597                             bcm_cosq_control_t type, int* arg);
    598 extern int _bcm_th3_cosq_qgroup_limit_enables_set(int unit, bcm_gport_t gport,
    599                                bcm_cos_t cosq, bcm_cosq_control_t type,
    600                                int arg);
    601 extern int _bcm_th3_cosq_qgroup_limit_enables_get(int unit, bcm_gport_t gport,
    602                                bcm_cos_t cosq, bcm_cosq_control_t type,
    603                                int* arg);
    604 extern int _bcm_th3_cosq_qgroup_limit_set(int unit, bcm_gport_t gport, bcm_cos_t cosq,
    605                                bcm_cosq_control_t type, int arg);
    606 extern int _bcm_th3_cosq_qgroup_limit_get(int unit, bcm_gport_t gport, bcm_cos_t cosq,
    607                                bcm_cosq_control_t type, int* arg);
    608 
    609 extern int bcm_th3_cosq_port_bandwidth_get(int unit, bcm_port_t port,
    610                                           bcm_cos_queue_t cosq,
    611                                           uint32 *min_quantum,
    612                                           uint32 *max_quantum,
    613                                           uint32 *burst_quantum,
    614                                           uint32 *flags);
    615 
    616 extern int bcm_th3_cosq_port_bandwidth_set(int unit, bcm_port_t port,
    617                                           bcm_cos_queue_t cosq,
    618                                           uint32 min_quantum,
    619                                           uint32 max_quantum,
    620                                           uint32 burst_quantum,
    621                                           uint32 flags);
    622 
    623 extern int _bcm_th3_cosq_sched_node_child_get(int unit, bcm_gport_t sched_gport,
    624             int *num_uc_child, int *uc_queue, int *num_mc_child, int *mc_queue);
    625 
    626 /* Classifier */
    627 extern int
    628 bcm_th3_cosq_field_classifier_get(
    629     int unit, int classifier_id, bcm_cosq_classifier_t *classifier);
    630 
    631 extern int
    632 bcm_th3_cosq_field_classifier_id_create(
    633     int unit, bcm_cosq_classifier_t *classifier, int *classifier_id);
    634 
    635 extern int
    636 bcm_th3_cosq_field_classifier_id_destroy(
    637     int unit, int classifier_id);
    638 
    639 extern int
    640 bcm_th3_cosq_field_classifier_map_set(
    641     int unit, int classifier_id, int count,
    642     bcm_cos_t *priority_array, bcm_cos_queue_t *cosq_array);
    643 
    644 extern int
    645 bcm_th3_cosq_field_classifier_map_get(
    646     int unit, int classifier_id,
    647     int array_max, bcm_cos_t *priority_array,
    648     bcm_cos_queue_t *cosq_array, int *array_count);
    649 
    650 extern int
    651 bcm_th3_cosq_field_classifier_map_clear(
    652     int unit, int classifier_id);
    653 
    654 /* Flexport */
    655 extern int bcm_th3_cosq_port_detach(int unit, bcm_port_t port);
    656 extern int bcm_th3_cosq_port_attach(int unit, bcm_port_t port);
    657 
    658 /* SW WAR for COSQ */
    659 extern int
    660 _bcm_th3_cosq_field_reserved_classifier_get(int unit,
    661                                             int *classifer_id,
    662                                             bcm_port_t *port);
    663 
    664 extern int
    665 _bcm_field_th3_qualify_udf_get(
    666     int unit,
    667     bcm_field_entry_t eid,
    668     bcm_udf_id_t udf_id,
    669     int max_length,
    670     uint8 *data,
    671     uint8 *mask,
    672     int *actual_length);
    673 
    674 extern int
    675 _bcm_field_th3_qualify_udf(
    676     int unit,
    677     bcm_field_entry_t eid,
    678     bcm_udf_id_t udf_id,
    679     int length,
    680     uint8 *data,
    681     uint8 *mask);
    682 
    683 /* IPMC Repl */
    684 #define TH3_AGG_ID_HW_INVALID 0xff
    685 #define TH3_IPMC_MAX_INTF_COUNT_PER_ENTRY 64
    686 /*
    687  * Max interface count - 256
    688  * Fixed budgetfor mirror copies - 8
    689  * Fixed budget for copy to CPU - 1
    690  * Limit replication copy count 256-8-1
    691  */
    692 #define TH3_IPMC_MAX_INTF_COUNT 247
    693 
    694 extern int
    695 bcm_th3_ipmc_repl_port_attach(int unit, bcm_port_t port);
    696 
    697 extern int
    698 bcm_th3_ipmc_repl_port_detach(int unit, bcm_port_t port);
    699 
    700 extern int
    701 bcm_th3_repl_list_start_ptr_get(int unit, int repl_group, bcm_port_t port,
    702             int *start_ptr);
    703 extern int
    704 bcm_th3_repl_list_start_ptr_set(int unit, int repl_group, bcm_port_t port,
    705                 int start_ptr, int intf_count);
    706 typedef int (*bcm_th3_repl_head_alloc_f)(int, int, int, int *);
    707 extern bcm_th3_repl_head_alloc_f bcm_th3_repl_head_alloc;
    708 
    709 typedef int (*bcm_th3_repl_head_free_f) (int, int, int, int);
    710 extern bcm_th3_repl_head_free_f bcm_th3_repl_head_free;
    711 
    712 #if defined (BCM_FIELD_SUPPORT)
    713 extern int
    714 _bcm_field_th3_qualify_ip_type(int unit, bcm_field_entry_t entry,
    715                                bcm_field_IpType_t type,
    716                                bcm_field_qualify_t qual);
    717 extern int
    718 _bcm_field_th3_qualify_ip_type_encode_get(int unit, uint32 hw_data,
    719                                                      uint32 hw_mask,
    720                                                      bcm_field_IpType_t *type);
    721 extern int
    722 _bcm_field_th3_forwardingType_set(int unit, _field_stage_id_t stage_id,
    723                                  bcm_field_entry_t entry,
    724                                  bcm_field_ForwardingType_t type,
    725                                  uint32 *data, uint32 *mask);
    726 extern int
    727 _bcm_field_th3_forwardingType_get(int unit, _field_stage_id_t stage_id,
    728                                  bcm_field_entry_t entry,
    729                                  uint32 data,  uint32 mask,
    730                                  bcm_field_ForwardingType_t *type);
    731 extern int
    732 _bcm_field_th3_qualify_ip_type(int unit, bcm_field_entry_t entry,
    733                                bcm_field_IpType_t type,
    734                                bcm_field_qualify_t qual);
    735 
    736 extern int
    737 _bcm_field_th3_qualify_ip_type_encode_get(int unit,
    738                                           uint32 hw_data,
    739                                           uint32 hw_mask,
    740                                           bcm_field_IpType_t *type);
    741 
    742 extern int
    743 _field_th3_stage_action_support_check(int unit,
    744                                      unsigned stage,
    745                                      bcm_field_action_t action,
    746                                      int *result);
    747 
    748 extern int _bcm_field_th3_qualify_LoopbackType(
    749         bcm_field_LoopbackType_t loopback_type,
    750         uint32                   *tcam_data,
    751         uint32                   *tcam_mask);
    752 
    753 extern int
    754 _bcm_field_th3_qualify_LoopbackType_get(
    755             uint8                    tcam_data,
    756             uint8                    tcam_mask,
    757             bcm_field_LoopbackType_t *loopback_type);
    758 
    759 extern int
    760 _bcm_field_th3_qualify_TunnelType(bcm_field_TunnelType_t tunnel_type,
    761                                   uint32                 *tcam_data,
    762                                   uint32                 *tcam_mask
    763                                   );
    764 
    765 extern int
    766 _bcm_field_th3_qualify_TunnelType_get(uint8                  tcam_data,
    767                                       uint8                  tcam_mask,
    768                                       bcm_field_TunnelType_t *tunnel_type
    769                                       );
    770 #endif /* BCM_FIELD_SUPPORT */
    771 
    772 /* OOBFC */
    773 extern int
    774 bcm_th3_oob_fc_tx_port_control_set(int unit, bcm_port_t port,
    775                               int status, int dir);
    776 extern int
    777 bcm_th3_oob_fc_tx_port_control_get(int unit, bcm_port_t localport,
    778                                  int *status, int dir);
    779 
    780 extern int
    781 bcm_th3_oob_fc_tx_config_get(int unit,
    782                             bcm_oob_fc_tx_config_t *config);
    783 
    784 extern int
    785 bcm_th3_oob_fc_tx_config_set(int unit,
    786                             bcm_oob_fc_tx_config_t *config);
    787 
    788 
    789 extern int
    790 bcm_th3_oob_fc_tx_info_get(int unit, bcm_oob_fc_tx_info_t *info);
    791 extern int bcm_oob_th3_init(int unit);
    792 
    793 extern int
    794 bcm_th3_oob_port_mapping_init(int unit);
    795 
    796 extern int
    797 bcm_th3_oob_fx_egress_profile_id_set(int unit, bcm_port_t port,
    798                                            int profile_id);
    799 extern
    800 int bcm_th3_oob_fx_egress_profile_id_get(int unit, bcm_port_t port,
    801                                            int *profile_id);
    802 
    803 /* PSTATS */
    804 extern int bcm_th3_pstats_init(int unit);
    805 extern void  bcm_th3_pstats_deinit(int unit);
    806 
    807 /* MMU counter APIs */
    808 extern int bcm_th3_cosq_stat_set(int unit, bcm_gport_t port,
    809                                 bcm_cos_queue_t cosq,
    810                                 bcm_cosq_stat_t stat, uint64 value);
    811 extern int bcm_th3_cosq_stat_get(int unit, bcm_port_t port,
    812                                 bcm_cos_queue_t cosq,
    813                                 bcm_cosq_stat_t stat, int sync_mode,
    814                                 uint64 *value);
    815 extern int
    816 _bcm_field_th3_ddrop_profile_alloc(int unit, _field_entry_t *f_ent,
    817                                    _field_action_t *fa);
    818 extern int
    819 _bcm_field_th3_dredirect_profile_alloc(int unit, _field_entry_t *f_ent,
    820                                    _field_action_t *fa);
    821 
    822 /* ETRAP APIs */
    823 extern int _bcm_th3_etrap_init(int unit);
    824 
    825 extern int _bcm_th3_etrap_detach(int unit);
    826 
    827 extern int
    828 _bcm_th3_etrap_action_match_set(int unit,
    829                                 bcm_flowtracker_elephant_match_action_t action,
    830                                 uint32 match_types,
    831                                 bcm_flowtracker_elephant_match_data_t *match_data);
    832 
    833 extern int
    834 _bcm_th3_etrap_action_match_get(int unit,
    835                                 bcm_flowtracker_elephant_match_action_t action,
    836                                 uint32 *match_types,
    837                                 bcm_flowtracker_elephant_match_data_t *match_data);
    838 
    839 extern int
    840 _bcm_th3_etrap_int_pri_remap_set(int unit,
    841                                  bcm_cos_t int_pri,
    842                                  bcm_cos_t new_int_pri);
    843 
    844 extern int
    845 _bcm_th3_etrap_int_pri_remap_get(int unit,
    846                                  bcm_cos_t int_pri,
    847                                  bcm_cos_t *new_int_pri);
    848 
    849 extern int
    850 _bcm_th3_etrap_control_set(int unit,
    851                            bcm_flowtracker_elephant_control_t type,
    852                            int arg);
    853 
    854 extern int
    855 _bcm_th3_etrap_control_get(int unit,
    856                            bcm_flowtracker_elephant_control_t type,
    857                            int *arg);
    858 
    859 extern int
    860 _bcm_th3_etrap_hash_config_set(int unit,
    861                                bcm_flowtracker_elephant_hash_table_t hash_table,
    862                                int instance_num,
    863                                int bank_num,
    864                                bcm_flowtracker_elephant_hash_type_t hash_type,
    865                                int right_rotate_bits);
    866 
    867 extern int
    868 _bcm_th3_etrap_hash_config_get(int unit,
    869                                bcm_flowtracker_elephant_hash_table_t hash_table,
    870                                int instance_num,
    871                                int bank_num,
    872                                bcm_flowtracker_elephant_hash_type_t *hash_type,
    873                                int *right_rotate_bits);
    874 
    875 /* Warmboot */
    876 extern int bcm_th3_cosq_burst_monitor_dma_config_set(int unit,
    877                                              uint32 host_mem_size,
    878                                              uint32 **host_mem_add);
    879 extern int bcm_th3_cosq_burst_monitor_dma_config_get(int unit,
    880                                              uint32 *host_mem_size,
    881                                              uint32 **host_mem_add);
    882 extern int bcm_th3_cosq_burst_monitor_dma_config_reset(int unit);
    883 extern int bcm_th3_cosq_reinit(int unit);
    884 extern int _bcm_th3_cosq_scheduler_reinit(int unit);
    885 #if defined(BCM_WARM_BOOT_SUPPORT)
    886 extern int _bcm_th3_tunnel_reinit(int unit, uint8 **tnl_scache);
    887 extern int _bcm_th3_tunnel_warm_boot_alloc(int unit, uint32 *sz);
    888 extern int _bcm_th3_tunnel_sync(int unit, uint8 **tnl_scache);
    889 #endif
    890 
    891 #endif /* BCM_TOMAHAWK3_SUPPORT  */
    892 
    893 #endif /* !_BCM_INT_TOMAHAWK3_H_ */
    894