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

trunk.h (41081B)


      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_TRUNK_H
     12 #define BCMINT_LTSW_MBCM_TRUNK_H
     13 
     14 #include <bcm/types.h>
     15 #include <bcm/trunk.h>
     16 #include <bcm_int/ltsw/flexctr.h>
     17 
     18 #include <bcm_int/ltsw/trunk_int.h>
     19 
     20 #include <sal/sal_types.h>
     21 
     22 /*!
     23  * \brief Convert trunk type Id to L2 destination.
     24  *
     25  * \param [in] unit Unit Number.
     26  * \param [in] t_type Trunk Type.
     27  * \param [in] t_id Type-based Trunk Identifier.
     28  * \param [in] t_priv Trunk private information.
     29  * \param [out] l2_dest L2 destination.
     30  *
     31  * \retval SHR_E_NONE No errors.
     32  * \retval !SHR_E_NONE Failure.
     33  */
     34 typedef int (*trunk_type_id_to_l2_dest_f)(
     35     int unit,
     36     bcmint_trunk_type_t t_type,
     37     bcmint_trunk_id_t t_id,
     38     bcmint_trunk_priv_info_t *t_priv,
     39     int *l2_dest);
     40 
     41 /*!
     42  * \brief Convert L2 destination to trunk type Id.
     43  *
     44  * \param [in] unit Unit Number.
     45  * \param [in] l2_dest L2 destination.
     46  * \param [out] t_type Trunk Type.
     47  * \param [out] t_id Type-based Trunk Identifier.
     48  *
     49  * \retval SHR_E_NONE No errors.
     50  * \retval !SHR_E_NONE Failure.
     51  */
     52 typedef int (*trunk_l2_dest_to_type_id_f)(
     53     int unit,
     54     int l2_dest,
     55     bcmint_trunk_type_t *t_type,
     56     bcmint_trunk_id_t *t_id);
     57 
     58 /*!
     59  * \brief Judge the gport is channelized access port or not.
     60  *
     61  * \param [in] unit Unit Number.
     62  * \param [in] gport Gport Number.
     63  * \param [out] is_channelized_access_port TRUE/False: Is or Isn't.
     64  *
     65  * \retval SHR_E_NONE No errors.
     66  * \retval !SHR_E_NONE Failure.
     67  */
     68 typedef int (*trunk_gport_is_channelized_access_port_f)(
     69     int unit,
     70     bcm_gport_t gport,
     71     bool *is_channelized_access_port);
     72 
     73 /*!
     74  * \brief Get TRUNK module public information.
     75  *
     76  * \param [in] unit Unit Number.
     77  * \param [out] t_pub Trunk public information.
     78  *
     79  * \retval SHR_E_NONE No errors.
     80  * \retval !SHR_E_NONE Failure.
     81  */
     82 typedef int (*trunk_pub_info_get_f)(
     83     int unit,
     84     bcmint_trunk_pub_info_t *t_pub);
     85 
     86 /*!
     87  * \brief Compare two psc values and return the result.
     88  *
     89  * \param [in] unit Unit Number.
     90  * \param [in] t_type Trunk Type.
     91  * \param [in] psc0 First Port Selection Criteria.
     92  * \param [in] psc1 Second Port Selection Criteria.
     93  * \param [in] exact Exact match.
     94  * \param [out] result TRUE/False: Same or Not.
     95  *
     96  * \retval SHR_E_NONE No errors.
     97  * \retval !SHR_E_NONE Failure.
     98  */
     99 typedef int (*trunk_psc_compare_f)(
    100     int unit,
    101     bcmint_trunk_type_t t_type,
    102     int psc0,
    103     int psc1,
    104     int exact,
    105     bool *result);
    106 
    107 /*!
    108  * \brief Initialized the trunk module.
    109  *
    110  * \param [in] unit Unit Number.
    111  *
    112  * \retval SHR_E_NONE No errors.
    113  * \retval !SHR_E_NONE Failure.
    114  */
    115 typedef int (*trunk_init_f)(int unit);
    116 
    117 /*!
    118  * \brief De-init trunk module.
    119  *
    120  * \param [in] unit Unit Number.
    121  *
    122  * \retval SHR_E_NONE No errors.
    123  * \retval !SHR_E_NONE Failure.
    124  */
    125 typedef int (*trunk_detach_f)(int unit);
    126 
    127 /*!
    128  * \brief Clear trunk related LT tables.
    129  *
    130  * \param [in] unit Unit Number.
    131  *
    132  * \retval SHR_E_NONE No errors.
    133  * \retval !SHR_E_NONE Failure.
    134  */
    135 typedef int (*trunk_clear_f)(int unit);
    136 
    137 /*!
    138  * \brief Create a specific trunk with identifier.
    139  *
    140  * \param [in] unit Unit Number.
    141  * \param [in] t_id Type-based Trunk Identifier.
    142  * \param [in] t_type Trunk Type.
    143  * \param [in] t_priv Trunk private information.
    144  *
    145  * \retval SHR_E_NONE No errors.
    146  * \retval !SHR_E_NONE Failure.
    147  */
    148 typedef int (*trunk_create_f)(
    149     int unit,
    150     bcmint_trunk_id_t t_id,
    151     bcmint_trunk_type_t t_type,
    152     bcmint_trunk_priv_info_t *t_priv);
    153 
    154 /*!
    155  * \brief Validate the trunk input parameters before trunk set function is executed.
    156  *
    157  * \param [in] unit Unit Number.
    158  * \param [in] t_id Type-based Trunk Identifier.
    159  * \param [in] t_type Trunk Type.
    160  * \param [in] trunk_info Trunk Information.
    161  * \param [in] member_count Trunk Member Count.
    162  * \param [in] member_array Trunk Member Array.
    163  * \param [in] op Trunk Member Operation Code.
    164  * \param [in] member Trunk Member.
    165  *
    166  * \retval SHR_E_NONE No errors.
    167  * \retval !SHR_E_NONE Failure.
    168  */
    169 typedef int (*trunk_params_validate_f)(
    170     int unit,
    171     bcmint_trunk_id_t t_id,
    172     bcmint_trunk_type_t t_type,
    173     bcm_trunk_info_t *trunk_info,
    174     int member_count,
    175     bcm_trunk_member_t *member_array,
    176     int op,
    177     bcm_trunk_member_t *member);
    178 
    179 /*!
    180  * \brief Get the trunk configuration from HW.
    181  *
    182  * \param [in] unit Unit Number.
    183  * \param [in] t_id Type-based Trunk Identifier.
    184  * \param [in] t_type Trunk Type.
    185  * \param [in] t_priv Trunk private information.
    186  * \param [out] trunk_info Trunk Information.
    187  * \param [in] member_max Max Number of Trunk Members.
    188  * \param [out] member_array Trunk Member Array.
    189  * \param [out] member_count Trunk Member Count.
    190  *
    191  * \retval SHR_E_NONE No errors.
    192  * \retval !SHR_E_NONE Failure.
    193  */
    194 typedef int (*trunk_get_f)(
    195     int unit,
    196     bcmint_trunk_id_t t_id,
    197     bcmint_trunk_type_t t_type,
    198     bcmint_trunk_priv_info_t *t_priv,
    199     bcm_trunk_info_t *trunk_info,
    200     int member_max,
    201     bcm_trunk_member_t *member_array,
    202     int *member_count);
    203 
    204 /*!
    205  * \brief Update the trunk configuration.
    206  *
    207  * \param [in] unit Unit Number.
    208  * \param [in] t_id Type-based Trunk Identifier.
    209  * \param [in] t_type Trunk Type.
    210  * \param [in] trunk_info Trunk Information.
    211  * \param [in] member_count Trunk Member Count.
    212  * \param [in] member_array Trunk Member Array.
    213  * \param [in] op Trunk Member Operation Code.
    214  * \param [in] member Trunk Member.
    215  * \param [in] t_priv Trunk private information.
    216  * \param [in] t_update Trunk update information.
    217  *
    218  * \retval SHR_E_NONE No errors.
    219  * \retval !SHR_E_NONE Failure.
    220  */
    221 typedef int (*trunk_update_f)(
    222     int unit,
    223     bcmint_trunk_id_t t_id,
    224     bcmint_trunk_type_t t_type,
    225     bcm_trunk_info_t *trunk_info,
    226     int member_count,
    227     bcm_trunk_member_t *member_array,
    228     int op,
    229     bcm_trunk_member_t *member,
    230     bcmint_trunk_priv_info_t *t_priv,
    231     bcmint_trunk_update_info_t *t_update);
    232 
    233 /*!
    234  * \brief Destroy a specific trunk with identifier.
    235  *
    236  * \param [in] unit Unit Number.
    237  * \param [in] t_id Type-based Trunk Identifier.
    238  * \param [in] t_type Trunk Type.
    239  * \param [in] t_priv Trunk private information.
    240  *
    241  * \retval SHR_E_NONE No errors.
    242  * \retval !SHR_E_NONE Failure.
    243  */
    244 typedef int (*trunk_destroy_f)(
    245     int unit,
    246     bcmint_trunk_id_t t_id,
    247     bcmint_trunk_type_t t_type,
    248     bcmint_trunk_priv_info_t *t_priv);
    249 
    250 /*!
    251  * \brief Find a specific trunk with member gport.
    252  *
    253  * \param [in] unit Unit Number.
    254  * \param [in] gport Gport Number.
    255  * \param [out] t_id Type-based Trunk Identifier.
    256  * \param [out] t_type Trunk Type.
    257  *
    258  * \retval SHR_E_NONE No errors.
    259  * \retval !SHR_E_NONE Failure.
    260  */
    261 typedef int (*trunk_find_f)(
    262     int unit,
    263     bcm_gport_t gport,
    264     bcmint_trunk_id_t *t_id,
    265     bcmint_trunk_type_t *t_type);
    266 
    267 /*!
    268  * \brief Find a specific virtual trunk with member gport.
    269  *
    270  * \param [in] unit Unit Number.
    271  * \param [in] gport Gport Number.
    272  * \param [out] vp_lag_vp The VPLAG vp Id.
    273  *
    274  * \retval SHR_E_NONE No errors.
    275  * \retval !SHR_E_NONE Failure.
    276  */
    277 typedef int (*trunk_find_virtual_f)(
    278     int unit,
    279     bcm_gport_t gport,
    280     int *vp_lag_vp);
    281 
    282 /*!
    283  * \brief To notify the trunk is updated.
    284  *
    285  * \param [in] unit Unit Number.
    286  * \param [in] t_id Type-based Trunk Identifier.
    287  * \param [in] t_type Trunk Type.
    288  *
    289  * \retval SHR_E_NONE No errors.
    290  * \retval !SHR_E_NONE Failure.
    291  */
    292 typedef int (*trunk_notify_f)(
    293     int unit,
    294     bcmint_trunk_id_t t_id,
    295     bcmint_trunk_type_t t_type);
    296 
    297 /*!
    298  * \brief Extract trunk failover flags from trunk configuration flags.
    299  *
    300  * \param [in] unit Unit Number.
    301  * \param [in] flags Trunk Configuration Flags.
    302  * \param [in] t_type Trunk Type.
    303  * \param [in] fail_flags Trunk Failover Flags.
    304  *
    305  * \retval SHR_E_NONE No errors.
    306  * \retval !SHR_E_NONE Failure.
    307  */
    308 typedef int (*trunk_failover_flags_extract_f)(
    309     int unit,
    310     uint32_t flags,
    311     bcmint_trunk_type_t t_type,
    312     uint32_t *fail_flags);
    313 
    314 /*!
    315  * \brief Validate the trunk failover psc configuration.
    316  *
    317  * \param [in] unit Unit Number.
    318  * \param [in] t_type Trunk Type.
    319  * \param [in] psc Port Selection Criteria.
    320  *
    321  * \retval SHR_E_NONE No errors.
    322  * \retval !SHR_E_NONE Failure.
    323  */
    324 typedef int (*trunk_failover_psc_validate_f)(
    325     int unit,
    326     bcmint_trunk_type_t t_type,
    327     int psc);
    328 
    329 /*!
    330  * \brief Set trunk failover members to a specific port member.
    331  *
    332  * \param [in] unit Unit Number.
    333  * \param [in] t_id Type-based Trunk Identifier.
    334  * \param [in] t_type Trunk Type.
    335  * \param [in] fail_port Local Failover Port Gport Number.
    336  * \param [in] psc Port Selection Criteria.
    337  * \param [in] ftp_count Failto Port Count.
    338  * \param [in] ftp Failto Port Array.
    339  *
    340  * \retval SHR_E_NONE No errors.
    341  * \retval !SHR_E_NONE Failure.
    342  */
    343 typedef int (*trunk_failover_set_f)(
    344     int unit,
    345     bcmint_trunk_id_t t_id,
    346     bcmint_trunk_type_t t_type,
    347     bcm_gport_t fail_port,
    348     int psc,
    349     int ftp_count,
    350     bcm_gport_t *ftp);
    351 
    352 /*!
    353  * \brief Get trunk failover members of a specific port member.
    354  *
    355  * \param [in] unit Unit Number.
    356  * \param [in] t_id Type-based Trunk Identifier.
    357  * \param [in] t_type Trunk Type.
    358  * \param [in] fail_port Local Failover Port Gport Number.
    359  * \param [out] psc Port Selection Criteria.
    360  * \param [in] ftp_max Failto Port Max Count.
    361  * \param [out] ftp Failto Port Array.
    362  * \param [out] ftp_count Failto Port Count.
    363  *
    364  * \retval SHR_E_NONE No errors.
    365  * \retval !SHR_E_NONE Failure.
    366  */
    367 typedef int (*trunk_failover_get_f)(
    368     int unit,
    369     bcmint_trunk_id_t t_id,
    370     bcmint_trunk_type_t t_type,
    371     bcm_gport_t fail_port,
    372     int *psc,
    373     int ftp_max,
    374     bcm_gport_t *ftp,
    375     int *ftp_count);
    376 
    377 /*!
    378  * \brief Update trunk failover configuration for a specific trunk.
    379  *
    380  * \param [in] unit Unit Number.
    381  * \param [in] t_id Type-based Trunk Identifier.
    382  * \param [in] t_type Trunk Type.
    383  * \param [in] psc Port Selection Criteria.
    384  * \param [in] fail_flags Failover Configuration Flags.
    385  * \param [in] fail_port Local Failover Port Gport Number.
    386  * \param [in] ftp_max Failto Port Max Number.
    387  * \param [in] member_count Trunk Member Count.
    388  * \param [in] member_array Trunk Member Array.
    389  *
    390  * \retval SHR_E_NONE No errors.
    391  * \retval !SHR_E_NONE Failure.
    392  */
    393 typedef int (*trunk_failover_update_f)(
    394     int unit,
    395     bcmint_trunk_id_t t_id,
    396     bcmint_trunk_type_t t_type,
    397     int psc,
    398     uint32_t fail_flags,
    399     bcm_gport_t fail_port,
    400     int ftp_max,
    401     int member_count,
    402     bcm_trunk_member_t *member_array);
    403 
    404 /*!
    405  * \brief Enable/disable fabric trunk resolution.
    406  *
    407  * \param [in] unit Unit Number.
    408  * \param [in] t_id Type-based Trunk Identifier.
    409  * \param [in] o_type Fabric trunk override Type.
    410  * \param [in] o_index Fabric trunk override Type based index.
    411  * \param [in] enable Enable/Disable fabric trunk resolution.
    412  *
    413  * \retval SHR_E_NONE No errors.
    414  * \retval !SHR_E_NONE Failure.
    415  */
    416 typedef int (*trunk_override_set_f)(
    417     int unit,
    418     bcmint_trunk_id_t t_id,
    419     bcmint_trunk_override_type_t o_type,
    420     int o_index,
    421     int enable);
    422 
    423 /*!
    424  * \brief Get fabric trunk resolution enable/disable status.
    425  *
    426  * \param [in] unit Unit Number.
    427  * \param [in] t_id Type-based Trunk Identifier.
    428  * \param [in] o_type Fabric trunk override Type.
    429  * \param [in] o_index Fabric trunk override Type based index.
    430  * \param [out] enable Enable/Disable fabric trunk resolution.
    431  *
    432  * \retval SHR_E_NONE No errors.
    433  * \retval !SHR_E_NONE Failure.
    434  */
    435 typedef int (*trunk_override_get_f)(
    436     int unit,
    437     bcmint_trunk_id_t t_id,
    438     bcmint_trunk_override_type_t o_type,
    439     int o_index,
    440     int *enable);
    441 
    442 /*!
    443  * \brief Set trunk member port status.
    444  *
    445  * \param [in] unit Unit Number.
    446  * \param [in] port Port Number.
    447  * \param [in] status Trunk member link status.
    448  *
    449  * \retval SHR_E_NONE No errors.
    450  * \retval !SHR_E_NONE Failure.
    451  */
    452 typedef int (*trunk_member_status_set_f)(
    453     int unit,
    454     bcm_port_t port,
    455     int status);
    456 
    457 /*!
    458  * \brief Get trunk member port status.
    459  *
    460  * \param [in] unit Unit Number.
    461  * \param [in] port Port Number.
    462  * \param [out] status Trunk member link status.
    463  *
    464  * \retval SHR_E_NONE No errors.
    465  * \retval !SHR_E_NONE Failure.
    466  */
    467 typedef int (*trunk_member_status_get_f)(
    468     int unit,
    469     bcm_port_t port,
    470     int *status);
    471 
    472 /*!
    473  * \brief Expand a port bitmap to include all associated trunk member ports.
    474  *
    475  * \param [in] unit Unit Number.
    476  * \param [in] t_pub Trunk public information.
    477  * \param [in/out] pbmp Pointer to returned expanded port bitmap.
    478  *
    479  * \retval SHR_E_NONE No errors.
    480  * \retval !SHR_E_NONE Failure.
    481  */
    482 typedef int (*trunk_bitmap_expand_f)(
    483     int unit,
    484     bcmint_trunk_pub_info_t *t_pub,
    485     bcm_pbmp_t *pbmp);
    486 
    487 /*!
    488  * \brief Add the specified trunk group to an existing MAC multicast entry.
    489  *
    490  * \param [in] unit Unit Number.
    491  * \param [in] t_id Trunk Identifier.
    492  * \param [in] vid VLAN ID.
    493  * \param [in] mac MAC address.
    494  *
    495  * \retval SHR_E_NONE Success.
    496  * \retval SHR_E_INIT Trunk module has not been initialized.
    497  * \retval SHR_E_BADID Invalid or unsupported trunk ID.
    498  * \retval SHR_E_NOT_FOUND Specified trunk ID is not currently defined.
    499  */
    500 typedef int (*trunk_mcast_join_f)(
    501     int unit,
    502     bcm_trunk_t t_id,
    503     bcm_vlan_t vid,
    504     bcm_mac_t mac);
    505 
    506 /*!
    507  * \brief Find trunk DLB Identifier.
    508  *
    509  * \param [in] unit Unit Number.
    510  * \param [in] t_type Trunk Type.
    511  * \param [in] t_id Type-based Trunk Identifier.
    512  * \param [in] t_priv Trunk private information.
    513  * \param [out] dlb_id Trunk dlb identifier.
    514  *
    515  * \retval SHR_E_NONE No errors.
    516  * \retval !SHR_E_NONE Failure.
    517  */
    518 typedef int (*trunk_find_dlb_id_f)(
    519     int unit,
    520     bcmint_trunk_type_t t_type,
    521     bcmint_trunk_id_t t_id,
    522     bcmint_trunk_priv_info_t *t_priv,
    523     int *dlb_id);
    524 
    525 /*!
    526  * \brief Update the VPLAG member.
    527  *
    528  * \param [in] unit Unit Number.
    529  * \param [in] vp_lag_vp The VPLAG vp Id.
    530  * \param [in] gport The generic port number.
    531  *
    532  * \retval SHR_E_NONE No errors.
    533  * \retval !SHR_E_NONE Failure.
    534  */
    535 typedef int (*trunk_vp_lag_member_update_f)(
    536     int unit,
    537     int vp_lag_vp,
    538     bcm_gport_t gport);
    539 
    540 /*!
    541  * \brief Get the CML bits for a vp_lag port.
    542  *
    543  * \param [in] unit Unit Number.
    544  * \param [in] vp_lag_vp The VPLAG vp Id.
    545  * \param [out] flags The L2 CML FLAGS.
    546  *
    547  * \retval SHR_E_NONE No errors.
    548  * \retval !SHR_E_NONE Failure.
    549  */
    550 typedef int (*trunk_vp_lag_vp_learn_get_f)(
    551     int unit,
    552     int vp_lag_vp,
    553     uint32_t *flags);
    554 
    555 /*!
    556  * \brief Set the CML bits for a vp_lag port.
    557  *
    558  * \param [in] unit Unit Number.
    559  * \param [in] vp_lag_vp The VPLAG vp Id.
    560  * \param [in] flags The L2 CML FLAGS.
    561  *
    562  * \retval SHR_E_NONE No errors.
    563  * \retval !SHR_E_NONE Failure.
    564  */
    565 typedef int (*trunk_vp_lag_vp_learn_set_f)(
    566     int unit,
    567     int vp_lag_vp,
    568     uint32_t flags);
    569 
    570 /*!
    571  * \brief Set Hash Control for L2, L3 and Multipath
    572  *
    573  * \param [in] unit Unit Number.
    574  * \param [in] arg BCM_HASH_CONTROL_TRUNK_XXX
    575  *
    576  * \retval SHR_E_NONE No errors.
    577  * \retval !SHR_E_NONE Failure.
    578  */
    579 typedef int (*trunk_sc_hash_control_set_f)(
    580     int unit,
    581     uint32_t arg);
    582 
    583 /*!
    584  * \brief Get Hash Control for L2, L3 and Multipath
    585  *
    586  * \param [in] unit Unit Number.
    587  * \param [out] arg BCM_HASH_CONTROL_TRUNK_XXX
    588  *
    589  * \retval SHR_E_NONE No errors.
    590  * \retval !SHR_E_NONE Failure.
    591  */
    592 typedef int (*trunk_sc_hash_control_get_f)(
    593     int unit,
    594     uint32_t *arg);
    595 
    596 /*!
    597  * \brief Set flow based hash selection for Trunk unicast
    598  *
    599  * \param [in] unit Unit Number.
    600  * \param [in] arg Enable/Disable
    601  *
    602  * \retval SHR_E_NONE No errors.
    603  * \retval !SHR_E_NONE Failure.
    604  */
    605 typedef int (*trunk_sc_lb_control_unicast_set_f)(
    606     int unit,
    607     uint32_t arg);
    608 
    609 /*!
    610  * \brief Get flow based hash selection for Trunk unicast
    611  *
    612  * \param [in] unit Unit Number.
    613  * \param [out] arg Enable/Disable
    614  *
    615  * \retval SHR_E_NONE No errors.
    616  * \retval !SHR_E_NONE Failure.
    617  */
    618 typedef int (*trunk_sc_lb_control_unicast_get_f)(
    619     int unit,
    620     uint32_t *arg);
    621 
    622 /*!
    623  * \brief Set flow based hash selection for Trunk non-unicast
    624  *
    625  * \param [in] unit Unit Number.
    626  * \param [in] arg Enable/Disable
    627  *
    628  * \retval SHR_E_NONE No errors.
    629  * \retval !SHR_E_NONE Failure.
    630  */
    631 typedef int (*trunk_sc_lb_control_nonunicast_set_f)(
    632     int unit,
    633     uint32_t arg);
    634 
    635 /*!
    636  * \brief Get flow based hash selection for Trunk non-unicast
    637  *
    638  * \param [in] unit Unit Number.
    639  * \param [out] arg Enable/Disable
    640  *
    641  * \retval SHR_E_NONE No errors.
    642  * \retval !SHR_E_NONE Failure.
    643  */
    644 typedef int (*trunk_sc_lb_control_nonunicast_get_f)(
    645     int unit,
    646     uint32_t *arg);
    647 
    648 /*!
    649  * \brief Attach stat counter ID to a given trunk ID.
    650  *
    651  * \param [in] unit Unit Number.
    652  * \param [in] tid Trunk Identifier.
    653  * \param [in] info Counter information.
    654  *
    655  * \retval SHR_E_NONE No errors.
    656  * \retval !SHR_E_NONE Failure.
    657  */
    658 typedef int (*trunk_flexctr_attach_f)(
    659     int unit,
    660     bcm_trunk_t tid,
    661     bcmi_ltsw_flexctr_counter_info_t *info);
    662 
    663 /*!
    664  * \brief Detach stat counter ID to a given trunk ID.
    665  *
    666  * \param [in] unit Unit Number.
    667  * \param [in] tid Trunk Identifier.
    668  *
    669  * \retval SHR_E_NONE No errors.
    670  * \retval !SHR_E_NONE Failure.
    671  */
    672 typedef int (*trunk_flexctr_detach_f)(
    673     int unit,
    674     bcm_trunk_t tid);
    675 
    676 /*!
    677  * \brief Get stat counter ID if associated with given trunk ID.
    678  *
    679  * \param [in] unit Unit Number.
    680  * \param [in] tid Trunk Identifier.
    681  * \param [out] info Counter information.
    682  *
    683  * \retval SHR_E_NONE No errors.
    684  * \retval !SHR_E_NONE Failure.
    685  */
    686 typedef int (*trunk_flexctr_info_get_f)(
    687     int unit,
    688     bcm_trunk_t tid,
    689     bcmi_ltsw_flexctr_counter_info_t *info);
    690 
    691 /*!
    692  * \brief Set object for a given trunk ID.
    693  *
    694  * \param [in] unit Unit Number.
    695  * \param [in] tid Trunk Identifier.
    696  * \param [in] value Object value.
    697  *
    698  * \retval SHR_E_NONE No errors.
    699  * \retval !SHR_E_NONE Failure.
    700  */
    701 typedef int (*trunk_flexctr_object_set_f)(
    702     int unit,
    703     bcm_trunk_t tid,
    704     uint16_t value);
    705 
    706 /*!
    707  * \brief Get object for a given trunk ID.
    708  *
    709  * \param [in] unit Unit Number.
    710  * \param [in] tid Trunk Identifier.
    711  * \param [out] value Object value.
    712  *
    713  * \retval SHR_E_NONE No errors.
    714  * \retval !SHR_E_NONE Failure.
    715  */
    716 typedef int (*trunk_flexctr_object_get_f)(
    717     int unit,
    718     bcm_trunk_t tid,
    719     uint16_t *value);
    720 
    721 /*!
    722  * \brief Trunk driver structure.
    723  */
    724 typedef struct mbcm_ltsw_trunk_drv_s {
    725 
    726     /*! Convert trunk type Id to L2 destination. */
    727     trunk_type_id_to_l2_dest_f trunk_type_id_to_l2_dest;
    728 
    729     /*! Convert L2 destination to trunk type Id. */
    730     trunk_l2_dest_to_type_id_f trunk_l2_dest_to_type_id;
    731 
    732     /*! Judge the gport is channelized access port or not. */
    733     trunk_gport_is_channelized_access_port_f trunk_gport_is_channelized_access_port;
    734 
    735     /*! Get TRUNK module public information. */
    736     trunk_pub_info_get_f trunk_pub_info_get;
    737 
    738     /*! Compare two psc values and return the result. */
    739     trunk_psc_compare_f trunk_psc_compare;
    740 
    741     /*! Initialized the trunk module. */
    742     trunk_init_f trunk_init;
    743 
    744     /*! De-init trunk module. */
    745     trunk_detach_f trunk_detach;
    746 
    747     /*! Clear trunk related LT tables. */
    748     trunk_clear_f trunk_clear;
    749 
    750     /*! Create a specific trunk with identifier. */
    751     trunk_create_f trunk_create;
    752 
    753     /*! Validate the trunk input parameters before trunk set function is executed. */
    754     trunk_params_validate_f trunk_params_validate;
    755 
    756     /*! Get the trunk configuration from HW. */
    757     trunk_get_f trunk_get;
    758 
    759     /*! Update the trunk configuration. */
    760     trunk_update_f trunk_update;
    761 
    762     /*! Destroy a specific trunk with identifier. */
    763     trunk_destroy_f trunk_destroy;
    764 
    765     /*! Find a specific trunk with member gport. */
    766     trunk_find_f trunk_find;
    767 
    768     /*! Find a specific virtual trunk with member gport. */
    769     trunk_find_virtual_f trunk_find_virtual;
    770 
    771     /*! To notify the trunk is updated. */
    772     trunk_notify_f trunk_notify;
    773 
    774     /*! Extract trunk failover flags from trunk configuration flags. */
    775     trunk_failover_flags_extract_f trunk_failover_flags_extract;
    776 
    777     /*! Validate the trunk failover psc configuration. */
    778     trunk_failover_psc_validate_f trunk_failover_psc_validate;
    779 
    780     /*! Set trunk failover members to a specific port member. */
    781     trunk_failover_set_f trunk_failover_set;
    782 
    783     /*! Get trunk failover members of a specific port member. */
    784     trunk_failover_get_f trunk_failover_get;
    785 
    786     /*! Update trunk failover configuration for a specific trunk. */
    787     trunk_failover_update_f trunk_failover_update;
    788 
    789     /*! Enable/disable fabric trunk resolution. */
    790     trunk_override_set_f trunk_override_set;
    791 
    792     /*! Get fabric trunk resolution enable/disable status. */
    793     trunk_override_get_f trunk_override_get;
    794 
    795     /*! Set trunk member port status. */
    796     trunk_member_status_set_f trunk_member_status_set;
    797 
    798     /*! Get trunk member port status. */
    799     trunk_member_status_get_f trunk_member_status_get;
    800 
    801     /*! Expand a port bitmap to include all associated trunk member ports. */
    802     trunk_bitmap_expand_f trunk_bitmap_expand;
    803 
    804     /*! Add the specified trunk group to an existing MAC multicast entry. */
    805     trunk_mcast_join_f trunk_mcast_join;
    806 
    807     /*! Find trunk DLB Identifier. */
    808     trunk_find_dlb_id_f trunk_find_dlb_id;
    809 
    810     /*! Update the VPLAG member. */
    811     trunk_vp_lag_member_update_f trunk_vp_lag_member_update;
    812 
    813     /*! Get the CML bits for a vp_lag port. */
    814     trunk_vp_lag_vp_learn_get_f trunk_vp_lag_vp_learn_get;
    815 
    816     /*! Set the CML bits for a vp_lag port. */
    817     trunk_vp_lag_vp_learn_set_f trunk_vp_lag_vp_learn_set;
    818 
    819     /*! Set Hash Control for L2, L3 and Multipath */
    820     trunk_sc_hash_control_set_f trunk_sc_hash_control_set;
    821 
    822     /*! Get Hash Control for L2, L3 and Multipath */
    823     trunk_sc_hash_control_get_f trunk_sc_hash_control_get;
    824 
    825     /*! Set flow based hash selection for Trunk unicast */
    826     trunk_sc_lb_control_unicast_set_f trunk_sc_lb_control_unicast_set;
    827 
    828     /*! Get flow based hash selection for Trunk unicast */
    829     trunk_sc_lb_control_unicast_get_f trunk_sc_lb_control_unicast_get;
    830 
    831     /*! Set flow based hash selection for Trunk non-unicast */
    832     trunk_sc_lb_control_nonunicast_set_f trunk_sc_lb_control_nonunicast_set;
    833 
    834     /*! Get flow based hash selection for Trunk non-unicast */
    835     trunk_sc_lb_control_nonunicast_get_f trunk_sc_lb_control_nonunicast_get;
    836 
    837     /*! Attach stat counter ID to a given trunk ID. */
    838     trunk_flexctr_attach_f trunk_flexctr_attach;
    839 
    840     /*! Detach stat counter ID to a given trunk ID. */
    841     trunk_flexctr_detach_f trunk_flexctr_detach;
    842 
    843     /*! Get stat counter ID if associated with given trunk ID. */
    844     trunk_flexctr_info_get_f trunk_flexctr_info_get;
    845 
    846     /*! Set object for a given trunk ID. */
    847     trunk_flexctr_object_set_f trunk_flexctr_object_set;
    848 
    849     /*! Get object for a given trunk ID. */
    850     trunk_flexctr_object_get_f trunk_flexctr_object_get;
    851 
    852 } mbcm_ltsw_trunk_drv_t;
    853 
    854 /*!
    855  * \brief Set the TRUNK driver of the device.
    856  *
    857  * \param [in] unit Unit Number.
    858  * \param [in] drv Trunk driver to set.
    859  *
    860  * \retval SHR_E_NONE No errors.
    861  * \retval !SHR_E_NONE Failure.
    862  */
    863 extern int
    864 mbcm_ltsw_trunk_drv_set(
    865     int unit,
    866     mbcm_ltsw_trunk_drv_t *drv);
    867 
    868 /*!
    869  * \brief Convert trunk type Id to L2 destination.
    870  *
    871  * \param [in] unit Unit Number.
    872  * \param [in] t_type Trunk Type.
    873  * \param [in] t_id Type-based Trunk Identifier.
    874  * \param [in] t_priv Trunk private information.
    875  * \param [out] l2_dest L2 destination.
    876  *
    877  * \retval SHR_E_NONE No errors.
    878  * \retval !SHR_E_NONE Failure.
    879  */
    880 extern int
    881 mbcm_ltsw_trunk_type_id_to_l2_dest(
    882     int unit,
    883     bcmint_trunk_type_t t_type,
    884     bcmint_trunk_id_t t_id,
    885     bcmint_trunk_priv_info_t *t_priv,
    886     int *l2_dest);
    887 
    888 /*!
    889  * \brief Convert L2 destination to trunk type Id.
    890  *
    891  * \param [in] unit Unit Number.
    892  * \param [in] l2_dest L2 destination.
    893  * \param [out] t_type Trunk Type.
    894  * \param [out] t_id Type-based Trunk Identifier.
    895  *
    896  * \retval SHR_E_NONE No errors.
    897  * \retval !SHR_E_NONE Failure.
    898  */
    899 extern int
    900 mbcm_ltsw_trunk_l2_dest_to_type_id(
    901     int unit,
    902     int l2_dest,
    903     bcmint_trunk_type_t *t_type,
    904     bcmint_trunk_id_t *t_id);
    905 
    906 /*!
    907  * \brief Judge the gport is channelized access port or not.
    908  *
    909  * \param [in] unit Unit Number.
    910  * \param [in] gport Gport Number.
    911  * \param [out] is_channelized_access_port TRUE/False: Is or Isn't.
    912  *
    913  * \retval SHR_E_NONE No errors.
    914  * \retval !SHR_E_NONE Failure.
    915  */
    916 extern int
    917 mbcm_ltsw_trunk_gport_is_channelized_access_port(
    918     int unit,
    919     bcm_gport_t gport,
    920     bool *is_channelized_access_port);
    921 
    922 /*!
    923  * \brief Get TRUNK module public information.
    924  *
    925  * \param [in] unit Unit Number.
    926  * \param [out] t_pub Trunk public information.
    927  *
    928  * \retval SHR_E_NONE No errors.
    929  * \retval !SHR_E_NONE Failure.
    930  */
    931 extern int
    932 mbcm_ltsw_trunk_pub_info_get(
    933     int unit,
    934     bcmint_trunk_pub_info_t *t_pub);
    935 
    936 /*!
    937  * \brief Compare two psc values and return the result.
    938  *
    939  * \param [in] unit Unit Number.
    940  * \param [in] t_type Trunk Type.
    941  * \param [in] psc0 First Port Selection Criteria.
    942  * \param [in] psc1 Second Port Selection Criteria.
    943  * \param [in] exact Exact match.
    944  * \param [out] result TRUE/False: Same or Not.
    945  *
    946  * \retval SHR_E_NONE No errors.
    947  * \retval !SHR_E_NONE Failure.
    948  */
    949 extern int
    950 mbcm_ltsw_trunk_psc_compare(
    951     int unit,
    952     bcmint_trunk_type_t t_type,
    953     int psc0,
    954     int psc1,
    955     int exact,
    956     bool *result);
    957 
    958 /*!
    959  * \brief Initialized the trunk module.
    960  *
    961  * \param [in] unit Unit Number.
    962  *
    963  * \retval SHR_E_NONE No errors.
    964  * \retval !SHR_E_NONE Failure.
    965  */
    966 extern int
    967 mbcm_ltsw_trunk_init(int unit);
    968 
    969 /*!
    970  * \brief De-init trunk module.
    971  *
    972  * \param [in] unit Unit Number.
    973  *
    974  * \retval SHR_E_NONE No errors.
    975  * \retval !SHR_E_NONE Failure.
    976  */
    977 extern int
    978 mbcm_ltsw_trunk_detach(int unit);
    979 
    980 /*!
    981  * \brief Clear trunk related LT tables.
    982  *
    983  * \param [in] unit Unit Number.
    984  *
    985  * \retval SHR_E_NONE No errors.
    986  * \retval !SHR_E_NONE Failure.
    987  */
    988 extern int
    989 mbcm_ltsw_trunk_clear(int unit);
    990 
    991 /*!
    992  * \brief Create a specific trunk with identifier.
    993  *
    994  * \param [in] unit Unit Number.
    995  * \param [in] t_id Type-based Trunk Identifier.
    996  * \param [in] t_type Trunk Type.
    997  * \param [in] t_priv Trunk private information.
    998  *
    999  * \retval SHR_E_NONE No errors.
   1000  * \retval !SHR_E_NONE Failure.
   1001  */
   1002 extern int
   1003 mbcm_ltsw_trunk_create(
   1004     int unit,
   1005     bcmint_trunk_id_t t_id,
   1006     bcmint_trunk_type_t t_type,
   1007     bcmint_trunk_priv_info_t *t_priv);
   1008 
   1009 /*!
   1010  * \brief Validate the trunk input parameters before trunk set function is executed.
   1011  *
   1012  * \param [in] unit Unit Number.
   1013  * \param [in] t_id Type-based Trunk Identifier.
   1014  * \param [in] t_type Trunk Type.
   1015  * \param [in] trunk_info Trunk Information.
   1016  * \param [in] member_count Trunk Member Count.
   1017  * \param [in] member_array Trunk Member Array.
   1018  * \param [in] op Trunk Member Operation Code.
   1019  * \param [in] member Trunk Member.
   1020  *
   1021  * \retval SHR_E_NONE No errors.
   1022  * \retval !SHR_E_NONE Failure.
   1023  */
   1024 extern int
   1025 mbcm_ltsw_trunk_params_validate(
   1026     int unit,
   1027     bcmint_trunk_id_t t_id,
   1028     bcmint_trunk_type_t t_type,
   1029     bcm_trunk_info_t *trunk_info,
   1030     int member_count,
   1031     bcm_trunk_member_t *member_array,
   1032     int op,
   1033     bcm_trunk_member_t *member);
   1034 
   1035 /*!
   1036  * \brief Get the trunk configuration from HW.
   1037  *
   1038  * \param [in] unit Unit Number.
   1039  * \param [in] t_id Type-based Trunk Identifier.
   1040  * \param [in] t_type Trunk Type.
   1041  * \param [in] t_priv Trunk private information.
   1042  * \param [out] trunk_info Trunk Information.
   1043  * \param [in] member_max Max Number of Trunk Members.
   1044  * \param [out] member_array Trunk Member Array.
   1045  * \param [out] member_count Trunk Member Count.
   1046  *
   1047  * \retval SHR_E_NONE No errors.
   1048  * \retval !SHR_E_NONE Failure.
   1049  */
   1050 extern int
   1051 mbcm_ltsw_trunk_get(
   1052     int unit,
   1053     bcmint_trunk_id_t t_id,
   1054     bcmint_trunk_type_t t_type,
   1055     bcmint_trunk_priv_info_t *t_priv,
   1056     bcm_trunk_info_t *trunk_info,
   1057     int member_max,
   1058     bcm_trunk_member_t *member_array,
   1059     int *member_count);
   1060 
   1061 /*!
   1062  * \brief Update the trunk configuration.
   1063  *
   1064  * \param [in] unit Unit Number.
   1065  * \param [in] t_id Type-based Trunk Identifier.
   1066  * \param [in] t_type Trunk Type.
   1067  * \param [in] trunk_info Trunk Information.
   1068  * \param [in] member_count Trunk Member Count.
   1069  * \param [in] member_array Trunk Member Array.
   1070  * \param [in] op Trunk Member Operation Code.
   1071  * \param [in] member Trunk Member.
   1072  * \param [in] t_priv Trunk private information.
   1073  * \param [in] t_update Trunk update information.
   1074  *
   1075  * \retval SHR_E_NONE No errors.
   1076  * \retval !SHR_E_NONE Failure.
   1077  */
   1078 extern int
   1079 mbcm_ltsw_trunk_update(
   1080     int unit,
   1081     bcmint_trunk_id_t t_id,
   1082     bcmint_trunk_type_t t_type,
   1083     bcm_trunk_info_t *trunk_info,
   1084     int member_count,
   1085     bcm_trunk_member_t *member_array,
   1086     int op,
   1087     bcm_trunk_member_t *member,
   1088     bcmint_trunk_priv_info_t *t_priv,
   1089     bcmint_trunk_update_info_t *t_update);
   1090 
   1091 /*!
   1092  * \brief Destroy a specific trunk with identifier.
   1093  *
   1094  * \param [in] unit Unit Number.
   1095  * \param [in] t_id Type-based Trunk Identifier.
   1096  * \param [in] t_type Trunk Type.
   1097  * \param [in] t_priv Trunk private information.
   1098  *
   1099  * \retval SHR_E_NONE No errors.
   1100  * \retval !SHR_E_NONE Failure.
   1101  */
   1102 extern int
   1103 mbcm_ltsw_trunk_destroy(
   1104     int unit,
   1105     bcmint_trunk_id_t t_id,
   1106     bcmint_trunk_type_t t_type,
   1107     bcmint_trunk_priv_info_t *t_priv);
   1108 
   1109 /*!
   1110  * \brief Find a specific trunk with member gport.
   1111  *
   1112  * \param [in] unit Unit Number.
   1113  * \param [in] gport Gport Number.
   1114  * \param [out] t_id Type-based Trunk Identifier.
   1115  * \param [out] t_type Trunk Type.
   1116  *
   1117  * \retval SHR_E_NONE No errors.
   1118  * \retval !SHR_E_NONE Failure.
   1119  */
   1120 extern int
   1121 mbcm_ltsw_trunk_find(
   1122     int unit,
   1123     bcm_gport_t gport,
   1124     bcmint_trunk_id_t *t_id,
   1125     bcmint_trunk_type_t *t_type);
   1126 
   1127 /*!
   1128  * \brief Find a specific virtual trunk with member gport.
   1129  *
   1130  * \param [in] unit Unit Number.
   1131  * \param [in] gport Gport Number.
   1132  * \param [out] vp_lag_vp The VPLAG vp Id.
   1133  *
   1134  * \retval SHR_E_NONE No errors.
   1135  * \retval !SHR_E_NONE Failure.
   1136  */
   1137 extern int
   1138 mbcm_ltsw_trunk_find_virtual(
   1139     int unit,
   1140     bcm_gport_t gport,
   1141     int *vp_lag_vp);
   1142 
   1143 /*!
   1144  * \brief To notify the trunk is updated.
   1145  *
   1146  * \param [in] unit Unit Number.
   1147  * \param [in] t_id Type-based Trunk Identifier.
   1148  * \param [in] t_type Trunk Type.
   1149  *
   1150  * \retval SHR_E_NONE No errors.
   1151  * \retval !SHR_E_NONE Failure.
   1152  */
   1153 extern int
   1154 mbcm_ltsw_trunk_notify(
   1155     int unit,
   1156     bcmint_trunk_id_t t_id,
   1157     bcmint_trunk_type_t t_type);
   1158 
   1159 /*!
   1160  * \brief Extract trunk failover flags from trunk configuration flags.
   1161  *
   1162  * \param [in] unit Unit Number.
   1163  * \param [in] flags Trunk Configuration Flags.
   1164  * \param [in] t_type Trunk Type.
   1165  * \param [in] fail_flags Trunk Failover Flags.
   1166  *
   1167  * \retval SHR_E_NONE No errors.
   1168  * \retval !SHR_E_NONE Failure.
   1169  */
   1170 extern int
   1171 mbcm_ltsw_trunk_failover_flags_extract(
   1172     int unit,
   1173     uint32_t flags,
   1174     bcmint_trunk_type_t t_type,
   1175     uint32_t *fail_flags);
   1176 
   1177 /*!
   1178  * \brief Validate the trunk failover psc configuration.
   1179  *
   1180  * \param [in] unit Unit Number.
   1181  * \param [in] t_type Trunk Type.
   1182  * \param [in] psc Port Selection Criteria.
   1183  *
   1184  * \retval SHR_E_NONE No errors.
   1185  * \retval !SHR_E_NONE Failure.
   1186  */
   1187 extern int
   1188 mbcm_ltsw_trunk_failover_psc_validate(
   1189     int unit,
   1190     bcmint_trunk_type_t t_type,
   1191     int psc);
   1192 
   1193 /*!
   1194  * \brief Set trunk failover members to a specific port member.
   1195  *
   1196  * \param [in] unit Unit Number.
   1197  * \param [in] t_id Type-based Trunk Identifier.
   1198  * \param [in] t_type Trunk Type.
   1199  * \param [in] fail_port Local Failover Port Gport Number.
   1200  * \param [in] psc Port Selection Criteria.
   1201  * \param [in] ftp_count Failto Port Count.
   1202  * \param [in] ftp Failto Port Array.
   1203  *
   1204  * \retval SHR_E_NONE No errors.
   1205  * \retval !SHR_E_NONE Failure.
   1206  */
   1207 extern int
   1208 mbcm_ltsw_trunk_failover_set(
   1209     int unit,
   1210     bcmint_trunk_id_t t_id,
   1211     bcmint_trunk_type_t t_type,
   1212     bcm_gport_t fail_port,
   1213     int psc,
   1214     int ftp_count,
   1215     bcm_gport_t *ftp);
   1216 
   1217 /*!
   1218  * \brief Get trunk failover members of a specific port member.
   1219  *
   1220  * \param [in] unit Unit Number.
   1221  * \param [in] t_id Type-based Trunk Identifier.
   1222  * \param [in] t_type Trunk Type.
   1223  * \param [in] fail_port Local Failover Port Gport Number.
   1224  * \param [out] psc Port Selection Criteria.
   1225  * \param [in] ftp_max Failto Port Max Count.
   1226  * \param [out] ftp Failto Port Array.
   1227  * \param [out] ftp_count Failto Port Count.
   1228  *
   1229  * \retval SHR_E_NONE No errors.
   1230  * \retval !SHR_E_NONE Failure.
   1231  */
   1232 extern int
   1233 mbcm_ltsw_trunk_failover_get(
   1234     int unit,
   1235     bcmint_trunk_id_t t_id,
   1236     bcmint_trunk_type_t t_type,
   1237     bcm_gport_t fail_port,
   1238     int *psc,
   1239     int ftp_max,
   1240     bcm_gport_t *ftp,
   1241     int *ftp_count);
   1242 
   1243 /*!
   1244  * \brief Update trunk failover configuration for a specific trunk.
   1245  *
   1246  * \param [in] unit Unit Number.
   1247  * \param [in] t_id Type-based Trunk Identifier.
   1248  * \param [in] t_type Trunk Type.
   1249  * \param [in] psc Port Selection Criteria.
   1250  * \param [in] fail_flags Failover Configuration Flags.
   1251  * \param [in] fail_port Local Failover Port Gport Number.
   1252  * \param [in] ftp_max Failto Port Max Number.
   1253  * \param [in] member_count Trunk Member Count.
   1254  * \param [in] member_array Trunk Member Array.
   1255  *
   1256  * \retval SHR_E_NONE No errors.
   1257  * \retval !SHR_E_NONE Failure.
   1258  */
   1259 extern int
   1260 mbcm_ltsw_trunk_failover_update(
   1261     int unit,
   1262     bcmint_trunk_id_t t_id,
   1263     bcmint_trunk_type_t t_type,
   1264     int psc,
   1265     uint32_t fail_flags,
   1266     bcm_gport_t fail_port,
   1267     int ftp_max,
   1268     int member_count,
   1269     bcm_trunk_member_t *member_array);
   1270 
   1271 /*!
   1272  * \brief Enable/disable fabric trunk resolution.
   1273  *
   1274  * \param [in] unit Unit Number.
   1275  * \param [in] t_id Type-based Trunk Identifier.
   1276  * \param [in] o_type Fabric trunk override Type.
   1277  * \param [in] o_index Fabric trunk override Type based index.
   1278  * \param [in] enable Enable/Disable fabric trunk resolution.
   1279  *
   1280  * \retval SHR_E_NONE No errors.
   1281  * \retval !SHR_E_NONE Failure.
   1282  */
   1283 extern int
   1284 mbcm_ltsw_trunk_override_set(
   1285     int unit,
   1286     bcmint_trunk_id_t t_id,
   1287     bcmint_trunk_override_type_t o_type,
   1288     int o_index,
   1289     int enable);
   1290 
   1291 /*!
   1292  * \brief Get fabric trunk resolution enable/disable status.
   1293  *
   1294  * \param [in] unit Unit Number.
   1295  * \param [in] t_id Type-based Trunk Identifier.
   1296  * \param [in] o_type Fabric trunk override Type.
   1297  * \param [in] o_index Fabric trunk override Type based index.
   1298  * \param [out] enable Enable/Disable fabric trunk resolution.
   1299  *
   1300  * \retval SHR_E_NONE No errors.
   1301  * \retval !SHR_E_NONE Failure.
   1302  */
   1303 extern int
   1304 mbcm_ltsw_trunk_override_get(
   1305     int unit,
   1306     bcmint_trunk_id_t t_id,
   1307     bcmint_trunk_override_type_t o_type,
   1308     int o_index,
   1309     int *enable);
   1310 
   1311 /*!
   1312  * \brief Set trunk member port status.
   1313  *
   1314  * \param [in] unit Unit Number.
   1315  * \param [in] port Port Number.
   1316  * \param [in] status Trunk member link status.
   1317  *
   1318  * \retval SHR_E_NONE No errors.
   1319  * \retval !SHR_E_NONE Failure.
   1320  */
   1321 extern int
   1322 mbcm_ltsw_trunk_member_status_set(
   1323     int unit,
   1324     bcm_port_t port,
   1325     int status);
   1326 
   1327 /*!
   1328  * \brief Get trunk member port status.
   1329  *
   1330  * \param [in] unit Unit Number.
   1331  * \param [in] port Port Number.
   1332  * \param [out] status Trunk member link status.
   1333  *
   1334  * \retval SHR_E_NONE No errors.
   1335  * \retval !SHR_E_NONE Failure.
   1336  */
   1337 extern int
   1338 mbcm_ltsw_trunk_member_status_get(
   1339     int unit,
   1340     bcm_port_t port,
   1341     int *status);
   1342 
   1343 /*!
   1344  * \brief Expand a port bitmap to include all associated trunk member ports.
   1345  *
   1346  * \param [in] unit Unit Number.
   1347  * \param [in] t_pub Trunk public information.
   1348  * \param [in/out] pbmp Pointer to returned expanded port bitmap.
   1349  *
   1350  * \retval SHR_E_NONE No errors.
   1351  * \retval !SHR_E_NONE Failure.
   1352  */
   1353 extern int
   1354 mbcm_ltsw_trunk_bitmap_expand(
   1355     int unit,
   1356     bcmint_trunk_pub_info_t *t_pub,
   1357     bcm_pbmp_t *pbmp);
   1358 
   1359 /*!
   1360  * \brief Add the specified trunk group to an existing MAC multicast entry.
   1361  *
   1362  * \param [in] unit Unit Number.
   1363  * \param [in] t_id Trunk Identifier.
   1364  * \param [in] vid VLAN ID.
   1365  * \param [in] mac MAC address.
   1366  *
   1367  * \retval SHR_E_NONE Success.
   1368  * \retval SHR_E_INIT Trunk module has not been initialized.
   1369  * \retval SHR_E_BADID Invalid or unsupported trunk ID.
   1370  * \retval SHR_E_NOT_FOUND Specified trunk ID is not currently defined.
   1371  */
   1372 extern int
   1373 mbcm_ltsw_trunk_mcast_join(
   1374     int unit,
   1375     bcm_trunk_t t_id,
   1376     bcm_vlan_t vid,
   1377     bcm_mac_t mac);
   1378 
   1379 /*!
   1380  * \brief Find trunk DLB Identifier.
   1381  *
   1382  * \param [in] unit Unit Number.
   1383  * \param [in] t_type Trunk Type.
   1384  * \param [in] t_id Type-based Trunk Identifier.
   1385  * \param [in] t_priv Trunk private information.
   1386  * \param [out] dlb_id Trunk dlb identifier.
   1387  *
   1388  * \retval SHR_E_NONE No errors.
   1389  * \retval !SHR_E_NONE Failure.
   1390  */
   1391 extern int
   1392 mbcm_ltsw_trunk_find_dlb_id(
   1393     int unit,
   1394     bcmint_trunk_type_t t_type,
   1395     bcmint_trunk_id_t t_id,
   1396     bcmint_trunk_priv_info_t *t_priv,
   1397     int *dlb_id);
   1398 
   1399 /*!
   1400  * \brief Update the VPLAG member.
   1401  *
   1402  * \param [in] unit Unit Number.
   1403  * \param [in] vp_lag_vp The VPLAG vp Id.
   1404  * \param [in] gport The generic port number.
   1405  *
   1406  * \retval SHR_E_NONE No errors.
   1407  * \retval !SHR_E_NONE Failure.
   1408  */
   1409 extern int
   1410 mbcm_ltsw_trunk_vp_lag_member_update(
   1411     int unit,
   1412     int vp_lag_vp,
   1413     bcm_gport_t gport);
   1414 
   1415 /*!
   1416  * \brief Get the CML bits for a vp_lag port.
   1417  *
   1418  * \param [in] unit Unit Number.
   1419  * \param [in] vp_lag_vp The VPLAG vp Id.
   1420  * \param [out] flags The L2 CML FLAGS.
   1421  *
   1422  * \retval SHR_E_NONE No errors.
   1423  * \retval !SHR_E_NONE Failure.
   1424  */
   1425 extern int
   1426 mbcm_ltsw_trunk_vp_lag_vp_learn_get(
   1427     int unit,
   1428     int vp_lag_vp,
   1429     uint32_t *flags);
   1430 
   1431 /*!
   1432  * \brief Set the CML bits for a vp_lag port.
   1433  *
   1434  * \param [in] unit Unit Number.
   1435  * \param [in] vp_lag_vp The VPLAG vp Id.
   1436  * \param [in] flags The L2 CML FLAGS.
   1437  *
   1438  * \retval SHR_E_NONE No errors.
   1439  * \retval !SHR_E_NONE Failure.
   1440  */
   1441 extern int
   1442 mbcm_ltsw_trunk_vp_lag_vp_learn_set(
   1443     int unit,
   1444     int vp_lag_vp,
   1445     uint32_t flags);
   1446 
   1447 /*!
   1448  * \brief Set Hash Control for L2, L3 and Multipath
   1449  *
   1450  * \param [in] unit Unit Number.
   1451  * \param [in] arg BCM_HASH_CONTROL_TRUNK_XXX
   1452  *
   1453  * \retval SHR_E_NONE No errors.
   1454  * \retval !SHR_E_NONE Failure.
   1455  */
   1456 extern int
   1457 mbcm_ltsw_trunk_sc_hash_control_set(
   1458     int unit,
   1459     uint32_t arg);
   1460 
   1461 /*!
   1462  * \brief Get Hash Control for L2, L3 and Multipath
   1463  *
   1464  * \param [in] unit Unit Number.
   1465  * \param [out] arg BCM_HASH_CONTROL_TRUNK_XXX
   1466  *
   1467  * \retval SHR_E_NONE No errors.
   1468  * \retval !SHR_E_NONE Failure.
   1469  */
   1470 extern int
   1471 mbcm_ltsw_trunk_sc_hash_control_get(
   1472     int unit,
   1473     uint32_t *arg);
   1474 
   1475 /*!
   1476  * \brief Set flow based hash selection for Trunk unicast
   1477  *
   1478  * \param [in] unit Unit Number.
   1479  * \param [in] arg Enable/Disable
   1480  *
   1481  * \retval SHR_E_NONE No errors.
   1482  * \retval !SHR_E_NONE Failure.
   1483  */
   1484 extern int
   1485 mbcm_ltsw_trunk_sc_lb_control_unicast_set(
   1486     int unit,
   1487     uint32_t arg);
   1488 
   1489 /*!
   1490  * \brief Get flow based hash selection for Trunk unicast
   1491  *
   1492  * \param [in] unit Unit Number.
   1493  * \param [out] arg Enable/Disable
   1494  *
   1495  * \retval SHR_E_NONE No errors.
   1496  * \retval !SHR_E_NONE Failure.
   1497  */
   1498 extern int
   1499 mbcm_ltsw_trunk_sc_lb_control_unicast_get(
   1500     int unit,
   1501     uint32_t *arg);
   1502 
   1503 /*!
   1504  * \brief Set flow based hash selection for Trunk non-unicast
   1505  *
   1506  * \param [in] unit Unit Number.
   1507  * \param [in] arg Enable/Disable
   1508  *
   1509  * \retval SHR_E_NONE No errors.
   1510  * \retval !SHR_E_NONE Failure.
   1511  */
   1512 extern int
   1513 mbcm_ltsw_trunk_sc_lb_control_nonunicast_set(
   1514     int unit,
   1515     uint32_t arg);
   1516 
   1517 /*!
   1518  * \brief Get flow based hash selection for Trunk non-unicast
   1519  *
   1520  * \param [in] unit Unit Number.
   1521  * \param [out] arg Enable/Disable
   1522  *
   1523  * \retval SHR_E_NONE No errors.
   1524  * \retval !SHR_E_NONE Failure.
   1525  */
   1526 extern int
   1527 mbcm_ltsw_trunk_sc_lb_control_nonunicast_get(
   1528     int unit,
   1529     uint32_t *arg);
   1530 
   1531 /*!
   1532  * \brief Attach stat counter ID to a given trunk ID.
   1533  *
   1534  * \param [in] unit Unit Number.
   1535  * \param [in] tid Trunk Identifier.
   1536  * \param [in] info Counter information.
   1537  *
   1538  * \retval SHR_E_NONE No errors.
   1539  * \retval !SHR_E_NONE Failure.
   1540  */
   1541 extern int
   1542 mbcm_ltsw_trunk_flexctr_attach(
   1543     int unit,
   1544     bcm_trunk_t tid,
   1545     bcmi_ltsw_flexctr_counter_info_t *info);
   1546 
   1547 /*!
   1548  * \brief Detach stat counter ID to a given trunk ID.
   1549  *
   1550  * \param [in] unit Unit Number.
   1551  * \param [in] tid Trunk Identifier.
   1552  *
   1553  * \retval SHR_E_NONE No errors.
   1554  * \retval !SHR_E_NONE Failure.
   1555  */
   1556 extern int
   1557 mbcm_ltsw_trunk_flexctr_detach(
   1558     int unit,
   1559     bcm_trunk_t tid);
   1560 
   1561 /*!
   1562  * \brief Get stat counter ID if associated with given trunk ID.
   1563  *
   1564  * \param [in] unit Unit Number.
   1565  * \param [in] tid Trunk Identifier.
   1566  * \param [out] info Counter information.
   1567  *
   1568  * \retval SHR_E_NONE No errors.
   1569  * \retval !SHR_E_NONE Failure.
   1570  */
   1571 extern int
   1572 mbcm_ltsw_trunk_flexctr_info_get(
   1573     int unit,
   1574     bcm_trunk_t tid,
   1575     bcmi_ltsw_flexctr_counter_info_t *info);
   1576 
   1577 /*!
   1578  * \brief Set object for a given trunk ID.
   1579  *
   1580  * \param [in] unit Unit Number.
   1581  * \param [in] tid Trunk Identifier.
   1582  * \param [in] value Object value.
   1583  *
   1584  * \retval SHR_E_NONE No errors.
   1585  * \retval !SHR_E_NONE Failure.
   1586  */
   1587 extern int
   1588 mbcm_ltsw_trunk_flexctr_object_set(
   1589     int unit,
   1590     bcm_trunk_t tid,
   1591     uint16_t value);
   1592 
   1593 /*!
   1594  * \brief Get object for a given trunk ID.
   1595  *
   1596  * \param [in] unit Unit Number.
   1597  * \param [in] tid Trunk Identifier.
   1598  * \param [out] value Object value.
   1599  *
   1600  * \retval SHR_E_NONE No errors.
   1601  * \retval !SHR_E_NONE Failure.
   1602  */
   1603 extern int
   1604 mbcm_ltsw_trunk_flexctr_object_get(
   1605     int unit,
   1606     bcm_trunk_t tid,
   1607     uint16_t *value);
   1608 
   1609 #endif /* BCMINT_LTSW_MBCM_TRUNK_H */