helix5.h (32253B)
1 /* 2 * $Ided: rc/flex (untracked content) 3 $ 4 * This license is set out in https://raw.githubusercontent.com/Broadcom-Network-Switching-Software/OpenBCM/master/Legal/LICENSE file. 5 * 6 * Copyright 2007-2020 Broadcom Inc. All rights reserved. 7 * 8 * File: trident3.h 9 * Purpose: Function declarations for Trident3 Internal functions. 10 */ 11 12 #ifndef _BCM_INT_HELIX5_H_ 13 #define _BCM_INT_HELIX5_H_ 14 15 #include <bcm_int/esw/mbcm.h> 16 #include <bcm_int/esw/cosq.h> 17 #include <bcm/oob.h> 18 #include <bcm_int/esw/pfc_deadlock.h> 19 #include <soc/profile_mem.h> 20 21 #if defined(BCM_HELIX5_SUPPORT) 22 #include <soc/esw/port.h> 23 #include <bcm_int/esw/l2.h> 24 #include <bcm_int/esw/trident3.h> 25 #include <bcm_int/esw/field.h> 26 #include <bcm_int/esw/keygen_api.h> 27 #include <bcm/flowtracker.h> 28 #include <bcm_int/esw/flowtracker/ft_alu.h> 29 #include <bcm_int/esw/flowtracker/ft_group.h> 30 31 /* entries_per_profile comes from MAXIDX in PHB_MAPPING_TBL_1 32 * MAXIDX => 4608, #(72 ports x 64 profiles) */ 33 #define _BCM_HX5_PHB_MAP_TAB1_ENTRIES_PER_PROFILE (72) 34 35 36 #define _BCM_PFC_DEADLOCK_MASK 0xFF 37 typedef enum { 38 _BCM_HX5_COSQ_INDEX_STYLE_WRED_QUEUE, 39 _BCM_HX5_COSQ_INDEX_STYLE_WRED_PORT, 40 _BCM_HX5_COSQ_INDEX_STYLE_WRED_DEVICE, 41 _BCM_HX5_COSQ_INDEX_STYLE_UCAST_QUEUE, 42 _BCM_HX5_COSQ_INDEX_STYLE_MCAST_QUEUE, 43 _BCM_HX5_COSQ_INDEX_STYLE_EGR_POOL, 44 _BCM_HX5_COSQ_INDEX_STYLE_COS, 45 _BCM_HX5_COSQ_INDEX_STYLE_COUNT 46 } _bcm_hx5_cosq_index_style_t; 47 48 extern int bcmi_hx5_port_fn_drv_init(int unit); 49 50 /* COSQ Module */ 51 extern int 52 bcm_hx5_cosq_init(int unit); 53 54 extern int 55 bcm_hx5_cosq_config_get(int unit, int *numq); 56 57 extern int 58 bcm_hx5_cosq_config_set(int unit, int numq); 59 60 extern int 61 bcm_hx5_cosq_gport_attach(int unit, bcm_gport_t input_gport, 62 bcm_gport_t parent_gport, bcm_cos_queue_t cosq); 63 64 extern int 65 bcm_hx5_cosq_gport_detach(int unit, bcm_gport_t input_gport, 66 bcm_gport_t parent_gport, bcm_cos_queue_t cosq); 67 68 extern int 69 bcm_hx5_cosq_gport_attach_get(int unit, bcm_gport_t sched_gport, 70 bcm_gport_t *input_gport, bcm_cos_queue_t *cosq); 71 72 extern int 73 bcm_hx5_cosq_gport_traverse(int unit, bcm_cosq_gport_traverse_cb cb, 74 void *user_data); 75 76 extern int 77 bcm_hx5_cosq_gport_child_get(int unit, bcm_gport_t in_gport, 78 bcm_cos_queue_t cosq, bcm_gport_t *out_gport); 79 extern int 80 bcm_hx5_cosq_gport_get(int unit, bcm_gport_t gport, bcm_gport_t *port, 81 int *numq, uint32 *flags); 82 83 extern int 84 bcm_hx5_cosq_gport_traverse_by_port(int unit, bcm_gport_t port, 85 bcm_cosq_gport_traverse_cb cb, 86 void *user_data); 87 extern int 88 _bcm_hx5_cosq_port_resolve(int unit, bcm_gport_t gport, bcm_module_t *modid, 89 bcm_port_t *port, bcm_trunk_t *trunk_id, int *id, 90 int *qnum); 91 extern int 92 bcm_hx5_rx_queue_channel_set_test(int unit, bcm_cos_queue_t queue_id, 93 bcm_rx_chan_t chan_id); 94 extern int 95 bcm_hx5_cosq_sched_weight_max_get(int unit, int mode, int *weight_max); 96 97 extern int 98 bcm_hx5_cosq_gport_sched_get(int unit, bcm_gport_t gport, bcm_cos_queue_t cosq, 99 int *mode, int *weight); 100 101 extern int 102 bcm_hx5_cosq_gport_sched_set(int unit, bcm_gport_t gport, bcm_cos_queue_t cosq, 103 int mode, int weight); 104 105 extern int 106 bcm_hx5_cosq_port_sched_get(int unit, bcm_pbmp_t pbm, int *mode, int *weights, 107 int *delay); 108 109 extern int 110 bcm_hx5_cosq_port_sched_set(int unit, bcm_pbmp_t pbm, int mode, const int 111 *weights, int delay); 112 extern int 113 bcm_hx5_cosq_gport_bandwidth_get(int unit, bcm_gport_t gport, 114 bcm_cos_queue_t cosq, uint32 *kbits_sec_min, 115 uint32 *kbits_sec_max, uint32 *flags); 116 117 extern int 118 bcm_hx5_cosq_gport_bandwidth_set(int unit, bcm_gport_t gport, 119 bcm_cos_queue_t cosq, uint32 kbits_sec_min, 120 uint32 kbits_sec_max, uint32 flags); 121 122 extern int 123 bcm_hx5_cosq_port_bandwidth_get(int unit, bcm_port_t port, bcm_cos_queue_t cosq, 124 uint32 *min_quantum, uint32 *max_quantum, 125 uint32 *burst_quantum, uint32 *flags); 126 127 extern int 128 bcm_hx5_cosq_port_bandwidth_set(int unit, bcm_port_t port, bcm_cos_queue_t cosq, 129 uint32 min_quantum, uint32 max_quantum, 130 uint32 burst_quantum, uint32 flags); 131 extern int 132 bcm_hx5_cosq_port_pps_set(int unit, bcm_port_t port, bcm_cos_queue_t cosq, 133 int pps); 134 135 extern int 136 bcm_hx5_cosq_port_pps_get(int unit, bcm_port_t port, bcm_cos_queue_t cosq, 137 int *pps); 138 139 extern int 140 bcm_hx5_cosq_port_burst_set(int unit, bcm_port_t port, bcm_cos_queue_t cosq, 141 int burst); 142 143 extern int 144 bcm_hx5_cosq_port_burst_get(int unit, bcm_port_t port, bcm_cos_queue_t cosq, 145 int *burst); 146 147 extern int 148 _bcm_hx5_cosq_index_resolve(int unit, bcm_port_t port, 149 bcm_cos_queue_t cosq, _bcm_hx5_cosq_index_style_t style, 150 bcm_port_t *local_port, int *index, int *count); 151 152 extern int bcm_hx5_cosq_control_set(int unit, bcm_gport_t gport, 153 bcm_cos_queue_t cosq, 154 bcm_cosq_control_t type, int arg); 155 extern int bcm_hx5_cosq_control_get(int unit, bcm_gport_t gport, 156 bcm_cos_queue_t cosq, 157 bcm_cosq_control_t type, int *arg); 158 extern int 159 bcm_hx5_cosq_config_get(int unit, int *numq); 160 extern int 161 bcm_hx5_cosq_config_set(int unit, int numq); 162 163 extern int 164 bcm_hx5_cosq_discard_set(int unit, uint32 flags); 165 166 extern int 167 bcm_hx5_cosq_discard_get(int unit, uint32 *flags); 168 169 extern int 170 bcm_hx5_cosq_discard_port_set(int unit, bcm_port_t port, bcm_cos_queue_t cosq, 171 uint32 color, int drop_start, int drop_slope, 172 int average_time); 173 174 extern int 175 bcm_hx5_cosq_discard_port_get(int unit, bcm_port_t port, bcm_cos_queue_t cosq, 176 uint32 color, int *drop_start, int *drop_slope, 177 int *average_time); 178 179 extern int 180 bcm_hx5_cosq_gport_discard_set(int unit, bcm_gport_t gport, 181 bcm_cos_queue_t cosq, 182 bcm_cosq_gport_discard_t *discard); 183 184 extern int 185 bcm_hx5_cosq_gport_discard_get(int unit, bcm_gport_t gport, 186 bcm_cos_queue_t cosq, 187 bcm_cosq_gport_discard_t *discard); 188 189 extern int bcm_hx5_cosq_wred_resolution_entry_create(int unit, int *index); 190 191 extern int bcm_hx5_cosq_wred_resolution_entry_destroy(int unit, int index); 192 193 extern int bcm_hx5_cosq_wred_resolution_set(int unit, int index, 194 bcm_cosq_discard_rule_t *rule); 195 196 extern int bcm_hx5_cosq_wred_resolution_get(int unit, int index, int max, 197 bcm_cosq_discard_rule_t *rule, 198 int *count); 199 extern int 200 bcm_hx5_cosq_mapping_set(int unit, bcm_port_t gport, bcm_cos_t priority, 201 bcm_cos_queue_t cosq); 202 203 extern int 204 bcm_hx5_cosq_mapping_get(int unit, bcm_port_t gport, bcm_cos_t priority, 205 bcm_cos_queue_t *cosq); 206 207 extern int 208 bcm_hx5_cosq_gport_mapping_set(int unit, bcm_port_t ing_port, 209 bcm_cos_t int_pri, uint32 flags, 210 bcm_gport_t gport, bcm_cos_queue_t cosq); 211 212 extern int 213 bcm_hx5_cosq_gport_mapping_get(int unit, bcm_port_t ing_port, 214 bcm_cos_t int_pri, uint32 flags, 215 bcm_gport_t *gport, bcm_cos_queue_t *cosq); 216 217 extern int 218 bcm_hx5_cosq_field_classifier_get(int unit, int classifier_id, 219 bcm_cosq_classifier_t *classifier); 220 221 extern int 222 bcm_hx5_cosq_field_classifier_id_create(int unit, bcm_cosq_classifier_t 223 *classifier, int *classifier_id); 224 225 extern int 226 bcm_hx5_cosq_field_classifier_id_destroy(int unit, int classifier_id); 227 228 extern int 229 bcm_hx5_cosq_field_classifier_map_set(int unit, int classifier_id, int count, 230 bcm_cos_t *priority_array, bcm_cos_queue_t *cosq_array); 231 232 extern int 233 bcm_hx5_cosq_field_classifier_map_get(int unit, int classifier_id,int array_max, 234 bcm_cos_t *priority_array, bcm_cos_queue_t *cosq_array, int *array_count); 235 236 extern int 237 bcm_hx5_cosq_field_classifier_map_clear(int unit, int classifier_id); 238 239 extern int 240 bcm_hx5_cosq_stat_set(int unit, bcm_gport_t port, 241 bcm_cos_queue_t cosq, 242 bcm_cosq_stat_t stat, uint64 value); 243 extern int 244 bcm_hx5_cosq_stat_get(int unit, bcm_gport_t port, 245 bcm_cos_queue_t cosq, 246 bcm_cosq_stat_t stat, int sync_mode, 247 uint64 *value); 248 extern int 249 bcm_hx5_cosq_gport_info_get(int unit, bcm_gport_t gport, 250 bcm_cosq_gport_level_info_t *info); 251 252 extern int 253 bcm_hx5_hgcos_select_port_control_set(int unit, bcm_port_t port, 254 bcm_port_control_t type, int value); 255 extern int 256 bcm_hx5_hgcos_select_port_control_get(int unit, bcm_port_t port, 257 bcm_port_control_t type, int *value); 258 259 extern int 260 bcm_hx5_cosq_safc_class_mapping_set(int unit, bcm_gport_t port, int array_count, 261 bcm_cosq_safc_class_mapping_t *mapping_array); 262 263 extern int 264 bcm_hx5_cosq_safc_class_mapping_get(int unit, bcm_gport_t port, int array_max, 265 bcm_cosq_safc_class_mapping_t *mapping_array, 266 int *array_count); 267 268 269 #ifdef INCLUDE_L3 270 extern int 271 _bcm_hx5_ecmp_rh_dynamic_size_encode(int dynamic_size, int *encoded_value); 272 273 extern int 274 _bcm_hx5_ecmp_rh_dynamic_size_decode(int encoded_value, int *dynamic_size); 275 #endif /* INCLUDE_L3 */ 276 277 extern int 278 _bcm_hx5_hg_rh_dynamic_size_encode(int dynamic_size, int *encoded_value); 279 280 extern int 281 _bcm_hx5_hg_rh_dynamic_size_decode(int encoded_value, int *dynamic_size); 282 283 extern int 284 _bcm_hx5_lag_rh_dynamic_size_encode(int dynamic_size, int *encoded_value); 285 286 extern int 287 _bcm_hx5_lag_rh_dynamic_size_decode(int encoded_value, int *dynamic_size); 288 289 extern int 290 bcm_hx5_cosq_port_pfc_op(int unit, bcm_port_t port, 291 bcm_switch_control_t sctype, _bcm_cosq_op_t op, 292 bcm_gport_t *gport, int gport_count); 293 294 extern int 295 bcm_hx5_cosq_port_pfc_get(int unit, bcm_port_t port, 296 bcm_switch_control_t sctype, 297 bcm_gport_t *gport, int gport_count, 298 int *actual_gport_count); 299 300 extern int 301 bcm_hx5_cosq_pfc_class_mapping_set(int unit, bcm_gport_t port, 302 int array_count, 303 bcm_cosq_pfc_class_mapping_t *mapping_array); 304 305 extern int 306 bcm_hx5_cosq_pfc_class_mapping_get(int unit, bcm_gport_t port, 307 int array_max, 308 bcm_cosq_pfc_class_mapping_t *mapping_array, 309 int *array_count); 310 /* 311 * OBM Classifier functions. 312 */ 313 extern int 314 bcm_hx5_switch_obm_classifier_mapping_multi_set(int unit, bcm_gport_t gport, 315 bcm_switch_obm_classifier_type_t switch_obm_classifier_type, 316 int array_count, bcm_switch_obm_classifier_t *switch_obm_classifier); 317 318 extern int 319 bcm_hx5_switch_obm_classifier_mapping_multi_get(int unit, bcm_gport_t gport, 320 bcm_switch_obm_classifier_type_t switch_obm_classifier_type, 321 int array_max, bcm_switch_obm_classifier_t *switch_obm_classifier, 322 int *array_count); 323 324 extern int 325 bcm_hx5_obm_classifier_port_control_set(int unit, bcm_port_t port, 326 bcm_port_control_t type, int value); 327 328 extern int 329 bcm_hx5_obm_classifier_port_control_get(int unit, bcm_port_t port, 330 bcm_port_control_t type, int *value); 331 332 333 extern int bcm_hx5_cosq_port_attach(int unit, bcm_port_t port); 334 extern int bcm_hx5_cosq_port_detach(int unit, bcm_port_t port); 335 336 extern int bcmi_hx5_port_cosmap_update(int unit, pbmp_t pbmp, int enable); 337 extern void bcm_hx5_cosq_sw_dump(int unit); 338 #ifdef BCM_WARM_BOOT_SUPPORT 339 extern int bcm_hx5_cosq_sync(int unit); 340 #endif 341 342 extern int 343 bcm_hx5_cosq_cpu_cosq_enable_set(int unit, bcm_cos_queue_t cosq, int enable); 344 345 extern int 346 bcm_hx5_cosq_cpu_cosq_enable_get(int unit, bcm_cos_queue_t cosq, int *enable); 347 348 extern int 349 bcm_hx5_cosq_buffer_id_multi_get(int unit, bcm_gport_t gport, 350 bcm_cos_queue_t cosq, bcm_cosq_dir_t direction, 351 int array_max, bcm_cosq_buffer_id_t *buf_id_array, 352 int *array_count); 353 354 extern void bcm_hx5_pstats_deinit(int unit); 355 extern int bcm_hx5_pstats_init(int unit); 356 357 extern int 358 _bcm_hx5_cosq_inv_mapping_get(int unit, bcm_gport_t gport, 359 bcm_cos_queue_t cosq, 360 uint32 flags, bcm_port_t *ing_port, 361 bcm_cos_t *priority); 362 363 /* pfc deadlock */ 364 #define HX5_PFC_DEADLOCK_MAX_COS 26 365 366 /* Below structure to contain register/field name specific to chip */ 367 typedef struct _bcm_hx5_pfc_hw_resorces_s { 368 soc_reg_t timer_count[HX5_PFC_DEADLOCK_MAX_COS]; 369 soc_reg_t timer_status[HX5_PFC_DEADLOCK_MAX_COS]; 370 soc_reg_t timer_mask[HX5_PFC_DEADLOCK_MAX_COS]; 371 soc_reg_t timer_en[HX5_PFC_DEADLOCK_MAX_COS]; 372 soc_reg_t chip_config[4]; 373 soc_reg_t port_config[2]; 374 soc_field_t cos_field[HX5_PFC_DEADLOCK_MAX_COS]; 375 soc_field_t time_init_val[HX5_PFC_DEADLOCK_MAX_COS]; 376 soc_field_t time_unit_field; 377 soc_field_t recovery_action_field; 378 soc_field_t deadlock_status_field; 379 } _bcm_hx5_pfc_hw_resorces_t; 380 381 typedef struct _bcm_hx5_pfc_deadlock_control_s { 382 uint8 pfc_deadlock_cos_max; /* Max COS supported for PFC Deadlock 383 * Detection and Recovery */ 384 uint8 pfc_deadlock_cos_used; /* Total COS configured for PFC Deadlock 385 * Detection and Recovery */ 386 uint8 hw_cos_idx_inuse[HX5_PFC_DEADLOCK_MAX_COS]; /* Boolean for used Cos indices */ 387 uint8 cb_enabled; /* Indicator if CB is enabled */ 388 bcm_switch_pfc_deadlock_detection_interval_t time_unit; /* 0 - 100ms, 389 * 1 - 10ms */ 390 uint32 cb_interval; /* CB interval duration */ 391 bcm_cos_t pfc_pri2cos[HX5_PFC_DEADLOCK_MAX_COS]; /* Mapping to reduce run-time 392 * computation */ 393 bcm_cos_t pfc_cos2pri[HX5_PFC_DEADLOCK_MAX_COS]; /* Mapping to reduce run-time 394 * computation */ 395 _bcm_pfc_deadlock_config_t cos_config[HX5_PFC_DEADLOCK_MAX_COS]; 396 _bcm_hx5_pfc_hw_resorces_t hw_regs_fields; 397 bcm_switch_pfc_deadlock_action_t recovery_action; 398 uint32 cb_count; /* Debug ctr to keep track of #times CB fn is called */ 399 _bcm_cosq_inv_mapping_get_f cosq_inv_mapping_get; /* Function to retrieve 400 * Port/Priority from a 401 * given Gport */ 402 } _bcm_hx5_pfc_deadlock_control_t; 403 404 #define _BCM_HX5_PFC_DEADLOCK_HW_RES_INIT(deadlock_hw) \ 405 do { \ 406 int i = 0; \ 407 for (i = 0; i < HX5_PFC_DEADLOCK_MAX_COS; i++) { \ 408 (deadlock_hw)->timer_count[i] = (INVALIDr); \ 409 (deadlock_hw)->timer_status[i] = (INVALIDr); \ 410 (deadlock_hw)->timer_mask[i] = (INVALIDr); \ 411 (deadlock_hw)->timer_en[i] = (INVALIDr); \ 412 (deadlock_hw)->cos_field[i] = (INVALIDf); \ 413 (deadlock_hw)->time_init_val[i] = (INVALIDf); \ 414 } \ 415 (deadlock_hw)->port_config[0] = (INVALIDr); \ 416 (deadlock_hw)->port_config[1] = (INVALIDr); \ 417 (deadlock_hw)->chip_config[0] = (INVALIDr); \ 418 (deadlock_hw)->chip_config[1] = (INVALIDr); \ 419 (deadlock_hw)->time_unit_field = (INVALIDf); \ 420 (deadlock_hw)->recovery_action_field = (INVALIDf); \ 421 (deadlock_hw)->deadlock_status_field = (INVALIDf); \ 422 } while(0); 423 424 #define _BCM_HX5_UNIT_PFC_DEADLOCK_CONTROL(u) _bcm_hx5_pfc_deadlock_control[(u)] 425 #define _BCM_HX5_PFC_DEADLOCK_CONFIG(u,cos) \ 426 (&((_bcm_hx5_pfc_deadlock_control[(u)])->cos_config[(cos)])) 427 #define _BCM_HX5_PFC_DEADLOCK_COS_ENABLED(u,cos) \ 428 ((((_bcm_hx5_pfc_deadlock_control[(u)])->cos_config[(cos)].flags) & \ 429 _BCM_PFC_DEADLOCK_F_ENABLE) ? TRUE : FALSE) 430 #define _BCM_HX5_PFC_DEADLOCK_CB_INTERVAL(u) \ 431 ((_bcm_hx5_pfc_deadlock_control[(u)])->cb_interval) 432 #define _BCM_HX5_PFC_DEADLOCK_CB_ENABLED(u) \ 433 (((_bcm_hx5_pfc_deadlock_control[(u)])->cb_enabled) ? (TRUE) :(FALSE)) 434 #define _BCM_HX5_PFC_DEADLOCK_CB_COUNT(u) \ 435 ((_bcm_hx5_pfc_deadlock_control[(u)])->cb_count) 436 #define _BCM_HX5_PFC_DEADLOCK_TIME_UNIT(u) \ 437 ((_bcm_hx5_pfc_deadlock_control[(u)])->time_unit) 438 #define _BCM_HX5_PFC_DEADLOCK_RECOVERY_ACTION(u) \ 439 ((_bcm_hx5_pfc_deadlock_control[(u)])->recovery_action) 440 441 extern _bcm_hx5_pfc_deadlock_control_t *_bcm_hx5_pfc_deadlock_control[BCM_MAX_NUM_UNITS]; 442 443 extern int _bcm_hx5_pfc_deadlock_recovery_reset(int unit); 444 445 extern int 446 _bcm_hx5_pfc_deadlock_control_set(int unit, bcm_switch_control_t type, int arg); 447 448 extern int 449 _bcm_hx5_pfc_deadlock_control_get(int unit, bcm_switch_control_t type, int *arg); 450 451 extern int bcm_hx5_pfc_deadlock_recovery_start(int unit, 452 bcm_port_t port, int pri); 453 extern int bcm_hx5_pfc_deadlock_recovery_exit(int unit, 454 bcm_port_t port, int pri); 455 456 457 extern int _bcm_hx5_pfc_deadlock_init(int unit); 458 extern int _bcm_hx5_pfc_deadlock_hw_res_init(int unit); 459 460 extern int _bcm_hx5_pfc_deadlock_deinit(int unit); 461 extern int _bcm_hx5_pfc_deadlock_reinit(int unit); 462 463 extern int 464 _bcm_hx5_pfc_deadlock_hw_cos_index_get(int unit, 465 bcm_cos_t priority, 466 int *hw_cos_index); 467 extern int 468 _bcm_hx5_pfc_deadlock_hw_cos_index_set(int unit, 469 bcm_cos_t priority, 470 int *hw_cos_index); 471 extern int 472 _bcm_hx5_pfc_deadlock_chip_config_get(int unit, 473 bcm_cos_t priority, 474 soc_reg_t* chip_config); 475 extern int 476 _bcm_hx5_pfc_deadlock_hw_oper(int unit, 477 _bcm_pfc_deadlock_oper_t operation, 478 bcm_cos_t priority, 479 _bcm_pfc_deadlock_config_t *config); 480 extern int 481 _bcm_hx5_pfc_deadlock_q_config_helper(int unit, 482 _bcm_pfc_deadlock_oper_t operation, 483 bcm_gport_t gport, 484 bcm_cosq_pfc_deadlock_queue_config_t *config, 485 uint8 *enable_status); 486 extern int 487 bcm_hx5_pfc_deadlock_ignore_pfc_xoff_gen(int unit, int priority, 488 bcm_port_t port, uint32 *rval32); 489 extern int 490 _bcm_hx5_pfc_deadlock_recovery_end(int unit, int cos, bcm_port_t port); 491 extern int 492 _bcm_hx5_pfc_deadlock_monitor(int unit); 493 494 extern int 495 bcm_hx5_pfc_deadlock_queue_info_get(int unit, bcm_gport_t gport, bcm_port_t *mmu_port, 496 bcm_port_t *local_port, int *type, int *split); 497 498 extern int 499 bcm_hx5_dump_port_hsp(int unit, bcm_port_t port); 500 501 #if defined(BCM_FIELD_SUPPORT) 502 #if defined(BCM_FLOWTRACKER_SUPPORT) 503 504 /* Reserve entries in ingress flowtracker stage slice 505 * To prevent performing flowtracking on traffic coming out 506 * of broadscan port, we need to add few default entries 507 * 1 for Single-wide, 2 for Double-wide and 1 Reserved 508 */ 509 #define _BCM_FIELD_HX5_INGRESS_FT_RESERVED_ENTRIES 4 510 511 int _bcm_field_ft_group_checkbmp_get(int unit, 512 bcm_flowtracker_group_t id, 513 uint32 num_checks, 514 bcm_field_flowtrackercheck_t *check_list, 515 uint32 *check_bmp_data, 516 uint32 *check_bmp_mask); 517 518 int _bcm_field_ft_group_checklist_get(int unit, 519 bcm_flowtracker_group_t id, 520 uint32 check_bmp_data, 521 uint32 check_bmp_mask, 522 uint32 num_checks, 523 bcm_field_flowtrackercheck_t *check_list, 524 uint32 *actual_num_checks); 525 526 /* init/deinit functions */ 527 extern int _field_hx5_ftstage_init(int unit, 528 _field_control_t *fc, 529 _field_stage_t *stage_fc); 530 531 extern int _field_hx5_ftstage_deinit(int unit, 532 _field_stage_t *stage_fc); 533 534 extern int _field_hx5_ft_tcam_policy_init(int unit, 535 _field_stage_t *stage_fc); 536 537 extern int _field_hx5_ft_stage_quals_map_init(int unit, 538 bcmi_keygen_qual_cfg_info_db_t *db); 539 540 extern int _field_hx5_ft_presel_qualifiers_init(int unit, 541 _field_stage_t *stage_fc); 542 543 extern int _field_ft_keygen_profile_aab_extractors_db_create(int unit, 544 bcmi_keygen_ext_cfg_db_t *ext_cfg_db, 545 int ext_mode); 546 547 extern int _field_ft_keygen_profile_ab_extractors_db_create(int unit, 548 bcmi_keygen_ext_cfg_db_t *ext_cfg_db, 549 int ext_mode); 550 551 extern int _field_hx5_ft_session_profiles_reference(int unit, 552 bcm_flowtracker_group_t id, 553 bcmi_ft_session_profiles_t *profiles); 554 555 /* Preselection related */ 556 extern int _bcm_field_hx5_ft_lt_entry_data_value_set(int unit, 557 _field_stage_t *stage_fc, 558 _field_group_t *fg, 559 int index, 560 soc_mem_t lt_data_mem, 561 uint32 *data); 562 563 extern int _bcm_field_hx5_ft_lt_entry_install(int unit, 564 _field_presel_entry_t *f_presel, 565 _field_lt_slice_t *lt_fs); 566 567 extern int _bcm_field_hx5_ft_lt_entry_hw_remove(int unit, 568 _field_presel_entry_t *f_presel); 569 570 extern int _field_hx5_ft_presel_delete_last_entry_hw(int unit, 571 _field_presel_entry_t *f_presel, 572 int last_hw_index); 573 574 /* Field Group related */ 575 extern int _field_hx5_ft_slice_validate(int unit, 576 _field_stage_t *stage_fc, 577 _field_group_t *fg, 578 int slice_id); 579 580 extern int _field_hx5_ft_ext_code_assign(int unit, 581 int selcode_clear, 582 _field_group_add_fsm_t *fsm_ptr); 583 584 extern int _field_hx5_ft_group_keytype_assign(int unit, 585 _field_stage_t *stage_fc, 586 _field_group_t *fg); 587 588 extern int _field_hx5_ft_group_keytype_clear(int unit, 589 _field_stage_t *stage_fc, 590 _field_group_t *fg); 591 592 extern int _field_hx5_ft_group_keytype_bmp_recover(int unit, 593 _field_stage_t *stage_fc, 594 _field_group_t *fg); 595 596 extern int _field_hx5_ft_group_keygen_remove(int unit, 597 _field_presel_entry_t *f_presel, 598 int hw_idx); 599 600 extern int _field_hx5_ft_group_keygen_install(int unit, 601 _field_presel_entry_t *f_presel); 602 603 extern int _field_hx5_ft_entries_free_get(int unit, 604 _field_slice_t *fs, 605 _field_group_t *fg, 606 int *free_cnt); 607 608 /* Entry related */ 609 extern int _bcm_field_hx5_ft_entry_keytype_set(int unit, 610 _field_entry_t *f_ent); 611 612 extern int _field_hx5_ft_entry_policy_mem_install(int unit, 613 _field_entry_t *f_ent, 614 soc_mem_t policy_mem, 615 int tcam_idx); 616 617 extern int _field_hx5_ft_entry_tcam_policy_install(int unit, 618 _field_entry_t *f_ent, 619 int tcam_idx); 620 621 extern int _bcm_field_hx5_ft_tcam_policy_clear(int unit, 622 _field_entry_t *f_ent, 623 int tcam_idx); 624 625 extern int _bcm_field_hx5_ft_entry_move(int unit, 626 _field_entry_t *f_ent, 627 int parts_count, 628 int *tcam_idx_old, 629 int *tcam_idx_new); 630 631 extern int _field_hx5_ft_stage_entry_enable_set(int unit, 632 _field_entry_t *f_ent, 633 int enable_flag); 634 635 /* Action related */ 636 extern int _bcm_field_hx5_ft_action_params_check(int unit, 637 _field_entry_t *f_ent, 638 _field_action_t *fa); 639 640 extern int _bcm_field_hx5_ft_actions_hw_alloc(int unit, 641 _field_entry_t *f_ent); 642 643 extern int _bcm_field_hx5_ft_actions_hw_free(int unit, 644 _field_entry_t *f_ent, 645 int flags); 646 647 extern int _bcm_field_hx5_ft_group_hw_free(int unit, 648 _field_entry_t *f_ent, 649 _field_action_t *fa, 650 int flags); 651 652 /* FT and keygen related */ 653 extern void _field_hx5_ft_keygen_ext_shift_offsets_get(int unit, 654 _field_ft_keygen_ext_codes_t *ext_codes, 655 int *shift_offsets_arr); 656 657 extern int _bcm_field_hx5_ft_keygen_extractors_set(int unit, 658 int keygen_profile, 659 uint16 ext_ctrl_sel_info_count, 660 bcmi_keygen_ext_ctrl_sel_info_t *ext_ctrl_sel_info, 661 _field_ft_keygen_ext_codes_t *ext_codes); 662 663 extern int _field_ft_tracking_param_qual_map_db_init(int unit, 664 _field_ft_info_t *ft_info, 665 bcmi_keygen_qual_cfg_info_db_t *qual_cfg_info_db); 666 667 extern void _field_ft_tracking_param_qual_map_db_cleanup(int unit, 668 _field_ft_info_t *ft_info); 669 670 extern int _field_hx5_ft_session_profiles_install(int unit, 671 bcm_flowtracker_group_t flow_group_id, 672 bcmi_ft_session_profiles_t *profiles); 673 674 extern int _field_hx5_ft_session_profiles_remove(int unit, 675 bcm_flowtracker_group_t flow_group_id, 676 bcmi_ft_session_profiles_t *profiles); 677 678 extern int _field_hx5_ft_qual_offset_ext_shift_apply(int unit, 679 int split_allowed, 680 _field_ft_keygen_ext_codes_t *ext_codes, 681 _field_ft_qual_ext_offset_info_t *qual_ext_offset_info); 682 683 extern int _field_hx5_ft_qual_ext_offset_info_get(int unit, 684 int keygen_parts_count, 685 bcmi_keygen_oper_t *keygen_oper, 686 _field_ft_qual_ext_offset_info_t **qual_ext_offset_info); 687 688 extern int _bcm_field_hx5_ft_keygen_extractors_mask_set(int unit, 689 _field_ft_qual_ext_offset_info_t *qual_ext_offset_info, 690 _field_ft_keygen_ext_codes_t *ext_codes); 691 692 extern int _bcm_field_hx5_ft_extractors_encode(int unit, 693 _field_ft_keygen_ext_codes_t *ext_codes, 694 int *ext_count, 695 bcmi_ft_hw_extractor_info_t **ext_ctrl_info); 696 697 extern int _bcm_field_hx5_ft_extractors_decode(int unit, 698 bcmi_ft_hw_extractor_info_t *ext_ctrl_info, 699 int ext_count, 700 _field_ft_keygen_ext_codes_t *ext_codes); 701 702 extern int _bcm_field_ft_keygen_profile_extractors_mask_set(int unit, 703 int offset, 704 int width, 705 int ext_num, 706 int *shift_offsets_arr, 707 int mask_offset, 708 uint32 *mask, 709 _field_ft_keygen_ext_codes_t *ext_codes); 710 711 extern void _field_hx5_ft_qual_ext_offset_info_free(int unit, 712 _field_ft_qual_ext_offset_info_t **qual_ext_offset_info); 713 714 extern int _field_hx5_ft_normalize_controls_set( 715 int unit, 716 bcm_flowtracker_group_t id, 717 soc_mem_t policy_mem, 718 uint32 enable, 719 uint32 *data_buf); 720 721 extern int _bcm_field_keygen_qual_offset_info_dump( 722 int unit, 723 int keygen_parts_count, 724 bcmi_keygen_oper_t *keygen_oper); 725 726 extern int _bcm_field_hx5_ft_keygen_hw_extractors_dump( 727 int unit, 728 _field_ft_keygen_ext_codes_t *ext_codes); 729 730 extern int _bcm_field_ft_keygen_extractors_init( 731 _field_ft_keygen_ext_codes_t *ext_codes); 732 733 extern int _bcm_field_hx5_ft_group_update( 734 int unit, 735 bcm_field_group_t group, 736 bcm_field_qset_t *qset); 737 738 extern int _field_hx5_ft_keygen_ext_ctrl_info_get( 739 int unit, 740 _field_ft_keygen_ext_codes_t *ext_codes, 741 bcmi_keygen_ext_ctrl_sel_info_t **out_ext_ctrl_sel_info, 742 uint16 *out_ext_ctrl_sel_info_count); 743 744 extern int _field_hx5_ft_keygen_ext_ctrl_info_skip( 745 int unit, 746 bcmi_keygen_cfg_t *keygen_cfg, 747 uint16 *skipped_size); 748 749 extern int _field_ft_keygen_oper_skip_ext_ctrl_form( 750 int unit, 751 bcm_field_qualify_t qual_id, 752 int type_a2_exts, 753 int type_b_exts, 754 bcmi_keygen_oper_t *keygen_oper); 755 756 extern int _field_ft_keygen_oper_skip_qual_offset_info_form( 757 int unit, 758 int num_parts, 759 bcm_field_qualify_t qual_id, 760 int type_a2_exts, 761 int type_b_exts, 762 bcmi_keygen_oper_t *keygen_oper); 763 764 extern int _field_ft_keygen_skip_qual_ext_ctrl_merge( 765 int unit, 766 int num_parts, 767 bcmi_keygen_oper_t *skip_keygen_oper, 768 bcmi_keygen_oper_t *keygen_oper); 769 770 extern int _bcm_field_ft_group_ext_codes_recover(int unit); 771 #endif 772 #endif 773 774 #if defined (INCLUDE_TCB) && defined (BCM_TCB_SUPPORT) 775 extern int bcm_hx5_cosq_tcb_config_get(int unit, bcm_cosq_buffer_id_t buffer_id, 776 bcm_cosq_tcb_config_t *config); 777 extern int bcm_hx5_cosq_tcb_config_set(int unit, bcm_cosq_buffer_id_t buffer_id, 778 bcm_cosq_tcb_config_t *config); 779 extern int bcm_hx5_cosq_tcb_gport_threshold_mapping_get(int unit, 780 bcm_gport_t gport, bcm_cos_queue_t cosq, 781 bcm_cosq_buffer_id_t buffer_id, int *index); 782 extern int bcm_hx5_cosq_tcb_gport_threshold_mapping_set(int unit, 783 bcm_gport_t gport, bcm_cos_queue_t cosq, 784 bcm_cosq_buffer_id_t buffer_id, 785 int index); 786 extern int bcm_hx5_cosq_tcb_enable(int unit, bcm_cosq_buffer_id_t buffer_id, 787 int enable); 788 extern int bcm_hx5_cosq_tcb_freeze(int unit, bcm_cosq_buffer_id_t buffer_id, 789 int enable); 790 extern int bcm_hx5_cosq_tcb_init(int unit); 791 extern int _bcm_hx5_cosq_tcb_deinit(int unit); 792 extern int bcm_hx5_cosq_tcb_uc_queue_resolve(int unit, bcm_cosq_buffer_id_t buffer_id, int queue, int *index); 793 extern int bcm_hx5_cosq_tcb_buffer_multi_get(int unit, 794 bcm_cosq_buffer_id_t buffer_id, int count, 795 bcm_cosq_tcb_buffer_t *entries, int *num); 796 extern int bcm_hx5_cosq_tcb_event_multi_get(int unit, 797 bcm_cosq_buffer_id_t buffer_id, int count, 798 bcm_cosq_tcb_event_t *entries, int *num, 799 int *overflow_count); 800 extern int bcm_hx5_cosq_tcb_threshold_profile_get(int unit, 801 bcm_cosq_buffer_id_t buffer_id, int index, 802 bcm_cosq_tcb_threshold_profile_t *threshold); 803 extern int bcm_hx5_cosq_tcb_threshold_profile_destroy(int unit, 804 bcm_cosq_buffer_id_t buffer_id, int index); 805 extern int bcm_hx5_cosq_tcb_threshold_profile_create(int unit, int flags, 806 bcm_cosq_buffer_id_t buffer_id, 807 bcm_cosq_tcb_threshold_profile_t *threshold, 808 int *index); 809 #ifdef BCM_WARM_BOOT_SUPPORT 810 extern int bcm_hx5_cosq_tcb_reinit(int unit); 811 #endif 812 #endif 813 814 extern int 815 bcmi_hx5_switch_chip_info_get(int unit, 816 bcm_switch_chip_info_t info_type, 817 int max_size, 818 void *data_buf, 819 int *actual_size); 820 821 #endif /* BCM_HELIX5_SUPPORT */ 822 823 #endif /* !_BCM_INT_HELIX5_H_ */