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_actions.h (22856B)


      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_ACTIONS_H_INCLUDED
     10 
     11 #define FIELD_FIELD_ACTIONS_H_INCLUDED
     12 
     13 #ifndef BCM_DNX_SUPPORT
     14 #error "This file is for use by DNX (JR2) family only!"
     15 #endif
     16 
     17 
     18 #include <sal/types.h>
     19 #include <soc/dnx/dnx_data/auto_generated/dnx_data_device.h>
     20 #include <soc/dnx/dnx_data/auto_generated/dnx_data_field.h>
     21 #include <soc/dnx/dnx_data/auto_generated/dnx_data_max_field.h>
     22 #include <include/soc/dnx/swstate/auto_generated/types/dnx_field_actions_types.h>
     23 #include <soc/dnx/swstate/auto_generated/access/dnx_field_actions_access.h>
     24 #include <soc/dnx/swstate/auto_generated/access/dnx_field_access.h>
     25 #include <bcm_int/dnx/field/field_entry.h>
     26 
     27 
     28 
     29 
     30 #define FES_INFO_VALID_TYPE_ALWAYS         1
     31 
     32 #define FES_INFO_VALID_TYPE_CONDITIONAL    0
     33 #define FES_INFO_VALID_POLARITY_ASSERTED   1
     34 #define FES_INFO_VALID_POLARITY_DEASSERTED 0
     35 
     36 #define DNX_FIELD_ACTION_FES_VALID_BIT_POLARITY_ONE (1)
     37 #define DNX_FIELD_ACTION_FES_VALID_BIT_POLARITY_ZERO (0)
     38 
     39 #define DNX_FIELD_NOF_BITS_2MSB_SELECT 2
     40 
     41 #define DNX_FIELD_KEY_SELECT_BIT_GRANULARITY                  32
     42 
     43 #define DNX_FIELD_ACTIONS_NUM_LOCATIONS_OF_2MSB_ON_FG  \
     44     ((((DNX_DATA_MAX_FIELD_GROUP_NOF_KEYS_PER_FG_MAX) * (DNX_DATA_MAX_FIELD_TCAM_KEY_SIZE_SINGLE)) \
     45       + (DNX_FIELD_KEY_SELECT_BIT_GRANULARITY + 1)) / (DNX_FIELD_KEY_SELECT_BIT_GRANULARITY))
     46 
     47 
     48 #define DNX_FIELD_INVALID_FEM_KEY_SELECT     DBAL_ENUM_FVAL_FIELD_PMF_A_FEM_KEY_SELECT_INVALID_FEM_KEY_SELECT
     49 
     50 
     51 #define DNX_FIELD_FEM_CONTEXT_NOT_OCCUPIED_VERIFY(_unit,_fem_id,_context_id)  \
     52 {  \
     53       \
     54     dnx_field_pmf_fem_context_entry_t _loc_dnx_field_pmf_fem_program_entry;  \
     55       \
     56     _loc_dnx_field_pmf_fem_program_entry.fem_id = _fem_id;  \
     57     _loc_dnx_field_pmf_fem_program_entry.context_id = _context_id;  \
     58     SHR_IF_ERR_EXIT(dnx_field_actions_fem_context_hw_get(_unit, &_loc_dnx_field_pmf_fem_program_entry));  \
     59     if (_loc_dnx_field_pmf_fem_program_entry.pmf_fem_program.fem_key_select !=  \
     60         DNX_FIELD_INVALID_FEM_KEY_SELECT)  \
     61     {  \
     62         SHR_ERR_EXIT(_SHR_E_PARAM,  \
     63                      "This 'fem_id' (%d) on this fem context_id (%d) is already occupied (fes_key_select %d) while is should have been free. Quit. \n",  \
     64                      _fem_id, _context_id, _loc_dnx_field_pmf_fem_program_entry.pmf_fem_program.fem_key_select);  \
     65     }  \
     66 }
     67 
     68 #define DNX_FIELD_FEM_CONTEXT_OCCUPIED_VERIFY(_unit,_fem_id,_context_id)  \
     69 {  \
     70       \
     71     dnx_field_pmf_fem_context_entry_t _loc_dnx_field_pmf_fem_program_entry;  \
     72       \
     73     _loc_dnx_field_pmf_fem_program_entry.fem_id = _fem_id;  \
     74     _loc_dnx_field_pmf_fem_program_entry.context_id = _context_id;  \
     75     SHR_IF_ERR_EXIT(dnx_field_actions_fem_context_hw_get(_unit, &_loc_dnx_field_pmf_fem_program_entry));  \
     76     if (_loc_dnx_field_pmf_fem_program_entry.pmf_fem_program.fem_key_select ==  \
     77         DNX_FIELD_INVALID_FEM_KEY_SELECT)  \
     78     {  \
     79         SHR_ERR_EXIT(_SHR_E_PARAM,  \
     80                      "This 'fem_id' (%d) on this fem context_id (%d) is free (fes_key_select %d) while is shoul have been occupied. Quit. \n",  \
     81                      _fem_id, _context_id, _loc_dnx_field_pmf_fem_program_entry.pmf_fem_program.fem_key_select);  \
     82     }  \
     83 }
     84 
     85 
     86 
     87 
     88 
     89 typedef struct
     90 {
     91     
     92     dnx_field_action_type_t action_type;
     93     
     94     dnx_field_fes_valid_bits_t valid_bits;
     95     
     96     dnx_field_fes_shift_t shift;
     97     
     98     dnx_field_fes_type_t type;
     99     dnx_field_fes_polarity_t polarity;
    100 } __ATTRIBUTE_PACKED__ dnx_field_actions_fes_common_info_fes2msb_t;
    101 
    102 
    103 typedef struct
    104 {
    105     
    106     dnx_field_actions_fes_common_info_fes2msb_t fes2msb_info[DNX_DATA_MAX_FIELD_COMMON_MAX_VAL_NOF_PROG_PER_FES];
    107 } __ATTRIBUTE_PACKED__ dnx_field_actions_fes_common_info_t;
    108 
    109 
    110 typedef struct
    111 {
    112     
    113     uint32 required_mask;
    114 } __ATTRIBUTE_PACKED__ dnx_field_actions_fes_alloc_info_fes2msb_t;
    115 
    116 
    117 typedef struct
    118 {
    119     
    120     dnx_field_actions_fes_alloc_info_fes2msb_t fes2msb_info[DNX_DATA_MAX_FIELD_COMMON_MAX_VAL_NOF_PROG_PER_FES];
    121     
    122     dnx_field_action_priority_t priority;
    123 } __ATTRIBUTE_PACKED__ dnx_field_actions_fes_alloc_info_t;
    124 
    125 
    126 typedef struct
    127 {
    128     
    129     dnx_field_fes_key_select_t key_select;
    130 } __ATTRIBUTE_PACKED__ dnx_field_actions_fes_write_info_t;
    131 
    132 
    133 typedef struct
    134 {
    135     
    136     dnx_field_actions_fes_common_info_t common_info;
    137     
    138     dnx_field_actions_fes_alloc_info_t alloc_info;
    139     
    140     dnx_field_actions_fes_write_info_t write_info;
    141 } __ATTRIBUTE_PACKED__ dnx_field_actions_fes_info_t;
    142 
    143 
    144 typedef struct
    145 {
    146     
    147     dnx_field_action_t dnx_action;
    148     
    149     uint8 size;
    150     
    151     uint8 lsb;
    152     
    153     uint8 dont_use_valid_bit;
    154     
    155     uint8 valid_bit_polarity;
    156     
    157     dnx_field_fes_mask_t mask;
    158 } dnx_field_actions_fes_single_add_conf_t;
    159 
    160 
    161 typedef struct
    162 {
    163     
    164     dnx_field_qual_t qual_type;
    165     
    166     unsigned int val;
    167 } dnx_field_dir_ext_quals_for_msb_bits_t;
    168 
    169 
    170 typedef struct
    171 {
    172     
    173     dnx_field_action_type_t action_type;
    174     dnx_field_fes_valid_bits_t valid_bits;
    175     dnx_field_fes_shift_t shift;
    176     dnx_field_fes_type_t type;
    177     dnx_field_fes_polarity_t polarity;
    178     dnx_field_fes_chosen_mask_t chosen_mask;
    179     
    180     dnx_field_fes_mask_t mask;
    181 } dnx_field_actions_fes_quartet_get_info_fes2msb_t;
    182 
    183 
    184 typedef struct
    185 {
    186     
    187     dnx_field_fes_id_t fes_id;
    188     
    189     dnx_field_fes_pgm_id_t fes_pgm_id;
    190     
    191     dnx_field_action_priority_t priority;
    192     
    193     dnx_field_group_t fg_id;
    194     
    195     uint8 place_in_fg;
    196     
    197     dnx_field_fes_key_select_t key_select;
    198     
    199     dnx_field_actions_fes_quartet_get_info_fes2msb_t fes2msb_info[DNX_DATA_MAX_FIELD_COMMON_MAX_VAL_NOF_PROG_PER_FES];
    200 } dnx_field_actions_fes_quartet_context_get_info_t;
    201 
    202 
    203 typedef struct
    204 {
    205     
    206     unsigned int nof_fes_quartets;
    207     
    208         dnx_field_actions_fes_quartet_context_get_info_t
    209         fes_quartets[DNX_DATA_MAX_FIELD_COMMON_MAX_VAL_NOF_FES_INSTRUCTION_PER_CONTEXT];
    210 } dnx_field_actions_fes_context_get_info_t;
    211 
    212 
    213 typedef struct
    214 {
    215     
    216     dnx_field_fes_id_t fes_id;
    217     
    218     dnx_field_fes_pgm_id_t fes_pgm_id;
    219     
    220     dnx_field_action_priority_t priority;
    221     
    222     dnx_field_fes_key_select_t key_select;
    223     
    224     dnx_field_actions_fes_quartet_get_info_fes2msb_t fes2msb_info[DNX_DATA_MAX_FIELD_COMMON_MAX_VAL_NOF_PROG_PER_FES];
    225 } dnx_field_actions_fes_quartet_context_group_get_info_t;
    226 
    227 
    228 typedef struct
    229 {
    230     
    231     dnx_field_actions_fes_quartet_context_group_get_info_t
    232         initial_fes_quartets[DNX_DATA_MAX_FIELD_COMMON_MAX_VAL_NOF_ACTION_PER_GROUP];
    233     
    234     dnx_field_actions_fes_quartet_context_group_get_info_t
    235         added_fes_quartets[DNX_DATA_MAX_FIELD_COMMON_MAX_VAL_NOF_ACTION_PER_GROUP];
    236 } dnx_field_actions_fes_context_group_get_info_t;
    237 
    238 
    239 typedef struct
    240 {
    241     
    242     dnx_field_actions_fes_quartet_get_info_fes2msb_t fes2msb_info[DNX_DATA_MAX_FIELD_COMMON_MAX_VAL_NOF_PROG_PER_FES];
    243 } dnx_field_actions_fes_pgm_ctx_info_t;
    244 
    245 
    246 typedef struct
    247 {
    248     
    249     uint32 context_bmp[BITS2WORDS(DNX_DATA_MAX_FIELD_COMMON_MAX_VAL_NOF_CONTEXTS)];
    250 
    251     
    252     dnx_field_group_t field_group;
    253 
    254     
    255     uint8 masks_id_used[DNX_DATA_MAX_FIELD_COMMON_MAX_VAL_NOF_MASKS_PER_FES];
    256 
    257     
    258     dnx_field_actions_fes_pgm_ctx_info_t pgm_ctx_2msb_info[DNX_DATA_MAX_FIELD_COMMON_MAX_VAL_NOF_CONTEXTS];
    259 } dnx_field_actions_fes_pgm_info_t;
    260 
    261 
    262 typedef struct
    263 {
    264     
    265     dnx_field_fes_mask_t action_masks[DNX_DATA_MAX_FIELD_COMMON_MAX_VAL_NOF_MASKS_PER_FES];
    266     
    267     dnx_field_actions_fes_pgm_info_t fes_pgm_info[DNX_DATA_MAX_FIELD_COMMON_MAX_VAL_NOF_FES_PROGRAMS];
    268     
    269     uint8 place_in_fg;
    270     
    271     dnx_field_fes_key_select_t key_select;
    272 
    273 } dnx_field_actions_fes_id_get_info_t;
    274 
    275 
    276 typedef struct
    277 {
    278     
    279     dnx_field_action_t dnx_action;
    280     
    281     dbal_enum_value_field_field_io_e field_io;
    282     
    283     unsigned int lsb;
    284     
    285     uint8 dont_use_valid_bit;
    286     
    287     dnx_field_action_priority_t priority;
    288     
    289     uint8 valid_bit_polarity;
    290 } dnx_field_actions_single_fes_add_t;
    291 
    292 
    293 typedef struct
    294 {
    295     
    296     dnx_field_fes_id_t fes_id;
    297     
    298     dnx_field_action_type_t action_type;
    299     dnx_field_fes_valid_bits_t valid_bits;
    300     dnx_field_fes_shift_t shift;
    301     dnx_field_fes_type_t type;
    302     dnx_field_fes_polarity_t polarity;
    303     dnx_field_fes_chosen_mask_t chosen_mask;
    304     dnx_field_fes_mask_t mask;
    305 } dnx_field_actions_fes_ace_instr_get_info_t;
    306 
    307 
    308 typedef struct
    309 {
    310     
    311     unsigned int nof_fes_instr;
    312     
    313     dnx_field_actions_fes_ace_instr_get_info_t fes_instr[DNX_DATA_MAX_FIELD_ACE_NOF_FES_INSTRUCTION_PER_CONTEXT];
    314 } dnx_field_actions_fes_ace_get_info_t;
    315 
    316 
    317 typedef struct
    318 {
    319     
    320     dnx_field_action_in_group_info_t actions_on_payload_info[DNX_DATA_MAX_FIELD_COMMON_MAX_VAL_NOF_ACTION_PER_GROUP];
    321 } dnx_field_actions_fg_payload_info_t;
    322 
    323 
    324 typedef struct
    325 {
    326     
    327     dnx_field_action_in_group_info_t actions_on_payload_info[DNX_DATA_MAX_FIELD_COMMON_MAX_VAL_NOF_ACTION_PER_GROUP];
    328 } dnx_field_actions_ace_payload_info_t;
    329 
    330 
    331 
    332 
    333 typedef struct
    334 {
    335     
    336     uint8 available;
    337     
    338     unsigned int lsb;
    339     
    340     unsigned int bit_width;
    341     
    342     uint32 validity_condition;
    343 
    344 } dnx_field_dir_ext_fes_data_2msb_information_t;
    345 
    346 
    347 typedef struct
    348 {
    349     
    350     dnx_field_qual_t qualifier_type;
    351     
    352     unsigned int bit_on_fes_data;
    353 } dnx_field_actions_feature_2msb_qualifier_map_info_t;
    354 
    355 
    356 shr_error_e dnx_field_actions_io_to_replace_select(
    357     int unit,
    358     dbal_enum_value_field_field_io_e field_io,
    359     dbal_enum_value_field_field_fem_replace_lsb_select_e * replace_lsb_select_p);
    360 
    361 
    362 shr_error_e dnx_field_action_attach_info_single_t_init(
    363     int unit,
    364     dnx_field_action_attach_info_t * action_info_p);
    365 
    366 
    367 shr_error_e dnx_field_action_attach_info_t_init(
    368     int unit,
    369     dnx_field_action_attach_info_t action_info[DNX_DATA_MAX_FIELD_COMMON_MAX_VAL_NOF_ACTION_PER_GROUP]);
    370 
    371 
    372 shr_error_e dnx_field_actions_fes_single_add_conf_t_init(
    373     int unit,
    374     dnx_field_actions_fes_single_add_conf_t efes_action_info[DNX_DATA_MAX_FIELD_COMMON_MAX_VAL_NOF_PROG_PER_FES]);
    375 
    376 
    377 shr_error_e dnx_field_action_in_group_info_t_init(
    378     int unit,
    379     dnx_field_action_in_group_info_t * struct_p);
    380 
    381 
    382 shr_error_e dnx_field_action_in_group_bit_size(
    383     int unit,
    384     dnx_field_stage_e field_stage,
    385     dnx_field_action_in_group_info_t * action_p,
    386     unsigned int *action_size_w_valid_p,
    387     unsigned int *action_size_wo_valid_p);
    388 
    389 
    390 shr_error_e dnx_field_actions_place_actions(
    391     int unit,
    392     dnx_field_stage_e field_stage,
    393     unsigned int max_nof_bits_on_payload,
    394     dnx_field_action_in_group_info_t actions_info[DNX_DATA_MAX_FIELD_COMMON_MAX_VAL_NOF_ACTION_PER_GROUP]);
    395 
    396 
    397 shr_error_e dnx_field_actions_calc_feses(
    398     int unit,
    399     dnx_field_stage_e field_stage,
    400     dbal_enum_value_field_field_io_e field_io,
    401     dnx_field_action_in_group_info_t actions_info[DNX_DATA_MAX_FIELD_COMMON_MAX_VAL_NOF_ACTION_PER_GROUP],
    402     int template_shift,
    403     dnx_field_action_attach_info_t action_attach_info[DNX_DATA_MAX_FIELD_COMMON_MAX_VAL_NOF_ACTION_PER_GROUP],
    404     dnx_field_actions_fes_info_t fes_inst_info[DNX_DATA_MAX_FIELD_COMMON_MAX_VAL_NOF_ACTION_PER_GROUP]);
    405 
    406 
    407 shr_error_e dnx_field_actions_fes_set(
    408     int unit,
    409     dnx_field_stage_e field_stage,
    410     dnx_field_group_t fg_id,
    411     dnx_field_context_t context_id,
    412     int is_nonshareable,
    413     int is_post_attach,
    414     dnx_field_actions_fes_info_t fes_inst_info[DNX_DATA_MAX_FIELD_COMMON_MAX_VAL_NOF_ACTION_PER_GROUP]);
    415 
    416 shr_error_e dnx_field_actions_fes_ace_set(
    417     int unit,
    418     dnx_field_ace_id_t ace_id,
    419     dnx_field_actions_fes_info_t fes_inst_info[DNX_DATA_MAX_FIELD_COMMON_MAX_VAL_NOF_ACTION_PER_GROUP]);
    420 
    421 
    422 shr_error_e dnx_field_actions_fes_detach(
    423     int unit,
    424     dnx_field_stage_e field_stage,
    425     dnx_field_group_t fg_id,
    426     dnx_field_context_t context_id,
    427     dnx_field_fes_id_t fes_id);
    428 
    429 
    430 shr_error_e dnx_field_actions_fes_ace_detach(
    431     int unit,
    432     dnx_field_ace_id_t ace_id);
    433 
    434 
    435 shr_error_e dnx_field_actions_context_fes_info_get(
    436     int unit,
    437     dnx_field_stage_e field_stage,
    438     dnx_field_context_t context_id,
    439     dnx_field_actions_fes_context_get_info_t * context_fes_get_info_p);
    440 
    441 
    442 shr_error_e dnx_field_actions_fes_id_info_get(
    443     int unit,
    444     dnx_field_stage_e field_stage,
    445     uint32 fes_id,
    446     dnx_field_actions_fes_id_get_info_t * fes_id_get_info_p);
    447 
    448 
    449 shr_error_e dnx_field_actions_context_fes_info_to_group_fes_info(
    450     int unit,
    451     dnx_field_group_t fg_id,
    452     dnx_field_actions_fes_context_get_info_t * fes_context_info_p,
    453     dnx_field_actions_fes_context_group_get_info_t * fes_group_info_p);
    454 
    455 
    456 shr_error_e dnx_field_actions_ace_id_nof_mask_state_get(
    457     int unit,
    458     uint8 nof_masks[DNX_DATA_MAX_FIELD_ACE_NOF_FES_INSTRUCTION_PER_CONTEXT]);
    459 
    460 
    461 shr_error_e dnx_field_actions_ace_id_fes_info_get(
    462     int unit,
    463     dnx_field_ace_id_t ace_id,
    464     dnx_field_actions_fes_ace_get_info_t * ace_id_fes_get_info_p);
    465 
    466 
    467 shr_error_e dnx_field_efes_action_add(
    468     int unit,
    469     dnx_field_group_t fg_id,
    470     dnx_field_context_t context_id,
    471     bcm_field_action_priority_t action_priority,
    472     int use_condition,
    473     int efes_condition_msb,
    474     dnx_field_actions_fes_single_add_conf_t
    475     efes_encoded_extraction[DNX_DATA_MAX_FIELD_COMMON_MAX_VAL_NOF_PROG_PER_FES]);
    476 
    477 
    478 shr_error_e dnx_field_efes_action_info_get(
    479     int unit,
    480     dnx_field_group_t fg_id,
    481     dnx_field_context_t context_id,
    482     bcm_field_action_priority_t action_priority,
    483     int *use_condition_p,
    484     int *efes_condition_msb_p,
    485     dnx_field_actions_fes_single_add_conf_t
    486     efes_encoded_extraction[DNX_DATA_MAX_FIELD_COMMON_MAX_VAL_NOF_PROG_PER_FES]);
    487 
    488 
    489 shr_error_e dnx_field_efes_action_remove(
    490     int unit,
    491     dnx_field_group_t fg_id,
    492     dnx_field_context_t context_id,
    493     bcm_field_action_priority_t action_priority);
    494 
    495 
    496 shr_error_e dnx_field_efes_action_context_create_fes_update(
    497     int unit,
    498     dnx_field_stage_e stage,
    499     dnx_field_context_t context_id,
    500     dnx_field_context_t cascaded_from);
    501 
    502 
    503 shr_error_e dnx_field_efes_action_context_destroy_fes_update(
    504     int unit,
    505     dnx_field_stage_e stage,
    506     dnx_field_context_t context_id,
    507     dnx_field_context_t cascaded_from);
    508 
    509 
    510 shr_error_e dnx_field_actions_fes_info_t_init(
    511     int unit,
    512     dnx_field_stage_e field_stage,
    513     dnx_field_actions_fes_info_t fes_inst_info[DNX_DATA_MAX_FIELD_COMMON_MAX_VAL_NOF_ACTION_PER_GROUP]);
    514 
    515 
    516 
    517 
    518 #define DNX_FIELD_INIT_FEM_TABLES_FAST          0
    519 
    520 #define DNX_FIELD_FEM_BIT_FOR_MAP_TYPE          (dnx_data_field.stage.stage_info_get(unit, DNX_FIELD_STAGE_IPMF1)->num_bits_in_fem_field_select - 1)
    521 
    522 #define DNX_FIELD_FEM_MASK_FOR_MAP_TYPE       SAL_BIT(DNX_FIELD_FEM_BIT_FOR_MAP_TYPE)
    523 
    524 #define DNX_FIELD_FEM_MAP_TYPE_KEY_SELECT    0
    525 
    526 #define DNX_FIELD_FEM_MASK_FOR_MAP_DATA        \
    527     (SAL_UPTO_BIT(dnx_data_field.stage.stage_info_get(unit, DNX_FIELD_STAGE_IPMF1)->num_bits_in_fem_field_select) & \
    528     SAL_FROM_BIT(dnx_data_field.stage.stage_info_get(unit, DNX_FIELD_STAGE_IPMF1)->log_nof_bits_in_fem_map_data_field))
    529 
    530 #define DNX_FIELD_FEM_MASK_OF_MAP_DATA        0x20
    531 
    532 #define DNX_FIELD_FEM_MASK_OF_BIT_VALUE       0x30
    533 
    534 #define DNX_FIELD_FEM_NUM_VALUES_ON_BIT_VALUE 2
    535 
    536 #define FEM_INFO                     dnx_field_action_sw_db.fem_info
    537 #define FEM_INFO_FG_ID_INFO          FEM_INFO.fg_id_info
    538 #define FEM_INFO_FEM_ENCODED_ACTIONS FEM_INFO.fg_id_info.fem_encoded_actions
    539 
    540 
    541 #define DEFAULT_FEM_PROGRAM         0
    542 
    543 #define FIRST_AVAILABLE_FEM_PROGRAM (DEFAULT_FEM_PROGRAM + 0)
    544 
    545 
    546 
    547 typedef struct
    548 {
    549     
    550     dnx_field_fem_id_t fem_id;
    551     
    552     dnx_field_fem_program_t fem_program;
    553     
    554     dnx_field_fem_condition_t fem_condition;
    555     
    556     dnx_field_fem_condition_entry_t fem_condition_entry;
    557 } dnx_field_fem_map_index_entry_t;
    558 
    559 typedef struct
    560 {
    561     
    562     dnx_field_fem_id_t fem_id;
    563     
    564     dnx_field_fem_map_index_t fem_map_index;
    565     
    566     dnx_field_fem_action_entry_t fem_action_entry;
    567 } dnx_field_fem_action_info_t;
    568 
    569 typedef struct
    570 {
    571     
    572     dnx_field_fem_id_t fem_id;
    573     
    574     dnx_field_fem_program_t fem_program;
    575     
    576     dnx_field_fem_condition_ms_bit_t fem_condition_ms_bit;
    577 } dnx_field_fem_condition_ms_bit_entry_t;
    578 
    579 typedef struct
    580 {
    581     
    582     dnx_field_fem_program_t fem_program;
    583     
    584     dbal_enum_value_field_field_fem_replace_lsb_flag_e replace_lsb_flag;
    585     
    586     dbal_enum_value_field_field_fem_replace_lsb_select_e replace_lsb_select;
    587     
    588     dbal_enum_value_field_field_pmf_a_fem_key_select_e fem_key_select;
    589 } dnx_field_pmf_fem_program_t;
    590 
    591 typedef struct
    592 {
    593     
    594     dnx_field_fem_id_t fem_id;
    595     
    596     dnx_field_context_t context_id;
    597     
    598     dnx_field_pmf_fem_program_t pmf_fem_program;
    599 } dnx_field_pmf_fem_context_entry_t;
    600 
    601 
    602 
    603 shr_error_e dnx_field_actions_fem_key_select_get(
    604     int unit,
    605     dbal_enum_value_field_field_io_e actions_block,
    606     unsigned int action_size,
    607     unsigned int action_lsb,
    608     dbal_enum_value_field_field_pmf_a_fem_key_select_e * action_input_select_p,
    609     unsigned int *required_shift_p,
    610     int *found_p);
    611 
    612 shr_error_e dnx_field_single_fem_prg_sw_state_init(
    613     int unit,
    614     dnx_field_fem_id_t fem_id,
    615     dnx_field_fem_program_t fem_program);
    616 
    617 
    618 
    619 shr_error_e dnx_field_fem_is_any_fem_occupied_on_fg(
    620     int unit,
    621     dnx_field_context_t context_id,
    622     dnx_field_group_t fg_id,
    623     dnx_field_group_t second_fg_id,
    624     uint8 active_actions,
    625     int *none_occupied_p);
    626 
    627 
    628 
    629 shr_error_e dnx_field_all_fems_sw_state_init(
    630     int unit);
    631 
    632 
    633 shr_error_e dnx_field_fem_condition_entry_t_init(
    634     int unit,
    635     dnx_field_fem_condition_entry_t * struct_p);
    636 
    637 shr_error_e dnx_field_fem_condition_entry_t_array_init(
    638     int unit,
    639     dnx_field_fem_condition_entry_t fem_condition_entry[DNX_DATA_MAX_FIELD_COMMON_MAX_VAL_NOF_FEM_CONDITION]);
    640 
    641 shr_error_e dnx_field_fem_is_fg_owner(
    642     int unit,
    643     dnx_field_fem_id_t fem_id,
    644     dnx_field_group_t fg_id,
    645     dnx_field_fem_program_t * fem_program_p);
    646 
    647 
    648 shr_error_e dnx_field_fem_get_next_fg_owner(
    649     int unit,
    650     dnx_field_group_t fg_id,
    651     dnx_field_fem_id_t * fem_id_p,
    652     dnx_field_fem_program_t * fem_program_p);
    653 
    654 
    655 shr_error_e dnx_field_fem_is_fg_secondary(
    656     int unit,
    657     dnx_field_fem_id_t fem_id,
    658     dnx_field_group_t second_fg_id,
    659     dnx_field_fem_program_t * fem_program_p);
    660 
    661 
    662 shr_error_e dnx_field_fem_is_fg_secondary_on_any(
    663     int unit,
    664     dnx_field_group_t second_fg_id,
    665     dnx_field_fem_id_t * fem_id_p);
    666 
    667 
    668 shr_error_e dnx_field_fem_num_action_bits_verify(
    669     int unit,
    670     dnx_field_fem_id_t fem_id,
    671     dnx_field_action_t dnx_encoded_fem_action,
    672     dnx_field_fem_action_entry_t * fem_action_entry_p);
    673 
    674 shr_error_e dnx_field_pmf_fem_context_entry_t_init(
    675     int unit,
    676     dnx_field_pmf_fem_context_entry_t * struct_p);
    677 
    678 shr_error_e dnx_field_fem_action_entry_t_init(
    679     int unit,
    680     dnx_field_fem_action_entry_t * struct_p);
    681 
    682 
    683 shr_error_e dnx_field_fem_is_context_using(
    684     int unit,
    685     dnx_field_fem_id_t fem_id,
    686     dnx_field_context_t context_id,
    687     dnx_field_group_t fg_id,
    688     unsigned int *using_fem_p);
    689 
    690 
    691 shr_error_e dnx_field_fem_is_context_valid(
    692     int unit,
    693     dnx_field_fem_id_t fem_id,
    694     dnx_field_context_t context_id,
    695     unsigned int *is_valid_p);
    696 
    697 
    698 shr_error_e dnx_field_fem_is_context_consistent(
    699     int unit,
    700     dnx_field_fem_id_t fem_id,
    701     dnx_field_fem_program_t fem_program,
    702     dnx_field_context_t context_id,
    703     unsigned int *consistent_p);
    704 
    705 shr_error_e dnx_field_fem_is_context_valid_replace(
    706     int unit,
    707     dnx_field_fem_id_t fem_id,
    708     dnx_field_fem_program_t fem_program,
    709     dnx_field_context_t context_id,
    710     unsigned int *valid_replace_p);
    711 
    712 
    713 shr_error_e dnx_field_fem_is_any_context_with_replace(
    714     int unit,
    715     dnx_field_fem_id_t fem_id,
    716     dnx_field_fem_program_t fem_program,
    717     dnx_field_context_t * context_id_p);
    718 
    719 
    720 shr_error_e dnx_field_fem_is_any_context_with_program(
    721     int unit,
    722     dnx_field_fem_id_t fem_id,
    723     dnx_field_fem_program_t fem_program,
    724     dnx_field_context_t * context_id_p);
    725 
    726 
    727 shr_error_e dnx_field_fem_action_remove(
    728     int unit,
    729     dnx_field_fem_id_t fem_id,
    730     dnx_field_group_t fg_id);
    731 
    732 shr_error_e dnx_field_fem_action_add(
    733     int unit,
    734     dnx_field_fem_id_t fem_id,
    735     dnx_field_group_t fg_id,
    736     uint8 input_offset,
    737     uint8 input_size,
    738     dnx_field_group_t second_fg_id,
    739     dnx_field_fem_condition_ms_bit_t fem_condition_ms_bit,
    740     dnx_field_fem_condition_entry_t fem_condition_entry[DNX_DATA_MAX_FIELD_COMMON_MAX_VAL_NOF_FEM_CONDITION],
    741     dnx_field_action_t fem_encoded_actions[DNX_DATA_MAX_FIELD_COMMON_MAX_VAL_NOF_FEM_MAP_INDEX],
    742     dnx_field_fem_action_entry_t fem_action_entry[DNX_DATA_MAX_FIELD_COMMON_MAX_VAL_NOF_FEM_MAP_INDEX]);
    743 
    744 shr_error_e dnx_field_actions_fem_defaults_set(
    745     int unit,
    746     dnx_field_fem_id_t fem_id,
    747     dnx_field_fem_program_t fem_program,
    748     uint8 ignore_actions);
    749 
    750 shr_error_e dnx_field_actions_fem_set(
    751     int unit,
    752     dnx_field_fem_id_t fem_id,
    753     dnx_field_fem_program_t fem_program,
    754     dnx_field_fem_condition_ms_bit_t fem_condition_ms_bit,
    755     dnx_field_fem_condition_entry_t fem_condition_entry[DNX_DATA_MAX_FIELD_COMMON_MAX_VAL_NOF_FEM_CONDITION],
    756     uint8 ignore_actions,
    757     dnx_field_fem_action_entry_t fem_action_entry[DNX_DATA_MAX_FIELD_COMMON_MAX_VAL_NOF_FEM_MAP_INDEX]);
    758 
    759 shr_error_e dnx_field_actions_fem_get(
    760     int unit,
    761     dnx_field_fem_id_t fem_id,
    762     dnx_field_fem_program_t fem_program,
    763     dnx_field_fem_condition_ms_bit_t * fem_condition_ms_bit_p,
    764     dnx_field_fem_condition_entry_t fem_condition_entry[DNX_DATA_MAX_FIELD_COMMON_MAX_VAL_NOF_FEM_CONDITION],
    765     dnx_field_fem_action_entry_t fem_action_entry[DNX_DATA_MAX_FIELD_COMMON_MAX_VAL_NOF_FEM_MAP_INDEX]);
    766 
    767 
    768 shr_error_e dnx_field_actions_single_fem_single_context_defaults_set(
    769     int unit,
    770     dnx_field_context_t context_id,
    771     dnx_field_fem_id_t fem_id);
    772 
    773 shr_error_e dnx_field_actions_all_fem_single_context_defaults_set(
    774     int unit,
    775     dnx_field_context_t context_id);
    776 
    777 shr_error_e dnx_field_actions_all_fem_all_context_defaults_set(
    778     int unit);
    779 
    780 shr_error_e dnx_field_actions_fem_context_hw_set(
    781     int unit,
    782     dnx_field_pmf_fem_context_entry_t * dnx_field_pmf_fem_program_entry_p);
    783 
    784 shr_error_e dnx_field_actions_fem_context_hw_get(
    785     int unit,
    786     dnx_field_pmf_fem_context_entry_t * dnx_field_pmf_fem_program_entry_p);
    787 
    788 shr_error_e dnx_field_actions_fem_condition_ms_bit_hw_set(
    789     int unit,
    790     dnx_field_fem_condition_ms_bit_entry_t * dnx_field_fem_condition_ms_bit_entry_p);
    791 
    792 shr_error_e dnx_field_actions_fem_condition_ms_bit_hw_get(
    793     int unit,
    794     dnx_field_fem_condition_ms_bit_entry_t * dnx_field_fem_condition_ms_bit_entry_p);
    795 
    796 shr_error_e dnx_field_actions_fem_map_index_hw_set(
    797     int unit,
    798     dnx_field_fem_map_index_entry_t * dnx_field_fem_map_index_entry_p);
    799 
    800 shr_error_e dnx_field_actions_fem_map_index_hw_get(
    801     int unit,
    802     dnx_field_fem_map_index_entry_t * dnx_field_fem_map_index_entry_p);
    803 
    804 shr_error_e dnx_field_actions_fem_action_info_hw_set(
    805     int unit,
    806     dnx_field_fem_action_info_t * dnx_field_fem_action_info_p);
    807 
    808 shr_error_e dnx_field_actions_fem_action_info_hw_get(
    809     int unit,
    810     dnx_field_fem_action_info_t * dnx_field_fem_action_info_p);
    811 
    812 
    813 
    814 
    815 #endif