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