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

helix5.h (30518B)


      1 /*
      2  * 
      3  $
      4  * This license is set out in https://raw.githubusercontent.com/Broadcom-Network-Switching-Software/OpenBCM/master/Legal/LICENSE file.
      5  * 
      6  * Copyright 2007-2019 Broadcom Inc. All rights reserved.
      7  *
      8  * File:        trident3.h
      9  * Purpose:     Function declarations for Trident3 Internal functions.
     10  */
     11 
     12 #ifndef _BCM_INT_HELIX5_H_
     13 #define _BCM_INT_HELIX5_H_
     14 
     15 #include <bcm_int/esw/mbcm.h>
     16 #include <bcm_int/esw/cosq.h>
     17 #include <bcm/oob.h>
     18 #include <bcm_int/esw/pfc_deadlock.h>
     19 #include <soc/profile_mem.h>
     20 
     21 #if defined(BCM_HELIX5_SUPPORT)
     22 #include <soc/esw/port.h>
     23 #include <bcm_int/esw/l2.h>
     24 #include <bcm_int/esw/trident3.h>
     25 #include <bcm_int/esw/field.h>
     26 #include <bcm_int/esw/keygen_api.h>
     27 #include <bcm/flowtracker.h>
     28 #include <bcm_int/esw/flowtracker/ft_alu.h>
     29 #include <bcm_int/esw/flowtracker/ft_group.h>
     30 
     31 /* entries_per_profile comes from MAXIDX in PHB_MAPPING_TBL_1
     32  * MAXIDX     => 4608,  #(72 ports x 64 profiles) */
     33 #define _BCM_HX5_PHB_MAP_TAB1_ENTRIES_PER_PROFILE       (72)
     34 
     35 #define _BCM_PFC_DEADLOCK_MASK      0xFF
     36 typedef enum {
     37     _BCM_HX5_COSQ_INDEX_STYLE_WRED_QUEUE,
     38     _BCM_HX5_COSQ_INDEX_STYLE_WRED_PORT,
     39     _BCM_HX5_COSQ_INDEX_STYLE_WRED_DEVICE,
     40     _BCM_HX5_COSQ_INDEX_STYLE_UCAST_QUEUE,
     41     _BCM_HX5_COSQ_INDEX_STYLE_MCAST_QUEUE,
     42     _BCM_HX5_COSQ_INDEX_STYLE_EGR_POOL,
     43     _BCM_HX5_COSQ_INDEX_STYLE_COS,
     44     _BCM_HX5_COSQ_INDEX_STYLE_COUNT
     45 } _bcm_hx5_cosq_index_style_t;
     46 
     47 extern int bcmi_hx5_port_fn_drv_init(int unit);
     48 
     49 /* COSQ Module */
     50 extern int
     51 bcm_hx5_cosq_init(int unit);
     52 
     53 extern int
     54 bcm_hx5_cosq_config_get(int unit, int *numq);
     55 
     56 extern int
     57 bcm_hx5_cosq_config_set(int unit, int numq);
     58 
     59 extern int
     60 bcm_hx5_cosq_gport_attach(int unit, bcm_gport_t input_gport,
     61                           bcm_gport_t parent_gport, bcm_cos_queue_t cosq);
     62 
     63 extern int
     64 bcm_hx5_cosq_gport_detach(int unit, bcm_gport_t input_gport,
     65                           bcm_gport_t parent_gport, bcm_cos_queue_t cosq);
     66 
     67 extern int
     68 bcm_hx5_cosq_gport_attach_get(int unit, bcm_gport_t sched_gport,
     69                               bcm_gport_t *input_gport, bcm_cos_queue_t *cosq);
     70 
     71 extern int
     72 bcm_hx5_cosq_gport_traverse(int unit, bcm_cosq_gport_traverse_cb cb,
     73                             void *user_data);
     74 
     75 extern int
     76 bcm_hx5_cosq_gport_child_get(int unit, bcm_gport_t in_gport,
     77                              bcm_cos_queue_t cosq, bcm_gport_t *out_gport);
     78 extern int
     79 bcm_hx5_cosq_gport_get(int unit, bcm_gport_t gport, bcm_gport_t *port,
     80                        int *numq, uint32 *flags);
     81 
     82 extern int
     83 bcm_hx5_cosq_gport_traverse_by_port(int unit, bcm_gport_t port,
     84                             bcm_cosq_gport_traverse_cb cb,
     85                             void *user_data);
     86 extern int
     87 _bcm_hx5_cosq_port_resolve(int unit, bcm_gport_t gport, bcm_module_t *modid,
     88                            bcm_port_t *port, bcm_trunk_t *trunk_id, int *id,
     89                            int *qnum);
     90 extern int
     91 bcm_hx5_rx_queue_channel_set_test(int unit, bcm_cos_queue_t queue_id,
     92                                   bcm_rx_chan_t chan_id);
     93 extern int
     94 bcm_hx5_cosq_sched_weight_max_get(int unit, int mode, int *weight_max);
     95 
     96 extern int
     97 bcm_hx5_cosq_gport_sched_get(int unit, bcm_gport_t gport, bcm_cos_queue_t cosq,
     98                              int *mode, int *weight);
     99 
    100 extern int
    101 bcm_hx5_cosq_gport_sched_set(int unit, bcm_gport_t gport, bcm_cos_queue_t cosq,
    102                              int mode, int weight);
    103 
    104 extern int
    105 bcm_hx5_cosq_port_sched_get(int unit, bcm_pbmp_t pbm, int *mode, int *weights,
    106                             int *delay);
    107 
    108 extern int
    109 bcm_hx5_cosq_port_sched_set(int unit, bcm_pbmp_t pbm, int mode, const int
    110                             *weights, int delay);
    111 extern int
    112 bcm_hx5_cosq_gport_bandwidth_get(int unit, bcm_gport_t gport,
    113                                  bcm_cos_queue_t cosq, uint32 *kbits_sec_min,
    114                                  uint32 *kbits_sec_max, uint32 *flags);
    115 
    116 extern int
    117 bcm_hx5_cosq_gport_bandwidth_set(int unit, bcm_gport_t gport,
    118                                  bcm_cos_queue_t cosq, uint32 kbits_sec_min,
    119                                  uint32 kbits_sec_max, uint32 flags);
    120 
    121 extern int
    122 bcm_hx5_cosq_port_bandwidth_get(int unit, bcm_port_t port, bcm_cos_queue_t cosq,
    123                                 uint32 *min_quantum, uint32 *max_quantum,
    124                                 uint32 *burst_quantum, uint32 *flags);
    125 
    126 extern int
    127 bcm_hx5_cosq_port_bandwidth_set(int unit, bcm_port_t port, bcm_cos_queue_t cosq,
    128                                 uint32 min_quantum, uint32 max_quantum,
    129                                 uint32 burst_quantum, uint32 flags);
    130 extern int
    131 bcm_hx5_cosq_port_pps_set(int unit, bcm_port_t port, bcm_cos_queue_t cosq,
    132                           int pps);
    133 
    134 extern int
    135 bcm_hx5_cosq_port_pps_get(int unit, bcm_port_t port, bcm_cos_queue_t cosq,
    136                           int *pps);
    137 
    138 extern int
    139 bcm_hx5_cosq_port_burst_set(int unit, bcm_port_t port, bcm_cos_queue_t cosq,
    140                             int burst);
    141 
    142 extern int
    143 bcm_hx5_cosq_port_burst_get(int unit, bcm_port_t port, bcm_cos_queue_t cosq,
    144                             int *burst);
    145 
    146 extern int 
    147 _bcm_hx5_cosq_index_resolve(int unit, bcm_port_t port,
    148                             bcm_cos_queue_t cosq, _bcm_hx5_cosq_index_style_t style,
    149                             bcm_port_t *local_port, int *index, int *count);
    150 
    151 extern int bcm_hx5_cosq_control_set(int unit, bcm_gport_t gport,
    152                                     bcm_cos_queue_t cosq,
    153                                     bcm_cosq_control_t type, int arg);
    154 extern int bcm_hx5_cosq_control_get(int unit, bcm_gport_t gport,
    155                                     bcm_cos_queue_t cosq,
    156                                     bcm_cosq_control_t type, int *arg);
    157 extern int
    158 bcm_hx5_cosq_config_get(int unit, int *numq);
    159 extern int
    160 bcm_hx5_cosq_config_set(int unit, int numq);
    161 
    162 extern int
    163 bcm_hx5_cosq_discard_set(int unit, uint32 flags);
    164 
    165 extern int
    166 bcm_hx5_cosq_discard_get(int unit, uint32 *flags);
    167 
    168 extern int
    169 bcm_hx5_cosq_discard_port_set(int unit, bcm_port_t port, bcm_cos_queue_t cosq,
    170                               uint32 color, int drop_start, int drop_slope,
    171                               int average_time);
    172 
    173 extern int
    174 bcm_hx5_cosq_discard_port_get(int unit, bcm_port_t port, bcm_cos_queue_t cosq,
    175                               uint32 color, int *drop_start, int *drop_slope,
    176                               int *average_time);
    177 
    178 extern int
    179 bcm_hx5_cosq_gport_discard_set(int unit, bcm_gport_t gport,
    180                                bcm_cos_queue_t cosq,
    181                                bcm_cosq_gport_discard_t *discard);
    182 
    183 extern int
    184 bcm_hx5_cosq_gport_discard_get(int unit, bcm_gport_t gport,
    185                                bcm_cos_queue_t cosq,
    186                                bcm_cosq_gport_discard_t *discard);
    187 
    188 extern int bcm_hx5_cosq_wred_resolution_entry_create(int unit, int *index);
    189 
    190 extern int bcm_hx5_cosq_wred_resolution_entry_destroy(int unit, int index);
    191 
    192 extern int bcm_hx5_cosq_wred_resolution_set(int unit, int index,
    193                                             bcm_cosq_discard_rule_t *rule);
    194 
    195 extern int bcm_hx5_cosq_wred_resolution_get(int unit, int index, int max,
    196                                             bcm_cosq_discard_rule_t *rule,
    197                                             int *count);
    198 extern int
    199 bcm_hx5_cosq_mapping_set(int unit, bcm_port_t gport, bcm_cos_t priority,
    200                          bcm_cos_queue_t cosq);
    201 
    202 extern int
    203 bcm_hx5_cosq_mapping_get(int unit, bcm_port_t gport, bcm_cos_t priority,
    204                          bcm_cos_queue_t *cosq);
    205 
    206 extern int
    207 bcm_hx5_cosq_gport_mapping_set(int unit, bcm_port_t ing_port,
    208                                bcm_cos_t int_pri, uint32 flags,
    209                                bcm_gport_t gport, bcm_cos_queue_t cosq);
    210 
    211 extern int
    212 bcm_hx5_cosq_gport_mapping_get(int unit, bcm_port_t ing_port,
    213                                bcm_cos_t int_pri, uint32 flags,
    214                                bcm_gport_t *gport, bcm_cos_queue_t *cosq);
    215 
    216 extern int
    217 bcm_hx5_cosq_field_classifier_get(int unit, int classifier_id,
    218                                   bcm_cosq_classifier_t *classifier);
    219 
    220 extern int
    221 bcm_hx5_cosq_field_classifier_id_create(int unit, bcm_cosq_classifier_t
    222                                         *classifier, int *classifier_id);
    223 
    224 extern int
    225 bcm_hx5_cosq_field_classifier_id_destroy(int unit, int classifier_id);
    226 
    227 extern int
    228 bcm_hx5_cosq_field_classifier_map_set(int unit, int classifier_id, int count,
    229         bcm_cos_t *priority_array, bcm_cos_queue_t *cosq_array);
    230 
    231 extern int
    232 bcm_hx5_cosq_field_classifier_map_get(int unit, int classifier_id,int array_max,
    233         bcm_cos_t *priority_array, bcm_cos_queue_t *cosq_array, int *array_count);
    234 
    235 extern int
    236 bcm_hx5_cosq_field_classifier_map_clear(int unit, int classifier_id);
    237 
    238 extern int
    239 bcm_hx5_cosq_stat_set(int unit, bcm_gport_t port,
    240                       bcm_cos_queue_t cosq,
    241                       bcm_cosq_stat_t stat, uint64 value);
    242 extern int
    243 bcm_hx5_cosq_stat_get(int unit, bcm_gport_t port,
    244                       bcm_cos_queue_t cosq,
    245                       bcm_cosq_stat_t stat, int sync_mode,
    246                       uint64 *value);
    247 extern int
    248 bcm_hx5_cosq_gport_info_get(int unit, bcm_gport_t gport,
    249                              bcm_cosq_gport_level_info_t *info);
    250 
    251 extern int
    252 bcm_hx5_hgcos_select_port_control_set(int unit,  bcm_port_t port,
    253                                       bcm_port_control_t type, int value);
    254 extern int
    255 bcm_hx5_hgcos_select_port_control_get(int unit,  bcm_port_t port,
    256                                       bcm_port_control_t type, int *value);
    257 
    258 extern int
    259 _bcm_hx5_port_enqueue_set(int unit, bcm_port_t gport, int enable);
    260 extern int
    261 _bcm_hx5_port_enqueue_get(int unit, bcm_port_t gport, int *enable);
    262 
    263 extern int
    264 bcm_hx5_cosq_safc_class_mapping_set(int unit, bcm_gport_t port, int array_count,
    265                                     bcm_cosq_safc_class_mapping_t *mapping_array);
    266 
    267 extern int
    268 bcm_hx5_cosq_safc_class_mapping_get(int unit, bcm_gport_t port, int array_max, 
    269                                     bcm_cosq_safc_class_mapping_t *mapping_array,
    270                                     int *array_count);
    271 
    272 
    273 #ifdef INCLUDE_L3
    274 extern int
    275 _bcm_hx5_ecmp_rh_dynamic_size_encode(int dynamic_size, int *encoded_value);
    276 
    277 extern int
    278 _bcm_hx5_ecmp_rh_dynamic_size_decode(int encoded_value, int *dynamic_size);
    279 #endif /* INCLUDE_L3 */
    280 
    281 extern int
    282 _bcm_hx5_hg_rh_dynamic_size_encode(int dynamic_size, int *encoded_value);
    283 
    284 extern int
    285 _bcm_hx5_hg_rh_dynamic_size_decode(int encoded_value, int *dynamic_size);
    286 
    287 extern int
    288 _bcm_hx5_lag_rh_dynamic_size_encode(int dynamic_size, int *encoded_value);
    289 
    290 extern int
    291 _bcm_hx5_lag_rh_dynamic_size_decode(int encoded_value, int *dynamic_size);
    292 
    293 extern int
    294 bcm_hx5_cosq_port_pfc_op(int unit, bcm_port_t port,
    295                          bcm_switch_control_t sctype, _bcm_cosq_op_t op,
    296                          bcm_gport_t *gport, int gport_count);
    297 
    298 extern int
    299 bcm_hx5_cosq_port_pfc_get(int unit, bcm_port_t port,
    300                           bcm_switch_control_t sctype,
    301                           bcm_gport_t *gport, int gport_count,
    302                           int *actual_gport_count);
    303 
    304 extern int
    305 bcm_hx5_cosq_pfc_class_mapping_set(int unit, bcm_gport_t port,
    306                                    int array_count,
    307                                    bcm_cosq_pfc_class_mapping_t *mapping_array);
    308 
    309 extern int
    310 bcm_hx5_cosq_pfc_class_mapping_get(int unit, bcm_gport_t port,
    311                                    int array_max,
    312                                    bcm_cosq_pfc_class_mapping_t *mapping_array,
    313                                    int *array_count);
    314 
    315 extern int bcm_hx5_cosq_port_attach(int unit, bcm_port_t port);
    316 extern int bcm_hx5_cosq_port_detach(int unit, bcm_port_t port);
    317 
    318 extern int bcmi_hx5_port_cosmap_update(int unit, pbmp_t pbmp, int enable);
    319 extern void bcm_hx5_cosq_sw_dump(int unit);
    320 #ifdef BCM_WARM_BOOT_SUPPORT
    321 extern int bcm_hx5_cosq_sync(int unit);
    322 #endif
    323 
    324 extern int
    325 bcm_hx5_cosq_cpu_cosq_enable_set(int unit, bcm_cos_queue_t cosq, int enable);
    326 
    327 extern int
    328 bcm_hx5_cosq_cpu_cosq_enable_get(int unit, bcm_cos_queue_t cosq, int *enable);
    329 
    330 extern int
    331 bcm_hx5_cosq_buffer_id_multi_get(int unit, bcm_gport_t gport,
    332                                  bcm_cos_queue_t cosq, bcm_cosq_dir_t direction,
    333                                  int array_max, bcm_cosq_buffer_id_t *buf_id_array,
    334                                  int *array_count);
    335 
    336 extern void bcm_hx5_pstats_deinit(int unit);
    337 extern int  bcm_hx5_pstats_init(int unit);
    338 
    339 extern int
    340 _bcm_hx5_cosq_inv_mapping_get(int unit, bcm_gport_t gport,
    341                               bcm_cos_queue_t cosq,
    342                               uint32 flags, bcm_port_t *ing_port,
    343                               bcm_cos_t *priority);
    344 
    345 /* pfc deadlock */
    346 #define HX5_PFC_DEADLOCK_MAX_COS 26
    347 
    348 /* Below structure to contain register/field name specific to chip */
    349 typedef struct _bcm_hx5_pfc_hw_resorces_s {
    350     soc_reg_t timer_count[HX5_PFC_DEADLOCK_MAX_COS];
    351     soc_reg_t timer_status[HX5_PFC_DEADLOCK_MAX_COS];
    352     soc_reg_t timer_mask[HX5_PFC_DEADLOCK_MAX_COS];
    353     soc_reg_t timer_en[HX5_PFC_DEADLOCK_MAX_COS];
    354     soc_reg_t chip_config[4];
    355     soc_reg_t port_config[2];
    356     soc_field_t cos_field[HX5_PFC_DEADLOCK_MAX_COS];
    357     soc_field_t time_init_val[HX5_PFC_DEADLOCK_MAX_COS];
    358     soc_field_t time_unit_field;
    359     soc_field_t recovery_action_field;
    360     soc_field_t deadlock_status_field;
    361 } _bcm_hx5_pfc_hw_resorces_t;
    362 
    363 typedef struct _bcm_hx5_pfc_deadlock_control_s {
    364     uint8 pfc_deadlock_cos_max;  /* Max COS supported for PFC Deadlock
    365                                   * Detection and Recovery */
    366     uint8 pfc_deadlock_cos_used; /* Total COS configured for PFC Deadlock
    367                                   * Detection and Recovery */
    368     uint8 hw_cos_idx_inuse[HX5_PFC_DEADLOCK_MAX_COS];   /* Boolean for used Cos indices */
    369     uint8 cb_enabled;            /* Indicator if CB is enabled */
    370     bcm_switch_pfc_deadlock_detection_interval_t time_unit; /* 0 - 100ms,
    371                                                              * 1 - 10ms */
    372     uint32 cb_interval;          /* CB interval duration */
    373     bcm_cos_t pfc_pri2cos[HX5_PFC_DEADLOCK_MAX_COS]; /* Mapping to reduce run-time
    374                                                       * computation */
    375     bcm_cos_t pfc_cos2pri[HX5_PFC_DEADLOCK_MAX_COS]; /* Mapping to reduce run-time
    376                                                       * computation */
    377     _bcm_pfc_deadlock_config_t cos_config[HX5_PFC_DEADLOCK_MAX_COS];
    378     _bcm_hx5_pfc_hw_resorces_t hw_regs_fields;
    379     bcm_switch_pfc_deadlock_action_t recovery_action;
    380     uint32 cb_count; /* Debug ctr to keep track of #times CB fn is called */
    381     _bcm_cosq_inv_mapping_get_f cosq_inv_mapping_get; /* Function to retrieve
    382                                                        * Port/Priority from a
    383                                                        * given Gport */
    384 } _bcm_hx5_pfc_deadlock_control_t;
    385 
    386 #define _BCM_HX5_PFC_DEADLOCK_HW_RES_INIT(deadlock_hw)        \
    387     do {                                                      \
    388         int i = 0;                                            \
    389         for (i = 0; i < HX5_PFC_DEADLOCK_MAX_COS; i++) {      \
    390             (deadlock_hw)->timer_count[i] = (INVALIDr);       \
    391             (deadlock_hw)->timer_status[i] = (INVALIDr);      \
    392             (deadlock_hw)->timer_mask[i] = (INVALIDr);        \
    393             (deadlock_hw)->timer_en[i] = (INVALIDr);          \
    394             (deadlock_hw)->cos_field[i] = (INVALIDf);         \
    395             (deadlock_hw)->time_init_val[i] = (INVALIDf);     \
    396         }                                                     \
    397         (deadlock_hw)->port_config[0] = (INVALIDr);              \
    398         (deadlock_hw)->port_config[1] = (INVALIDr);              \
    399         (deadlock_hw)->chip_config[0] = (INVALIDr);           \
    400         (deadlock_hw)->chip_config[1] = (INVALIDr);           \
    401         (deadlock_hw)->time_unit_field = (INVALIDf);          \
    402         (deadlock_hw)->recovery_action_field = (INVALIDf);    \
    403         (deadlock_hw)->deadlock_status_field = (INVALIDf);    \
    404     } while(0);
    405 
    406 #define _BCM_HX5_UNIT_PFC_DEADLOCK_CONTROL(u) _bcm_hx5_pfc_deadlock_control[(u)]
    407 #define _BCM_HX5_PFC_DEADLOCK_CONFIG(u,cos) \
    408             (&((_bcm_hx5_pfc_deadlock_control[(u)])->cos_config[(cos)]))
    409 #define _BCM_HX5_PFC_DEADLOCK_COS_ENABLED(u,cos) \
    410             ((((_bcm_hx5_pfc_deadlock_control[(u)])->cos_config[(cos)].flags) & \
    411             _BCM_PFC_DEADLOCK_F_ENABLE) ? TRUE : FALSE)
    412 #define _BCM_HX5_PFC_DEADLOCK_CB_INTERVAL(u) \
    413             ((_bcm_hx5_pfc_deadlock_control[(u)])->cb_interval)
    414 #define _BCM_HX5_PFC_DEADLOCK_CB_ENABLED(u) \
    415             (((_bcm_hx5_pfc_deadlock_control[(u)])->cb_enabled) ? (TRUE) :(FALSE))
    416 #define _BCM_HX5_PFC_DEADLOCK_CB_COUNT(u) \
    417             ((_bcm_hx5_pfc_deadlock_control[(u)])->cb_count)
    418 #define _BCM_HX5_PFC_DEADLOCK_TIME_UNIT(u) \
    419             ((_bcm_hx5_pfc_deadlock_control[(u)])->time_unit)
    420 #define _BCM_HX5_PFC_DEADLOCK_RECOVERY_ACTION(u) \
    421             ((_bcm_hx5_pfc_deadlock_control[(u)])->recovery_action)
    422 
    423 extern _bcm_hx5_pfc_deadlock_control_t *_bcm_hx5_pfc_deadlock_control[BCM_MAX_NUM_UNITS];
    424 
    425 extern int _bcm_hx5_pfc_deadlock_recovery_reset(int unit);
    426 
    427 extern int
    428 _bcm_hx5_pfc_deadlock_control_set(int unit, bcm_switch_control_t type, int arg);
    429 
    430 extern int
    431 _bcm_hx5_pfc_deadlock_control_get(int unit, bcm_switch_control_t type, int *arg);
    432 
    433 extern int bcm_hx5_pfc_deadlock_recovery_start(int unit,
    434                                                    bcm_port_t port, int pri);
    435 extern int bcm_hx5_pfc_deadlock_recovery_exit(int unit,
    436                                                   bcm_port_t port, int pri);
    437 
    438 
    439 extern int _bcm_hx5_pfc_deadlock_init(int unit);
    440 extern int _bcm_hx5_pfc_deadlock_hw_res_init(int unit);
    441 
    442 extern int _bcm_hx5_pfc_deadlock_deinit(int unit);
    443 extern int _bcm_hx5_pfc_deadlock_reinit(int unit);
    444 
    445 extern int
    446 _bcm_hx5_pfc_deadlock_hw_cos_index_get(int unit,
    447                                        bcm_cos_t priority,
    448                                        int *hw_cos_index);
    449 extern int
    450 _bcm_hx5_pfc_deadlock_hw_cos_index_set(int unit,
    451                                        bcm_cos_t priority,
    452                                        int *hw_cos_index);
    453 extern int
    454 _bcm_hx5_pfc_deadlock_chip_config_get(int unit,
    455                                       bcm_cos_t priority,
    456                                       soc_reg_t* chip_config);
    457 extern int
    458 _bcm_hx5_pfc_deadlock_hw_oper(int unit,
    459                               _bcm_pfc_deadlock_oper_t operation,
    460                                bcm_cos_t priority,
    461                               _bcm_pfc_deadlock_config_t *config);
    462 extern int
    463 _bcm_hx5_pfc_deadlock_q_config_helper(int unit,
    464                                       _bcm_pfc_deadlock_oper_t operation,
    465                                       bcm_gport_t gport,
    466                                       bcm_cosq_pfc_deadlock_queue_config_t *config,
    467                                       uint8 *enable_status);
    468 extern int
    469 bcm_hx5_pfc_deadlock_ignore_pfc_xoff_gen(int unit, int priority,
    470                                         bcm_port_t port, uint32 *rval32);
    471 extern int
    472 _bcm_hx5_pfc_deadlock_recovery_end(int unit, int cos, bcm_port_t port);
    473 extern int
    474 _bcm_hx5_pfc_deadlock_monitor(int unit);
    475 
    476 extern int
    477 bcm_hx5_pfc_deadlock_queue_info_get(int unit, bcm_gport_t gport, bcm_port_t *mmu_port,
    478                                     bcm_port_t *local_port, int *type, int *split);
    479 
    480 extern int
    481 bcm_hx5_dump_port_hsp(int unit, bcm_port_t port);
    482 
    483 #if defined(BCM_FIELD_SUPPORT)
    484 #if defined(BCM_FLOWTRACKER_SUPPORT)
    485 
    486 int _bcm_field_ft_group_checkbmp_get(int unit,
    487             bcm_flowtracker_group_t id,
    488             uint32 num_checks,
    489             bcm_field_flowtrackercheck_t *check_list,
    490             uint32 *check_bmp_data,
    491             uint32 *check_bmp_mask);
    492 
    493 int _bcm_field_ft_group_checklist_get(int unit,
    494             bcm_flowtracker_group_t id,
    495             uint32 check_bmp_data,
    496             uint32 check_bmp_mask,
    497             uint32 num_checks,
    498             bcm_field_flowtrackercheck_t *check_list,
    499             uint32 *actual_num_checks);
    500 
    501 /* init/deinit functions */
    502 extern int _field_hx5_ftstage_init(int unit,
    503             _field_control_t *fc,
    504             _field_stage_t *stage_fc);
    505 
    506 extern int _field_hx5_ftstage_deinit(int unit,
    507             _field_stage_t *stage_fc);
    508 
    509 extern int _field_hx5_ft_tcam_policy_init(int unit,
    510             _field_stage_t *stage_fc);
    511 
    512 extern int _field_hx5_ft_presel_qualifiers_init(int unit,
    513             _field_stage_t *stage_fc);
    514 
    515 extern int _field_ft_keygen_profile_aab_extractors_db_create(int unit,
    516             bcmi_keygen_ext_cfg_db_t *ext_cfg_db,
    517             int ext_mode);
    518 
    519 extern int _field_ft_keygen_profile_ab_extractors_db_create(int unit,
    520             bcmi_keygen_ext_cfg_db_t *ext_cfg_db,
    521             int ext_mode);
    522 
    523 extern int _field_hx5_ft_session_profiles_reference(int unit,
    524             bcm_flowtracker_group_t id,
    525             bcmi_ft_session_profiles_t *profiles);
    526 
    527 /* Preselection related */
    528 extern int _bcm_field_hx5_ft_lt_entry_data_value_set(int unit,
    529             _field_stage_t *stage_fc,
    530             _field_group_t *fg,
    531             int index,
    532             soc_mem_t lt_data_mem,
    533             uint32 *data);
    534 
    535 extern int _bcm_field_hx5_ft_lt_entry_install(int unit,
    536             _field_presel_entry_t *f_presel,
    537             _field_lt_slice_t *lt_fs);
    538 
    539 extern int _bcm_field_hx5_ft_lt_entry_hw_remove(int unit,
    540             _field_presel_entry_t *f_presel);
    541 
    542 extern int _field_hx5_ft_presel_delete_last_entry_hw(int unit,
    543             _field_presel_entry_t *f_presel,
    544             int last_hw_index);
    545 
    546 /* Field Group related */
    547 extern int _field_hx5_ft_slice_validate(int unit,
    548             _field_stage_t *stage_fc,
    549             _field_group_t *fg,
    550             int slice_id);
    551 
    552 extern int _field_hx5_ft_ext_code_assign(int unit,
    553             int selcode_clear,
    554             _field_group_add_fsm_t *fsm_ptr);
    555 
    556 extern int _field_hx5_ft_group_keytype_assign(int unit,
    557             _field_stage_t *stage_fc,
    558             _field_group_t *fg);
    559 
    560 extern int _field_hx5_ft_group_keytype_clear(int unit,
    561             _field_stage_t *stage_fc,
    562             _field_group_t *fg);
    563 
    564 extern int _field_hx5_ft_group_keygen_remove(int unit,
    565             _field_presel_entry_t *f_presel,
    566             int hw_idx);
    567 
    568 extern int _field_hx5_ft_group_keygen_install(int unit,
    569             _field_presel_entry_t *f_presel);
    570 
    571 extern int _field_hx5_ft_entries_free_get(int unit,
    572             _field_slice_t *fs,
    573             _field_group_t *fg,
    574             int *free_cnt);
    575 
    576 /* Entry related */
    577 extern int _bcm_field_hx5_ft_entry_keytype_set(int unit,
    578             _field_entry_t *f_ent);
    579 
    580 extern int _field_hx5_ft_entry_policy_mem_install(int unit,
    581             _field_entry_t *f_ent,
    582             soc_mem_t policy_mem,
    583             int tcam_idx);
    584 
    585 extern int _field_hx5_ft_entry_tcam_policy_install(int unit,
    586             _field_entry_t *f_ent,
    587             int tcam_idx);
    588 
    589 extern int _bcm_field_hx5_ft_tcam_policy_clear(int unit,
    590             _field_entry_t *f_ent,
    591             int tcam_idx);
    592 
    593 extern int _bcm_field_hx5_ft_entry_move(int unit,
    594             _field_entry_t *f_ent,
    595             int parts_count,
    596             int *tcam_idx_old,
    597             int *tcam_idx_new);
    598 
    599 extern int _field_hx5_ft_stage_entry_enable_set(int unit,
    600             _field_entry_t *f_ent,
    601             int enable_flag);
    602 
    603 /* Action related */
    604 extern int _bcm_field_hx5_ft_action_params_check(int unit,
    605             _field_entry_t *f_ent,
    606             _field_action_t *fa);
    607 
    608 extern int _bcm_field_hx5_ft_group_hw_alloc(int unit,
    609             _field_entry_t *f_ent);
    610 
    611 extern int _bcm_field_hx5_ft_group_hw_free(int unit,
    612             _field_entry_t *f_ent,
    613             int flags);
    614 
    615 /* FT and keygen related */
    616 extern void _field_hx5_ft_keygen_ext_shift_offsets_get(int unit,
    617             _field_ft_keygen_ext_codes_t *ext_codes,
    618             int *shift_offsets_arr);
    619 
    620 extern int _bcm_field_hx5_ft_keygen_extractors_set(int unit,
    621             int keygen_profile,
    622             uint16 ext_ctrl_sel_info_count,
    623             bcmi_keygen_ext_ctrl_sel_info_t *ext_ctrl_sel_info,
    624             _field_ft_keygen_ext_codes_t *ext_codes);
    625 
    626 extern int _field_ft_tracking_param_qual_map_db_init(int unit,
    627             _field_ft_info_t *ft_info);
    628 
    629 extern void _field_ft_tracking_param_qual_map_db_cleanup(int unit,
    630             _field_ft_info_t *ft_info);
    631 
    632 extern int _field_hx5_ft_session_profiles_install(int unit,
    633             uint16 flow_group_id,
    634              bcmi_ft_session_profiles_t *profiles);
    635 
    636 extern int _field_hx5_ft_session_profiles_remove(int unit,
    637             bcm_flowtracker_group_t flow_group_id,
    638             bcmi_ft_session_profiles_t *profiles);
    639 
    640 extern int _field_hx5_ft_qual_offset_ext_shift_apply(int unit,
    641             int split_allowed,
    642             _field_ft_keygen_ext_codes_t *ext_codes,
    643             _field_ft_qual_ext_offset_info_t *qual_ext_offset_info);
    644 
    645 extern int _field_hx5_ft_qual_ext_offset_info_get(int unit,
    646             int keygen_parts_count,
    647             bcmi_keygen_oper_t *keygen_oper,
    648             _field_ft_qual_ext_offset_info_t **qual_ext_offset_info);
    649 
    650 extern int _bcm_field_hx5_ft_keygen_extractors_mask_set(int unit,
    651             _field_ft_qual_ext_offset_info_t *qual_ext_offset_info,
    652             _field_ft_keygen_ext_codes_t *ext_codes);
    653 
    654 extern int _bcm_field_hx5_ft_extractors_encode(int unit,
    655             _field_ft_keygen_ext_codes_t *ext_codes,
    656             int *ext_count,
    657             bcmi_ft_hw_extractor_info_t **ext_ctrl_info);
    658 
    659 extern int _bcm_field_hx5_ft_extractors_decode(int unit,
    660             bcmi_ft_hw_extractor_info_t *ext_ctrl_info,
    661             int ext_count,
    662             _field_ft_keygen_ext_codes_t *ext_codes);
    663 
    664 extern int _bcm_field_ft_keygen_profile_extractors_mask_set(int unit,
    665             int offset,
    666             int width,
    667             int ext_num,
    668             int *shift_offsets_arr,
    669             _field_ft_keygen_ext_codes_t *ext_codes);
    670 
    671 extern void _field_hx5_ft_qual_ext_offset_info_free(int unit,
    672             _field_ft_qual_ext_offset_info_t **qual_ext_offset_info);
    673 
    674 extern int _field_hx5_ft_normalize_controls_set(
    675             int unit,
    676             bcm_flowtracker_group_t id,
    677             soc_mem_t policy_mem,
    678             uint32 enable,
    679             uint32 *data_buf);
    680 
    681 extern int _bcm_field_keygen_qual_offset_info_dump(
    682             int unit,
    683             int keygen_parts_count,
    684             bcmi_keygen_oper_t *keygen_oper);
    685 
    686 extern int _bcm_field_hx5_ft_keygen_hw_extractors_dump(
    687             int unit,
    688             _field_ft_keygen_ext_codes_t *ext_codes);
    689 
    690 extern int _bcm_field_ft_keygen_extractors_init(
    691             _field_ft_keygen_ext_codes_t *ext_codes);
    692 
    693 extern int _bcm_field_hx5_ft_group_update(
    694             int unit,
    695             bcm_field_group_t group,
    696             bcm_field_qset_t *qset);
    697 
    698 extern int _field_hx5_ft_keygen_ext_ctrl_info_get(
    699             int unit,
    700             _field_ft_keygen_ext_codes_t *ext_codes,
    701             bcmi_keygen_ext_ctrl_sel_info_t **out_ext_ctrl_sel_info,
    702             uint16 *out_ext_ctrl_sel_info_count);
    703 
    704 extern int _field_hx5_ft_keygen_ext_ctrl_info_skip(
    705             int unit,
    706             bcmi_keygen_cfg_t *keygen_cfg,
    707             uint16 *skipped_size);
    708 
    709 extern int _field_hx5_ft_keygen_cfg_qual_ext_ctrl_skip(
    710             int unit,
    711             bcmi_keygen_cfg_t *keygen_cfg,
    712             bcm_field_qualify_t skip_qual,
    713             uint16 *skipped_size);
    714 
    715 extern int _field_hx5_ft_keygen_oper_qual_ext_ctrl_apply(
    716             int unit,
    717             bcmi_keygen_cfg_t *keygen_cfg,
    718             bcm_field_qualify_t skip_qual,
    719             bcmi_keygen_oper_t *keygen_oper);
    720 
    721 extern int _bcm_field_ft_group_ext_codes_recover(int unit);
    722 #endif
    723 #endif
    724 
    725 #if defined (INCLUDE_TCB) && defined (BCM_TCB_SUPPORT)
    726 extern int bcm_hx5_cosq_tcb_config_get(int unit, bcm_cosq_buffer_id_t buffer_id,
    727                                        bcm_cosq_tcb_config_t *config);
    728 extern int bcm_hx5_cosq_tcb_config_set(int unit, bcm_cosq_buffer_id_t buffer_id,
    729                                        bcm_cosq_tcb_config_t *config);
    730 extern int bcm_hx5_cosq_tcb_gport_threshold_mapping_get(int unit,
    731                                      bcm_gport_t gport, bcm_cos_queue_t cosq,
    732                                      bcm_cosq_buffer_id_t buffer_id, int *index);
    733 extern int bcm_hx5_cosq_tcb_gport_threshold_mapping_set(int unit,
    734                                       bcm_gport_t gport, bcm_cos_queue_t cosq,
    735                                       bcm_cosq_buffer_id_t buffer_id,
    736                                       int index);
    737 extern int bcm_hx5_cosq_tcb_enable(int unit, bcm_cosq_buffer_id_t buffer_id,
    738                                    int enable);
    739 extern int bcm_hx5_cosq_tcb_freeze(int unit, bcm_cosq_buffer_id_t buffer_id,
    740                                    int enable);
    741 extern int bcm_hx5_cosq_tcb_init(int unit);
    742 extern int _bcm_hx5_cosq_tcb_deinit(int unit);
    743 extern int bcm_hx5_cosq_tcb_uc_queue_resolve(int unit, bcm_cosq_buffer_id_t buffer_id, int queue, int *index);
    744 extern int bcm_hx5_cosq_tcb_buffer_multi_get(int unit, 
    745                                   bcm_cosq_buffer_id_t buffer_id, int count, 
    746                                   bcm_cosq_tcb_buffer_t *entries, int *num);
    747 extern int bcm_hx5_cosq_tcb_event_multi_get(int unit, 
    748                                  bcm_cosq_buffer_id_t buffer_id, int count, 
    749                                  bcm_cosq_tcb_event_t *entries, int *num, 
    750                                  int *overflow_count);
    751 extern int bcm_hx5_cosq_tcb_threshold_profile_get(int unit, 
    752                                          bcm_cosq_buffer_id_t buffer_id, int index,
    753                                          bcm_cosq_tcb_threshold_profile_t *threshold);
    754 extern int bcm_hx5_cosq_tcb_threshold_profile_destroy(int unit, 
    755                                          bcm_cosq_buffer_id_t buffer_id, int index);
    756 extern int bcm_hx5_cosq_tcb_threshold_profile_create(int unit, int flags,
    757                                       bcm_cosq_buffer_id_t buffer_id, 
    758                                       bcm_cosq_tcb_threshold_profile_t *threshold,
    759                                       int *index);
    760 #ifdef BCM_WARM_BOOT_SUPPORT
    761 extern int bcm_hx5_cosq_tcb_reinit(int unit);
    762 #endif
    763 #endif
    764 
    765 extern int
    766 bcmi_hx5_switch_chip_info_get(int unit,
    767                               bcm_switch_chip_info_t info_type,
    768                               int max_size,
    769                               void *data_buf,
    770                               int *actual_size);
    771 
    772 #endif /* BCM_HELIX5_SUPPORT  */
    773 
    774 #endif /* !_BCM_INT_HELIX5_H_ */