field_key.h (11439B)
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-2020 Broadcom Inc. All rights reserved. 7 */ 8 9 #ifndef FIELD_FIELD_KEY_H_INCLUDED 10 11 #define FIELD_FIELD_KEY_H_INCLUDED 12 13 #ifndef BCM_DNX_SUPPORT 14 #error "This file is for use by DNX (JR2) family only!" 15 #endif 16 17 #include <include/bcm_int/dnx/field/field.h> 18 #include <include/bcm_int/dnx/field/field_map.h> 19 #include <include/soc/dnx/swstate/auto_generated/types/dnx_field_key_types.h> 20 21 22 23 24 25 26 #define DNX_FIELD_KEY_LOOKUP_STARTING_OFFSET 0 27 28 #define DNX_FIELD_KEY_DE_STARTING_OFFSET 0 29 30 #define DNX_FIELD_KEY_HASH_STARTING_OFFSET 0 31 32 #define DNX_FIELD_KEY_COMPARE_STARTING_OFFSET(_unit) \ 33 (dnx_data_field.tcam.key_size_single_get(_unit) - \ 34 dnx_data_field.stage.stage_info_get(_unit, DNX_FIELD_STAGE_IPMF1)->compare_key_size) 35 36 37 #define DNX_FIELD_KEY_MDB_DT_STARTING_OFFSET(_unit) \ 38 (dnx_data_field.tcam.key_size_single_get(_unit) - dnx_data_field.map.key_size_get(_unit)) 39 40 41 42 typedef struct 43 { 44 45 uint32 size; 46 47 int offset; 48 49 int index; 50 51 dnx_field_ffc_type_e ffc_type; 52 53 uint8 ranges; 54 55 dnx_field_input_type_e input_type; 56 57 int native_pbus; 58 } dnx_field_key_attached_qual_info_t; 59 60 61 typedef struct 62 { 63 64 dnx_field_stage_e field_stage; 65 66 dnx_field_group_type_e fg_type; 67 68 69 dnx_field_key_template_t key_template; 70 71 72 dnx_field_key_length_type_e key_length; 73 74 dnx_field_app_db_id_t app_db_id; 75 76 dnx_field_qual_attach_info_t qual_info[DNX_DATA_MAX_FIELD_GROUP_NOF_QUALS_PER_FG]; 77 78 79 dnx_field_group_compare_id_e compare_id; 80 81 } dnx_field_key_attach_info_in_t; 82 83 84 typedef struct 85 { 86 87 int bit_range_valid; 88 89 int bit_range_align_lsb; 90 91 int bit_range_align_lsb_step; 92 93 int bit_range_lsb_aligned_offset; 94 95 int bit_range_align_msb; 96 97 int bit_range_align_msb_step; 98 } dnx_field_key_de_bit_allocation_info_t; 99 100 101 typedef struct 102 { 103 104 dbal_fields_e ffc_type; 105 106 int offset; 107 108 int field_index; 109 110 uint32 key_offset; 111 112 uint32 size; 113 114 uint32 full_instruction; 115 } dnx_field_key_ffc_instruction_info_t; 116 117 118 typedef struct 119 { 120 121 uint32 ffc_id; 122 123 dbal_enum_value_field_field_key_e key_id; 124 125 dnx_field_key_ffc_instruction_info_t ffc_instruction; 126 } dnx_field_key_ffc_hw_info_t; 127 128 129 typedef struct 130 { 131 132 dnx_field_key_ffc_hw_info_t ffc; 133 134 uint32 key_dest_offset; 135 } dnx_field_key_initial_ffc_info_t; 136 137 138 typedef struct 139 { 140 141 dnx_field_key_ffc_hw_info_t ffc; 142 143 dnx_field_key_initial_ffc_info_t ffc_initial; 144 } dnx_field_key_ffc_and_initial_ffc_info_t; 145 146 147 typedef struct 148 { 149 150 dnx_field_qual_t qual_type; 151 152 dnx_field_key_ffc_and_initial_ffc_info_t ffc_info[DNX_DATA_MAX_FIELD_COMMON_MAX_VAL_NOF_FFC_IN_QUAL]; 153 } dnx_field_key_qualifier_ffc_info_t; 154 155 156 typedef struct 157 { 158 159 dnx_field_key_qualifier_ffc_info_t qualifier_ffc_info[DNX_DATA_MAX_FIELD_GROUP_NOF_QUALS_PER_FG]; 160 } dnx_field_key_group_key_info_t; 161 162 163 typedef struct 164 { 165 166 dnx_field_key_group_key_info_t key; 167 } dnx_field_key_group_ffc_info_t; 168 169 170 171 typedef struct 172 { 173 174 uint32 is_key_id_valid; 175 176 uint32 offset_start; 177 178 uint32 offset_end; 179 } dnx_field_key_ffc_sharing_info_t; 180 181 182 183 184 shr_error_e dnx_field_key_kbr_ffc_array_hw_get( 185 int unit, 186 dnx_field_stage_e field_stage, 187 dnx_field_context_t context_id, 188 dbal_enum_value_field_field_key_e key_id, 189 uint32 ffc_id[DNX_DATA_MAX_FIELD_COMMON_MAX_VAL_NOF_FFC]); 190 191 shr_error_e dnx_field_key_template_t_init( 192 int unit, 193 dnx_field_key_template_t * key_template_p); 194 195 196 shr_error_e dnx_field_key_attach_info_in_t_init( 197 int unit, 198 dnx_field_key_attach_info_in_t * key_in_info_p); 199 200 201 shr_error_e dnx_field_qual_attach_info_t_init( 202 int unit, 203 dnx_field_qual_attach_info_t * qual_info_p); 204 205 206 shr_error_e dnx_field_key_id_t_init( 207 int unit, 208 dnx_field_key_id_t *key_p); 209 210 211 shr_error_e dnx_field_key_bit_range_t_init( 212 int unit, 213 dnx_field_bit_range_t * bit_range_p); 214 215 216 shr_error_e dnx_field_key_detach( 217 int unit, 218 dnx_field_context_t context_id, 219 dnx_field_key_attach_info_in_t * key_in_info_p, 220 dnx_field_key_id_t *key_id_p); 221 222 223 shr_error_e dnx_field_key_attach( 224 int unit, 225 dnx_field_context_t context_id, 226 dnx_field_key_attach_info_in_t * key_in_info_p, 227 dnx_field_key_de_bit_allocation_info_t * bit_range_allocation_info_p, 228 dnx_field_key_id_t *key_id_p); 229 230 231 shr_error_e dnx_field_key_context_feature_key_detach( 232 int unit, 233 dnx_field_stage_e stage, 234 dnx_field_context_t context_id, 235 dnx_field_key_id_t *key_id_p, 236 dnx_field_key_template_t * key_template_p); 237 238 239 shr_error_e dnx_field_key_context_feature_key_attach( 240 int unit, 241 dnx_field_context_t context_id, 242 dnx_field_key_attach_info_in_t * key_in_info_p, 243 dnx_field_key_id_t *key_id_p); 244 245 246 shr_error_e dnx_field_key_compare_detach( 247 int unit, 248 dnx_field_context_t context_id, 249 dnx_field_context_key_info_t * compare_key_info_p); 250 251 252 shr_error_e dnx_field_key_qual_info_get( 253 int unit, 254 dnx_field_stage_e field_stage, 255 dnx_field_context_t context_id, 256 dnx_field_qual_t qual_type, 257 dnx_field_qual_attach_info_t * qual_info_p, 258 dnx_field_key_attached_qual_info_t * dnx_qual_info_p); 259 260 261 shr_error_e dnx_field_key_qual_info_uses_up_to_one_ffc( 262 int unit, 263 dnx_field_stage_e field_stage, 264 dnx_field_qual_t qual_type, 265 dnx_field_qual_attach_info_t * qual_info_p, 266 uint8 *is_up_to_one_ffc_p); 267 268 269 shr_error_e dnx_field_key_template_create( 270 int unit, 271 dnx_field_stage_e field_stage, 272 dnx_field_qual_t * qual_types_p, 273 uint32 starting_offset, 274 dnx_field_key_template_t * key_template_p); 275 276 277 shr_error_e dnx_field_key_single_initial_ffc_get( 278 int unit, 279 dnx_field_context_t context_id, 280 dbal_enum_value_field_field_key_e initial_key_id, 281 uint32 ffc_id, 282 dnx_field_key_initial_ffc_info_t * ipmf1_ffc_initial_p); 283 284 285 shr_error_e dnx_field_key_info_get( 286 int unit, 287 dnx_field_stage_e field_stage, 288 dnx_field_context_t context_id, 289 dnx_field_group_type_e fg_type, 290 dnx_field_key_id_t *key_id_p, 291 dnx_field_key_template_t * key_template_p, 292 dnx_field_key_group_ffc_info_t * group_ffc_info_p, 293 dnx_field_app_db_id_t * app_db_id_p); 294 295 296 297 shr_error_e dnx_field_key_sw_state_init( 298 int unit); 299 300 301 shr_error_e dnx_field_key_compare_mode_single_resources_reserve( 302 int unit, 303 dnx_field_context_t context_id, 304 dnx_field_key_id_t *initial_key_id_p, 305 dnx_field_key_id_t *tcam_key_id_p); 306 307 shr_error_e dnx_field_key_compare_mode_single_resources_free( 308 int unit, 309 dnx_field_context_t context_id, 310 dnx_field_key_id_t *initial_key_id_p, 311 dnx_field_key_id_t *tcam_key_id_p); 312 313 shr_error_e dnx_field_key_compare_mode_double_resources_reserve( 314 int unit, 315 dnx_field_context_t context_id, 316 dnx_field_key_id_t *initial_key_id_1_p, 317 dnx_field_key_id_t *initial_key_id_2_p); 318 319 shr_error_e dnx_field_key_compare_mode_double_resources_free( 320 int unit, 321 dnx_field_context_t context_id, 322 dnx_field_key_id_t *initial_key_id_1_p, 323 dnx_field_key_id_t *initial_key_id_2_p); 324 325 shr_error_e dnx_field_key_hash_resources_reserve( 326 int unit, 327 dnx_field_context_t context_id, 328 dnx_field_key_id_t *initial_key_id); 329 330 shr_error_e dnx_field_key_hash_resources_free( 331 int unit, 332 dnx_field_context_t context_id, 333 dnx_field_key_id_t *initial_key_id_p); 334 335 shr_error_e dnx_field_key_state_table_resources_reserve( 336 int unit, 337 dnx_field_stage_e context_field_stage, 338 dnx_field_context_t context_id); 339 340 shr_error_e dnx_field_key_state_table_resources_free( 341 int unit, 342 dnx_field_stage_e context_field_stage, 343 dnx_field_context_t context_id); 344 345 shr_error_e dnx_field_key_qual_attach_verify( 346 int unit, 347 dnx_field_stage_e field_stage, 348 dnx_field_context_t context_id, 349 dnx_field_group_t fg_id, 350 dnx_field_qual_t dnx_quals[DNX_DATA_MAX_FIELD_GROUP_NOF_QUALS_PER_FG], 351 dnx_field_qual_attach_info_t qual_info[DNX_DATA_MAX_FIELD_GROUP_NOF_QUALS_PER_FG]); 352 353 354 shr_error_e dnx_field_key_kbp_fwd_zero_padding_fill( 355 int unit, 356 dbal_enum_value_field_kbp_fwd_opcode_e opcode_id, 357 int segment_id, 358 dnx_field_group_kbp_segment_info_t * segment_info_p, 359 int is_zero_padding, 360 dbal_enum_value_field_kbp_fwd_opcode_e opcode_id_that_uses_zero_padding, 361 int ffc_id); 362 363 364 shr_error_e dnx_field_key_kbp_acl_compare_qualifiers_for_sharing( 365 int unit, 366 int nof_quals_1, 367 dnx_field_qual_t dnx_qual_1[DNX_FIELD_GROUP_EXTERNAL_NOF_QUALS_PER_SEGMENT], 368 dnx_field_qual_attach_info_t qual_attach_info_1[DNX_FIELD_GROUP_EXTERNAL_NOF_QUALS_PER_SEGMENT], 369 int nof_quals_2, 370 dnx_field_qual_t dnx_qual_2[DNX_FIELD_GROUP_EXTERNAL_NOF_QUALS_PER_SEGMENT], 371 dnx_field_qual_attach_info_t qual_attach_info_2[DNX_FIELD_GROUP_EXTERNAL_NOF_QUALS_PER_SEGMENT], 372 int *fully_shareable_p, 373 int *partially_shareable_p, 374 int *partial_sharing_lsb_offset_p); 375 376 377 shr_error_e dnx_field_key_kbp_segment_position( 378 int unit, 379 dbal_enum_value_field_kbp_fwd_opcode_e opcode_id, 380 uint8 fwd_context, 381 dnx_field_context_t acl_context_id, 382 int seg_idx_on_master_key, 383 dbal_enum_value_field_kbp_kbr_idx_e * key_kbp_id_p, 384 int *lsb_on_key_p, 385 int *size_on_key_p); 386 387 388 shr_error_e dnx_field_key_kbp_fwd_segment_unified_position( 389 int unit, 390 dbal_enum_value_field_kbp_fwd_opcode_e opcode_id, 391 int seg_idx_on_master_key, 392 dbal_enum_value_field_kbp_kbr_idx_e * key_kbp_id_p, 393 int *lsb_on_key_p, 394 int *size_on_key_p); 395 396 397 shr_error_e dnx_field_key_kbp_master_offset_to_key( 398 int unit, 399 dbal_enum_value_field_kbp_fwd_opcode_e opcode_id, 400 int offset_on_master_from_msb, 401 int size_on_key, 402 dbal_enum_value_field_kbp_kbr_idx_e * key_kbp_id_last_p, 403 uint32 *keys_bmp_p, 404 int *offset_on_last_key_p); 405 406 407 shr_error_e dnx_field_key_find_common_available_ffc( 408 int unit, 409 dnx_field_stage_e field_stage, 410 dnx_field_context_t contexts_to_share_ffc[DNX_DATA_MAX_FIELD_COMMON_MAX_VAL_NOF_CONTEXTS], 411 unsigned int nof_context_to_share_ffc, 412 int *ffc_id_p); 413 414 415 shr_error_e dnx_field_key_kbp_set( 416 int unit, 417 dbal_enum_value_field_kbp_fwd_opcode_e opcode_id, 418 uint8 fwd_context, 419 dnx_field_context_t acl_context_id, 420 dnx_field_group_kbp_info_t * kbp_opcode_info_p); 421 422 423 shr_error_e dnx_field_key_fwd2_to_acl_key_id_convert( 424 int unit, 425 dbal_enum_value_field_field_key_e key_id, 426 dbal_enum_value_field_kbp_kbr_idx_e * kbp_kbr_id_p); 427 428 429 shr_error_e dnx_field_key_acl_to_fwd2_key_id_convert( 430 int unit, 431 dbal_enum_value_field_kbp_kbr_idx_e kbp_kbr_id, 432 dbal_enum_value_field_field_key_e * key_id_p); 433 434 435 shr_error_e dnx_field_key_kbp_ffc_info_get( 436 int unit, 437 dnx_field_group_t fg_id, 438 int opcode_id, 439 uint8 fwd_context, 440 dnx_field_context_t acl_context_id, 441 dnx_field_key_group_ffc_info_t * group_ffc_info_p); 442 443 444 shr_error_e dnx_field_key_ifwd2_acl_ffc_update_for_new_context( 445 int unit, 446 dbal_enum_value_field_kbp_fwd_opcode_e base_opcode_id, 447 uint8 fwd_context_id, 448 dnx_field_context_t acl_context_id); 449 450 451 shr_error_e dnx_field_key_ifwd2_acl_ffc_init( 452 int unit); 453 454 455 shr_error_e dnx_field_key_ifwd2_acl_key_verify( 456 int unit); 457 458 459 shr_error_e dnx_field_key_l4_ops_ffc_set( 460 int unit, 461 dnx_field_qual_t qual_type, 462 uint32 ffc_id, 463 dnx_field_qual_attach_info_t * qual_attach_info_p); 464 465 466 467 #endif