triumph3.h (73472B)
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-2020 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_get(int unit, bcm_mpls_port_t *mpls_port, int vp); 500 extern int _bcm_tr3_mpls_failover_nw_port_match_get(int unit, bcm_mpls_port_t *mpls_port, 501 int vp, mpls_entry_entry_t *return_ment); 502 503 extern bcm_error_t bcm_tr3_mpls_port_stat_attach( 504 int unit, 505 bcm_vpn_t vpn, 506 bcm_gport_t port, 507 uint32 stat_counter_id); 508 extern bcm_error_t bcm_tr3_mpls_port_stat_detach( 509 int unit, 510 bcm_vpn_t vpn, 511 bcm_gport_t port); 512 extern bcm_error_t bcm_tr3_mpls_port_stat_counter_get( 513 int unit, 514 int sync_mode, 515 bcm_vpn_t vpn, 516 bcm_gport_t port, 517 bcm_mpls_stat_t stat, 518 uint32 num_entries, 519 uint32 *counter_indexes, 520 bcm_stat_value_t *counter_values); 521 extern bcm_error_t bcm_tr3_mpls_port_stat_counter_set( 522 int unit, 523 bcm_vpn_t vpn, 524 bcm_gport_t port, 525 bcm_mpls_stat_t stat, 526 uint32 num_entries, 527 uint32 *counter_indexes, 528 bcm_stat_value_t *counter_values); 529 extern bcm_error_t bcm_tr3_mpls_port_stat_id_get( 530 int unit, 531 bcm_vpn_t vpn, 532 bcm_gport_t port, 533 bcm_mpls_stat_t stat, 534 uint32 *stat_counter_id); 535 extern bcm_error_t bcm_tr3_mpls_label_stat_attach( 536 int unit, 537 bcm_mpls_label_t label, 538 bcm_gport_t port, 539 uint32 stat_counter_id); 540 extern bcm_error_t bcm_tr3_mpls_label_stat_detach( 541 int unit, 542 bcm_mpls_label_t label, 543 bcm_gport_t port); 544 extern bcm_error_t bcm_tr3_mpls_label_stat_counter_get( 545 int unit, 546 int sync_mode, 547 bcm_mpls_label_t label, 548 bcm_gport_t port, 549 bcm_mpls_stat_t stat, 550 uint32 num_entries, 551 uint32 *counter_indexes, 552 bcm_stat_value_t *counter_values); 553 extern bcm_error_t bcm_tr3_mpls_label_stat_counter_set( 554 int unit, 555 bcm_mpls_label_t label, 556 bcm_gport_t port, 557 bcm_mpls_stat_t stat, 558 uint32 num_entries, 559 uint32 *counter_indexes, 560 bcm_stat_value_t *counter_values); 561 extern bcm_error_t bcm_tr3_mpls_label_stat_id_get( 562 int unit, 563 bcm_mpls_label_t label, 564 bcm_gport_t port, 565 bcm_mpls_stat_t stat, 566 uint32 *stat_counter_id); 567 extern int bcm_tr3_mpls_label_stat_enable_set( 568 int unit, 569 bcm_mpls_label_t label, 570 bcm_gport_t port, 571 int enable); 572 extern int bcm_tr3_mpls_label_stat_get( 573 int unit, 574 int sync_mode, 575 bcm_mpls_label_t label, 576 bcm_gport_t port, 577 bcm_mpls_stat_t stat, 578 uint64 *val); 579 extern int bcm_tr3_mpls_label_stat_get32( 580 int unit, 581 int sync_mode, 582 bcm_mpls_label_t label, 583 bcm_gport_t port, 584 bcm_mpls_stat_t stat, 585 uint32 *val); 586 extern int bcm_tr3_mpls_label_stat_clear( 587 int unit, 588 bcm_mpls_label_t label, 589 bcm_gport_t port, 590 bcm_mpls_stat_t stat); 591 592 extern bcm_error_t _bcm_tr3_mim_vpn_stat_get_table_info( 593 int unit, 594 bcm_mim_vpn_t vpn, 595 uint32 *num_of_tables, 596 bcm_stat_flex_table_info_t *table_info); 597 598 extern bcm_error_t _bcm_tr3_mim_lookup_id_stat_get_table_info( 599 int unit, 600 int lookup_id, 601 uint32 *num_of_tables, 602 bcm_stat_flex_table_info_t *table_info); 603 604 605 extern int _bcm_tr3_l2_hash_dynamic_replace(int unit, 606 _bcm_tr3_l2_entries_t *l2_entries); 607 608 extern int _bcm_tr3_l2gre_port_resolve( 609 int unit, 610 bcm_gport_t l2gre_port_id, 611 bcm_if_t encap_id, 612 bcm_module_t *modid, 613 bcm_port_t *port, 614 bcm_trunk_t *trunk_id, 615 int *id); 616 617 extern int _bcm_tr3_l2gre_multicast_enable(int unit, bcm_multicast_t group, 618 bcm_gport_t l2gre_port_id); 619 extern int bcm_tr3_l2gre_lock(int unit); 620 extern void bcm_tr3_l2gre_unlock(int unit); 621 extern void _bcm_tr3_l2gre_sw_dump(int unit); 622 extern int bcm_tr3_l2gre_init(int unit); 623 extern int bcm_tr3_l2gre_cleanup(int unit); 624 extern int bcm_tr3_l2gre_vpn_create(int unit, bcm_l2gre_vpn_config_t *info); 625 extern int bcm_tr3_l2gre_vpn_destroy(int unit, bcm_vpn_t l2vpn); 626 extern int bcm_tr3_l2gre_vpn_destroy_all(int unit); 627 extern int bcm_tr3_l2gre_vpn_traverse(int unit, bcm_l2gre_vpn_traverse_cb cb, void *user_data); 628 extern int bcm_tr3_l2gre_vpn_get( int unit, bcm_vpn_t l2vpn, bcm_l2gre_vpn_config_t *info); 629 extern int bcm_tr3_l2gre_port_add(int unit, bcm_vpn_t vpn, bcm_l2gre_port_t *l2gre_port); 630 extern int bcm_tr3_l2gre_port_delete(int unit, bcm_vpn_t vpn, bcm_gport_t l2gre_port_id); 631 extern int bcm_tr3_l2gre_port_delete_all(int unit, bcm_vpn_t vpn); 632 extern int bcm_tr3_l2gre_port_get(int unit, bcm_vpn_t l2vpn, bcm_l2gre_port_t *l2gre_port); 633 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); 634 extern int bcm_tr3_l2gre_tunnel_initiator_create(int unit, bcm_tunnel_initiator_t *info); 635 extern int bcm_tr3_l2gre_tunnel_initiator_destroy(int unit, bcm_gport_t l2gre_tunnel_id); 636 extern int bcm_tr3_l2gre_tunnel_initiator_destroy_all(int unit); 637 extern int bcm_tr3_l2gre_tunnel_initiator_get(int unit, bcm_tunnel_initiator_t *info); 638 extern int bcm_tr3_l2gre_tunnel_initiator_traverse(int unit, bcm_tunnel_initiator_traverse_cb cb, void *user_data); 639 extern int bcm_tr3_l2gre_tunnel_terminator_create(int unit, bcm_tunnel_terminator_t *info); 640 extern int bcm_tr3_l2gre_tunnel_terminator_update(int unit, bcm_tunnel_terminator_t *tnl_info); 641 extern int bcm_tr3_l2gre_tunnel_terminator_destroy(int unit, bcm_gport_t l2gre_tunnel_id); 642 extern int bcm_tr3_l2gre_tunnel_terminator_destroy_all(int unit); 643 extern int bcm_tr3_l2gre_tunnel_terminator_get( int unit, bcm_tunnel_terminator_t *info); 644 extern int bcm_tr3_l2gre_tunnel_terminator_traverse(int unit, bcm_tunnel_terminator_traverse_cb cb, void *user_data); 645 extern int _bcm_tr3_l2gre_vpn_get(int unit, int vfi_index, bcm_vlan_t *vid); 646 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); 647 extern int _bcm_esw_l2gre_match_add(int unit, bcm_l2gre_port_t *l2gre_port, int vp, bcm_vpn_t vpn); 648 extern int _bcm_esw_l2gre_match_delete(int unit, int vp); 649 extern int _bcm_esw_l2gre_match_get(int unit, bcm_l2gre_port_t *l2gre_port, int vp); 650 extern void bcm_tr3_l2gre_port_match_count_adjust(int unit, int vp, int step); 651 extern int bcm_tr3_l2gre_match_add(int unit, bcm_l2gre_port_t *l2gre_port, int vp, bcm_vpn_t vpn); 652 extern int bcm_tr3_l2gre_match_delete(int unit, int vp); 653 extern int bcm_tr3_l2gre_match_get(int unit, bcm_l2gre_port_t *l2gre_port, int vp); 654 extern int bcm_tr3_l2gre_match_trunk_add(int unit, bcm_trunk_t tgid, int vp); 655 extern int bcm_tr3_l2gre_match_trunk_delete(int unit, bcm_trunk_t tgid, int vp); 656 extern int bcm_tr3_l2gre_port_untagged_profile_set (int unit, bcm_port_t port); 657 extern int bcm_tr3_l2gre_port_untagged_profile_reset(int unit, bcm_port_t port); 658 extern int bcm_tr3_l2gre_match_tunnel_entry_set(int unit, int vp, bcm_l2gre_port_t *l2gre_port); 659 extern int bcm_tr3_l2gre_match_tunnel_entry_reset(int unit, int vp); 660 extern void bcm_tr3_l2gre_match_clear (int unit, int vp); 661 extern int _bcm_tr3_l2gre_eline_vp_configure (int unit, int vfi_index, int active_vp, 662 source_vp_entry_t *svp, int tpid_enable, bcm_l2gre_port_t *l2gre_port); 663 extern int _bcm_tr3_l2gre_elan_vp_configure (int unit, int vfi_index, int active_vp, 664 source_vp_entry_t *svp, int tpid_enable, bcm_l2gre_port_t *l2gre_port); 665 extern int _bcm_esw_l2gre_eline_vp_configure (int unit, int vfi_index, int active_vp, 666 source_vp_entry_t *svp, int tpid_enable, bcm_l2gre_port_t *l2gre_port); 667 extern int _bcm_esw_l2gre_elan_vp_configure (int unit, int vfi_index, int active_vp, 668 source_vp_entry_t *svp, int tpid_enable, bcm_l2gre_port_t *l2gre_port); 669 extern int bcm_tr3_l2gre_trunk_member_add (int unit, bcm_trunk_t trunk_id, 670 int trunk_member_count, bcm_port_t *trunk_member_array); 671 extern int bcm_tr3_l2gre_trunk_member_delete(int unit, bcm_trunk_t trunk_id, 672 int trunk_member_count, bcm_port_t *trunk_member_array); 673 extern int bcm_tr3_l2gre_port_learn_set(int unit, bcm_gport_t l2gre_port_id, 674 uint32 flags); 675 extern int bcm_tr3_l2gre_port_learn_get(int unit, bcm_gport_t l2gre_port_id, 676 uint32 *flags); 677 extern int _bcm_tr3_mpls_entry_convert_to_extd_entry_key(int unit, mpls_entry_entry_t *mpls_entry_entry, 678 mpls_entry_extd_entry_t *mpls_entry_extd_entry); 679 #ifdef BCM_WARM_BOOT_SUPPORT 680 extern int _bcm_tr3_l2gre_sync(int unit); 681 #endif /* BCM_WARM_BOOT_SUPPORT */ 682 683 #if defined(INCLUDE_BFD) 684 extern int bcmi_tr3_bfd_init(int unit); 685 #endif /* INCLUDE_BFD */ 686 687 #ifdef BCM_WARM_BOOT_SUPPORT 688 extern int _bcm_tr3_ipmc_repl_reload(int unit); 689 #endif /* BCM_WARM_BOOT_SUPPORT */ 690 691 #ifndef BCM_SW_STATE_DUMP_DISABLE 692 extern void _bcm_tr3_ipmc_repl_sw_dump(int unit); 693 #endif /* BCM_SW_STATE_DUMP_DISABLE */ 694 695 /* NIV */ 696 extern int bcm_tr3_niv_forward_add(int unit, 697 bcm_niv_forward_t *iv_fwd_entry); 698 extern int bcm_tr3_niv_forward_delete(int unit, 699 bcm_niv_forward_t *iv_fwd_entry); 700 extern int bcm_tr3_niv_forward_delete_all(int unit); 701 extern int bcm_tr3_niv_forward_get(int unit, 702 bcm_niv_forward_t *iv_fwd_entry); 703 extern int bcm_tr3_niv_forward_traverse(int unit, 704 bcm_niv_forward_traverse_cb cb, void *user_data); 705 706 #ifdef BCM_WARM_BOOT_SUPPORT 707 extern int bcm_tr3_extender_required_scache_size_get(int unit, uint32 *size); 708 extern int _bcm_tr3_extender_sync(int unit, uint8 **scache_ptr); 709 #endif 710 711 /* Port Extender */ 712 extern int bcm_tr3_extender_init(int unit); 713 extern int bcm_tr3_extender_cleanup(int unit); 714 extern int bcm_tr3_extender_match_key_get(int unit, 715 bcm_gport_t extender_port_id, 716 void * vent); 717 extern int _bcm_tr3_extender_port_match_add(int unit, bcm_gport_t port, 718 uint16 extended_port_vid, 719 bcm_vlan_t vlan, int vp); 720 extern int _bcm_tr3_extender_port_match_delete(int unit, bcm_gport_t port, 721 uint16 extended_port_vid, 722 bcm_vlan_t vlan, int vp); 723 extern int bcm_tr3_extender_port_add(int unit, 724 bcm_extender_port_t *extender_port); 725 extern int bcm_tr3_extender_port_delete(int unit, 726 bcm_gport_t extender_port_id); 727 extern int bcm_tr3_extender_port_delete_all(int unit); 728 extern int bcm_tr3_extender_port_get(int unit, 729 bcm_extender_port_t *extender_port); 730 extern int bcm_tr3_extender_port_traverse(int unit, 731 bcm_extender_port_traverse_cb cb, void *user_data); 732 extern int bcm_tr3_extender_forward_add(int unit, 733 bcm_extender_forward_t *extender_forward_entry); 734 extern int bcm_tr3_extender_forward_delete(int unit, 735 bcm_extender_forward_t *extender_forward_entry); 736 extern int bcm_tr3_extender_forward_delete_all(int unit); 737 extern int bcm_tr3_extender_forward_get(int unit, 738 bcm_extender_forward_t *extender_forward_entry); 739 extern int bcm_tr3_extender_forward_traverse(int unit, 740 bcm_extender_forward_traverse_cb cb, void *user_data); 741 742 extern int _bcm_tr3_extender_port_resolve(int unit, 743 bcm_gport_t extender_port_id, 744 bcm_module_t *modid, bcm_port_t *port, 745 bcm_trunk_t *trunk_id, int *id); 746 747 extern int bcm_tr3_extender_egress_add(int unit, 748 bcm_gport_t extender_port, 749 bcm_extender_egress_t *extender_egress); 750 extern int bcm_tr3_extender_egress_delete(int unit, 751 bcm_gport_t extender_port, 752 bcm_extender_egress_t *extender_egress); 753 extern int bcm_tr3_extender_egress_delete_all(int unit, 754 bcm_gport_t extender_port); 755 extern int bcm_tr3_extender_egress_get(int unit, 756 bcm_gport_t extender_port, 757 bcm_extender_egress_t *extender_egress); 758 extern int bcm_tr3_extender_egress_get_all(int unit, 759 bcm_gport_t extender_port, 760 int array_size, 761 bcm_extender_egress_t *extender_egress_array, 762 int *count); 763 extern int bcm_tr3_extender_egress_set(int unit, 764 bcm_gport_t extender_port, 765 int array_size, 766 bcm_extender_egress_t *extender_egress_array); 767 768 extern int bcm_tr3_etag_ethertype_set(int unit, int ethertype); 769 extern int bcm_tr3_etag_ethertype_get(int unit, int *ethertype); 770 771 extern int bcm_tr3_extender_untagged_add(int unit, bcm_vlan_t vlan, int vp, 772 int flags, int *egr_vt_added); 773 extern int bcm_tr3_extender_untagged_delete(int unit, bcm_vlan_t vlan, int vp); 774 extern int bcm_tr3_extender_untagged_get(int unit, bcm_vlan_t vlan, int vp, 775 int *flags); 776 extern int bcm_tr3_extender_port_untagged_vlan_set(int unit, bcm_port_t port, 777 bcm_vlan_t vlan); 778 extern int bcm_tr3_extender_port_untagged_vlan_get(int unit, bcm_port_t port, 779 bcm_vlan_t *vid_ptr); 780 781 #ifndef BCM_SW_STATE_DUMP_DISABLE 782 extern void bcm_tr3_extender_sw_dump(int unit); 783 #endif /* BCM_SW_STATE_DUMP_DISABLE */ 784 785 #endif /* INCLUDE_L3 */ 786 787 #if defined(BCM_FIELD_SUPPORT) 788 #ifdef BCM_HELIX4_SUPPORT 789 extern int _bcm_field_helix4_stage_init(int unit, _field_stage_t *stage_fc); 790 #endif 791 extern int _bcm_field_tr3_stage_init(int unit, _field_stage_t *stage_fc); 792 extern int _bcm_field_tr3_external_present(int unit); 793 extern int _bcm_field_tr3_meter_pool_info(int unit, 794 _field_stage_t *stage_fc, 795 int *num_pools, 796 int *pairs_per_pool, 797 uint16 *pool_size 798 ); 799 extern int _bcm_field_tr3_cntr_pool_info(int unit, 800 _field_stage_t *stage_fc, 801 unsigned *num_pools, 802 unsigned *cntrs_per_pool 803 ); 804 extern int _bcm_field_tr3_slice_enable_set(int unit, 805 _field_stage_t *stage_fc, 806 _field_group_t *fg, 807 _field_slice_t *fs, 808 unsigned endis 809 ); 810 extern int _bcm_field_tr3_slice_clear(int unit, 811 _field_group_t *fg, 812 _field_slice_t *fs 813 ); 814 extern int _bcm_field_tr3_group_qset_update(int unit, _field_group_t *fg); 815 extern int _bcm_field_tr3_group_default_aset_set(int unit, _field_group_t *fg); 816 extern int _bcm_field_tr3_aset_install(int unit, _field_group_t *fg); 817 extern int _bcm_field_tr3_qualify_PacketRes(int unit, 818 bcm_field_entry_t entry, 819 uint32 *data, 820 uint32 *mask 821 ); 822 extern int _bcm_field_tr3_qualify_PacketRes_get(int unit, 823 bcm_field_entry_t entry, 824 uint32 *data, 825 uint32 *mask 826 ); 827 extern int 828 _bcm_field_tr3_qualify_LoopbackType(bcm_field_LoopbackType_t loopback_type, 829 uint32 *tcam_data, 830 uint32 *tcam_mask 831 ); 832 extern int 833 _bcm_field_tr3_qualify_LoopbackType_get(uint8 tcam_data, 834 uint8 tcam_mask, 835 bcm_field_LoopbackType_t *loopback_type 836 ); 837 extern int 838 _bcm_field_tr3_qualify_TunnelType(bcm_field_TunnelType_t tunnel_type, 839 uint32 *tcam_data, 840 uint32 *tcam_mask 841 ); 842 extern int 843 _bcm_field_tr3_qualify_TunnelType_get(uint8 tcam_data, 844 uint8 tcam_mask, 845 bcm_field_TunnelType_t *tunnel_type 846 ); 847 extern int _bcm_field_tr3_qualify_class(int unit, 848 bcm_field_entry_t entry, 849 bcm_field_qualify_t qual, 850 uint32 *data, 851 uint32 *mask 852 ); 853 extern int _bcm_field_tr3_qualify_class_get(int unit, 854 bcm_field_entry_t entry, 855 bcm_field_qualify_t qual, 856 uint32 *data, 857 uint32 *mask 858 ); 859 extern int _bcm_field_tr3_qual_tcam_key_mask_get(int unit, 860 _field_entry_t *f_ent, 861 _field_tcam_t *tcam 862 ); 863 extern int _bcm_field_tr3_qual_tcam_key_mask_set(int unit, 864 _field_entry_t *f_ent, 865 unsigned validf 866 ); 867 extern int _bcm_field_tr3_action_get(int unit, 868 soc_mem_t mem, 869 _field_entry_t *f_ent, 870 int tcam_idx, 871 _field_action_t *fa, 872 uint32 *buf 873 ); 874 extern int _bcm_field_tr3_policer_mode_support(int unit, 875 _field_entry_t *f_ent, 876 int lvl, 877 _field_policer_t *f_pl 878 ); 879 extern int _bcm_field_tr3_policer_action_set(int unit, 880 _field_entry_t *f_ent, 881 soc_mem_t mem, 882 uint32 *buf 883 ); 884 extern int _bcm_field_tr3_stat_hw_mode_get(int unit, _field_stat_t *f_st); 885 extern int _bcm_field_tr3_counter_hw_alloc(int unit, 886 _field_entry_t *f_ent 887 ); 888 extern int 889 _bcm_esw_tr3_ext_stat_flex_detach_ingress_table_counters(int unit, 890 _field_entry_t *f_ent 891 ); 892 extern int _bcm_field_tr3_stat_hw_free(int unit, 893 _field_entry_t *f_ent 894 ); 895 extern int _bcm_field_tr3_stat_action_set(int unit, 896 _field_entry_t *f_ent, 897 soc_mem_t mem, 898 int tcam_idx, 899 uint32 *buf 900 ); 901 extern int _bcm_field_tr3_stat_hw_mode_max(_field_stage_id_t stage_id, 902 int *hw_mode_max 903 ); 904 extern int _bcm_field_tr3_stat_hw_mode_to_bmap(int unit, 905 uint16 mode, 906 _field_stage_id_t stage_id, 907 uint32 *hw_bmap, 908 uint8 *hw_entry_count 909 ); 910 extern int _bcm_field_tr3_counter_mem_get(int unit, 911 _field_stage_t *stage_fc, 912 soc_mem_t *counter_x_mem, 913 soc_mem_t *counter_y_mem 914 ); 915 extern int _bcm_field_tr3_external_policy_mem_get(int unit, 916 _field_action_t *fa, 917 soc_mem_t *mem 918 ); 919 extern int _bcm_field_tr3_external_policy_install(int unit, 920 _field_stage_t *stage_fc, 921 _field_entry_t *f_ent 922 ); 923 extern int _bcm_field_tr3_external_entry_move(int unit, _field_entry_t *f_ent, 924 int index1, int index2); 925 926 extern int _bcm_field_tr3_external_hw_entry_clear(int unit, int slice, int index); 927 928 extern int _bcm_field_tr3_hw_clear(int unit, _field_stage_t *stage_fc); 929 extern int _bcm_field_tr3_init(int unit, _field_control_t *fc); 930 #endif /* BCM_FIELD_SUPPORT */ 931 932 extern int bcm_tr3_cosq_init(int unit); 933 extern void bcm_tr3_cosq_stat_init(int unit); 934 extern int bcm_tr3_cosq_detach(int unit, int software_state_only); 935 936 extern int bcm_tr3_cosq_config_set(int unit, int numq); 937 938 extern int bcm_tr3_cosq_config_get(int unit, int *numq); 939 940 extern int bcm_tr3_cosq_mapping_set(int unit, bcm_port_t gport, 941 bcm_cos_t priority, bcm_cos_queue_t cosq); 942 943 extern int bcm_tr3_cosq_mapping_get(int unit, bcm_port_t gport, 944 bcm_cos_t priority, bcm_cos_queue_t *cosq); 945 946 extern int bcm_tr3_cosq_port_sched_set(int unit, bcm_pbmp_t pbm, 947 int mode, const int *weights, int delay); 948 949 extern int bcm_tr3_cosq_port_sched_get(int unit, bcm_pbmp_t pbm, 950 int *mode, int *weights, int *delay); 951 952 extern int bcm_tr3_cosq_sched_weight_max_get(int unit, int mode, 953 int *weight_max); 954 955 extern int bcm_tr3_cosq_discard_set(int unit, uint32 flags); 956 957 extern int bcm_tr3_cosq_discard_get(int unit, uint32 *flags); 958 959 extern int 960 bcm_tr3_cosq_gport_discard_set(int unit, bcm_gport_t gport, 961 bcm_cos_queue_t cosq, 962 bcm_cosq_gport_discard_t *discard); 963 964 extern int 965 _bcm_tr3_cosq_pfc_class_resolve(bcm_switch_control_t sctype, int *type, 966 int *class); 967 968 extern int 969 bcm_tr3_cosq_port_pfc_op(int unit, bcm_port_t port, 970 bcm_switch_control_t sctype, _bcm_cosq_op_t op, 971 bcm_gport_t *gport, int gport_count); 972 973 extern int 974 bcm_tr3_cosq_port_pfc_get(int unit, bcm_port_t port, 975 bcm_switch_control_t sctype, 976 bcm_gport_t *gport, int gport_count, 977 int *actual_gport_count); 978 979 extern int 980 bcm_tr3_cosq_gport_discard_get(int unit, bcm_gport_t gport, 981 bcm_cos_queue_t cosq, 982 bcm_cosq_gport_discard_t *discard); 983 984 extern int 985 bcm_tr3_cosq_gport_add(int unit, bcm_gport_t port, int numq, uint32 flags, 986 bcm_gport_t *gport,int internal); 987 988 extern int 989 bcm_tr3_cosq_gport_detach(int unit, bcm_gport_t sched_gport, 990 bcm_gport_t input_gport, bcm_cos_queue_t cosq); 991 992 extern int 993 bcm_tr3_cosq_discard_port_get(int unit, bcm_port_t port, 994 bcm_cos_queue_t cosq, uint32 color, int *drop_start, 995 int *drop_slope, int *average_time); 996 997 extern int 998 bcm_tr3_cosq_gport_delete(int unit, bcm_gport_t gport); 999 1000 extern int 1001 bcm_tr3_cosq_gport_get(int unit, bcm_gport_t gport, bcm_gport_t *port, 1002 int *numq, uint32 *flags); 1003 1004 extern int 1005 bcm_tr3_cosq_gport_traverse(int unit, bcm_cosq_gport_traverse_cb cb, 1006 void *user_data); 1007 1008 extern int 1009 bcm_tr3_cosq_discard_port_set(int unit, bcm_port_t port, 1010 bcm_cos_queue_t cosq, 1011 uint32 color, int drop_start, int drop_slope, 1012 int average_time); 1013 1014 extern int 1015 bcm_tr3_cosq_gport_attach(int unit, bcm_gport_t sched_gport, 1016 bcm_gport_t input_gport, bcm_cos_queue_t cosq); 1017 1018 extern int 1019 bcm_tr3_cosq_gport_attach_get(int unit, bcm_gport_t sched_gport, 1020 bcm_gport_t *input_gport, bcm_cos_queue_t *cosq); 1021 1022 extern int 1023 bcm_tr3_cosq_gport_child_get(int unit, bcm_gport_t in_gport, 1024 bcm_cos_queue_t cosq, bcm_gport_t *out_gport); 1025 1026 extern int 1027 bcm_tr3_cosq_port_bandwidth_set(int unit, bcm_port_t port, 1028 bcm_cos_queue_t cosq, 1029 uint32 min_quantum, uint32 max_quantum, 1030 uint32 burst_quantum, uint32 flags); 1031 1032 extern int 1033 bcm_tr3_cosq_port_bandwidth_get(int unit, bcm_port_t port, 1034 bcm_cos_queue_t cosq, 1035 uint32 *min_quantum, uint32 *max_quantum, 1036 uint32 *burst_quantum, uint32 *flags); 1037 1038 extern int 1039 bcm_tr3_cosq_port_pps_set(int unit, bcm_port_t port, bcm_cos_queue_t cosq, 1040 int pps); 1041 1042 extern int 1043 bcm_tr3_cosq_port_pps_get(int unit, bcm_port_t port, bcm_cos_queue_t cosq, 1044 int *pps); 1045 1046 extern int bcm_tr3_cosq_port_burst_set(int unit, bcm_port_t port, 1047 bcm_cos_queue_t cosq, int burst); 1048 1049 extern int 1050 bcm_tr3_cosq_stat_set(int unit, bcm_gport_t port, bcm_cos_queue_t cosq, 1051 bcm_cosq_stat_t stat, uint64 value); 1052 1053 extern int 1054 bcm_tr3_cosq_stat_get(int unit, bcm_port_t port, bcm_cos_queue_t cosq, 1055 bcm_cosq_stat_t stat, int sync_mode, uint64 *value); 1056 1057 extern int 1058 bcm_tr3_cosq_port_burst_get(int unit, bcm_port_t port, bcm_cos_queue_t cosq, 1059 int *burst); 1060 1061 extern int 1062 bcm_tr3_cosq_control_set(int unit, bcm_gport_t gport, bcm_cos_queue_t cosq, 1063 bcm_cosq_control_t type, int arg); 1064 1065 extern int 1066 bcm_tr3_cosq_control_get(int unit, bcm_gport_t gport, bcm_cos_queue_t cosq, 1067 bcm_cosq_control_t type, int *arg); 1068 1069 extern int 1070 bcm_tr3_cosq_gport_bandwidth_burst_set(int unit, bcm_gport_t gport, 1071 bcm_cos_queue_t cosq, 1072 uint32 kbits_burst_min, 1073 uint32 kbits_burst_max); 1074 1075 extern int 1076 bcm_tr3_cosq_gport_bandwidth_burst_get(int unit, bcm_gport_t gport, 1077 bcm_cos_queue_t cosq, 1078 uint32 *kbits_burst_min, 1079 uint32 *kbits_burst_max); 1080 extern int 1081 bcm_tr3_cosq_gport_bandwidth_set(int unit, bcm_gport_t gport, 1082 bcm_cos_queue_t cosq, uint32 kbits_sec_min, 1083 uint32 kbits_sec_max, uint32 flags); 1084 1085 extern int 1086 bcm_tr3_cosq_gport_bandwidth_get(int unit, bcm_gport_t gport, 1087 bcm_cos_queue_t cosq, uint32 *kbits_sec_min, 1088 uint32 *kbits_sec_max, uint32 *flags); 1089 1090 extern int bcm_tr3_cosq_congestion_queue_set(int unit, bcm_port_t port, 1091 bcm_cos_queue_t cosq, int index); 1092 extern int bcm_tr3_cosq_congestion_queue_get(int unit, bcm_port_t port, 1093 bcm_cos_queue_t cosq, int *index); 1094 extern int bcm_tr3_cosq_congestion_quantize_set(int unit, bcm_port_t port, 1095 bcm_cos_queue_t cosq, 1096 int weight_code, int setpoint); 1097 extern int bcm_tr3_cosq_congestion_quantize_get(int unit, bcm_port_t port, 1098 bcm_cos_queue_t cosq, 1099 int *weight_code, 1100 int *setpoint); 1101 extern int bcm_tr3_cosq_congestion_sample_int_set(int unit, bcm_port_t port, 1102 bcm_cos_queue_t cosq, 1103 int min, int max); 1104 extern int bcm_tr3_cosq_congestion_sample_int_get(int unit, bcm_port_t port, 1105 bcm_cos_queue_t cosq, 1106 int *min, int *max); 1107 extern int bcm_tr3_cosq_drop_status_enable_set(int unit, bcm_port_t port, 1108 int enable); 1109 extern int _bcm_tr3_get_def_qbase(int unit, bcm_port_t inport, int qtype, 1110 int *pbase, int *pnumq); 1111 1112 extern int bcm_tr3_cosq_gport_sched_set(int unit, bcm_gport_t gport, 1113 bcm_cos_queue_t cosq, int mode, 1114 int weight); 1115 extern int bcm_tr3_cosq_gport_sched_get(int unit, bcm_gport_t gport, 1116 bcm_cos_queue_t cosq, int *mode, 1117 int *weight); 1118 extern int 1119 _bcm_tr3_cosq_port_resolve(int unit, bcm_gport_t gport, bcm_module_t *modid, 1120 bcm_port_t *port, bcm_trunk_t *trunk_id, int *id, 1121 int *qnum); 1122 1123 1124 extern int 1125 bcm_tr3_cosq_gport_congestion_config_set(int unit, bcm_gport_t port, 1126 bcm_cos_queue_t cosq, 1127 bcm_cosq_congestion_info_t *config); 1128 1129 extern int 1130 bcm_tr3_cosq_gport_congestion_config_get(int unit, bcm_gport_t port, 1131 bcm_cos_queue_t cosq, 1132 bcm_cosq_congestion_info_t *config); 1133 /* Routines to program IFP_COS_MAP table. */ 1134 extern int 1135 bcm_tr3_cosq_field_classifier_id_create(int unit, 1136 bcm_cosq_classifier_t *classifier, 1137 int *classifier_id); 1138 extern int 1139 bcm_tr3_cosq_field_classifier_map_set(int unit, 1140 int classifier_id, 1141 int array_count, 1142 bcm_cos_t *priority_array, 1143 bcm_cos_queue_t *cosq_array); 1144 extern int 1145 bcm_tr3_cosq_field_classifier_map_get(int unit, 1146 int classifier_id, 1147 int array_max, 1148 bcm_cos_t *priority_array, 1149 bcm_cos_queue_t *cosq_array, 1150 int *array_count); 1151 extern int 1152 bcm_tr3_cosq_field_classifier_map_clear(int unit, int classifier_id); 1153 1154 extern int 1155 bcm_tr3_cosq_field_classifier_id_destroy(int unit, int classifier_id); 1156 1157 extern int 1158 bcm_tr3_cosq_field_classifier_get(int unit, int classifier_id, 1159 bcm_cosq_classifier_t *classifier); 1160 extern int 1161 bcm_tr3_cosq_service_classifier_id_create(int unit, 1162 bcm_cosq_classifier_t *classifier, 1163 int *classifier_id); 1164 1165 extern int 1166 bcm_tr3_cosq_service_classifier_id_destroy(int unit, 1167 int classifier_id); 1168 1169 extern int 1170 bcm_tr3_cosq_service_classifier_get(int unit, 1171 int classifier_id, 1172 bcm_cosq_classifier_t *classifier); 1173 1174 extern int 1175 bcm_tr3_cosq_service_map_set(int unit, bcm_port_t port, 1176 int classifier_id, 1177 bcm_gport_t queue_group, 1178 int array_count, 1179 bcm_cos_t *priority_array, 1180 bcm_cos_queue_t *cosq_array); 1181 1182 extern int 1183 bcm_tr3_cosq_service_map_get(int unit, bcm_port_t port, 1184 int classifier_id, 1185 bcm_gport_t *queue_group, 1186 int array_max, 1187 bcm_cos_t *priority_array, 1188 bcm_cos_queue_t *cosq_array, 1189 int *array_count); 1190 1191 extern int 1192 bcm_tr3_cosq_service_map_clear(int unit, 1193 bcm_gport_t port, 1194 int classifier_id); 1195 1196 extern int 1197 bcm_tr3_cosq_classifier_id_get(int unit, 1198 bcm_cosq_classifier_t *classifier, 1199 int array_count, 1200 bcm_cos_t *priority_array, 1201 bcm_cos_queue_t *cosq_array, 1202 int *classifier_id); 1203 1204 extern int 1205 bcm_tr3_cosq_cpu_cosq_enable_set( 1206 int unit, 1207 bcm_cos_queue_t cosq, 1208 int enable); 1209 1210 extern int 1211 bcm_tr3_cosq_cpu_cosq_enable_get( 1212 int unit, 1213 bcm_cos_queue_t cosq, 1214 int *enable); 1215 1216 typedef enum { 1217 _BCM_TR3_COSQ_INDEX_STYLE_BUCKET, 1218 _BCM_TR3_COSQ_INDEX_STYLE_QCN, 1219 _BCM_TR3_COSQ_INDEX_STYLE_WRED, 1220 _BCM_TR3_COSQ_INDEX_STYLE_WRED_PORT, 1221 _BCM_TR3_COSQ_INDEX_STYLE_SCHEDULER, 1222 _BCM_TR3_COSQ_INDEX_STYLE_UCAST_DROP, 1223 _BCM_TR3_COSQ_INDEX_STYLE_COS, 1224 _BCM_TR3_COSQ_INDEX_STYLE_UCAST_QUEUE, 1225 _BCM_TR3_COSQ_INDEX_STYLE_MCAST_QUEUE, 1226 _BCM_TR3_COSQ_INDEX_STYLE_EXT_UCAST_QUEUE, 1227 _BCM_TR3_COSQ_INDEX_STYLE_EGR_POOL, 1228 _BCM_TR3_COSQ_INDEX_STYLE_EGR_PERQ_UCAST, 1229 _BCM_TR3_COSQ_INDEX_STYLE_EGR_PERQ_MCAST, 1230 _BCM_TR3_COSQ_INDEX_STYLE_UC_EGR_POOL, 1231 _BCM_TR3_COSQ_INDEX_STYLE_COUNT 1232 } _bcm_tr3_cosq_index_style_t; 1233 1234 extern int 1235 _bcm_tr3_cosq_index_resolve(int unit, bcm_port_t port, bcm_cos_queue_t cosq, 1236 _bcm_tr3_cosq_index_style_t style, 1237 bcm_port_t *local_port, int *index, int *count); 1238 1239 extern int 1240 bcm_tr3_switch_qcn_mac_set(int unit, bcm_switch_control_t type, 1241 soc_mem_t mem,soc_field_t field, void* entry, 1242 uint32 mac_field); 1243 1244 extern int 1245 bcm_tr3_switch_qcn_mac_get(int unit, bcm_switch_control_t type, 1246 soc_mem_t mem,soc_field_t field, void* entry, 1247 uint32 *mac_field); 1248 /* Cross Connect */ 1249 extern int 1250 bcm_tr3_l2_cross_connect_add(int unit, bcm_vlan_t outer_vlan, 1251 bcm_vlan_t inner_vlan, bcm_gport_t port_1, 1252 bcm_gport_t port_2); 1253 extern int 1254 bcm_tr3_l2_cross_connect_delete(int unit, bcm_vlan_t outer_vlan, 1255 bcm_vlan_t inner_vlan); 1256 1257 extern int 1258 bcm_tr3_l2_cross_connect_delete_all(int unit); 1259 1260 extern int 1261 bcm_tr3_l2_cross_connect_traverse(int unit, 1262 bcm_vlan_cross_connect_traverse_cb cb, 1263 void *user_data); 1264 1265 1266 extern int 1267 bcm_tr3_cosq_bst_profile_set(int unit, 1268 bcm_gport_t gport, 1269 bcm_cos_queue_t cosq, 1270 bcm_bst_stat_id_t bid, 1271 bcm_cosq_bst_profile_t *profile); 1272 1273 extern int 1274 bcm_tr3_cosq_bst_profile_get(int unit, 1275 bcm_gport_t gport, 1276 bcm_cos_queue_t cosq, 1277 bcm_bst_stat_id_t bid, 1278 bcm_cosq_bst_profile_t *profile); 1279 1280 extern int 1281 bcm_tr3_cosq_bst_stat_get(int unit, 1282 bcm_gport_t gport, 1283 bcm_cos_queue_t cosq, 1284 bcm_bst_stat_id_t bid, 1285 uint32 options, 1286 uint64 *value); 1287 extern int 1288 bcm_tr3_cosq_bst_stat_multi_get(int unit, 1289 bcm_gport_t gport, 1290 bcm_cos_queue_t cosq, 1291 uint32 options, 1292 int max_values, 1293 bcm_bst_stat_id_t *id_list, 1294 uint64 *values); 1295 extern int 1296 bcm_tr3_cosq_bst_stat_clear(int unit, 1297 bcm_gport_t gport, 1298 bcm_cos_queue_t cosq, 1299 bcm_bst_stat_id_t bid); 1300 1301 extern int bcm_tr3_cosq_bst_stat_sync(int unit, bcm_bst_stat_id_t bid); 1302 1303 extern int 1304 bcm_tr3_cosq_gport_mapping_set(int unit, bcm_port_t ing_port, 1305 bcm_cos_t int_pri, uint32 flags, 1306 bcm_gport_t gport, bcm_cos_queue_t cosq); 1307 1308 extern int 1309 bcm_tr3_cosq_gport_mapping_get(int unit, bcm_port_t ing_port, 1310 bcm_cos_t int_pri, uint32 flags, 1311 bcm_gport_t *gport, bcm_cos_queue_t *cosq); 1312 1313 extern int bcm_tr3_cosq_sync(int unit); 1314 extern void bcm_tr3_cosq_sw_dump(int unit); 1315 1316 extern int bcm_tr3_oam_init(int unit); 1317 1318 extern int bcm_tr3_oam_detach(int unit); 1319 1320 extern int bcm_tr3_oam_group_create(int unit, bcm_oam_group_info_t *group_info); 1321 1322 extern int bcm_tr3_oam_group_get(int unit, bcm_oam_group_t group, 1323 bcm_oam_group_info_t *group_info); 1324 1325 extern int bcm_tr3_oam_group_destroy(int unit, bcm_oam_group_t group); 1326 1327 extern int bcm_tr3_oam_group_destroy_all(int unit); 1328 1329 extern int bcm_tr3_oam_group_traverse(int unit, bcm_oam_group_traverse_cb cb, 1330 void *user_data); 1331 1332 extern int bcm_tr3_oam_endpoint_create(int unit, 1333 bcm_oam_endpoint_info_t *endpoint_info); 1334 1335 extern int bcm_tr3_oam_endpoint_get(int unit, bcm_oam_endpoint_t endpoint, 1336 bcm_oam_endpoint_info_t *endpoint_info); 1337 1338 extern int bcm_tr3_oam_endpoint_destroy(int unit, bcm_oam_endpoint_t endpoint); 1339 1340 extern int bcm_tr3_oam_endpoint_destroy_all(int unit, bcm_oam_group_t group); 1341 1342 extern int bcm_tr3_oam_endpoint_traverse(int unit, bcm_oam_group_t group, 1343 bcm_oam_endpoint_traverse_cb cb, 1344 void *user_data); 1345 1346 extern int bcm_tr3_oam_event_register(int unit, bcm_oam_event_types_t event_types, 1347 bcm_oam_event_cb cb, void *user_data); 1348 1349 extern int bcm_tr3_oam_event_unregister(int unit, bcm_oam_event_types_t event_types, 1350 bcm_oam_event_cb cb); 1351 1352 extern int bcm_tr3_port_esm_eligible_set(int unit, bcm_port_t port, int value); 1353 extern int bcm_tr3_port_esm_eligible_get(int unit, bcm_port_t port, int *value); 1354 extern int bcm_tr3_port_extender_type_set(int unit, bcm_port_t port, 1355 int value); 1356 extern int bcm_tr3_port_extender_type_get(int unit, bcm_port_t port, 1357 int *value); 1358 #if defined(INCLUDE_L3) 1359 extern int bcm_tr3_port_etag_pcp_de_source_set(int unit, bcm_port_t port, 1360 int value); 1361 extern int bcm_tr3_port_etag_pcp_de_source_get(int unit, bcm_port_t port, 1362 int *value); 1363 #endif 1364 1365 extern int bcm_tr3_port_ibod_sync_recovery(int unit, bcm_pbmp_t pbmp); 1366 1367 extern int bcm_tr3_port_pps_rate_egress_set(int unit, bcm_port_t port, 1368 uint32 pps, uint32 burst); 1369 1370 extern int bcm_tr3_port_pps_rate_egress_get(int unit, bcm_port_t port, 1371 uint32 *pps, uint32 *burst); 1372 1373 extern int 1374 bcm_tr3_port_rate_egress_set(int unit, bcm_port_t port, 1375 uint32 kbits_sec, uint32 kbits_burst, uint32 mode); 1376 1377 extern int 1378 bcm_tr3_port_rate_egress_get(int unit, bcm_port_t port, 1379 uint32 *kbits_sec, uint32 *kbits_burst, uint32 *mode); 1380 1381 #if defined(INCLUDE_BHH) 1382 extern int bcm_tr3_oam_loopback_add(int unit, bcm_oam_loopback_t *loopback_p); 1383 extern int bcm_tr3_oam_loopback_get(int unit, bcm_oam_loopback_t *loopback_p); 1384 extern int bcm_tr3_oam_loopback_delete(int unit, bcm_oam_loopback_t *loopback_p); 1385 extern int bcm_tr3_oam_loss_add( int unit, bcm_oam_loss_t *loss_ptr); 1386 extern int bcm_tr3_oam_loss_delete( int unit, bcm_oam_loss_t *loss_ptr); 1387 extern int bcm_tr3_oam_loss_get( int unit, bcm_oam_loss_t *loss_ptr); 1388 extern int bcm_tr3_oam_delay_add( int unit, bcm_oam_delay_t *delay_ptr); 1389 extern int bcm_tr3_oam_delay_delete( int unit, bcm_oam_delay_t *delay_ptr); 1390 extern int bcm_tr3_oam_delay_get( int unit, bcm_oam_delay_t *delay_ptr); 1391 extern int bcm_tr3_oam_csf_add(int unit, bcm_oam_csf_t *csf_ptr); 1392 extern int bcm_tr3_oam_csf_delete(int unit, bcm_oam_csf_t *csf_ptr); 1393 extern int bcm_tr3_oam_csf_get(int unit, bcm_oam_csf_t *csf_ptr); 1394 extern int bcm_tr3_oam_endpoint_faults_multi_get( int unit, uint32 flags, 1395 bcm_oam_protocol_type_t endpoint_protocol, 1396 uint32 max_endpoints, bcm_oam_endpoint_fault_t *faults, 1397 uint32 *endpoint_count); 1398 extern int bcm_tr3_oam_trunk_ports_add(int unit, bcm_gport_t trunk_gport, 1399 int max_ports, bcm_gport_t *port_arr); 1400 extern int bcm_tr3_oam_trunk_ports_delete(int unit, bcm_gport_t trunk_gport, 1401 int max_ports, bcm_gport_t *port_arr); 1402 extern int bcm_tr3_oam_trunk_ports_get(int unit, bcm_gport_t trunk_gport, 1403 int max_ports, bcm_gport_t *port_arr, 1404 int *port_count); 1405 extern int bcm_tr3_oam_mpls_tp_channel_type_tx_set(int unit, 1406 bcm_oam_mpls_tp_channel_type_t channel_type, 1407 int value); 1408 extern int bcm_tr3_oam_mpls_tp_channel_type_tx_get(int unit, 1409 bcm_oam_mpls_tp_channel_type_t channel_type, 1410 int *value); 1411 #endif /* INCLUDE_BHH */ 1412 1413 /* BHH API */ 1414 1415 #ifdef BCM_WARM_BOOT_SUPPORT /* BCM_WARM_BOOT_SUPPORT */ 1416 extern int _bcm_tr3_oam_sync(int unit); 1417 #endif /* !BCM_WARM_BOOT_SUPPORT */ 1418 1419 #ifdef BCM_WARM_BOOT_SUPPORT_SW_DUMP /* BCM_WARM_BOOT_SUPPORT_SW_DUMP*/ 1420 extern void _bcm_tr3_oam_sw_dump(int unit); 1421 #endif /* !BCM_WARM_BOOT_SUPPORT_SW_DUMP */ 1422 1423 #if defined(INCLUDE_L3) 1424 extern int 1425 _bcm_tr3_mpls_tunnel_switch_frr_entry_key_get(int unit, 1426 soc_tunnel_term_t *tnl_entry, 1427 bcm_mpls_tunnel_switch_t *info); 1428 extern int 1429 _bcm_tr3_mpls_tunnel_switch_frr_set(int unit, bcm_mpls_tunnel_switch_t *info); 1430 1431 extern void 1432 _bcm_tr3_mpls_tunnel_switch_frr_parse(int unit, soc_tunnel_term_t *tnl_entry, 1433 bcm_mpls_tunnel_switch_t *tnl_info); 1434 1435 extern int 1436 _bcm_tr3_mpls_tunnel_switch_frr_delete(int unit, 1437 bcm_mpls_tunnel_switch_t *tnl_info); 1438 1439 extern int 1440 _bcm_tr3_mpls_tunnel_switch_frr_get(int unit, 1441 bcm_mpls_tunnel_switch_t *tnl_info, int *index); 1442 #endif 1443 extern int bcm_tr3_port_drain_cells(int unit, int port); 1444 extern int 1445 _bcm_tr3_port_enqueue_set(int unit, bcm_port_t gport, 1446 int enable); 1447 extern int 1448 _bcm_tr3_port_tx_set(int unit, bcm_port_t gport, int enable); 1449 1450 extern int 1451 _bcm_tr3_port_enqueue_get(int unit, bcm_port_t gport, 1452 int *enable); 1453 1454 extern int bcm_tr3_bfd_l2_hash_dynamic_replace(int unit, void *l2x_entry); 1455 extern int _bcm_tr3_l2gre_vpn_is_valid( int unit, bcm_vpn_t l2vpn); 1456 extern int 1457 bcm_tr3_cosq_pfc_class_mapping_set(int unit, 1458 bcm_gport_t port, 1459 int array_count, 1460 bcm_cosq_pfc_class_mapping_t *mapping_array); 1461 extern int 1462 bcm_tr3_cosq_pfc_class_mapping_get(int unit, 1463 bcm_gport_t port, 1464 int array_max, 1465 bcm_cosq_pfc_class_mapping_t *mapping_array, 1466 int *array_count); 1467 int 1468 _soc_tr3_cosq_axp_node_validate(int unit, int local_port, int level, 1469 int to_cos); 1470 1471 int 1472 _bcm_tr3_l2_hash_pending_override(int unit, _bcm_tr3_l2_entries_t *l2_entries); 1473 #endif /* BCM_TRIUMPH3_SUPPORT */ 1474 1475 #endif /* !_BCM_INT_TRIUMPH3_H_ */