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

flexctr.h (11330B)


      1 /*
      2  * DO NOT EDIT THIS FILE!
      3  * This file is auto-generated.
      4  * Edits to this file will be lost when it is regenerated.
      5  *
      6  * This license is set out in https://raw.githubusercontent.com/Broadcom-Network-Switching-Software/OpenBCM/master/Legal/LICENSE file.
      7  * 
      8  * Copyright 2007-2020 Broadcom Inc. All rights reserved.
      9  */
     10 
     11 #ifndef BCMI_LTSW_FLEXCTR_H
     12 #define BCMI_LTSW_FLEXCTR_H
     13 
     14 #include <bcm/flexctr.h>
     15 
     16 #include <sal/sal_types.h>
     17 
     18 /*! Invalid flex counter action. */
     19 #define BCMI_LTSW_FLEXCTR_ACTION_INVALID (0)
     20 
     21 /*! Options internal. */
     22 #define BCMI_LTSW_FLEXCTR_OPTIONS_INTERNAL (1 << 31)
     23 
     24 /*! Ingress flex counter stage. */
     25 #define BCMI_LTSW_FLEXCTR_STAGE_ING_CTR (0x0)
     26 
     27 /*! Egress flex counter stage. */
     28 #define BCMI_LTSW_FLEXCTR_STAGE_EGR_CTR (0x1)
     29 
     30 /*! Flex counter stage count. */
     31 #define BCMI_LTSW_FLEXCTR_STAGE_COUNT (0x2)
     32 
     33 /*! Ingress flex counter. */
     34 #define BCMI_LTSW_FLEXCTR_DIR_INGRESS (0x0)
     35 
     36 /*! Egress flex counter. */
     37 #define BCMI_LTSW_FLEXCTR_DIR_EGRESS (0x1)
     38 
     39 /*! Flex counter direction count. */
     40 #define BCMI_LTSW_FLEXCTR_DIR_COUNT (0x2)
     41 
     42 /*! Maximum packet attribute selector number. */
     43 #define BCMI_LTSW_FLEXCTR_PKT_ATTR_SELECTOR_NUM_MAX (8)
     44 
     45 /*! Maximum packet attribute object instance number. */
     46 #define BCMI_LTSW_FLEXCTR_PKT_ATTR_OBJECT_INSTANCE_NUM_MAX (256)
     47 
     48 /*!
     49  * \brief Internal flex counter source.
     50  */
     51 typedef enum bcmi_ltsw_flexctr_source_s {
     52 
     53     /*! First internal source. */
     54     bcmiFlexctrSourceStart = 512,
     55 
     56     /*! Dest L2 source. */
     57     bcmiFlexctrSourceL2Dst = 512,
     58 
     59     /*! Src L2 source. */
     60     bcmiFlexctrSourceL2Src = 513,
     61 
     62     /*! Exact match flow tracker. */
     63     bcmiFlexctrSourceEM_FT = 514,
     64 
     65     /*! Last internal source. */
     66     bcmiFlexctrSourceEnd = 515
     67 
     68 } bcmi_ltsw_flexctr_source_t;
     69 
     70 #define BCMI_LTSW_FLEXCTR_SOURCE_STR \
     71 { \
     72     "Start", \
     73     "L2Dst", \
     74     "L2Src", \
     75     "EM_FT", \
     76     "End" \
     77 }
     78 
     79 /*!
     80  * \brief Counter informaiton.
     81  */
     82 typedef struct bcmi_ltsw_flexctr_counter_info_s {
     83 
     84     /*! Stage id. */
     85     int stage;
     86 
     87     /*! Counter direction. */
     88     int direction;
     89 
     90     /*! Pipeline id. */
     91     int pipe;
     92 
     93     /*! h/w action index. */
     94     uint32_t action_index;
     95 
     96     /*! action profile id. */
     97     uint64_t action_profile_id;
     98 
     99     /*! Source enumeration in HSDK API. */
    100     int source;
    101 
    102     /*! h/w source table name. */
    103     const char *table_name;
    104 
    105     /*! Total counter index number. */
    106     uint32_t index_num;
    107 
    108     /*! First allocated counter pool. */
    109     uint32_t start_pool;
    110 
    111     /*! Last allocated counter pool. */
    112     uint32_t end_pool;
    113 
    114     /*! Flex counter action. */
    115     bcm_flexctr_action_t act_cfg;
    116 
    117     /*! Indicate the specified counter id is a group action id. */
    118     bool group;
    119 
    120     /*! Indicate the specified counter id is a single pipe action. */
    121     bool single_pipe;
    122 
    123 } bcmi_ltsw_flexctr_counter_info_t;
    124 
    125 /*!
    126  * \brief Hit control.
    127  */
    128 typedef struct bcmi_ltsw_flexctr_hit_ctrl_s {
    129 
    130     /*! Stage id. */
    131     int stage;
    132 
    133     /*! table name. */
    134     const char *tbl_name;
    135 
    136     /*! Dest group action. */
    137     uint32_t dst_grp_id;
    138 
    139     /*! Src group action. */
    140     uint32_t src_grp_id;
    141 
    142     /*! Indicate global action in pipe unique mode. */
    143     bool global;
    144 
    145     /*! Destination action profile ID. */
    146     uint32_t dst_act_profile_id;
    147 
    148     /*! Source action profile ID. */
    149     uint32_t src_act_profile_id;
    150 
    151 } bcmi_ltsw_flexctr_hit_ctrl_t;
    152 
    153 /*!
    154  * \brief Flexctr mode.
    155  */
    156 typedef enum bcmi_ltsw_flexctr_mode_s {
    157 
    158     /*! Global mode. */
    159     bcmiFlexctrModeGlobal = 0,
    160 
    161     /*! Pipe unique mode. */
    162     bcmiFlexctrModePipeUnique = 1,
    163 
    164     /*! Last one, not valid. */
    165     bcmiFlexctrModeCount = 2
    166 
    167 } bcmi_ltsw_flexctr_mode_t;
    168 
    169 #define BCMI_LTSW_FLEXCTR_MODE_STR \
    170 { \
    171     "Global", \
    172     "PipeUnique" \
    173 }
    174 
    175 /*!
    176  * \brief Flex counter stat info.
    177  */
    178 typedef struct bcmi_ltsw_flexctr_stat_info_s {
    179 
    180     /*! The maximum num of entries in a flex counter stage. */
    181     uint32_t total_entries;
    182 
    183     /*! The sum of all free entries that can be allocated for a source. */
    184     uint32_t free_entries;
    185 
    186 } bcmi_ltsw_flexctr_stat_info_t;
    187 
    188 /*!
    189  * \brief Packet attribute object instance information.
    190  */
    191 typedef struct bcmi_ltsw_flexctr_pkt_attr_obj_inst_s {
    192 
    193     /*! Packet attribute object value. */
    194     int object_value;
    195 
    196     /*! Number of packet attribute map entries. */
    197     uint32_t num_entries;
    198 
    199     /*! Packet attribute map entry selector type array. */
    200     int map_entry_type[BCMI_LTSW_FLEXCTR_PKT_ATTR_SELECTOR_NUM_MAX];
    201 
    202     /*! Packet attribute map entry selector value array. */
    203     uint32_t map_entry_value[BCMI_LTSW_FLEXCTR_PKT_ATTR_SELECTOR_NUM_MAX];
    204 
    205 } bcmi_ltsw_flexctr_pkt_attr_obj_inst_t;
    206 
    207 /*!
    208  * \brief Packet attribute informaiton.
    209  */
    210 typedef struct bcmi_ltsw_flexctr_packet_attribute_info_s {
    211 
    212     /*! Stage id. */
    213     int stage;
    214 
    215     /*! Counter direction. */
    216     int direction;
    217 
    218     /*! Pipeline id. */
    219     int pipe;
    220 
    221     /*! H/W packet attribute index. */
    222     uint32_t pkt_attr_index;
    223 
    224     /*! Packet attribute profile id. */
    225     uint64_t pkt_attr_profile_id;
    226 
    227     /*! Maximum packet attribute object instance number. */
    228     uint32_t obj_inst_max;
    229 
    230     /*! Packet attribute object instance array. */
    231     bcmi_ltsw_flexctr_pkt_attr_obj_inst_t obj_inst[BCMI_LTSW_FLEXCTR_PKT_ATTR_OBJECT_INSTANCE_NUM_MAX];
    232 
    233 } bcmi_ltsw_flexctr_packet_attribute_info_t;
    234 
    235 /*!
    236  * \brief Get a counter id information.
    237  *
    238  * \param [in] unit Unit Number.
    239  * \param [in] stat_counter_id Flex counter action identifier.
    240  * \param [out] info Counter information.
    241  *
    242  * \retval SHR_E_NONE No errors.
    243  * \retval !SHR_E_NONE Failure.
    244  */
    245 extern int
    246 bcmi_ltsw_flexctr_counter_id_info_get(
    247     int unit,
    248     uint32_t stat_counter_id,
    249     bcmi_ltsw_flexctr_counter_info_t *info);
    250 
    251 /*!
    252  * \brief Update an attached counter id status.
    253  *
    254  * \param [in] unit Unit Number.
    255  * \param [in] stat_counter_id Flex counter action identifier.
    256  *
    257  * \retval SHR_E_NONE No errors.
    258  * \retval !SHR_E_NONE Failure.
    259  */
    260 extern int
    261 bcmi_ltsw_flexctr_attach_counter_id_status_update(
    262     int unit,
    263     uint32_t stat_counter_id);
    264 
    265 /*!
    266  * \brief Update a detached counter id status.
    267  *
    268  * \param [in] unit Unit Number.
    269  * \param [in] stat_counter_id Flex counter action identifier.
    270  *
    271  * \retval SHR_E_NONE No errors.
    272  * \retval !SHR_E_NONE Failure.
    273  */
    274 extern int
    275 bcmi_ltsw_flexctr_detach_counter_id_status_update(
    276     int unit,
    277     uint32_t stat_counter_id);
    278 
    279 /*!
    280  * \brief Get a flex counter stat counter id.
    281  *
    282  * \param [in] unit Unit Number.
    283  * \param [in] info Counter information.
    284  * \param [out] stat_counter_id Flex counter action identifier.
    285  *
    286  * \retval SHR_E_NONE No errors.
    287  * \retval !SHR_E_NONE Failure.
    288  */
    289 extern int
    290 bcmi_ltsw_flexctr_counter_id_get(
    291     int unit,
    292     bcmi_ltsw_flexctr_counter_info_t *info,
    293     uint32_t *stat_counter_id);
    294 
    295 /*!
    296  * \brief Hit control update.
    297  *
    298  * \param [in] unit Unit Number.
    299  * \param [in] ctrl Hit control.
    300  *
    301  * \retval SHR_E_NONE No errors.
    302  * \retval !SHR_E_NONE Failure.
    303  */
    304 extern int
    305 bcmi_ltsw_flexctr_hit_control_update(
    306     int unit,
    307     bcmi_ltsw_flexctr_hit_ctrl_t *ctrl);
    308 
    309 /*!
    310  * \brief Flex counter action update.
    311  *
    312  * \param [in] unit Unit Number.
    313  * \param [in] stat_counter_id Flex counter action identifier.
    314  * \param [in] act_cfg Flex counter action.
    315  *
    316  * \retval SHR_E_NONE No errors.
    317  * \retval !SHR_E_NONE Failure.
    318  */
    319 extern int
    320 bcmi_ltsw_flexctr_action_update(
    321     int unit,
    322     uint32_t stat_counter_id,
    323     bcm_flexctr_action_t *act_cfg);
    324 
    325 /*!
    326  * \brief Update flex counter info for field group.
    327  *
    328  * \param [in] unit Unit Number.
    329  * \param [in] source Flex counter source.
    330  * \param [in] group_id Field group id.
    331  * \param [in] old_pri Old priority.
    332  * \param [in] new_pri New priority.
    333  *
    334  * \retval SHR_E_NONE No errors.
    335  * \retval !SHR_E_NONE Failure.
    336  */
    337 extern int
    338 bcmi_ltsw_flexctr_field_group_update(
    339     int unit,
    340     bcm_flexctr_source_t source,
    341     int group_id,
    342     int old_pri,
    343     int new_pri);
    344 
    345 /*!
    346  * \brief Get flexctr mode.
    347  *
    348  * \param [in] unit Unit Number.
    349  * \param [in] egr Egress or ingress pipeline, 1 for egress.
    350  * \param [out] mode Flexctr mode.
    351  *
    352  * \retval SHR_E_NONE No errors.
    353  * \retval !SHR_E_NONE Failure.
    354  */
    355 extern int
    356 bcmi_ltsw_flexctr_mode_get(
    357     int unit,
    358     bool egr,
    359     bcmi_ltsw_flexctr_mode_t *mode);
    360 
    361 /*!
    362  * \brief Retrieve flex counter info like total entries num, free entries num for a source.
    363  *
    364  * \param [in] unit Unit Number.
    365  * \param [in] source Flexctr source.
    366  * \param [in] pipe Pipe id. -1 indicates global.
    367  * \param [out] info Flex counter stat info.
    368  *
    369  * \retval SHR_E_NONE No errors.
    370  * \retval !SHR_E_NONE Failure.
    371  */
    372 extern int
    373 bcmi_ltsw_flexctr_stat_info_get(
    374     int unit,
    375     bcm_flexctr_source_t source,
    376     int pipe,
    377     bcmi_ltsw_flexctr_stat_info_t *info);
    378 
    379 /*!
    380  * \brief Get a packet attribute profile id information.
    381  *
    382  * \param [in] unit Unit Number.
    383  * \param [in] profile_id Flex counter action identifier.
    384  * \param [out] info Packet attribute information.
    385  *
    386  * \retval SHR_E_NONE No errors.
    387  * \retval !SHR_E_NONE Failure.
    388  */
    389 extern int
    390 bcmi_ltsw_flexctr_packet_attribute_id_info_get(
    391     int unit,
    392     int profile_id,
    393     bcmi_ltsw_flexctr_packet_attribute_info_t *info);
    394 
    395 /*!
    396  * \brief Dump flexctr module sw information.
    397  *
    398  * \param [in] unit Unit Number.
    399  *
    400  * \retval SHR_E_NONE No errors.
    401  * \retval !SHR_E_NONE Failure.
    402  */
    403 extern int
    404 bcmi_ltsw_flexctr_sw_dump(int unit);
    405 
    406 /*!
    407  * \brief Flex counter group action get function.
    408  *
    409  * \param [in] unit Unit Number.
    410  * \param [in] group_stat_counter_id Flex counter group ID.
    411  * \param [out] group_action Flex counter group action data structure.
    412  *
    413  * \retval SHR_E_NONE No errors.
    414  * \retval !SHR_E_NONE Failure.
    415  */
    416 extern int
    417 bcmi_ltsw_flexctr_group_action_get(
    418     int unit,
    419     uint32_t group_stat_counter_id,
    420     bcm_flexctr_group_action_t *group_action);
    421 
    422 /*!
    423  * \brief Flex counter action is a single pipe action. Return value: 1 for yes, 0 for no, others indicate error.
    424  *
    425  * \param [in] unit Unit Number.
    426  * \param [in] stage Flex counter stage id.
    427  * \param [in] action_index Hardware action index.
    428  *
    429  * \retval SHR_E_NONE No errors.
    430  * \retval !SHR_E_NONE Failure.
    431  */
    432 extern int
    433 bcmi_ltsw_flexctr_action_is_single_pipe(
    434     int unit,
    435     int stage,
    436     uint32_t action_index);
    437 
    438 /*!
    439  * \brief Get field opaque object value for specific flex counter action and counter index.
    440  *
    441  * \param [in] unit Unit Number.
    442  * \param [in] stat_counter_id Flex counter action identifier.
    443  * \param [in] counter_index Flex counter index.
    444  * \param [in] size Element number of object value array.
    445  * \param [out] obj_val Object value array.
    446  *
    447  * \retval SHR_E_NONE No errors.
    448  * \retval !SHR_E_NONE Failure.
    449  */
    450 extern int
    451 bcmi_ltsw_flexctr_field_opaque_object_value_get(
    452     int unit,
    453     uint32_t stat_counter_id,
    454     uint32_t counter_index,
    455     uint32_t size,
    456     uint32_t *obj_val);
    457 
    458 /*!
    459  * \brief Egress flex counter pre-select set.
    460  *
    461  * \param [in] unit Unit Number.
    462  * \param [in] val Pre-select value.
    463  *
    464  * \retval SHR_E_NONE No errors.
    465  * \retval !SHR_E_NONE Failure.
    466  */
    467 extern int
    468 bcmi_ltsw_flexctr_egr_presel_set(
    469     int unit,
    470     int val);
    471 
    472 /*!
    473  * \brief Egress flex counter pre-select get.
    474  *
    475  * \param [in] unit Unit Number.
    476  * \param [out] val Pre-select value.
    477  *
    478  * \retval SHR_E_NONE No errors.
    479  * \retval !SHR_E_NONE Failure.
    480  */
    481 extern int
    482 bcmi_ltsw_flexctr_egr_presel_get(
    483     int unit,
    484     int *val);
    485 
    486 #endif /* BCMI_LTSW_FLEXCTR_H */