triumph3.h (73549B)
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 * All Rights Reserved.$ 7 * 8 * File: triumph3.h 9 * Purpose: Function declarations for Triumph3 Internal functions. 10 */ 11 12 #ifndef _BCM_INT_TRIUMPH3_H_ 13 #define _BCM_INT_TRIUMPH3_H_ 14 15 #if defined(BCM_TRIUMPH3_SUPPORT) || defined(BCM_HURRICANE2_SUPPORT) || defined(BCM_KATANA2_SUPPORT) 16 17 #include <bcm_int/esw/mbcm.h> 18 #include <soc/tnl_term.h> 19 #include <bcm_int/esw/firebolt.h> 20 #include <bcm_int/esw/cosq.h> 21 #include <bcm_int/esw/oam.h> 22 #include <bcm/failover.h> 23 #include <bcm/oam.h> 24 #include <bcm_int/esw/flex_ctr.h> 25 #include <bcm_int/esw/l2gre.h> 26 27 #define _BCM_TR3_L3_PORT_MASK 0x7f 28 #define _BCM_TR3_L3_MODID_MASK 0xff 29 #define _BCM_TR3_L3_MODID_SHIFT 0x7 30 #define _BCM_TR3_L3_DEFAULT_MTU_SIZE 0x3fff 31 #define _BCM_TR3_DEFIP_TCAM_DEPTH 1024 32 #define _BCM_HX4_RANGER_DEFIP_TCAM_DEPTH 128 33 34 /* A six bit marker of alternating 1 and 0 used as an 35 * invalid entry marker for ESM host entries. This is used 36 * in recovering the host free entry pointers as a work-around 37 * for unavailablility of soc_tr3_get_vbit() function */ 38 #define _TR3_ESM_HOST_ENTRY_INVALID_MARKER 0x2a 39 40 /* L2 Internal functions */ 41 extern int bcm_tr3_l2_init(int unit); 42 extern int bcm_tr3_l2_detach(int unit); 43 extern int bcm_tr3_l2_addr_add(int unit, bcm_l2_addr_t *l2addr); 44 extern int bcm_tr3_l2_addr_delete(int unit, bcm_mac_t mac, bcm_vlan_t vid); 45 extern int bcm_tr3_l2_addr_delete_by_port(int unit, 46 bcm_module_t mod, bcm_port_t port, 47 uint32 flags); 48 extern int bcm_tr3_l2_addr_delete_by_mac(int unit, bcm_mac_t mac, 49 uint32 flags); 50 extern int bcm_tr3_l2_addr_delete_by_vlan(int unit, bcm_vlan_t vid, 51 uint32 flags); 52 extern int bcm_tr3_l2_addr_delete_by_trunk(int unit, bcm_trunk_t tid, 53 uint32 flags); 54 extern int bcm_tr3_l2_addr_delete_by_mac_port(int unit, bcm_mac_t mac, 55 bcm_module_t mod, 56 bcm_port_t port, 57 uint32 flags); 58 extern int bcm_tr3_l2_addr_delete_by_vlan_port(int unit, bcm_vlan_t vid, 59 bcm_module_t mod, 60 bcm_port_t port, 61 uint32 flags); 62 extern int bcm_tr3_l2_addr_delete_by_vlan_trunk(int unit, bcm_vlan_t vid, 63 bcm_trunk_t tid, 64 uint32 flags); 65 extern int bcm_tr3_l2_addr_delete_mcast(int unit, int bulk); 66 extern int _bcm_tr3_l2_addr_get(int unit, sal_mac_addr_t mac, bcm_vlan_t vid, 67 int check_l2_only, bcm_l2_addr_t *l2addr); 68 extern int bcm_tr3_l2_addr_get(int unit, sal_mac_addr_t mac, 69 bcm_vlan_t vid, bcm_l2_addr_t *l2addr); 70 71 extern int bcm_tr3_l2_port_native(int unit, int modid, int port); 72 extern int bcm_tr3_l2_addr_register(int unit, 73 bcm_l2_addr_callback_t fn, 74 void *fn_data); 75 extern int bcm_tr3_l2_addr_unregister(int unit, 76 bcm_l2_addr_callback_t fn, 77 void *fn_data); 78 extern int bcm_tr3_l2_age_timer_set(int unit, int age_seconds); 79 extern int bcm_tr3_l2_age_timer_get(int unit, int *age_seconds); 80 extern int bcm_tr3_l2_tunnel_add(int unit, bcm_mac_t mac, bcm_vlan_t vlan); 81 extern int bcm_tr3_l2_tunnel_delete(int unit, bcm_mac_t mac, bcm_vlan_t vlan); 82 extern int bcm_tr3_l2_tunnel_delete_all(int unit); 83 extern int bcm_tr3_l2_clear(int unit); 84 extern int bcm_tr3_l2_learn_limit_set(int unit, bcm_l2_learn_limit_t *limit); 85 extern int bcm_tr3_l2_learn_limit_get(int unit, bcm_l2_learn_limit_t *limit); 86 extern int bcm_tr3_l2_learn_class_set(int unit, int lclass, 87 int lclass_prio, uint32 flags); 88 extern int bcm_tr3_l2_learn_class_get(int unit, int lclass, 89 int *lclass_prio, uint32 *flags); 90 extern int bcm_tr3_l2_learn_port_class_set(int unit, bcm_gport_t port, 91 int lclass); 92 extern int bcm_tr3_l2_learn_port_class_get(int unit, bcm_gport_t port, 93 int *lclass); 94 extern int bcm_tr3_l2_traverse(int unit, _bcm_l2_traverse_t *trav_st); 95 extern int bcm_tr3_l2_replace(int unit, uint32 flags, 96 bcm_l2_addr_t *match_addr, 97 bcm_module_t new_module, bcm_port_t new_port, 98 bcm_trunk_t new_trunk); 99 extern int bcm_tr3_l2_conflict_get(int unit, bcm_l2_addr_t *addr, 100 bcm_l2_addr_t *cf_array, int cf_max, 101 int *cf_count); 102 103 extern int bcm_tr3_l2_cache_init(int unit); 104 extern int bcm_tr3_l2_cache_set(int unit, int index, 105 bcm_l2_cache_addr_t *addr, int *index_used); 106 extern int bcm_tr3_l2_cache_get(int unit, int index, 107 bcm_l2_cache_addr_t *addr); 108 extern int bcm_tr3_l2_cache_delete(int unit, int index); 109 extern int bcm_tr3_l2_cache_delete_all(int unit); 110 111 extern int bcm_tr3_failover_ring_config_set(int unit, 112 bcm_failover_ring_t *failover_ring); 113 extern int bcm_tr3_failover_ring_config_get(int unit, 114 bcm_failover_ring_t *failover_ring); 115 extern int bcm_tr3_l2_ring_replace(int unit, bcm_l2_ring_t *l2_ring); 116 extern int _field_tr3_logical_meter_pools_init(int unit, 117 _field_stage_t *stage_fc); 118 extern int _field_tr3_logical_meter_pool_entry_alloc (int unit, 119 _field_stage_t *stage_fc, 120 uint8 pool_slice_id, 121 _field_policer_t *f_pl); 122 extern int _field_tr3_logical_meter_pool_free(int unit, 123 _field_stage_t *stage_fc, 124 uint8 logical_pool_idx); 125 extern int _field_tr3_logical_meter_pool_entry_free (int unit, 126 _field_stage_t *stage_fc, 127 _field_policer_t *f_pl); 128 extern int _field_tr3_logical_meter_pool_entry_free_old (int unit, 129 _field_stage_t *stage_fc, 130 _field_policer_t *f_pl); 131 extern int _field_scache_logical_ingress_meter_pool_recover (int unit, 132 _field_control_t *fc, 133 _field_stage_t *stage_fc); 134 extern int 135 _bcm_tr3_cosq_localport_resolve(int unit, bcm_gport_t gport, 136 bcm_port_t *local_port); 137 138 #define _BCM_TR3_L2_SELECT_L2_ENTRY_1 0x1 139 #define _BCM_TR3_L2_SELECT_L2_ENTRY_2 0x2 140 #define _BCM_TR3_L2_SELECT_EXT_L2_ENTRY_1 0x4 141 #define _BCM_TR3_L2_SELECT_EXT_L2_ENTRY_2 0x8 142 143 typedef struct _bcm_tr3_l2_entries_s { 144 ext_l2_entry_1_entry_t ext_l2_entry_1; 145 ext_l2_entry_2_entry_t ext_l2_entry_2; 146 l2_entry_1_entry_t l2_entry_1; 147 l2_entry_2_entry_t l2_entry_2; 148 uint8 entry_flags; 149 } _bcm_tr3_l2_entries_t; 150 151 152 #if defined(INCLUDE_L3) 153 154 #define BCM_TR3_ESM_HOST_TBL_PRESENT(_u_) \ 155 ((soc_feature(_u_, soc_feature_esm_support)) && \ 156 (SOC_MEM_IS_ENABLED(_u_, EXT_IPV4_UCASTm)) && \ 157 (SOC_MEM_IS_ENABLED(_u_, EXT_IPV4_UCAST_WIDEm)) && \ 158 (SOC_MEM_IS_ENABLED(_u_, EXT_IPV6_128_UCASTm)) && \ 159 (SOC_MEM_IS_ENABLED(_u_, EXT_IPV6_128_UCAST_WIDEm))) 160 161 #define BCM_TR3_ESM_LPM_TBL_PRESENT(_u_, _mem_) \ 162 ((soc_feature(_u_, soc_feature_esm_support)) && \ 163 (SOC_MEM_IS_ENABLED(_u_, _mem_)) && \ 164 (soc_mem_index_count(_u_, _mem_))) 165 166 #if 0 167 #define BCM_TR3_ESM_HOST_TBL_PRESENT(_u_) 0 168 169 #define BCM_TR3_ESM_LPM_TBL_PRESENT(_u_) 0 170 #endif /* if 0 */ 171 172 #define BCM_TR3_MEM_IS_ESM(_u_, _mem_) \ 173 ((BCM_TR3_ESM_HOST_TBL_PRESENT(_u_)) && \ 174 ((EXT_IPV4_UCASTm == _mem_) || \ 175 (EXT_IPV4_UCAST_WIDEm == _mem_) || \ 176 (EXT_IPV6_128_UCASTm == _mem_) || \ 177 (EXT_IPV6_128_UCAST_WIDEm == _mem_))) 178 179 #define BCM_TR3_L3_USE_EMBEDDED_NEXT_HOP(_u_, _intf_, _nhidx_) \ 180 ((_nhidx_ == BCM_XGS3_L3_INVALID_INDEX) && \ 181 (!BCM_XGS3_L3_EGRESS_IDX_VALID(_u_, _intf_)) && \ 182 (BCM_XGS3_L3_EGRESS_MODE_ISSET(_u_)) && \ 183 soc_feature(unit, soc_feature_l3_extended_host_entry)) 184 185 #define BCM_TR3_ISM_L3_HOST_TABLE_MEM(_u_, _intf_, _v6_, _mem_, _nhidx_) \ 186 _mem_ = (_v6_) ? ((BCM_TR3_L3_USE_EMBEDDED_NEXT_HOP(_u_, _intf_, _nhidx_))? \ 187 L3_ENTRY_4m:L3_ENTRY_2m) : \ 188 ((BCM_TR3_L3_USE_EMBEDDED_NEXT_HOP(_u_, _intf_, _nhidx_))? \ 189 L3_ENTRY_2m:L3_ENTRY_1m) 190 191 #define BCM_TR3_ESM_L3_HOST_TABLE_MEM(_u_, _intf_, _v6_, _mem_, _nhidx_) \ 192 _mem_ = (_v6_) ? ((BCM_TR3_L3_USE_EMBEDDED_NEXT_HOP(_u_, _intf_, _nhidx_))? \ 193 EXT_IPV6_128_UCAST_WIDEm:EXT_IPV6_128_UCASTm) : \ 194 ((BCM_TR3_L3_USE_EMBEDDED_NEXT_HOP(_u_, _intf_, _nhidx_))? \ 195 EXT_IPV4_UCAST_WIDEm:EXT_IPV4_UCASTm) 196 197 #define BCM_TR3_ISM_L3_HOST_TABLE_FLD(_u_, _mem_, _v6_, _fld_) \ 198 _fld_ = (_bcm_l3_fields_t *) INT_TO_PTR((_v6_) ? \ 199 ((_mem_ == L3_ENTRY_2m) ? \ 200 BCM_XGS3_L3_MEM_FIELDS(_u_,v6): BCM_XGS3_L3_MEM_FIELDS(_u_, v6_4)) : \ 201 ((_mem_ == L3_ENTRY_1m) ? \ 202 BCM_XGS3_L3_MEM_FIELDS(_u_,v4): BCM_XGS3_L3_MEM_FIELDS(_u_, v4_2))) 203 204 #define BCM_TR3_ESM_L3_HOST_TABLE_FLD(_u_, _mem_, _v6_, _fld_) \ 205 _fld_ = (_bcm_l3_fields_t *) INT_TO_PTR((_v6_) ? \ 206 ((_mem_ == EXT_IPV6_128_UCASTm) ? \ 207 BCM_XGS3_L3_MEM_FIELDS(_u_,v6_esm): BCM_XGS3_L3_MEM_FIELDS(_u_, v6_esm_wide)) : \ 208 ((_mem_ == EXT_IPV4_UCASTm) ? \ 209 BCM_XGS3_L3_MEM_FIELDS(_u_,v4_esm): BCM_XGS3_L3_MEM_FIELDS(_u_, v4_esm_wide))) 210 211 #define BCM_TR3_ISM_L3_HOST_ENTRY_BUF(_v6_, _mem_, _buf_, _v4ent_, _v4v6ent_, _v6ent_) \ 212 _buf_ = ((_v6_) ? \ 213 ((_mem_ == L3_ENTRY_2m) ? (uint32 *) &_v4v6ent_ : \ 214 (uint32 *) &_v6ent_) : \ 215 ((_mem_ == L3_ENTRY_1m) ? (uint32 *) &_v4ent_ : \ 216 (uint32 *) &_v4v6ent_)) 217 218 #define BCM_TR3_ESM_L3_HOST_ENTRY_BUF(_v6_, _mem_, _buf_, _v4ent_, _v4wide_, _v6ent_, _v6wide_) \ 219 _buf_ = ((_v6_) ? \ 220 ((_mem_ == EXT_IPV6_128_UCASTm ) ? (uint32 *) &_v6ent_ : \ 221 (uint32 *) &_v6wide_) : \ 222 ((_mem_ == EXT_IPV4_UCASTm) ? (uint32 *) &_v4ent_ : \ 223 (uint32 *) &_v4wide_)) 224 225 /* Return array index given the table name */ 226 #define BCM_TR3_ESM_TBL_ENUMERATE(_mem_, _tbl_) \ 227 _tbl_ = ((EXT_IPV4_UCASTm == _mem_) ? 0 : \ 228 ((EXT_IPV4_UCAST_WIDEm == _mem_) ? 1: \ 229 ((EXT_IPV6_128_UCASTm == _mem_) ? 2 : 3))) 230 231 /* L3 Internal Functions */ 232 233 /* Host table support */ 234 extern int _bcm_tr3_l3_add(int unit, _bcm_l3_cfg_t *l3cfg, int nh_idx); 235 extern int _bcm_tr3_l3_get(int unit, _bcm_l3_cfg_t *l3cfg, int *nh_idx); 236 extern int _bcm_tr3_l3_del(int unit, _bcm_l3_cfg_t *l3cfg); 237 extern int _bcm_tr3_l3_del_match(int unit, int flags, void *pattern, 238 bcm_xgs3_ent_op_cb cmp_func, 239 bcm_l3_host_traverse_cb notify_cb, void *user_data); 240 extern int _bcm_tr3_l3_get_by_idx(int unit, void *dma_ptr, int idx, 241 _bcm_l3_cfg_t *l3cfg, int *nh_idx); 242 extern int bcm_tr3_l3_conflict_get(int unit, bcm_l3_key_t *ipkey, bcm_l3_key_t *cf_array, 243 int cf_max, int *cf_count); 244 extern int _bcm_tr3_l3_intf_mtu_get(int unit, _bcm_l3_intf_cfg_t *intf_info); 245 extern int _bcm_tr3_l3_intf_mtu_set(int unit, _bcm_l3_intf_cfg_t *intf_info); 246 extern int _bcm_tr3_mtu_profile_index_get(int unit, uint32 mtu, uint32 *index); 247 extern int _bcm_tr3_l3_ecmp_grp_get(int unit, int ecmp_grp, int ecmp_group_size, int *nh_idx); 248 extern int _bcm_tr3_l3_ecmp_grp_add(int unit, int ecmp_grp, void *buf, void *info); 249 extern int _bcm_tr3_l3_ecmp_grp_del(int unit, int ecmp_grp, void *info); 250 extern int _bcm_tr3_nh_update_match(int unit, _bcm_l3_trvrs_data_t *trv_data); 251 extern int _bcm_tr3_l3_tnl_term_entry_init(int unit, 252 bcm_tunnel_terminator_t *tnl_info, 253 soc_tunnel_term_t *entry); 254 extern int _bcm_tr3_l3_tnl_term_entry_parse(int unit, soc_tunnel_term_t *entry, 255 bcm_tunnel_terminator_t *tnl_info); 256 extern int _bcm_tr3_l3_tnl_term_add(int unit, uint32 *entry_ptr, 257 bcm_tunnel_terminator_t *tnl_info); 258 extern int 259 _bcm_tr3_mpls_tunnel_switch_frr_entry_key_init(int unit, 260 bcm_mpls_tunnel_switch_t *info, soc_tunnel_term_t *tnl_entry); 261 262 263 extern int _bcm_tr3_l3_traverse(int unit, int flags, uint32 start, uint32 end, 264 bcm_l3_host_traverse_cb cb, void *user_data); 265 266 extern int bcm_tr3_l3_replace(int unit, _bcm_l3_cfg_t *l3cfg); 267 extern int bcm_tr3_l3_del_intf(int unit, _bcm_l3_cfg_t *l3cfg, int negate); 268 269 /*ISM LPM */ 270 extern int _bcm_tr3_l3_lpm_get(int unit, _bcm_defip_cfg_t *lpm_cfg, int *nh_ecmp_idx); 271 extern int _bcm_tr3_l3_lpm_add(int unit, _bcm_defip_cfg_t *lpm_cfg, int nh_ecmp_idx); 272 extern int _bcm_tr3_l3_lpm_del(int unit, _bcm_defip_cfg_t *lpm_cfg); 273 extern int _bcm_tr3_l3_lpm_update_match(int unit, _bcm_l3_trvrs_data_t *trv_data); 274 extern int _bcm_tr3_l3_defip_init(int unit); 275 extern int _bcm_tr3_l3_defip_deinit(int unit); 276 extern int _bcm_tr3_l3_defip_urpf_enable(int unit, int enable); 277 /* ESM LPM */ 278 extern int _bcm_tr3_ext_lpm_init(int unit, soc_mem_t mem); 279 extern int _bcm_tr3_ext_lpm_deinit(int unit, soc_mem_t mem); 280 extern int _bcm_tr3_ext_lpm_add(int unit, _bcm_defip_cfg_t *data, int nh_ecmp_idx); 281 extern int _bcm_tr3_ext_lpm_delete(int unit, _bcm_defip_cfg_t *key); 282 extern int _bcm_tr3_ext_lpm_match(int unit, _bcm_defip_cfg_t *key, int *next_hop_index) ; 283 extern int _bcm_tr3_defip_traverse(int unit, _bcm_l3_trvrs_data_t *trv_data); 284 /* ESM host table*/ 285 extern int _bcm_tr3_esm_host_tbl_init(int unit); 286 extern int _bcm_tr3_esm_host_tbl_deinit(int unit); 287 288 /* L3 IPMC */ 289 extern int _bcm_tr3_l3_ipmc_get_by_idx(int unit, void *dma_ptr, int idx, 290 _bcm_l3_cfg_t *l3cfg); 291 extern int _bcm_tr3_l3_ipmc_get(int unit, _bcm_l3_cfg_t *l3cfg); 292 extern int _bcm_tr3_l3_ipmc_add(int unit, _bcm_l3_cfg_t *l3cfg); 293 extern int _bcm_tr3_l3_ipmc_del(int unit, _bcm_l3_cfg_t *l3cfg); 294 295 extern int _bcm_tr3_l3_ipmc_nh_add(int unit, int nh_index, 296 bcm_l3_egress_t *l3_egress); 297 extern int _bcm_tr3_l3_ipmc_nh_entry_parse(int unit, uint32 *ing_nh, 298 uint32 *egr_nh, uint32 *egr_nh_2, bcm_l3_egress_t *l3_egress); 299 300 /* Internal route table support */ 301 extern int _bcm_tr3_lpm_add(int unit, _bcm_defip_cfg_t *lpm_cfg, int nh_ecmp_idx); 302 303 /* Flex stat - L3 host table */ 304 extern bcm_error_t _bcm_tr3_l3_host_stat_attach( 305 int unit, 306 bcm_l3_host_t *info, 307 uint32 stat_counter_id); 308 extern bcm_error_t _bcm_tr3_l3_host_stat_detach( 309 int unit, 310 bcm_l3_host_t *info); 311 extern bcm_error_t _bcm_tr3_l3_host_stat_counter_get( 312 int unit, 313 int sync_mode, 314 bcm_l3_host_t *info, 315 bcm_l3_stat_t stat, 316 uint32 num_entries, 317 uint32 *counter_indexes, 318 bcm_stat_value_t *counter_values); 319 extern bcm_error_t _bcm_tr3_l3_host_stat_counter_set( 320 int unit, 321 bcm_l3_host_t *info, 322 bcm_l3_stat_t stat, 323 uint32 num_entries, 324 uint32 *counter_indexes, 325 bcm_stat_value_t *counter_values); 326 extern bcm_error_t _bcm_tr3_l3_host_stat_id_get( 327 int unit, 328 bcm_l3_host_t *info, 329 bcm_l3_stat_t stat, 330 uint32 *stat_counter_id); 331 332 #ifdef BCM_WARM_BOOT_SUPPORT 333 extern int _bcm_tr3_l3_esm_host_state_recover(int unit); 334 extern int _bcm_tr3_mpls_match_key_recover(int unit); 335 #else 336 #define _bcm_tr3_l3_esm_host_state_recover(_u) (BCM_E_UNAVAIL) 337 #endif /* BCM_WARM_BOOT_SUPPORT */ 338 339 /* L3 ECMP DLB */ 340 extern void _bcm_tr3_ecmp_dlb_deinit(int unit); 341 extern int _bcm_tr3_ecmp_dlb_init(int unit); 342 extern int bcm_tr3_l3_egress_dlb_attr_set(int unit, int nh_index, 343 bcm_l3_egress_t *egr); 344 extern int bcm_tr3_l3_egress_dlb_attr_destroy(int unit, int nh_index); 345 extern int bcm_tr3_l3_egress_dlb_attr_get(int unit, int nh_index, 346 bcm_l3_egress_t *egr); 347 extern int bcm_tr3_l3_egress_ecmp_dlb_create(int unit, 348 bcm_l3_egress_ecmp_t *ecmp, int intf_count, bcm_if_t *intf_array); 349 extern int bcm_tr3_l3_egress_ecmp_dlb_destroy(int unit, 350 bcm_if_t mpintf); 351 extern int bcm_tr3_l3_egress_ecmp_dlb_get(int unit, 352 bcm_l3_egress_ecmp_t *ecmp); 353 extern int _bcm_tr3_ecmp_dlb_config_set(int unit, bcm_switch_control_t type, 354 int arg); 355 extern int _bcm_tr3_ecmp_dlb_config_get(int unit, bcm_switch_control_t type, 356 int *arg); 357 extern int bcm_tr3_l3_egress_ecmp_member_status_set(int unit, bcm_if_t intf, 358 int status); 359 extern int bcm_tr3_l3_egress_ecmp_member_status_get(int unit, bcm_if_t intf, 360 int *status); 361 extern int bcm_tr3_l3_egress_ecmp_dlb_ethertype_set(int unit, uint32 flags, 362 int ethertype_count, int *ethertype_array); 363 extern int bcm_tr3_l3_egress_ecmp_dlb_ethertype_get(int unit, uint32 *flags, 364 int ethertype_max, int *ethertype_array, int *ethertype_count); 365 366 #ifdef BCM_WARM_BOOT_SUPPORT 367 extern int bcm_tr3_ecmp_dlb_wb_alloc_size_get(int unit, int *size); 368 extern int bcm_tr3_ecmp_dlb_sync(int unit, uint8 **scache_ptr); 369 extern int bcm_tr3_ecmp_dlb_scache_recover(int unit, uint8 **scache_ptr); 370 extern int bcm_tr3_ecmp_dlb_hw_recover(int unit); 371 #endif /* BCM_WARM_BOOT_SUPPORT */ 372 373 #ifndef BCM_SW_STATE_DUMP_DISABLE 374 extern void bcm_tr3_ecmp_dlb_sw_dump(int unit); 375 extern void _bcm_tr3_esm_host_tbl_sw_dump(int unit); 376 #endif /* BCM_SW_STATE_DUMP_DISABLE */ 377 378 /* Wlan Internal functions */ 379 extern int _bcm_tr3_wlan_tunnel_set_roam(int unit, bcm_gport_t tunnel_id); 380 extern int _bcm_tr3_wlan_tunnel_get_roam(int unit, bcm_gport_t tunnel_id); 381 382 extern int bcm_tr3_wlan_client_add(int,bcm_wlan_client_t *); 383 extern int bcm_tr3_wlan_client_delete(int,bcm_mac_t); 384 extern int bcm_tr3_wlan_client_delete_all(int); 385 extern int bcm_tr3_wlan_client_get(int,bcm_mac_t,bcm_wlan_client_t *); 386 extern int bcm_tr3_wlan_client_traverse(int,bcm_wlan_client_traverse_cb,void *); 387 extern int bcm_tr3_wlan_detach(int); 388 extern int bcm_tr3_wlan_init(int); 389 extern int bcm_tr3_wlan_port_add(int,bcm_wlan_port_t *); 390 extern int bcm_tr3_wlan_port_delete(int,bcm_gport_t); 391 extern int bcm_tr3_wlan_port_delete_all(int); 392 extern int bcm_tr3_wlan_port_get(int,bcm_gport_t,bcm_wlan_port_t *); 393 extern int bcm_tr3_wlan_port_traverse(int,bcm_wlan_port_traverse_cb,void *); 394 extern int bcm_tr3_wlan_tunnel_initiator_create(int,bcm_tunnel_initiator_t *); 395 extern int bcm_tr3_wlan_tunnel_initiator_destroy(int,bcm_gport_t); 396 extern int bcm_tr3_wlan_tunnel_initiator_get(int,bcm_tunnel_initiator_t *); 397 extern int _bcm_tr3_wlan_port_resolve(int unit, bcm_gport_t wlan_port, 398 bcm_module_t *modid, bcm_port_t *port, 399 bcm_trunk_t *trunk_id, int *id); 400 extern int bcm_tr3_wlan_port_learn_set(int unit, bcm_gport_t port, uint32 flags); 401 extern int bcm_tr3_wlan_port_learn_get(int unit, bcm_gport_t port, uint32 *flags); 402 extern int bcm_tr3_wlan_tunnel_terminator_vlan_set(int unit, bcm_gport_t tunnel, 403 bcm_vlan_vector_t vlan_vec); 404 extern int bcm_tr3_wlan_tunnel_terminator_vlan_get(int unit, bcm_gport_t tunnel, 405 bcm_vlan_vector_t *vlan_vec); 406 extern int bcm_tr3_wlan_lport_field_set(int unit, bcm_gport_t wlan_port_id, 407 soc_field_t field, int value); 408 extern int bcm_tr3_wlan_lport_field_get(int unit, bcm_gport_t wlan_port_id, 409 soc_field_t field, int *value); 410 extern int _bcm_tr3_wlan_port_set(int unit, bcm_gport_t wlan_port_id, 411 soc_field_t field, uint32 value); 412 extern int _bcm_tr3_qos_wlan_port_map_set(int unit, bcm_gport_t port, 413 int egr_map, int pri_index); 414 extern int bcm_tr3_wlan_port_untagged_vlan_get(int unit, bcm_gport_t port, 415 bcm_vlan_t *vid_ptr); 416 extern int bcm_tr3_wlan_port_untagged_vlan_set(int unit, bcm_gport_t port, 417 bcm_vlan_t vid); 418 extern int bcm_tr3_wlan_port_untagged_prio_get(int unit, bcm_gport_t port, 419 int *prio_ptr); 420 extern int bcm_tr3_wlan_port_untagged_prio_set(int unit, bcm_gport_t port, 421 int prio); 422 extern int _bcm_tr3_wlan_trunk_block_mask_update(int unit); 423 424 /* IPMC internal functions */ 425 extern int bcm_tr3_ipmc_repl_init(int unit); 426 extern int bcm_tr3_ipmc_repl_detach(int unit); 427 extern int bcm_tr3_ipmc_repl_set(int unit, int ipmc_id, bcm_port_t port, 428 bcm_vlan_vector_t vlan_vec); 429 extern int bcm_tr3_ipmc_repl_get(int unit, int index, bcm_port_t port, 430 bcm_vlan_vector_t vlan_vec); 431 extern int bcm_tr3_ipmc_repl_add(int unit, int index, bcm_port_t port, 432 bcm_vlan_t vlan); 433 extern int bcm_tr3_ipmc_repl_delete(int unit, int index, bcm_port_t port, 434 bcm_vlan_t vlan); 435 extern int bcm_tr3_ipmc_repl_delete_all(int unit, int index, 436 bcm_port_t port); 437 extern int bcm_tr3_ipmc_egress_intf_add(int unit, int index, bcm_port_t port, 438 bcm_l3_intf_t *l3_intf); 439 extern int bcm_tr3_ipmc_egress_intf_delete(int unit, int index, bcm_port_t port, 440 bcm_l3_intf_t *l3_intf); 441 extern int bcm_tr3_ipmc_egress_intf_set(int unit, int mc_index, 442 bcm_port_t port, int if_count, 443 bcm_if_t *if_array, int is_l3, 444 int check_port); 445 extern int bcm_tr3_ipmc_egress_intf_get(int unit, int mc_index, 446 bcm_port_t port, 447 int if_max, bcm_if_t *if_array, 448 int *if_count); 449 extern int _bcm_tr3_ipmc_egress_intf_add(int unit, int index, bcm_port_t port, 450 int encap_id, int is_l3); 451 extern int _bcm_tr3_ipmc_egress_intf_delete(int unit, int index, 452 bcm_port_t port, int if_max, 453 int encap_id, int is_l3); 454 extern int bcm_tr3_ipmc_trill_mac_update(int unit, uint32 mac_field, 455 uint8 flag); 456 extern int bcm_tr3_ipmc_l3_intf_next_hop_free(int unit, int intf); 457 extern int bcm_tr3_ipmc_l3_intf_next_hop_get(int unit, int intf, int *nh_index); 458 extern int bcm_tr3_ipmc_l3_intf_next_hop_l3_egress_set(int unit, int intf); 459 extern int bcm_tr3_ipmc_port_attach_repl_init(int unit, bcm_port_t port); 460 extern int bcm_tr3_ipmc_port_detach_repl_deinit(int unit, bcm_port_t port); 461 extern int bcm_sb2_ipmc_repl_extq_port_alloc(int unit, bcm_port_t port); 462 extern void bcm_sb2_ipmc_repl_extq_port_free(int unit, bcm_port_t port); 463 extern int bcm_sb2_ipmc_repl_detach(int unit); 464 #ifdef BCM_WARM_BOOT_SUPPORT 465 extern int bcm_tr3_ipmc_repl_l3_intf_scache_size_get(int unit, uint32 *size); 466 extern int bcm_tr3_ipmc_repl_l3_intf_sync(int unit, uint8 **scache_ptr); 467 extern int bcm_tr3_ipmc_repl_l3_intf_scache_recover(int unit, uint8 **scache_ptr); 468 extern int bcm_tr3_ipmc_repl_l3_intf_nh_map_scache_size_get(int unit, uint32 *size); 469 extern int bcm_tr3_ipmc_repl_l3_intf_nh_map_sync(int unit, uint8 **scache_ptr); 470 extern int bcm_tr3_ipmc_repl_l3_intf_nh_map_scache_recover(int unit, uint8 **scache_ptr); 471 extern int bcm_tr3_ipmc_repl_l3_intf_trill_nh_map_scache_size_get(int unit, uint32 *size); 472 extern int bcm_tr3_ipmc_repl_l3_intf_trill_nh_map_sync(int unit, uint8 **scache_ptr); 473 extern int bcm_tr3_ipmc_repl_l3_intf_trill_nh_map_scache_recover(int unit, uint8 **scache_ptr); 474 #endif /* BCM_WARM_BOOT_SUPPORT */ 475 476 extern int bcm_tr3_failover_egr_check (int unit, bcm_l3_egress_t *egr); 477 extern int bcm_tr3_failover_prot_nhi_set(int unit, uint32 flags, int nh_index, uint32 prot_nh_index, 478 bcm_multicast_t mc_group, bcm_failover_t failover_id); 479 extern int bcm_tr3_failover_prot_nhi_cleanup (int unit, int nh_index); 480 extern int bcm_tr3_failover_prot_nhi_get(int unit, int nh_index, 481 bcm_failover_t *failover_id, int *prot_nh_index, bcm_multicast_t *mc_group); 482 extern int bcm_tr3_failover_prot_nhi_update (int unit, int old_nh_index, int new_nh_index); 483 extern int bcm_tr3_failover_mpls_check (int unit, bcm_mpls_port_t *mpls_port); 484 extern int bcm_tr3_failover_extender_check(int unit, bcm_extender_port_t *extender_port); 485 extern int bcm_tr3_failover_status_set(int unit, bcm_failover_element_t *failover, int value); 486 extern int bcm_tr3_failover_status_get(int unit, bcm_failover_element_t *failover, int *value); 487 extern int bcm_tr3_l2gre_egress_set(int unit, int nh_index, uint32 flags); 488 extern int bcm_tr3_l2gre_egress_reset(int unit, int nh_index); 489 extern int bcm_tr3_l2gre_egress_get(int unit, bcm_l3_egress_t *egr, int nh_index); 490 extern int bcm_tr3_mpls_tunnel_switch_traverse(int unit, 491 bcm_mpls_tunnel_switch_traverse_cb cb, 492 void *user_data); 493 extern int bcm_tr3_mpls_tunnel_switch_get(int unit, bcm_mpls_tunnel_switch_t *info); 494 extern int bcm_tr3_mpls_tunnel_switch_delete_all(int unit); 495 extern int bcm_tr3_mpls_tunnel_switch_delete(int unit, bcm_mpls_tunnel_switch_t *info); 496 extern int bcm_tr3_mpls_tunnel_switch_add(int unit, bcm_mpls_tunnel_switch_t *info); 497 extern int _bcm_tr3_mpls_match_add(int unit, bcm_mpls_port_t *mpls_port, int vp, int update); 498 extern int _bcm_tr3_mpls_match_delete(int unit, int vp, int sw_clear); 499 extern int _bcm_tr3_mpls_match_failover_update(int unit, int vp, int fo_vp); 500 extern int _bcm_tr3_mpls_match_get(int unit, bcm_mpls_port_t *mpls_port, int vp); 501 extern int _bcm_tr3_mpls_failover_nw_port_match_get(int unit, bcm_mpls_port_t *mpls_port, 502 int vp, mpls_entry_entry_t *return_ment); 503 504 extern bcm_error_t bcm_tr3_mpls_port_stat_attach( 505 int unit, 506 bcm_vpn_t vpn, 507 bcm_gport_t port, 508 uint32 stat_counter_id); 509 extern bcm_error_t bcm_tr3_mpls_port_stat_detach( 510 int unit, 511 bcm_vpn_t vpn, 512 bcm_gport_t port); 513 extern bcm_error_t bcm_tr3_mpls_port_stat_counter_get( 514 int unit, 515 int sync_mode, 516 bcm_vpn_t vpn, 517 bcm_gport_t port, 518 bcm_mpls_stat_t stat, 519 uint32 num_entries, 520 uint32 *counter_indexes, 521 bcm_stat_value_t *counter_values); 522 extern bcm_error_t bcm_tr3_mpls_port_stat_counter_set( 523 int unit, 524 bcm_vpn_t vpn, 525 bcm_gport_t port, 526 bcm_mpls_stat_t stat, 527 uint32 num_entries, 528 uint32 *counter_indexes, 529 bcm_stat_value_t *counter_values); 530 extern bcm_error_t bcm_tr3_mpls_port_stat_id_get( 531 int unit, 532 bcm_vpn_t vpn, 533 bcm_gport_t port, 534 bcm_mpls_stat_t stat, 535 uint32 *stat_counter_id); 536 extern bcm_error_t bcm_tr3_mpls_label_stat_attach( 537 int unit, 538 bcm_mpls_label_t label, 539 bcm_gport_t port, 540 uint32 stat_counter_id); 541 extern bcm_error_t bcm_tr3_mpls_label_stat_detach( 542 int unit, 543 bcm_mpls_label_t label, 544 bcm_gport_t port); 545 extern bcm_error_t bcm_tr3_mpls_label_stat_counter_get( 546 int unit, 547 int sync_mode, 548 bcm_mpls_label_t label, 549 bcm_gport_t port, 550 bcm_mpls_stat_t stat, 551 uint32 num_entries, 552 uint32 *counter_indexes, 553 bcm_stat_value_t *counter_values); 554 extern bcm_error_t bcm_tr3_mpls_label_stat_counter_set( 555 int unit, 556 bcm_mpls_label_t label, 557 bcm_gport_t port, 558 bcm_mpls_stat_t stat, 559 uint32 num_entries, 560 uint32 *counter_indexes, 561 bcm_stat_value_t *counter_values); 562 extern bcm_error_t bcm_tr3_mpls_label_stat_id_get( 563 int unit, 564 bcm_mpls_label_t label, 565 bcm_gport_t port, 566 bcm_mpls_stat_t stat, 567 uint32 *stat_counter_id); 568 extern int bcm_tr3_mpls_label_stat_enable_set( 569 int unit, 570 bcm_mpls_label_t label, 571 bcm_gport_t port, 572 int enable); 573 extern int bcm_tr3_mpls_label_stat_get( 574 int unit, 575 int sync_mode, 576 bcm_mpls_label_t label, 577 bcm_gport_t port, 578 bcm_mpls_stat_t stat, 579 uint64 *val); 580 extern int bcm_tr3_mpls_label_stat_get32( 581 int unit, 582 int sync_mode, 583 bcm_mpls_label_t label, 584 bcm_gport_t port, 585 bcm_mpls_stat_t stat, 586 uint32 *val); 587 extern int bcm_tr3_mpls_label_stat_clear( 588 int unit, 589 bcm_mpls_label_t label, 590 bcm_gport_t port, 591 bcm_mpls_stat_t stat); 592 593 extern bcm_error_t _bcm_tr3_mim_vpn_stat_get_table_info( 594 int unit, 595 bcm_mim_vpn_t vpn, 596 uint32 *num_of_tables, 597 bcm_stat_flex_table_info_t *table_info); 598 599 extern bcm_error_t _bcm_tr3_mim_lookup_id_stat_get_table_info( 600 int unit, 601 int lookup_id, 602 uint32 *num_of_tables, 603 bcm_stat_flex_table_info_t *table_info); 604 605 606 extern int _bcm_tr3_l2_hash_dynamic_replace(int unit, 607 _bcm_tr3_l2_entries_t *l2_entries); 608 609 extern int _bcm_tr3_l2gre_port_resolve( 610 int unit, 611 bcm_gport_t l2gre_port_id, 612 bcm_if_t encap_id, 613 bcm_module_t *modid, 614 bcm_port_t *port, 615 bcm_trunk_t *trunk_id, 616 int *id); 617 618 extern int _bcm_tr3_l2gre_multicast_enable(int unit, bcm_multicast_t group, 619 bcm_gport_t l2gre_port_id); 620 extern int bcm_tr3_l2gre_lock(int unit); 621 extern void bcm_tr3_l2gre_unlock(int unit); 622 extern void _bcm_tr3_l2gre_sw_dump(int unit); 623 extern int bcm_tr3_l2gre_init(int unit); 624 extern int bcm_tr3_l2gre_cleanup(int unit); 625 extern int bcm_tr3_l2gre_vpn_create(int unit, bcm_l2gre_vpn_config_t *info); 626 extern int bcm_tr3_l2gre_vpn_destroy(int unit, bcm_vpn_t l2vpn); 627 extern int bcm_tr3_l2gre_vpn_destroy_all(int unit); 628 extern int bcm_tr3_l2gre_vpn_traverse(int unit, bcm_l2gre_vpn_traverse_cb cb, void *user_data); 629 extern int bcm_tr3_l2gre_vpn_get( int unit, bcm_vpn_t l2vpn, bcm_l2gre_vpn_config_t *info); 630 extern int bcm_tr3_l2gre_port_add(int unit, bcm_vpn_t vpn, bcm_l2gre_port_t *l2gre_port); 631 extern int bcm_tr3_l2gre_port_delete(int unit, bcm_vpn_t vpn, bcm_gport_t l2gre_port_id); 632 extern int bcm_tr3_l2gre_port_delete_all(int unit, bcm_vpn_t vpn); 633 extern int bcm_tr3_l2gre_port_get(int unit, bcm_vpn_t l2vpn, bcm_l2gre_port_t *l2gre_port); 634 extern int bcm_tr3_l2gre_port_get_all( int unit, bcm_vpn_t l2vpn, int port_max, bcm_l2gre_port_t *port_array, int *port_count); 635 extern int bcm_tr3_l2gre_tunnel_initiator_create(int unit, bcm_tunnel_initiator_t *info); 636 extern int bcm_tr3_l2gre_tunnel_initiator_destroy(int unit, bcm_gport_t l2gre_tunnel_id); 637 extern int bcm_tr3_l2gre_tunnel_initiator_destroy_all(int unit); 638 extern int bcm_tr3_l2gre_tunnel_initiator_get(int unit, bcm_tunnel_initiator_t *info); 639 extern int bcm_tr3_l2gre_tunnel_initiator_traverse(int unit, bcm_tunnel_initiator_traverse_cb cb, void *user_data); 640 extern int bcm_tr3_l2gre_tunnel_terminator_create(int unit, bcm_tunnel_terminator_t *info); 641 extern int bcm_tr3_l2gre_tunnel_terminator_update(int unit, bcm_tunnel_terminator_t *tnl_info); 642 extern int bcm_tr3_l2gre_tunnel_terminator_destroy(int unit, bcm_gport_t l2gre_tunnel_id); 643 extern int bcm_tr3_l2gre_tunnel_terminator_destroy_all(int unit); 644 extern int bcm_tr3_l2gre_tunnel_terminator_get( int unit, bcm_tunnel_terminator_t *info); 645 extern int bcm_tr3_l2gre_tunnel_terminator_traverse(int unit, bcm_tunnel_terminator_traverse_cb cb, void *user_data); 646 extern int _bcm_tr3_l2gre_vpn_get(int unit, int vfi_index, bcm_vlan_t *vid); 647 extern int bcm_tr3_l2gre_multicast_leaf_entry_check(int unit, bcm_ip_t mc_ip_addr, bcm_ip_t src_ip_addr, int multicast_flag); 648 extern int _bcm_esw_l2gre_match_add(int unit, bcm_l2gre_port_t *l2gre_port, int vp, bcm_vpn_t vpn); 649 extern int _bcm_esw_l2gre_match_delete(int unit, int vp); 650 extern int _bcm_esw_l2gre_match_get(int unit, bcm_l2gre_port_t *l2gre_port, int vp); 651 extern void bcm_tr3_l2gre_port_match_count_adjust(int unit, int vp, int step); 652 extern int bcm_tr3_l2gre_match_add(int unit, bcm_l2gre_port_t *l2gre_port, int vp, bcm_vpn_t vpn); 653 extern int bcm_tr3_l2gre_match_delete(int unit, int vp); 654 extern int bcm_tr3_l2gre_match_get(int unit, bcm_l2gre_port_t *l2gre_port, int vp); 655 extern int bcm_tr3_l2gre_match_trunk_add(int unit, bcm_trunk_t tgid, int vp); 656 extern int bcm_tr3_l2gre_match_trunk_delete(int unit, bcm_trunk_t tgid, int vp); 657 extern int bcm_tr3_l2gre_port_untagged_profile_set (int unit, bcm_port_t port); 658 extern int bcm_tr3_l2gre_port_untagged_profile_reset(int unit, bcm_port_t port); 659 extern int bcm_tr3_l2gre_match_tunnel_entry_set(int unit, int vp, bcm_l2gre_port_t *l2gre_port); 660 extern int bcm_tr3_l2gre_match_tunnel_entry_reset(int unit, int vp); 661 extern void bcm_tr3_l2gre_match_clear (int unit, int vp); 662 extern int _bcm_tr3_l2gre_eline_vp_configure (int unit, int vfi_index, int active_vp, 663 source_vp_entry_t *svp, int tpid_enable, bcm_l2gre_port_t *l2gre_port); 664 extern int _bcm_tr3_l2gre_elan_vp_configure (int unit, int vfi_index, int active_vp, 665 source_vp_entry_t *svp, int tpid_enable, bcm_l2gre_port_t *l2gre_port); 666 extern int _bcm_esw_l2gre_eline_vp_configure (int unit, int vfi_index, int active_vp, 667 source_vp_entry_t *svp, int tpid_enable, bcm_l2gre_port_t *l2gre_port); 668 extern int _bcm_esw_l2gre_elan_vp_configure (int unit, int vfi_index, int active_vp, 669 source_vp_entry_t *svp, int tpid_enable, bcm_l2gre_port_t *l2gre_port); 670 extern int bcm_tr3_l2gre_trunk_member_add (int unit, bcm_trunk_t trunk_id, 671 int trunk_member_count, bcm_port_t *trunk_member_array); 672 extern int bcm_tr3_l2gre_trunk_member_delete(int unit, bcm_trunk_t trunk_id, 673 int trunk_member_count, bcm_port_t *trunk_member_array); 674 extern int bcm_tr3_l2gre_port_learn_set(int unit, bcm_gport_t l2gre_port_id, 675 uint32 flags); 676 extern int bcm_tr3_l2gre_port_learn_get(int unit, bcm_gport_t l2gre_port_id, 677 uint32 *flags); 678 extern int _bcm_tr3_mpls_entry_convert_to_extd_entry_key(int unit, mpls_entry_entry_t *mpls_entry_entry, 679 mpls_entry_extd_entry_t *mpls_entry_extd_entry); 680 #ifdef BCM_WARM_BOOT_SUPPORT 681 extern int _bcm_tr3_l2gre_sync(int unit); 682 #endif /* BCM_WARM_BOOT_SUPPORT */ 683 684 #if defined(INCLUDE_BFD) 685 extern int bcmi_tr3_bfd_init(int unit); 686 #endif /* INCLUDE_BFD */ 687 688 #ifdef BCM_WARM_BOOT_SUPPORT 689 extern int _bcm_tr3_ipmc_repl_reload(int unit); 690 #endif /* BCM_WARM_BOOT_SUPPORT */ 691 692 #ifndef BCM_SW_STATE_DUMP_DISABLE 693 extern void _bcm_tr3_ipmc_repl_sw_dump(int unit); 694 #endif /* BCM_SW_STATE_DUMP_DISABLE */ 695 696 /* NIV */ 697 extern int bcm_tr3_niv_forward_add(int unit, 698 bcm_niv_forward_t *iv_fwd_entry); 699 extern int bcm_tr3_niv_forward_delete(int unit, 700 bcm_niv_forward_t *iv_fwd_entry); 701 extern int bcm_tr3_niv_forward_delete_all(int unit); 702 extern int bcm_tr3_niv_forward_get(int unit, 703 bcm_niv_forward_t *iv_fwd_entry); 704 extern int bcm_tr3_niv_forward_traverse(int unit, 705 bcm_niv_forward_traverse_cb cb, void *user_data); 706 707 #ifdef BCM_WARM_BOOT_SUPPORT 708 extern int bcm_tr3_extender_required_scache_size_get(int unit, uint32 *size); 709 extern int _bcm_tr3_extender_sync(int unit, uint8 **scache_ptr); 710 #endif 711 712 /* Port Extender */ 713 extern int bcm_tr3_extender_init(int unit); 714 extern int bcm_tr3_extender_cleanup(int unit); 715 extern int bcm_tr3_extender_match_key_get(int unit, 716 bcm_gport_t extender_port_id, 717 void * vent); 718 extern int _bcm_tr3_extender_port_match_add(int unit, bcm_gport_t port, 719 uint16 extended_port_vid, 720 bcm_vlan_t vlan, int vp); 721 extern int _bcm_tr3_extender_port_match_delete(int unit, bcm_gport_t port, 722 uint16 extended_port_vid, 723 bcm_vlan_t vlan, int vp); 724 extern int bcm_tr3_extender_port_add(int unit, 725 bcm_extender_port_t *extender_port); 726 extern int bcm_tr3_extender_port_delete(int unit, 727 bcm_gport_t extender_port_id); 728 extern int bcm_tr3_extender_port_delete_all(int unit); 729 extern int bcm_tr3_extender_port_get(int unit, 730 bcm_extender_port_t *extender_port); 731 extern int bcm_tr3_extender_port_traverse(int unit, 732 bcm_extender_port_traverse_cb cb, void *user_data); 733 extern int bcm_tr3_extender_forward_add(int unit, 734 bcm_extender_forward_t *extender_forward_entry); 735 extern int bcm_tr3_extender_forward_delete(int unit, 736 bcm_extender_forward_t *extender_forward_entry); 737 extern int bcm_tr3_extender_forward_delete_all(int unit); 738 extern int bcm_tr3_extender_forward_get(int unit, 739 bcm_extender_forward_t *extender_forward_entry); 740 extern int bcm_tr3_extender_forward_traverse(int unit, 741 bcm_extender_forward_traverse_cb cb, void *user_data); 742 743 extern int _bcm_tr3_extender_port_resolve(int unit, 744 bcm_gport_t extender_port_id, 745 bcm_module_t *modid, bcm_port_t *port, 746 bcm_trunk_t *trunk_id, int *id); 747 748 extern int bcm_tr3_extender_egress_add(int unit, 749 bcm_gport_t extender_port, 750 bcm_extender_egress_t *extender_egress); 751 extern int bcm_tr3_extender_egress_delete(int unit, 752 bcm_gport_t extender_port, 753 bcm_extender_egress_t *extender_egress); 754 extern int bcm_tr3_extender_egress_delete_all(int unit, 755 bcm_gport_t extender_port); 756 extern int bcm_tr3_extender_egress_get(int unit, 757 bcm_gport_t extender_port, 758 bcm_extender_egress_t *extender_egress); 759 extern int bcm_tr3_extender_egress_get_all(int unit, 760 bcm_gport_t extender_port, 761 int array_size, 762 bcm_extender_egress_t *extender_egress_array, 763 int *count); 764 extern int bcm_tr3_extender_egress_set(int unit, 765 bcm_gport_t extender_port, 766 int array_size, 767 bcm_extender_egress_t *extender_egress_array); 768 769 extern int bcm_tr3_etag_ethertype_set(int unit, int ethertype); 770 extern int bcm_tr3_etag_ethertype_get(int unit, int *ethertype); 771 772 extern int bcm_tr3_extender_untagged_add(int unit, bcm_vlan_t vlan, int vp, 773 int flags, int *egr_vt_added); 774 extern int bcm_tr3_extender_untagged_delete(int unit, bcm_vlan_t vlan, int vp); 775 extern int bcm_tr3_extender_untagged_get(int unit, bcm_vlan_t vlan, int vp, 776 int *flags); 777 extern int bcm_tr3_extender_port_untagged_vlan_set(int unit, bcm_port_t port, 778 bcm_vlan_t vlan); 779 extern int bcm_tr3_extender_port_untagged_vlan_get(int unit, bcm_port_t port, 780 bcm_vlan_t *vid_ptr); 781 782 #ifndef BCM_SW_STATE_DUMP_DISABLE 783 extern void bcm_tr3_extender_sw_dump(int unit); 784 #endif /* BCM_SW_STATE_DUMP_DISABLE */ 785 786 #endif /* INCLUDE_L3 */ 787 788 #if defined(BCM_FIELD_SUPPORT) 789 #ifdef BCM_HELIX4_SUPPORT 790 extern int _bcm_field_helix4_stage_init(int unit, _field_stage_t *stage_fc); 791 #endif 792 extern int _bcm_field_tr3_stage_init(int unit, _field_stage_t *stage_fc); 793 extern int _bcm_field_tr3_external_present(int unit); 794 extern int _bcm_field_tr3_meter_pool_info(int unit, 795 _field_stage_t *stage_fc, 796 int *num_pools, 797 int *pairs_per_pool, 798 uint16 *pool_size 799 ); 800 extern int _bcm_field_tr3_cntr_pool_info(int unit, 801 _field_stage_t *stage_fc, 802 unsigned *num_pools, 803 unsigned *cntrs_per_pool 804 ); 805 extern int _bcm_field_tr3_slice_enable_set(int unit, 806 _field_stage_t *stage_fc, 807 _field_group_t *fg, 808 _field_slice_t *fs, 809 unsigned endis 810 ); 811 extern int _bcm_field_tr3_slice_clear(int unit, 812 _field_group_t *fg, 813 _field_slice_t *fs 814 ); 815 extern int _bcm_field_tr3_group_qset_update(int unit, _field_group_t *fg); 816 extern int _bcm_field_tr3_group_default_aset_set(int unit, _field_group_t *fg); 817 extern int _bcm_field_tr3_aset_install(int unit, _field_group_t *fg); 818 extern int _bcm_field_tr3_qualify_PacketRes(int unit, 819 bcm_field_entry_t entry, 820 uint32 *data, 821 uint32 *mask 822 ); 823 extern int _bcm_field_tr3_qualify_PacketRes_get(int unit, 824 bcm_field_entry_t entry, 825 uint32 *data, 826 uint32 *mask 827 ); 828 extern int 829 _bcm_field_tr3_qualify_LoopbackType(bcm_field_LoopbackType_t loopback_type, 830 uint32 *tcam_data, 831 uint32 *tcam_mask 832 ); 833 extern int 834 _bcm_field_tr3_qualify_LoopbackType_get(uint8 tcam_data, 835 uint8 tcam_mask, 836 bcm_field_LoopbackType_t *loopback_type 837 ); 838 extern int 839 _bcm_field_tr3_qualify_TunnelType(bcm_field_TunnelType_t tunnel_type, 840 uint32 *tcam_data, 841 uint32 *tcam_mask 842 ); 843 extern int 844 _bcm_field_tr3_qualify_TunnelType_get(uint8 tcam_data, 845 uint8 tcam_mask, 846 bcm_field_TunnelType_t *tunnel_type 847 ); 848 extern int _bcm_field_tr3_qualify_class(int unit, 849 bcm_field_entry_t entry, 850 bcm_field_qualify_t qual, 851 uint32 *data, 852 uint32 *mask 853 ); 854 extern int _bcm_field_tr3_qualify_class_get(int unit, 855 bcm_field_entry_t entry, 856 bcm_field_qualify_t qual, 857 uint32 *data, 858 uint32 *mask 859 ); 860 extern int _bcm_field_tr3_qual_tcam_key_mask_get(int unit, 861 _field_entry_t *f_ent, 862 _field_tcam_t *tcam 863 ); 864 extern int _bcm_field_tr3_qual_tcam_key_mask_set(int unit, 865 _field_entry_t *f_ent, 866 unsigned validf 867 ); 868 extern int _bcm_field_tr3_action_get(int unit, 869 soc_mem_t mem, 870 _field_entry_t *f_ent, 871 int tcam_idx, 872 _field_action_t *fa, 873 uint32 *buf 874 ); 875 extern int _bcm_field_tr3_policer_mode_support(int unit, 876 _field_entry_t *f_ent, 877 int lvl, 878 _field_policer_t *f_pl 879 ); 880 extern int _bcm_field_tr3_policer_action_set(int unit, 881 _field_entry_t *f_ent, 882 soc_mem_t mem, 883 uint32 *buf 884 ); 885 extern int _bcm_field_tr3_stat_hw_mode_get(int unit, _field_stat_t *f_st); 886 extern int _bcm_field_tr3_counter_hw_alloc(int unit, 887 _field_entry_t *f_ent 888 ); 889 extern int 890 _bcm_esw_tr3_ext_stat_flex_detach_ingress_table_counters(int unit, 891 _field_entry_t *f_ent 892 ); 893 extern int _bcm_field_tr3_stat_hw_free(int unit, 894 _field_entry_t *f_ent 895 ); 896 extern int _bcm_field_tr3_stat_action_set(int unit, 897 _field_entry_t *f_ent, 898 soc_mem_t mem, 899 int tcam_idx, 900 uint32 *buf 901 ); 902 extern int _bcm_field_tr3_stat_hw_mode_max(_field_stage_id_t stage_id, 903 int *hw_mode_max 904 ); 905 extern int _bcm_field_tr3_stat_hw_mode_to_bmap(int unit, 906 uint16 mode, 907 _field_stage_id_t stage_id, 908 uint32 *hw_bmap, 909 uint8 *hw_entry_count 910 ); 911 extern int _bcm_field_tr3_counter_mem_get(int unit, 912 _field_stage_t *stage_fc, 913 soc_mem_t *counter_x_mem, 914 soc_mem_t *counter_y_mem 915 ); 916 extern int _bcm_field_tr3_external_policy_mem_get(int unit, 917 _field_action_t *fa, 918 soc_mem_t *mem 919 ); 920 extern int _bcm_field_tr3_external_policy_install(int unit, 921 _field_stage_t *stage_fc, 922 _field_entry_t *f_ent 923 ); 924 extern int _bcm_field_tr3_external_entry_move(int unit, _field_entry_t *f_ent, 925 int index1, int index2); 926 927 extern int _bcm_field_tr3_external_hw_entry_clear(int unit, int slice, int index); 928 929 extern int _bcm_field_tr3_hw_clear(int unit, _field_stage_t *stage_fc); 930 extern int _bcm_field_tr3_init(int unit, _field_control_t *fc); 931 #endif /* BCM_FIELD_SUPPORT */ 932 933 extern int bcm_tr3_cosq_init(int unit); 934 extern void bcm_tr3_cosq_stat_init(int unit); 935 extern int bcm_tr3_cosq_detach(int unit, int software_state_only); 936 937 extern int bcm_tr3_cosq_config_set(int unit, int numq); 938 939 extern int bcm_tr3_cosq_config_get(int unit, int *numq); 940 941 extern int bcm_tr3_cosq_mapping_set(int unit, bcm_port_t gport, 942 bcm_cos_t priority, bcm_cos_queue_t cosq); 943 944 extern int bcm_tr3_cosq_mapping_get(int unit, bcm_port_t gport, 945 bcm_cos_t priority, bcm_cos_queue_t *cosq); 946 947 extern int bcm_tr3_cosq_port_sched_set(int unit, bcm_pbmp_t pbm, 948 int mode, const int *weights, int delay); 949 950 extern int bcm_tr3_cosq_port_sched_get(int unit, bcm_pbmp_t pbm, 951 int *mode, int *weights, int *delay); 952 953 extern int bcm_tr3_cosq_sched_weight_max_get(int unit, int mode, 954 int *weight_max); 955 956 extern int bcm_tr3_cosq_discard_set(int unit, uint32 flags); 957 958 extern int bcm_tr3_cosq_discard_get(int unit, uint32 *flags); 959 960 extern int 961 bcm_tr3_cosq_gport_discard_set(int unit, bcm_gport_t gport, 962 bcm_cos_queue_t cosq, 963 bcm_cosq_gport_discard_t *discard); 964 965 extern int 966 _bcm_tr3_cosq_pfc_class_resolve(bcm_switch_control_t sctype, int *type, 967 int *class); 968 969 extern int 970 bcm_tr3_cosq_port_pfc_op(int unit, bcm_port_t port, 971 bcm_switch_control_t sctype, _bcm_cosq_op_t op, 972 bcm_gport_t *gport, int gport_count); 973 974 extern int 975 bcm_tr3_cosq_port_pfc_get(int unit, bcm_port_t port, 976 bcm_switch_control_t sctype, 977 bcm_gport_t *gport, int gport_count, 978 int *actual_gport_count); 979 980 extern int 981 bcm_tr3_cosq_gport_discard_get(int unit, bcm_gport_t gport, 982 bcm_cos_queue_t cosq, 983 bcm_cosq_gport_discard_t *discard); 984 985 extern int 986 bcm_tr3_cosq_gport_add(int unit, bcm_gport_t port, int numq, uint32 flags, 987 bcm_gport_t *gport,int internal); 988 989 extern int 990 bcm_tr3_cosq_gport_detach(int unit, bcm_gport_t sched_gport, 991 bcm_gport_t input_gport, bcm_cos_queue_t cosq); 992 993 extern int 994 bcm_tr3_cosq_discard_port_get(int unit, bcm_port_t port, 995 bcm_cos_queue_t cosq, uint32 color, int *drop_start, 996 int *drop_slope, int *average_time); 997 998 extern int 999 bcm_tr3_cosq_gport_delete(int unit, bcm_gport_t gport); 1000 1001 extern int 1002 bcm_tr3_cosq_gport_get(int unit, bcm_gport_t gport, bcm_gport_t *port, 1003 int *numq, uint32 *flags); 1004 1005 extern int 1006 bcm_tr3_cosq_gport_traverse(int unit, bcm_cosq_gport_traverse_cb cb, 1007 void *user_data); 1008 1009 extern int 1010 bcm_tr3_cosq_discard_port_set(int unit, bcm_port_t port, 1011 bcm_cos_queue_t cosq, 1012 uint32 color, int drop_start, int drop_slope, 1013 int average_time); 1014 1015 extern int 1016 bcm_tr3_cosq_gport_attach(int unit, bcm_gport_t sched_gport, 1017 bcm_gport_t input_gport, bcm_cos_queue_t cosq); 1018 1019 extern int 1020 bcm_tr3_cosq_gport_attach_get(int unit, bcm_gport_t sched_gport, 1021 bcm_gport_t *input_gport, bcm_cos_queue_t *cosq); 1022 1023 extern int 1024 bcm_tr3_cosq_gport_child_get(int unit, bcm_gport_t in_gport, 1025 bcm_cos_queue_t cosq, bcm_gport_t *out_gport); 1026 1027 extern int 1028 bcm_tr3_cosq_port_bandwidth_set(int unit, bcm_port_t port, 1029 bcm_cos_queue_t cosq, 1030 uint32 min_quantum, uint32 max_quantum, 1031 uint32 burst_quantum, uint32 flags); 1032 1033 extern int 1034 bcm_tr3_cosq_port_bandwidth_get(int unit, bcm_port_t port, 1035 bcm_cos_queue_t cosq, 1036 uint32 *min_quantum, uint32 *max_quantum, 1037 uint32 *burst_quantum, uint32 *flags); 1038 1039 extern int 1040 bcm_tr3_cosq_port_pps_set(int unit, bcm_port_t port, bcm_cos_queue_t cosq, 1041 int pps); 1042 1043 extern int 1044 bcm_tr3_cosq_port_pps_get(int unit, bcm_port_t port, bcm_cos_queue_t cosq, 1045 int *pps); 1046 1047 extern int bcm_tr3_cosq_port_burst_set(int unit, bcm_port_t port, 1048 bcm_cos_queue_t cosq, int burst); 1049 1050 extern int 1051 bcm_tr3_cosq_stat_set(int unit, bcm_gport_t port, bcm_cos_queue_t cosq, 1052 bcm_cosq_stat_t stat, uint64 value); 1053 1054 extern int 1055 bcm_tr3_cosq_stat_get(int unit, bcm_port_t port, bcm_cos_queue_t cosq, 1056 bcm_cosq_stat_t stat, int sync_mode, uint64 *value); 1057 1058 extern int 1059 bcm_tr3_cosq_port_burst_get(int unit, bcm_port_t port, bcm_cos_queue_t cosq, 1060 int *burst); 1061 1062 extern int 1063 bcm_tr3_cosq_control_set(int unit, bcm_gport_t gport, bcm_cos_queue_t cosq, 1064 bcm_cosq_control_t type, int arg); 1065 1066 extern int 1067 bcm_tr3_cosq_control_get(int unit, bcm_gport_t gport, bcm_cos_queue_t cosq, 1068 bcm_cosq_control_t type, int *arg); 1069 1070 extern int 1071 bcm_tr3_cosq_gport_bandwidth_burst_set(int unit, bcm_gport_t gport, 1072 bcm_cos_queue_t cosq, 1073 uint32 kbits_burst_min, 1074 uint32 kbits_burst_max); 1075 1076 extern int 1077 bcm_tr3_cosq_gport_bandwidth_burst_get(int unit, bcm_gport_t gport, 1078 bcm_cos_queue_t cosq, 1079 uint32 *kbits_burst_min, 1080 uint32 *kbits_burst_max); 1081 extern int 1082 bcm_tr3_cosq_gport_bandwidth_set(int unit, bcm_gport_t gport, 1083 bcm_cos_queue_t cosq, uint32 kbits_sec_min, 1084 uint32 kbits_sec_max, uint32 flags); 1085 1086 extern int 1087 bcm_tr3_cosq_gport_bandwidth_get(int unit, bcm_gport_t gport, 1088 bcm_cos_queue_t cosq, uint32 *kbits_sec_min, 1089 uint32 *kbits_sec_max, uint32 *flags); 1090 1091 extern int bcm_tr3_cosq_congestion_queue_set(int unit, bcm_port_t port, 1092 bcm_cos_queue_t cosq, int index); 1093 extern int bcm_tr3_cosq_congestion_queue_get(int unit, bcm_port_t port, 1094 bcm_cos_queue_t cosq, int *index); 1095 extern int bcm_tr3_cosq_congestion_quantize_set(int unit, bcm_port_t port, 1096 bcm_cos_queue_t cosq, 1097 int weight_code, int setpoint); 1098 extern int bcm_tr3_cosq_congestion_quantize_get(int unit, bcm_port_t port, 1099 bcm_cos_queue_t cosq, 1100 int *weight_code, 1101 int *setpoint); 1102 extern int bcm_tr3_cosq_congestion_sample_int_set(int unit, bcm_port_t port, 1103 bcm_cos_queue_t cosq, 1104 int min, int max); 1105 extern int bcm_tr3_cosq_congestion_sample_int_get(int unit, bcm_port_t port, 1106 bcm_cos_queue_t cosq, 1107 int *min, int *max); 1108 extern int bcm_tr3_cosq_drop_status_enable_set(int unit, bcm_port_t port, 1109 int enable); 1110 extern int _bcm_tr3_get_def_qbase(int unit, bcm_port_t inport, int qtype, 1111 int *pbase, int *pnumq); 1112 1113 extern int bcm_tr3_cosq_gport_sched_set(int unit, bcm_gport_t gport, 1114 bcm_cos_queue_t cosq, int mode, 1115 int weight); 1116 extern int bcm_tr3_cosq_gport_sched_get(int unit, bcm_gport_t gport, 1117 bcm_cos_queue_t cosq, int *mode, 1118 int *weight); 1119 extern int 1120 _bcm_tr3_cosq_port_resolve(int unit, bcm_gport_t gport, bcm_module_t *modid, 1121 bcm_port_t *port, bcm_trunk_t *trunk_id, int *id, 1122 int *qnum); 1123 1124 1125 extern int 1126 bcm_tr3_cosq_gport_congestion_config_set(int unit, bcm_gport_t port, 1127 bcm_cos_queue_t cosq, 1128 bcm_cosq_congestion_info_t *config); 1129 1130 extern int 1131 bcm_tr3_cosq_gport_congestion_config_get(int unit, bcm_gport_t port, 1132 bcm_cos_queue_t cosq, 1133 bcm_cosq_congestion_info_t *config); 1134 /* Routines to program IFP_COS_MAP table. */ 1135 extern int 1136 bcm_tr3_cosq_field_classifier_id_create(int unit, 1137 bcm_cosq_classifier_t *classifier, 1138 int *classifier_id); 1139 extern int 1140 bcm_tr3_cosq_field_classifier_map_set(int unit, 1141 int classifier_id, 1142 int array_count, 1143 bcm_cos_t *priority_array, 1144 bcm_cos_queue_t *cosq_array); 1145 extern int 1146 bcm_tr3_cosq_field_classifier_map_get(int unit, 1147 int classifier_id, 1148 int array_max, 1149 bcm_cos_t *priority_array, 1150 bcm_cos_queue_t *cosq_array, 1151 int *array_count); 1152 extern int 1153 bcm_tr3_cosq_field_classifier_map_clear(int unit, int classifier_id); 1154 1155 extern int 1156 bcm_tr3_cosq_field_classifier_id_destroy(int unit, int classifier_id); 1157 1158 extern int 1159 bcm_tr3_cosq_field_classifier_get(int unit, int classifier_id, 1160 bcm_cosq_classifier_t *classifier); 1161 extern int 1162 bcm_tr3_cosq_service_classifier_id_create(int unit, 1163 bcm_cosq_classifier_t *classifier, 1164 int *classifier_id); 1165 1166 extern int 1167 bcm_tr3_cosq_service_classifier_id_destroy(int unit, 1168 int classifier_id); 1169 1170 extern int 1171 bcm_tr3_cosq_service_classifier_get(int unit, 1172 int classifier_id, 1173 bcm_cosq_classifier_t *classifier); 1174 1175 extern int 1176 bcm_tr3_cosq_service_map_set(int unit, bcm_port_t port, 1177 int classifier_id, 1178 bcm_gport_t queue_group, 1179 int array_count, 1180 bcm_cos_t *priority_array, 1181 bcm_cos_queue_t *cosq_array); 1182 1183 extern int 1184 bcm_tr3_cosq_service_map_get(int unit, bcm_port_t port, 1185 int classifier_id, 1186 bcm_gport_t *queue_group, 1187 int array_max, 1188 bcm_cos_t *priority_array, 1189 bcm_cos_queue_t *cosq_array, 1190 int *array_count); 1191 1192 extern int 1193 bcm_tr3_cosq_service_map_clear(int unit, 1194 bcm_gport_t port, 1195 int classifier_id); 1196 1197 extern int 1198 bcm_tr3_cosq_classifier_id_get(int unit, 1199 bcm_cosq_classifier_t *classifier, 1200 int array_count, 1201 bcm_cos_t *priority_array, 1202 bcm_cos_queue_t *cosq_array, 1203 int *classifier_id); 1204 1205 extern int 1206 bcm_tr3_cosq_cpu_cosq_enable_set( 1207 int unit, 1208 bcm_cos_queue_t cosq, 1209 int enable); 1210 1211 extern int 1212 bcm_tr3_cosq_cpu_cosq_enable_get( 1213 int unit, 1214 bcm_cos_queue_t cosq, 1215 int *enable); 1216 1217 typedef enum { 1218 _BCM_TR3_COSQ_INDEX_STYLE_BUCKET, 1219 _BCM_TR3_COSQ_INDEX_STYLE_QCN, 1220 _BCM_TR3_COSQ_INDEX_STYLE_WRED, 1221 _BCM_TR3_COSQ_INDEX_STYLE_WRED_PORT, 1222 _BCM_TR3_COSQ_INDEX_STYLE_SCHEDULER, 1223 _BCM_TR3_COSQ_INDEX_STYLE_UCAST_DROP, 1224 _BCM_TR3_COSQ_INDEX_STYLE_COS, 1225 _BCM_TR3_COSQ_INDEX_STYLE_UCAST_QUEUE, 1226 _BCM_TR3_COSQ_INDEX_STYLE_MCAST_QUEUE, 1227 _BCM_TR3_COSQ_INDEX_STYLE_EXT_UCAST_QUEUE, 1228 _BCM_TR3_COSQ_INDEX_STYLE_EGR_POOL, 1229 _BCM_TR3_COSQ_INDEX_STYLE_EGR_PERQ_UCAST, 1230 _BCM_TR3_COSQ_INDEX_STYLE_EGR_PERQ_MCAST, 1231 _BCM_TR3_COSQ_INDEX_STYLE_UC_EGR_POOL, 1232 _BCM_TR3_COSQ_INDEX_STYLE_COUNT 1233 } _bcm_tr3_cosq_index_style_t; 1234 1235 extern int 1236 _bcm_tr3_cosq_index_resolve(int unit, bcm_port_t port, bcm_cos_queue_t cosq, 1237 _bcm_tr3_cosq_index_style_t style, 1238 bcm_port_t *local_port, int *index, int *count); 1239 1240 extern int 1241 bcm_tr3_switch_qcn_mac_set(int unit, bcm_switch_control_t type, 1242 soc_mem_t mem,soc_field_t field, void* entry, 1243 uint32 mac_field); 1244 1245 extern int 1246 bcm_tr3_switch_qcn_mac_get(int unit, bcm_switch_control_t type, 1247 soc_mem_t mem,soc_field_t field, void* entry, 1248 uint32 *mac_field); 1249 /* Cross Connect */ 1250 extern int 1251 bcm_tr3_l2_cross_connect_add(int unit, bcm_vlan_t outer_vlan, 1252 bcm_vlan_t inner_vlan, bcm_gport_t port_1, 1253 bcm_gport_t port_2); 1254 extern int 1255 bcm_tr3_l2_cross_connect_delete(int unit, bcm_vlan_t outer_vlan, 1256 bcm_vlan_t inner_vlan); 1257 1258 extern int 1259 bcm_tr3_l2_cross_connect_delete_all(int unit); 1260 1261 extern int 1262 bcm_tr3_l2_cross_connect_traverse(int unit, 1263 bcm_vlan_cross_connect_traverse_cb cb, 1264 void *user_data); 1265 1266 1267 extern int 1268 bcm_tr3_cosq_bst_profile_set(int unit, 1269 bcm_gport_t gport, 1270 bcm_cos_queue_t cosq, 1271 bcm_bst_stat_id_t bid, 1272 bcm_cosq_bst_profile_t *profile); 1273 1274 extern int 1275 bcm_tr3_cosq_bst_profile_get(int unit, 1276 bcm_gport_t gport, 1277 bcm_cos_queue_t cosq, 1278 bcm_bst_stat_id_t bid, 1279 bcm_cosq_bst_profile_t *profile); 1280 1281 extern int 1282 bcm_tr3_cosq_bst_stat_get(int unit, 1283 bcm_gport_t gport, 1284 bcm_cos_queue_t cosq, 1285 bcm_bst_stat_id_t bid, 1286 uint32 options, 1287 uint64 *value); 1288 extern int 1289 bcm_tr3_cosq_bst_stat_multi_get(int unit, 1290 bcm_gport_t gport, 1291 bcm_cos_queue_t cosq, 1292 uint32 options, 1293 int max_values, 1294 bcm_bst_stat_id_t *id_list, 1295 uint64 *values); 1296 extern int 1297 bcm_tr3_cosq_bst_stat_clear(int unit, 1298 bcm_gport_t gport, 1299 bcm_cos_queue_t cosq, 1300 bcm_bst_stat_id_t bid); 1301 1302 extern int bcm_tr3_cosq_bst_stat_sync(int unit, bcm_bst_stat_id_t bid); 1303 1304 extern int 1305 bcm_tr3_cosq_gport_mapping_set(int unit, bcm_port_t ing_port, 1306 bcm_cos_t int_pri, uint32 flags, 1307 bcm_gport_t gport, bcm_cos_queue_t cosq); 1308 1309 extern int 1310 bcm_tr3_cosq_gport_mapping_get(int unit, bcm_port_t ing_port, 1311 bcm_cos_t int_pri, uint32 flags, 1312 bcm_gport_t *gport, bcm_cos_queue_t *cosq); 1313 1314 extern int bcm_tr3_cosq_sync(int unit); 1315 extern void bcm_tr3_cosq_sw_dump(int unit); 1316 1317 extern int bcm_tr3_oam_init(int unit); 1318 1319 extern int bcm_tr3_oam_detach(int unit); 1320 1321 extern int bcm_tr3_oam_group_create(int unit, bcm_oam_group_info_t *group_info); 1322 1323 extern int bcm_tr3_oam_group_get(int unit, bcm_oam_group_t group, 1324 bcm_oam_group_info_t *group_info); 1325 1326 extern int bcm_tr3_oam_group_destroy(int unit, bcm_oam_group_t group); 1327 1328 extern int bcm_tr3_oam_group_destroy_all(int unit); 1329 1330 extern int bcm_tr3_oam_group_traverse(int unit, bcm_oam_group_traverse_cb cb, 1331 void *user_data); 1332 1333 extern int bcm_tr3_oam_endpoint_create(int unit, 1334 bcm_oam_endpoint_info_t *endpoint_info); 1335 1336 extern int bcm_tr3_oam_endpoint_get(int unit, bcm_oam_endpoint_t endpoint, 1337 bcm_oam_endpoint_info_t *endpoint_info); 1338 1339 extern int bcm_tr3_oam_endpoint_destroy(int unit, bcm_oam_endpoint_t endpoint); 1340 1341 extern int bcm_tr3_oam_endpoint_destroy_all(int unit, bcm_oam_group_t group); 1342 1343 extern int bcm_tr3_oam_endpoint_traverse(int unit, bcm_oam_group_t group, 1344 bcm_oam_endpoint_traverse_cb cb, 1345 void *user_data); 1346 1347 extern int bcm_tr3_oam_event_register(int unit, bcm_oam_event_types_t event_types, 1348 bcm_oam_event_cb cb, void *user_data); 1349 1350 extern int bcm_tr3_oam_event_unregister(int unit, bcm_oam_event_types_t event_types, 1351 bcm_oam_event_cb cb); 1352 1353 extern int bcm_tr3_port_esm_eligible_set(int unit, bcm_port_t port, int value); 1354 extern int bcm_tr3_port_esm_eligible_get(int unit, bcm_port_t port, int *value); 1355 extern int bcm_tr3_port_extender_type_set(int unit, bcm_port_t port, 1356 int value); 1357 extern int bcm_tr3_port_extender_type_get(int unit, bcm_port_t port, 1358 int *value); 1359 #if defined(INCLUDE_L3) 1360 extern int bcm_tr3_port_etag_pcp_de_source_set(int unit, bcm_port_t port, 1361 int value); 1362 extern int bcm_tr3_port_etag_pcp_de_source_get(int unit, bcm_port_t port, 1363 int *value); 1364 #endif 1365 1366 extern int bcm_tr3_port_ibod_sync_recovery(int unit, bcm_pbmp_t pbmp); 1367 1368 extern int bcm_tr3_port_pps_rate_egress_set(int unit, bcm_port_t port, 1369 uint32 pps, uint32 burst); 1370 1371 extern int bcm_tr3_port_pps_rate_egress_get(int unit, bcm_port_t port, 1372 uint32 *pps, uint32 *burst); 1373 1374 extern int 1375 bcm_tr3_port_rate_egress_set(int unit, bcm_port_t port, 1376 uint32 kbits_sec, uint32 kbits_burst, uint32 mode); 1377 1378 extern int 1379 bcm_tr3_port_rate_egress_get(int unit, bcm_port_t port, 1380 uint32 *kbits_sec, uint32 *kbits_burst, uint32 *mode); 1381 1382 #if defined(INCLUDE_BHH) 1383 extern int bcm_tr3_oam_loopback_add(int unit, bcm_oam_loopback_t *loopback_p); 1384 extern int bcm_tr3_oam_loopback_get(int unit, bcm_oam_loopback_t *loopback_p); 1385 extern int bcm_tr3_oam_loopback_delete(int unit, bcm_oam_loopback_t *loopback_p); 1386 extern int bcm_tr3_oam_loss_add( int unit, bcm_oam_loss_t *loss_ptr); 1387 extern int bcm_tr3_oam_loss_delete( int unit, bcm_oam_loss_t *loss_ptr); 1388 extern int bcm_tr3_oam_loss_get( int unit, bcm_oam_loss_t *loss_ptr); 1389 extern int bcm_tr3_oam_delay_add( int unit, bcm_oam_delay_t *delay_ptr); 1390 extern int bcm_tr3_oam_delay_delete( int unit, bcm_oam_delay_t *delay_ptr); 1391 extern int bcm_tr3_oam_delay_get( int unit, bcm_oam_delay_t *delay_ptr); 1392 extern int bcm_tr3_oam_csf_add(int unit, bcm_oam_csf_t *csf_ptr); 1393 extern int bcm_tr3_oam_csf_delete(int unit, bcm_oam_csf_t *csf_ptr); 1394 extern int bcm_tr3_oam_csf_get(int unit, bcm_oam_csf_t *csf_ptr); 1395 extern int bcm_tr3_oam_endpoint_faults_multi_get( int unit, uint32 flags, 1396 bcm_oam_protocol_type_t endpoint_protocol, 1397 uint32 max_endpoints, bcm_oam_endpoint_fault_t *faults, 1398 uint32 *endpoint_count); 1399 extern int bcm_tr3_oam_trunk_ports_add(int unit, bcm_gport_t trunk_gport, 1400 int max_ports, bcm_gport_t *port_arr); 1401 extern int bcm_tr3_oam_trunk_ports_delete(int unit, bcm_gport_t trunk_gport, 1402 int max_ports, bcm_gport_t *port_arr); 1403 extern int bcm_tr3_oam_trunk_ports_get(int unit, bcm_gport_t trunk_gport, 1404 int max_ports, bcm_gport_t *port_arr, 1405 int *port_count); 1406 extern int bcm_tr3_oam_mpls_tp_channel_type_tx_set(int unit, 1407 bcm_oam_mpls_tp_channel_type_t channel_type, 1408 int value); 1409 extern int bcm_tr3_oam_mpls_tp_channel_type_tx_get(int unit, 1410 bcm_oam_mpls_tp_channel_type_t channel_type, 1411 int *value); 1412 #endif /* INCLUDE_BHH */ 1413 1414 /* BHH API */ 1415 1416 #ifdef BCM_WARM_BOOT_SUPPORT /* BCM_WARM_BOOT_SUPPORT */ 1417 extern int _bcm_tr3_oam_sync(int unit); 1418 #endif /* !BCM_WARM_BOOT_SUPPORT */ 1419 1420 #ifdef BCM_WARM_BOOT_SUPPORT_SW_DUMP /* BCM_WARM_BOOT_SUPPORT_SW_DUMP*/ 1421 extern void _bcm_tr3_oam_sw_dump(int unit); 1422 #endif /* !BCM_WARM_BOOT_SUPPORT_SW_DUMP */ 1423 1424 #if defined(INCLUDE_L3) 1425 extern int 1426 _bcm_tr3_mpls_tunnel_switch_frr_entry_key_get(int unit, 1427 soc_tunnel_term_t *tnl_entry, 1428 bcm_mpls_tunnel_switch_t *info); 1429 extern int 1430 _bcm_tr3_mpls_tunnel_switch_frr_set(int unit, bcm_mpls_tunnel_switch_t *info); 1431 1432 extern void 1433 _bcm_tr3_mpls_tunnel_switch_frr_parse(int unit, soc_tunnel_term_t *tnl_entry, 1434 bcm_mpls_tunnel_switch_t *tnl_info); 1435 1436 extern int 1437 _bcm_tr3_mpls_tunnel_switch_frr_delete(int unit, 1438 bcm_mpls_tunnel_switch_t *tnl_info); 1439 1440 extern int 1441 _bcm_tr3_mpls_tunnel_switch_frr_get(int unit, 1442 bcm_mpls_tunnel_switch_t *tnl_info, int *index); 1443 #endif 1444 extern int bcm_tr3_port_drain_cells(int unit, int port); 1445 extern int 1446 _bcm_tr3_port_enqueue_set(int unit, bcm_port_t gport, 1447 int enable); 1448 extern int 1449 _bcm_tr3_port_tx_set(int unit, bcm_port_t gport, int enable); 1450 1451 extern int 1452 _bcm_tr3_port_enqueue_get(int unit, bcm_port_t gport, 1453 int *enable); 1454 1455 extern int bcm_tr3_bfd_l2_hash_dynamic_replace(int unit, void *l2x_entry); 1456 extern int _bcm_tr3_l2gre_vpn_is_valid( int unit, bcm_vpn_t l2vpn); 1457 extern int 1458 bcm_tr3_cosq_pfc_class_mapping_set(int unit, 1459 bcm_gport_t port, 1460 int array_count, 1461 bcm_cosq_pfc_class_mapping_t *mapping_array); 1462 extern int 1463 bcm_tr3_cosq_pfc_class_mapping_get(int unit, 1464 bcm_gport_t port, 1465 int array_max, 1466 bcm_cosq_pfc_class_mapping_t *mapping_array, 1467 int *array_count); 1468 int 1469 _soc_tr3_cosq_axp_node_validate(int unit, int local_port, int level, 1470 int to_cos); 1471 1472 int 1473 _bcm_tr3_l2_hash_pending_override(int unit, _bcm_tr3_l2_entries_t *l2_entries); 1474 #endif /* BCM_TRIUMPH3_SUPPORT */ 1475 1476 #endif /* !_BCM_INT_TRIUMPH3_H_ */