tomahawk3.h (42575B)
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 * 7 * File: tomahawk3.h 8 * Purpose: Function declarations for Tomahawk3 Internal functions. 9 */ 10 11 #ifndef _BCM_INT_TOMAHAWK3_H_ 12 #define _BCM_INT_TOMAHAWK3_H_ 13 14 #include <soc/defs.h> 15 #include <soc/mem.h> 16 #include <soc/mcm/memregs.h> 17 #include <bcm/types.h> 18 #include <bcm/oob.h> 19 #include <soc/esw/port.h> 20 #include <bcm_int/esw/l2.h> 21 #include <bcm_int/esw/trx.h> 22 #include <bcm_int/esw/field.h> 23 #include <bcm_int/tomahawk3_dispatch.h> 24 #include <soc/tnl_term.h> 25 #include <bcm_int/esw/mpls.h> 26 27 #if defined(BCM_TOMAHAWK3_SUPPORT) 28 #include <soc/tomahawk3.h> 29 30 #define _BCM_TH3_PORT_RATE_MIN_KILOBITS 32 31 #define _BCM_TH3_PORT_RATE_MAX_KILOBITS 400*1000*1000 32 33 extern int _th3_l2_init[BCM_MAX_NUM_UNITS]; 34 /* 35 * Define: 36 * TH3_L2_INIT 37 * Purpose: 38 * Causes a routine to return BCM_E_INIT (or some other 39 * error) if L2 software module is not yet initialized. 40 */ 41 #define TH3_L2_INIT(unit) do { \ 42 if (_th3_l2_init[unit] < 0) return _th3_l2_init[unit]; \ 43 if (_th3_l2_init[unit] == 0) return BCM_E_INIT; \ 44 } while (0); 45 46 extern int bcm_th3_l2_init(int unit); 47 extern int bcm_th3_l2_term(int unit); 48 extern int bcm_th3_l2_station_add(int unit, int *station_id, 49 bcm_l2_station_t *station); 50 extern int bcm_th3_l2_station_get(int unit, int station_id, 51 bcm_l2_station_t *station); 52 extern int bcm_th3_l2_station_delete(int unit, int station_id); 53 extern int bcm_th3_l2_station_delete_all(int unit); 54 extern int bcm_th3_l2_learn_start(int unit, int cfg_interval); 55 extern int _bcm_l2_match_ctrl_init(int unit); 56 extern void _bcm_l2_match_ctrl_deinit(int unit); 57 extern int _bcm_th3_l2_station_control_init(int unit); 58 extern int _bcm_th3_l2_station_control_deinit(int unit); 59 extern int _bcm_th3_l2_station_control_get(int unit, 60 _bcm_l2_station_control_t **sc); 61 extern int bcm_th3_l2_station_size_get(int unit, int *size); 62 extern int bcm_th3_l2_station_traverse(int unit, 63 bcm_l2_station_traverse_cb trav_fn, 64 void *user_data); 65 extern int _bcm_th3_l2_station_entry_get(int unit, int sid, 66 _bcm_l2_station_entry_t **ent_p); 67 extern int _bcm_th3_l2_station_reload(int unit); 68 extern int _bcm_th3_l2_station_entry_last_sid_set(int unit, int overlay, int sid); 69 extern int bcm_th3_l2_cache_init(int unit); 70 extern int bcm_th3_l2_addr_add(int unit, bcm_l2_addr_t *l2addr); 71 extern int _bcm_th3_l2_hash_dynamic_replace(int unit, l2x_entry_t *l2x_entry); 72 extern int bcm_th3_l2_addr_delete(int unit, bcm_mac_t mac, bcm_vlan_t vid); 73 extern int _bcm_th3_l2_addr_get(int unit, sal_mac_addr_t mac, bcm_vlan_t vid, 74 int check_l2_only, bcm_l2_addr_t *l2addr); 75 extern int bcm_th3_l2_conflict_get(int unit, bcm_l2_addr_t *addr, 76 bcm_l2_addr_t *cf_array, int cf_max, int *cf_count); 77 extern int bcm_th3_l2_addr_get(int unit, sal_mac_addr_t mac, bcm_vlan_t vid, 78 bcm_l2_addr_t *l2addr); 79 extern int _bcm_th3_l2_to_l2x(int unit, l2x_entry_t *l2x_entry, 80 bcm_l2_addr_t *l2addr, int key_only); 81 extern int _bcm_th3_l2_gport_parse(int unit, bcm_l2_addr_t *l2addr, 82 _bcm_l2_gport_params_t *params); 83 extern int _bcm_th3_l2_from_l2x(int unit, bcm_l2_addr_t *l2addr, 84 l2x_entry_t *l2x_entry); 85 extern int bcm_th3_mcast_addr_add(int unit, bcm_mcast_addr_t *mcaddr); 86 extern int bcm_th3_mcast_addr_remove(int unit, sal_mac_addr_t mac, 87 bcm_vlan_t vid); 88 extern int bcm_th3_mcast_port_get(int unit, sal_mac_addr_t mac, bcm_vlan_t vid, 89 bcm_mcast_addr_t *mcaddr); 90 extern int bcm_th3_mcast_init(int unit); 91 extern int _bcm_th3_mcast_detach(int unit); 92 extern int bcm_th3_mcast_addr_add_w_l2mcindex(int unit, 93 bcm_mcast_addr_t *mcaddr); 94 extern int bcm_th3_mcast_addr_remove_w_l2mcindex(int unit, 95 bcm_mcast_addr_t *mcaddr); 96 extern int bcm_th3_mcast_port_add(int unit, bcm_mcast_addr_t *mcaddr); 97 extern int bcm_th3_mcast_port_remove(int unit, bcm_mcast_addr_t *mcaddr); 98 extern void _bcm_th3_l2_register_callback(int unit, 99 int pflags, 100 l2x_entry_t *entry_del, 101 l2x_entry_t *entry_add, 102 void *fn_data); 103 extern int _bcm_th3_l2_cross_connect_add( 104 int unit, bcm_vlan_t outer_vlan, uint8 *destt, int *destv); 105 #if defined(BCM_WARM_BOOT_SUPPORT) 106 extern int _bcm_th3_l2_wb_sync(int unit); 107 extern int _bcm_th3_l2_cross_connect_entry_add_all(int unit); 108 #endif 109 #ifdef BCM_WARM_BOOT_SUPPORT_SW_DUMP 110 extern void _bcm_th3_l2_sw_dump(int unit); 111 #endif /* BCM_WARM_BOOT_SUPPORT_SW_DUMP */ 112 113 extern int bcmi_th3_port_fn_drv_init(int unit); 114 extern int bcmi_th3_port_soc_resource_init(int unit, int nport, 115 bcm_port_resource_t *resource, 116 soc_port_resource_t *soc_resource); 117 extern int bcmi_th3_port_resource_validate(int unit, 118 soc_port_schedule_state_t *port_schedule_state); 119 extern int bcmi_th3_pre_flexport_tdm(int unit, 120 soc_port_schedule_state_t *port_schedule_state); 121 extern int bcmi_th3_post_flexport_tdm(int unit, 122 soc_port_schedule_state_t *port_schedule_state); 123 extern int bcmi_th3_cdport_update(int unit, 124 soc_port_schedule_state_t *port_schedule_state); 125 extern int bcmi_th3_port_attach_mmu(int unit, int port); 126 extern int bcmi_th3_port_detach_asf(int unit, bcm_port_t port); 127 extern int bcmi_th3_port_enable(int unit, 128 soc_port_schedule_state_t *port_schedule_state); 129 extern int bcmi_th3_port_disable(int unit, 130 soc_port_schedule_state_t *port_schedule_state); 131 extern int bcmi_th3_port_speed_1g_update(int unit, bcm_port_t port, int speed); 132 extern int bcmi_th3_speed_ability_get(int unit, bcm_port_t port, 133 bcm_port_abil_t *mask); 134 extern int bcmi_th3_tsc_xgxs_reset(int unit, pbmp_t pbmp); 135 136 /* FIELD */ 137 #if defined(BCM_FIELD_SUPPORT) 138 extern int _bcm_field_th3_common_actions_init(int unit, 139 _field_stage_t *stage_fc); 140 extern int _bcm_field_th3_extractors_init(int unit, _field_stage_t *stage_fc); 141 extern int _bcm_field_th3_qualifiers_init(int unit, _field_stage_t *stage_fc); 142 extern int 143 _bcm_field_th3_keygen_profile1_entry_pack(int unit, _field_stage_t *stage_fc, 144 _field_group_t *fg, int part, soc_mem_t mem, 145 ifp_key_gen_program_profile_entry_t *prof1_entry); 146 extern int 147 _bcm_field_th3_keygen_em_profile_entry_pack(int unit, _field_stage_t *stage_fc, 148 _field_group_t *fg, int part, soc_mem_t mem, 149 exact_match_key_gen_program_profile_entry_t *prof_entry); 150 extern int 151 _field_th3_presel_qualifiers_init(int unit, _field_stage_t *stage_fc); 152 153 extern int 154 _bcm_field_th3_udf_chunks_to_int_qset(int unit, uint32 udf_chunks_bmap, 155 bcm_field_qset_t *qset); 156 extern int 157 _field_th3_qualify_IpFrag_get(int unit, bcm_field_entry_t entry, 158 bcm_field_qualify_t qual_id, 159 bcm_field_IpFrag_t *frag_info); 160 extern int 161 _field_th3_qualify_IpFrag(int unit, bcm_field_entry_t entry, 162 bcm_field_qualify_t qual_id, 163 bcm_field_IpFrag_t frag_info); 164 extern int 165 _bcm_field_th3_redirect_profile_get(int unit, 166 soc_profile_mem_t **redirect_profile); 167 extern int 168 _bcm_field_th3_redirect_profile_ref_count_get(int unit, 169 int index, 170 int *ref_count); 171 extern int 172 _bcm_field_th3_redirect_profile_delete(int unit, int index); 173 174 extern int 175 _bcm_field_th3_qual_class_size_get(int unit, bcm_field_qualify_t qual, 176 uint16 *class_size); 177 extern int 178 _field_th3_class_ctype_supported(int unit, 179 _field_class_type_t ctype); 180 extern int 181 _bcm_field_th3_internal_em_group_create(int unit, 182 _field_control_t *fc); 183 extern int 184 _bcm_field_th3_em_udf_keygen_mask_get(int unit, 185 _field_group_t *fg, 186 uint16 qid, uint32 *mask); 187 188 #endif 189 190 /* VLAN */ 191 #define BCM_TH3_EGR_ACTION_PROFILE_DEFAULT \ 192 BCM_TRX_EGR_VLAN_ACTION_PROFILE_DEFAULT 193 194 /* VLAN Port Bitmap Profile Mgmt function declarations */ 195 extern int bcm_tomahawk3_vlan_detach(int unit); 196 extern int bcm_th3_vlan_port_add( 197 int unit, bcm_vlan_t vid, pbmp_t pbmp, pbmp_t ubmp, pbmp_t ing_pbmp); 198 extern int bcm_th3_vlan_port_remove( 199 int unit, bcm_vlan_t vid, pbmp_t pbmp, pbmp_t ubmp, pbmp_t ing_pbmp); 200 extern int _bcm_th3_vlan_pbmp_profile_init(int unit); 201 extern int _bcm_th3_vlan_pbmp_profile_destroy(int unit); 202 extern int _bcm_th3_vlan_pbmp_profile_entry_add( 203 int unit, bcm_pbmp_t port_bitmap, uint32 *index); 204 extern int _bcm_th3_vlan_pbmp_profile_entry_delete(int unit, uint32 index); 205 extern int _bcm_th3_vlan_pbmp_profile_entry_get( 206 int unit, uint32 index, bcm_pbmp_t *pbmp); 207 extern int _bcm_th3_vlan_pbmp_index_get( 208 int unit, bcm_vlan_t vlan_id, uint32 *index); 209 extern int _bcm_th3_vlan_pbmp_index_set( 210 int unit, bcm_vlan_t vlan_id, uint32 index); 211 extern int _bcm_th3_vlan_pbmp_port_add( 212 int unit, void *entry, bcm_pbmp_t *pbmp); 213 extern int _bcm_th3_vlan_pbmp_port_remove( 214 int unit, void *entry, bcm_pbmp_t *pbmp); 215 extern int _bcm_th3_vlan_action_profile_init(int unit); 216 extern int _bcm_th3_vlan_action_profile_detach(int unit); 217 extern int _bcm_th3_ing_vlan_action_profile_entry_add(int unit, 218 bcm_vlan_action_set_t *action, 219 int *index); 220 extern void _bcm_th3_ing_vlan_action_profile_entry_get(int unit, 221 bcm_vlan_action_set_t *action, 222 int index); 223 extern int _bcm_th3_ing_vlan_action_profile_entry_delete( 224 int unit, uint32 index); 225 extern int _bcm_th3_egr_vlan_action_profile_entry_add(int unit, 226 bcm_vlan_action_set_t *action, 227 int *index); 228 extern void _bcm_th3_egr_vlan_action_profile_entry_get(int unit, 229 bcm_vlan_action_set_t *action, 230 uint32 index); 231 extern int _bcm_th3_egr_vlan_action_profile_entry_delete( 232 int unit, uint32 index); 233 extern void _bcm_th3_egr_vlan_action_profile_entry_increment( 234 int unit, uint32 index); 235 extern int _bcm_th3_vlan_port_egress_default_action_set(int unit, 236 bcm_port_t port, bcm_vlan_action_set_t *action); 237 extern int _bcm_th3_vlan_port_egress_default_action_get(int unit, 238 bcm_port_t port, bcm_vlan_action_set_t *action); 239 extern int _bcm_th3_vlan_port_egress_default_action_delete( 240 int unit, bcm_port_t port); 241 extern int _bcm_th3_vlan_port_default_action_set(int unit, 242 bcm_port_t port, bcm_vlan_action_set_t *action); 243 extern int _bcm_th3_vlan_port_default_action_get(int unit, 244 bcm_port_t port, bcm_vlan_action_set_t *action); 245 extern int _bcm_th3_vlan_port_default_action_delete(int unit, bcm_port_t port); 246 extern int _bcm_th3_vlan_xconnect_db_init(int unit); 247 extern int _bcm_th3_vlan_xconnect_db_destroy(int unit); 248 extern int _bcm_th3_vlan_xconnect_db_entry_add( 249 int unit, bcm_vlan_t ovlan, uint8 *destt, int *destv); 250 extern int _bcm_th3_vlan_xconnect_db_entry_delete(int unit, bcm_vlan_t ovlan); 251 extern int _bcm_th3_vlan_xconnect_db_entry_delete_all(int unit); 252 extern int _bcm_th3_vlan_xconnect_traverse( 253 int unit, bcm_vlan_cross_connect_traverse_cb cb, void *user_data); 254 #if defined(BCM_WARM_BOOT_SUPPORT) 255 extern int _bcm_th3_vlan_sync(int unit); 256 extern int bcm_th3_cosq_sync(int unit); 257 extern int _bcm_th3_vlan_xconnect_db_reinit(int unit); 258 #endif /* BCM_WARM_BOOT_SUPPORT */ 259 #ifndef BCM_SW_STATE_DUMP_DISABLE 260 extern void _bcm_th3_vlan_sw_tag_action_profile_dump(int unit); 261 #endif /* BCM_SW_STATE_DUMP_DISABLE */ 262 263 /* L3 */ 264 #ifdef INCLUDE_L3 265 #define BCM_TH3_L3_ECMP_WEIGHTED_MAX_PATHS (4096) 266 #define BCM_TH3_L3_ECMP_NON_WEIGHTED_MAX_PATHS (128) 267 #define BCM_TH3_L3_ECMP_MAX_DLB_GROUPS (128) 268 #define BCM_TH3_L3_ECMP_DLB_MAX_PATHS (64) 269 270 /* When MAX_ECMP_MODE is configured, 2 entries are used up 271 for each ECMP group, so need to reserve enough space in this 272 mode by reserving 2 entries for each group */ 273 274 #define BCM_TH3_L3_ECMP_DLB_START(_unit) \ 275 ((soc_mem_index_count(unit, L3_ECMP_COUNTm)) - \ 276 BCM_TH3_L3_ECMP_MAX_DLB_GROUPS) 277 278 #define BCM_TH3_L3_ECMP_DLB_END(_unit) \ 279 (soc_mem_index_max(unit, L3_ECMP_COUNTm)) 280 281 /* ECMP LB mode encodings match hardware values */ 282 #define BCM_TH3_L3_ECMP_LB_MODE_WEIGHTED_256 0x3 283 #define BCM_TH3_L3_ECMP_LB_MODE_WEIGHTED_512 0x4 284 #define BCM_TH3_L3_ECMP_LB_MODE_WEIGHTED_1024 0x5 285 #define BCM_TH3_L3_ECMP_LB_MODE_WEIGHTED_2048 0x6 286 #define BCM_TH3_L3_ECMP_LB_MODE_WEIGHTED_4096 0x7 287 288 extern int _bcm_th3_l3_ecmp_dlb_get_id(int unit, int ecmp_grp_idx); 289 290 extern int _bcm_th3_l3_egress_ecmp_dlb_resource_validate(int unit, 291 bcm_l3_egress_ecmp_t *ecmp, int dlb_id); 292 293 extern int 294 _bcm_th3_l3_ecmp_dlb_port_member_set(int unit, int *port_array, int primary_count, 295 int unique_intfs, int dlb_id); 296 297 extern int 298 _bcm_th3_l3_ecmp_dlb_nhi_member_set(int unit, int *intf_array, int primary_count, 299 int unique_intfs, int dlb_id); 300 301 extern int 302 _bcm_th3_l3_ecmp_dlb_port_get(int unit, bcm_l3_egress_ecmp_t *ecmp, 303 int dlb_id, int primary_count, int intf_count, 304 bcm_if_t *intf_array, int *port_array); 305 306 extern int 307 _bcm_th3_l3_ecmp_dlb_scaling_factor_encode(int unit, int scaling_factor, 308 int *scaling_factor_hw); 309 310 extern int 311 _bcm_th3_l3_ecmp_dlb_scaling_factor_decode(int unit, int scaling_factor_hw, 312 int *scaling_factor); 313 314 extern int 315 _bcm_th3_ecmp_dlb_member_recover(int unit); 316 317 extern int 318 bcm_th3_l3_ecmp_dlb_mon_config_set(int unit, 319 bcm_if_t ecmp_intf, 320 bcm_l3_ecmp_dlb_mon_cfg_t *dlb_mon_cfg); 321 322 extern int 323 bcm_th3_l3_ecmp_dlb_mon_config_get(int unit, 324 bcm_if_t intf, 325 bcm_l3_ecmp_dlb_mon_cfg_t *dlb_mon_cfg); 326 327 extern int _bcm_th3_l3_tnl_term_entry_init(int unit, bcm_tunnel_terminator_t *tnl_info, 328 soc_tunnel_term_t *entry); 329 extern int _bcm_th3_l3_tnl_term_add(int unit, uint32 *entry_ptr, bcm_tunnel_terminator_t *tnl_info); 330 extern int _bcm_th3_l3_tnl_term_entry_parse(int unit, soc_tunnel_term_t *entry, 331 bcm_tunnel_terminator_t *tnl_info); 332 extern soc_profile_mem_t *_bcm_get_tnl_port_bitmap_profile(int unit); 333 extern int _bcm_tnl_port_bitmap_profile_init(int unit); 334 335 extern int bcm_th3_mpls_l3_nh_info_get(int unit, bcm_mpls_tunnel_switch_t *info, int nh_index); 336 extern int 337 _bcm_th3_mpls_egr_nh_label_set (int unit, 338 bcm_mpls_tunnel_switch_t *info, 339 bcm_l3_egress_t *egr_obj, 340 int label_action, 341 int hw_map_idx, 342 egr_l3_next_hop_entry_t *pegr_nh); 343 extern int 344 bcm_th3_mpls_swap_nh_info_add (int unit, bcm_l3_egress_t *egr, int nh_index, uint32 flags); 345 extern int 346 bcm_th3_mpls_l3_label_add (int unit, bcm_l3_egress_t *egr, int nh_index, uint32 flags); 347 348 349 extern int bcm_th3_mpls_swap_nh_info_get(int unit, bcm_l3_egress_t *egr, int nh_index); 350 351 extern int bcm_th3_failover_init(int unit); 352 extern int bcm_th3_failover_cleanup(int unit); 353 extern int bcm_th3_failover_egress_set(int unit, bcm_if_t intf, 354 bcm_l3_egress_t *failover_egr); 355 extern int bcm_th3_failover_egress_get(int unit, bcm_if_t intf, 356 bcm_l3_egress_t *failover_egr); 357 extern int bcm_th3_failover_egress_clear(int unit, bcm_if_t intf); 358 extern int bcm_th3_failover_egress_status_set(int unit, bcm_if_t intf, 359 int enable); 360 extern int bcm_th3_failover_egress_status_get(int unit, bcm_if_t intf, 361 int *enable); 362 363 #endif /* INCLUDE_L3 */ 364 365 extern int bcm_th3_trunk_modify(int unit, bcm_trunk_t tid, 366 bcm_trunk_info_t *trunk_info, int member_count, 367 bcm_trunk_member_t *member_array, trunk_private_t *t_info, 368 int op, bcm_trunk_member_t *member); 369 extern int bcm_th3_trunk_get(int unit, bcm_trunk_t tid, 370 bcm_trunk_info_t *trunk_info, int member_max, 371 bcm_trunk_member_t *member_array, int *member_count, 372 trunk_private_t *t_info); 373 extern int bcm_th3_trunk_destroy(int unit, bcm_trunk_t tid, 374 trunk_private_t *t_info); 375 extern int bcm_th3_trunk_mcast_join(int unit, bcm_trunk_t tid, 376 bcm_vlan_t vid, sal_mac_addr_t mac, trunk_private_t *t_info); 377 378 /* Cosq */ 379 380 extern int 381 _bcm_th3_cosq_egress_sp_get(int unit, bcm_gport_t gport, bcm_cos_queue_t cosq, 382 int *p_pool_start, int *p_pool_end); 383 extern int _bcm_th3_cosq_port_inp_pri_to_pg_profile_set(int unit, 384 bcm_port_t port, int profile_id); 385 extern int _bcm_th3_cosq_port_inp_pri_to_pg_profile_get(int unit, 386 bcm_port_t port, int *profile_id); 387 extern int _bcm_th3_cosq_port_pg_profile_set(int unit, 388 bcm_port_t port, int profile_id); 389 extern int _bcm_th3_cosq_port_pg_profile_get(int unit, 390 bcm_port_t port, int *profile_id); 391 392 extern void bcm_th3_cosq_sw_dump(int unit); 393 extern int _bcm_th3_cosq_localport_resolve(int unit, bcm_gport_t gport, 394 bcm_port_t *local_port); 395 extern int bcm_th3_rx_queue_channel_set_test(int unit, bcm_cos_queue_t queue_id, 396 bcm_rx_chan_t chan_id); 397 extern int _bcm_th3_cosq_port_resolve(int unit, bcm_gport_t gport, bcm_module_t *modid, 398 bcm_port_t *port, bcm_trunk_t *trunk_id, int *id, 399 int *qnum); 400 extern int _bcm_th3_cosq_gport_tree_create(int unit, bcm_port_t port); 401 extern int bcm_th3_cosq_gport_add(int unit, bcm_gport_t port, int numq, uint32 flags, 402 bcm_gport_t *gport); 403 extern int bcm_th3_cosq_gport_delete(int unit, bcm_gport_t gport); 404 extern int bcm_th3_cosq_gport_detach(int unit, bcm_gport_t sched_gport, 405 bcm_gport_t input_gport, bcm_cos_queue_t cosq); 406 extern int bcm_th3_cosq_gport_child_get(int unit, bcm_gport_t in_gport, 407 bcm_cos_queue_t cosq, 408 bcm_gport_t *out_gport); 409 410 extern int bcm_th3_cosq_port_sched_set(int unit, bcm_pbmp_t pbm, 411 int mode, const int *weights, int delay); 412 extern int bcm_th3_cosq_port_sched_get(int unit, bcm_pbmp_t pbm, 413 int *mode, int *weights, int *delay); 414 extern int bcm_th3_cosq_config_get(int unit, int *numq); 415 extern int bcm_th3_cosq_config_set(int unit, int numq); 416 extern int bcm_th3_cosq_gport_attach(int unit, bcm_gport_t input_gport, 417 bcm_gport_t parent_gport, bcm_cos_queue_t cosq); 418 extern int bcm_th3_cosq_gport_sched_set(int unit, bcm_gport_t gport, 419 bcm_cos_queue_t cosq, int mode, int weight); 420 extern int bcm_th3_cosq_gport_sched_get(int unit, bcm_gport_t gport, 421 bcm_cos_queue_t cosq, int *mode, int *weight); 422 extern int bcm_th3_cosq_gport_traverse(int unit, bcm_cosq_gport_traverse_cb cb, 423 void *user_data); 424 extern int bcm_th3_cosq_gport_traverse_by_port(int unit, bcm_gport_t port, 425 bcm_cosq_gport_traverse_cb cb, 426 void *user_data); 427 extern int bcm_th3_cosq_gport_attach_get(int unit, bcm_gport_t sched_gport, 428 bcm_gport_t *input_gport, bcm_cos_queue_t *cosq); 429 extern int bcm_th3_cosq_sched_weight_max_get(int unit, int mode, 430 int *weight_max); 431 extern int bcm_th3_cosq_gport_get(int unit, bcm_gport_t gport, bcm_gport_t *port, 432 int *numq, uint32 *flags); 433 /* WRED API's */ 434 extern int bcm_th3_cosq_discard_port_set(int unit, bcm_port_t port, bcm_cos_queue_t cosq, 435 uint32 color, int drop_start, int drop_slope, 436 int average_time); 437 extern int bcm_th3_cosq_discard_port_get(int unit, bcm_port_t port, bcm_cos_queue_t cosq, 438 uint32 color, int *drop_start, int *drop_slope, 439 int *average_time); 440 extern int bcm_th3_cosq_discard_set(int unit, uint32 flags); 441 extern int bcm_th3_cosq_discard_get(int unit, uint32 *flags); 442 extern int bcm_th3_cosq_gport_discard_set(int unit, bcm_gport_t gport, 443 bcm_cos_queue_t cosq, 444 bcm_cosq_buffer_id_t buffer, 445 bcm_cosq_gport_discard_t *discard); 446 extern int bcm_th3_cosq_gport_discard_get(int unit, bcm_gport_t gport, 447 bcm_cos_queue_t cosq, 448 bcm_cosq_buffer_id_t buffer, 449 bcm_cosq_gport_discard_t *discard); 450 extern int bcm_th3_cosq_wred_resolution_entry_create(int unit, int *index); 451 extern int bcm_th3_cosq_wred_resolution_entry_destroy(int unit, int index); 452 extern int bcm_th3_cosq_wred_resolution_set(int unit, int index, 453 bcm_cosq_discard_rule_t *rule); 454 extern int bcm_th3_cosq_wred_resolution_get(int unit, int index, int max, 455 bcm_cosq_discard_rule_t *rule, 456 int *count); 457 458 /* Shaper API's */ 459 /* Utility routines for metering and egress rate control */ 460 #define _BCM_TH3_METER_FLAG_NON_LINEAR 0x01 461 #define _BCM_TH3_METER_FLAG_PACKET_MODE 0x02 462 #define _BCM_TH3_METER_FLAG_FP_POLICER 0x04 463 464 extern uint32 _bcm_th3_default_burst_size(int unit, int port, uint32 kbits_sec); 465 extern uint32 _bcm_th3_bucket_encoding_to_rate(int unit, uint32 refresh_rate, 466 uint32 bucket_max, uint32 granularity, 467 uint32 flags, uint32 *rate_quantum, 468 uint32 *burst_quantum); 469 extern int _bcm_th3_rate_to_bucket_encoding(int unit, uint32 rate_quantum, 470 uint32 burst_quantum, uint32 flags, 471 int refresh_bitsize, int bucket_max_bitsize, 472 uint32 *refresh_rate, uint32 *bucketsize, 473 uint32 *granularity); 474 extern int bcm_th3_cosq_gport_bandwidth_set(int unit, bcm_gport_t gport, 475 bcm_cos_queue_t cosq, 476 uint32 kbits_sec_min, 477 uint32 kbits_sec_max, 478 uint32 flags); 479 extern int bcm_th3_cosq_gport_bandwidth_get(int unit, bcm_gport_t gport, 480 bcm_cos_queue_t cosq, 481 uint32 *kbits_sec_min, 482 uint32 *kbits_sec_max, 483 uint32 *flags); 484 extern int bcm_th3_cosq_gport_bandwidth_burst_set(int unit, bcm_gport_t gport, 485 bcm_cos_queue_t cosq, 486 uint32 kbits_burst_min, 487 uint32 kbits_burst_max); 488 extern int bcm_th3_cosq_gport_bandwidth_burst_get(int unit, bcm_gport_t gport, 489 bcm_cos_queue_t cosq, 490 uint32 *kbits_burst_min, 491 uint32 *kbits_burst_max); 492 extern int bcm_th3_cosq_port_burst_set(int unit, bcm_port_t port, 493 bcm_cos_queue_t cosq, int burst); 494 extern int bcm_th3_cosq_port_burst_get(int unit, bcm_port_t port, 495 bcm_cos_queue_t cosq, 496 int *burst); 497 extern int bcm_th3_cosq_port_pps_set(int unit, bcm_port_t port, 498 bcm_cos_queue_t cosq, int pps); 499 extern int bcm_th3_cosq_port_pps_get(int unit, bcm_port_t port, 500 bcm_cos_queue_t cosq, int *pps); 501 extern int bcm_th3_port_rate_egress_set(int unit, bcm_port_t port, 502 uint32 bandwidth, uint32 burst, 503 uint32 mode); 504 extern int bcm_th3_port_rate_egress_get(int unit, bcm_port_t port, 505 uint32 *bandwidth, uint32 *burst, 506 uint32 *mode); 507 extern int bcmi_th3_device_speed_check(int unit, int speed, int lanes); 508 extern int bcmi_tomahawk3_reconfigure_ports(int unit, 509 soc_port_schedule_state_t *port_schedule_state); 510 extern int 511 bcmi_th3_port_fast_reboot_epc_link_bmap_save(int unit, pbmp_t mask); 512 513 514 515 extern int bcm_th3_cosq_init(int unit); 516 extern int bcm_th3_cosq_detach(int unit, int software_state_only); 517 518 typedef enum { 519 _BCM_TH3_COSQ_INDEX_STYLE_WRED_QUEUE, 520 _BCM_TH3_COSQ_INDEX_STYLE_WRED_PORT, 521 _BCM_TH3_COSQ_INDEX_STYLE_WRED_DEVICE, 522 _BCM_TH3_COSQ_INDEX_STYLE_UCAST_QUEUE, 523 _BCM_TH3_COSQ_INDEX_STYLE_MCAST_QUEUE, 524 _BCM_TH3_COSQ_INDEX_STYLE_EGR_POOL, 525 _BCM_TH3_COSQ_INDEX_STYLE_COS, 526 _BCM_TH3_COSQ_INDEX_STYLE_COUNT 527 } _bcm_th3_cosq_index_style_t; 528 529 extern int bcm_th3_cosq_buffer_id_multi_get(int unit, bcm_gport_t gport, 530 bcm_cos_queue_t cosq, bcm_cosq_dir_t direction, 531 int array_max, bcm_cosq_buffer_id_t *buf_id_array, 532 int *array_count); 533 extern int bcm_th3_cosq_cpu_cosq_enable_set(int unit, bcm_cos_queue_t cosq, 534 int enable); 535 extern int bcm_th3_cosq_cpu_cosq_enable_get(int unit, bcm_cos_queue_t cosq, 536 int *enable); 537 extern int bcm_th3_cosq_control_set(int unit, bcm_gport_t gport, 538 bcm_cos_queue_t cosq, 539 bcm_cosq_buffer_id_t buffer, 540 bcm_cosq_control_t type, int arg); 541 extern int bcm_th3_cosq_control_get(int unit, bcm_gport_t gport, 542 bcm_cos_queue_t cosq, 543 bcm_cosq_buffer_id_t buffer, 544 bcm_cosq_control_t type, int *arg); 545 extern int 546 bcm_th3_cosq_service_pool_set(int unit, bcm_service_pool_id_t id, 547 bcm_cosq_service_pool_t cosq_service_pool); 548 549 extern int 550 bcm_th3_cosq_service_pool_get(int unit, bcm_service_pool_id_t id, 551 bcm_cosq_service_pool_t *cosq_service_pool); 552 553 extern int bcm_th3_cosq_mapping_set(int unit, bcm_port_t gport, 554 bcm_cos_t priority, bcm_cos_queue_t cosq); 555 extern int bcm_th3_cosq_mapping_get(int unit, bcm_port_t gport, 556 bcm_cos_t priority, bcm_cos_queue_t *cosq); 557 extern int bcm_th3_cosq_gport_mapping_set(int unit, bcm_port_t ing_port, 558 bcm_cos_t int_pri, uint32 flags, 559 bcm_gport_t gport, 560 bcm_cos_queue_t cosq); 561 extern int bcm_th3_cosq_gport_mapping_get(int unit, bcm_port_t ing_port, 562 bcm_cos_t int_pri, uint32 flags, 563 bcm_gport_t *gport, 564 bcm_cos_queue_t *cosq); 565 566 extern int _bcm_th3_get_num_ucq(int unit); 567 extern int _bcm_th3_get_num_mcq(int unit); 568 extern int _bcm_th3_cosq_pipe_get(int unit, bcm_gport_t gport, int *pipe); 569 extern int _bcm_th3_mmu_set_shared_size(int unit, int itm, int shd_size); 570 extern int _bcm_th3_mmu_get_shared_size(int unit, int itm, int *shd_size); 571 extern int _bcm_th3_cosq_ingress_sp_set_by_pg(int unit, bcm_gport_t gport, 572 bcm_cos_queue_t pri_grp, int arg); 573 extern int _bcm_th3_cosq_ingress_hdrm_pool_set_by_pg(int unit, bcm_gport_t gport, 574 bcm_cos_queue_t pri_grp, int arg); 575 extern int _bcm_th3_cosq_ingress_sp_get_by_pg(int unit, bcm_gport_t gport, 576 bcm_cos_queue_t pri_grp, int *arg); 577 extern int _bcm_th3_cosq_ingress_hdrm_pool_get_by_pg(int unit, bcm_gport_t gport, 578 bcm_cos_queue_t pri_grp, int *arg); 579 extern int _bcm_th3_cosq_egr_pool_set(int unit, bcm_gport_t gport, 580 bcm_cos_queue_t cosq, 581 bcm_cosq_buffer_id_t buffer, 582 bcm_cosq_control_t type, int arg); 583 extern int _bcm_th3_cosq_egr_pool_get(int unit, bcm_gport_t gport, 584 bcm_cos_queue_t cosq, 585 bcm_cosq_buffer_id_t buffer, 586 bcm_cosq_control_t type, int *arg); 587 extern int _bcm_th3_cosq_index_resolve(int unit, bcm_port_t port, bcm_cos_queue_t cosq, 588 _bcm_th3_cosq_index_style_t style, 589 bcm_port_t *local_port, int *index, int *count); 590 extern int _bcm_th3_cosq_ing_res_set(int unit, bcm_gport_t gport, bcm_cos_queue_t cosq, 591 bcm_cosq_control_t type, int arg); 592 extern int _bcm_th3_cosq_ing_res_get(int unit, bcm_gport_t gport, bcm_cos_queue_t cosq, 593 bcm_cosq_control_t type, int* arg); 594 extern int _bcm_th3_cosq_egr_queue_set(int unit, bcm_gport_t gport, bcm_cos_queue_t cosq, 595 bcm_cosq_control_t type, int arg); 596 extern int _bcm_th3_cosq_egr_queue_get(int unit, bcm_gport_t gport, bcm_cos_queue_t cosq, 597 bcm_cosq_control_t type, int* arg); 598 extern int _bcm_th3_cosq_qgroup_limit_enables_set(int unit, bcm_gport_t gport, 599 bcm_cos_t cosq, bcm_cosq_control_t type, 600 int arg); 601 extern int _bcm_th3_cosq_qgroup_limit_enables_get(int unit, bcm_gport_t gport, 602 bcm_cos_t cosq, bcm_cosq_control_t type, 603 int* arg); 604 extern int _bcm_th3_cosq_qgroup_limit_set(int unit, bcm_gport_t gport, bcm_cos_t cosq, 605 bcm_cosq_control_t type, int arg); 606 extern int _bcm_th3_cosq_qgroup_limit_get(int unit, bcm_gport_t gport, bcm_cos_t cosq, 607 bcm_cosq_control_t type, int* arg); 608 609 extern int bcm_th3_cosq_port_bandwidth_get(int unit, bcm_port_t port, 610 bcm_cos_queue_t cosq, 611 uint32 *min_quantum, 612 uint32 *max_quantum, 613 uint32 *burst_quantum, 614 uint32 *flags); 615 616 extern int bcm_th3_cosq_port_bandwidth_set(int unit, bcm_port_t port, 617 bcm_cos_queue_t cosq, 618 uint32 min_quantum, 619 uint32 max_quantum, 620 uint32 burst_quantum, 621 uint32 flags); 622 623 extern int _bcm_th3_cosq_sched_node_child_get(int unit, bcm_gport_t sched_gport, 624 int *num_uc_child, int *uc_queue, int *num_mc_child, int *mc_queue); 625 626 /* Classifier */ 627 extern int 628 bcm_th3_cosq_field_classifier_get( 629 int unit, int classifier_id, bcm_cosq_classifier_t *classifier); 630 631 extern int 632 bcm_th3_cosq_field_classifier_id_create( 633 int unit, bcm_cosq_classifier_t *classifier, int *classifier_id); 634 635 extern int 636 bcm_th3_cosq_field_classifier_id_destroy( 637 int unit, int classifier_id); 638 639 extern int 640 bcm_th3_cosq_field_classifier_map_set( 641 int unit, int classifier_id, int count, 642 bcm_cos_t *priority_array, bcm_cos_queue_t *cosq_array); 643 644 extern int 645 bcm_th3_cosq_field_classifier_map_get( 646 int unit, int classifier_id, 647 int array_max, bcm_cos_t *priority_array, 648 bcm_cos_queue_t *cosq_array, int *array_count); 649 650 extern int 651 bcm_th3_cosq_field_classifier_map_clear( 652 int unit, int classifier_id); 653 654 /* Flexport */ 655 extern int bcm_th3_cosq_port_detach(int unit, bcm_port_t port); 656 extern int bcm_th3_cosq_port_attach(int unit, bcm_port_t port); 657 658 /* SW WAR for COSQ */ 659 extern int 660 _bcm_th3_cosq_field_reserved_classifier_get(int unit, 661 int *classifer_id, 662 bcm_port_t *port); 663 664 extern int 665 _bcm_field_th3_qualify_udf_get( 666 int unit, 667 bcm_field_entry_t eid, 668 bcm_udf_id_t udf_id, 669 int max_length, 670 uint8 *data, 671 uint8 *mask, 672 int *actual_length); 673 674 extern int 675 _bcm_field_th3_qualify_udf( 676 int unit, 677 bcm_field_entry_t eid, 678 bcm_udf_id_t udf_id, 679 int length, 680 uint8 *data, 681 uint8 *mask); 682 683 /* IPMC Repl */ 684 #define TH3_AGG_ID_HW_INVALID 0xff 685 #define TH3_IPMC_MAX_INTF_COUNT_PER_ENTRY 64 686 /* 687 * Max interface count - 256 688 * Fixed budgetfor mirror copies - 8 689 * Fixed budget for copy to CPU - 1 690 * Limit replication copy count 256-8-1 691 */ 692 #define TH3_IPMC_MAX_INTF_COUNT 247 693 694 extern int 695 bcm_th3_ipmc_repl_port_attach(int unit, bcm_port_t port); 696 697 extern int 698 bcm_th3_ipmc_repl_port_detach(int unit, bcm_port_t port); 699 700 extern int 701 bcm_th3_repl_list_start_ptr_get(int unit, int repl_group, bcm_port_t port, 702 int *start_ptr); 703 extern int 704 bcm_th3_repl_list_start_ptr_set(int unit, int repl_group, bcm_port_t port, 705 int start_ptr, int intf_count); 706 typedef int (*bcm_th3_repl_head_alloc_f)(int, int, int, int *); 707 extern bcm_th3_repl_head_alloc_f bcm_th3_repl_head_alloc; 708 709 typedef int (*bcm_th3_repl_head_free_f) (int, int, int, int); 710 extern bcm_th3_repl_head_free_f bcm_th3_repl_head_free; 711 712 #if defined (BCM_FIELD_SUPPORT) 713 extern int 714 _bcm_field_th3_qualify_ip_type(int unit, bcm_field_entry_t entry, 715 bcm_field_IpType_t type, 716 bcm_field_qualify_t qual); 717 extern int 718 _bcm_field_th3_qualify_ip_type_encode_get(int unit, uint32 hw_data, 719 uint32 hw_mask, 720 bcm_field_IpType_t *type); 721 extern int 722 _bcm_field_th3_forwardingType_set(int unit, _field_stage_id_t stage_id, 723 bcm_field_entry_t entry, 724 bcm_field_ForwardingType_t type, 725 uint32 *data, uint32 *mask); 726 extern int 727 _bcm_field_th3_forwardingType_get(int unit, _field_stage_id_t stage_id, 728 bcm_field_entry_t entry, 729 uint32 data, uint32 mask, 730 bcm_field_ForwardingType_t *type); 731 extern int 732 _bcm_field_th3_qualify_ip_type(int unit, bcm_field_entry_t entry, 733 bcm_field_IpType_t type, 734 bcm_field_qualify_t qual); 735 736 extern int 737 _bcm_field_th3_qualify_ip_type_encode_get(int unit, 738 uint32 hw_data, 739 uint32 hw_mask, 740 bcm_field_IpType_t *type); 741 742 extern int 743 _field_th3_stage_action_support_check(int unit, 744 unsigned stage, 745 bcm_field_action_t action, 746 int *result); 747 748 extern int _bcm_field_th3_qualify_LoopbackType( 749 bcm_field_LoopbackType_t loopback_type, 750 uint32 *tcam_data, 751 uint32 *tcam_mask); 752 753 extern int 754 _bcm_field_th3_qualify_LoopbackType_get( 755 uint8 tcam_data, 756 uint8 tcam_mask, 757 bcm_field_LoopbackType_t *loopback_type); 758 759 extern int 760 _bcm_field_th3_qualify_TunnelType(bcm_field_TunnelType_t tunnel_type, 761 uint32 *tcam_data, 762 uint32 *tcam_mask 763 ); 764 765 extern int 766 _bcm_field_th3_qualify_TunnelType_get(uint8 tcam_data, 767 uint8 tcam_mask, 768 bcm_field_TunnelType_t *tunnel_type 769 ); 770 #endif /* BCM_FIELD_SUPPORT */ 771 772 /* OOBFC */ 773 extern int 774 bcm_th3_oob_fc_tx_port_control_set(int unit, bcm_port_t port, 775 int status, int dir); 776 extern int 777 bcm_th3_oob_fc_tx_port_control_get(int unit, bcm_port_t localport, 778 int *status, int dir); 779 780 extern int 781 bcm_th3_oob_fc_tx_config_get(int unit, 782 bcm_oob_fc_tx_config_t *config); 783 784 extern int 785 bcm_th3_oob_fc_tx_config_set(int unit, 786 bcm_oob_fc_tx_config_t *config); 787 788 789 extern int 790 bcm_th3_oob_fc_tx_info_get(int unit, bcm_oob_fc_tx_info_t *info); 791 extern int bcm_oob_th3_init(int unit); 792 793 extern int 794 bcm_th3_oob_port_mapping_init(int unit); 795 796 extern int 797 bcm_th3_oob_fx_egress_profile_id_set(int unit, bcm_port_t port, 798 int profile_id); 799 extern 800 int bcm_th3_oob_fx_egress_profile_id_get(int unit, bcm_port_t port, 801 int *profile_id); 802 803 /* PSTATS */ 804 extern int bcm_th3_pstats_init(int unit); 805 extern void bcm_th3_pstats_deinit(int unit); 806 807 /* MMU counter APIs */ 808 extern int bcm_th3_cosq_stat_set(int unit, bcm_gport_t port, 809 bcm_cos_queue_t cosq, 810 bcm_cosq_stat_t stat, uint64 value); 811 extern int bcm_th3_cosq_stat_get(int unit, bcm_port_t port, 812 bcm_cos_queue_t cosq, 813 bcm_cosq_stat_t stat, int sync_mode, 814 uint64 *value); 815 extern int 816 _bcm_field_th3_ddrop_profile_alloc(int unit, _field_entry_t *f_ent, 817 _field_action_t *fa); 818 extern int 819 _bcm_field_th3_dredirect_profile_alloc(int unit, _field_entry_t *f_ent, 820 _field_action_t *fa); 821 822 /* ETRAP APIs */ 823 extern int _bcm_th3_etrap_init(int unit); 824 825 extern int _bcm_th3_etrap_detach(int unit); 826 827 extern int 828 _bcm_th3_etrap_action_match_set(int unit, 829 bcm_flowtracker_elephant_match_action_t action, 830 uint32 match_types, 831 bcm_flowtracker_elephant_match_data_t *match_data); 832 833 extern int 834 _bcm_th3_etrap_action_match_get(int unit, 835 bcm_flowtracker_elephant_match_action_t action, 836 uint32 *match_types, 837 bcm_flowtracker_elephant_match_data_t *match_data); 838 839 extern int 840 _bcm_th3_etrap_int_pri_remap_set(int unit, 841 bcm_cos_t int_pri, 842 bcm_cos_t new_int_pri); 843 844 extern int 845 _bcm_th3_etrap_int_pri_remap_get(int unit, 846 bcm_cos_t int_pri, 847 bcm_cos_t *new_int_pri); 848 849 extern int 850 _bcm_th3_etrap_control_set(int unit, 851 bcm_flowtracker_elephant_control_t type, 852 int arg); 853 854 extern int 855 _bcm_th3_etrap_control_get(int unit, 856 bcm_flowtracker_elephant_control_t type, 857 int *arg); 858 859 extern int 860 _bcm_th3_etrap_hash_config_set(int unit, 861 bcm_flowtracker_elephant_hash_table_t hash_table, 862 int instance_num, 863 int bank_num, 864 bcm_flowtracker_elephant_hash_type_t hash_type, 865 int right_rotate_bits); 866 867 extern int 868 _bcm_th3_etrap_hash_config_get(int unit, 869 bcm_flowtracker_elephant_hash_table_t hash_table, 870 int instance_num, 871 int bank_num, 872 bcm_flowtracker_elephant_hash_type_t *hash_type, 873 int *right_rotate_bits); 874 875 /* Warmboot */ 876 extern int bcm_th3_cosq_burst_monitor_dma_config_set(int unit, 877 uint32 host_mem_size, 878 uint32 **host_mem_add); 879 extern int bcm_th3_cosq_burst_monitor_dma_config_get(int unit, 880 uint32 *host_mem_size, 881 uint32 **host_mem_add); 882 extern int bcm_th3_cosq_burst_monitor_dma_config_reset(int unit); 883 extern int bcm_th3_cosq_reinit(int unit); 884 extern int _bcm_th3_cosq_scheduler_reinit(int unit); 885 #if defined(BCM_WARM_BOOT_SUPPORT) 886 extern int _bcm_th3_tunnel_reinit(int unit, uint8 **tnl_scache); 887 extern int _bcm_th3_tunnel_warm_boot_alloc(int unit, uint32 *sz); 888 extern int _bcm_th3_tunnel_sync(int unit, uint8 **tnl_scache); 889 #endif 890 891 #endif /* BCM_TOMAHAWK3_SUPPORT */ 892 893 #endif /* !_BCM_INT_TOMAHAWK3_H_ */ 894