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


      1 /*
      2  * 
      3  * This license is set out in https://raw.githubusercontent.com/Broadcom-Network-Switching-Software/OpenBCM/master/Legal/LICENSE file.
      4  * 
      5  * Copyright 2007-2019 Broadcom Inc. All rights reserved.
      6  *
      7  * File:        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 extern bcm_error_t bcm_th_l3_extended_view_reinit(int unit, uint8 **scache_ptr);
    711 
    712 extern int bcm_th_aggid_info_detach(int unit);
    713 extern int bcm_th_aggid_info_init(int unit);
    714 extern int bcm_th_set_port_hw_agg_map(int unit, bcm_port_t port, int aggid);
    715 extern int bcm_th_port_aggid_add(int unit, bcm_port_t port, bcm_trunk_t tgid,
    716                                  int *aggid);
    717 extern int bcm_th_port_aggid_del(int unit, bcm_port_t port);
    718 
    719 extern int bcm_th_port_trunkid_get(int unit, bcm_port_t port, int *tgid);
    720 extern int bcm_th_port_last_member_check(int unit, bcm_port_t port, int *val);
    721 extern int bcm_th_port_to_aggid(int unit, bcm_port_t port, int *aggid);
    722 
    723 #ifdef BCM_WARM_BOOT_SUPPORT
    724 extern int _bcm_th_ipmc_repl_l3_intf_scache_size_get(int unit, uint32 *size);
    725 extern int _bcm_th_ipmc_repl_l3_intf_sync(int unit, uint8 **scache_ptr);
    726 extern int _bcm_th_ipmc_repl_l3_intf_scache_recover(int unit, uint8 **scache_ptr);
    727 extern int _bcm_th_ipmc_repl_reload(int unit);
    728 extern int _bcm_th_ipmc_repl_l3_intf_nh_map_scache_size_get(int unit, uint32 *size);
    729 extern int _bcm_th_ipmc_repl_l3_intf_nh_map_sync(int unit, uint8 **scache_ptr);
    730 extern int _bcm_th_ipmc_repl_l3_intf_nh_map_scache_recover(int unit, uint8 **scache_ptr);
    731 extern int _bcm_th_ipmc_repl_l3_intf_trill_nh_map_scache_size_get(int unit, uint32 *size);
    732 extern int _bcm_th_ipmc_repl_l3_intf_trill_nh_map_sync(int unit, uint8 **scache_ptr);
    733 extern int _bcm_th_ipmc_repl_l3_intf_trill_nh_map_scache_recover(int unit, uint8 **scache_ptr);
    734 #endif /* BCM_WARM_BOOT_SUPPORT */
    735 
    736 #ifndef BCM_SW_STATE_DUMP_DISABLE
    737 extern void _bcm_th_ipmc_repl_sw_dump(int unit);
    738 #endif /* BCM_SW_STATE_DUMP_DISABLE */
    739 
    740 /* Resilient Hashing funcitons */
    741 extern int bcm_opt_ecmp_rh_init(int unit);
    742 extern int bcm_opt_ecmp_rh_deinit(int unit);
    743 extern int bcm_opt_l3_egress_ecmp_rh_create(int unit,
    744                                            bcm_l3_egress_ecmp_t *ecmp,
    745                                            int intf_count,
    746                                            bcm_if_t *intf_array,
    747                                            int op, int count,
    748                                            bcm_if_t *intf,
    749                                            bcm_if_t *new_intf_array);
    750 extern int bcm_opt_l3_egress_ecmp_rh_destroy(int unit, bcm_if_t mpintf);
    751 extern int bcm_opt_l3_egress_ecmp_lb_get(int unit, bcm_l3_egress_ecmp_t *ecmp);
    752 extern int bcm_opt_l3_egress_ecmp_rh_shared_copy(int unit, int old_ecmp_group,
    753                                                 int new_ecmp_group);
    754 extern int bcm_opt_ecmp_rh_set_intf_arr(int unit, int intf_count,
    755                                        bcm_if_t *intf_array,
    756                                        int ecmp_group_idx,
    757                                        int group_size,
    758                                        int max_paths);
    759 extern int bcm_opt_ecmp_rh_multipath_get(int unit, int ecmp_group_idx, int intf_size,
    760                                         bcm_if_t *intf_array, int *intf_count,
    761                                         int *max_paths);
    762 extern int bcm_opt_l3_egress_rh_ecmp_find(int unit, int intf_count,
    763                                          bcm_if_t *intf_array, bcm_if_t *mpintf);
    764 extern int bcm_opt_ecmp_lb_mode_set(int unit,
    765                                    int ecmp_group_idx,
    766                                    uint8 lb_mode);
    767 extern int bcm_opt_ecmp_lb_mode_reset(int unit,
    768                                      bcm_if_t mpintf);
    769 extern void bcm_opt_ecmp_group_rh_set(int unit, int ecmp_group_idx, int enable);
    770 extern int bcm_opt_ecmp_group_is_rh(int unit,
    771                                    int ecmp_group_idx);
    772 extern int bcm_opt_l3_egress_ecmp_rh_shared_copy(int unit, int old_ecmp_group,
    773                                                 int new_ecmp_group);
    774 
    775 #ifdef BCM_WARM_BOOT_SUPPORT
    776 extern int bcm_opt_l3_ecmp_rh_member_sync(int unit, uint8 **scache_ptr);
    777 extern int bcm_opt_l3_ecmp_rh_member_recover(int unit, uint8 **scache_ptr,
    778                                             int ecmp_max_paths);
    779 #endif /* BCM_WARM_BOOT_SUPPORT */
    780 
    781 #ifndef BCM_SW_STATE_DUMP_DISABLE
    782 extern void bcm_opt_ecmp_rh_sw_dump(int unit);
    783 #endif /* BCM_SW_STATE_DUMP_DISABLE */
    784 
    785 #endif /* INCLUDE_L3 */
    786 
    787 extern bcm_error_t
    788 _bcm_th_port_speed_supported(int unit, bcm_port_t port, int speed);
    789 extern int bcm_th_phy_lb_check(int unit, bcm_port_t port, int loopback);
    790 extern int bcm_th_phy_lb_set(int unit);
    791 
    792 /* Cosq */
    793 extern int _bcm_th_cosq_port_resolve(int unit, bcm_gport_t gport, 
    794                                      bcm_module_t *modid, bcm_port_t *port,
    795                                      bcm_trunk_t *trunk_id, int *id, int *qnum);
    796 extern int bcm_th_cosq_gport_get(int unit, bcm_gport_t gport, bcm_gport_t *port,
    797                                  int *numq, uint32 *flags);
    798 extern int bcm_th_cosq_port_bandwidth_set(int unit, bcm_port_t port,
    799                                           bcm_cos_queue_t cosq,
    800                                           uint32 min_quantum, uint32 max_quantum,
    801                                           uint32 burst_quantum, uint32 flags);
    802 extern int bcm_th_cosq_port_bandwidth_get(int unit, bcm_port_t port,
    803                                           bcm_cos_queue_t cosq,
    804                                           uint32 *min_quantum,
    805                                           uint32 *max_quantum,
    806                                           uint32 *burst_quantum,
    807                                           uint32 *flags);
    808 
    809 extern int bcm_th_cosq_gport_bandwidth_burst_set(int unit, bcm_gport_t gport,
    810                                                  bcm_cos_queue_t cosq,
    811                                                  uint32 kbits_burst_min, 
    812                                                  uint32 kbits_burst_max);
    813 extern int bcm_th_cosq_gport_bandwidth_burst_get(int unit, bcm_gport_t gport,
    814                                                  bcm_cos_queue_t cosq,
    815                                                  uint32 *kbits_burst_min,
    816                                                  uint32 *kbits_burst_max);
    817 
    818 extern int bcm_th_cosq_gport_sched_get(int unit, bcm_gport_t gport,
    819                                        bcm_cos_queue_t cosq, int *mode,
    820                                        int *weight);
    821 extern int bcm_th_cosq_gport_sched_set(int unit, bcm_gport_t gport,
    822                                        bcm_cos_queue_t cosq, int mode,
    823                                        int weight);
    824 extern int bcm_th_cosq_sched_weight_max_get(int unit, int mode,
    825                                             int *weight_max);
    826 
    827 extern int bcm_th_cosq_gport_traverse(int unit, bcm_cosq_gport_traverse_cb cb,
    828                                       void *user_data);
    829 
    830 extern int bcm_th_cosq_gport_traverse_by_port(int unit, bcm_gport_t port,
    831                                            bcm_cosq_gport_traverse_cb cb,
    832                                            void *user_data);
    833 extern int bcm_th_cosq_gport_bandwidth_set(int unit, bcm_gport_t gport,
    834                                            bcm_cos_queue_t cosq,
    835                                            uint32 kbits_sec_min,
    836                                            uint32 kbits_sec_max,
    837                                            uint32 flags);
    838 extern int bcm_th_cosq_gport_bandwidth_get(int unit, bcm_gport_t gport,
    839                                            bcm_cos_queue_t cosq,
    840                                            uint32 *kbits_sec_min,
    841                                            uint32 *kbits_sec_max,
    842                                            uint32 *flags);
    843 extern int bcm_th_cosq_port_burst_set(int unit, bcm_port_t port, 
    844                                       bcm_cos_queue_t cosq, int burst);
    845 extern int bcm_th_cosq_port_burst_get(int unit, bcm_port_t port,
    846                                       bcm_cos_queue_t cosq,
    847                                       int *burst);
    848 
    849 extern int bcm_th_port_rate_egress_set(int unit, bcm_port_t port,
    850                                        uint32 bandwidth, uint32 burst,
    851                                        uint32 mode);
    852 extern int bcm_th_port_rate_egress_get(int unit, bcm_port_t port,
    853                                        uint32 *bandwidth, uint32 *burst,
    854                                        uint32 *mode);
    855 extern int bcm_th_port_drain_cells(int unit, int port);
    856 
    857 extern int bcm_th_cosq_port_pps_set(int unit, bcm_port_t port,
    858                                     bcm_cos_queue_t cosq, int pps);
    859 extern int bcm_th_cosq_port_pps_get(int unit, bcm_port_t port,
    860                                     bcm_cos_queue_t cosq, int *pps);
    861 
    862 extern int bcm_th_cosq_discard_set(int unit, uint32 flags);
    863 extern int bcm_th_cosq_discard_get(int unit, uint32 *flags);
    864 
    865 extern int bcm_th_cosq_discard_port_get(int unit, bcm_port_t port, 
    866                                         bcm_cos_queue_t cosq, uint32 color,
    867                                         int *drop_start, 
    868                                         int *drop_slope, int *average_time);
    869 extern int bcm_th_cosq_discard_port_set(int unit, bcm_port_t port, 
    870                                         bcm_cos_queue_t cosq,
    871                                         uint32 color, int drop_start,
    872                                         int drop_slope,
    873                                         int average_time);
    874 
    875 extern int bcm_th_cosq_gport_discard_set(int unit, bcm_gport_t gport,
    876                                          bcm_cos_queue_t cosq,
    877                                          bcm_cosq_buffer_id_t buffer,
    878                                          bcm_cosq_gport_discard_t *discard);
    879 extern int bcm_th_cosq_gport_discard_get(int unit, bcm_gport_t gport,
    880                                          bcm_cos_queue_t cosq,
    881                                          bcm_cosq_buffer_id_t buffer,
    882                                          bcm_cosq_gport_discard_t *discard);
    883 
    884 extern int bcm_th_cosq_wred_resolution_entry_create(int unit, int *index);
    885 extern int bcm_th_cosq_wred_resolution_entry_destroy(int unit, int index);
    886 extern int bcm_th_cosq_wred_resolution_set(int unit, int index,
    887                                            bcm_cosq_discard_rule_t *rule);
    888 extern int bcm_th_cosq_wred_resolution_get(int unit, int index, int max,
    889                                            bcm_cosq_discard_rule_t *rule,
    890                                            int *count);
    891 
    892 extern int bcm_th_cosq_port_pfc_op(int unit, bcm_port_t port,
    893                                    bcm_switch_control_t sctype,
    894                                    _bcm_cosq_op_t op,
    895                                    bcm_gport_t *gport,
    896                                    int gport_count);
    897 extern int bcm_th_cosq_port_pfc_get(int unit, bcm_port_t port,
    898                                     bcm_switch_control_t sctype,
    899                                     bcm_gport_t *gport,
    900                                     int gport_count,
    901                                     int *actual_gport_count);
    902 extern int
    903 bcm_th_pfc_deadlock_ignore_pfc_xoff_gen(int unit, int priority,
    904                                         bcm_port_t port, uint32 *rval32);
    905 extern int
    906 bcm_th_cosq_pfc_class_mapping_set(int unit, bcm_gport_t port,
    907                                   int array_count,
    908                                   bcm_cosq_pfc_class_mapping_t *mapping_array);
    909 
    910 extern int
    911 bcm_th_cosq_pfc_class_mapping_get(int unit, bcm_gport_t port,
    912                                   int array_max,
    913                                   bcm_cosq_pfc_class_mapping_t *mapping_array,
    914                                   int *array_count);
    915 extern int
    916 bcm_th_cosq_safc_class_mapping_set(int unit, bcm_gport_t port,
    917                                    int array_count,
    918                                    bcm_cosq_safc_class_mapping_t *mapping_array);
    919 
    920 extern int
    921 bcm_th_cosq_safc_class_mapping_get(int unit, bcm_gport_t port,
    922                                    int array_max,
    923                                    bcm_cosq_safc_class_mapping_t *mapping_array,
    924                                    int *array_count);
    925 
    926 extern int
    927 bcm_th_port_priority_group_mapping_set(int unit, bcm_gport_t gport,
    928                                         int prio, int priority_group);
    929 extern int
    930 bcm_th_port_priority_group_mapping_get(int unit, bcm_gport_t gport,
    931                                         int prio, int *priority_group);
    932 extern int
    933 bcm_th_port_priority_group_config_set(int unit, bcm_gport_t gport,
    934     int priority_group, bcm_port_priority_group_config_t *prigrp_config);
    935 extern int
    936 bcm_th_port_priority_group_config_get(int unit, bcm_gport_t gport,
    937     int priority_group, bcm_port_priority_group_config_t *prigrp_config);
    938 
    939 extern int bcm_th_cosq_port_sched_set(int unit, bcm_pbmp_t pbm,
    940                                       int mode, const int *weights, int delay);
    941 extern int bcm_th_cosq_port_sched_get(int unit, bcm_pbmp_t pbm,
    942                                       int *mode, int *weights, int *delay);
    943 
    944 extern int bcm_th_cosq_gport_add(int unit, bcm_gport_t port, int numq,
    945                                  uint32 flags, bcm_gport_t *gport);
    946 extern int bcm_th_cosq_gport_delete(int unit, bcm_gport_t gport);
    947 extern int bcm_th_cosq_gport_attach(int unit, bcm_gport_t input_gport,
    948                                     bcm_gport_t parent_gport,
    949                                     bcm_cos_queue_t cosq);
    950 extern int bcm_th_rx_queue_channel_set_test(int unit,
    951                                             bcm_cos_queue_t queue_id,
    952                                             bcm_rx_chan_t chan_id);
    953 extern int bcm_th_cosq_gport_detach(int unit, bcm_gport_t input_gport,
    954                                     bcm_gport_t parent_gport,
    955                                     bcm_cos_queue_t cosq);
    956 extern int
    957 bcm_th_cosq_gport_attach_get(int unit, bcm_gport_t sched_gport,
    958                              bcm_gport_t *input_gport, bcm_cos_queue_t *cosq);
    959 extern int
    960 bcm_th_cosq_gport_child_get(int unit, bcm_gport_t in_gport,
    961                              bcm_cos_queue_t cosq, bcm_gport_t *out_gport);
    962 
    963 extern int bcm_th_cosq_mapping_set(int unit, bcm_port_t gport, 
    964                                    bcm_cos_t priority, bcm_cos_queue_t cosq);
    965 extern int bcm_th_cosq_mapping_get(int unit, bcm_port_t gport,
    966                                    bcm_cos_t priority, bcm_cos_queue_t *cosq);
    967 
    968 extern int bcm_th_cosq_control_set(int unit, bcm_gport_t gport,
    969                                    bcm_cos_queue_t cosq,
    970                                    bcm_cosq_buffer_id_t buffer,
    971                                    bcm_cosq_control_t type, int arg);
    972 extern int bcm_th_cosq_control_get(int unit, bcm_gport_t gport,
    973                                    bcm_cos_queue_t cosq,
    974                                    bcm_cosq_buffer_id_t buffer,
    975                                    bcm_cosq_control_t type, int *arg);
    976 
    977 extern int bcm_th_cosq_stat_set(int unit, bcm_gport_t port,
    978                                 bcm_cos_queue_t cosq,
    979                                 bcm_cosq_stat_t stat, uint64 value);
    980 extern int bcm_th_cosq_stat_get(int unit, bcm_port_t port,
    981                                 bcm_cos_queue_t cosq,
    982                                 bcm_cosq_stat_t stat, int sync_mode,
    983                                 uint64 *value);
    984 
    985 extern int bcm_th_cosq_gport_mapping_set(int unit, bcm_port_t ing_port,
    986                                          bcm_cos_t int_pri, uint32 flags,
    987                                          bcm_gport_t gport,
    988                                          bcm_cos_queue_t cosq);
    989 extern int bcm_th_cosq_gport_mapping_get(int unit, bcm_port_t ing_port,
    990                                          bcm_cos_t int_pri, uint32 flags,
    991                                          bcm_gport_t *gport,
    992                                          bcm_cos_queue_t *cosq);
    993 extern int bcm_th_cosq_priority_mapping_get_all(int unit, bcm_gport_t gport,
    994                                                 int index,
    995                                                 bcm_cosq_priority_mapping_t type,
    996                                                 int pri_max, int *pri_array,
    997                                                 int *pri_count);
    998 
    999 extern int bcm_th_cosq_config_set(int unit, int numq);
   1000 extern int bcm_th_cosq_config_get(int unit, int *numq);
   1001 extern int bcm_th_cosq_buffer_id_multi_get(int unit, bcm_gport_t gport,
   1002                                   bcm_cos_queue_t cosq, bcm_cosq_dir_t direction,
   1003                                   int array_max, bcm_cosq_buffer_id_t *buf_id_array,
   1004                                   int *array_count);
   1005 extern int
   1006 bcm_th_cosq_field_classifier_get(
   1007     int unit, int classifier_id, bcm_cosq_classifier_t *classifier);
   1008 
   1009 extern int
   1010 bcm_th_cosq_field_classifier_id_create(
   1011     int unit, bcm_cosq_classifier_t *classifier, int *classifier_id);
   1012 
   1013 extern int
   1014 bcm_th_cosq_field_classifier_id_destroy(
   1015     int unit, int classifier_id);
   1016 
   1017 extern int
   1018 bcm_th_cosq_field_classifier_map_set(
   1019     int unit, int classifier_id, int count,
   1020     bcm_cos_t *priority_array, bcm_cos_queue_t *cosq_array);
   1021 
   1022 extern int
   1023 bcm_th_cosq_field_classifier_map_get(
   1024     int unit, int classifier_id,
   1025     int array_max, bcm_cos_t *priority_array,
   1026     bcm_cos_queue_t *cosq_array, int *array_count);
   1027 
   1028 extern int
   1029 bcm_th_cosq_field_classifier_map_clear(
   1030     int unit, int classifier_id);
   1031 
   1032 extern int bcm_th_cosq_init(int unit);
   1033 extern int bcm_th_cosq_detach(int unit, int software_state_only);
   1034 extern int _bcm_th_pfc_deadlock_init(int unit);
   1035 extern int bcm_th_pfc_deadlock_recovery_start(int unit,
   1036                                               bcm_port_t port, int pri);
   1037 extern int bcm_th_pfc_deadlock_recovery_exit(int unit,
   1038                                               bcm_port_t port, int pri);
   1039 
   1040 extern int
   1041 bcm_th_cosq_bst_profile_set(int unit,
   1042                             bcm_gport_t port,
   1043                             bcm_cos_queue_t cosq,
   1044                             bcm_bst_stat_id_t bid,
   1045                             bcm_cosq_bst_profile_t *profile);
   1046 
   1047 extern int
   1048 bcm_th_cosq_bst_profile_get(int unit,
   1049                             bcm_gport_t port,
   1050                             bcm_cos_queue_t cosq,
   1051                             bcm_bst_stat_id_t bid,
   1052                             bcm_cosq_bst_profile_t *profile);
   1053 
   1054 extern int
   1055 bcm_th_cosq_bst_multi_profile_set(int unit,
   1056                             bcm_gport_t gport,
   1057                             bcm_cos_queue_t cosq,
   1058                             bcm_bst_stat_id_t bid,
   1059                             int array_size,
   1060                             bcm_cosq_bst_profile_t *profile_array);
   1061 
   1062 extern int
   1063 bcm_th_cosq_bst_multi_profile_get(int unit,
   1064                             bcm_gport_t gport,
   1065                             bcm_cos_queue_t cosq,
   1066                             bcm_bst_stat_id_t bid,
   1067                             int array_size,
   1068                             bcm_cosq_bst_profile_t *profile_array,
   1069                             int *count);
   1070 
   1071 extern int
   1072 bcm_th_cosq_bst_stat_get(int unit,
   1073                          bcm_gport_t port,
   1074                          bcm_cos_queue_t cosq,
   1075                          bcm_cosq_buffer_id_t buffer,
   1076                          bcm_bst_stat_id_t bid,
   1077                          uint32 options,
   1078                          uint64 *pvalue);
   1079 
   1080 extern int
   1081 bcm_th_cosq_bst_stat_multi_get(int unit,
   1082                                bcm_gport_t port,
   1083                                bcm_cos_queue_t cosq,
   1084                                uint32 options,
   1085                                int max_values,
   1086                                bcm_bst_stat_id_t *id_list,
   1087                                uint64 *pvalues);
   1088 
   1089 extern int
   1090 bcm_th_cosq_bst_stat_clear(int unit, bcm_gport_t port,
   1091                            bcm_cos_queue_t cosq, bcm_cosq_buffer_id_t buffer,
   1092                            bcm_bst_stat_id_t bid);
   1093 
   1094 extern int bcm_th_cosq_bst_stat_sync(int unit, bcm_bst_stat_id_t bid);
   1095 
   1096 extern int
   1097 _bcm_th_bst_hdrm_stat_clear(int unit,
   1098                             bcm_gport_t gport,
   1099                             bcm_cos_queue_t cosq,
   1100                             bcm_cosq_buffer_id_t buffer);
   1101 
   1102 extern int
   1103 _bcm_th_cosq_bst_hdrm_stat_get(int unit,
   1104                                bcm_gport_t gport,
   1105                                bcm_cos_queue_t cosq,
   1106                                bcm_cosq_buffer_id_t buffer,
   1107                                uint32 options,
   1108                                uint64 *pvalue);
   1109 
   1110 extern int
   1111 _bcm_th_port_enqueue_set(int unit, bcm_port_t gport, int enable);
   1112 
   1113 extern int
   1114 _bcm_th_port_enqueue_get(int unit, bcm_port_t gport, int *enable);
   1115 
   1116 extern int bcm_th_cosq_cpu_cosq_enable_set(int unit, bcm_cos_queue_t cosq,
   1117                                            int enable);
   1118 extern int bcm_th_cosq_cpu_cosq_enable_get(int unit, bcm_cos_queue_t cosq,
   1119                                            int *enable);
   1120 extern void bcm_th_cosq_sw_dump(int unit);
   1121 
   1122 #ifdef BCM_WARM_BOOT_SUPPORT
   1123 extern int bcm_th_cosq_sync(int unit);
   1124 extern int bcm_th_cosq_reinit(int unit);
   1125 #endif /* BCM_WARM_BOOT_SUPPORT */
   1126 
   1127 typedef enum {
   1128     _BCM_TH_COSQ_INDEX_STYLE_WRED_QUEUE,
   1129     _BCM_TH_COSQ_INDEX_STYLE_WRED_PORT,
   1130     _BCM_TH_COSQ_INDEX_STYLE_WRED_DEVICE,
   1131     _BCM_TH_COSQ_INDEX_STYLE_UCAST_QUEUE,
   1132     _BCM_TH_COSQ_INDEX_STYLE_MCAST_QUEUE,
   1133     _BCM_TH_COSQ_INDEX_STYLE_EGR_POOL,
   1134     _BCM_TH_COSQ_INDEX_STYLE_COS,
   1135     _BCM_TH_COSQ_INDEX_STYLE_COUNT
   1136 } _bcm_th_cosq_index_style_t;
   1137 
   1138 extern int _bcm_th_cosq_index_resolve(int unit, bcm_port_t port,
   1139                                       bcm_cos_queue_t cosq, _bcm_th_cosq_index_style_t style,
   1140                                       bcm_port_t *local_port, int *index, int *count);
   1141 
   1142 extern int _bcm_th_cosq_port_cos_resolve(int unit, bcm_port_t port, bcm_cos_t cos,
   1143                                          _bcm_th_cosq_index_style_t style,
   1144                                          bcm_gport_t *gport);
   1145 extern int _bcm_th_cosq_inv_mapping_get(int unit, bcm_gport_t gport,
   1146                                         bcm_cos_queue_t cosq,
   1147                                         uint32 flags, bcm_port_t *ing_port,
   1148                                         bcm_cos_t *priority);
   1149 
   1150 extern int bcm_th_cosq_port_attach(int unit, bcm_port_t port);
   1151 extern int bcm_th_cosq_port_detach(int unit, bcm_port_t port);
   1152 
   1153 /* OOB FC Tx side global configuration API */
   1154 extern int bcm_th_oob_fc_tx_config_set(
   1155     int unit,
   1156     bcm_oob_fc_tx_config_t *config);
   1157 
   1158 /* OOB FC Tx side global configuration get API */
   1159 extern int bcm_th_oob_fc_tx_config_get(
   1160     int unit,
   1161     bcm_oob_fc_tx_config_t *config);
   1162 
   1163 extern int
   1164 _bcm_th_oob_fc_tx_port_control_set(int unit, bcm_port_t port,
   1165                                    int status, int dir);
   1166 extern int
   1167 _bcm_th_oob_fc_tx_port_control_get(int unit, bcm_port_t port,
   1168                                    int *status, int dir);
   1169 
   1170 /* OOB FC Tx side global info get API */
   1171 extern int bcm_th_oob_fc_tx_info_get(
   1172     int unit,
   1173     bcm_oob_fc_tx_info_t *info);
   1174 
   1175 /*
   1176  * OOB FC Rx Interface side Traffic Class to Priority Mapping Multi Set
   1177  * API
   1178  */
   1179 extern int bcm_th_oob_fc_rx_port_tc_mapping_multi_set(
   1180     int unit,
   1181     bcm_oob_fc_rx_intf_id_t intf_id,
   1182     bcm_gport_t gport,
   1183     int array_count,
   1184     uint32 *tc,
   1185     uint32 *pri_bmp);
   1186 
   1187 /*
   1188  * OOB FC Rx Interface side Traffic Class to Priority Mapping Multi Get
   1189  * API
   1190  */
   1191 extern int bcm_th_oob_fc_rx_port_tc_mapping_multi_get(
   1192     int unit,
   1193     bcm_oob_fc_rx_intf_id_t intf_id,
   1194     bcm_gport_t gport,
   1195     int array_max,
   1196     uint32 *tc,
   1197     uint32 *pri_bmp,
   1198     int *array_count);
   1199 
   1200 /* OOB FC Rx Interface side Traffic Class to Priority Mapping set API */
   1201 extern int bcm_th_oob_fc_rx_port_tc_mapping_set(
   1202     int unit,
   1203     bcm_oob_fc_rx_intf_id_t intf_id,
   1204     bcm_gport_t gport,
   1205     uint32 tc,
   1206     uint32 pri_bmp);
   1207 
   1208 /* OOB FC Rx Interface side Traffic Class to Priority Mapping get API */
   1209 extern int bcm_th_oob_fc_rx_port_tc_mapping_get(
   1210     int unit,
   1211     bcm_oob_fc_rx_intf_id_t intf_id,
   1212     bcm_gport_t gport,
   1213     uint32 tc,
   1214     uint32 *pri_bmp);
   1215 
   1216 /* OOB FC Rx Interface side Configuration set API */
   1217 extern int bcm_th_oob_fc_rx_config_set(
   1218     int unit,
   1219     bcm_oob_fc_rx_intf_id_t intf_id,
   1220     bcm_oob_fc_rx_config_t *config,
   1221     int array_count,
   1222     bcm_gport_t *gport_array);
   1223 
   1224 /* OOB FC Rx Interface side Configuration get API */
   1225 extern int bcm_th_oob_fc_rx_config_get(
   1226     int unit,
   1227     bcm_oob_fc_rx_intf_id_t intf_id,
   1228     bcm_oob_fc_rx_config_t *config,
   1229     int array_max,
   1230     bcm_gport_t *gport_array,
   1231     int *array_count);
   1232 
   1233 /* OOB FC Rx Interface side Channel offset value for a port */
   1234 extern int bcm_th_oob_fc_rx_port_offset_get(
   1235     int unit,
   1236     bcm_oob_fc_rx_intf_id_t intf_id,
   1237     bcm_gport_t gport,
   1238     uint32 *offset);
   1239 
   1240 /* OOB STATS global configuration set API */
   1241 extern int bcm_th_oob_stats_config_set(
   1242     int unit,
   1243     bcm_oob_stats_config_t *config);
   1244 
   1245 /* OOB STATS global configuration get API */
   1246 extern int bcm_th_oob_stats_config_get(
   1247     int unit,
   1248     bcm_oob_stats_config_t *config);
   1249 
   1250 
   1251 /* OOB STATS configuration of service pool list multi set API */
   1252 extern int bcm_th_oob_stats_pool_mapping_multi_set(
   1253     int unit,
   1254     int array_count,
   1255     int *offset_array,
   1256     uint8 *dir_array,
   1257     bcm_service_pool_id_t *pool_array);
   1258 
   1259 /* OOB STATS configuration of service pool list multi get API */
   1260 extern int bcm_th_oob_stats_pool_mapping_multi_get(
   1261     int unit,
   1262     int array_max,
   1263     int *offset_array,
   1264     uint8 *dir_array,
   1265     bcm_service_pool_id_t *pool_array,
   1266     int *array_count);
   1267 
   1268 /* OOB STATS configuration of service pool list set API */
   1269 extern int bcm_th_oob_stats_pool_mapping_set(
   1270     int unit,
   1271     int offset,
   1272     uint8 dir,
   1273     bcm_service_pool_id_t pool);
   1274 
   1275 /* OOB STATS configuration of service pool list get API */
   1276 extern int bcm_th_oob_stats_pool_mapping_get(
   1277     int unit,
   1278     int offset,
   1279     uint8 *dir,
   1280     bcm_service_pool_id_t *pool);
   1281 
   1282 /* OOB STATS configuration of Queue list set API */
   1283 extern int bcm_th_oob_stats_queue_mapping_multi_set(
   1284     int unit,
   1285     int array_count,
   1286     int *offset_array,
   1287     bcm_gport_t *gport_array);
   1288 
   1289 /* OOB STATS configuration of Queue list get API */
   1290 extern int bcm_th_oob_stats_queue_mapping_multi_get(
   1291     int unit,
   1292     int array_max,
   1293     int *offset_array,
   1294     bcm_gport_t *gport_array,
   1295     int *array_count);
   1296 
   1297 /* OOB STATS configuration of Queue list set API */
   1298 extern int bcm_th_oob_stats_queue_mapping_set(
   1299     int unit,
   1300     int offset,
   1301     bcm_gport_t gport);
   1302 
   1303 /* OOB STATS configuration of Queue list get API */
   1304 extern int bcm_th_oob_stats_queue_mapping_get(
   1305     int unit,
   1306     int offset,
   1307     bcm_gport_t *gport);
   1308 
   1309 /* QoS */
   1310 extern int bcm_th_qos_init(int unit);
   1311 extern int bcm_th_qos_detach(int unit);
   1312 extern int bcm_th_qos_map_create(int unit, uint32 flags, int *map_id);
   1313 extern int bcm_th_qos_map_destroy(int unit, int map_id);
   1314 extern int bcm_th_qos_map_add(int unit,
   1315                               uint32 flags,
   1316                               bcm_qos_map_t *map,
   1317                               int map_id);
   1318 extern int bcm_th_qos_map_delete(int unit,
   1319                                  uint32 flags,
   1320                                  bcm_qos_map_t *map,
   1321                                  int map_id);
   1322 extern int bcm_th_qos_port_map_set(int unit,
   1323                                    bcm_gport_t port,
   1324                                    int ing_map,
   1325                                    int egr_map);
   1326 extern int bcm_th_qos_map_multi_get(int unit,
   1327                                     uint32 flags,
   1328                                     int map_id,
   1329                                     int array_size,
   1330                                     bcm_qos_map_t *array,
   1331                                     int *array_count);
   1332 extern int _bcm_th_qos_multi_get(int unit,
   1333                                  int array_size,
   1334                                  int *map_ids_array,
   1335                                  int *flags_array,
   1336                                  int *array_count);
   1337 extern int bcm_th_qos_port_map_type_get(int unit, bcm_gport_t port,
   1338                                         uint32 flags, int *map_id);
   1339 #ifdef BCM_WARM_BOOT_SUPPORT_SW_DUMP
   1340 extern void _bcm_th_qos_sw_dump(int unit);
   1341 #endif /* BCM_WARM_BOOT_SUPPORT_SW_DUMP */
   1342 #ifdef BCM_WARM_BOOT_SUPPORT
   1343 extern int _bcm_th_qos_reinit_scache_len_get(int unit, uint32 *scache_len);
   1344 extern int _bcm_th_qos_reinit_from_hw_state(int unit, soc_mem_t mem, 
   1345                                             soc_field_t field, uint8 map_type, 
   1346                                             SHR_BITDCL *hw_idx_bmp, int hw_idx_bmp_len);
   1347 extern int _bcm_th_qos_unsynchronized_reinit(int unit);
   1348 extern int _bcm_th_qos_extended_reinit(int unit, uint8 **scache_ptr);
   1349 extern int _bcm_th_qos_reinit_hw_profiles_update(int unit);
   1350 extern int _bcm_th_qos_sync(int unit, uint8 **scache_ptr);
   1351 #endif /* BCM_WARM_BOOT_SUPPORT */
   1352 extern int _bcm_field_th_qualify_LoopbackType(int unit,
   1353                                               bcm_field_LoopbackType_t loopback_type,
   1354                                               uint32                   *tcam_data,
   1355                                               uint32                   *tcam_mask);
   1356 extern int _bcm_field_th_qualify_LoopbackType_get(uint8                    tcam_data,
   1357                                                   uint8                    tcam_mask,
   1358                                                   bcm_field_LoopbackType_t *loopback_type);
   1359 extern int _bcm_field_th_qual_part_offset_get(int unit, _field_entry_t *f_ent,
   1360                                               int entry_part, int qid,
   1361                                               _bcm_field_qual_offset_t *offset);
   1362 
   1363 extern int _field_th_stage_entry_enable_set(int unit, _field_entry_t *f_ent,
   1364                                    int enable_flag);
   1365 extern int _field_th_group_qual_info_get(int unit,
   1366                                          _field_stage_t *stage_fc,
   1367                                          _field_group_t *fg,
   1368                                          bcm_field_qset_t *qset_req,
   1369                                          bcmi_keygen_qual_info_t **qual_info_arr,
   1370                                          uint16 *qual_info_count);
   1371 /*
   1372  * 8 Priority Groups supported.
   1373  */
   1374 #define TH_PRIOROTY_GROUP_ID_MIN 0
   1375 #define TH_PRIOROTY_GROUP_ID_MAX 7
   1376 /*
   1377  * Inpur priority range.
   1378  * PFC : 0-7
   1379  * SAFC : 0-15
   1380  */
   1381 #define TH_PFC_INPUT_PRIORITY_MIN  0
   1382 #define TH_PFC_INPUT_PRIORITY_MAX  7
   1383 #define TH_SAFC_INPUT_PRIORITY_MIN TH_PFC_INPUT_PRIORITY_MIN
   1384 #define TH_SAFC_INPUT_PRIORITY_MAX 15
   1385 
   1386 
   1387 #if defined(INCLUDE_FLOWTRACKER)
   1388 /* Flowtracker module APIs */
   1389 extern int _bcm_th_ft_init(int unit);
   1390 
   1391 extern int _bcm_th_ft_detach(int unit);
   1392 
   1393 extern int
   1394 _bcm_th_ft_export_template_create(
   1395                int unit,
   1396                uint32 options,
   1397                bcm_flowtracker_export_template_t *id,
   1398                uint16 set_id,
   1399                int num_export_elements,
   1400                bcm_flowtracker_export_element_info_t *list_of_export_elements);
   1401 
   1402 extern int
   1403 _bcm_th_ft_export_template_get(
   1404                  int unit,
   1405                  bcm_flowtracker_export_template_t id,
   1406                  uint16 *set_id,
   1407                  int max_size,
   1408                  bcm_flowtracker_export_element_info_t *list_of_export_elements,
   1409                  int *list_size);
   1410 
   1411 extern int
   1412 _bcm_th_ft_export_template_destroy(int unit,
   1413                                    bcm_flowtracker_export_template_t id);
   1414 
   1415 extern int
   1416 _bcm_th_ft_group_clear(int unit,
   1417                        bcm_flowtracker_group_t id,
   1418                        uint32 flags);
   1419 
   1420 extern int
   1421 _bcm_th_ft_collector_create(int unit,
   1422                             uint32 options,
   1423                             bcm_flowtracker_collector_t *id,
   1424                             bcm_flowtracker_collector_info_t *collector_info);
   1425 
   1426 extern int
   1427 _bcm_th_ft_collector_get(int unit,
   1428                          bcm_flowtracker_collector_t id,
   1429                          bcm_flowtracker_collector_info_t *collector_info);
   1430 
   1431 extern int
   1432 _bcm_th_ft_collector_get_all(
   1433                      int unit,
   1434                      int max_size,
   1435                      bcm_flowtracker_collector_t *collector_list,
   1436                      int *list_size);
   1437 
   1438 extern int _bcm_th_ft_collector_destroy(int unit,
   1439                                         bcm_flowtracker_collector_t id);
   1440 
   1441 extern int _bcm_th_ft_group_collector_attach(
   1442         int unit,
   1443         bcm_flowtracker_group_t flow_group_id,
   1444         bcm_collector_t collector_id,
   1445         int export_profile_id,
   1446         bcm_flowtracker_export_template_t template_id);
   1447 
   1448 extern int _bcm_th_ft_group_collector_detach(
   1449         int unit,
   1450         bcm_flowtracker_group_t flow_group_id,
   1451         bcm_collector_t collector_id,
   1452         int export_profile_id,
   1453         bcm_flowtracker_export_template_t template_id);
   1454 
   1455 extern int _bcm_th_ft_group_collector_attach_get_all(
   1456     int unit,
   1457     bcm_flowtracker_group_t flow_group_id,
   1458     int max_list_size,
   1459     bcm_flowtracker_collector_t *list_of_collectors,
   1460     int *list_of_export_profile_ids,
   1461     bcm_flowtracker_export_template_t *list_of_templates,
   1462     int *list_size);
   1463 
   1464 extern int
   1465 _bcm_th_ft_flow_group_create(int unit,
   1466                              uint32 options,
   1467                              bcm_flowtracker_group_t *id,
   1468                              bcm_flowtracker_group_info_t *flow_group_info);
   1469 
   1470 extern int
   1471 _bcm_th_ft_flow_group_get(int unit,
   1472                           bcm_flowtracker_group_t id,
   1473                           bcm_flowtracker_group_info_t *flow_group_info);
   1474 
   1475 extern int
   1476 _bcm_th_ft_flow_group_get_all(int unit,
   1477                               int max_size,
   1478                               bcm_flowtracker_group_t *flow_group_list,
   1479                               int *list_size);
   1480 
   1481 extern int _bcm_th_ft_flow_group_flow_limit_set(int unit,
   1482                                                 bcm_flowtracker_group_t id,
   1483                                                 uint32 flow_limit);
   1484 
   1485 extern int _bcm_th_ft_flow_group_flow_limit_get(int unit,
   1486                                                 bcm_flowtracker_group_t id,
   1487                                                 uint32 *flow_limit);
   1488 
   1489 extern int _bcm_th_ft_flow_group_stat_modeid_set(int unit,
   1490                                                  bcm_flowtracker_group_t id,
   1491                                                  uint32 stat_modeid);
   1492 
   1493 extern int _bcm_th_ft_flow_group_stat_modeid_get(int unit,
   1494                                                  bcm_flowtracker_group_t id,
   1495                                                  uint32 *stat_modeid);
   1496 
   1497 extern int _bcm_th_ft_flow_group_age_timer_set(int unit,
   1498                                                bcm_flowtracker_group_t id,
   1499                                                uint32 aging_interval_ms);
   1500 
   1501 extern int _bcm_th_ft_flow_group_age_timer_get(int unit,
   1502                                                bcm_flowtracker_group_t id,
   1503                                                uint32 *aging_interval_ms);
   1504 
   1505 extern int
   1506 _bcm_th_ft_flow_group_export_trigger_set(
   1507                       int unit,
   1508                       bcm_flowtracker_group_t id,
   1509                       bcm_flowtracker_export_trigger_info_t *export_trigger_info);
   1510 
   1511 extern int
   1512 _bcm_th_ft_flow_group_export_trigger_get(
   1513                      int unit,
   1514                      bcm_flowtracker_group_t id,
   1515                      bcm_flowtracker_export_trigger_info_t *export_trigger_info);
   1516 
   1517 extern int _bcm_th_ft_flow_group_flow_count_get(int unit,
   1518                                                 bcm_flowtracker_group_t id,
   1519                                                 uint32 *flow_count);
   1520 
   1521 extern int _bcm_th_ft_flow_group_destroy(int unit,
   1522                                          bcm_flowtracker_group_t id);
   1523 
   1524 extern int
   1525 _bcm_th_ft_flow_group_collector_add(int unit,
   1526                                     bcm_flowtracker_group_t flow_group_id,
   1527                                     bcm_flowtracker_collector_t collector_id,
   1528                                     bcm_flowtracker_export_template_t template_id);
   1529 
   1530 extern int
   1531 _bcm_th_ft_flow_group_collector_delete(int unit,
   1532                                        bcm_flowtracker_group_t flow_group_id,
   1533                                        bcm_flowtracker_collector_t collector_id,
   1534                                        bcm_flowtracker_export_template_t template_id);
   1535 
   1536 extern int _bcm_th_ft_flow_group_collector_get_all(
   1537     int unit,
   1538     bcm_flowtracker_group_t flow_group_id,
   1539     int max_list_size,
   1540     bcm_flowtracker_collector_t *list_of_collectors,
   1541     bcm_flowtracker_export_template_t *list_of_templates,
   1542     int *list_size);
   1543 
   1544 extern int _bcm_th_ft_group_data_get(
   1545                                          int unit,
   1546                                          bcm_flowtracker_group_t flow_group_id,
   1547                                          bcm_flowtracker_flow_key_t *flow_key,
   1548                                          bcm_flowtracker_flow_data_t *flow_data);
   1549 
   1550 extern int
   1551 _bcm_th_ft_group_actions_set(
   1552                                 int unit,
   1553                                 bcm_flowtracker_group_t flow_group_id,
   1554                                 uint32 flags,
   1555                                 int num_actions,
   1556                                 bcm_flowtracker_group_action_info_t *action_list);
   1557 
   1558 extern int
   1559 _bcm_th_ft_group_actions_get(
   1560                                int unit,
   1561                                bcm_flowtracker_group_t flow_group_id,
   1562                                uint32 flags,
   1563                                int max_actions,
   1564                                bcm_flowtracker_group_action_info_t *action_list,
   1565                                int *num_actions);
   1566 
   1567 extern int
   1568 _bcm_th_ft_template_transmit_config_set(
   1569                              int unit,
   1570                              bcm_flowtracker_export_template_t template_id,
   1571                              bcm_flowtracker_collector_t collector_id,
   1572                              bcm_flowtracker_template_transmit_config_t *config);
   1573 extern int
   1574 _bcm_th_ft_template_transmit_config_get(
   1575                              int unit,
   1576                              bcm_flowtracker_export_template_t template_id,
   1577                              bcm_flowtracker_collector_t collector_id,
   1578                              bcm_flowtracker_template_transmit_config_t *config);
   1579 
   1580 extern int
   1581 _bcm_th_ft_elephant_profile_create(
   1582                                 int unit,
   1583                                 uint32 options,
   1584                                 bcm_flowtracker_elephant_profile_info_t *profile,
   1585                                 bcm_flowtracker_elephant_profile_t *profile_id);
   1586 
   1587 extern int
   1588 _bcm_th_ft_elephant_profile_destroy(
   1589                                   int unit,
   1590                                   bcm_flowtracker_elephant_profile_t profile_id);
   1591 
   1592 extern int
   1593 _bcm_th_ft_elephant_profile_get(
   1594                                int unit,
   1595                                bcm_flowtracker_elephant_profile_t profile_id,
   1596                                bcm_flowtracker_elephant_profile_info_t *profile);
   1597 
   1598 extern int
   1599 _bcm_th_ft_elephant_profile_get_all(
   1600                            int unit,
   1601                            int max,
   1602                            bcm_flowtracker_elephant_profile_t *profile_list,
   1603                            int *count);
   1604 
   1605 extern int
   1606 _bcm_th_ft_group_elephant_profile_attach(
   1607                                   int unit,
   1608                                   bcm_flowtracker_group_t flow_group_id,
   1609                                   bcm_flowtracker_elephant_profile_t profile_id);
   1610 
   1611 extern int
   1612 _bcm_th_ft_group_elephant_profile_attach_get(
   1613                                  int unit,
   1614                                  bcm_flowtracker_group_t flow_group_id,
   1615                                  bcm_flowtracker_elephant_profile_t *profile_id);
   1616 
   1617 extern int
   1618 _bcm_th_ft_group_elephant_profile_detach(int unit,
   1619                                          bcm_flowtracker_group_t flow_group_id);
   1620 
   1621 extern int _bcm_th_ft_sync(int unit);
   1622 
   1623 extern int
   1624 _bcm_th_ft_flow_group_tracking_params_set(
   1625                       int unit,
   1626                       bcm_flowtracker_group_t id,
   1627                       int num_tracking_params,
   1628                       bcm_flowtracker_tracking_param_info_t *list_of_tracking_params);
   1629 
   1630 extern int
   1631 _bcm_th_ft_flow_group_tracking_params_get(
   1632                       int unit,
   1633                       bcm_flowtracker_group_t id,
   1634                       int max_size,
   1635                       int *list_size,
   1636                       bcm_flowtracker_tracking_param_info_t *list_of_tracking_params);
   1637 
   1638 #endif /* INCLUDE_FLOWTRACKER */
   1639 
   1640 /* Congestion Monitoring App Microburst detection APIs */
   1641 extern int bcm_th_cosq_burst_monitor_dma_config_set(int unit,
   1642                                                     uint32 host_mem_size,
   1643                                                     uint32 **host_mem_add);
   1644 extern int bcm_th_cosq_burst_monitor_dma_config_get(int unit,
   1645                                                     uint32 *host_mem_size,
   1646                                                     uint32 **host_mem_add);
   1647 extern int bcm_th_cosq_burst_monitor_set(int unit, int num_gports,
   1648                                          bcm_gport_t *gport_list);
   1649 extern int bcm_th_cosq_burst_monitor_get(int unit, int max_gports,
   1650                                          bcm_gport_t *gport_list,
   1651                                          int *num_gports);
   1652 extern int bcm_th_cosq_burst_monitor_dma_config_reset(int unit);
   1653 
   1654 extern int
   1655 _bcm_field_th_ddrop_profile_alloc(int unit, _field_entry_t *f_ent,
   1656                                    _field_action_t *fa);
   1657 extern int
   1658 _bcm_field_th_dredirect_profile_alloc(int unit, _field_entry_t *f_ent,
   1659                                    _field_action_t *fa);
   1660 
   1661 #endif /* BCM_TOMAHAWK_SUPPORT  */
   1662 
   1663 #endif /* !_BCM_INT_TOMAHAWK_H_ */