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


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