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


      1 /*
      2  * 
      3  * This license is set out in https://raw.githubusercontent.com/Broadcom-Network-Switching-Software/OpenBCM/master/Legal/LICENSE file.
      4  * 
      5  * Copyright 2007-2019 Broadcom Inc. All rights reserved.
      6  *
      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 _bcm_field_th3_tcam_idx_to_slice_offset(int unit, _field_stage_t *stage_fc,
    158                                        _field_entry_t *f_ent, int tcam_idx,
    159                                        int *slice, int *slice_idx);
    160 extern int
    161 _field_th3_qualify_IpFrag_get(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 _field_th3_qualify_IpFrag(int unit, bcm_field_entry_t entry,
    166                       bcm_field_qualify_t qual_id,
    167                       bcm_field_IpFrag_t frag_info);
    168 extern int
    169 _bcm_field_th3_redirect_profile_get(int unit,
    170                                 soc_profile_mem_t **redirect_profile);
    171 extern int
    172 _bcm_field_th3_redirect_profile_ref_count_get(int unit,
    173                                               int index,
    174                                               int *ref_count);
    175 extern int
    176 _bcm_field_th3_redirect_profile_delete(int unit, int index);
    177 
    178 extern int
    179 _bcm_field_th3_qual_class_size_get(int unit, bcm_field_qualify_t qual,
    180                                                    uint16 *class_size);
    181 extern int
    182 _field_th3_class_ctype_supported(int unit,
    183                                  _field_class_type_t ctype);
    184 extern int
    185 _bcm_field_th3_internal_em_group_create(int unit,
    186                                     _field_control_t *fc);
    187 extern int
    188 _bcm_field_th3_em_udf_keygen_mask_get(int unit,
    189                                       _field_group_t *fg,
    190                                       uint16 qid, uint32 *mask);
    191 
    192 #endif
    193 
    194 /* VLAN */
    195 #define BCM_TH3_EGR_ACTION_PROFILE_DEFAULT  \
    196         BCM_TRX_EGR_VLAN_ACTION_PROFILE_DEFAULT
    197 
    198 /* VLAN Port Bitmap Profile Mgmt function declarations */
    199 extern int bcm_tomahawk3_vlan_detach(int unit);
    200 extern int bcm_th3_vlan_port_add(
    201     int unit, bcm_vlan_t vid, pbmp_t pbmp, pbmp_t ubmp, pbmp_t ing_pbmp);
    202 extern int bcm_th3_vlan_port_remove(
    203     int unit, bcm_vlan_t vid, pbmp_t pbmp, pbmp_t ubmp, pbmp_t ing_pbmp);
    204 extern int _bcm_th3_vlan_pbmp_profile_init(int unit);
    205 extern int _bcm_th3_vlan_pbmp_profile_destroy(int unit);
    206 extern int _bcm_th3_vlan_pbmp_profile_entry_add(
    207                 int unit, bcm_pbmp_t port_bitmap, uint32 *index);
    208 extern int _bcm_th3_vlan_pbmp_profile_entry_delete(int unit, uint32 index);
    209 extern int _bcm_th3_vlan_pbmp_profile_entry_get(
    210                 int unit, uint32 index, bcm_pbmp_t *pbmp);
    211 extern int _bcm_th3_vlan_pbmp_index_get(
    212                 int unit, bcm_vlan_t vlan_id, uint32 *index);
    213 extern int _bcm_th3_vlan_pbmp_index_set(
    214                 int unit, bcm_vlan_t vlan_id, uint32 index);
    215 extern int _bcm_th3_vlan_pbmp_port_add(
    216                 int unit, void *entry, bcm_pbmp_t *pbmp);
    217 extern int _bcm_th3_vlan_pbmp_port_remove(
    218                 int unit, void *entry, bcm_pbmp_t *pbmp);
    219 extern int _bcm_th3_vlan_action_profile_init(int unit);
    220 extern int _bcm_th3_vlan_action_profile_detach(int unit);
    221 extern int _bcm_th3_ing_vlan_action_profile_entry_add(int unit,
    222                                       bcm_vlan_action_set_t *action,
    223                                       int *index);
    224 extern void _bcm_th3_ing_vlan_action_profile_entry_get(int unit,
    225                                       bcm_vlan_action_set_t *action,
    226                                       int index);
    227 extern int _bcm_th3_ing_vlan_action_profile_entry_delete(
    228                                                     int unit, uint32 index);
    229 extern int _bcm_th3_egr_vlan_action_profile_entry_add(int unit,
    230                                       bcm_vlan_action_set_t *action,
    231                                       int *index);
    232 extern void _bcm_th3_egr_vlan_action_profile_entry_get(int unit,
    233                                       bcm_vlan_action_set_t *action,
    234                                       uint32 index);
    235 extern int _bcm_th3_egr_vlan_action_profile_entry_delete(
    236                                                     int unit, uint32 index);
    237 extern void _bcm_th3_egr_vlan_action_profile_entry_increment(
    238                                                     int unit, uint32 index);
    239 extern int _bcm_th3_vlan_port_egress_default_action_set(int unit,
    240                             bcm_port_t port, bcm_vlan_action_set_t *action);
    241 extern int _bcm_th3_vlan_port_egress_default_action_get(int unit,
    242                             bcm_port_t port, bcm_vlan_action_set_t *action);
    243 extern int _bcm_th3_vlan_port_egress_default_action_delete(
    244                                                     int unit, bcm_port_t port);
    245 extern int _bcm_th3_vlan_port_default_action_set(int unit,
    246                             bcm_port_t port, bcm_vlan_action_set_t *action);
    247 extern int _bcm_th3_vlan_port_default_action_get(int unit,
    248                             bcm_port_t port, bcm_vlan_action_set_t *action);
    249 extern int _bcm_th3_vlan_port_default_action_delete(int unit, bcm_port_t port);
    250 extern int _bcm_th3_vlan_xconnect_db_init(int unit);
    251 extern int _bcm_th3_vlan_xconnect_db_destroy(int unit);
    252 extern int _bcm_th3_vlan_xconnect_db_entry_add(
    253     int unit, bcm_vlan_t ovlan, uint8 *destt, int *destv);
    254 extern int _bcm_th3_vlan_xconnect_db_entry_delete(int unit, bcm_vlan_t ovlan);
    255 extern int _bcm_th3_vlan_xconnect_db_entry_delete_all(int unit);
    256 extern int _bcm_th3_vlan_xconnect_traverse(
    257     int unit, bcm_vlan_cross_connect_traverse_cb cb, void *user_data);
    258 #if defined(BCM_WARM_BOOT_SUPPORT)
    259 extern int _bcm_th3_vlan_sync(int unit);
    260 extern int bcm_th3_cosq_sync(int unit);
    261 extern int _bcm_th3_vlan_xconnect_db_reinit(int unit);
    262 #endif /* BCM_WARM_BOOT_SUPPORT */
    263 #ifndef BCM_SW_STATE_DUMP_DISABLE
    264 extern void _bcm_th3_vlan_sw_tag_action_profile_dump(int unit);
    265 #endif /* BCM_SW_STATE_DUMP_DISABLE */
    266 
    267 /* L3 */
    268 #ifdef INCLUDE_L3
    269 #define BCM_TH3_L3_ECMP_WEIGHTED_MAX_PATHS (4096)
    270 #define BCM_TH3_L3_ECMP_NON_WEIGHTED_MAX_PATHS (128)
    271 #define BCM_TH3_L3_ECMP_MAX_DLB_GROUPS (128)
    272 #define BCM_TH3_L3_ECMP_DLB_MAX_PATHS (64)
    273 
    274 /* When MAX_ECMP_MODE is configured, 2 entries are used up
    275    for each ECMP group, so need to reserve enough space in this
    276    mode by reserving 2 entries for each group */
    277 
    278 #define BCM_TH3_L3_ECMP_DLB_START(_unit) \
    279                     ((soc_mem_index_count(unit, L3_ECMP_COUNTm)) -   \
    280                      BCM_TH3_L3_ECMP_MAX_DLB_GROUPS)
    281 
    282 #define BCM_TH3_L3_ECMP_DLB_END(_unit) \
    283                     (soc_mem_index_max(unit, L3_ECMP_COUNTm))
    284 
    285 /* ECMP LB mode encodings match hardware values */
    286 #define BCM_TH3_L3_ECMP_LB_MODE_WEIGHTED_256  0x3
    287 #define BCM_TH3_L3_ECMP_LB_MODE_WEIGHTED_512  0x4
    288 #define BCM_TH3_L3_ECMP_LB_MODE_WEIGHTED_1024 0x5
    289 #define BCM_TH3_L3_ECMP_LB_MODE_WEIGHTED_2048 0x6
    290 #define BCM_TH3_L3_ECMP_LB_MODE_WEIGHTED_4096 0x7
    291 
    292 extern int _bcm_th3_l3_ecmp_dlb_get_id(int unit, int ecmp_grp_idx);
    293 
    294 extern int _bcm_th3_l3_egress_ecmp_dlb_resource_validate(int unit, 
    295                                   bcm_l3_egress_ecmp_t *ecmp, int dlb_id);
    296 
    297 extern int
    298 _bcm_th3_l3_ecmp_dlb_port_member_set(int unit, int *port_array, int primary_count,
    299                                      int unique_intfs, int dlb_id);
    300 
    301 extern int
    302 _bcm_th3_l3_ecmp_dlb_nhi_member_set(int unit, int *intf_array, int primary_count,
    303                                     int unique_intfs, int dlb_id);
    304 
    305 extern int
    306 _bcm_th3_l3_ecmp_dlb_port_get(int unit, bcm_l3_egress_ecmp_t *ecmp,
    307                                  int dlb_id, int primary_count, int intf_count,
    308                                  bcm_if_t *intf_array, int *port_array);
    309 
    310 extern int
    311 _bcm_th3_l3_ecmp_dlb_scaling_factor_encode(int unit, int scaling_factor,
    312                                         int *scaling_factor_hw);
    313 
    314 extern int
    315 _bcm_th3_l3_ecmp_dlb_scaling_factor_decode(int unit, int scaling_factor_hw,
    316                                         int *scaling_factor);
    317 
    318 extern int
    319 _bcm_th3_ecmp_dlb_member_recover(int unit);
    320 
    321 extern int
    322 bcm_th3_l3_ecmp_dlb_mon_config_set(int unit,
    323                                    bcm_if_t ecmp_intf,
    324                                    bcm_l3_ecmp_dlb_mon_cfg_t *dlb_mon_cfg);
    325 
    326 extern int
    327 bcm_th3_l3_ecmp_dlb_mon_config_get(int unit,
    328                                    bcm_if_t intf,
    329                                    bcm_l3_ecmp_dlb_mon_cfg_t *dlb_mon_cfg);
    330 
    331 extern int _bcm_th3_l3_tnl_term_entry_init(int unit, bcm_tunnel_terminator_t *tnl_info,
    332                                 soc_tunnel_term_t *entry);
    333 extern int _bcm_th3_l3_tnl_term_add(int unit, uint32 *entry_ptr, bcm_tunnel_terminator_t *tnl_info);
    334 extern int _bcm_th3_l3_tnl_term_entry_parse(int unit, soc_tunnel_term_t *entry,
    335                                   bcm_tunnel_terminator_t *tnl_info);
    336 extern soc_profile_mem_t *_bcm_get_tnl_port_bitmap_profile(int unit);
    337 extern int _bcm_tnl_port_bitmap_profile_init(int unit);
    338 
    339 extern int bcm_th3_mpls_l3_nh_info_get(int unit, bcm_mpls_tunnel_switch_t *info, int nh_index);
    340 extern int
    341 _bcm_th3_mpls_egr_nh_label_set (int unit,
    342                                        bcm_mpls_tunnel_switch_t *info,
    343                                        bcm_l3_egress_t *egr_obj,
    344                                        int label_action,
    345                                        int hw_map_idx,
    346                                        egr_l3_next_hop_entry_t *pegr_nh);
    347 extern int
    348 bcm_th3_mpls_swap_nh_info_add (int unit, bcm_l3_egress_t *egr, int nh_index, uint32 flags);
    349 extern int
    350 bcm_th3_mpls_l3_label_add (int unit, bcm_l3_egress_t *egr, int nh_index, uint32 flags);
    351 
    352 
    353 extern int bcm_th3_mpls_swap_nh_info_get(int unit, bcm_l3_egress_t *egr, int nh_index);
    354 
    355 extern int bcm_th3_failover_init(int unit);
    356 extern int bcm_th3_failover_cleanup(int unit);
    357 extern int bcm_th3_failover_egress_set(int unit, bcm_if_t intf,
    358                                        bcm_l3_egress_t *failover_egr);
    359 extern int bcm_th3_failover_egress_get(int unit, bcm_if_t intf,
    360                                        bcm_l3_egress_t *failover_egr);
    361 extern int bcm_th3_failover_egress_clear(int unit, bcm_if_t intf);
    362 extern int bcm_th3_failover_egress_status_set(int unit, bcm_if_t intf,
    363                                               int enable);
    364 extern int bcm_th3_failover_egress_status_get(int unit, bcm_if_t intf,
    365                                               int *enable);
    366 
    367 #endif /* INCLUDE_L3 */
    368 
    369 extern int bcm_th3_trunk_modify(int unit, bcm_trunk_t tid,
    370         bcm_trunk_info_t *trunk_info, int member_count,
    371         bcm_trunk_member_t *member_array, trunk_private_t *t_info,
    372         int op, bcm_trunk_member_t *member);
    373 extern int bcm_th3_trunk_get(int unit, bcm_trunk_t tid,
    374         bcm_trunk_info_t *trunk_info, int member_max,
    375         bcm_trunk_member_t *member_array, int *member_count,
    376         trunk_private_t *t_info);
    377 extern int bcm_th3_trunk_destroy(int unit, bcm_trunk_t tid,
    378         trunk_private_t *t_info);
    379 extern int bcm_th3_trunk_mcast_join(int unit, bcm_trunk_t tid,
    380         bcm_vlan_t vid, sal_mac_addr_t mac, trunk_private_t *t_info);
    381 
    382 /* Cosq */
    383 
    384 extern int
    385 _bcm_th3_cosq_egress_sp_get(int unit, bcm_gport_t gport, bcm_cos_queue_t cosq,
    386                            int *p_pool_start, int *p_pool_end);
    387 extern int _bcm_th3_cosq_port_inp_pri_to_pg_profile_set(int unit,
    388                     bcm_port_t port, int profile_id);
    389 extern int _bcm_th3_cosq_port_inp_pri_to_pg_profile_get(int unit,
    390                     bcm_port_t port, int *profile_id);
    391 extern int _bcm_th3_cosq_port_pg_profile_set(int unit,
    392                     bcm_port_t port, int profile_id);
    393 extern int _bcm_th3_cosq_port_pg_profile_get(int unit,
    394                     bcm_port_t port, int *profile_id);
    395 
    396 extern void bcm_th3_cosq_sw_dump(int unit);
    397 extern int _bcm_th3_cosq_localport_resolve(int unit, bcm_gport_t gport,
    398                                bcm_port_t *local_port);
    399 extern int bcm_th3_rx_queue_channel_set_test(int unit, bcm_cos_queue_t queue_id,
    400                                   bcm_rx_chan_t chan_id);
    401 extern int _bcm_th3_cosq_port_resolve(int unit, bcm_gport_t gport, bcm_module_t *modid,
    402                           bcm_port_t *port, bcm_trunk_t *trunk_id, int *id,
    403                           int *qnum);
    404 extern int _bcm_th3_cosq_gport_tree_create(int unit, bcm_port_t port);
    405 extern int bcm_th3_cosq_gport_add(int unit, bcm_gport_t port, int numq, uint32 flags,
    406                       bcm_gport_t *gport);
    407 extern int bcm_th3_cosq_gport_delete(int unit, bcm_gport_t gport);
    408 extern int bcm_th3_cosq_gport_detach(int unit, bcm_gport_t sched_gport,
    409                          bcm_gport_t input_gport, bcm_cos_queue_t cosq);
    410 extern int bcm_th3_cosq_gport_child_get(int unit, bcm_gport_t in_gport,
    411                             bcm_cos_queue_t cosq,
    412                             bcm_gport_t *out_gport);
    413 
    414 extern int bcm_th3_cosq_port_sched_set(int unit, bcm_pbmp_t pbm,
    415                                       int mode, const int *weights, int delay);
    416 extern int bcm_th3_cosq_port_sched_get(int unit, bcm_pbmp_t pbm,
    417                                       int *mode, int *weights, int *delay);
    418 extern int bcm_th3_cosq_config_get(int unit, int *numq);
    419 extern int bcm_th3_cosq_config_set(int unit, int numq);
    420 extern int bcm_th3_cosq_gport_attach(int unit, bcm_gport_t input_gport,
    421                          bcm_gport_t parent_gport, bcm_cos_queue_t cosq);
    422 extern int bcm_th3_cosq_gport_sched_set(int unit, bcm_gport_t gport,
    423                            bcm_cos_queue_t cosq, int mode, int weight);
    424 extern int bcm_th3_cosq_gport_sched_get(int unit, bcm_gport_t gport,
    425                             bcm_cos_queue_t cosq, int *mode, int *weight);
    426 extern int bcm_th3_cosq_gport_traverse(int unit, bcm_cosq_gport_traverse_cb cb,
    427                            void *user_data);
    428 extern int bcm_th3_cosq_gport_attach_get(int unit, bcm_gport_t sched_gport,
    429                              bcm_gport_t *input_gport, bcm_cos_queue_t *cosq);
    430 extern int bcm_th3_cosq_sched_weight_max_get(int unit, int mode,
    431                                             int *weight_max);
    432 extern int bcm_th3_cosq_gport_get(int unit, bcm_gport_t gport, bcm_gport_t *port,
    433                                  int *numq, uint32 *flags);
    434 /* WRED API's */
    435 extern int bcm_th3_cosq_discard_port_set(int unit, bcm_port_t port, bcm_cos_queue_t cosq,
    436                              uint32 color, int drop_start, int drop_slope,
    437                              int average_time);
    438 extern int bcm_th3_cosq_discard_port_get(int unit, bcm_port_t port, bcm_cos_queue_t cosq,
    439                              uint32 color, int *drop_start, int *drop_slope,
    440                              int *average_time);
    441 extern int bcm_th3_cosq_discard_set(int unit, uint32 flags);
    442 extern int bcm_th3_cosq_discard_get(int unit, uint32 *flags);
    443 extern int bcm_th3_cosq_gport_discard_set(int unit, bcm_gport_t gport,
    444                               bcm_cos_queue_t cosq,
    445                               bcm_cosq_buffer_id_t buffer,
    446                               bcm_cosq_gport_discard_t *discard);
    447 extern int bcm_th3_cosq_gport_discard_get(int unit, bcm_gport_t gport,
    448                               bcm_cos_queue_t cosq,
    449                               bcm_cosq_buffer_id_t buffer,
    450                               bcm_cosq_gport_discard_t *discard);
    451 extern int bcm_th3_cosq_wred_resolution_entry_create(int unit, int *index);
    452 extern int bcm_th3_cosq_wred_resolution_entry_destroy(int unit, int index);
    453 extern int bcm_th3_cosq_wred_resolution_set(int unit, int index,
    454                                            bcm_cosq_discard_rule_t *rule);
    455 extern int bcm_th3_cosq_wred_resolution_get(int unit, int index, int max,
    456                                            bcm_cosq_discard_rule_t *rule,
    457                                            int *count);
    458 
    459 /* Shaper API's */
    460 /* Utility routines for metering and egress rate control */
    461 #define _BCM_TH3_METER_FLAG_NON_LINEAR           0x01
    462 #define _BCM_TH3_METER_FLAG_PACKET_MODE          0x02
    463 #define _BCM_TH3_METER_FLAG_FP_POLICER           0x04
    464 
    465 extern uint32 _bcm_th3_default_burst_size(int unit, int port, uint32 kbits_sec);
    466 extern uint32 _bcm_th3_bucket_encoding_to_rate(int unit, uint32 refresh_rate,
    467                                 uint32 bucket_max, uint32 granularity,
    468                                 uint32 flags, uint32 *rate_quantum,
    469                                 uint32 *burst_quantum);
    470 extern int _bcm_th3_rate_to_bucket_encoding(int unit, uint32 rate_quantum,
    471                                 uint32 burst_quantum, uint32 flags,
    472                                 int refresh_bitsize, int bucket_max_bitsize,
    473                                 uint32 *refresh_rate, uint32 *bucketsize,
    474                                 uint32 *granularity);
    475 extern int bcm_th3_cosq_gport_bandwidth_set(int unit, bcm_gport_t gport,
    476                                            bcm_cos_queue_t cosq,
    477                                            uint32 kbits_sec_min,
    478                                            uint32 kbits_sec_max,
    479                                            uint32 flags);
    480 extern int bcm_th3_cosq_gport_bandwidth_get(int unit, bcm_gport_t gport,
    481                                            bcm_cos_queue_t cosq,
    482                                            uint32 *kbits_sec_min,
    483                                            uint32 *kbits_sec_max,
    484                                            uint32 *flags);
    485 extern int bcm_th3_cosq_gport_bandwidth_burst_set(int unit, bcm_gport_t gport,
    486                                                  bcm_cos_queue_t cosq,
    487                                                  uint32 kbits_burst_min,
    488                                                  uint32 kbits_burst_max);
    489 extern int bcm_th3_cosq_gport_bandwidth_burst_get(int unit, bcm_gport_t gport,
    490                                                  bcm_cos_queue_t cosq,
    491                                                  uint32 *kbits_burst_min,
    492                                                  uint32 *kbits_burst_max);
    493 extern int bcm_th3_cosq_port_burst_set(int unit, bcm_port_t port,
    494                                       bcm_cos_queue_t cosq, int burst);
    495 extern int bcm_th3_cosq_port_burst_get(int unit, bcm_port_t port,
    496                                       bcm_cos_queue_t cosq,
    497                                       int *burst);
    498 extern int bcm_th3_cosq_port_pps_set(int unit, bcm_port_t port,
    499                                     bcm_cos_queue_t cosq, int pps);
    500 extern int bcm_th3_cosq_port_pps_get(int unit, bcm_port_t port,
    501                                     bcm_cos_queue_t cosq, int *pps);
    502 extern int bcm_th3_port_rate_egress_set(int unit, bcm_port_t port,
    503                                        uint32 bandwidth, uint32 burst,
    504                                        uint32 mode);
    505 extern int bcm_th3_port_rate_egress_get(int unit, bcm_port_t port,
    506                                        uint32 *bandwidth, uint32 *burst,
    507                                        uint32 *mode);
    508 extern int bcmi_th3_device_speed_check(int unit, int speed, int lanes);
    509 extern int bcmi_tomahawk3_reconfigure_ports(int unit,
    510             soc_port_schedule_state_t *port_schedule_state);
    511 
    512 
    513 
    514 extern int bcm_th3_cosq_init(int unit);
    515 extern int bcm_th3_cosq_detach(int unit, int software_state_only);
    516 
    517 typedef enum {
    518     _BCM_TH3_COSQ_INDEX_STYLE_WRED_QUEUE,
    519     _BCM_TH3_COSQ_INDEX_STYLE_WRED_PORT,
    520     _BCM_TH3_COSQ_INDEX_STYLE_WRED_DEVICE,
    521     _BCM_TH3_COSQ_INDEX_STYLE_UCAST_QUEUE,
    522     _BCM_TH3_COSQ_INDEX_STYLE_MCAST_QUEUE,
    523     _BCM_TH3_COSQ_INDEX_STYLE_EGR_POOL,
    524     _BCM_TH3_COSQ_INDEX_STYLE_COS,
    525     _BCM_TH3_COSQ_INDEX_STYLE_COUNT
    526 } _bcm_th3_cosq_index_style_t;
    527 
    528 extern int bcm_th3_cosq_buffer_id_multi_get(int unit, bcm_gport_t gport,
    529                                   bcm_cos_queue_t cosq, bcm_cosq_dir_t direction,
    530                                   int array_max, bcm_cosq_buffer_id_t *buf_id_array,
    531                                   int *array_count);
    532 extern int bcm_th3_cosq_cpu_cosq_enable_set(int unit, bcm_cos_queue_t cosq,
    533                                            int enable);
    534 extern int bcm_th3_cosq_cpu_cosq_enable_get(int unit, bcm_cos_queue_t cosq,
    535                                            int *enable);
    536 extern int bcm_th3_cosq_control_set(int unit, bcm_gport_t gport,
    537                                    bcm_cos_queue_t cosq,
    538                                    bcm_cosq_buffer_id_t buffer,
    539                                    bcm_cosq_control_t type, int arg);
    540 extern int bcm_th3_cosq_control_get(int unit, bcm_gport_t gport,
    541                                    bcm_cos_queue_t cosq,
    542                                    bcm_cosq_buffer_id_t buffer,
    543                                    bcm_cosq_control_t type, int *arg);
    544 extern int
    545 bcm_th3_cosq_service_pool_set(int unit, bcm_service_pool_id_t id,
    546                                       bcm_cosq_service_pool_t cosq_service_pool);
    547 
    548 extern int
    549 bcm_th3_cosq_service_pool_get(int unit, bcm_service_pool_id_t id,
    550                                       bcm_cosq_service_pool_t *cosq_service_pool);
    551 
    552 extern int bcm_th3_cosq_mapping_set(int unit, bcm_port_t gport,
    553                                    bcm_cos_t priority, bcm_cos_queue_t cosq);
    554 extern int bcm_th3_cosq_mapping_get(int unit, bcm_port_t gport,
    555                                    bcm_cos_t priority, bcm_cos_queue_t *cosq);
    556 extern int bcm_th3_cosq_gport_mapping_set(int unit, bcm_port_t ing_port,
    557                                          bcm_cos_t int_pri, uint32 flags,
    558                                          bcm_gport_t gport,
    559                                          bcm_cos_queue_t cosq);
    560 extern int bcm_th3_cosq_gport_mapping_get(int unit, bcm_port_t ing_port,
    561                                          bcm_cos_t int_pri, uint32 flags,
    562                                          bcm_gport_t *gport,
    563                                          bcm_cos_queue_t *cosq);
    564 
    565 extern int _bcm_th3_get_num_ucq(int unit);
    566 extern int _bcm_th3_get_num_mcq(int unit);
    567 extern int _bcm_th3_cosq_pipe_get(int unit, bcm_gport_t gport, int *pipe);
    568 extern int _bcm_th3_mmu_set_shared_size(int unit, int itm, int shd_size);
    569 extern int _bcm_th3_mmu_get_shared_size(int unit, int itm, int *shd_size);
    570 extern int _bcm_th3_cosq_ingress_sp_set_by_pg(int unit, bcm_gport_t gport,
    571                             bcm_cos_queue_t pri_grp, int arg);
    572 extern int _bcm_th3_cosq_ingress_hdrm_pool_set_by_pg(int unit, bcm_gport_t gport,
    573                             bcm_cos_queue_t pri_grp, int arg);
    574 extern int _bcm_th3_cosq_ingress_sp_get_by_pg(int unit, bcm_gport_t gport,
    575                             bcm_cos_queue_t pri_grp, int *arg);
    576 extern int _bcm_th3_cosq_ingress_hdrm_pool_get_by_pg(int unit, bcm_gport_t gport,
    577                             bcm_cos_queue_t pri_grp, int *arg);
    578 extern int _bcm_th3_cosq_egr_pool_set(int unit, bcm_gport_t gport, 
    579                           bcm_cos_queue_t cosq,
    580                           bcm_cosq_buffer_id_t buffer,
    581                           bcm_cosq_control_t type, int arg);
    582 extern int _bcm_th3_cosq_egr_pool_get(int unit, bcm_gport_t gport, 
    583                           bcm_cos_queue_t cosq,
    584                           bcm_cosq_buffer_id_t buffer,
    585                           bcm_cosq_control_t type, int *arg);
    586 extern int _bcm_th3_cosq_index_resolve(int unit, bcm_port_t port, bcm_cos_queue_t cosq,
    587                            _bcm_th3_cosq_index_style_t style,
    588                            bcm_port_t *local_port, int *index, int *count);
    589 extern int _bcm_th3_cosq_ing_res_set(int unit, bcm_gport_t gport, bcm_cos_queue_t cosq,
    590                           bcm_cosq_control_t type, int arg);
    591 extern int _bcm_th3_cosq_ing_res_get(int unit, bcm_gport_t gport, bcm_cos_queue_t cosq,
    592                           bcm_cosq_control_t type, int* arg);
    593 extern int _bcm_th3_cosq_egr_queue_set(int unit, bcm_gport_t gport, bcm_cos_queue_t cosq,
    594                             bcm_cosq_control_t type, int arg);
    595 extern int _bcm_th3_cosq_egr_queue_get(int unit, bcm_gport_t gport, bcm_cos_queue_t cosq,
    596                             bcm_cosq_control_t type, int* arg);
    597 extern int _bcm_th3_cosq_qgroup_limit_enables_set(int unit, bcm_gport_t gport,
    598                                bcm_cos_t cosq, bcm_cosq_control_t type,
    599                                int arg);
    600 extern int _bcm_th3_cosq_qgroup_limit_enables_get(int unit, bcm_gport_t gport,
    601                                bcm_cos_t cosq, bcm_cosq_control_t type,
    602                                int* arg);
    603 extern int _bcm_th3_cosq_qgroup_limit_set(int unit, bcm_gport_t gport, bcm_cos_t cosq,
    604                                bcm_cosq_control_t type, int arg);
    605 extern int _bcm_th3_cosq_qgroup_limit_get(int unit, bcm_gport_t gport, bcm_cos_t cosq,
    606                                bcm_cosq_control_t type, int* arg);
    607 
    608 extern int bcm_th3_cosq_port_bandwidth_get(int unit, bcm_port_t port,
    609                                           bcm_cos_queue_t cosq,
    610                                           uint32 *min_quantum,
    611                                           uint32 *max_quantum,
    612                                           uint32 *burst_quantum,
    613                                           uint32 *flags);
    614 
    615 extern int bcm_th3_cosq_port_bandwidth_set(int unit, bcm_port_t port,
    616                                           bcm_cos_queue_t cosq,
    617                                           uint32 min_quantum,
    618                                           uint32 max_quantum,
    619                                           uint32 burst_quantum,
    620                                           uint32 flags);
    621 
    622 extern int _bcm_th3_cosq_sched_node_child_get(int unit, bcm_gport_t sched_gport,
    623             int *num_uc_child, int *uc_queue, int *num_mc_child, int *mc_queue);
    624 
    625 /* Classifier */
    626 extern int
    627 bcm_th3_cosq_field_classifier_get(
    628     int unit, int classifier_id, bcm_cosq_classifier_t *classifier);
    629 
    630 extern int
    631 bcm_th3_cosq_field_classifier_id_create(
    632     int unit, bcm_cosq_classifier_t *classifier, int *classifier_id);
    633 
    634 extern int
    635 bcm_th3_cosq_field_classifier_id_destroy(
    636     int unit, int classifier_id);
    637 
    638 extern int
    639 bcm_th3_cosq_field_classifier_map_set(
    640     int unit, int classifier_id, int count,
    641     bcm_cos_t *priority_array, bcm_cos_queue_t *cosq_array);
    642 
    643 extern int
    644 bcm_th3_cosq_field_classifier_map_get(
    645     int unit, int classifier_id,
    646     int array_max, bcm_cos_t *priority_array,
    647     bcm_cos_queue_t *cosq_array, int *array_count);
    648 
    649 extern int
    650 bcm_th3_cosq_field_classifier_map_clear(
    651     int unit, int classifier_id);
    652 
    653 /* Flexport */
    654 extern int bcm_th3_cosq_port_detach(int unit, bcm_port_t port);
    655 extern int bcm_th3_cosq_port_attach(int unit, bcm_port_t port);
    656 
    657 /* SW WAR for COSQ */
    658 extern int
    659 _bcm_th3_cosq_field_reserved_classifier_get(int unit,
    660                                             int *classifer_id,
    661                                             bcm_port_t *port);
    662 
    663 extern int
    664 _bcm_field_th3_qualify_udf_get(
    665     int unit,
    666     bcm_field_entry_t eid,
    667     bcm_udf_id_t udf_id,
    668     int max_length,
    669     uint8 *data,
    670     uint8 *mask,
    671     int *actual_length);
    672 
    673 extern int
    674 _bcm_field_th3_qualify_udf(
    675     int unit,
    676     bcm_field_entry_t eid,
    677     bcm_udf_id_t udf_id,
    678     int length,
    679     uint8 *data,
    680     uint8 *mask);
    681 
    682 /* IPMC Repl */
    683 #define TH3_AGG_ID_HW_INVALID 0xff
    684 #define TH3_IPMC_MAX_INTF_COUNT_PER_ENTRY 64
    685 /*
    686  * Max interface count - 256
    687  * Fixed budgetfor mirror copies - 8
    688  * Fixed budget for copy to CPU - 1
    689  * Limit replication copy count 256-8-1
    690  */
    691 #define TH3_IPMC_MAX_INTF_COUNT 247
    692 
    693 extern int
    694 bcm_th3_ipmc_repl_port_attach(int unit, bcm_port_t port);
    695 
    696 extern int
    697 bcm_th3_ipmc_repl_port_detach(int unit, bcm_port_t port);
    698 
    699 extern int
    700 bcm_th3_repl_list_start_ptr_get(int unit, int repl_group, bcm_port_t port,
    701             int *start_ptr);
    702 extern int
    703 bcm_th3_repl_list_start_ptr_set(int unit, int repl_group, bcm_port_t port,
    704                 int start_ptr, int intf_count);
    705 typedef int (*bcm_th3_repl_head_alloc_f)(int, int, int, int *);
    706 extern bcm_th3_repl_head_alloc_f bcm_th3_repl_head_alloc;
    707 
    708 typedef int (*bcm_th3_repl_head_free_f) (int, int, int, int);
    709 extern bcm_th3_repl_head_free_f bcm_th3_repl_head_free;
    710 
    711 #if defined (BCM_FIELD_SUPPORT)
    712 extern int
    713 _bcm_field_th3_qualify_ip_type(int unit, bcm_field_entry_t entry,
    714                                bcm_field_IpType_t type,
    715                                bcm_field_qualify_t qual);
    716 extern int
    717 _bcm_field_th3_qualify_ip_type_encode_get(int unit, uint32 hw_data,
    718                                                      uint32 hw_mask,
    719                                                      bcm_field_IpType_t *type);
    720 extern int
    721 _bcm_field_th3_forwardingType_set(int unit, _field_stage_id_t stage_id,
    722                                  bcm_field_entry_t entry,
    723                                  bcm_field_ForwardingType_t type,
    724                                  uint32 *data, uint32 *mask);
    725 extern int
    726 _bcm_field_th3_forwardingType_get(int unit, _field_stage_id_t stage_id,
    727                                  bcm_field_entry_t entry,
    728                                  uint32 data,  uint32 mask,
    729                                  bcm_field_ForwardingType_t *type);
    730 extern int
    731 _bcm_field_th3_qualify_ip_type(int unit, bcm_field_entry_t entry,
    732                                bcm_field_IpType_t type,
    733                                bcm_field_qualify_t qual);
    734 
    735 extern int
    736 _bcm_field_th3_qualify_ip_type_encode_get(int unit,
    737                                           uint32 hw_data,
    738                                           uint32 hw_mask,
    739                                           bcm_field_IpType_t *type);
    740 
    741 extern int
    742 _field_th3_stage_action_support_check(int unit,
    743                                      unsigned stage,
    744                                      bcm_field_action_t action,
    745                                      int *result);
    746 
    747 extern int _bcm_field_th3_qualify_LoopbackType(
    748         bcm_field_LoopbackType_t loopback_type,
    749         uint32                   *tcam_data,
    750         uint32                   *tcam_mask);
    751 
    752 extern int
    753 _bcm_field_th3_qualify_LoopbackType_get(
    754             uint8                    tcam_data,
    755             uint8                    tcam_mask,
    756             bcm_field_LoopbackType_t *loopback_type);
    757 
    758 extern int
    759 _bcm_field_th3_qualify_TunnelType(bcm_field_TunnelType_t tunnel_type,
    760                                   uint32                 *tcam_data,
    761                                   uint32                 *tcam_mask
    762                                   );
    763 
    764 extern int
    765 _bcm_field_th3_qualify_TunnelType_get(uint8                  tcam_data,
    766                                       uint8                  tcam_mask,
    767                                       bcm_field_TunnelType_t *tunnel_type
    768                                       );
    769 #endif /* BCM_FIELD_SUPPORT */
    770 
    771 /* OOBFC */
    772 extern int
    773 bcm_th3_oob_fc_tx_port_control_set(int unit, bcm_port_t port,
    774                               int status, int dir);
    775 extern int
    776 bcm_th3_oob_fc_tx_port_control_get(int unit, bcm_port_t localport,
    777                                  int *status, int dir);
    778 
    779 extern int
    780 bcm_th3_oob_fc_tx_config_get(int unit,
    781                             bcm_oob_fc_tx_config_t *config);
    782 
    783 extern int
    784 bcm_th3_oob_fc_tx_config_set(int unit,
    785                             bcm_oob_fc_tx_config_t *config);
    786 
    787 
    788 extern int
    789 bcm_th3_oob_fc_tx_info_get(int unit, bcm_oob_fc_tx_info_t *info);
    790 extern int bcm_oob_th3_init(int unit);
    791 
    792 extern int
    793 bcm_th3_oob_port_mapping_init(int unit);
    794 
    795 extern int
    796 bcm_th3_oob_fx_egress_profile_id_set(int unit, bcm_port_t port,
    797                                            int profile_id);
    798 extern
    799 int bcm_th3_oob_fx_egress_profile_id_get(int unit, bcm_port_t port,
    800                                            int *profile_id);
    801 
    802 /* PSTATS */
    803 extern int bcm_th3_pstats_init(int unit);
    804 extern void  bcm_th3_pstats_deinit(int unit);
    805 
    806 /* MMU counter APIs */
    807 extern int bcm_th3_cosq_stat_set(int unit, bcm_gport_t port,
    808                                 bcm_cos_queue_t cosq,
    809                                 bcm_cosq_stat_t stat, uint64 value);
    810 extern int bcm_th3_cosq_stat_get(int unit, bcm_port_t port,
    811                                 bcm_cos_queue_t cosq,
    812                                 bcm_cosq_stat_t stat, int sync_mode,
    813                                 uint64 *value);
    814 extern int
    815 _bcm_field_th3_ddrop_profile_alloc(int unit, _field_entry_t *f_ent,
    816                                    _field_action_t *fa);
    817 extern int
    818 _bcm_field_th3_dredirect_profile_alloc(int unit, _field_entry_t *f_ent,
    819                                    _field_action_t *fa);
    820 
    821 /* ETRAP APIs */
    822 extern int _bcm_th3_etrap_init(int unit);
    823 
    824 extern int _bcm_th3_etrap_detach(int unit);
    825 
    826 extern int
    827 _bcm_th3_etrap_action_match_set(int unit,
    828                                 bcm_flowtracker_elephant_match_action_t action,
    829                                 uint32 match_types,
    830                                 bcm_flowtracker_elephant_match_data_t *match_data);
    831 
    832 extern int
    833 _bcm_th3_etrap_action_match_get(int unit,
    834                                 bcm_flowtracker_elephant_match_action_t action,
    835                                 uint32 *match_types,
    836                                 bcm_flowtracker_elephant_match_data_t *match_data);
    837 
    838 extern int
    839 _bcm_th3_etrap_int_pri_remap_set(int unit,
    840                                  bcm_cos_t int_pri,
    841                                  bcm_cos_t new_int_pri);
    842 
    843 extern int
    844 _bcm_th3_etrap_int_pri_remap_get(int unit,
    845                                  bcm_cos_t int_pri,
    846                                  bcm_cos_t *new_int_pri);
    847 
    848 extern int
    849 _bcm_th3_etrap_control_set(int unit,
    850                            bcm_flowtracker_elephant_control_t type,
    851                            int arg);
    852 
    853 extern int
    854 _bcm_th3_etrap_control_get(int unit,
    855                            bcm_flowtracker_elephant_control_t type,
    856                            int *arg);
    857 
    858 extern int
    859 _bcm_th3_etrap_hash_config_set(int unit,
    860                                bcm_flowtracker_elephant_hash_table_t hash_table,
    861                                int instance_num,
    862                                int bank_num,
    863                                bcm_flowtracker_elephant_hash_type_t hash_type,
    864                                int right_rotate_bits);
    865 
    866 extern int
    867 _bcm_th3_etrap_hash_config_get(int unit,
    868                                bcm_flowtracker_elephant_hash_table_t hash_table,
    869                                int instance_num,
    870                                int bank_num,
    871                                bcm_flowtracker_elephant_hash_type_t *hash_type,
    872                                int *right_rotate_bits);
    873 
    874 /* Warmboot */
    875 extern int bcm_th3_cosq_burst_monitor_dma_config_set(int unit,
    876                                              uint32 host_mem_size,
    877                                              uint32 **host_mem_add);
    878 extern int bcm_th3_cosq_burst_monitor_dma_config_reset(int unit);
    879 extern int bcm_th3_cosq_reinit(int unit);
    880 extern int _bcm_th3_cosq_scheduler_reinit(int unit);
    881 
    882 #endif /* BCM_TOMAHAWK3_SUPPORT  */
    883 
    884 #endif /* !_BCM_INT_TOMAHAWK3_H_ */
    885