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

ecn.h (27398B)


      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 BCMINT_LTSW_MBCM_ECN_H
     12 #define BCMINT_LTSW_MBCM_ECN_H
     13 
     14 #include <bcm/ecn.h>
     15 #include <bcm/types.h>
     16 #include <bcm/switch.h>
     17 
     18 #include <sal/sal_types.h>
     19 
     20 /*!
     21  * \brief Deinit ECN module.
     22  *
     23  * \param [in] unit Unit Number.
     24  *
     25  * \retval SHR_E_NONE No errors.
     26  * \retval !SHR_E_NONE Failure.
     27  */
     28 typedef int (*ecn_deinit_f)(int unit);
     29 
     30 /*!
     31  * \brief Init ECN module.
     32  *
     33  * \param [in] unit Unit Number.
     34  *
     35  * \retval SHR_E_NONE No errors.
     36  * \retval !SHR_E_NONE Failure.
     37  */
     38 typedef int (*ecn_init_f)(int unit);
     39 
     40 /*!
     41  * \brief Create MPLS ECN map.
     42  *
     43  * \param [in] unit Unit Number.
     44  * \param [in] flags flags.
     45  * \param [out] ecn_map_id ECN map ID.
     46  *
     47  * \retval SHR_E_NONE No errors.
     48  * \retval !SHR_E_NONE Failure.
     49  */
     50 typedef int (*ecn_map_create_f)(
     51     int unit,
     52     uint32_t flags,
     53     int *ecn_map_id);
     54 
     55 /*!
     56  * \brief Destroy MPLS ECN map.
     57  *
     58  * \param [in] unit Unit Number.
     59  * \param [in] ecn_map_id ECN map ID.
     60  *
     61  * \retval SHR_E_NONE No errors.
     62  * \retval !SHR_E_NONE Failure.
     63  */
     64 typedef int (*ecn_map_destroy_f)(
     65     int unit,
     66     int ecn_map_id);
     67 
     68 /*!
     69  * \brief Set MPLS ECN map.
     70  *
     71  * \param [in] unit Unit Number.
     72  * \param [in] options options, not used currently.
     73  * \param [in] ecn_map_id ECN map ID.
     74  * \param [in] ecn_map ECN mapping values.
     75  *
     76  * \retval SHR_E_NONE No errors.
     77  * \retval !SHR_E_NONE Failure.
     78  */
     79 typedef int (*ecn_map_set_f)(
     80     int unit,
     81     uint32_t options,
     82     int ecn_map_id,
     83     bcm_ecn_map_t *ecn_map);
     84 
     85 /*!
     86  * \brief Get MPLS ECN map.
     87  *
     88  * \param [in] unit Unit Number.
     89  * \param [in] ecn_map_id ECN map ID.
     90  * \param [inout] ecn_map ECN mapping values.
     91  *
     92  * \retval SHR_E_NONE No errors.
     93  * \retval !SHR_E_NONE Failure.
     94  */
     95 typedef int (*ecn_map_get_f)(
     96     int unit,
     97     int ecn_map_id,
     98     bcm_ecn_map_t *ecn_map);
     99 
    100 /*!
    101  * \brief To configure the value of responsive indication based on the IP protocol value.
    102  *
    103  * \param [in] unit Unit Number.
    104  * \param [in] ip_proto IP Protocol value.
    105  * \param [in] responsive Responsice indication.
    106  *
    107  * \retval SHR_E_NONE No errors.
    108  * \retval !SHR_E_NONE Failure.
    109  */
    110 typedef int (*ecn_responsive_protocol_set_f)(
    111     int unit,
    112     uint8 ip_proto,
    113     int responsive);
    114 
    115 /*!
    116  * \brief To get the value of responsive indication based on the IP protocol value.
    117  *
    118  * \param [in] unit Unit Number.
    119  * \param [in] ip_proto IP Protocol value.
    120  * \param [inout] responsive Responsice indication.
    121  *
    122  * \retval SHR_E_NONE No errors.
    123  * \retval !SHR_E_NONE Failure.
    124  */
    125 typedef int (*ecn_responsive_protocol_get_f)(
    126     int unit,
    127     uint8 ip_proto,
    128     int *responsive);
    129 
    130 /*!
    131  * \brief To get an ECN mapping info from a port.
    132  *
    133  * \param [in] unit Unit Number.
    134  * \param [in] port gport.
    135  * \param [inout] ecn_map ECN mapping values.
    136  *
    137  * \retval SHR_E_NONE No errors.
    138  * \retval !SHR_E_NONE Failure.
    139  */
    140 typedef int (*ecn_port_map_get_f)(
    141     int unit,
    142     bcm_gport_t port,
    143     bcm_ecn_port_map_t *ecn_map);
    144 
    145 /*!
    146  * \brief To set an ECN mapping info to a port.
    147  *
    148  * \param [in] unit Unit Number.
    149  * \param [in] port gport.
    150  * \param [inout] ecn_map ECN mapping values.
    151  *
    152  * \retval SHR_E_NONE No errors.
    153  * \retval !SHR_E_NONE Failure.
    154  */
    155 typedef int (*ecn_port_map_set_f)(
    156     int unit,
    157     bcm_gport_t port,
    158     bcm_ecn_port_map_t *ecn_map);
    159 
    160 /*!
    161  * \brief To get an ECN mapping type.
    162  *
    163  * \param [in] unit Unit Number.
    164  * \param [in] flags Indicates the operation by BCM_ECN_TYPE_MAP_XXX flags.
    165  * \param [out] map ECN type map structure.
    166  *
    167  * \retval SHR_E_NONE No errors.
    168  * \retval !SHR_E_NONE Failure.
    169  */
    170 typedef int (*ecn_type_map_get_f)(
    171     int unit,
    172     uint32_t flags,
    173     bcm_ecn_type_map_t *map);
    174 
    175 /*!
    176  * \brief To set an ECN mapping type.
    177  *
    178  * \param [in] unit Unit Number.
    179  * \param [in] flags Indicates the operation by BCM_ECN_TYPE_MAP_XXX flags.
    180  * \param [in] map ECN type map structure.
    181  *
    182  * \retval SHR_E_NONE No errors.
    183  * \retval !SHR_E_NONE Failure.
    184  */
    185 typedef int (*ecn_type_map_set_f)(
    186     int unit,
    187     uint32_t flags,
    188     bcm_ecn_type_map_t *map);
    189 
    190 /*!
    191  * \brief Set latency-based ECN mode.
    192  *
    193  * \param [in] unit Unit Number.
    194  * \param [in] mode mode.
    195  *
    196  * \retval SHR_E_NONE No errors.
    197  * \retval !SHR_E_NONE Failure.
    198  */
    199 typedef int (*ecn_latency_based_mode_set_f)(
    200     int unit,
    201     bcm_switch_latency_ecn_mark_mode_t mode);
    202 
    203 /*!
    204  * \brief Get latency-based ECN mode.
    205  *
    206  * \param [in] unit Unit Number.
    207  * \param [out] mode mode.
    208  *
    209  * \retval SHR_E_NONE No errors.
    210  * \retval !SHR_E_NONE Failure.
    211  */
    212 typedef int (*ecn_latency_based_mode_get_f)(
    213     int unit,
    214     bcm_switch_latency_ecn_mark_mode_t *mode);
    215 
    216 /*!
    217  * \brief Set latency-based ECN threshold.
    218  *
    219  * \param [in] unit Unit Number.
    220  * \param [in] gport Port number or GPORT identifier.
    221  * \param [in] cosq COS queue number.
    222  * \param [in] mode mode.
    223  * \param [in] threshold threshold.
    224  *
    225  * \retval SHR_E_NONE No errors.
    226  * \retval !SHR_E_NONE Failure.
    227  */
    228 typedef int (*ecn_latency_based_threshold_set_f)(
    229     int unit,
    230     bcm_gport_t gport,
    231     bcm_cos_queue_t cosq,
    232     bcm_switch_latency_ecn_mark_mode_t mode,
    233     uint32_t threshold);
    234 
    235 /*!
    236  * \brief Get latency-based ECN threshold.
    237  *
    238  * \param [in] unit Unit Number.
    239  * \param [in] gport Port number or GPORT identifier.
    240  * \param [in] cosq COS queue number.
    241  * \param [in] mode mode.
    242  * \param [out] threshold threshold.
    243  *
    244  * \retval SHR_E_NONE No errors.
    245  * \retval !SHR_E_NONE Failure.
    246  */
    247 typedef int (*ecn_latency_based_threshold_get_f)(
    248     int unit,
    249     bcm_gport_t gport,
    250     bcm_cos_queue_t cosq,
    251     bcm_switch_latency_ecn_mark_mode_t mode,
    252     uint32_t *threshold);
    253 
    254 /*!
    255  * \brief Resolve ECN map ID.
    256  *
    257  * \param [in] unit Unit Number.
    258  * \param [in] ecn_map_id ECN map ID.
    259  * \param [out] ecn_map_type ECN map type.
    260  * \param [out] prof_id ECN map profile ID.
    261  *
    262  * \retval SHR_E_NONE No errors.
    263  * \retval !SHR_E_NONE Failure.
    264  */
    265 typedef int (*ecn_map_id_resolve_f)(
    266     int unit,
    267     int ecn_map_id,
    268     int *ecn_map_type,
    269     uint32_t *prof_id);
    270 
    271 /*!
    272  * \brief Construct ECN map ID.
    273  *
    274  * \param [in] unit Unit Number.
    275  * \param [in] ecn_map_type ECN map type.
    276  * \param [in] prof_id ECN map profile ID.
    277  * \param [out] ecn_map_id ECN map ID.
    278  *
    279  * \retval SHR_E_NONE No errors.
    280  * \retval !SHR_E_NONE Failure.
    281  */
    282 typedef int (*ecn_map_id_construct_f)(
    283     int unit,
    284     int ecn_map_type,
    285     uint32_t prof_id,
    286     int *ecn_map_id);
    287 
    288 /*!
    289  * \brief To set the mapped internal congestion notification (int_cn) value.
    290  *
    291  * \param [in] unit Unit Number.
    292  * \param [in] map Internal congestion notification map.
    293  *
    294  * \retval SHR_E_NONE No errors.
    295  * \retval !SHR_E_NONE Failure.
    296  */
    297 typedef int (*ecn_traffic_map_set_f)(
    298     int unit,
    299     bcm_ecn_traffic_map_info_t *map);
    300 
    301 /*!
    302  * \brief To get the mapped internal congestion notification (int_cn) value.
    303  *
    304  * \param [in] unit Unit Number.
    305  * \param [inout] map Internal congestion notification map.
    306  *
    307  * \retval SHR_E_NONE No errors.
    308  * \retval !SHR_E_NONE Failure.
    309  */
    310 typedef int (*ecn_traffic_map_get_f)(
    311     int unit,
    312     bcm_ecn_traffic_map_info_t *map);
    313 
    314 /*!
    315  * \brief To set the ECN enqueue action.
    316  *
    317  * \param [in] unit Unit Number.
    318  * \param [in] ecn_config ECN traffic action configuration.
    319  *
    320  * \retval SHR_E_NONE No errors.
    321  * \retval !SHR_E_NONE Failure.
    322  */
    323 typedef int (*ecn_action_enqueue_set_f)(
    324     int unit,
    325     bcm_ecn_traffic_action_config_t *ecn_config);
    326 
    327 /*!
    328  * \brief To get the ECN enqueue action.
    329  *
    330  * \param [in] unit Unit Number.
    331  * \param [inout] ecn_config ECN traffic action configuration.
    332  *
    333  * \retval SHR_E_NONE No errors.
    334  * \retval !SHR_E_NONE Failure.
    335  */
    336 typedef int (*ecn_action_enqueue_get_f)(
    337     int unit,
    338     bcm_ecn_traffic_action_config_t *ecn_config);
    339 
    340 /*!
    341  * \brief To set the ECN dequeue action.
    342  *
    343  * \param [in] unit Unit Number.
    344  * \param [in] ecn_config ECN traffic action configuration.
    345  *
    346  * \retval SHR_E_NONE No errors.
    347  * \retval !SHR_E_NONE Failure.
    348  */
    349 typedef int (*ecn_action_dequeue_set_f)(
    350     int unit,
    351     bcm_ecn_traffic_action_config_t *ecn_config);
    352 
    353 /*!
    354  * \brief To get the ECN dequeue action.
    355  *
    356  * \param [in] unit Unit Number.
    357  * \param [inout] ecn_config ECN traffic action configuration.
    358  *
    359  * \retval SHR_E_NONE No errors.
    360  * \retval !SHR_E_NONE Failure.
    361  */
    362 typedef int (*ecn_action_dequeue_get_f)(
    363     int unit,
    364     bcm_ecn_traffic_action_config_t *ecn_config);
    365 
    366 /*!
    367  * \brief To set the ECN egress action.
    368  *
    369  * \param [in] unit Unit Number.
    370  * \param [in] ecn_config ECN traffic action configuration.
    371  *
    372  * \retval SHR_E_NONE No errors.
    373  * \retval !SHR_E_NONE Failure.
    374  */
    375 typedef int (*ecn_action_egress_set_f)(
    376     int unit,
    377     bcm_ecn_traffic_action_config_t *ecn_config);
    378 
    379 /*!
    380  * \brief To get the ECN egress action.
    381  *
    382  * \param [in] unit Unit Number.
    383  * \param [inout] ecn_config ECN traffic action configuration.
    384  *
    385  * \retval SHR_E_NONE No errors.
    386  * \retval !SHR_E_NONE Failure.
    387  */
    388 typedef int (*ecn_action_egress_get_f)(
    389     int unit,
    390     bcm_ecn_traffic_action_config_t *ecn_config);
    391 
    392 /*!
    393  * \brief To set the ECN egress action.
    394  *
    395  * \param [in] unit Unit Number.
    396  * \param [in] ecn_config ECN traffic action configuration.
    397  *
    398  * \retval SHR_E_NONE No errors.
    399  * \retval !SHR_E_NONE Failure.
    400  */
    401 typedef int (*ecn_action_latency_dequeue_set_f)(
    402     int unit,
    403     bcm_ecn_traffic_action_config_t *ecn_config);
    404 
    405 /*!
    406  * \brief To get the ECN egress action.
    407  *
    408  * \param [in] unit Unit Number.
    409  * \param [inout] ecn_config ECN traffic action configuration.
    410  *
    411  * \retval SHR_E_NONE No errors.
    412  * \retval !SHR_E_NONE Failure.
    413  */
    414 typedef int (*ecn_action_latency_dequeue_get_f)(
    415     int unit,
    416     bcm_ecn_traffic_action_config_t *ecn_config);
    417 
    418 /*!
    419  * \brief To set the default responsive value for Non-TCP packets.
    420  *
    421  * \param [in] unit Unit Number.
    422  * \param [in] value Default responsive value.
    423  *
    424  * \retval SHR_E_NONE No errors.
    425  * \retval !SHR_E_NONE Failure.
    426  */
    427 typedef int (*ecn_responsive_default_set_f)(
    428     int unit,
    429     int value);
    430 
    431 /*!
    432  * \brief To get the default responsive value for Non-TCP packets.
    433  *
    434  * \param [in] unit Unit Number.
    435  * \param [out] value Returned default responsive value.
    436  *
    437  * \retval SHR_E_NONE No errors.
    438  * \retval !SHR_E_NONE Failure.
    439  */
    440 typedef int (*ecn_responsive_default_get_f)(
    441     int unit,
    442     int *value);
    443 
    444 /*!
    445  * \brief Enable or disable one field ECN control table.
    446  *
    447  * \param [in] unit Unit Number.
    448  * \param [in] lt_name ecn_ctrl_name LT name.
    449  * \param [in] lt_fld_name ecn_ctrl_fld LT field name.
    450  * \param [in] val value set in the field.
    451  *
    452  * \retval SHR_E_NONE No errors.
    453  * \retval !SHR_E_NONE Failure.
    454  */
    455 typedef int (*ecn_ctrl_set_f)(
    456     int unit,
    457     const char *lt_name,
    458     const char *lt_fld_name,
    459     int val);
    460 
    461 /*!
    462  * \brief Get status ECN control table.
    463  *
    464  * \param [in] unit Unit Number.
    465  * \param [in] lt_name ecn_ctrl_name LT name.
    466  * \param [in] lt_fld_name ecn_ctrl_fld LT field name.
    467  * \param [in] val value get in the field.
    468  *
    469  * \retval SHR_E_NONE No errors.
    470  * \retval !SHR_E_NONE Failure.
    471  */
    472 typedef int (*ecn_ctrl_get_f)(
    473     int unit,
    474     const char *lt_name,
    475     const char *lt_fld_name,
    476     int *val);
    477 
    478 /*!
    479  * \brief Traverse all specified ECN type maps.
    480  *
    481  * \param [in] unit Unit Number.
    482  * \param [in] flags BCM_ECN_TYPE_MAP_XXX flags.
    483  * \param [in] cb User callback function.
    484  * \param [in] user_data User data to be passed to callback function.
    485  *
    486  * \retval SHR_E_NONE No errors.
    487  * \retval !SHR_E_NONE Failure.
    488  */
    489 typedef int (*ecn_type_map_traverse_f)(
    490     int unit,
    491     uint32_t flags,
    492     bcm_ecn_type_map_traverse_cb cb,
    493     void *user_data);
    494 
    495 /*!
    496  * \brief Setup SFC QoS PHB with regard to ECN module.
    497  *
    498  * \param [in] unit Unit Number.
    499  *
    500  * \retval SHR_E_NONE No errors.
    501  * \retval !SHR_E_NONE Failure.
    502  */
    503 typedef int (*ecn_sfc_qos_phb_setup_f)(int unit);
    504 
    505 /*!
    506  * \brief Ecn driver structure.
    507  */
    508 typedef struct mbcm_ltsw_ecn_drv_s {
    509 
    510     /*! Deinit ECN module. */
    511     ecn_deinit_f ecn_deinit;
    512 
    513     /*! Init ECN module. */
    514     ecn_init_f ecn_init;
    515 
    516     /*! Create MPLS ECN map. */
    517     ecn_map_create_f ecn_map_create;
    518 
    519     /*! Destroy MPLS ECN map. */
    520     ecn_map_destroy_f ecn_map_destroy;
    521 
    522     /*! Set MPLS ECN map. */
    523     ecn_map_set_f ecn_map_set;
    524 
    525     /*! Get MPLS ECN map. */
    526     ecn_map_get_f ecn_map_get;
    527 
    528     /*! To configure the value of responsive indication based on the IP protocol value. */
    529     ecn_responsive_protocol_set_f ecn_responsive_protocol_set;
    530 
    531     /*! To get the value of responsive indication based on the IP protocol value. */
    532     ecn_responsive_protocol_get_f ecn_responsive_protocol_get;
    533 
    534     /*! To get an ECN mapping info from a port. */
    535     ecn_port_map_get_f ecn_port_map_get;
    536 
    537     /*! To set an ECN mapping info to a port. */
    538     ecn_port_map_set_f ecn_port_map_set;
    539 
    540     /*! To get an ECN mapping type. */
    541     ecn_type_map_get_f ecn_type_map_get;
    542 
    543     /*! To set an ECN mapping type. */
    544     ecn_type_map_set_f ecn_type_map_set;
    545 
    546     /*! Set latency-based ECN mode. */
    547     ecn_latency_based_mode_set_f ecn_latency_based_mode_set;
    548 
    549     /*! Get latency-based ECN mode. */
    550     ecn_latency_based_mode_get_f ecn_latency_based_mode_get;
    551 
    552     /*! Set latency-based ECN threshold. */
    553     ecn_latency_based_threshold_set_f ecn_latency_based_threshold_set;
    554 
    555     /*! Get latency-based ECN threshold. */
    556     ecn_latency_based_threshold_get_f ecn_latency_based_threshold_get;
    557 
    558     /*! Resolve ECN map ID. */
    559     ecn_map_id_resolve_f ecn_map_id_resolve;
    560 
    561     /*! Construct ECN map ID. */
    562     ecn_map_id_construct_f ecn_map_id_construct;
    563 
    564     /*! To set the mapped internal congestion notification (int_cn) value. */
    565     ecn_traffic_map_set_f ecn_traffic_map_set;
    566 
    567     /*! To get the mapped internal congestion notification (int_cn) value. */
    568     ecn_traffic_map_get_f ecn_traffic_map_get;
    569 
    570     /*! To set the ECN enqueue action. */
    571     ecn_action_enqueue_set_f ecn_action_enqueue_set;
    572 
    573     /*! To get the ECN enqueue action. */
    574     ecn_action_enqueue_get_f ecn_action_enqueue_get;
    575 
    576     /*! To set the ECN dequeue action. */
    577     ecn_action_dequeue_set_f ecn_action_dequeue_set;
    578 
    579     /*! To get the ECN dequeue action. */
    580     ecn_action_dequeue_get_f ecn_action_dequeue_get;
    581 
    582     /*! To set the ECN egress action. */
    583     ecn_action_egress_set_f ecn_action_egress_set;
    584 
    585     /*! To get the ECN egress action. */
    586     ecn_action_egress_get_f ecn_action_egress_get;
    587 
    588     /*! To set the ECN egress action. */
    589     ecn_action_latency_dequeue_set_f ecn_action_latency_dequeue_set;
    590 
    591     /*! To get the ECN egress action. */
    592     ecn_action_latency_dequeue_get_f ecn_action_latency_dequeue_get;
    593 
    594     /*! To set the default responsive value for Non-TCP packets. */
    595     ecn_responsive_default_set_f ecn_responsive_default_set;
    596 
    597     /*! To get the default responsive value for Non-TCP packets. */
    598     ecn_responsive_default_get_f ecn_responsive_default_get;
    599 
    600     /*! Enable or disable one field ECN control table. */
    601     ecn_ctrl_set_f ecn_ctrl_set;
    602 
    603     /*! Get status ECN control table. */
    604     ecn_ctrl_get_f ecn_ctrl_get;
    605 
    606     /*! Traverse all specified ECN type maps. */
    607     ecn_type_map_traverse_f ecn_type_map_traverse;
    608 
    609     /*! Setup SFC QoS PHB with regard to ECN module. */
    610     ecn_sfc_qos_phb_setup_f ecn_sfc_qos_phb_setup;
    611 
    612 } mbcm_ltsw_ecn_drv_t;
    613 
    614 /*!
    615  * \brief Set the ECN driver of the device.
    616  *
    617  * \param [in] unit Unit Number.
    618  * \param [in] drv Ecn driver to set.
    619  *
    620  * \retval SHR_E_NONE No errors.
    621  * \retval !SHR_E_NONE Failure.
    622  */
    623 extern int
    624 mbcm_ltsw_ecn_drv_set(
    625     int unit,
    626     mbcm_ltsw_ecn_drv_t *drv);
    627 
    628 /*!
    629  * \brief Deinit ECN module.
    630  *
    631  * \param [in] unit Unit Number.
    632  *
    633  * \retval SHR_E_NONE No errors.
    634  * \retval !SHR_E_NONE Failure.
    635  */
    636 extern int
    637 mbcm_ltsw_ecn_deinit(int unit);
    638 
    639 /*!
    640  * \brief Init ECN module.
    641  *
    642  * \param [in] unit Unit Number.
    643  *
    644  * \retval SHR_E_NONE No errors.
    645  * \retval !SHR_E_NONE Failure.
    646  */
    647 extern int
    648 mbcm_ltsw_ecn_init(int unit);
    649 
    650 /*!
    651  * \brief Create MPLS ECN map.
    652  *
    653  * \param [in] unit Unit Number.
    654  * \param [in] flags flags.
    655  * \param [out] ecn_map_id ECN map ID.
    656  *
    657  * \retval SHR_E_NONE No errors.
    658  * \retval !SHR_E_NONE Failure.
    659  */
    660 extern int
    661 mbcm_ltsw_ecn_map_create(
    662     int unit,
    663     uint32_t flags,
    664     int *ecn_map_id);
    665 
    666 /*!
    667  * \brief Destroy MPLS ECN map.
    668  *
    669  * \param [in] unit Unit Number.
    670  * \param [in] ecn_map_id ECN map ID.
    671  *
    672  * \retval SHR_E_NONE No errors.
    673  * \retval !SHR_E_NONE Failure.
    674  */
    675 extern int
    676 mbcm_ltsw_ecn_map_destroy(
    677     int unit,
    678     int ecn_map_id);
    679 
    680 /*!
    681  * \brief Set MPLS ECN map.
    682  *
    683  * \param [in] unit Unit Number.
    684  * \param [in] options options, not used currently.
    685  * \param [in] ecn_map_id ECN map ID.
    686  * \param [in] ecn_map ECN mapping values.
    687  *
    688  * \retval SHR_E_NONE No errors.
    689  * \retval !SHR_E_NONE Failure.
    690  */
    691 extern int
    692 mbcm_ltsw_ecn_map_set(
    693     int unit,
    694     uint32_t options,
    695     int ecn_map_id,
    696     bcm_ecn_map_t *ecn_map);
    697 
    698 /*!
    699  * \brief Get MPLS ECN map.
    700  *
    701  * \param [in] unit Unit Number.
    702  * \param [in] ecn_map_id ECN map ID.
    703  * \param [inout] ecn_map ECN mapping values.
    704  *
    705  * \retval SHR_E_NONE No errors.
    706  * \retval !SHR_E_NONE Failure.
    707  */
    708 extern int
    709 mbcm_ltsw_ecn_map_get(
    710     int unit,
    711     int ecn_map_id,
    712     bcm_ecn_map_t *ecn_map);
    713 
    714 /*!
    715  * \brief To configure the value of responsive indication based on the IP protocol value.
    716  *
    717  * \param [in] unit Unit Number.
    718  * \param [in] ip_proto IP Protocol value.
    719  * \param [in] responsive Responsice indication.
    720  *
    721  * \retval SHR_E_NONE No errors.
    722  * \retval !SHR_E_NONE Failure.
    723  */
    724 extern int
    725 mbcm_ltsw_ecn_responsive_protocol_set(
    726     int unit,
    727     uint8 ip_proto,
    728     int responsive);
    729 
    730 /*!
    731  * \brief To get the value of responsive indication based on the IP protocol value.
    732  *
    733  * \param [in] unit Unit Number.
    734  * \param [in] ip_proto IP Protocol value.
    735  * \param [inout] responsive Responsice indication.
    736  *
    737  * \retval SHR_E_NONE No errors.
    738  * \retval !SHR_E_NONE Failure.
    739  */
    740 extern int
    741 mbcm_ltsw_ecn_responsive_protocol_get(
    742     int unit,
    743     uint8 ip_proto,
    744     int *responsive);
    745 
    746 /*!
    747  * \brief To get an ECN mapping info from a port.
    748  *
    749  * \param [in] unit Unit Number.
    750  * \param [in] port gport.
    751  * \param [inout] ecn_map ECN mapping values.
    752  *
    753  * \retval SHR_E_NONE No errors.
    754  * \retval !SHR_E_NONE Failure.
    755  */
    756 extern int
    757 mbcm_ltsw_ecn_port_map_get(
    758     int unit,
    759     bcm_gport_t port,
    760     bcm_ecn_port_map_t *ecn_map);
    761 
    762 /*!
    763  * \brief To set an ECN mapping info to a port.
    764  *
    765  * \param [in] unit Unit Number.
    766  * \param [in] port gport.
    767  * \param [inout] ecn_map ECN mapping values.
    768  *
    769  * \retval SHR_E_NONE No errors.
    770  * \retval !SHR_E_NONE Failure.
    771  */
    772 extern int
    773 mbcm_ltsw_ecn_port_map_set(
    774     int unit,
    775     bcm_gport_t port,
    776     bcm_ecn_port_map_t *ecn_map);
    777 
    778 /*!
    779  * \brief To get an ECN mapping type.
    780  *
    781  * \param [in] unit Unit Number.
    782  * \param [in] flags Indicates the operation by BCM_ECN_TYPE_MAP_XXX flags.
    783  * \param [out] map ECN type map structure.
    784  *
    785  * \retval SHR_E_NONE No errors.
    786  * \retval !SHR_E_NONE Failure.
    787  */
    788 extern int
    789 mbcm_ltsw_ecn_type_map_get(
    790     int unit,
    791     uint32_t flags,
    792     bcm_ecn_type_map_t *map);
    793 
    794 /*!
    795  * \brief To set an ECN mapping type.
    796  *
    797  * \param [in] unit Unit Number.
    798  * \param [in] flags Indicates the operation by BCM_ECN_TYPE_MAP_XXX flags.
    799  * \param [in] map ECN type map structure.
    800  *
    801  * \retval SHR_E_NONE No errors.
    802  * \retval !SHR_E_NONE Failure.
    803  */
    804 extern int
    805 mbcm_ltsw_ecn_type_map_set(
    806     int unit,
    807     uint32_t flags,
    808     bcm_ecn_type_map_t *map);
    809 
    810 /*!
    811  * \brief Set latency-based ECN mode.
    812  *
    813  * \param [in] unit Unit Number.
    814  * \param [in] mode mode.
    815  *
    816  * \retval SHR_E_NONE No errors.
    817  * \retval !SHR_E_NONE Failure.
    818  */
    819 extern int
    820 mbcm_ltsw_ecn_latency_based_mode_set(
    821     int unit,
    822     bcm_switch_latency_ecn_mark_mode_t mode);
    823 
    824 /*!
    825  * \brief Get latency-based ECN mode.
    826  *
    827  * \param [in] unit Unit Number.
    828  * \param [out] mode mode.
    829  *
    830  * \retval SHR_E_NONE No errors.
    831  * \retval !SHR_E_NONE Failure.
    832  */
    833 extern int
    834 mbcm_ltsw_ecn_latency_based_mode_get(
    835     int unit,
    836     bcm_switch_latency_ecn_mark_mode_t *mode);
    837 
    838 /*!
    839  * \brief Set latency-based ECN threshold.
    840  *
    841  * \param [in] unit Unit Number.
    842  * \param [in] gport Port number or GPORT identifier.
    843  * \param [in] cosq COS queue number.
    844  * \param [in] mode mode.
    845  * \param [in] threshold threshold.
    846  *
    847  * \retval SHR_E_NONE No errors.
    848  * \retval !SHR_E_NONE Failure.
    849  */
    850 extern int
    851 mbcm_ltsw_ecn_latency_based_threshold_set(
    852     int unit,
    853     bcm_gport_t gport,
    854     bcm_cos_queue_t cosq,
    855     bcm_switch_latency_ecn_mark_mode_t mode,
    856     uint32_t threshold);
    857 
    858 /*!
    859  * \brief Get latency-based ECN threshold.
    860  *
    861  * \param [in] unit Unit Number.
    862  * \param [in] gport Port number or GPORT identifier.
    863  * \param [in] cosq COS queue number.
    864  * \param [in] mode mode.
    865  * \param [out] threshold threshold.
    866  *
    867  * \retval SHR_E_NONE No errors.
    868  * \retval !SHR_E_NONE Failure.
    869  */
    870 extern int
    871 mbcm_ltsw_ecn_latency_based_threshold_get(
    872     int unit,
    873     bcm_gport_t gport,
    874     bcm_cos_queue_t cosq,
    875     bcm_switch_latency_ecn_mark_mode_t mode,
    876     uint32_t *threshold);
    877 
    878 /*!
    879  * \brief Resolve ECN map ID.
    880  *
    881  * \param [in] unit Unit Number.
    882  * \param [in] ecn_map_id ECN map ID.
    883  * \param [out] ecn_map_type ECN map type.
    884  * \param [out] prof_id ECN map profile ID.
    885  *
    886  * \retval SHR_E_NONE No errors.
    887  * \retval !SHR_E_NONE Failure.
    888  */
    889 extern int
    890 mbcm_ltsw_ecn_map_id_resolve(
    891     int unit,
    892     int ecn_map_id,
    893     int *ecn_map_type,
    894     uint32_t *prof_id);
    895 
    896 /*!
    897  * \brief Construct ECN map ID.
    898  *
    899  * \param [in] unit Unit Number.
    900  * \param [in] ecn_map_type ECN map type.
    901  * \param [in] prof_id ECN map profile ID.
    902  * \param [out] ecn_map_id ECN map ID.
    903  *
    904  * \retval SHR_E_NONE No errors.
    905  * \retval !SHR_E_NONE Failure.
    906  */
    907 extern int
    908 mbcm_ltsw_ecn_map_id_construct(
    909     int unit,
    910     int ecn_map_type,
    911     uint32_t prof_id,
    912     int *ecn_map_id);
    913 
    914 /*!
    915  * \brief To set the mapped internal congestion notification (int_cn) value.
    916  *
    917  * \param [in] unit Unit Number.
    918  * \param [in] map Internal congestion notification map.
    919  *
    920  * \retval SHR_E_NONE No errors.
    921  * \retval !SHR_E_NONE Failure.
    922  */
    923 extern int
    924 mbcm_ltsw_ecn_traffic_map_set(
    925     int unit,
    926     bcm_ecn_traffic_map_info_t *map);
    927 
    928 /*!
    929  * \brief To get the mapped internal congestion notification (int_cn) value.
    930  *
    931  * \param [in] unit Unit Number.
    932  * \param [inout] map Internal congestion notification map.
    933  *
    934  * \retval SHR_E_NONE No errors.
    935  * \retval !SHR_E_NONE Failure.
    936  */
    937 extern int
    938 mbcm_ltsw_ecn_traffic_map_get(
    939     int unit,
    940     bcm_ecn_traffic_map_info_t *map);
    941 
    942 /*!
    943  * \brief To set the ECN enqueue action.
    944  *
    945  * \param [in] unit Unit Number.
    946  * \param [in] ecn_config ECN traffic action configuration.
    947  *
    948  * \retval SHR_E_NONE No errors.
    949  * \retval !SHR_E_NONE Failure.
    950  */
    951 extern int
    952 mbcm_ltsw_ecn_action_enqueue_set(
    953     int unit,
    954     bcm_ecn_traffic_action_config_t *ecn_config);
    955 
    956 /*!
    957  * \brief To get the ECN enqueue action.
    958  *
    959  * \param [in] unit Unit Number.
    960  * \param [inout] ecn_config ECN traffic action configuration.
    961  *
    962  * \retval SHR_E_NONE No errors.
    963  * \retval !SHR_E_NONE Failure.
    964  */
    965 extern int
    966 mbcm_ltsw_ecn_action_enqueue_get(
    967     int unit,
    968     bcm_ecn_traffic_action_config_t *ecn_config);
    969 
    970 /*!
    971  * \brief To set the ECN dequeue action.
    972  *
    973  * \param [in] unit Unit Number.
    974  * \param [in] ecn_config ECN traffic action configuration.
    975  *
    976  * \retval SHR_E_NONE No errors.
    977  * \retval !SHR_E_NONE Failure.
    978  */
    979 extern int
    980 mbcm_ltsw_ecn_action_dequeue_set(
    981     int unit,
    982     bcm_ecn_traffic_action_config_t *ecn_config);
    983 
    984 /*!
    985  * \brief To get the ECN dequeue action.
    986  *
    987  * \param [in] unit Unit Number.
    988  * \param [inout] ecn_config ECN traffic action configuration.
    989  *
    990  * \retval SHR_E_NONE No errors.
    991  * \retval !SHR_E_NONE Failure.
    992  */
    993 extern int
    994 mbcm_ltsw_ecn_action_dequeue_get(
    995     int unit,
    996     bcm_ecn_traffic_action_config_t *ecn_config);
    997 
    998 /*!
    999  * \brief To set the ECN egress action.
   1000  *
   1001  * \param [in] unit Unit Number.
   1002  * \param [in] ecn_config ECN traffic action configuration.
   1003  *
   1004  * \retval SHR_E_NONE No errors.
   1005  * \retval !SHR_E_NONE Failure.
   1006  */
   1007 extern int
   1008 mbcm_ltsw_ecn_action_egress_set(
   1009     int unit,
   1010     bcm_ecn_traffic_action_config_t *ecn_config);
   1011 
   1012 /*!
   1013  * \brief To get the ECN egress action.
   1014  *
   1015  * \param [in] unit Unit Number.
   1016  * \param [inout] ecn_config ECN traffic action configuration.
   1017  *
   1018  * \retval SHR_E_NONE No errors.
   1019  * \retval !SHR_E_NONE Failure.
   1020  */
   1021 extern int
   1022 mbcm_ltsw_ecn_action_egress_get(
   1023     int unit,
   1024     bcm_ecn_traffic_action_config_t *ecn_config);
   1025 
   1026 /*!
   1027  * \brief To set the ECN egress action.
   1028  *
   1029  * \param [in] unit Unit Number.
   1030  * \param [in] ecn_config ECN traffic action configuration.
   1031  *
   1032  * \retval SHR_E_NONE No errors.
   1033  * \retval !SHR_E_NONE Failure.
   1034  */
   1035 extern int
   1036 mbcm_ltsw_ecn_action_latency_dequeue_set(
   1037     int unit,
   1038     bcm_ecn_traffic_action_config_t *ecn_config);
   1039 
   1040 /*!
   1041  * \brief To get the ECN egress action.
   1042  *
   1043  * \param [in] unit Unit Number.
   1044  * \param [inout] ecn_config ECN traffic action configuration.
   1045  *
   1046  * \retval SHR_E_NONE No errors.
   1047  * \retval !SHR_E_NONE Failure.
   1048  */
   1049 extern int
   1050 mbcm_ltsw_ecn_action_latency_dequeue_get(
   1051     int unit,
   1052     bcm_ecn_traffic_action_config_t *ecn_config);
   1053 
   1054 /*!
   1055  * \brief To set the default responsive value for Non-TCP packets.
   1056  *
   1057  * \param [in] unit Unit Number.
   1058  * \param [in] value Default responsive value.
   1059  *
   1060  * \retval SHR_E_NONE No errors.
   1061  * \retval !SHR_E_NONE Failure.
   1062  */
   1063 extern int
   1064 mbcm_ltsw_ecn_responsive_default_set(
   1065     int unit,
   1066     int value);
   1067 
   1068 /*!
   1069  * \brief To get the default responsive value for Non-TCP packets.
   1070  *
   1071  * \param [in] unit Unit Number.
   1072  * \param [out] value Returned default responsive value.
   1073  *
   1074  * \retval SHR_E_NONE No errors.
   1075  * \retval !SHR_E_NONE Failure.
   1076  */
   1077 extern int
   1078 mbcm_ltsw_ecn_responsive_default_get(
   1079     int unit,
   1080     int *value);
   1081 
   1082 /*!
   1083  * \brief Enable or disable one field ECN control table.
   1084  *
   1085  * \param [in] unit Unit Number.
   1086  * \param [in] lt_name ecn_ctrl_name LT name.
   1087  * \param [in] lt_fld_name ecn_ctrl_fld LT field name.
   1088  * \param [in] val value set in the field.
   1089  *
   1090  * \retval SHR_E_NONE No errors.
   1091  * \retval !SHR_E_NONE Failure.
   1092  */
   1093 extern int
   1094 mbcm_ltsw_ecn_ctrl_set(
   1095     int unit,
   1096     const char *lt_name,
   1097     const char *lt_fld_name,
   1098     int val);
   1099 
   1100 /*!
   1101  * \brief Get status ECN control table.
   1102  *
   1103  * \param [in] unit Unit Number.
   1104  * \param [in] lt_name ecn_ctrl_name LT name.
   1105  * \param [in] lt_fld_name ecn_ctrl_fld LT field name.
   1106  * \param [in] val value get in the field.
   1107  *
   1108  * \retval SHR_E_NONE No errors.
   1109  * \retval !SHR_E_NONE Failure.
   1110  */
   1111 extern int
   1112 mbcm_ltsw_ecn_ctrl_get(
   1113     int unit,
   1114     const char *lt_name,
   1115     const char *lt_fld_name,
   1116     int *val);
   1117 
   1118 /*!
   1119  * \brief Traverse all specified ECN type maps.
   1120  *
   1121  * \param [in] unit Unit Number.
   1122  * \param [in] flags BCM_ECN_TYPE_MAP_XXX flags.
   1123  * \param [in] cb User callback function.
   1124  * \param [in] user_data User data to be passed to callback function.
   1125  *
   1126  * \retval SHR_E_NONE No errors.
   1127  * \retval !SHR_E_NONE Failure.
   1128  */
   1129 extern int
   1130 mbcm_ltsw_ecn_type_map_traverse(
   1131     int unit,
   1132     uint32_t flags,
   1133     bcm_ecn_type_map_traverse_cb cb,
   1134     void *user_data);
   1135 
   1136 /*!
   1137  * \brief Setup SFC QoS PHB with regard to ECN module.
   1138  *
   1139  * \param [in] unit Unit Number.
   1140  *
   1141  * \retval SHR_E_NONE No errors.
   1142  * \retval !SHR_E_NONE Failure.
   1143  */
   1144 extern int
   1145 mbcm_ltsw_ecn_sfc_qos_phb_setup(int unit);
   1146 
   1147 #endif /* BCMINT_LTSW_MBCM_ECN_H */