openbcm

Git mirror of https://github.com/Broadcom-Network-Switching-Software/OpenBCM
git clone git://git.finwo.net/mirror/broadcom/openbcm
Log | Files | Refs | README

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