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

tomahawk.h (78728B)


      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:        tomahawk.h
      8  * Purpose:     Function declarations for Tomahawk Internal functions.
      9  */
     10 
     11 #ifndef _BCM_INT_TOMAHAWK_H_
     12 #define _BCM_INT_TOMAHAWK_H_
     13 
     14 #include <soc/defs.h>
     15 
     16 #if defined(BCM_TOMAHAWK_SUPPORT)
     17 
     18 #include <bcm/types.h>
     19 #include <bcm_int/esw/firebolt.h>
     20 #include <bcm_int/esw/flex_ctr.h>
     21 #include <bcm_int/esw/cosq.h>
     22 #include <bcm_int/esw/ipmc.h>
     23 #include <bcm_int/esw/keygen_api.h>
     24 
     25 #define TH_AGG_ID_INVALID (-1)
     26 #define TH_AGG_ID_HW_INVALID (0x3F)
     27 /* ECMP mode encodings match hardware values */
     28 #define TH_ECMP_MODE_SINGLE 0x1
     29 #define TH_ECMP_MODE_SINGLE_LOW_LATENCY 0x0
     30 #define TH_ECMP_MODE_HIERARCHICAL 0x3
     31 
     32 #define RH_OPT_MAX_PATHS(u) (((SOC_IS_TOMAHAWK3(u)) || (SOC_IS_TOMAHAWK2(u))) \
     33                             ? 32768: 16384)
     34 #define RH_OPT_MIN_PATHS(u) 64
     35 
     36 /* ECMP LB mode encodings match hardware values */
     37 #define BCM_TH_L3_ECMP_LB_MODE_RH 0x01
     38 #define BCM_TH_L3_ECMP_LB_MODE_RANDOM 0x2
     39 #define BCM_TH_L3_ECMP_LB_MODE_RR 0x3
     40 
     41 #ifdef BCM_WARM_BOOT_SUPPORT
     42 /* ECMP member table size */
     43 #define RH_ECMP_MEMBER_TBL_MAX(u)    (SOC_IS_TOMAHAWK2(u) ? 32768: 16384)
     44 #endif /* BCM_WARM_BOOT_SUPPORT */
     45 
     46 #define L3_EXT_VIEW_INVALID_VNTAG_ETAG_PROFILE 0
     47 #define VNTAG_ACTIONS_NIV   1
     48 #define VNTAG_ACTIONS_ETAG  2
     49 
     50 #define TH_MGMT_PORT0_NUM 129  /* Management Port 0 Physical Number */
     51 #define TH_MGMT_PORT1_NUM 131  /* Management Port 1 Physical Number */
     52 
     53 #if defined(BCM_FIELD_SUPPORT)
     54 #define _FP_TCAM_IPBMP_SIZE(unit) _field_fp_tcam_ipbmp_size(unit)
     55 extern int _field_fp_tcam_ipbmp_size(int unit);
     56 extern int _bcm_field_th_group_lt_prio_update(int unit, _field_group_t *fg,
     57                                               int priority);
     58 extern int _bcm_field_th_group_status_calc(int unit, _field_group_t *fg);
     59 extern int _bcm_field_th_group_enable_set(int unit, bcm_field_group_t group, uint32 enable);
     60 extern int _bcm_field_th_group_free_unused_slices(int unit,
     61                                                   _field_stage_t *stage_fc,
     62                                                   _field_group_t *fg);
     63 extern int _bcm_field_th_group_add_slice_validate(int unit,
     64                                                   _field_stage_t *stage_fc,
     65                                                   _field_group_t *fg,
     66                                                   int slice_id);
     67 extern int _bcm_field_th_entry_part_tcam_idx_get(int unit,
     68                                                  _field_entry_t *f_ent,
     69                                                  uint32 idx_pri,
     70                                                  uint8 entry_part,
     71                                                  int *idx_out);
     72 extern int _bcm_field_th_slice_offset_to_tcam_idx(int unit,
     73                                        _field_stage_t *stage_fc,
     74                                        int instance, int slice, int slice_idx,
     75                                        int *tcam_idx);
     76 extern int _bcm_field_th_tcam_idx_to_slice_offset(int unit, 
     77                                        _field_stage_t *stage_fc,
     78                                        _field_entry_t *f_ent, int tcam_idx,
     79                                        int *slice, int *slice_idx);
     80 extern int _bcm_field_th_tcam_part_to_slice_number(int entry_part,
     81                                                    uint32 group_flags,
     82                                                    uint8 *slice_number);
     83 extern int _bcm_field_th_tcam_part_to_entry_flags(int unit, int entry_part,
     84                                                   uint32 group_flags,
     85                                                   uint32 *entry_flags);
     86 extern int _bcm_field_th_entry_flags_to_tcam_part (int unit, uint32 entry_flags,
     87                                                    uint32 group_flags, 
     88                                                    uint8 *entry_part);
     89 extern int _bcm_field_th_lt_tcam_idx_to_slice_offset(int unit,
     90                                                      _field_stage_t *stage_fc,
     91                                                      int instance, int tcam_idx,
     92                                                      int *slice,
     93                                                      int *slice_idx);
     94 extern int _bcm_field_th_lt_tcam_entry_get(int unit,
     95                                        _field_group_t *fg,
     96                                        _field_lt_entry_t *lt_f_ent);
     97 extern int _bcm_field_th_lt_slice_offset_to_tcam_index(int unit,
     98                                                        _field_stage_t *stage_fc,
     99                                                        int instance, int slice,
    100                                                        int slice_idx,
    101                                                        int *tcam_idx);
    102 extern int _bcm_field_th_entry_tcam_parts_count(int unit, uint32 group_flags,
    103                                                 int *part_count);
    104 extern int _bcm_field_th_lt_entry_tcam_parts_count(int unit,
    105                                                   _field_stage_id_t stage_id,
    106                                                   uint32 group_flags,
    107                                                   int *part_count);
    108 extern int _bcm_field_th_group_deinit(int unit, _field_group_t *fg);
    109 extern int _bcm_field_th_group_add(int unit, uint32 flags, bcm_field_group_config_t *gc);
    110 extern int _bcm_field_th_stages_delete(int unit, _field_control_t *fc);
    111 extern int _bcm_field_th_stages_add(int unit, _field_control_t *fc);
    112 extern int _bcm_field_th_stage_init(int unit, _field_stage_t *stage_fc);
    113 extern int _bcm_field_th_init(int unit, _field_control_t *fc);
    114 extern int _field_th_keygen_profiles_init(int unit, _field_stage_t *stage_fc,
    115                                           _field_control_t *fc);
    116 extern int _bcm_field_th_multi_pipe_counter_mem_get(int unit,
    117                                          _field_stage_t *stage_fc,
    118                                          soc_mem_t *counter_mem);
    119 extern int _bcm_field_th_counter_multi_pipe_collect_init(int unit,
    120                                                       _field_control_t *fc,
    121                                                       _field_stage_t *stage_fc);
    122 extern int _bcm_field_th_val_set(uint32 *p_fn_data, uint32 *p_data,
    123                                        uint32 offset, uint32 width);
    124 extern int _bcm_field_th_val_get(uint32 *p_fn_data, uint32 *p_data,
    125                                        uint32 offset, uint32 width);
    126 extern int _bcm_field_th_profile1_action_set(int unit, _field_entry_t *f_ent,
    127                                          _field_action_t *fa, uint32 *entbuf);
    128 extern int _bcm_field_th_profile2_action_set(int unit, _field_entry_t *f_ent,
    129                                          _field_action_t *fa, uint32 *entbuf);
    130 extern int _bcm_field_th_misc_action_set(int unit, _field_entry_t *f_ent,
    131                                      _field_action_t *fa, uint32 *entbuf);
    132 extern int _bcm_field_th_l3swl2change_action_set(int unit,
    133                                                  _field_entry_t *f_ent,
    134                                                  _field_action_t *fa,
    135                                                  uint32 *entbuf);
    136 extern int _bcm_field_th_redirect_action_set(int unit, _field_entry_t *f_ent,
    137                                          _field_action_t *fa, uint32 *entbuf);
    138 extern int _field_th_ingress_policer_action_set(int unit, 
    139                                                 _field_entry_t *f_ent,
    140                                                           uint32 *buf);
    141 extern int
    142 _bcm_field_th_stat_attach(int unit,
    143                           bcm_field_group_t field_group,
    144                           uint32 flex_sid, uint32 *stat_id);
    145 extern int _bcm_field_th_action_params_check(int unit, 
    146                                              _field_entry_t  *f_ent,
    147                                              _field_action_t *fa);
    148 extern int _field_calc_group_aset_size(int unit, 
    149                                        _field_group_t *fg, uint16 *aset_size);
    150 extern int _field_group_check_action_profile(int unit,
    151                                              _field_group_t *fg, uint16 *new_action_profile);
    152 extern int _bcm_field_qset_update_with_internal_actions(int unit,
    153                                                         _field_group_t *fg);
    154 extern int _bcm_field_th_action_support_check(int                unit,
    155                                               _field_entry_t     *f_ent,
    156                                               bcm_field_action_t action,
    157                                               int                *result);
    158 extern int _bcm_field_th_action_set(int unit, soc_mem_t mem, _field_entry_t *f_ent,
    159                                     int tcam_idx, _field_action_t *fa, uint32 *entbuf);
    160 extern int _bcm_field_th_selcodes_install(int unit,
    161                                           _field_group_t *fg,
    162                                           uint8 slice_numb,
    163                                           bcm_pbmp_t pbmp,
    164                                           int selcode_index);
    165 extern int _bcm_field_th_scache_sync(int unit,
    166                                      _field_control_t *fc,
    167                                      _field_stage_t   *stage_fc);
    168 
    169 extern int _bcm_field_th_policer_meter_hw_free(int unit, 
    170                                                _field_entry_t *f_ent,
    171                                               _field_entry_policer_t *f_ent_pl);
    172 extern int _bcm_field_th_policer_meter_hw_free_old(int unit,
    173                                                _field_entry_t *f_ent,
    174                                               _field_entry_policer_t *f_ent_pl);
    175 extern int _bcm_field_th_policer_mem_get(int unit, _field_stage_t *stage_fc,
    176         int instance, soc_mem_t *policer_mem);
    177 extern int _bcm_field_th_group_oper_mode_set(int unit,
    178                                              bcm_field_qualify_t stage,
    179                                              bcm_field_group_oper_mode_t mode);
    180 
    181 extern int _bcm_field_th_group_oper_mode_get(int unit,
    182                                              bcm_field_qualify_t stage,
    183                                              bcm_field_group_oper_mode_t *mode);
    184 
    185 extern int _bcm_field_wb_group_oper_mode_set(int unit,
    186                                              bcm_field_qualify_t stage,
    187                                              _field_stage_t **stage_fc,
    188                                              bcm_field_group_oper_mode_t mode);
    189 
    190 extern int _bcm_field_th_source_class_mode_set(int unit,
    191                                              bcm_field_stage_t stage,
    192                                              bcm_pbmp_t pbmp,
    193                                              bcm_field_src_class_mode_t mode);
    194 
    195 extern int _bcm_field_th_source_class_mode_get(int unit,
    196                                              bcm_field_stage_t stage,
    197                                              bcm_pbmp_t pbmp,
    198                                              bcm_field_src_class_mode_t *mode);
    199 
    200 
    201 extern int _bcm_field_th_qualify_MixedSrcClassId(int unit,
    202                                              bcm_field_entry_t entry,
    203                                              bcm_pbmp_t pbmp,
    204                                              bcm_field_src_class_t data,
    205                                              bcm_field_src_class_t mask);
    206 
    207 extern int _bcm_field_th_qualify_MixedSrcClassId_get(int unit,
    208                                              bcm_field_entry_t entry,
    209                                              bcm_pbmp_t pbmp,
    210                                              uint32 hw_data,
    211                                              uint32 hw_mask,
    212                                              bcm_field_src_class_t *data,
    213                                              bcm_field_src_class_t *mask);
    214 
    215 extern int _bcm_field_th_qualifier_MixedSrcClassId_delete(int unit,
    216                                              bcm_field_entry_t entry);
    217 
    218 extern int _bcm_field_th_entry_install(int unit, _field_entry_t *f_ent,
    219                                        int tcam_idx);
    220 
    221 extern int _bcm_field_th_entry_reinstall(int unit, _field_entry_t *f_ent,
    222                                          int tcam_idx);
    223 
    224 extern int _bcm_field_th_qual_tcam_key_mask_get(int unit,
    225                                                 _field_entry_t *f_ent,
    226                                                 _field_tcam_t *tcam);
    227 
    228 extern int
    229 _bcm_field_th_entry_remove(int unit, _field_entry_t *f_ent, int tcam_idx);
    230 
    231 extern int
    232 _bcm_field_th_entry_move(int unit, _field_entry_t *f_ent, int parts_count,
    233                          int *tcam_idx_old, int *tcam_idx_new);
    234 extern int
    235 _bcm_field_th_entry_enable_set(int unit, _field_entry_t *f_ent,
    236                                int enable_flag);
    237 extern int
    238 _bcm_field_th_slice_enable_set(int unit, _field_group_t *fg,
    239                                _field_slice_t *fs, uint8 enable);
    240 extern int _bcm_field_th_stat_action_set(int unit, _field_entry_t *f_ent,
    241                                          soc_mem_t mem, int tcam_idx,
    242                                          uint32 *buf);
    243 extern int
    244 _bcm_field_th_forwardingType_set(int unit, _field_stage_id_t stage_id,
    245                                  bcm_field_entry_t entry,
    246                                  bcm_field_ForwardingType_t type,
    247                                  uint32 *data, uint32 *mask);
    248 extern int 
    249 _bcm_field_th_forwardingType_get(int unit, _field_stage_id_t stage_id,
    250                                  bcm_field_entry_t entry,
    251                                  uint32 data,  uint32 mask,
    252                                  bcm_field_ForwardingType_t *type);
    253 extern int
    254 _bcm_field_th_qualify_class(int unit,
    255                             bcm_field_entry_t entry,
    256                             bcm_field_qualify_t qual,
    257                             uint32 *data,
    258                             uint32 *mask);
    259 extern int 
    260 _bcm_field_th_qualify_svp(int unit, bcm_field_entry_t entry, 
    261                           bcm_field_qualify_t qual, 
    262                           uint32 data, uint32 mask,
    263                           int svp_valid);
    264 extern int
    265 _bcm_field_th_qualify_dvp(int unit, bcm_field_entry_t entry, 
    266                            bcm_field_qualify_t qual, 
    267                            uint32 data, uint32 mask,
    268                            int dvp_valid);
    269 
    270 extern int
    271 _bcm_field_th_qualify_trunk(int unit,
    272                             bcm_field_entry_t entry,
    273                             bcm_field_qualify_t qual,
    274                             bcm_trunk_t data, bcm_trunk_t mask);
    275 
    276 int
    277 _bcm_field_th_qualify_trunk_get(int unit,
    278                                 bcm_field_entry_t entry,
    279                                 bcm_field_qualify_t qual,
    280                                 bcm_trunk_t *data, bcm_trunk_t *mask);
    281 extern int
    282 _bcm_field_th_qualify_set(int unit, bcm_field_entry_t entry,
    283                           int qual, uint32 *data, uint32 *mask,
    284                           uint8 flags);
    285 extern int
    286 _bcm_field_th_qual_value_set(int unit, _bcm_field_qual_offset_t *q_offset, 
    287                              _field_entry_t *f_ent, 
    288                              uint32 *p_data, uint32 *p_mask);
    289 extern int
    290 _bcm_field_th_find_empty_slice(int unit, _field_group_t *fg,
    291                                _field_slice_t **fs_ptr);
    292 extern int
    293 _bcm_field_th_qual_offset_get(int unit, _field_entry_t *f_ent, int qid, 
    294                              int entry_part, _bcm_field_qual_offset_t **offset);
    295 extern int
    296 _bcm_field_th_entry_qualifier_key_get(int unit, 
    297                                       bcm_field_entry_t entry, 
    298                                       int qual_id, 
    299                                       _bcm_field_qual_data_t q_data,
    300                                       _bcm_field_qual_data_t q_mask);
    301 extern int 
    302 _bcm_field_th_qualifier_delete(int unit, bcm_field_entry_t entry, 
    303                                bcm_field_qualify_t qual_id);
    304 extern int _bcm_field_th_qualify_InPorts(int unit,
    305                                          bcm_field_entry_t entry,
    306                                          bcm_field_qualify_t qual,
    307                                          bcm_pbmp_t data, 
    308                                          bcm_pbmp_t mask);
    309 extern int
    310 _bcm_field_th_qualify_VlanTranslationHit(int               unit,
    311                                           bcm_field_entry_t entry,
    312                                           uint8             *data,
    313                                           uint8             *mask);
    314 extern int
    315 _field_th_group_lt_slice_validate(int unit,
    316                                   _field_stage_t *stage_fc,
    317                                   _field_group_t *fg,
    318                                   int slice_id,
    319                                   _field_lt_slice_t *lt_fs);
    320 extern int
    321 _bcm_field_th_priority_group_get_next(int unit,
    322                                       int instance,
    323                                       _field_stage_id_t stage_id,
    324                                       int priority,
    325                                       _field_group_t **curr_group,
    326                                       _field_group_t **next_group);
    327 extern int
    328 _bcm_field_th_class_stage_add(int unit, _field_control_t *fc,
    329                               _field_stage_t *stage_fc);
    330 extern int
    331 _bcm_field_th_class_stage_status_init(int unit, _field_stage_t *stage_fc);
    332 
    333 extern int
    334 _bcm_field_th_class_stage_status_deinit(int unit, _field_stage_t *stage_fc);
    335 
    336 extern int
    337 _bcm_field_th_class_group_add(int unit, _field_group_add_fsm_t *fsm_ptr,
    338                               bcm_field_aset_t aset);
    339 extern int
    340 _bcm_field_th_data_qualifier_hw_alloc(int unit,
    341                                       _field_stage_t *stage_fc,
    342                                       _field_data_qualifier_t *f_dq);
    343 extern int 
    344 _bcm_field_th_field_qset_data_qualifier_add(int unit,
    345                                             bcm_field_qset_t *qset,
    346                                             int qual_id);
    347 extern int 
    348 _bcm_field_th_field_qset_data_qualifier_delete(int unit, bcm_field_qset_t *qset,
    349                                                 int qual_id);
    350 extern int 
    351 _bcm_field_th_field_qset_data_qualifier_get(int idx, 
    352                                        bcm_field_qset_t qset,
    353                                        bcm_field_qualify_t *qid); 
    354 extern int 
    355 _bcm_field_th_field_qualify_data_elem(int unit, bcm_field_entry_t eid,
    356                                       _field_data_qualifier_t *f_dq,
    357                                       uint8 qual_elem_idx,
    358                                       uint32 data, uint32 mask);
    359 extern int 
    360 _bcm_field_th_field_qualify_data_get(int unit, bcm_field_entry_t eid, int qual_id,
    361         uint16 length_max,  uint8 *data, uint8 *mask,
    362         uint16 *length);
    363 
    364 extern int
    365 _bcm_field_group_flex_ctr_pool_bmp_update(int unit,
    366                                          bcm_field_group_t group,
    367                                          int pool_number);
    368 extern int
    369 _bcm_field_th_em_color_offset_get(int unit,
    370                                   _field_stat_t *f_st,
    371                                   uint32 *green_offset,
    372                                   uint32 *yellow_offset,
    373                                   uint32 *red_offset);
    374 extern int
    375 _bcm_field_group_flex_ctr_info_get(int unit,
    376                                bcm_field_group_t group, int *instance,
    377                                _field_counter_pool_bmp_t *counter_pool_bmp);
    378 extern int
    379 _bcm_field_th_ingress_slice_clear(int unit,
    380                                   _field_group_t *fg,
    381                                   _field_slice_t *fs);
    382 extern int
    383 _bcm_field_th_qualify_class_get(int unit,
    384                                  bcm_field_entry_t entry,
    385                                  bcm_field_qualify_t qual,
    386                                  uint32 *data,
    387                                  uint32 *mask);
    388 extern int
    389 _bcm_field_th_stat_attach(int unit,
    390                           bcm_field_group_t field_group,
    391                           uint32 flex_sid, uint32 *stat_id);
    392 extern int
    393 _bcm_field_th_write_slice_map(int unit,
    394                               _field_stage_t *stage_fc,
    395                               _field_group_t *fg);
    396 extern void
    397 _bcm_field_th_class_stage_dump(int unit, _field_stage_t *stage_fc);
    398 
    399 extern int
    400 _bcm_field_th_class_group_dump(int unit, _field_group_t *class_fg);
    401 
    402 extern int
    403 _bcm_field_th_class_group_brief_dump(int unit, _field_group_t *class_fg);
    404 
    405 extern int
    406 _bcm_field_th_class_entry_dump(int unit, _field_entry_t *class_ent);
    407 
    408 extern int
    409 _bcm_field_th_class_entry_create(int unit, bcm_field_group_t group,
    410                                  bcm_field_entry_t entry);
    411 
    412 extern int
    413 _bcm_field_th_class_entry_destroy(int unit, _field_entry_t *entry);
    414 
    415 extern int
    416 _bcm_field_th_class_entry_prio_set(int unit, _field_entry_t *entry, int prio);
    417 
    418 extern int
    419 _bcm_field_th_class_entry_prio_get(int unit, _field_entry_t *entry);
    420 
    421 extern int
    422 _bcm_field_th_class_qualify_set(int unit, bcm_field_entry_t entry,
    423                                 int qual, uint32 *data, uint32 *mask);
    424 extern int
    425 _bcm_field_th_class_qualify_clear(int unit, bcm_field_entry_t entry);
    426 
    427 extern int
    428 _bcm_field_th_class_entry_qualifier_key_get(int unit,
    429                                             bcm_field_entry_t entry,
    430                                             int qual_id,
    431                                             _bcm_field_qual_data_t q_data,
    432                                             _bcm_field_qual_data_t q_mask);
    433 extern int
    434 _bcm_field_th_class_type_qset_get(int unit, bcm_field_qset_t *qset,
    435                                   _field_class_type_t *ctype);
    436 extern int
    437 _bcm_field_th_class_action_set(int unit, bcm_field_entry_t entry,
    438                                bcm_field_class_info_t *class_info);
    439 extern int
    440 _bcm_field_th_class_action_delete(int unit, bcm_field_entry_t entry,
    441                                   bcm_field_action_t action);
    442 extern int
    443 _bcm_field_th_class_action_get(int unit, bcm_field_entry_t entry,
    444                                bcm_field_class_info_t *class_info);
    445 extern int
    446 _bcm_field_th_qual_class_size_get(int unit , bcm_field_qualify_t qual,
    447                                   uint16 *class_size);
    448 extern int
    449 _bcm_field_th_class_entry_install(int unit, bcm_field_entry_t entry);
    450 
    451 extern int
    452 _bcm_field_th_class_entry_hwinstall(int unit, _field_entry_t *entry,
    453                                     _field_class_type_t ctype);
    454 extern int
    455 _bcm_field_th_class_size_get(int unit, _field_class_type_t ctype,
    456                                        int *memsize);
    457 extern int
    458 _bcm_field_th_class_entry_hwread(int unit, _field_entry_t *entry,
    459                                  _field_class_type_t ctype,
    460                                  uint32 *cdata);
    461 extern int
    462 _bcm_field_th_class_entry_remove(int unit, bcm_field_entry_t entry);
    463 
    464 extern int
    465 _bcm_field_th_udf_chunks_to_int_qset(int unit, uint32 udf_chunks_bmap,
    466                                      bcm_field_qset_t *qset);
    467 
    468 extern int
    469 _bcm_field_th_qset_udf_offsets_alloc(int unit, _field_stage_id_t stage,
    470      bcm_field_qset_t qset, int req_offsets, int offset_array[], int *max_chunks,
    471      int pipe_num);
    472 
    473 extern int
    474 _bcm_field_th_qual_udf_offsets_get(int unit, int qid,
    475                                    int chunk_order[], int *num_chunks,
    476                                    uint32 udf_hw_bmap);
    477 
    478 extern int
    479 _bcm_field_th_qualify_udf_data_elem_get(int unit, int idx,
    480                                         int max_chunks,
    481                                         int *qid);
    482 extern int
    483 bcmi_field_th_qualify_udf_get(int unit, bcm_field_entry_t eid,
    484                               bcm_udf_id_t udf_id, int max_length,
    485                               uint8 *data, uint8 *mask, int *actual_length);
    486 
    487 extern int _field_th_qset_comb_init(int unit, _field_control_t *fc);
    488 
    489 
    490 extern int
    491 _field_th_emstage_init(int unit, _field_control_t *fc,
    492                              _field_stage_t *stage_fc);
    493 extern int
    494 _field_th_em_entries_free_get(int unit, _field_group_t *fg,
    495                                         int *free_count);
    496 extern int
    497 _field_th_emstage_update(int unit, _field_stage_t *stage_fc);
    498 extern int
    499 _field_th_em_group_lookup_get(int unit, int priority,
    500                                         uint8 *lookup);
    501 extern int
    502 _field_th_em_qualifier_set(int unit, bcm_field_entry_t entry,
    503                            int qual, uint32 *data, uint32 *mask);
    504 int
    505 _field_th_em_ltid_based_groupid_get(int unit, int ltid,
    506                                     bcm_field_group_t *group);
    507 extern int
    508 _field_th_em_group_priority_hintbased_qset_update(int unit,
    509                                                 _field_group_t *fg,
    510                                                 bcm_field_hint_t *hint_entry);
    511 extern int
    512 _field_th_emstage_deinit(int unit, _field_stage_t *stage_fc);
    513 
    514 extern int
    515 _field_th_exactmatch_slice_validate(int unit, _field_stage_t *stage_fc,
    516                                       _field_group_t *fg, int slice_id);
    517 extern int
    518 _field_th_keygen_em_profile_entry_pack(int unit, _field_stage_t *stage_fc,
    519                               _field_group_t *fg, int part, soc_mem_t mem,
    520                   exact_match_key_gen_program_profile_entry_t *prof_entry);
    521 extern int
    522 _field_th_keygen_em_profile_mask_entry_pack(int unit, _field_stage_t *stage_fc,
    523                                    _field_group_t *fg, int part, soc_mem_t mem,
    524                                   exact_match_key_gen_mask_entry_t *prof_entry);
    525 extern int
    526 _field_th_em_entry_install(int unit, _field_entry_t *f_ent);
    527 
    528 extern int
    529 _field_th_em_entry_remove(int unit, _field_entry_t *f_ent);
    530 
    531 extern int
    532 _field_th_em_entry_action_size_get(int unit, _field_entry_t *f_ent,
    533                                     int *action_size, uint32 *action_prof_idx);
    534 extern int
    535 _bcm_field_th_flex_counter_status_get(int unit,
    536                                       _field_group_t *fg,
    537                                       int *counters_total,
    538                                       int *counters_free);
    539 
    540 extern int
    541 _bcm_field_th_egress_mode_get(int unit, _field_group_t *fg, uint8 *slice_mode);
    542 
    543 
    544 extern int 
    545 _bcm_field_th_group_update(int unit, bcm_field_group_t group, bcm_field_qset_t *qset);
    546 
    547 extern int
    548 _bcm_field_th_entry_phys_dump(int unit, _field_entry_t *f_ent);
    549 extern int _bcm_field_th_entry_tcam_index_get(int unit, bcm_field_entry_t eid,
    550                                               int *logical_tcam_idx,
    551                                               int *physical_tcam_idx);
    552 extern int  _bcm_field_th_ifp_slice_mode_get(int unit, int pipe, int slice_num,
    553                                           int *slice_mode, int *slice_enabled);
    554 #if defined(BCM_TOMAHAWK3_SUPPORT)
    555 extern int 
    556 _bcm_field_th3_qualify_ip_type(int unit, bcm_field_entry_t entry,
    557                                bcm_field_IpType_t type,
    558                                bcm_field_qualify_t qual);
    559 extern int 
    560 _bcm_field_th3_qualify_ip_type_encode_get(int unit, uint32 hw_data,
    561                                                      uint32 hw_mask,
    562                                                      bcm_field_IpType_t *type);
    563 #endif
    564 
    565 extern int
    566 _field_th_stage_action_support_check(int unit,
    567                                      unsigned stage,
    568                                      bcm_field_action_t action,
    569                                      int *result);
    570 extern int 
    571 _bcm_field_th_qualify_PacketRes_get(
    572                                     int unit, 
    573                                     bcm_field_entry_t entry, 
    574                                     uint32 *data, 
    575                                     uint32 *mask);
    576 extern int
    577 _bcm_field_th_qualify_PacketRes(int               unit,
    578                                  bcm_field_entry_t entry,
    579                                  uint32            *data,
    580                                  uint32            *mask
    581                                  );
    582 
    583 #endif /* !BCM_FIELD_SUPPORT */
    584 
    585 #if defined(INCLUDE_L3)
    586 #ifdef BCM_WARM_BOOT_SUPPORT
    587 extern int bcm_th_ipmc_aggid_info_scache_size_get(int unit, uint32 *size);
    588 extern int bcm_th_ipmc_aggid_info_sync(int unit, uint8 **scache_ptr);
    589 extern int bcm_th_ipmc_aggid_info_recover(int unit, uint8 **scache_ptr);
    590 #endif
    591 extern bcm_error_t 
    592 _bcm_niv_gport_get(int unit, int is_trunk, int modid,
    593                    int port, int dst_vif, bcm_gport_t *niv_gport);
    594 extern bcm_error_t 
    595 _bcm_extender_gport_get(int unit, int is_trunk, int modid,
    596                         int port, int etag_vid, bcm_gport_t *ext_gport);
    597 extern void
    598 _bcm_th_glp_resolve_embedded_nh(int unit, uint32 gport,
    599                                 bcm_module_t *modid, bcm_port_t *port,
    600                                 int *is_trunk);
    601 extern int bcm_th_ipmc_repl_init(int unit);
    602 extern int bcm_th_ipmc_repl_detach(int unit);
    603 extern int bcm_th_ipmc_repl_set(int unit, int ipmc_id, bcm_port_t port,
    604                                 bcm_vlan_vector_t vlan_vec);
    605 extern int bcm_th_ipmc_repl_get(int unit, int index, bcm_port_t port,
    606                                 bcm_vlan_vector_t vlan_vec);
    607 extern int bcm_th_ipmc_repl_add(int unit, int index, bcm_port_t port,
    608                                 bcm_vlan_t vlan);
    609 extern int bcm_th_ipmc_repl_delete(int unit, int index, bcm_port_t port,
    610                                 bcm_vlan_t vlan);
    611 extern int bcm_th_ipmc_repl_delete_all(int unit, int index,
    612                                 bcm_port_t port);
    613 extern int bcm_th_ipmc_egress_intf_add(int unit, int index, bcm_port_t port,
    614                                        bcm_l3_intf_t *l3_intf);
    615 extern int bcm_th_ipmc_egress_intf_delete(int unit, int index, bcm_port_t port,
    616                                        bcm_l3_intf_t *l3_intf);
    617 extern int bcm_th_ipmc_egress_intf_set(int unit, int mc_index,
    618                                        bcm_port_t port, int if_count,
    619                                        bcm_if_t *if_array, int is_l3,
    620                                        int check_port);
    621 extern int bcm_th_ipmc_egress_intf_get(int unit, int mc_index,
    622                                        bcm_port_t port,
    623                                        int if_max, bcm_if_t *if_array,
    624                                        int *if_count);
    625 extern int _bcm_th_ipmc_egress_intf_add(int unit, int index, bcm_port_t port,
    626                                        int encap_id, int is_l3);
    627 extern int _bcm_th_ipmc_egress_intf_delete(int unit, int index,
    628                                        bcm_port_t port, int if_max,
    629                                        int encap_id, int is_l3);
    630 extern int bcm_th_ipmc_trill_mac_update(int unit, uint32 mac_field,
    631                                         uint8 flag);
    632 extern int bcm_th_ipmc_l3_intf_next_hop_free(int unit, int intf);
    633 extern int _bcm_th_ipmc_l3_intf_next_hop_get(int unit, int intf, int *nh_index);
    634 extern int _bcm_th_ipmc_l3_intf_next_hop_l3_egress_set(int unit, int intf);
    635 extern int _bcm_th_ipmc_l3_intf_next_hop_l3_egress_clear(int unit, int nh_idx);
    636 
    637 
    638 /* IPMC replication per trunk function */
    639 extern int bcm_th_ipmc_egress_intf_set_for_trunk_first_member(int unit,
    640                                                               int repl_group,
    641                                                               bcm_port_t port,
    642                                                               int if_count,
    643                                                               bcm_if_t *if_array,
    644                                                               int is_l3,
    645                                                               int check_port,
    646                                                               bcm_trunk_t tgid);
    647 extern int bcm_th_ipmc_egress_intf_set_for_same_pipe_member(int unit,
    648                                                             int repl_group,
    649                                                             bcm_port_t port,
    650                                                             bcm_port_t ori_port,
    651                                                             bcm_trunk_t tgid);
    652 extern int bcm_th_ipmc_egress_intf_add_in_per_trunk_mode(int unit,
    653                                                          int repl_group,
    654                                                          bcm_port_t port,
    655                                                          int encap_id,
    656                                                          int is_l3);
    657 extern int bcm_th_ipmc_egress_intf_del_in_per_trunk_mode(int unit,
    658                                                          int repl_group,
    659                                                          bcm_port_t port,
    660                                                          int if_max,
    661                                                          int encap_id,
    662                                                          int is_l3);
    663 extern int bcm_th_ipmc_egress_intf_add_for_trunk(int unit, int repl_group,
    664                                                  bcm_trunk_t tgid,
    665                                                  int encap_id, int is_l3);
    666 extern int bcm_th_ipmc_egress_intf_del_for_trunk(int unit, int repl_group,
    667                                                  bcm_trunk_t tgid,
    668                                                  int if_max, int encap_id,
    669                                                  int is_l3);
    670 extern int bcm_th_ipmc_egress_intf_add_trunk_member(int unit, int repl_group,
    671                                                     bcm_port_t port);
    672 extern int bcm_th_ipmc_egress_intf_del_trunk_member(int unit, int repl_group,
    673                                                     bcm_port_t port);
    674 extern bcm_error_t _th_ipmc_info_get(int unit, int ipmc_index, bcm_ipmc_addr_t *ipmc, 
    675                                      ipmc_entry_t *entry,
    676                                      _bcm_esw_ipmc_l3entry_t *use_ipmc_l3entry);
    677 extern bcm_error_t _th_ipmc_glp_set(int unit, bcm_ipmc_addr_t *ipmc,
    678                                     _bcm_l3_cfg_t *l3cfg);
    679 extern bcm_error_t _th_ipmc_glp_get(int unit, bcm_ipmc_addr_t *ipmc,
    680                                     _bcm_l3_cfg_t *l3cfg);
    681 
    682 extern int _bcm_th_ipmc_src_port_compare(int unit, int ipmc_index,
    683                                          bcm_ipmc_addr_t *ipmc, int *match);
    684 extern int bcm_th_ipmc_repl_port_attach(int unit, bcm_port_t port);
    685 extern int bcm_th_ipmc_repl_port_detach(int unit, bcm_port_t port);
    686 extern bcm_error_t _bcm_th_macda_oui_profile_init(int unit);
    687 extern void _bcm_th_macda_oui_profile_deinit(int unit);
    688 extern bcm_error_t _bcm_th_vntag_etag_profile_init(int unit);
    689 extern void _bcm_th_vntag_etag_profile_deinit(int unit);
    690 extern bcm_error_t 
    691 _bcm_th_l3_vp_entry_add(int unit, soc_mem_t mem, _bcm_l3_cfg_t *l3cfg,
    692                         uint32 *buf_p, int *macda_oui_profile_index,
    693                         int *vntag_etag_profile_index);
    694 extern bcm_error_t
    695 _bcm_th_l3_vp_ent_parse(int unit, soc_mem_t mem,
    696                         _bcm_l3_cfg_t *l3cfg, void *l3x_entry);
    697 extern bcm_error_t
    698 _bcm_th_l3_vp_entry_del(int unit, _bcm_l3_cfg_t *l3cfg,
    699                         int macda_oui_profile_index ,int vntag_etag_profile_index);
    700 extern bcm_error_t
    701 _bcm_th_get_extended_profile_index(int unit, soc_mem_t mem_ext,
    702                                    _bcm_l3_cfg_t *l3cfg,
    703                                    int *macda_oui_profile_index,
    704                                    int *vntag_etag_profile_index,
    705                                    int *ref_count);
    706 extern int _bcm_th_l3_ecmp_across_layers_move(int unit, int threshold,
    707                                               int direction);
    708 extern void bcm_th_l3_extended_required_scache_size_get(int unit, int *size);
    709 extern bcm_error_t bcm_th_l3_extended_view_sync(int unit, uint8 **scache_ptr,
    710                                                 int offset);
    711 extern bcm_error_t bcm_th_l3_extended_view_reinit(int unit, uint8 **scache_ptr,
    712                                                   int offset);
    713 
    714 extern int bcm_th_aggid_info_detach(int unit);
    715 extern int bcm_th_aggid_info_init(int unit);
    716 extern int bcm_th_set_port_hw_agg_map(int unit, bcm_port_t port, int aggid);
    717 extern int bcm_th_port_aggid_add(int unit, bcm_port_t port, bcm_trunk_t tgid,
    718                                  int *aggid);
    719 extern int bcm_th_port_aggid_del(int unit, bcm_port_t port);
    720 
    721 extern int bcm_th_port_trunkid_get(int unit, bcm_port_t port, int *tgid);
    722 extern int bcm_th_port_last_member_check(int unit, bcm_port_t port, int *val);
    723 extern int bcm_th_port_to_aggid(int unit, bcm_port_t port, int *aggid);
    724 
    725 #ifdef BCM_WARM_BOOT_SUPPORT
    726 extern int _bcm_th_ipmc_repl_l3_intf_scache_size_get(int unit, uint32 *size);
    727 extern int _bcm_th_ipmc_repl_l3_intf_sync(int unit, uint8 **scache_ptr);
    728 extern int _bcm_th_ipmc_repl_l3_intf_scache_recover(int unit, uint8 **scache_ptr);
    729 extern int _bcm_th_ipmc_repl_reload(int unit);
    730 extern int _bcm_th_ipmc_repl_l3_intf_nh_map_scache_size_get(int unit, uint32 *size);
    731 extern int _bcm_th_ipmc_repl_l3_intf_nh_map_sync(int unit, uint8 **scache_ptr);
    732 extern int _bcm_th_ipmc_repl_l3_intf_nh_map_scache_recover(int unit, uint8 **scache_ptr);
    733 extern int _bcm_th_ipmc_repl_l3_intf_trill_nh_map_scache_size_get(int unit, uint32 *size);
    734 extern int _bcm_th_ipmc_repl_l3_intf_trill_nh_map_sync(int unit, uint8 **scache_ptr);
    735 extern int _bcm_th_ipmc_repl_l3_intf_trill_nh_map_scache_recover(int unit, uint8 **scache_ptr);
    736 #endif /* BCM_WARM_BOOT_SUPPORT */
    737 
    738 #ifndef BCM_SW_STATE_DUMP_DISABLE
    739 extern void _bcm_th_ipmc_repl_sw_dump(int unit);
    740 #endif /* BCM_SW_STATE_DUMP_DISABLE */
    741 
    742 /* Resilient Hashing funcitons */
    743 extern int bcm_opt_ecmp_rh_init(int unit);
    744 extern int bcm_opt_ecmp_rh_deinit(int unit);
    745 extern int bcm_opt_l3_egress_ecmp_rh_create(int unit,
    746                                            bcm_l3_egress_ecmp_t *ecmp,
    747                                            int intf_count,
    748                                            bcm_if_t *intf_array,
    749                                            int op, int count,
    750                                            bcm_if_t *intf,
    751                                            bcm_if_t *new_intf_array);
    752 extern int bcm_opt_l3_egress_ecmp_rh_destroy(int unit, bcm_if_t mpintf);
    753 extern int bcm_opt_l3_egress_ecmp_lb_get(int unit, bcm_l3_egress_ecmp_t *ecmp);
    754 extern int bcm_opt_l3_egress_ecmp_rh_shared_copy(int unit, int old_ecmp_group,
    755                                                 int new_ecmp_group);
    756 extern int bcm_opt_ecmp_rh_set_intf_arr(int unit, int intf_count,
    757                                        bcm_if_t *intf_array,
    758                                        int ecmp_group_idx,
    759                                        int group_size,
    760                                        int max_paths);
    761 extern int bcm_opt_ecmp_rh_multipath_get(int unit, int ecmp_group_idx, int intf_size,
    762                                         bcm_if_t *intf_array, int *intf_count,
    763                                         int *max_paths);
    764 extern int bcm_opt_l3_egress_rh_ecmp_find(int unit, int intf_count,
    765                                          bcm_if_t *intf_array, bcm_if_t *mpintf);
    766 extern int bcm_opt_ecmp_lb_mode_set(int unit,
    767                                    int ecmp_group_idx,
    768                                    uint8 lb_mode);
    769 extern int bcm_opt_ecmp_lb_mode_reset(int unit,
    770                                      bcm_if_t mpintf);
    771 extern void bcm_opt_ecmp_group_rh_set(int unit, int ecmp_group_idx, int enable);
    772 extern int bcm_opt_ecmp_group_is_rh(int unit,
    773                                    int ecmp_group_idx);
    774 extern int bcm_opt_l3_egress_ecmp_rh_shared_copy(int unit, int old_ecmp_group,
    775                                                 int new_ecmp_group);
    776 
    777 #ifdef BCM_WARM_BOOT_SUPPORT
    778 extern int bcm_opt_l3_ecmp_rh_member_sync(int unit, uint8 **scache_ptr,
    779                                           int offset);
    780 extern int bcm_opt_l3_ecmp_rh_member_recover(int unit, uint8 **scache_ptr,
    781                                             int ecmp_max_paths, int offset);
    782 #endif /* BCM_WARM_BOOT_SUPPORT */
    783 
    784 #ifndef BCM_SW_STATE_DUMP_DISABLE
    785 extern void bcm_opt_ecmp_rh_sw_dump(int unit);
    786 #endif /* BCM_SW_STATE_DUMP_DISABLE */
    787 
    788 #endif /* INCLUDE_L3 */
    789 
    790 extern bcm_error_t
    791 _bcm_th_port_speed_supported(int unit, bcm_port_t port, int speed);
    792 extern int bcm_th_phy_lb_check(int unit, bcm_port_t port, int loopback);
    793 extern int bcm_th_phy_lb_set(int unit);
    794 
    795 /* Cosq */
    796 extern int _bcm_th_cosq_port_resolve(int unit, bcm_gport_t gport, 
    797                                      bcm_module_t *modid, bcm_port_t *port,
    798                                      bcm_trunk_t *trunk_id, int *id, int *qnum);
    799 extern int bcm_th_cosq_gport_get(int unit, bcm_gport_t gport, bcm_gport_t *port,
    800                                  int *numq, uint32 *flags);
    801 extern int bcm_th_cosq_port_bandwidth_set(int unit, bcm_port_t port,
    802                                           bcm_cos_queue_t cosq,
    803                                           uint32 min_quantum, uint32 max_quantum,
    804                                           uint32 burst_quantum, uint32 flags);
    805 extern int bcm_th_cosq_port_bandwidth_get(int unit, bcm_port_t port,
    806                                           bcm_cos_queue_t cosq,
    807                                           uint32 *min_quantum,
    808                                           uint32 *max_quantum,
    809                                           uint32 *burst_quantum,
    810                                           uint32 *flags);
    811 
    812 extern int bcm_th_cosq_gport_bandwidth_burst_set(int unit, bcm_gport_t gport,
    813                                                  bcm_cos_queue_t cosq,
    814                                                  uint32 kbits_burst_min, 
    815                                                  uint32 kbits_burst_max);
    816 extern int bcm_th_cosq_gport_bandwidth_burst_get(int unit, bcm_gport_t gport,
    817                                                  bcm_cos_queue_t cosq,
    818                                                  uint32 *kbits_burst_min,
    819                                                  uint32 *kbits_burst_max);
    820 
    821 extern int bcm_th_cosq_gport_sched_get(int unit, bcm_gport_t gport,
    822                                        bcm_cos_queue_t cosq, int *mode,
    823                                        int *weight);
    824 extern int bcm_th_cosq_gport_sched_set(int unit, bcm_gport_t gport,
    825                                        bcm_cos_queue_t cosq, int mode,
    826                                        int weight);
    827 extern int bcm_th_cosq_sched_weight_max_get(int unit, int mode,
    828                                             int *weight_max);
    829 
    830 extern int bcm_th_cosq_gport_traverse(int unit, bcm_cosq_gport_traverse_cb cb,
    831                                       void *user_data);
    832 
    833 extern int bcm_th_cosq_gport_traverse_by_port(int unit, bcm_gport_t port,
    834                                            bcm_cosq_gport_traverse_cb cb,
    835                                            void *user_data);
    836 extern int bcm_th_cosq_gport_bandwidth_set(int unit, bcm_gport_t gport,
    837                                            bcm_cos_queue_t cosq,
    838                                            uint32 kbits_sec_min,
    839                                            uint32 kbits_sec_max,
    840                                            uint32 flags);
    841 extern int bcm_th_cosq_gport_bandwidth_get(int unit, bcm_gport_t gport,
    842                                            bcm_cos_queue_t cosq,
    843                                            uint32 *kbits_sec_min,
    844                                            uint32 *kbits_sec_max,
    845                                            uint32 *flags);
    846 extern int bcm_th_cosq_port_burst_set(int unit, bcm_port_t port, 
    847                                       bcm_cos_queue_t cosq, int burst);
    848 extern int bcm_th_cosq_port_burst_get(int unit, bcm_port_t port,
    849                                       bcm_cos_queue_t cosq,
    850                                       int *burst);
    851 
    852 extern int bcm_th_port_rate_egress_set(int unit, bcm_port_t port,
    853                                        uint32 bandwidth, uint32 burst,
    854                                        uint32 mode);
    855 extern int bcm_th_port_rate_egress_get(int unit, bcm_port_t port,
    856                                        uint32 *bandwidth, uint32 *burst,
    857                                        uint32 *mode);
    858 extern int bcm_th_port_drain_cells(int unit, int port);
    859 
    860 extern int bcm_th_cosq_port_pps_set(int unit, bcm_port_t port,
    861                                     bcm_cos_queue_t cosq, int pps);
    862 extern int bcm_th_cosq_port_pps_get(int unit, bcm_port_t port,
    863                                     bcm_cos_queue_t cosq, int *pps);
    864 
    865 extern int bcm_th_cosq_discard_set(int unit, uint32 flags);
    866 extern int bcm_th_cosq_discard_get(int unit, uint32 *flags);
    867 
    868 extern int bcm_th_cosq_discard_port_get(int unit, bcm_port_t port, 
    869                                         bcm_cos_queue_t cosq, uint32 color,
    870                                         int *drop_start, 
    871                                         int *drop_slope, int *average_time);
    872 extern int bcm_th_cosq_discard_port_set(int unit, bcm_port_t port, 
    873                                         bcm_cos_queue_t cosq,
    874                                         uint32 color, int drop_start,
    875                                         int drop_slope,
    876                                         int average_time);
    877 
    878 extern int bcm_th_cosq_gport_discard_set(int unit, bcm_gport_t gport,
    879                                          bcm_cos_queue_t cosq,
    880                                          bcm_cosq_buffer_id_t buffer,
    881                                          bcm_cosq_gport_discard_t *discard);
    882 extern int bcm_th_cosq_gport_discard_get(int unit, bcm_gport_t gport,
    883                                          bcm_cos_queue_t cosq,
    884                                          bcm_cosq_buffer_id_t buffer,
    885                                          bcm_cosq_gport_discard_t *discard);
    886 
    887 extern int bcm_th_cosq_wred_resolution_entry_create(int unit, int *index);
    888 extern int bcm_th_cosq_wred_resolution_entry_destroy(int unit, int index);
    889 extern int bcm_th_cosq_wred_resolution_set(int unit, int index,
    890                                            bcm_cosq_discard_rule_t *rule);
    891 extern int bcm_th_cosq_wred_resolution_get(int unit, int index, int max,
    892                                            bcm_cosq_discard_rule_t *rule,
    893                                            int *count);
    894 
    895 extern int bcm_th_cosq_port_pfc_op(int unit, bcm_port_t port,
    896                                    bcm_switch_control_t sctype,
    897                                    _bcm_cosq_op_t op,
    898                                    bcm_gport_t *gport,
    899                                    int gport_count);
    900 extern int bcm_th_cosq_port_pfc_get(int unit, bcm_port_t port,
    901                                     bcm_switch_control_t sctype,
    902                                     bcm_gport_t *gport,
    903                                     int gport_count,
    904                                     int *actual_gport_count);
    905 extern int
    906 bcm_th_pfc_deadlock_ignore_pfc_xoff_gen(int unit, int priority,
    907                                         bcm_port_t port, uint32 *rval32);
    908 extern int
    909 bcm_th_cosq_pfc_class_mapping_set(int unit, bcm_gport_t port,
    910                                   int array_count,
    911                                   bcm_cosq_pfc_class_mapping_t *mapping_array);
    912 
    913 extern int
    914 bcm_th_cosq_pfc_class_mapping_get(int unit, bcm_gport_t port,
    915                                   int array_max,
    916                                   bcm_cosq_pfc_class_mapping_t *mapping_array,
    917                                   int *array_count);
    918 extern int
    919 bcm_th_cosq_safc_class_mapping_set(int unit, bcm_gport_t port,
    920                                    int array_count,
    921                                    bcm_cosq_safc_class_mapping_t *mapping_array);
    922 
    923 extern int
    924 bcm_th_cosq_safc_class_mapping_get(int unit, bcm_gport_t port,
    925                                    int array_max,
    926                                    bcm_cosq_safc_class_mapping_t *mapping_array,
    927                                    int *array_count);
    928 
    929 extern int
    930 bcm_th_port_priority_group_mapping_set(int unit, bcm_gport_t gport,
    931                                         int prio, int priority_group);
    932 extern int
    933 bcm_th_port_priority_group_mapping_get(int unit, bcm_gport_t gport,
    934                                         int prio, int *priority_group);
    935 extern int
    936 bcm_th_port_priority_group_config_set(int unit, bcm_gport_t gport,
    937     int priority_group, bcm_port_priority_group_config_t *prigrp_config);
    938 extern int
    939 bcm_th_port_priority_group_config_get(int unit, bcm_gport_t gport,
    940     int priority_group, bcm_port_priority_group_config_t *prigrp_config);
    941 
    942 extern int bcm_th_cosq_port_sched_set(int unit, bcm_pbmp_t pbm,
    943                                       int mode, const int *weights, int delay);
    944 extern int bcm_th_cosq_port_sched_get(int unit, bcm_pbmp_t pbm,
    945                                       int *mode, int *weights, int *delay);
    946 
    947 extern int bcm_th_cosq_gport_add(int unit, bcm_gport_t port, int numq,
    948                                  uint32 flags, bcm_gport_t *gport);
    949 extern int bcm_th_cosq_gport_delete(int unit, bcm_gport_t gport);
    950 extern int bcm_th_cosq_gport_attach(int unit, bcm_gport_t input_gport,
    951                                     bcm_gport_t parent_gport,
    952                                     bcm_cos_queue_t cosq);
    953 extern int bcm_th_rx_queue_channel_set_test(int unit,
    954                                             bcm_cos_queue_t queue_id,
    955                                             bcm_rx_chan_t chan_id);
    956 extern int bcm_th_cosq_gport_detach(int unit, bcm_gport_t input_gport,
    957                                     bcm_gport_t parent_gport,
    958                                     bcm_cos_queue_t cosq);
    959 extern int
    960 bcm_th_cosq_gport_attach_get(int unit, bcm_gport_t sched_gport,
    961                              bcm_gport_t *input_gport, bcm_cos_queue_t *cosq);
    962 extern int
    963 bcm_th_cosq_gport_child_get(int unit, bcm_gport_t in_gport,
    964                              bcm_cos_queue_t cosq, bcm_gport_t *out_gport);
    965 
    966 extern int bcm_th_cosq_mapping_set(int unit, bcm_port_t gport, 
    967                                    bcm_cos_t priority, bcm_cos_queue_t cosq);
    968 extern int bcm_th_cosq_mapping_get(int unit, bcm_port_t gport,
    969                                    bcm_cos_t priority, bcm_cos_queue_t *cosq);
    970 
    971 extern int bcm_th_cosq_control_set(int unit, bcm_gport_t gport,
    972                                    bcm_cos_queue_t cosq,
    973                                    bcm_cosq_buffer_id_t buffer,
    974                                    bcm_cosq_control_t type, int arg);
    975 extern int bcm_th_cosq_control_get(int unit, bcm_gport_t gport,
    976                                    bcm_cos_queue_t cosq,
    977                                    bcm_cosq_buffer_id_t buffer,
    978                                    bcm_cosq_control_t type, int *arg);
    979 
    980 extern int bcm_th_cosq_stat_set(int unit, bcm_gport_t port,
    981                                 bcm_cos_queue_t cosq,
    982                                 bcm_cosq_stat_t stat, uint64 value);
    983 extern int bcm_th_cosq_stat_get(int unit, bcm_port_t port,
    984                                 bcm_cos_queue_t cosq,
    985                                 bcm_cosq_stat_t stat, int sync_mode,
    986                                 uint64 *value);
    987 
    988 extern int bcm_th_cosq_gport_mapping_set(int unit, bcm_port_t ing_port,
    989                                          bcm_cos_t int_pri, uint32 flags,
    990                                          bcm_gport_t gport,
    991                                          bcm_cos_queue_t cosq);
    992 extern int bcm_th_cosq_gport_mapping_get(int unit, bcm_port_t ing_port,
    993                                          bcm_cos_t int_pri, uint32 flags,
    994                                          bcm_gport_t *gport,
    995                                          bcm_cos_queue_t *cosq);
    996 extern int bcm_th_cosq_priority_mapping_get_all(int unit, bcm_gport_t gport,
    997                                                 int index,
    998                                                 bcm_cosq_priority_mapping_t type,
    999                                                 int pri_max, int *pri_array,
   1000                                                 int *pri_count);
   1001 
   1002 extern int bcm_th_cosq_config_set(int unit, int numq);
   1003 extern int bcm_th_cosq_config_get(int unit, int *numq);
   1004 extern int bcm_th_cosq_buffer_id_multi_get(int unit, bcm_gport_t gport,
   1005                                   bcm_cos_queue_t cosq, bcm_cosq_dir_t direction,
   1006                                   int array_max, bcm_cosq_buffer_id_t *buf_id_array,
   1007                                   int *array_count);
   1008 extern int
   1009 bcm_th_cosq_field_classifier_get(
   1010     int unit, int classifier_id, bcm_cosq_classifier_t *classifier);
   1011 
   1012 extern int
   1013 bcm_th_cosq_field_classifier_id_create(
   1014     int unit, bcm_cosq_classifier_t *classifier, int *classifier_id);
   1015 
   1016 extern int
   1017 bcm_th_cosq_field_classifier_id_destroy(
   1018     int unit, int classifier_id);
   1019 
   1020 extern int
   1021 bcm_th_cosq_field_classifier_map_set(
   1022     int unit, int classifier_id, int count,
   1023     bcm_cos_t *priority_array, bcm_cos_queue_t *cosq_array);
   1024 
   1025 extern int
   1026 bcm_th_cosq_field_classifier_map_get(
   1027     int unit, int classifier_id,
   1028     int array_max, bcm_cos_t *priority_array,
   1029     bcm_cos_queue_t *cosq_array, int *array_count);
   1030 
   1031 extern int
   1032 bcm_th_cosq_field_classifier_map_clear(
   1033     int unit, int classifier_id);
   1034 
   1035 extern int bcm_th_cosq_init(int unit);
   1036 extern int bcm_th_cosq_detach(int unit, int software_state_only);
   1037 extern int _bcm_th_pfc_deadlock_init(int unit);
   1038 extern int bcm_th_pfc_deadlock_recovery_start(int unit,
   1039                                               bcm_port_t port, int pri);
   1040 extern int bcm_th_pfc_deadlock_recovery_exit(int unit,
   1041                                               bcm_port_t port, int pri);
   1042 
   1043 extern int
   1044 bcm_th_cosq_bst_profile_set(int unit,
   1045                             bcm_gport_t port,
   1046                             bcm_cos_queue_t cosq,
   1047                             bcm_bst_stat_id_t bid,
   1048                             bcm_cosq_bst_profile_t *profile);
   1049 
   1050 extern int
   1051 bcm_th_cosq_bst_profile_get(int unit,
   1052                             bcm_gport_t port,
   1053                             bcm_cos_queue_t cosq,
   1054                             bcm_bst_stat_id_t bid,
   1055                             bcm_cosq_bst_profile_t *profile);
   1056 
   1057 extern int
   1058 bcm_th_cosq_bst_multi_profile_set(int unit,
   1059                             bcm_gport_t gport,
   1060                             bcm_cos_queue_t cosq,
   1061                             bcm_bst_stat_id_t bid,
   1062                             int array_size,
   1063                             bcm_cosq_bst_profile_t *profile_array);
   1064 
   1065 extern int
   1066 bcm_th_cosq_bst_multi_profile_get(int unit,
   1067                             bcm_gport_t gport,
   1068                             bcm_cos_queue_t cosq,
   1069                             bcm_bst_stat_id_t bid,
   1070                             int array_size,
   1071                             bcm_cosq_bst_profile_t *profile_array,
   1072                             int *count);
   1073 
   1074 extern int
   1075 bcm_th_cosq_bst_stat_get(int unit,
   1076                          bcm_gport_t port,
   1077                          bcm_cos_queue_t cosq,
   1078                          bcm_cosq_buffer_id_t buffer,
   1079                          bcm_bst_stat_id_t bid,
   1080                          uint32 options,
   1081                          uint64 *pvalue);
   1082 
   1083 extern int
   1084 bcm_th_cosq_bst_stat_multi_get(int unit,
   1085                                bcm_gport_t port,
   1086                                bcm_cos_queue_t cosq,
   1087                                uint32 options,
   1088                                int max_values,
   1089                                bcm_bst_stat_id_t *id_list,
   1090                                uint64 *pvalues);
   1091 
   1092 extern int
   1093 bcm_th_cosq_bst_stat_clear(int unit, bcm_gport_t port,
   1094                            bcm_cos_queue_t cosq, bcm_cosq_buffer_id_t buffer,
   1095                            bcm_bst_stat_id_t bid);
   1096 
   1097 extern int bcm_th_cosq_bst_stat_sync(int unit, bcm_bst_stat_id_t bid);
   1098 
   1099 extern int
   1100 _bcm_th_bst_hdrm_stat_clear(int unit,
   1101                             bcm_gport_t gport,
   1102                             bcm_cos_queue_t cosq,
   1103                             bcm_cosq_buffer_id_t buffer);
   1104 
   1105 extern int
   1106 _bcm_th_cosq_bst_hdrm_stat_get(int unit,
   1107                                bcm_gport_t gport,
   1108                                bcm_cos_queue_t cosq,
   1109                                bcm_cosq_buffer_id_t buffer,
   1110                                uint32 options,
   1111                                uint64 *pvalue);
   1112 
   1113 extern int
   1114 _bcm_th_port_enqueue_set(int unit, bcm_port_t gport, int enable);
   1115 
   1116 extern int
   1117 _bcm_th_port_enqueue_get(int unit, bcm_port_t gport, int *enable);
   1118 
   1119 extern int bcm_th_cosq_cpu_cosq_enable_set(int unit, bcm_cos_queue_t cosq,
   1120                                            int enable);
   1121 extern int bcm_th_cosq_cpu_cosq_enable_get(int unit, bcm_cos_queue_t cosq,
   1122                                            int *enable);
   1123 extern void bcm_th_cosq_sw_dump(int unit);
   1124 
   1125 #ifdef BCM_WARM_BOOT_SUPPORT
   1126 extern int bcm_th_cosq_sync(int unit);
   1127 extern int bcm_th_cosq_reinit(int unit);
   1128 #endif /* BCM_WARM_BOOT_SUPPORT */
   1129 
   1130 typedef enum {
   1131     _BCM_TH_COSQ_INDEX_STYLE_WRED_QUEUE,
   1132     _BCM_TH_COSQ_INDEX_STYLE_WRED_PORT,
   1133     _BCM_TH_COSQ_INDEX_STYLE_WRED_DEVICE,
   1134     _BCM_TH_COSQ_INDEX_STYLE_UCAST_QUEUE,
   1135     _BCM_TH_COSQ_INDEX_STYLE_MCAST_QUEUE,
   1136     _BCM_TH_COSQ_INDEX_STYLE_EGR_POOL,
   1137     _BCM_TH_COSQ_INDEX_STYLE_COS,
   1138     _BCM_TH_COSQ_INDEX_STYLE_COUNT
   1139 } _bcm_th_cosq_index_style_t;
   1140 
   1141 extern int _bcm_th_cosq_index_resolve(int unit, bcm_port_t port,
   1142                                       bcm_cos_queue_t cosq, _bcm_th_cosq_index_style_t style,
   1143                                       bcm_port_t *local_port, int *index, int *count);
   1144 
   1145 extern int _bcm_th_cosq_port_cos_resolve(int unit, bcm_port_t port, bcm_cos_t cos,
   1146                                          _bcm_th_cosq_index_style_t style,
   1147                                          bcm_gport_t *gport);
   1148 extern int _bcm_th_cosq_inv_mapping_get(int unit, bcm_gport_t gport,
   1149                                         bcm_cos_queue_t cosq,
   1150                                         uint32 flags, bcm_port_t *ing_port,
   1151                                         bcm_cos_t *priority);
   1152 
   1153 extern int bcm_th_cosq_port_attach(int unit, bcm_port_t port);
   1154 extern int bcm_th_cosq_port_detach(int unit, bcm_port_t port);
   1155 
   1156 /* OOB FC Tx side global configuration API */
   1157 extern int bcm_th_oob_fc_tx_config_set(
   1158     int unit,
   1159     bcm_oob_fc_tx_config_t *config);
   1160 
   1161 /* OOB FC Tx side global configuration get API */
   1162 extern int bcm_th_oob_fc_tx_config_get(
   1163     int unit,
   1164     bcm_oob_fc_tx_config_t *config);
   1165 
   1166 extern int
   1167 _bcm_th_oob_fc_tx_port_control_set(int unit, bcm_port_t port,
   1168                                    int status, int dir);
   1169 extern int
   1170 _bcm_th_oob_fc_tx_port_control_get(int unit, bcm_port_t port,
   1171                                    int *status, int dir);
   1172 
   1173 /* OOB FC Tx side global info get API */
   1174 extern int bcm_th_oob_fc_tx_info_get(
   1175     int unit,
   1176     bcm_oob_fc_tx_info_t *info);
   1177 
   1178 /*
   1179  * OOB FC Rx Interface side Traffic Class to Priority Mapping Multi Set
   1180  * API
   1181  */
   1182 extern int bcm_th_oob_fc_rx_port_tc_mapping_multi_set(
   1183     int unit,
   1184     bcm_oob_fc_rx_intf_id_t intf_id,
   1185     bcm_gport_t gport,
   1186     int array_count,
   1187     uint32 *tc,
   1188     uint32 *pri_bmp);
   1189 
   1190 /*
   1191  * OOB FC Rx Interface side Traffic Class to Priority Mapping Multi Get
   1192  * API
   1193  */
   1194 extern int bcm_th_oob_fc_rx_port_tc_mapping_multi_get(
   1195     int unit,
   1196     bcm_oob_fc_rx_intf_id_t intf_id,
   1197     bcm_gport_t gport,
   1198     int array_max,
   1199     uint32 *tc,
   1200     uint32 *pri_bmp,
   1201     int *array_count);
   1202 
   1203 /* OOB FC Rx Interface side Traffic Class to Priority Mapping set API */
   1204 extern int bcm_th_oob_fc_rx_port_tc_mapping_set(
   1205     int unit,
   1206     bcm_oob_fc_rx_intf_id_t intf_id,
   1207     bcm_gport_t gport,
   1208     uint32 tc,
   1209     uint32 pri_bmp);
   1210 
   1211 /* OOB FC Rx Interface side Traffic Class to Priority Mapping get API */
   1212 extern int bcm_th_oob_fc_rx_port_tc_mapping_get(
   1213     int unit,
   1214     bcm_oob_fc_rx_intf_id_t intf_id,
   1215     bcm_gport_t gport,
   1216     uint32 tc,
   1217     uint32 *pri_bmp);
   1218 
   1219 /* OOB FC Rx Interface side Configuration set API */
   1220 extern int bcm_th_oob_fc_rx_config_set(
   1221     int unit,
   1222     bcm_oob_fc_rx_intf_id_t intf_id,
   1223     bcm_oob_fc_rx_config_t *config,
   1224     int array_count,
   1225     bcm_gport_t *gport_array);
   1226 
   1227 /* OOB FC Rx Interface side Configuration get API */
   1228 extern int bcm_th_oob_fc_rx_config_get(
   1229     int unit,
   1230     bcm_oob_fc_rx_intf_id_t intf_id,
   1231     bcm_oob_fc_rx_config_t *config,
   1232     int array_max,
   1233     bcm_gport_t *gport_array,
   1234     int *array_count);
   1235 
   1236 /* OOB FC Rx Interface side Channel offset value for a port */
   1237 extern int bcm_th_oob_fc_rx_port_offset_get(
   1238     int unit,
   1239     bcm_oob_fc_rx_intf_id_t intf_id,
   1240     bcm_gport_t gport,
   1241     uint32 *offset);
   1242 
   1243 /* OOB STATS global configuration set API */
   1244 extern int bcm_th_oob_stats_config_set(
   1245     int unit,
   1246     bcm_oob_stats_config_t *config);
   1247 
   1248 /* OOB STATS global configuration get API */
   1249 extern int bcm_th_oob_stats_config_get(
   1250     int unit,
   1251     bcm_oob_stats_config_t *config);
   1252 
   1253 
   1254 /* OOB STATS configuration of service pool list multi set API */
   1255 extern int bcm_th_oob_stats_pool_mapping_multi_set(
   1256     int unit,
   1257     int array_count,
   1258     int *offset_array,
   1259     uint8 *dir_array,
   1260     bcm_service_pool_id_t *pool_array);
   1261 
   1262 /* OOB STATS configuration of service pool list multi get API */
   1263 extern int bcm_th_oob_stats_pool_mapping_multi_get(
   1264     int unit,
   1265     int array_max,
   1266     int *offset_array,
   1267     uint8 *dir_array,
   1268     bcm_service_pool_id_t *pool_array,
   1269     int *array_count);
   1270 
   1271 /* OOB STATS configuration of service pool list set API */
   1272 extern int bcm_th_oob_stats_pool_mapping_set(
   1273     int unit,
   1274     int offset,
   1275     uint8 dir,
   1276     bcm_service_pool_id_t pool);
   1277 
   1278 /* OOB STATS configuration of service pool list get API */
   1279 extern int bcm_th_oob_stats_pool_mapping_get(
   1280     int unit,
   1281     int offset,
   1282     uint8 *dir,
   1283     bcm_service_pool_id_t *pool);
   1284 
   1285 /* OOB STATS configuration of Queue list set API */
   1286 extern int bcm_th_oob_stats_queue_mapping_multi_set(
   1287     int unit,
   1288     int array_count,
   1289     int *offset_array,
   1290     bcm_gport_t *gport_array);
   1291 
   1292 /* OOB STATS configuration of Queue list get API */
   1293 extern int bcm_th_oob_stats_queue_mapping_multi_get(
   1294     int unit,
   1295     int array_max,
   1296     int *offset_array,
   1297     bcm_gport_t *gport_array,
   1298     int *array_count);
   1299 
   1300 /* OOB STATS configuration of Queue list set API */
   1301 extern int bcm_th_oob_stats_queue_mapping_set(
   1302     int unit,
   1303     int offset,
   1304     bcm_gport_t gport);
   1305 
   1306 /* OOB STATS configuration of Queue list get API */
   1307 extern int bcm_th_oob_stats_queue_mapping_get(
   1308     int unit,
   1309     int offset,
   1310     bcm_gport_t *gport);
   1311 
   1312 /* QoS */
   1313 extern int bcm_th_qos_init(int unit);
   1314 extern int bcm_th_qos_detach(int unit);
   1315 extern int bcm_th_qos_map_create(int unit, uint32 flags, int *map_id);
   1316 extern int bcm_th_qos_map_destroy(int unit, int map_id);
   1317 extern int bcm_th_qos_map_add(int unit,
   1318                               uint32 flags,
   1319                               bcm_qos_map_t *map,
   1320                               int map_id);
   1321 extern int bcm_th_qos_map_delete(int unit,
   1322                                  uint32 flags,
   1323                                  bcm_qos_map_t *map,
   1324                                  int map_id);
   1325 extern int bcm_th_qos_port_map_set(int unit,
   1326                                    bcm_gport_t port,
   1327                                    int ing_map,
   1328                                    int egr_map);
   1329 extern int bcm_th_qos_map_multi_get(int unit,
   1330                                     uint32 flags,
   1331                                     int map_id,
   1332                                     int array_size,
   1333                                     bcm_qos_map_t *array,
   1334                                     int *array_count);
   1335 extern int _bcm_th_qos_multi_get(int unit,
   1336                                  int array_size,
   1337                                  int *map_ids_array,
   1338                                  int *flags_array,
   1339                                  int *array_count);
   1340 extern int bcm_th_qos_port_map_type_get(int unit, bcm_gport_t port,
   1341                                         uint32 flags, int *map_id);
   1342 #ifdef BCM_WARM_BOOT_SUPPORT_SW_DUMP
   1343 extern void _bcm_th_qos_sw_dump(int unit);
   1344 #endif /* BCM_WARM_BOOT_SUPPORT_SW_DUMP */
   1345 #ifdef BCM_WARM_BOOT_SUPPORT
   1346 extern int _bcm_th_qos_reinit_scache_len_get(int unit, uint32 *scache_len);
   1347 extern int _bcm_th_qos_reinit_from_hw_state(int unit, soc_mem_t mem, 
   1348                                             soc_field_t field, uint8 map_type, 
   1349                                             SHR_BITDCL *hw_idx_bmp, int hw_idx_bmp_len);
   1350 extern int _bcm_th_qos_unsynchronized_reinit(int unit);
   1351 extern int _bcm_th_qos_extended_reinit(int unit, uint8 **scache_ptr);
   1352 extern int _bcm_th_qos_reinit_hw_profiles_update(int unit);
   1353 extern int _bcm_th_qos_sync(int unit, uint8 **scache_ptr);
   1354 #endif /* BCM_WARM_BOOT_SUPPORT */
   1355 extern int _bcm_field_th_qualify_LoopbackType(int unit,
   1356                                               bcm_field_LoopbackType_t loopback_type,
   1357                                               uint32                   *tcam_data,
   1358                                               uint32                   *tcam_mask);
   1359 extern int _bcm_field_th_qualify_LoopbackType_get(uint8                    tcam_data,
   1360                                                   uint8                    tcam_mask,
   1361                                                   bcm_field_LoopbackType_t *loopback_type);
   1362 extern int _bcm_field_th_qual_part_offset_get(int unit, _field_entry_t *f_ent,
   1363                                               int entry_part, int qid,
   1364                                               _bcm_field_qual_offset_t *offset);
   1365 
   1366 extern int _field_th_stage_entry_enable_set(int unit, _field_entry_t *f_ent,
   1367                                    int enable_flag);
   1368 extern int _field_th_group_qual_info_get(int unit,
   1369                                          _field_stage_t *stage_fc,
   1370                                          _field_group_t *fg,
   1371                                          bcm_field_qset_t *qset_req,
   1372                                          bcmi_keygen_qual_info_t **qual_info_arr,
   1373                                          uint16 *qual_info_count);
   1374 /*
   1375  * 8 Priority Groups supported.
   1376  */
   1377 #define TH_PRIOROTY_GROUP_ID_MIN 0
   1378 #define TH_PRIOROTY_GROUP_ID_MAX 7
   1379 /*
   1380  * Inpur priority range.
   1381  * PFC : 0-7
   1382  * SAFC : 0-15
   1383  */
   1384 #define TH_PFC_INPUT_PRIORITY_MIN  0
   1385 #define TH_PFC_INPUT_PRIORITY_MAX  7
   1386 #define TH_SAFC_INPUT_PRIORITY_MIN TH_PFC_INPUT_PRIORITY_MIN
   1387 #define TH_SAFC_INPUT_PRIORITY_MAX 15
   1388 
   1389 
   1390 #if defined(INCLUDE_FLOWTRACKER)
   1391 /* Flowtracker module APIs */
   1392 extern int _bcm_th_ft_init(int unit);
   1393 
   1394 extern int _bcm_th_ft_detach(int unit);
   1395 
   1396 extern int
   1397 _bcm_th_ft_export_template_create(
   1398                int unit,
   1399                uint32 options,
   1400                bcm_flowtracker_export_template_t *id,
   1401                uint16 set_id,
   1402                int num_export_elements,
   1403                bcm_flowtracker_export_element_info_t *list_of_export_elements);
   1404 
   1405 extern int
   1406 _bcm_th_ft_export_template_get(
   1407                  int unit,
   1408                  bcm_flowtracker_export_template_t id,
   1409                  uint16 *set_id,
   1410                  int max_size,
   1411                  bcm_flowtracker_export_element_info_t *list_of_export_elements,
   1412                  int *list_size);
   1413 
   1414 extern int
   1415 _bcm_th_ft_export_template_destroy(int unit,
   1416                                    bcm_flowtracker_export_template_t id);
   1417 
   1418 extern int
   1419 _bcm_th_ft_group_clear(int unit,
   1420                        bcm_flowtracker_group_t id,
   1421                        uint32 flags);
   1422 
   1423 extern int
   1424 _bcm_th_ft_collector_create(int unit,
   1425                             uint32 options,
   1426                             bcm_flowtracker_collector_t *id,
   1427                             bcm_flowtracker_collector_info_t *collector_info);
   1428 
   1429 extern int
   1430 _bcm_th_ft_collector_get(int unit,
   1431                          bcm_flowtracker_collector_t id,
   1432                          bcm_flowtracker_collector_info_t *collector_info);
   1433 
   1434 extern int
   1435 _bcm_th_ft_collector_get_all(
   1436                      int unit,
   1437                      int max_size,
   1438                      bcm_flowtracker_collector_t *collector_list,
   1439                      int *list_size);
   1440 
   1441 extern int _bcm_th_ft_collector_destroy(int unit,
   1442                                         bcm_flowtracker_collector_t id);
   1443 
   1444 extern int _bcm_th_ft_group_collector_attach(
   1445         int unit,
   1446         bcm_flowtracker_group_t flow_group_id,
   1447         bcm_collector_t collector_id,
   1448         int export_profile_id,
   1449         bcm_flowtracker_export_template_t template_id);
   1450 
   1451 extern int _bcm_th_ft_group_collector_detach(
   1452         int unit,
   1453         bcm_flowtracker_group_t flow_group_id,
   1454         bcm_collector_t collector_id,
   1455         int export_profile_id,
   1456         bcm_flowtracker_export_template_t template_id);
   1457 
   1458 extern int _bcm_th_ft_group_collector_attach_get_all(
   1459     int unit,
   1460     bcm_flowtracker_group_t flow_group_id,
   1461     int max_list_size,
   1462     bcm_flowtracker_collector_t *list_of_collectors,
   1463     int *list_of_export_profile_ids,
   1464     bcm_flowtracker_export_template_t *list_of_templates,
   1465     int *list_size);
   1466 
   1467 extern int
   1468 _bcm_th_ft_flow_group_create(int unit,
   1469                              uint32 options,
   1470                              bcm_flowtracker_group_t *id,
   1471                              bcm_flowtracker_group_info_t *flow_group_info);
   1472 
   1473 extern int
   1474 _bcm_th_ft_flow_group_get(int unit,
   1475                           bcm_flowtracker_group_t id,
   1476                           bcm_flowtracker_group_info_t *flow_group_info);
   1477 
   1478 extern int
   1479 _bcm_th_ft_flow_group_get_all(int unit,
   1480                               int max_size,
   1481                               bcm_flowtracker_group_t *flow_group_list,
   1482                               int *list_size);
   1483 
   1484 extern int _bcm_th_ft_flow_group_flow_limit_set(int unit,
   1485                                                 bcm_flowtracker_group_t id,
   1486                                                 uint32 flow_limit);
   1487 
   1488 extern int _bcm_th_ft_flow_group_flow_limit_get(int unit,
   1489                                                 bcm_flowtracker_group_t id,
   1490                                                 uint32 *flow_limit);
   1491 
   1492 extern int _bcm_th_ft_flow_group_stat_modeid_set(int unit,
   1493                                                  bcm_flowtracker_group_t id,
   1494                                                  uint32 stat_modeid);
   1495 
   1496 extern int _bcm_th_ft_flow_group_stat_modeid_get(int unit,
   1497                                                  bcm_flowtracker_group_t id,
   1498                                                  uint32 *stat_modeid);
   1499 
   1500 extern int _bcm_th_ft_flow_group_age_timer_set(int unit,
   1501                                                bcm_flowtracker_group_t id,
   1502                                                uint32 aging_interval_ms);
   1503 
   1504 extern int _bcm_th_ft_flow_group_age_timer_get(int unit,
   1505                                                bcm_flowtracker_group_t id,
   1506                                                uint32 *aging_interval_ms);
   1507 
   1508 extern int
   1509 _bcm_th_ft_flow_group_export_trigger_set(
   1510                       int unit,
   1511                       bcm_flowtracker_group_t id,
   1512                       bcm_flowtracker_export_trigger_info_t *export_trigger_info);
   1513 
   1514 extern int
   1515 _bcm_th_ft_flow_group_export_trigger_get(
   1516                      int unit,
   1517                      bcm_flowtracker_group_t id,
   1518                      bcm_flowtracker_export_trigger_info_t *export_trigger_info);
   1519 
   1520 extern int _bcm_th_ft_flow_group_flow_count_get(int unit,
   1521                                                 bcm_flowtracker_group_t id,
   1522                                                 uint32 *flow_count);
   1523 
   1524 extern int _bcm_th_ft_flow_group_destroy(int unit,
   1525                                          bcm_flowtracker_group_t id);
   1526 
   1527 extern int
   1528 _bcm_th_ft_flow_group_collector_add(int unit,
   1529                                     bcm_flowtracker_group_t flow_group_id,
   1530                                     bcm_flowtracker_collector_t collector_id,
   1531                                     bcm_flowtracker_export_template_t template_id);
   1532 
   1533 extern int
   1534 _bcm_th_ft_flow_group_collector_delete(int unit,
   1535                                        bcm_flowtracker_group_t flow_group_id,
   1536                                        bcm_flowtracker_collector_t collector_id,
   1537                                        bcm_flowtracker_export_template_t template_id);
   1538 
   1539 extern int _bcm_th_ft_flow_group_collector_get_all(
   1540     int unit,
   1541     bcm_flowtracker_group_t flow_group_id,
   1542     int max_list_size,
   1543     bcm_flowtracker_collector_t *list_of_collectors,
   1544     bcm_flowtracker_export_template_t *list_of_templates,
   1545     int *list_size);
   1546 
   1547 extern int _bcm_th_ft_group_data_get(
   1548                                          int unit,
   1549                                          bcm_flowtracker_group_t flow_group_id,
   1550                                          bcm_flowtracker_flow_key_t *flow_key,
   1551                                          bcm_flowtracker_flow_data_t *flow_data);
   1552 
   1553 extern int
   1554 _bcm_th_ft_group_actions_set(
   1555                                 int unit,
   1556                                 bcm_flowtracker_group_t flow_group_id,
   1557                                 uint32 flags,
   1558                                 int num_actions,
   1559                                 bcm_flowtracker_group_action_info_t *action_list);
   1560 
   1561 extern int
   1562 _bcm_th_ft_group_actions_get(
   1563                                int unit,
   1564                                bcm_flowtracker_group_t flow_group_id,
   1565                                uint32 flags,
   1566                                int max_actions,
   1567                                bcm_flowtracker_group_action_info_t *action_list,
   1568                                int *num_actions);
   1569 
   1570 extern int
   1571 _bcm_th_ft_template_transmit_config_set(
   1572                              int unit,
   1573                              bcm_flowtracker_export_template_t template_id,
   1574                              bcm_flowtracker_collector_t collector_id,
   1575                              bcm_flowtracker_template_transmit_config_t *config);
   1576 extern int
   1577 _bcm_th_ft_template_transmit_config_get(
   1578                              int unit,
   1579                              bcm_flowtracker_export_template_t template_id,
   1580                              bcm_flowtracker_collector_t collector_id,
   1581                              bcm_flowtracker_template_transmit_config_t *config);
   1582 
   1583 extern int
   1584 _bcm_th_ft_elephant_profile_create(
   1585                                 int unit,
   1586                                 uint32 options,
   1587                                 bcm_flowtracker_elephant_profile_info_t *profile,
   1588                                 bcm_flowtracker_elephant_profile_t *profile_id);
   1589 
   1590 extern int
   1591 _bcm_th_ft_elephant_profile_destroy(
   1592                                   int unit,
   1593                                   bcm_flowtracker_elephant_profile_t profile_id);
   1594 
   1595 extern int
   1596 _bcm_th_ft_elephant_profile_get(
   1597                                int unit,
   1598                                bcm_flowtracker_elephant_profile_t profile_id,
   1599                                bcm_flowtracker_elephant_profile_info_t *profile);
   1600 
   1601 extern int
   1602 _bcm_th_ft_elephant_profile_get_all(
   1603                            int unit,
   1604                            int max,
   1605                            bcm_flowtracker_elephant_profile_t *profile_list,
   1606                            int *count);
   1607 
   1608 extern int
   1609 _bcm_th_ft_group_elephant_profile_attach(
   1610                                   int unit,
   1611                                   bcm_flowtracker_group_t flow_group_id,
   1612                                   bcm_flowtracker_elephant_profile_t profile_id);
   1613 
   1614 extern int
   1615 _bcm_th_ft_group_elephant_profile_attach_get(
   1616                                  int unit,
   1617                                  bcm_flowtracker_group_t flow_group_id,
   1618                                  bcm_flowtracker_elephant_profile_t *profile_id);
   1619 
   1620 extern int
   1621 _bcm_th_ft_group_elephant_profile_detach(int unit,
   1622                                          bcm_flowtracker_group_t flow_group_id);
   1623 
   1624 extern int _bcm_th_ft_sync(int unit);
   1625 
   1626 extern int
   1627 _bcm_th_ft_flow_group_tracking_params_set(
   1628                       int unit,
   1629                       bcm_flowtracker_group_t id,
   1630                       int num_tracking_params,
   1631                       bcm_flowtracker_tracking_param_info_t *list_of_tracking_params);
   1632 
   1633 extern int
   1634 _bcm_th_ft_flow_group_tracking_params_get(
   1635                       int unit,
   1636                       bcm_flowtracker_group_t id,
   1637                       int max_size,
   1638                       int *list_size,
   1639                       bcm_flowtracker_tracking_param_info_t *list_of_tracking_params);
   1640 
   1641 #endif /* INCLUDE_FLOWTRACKER */
   1642 
   1643 /* Congestion Monitoring App Microburst detection APIs */
   1644 extern int bcm_th_cosq_burst_monitor_init(int unit);
   1645 extern int bcm_th_cosq_burst_monitor_detach(int unit);
   1646 extern int bcm_th_cosq_burst_monitor_flow_view_config_set(int unit,
   1647         uint32 options, bcm_cosq_burst_monitor_flow_view_info_t *flow_view);
   1648 extern int bcm_th_cosq_burst_monitor_flow_view_config_get(int unit,
   1649         bcm_cosq_burst_monitor_flow_view_info_t *flow_view);
   1650 extern int bcm_th_cosq_burst_monitor_flow_view_data_clear(int unit);
   1651 extern int bcm_th_cosq_burst_monitor_flow_view_data_get(int unit,
   1652         uint32 usr_mem_size, uint8 *usr_mem_add);
   1653 extern int bcm_th_cosq_burst_monitor_get_current_time(int unit, uint64 *time_usecs);
   1654 extern int bcm_th_cosq_burst_monitor_view_summary_get(int unit, uint32 mem_size,
   1655         uint8 *mem_addr, int max_num_views, int *num_views);
   1656 extern int bcm_th_cosq_burst_monitor_flow_view_stats_get(int unit, uint32 mem_size,
   1657         uint8 *mem_addr, int max_num_flows, int view_id, uint32 flags, int *num_flows);
   1658 extern int bcm_th_cosq_burst_monitor_dma_config_set(int unit,
   1659                                                     uint32 host_mem_size,
   1660                                                     uint32 **host_mem_add);
   1661 extern int bcm_th_cosq_burst_monitor_dma_config_get(int unit,
   1662                                                     uint32 *host_mem_size,
   1663                                                     uint32 **host_mem_add);
   1664 extern int bcm_th_cosq_burst_monitor_set(int unit, int num_gports,
   1665                                          bcm_gport_t *gport_list);
   1666 extern int bcm_th_cosq_burst_monitor_get(int unit, int max_gports,
   1667                                          bcm_gport_t *gport_list,
   1668                                          int *num_gports);
   1669 extern int bcm_th_cosq_burst_monitor_dma_config_reset(int unit,
   1670                                                       uint8 wb_flag);
   1671 
   1672 extern int
   1673 _bcm_field_th_ddrop_profile_alloc(int unit, _field_entry_t *f_ent,
   1674                                    _field_action_t *fa);
   1675 extern int
   1676 _bcm_field_th_dredirect_profile_alloc(int unit, _field_entry_t *f_ent,
   1677                                    _field_action_t *fa);
   1678 
   1679 #if defined(BCM_CHANNELIZED_SWITCHING_SUPPORT)
   1680 extern int
   1681 bcmi_ipmc_chn_repl_port_attach(int unit);
   1682 
   1683 extern int
   1684 bcmi_ipmc_chn_repl_port_detach(int unit);
   1685 
   1686 #endif
   1687 
   1688 
   1689 #endif /* BCM_TOMAHAWK_SUPPORT  */
   1690 
   1691 #endif /* !_BCM_INT_TOMAHAWK_H_ */