tomahawk3.h (42072B)
1 /* 2 * 3 * This license is set out in https://raw.githubusercontent.com/Broadcom-Network-Switching-Software/OpenBCM/master/Legal/LICENSE file. 4 * 5 * Copyright 2007-2019 Broadcom Inc. All rights reserved. 6 * 7 * File: 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 _bcm_field_th3_tcam_idx_to_slice_offset(int unit, _field_stage_t *stage_fc, 158 _field_entry_t *f_ent, int tcam_idx, 159 int *slice, int *slice_idx); 160 extern int 161 _field_th3_qualify_IpFrag_get(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 _field_th3_qualify_IpFrag(int unit, bcm_field_entry_t entry, 166 bcm_field_qualify_t qual_id, 167 bcm_field_IpFrag_t frag_info); 168 extern int 169 _bcm_field_th3_redirect_profile_get(int unit, 170 soc_profile_mem_t **redirect_profile); 171 extern int 172 _bcm_field_th3_redirect_profile_ref_count_get(int unit, 173 int index, 174 int *ref_count); 175 extern int 176 _bcm_field_th3_redirect_profile_delete(int unit, int index); 177 178 extern int 179 _bcm_field_th3_qual_class_size_get(int unit, bcm_field_qualify_t qual, 180 uint16 *class_size); 181 extern int 182 _field_th3_class_ctype_supported(int unit, 183 _field_class_type_t ctype); 184 extern int 185 _bcm_field_th3_internal_em_group_create(int unit, 186 _field_control_t *fc); 187 extern int 188 _bcm_field_th3_em_udf_keygen_mask_get(int unit, 189 _field_group_t *fg, 190 uint16 qid, uint32 *mask); 191 192 #endif 193 194 /* VLAN */ 195 #define BCM_TH3_EGR_ACTION_PROFILE_DEFAULT \ 196 BCM_TRX_EGR_VLAN_ACTION_PROFILE_DEFAULT 197 198 /* VLAN Port Bitmap Profile Mgmt function declarations */ 199 extern int bcm_tomahawk3_vlan_detach(int unit); 200 extern int bcm_th3_vlan_port_add( 201 int unit, bcm_vlan_t vid, pbmp_t pbmp, pbmp_t ubmp, pbmp_t ing_pbmp); 202 extern int bcm_th3_vlan_port_remove( 203 int unit, bcm_vlan_t vid, pbmp_t pbmp, pbmp_t ubmp, pbmp_t ing_pbmp); 204 extern int _bcm_th3_vlan_pbmp_profile_init(int unit); 205 extern int _bcm_th3_vlan_pbmp_profile_destroy(int unit); 206 extern int _bcm_th3_vlan_pbmp_profile_entry_add( 207 int unit, bcm_pbmp_t port_bitmap, uint32 *index); 208 extern int _bcm_th3_vlan_pbmp_profile_entry_delete(int unit, uint32 index); 209 extern int _bcm_th3_vlan_pbmp_profile_entry_get( 210 int unit, uint32 index, bcm_pbmp_t *pbmp); 211 extern int _bcm_th3_vlan_pbmp_index_get( 212 int unit, bcm_vlan_t vlan_id, uint32 *index); 213 extern int _bcm_th3_vlan_pbmp_index_set( 214 int unit, bcm_vlan_t vlan_id, uint32 index); 215 extern int _bcm_th3_vlan_pbmp_port_add( 216 int unit, void *entry, bcm_pbmp_t *pbmp); 217 extern int _bcm_th3_vlan_pbmp_port_remove( 218 int unit, void *entry, bcm_pbmp_t *pbmp); 219 extern int _bcm_th3_vlan_action_profile_init(int unit); 220 extern int _bcm_th3_vlan_action_profile_detach(int unit); 221 extern int _bcm_th3_ing_vlan_action_profile_entry_add(int unit, 222 bcm_vlan_action_set_t *action, 223 int *index); 224 extern void _bcm_th3_ing_vlan_action_profile_entry_get(int unit, 225 bcm_vlan_action_set_t *action, 226 int index); 227 extern int _bcm_th3_ing_vlan_action_profile_entry_delete( 228 int unit, uint32 index); 229 extern int _bcm_th3_egr_vlan_action_profile_entry_add(int unit, 230 bcm_vlan_action_set_t *action, 231 int *index); 232 extern void _bcm_th3_egr_vlan_action_profile_entry_get(int unit, 233 bcm_vlan_action_set_t *action, 234 uint32 index); 235 extern int _bcm_th3_egr_vlan_action_profile_entry_delete( 236 int unit, uint32 index); 237 extern void _bcm_th3_egr_vlan_action_profile_entry_increment( 238 int unit, uint32 index); 239 extern int _bcm_th3_vlan_port_egress_default_action_set(int unit, 240 bcm_port_t port, bcm_vlan_action_set_t *action); 241 extern int _bcm_th3_vlan_port_egress_default_action_get(int unit, 242 bcm_port_t port, bcm_vlan_action_set_t *action); 243 extern int _bcm_th3_vlan_port_egress_default_action_delete( 244 int unit, bcm_port_t port); 245 extern int _bcm_th3_vlan_port_default_action_set(int unit, 246 bcm_port_t port, bcm_vlan_action_set_t *action); 247 extern int _bcm_th3_vlan_port_default_action_get(int unit, 248 bcm_port_t port, bcm_vlan_action_set_t *action); 249 extern int _bcm_th3_vlan_port_default_action_delete(int unit, bcm_port_t port); 250 extern int _bcm_th3_vlan_xconnect_db_init(int unit); 251 extern int _bcm_th3_vlan_xconnect_db_destroy(int unit); 252 extern int _bcm_th3_vlan_xconnect_db_entry_add( 253 int unit, bcm_vlan_t ovlan, uint8 *destt, int *destv); 254 extern int _bcm_th3_vlan_xconnect_db_entry_delete(int unit, bcm_vlan_t ovlan); 255 extern int _bcm_th3_vlan_xconnect_db_entry_delete_all(int unit); 256 extern int _bcm_th3_vlan_xconnect_traverse( 257 int unit, bcm_vlan_cross_connect_traverse_cb cb, void *user_data); 258 #if defined(BCM_WARM_BOOT_SUPPORT) 259 extern int _bcm_th3_vlan_sync(int unit); 260 extern int bcm_th3_cosq_sync(int unit); 261 extern int _bcm_th3_vlan_xconnect_db_reinit(int unit); 262 #endif /* BCM_WARM_BOOT_SUPPORT */ 263 #ifndef BCM_SW_STATE_DUMP_DISABLE 264 extern void _bcm_th3_vlan_sw_tag_action_profile_dump(int unit); 265 #endif /* BCM_SW_STATE_DUMP_DISABLE */ 266 267 /* L3 */ 268 #ifdef INCLUDE_L3 269 #define BCM_TH3_L3_ECMP_WEIGHTED_MAX_PATHS (4096) 270 #define BCM_TH3_L3_ECMP_NON_WEIGHTED_MAX_PATHS (128) 271 #define BCM_TH3_L3_ECMP_MAX_DLB_GROUPS (128) 272 #define BCM_TH3_L3_ECMP_DLB_MAX_PATHS (64) 273 274 /* When MAX_ECMP_MODE is configured, 2 entries are used up 275 for each ECMP group, so need to reserve enough space in this 276 mode by reserving 2 entries for each group */ 277 278 #define BCM_TH3_L3_ECMP_DLB_START(_unit) \ 279 ((soc_mem_index_count(unit, L3_ECMP_COUNTm)) - \ 280 BCM_TH3_L3_ECMP_MAX_DLB_GROUPS) 281 282 #define BCM_TH3_L3_ECMP_DLB_END(_unit) \ 283 (soc_mem_index_max(unit, L3_ECMP_COUNTm)) 284 285 /* ECMP LB mode encodings match hardware values */ 286 #define BCM_TH3_L3_ECMP_LB_MODE_WEIGHTED_256 0x3 287 #define BCM_TH3_L3_ECMP_LB_MODE_WEIGHTED_512 0x4 288 #define BCM_TH3_L3_ECMP_LB_MODE_WEIGHTED_1024 0x5 289 #define BCM_TH3_L3_ECMP_LB_MODE_WEIGHTED_2048 0x6 290 #define BCM_TH3_L3_ECMP_LB_MODE_WEIGHTED_4096 0x7 291 292 extern int _bcm_th3_l3_ecmp_dlb_get_id(int unit, int ecmp_grp_idx); 293 294 extern int _bcm_th3_l3_egress_ecmp_dlb_resource_validate(int unit, 295 bcm_l3_egress_ecmp_t *ecmp, int dlb_id); 296 297 extern int 298 _bcm_th3_l3_ecmp_dlb_port_member_set(int unit, int *port_array, int primary_count, 299 int unique_intfs, int dlb_id); 300 301 extern int 302 _bcm_th3_l3_ecmp_dlb_nhi_member_set(int unit, int *intf_array, int primary_count, 303 int unique_intfs, int dlb_id); 304 305 extern int 306 _bcm_th3_l3_ecmp_dlb_port_get(int unit, bcm_l3_egress_ecmp_t *ecmp, 307 int dlb_id, int primary_count, int intf_count, 308 bcm_if_t *intf_array, int *port_array); 309 310 extern int 311 _bcm_th3_l3_ecmp_dlb_scaling_factor_encode(int unit, int scaling_factor, 312 int *scaling_factor_hw); 313 314 extern int 315 _bcm_th3_l3_ecmp_dlb_scaling_factor_decode(int unit, int scaling_factor_hw, 316 int *scaling_factor); 317 318 extern int 319 _bcm_th3_ecmp_dlb_member_recover(int unit); 320 321 extern int 322 bcm_th3_l3_ecmp_dlb_mon_config_set(int unit, 323 bcm_if_t ecmp_intf, 324 bcm_l3_ecmp_dlb_mon_cfg_t *dlb_mon_cfg); 325 326 extern int 327 bcm_th3_l3_ecmp_dlb_mon_config_get(int unit, 328 bcm_if_t intf, 329 bcm_l3_ecmp_dlb_mon_cfg_t *dlb_mon_cfg); 330 331 extern int _bcm_th3_l3_tnl_term_entry_init(int unit, bcm_tunnel_terminator_t *tnl_info, 332 soc_tunnel_term_t *entry); 333 extern int _bcm_th3_l3_tnl_term_add(int unit, uint32 *entry_ptr, bcm_tunnel_terminator_t *tnl_info); 334 extern int _bcm_th3_l3_tnl_term_entry_parse(int unit, soc_tunnel_term_t *entry, 335 bcm_tunnel_terminator_t *tnl_info); 336 extern soc_profile_mem_t *_bcm_get_tnl_port_bitmap_profile(int unit); 337 extern int _bcm_tnl_port_bitmap_profile_init(int unit); 338 339 extern int bcm_th3_mpls_l3_nh_info_get(int unit, bcm_mpls_tunnel_switch_t *info, int nh_index); 340 extern int 341 _bcm_th3_mpls_egr_nh_label_set (int unit, 342 bcm_mpls_tunnel_switch_t *info, 343 bcm_l3_egress_t *egr_obj, 344 int label_action, 345 int hw_map_idx, 346 egr_l3_next_hop_entry_t *pegr_nh); 347 extern int 348 bcm_th3_mpls_swap_nh_info_add (int unit, bcm_l3_egress_t *egr, int nh_index, uint32 flags); 349 extern int 350 bcm_th3_mpls_l3_label_add (int unit, bcm_l3_egress_t *egr, int nh_index, uint32 flags); 351 352 353 extern int bcm_th3_mpls_swap_nh_info_get(int unit, bcm_l3_egress_t *egr, int nh_index); 354 355 extern int bcm_th3_failover_init(int unit); 356 extern int bcm_th3_failover_cleanup(int unit); 357 extern int bcm_th3_failover_egress_set(int unit, bcm_if_t intf, 358 bcm_l3_egress_t *failover_egr); 359 extern int bcm_th3_failover_egress_get(int unit, bcm_if_t intf, 360 bcm_l3_egress_t *failover_egr); 361 extern int bcm_th3_failover_egress_clear(int unit, bcm_if_t intf); 362 extern int bcm_th3_failover_egress_status_set(int unit, bcm_if_t intf, 363 int enable); 364 extern int bcm_th3_failover_egress_status_get(int unit, bcm_if_t intf, 365 int *enable); 366 367 #endif /* INCLUDE_L3 */ 368 369 extern int bcm_th3_trunk_modify(int unit, bcm_trunk_t tid, 370 bcm_trunk_info_t *trunk_info, int member_count, 371 bcm_trunk_member_t *member_array, trunk_private_t *t_info, 372 int op, bcm_trunk_member_t *member); 373 extern int bcm_th3_trunk_get(int unit, bcm_trunk_t tid, 374 bcm_trunk_info_t *trunk_info, int member_max, 375 bcm_trunk_member_t *member_array, int *member_count, 376 trunk_private_t *t_info); 377 extern int bcm_th3_trunk_destroy(int unit, bcm_trunk_t tid, 378 trunk_private_t *t_info); 379 extern int bcm_th3_trunk_mcast_join(int unit, bcm_trunk_t tid, 380 bcm_vlan_t vid, sal_mac_addr_t mac, trunk_private_t *t_info); 381 382 /* Cosq */ 383 384 extern int 385 _bcm_th3_cosq_egress_sp_get(int unit, bcm_gport_t gport, bcm_cos_queue_t cosq, 386 int *p_pool_start, int *p_pool_end); 387 extern int _bcm_th3_cosq_port_inp_pri_to_pg_profile_set(int unit, 388 bcm_port_t port, int profile_id); 389 extern int _bcm_th3_cosq_port_inp_pri_to_pg_profile_get(int unit, 390 bcm_port_t port, int *profile_id); 391 extern int _bcm_th3_cosq_port_pg_profile_set(int unit, 392 bcm_port_t port, int profile_id); 393 extern int _bcm_th3_cosq_port_pg_profile_get(int unit, 394 bcm_port_t port, int *profile_id); 395 396 extern void bcm_th3_cosq_sw_dump(int unit); 397 extern int _bcm_th3_cosq_localport_resolve(int unit, bcm_gport_t gport, 398 bcm_port_t *local_port); 399 extern int bcm_th3_rx_queue_channel_set_test(int unit, bcm_cos_queue_t queue_id, 400 bcm_rx_chan_t chan_id); 401 extern int _bcm_th3_cosq_port_resolve(int unit, bcm_gport_t gport, bcm_module_t *modid, 402 bcm_port_t *port, bcm_trunk_t *trunk_id, int *id, 403 int *qnum); 404 extern int _bcm_th3_cosq_gport_tree_create(int unit, bcm_port_t port); 405 extern int bcm_th3_cosq_gport_add(int unit, bcm_gport_t port, int numq, uint32 flags, 406 bcm_gport_t *gport); 407 extern int bcm_th3_cosq_gport_delete(int unit, bcm_gport_t gport); 408 extern int bcm_th3_cosq_gport_detach(int unit, bcm_gport_t sched_gport, 409 bcm_gport_t input_gport, bcm_cos_queue_t cosq); 410 extern int bcm_th3_cosq_gport_child_get(int unit, bcm_gport_t in_gport, 411 bcm_cos_queue_t cosq, 412 bcm_gport_t *out_gport); 413 414 extern int bcm_th3_cosq_port_sched_set(int unit, bcm_pbmp_t pbm, 415 int mode, const int *weights, int delay); 416 extern int bcm_th3_cosq_port_sched_get(int unit, bcm_pbmp_t pbm, 417 int *mode, int *weights, int *delay); 418 extern int bcm_th3_cosq_config_get(int unit, int *numq); 419 extern int bcm_th3_cosq_config_set(int unit, int numq); 420 extern int bcm_th3_cosq_gport_attach(int unit, bcm_gport_t input_gport, 421 bcm_gport_t parent_gport, bcm_cos_queue_t cosq); 422 extern int bcm_th3_cosq_gport_sched_set(int unit, bcm_gport_t gport, 423 bcm_cos_queue_t cosq, int mode, int weight); 424 extern int bcm_th3_cosq_gport_sched_get(int unit, bcm_gport_t gport, 425 bcm_cos_queue_t cosq, int *mode, int *weight); 426 extern int bcm_th3_cosq_gport_traverse(int unit, bcm_cosq_gport_traverse_cb cb, 427 void *user_data); 428 extern int bcm_th3_cosq_gport_attach_get(int unit, bcm_gport_t sched_gport, 429 bcm_gport_t *input_gport, bcm_cos_queue_t *cosq); 430 extern int bcm_th3_cosq_sched_weight_max_get(int unit, int mode, 431 int *weight_max); 432 extern int bcm_th3_cosq_gport_get(int unit, bcm_gport_t gport, bcm_gport_t *port, 433 int *numq, uint32 *flags); 434 /* WRED API's */ 435 extern int bcm_th3_cosq_discard_port_set(int unit, bcm_port_t port, bcm_cos_queue_t cosq, 436 uint32 color, int drop_start, int drop_slope, 437 int average_time); 438 extern int bcm_th3_cosq_discard_port_get(int unit, bcm_port_t port, bcm_cos_queue_t cosq, 439 uint32 color, int *drop_start, int *drop_slope, 440 int *average_time); 441 extern int bcm_th3_cosq_discard_set(int unit, uint32 flags); 442 extern int bcm_th3_cosq_discard_get(int unit, uint32 *flags); 443 extern int bcm_th3_cosq_gport_discard_set(int unit, bcm_gport_t gport, 444 bcm_cos_queue_t cosq, 445 bcm_cosq_buffer_id_t buffer, 446 bcm_cosq_gport_discard_t *discard); 447 extern int bcm_th3_cosq_gport_discard_get(int unit, bcm_gport_t gport, 448 bcm_cos_queue_t cosq, 449 bcm_cosq_buffer_id_t buffer, 450 bcm_cosq_gport_discard_t *discard); 451 extern int bcm_th3_cosq_wred_resolution_entry_create(int unit, int *index); 452 extern int bcm_th3_cosq_wred_resolution_entry_destroy(int unit, int index); 453 extern int bcm_th3_cosq_wred_resolution_set(int unit, int index, 454 bcm_cosq_discard_rule_t *rule); 455 extern int bcm_th3_cosq_wred_resolution_get(int unit, int index, int max, 456 bcm_cosq_discard_rule_t *rule, 457 int *count); 458 459 /* Shaper API's */ 460 /* Utility routines for metering and egress rate control */ 461 #define _BCM_TH3_METER_FLAG_NON_LINEAR 0x01 462 #define _BCM_TH3_METER_FLAG_PACKET_MODE 0x02 463 #define _BCM_TH3_METER_FLAG_FP_POLICER 0x04 464 465 extern uint32 _bcm_th3_default_burst_size(int unit, int port, uint32 kbits_sec); 466 extern uint32 _bcm_th3_bucket_encoding_to_rate(int unit, uint32 refresh_rate, 467 uint32 bucket_max, uint32 granularity, 468 uint32 flags, uint32 *rate_quantum, 469 uint32 *burst_quantum); 470 extern int _bcm_th3_rate_to_bucket_encoding(int unit, uint32 rate_quantum, 471 uint32 burst_quantum, uint32 flags, 472 int refresh_bitsize, int bucket_max_bitsize, 473 uint32 *refresh_rate, uint32 *bucketsize, 474 uint32 *granularity); 475 extern int bcm_th3_cosq_gport_bandwidth_set(int unit, bcm_gport_t gport, 476 bcm_cos_queue_t cosq, 477 uint32 kbits_sec_min, 478 uint32 kbits_sec_max, 479 uint32 flags); 480 extern int bcm_th3_cosq_gport_bandwidth_get(int unit, bcm_gport_t gport, 481 bcm_cos_queue_t cosq, 482 uint32 *kbits_sec_min, 483 uint32 *kbits_sec_max, 484 uint32 *flags); 485 extern int bcm_th3_cosq_gport_bandwidth_burst_set(int unit, bcm_gport_t gport, 486 bcm_cos_queue_t cosq, 487 uint32 kbits_burst_min, 488 uint32 kbits_burst_max); 489 extern int bcm_th3_cosq_gport_bandwidth_burst_get(int unit, bcm_gport_t gport, 490 bcm_cos_queue_t cosq, 491 uint32 *kbits_burst_min, 492 uint32 *kbits_burst_max); 493 extern int bcm_th3_cosq_port_burst_set(int unit, bcm_port_t port, 494 bcm_cos_queue_t cosq, int burst); 495 extern int bcm_th3_cosq_port_burst_get(int unit, bcm_port_t port, 496 bcm_cos_queue_t cosq, 497 int *burst); 498 extern int bcm_th3_cosq_port_pps_set(int unit, bcm_port_t port, 499 bcm_cos_queue_t cosq, int pps); 500 extern int bcm_th3_cosq_port_pps_get(int unit, bcm_port_t port, 501 bcm_cos_queue_t cosq, int *pps); 502 extern int bcm_th3_port_rate_egress_set(int unit, bcm_port_t port, 503 uint32 bandwidth, uint32 burst, 504 uint32 mode); 505 extern int bcm_th3_port_rate_egress_get(int unit, bcm_port_t port, 506 uint32 *bandwidth, uint32 *burst, 507 uint32 *mode); 508 extern int bcmi_th3_device_speed_check(int unit, int speed, int lanes); 509 extern int bcmi_tomahawk3_reconfigure_ports(int unit, 510 soc_port_schedule_state_t *port_schedule_state); 511 512 513 514 extern int bcm_th3_cosq_init(int unit); 515 extern int bcm_th3_cosq_detach(int unit, int software_state_only); 516 517 typedef enum { 518 _BCM_TH3_COSQ_INDEX_STYLE_WRED_QUEUE, 519 _BCM_TH3_COSQ_INDEX_STYLE_WRED_PORT, 520 _BCM_TH3_COSQ_INDEX_STYLE_WRED_DEVICE, 521 _BCM_TH3_COSQ_INDEX_STYLE_UCAST_QUEUE, 522 _BCM_TH3_COSQ_INDEX_STYLE_MCAST_QUEUE, 523 _BCM_TH3_COSQ_INDEX_STYLE_EGR_POOL, 524 _BCM_TH3_COSQ_INDEX_STYLE_COS, 525 _BCM_TH3_COSQ_INDEX_STYLE_COUNT 526 } _bcm_th3_cosq_index_style_t; 527 528 extern int bcm_th3_cosq_buffer_id_multi_get(int unit, bcm_gport_t gport, 529 bcm_cos_queue_t cosq, bcm_cosq_dir_t direction, 530 int array_max, bcm_cosq_buffer_id_t *buf_id_array, 531 int *array_count); 532 extern int bcm_th3_cosq_cpu_cosq_enable_set(int unit, bcm_cos_queue_t cosq, 533 int enable); 534 extern int bcm_th3_cosq_cpu_cosq_enable_get(int unit, bcm_cos_queue_t cosq, 535 int *enable); 536 extern int bcm_th3_cosq_control_set(int unit, bcm_gport_t gport, 537 bcm_cos_queue_t cosq, 538 bcm_cosq_buffer_id_t buffer, 539 bcm_cosq_control_t type, int arg); 540 extern int bcm_th3_cosq_control_get(int unit, bcm_gport_t gport, 541 bcm_cos_queue_t cosq, 542 bcm_cosq_buffer_id_t buffer, 543 bcm_cosq_control_t type, int *arg); 544 extern int 545 bcm_th3_cosq_service_pool_set(int unit, bcm_service_pool_id_t id, 546 bcm_cosq_service_pool_t cosq_service_pool); 547 548 extern int 549 bcm_th3_cosq_service_pool_get(int unit, bcm_service_pool_id_t id, 550 bcm_cosq_service_pool_t *cosq_service_pool); 551 552 extern int bcm_th3_cosq_mapping_set(int unit, bcm_port_t gport, 553 bcm_cos_t priority, bcm_cos_queue_t cosq); 554 extern int bcm_th3_cosq_mapping_get(int unit, bcm_port_t gport, 555 bcm_cos_t priority, bcm_cos_queue_t *cosq); 556 extern int bcm_th3_cosq_gport_mapping_set(int unit, bcm_port_t ing_port, 557 bcm_cos_t int_pri, uint32 flags, 558 bcm_gport_t gport, 559 bcm_cos_queue_t cosq); 560 extern int bcm_th3_cosq_gport_mapping_get(int unit, bcm_port_t ing_port, 561 bcm_cos_t int_pri, uint32 flags, 562 bcm_gport_t *gport, 563 bcm_cos_queue_t *cosq); 564 565 extern int _bcm_th3_get_num_ucq(int unit); 566 extern int _bcm_th3_get_num_mcq(int unit); 567 extern int _bcm_th3_cosq_pipe_get(int unit, bcm_gport_t gport, int *pipe); 568 extern int _bcm_th3_mmu_set_shared_size(int unit, int itm, int shd_size); 569 extern int _bcm_th3_mmu_get_shared_size(int unit, int itm, int *shd_size); 570 extern int _bcm_th3_cosq_ingress_sp_set_by_pg(int unit, bcm_gport_t gport, 571 bcm_cos_queue_t pri_grp, int arg); 572 extern int _bcm_th3_cosq_ingress_hdrm_pool_set_by_pg(int unit, bcm_gport_t gport, 573 bcm_cos_queue_t pri_grp, int arg); 574 extern int _bcm_th3_cosq_ingress_sp_get_by_pg(int unit, bcm_gport_t gport, 575 bcm_cos_queue_t pri_grp, int *arg); 576 extern int _bcm_th3_cosq_ingress_hdrm_pool_get_by_pg(int unit, bcm_gport_t gport, 577 bcm_cos_queue_t pri_grp, int *arg); 578 extern int _bcm_th3_cosq_egr_pool_set(int unit, bcm_gport_t gport, 579 bcm_cos_queue_t cosq, 580 bcm_cosq_buffer_id_t buffer, 581 bcm_cosq_control_t type, int arg); 582 extern int _bcm_th3_cosq_egr_pool_get(int unit, bcm_gport_t gport, 583 bcm_cos_queue_t cosq, 584 bcm_cosq_buffer_id_t buffer, 585 bcm_cosq_control_t type, int *arg); 586 extern int _bcm_th3_cosq_index_resolve(int unit, bcm_port_t port, bcm_cos_queue_t cosq, 587 _bcm_th3_cosq_index_style_t style, 588 bcm_port_t *local_port, int *index, int *count); 589 extern int _bcm_th3_cosq_ing_res_set(int unit, bcm_gport_t gport, bcm_cos_queue_t cosq, 590 bcm_cosq_control_t type, int arg); 591 extern int _bcm_th3_cosq_ing_res_get(int unit, bcm_gport_t gport, bcm_cos_queue_t cosq, 592 bcm_cosq_control_t type, int* arg); 593 extern int _bcm_th3_cosq_egr_queue_set(int unit, bcm_gport_t gport, bcm_cos_queue_t cosq, 594 bcm_cosq_control_t type, int arg); 595 extern int _bcm_th3_cosq_egr_queue_get(int unit, bcm_gport_t gport, bcm_cos_queue_t cosq, 596 bcm_cosq_control_t type, int* arg); 597 extern int _bcm_th3_cosq_qgroup_limit_enables_set(int unit, bcm_gport_t gport, 598 bcm_cos_t cosq, bcm_cosq_control_t type, 599 int arg); 600 extern int _bcm_th3_cosq_qgroup_limit_enables_get(int unit, bcm_gport_t gport, 601 bcm_cos_t cosq, bcm_cosq_control_t type, 602 int* arg); 603 extern int _bcm_th3_cosq_qgroup_limit_set(int unit, bcm_gport_t gport, bcm_cos_t cosq, 604 bcm_cosq_control_t type, int arg); 605 extern int _bcm_th3_cosq_qgroup_limit_get(int unit, bcm_gport_t gport, bcm_cos_t cosq, 606 bcm_cosq_control_t type, int* arg); 607 608 extern int bcm_th3_cosq_port_bandwidth_get(int unit, bcm_port_t port, 609 bcm_cos_queue_t cosq, 610 uint32 *min_quantum, 611 uint32 *max_quantum, 612 uint32 *burst_quantum, 613 uint32 *flags); 614 615 extern int bcm_th3_cosq_port_bandwidth_set(int unit, bcm_port_t port, 616 bcm_cos_queue_t cosq, 617 uint32 min_quantum, 618 uint32 max_quantum, 619 uint32 burst_quantum, 620 uint32 flags); 621 622 extern int _bcm_th3_cosq_sched_node_child_get(int unit, bcm_gport_t sched_gport, 623 int *num_uc_child, int *uc_queue, int *num_mc_child, int *mc_queue); 624 625 /* Classifier */ 626 extern int 627 bcm_th3_cosq_field_classifier_get( 628 int unit, int classifier_id, bcm_cosq_classifier_t *classifier); 629 630 extern int 631 bcm_th3_cosq_field_classifier_id_create( 632 int unit, bcm_cosq_classifier_t *classifier, int *classifier_id); 633 634 extern int 635 bcm_th3_cosq_field_classifier_id_destroy( 636 int unit, int classifier_id); 637 638 extern int 639 bcm_th3_cosq_field_classifier_map_set( 640 int unit, int classifier_id, int count, 641 bcm_cos_t *priority_array, bcm_cos_queue_t *cosq_array); 642 643 extern int 644 bcm_th3_cosq_field_classifier_map_get( 645 int unit, int classifier_id, 646 int array_max, bcm_cos_t *priority_array, 647 bcm_cos_queue_t *cosq_array, int *array_count); 648 649 extern int 650 bcm_th3_cosq_field_classifier_map_clear( 651 int unit, int classifier_id); 652 653 /* Flexport */ 654 extern int bcm_th3_cosq_port_detach(int unit, bcm_port_t port); 655 extern int bcm_th3_cosq_port_attach(int unit, bcm_port_t port); 656 657 /* SW WAR for COSQ */ 658 extern int 659 _bcm_th3_cosq_field_reserved_classifier_get(int unit, 660 int *classifer_id, 661 bcm_port_t *port); 662 663 extern int 664 _bcm_field_th3_qualify_udf_get( 665 int unit, 666 bcm_field_entry_t eid, 667 bcm_udf_id_t udf_id, 668 int max_length, 669 uint8 *data, 670 uint8 *mask, 671 int *actual_length); 672 673 extern int 674 _bcm_field_th3_qualify_udf( 675 int unit, 676 bcm_field_entry_t eid, 677 bcm_udf_id_t udf_id, 678 int length, 679 uint8 *data, 680 uint8 *mask); 681 682 /* IPMC Repl */ 683 #define TH3_AGG_ID_HW_INVALID 0xff 684 #define TH3_IPMC_MAX_INTF_COUNT_PER_ENTRY 64 685 /* 686 * Max interface count - 256 687 * Fixed budgetfor mirror copies - 8 688 * Fixed budget for copy to CPU - 1 689 * Limit replication copy count 256-8-1 690 */ 691 #define TH3_IPMC_MAX_INTF_COUNT 247 692 693 extern int 694 bcm_th3_ipmc_repl_port_attach(int unit, bcm_port_t port); 695 696 extern int 697 bcm_th3_ipmc_repl_port_detach(int unit, bcm_port_t port); 698 699 extern int 700 bcm_th3_repl_list_start_ptr_get(int unit, int repl_group, bcm_port_t port, 701 int *start_ptr); 702 extern int 703 bcm_th3_repl_list_start_ptr_set(int unit, int repl_group, bcm_port_t port, 704 int start_ptr, int intf_count); 705 typedef int (*bcm_th3_repl_head_alloc_f)(int, int, int, int *); 706 extern bcm_th3_repl_head_alloc_f bcm_th3_repl_head_alloc; 707 708 typedef int (*bcm_th3_repl_head_free_f) (int, int, int, int); 709 extern bcm_th3_repl_head_free_f bcm_th3_repl_head_free; 710 711 #if defined (BCM_FIELD_SUPPORT) 712 extern int 713 _bcm_field_th3_qualify_ip_type(int unit, bcm_field_entry_t entry, 714 bcm_field_IpType_t type, 715 bcm_field_qualify_t qual); 716 extern int 717 _bcm_field_th3_qualify_ip_type_encode_get(int unit, uint32 hw_data, 718 uint32 hw_mask, 719 bcm_field_IpType_t *type); 720 extern int 721 _bcm_field_th3_forwardingType_set(int unit, _field_stage_id_t stage_id, 722 bcm_field_entry_t entry, 723 bcm_field_ForwardingType_t type, 724 uint32 *data, uint32 *mask); 725 extern int 726 _bcm_field_th3_forwardingType_get(int unit, _field_stage_id_t stage_id, 727 bcm_field_entry_t entry, 728 uint32 data, uint32 mask, 729 bcm_field_ForwardingType_t *type); 730 extern int 731 _bcm_field_th3_qualify_ip_type(int unit, bcm_field_entry_t entry, 732 bcm_field_IpType_t type, 733 bcm_field_qualify_t qual); 734 735 extern int 736 _bcm_field_th3_qualify_ip_type_encode_get(int unit, 737 uint32 hw_data, 738 uint32 hw_mask, 739 bcm_field_IpType_t *type); 740 741 extern int 742 _field_th3_stage_action_support_check(int unit, 743 unsigned stage, 744 bcm_field_action_t action, 745 int *result); 746 747 extern int _bcm_field_th3_qualify_LoopbackType( 748 bcm_field_LoopbackType_t loopback_type, 749 uint32 *tcam_data, 750 uint32 *tcam_mask); 751 752 extern int 753 _bcm_field_th3_qualify_LoopbackType_get( 754 uint8 tcam_data, 755 uint8 tcam_mask, 756 bcm_field_LoopbackType_t *loopback_type); 757 758 extern int 759 _bcm_field_th3_qualify_TunnelType(bcm_field_TunnelType_t tunnel_type, 760 uint32 *tcam_data, 761 uint32 *tcam_mask 762 ); 763 764 extern int 765 _bcm_field_th3_qualify_TunnelType_get(uint8 tcam_data, 766 uint8 tcam_mask, 767 bcm_field_TunnelType_t *tunnel_type 768 ); 769 #endif /* BCM_FIELD_SUPPORT */ 770 771 /* OOBFC */ 772 extern int 773 bcm_th3_oob_fc_tx_port_control_set(int unit, bcm_port_t port, 774 int status, int dir); 775 extern int 776 bcm_th3_oob_fc_tx_port_control_get(int unit, bcm_port_t localport, 777 int *status, int dir); 778 779 extern int 780 bcm_th3_oob_fc_tx_config_get(int unit, 781 bcm_oob_fc_tx_config_t *config); 782 783 extern int 784 bcm_th3_oob_fc_tx_config_set(int unit, 785 bcm_oob_fc_tx_config_t *config); 786 787 788 extern int 789 bcm_th3_oob_fc_tx_info_get(int unit, bcm_oob_fc_tx_info_t *info); 790 extern int bcm_oob_th3_init(int unit); 791 792 extern int 793 bcm_th3_oob_port_mapping_init(int unit); 794 795 extern int 796 bcm_th3_oob_fx_egress_profile_id_set(int unit, bcm_port_t port, 797 int profile_id); 798 extern 799 int bcm_th3_oob_fx_egress_profile_id_get(int unit, bcm_port_t port, 800 int *profile_id); 801 802 /* PSTATS */ 803 extern int bcm_th3_pstats_init(int unit); 804 extern void bcm_th3_pstats_deinit(int unit); 805 806 /* MMU counter APIs */ 807 extern int bcm_th3_cosq_stat_set(int unit, bcm_gport_t port, 808 bcm_cos_queue_t cosq, 809 bcm_cosq_stat_t stat, uint64 value); 810 extern int bcm_th3_cosq_stat_get(int unit, bcm_port_t port, 811 bcm_cos_queue_t cosq, 812 bcm_cosq_stat_t stat, int sync_mode, 813 uint64 *value); 814 extern int 815 _bcm_field_th3_ddrop_profile_alloc(int unit, _field_entry_t *f_ent, 816 _field_action_t *fa); 817 extern int 818 _bcm_field_th3_dredirect_profile_alloc(int unit, _field_entry_t *f_ent, 819 _field_action_t *fa); 820 821 /* ETRAP APIs */ 822 extern int _bcm_th3_etrap_init(int unit); 823 824 extern int _bcm_th3_etrap_detach(int unit); 825 826 extern int 827 _bcm_th3_etrap_action_match_set(int unit, 828 bcm_flowtracker_elephant_match_action_t action, 829 uint32 match_types, 830 bcm_flowtracker_elephant_match_data_t *match_data); 831 832 extern int 833 _bcm_th3_etrap_action_match_get(int unit, 834 bcm_flowtracker_elephant_match_action_t action, 835 uint32 *match_types, 836 bcm_flowtracker_elephant_match_data_t *match_data); 837 838 extern int 839 _bcm_th3_etrap_int_pri_remap_set(int unit, 840 bcm_cos_t int_pri, 841 bcm_cos_t new_int_pri); 842 843 extern int 844 _bcm_th3_etrap_int_pri_remap_get(int unit, 845 bcm_cos_t int_pri, 846 bcm_cos_t *new_int_pri); 847 848 extern int 849 _bcm_th3_etrap_control_set(int unit, 850 bcm_flowtracker_elephant_control_t type, 851 int arg); 852 853 extern int 854 _bcm_th3_etrap_control_get(int unit, 855 bcm_flowtracker_elephant_control_t type, 856 int *arg); 857 858 extern int 859 _bcm_th3_etrap_hash_config_set(int unit, 860 bcm_flowtracker_elephant_hash_table_t hash_table, 861 int instance_num, 862 int bank_num, 863 bcm_flowtracker_elephant_hash_type_t hash_type, 864 int right_rotate_bits); 865 866 extern int 867 _bcm_th3_etrap_hash_config_get(int unit, 868 bcm_flowtracker_elephant_hash_table_t hash_table, 869 int instance_num, 870 int bank_num, 871 bcm_flowtracker_elephant_hash_type_t *hash_type, 872 int *right_rotate_bits); 873 874 /* Warmboot */ 875 extern int bcm_th3_cosq_burst_monitor_dma_config_set(int unit, 876 uint32 host_mem_size, 877 uint32 **host_mem_add); 878 extern int bcm_th3_cosq_burst_monitor_dma_config_reset(int unit); 879 extern int bcm_th3_cosq_reinit(int unit); 880 extern int _bcm_th3_cosq_scheduler_reinit(int unit); 881 882 #endif /* BCM_TOMAHAWK3_SUPPORT */ 883 884 #endif /* !_BCM_INT_TOMAHAWK3_H_ */ 885