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

triumph.h (40952B)


      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:        triumph.h
      8  * Purpose:     Function declarations for Triumph bcm functions
      9  */
     10 
     11 #ifndef _BCM_INT_TRIUMPH_H_
     12 #define _BCM_INT_TRIUMPH_H_
     13 #include <bcm_int/esw/l2.h>
     14 #include <bcm_int/esw/mbcm.h>
     15 #include <bcm/qos.h>
     16 #ifdef BCM_FIELD_SUPPORT 
     17 #include <bcm_int/esw/field.h>
     18 #endif /* BCM_FIELD_SUPPORT */
     19 #if defined(BCM_TRX_SUPPORT)
     20 
     21 typedef struct bcm_tr_mpls_vc_swap_table_nhop_list_s {
     22     int nh_index;
     23     struct bcm_tr_mpls_vc_swap_table_nhop_list_s *next;
     24 } bcm_tr_mpls_vc_swap_table_nhop_list_t;
     25 
     26 typedef struct bcm_tr_mpls_vc_swap_table_hash_entry_s {
     27     int index;
     28     struct bcm_tr_mpls_vc_swap_table_nhop_list_s *nhop_list;
     29     struct bcm_tr_mpls_vc_swap_table_hash_entry_s *link;
     30 } bcm_tr_mpls_vc_swap_table_hash_entry_t;
     31     
     32 typedef struct bcm_tr_mpls_vc_swap_table_hash_s {
     33     bcm_tr_mpls_vc_swap_table_hash_entry_t *head_link;
     34 } bcm_tr_mpls_vc_swap_table_hash_t;
     35 
     36 #define BCM_TR_MPLS_VC_SWAP_HASH_BUCKETS         16384
     37 #define BCM_TR_MPLS_VC_SWAP_KEY_LEN_IN_WORDS     2
     38 
     39 /*
     40  * Routines for internal use
     41  */
     42 extern int _bcm_tr_l2_traverse_mem(int unit, soc_mem_t mem, 
     43                                    _bcm_l2_traverse_t *trav_st);
     44 extern int _bcm_tr_l2_from_l2x(int unit,
     45                      bcm_l2_addr_t *l2addr, l2x_entry_t *l2x_entry);
     46 extern int _bcm_tr_l2_from_ext_l2(int unit, 
     47                    bcm_l2_addr_t *l2addr, ext_l2_entry_entry_t *ext_l2_entry);
     48 extern int _bcm_tr_l2_to_l2x(int unit, l2x_entry_t *l2x_entry,
     49                              bcm_l2_addr_t *l2addr, int key_only);
     50 
     51 extern int
     52 _soc_tr_l2e_ppa_init(int unit);
     53 /****************************************************************
     54  *
     55  * Triumph functions
     56  */
     57 extern int bcm_tr_l2_init(int unit);
     58 extern int bcm_tr_l2_term(int unit);
     59 extern int _bcm_tr_l2_addr_get(int unit, bcm_mac_t mac_addr, bcm_vlan_t vid,
     60                                int check_l2_only, bcm_l2_addr_t *l2addr);
     61 extern int bcm_tr_l2_addr_get(int unit, bcm_mac_t mac_addr, bcm_vlan_t vid,
     62                               bcm_l2_addr_t *l2addr);
     63 extern int bcm_tr_l2_addr_add(int unit, bcm_l2_addr_t *l2addr);
     64 extern int bcm_tr_l2_addr_delete(int unit, bcm_mac_t mac, bcm_vlan_t vid);
     65 extern int bcm_tr_l2_addr_delete_by_mac(int unit, bcm_mac_t mac, uint32 flags);
     66 extern int bcm_tr_l2_addr_delete_by_mac_port(int unit, bcm_mac_t mac,
     67                                              bcm_module_t mod, bcm_port_t port,
     68                                              uint32 flags);
     69 extern int bcm_tr_l2_conflict_get(int unit, bcm_l2_addr_t *addr,
     70                                   bcm_l2_addr_t *cf_array, int cf_max,
     71                                   int *cf_count);
     72 extern int bcm_tr_l2_cross_connect_add(int unit, bcm_vlan_t outer_vlan, 
     73                                        bcm_vlan_t inner_vlan,
     74                                        bcm_gport_t port_1, bcm_gport_t port_2);
     75 extern int bcm_tr_l2_cross_connect_delete(int unit, bcm_vlan_t outer_vlan, 
     76                                           bcm_vlan_t inner_vlan);
     77 extern int bcm_tr_l2_cross_connect_delete_all(int unit);
     78 extern int bcm_tr_l2_cross_connect_traverse(int unit,
     79                                             bcm_vlan_cross_connect_traverse_cb cb,
     80                                             void *user_data);
     81 extern int _bcm_tr_l2_replace_by_hw(int unit, _bcm_l2_replace_t *rep_st);
     82 
     83 #if defined(BCM_TRIUMPH_SUPPORT) /* BCM_TRIUMPH_SUPPORT */
     84 
     85 /* For MY_STATION_PROFILE table */
     86 extern int
     87 _bcm_l2_mysta_profile_entry_get(int unit,
     88                                 void *entry, int mem_no,
     89                                 uint32 mysta_prof_id);
     90 
     91 extern int
     92 _bcm_l2_mysta_profile_entry_add(int unit,
     93                                 void *entry, int mem_no,
     94                                 uint32 *mysta_prof_id);
     95 
     96 extern int
     97 _bcm_l2_mysta_profile_entry_delete(int unit, int mem_no, uint32 mysta_prof_id);
     98 
     99 extern void
    100 _bcm_l2_mysta_station_to_entry(int unit, bcm_l2_station_t *station, soc_mem_t, void *entry);
    101 
    102 extern void
    103 _bcm_l2_mysta_entry_to_station(int unit, void *entry, soc_mem_t mem, bcm_l2_station_t *station);
    104 /* Add an entry to L2 Station Table. */
    105 extern int bcm_tr_l2_station_add(int unit,
    106                                  int *station_id,
    107                                  bcm_l2_station_t *station);
    108 
    109 /* Delete an entry from L2 Station Table. */
    110 extern int bcm_tr_l2_station_delete(int unit, int station_id);
    111 
    112 /* Clear all L2 Station Table entries. */
    113 extern int bcm_tr_l2_station_delete_all( int unit);
    114 
    115 /* Get L2 station entry detail from Station Table. */
    116 extern int bcm_tr_l2_station_get(int unit,
    117                               int station_id,
    118                               bcm_l2_station_t *station);
    119 
    120 /* Get size of L2 Station Table. */
    121 extern int bcm_tr_l2_station_size_get(int unit, int *size);
    122 
    123 /* Traverse L2 Station Table. */
    124 extern int bcm_tr_l2_station_traverse(int unit, bcm_l2_station_traverse_cb trav_fn, void *user_data);
    125 
    126 /* L2 station support init routine. */
    127 extern int _bcm_tr_l2_station_control_init(int unit);
    128 
    129 /* Deallocate L2 station control resources. */
    130 extern int _bcm_tr_l2_station_control_deinit(int unit);
    131 
    132 extern int _bcm_l2_station_control_get(int unit,
    133                                        _bcm_l2_station_control_t **sc);
    134 extern int _bcm_tr_l2_station_entry_max_size_get(int unit,
    135                                                  int overlay, int *size);
    136 extern int _bcm_tr_l2_station_entry_last_sid_set(int unit,
    137                                                   int overlay, int sid);
    138 
    139 #endif /* !BCM_TRIUMPH_SUPPORT */
    140 
    141 #ifdef BCM_WARM_BOOT_SUPPORT
    142 extern int _bcm_tr_l2_reload_mbi(int unit);
    143 extern int _bcm_tr_qos_sync(int unit);
    144 extern int _bcm_tr_mpls_match_key_recover(int unit);
    145 extern int _bcm_tr_mpls_flex_stat_recover(int unit, int vp);
    146 extern int _bcm_tr_mpls_source_vp_tpid_recover(int unit, int vp);
    147 extern int _bcm_tr_mpls_associated_data_recover(int unit);
    148 extern void _bcm_tr_mpls_label_flex_stat_recover(int unit, mpls_entry_entry_t *ment);
    149 
    150 /* L2 station module warmboot recovery routine. */
    151 extern int _bcm_tr_l2_station_reload(int unit);
    152 #else
    153 #define _bcm_tr_l2_reload_mbi(_u)    (BCM_E_UNAVAIL)
    154 #endif /* BCM_WARM_BOOT_SUPPORT */
    155 
    156 #ifndef BCM_SW_STATE_DUMP_DISABLE
    157 extern void _bcm_tr_l2_sw_dump(int unit);
    158 #endif /* BCM_SW_STATE_DUMP_DISABLE */
    159 #ifdef BCM_WARM_BOOT_SUPPORT_SW_DUMP
    160 extern void _bcm_tr_qos_sw_dump(int unit);
    161 #endif /* BCM_WARM_BOOT_SUPPORT_SW_DUMP */
    162 
    163 extern int _bcm_trx_vlan_port_default_action_set(int unit, bcm_port_t port,
    164                                                 bcm_vlan_action_set_t *action);
    165 extern int _bcm_trx_vlan_port_default_action_get(int unit, bcm_port_t port,
    166                                                 bcm_vlan_action_set_t *action);
    167 extern int _bcm_trx_vlan_port_default_action_delete(int unit, bcm_port_t port);
    168 extern int _bcm_trx_vlan_port_egress_default_action_set(int unit, bcm_port_t port,
    169                                                 bcm_vlan_action_set_t *action);
    170 extern int _bcm_trx_vlan_port_egress_default_action_get(int unit, bcm_port_t port,
    171                                                        bcm_vlan_action_set_t *action);
    172 extern int _bcm_trx_vlan_port_egress_default_action_delete(int unit, bcm_port_t port);
    173 extern int _bcm_trx_vlan_port_egress_action_profile_clear(int unit, bcm_port_t port);
    174 extern int _bcm_trx_vlan_port_protocol_action_add(int unit, bcm_port_t port,
    175                                                  bcm_port_frametype_t frame,
    176                                                  bcm_port_ethertype_t ether,
    177                                                        bcm_vlan_action_set_t *action);
    178 extern int _bcm_trx_vlan_port_protocol_action_get(int unit, bcm_port_t port,
    179                                                  bcm_port_frametype_t frame,
    180                                                  bcm_port_ethertype_t ether,
    181                                                  bcm_vlan_action_set_t *action);
    182 
    183 extern int _bcm_trx_vlan_port_protocol_delete(int unit, bcm_port_t port,
    184                                              bcm_port_frametype_t frame,
    185                                              bcm_port_ethertype_t ether);
    186 extern int _bcm_trx_vlan_port_protocol_delete_all(int unit, bcm_port_t port);
    187 extern int _bcm_trx_vlan_port_protocol_action_traverse(int unit, 
    188                                 bcm_vlan_port_protocol_action_traverse_cb cb,
    189                                            void *user_data);
    190 
    191 extern int bcm_tr_port_rate_pause_get(int unit, bcm_port_t port,
    192                                       uint32 *kbits_pause,
    193                                       uint32 *kbits_resume);
    194 extern int bcm_tr_port_rate_egress_set(int unit, bcm_port_t port,
    195                                        uint32 kbits_sec,
    196                                        uint32 kbits_burst, uint32 mode);
    197 extern int bcm_tr_port_rate_egress_get(int unit, bcm_port_t port,
    198                                        uint32 *kbits_sec,
    199                                        uint32 *kbits_burst, uint32 *mode);
    200 extern int bcm_tr_port_pps_rate_egress_set(int unit, bcm_port_t port,
    201                                            uint32 pps, uint32 burst);
    202 extern int bcm_tr_port_pps_rate_egress_get(int unit, bcm_port_t port,
    203                                            uint32 *pps, uint32 *burst);
    204 extern int bcm_tr_qos_init(int unit);
    205 extern int bcm_tr_qos_detach(int unit);
    206 extern int bcm_tr_qos_map_create(int unit, uint32 flags, int *map_id);
    207 extern int bcm_tr_qos_map_destroy(int unit, int map_id);
    208 extern int bcm_tr_qos_map_add(int unit, uint32 flags, bcm_qos_map_t *map, 
    209                                int map_id);
    210 extern int bcm_tr_qos_map_delete(int unit, uint32 flags, 
    211                                   bcm_qos_map_t *map, int map_id);
    212 extern int bcm_tr_qos_multi_get(int unit, int array_size, int *map_ids_array,
    213                                  int *flags_array, int *array_count);
    214 extern int bcm_tr_qos_map_multi_get(int unit, uint32 flags,
    215                                      int map_id, int array_size, 
    216                                      bcm_qos_map_t *array, int *array_count);
    217 extern int bcm_tr_qos_port_map_set(int unit, bcm_gport_t port, int ing_map, 
    218                                     int egr_map);
    219 extern int _bcm_tr_qos_id2idx(int unit, int map_id, int *hw_idx);
    220 extern int _bcm_tr_qos_idx2id(int unit, int hw_idx, int type, int *map_id);
    221 
    222 
    223 #ifdef BCM_FIELD_SUPPORT 
    224 extern int _bcm_field_tr_init(int unit, _field_control_t *fc);
    225 extern int _bcm_field_tr_external_tcam_key_mask_get(int unit, 
    226                                                     _field_entry_t *f_ent);
    227 extern int _bcm_field_tr_multipath_hashcontrol_get(int unit, int *arg);
    228 extern int _bcm_field_tr_multipath_hashcontrol_set(int unit, int arg);
    229 extern int _bcm_field_tr_external_entry_move(int unit, 
    230                                                   _field_entry_t *f_ent,
    231                                                   int index1, int index2);
    232 extern int _bcm_field_tr_external_group_remove(int unit, _field_group_t *fg);
    233 extern int _bcm_field_tr_external_counter_idx_get(int unit, 
    234                                                   uint8  slice_number, 
    235                                                   bcm_field_entry_t entry_index, 
    236                                                   int  *idx);
    237 extern int _bcm_field_tr_external_counters_collect(int unit, 
    238                                                    _field_stage_t *stage_fc);
    239 extern int _bcm_field_tr_external_policy_mem_get(int unit, 
    240                                                  _field_action_t *fa, 
    241                                                  soc_mem_t *mem);
    242 extern int _bcm_field_tr_external_mode_set(int unit, uint8 slice_numb, 
    243                                            _field_group_t *fg, uint8 flags);
    244 extern int _bcm_field_tr_external_slice_clear(int unit, _field_group_t *fg);
    245 extern int _bcm_field_tr_external_init(int unit, _field_stage_t *stage_fc);
    246 extern int _bcm_field_tr_hw_clear(int unit, _field_stage_t *stage_fc);
    247 extern int _bcm_field_tr_detach(int unit, _field_control_t *fc);
    248 extern int _bcm_field_tr_selcode_get(int unit, _field_stage_t *stage_fc, 
    249                                      bcm_field_qset_t *qset_req, 
    250                                      _field_group_t *fg);
    251 extern int _bcm_field_tr_entry_install(int unit, _field_entry_t *f_ent,
    252                                        int tcam_idx);
    253 extern int _bcm_field_tr_entry_reinstall(int unit, _field_entry_t *f_ent,
    254                                        int tcam_idx);
    255 extern int _bcm_field_tr_write_slice_map(int unit, _field_stage_t *stage_fc,
    256                                          _field_group_t *fg);
    257 extern int _bcm_field_tr_counter_get(int unit, _field_stage_t *stage_fc, 
    258                                      soc_mem_t counter_x_mem, uint32 *mem_x_buf, 
    259                                      soc_mem_t counter_y_mem, uint32 *mem_y_buf,
    260                                      int idx, uint64 *packet_count, 
    261                                      uint64 *byte_count);
    262 extern int _bcm_field_tr_counter_set(int unit, _field_stage_t *stage_fc,
    263                                      soc_mem_t counter_x_mem, uint32 *mem_x_buf,
    264                                      soc_mem_t counter_y_mem, uint32 *mem_y_buf,
    265                                      int idx, uint64 *packet_count, 
    266                                      uint64 *byte_count);
    267 extern int _bcm_field_tr_external_entry_install(int unit, 
    268                                                 _field_entry_t *f_ent);
    269 extern int _bcm_field_tr_external_entry_reinstall(int unit, 
    270                                                 _field_entry_t *f_ent);
    271 extern int _bcm_field_tr_external_entry_remove(int unit, _field_entry_t *f_ent);
    272 extern int _bcm_field_tr_external_entry_prio_set(int unit, _field_entry_t *f_ent, 
    273                                                  int prio);
    274 #endif /* BCM_FIELD_SUPPORT */
    275 
    276 #ifdef INCLUDE_L3
    277 
    278 struct _bcm_l3_trvrs_data_s;
    279 extern int _bcm_tr_l3_enable(int unit, bcm_port_t port, uint32 flags, int enable);
    280 extern int _bcm_tr_l3_ingress_interface_clr(int unit, int intf_id);
    281 extern int _bcm_tr_l3_intf_class_set(int unit, bcm_vlan_t vid, uint32 intf_class);
    282 extern int _bcm_tr_l3_intf_nat_realm_id_get(int unit, bcm_vlan_t vid, 
    283                                             int *realm_id);
    284 extern int _bcm_tr_l3_intf_nat_realm_id_set(int unit, bcm_vlan_t vid, 
    285                                             int realm_id);
    286 extern int _bcm_tr_l3_intf_vrf_get(int unit, bcm_vlan_t vid, bcm_vrf_t *vrf);
    287 extern int _bcm_tr_l3_intf_vrf_bind(int unit, bcm_vlan_t vid, bcm_vrf_t vrf);
    288 extern int _bcm_tr_l3_intf_global_route_enable_get(int unit, bcm_vlan_t vid, 
    289                                                    int *enable);
    290 extern int _bcm_tr_l3_intf_global_route_enable_set(int unit, bcm_vlan_t vid, 
    291                                                    int enable); 
    292 extern int _bcm_tr_l3_ipmc_get(int unit, _bcm_l3_cfg_t *l3cfg);
    293 extern int _bcm_tr_l3_ipmc_add(int unit, _bcm_l3_cfg_t *l3cfg);
    294 extern int _bcm_tr_l3_ipmc_del(int unit, _bcm_l3_cfg_t *l3cfg);
    295 extern int _bcm_tr_l3_ipmc_get_by_idx(int unit, void *dma_ptr, int idx,
    296                                       _bcm_l3_cfg_t *l3cfg);
    297 extern int _bcm_tr_l3_defip_mem_get(int unit, uint32 flags, 
    298                                     int plen, soc_mem_t *mem);
    299 extern void _bcm_tr_l3_ipmc_ent_init(int unit, uint32 *l3x_entry,
    300                                      _bcm_l3_cfg_t *l3cfg);
    301 extern int _bcm_tr_defip_init(int unit);
    302 extern int _bcm_tr_defip_deinit(int unit);
    303 extern int _bcm_tr_l3_intf_mtu_get(int unit, _bcm_l3_intf_cfg_t *intf_info);
    304 extern int _bcm_tr_l3_intf_mtu_set(int unit, _bcm_l3_intf_cfg_t *intf_info);
    305 extern int _bcm_tr_ext_lpm_init(int unit, soc_mem_t mem);
    306 extern int _bcm_tr_ext_lpm_deinit(int unit, soc_mem_t mem);
    307 extern int _bcm_tr_ext_lpm_add(int unit, _bcm_defip_cfg_t *data, 
    308                                int nh_ecmp_idx);
    309 extern int _bcm_tr_ext_lpm_delete(int unit, _bcm_defip_cfg_t *key);
    310 extern int _bcm_tr_ext_lpm_match(int unit, _bcm_defip_cfg_t *key, 
    311                                  int *next_hop_index);
    312 extern int _bcm_tr_defip_traverse(int unit, struct _bcm_l3_trvrs_data_s *trv_data);
    313 
    314 extern int bcm_tr_ipmc_init(int unit);
    315 extern int bcm_tr_ipmc_detach(int unit);
    316 extern int bcm_tr_ipmc_get(int unit, int index, bcm_ipmc_addr_t *ipmc);
    317 extern int bcm_tr_ipmc_lookup(int unit, int *index, bcm_ipmc_addr_t *ipmc);
    318 extern int bcm_tr_ipmc_add(int unit, bcm_ipmc_addr_t *ipmc);
    319 extern int bcm_tr_ipmc_put(int unit, int index, bcm_ipmc_addr_t *ipmc);
    320 extern int bcm_tr_ipmc_write (int unit, int ipmc_id, bcm_ipmc_addr_t *ipmc);
    321 extern int bcm_tr_ipmc_delete(int unit, bcm_ipmc_addr_t *ipmc);
    322 extern int bcm_tr_ipmc_delete_all(int unit);
    323 extern int bcm_tr_ipmc_age(int unit, uint32 flags, bcm_ipmc_traverse_cb age_cb,
    324                            void *user_data);
    325 extern int bcm_tr_ipmc_traverse(int unit, uint32 flags,
    326                                 bcm_ipmc_traverse_cb cb, void *user_data);
    327 extern int bcm_tr_ipmc_enable(int unit, int enable);
    328 extern int bcm_tr_ipmc_src_port_check(int unit, int enable);
    329 extern int bcm_tr_ipmc_src_ip_search(int unit, int enable);
    330 extern int bcm_tr_ipmc_egress_port_set(int unit, bcm_port_t port,
    331                                        const bcm_mac_t mac, int untag,
    332                                        bcm_vlan_t vid, int ttl_threshold);
    333 extern int bcm_tr_ipmc_egress_port_get(int unit, bcm_port_t port,
    334                                        sal_mac_addr_t mac, int *untag,
    335                                        bcm_vlan_t *vid, int *ttl_threshold);
    336 extern int _bcm_tr_ipmc_src_port_consistency_check(int unit, int ipmc_index,
    337         bcm_ipmc_addr_t *ipmc, int already_used, int *need_write);
    338 
    339 
    340 #ifdef BCM_WARM_BOOT_SUPPORT
    341 extern int _bcm_tr_ipmc_reinit(int unit);
    342 #else
    343 #define _bcm_tr_ipmc_reinit(_u)    (BCM_E_UNAVAIL)
    344 #endif /* BCM_WARM_BOOT_SUPPORT */
    345 
    346 #ifndef BCM_SW_STATE_DUMP_DISABLE
    347 extern void _bcm_tr_ipmc_sw_dump(int unit);
    348 #endif /* BCM_SW_STATE_DUMP_DISABLE */
    349 
    350 extern int bcm_tr_mpls_lock (int unit);
    351 extern void bcm_tr_mpls_unlock(int unit);
    352 extern int bcm_tr_mpls_init(int unit);
    353 extern int bcm_tr_mpls_cleanup(int unit);
    354 #ifdef BCM_WARM_BOOT_SUPPORT
    355 extern int bcm_tr_mpls_sync(int unit);
    356 #endif
    357 extern int bcm_tr_mpls_vpn_id_create(int unit, bcm_mpls_vpn_config_t *info);
    358 extern int bcm_tr_mpls_vpn_id_destroy(int unit, bcm_vpn_t vpn);
    359 extern int bcm_tr_mpls_vpn_id_get( int unit, bcm_vpn_t  vpn, bcm_mpls_vpn_config_t *info);
    360 extern int bcm_tr_mpls_vpn_id_destroy_all(int unit);
    361 extern int bcm_tr_mpls_vpn_traverse(int unit, bcm_mpls_vpn_traverse_cb cb, void *user_data);
    362 extern int bcm_tr_mpls_port_add(int unit, bcm_vpn_t vpn, 
    363                                 bcm_mpls_port_t *mpls_port);
    364 extern int bcm_tr_mpls_port_delete(int unit, bcm_vpn_t vpn, bcm_gport_t mpls_port_id);
    365 extern int bcm_tr_mpls_port_delete_all(int unit, bcm_vpn_t vpn);
    366 extern int bcm_tr_mpls_port_get(int unit, bcm_vpn_t vpn, 
    367                                 bcm_mpls_port_t *mpls_port);
    368 extern int bcm_tr_mpls_port_get_all(int unit, bcm_vpn_t vpn, int port_max,
    369                                     bcm_mpls_port_t *port_array, int *port_count);
    370 extern int bcm_tr_mpls_tunnel_initiator_set(int unit, bcm_if_t intf, int num_labels,
    371                                             bcm_mpls_egress_label_t *label_array);
    372 extern int bcm_tr_mpls_tunnel_initiator_clear(int unit, bcm_if_t intf);
    373 extern int bcm_tr_mpls_tunnel_initiator_get(int unit, bcm_if_t intf, int label_max,
    374                                             bcm_mpls_egress_label_t *label_array,
    375                                             int *label_count);
    376 extern int _bcm_tr_mpls_tunnel_chain_label_count_get(int unit, uint32 index,
    377                                                      int *label_count);
    378 extern int bcm_tr_mpls_tunnel_initiator_clear_all(int unit);
    379 extern int bcm_tr_mpls_tunnel_switch_add(int unit, bcm_mpls_tunnel_switch_t *info);
    380 extern int bcm_tr_mpls_tunnel_switch_delete(int unit, bcm_mpls_tunnel_switch_t *info);
    381 extern int bcm_tr_mpls_tunnel_switch_delete_all(int unit);
    382 extern int bcm_tr_mpls_tunnel_switch_get(int unit, bcm_mpls_tunnel_switch_t *info);
    383 extern int bcm_tr_mpls_tunnel_switch_traverse(int unit,
    384                                               bcm_mpls_tunnel_switch_traverse_cb cb,
    385                                               void *user_data);
    386 extern int bcm_tr_mpls_exp_map_create(int unit, uint32 flags, int *exp_map_id);
    387 extern int bcm_tr_mpls_exp_map_destroy(int unit, int exp_map_id);
    388 extern int bcm_tr_mpls_exp_map_destroy_all(int unit);
    389 extern int bcm_tr_mpls_exp_map_set(int unit, int exp_map_id,
    390                                    bcm_mpls_exp_map_t *exp_map);
    391 extern int bcm_tr_mpls_exp_map_get(int unit, int exp_map_id,
    392                                    bcm_mpls_exp_map_t *exp_map);
    393 extern int _bcm_tr_get_ing_mpls_index_size(int unit);
    394 #ifdef BCM_APACHE_SUPPORT
    395 extern int bcm_tr_mpls_exp_to_phb_cng_map_create(int unit, uint32 flags, 
    396                                                  int *exp_map_id);
    397 extern int bcm_tr_mpls_exp_to_phb_cng_map_destroy(int unit, int exp_map_id);
    398 extern int bcm_tr_mpls_exp_to_phb_cng_map_set(int unit, int exp_map_id, 
    399                                            bcm_mpls_exp_map_t *exp_map);
    400 extern int bcm_tr_mpls_exp_map_get(int unit, int exp_map_id,
    401                                    bcm_mpls_exp_map_t *exp_map);
    402 extern int bcm_tr_mpls_exp_to_phb_cng_map_profile_id_get(int unit, uint32 flags,
    403                                            int exp_map_id, int *profile_id);
    404 extern int bcm_tr_mpls_exp_to_phb_cng_map_usage_get(int unit, uint32 flags,
    405                                            int exp_map_id);
    406 
    407 extern int bcm_tr_mpls_exp_to_phb_cng_map_profile_range_get(int unit, 
    408                                               uint32 flags,
    409                                               int *count);
    410 #endif
    411 extern int bcm_tr_mpls_label_stat_get(int unit, int sync_mode, 
    412                                       bcm_mpls_label_t label,
    413                                       bcm_gport_t port,
    414                                       bcm_mpls_stat_t stat, 
    415                                       uint64 *val);
    416 extern int bcm_tr_mpls_label_stat_get32(int unit, int sync_mode, 
    417                                         bcm_mpls_label_t label, 
    418                                         bcm_gport_t port,
    419                                         bcm_mpls_stat_t stat, 
    420                                         uint32 *val);
    421 extern int bcm_tr_mpls_label_stat_clear(int unit, bcm_mpls_label_t label, bcm_gport_t port,
    422                                     bcm_mpls_stat_t stat);
    423 extern int _bcm_tr_mpls_port_resolve(int unit, bcm_gport_t mpls_port,
    424                                      bcm_module_t *modid, bcm_port_t *port,
    425                                      bcm_trunk_t *trunk_id, int *id);
    426 extern int bcm_tr_mpls_port_learn_set(int unit, bcm_gport_t port, uint32 flags);
    427 extern int bcm_tr_mpls_port_learn_get(int unit, bcm_gport_t port, uint32 *flags);
    428 extern int bcm_tr_mpls_mcast_flood_set(int unit, bcm_vlan_t vlan,
    429                                        bcm_vlan_mcast_flood_t mode);
    430 extern int bcm_tr_mpls_mcast_flood_get(int unit, bcm_vlan_t vlan,
    431                                        bcm_vlan_mcast_flood_t *mode);
    432 extern int bcm_tr_mpls_port_phys_gport_get(int unit, int vp, bcm_gport_t *gp);
    433 extern int bcm_tr_mpls_l3_nh_info_add(int unit, bcm_mpls_tunnel_switch_t *info, int *nh_index);
    434 extern int bcm_tr_mpls_l3_nh_info_delete(int unit, int nh_index);
    435 extern int bcm_tr_mpls_l3_nh_info_get(int unit, bcm_mpls_tunnel_switch_t *info, int nh_index);
    436 extern int bcm_tr_mpls_get_vp_nh (int unit, int vp_index, bcm_if_t *egress_if);
    437 extern int bcm_tr_mpls_egress_entry_modify(int unit, int nh_index,
    438         int mpath_flag, int new_entry_type);
    439 extern int bcm_tr_mpls_egress_entry_mac_replace(int unit, int nh_index, bcm_l3_egress_t *egr);
    440 extern void bcm_tr_mpls_pw_used_clear(int unit, int pw_cnt);
    441 extern int bcm_tr_mpls_pw_used_get(int unit, int pw_cnt);
    442 extern void bcm_tr_mpls_pw_used_set(int unit, int pw_cnt);
    443 extern int bcm_tr_mpls_vrf_used_get(int unit, int vrf);
    444 extern int bcm_tr_mpls_port_independent_range (int unit, bcm_mpls_label_t label, bcm_gport_t port );
    445 extern int bcm_tr_mpls_tunnel_intf_valid (int unit, int nh_index);
    446 extern int bcm_tr_mpls_get_label_action (int unit, int nh_index, uint32 *label_action );
    447 extern int _bcm_tr_mpls_match_delete(int unit, int vp, bcm_mpls_port_t *mpls_port, int sw_clear);
    448 extern int _bcm_tr_mpls_match_add(int unit, bcm_mpls_port_t *mpls_port, int vp, int vpn, int hw_update);
    449 extern int _bcm_tr_mpls_failover_nw_port_match_get(int unit, bcm_mpls_port_t *mpls_port,
    450                                                     int vp, mpls_entry_entry_t *return_ment);
    451 extern int _bcm_esw_mpls_match_delete(int unit, int vp, int sw_clear);
    452 extern int _bcm_esw_mpls_match_failover_update(int unit, int vp, int fo_vp);
    453 extern int _bcm_esw_mpls_match_add(int unit, bcm_mpls_port_t *mpls_port, int vp,
    454         int vpn, int update);
    455 extern int _bcm_tr_mpls_match_get(int unit, bcm_mpls_port_t *mpls_port, int vp);
    456 extern int _bcm_esw_mpls_match_get(int unit, bcm_mpls_port_t *mpls_port, int vp);
    457 extern int _bcm_esw_mpls_failover_nw_port_match_get(int unit,
    458         bcm_mpls_port_t *mpls_port, int vp, mpls_entry_entry_t *return_ment);
    459 extern int  _bcm_esw_mpls_tunnel_switch_delete_all (int unit);
    460 extern int bcm_tr_mpls_port_untagged_profile_set (int unit, bcm_port_t port);
    461 extern int bcm_tr_mpls_port_untagged_profile_reset(int unit, bcm_port_t port);
    462 extern void bcm_tr_mpls_match_clear (int unit, int vp);
    463 extern void  bcm_tr_mpls_port_match_count_adjust(int unit, int vp, int step);
    464 extern int bcm_tr_mpls_trunk_member_add(int unit, bcm_trunk_t trunk_id, 
    465                                         int trunk_member_count, 
    466                                         bcm_port_t *trunk_member_array);
    467 extern int bcm_tr_mpls_trunk_member_delete(int unit, bcm_trunk_t trunk_id, 
    468                                            int trunk_member_count,
    469                                            bcm_port_t *trunk_member_array);
    470 extern int _bcm_esw_mpls_trunk_member_add(int unit, bcm_trunk_t trunk_id, 
    471                                           int trunk_member_count,
    472                                           bcm_port_t *trunk_member_array);
    473 extern int _bcm_esw_mpls_trunk_member_delete(int unit, bcm_trunk_t trunk_id, 
    474                                              int trunk_member_count,
    475                                              bcm_port_t *trunk_member_array);
    476 extern int  bcm_tr_mpls_match_trunk_add(int unit, bcm_trunk_t tgid, int vp);
    477 extern int bcm_tr_mpls_match_trunk_delete(int unit, bcm_trunk_t tgid, int vp);
    478 extern int _bcm_tr_mpls_vpless_failover_nh_index_find (int unit, int vp,
    479                             int primary_nh_index, int *fo_nh_index);
    480 
    481 extern int _bcm_tr_vlan_translate_vp_add(int unit,
    482                                           bcm_gport_t port,
    483                                           bcm_vlan_translate_key_t key_type,
    484                                           bcm_vlan_t outer_vlan,
    485                                           bcm_vlan_t inner_vlan,
    486                                           int vp,
    487                                           bcm_vlan_action_set_t *action,
    488                                           int *existing_updated);
    489 extern int _bcm_tr_lltag_vlan_translate_vp_add(int unit,
    490                                bcm_gport_t port,
    491                                bcm_vlan_translate_key_t key_type,
    492                                bcm_vlan_t lltag_vlan,
    493                                bcm_vlan_t other_vlan,
    494                                int vp, bcm_vlan_action_set_t *action);
    495 extern int _bcm_tr_vlan_translate_vp_delete(int unit,
    496                                           bcm_gport_t port,
    497                                           bcm_vlan_translate_key_t key_type,
    498                                           bcm_vlan_t outer_vlan,
    499                                           bcm_vlan_t inner_vlan,
    500                                           int vp);
    501 extern int _bcm_tr_lltag_vlan_translate_vp_delete(int unit,
    502                                   bcm_gport_t port,
    503                                   bcm_vlan_translate_key_t key_type,
    504                                   bcm_vlan_t lltag_vlan,
    505                                   bcm_vlan_t other_vlan,
    506                                   int vp);
    507 extern int bcm_tr_subport_init(int unit);
    508 extern int bcm_tr_subport_cleanup(int unit);
    509 extern int bcm_tr_subport_group_create(int unit, bcm_subport_group_config_t *config,
    510                                        bcm_gport_t *group);
    511 extern int bcm_tr_subport_group_destroy(int unit, bcm_gport_t group);
    512 extern int bcm_tr_subport_group_get(int unit, bcm_gport_t group,
    513                                     bcm_subport_group_config_t *config);
    514 extern int bcm_tr_subport_port_add(int unit, bcm_subport_config_t *config,
    515                                    bcm_gport_t *port);
    516 extern int bcm_tr_subport_port_delete(int unit, bcm_gport_t port);
    517 extern int bcm_tr_subport_port_get(int unit, bcm_gport_t port,
    518                                    bcm_subport_config_t *config);
    519 extern int bcm_tr_subport_port_traverse(int unit, bcm_subport_port_traverse_cb cb,
    520                                         void *user_data);
    521 extern int _bcm_tr_subport_group_resolve(int unit, bcm_gport_t gport,
    522                                          bcm_module_t *modid, bcm_port_t *port,
    523                                          bcm_trunk_t *trunk_id, int *id);
    524 extern int _bcm_tr_subport_port_resolve(int unit, bcm_gport_t gport,
    525                                         bcm_module_t *modid, bcm_port_t *port,
    526                                         bcm_trunk_t *trunk_id, int *id);
    527 extern int bcm_tr_subport_learn_set(int unit, bcm_gport_t port, uint32 flags);
    528 extern int bcm_tr_subport_learn_get(int unit, bcm_gport_t port, uint32 *flags);
    529 extern int _bcm_tr_subport_group_find(int unit, int vp, int *grp);
    530 extern int bcm_tr_multicast_vpls_encap_get(int unit, bcm_multicast_t group, bcm_gport_t port,
    531                                            bcm_gport_t mpls_port_id, bcm_if_t *encap_id);
    532 extern int bcm_tr_multicast_subport_encap_get(int unit, bcm_multicast_t group, bcm_gport_t port,
    533                                               bcm_gport_t subport, bcm_if_t *encap_id);
    534 extern int bcm_trx_multicast_egress_delete_all(int unit, bcm_multicast_t group);
    535 extern int bcm_trx_multicast_egress_set(int unit, bcm_multicast_t group,
    536                                        int port_count, bcm_gport_t *port_array,
    537                                        bcm_if_t *encap_array);
    538 extern int bcm_tr_mpls_swap_nh_info_add(int unit, bcm_l3_egress_t *egr, int nh_index, uint32 flags);
    539 extern int bcm_tr_mpls_swap_nh_info_delete(int unit, int nh_index);
    540 extern int bcm_tr_mpls_swap_nh_info_get(int unit, bcm_l3_egress_t *egr, int nh_index);
    541 extern int bcm_tr_mpls_update_vp_nh ( int unit, int index);
    542 extern int bcm_tr_mpls_l3_label_add (int unit, bcm_l3_egress_t *egr,  int index, uint32 flags);
    543 extern int bcm_tr_mpls_l3_label_delete (int unit, int index);
    544 extern int bcm_tr_mpls_l3_label_get (int unit, int index, bcm_l3_egress_t *nh_info);
    545 extern int bcm_tr_mpls_get_entry_type (int unit, int nh_index, uint32 *entry_type );
    546 extern void bcm_tr_mpls_entry_internal_qos_set(int unit, bcm_mpls_port_t *mpls_port, 
    547                                                                           bcm_mpls_tunnel_switch_t  *info, mpls_entry_entry_t *ment);
    548 extern void _bcm_tr_mpls_vc_and_swap_ref_count_adjust (int unit, int index, int step);
    549 #if defined(BCM_TRIUMPH3_SUPPORT)
    550 extern int _bcm_tr_mpls_vc_and_swap_table_entry_adjust (int unit, int vp);
    551 #endif
    552 /* trx mpls hash related functions */
    553 extern int
    554 bcmi_tr_mpls_vc_swap_hash_index_get(int unit, bcm_mpls_port_t *mpls_port,
    555             int action, bcm_mpls_tunnel_switch_t *info,
    556             bcm_l3_egress_t *egr_obj,
    557             egr_mpls_vc_and_swap_label_table_entry_t *vc_entry,
    558             int *idx);
    559 extern int 
    560 bcmi_tr_mpls_vc_swap_hash_delete(int unit, 
    561             bcm_tr_mpls_vc_swap_table_hash_t *hash,
    562             int vc_swap_idx);
    563 extern int 
    564 bcmi_tr_mpls_vc_swap_hash_insert(int unit,
    565             bcm_tr_mpls_vc_swap_table_hash_t *hash,
    566             int table_idx, bcm_mpls_port_t *mpls_port,
    567             bcm_mpls_tunnel_switch_t *info, bcm_l3_egress_t *egr_obj,
    568             egr_mpls_vc_and_swap_label_table_entry_t *vc_entry,
    569             int action, int *vc_swap_index, int cmp);
    570 
    571 extern int
    572 _bcm_tr_mpls_get_vc_and_swap_table_index (int unit, int flags,
    573                         bcm_mpls_port_t *mpls_port,
    574                         bcm_mpls_tunnel_switch_t *info,
    575                         bcm_l3_egress_t *egr_obj,
    576                         egr_mpls_vc_and_swap_label_table_entry_t *vc_entry,
    577                         int action, int *vc_swap_index);
    578 extern int
    579 _bcm_tr_mpls_vc_and_swap_table_index_reset (int unit, int vc_swap_index);
    580 
    581 #if defined(BCM_TRIDENT2_SUPPORT)
    582 extern int bcm_td2_mpls_port_source_vp_lag_set(int unit, bcm_gport_t gport, int vp_lag_vp);
    583 extern int bcm_td2_mpls_port_source_vp_lag_clear(int unit, bcm_gport_t gport, int vp_lag_vp);
    584 extern int bcm_td2_mpls_port_source_vp_lag_get(int unit, bcm_gport_t gport, int *vp_lag_vp);
    585 #endif
    586 #if defined(BCM_TRIDENT3_SUPPORT)
    587 extern int bcmi_td3_mpls_php_vcswap_info_add(int unit, bcm_mpls_tunnel_switch_t *info, int *nh_index);
    588 
    589 extern int bcmi_td3_mpls_php_vcswap_info_delete(int unit, int nh_index, int dest_type);
    590 #endif
    591 #endif /* INCLUDE_L3 */
    592 extern int bcm_tr_cosq_init(int unit);
    593 extern int bcm_tr_cosq_detach(int unit, int software_state_only);
    594 extern int bcm_tr_cosq_config_set(int unit, int numq);
    595 extern int bcm_tr_cosq_config_get(int unit, int *numq);
    596 extern int bcm_tr_cosq_mapping_set(int unit, bcm_port_t port,
    597                                    bcm_cos_t priority, bcm_cos_queue_t cosq);
    598 extern int bcm_tr_cosq_mapping_get(int unit, bcm_port_t port,
    599                                    bcm_cos_t priority, bcm_cos_queue_t *cosq);
    600 extern int bcm_tr_cosq_port_bandwidth_set(int unit, bcm_port_t port,
    601                                           bcm_cos_queue_t cosq,
    602                                           uint32 kbits_sec_min,
    603                                           uint32 kbits_sec_max,
    604                                           uint32 kbits_sec_burst,
    605                                           uint32 flags);
    606 extern int bcm_tr_cosq_port_bandwidth_get(int unit, bcm_port_t port,
    607                                           bcm_cos_queue_t cosq,
    608                                           uint32 *kbits_sec_min,
    609                                           uint32 *kbits_sec_max,
    610                                           uint32 *kbits_sec_burst,
    611                                           uint32 *flags);
    612 extern int bcm_tr_cosq_port_pps_set(int unit, bcm_port_t port,
    613                                     bcm_cos_queue_t cosq, int pps);
    614 extern int bcm_tr_cosq_port_pps_get(int unit, bcm_port_t port,
    615                                     bcm_cos_queue_t cosq, int *pps);
    616 extern int bcm_tr_cosq_port_burst_set(int unit, bcm_port_t port,
    617                                       bcm_cos_queue_t cosq, int burst);
    618 extern int bcm_tr_cosq_port_burst_get(int unit, bcm_port_t port,
    619                                       bcm_cos_queue_t cosq, int *burst);
    620 extern int bcm_tr_cosq_discard_set(int unit, uint32 flags);
    621 extern int bcm_tr_cosq_discard_get(int unit, uint32 *flags);
    622 extern int bcm_tr_cosq_discard_port_set(int unit, bcm_port_t port,
    623                                         bcm_cos_queue_t cosq, uint32 color,
    624                                         int drop_start, int drop_slope,
    625                                         int average_time);
    626 extern int bcm_tr_cosq_discard_port_get(int unit, bcm_port_t port,
    627                                         bcm_cos_queue_t cosq, uint32 color,
    628                                         int *drop_start, int *drop_slope,
    629                                         int *average_time);
    630 extern int bcm_tr_cosq_gport_discard_set(int unit, bcm_gport_t port, 
    631                                          bcm_cos_queue_t cosq,
    632                                          bcm_cosq_gport_discard_t *discard);
    633 extern int bcm_tr_cosq_gport_discard_get(int unit, bcm_gport_t port, 
    634                                          bcm_cos_queue_t cosq,
    635                                          bcm_cosq_gport_discard_t *discard);
    636 extern int bcm_tr_cosq_port_sched_set(int unit, bcm_pbmp_t pbm,
    637                                       int mode, const int weights[], int delay);
    638 extern int bcm_tr_cosq_port_sched_get(int unit, bcm_pbmp_t pbm,
    639                                       int *mode, int weights[], int *delay);
    640 extern int bcm_tr_cosq_sched_weight_max_get(int unit, int mode,
    641                                             int *weight_max);
    642 extern int bcm_tr_cosq_gport_add(int unit, bcm_gport_t port, int numq,
    643                                  uint32 flags, bcm_gport_t *gport);
    644 extern int bcm_tr_cosq_gport_delete(int unit, bcm_gport_t gport);
    645 extern int bcm_tr_cosq_gport_traverse(int unit, bcm_cosq_gport_traverse_cb cb,
    646                                       void *user_data);
    647 
    648 extern int bcm_tr_cosq_gport_bandwidth_set(int unit, bcm_gport_t gport,
    649                                            bcm_cos_queue_t cosq, 
    650                                            uint32 kbits_sec_min,
    651                                            uint32 kbits_sec_max,
    652                                            uint32 flags);
    653 extern int bcm_tr_cosq_gport_bandwidth_get(int unit, bcm_gport_t gport,
    654                                            bcm_cos_queue_t cosq, 
    655                                            uint32 *kbits_sec_min,
    656                                            uint32 *kbits_sec_max,
    657                                            uint32 *flags);
    658 extern int bcm_tr_cosq_gport_bandwidth_burst_set(int unit, bcm_gport_t gport,
    659                                                  bcm_cos_queue_t cosq, 
    660                                                  uint32 kbits_burst_min,
    661                                                  uint32 kbits_burst_max);
    662 extern int bcm_tr_cosq_gport_bandwidth_burst_get(int unit, bcm_gport_t gport,
    663                                                  bcm_cos_queue_t cosq, 
    664                                                  uint32 *kbits_burst_min,
    665                                                  uint32 *kbits_burst_max);
    666 extern int bcm_tr_cosq_gport_sched_set(int unit, bcm_gport_t gport,
    667                                        bcm_cos_queue_t cosq, int mode,
    668                                        int weight);
    669 extern int bcm_tr_cosq_gport_sched_get(int unit, bcm_gport_t gport, 
    670                                        bcm_cos_queue_t cosq, int *mode,
    671                                        int *weight);
    672 extern int bcm_tr_cosq_gport_attach(int unit, bcm_gport_t sched_gport, 
    673                                     bcm_cos_queue_t cosq, bcm_gport_t input_gport);
    674 extern int bcm_tr_cosq_gport_detach(int unit, bcm_gport_t sched_gport,
    675                                     bcm_cos_queue_t cosq, bcm_gport_t input_gport);
    676 extern int bcm_tr_cosq_gport_attach_get(int unit, bcm_gport_t sched_gport,
    677                                         bcm_cos_queue_t *cosq, bcm_gport_t *input_gport);
    678 extern int _bcm_tr_cosq_port_resolve(int unit, bcm_gport_t gport,
    679                                      bcm_module_t *modid, bcm_port_t *port,
    680                                      bcm_trunk_t *trunk_id, int *id);
    681 extern int _bcm_l2_hash_dynamic_replace(int unit, l2x_entry_t *l2x_entry);
    682 extern int _bcm_l2_hash_pending_override(int unit, l2x_entry_t *l2x_entry);
    683 extern int bcm_bfd_l2_hash_dynamic_replace(int unit, l2x_entry_t *l2x_entry);
    684 #ifdef BCM_WARM_BOOT_SUPPORT
    685 extern int bcm_tr_cosq_sync(int unit);
    686 #endif /* BCM_WARM_BOOT_SUPPORT */
    687 #ifndef BCM_SW_STATE_DUMP_DISABLE
    688 extern void bcm_tr_cosq_sw_dump(int unit);
    689 #endif /* BCM_SW_STATE_DUMP_DISABLE */
    690 
    691 extern int _bcm_sb2_ing_service_pri_map_info_get(int unit, int pri_map_id,
    692                                           uint32 *hw_idx, uint32 *pri_mode);
    693 extern int
    694 _bcm_sb2_service_pri_map_flags_max_pri_get(uint32 flags, int *max_pri);
    695 extern int
    696 _bcm_sb2_service_pri_map_flags_pri_set(uint32 flags, int pri, bcm_qos_map_t *map);
    697 extern int _bcm_sb2_service_pri_map_info_id_get(int unit, uint32 hw_idx, int *pri_map_id);
    698 extern int _bcm_sb2_service_pri_map_reference_add(int unit, int pri_map_id);
    699 extern int _bcm_tr_mpls_pw_term_counter_set(int unit, int *pw_term_cnt);
    700 int _bcm_tr_mpls_vpws_egress_if_get(int unit, bcm_gport_t gport, bcm_if_t *egress_if);
    701 
    702 #endif  /* BCM_TRX_SUPPORT */
    703 #endif  /* !_BCM_INT_TRIUMPH_H_ */