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

l2.h (21418B)


      1 /*
      2  * 
      3  * This license is set out in https://raw.githubusercontent.com/Broadcom-Network-Switching-Software/OpenBCM/master/Legal/LICENSE file.
      4  * 
      5  * Copyright 2007-2020 Broadcom Inc. All rights reserved.
      6  *
      7  * File:        l2.h
      8  * Purpose:     L2 internal definitions to the BCM library.
      9  */
     10 
     11 #ifndef   _BCM_INT_DPP_L2_H_
     12 #define   _BCM_INT_DPP_L2_H_
     13 
     14 #include <soc/dpp/PPD/ppd_api_general.h>
     15 #include <soc/dpp/PPD/ppd_api_llp_trap.h>
     16 #include <soc/dpp/PPD/ppd_api_llp_sa_auth.h>
     17 #include <soc/dpp/PPD/ppd_api_vsi.h>
     18 #include <bcm_int/dpp/port.h>
     19 #include <bcm_int/dpp/alloc_mngr_local_lif.h>
     20 #include <soc/dpp/ARAD/ARAD_PP/arad_pp_frwrd_mact.h>
     21 
     22 #include <soc/dpp/PPD/ppd_api_frwrd_mact.h>
     23 #include <bcm/l2.h>
     24 
     25 #define DPP_AGING_PROFILE_FIRST_CONFIGURABLE (1)
     26 #define DPP_AGING_PROFILE_LAST_CONFIGURABLE (3)
     27 #define DPP_AGING_CYCLES_MAX (6)
     28 #define DPP_AGING_CYCLES_IGNORE_VALUE (-1)
     29 
     30 typedef struct bcm_dpp_user_defined_vsi_egress_profile_s {
     31     uint32 mtu;
     32     uint64 eve_da_lsbs_bitmap;
     33 } bcm_dpp_vsi_egress_profile_t;
     34 
     35 typedef struct bcm_dpp_user_defined_vsi_ingress_profile_s {
     36     uint64 ive_da_lsbs_bitmap;
     37     uint64 peer_da_lsbs_bitmap;
     38     uint64 drop_da_lsbs_bitmap;
     39 } bcm_dpp_vsi_ingress_profile_t;
     40 
     41 typedef bcm_dpp_vsi_egress_profile_t bcm_dpp_l2cp_egress_profile_t;
     42 
     43 #define L2CP_DA_LSBS_BITMAP_EGRESS_SET(egress_profile_data, da_lsbs, handle_type)        \
     44   do {                                                                                   \
     45       uint32 hi=0;                                                                       \
     46       uint32 low=0;                                                                  \
     47       uint64 new_bitmap;                                                             \
     48       if (da_lsbs < 32) {                                                            \
     49           low = 1 << da_lsbs;                                                    \
     50       }                                                                              \
     51       else {                                                                         \
     52           hi = 1 << (da_lsbs - 32);                                              \
     53       }                                                                              \
     54       COMPILER_64_SET(new_bitmap, hi, low);                                          \
     55       if (handle_type == SOC_PPC_VSI_L2CP_HANDLE_TYPE_TUNNEL) {                      \
     56           COMPILER_64_OR(egress_profile_data.eve_da_lsbs_bitmap, new_bitmap);    \
     57       }                                                                              \
     58           else {                                                                         \
     59                   COMPILER_64_NOT(new_bitmap);                                           \
     60           COMPILER_64_AND(egress_profile_data.eve_da_lsbs_bitmap, new_bitmap);   \
     61           }                                                                              \
     62   } while (0);                                                                           \
     63 
     64 #define L2CP_DA_LSBS_BITMAP_INGRESS_SET(ingress_profile_data, da_lsbs, handle_type)      \
     65   do {                                                                                   \
     66       uint32 hi=0;                                                                       \
     67       uint32 low=0;                                                                  \
     68       uint64 new_bitmap;                                                             \
     69       uint64 empty_bitmap;                                                           \
     70       if (da_lsbs < 32) {                                                            \
     71           low = 1 << da_lsbs;                                                    \
     72       }                                                                              \
     73       else {                                                                         \
     74           hi = 1 << (da_lsbs - 32);                                              \
     75       }                                                                              \
     76       COMPILER_64_SET(new_bitmap, hi, low);                                          \
     77       COMPILER_64_SET(empty_bitmap, hi, low);                                        \
     78           COMPILER_64_NOT(empty_bitmap);                                                 \
     79       if (handle_type == SOC_PPC_VSI_L2CP_HANDLE_TYPE_TUNNEL) {                      \
     80           COMPILER_64_OR(ingress_profile_data.ive_da_lsbs_bitmap, new_bitmap);   \
     81           COMPILER_64_AND(ingress_profile_data.peer_da_lsbs_bitmap, empty_bitmap);  \
     82           COMPILER_64_AND(ingress_profile_data.drop_da_lsbs_bitmap, empty_bitmap);  \
     83       }                                                                                 \
     84       else if (handle_type == SOC_PPC_VSI_L2CP_HANDLE_TYPE_PEER) {                      \
     85           COMPILER_64_OR(ingress_profile_data.peer_da_lsbs_bitmap, new_bitmap);     \
     86           COMPILER_64_AND(ingress_profile_data.ive_da_lsbs_bitmap, empty_bitmap);   \
     87           COMPILER_64_AND(ingress_profile_data.drop_da_lsbs_bitmap, empty_bitmap);  \
     88       }                                                                                 \
     89       else if (handle_type == SOC_PPC_VSI_L2CP_HANDLE_TYPE_DROP) {                      \
     90           COMPILER_64_OR(ingress_profile_data.drop_da_lsbs_bitmap, new_bitmap);     \
     91           COMPILER_64_AND(ingress_profile_data.peer_da_lsbs_bitmap, empty_bitmap);  \
     92           COMPILER_64_AND(ingress_profile_data.ive_da_lsbs_bitmap, empty_bitmap);   \
     93       }                                                                                 \
     94           else {                                                                            \
     95           COMPILER_64_AND(ingress_profile_data.ive_da_lsbs_bitmap, empty_bitmap);     \
     96           COMPILER_64_AND(ingress_profile_data.drop_da_lsbs_bitmap, empty_bitmap);  \
     97           COMPILER_64_AND(ingress_profile_data.peer_da_lsbs_bitmap, empty_bitmap);  \
     98           }                                                                                 \
     99   } while (0);
    100 
    101 #define L2CP_DA_LSBS_BITMAP_INGRESS_GET(ingress_profile_data, da_lsbs, handle_type)      \
    102   do {                                                                                   \
    103       uint32 hi=0;                                                                       \
    104       uint32 low=0;                                                                  \
    105       uint64 new_bitmap;                                                             \
    106       if (da_lsbs < 32) {                                                            \
    107           low = 1 << da_lsbs;                                                    \
    108       }                                                                              \
    109       else {                                                                         \
    110           hi = 1 << (da_lsbs - 32);                                              \
    111       }                                                                              \
    112       COMPILER_64_SET(new_bitmap, hi, low);                                          \
    113       COMPILER_64_AND(new_bitmap, ingress_profile_data.ive_da_lsbs_bitmap);          \
    114       if (!COMPILER_64_IS_ZERO(new_bitmap)) {                                        \
    115           handle_type = SOC_PPC_VSI_L2CP_HANDLE_TYPE_TUNNEL;                     \
    116       }                                                                              \
    117       else {                                                                         \
    118           COMPILER_64_SET(new_bitmap, hi, low);                                  \
    119           COMPILER_64_AND(new_bitmap, ingress_profile_data.peer_da_lsbs_bitmap); \
    120           if (!COMPILER_64_IS_ZERO(new_bitmap)) {                                \
    121               handle_type = SOC_PPC_VSI_L2CP_HANDLE_TYPE_PEER;               \
    122           }                                                                      \
    123           else {                                                                 \
    124               COMPILER_64_SET(new_bitmap, hi, low);                          \
    125               COMPILER_64_AND(new_bitmap, ingress_profile_data.drop_da_lsbs_bitmap);\
    126               if (!COMPILER_64_IS_ZERO(new_bitmap)) {                        \
    127                   handle_type = SOC_PPC_VSI_L2CP_HANDLE_TYPE_DROP;       \
    128               }                                                              \
    129               else {                                                         \
    130                   handle_type = SOC_PPC_VSI_L2CP_HANDLE_TYPE_NORMAL;     \
    131               }                                                              \
    132           }                                                                      \
    133       }                                                                              \
    134   } while (0);
    135 
    136 
    137  /* The following macros indicate if the egress layer two control packets are 
    138   * Trapped according to VSI or OUTLIF.
    139   * On jericho_plus and above devices, l2cp_profile is mapped from outlif rather
    140   * than the same with vsi profile.
    141   */
    142 #define _BCM_L2_MC_RESERVED_EGRESS_PROFILE_TYPE_VSI    (0)
    143 #define _BCM_L2_MC_RESERVED_EGRESS_PROFILE_TYPE_L2CP   (1)
    144 #define _BCM_L2_NUM_OF_ETH_TYPE_INDEX_ENTRY        (16)
    145 
    146 
    147  /* mact freeze thaw status*/
    148 typedef struct _bcm_petra_l2_freeze_s {
    149     int                 frozen;
    150     int                 save_age_ena;
    151     int                 save_learn_ena;
    152 } _bcm_petra_l2_freeze_t;
    153 
    154 /* SW DB */
    155  /*
    156  * L2 Callback Message Registration
    157  */
    158 #define _BCM_PETRA_L2_CB_MAX             3    /* Max registered callbacks per unit */
    159 
    160 /* call backs handling*/
    161 typedef struct _bcm_petra_l2_cb_entry_s {
    162     bcm_l2_addr_callback_t  fn;         /* Callback routine */
    163     void                    *fn_data;   /* User defined data */
    164 } _bcm_petra_l2_cb_entry_t;
    165 
    166 typedef struct _l2_cb_s {
    167     _bcm_petra_l2_cb_entry_t    entry[_BCM_PETRA_L2_CB_MAX];
    168     int               count;
    169 } _bcm_petra_l2_cb_t;
    170 
    171 typedef struct _l2_ether_type_index_entry_ref_s {
    172     uint32    eth_type_ref;
    173     uint32    outer_tpid_ref;
    174     uint32    inner_tpid_ref;
    175 } _l2_ether_type_index_entry_ref_t;
    176 
    177 typedef struct l2_data_s {
    178     uint8               mymac_msb_is_set;
    179     int l2_initialized;
    180     _bcm_petra_l2_freeze_t bcm_petra_l2_freeze_state;
    181     uint16              mpls_extended_label_ether_type_index_table_is_set;
    182     _l2_ether_type_index_entry_ref_t              ether_type_index_table_ref_cnt[_BCM_L2_NUM_OF_ETH_TYPE_INDEX_ENTRY];
    183 } l2_data_t;
    184 
    185 /* access macros */
    186 #define _BCM_PETRA_L2_CB_ENTRY(unit, i)    (sw_state_cb_db[unit].dpp.l2_cb.entry[i])
    187 #define _BCM_PETRA_L2_CB_COUNT(unit)       (sw_state_cb_db[unit].dpp.l2_cb.count)
    188 
    189 /*
    190  * L2 definition
    191  */
    192 
    193 #define _BCM_PETRA_L2_ILLEGAL_AGE_STATUS (ARAD_PP_FRWRD_MACT_ILLEGAL_AGE_STATUS)
    194 
    195 #define _BCM_DPP_SNOOP_CMD_TO_CPU (1)
    196 
    197 #define _BCM_PETRA_L2_NOF_RSRV_MC (0x40)
    198 
    199 #define _BCM_PETRA_L2_RM_BUF_NOF_U32 (16)
    200 
    201 #define _BCM_PETRA_L2_RM_BUF_INDEX_OFFSET (8)
    202 
    203 #define _BCM_PETRA_L2_RM_BUF_INDEX_LEN (8)
    204 
    205 #define BCM_PETRA_L2_STATION_GLOBAL_MSB (0)
    206 /* valid only flag MIM is set (so no change of TRILL)*/ 
    207 #define BCM_PETRA_L2_STATION_GLOBAL_LSB (1 << 16)
    208 
    209 /* 
    210  * l2 station bit indications. Available bits are: 23-31
    211  */
    212 
    213 /* bit 28: OAM CFM l2 station indication. */
    214 #define BCM_PETRA_L2_STATION_OAM_CFM_BIT (1 << 28)
    215 
    216 /* bit 29: MIM l2 station indication. */
    217 #define BCM_PETRA_L2_STATION_MIM_BIT (1 << 29)
    218 
    219 /* bit 30: Vrrp l2 station indication. */
    220 #define BCM_PETRA_L2_STATION_VRRP_BIT (1 << 30)
    221 
    222 
    223 /* The following constants and macros are used to create the station_id for l2 stations using the oam cfm table.
    224    The bit mapping is:
    225    bits 0 - 12: port
    226    bit 13 empty
    227    bits 14-21: Mymac lsb
    228    bits 22-27 empty
    229    bit 28: OAM CFM l2 station indication.
    230    bit 29-31: empty*/
    231 
    232 #define BCM_PETRA_L2_STATION_OAM_PORT_SHIFT         (0)
    233 #define BCM_PETRA_L2_STATION_OAM_PORT_MASK          (0xfff)
    234 #define BCM_PETRA_L2_STATION_OAM_MYMAC_LSB_SHIFT    (14)
    235 #define BCM_PETRA_L2_STATION_OAM_MYMAC_LSB_MASK     (0xff)
    236 
    237 
    238 /* The variable in _station_id will be assigned an oam cfm station id according to the format above. */
    239 #define BCM_PETRA_L2_STATION_OAM_CFM_SET(_station_id, _port, _lsb)              \
    240     ((_station_id) = (((_port) << BCM_PETRA_L2_STATION_OAM_PORT_SHIFT) |         \
    241                     ((_lsb) << BCM_PETRA_L2_STATION_OAM_MYMAC_LSB_SHIFT) |      \
    242                     (BCM_PETRA_L2_STATION_OAM_CFM_BIT)))
    243 
    244 /* Wether the station id is an oam cfm station */
    245 #define BCM_PETRA_L2_STATION_IS_OAM_CFM(_station_id) \
    246     ((_station_id) & BCM_PETRA_L2_STATION_OAM_CFM_BIT)
    247 
    248 /* Gets the port from an oam cfm station id */
    249 #define BCM_PETRA_L2_STATION_OAM_PORT_GET(_port, _station_id)    \
    250     ((_port) = ((_station_id) >>  BCM_PETRA_L2_STATION_OAM_PORT_SHIFT)  \
    251                 & BCM_PETRA_L2_STATION_OAM_PORT_MASK )
    252 
    253 /* Gets the lsbs from an oam cfm station id */
    254 #define BCM_PETRA_L2_STATION_OAM_MYMAC_LSB_GET(_lsb, _station_id)    \
    255     ((_lsb) = ((_station_id) >>  BCM_PETRA_L2_STATION_OAM_MYMAC_LSB_SHIFT)  \
    256                  & BCM_PETRA_L2_STATION_OAM_MYMAC_LSB_MASK)
    257 
    258 
    259 /* The following constants and macros are used to create the station_id for l2 stations using the vrrp table.
    260    The bit mapping is:
    261    bits 0 - 16: vsi
    262    bit 17 empty
    263    bit 18-22: Index in the vrrp cam table
    264    bits 23-29 empty
    265    bit 30: Vrrp l2 station indication.
    266    bit 31: Empty */
    267 
    268 #define BCM_PETRA_L2_STATION_VRRP_VSI_SHIFT (0)
    269 #define BCM_PETRA_L2_STATION_VRRP_VSI_MASK  (0x1ffff)
    270 #define BCM_PETRA_L2_STATION_VRRP_CAM_INDEX_SHIFT (18)
    271 #define BCM_PETRA_L2_STATION_VRRP_CAM_INDEX_MASK  (0x1f)
    272 
    273 /* The variable in _station_id will be assigned a vrrp station id according to the format above. */
    274 #define BCM_PETRA_L2_STATION_VRRP_SET(_station_id, _vsi, _cam_index)                \
    275     ((_station_id) = (((_vsi) << BCM_PETRA_L2_STATION_VRRP_VSI_SHIFT ) |              \
    276                     ((_cam_index) << BCM_PETRA_L2_STATION_VRRP_CAM_INDEX_SHIFT) |   \
    277                     (BCM_PETRA_L2_STATION_VRRP_BIT)))
    278 
    279 /* Wether the station id is a vrrp station */
    280 #define BCM_PETRA_L2_STATION_IS_VRRP(_station_id) \
    281     ((_station_id) & BCM_PETRA_L2_STATION_VRRP_BIT)
    282 
    283 /* Gets the vsi from a vrrp station id */
    284 #define BCM_PETRA_L2_STATION_VRRP_VSI_GET(_vsi, _station_id)    \
    285     ((_vsi) = ((_station_id) >>  BCM_PETRA_L2_STATION_VRRP_VSI_SHIFT)  \
    286                 & BCM_PETRA_L2_STATION_VRRP_VSI_MASK )
    287 
    288 /* Gets the cam table index from a vrrp station id */
    289 #define BCM_PETRA_L2_STATION_VRRP_CAM_INDEX_GET(_cam_index, _station_id)    \
    290     ((_cam_index) = ((_station_id) >>  BCM_PETRA_L2_STATION_VRRP_CAM_INDEX_SHIFT)  \
    291                  & BCM_PETRA_L2_STATION_VRRP_CAM_INDEX_MASK )
    292 
    293 /* Given the api's l3 protocol group flags, returns the soc ppc flags. */
    294 #define BCM_PETRA_L2_STATION_TRANSLATE_API_FLAGS_TO_INTERNAL_PROTOCOL_GROUP_FLAGS(_src, _target)     \
    295     (_target) = 0;                                                                                   \
    296     DPP_TRANSLATE_FLAG(_src, BCM_L2_STATION_IPV4    , _target, SOC_PPC_L3_VRRP_PROTOCOL_GROUP_IPV4 );\
    297     DPP_TRANSLATE_FLAG(_src, BCM_L2_STATION_IPV6    , _target, SOC_PPC_L3_VRRP_PROTOCOL_GROUP_IPV6 );\
    298     DPP_TRANSLATE_FLAG(_src, BCM_L2_STATION_ARP_RARP, _target, SOC_PPC_L3_VRRP_PROTOCOL_GROUP_ARP  );\
    299     DPP_TRANSLATE_FLAG(_src, BCM_L2_STATION_MPLS    , _target, SOC_PPC_L3_VRRP_PROTOCOL_GROUP_MPLS );\
    300     DPP_TRANSLATE_FLAG(_src, BCM_L2_STATION_MIM     , _target, SOC_PPC_L3_VRRP_PROTOCOL_GROUP_MIM  );\
    301     DPP_TRANSLATE_FLAG(_src, BCM_L2_STATION_TRILL   , _target, SOC_PPC_L3_VRRP_PROTOCOL_GROUP_TRILL);\
    302     DPP_TRANSLATE_FLAG(_src, BCM_L2_STATION_FCOE    , _target, SOC_PPC_L3_VRRP_PROTOCOL_GROUP_FCOE );
    303 
    304 /* Given the soc ppc l3 protocol group flags, returns the api flags. */
    305 #define BCM_PETRA_L2_STATION_TRANSLATE_PROTOCOL_GROUP_INTERNAL_FLAGS_TO_API(_src, _target)           \
    306     (_target) = 0;                                                                                   \
    307     DPP_TRANSLATE_FLAG(_src, SOC_PPC_L3_VRRP_PROTOCOL_GROUP_IPV4 , _target, BCM_L2_STATION_IPV4    );\
    308     DPP_TRANSLATE_FLAG(_src, SOC_PPC_L3_VRRP_PROTOCOL_GROUP_IPV6 , _target, BCM_L2_STATION_IPV6    );\
    309     DPP_TRANSLATE_FLAG(_src, SOC_PPC_L3_VRRP_PROTOCOL_GROUP_ARP  , _target, BCM_L2_STATION_ARP_RARP);\
    310     DPP_TRANSLATE_FLAG(_src, SOC_PPC_L3_VRRP_PROTOCOL_GROUP_MPLS , _target, BCM_L2_STATION_MPLS    );\
    311     DPP_TRANSLATE_FLAG(_src, SOC_PPC_L3_VRRP_PROTOCOL_GROUP_MIM  , _target, BCM_L2_STATION_MIM     );\
    312     DPP_TRANSLATE_FLAG(_src, SOC_PPC_L3_VRRP_PROTOCOL_GROUP_TRILL, _target, BCM_L2_STATION_TRILL   );\
    313     DPP_TRANSLATE_FLAG(_src, SOC_PPC_L3_VRRP_PROTOCOL_GROUP_FCOE , _target, BCM_L2_STATION_FCOE    );
    314 
    315 #define BCM_PETRA_L3_MULTIPLE_MYMAC_STATION_SUPPORTED_PROTOCOL_FLAGS \
    316     (BCM_L2_STATION_IPV4    \
    317     |BCM_L2_STATION_IPV6     \
    318     |BCM_L2_STATION_ARP_RARP \
    319     |BCM_L2_STATION_MPLS     \
    320     |BCM_L2_STATION_MIM      \
    321     |BCM_L2_STATION_TRILL    \
    322     |BCM_L2_STATION_FCOE)
    323 
    324 typedef struct bcm_dpp_prog_trap_s {
    325     SOC_PPC_LLP_TRAP_PROG_TRAP_QUALIFIER qual;
    326     bcm_dpp_user_defined_traps_t result;
    327 } bcm_dpp_prog_trap_t;
    328 
    329 
    330 typedef struct _bcm_petra_l2_rsrvd_mc_profile_info_s {
    331     uint32 buff[_BCM_PETRA_L2_RM_BUF_NOF_U32];
    332 } _bcm_petra_l2_rsrvd_mc_profile_info_t;
    333  
    334 
    335 typedef struct _bcm_l2_limit_llm_info_s
    336 {
    337     int rx_channel;             /* Local RX DMA channel for BHH packets */
    338     int uc_num;                 /* uController number running BHH appl */
    339     int dma_buffer_len;         /* DMA max buffer size */
    340     uint8* dma_buffer;          /* DMA buffer */
    341     uint8* dmabuf_reply;        /* DMA reply buffer */
    342     sal_thread_t event_thread_id;  /* Event handler thread id */
    343     int event_thread_kill; /* Whether to stop event thread */
    344     uint32 event_enable;      /* Event enable/disable */
    345     sal_mutex_t  llm_mutex; /* mutex for LLM message */
    346     sal_mutex_t  l2_mutex;      /* arm restore */
    347 
    348 } _bcm_l2_limit_llm_info_t;
    349 
    350 
    351 extern SOC_PPC_FRWRD_MACT_ENTRY_KEY                
    352      *_bcm_l2_traverse_mact_keys[BCM_LOCAL_UNITS_MAX];
    353 extern SOC_PPC_FRWRD_MACT_ENTRY_VALUE              
    354      *_bcm_l2_traverse_mact_vals[BCM_LOCAL_UNITS_MAX];
    355 extern SOC_SAND_PP_MAC_ADDRESS                
    356      *_bcm_l2_auth_traverse_mac_addrs[BCM_LOCAL_UNITS_MAX];
    357 extern SOC_PPC_LLP_SA_AUTH_MAC_INFO              
    358      *_bcm_l2_auth_traverse_mac_infos[BCM_LOCAL_UNITS_MAX];
    359 extern _bcm_petra_l2_freeze_t _bcm_petra_l2_freeze_state[BCM_LOCAL_UNITS_MAX];
    360 extern int l2_initialized[BCM_LOCAL_UNITS_MAX];
    361 extern l2_data_t l2_data[BCM_LOCAL_UNITS_MAX];
    362 
    363 int 
    364 bcm_petra_l2_cache_set_unset(
    365                        int unit, 
    366                        int index, 
    367                        bcm_l2_cache_addr_t *addr, 
    368                        int *index_used,
    369                        int is_for_delete);
    370  
    371 int _bcm_petra_l2_sw_traverse(int unit, 
    372                     bcm_l2_traverse_cb trav_fn, 
    373                     void *user_data);
    374  
    375 int _bcm_petra_l2_to_petra_entry(int unit, bcm_l2_addr_t *l2addr, int key_only, 
    376                                  SOC_PPC_FRWRD_MACT_ENTRY_KEY *l2_entry_key, 
    377                                  SOC_PPC_FRWRD_MACT_ENTRY_VALUE *l2_entry_val);
    378 
    379 
    380 
    381 int _bcm_petra_l2_freeze_set_no_wb(int unit, int frozen);
    382 
    383 int _bcm_petra_l2_freeze_inc(int unit, int *frozen);
    384 
    385 int _bcm_petra_l2_freeze_dec(int unit, int *frozen);
    386 
    387 int _bcm_petra_l2_is_freezed(int unit, uint8 *is_freezed);
    388 
    389 int _bcm_petra_l2_freeze_info_set(int unit, _bcm_petra_l2_freeze_t* freeze_info);
    390 
    391 int _bcm_petra_l2_freeze_info_get(int unit, _bcm_petra_l2_freeze_t* freeze_info);
    392 
    393 
    394 int
    395 _bcm_petra_l2_mymac_msb_is_set_set(int unit, uint8 val);
    396 
    397 int
    398 _bcm_petra_l2_mymac_msb_is_set_get(int unit, uint8 *is_set);
    399 
    400 int
    401 _bcm_dpp_l2_vsi_profile_update(
    402     int unit, 
    403     uint32 egress_profile,
    404     uint32 egress_profile_type,
    405     uint32 ingress_profile,
    406     bcm_dpp_vsi_egress_profile_t egress_profile_data, 
    407     bcm_dpp_vsi_ingress_profile_t ingress_profile_data);
    408 
    409 int _bcm_petra_l2_event_handle_profile_alloc(
    410                                              int unit, int check, int vsi, int learn_flags, int trans_flags,
    411                                              int del_flags, int refresh_flags, int *new_learn_profile, int *first_appear);
    412 
    413 /* 
    414  * Purpose: process MACT_EVENT_FIFO interrupt.
    415  *   - read event-fifo
    416  *   - parse 
    417  *   - call callback function to handle this event.
    418  */
    419 int _bcm_dpp_l2_event_fifo_interrupt_handler(int unit, uint32 *buf);
    420 /* 
    421  * Purpose: Mask or unmask MACT_EVENT_FIFO interrupt.
    422  */
    423 int _bcm_dpp_mact_interrupts_mask(int unit, uint8 mask_interrupts);
    424 
    425 /* Convert multicast id bcm typedef to soc ppd typedef */
    426 int
    427 _bcm_petra_mc_id_to_ppd_val(int unit, int l2mc_index, SOC_TMC_MULT_ID *soc_ppd_mc_id);
    428 
    429 /* Set the bit indicating whether ether type index table has been set for mpls extended configuration */
    430 int
    431 _bcm_petra_l2_mpls_extended_label_ether_type_index_table_is_set_set(int unit, uint16 val);
    432 
    433 /* Get the bit indicating whether ether type index table has been set for mpls extended configuration */
    434 int
    435 _bcm_petra_l2_mpls_extended_label_ether_type_index_table_is_set_get(int unit, uint16 *is_set);
    436 
    437 /* Fill the ether type index table for mpls extended configuration */
    438 int _bcm_petra_l2_mpls_extended_label_fill_ether_type_index_table(int unit,SOC_PPC_EG_ENCAP_ETHER_TYPE_INDEX_INFO eth_type_index_entry);
    439 
    440 #endif /* _BCM_INT_DPP_L2_H_ */