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

trx.h (61398B)


      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-2019 Broadcom Inc. All rights reserved.
      6  *
      7  * File:        trx.h
      8  * Purpose:     Function declarations for Triumph Micro Architecture 
      9  *              based devices.
     10  */
     11 
     12 #ifndef _BCM_INT_TRX_H_
     13 #define _BCM_INT_TRX_H_
     14 
     15 #if defined(BCM_TRX_SUPPORT)
     16 #include <bcm_int/esw/firebolt.h>
     17 
     18 #if defined(INCLUDE_L3)
     19 #define BCM_TRX_DEFIP128_HASH_SZ            (0x6)
     20 #define BCM_TRX_DEFIP128(_unit_)             l3_trx_defip_128[(_unit_)]
     21 #define BCM_TRX_DEFIP128_ARR(_unit_)         BCM_TRX_DEFIP128((_unit_))->entry_array
     22 #define BCM_TRX_DEFIP128_IDX_MAX(_unit_)     BCM_TRX_DEFIP128((_unit_))->idx_max
     23 #define BCM_TRX_DEFIP128_USED_COUNT(_unit_)  BCM_TRX_DEFIP128((_unit_))->used_count
     24 #define BCM_TRX_DEFIP128_TOTAL(_unit_)       BCM_TRX_DEFIP128((_unit_))->total_count
     25 #define BCM_TRX_DEFIP128_URPF_OFFSET(_unit_) BCM_TRX_DEFIP128((_unit_))->urpf_offset
     26 #define BCM_TRX_DEFIP128_ENTRY_SET(_unit_, _idx_, _plen_, _hash_)          \
     27             BCM_TRX_DEFIP128_ARR((_unit_))[(_idx_)].prefix_len = (_plen_); \
     28             BCM_TRX_DEFIP128_ARR((_unit_))[(_idx_)].entry_hash = (_hash_)
     29 
     30 /* Macro to know if L3 defip memories are enabled in external tcam.*/ 
     31 #define EXT_TCAM_IS_L3_ENABLED(_u_)   ((SOC_MEM_IS_ENABLED(_u_, EXT_IPV4_DEFIPm) &&   \
     32                                         soc_mem_index_count(_u_, EXT_IPV4_DEFIPm)) || \
     33                                        (SOC_MEM_IS_ENABLED(_u_, EXT_IPV6_64_DEFIPm) &&   \
     34                                         soc_mem_index_count(_u_, EXT_IPV6_64_DEFIPm)) || \
     35                                        (SOC_MEM_IS_ENABLED(_u_, EXT_IPV6_128_DEFIPm) &&   \
     36                                         soc_mem_index_count(_u_, EXT_IPV6_128_DEFIPm)))      
     37 
     38 typedef struct _bcm_l3_defip_128_entry_s {
     39     uint8  prefix_len; /* Route entry  prefix length.*/
     40     uint8  entry_hash; /* Route entry key hash.      */
     41 } _bcm_l3_defip_128_entry_t;
     42 
     43 typedef struct _bcm_l3_defip_128_table_s {
     44     _bcm_l3_defip_128_entry_t *entry_array; /* Cam entries array.          */
     45     uint16 idx_max;                   /* Last cam entry index.             */
     46     uint16 used_count;                /* Used cam entry count.             */
     47     uint16 total_count;               /* Total number of available entries.*/
     48     uint16 urpf_offset;               /* Src lookup start offset.          */
     49 } _bcm_l3_defip_128_table_t;
     50 
     51 extern int _bcm_trx_defip_128_init(int unit);
     52 extern int _bcm_trx_defip_128_deinit(int unit);
     53 extern int _bcm_trx_defip_128_get(int unit, _bcm_defip_cfg_t *lpm_cfg,
     54                                   int *nh_ecmp_idx); 
     55 extern int _bcm_trx_defip_128_add(int unit, _bcm_defip_cfg_t *lpm_cfg,
     56                                   int nh_ecmp_idx);
     57 extern int _bcm_trx_defip_128_delete(int unit, _bcm_defip_cfg_t *lpm_cfg);
     58 extern int _bcm_trx_defip_128_update_match(int unit, _bcm_l3_trvrs_data_t *trv_data);
     59 extern int _bcm_trx_l3_defip_mem_get(int unit, uint32 flags, 
     60                                      int plen, soc_mem_t *mem);
     61 extern int _bcm_trx_l3_defip_verify_internal_mem_usage(int unit);
     62 extern int _bcm_trx_tnl_type_to_hw_code(int unit, bcm_tunnel_type_t tnl_type, 
     63                                         int *hw_code, int *entry_type);
     64 extern int _bcm_trx_tnl_hw_code_to_type(int unit, int hw_tnl_type, 
     65                                          int entry_type, bcm_tunnel_type_t
     66                                          *tunnel_type);
     67 extern int _bcm_trx_tunnel_dscp_map_port_set(int unit, bcm_port_t port,
     68                                              bcm_tunnel_dscp_map_t *dscp_map);
     69 extern int _bcm_trx_tunnel_dscp_map_port_get(int unit, bcm_port_t port,
     70                                              bcm_tunnel_dscp_map_t *dscp_map);
     71 extern int bcm_trx_multicast_init(int unit);
     72 extern int bcm_trx_multicast_detach(int unit);
     73 extern int bcm_trx_multicast_group_get(int unit, bcm_multicast_t group,
     74                                         uint32 *flags);
     75 extern int bcm_trx_multicast_group_traverse(int unit,
     76                              bcm_multicast_group_traverse_cb_t trav_fn, 
     77                                             uint32 flags, void *user_data);
     78 extern int _field_trx_meter_index_in_use(int unit, _field_stage_t *stage_fc,
     79                                 _field_slice_t *fs, _field_meter_pool_t *f_mp,
     80                                 uint32 meter_pair_mode, uint32 meter_offset,
     81                                 int idx);
     82 extern int _field_trx_meter_pool_resolve(int unit, _field_stage_t *stage_fc,
     83                                          int meter_pair_idx, int *pool_num,
     84                                          int *meter_idx);
     85 
     86 
     87 #ifdef BCM_WARM_BOOT_SUPPORT
     88 extern int _bcm_trx_multicast_sync(int unit);
     89 #endif /* BCM_WARM_BOOT_SUPPORT */
     90 #endif /* INCLUDE_L3 */
     91 
     92 #define _BCM_TRX_TAG_ACTION_NONE         0
     93 #define _BCM_TRX_TAG_ACTION_ADD          1
     94 #define _BCM_TRX_TAG_ACTION_REPLACE      2
     95 #define _BCM_TRX_TAG_ACTION_DELETE       3
     96 #define _BCM_TRX_TAG_ACTION_COPY         4
     97 #if defined(BCM_TRIDENT2_SUPPORT)
     98 #define _BCM_TRX_TAG_ACTION_COPY_VSAN    5
     99 #define _BCM_TRX_TAG_ACTION_REPLACE_VSAN 6
    100 #endif
    101 
    102 #define _BCM_TRX_PRI_CFI_ACTION_NONE     0
    103 #define _BCM_TRX_PRI_CFI_ACTION_ADD      1
    104 #define _BCM_TRX_PRI_CFI_ACTION_REPLACE  2
    105 #define _BCM_TRX_PRI_CFI_ACTION_COPY     3
    106 #if defined(BCM_TRIDENT2_SUPPORT)
    107 #define _BCM_TRX_PRI_CFI_ACTION_COPY_VSAN    4
    108 #define _BCM_TRX_PRI_CFI_ACTION_REPLACE_VSAN 5
    109 #endif
    110 
    111 /* Number of lookup types in bcm_vlan_block_t structure. */
    112 #define _BCM_VLAN_BLOCK_LOOKUP_TYPES (4)
    113 
    114 #define _BCM_TRX_TAG_ACTION_ENCODE(_action_) \
    115     ((_action_) == bcmVlanActionNone ? _BCM_TRX_TAG_ACTION_NONE :       \
    116      (_action_) == bcmVlanActionAdd ? _BCM_TRX_TAG_ACTION_ADD :         \
    117      (_action_) == bcmVlanActionReplace ? _BCM_TRX_TAG_ACTION_REPLACE : \
    118      (_action_) == bcmVlanActionDelete ? _BCM_TRX_TAG_ACTION_DELETE :   \
    119      _BCM_TRX_TAG_ACTION_COPY)
    120 
    121 #define _BCM_TRX_TAG_ACTION_DECODE(_hw_action_) \
    122     ((_hw_action_) == _BCM_TRX_TAG_ACTION_NONE ? bcmVlanActionNone :    \
    123      (_hw_action_) == _BCM_TRX_TAG_ACTION_ADD ? bcmVlanActionAdd :      \
    124      (_hw_action_) == _BCM_TRX_TAG_ACTION_REPLACE ? bcmVlanActionReplace : \
    125      (_hw_action_) == _BCM_TRX_TAG_ACTION_DELETE ? bcmVlanActionDelete : \
    126      bcmVlanActionCopy)
    127 
    128 #if defined(BCM_TRIDENT2_SUPPORT)
    129 /* extended version for fcoe capable chips */
    130 
    131 #define _BCM_TRX_TAG_ACTION_ENCODE_EGR_FCOE_EXT(_action_) \
    132     ((_action_) == bcmVlanActionNone ? _BCM_TRX_TAG_ACTION_NONE :       \
    133      (_action_) == bcmVlanActionAdd ? _BCM_TRX_TAG_ACTION_ADD :         \
    134      (_action_) == bcmVlanActionReplace ? _BCM_TRX_TAG_ACTION_REPLACE : \
    135      (_action_) == bcmVlanActionDelete ? _BCM_TRX_TAG_ACTION_DELETE :   \
    136      (_action_) == bcmVlanActionCopyVsan ? _BCM_TRX_TAG_ACTION_COPY_VSAN : \
    137      (_action_) == bcmVlanActionReplaceVsan ? _BCM_TRX_TAG_ACTION_REPLACE_VSAN : \
    138      _BCM_TRX_TAG_ACTION_COPY)
    139 
    140 #define _BCM_TRX_TAG_ACTION_DECODE_EGR_FCOE_EXT(_hw_action_) \
    141     ((_hw_action_) == _BCM_TRX_TAG_ACTION_NONE ? bcmVlanActionNone :    \
    142      (_hw_action_) == _BCM_TRX_TAG_ACTION_ADD ? bcmVlanActionAdd :      \
    143      (_hw_action_) == _BCM_TRX_TAG_ACTION_REPLACE ? bcmVlanActionReplace : \
    144      (_hw_action_) == _BCM_TRX_TAG_ACTION_DELETE ? bcmVlanActionDelete : \
    145      (_hw_action_) == _BCM_TRX_TAG_ACTION_COPY_VSAN ? bcmVlanActionCopyVsan : \
    146      (_hw_action_) == _BCM_TRX_TAG_ACTION_REPLACE_VSAN ? bcmVlanActionReplaceVsan : \
    147      bcmVlanActionCopy)
    148 
    149 #endif
    150 
    151 
    152 #define _BCM_TRX_PRI_CFI_ACTION_ENCODE(_action_) \
    153     ((_action_) == bcmVlanActionNone ? _BCM_TRX_PRI_CFI_ACTION_NONE :       \
    154      (_action_) == bcmVlanActionAdd ? _BCM_TRX_PRI_CFI_ACTION_ADD :         \
    155      (_action_) == bcmVlanActionReplace ? _BCM_TRX_PRI_CFI_ACTION_REPLACE : \
    156      _BCM_TRX_PRI_CFI_ACTION_COPY)
    157 
    158 #define _BCM_TRX_PRI_CFI_ACTION_DECODE(_hw_action_) \
    159     ((_hw_action_) == _BCM_TRX_PRI_CFI_ACTION_NONE ? bcmVlanActionNone :    \
    160      (_hw_action_) == _BCM_TRX_PRI_CFI_ACTION_ADD ? bcmVlanActionAdd :      \
    161      (_hw_action_) == _BCM_TRX_PRI_CFI_ACTION_REPLACE ? bcmVlanActionReplace : \
    162      bcmVlanActionCopy)
    163 
    164 #if defined(BCM_TRIDENT2_SUPPORT)
    165 /* extended version for fcoe capable chips */
    166 #define _BCM_TRX_PRI_CFI_ACTION_ENCODE_FCOE_EXT(_action_) \
    167     ((_action_) == bcmVlanActionNone ? _BCM_TRX_PRI_CFI_ACTION_NONE :       \
    168      (_action_) == bcmVlanActionAdd ? _BCM_TRX_PRI_CFI_ACTION_ADD :         \
    169      (_action_) == bcmVlanActionReplace ? _BCM_TRX_PRI_CFI_ACTION_REPLACE : \
    170      (_action_) == bcmVlanActionCopyVsan ? _BCM_TRX_PRI_CFI_ACTION_COPY_VSAN : \
    171      (_action_) == bcmVlanActionReplaceVsan ? _BCM_TRX_PRI_CFI_ACTION_REPLACE_VSAN : \
    172      _BCM_TRX_PRI_CFI_ACTION_COPY)
    173 
    174 #define _BCM_TRX_PRI_CFI_ACTION_DECODE_FCOE_EXT(_hw_action_) \
    175     ((_hw_action_) == _BCM_TRX_PRI_CFI_ACTION_NONE ? bcmVlanActionNone :    \
    176      (_hw_action_) == _BCM_TRX_PRI_CFI_ACTION_ADD ? bcmVlanActionAdd :      \
    177      (_hw_action_) == _BCM_TRX_PRI_CFI_ACTION_REPLACE ? bcmVlanActionReplace : \
    178      (_hw_action_) == _BCM_TRX_PRI_CFI_ACTION_COPY_VSAN ? bcmVlanActionCopyVsan : \
    179      (_hw_action_) == _BCM_TRX_PRI_CFI_ACTION_REPLACE_VSAN ? bcmVlanActionReplaceVsan : \
    180      bcmVlanActionCopy)
    181 #endif
    182 
    183 /*
    184  * Vlan block profile structure.  
    185  *
    186  * Purpose  : Implement different block functionality per vlan.
    187  */
    188 typedef struct _trx_vlan_block_s {
    189     soc_pbmp_t first_mask;
    190     soc_pbmp_t second_mask;
    191     uint8 broadcast_mask_sel;
    192     uint8 unknown_unicast_mask_sel;
    193     uint8 unknown_mulitcast_mask_sel;
    194     uint8 known_mulitcast_mask_sel;
    195 } _trx_vlan_block_t;
    196 
    197 /* Default Engress Vlan Translate Action Profile Table Index */
    198 #define BCM_TRX_EGR_VLAN_ACTION_PROFILE_DEFAULT  0
    199 
    200 typedef union egr_qos_l2_map_entry_t_ {
    201     egr_zone_1_dot1p_mapping_table_1_entry_t table_v2;
    202     egr_pri_cng_map_entry_t table_v1;
    203 }egr_qos_l2_map_entry_t;
    204 
    205 typedef union egr_qos_l3_map_entry_t_ {
    206     egr_zone_4_qos_mapping_table_entry_t table_v2;
    207     egr_dscp_table_entry_t table_v1;
    208 }egr_qos_l3_map_entry_t;
    209 
    210 extern int _bcm_trx_vlan_action_verify(int unit, bcm_vlan_action_set_t *action);
    211 #ifdef BCM_TRIDENT2PLUS_SUPPORT
    212 extern int
    213 _bcm_misc_port_profile_entry_add(int unit, void **entries, int entries_per_set, uint32 *index);
    214 extern int _bcm_misc_port_profile_entry_get(int unit, int index, int count, void **entries);
    215 extern int _bcm_misc_port_profile_entry_delete(int unit, int index);
    216 extern int
    217 _bcm_misc_port_profile_mem_reference(int unit, int index, int entries_per_set);
    218 extern int _bcm_misc_port_profile_field32_modify(int unit, int table_id,
    219                                                  soc_field_t field, uint32 value);
    220 #endif /* BCM_TRIDENT2PLUS_SUPPORT */
    221 extern int _bcm_trx_vlan_action_profile_init(int unit);
    222 #if defined(BCM_TOMAHAWK_SUPPORT) || defined(BCM_TRIDENT3_SUPPORT) || \
    223     defined(BCM_KATANA2_SUPPORT)
    224 extern int _bcm_th_port_vlan_action_profile_reinit(int unit);
    225 #endif
    226 extern int _bcm_trx_vlan_action_profile_entry_add(int unit,
    227                                       bcm_vlan_action_set_t *action,
    228                                       uint32 *index);
    229 extern void _bcm_trx_vlan_action_profile_entry_increment(int unit, uint32 index);
    230 extern void _bcm_trx_vlan_action_profile_entry_get(int unit,
    231                                       bcm_vlan_action_set_t *action,
    232                                       uint32 index);
    233 extern int _bcm_trx_vlan_action_profile_entry_delete(int unit, uint32 index);
    234 extern int _bcm_trx_vlan_action_profile_detach(int unit);
    235 
    236 extern int _bcm_trx_vlan_range_profile_entry_delete(int unit, uint32 index);
    237 extern void _bcm_trx_vlan_range_profile_entry_increment(int unit, uint32 index);
    238 
    239 extern int _bcm_trx_egr_vlan_action_profile_entry_add(int unit,
    240                                       bcm_vlan_action_set_t *action,
    241                                       uint32 *index);
    242 extern void _bcm_trx_egr_vlan_action_profile_entry_increment(int unit, uint32 index);
    243 extern void _bcm_trx_egr_vlan_action_profile_entry_get(int unit,
    244                                           bcm_vlan_action_set_t *action,
    245                                           uint32 index);
    246 extern int _bcm_trx_egr_vlan_action_profile_entry_delete(int unit, uint32 index);
    247 
    248 extern int _bcm_trx_vlan_ip_action_add(int unit, bcm_vlan_ip_t *vlan_ip,
    249                                       bcm_vlan_action_set_t *action);
    250 extern int _bcm_trx_vlan_ip_action_get(int unit, bcm_vlan_ip_t *vlan_ip,
    251                                       bcm_vlan_action_set_t *action);
    252 extern int _bcm_trx_vlan_ip_action_traverse(int unit, 
    253                                             bcm_vlan_ip_action_traverse_cb cb, 
    254                                             void *user_data);
    255 
    256 
    257 extern int _bcm_trx_vlan_ip_delete(int unit, bcm_vlan_ip_t *vlan_ip);
    258 extern int _bcm_trx_vlan_ip_delete_all(int unit);
    259 extern int _bcm_trx_vlan_mac_action_add(int unit, bcm_mac_t mac,
    260                                        bcm_vlan_action_set_t *action);
    261 extern int _bcm_trx_vlan_mac_delete(int unit, bcm_mac_t mac);
    262 extern int _bcm_trx_vlan_mac_delete_all(int unit);
    263 
    264 extern int _bcm_trx_vlan_port_prot_match_get(int unit, 
    265                                              bcm_port_frametype_t frame, 
    266                                              bcm_port_ethertype_t ether, 
    267                                              int *match_idx);
    268 extern int _bcm_trx_vlan_port_prot_empty_get(int unit, int *empty_idx);
    269 
    270 extern int _bcm_trx_lltag_vlan_translate_entry_assemble(int unit, void *vent,
    271                                       bcm_gport_t port,
    272                                       bcm_vlan_translate_key_t key_type,
    273                                       bcm_vlan_t lltag_vlan,
    274                                       bcm_vlan_t other_vlan);
    275 
    276 extern int _bcm_trx_vlan_translate_entry_assemble(int unit, void *vent,
    277                                       bcm_gport_t port,
    278                                       bcm_vlan_translate_key_t key_type,
    279                                       bcm_vlan_t inner_vlan, 
    280                                       bcm_vlan_t outer_vlan);
    281 
    282 extern int _bcm_trx_vlan_translate_action_add(int unit,
    283                                              bcm_gport_t port,
    284                                              bcm_vlan_translate_key_t key_type,
    285                                              bcm_vlan_t outer_vlan,
    286                                              bcm_vlan_t inner_vlan,
    287                                              bcm_vlan_action_set_t *action);
    288 extern int _bcm_trx_vlan_translate_action_delete(int unit,
    289                                                 bcm_gport_t port,
    290                                                 bcm_vlan_translate_key_t key_type,
    291                                                 bcm_vlan_t outer_vlan,
    292                                                 bcm_vlan_t inner_vlan);
    293 extern int _bcm_trx_vlan_translate_action_delete_all(int unit);
    294 extern int _bcm_trx_vlan_translate_action_get (int unit, 
    295                                               bcm_gport_t port, 
    296                                               bcm_vlan_translate_key_t key_type, 
    297                                               bcm_vlan_t outer_vid,
    298                                               bcm_vlan_t inner_vid,
    299                                               bcm_vlan_action_set_t *action);
    300 extern int _bcm_trx_vlan_translate_action_range_add(int unit,
    301                                                    bcm_gport_t port,
    302                                                    bcm_vlan_t outer_vlan_low,
    303                                                    bcm_vlan_t outer_vlan_high,
    304                                                    bcm_vlan_t inner_vlan_low,
    305                                                    bcm_vlan_t inner_vlan_high,
    306                                                    bcm_vlan_action_set_t *action);
    307 extern int _bcm_trx_vlan_translate_action_range_get(int unit,
    308                                                    bcm_gport_t port,
    309                                                    bcm_vlan_t outer_vlan_low,
    310                                                    bcm_vlan_t outer_vlan_high,
    311                                                    bcm_vlan_t inner_vlan_low,
    312                                                    bcm_vlan_t inner_vlan_high,
    313                                                    bcm_vlan_action_set_t *action);
    314 extern int _bcm_trx_vlan_translate_action_range_delete(int unit,
    315                                                       bcm_gport_t port,
    316                                                       bcm_vlan_t outer_vlan_low,
    317                                                       bcm_vlan_t outer_vlan_high,
    318                                                       bcm_vlan_t inner_vlan_low,
    319                                                       bcm_vlan_t inner_vlan_high);
    320 extern int _bcm_trx_vlan_translate_action_range_delete_all(int unit);
    321 extern int _bcm_trx_vlan_translate_action_range_traverse(int unit, 
    322                                   _bcm_vlan_translate_traverse_t *trvs_info);
    323 
    324 extern int _bcm_trx_vlan_translate_parse(int unit, soc_mem_t mem, uint32 *vent, 
    325                                   _bcm_vlan_translate_traverse_t *trvs_info);
    326 extern int _bcm_trx_vlan_translate_egress_entry_assemble(int unit,
    327                                               void *vent,
    328                                               int port_class,
    329                                               bcm_vlan_t outer_vlan,
    330                                               bcm_vlan_t inner_vlan);
    331 extern int _bcm_trx_vlan_translate_egress_action_add(int unit, int port_class,
    332                                          bcm_vlan_t outer_vlan,
    333                                          bcm_vlan_t inner_vlan,
    334                                          bcm_vlan_action_set_t *action);
    335 extern int _bcm_trx_vlan_translate_egress_action_get(int unit, int port_class,
    336                                          bcm_vlan_t outer_vlan,
    337                                          bcm_vlan_t inner_vlan,
    338                                          bcm_vlan_action_set_t *action);
    339 extern int _bcm_trx_vlan_translate_egress_action_delete(int unit, int port_class,
    340                                             bcm_vlan_t outer_vlan,
    341                                             bcm_vlan_t inner_vlan);
    342 extern int _bcm_trx_vlan_mac_action_traverse(int unit, 
    343                                              bcm_vlan_mac_action_traverse_cb cb, 
    344                                              void *user_data);
    345 extern int _bcm_trx_vlan_mac_action_get(int unit, bcm_mac_t  mac,
    346                              bcm_vlan_action_set_t *action);
    347 extern int _bcm_trx_vlan_translate_egress_action_delete_all(int unit);
    348 
    349 #ifndef BCM_SW_STATE_DUMP_DISABLE
    350 extern void _bcm_trx_vlan_sw_dump(int unit);
    351 #endif /* BCM_SW_STATE_DUMP_DISABLE */
    352 
    353 extern int bcm_trx_metro_l2_tunnel_add(int unit, bcm_mac_t mac, bcm_vlan_t vlan);
    354 extern int bcm_trx_metro_l2_tunnel_delete(int unit, bcm_mac_t mac, bcm_vlan_t vlan);
    355 extern int bcm_trx_metro_l2_tunnel_delete_all(int unit);
    356 extern int _bcm_common_init(int unit);
    357 extern int _bcm_common_cleanup(int unit);
    358 extern int _bcm_common_scache_sync(int unit);
    359 extern int _bcm_mac_da_profile_entry_add(int unit, void **entries, 
    360                                          int entries_per_set, uint32 *index);
    361 extern int _bcm_mac_da_profile_entry_delete(int unit, int index);
    362 
    363 /* LPORT Profile Table */
    364 extern int _bcm_lport_profile_mem_reference_unique(int unit, int index,
    365                                             int entries_per_set, int pipe);
    366 extern int _bcm_lport_profile_mem_reference(int unit, int index,
    367                                             int entries_per_set);
    368 extern int _bcm_lport_profile_entry_add_unique(int unit, void **entries,
    369                               int entries_per_set, int pipe, uint32 *index);
    370 extern int _bcm_lport_profile_entry_add(int unit, void **entries, 
    371                                          int entries_per_set, uint32 *index);
    372 extern int _bcm_lport_profile_entry_delete_unique(int unit, int index, int pipe);
    373 extern int _bcm_lport_profile_entry_delete(int unit, int index);
    374 extern int _bcm_lport_profile_entry_get(int unit, int index, int count,
    375                                         void **entries);
    376 extern int _bcm_lport_profile_fields32_modify(int unit, int table_id,
    377                                               int field_count,
    378                                               soc_field_t *fields,
    379                                               uint32 *values);
    380 extern int _bcm_lport_profile_field32_modify(int unit, int table_id,
    381                                              soc_field_t field,
    382                                              uint32 value);
    383 
    384 /* LPORT_1 Profile Table */
    385 extern int _bcm_lport_ind_profile_mem_reference(int unit, int index,
    386                                             int entries_per_set);
    387 extern int _bcm_lport_ind_profile_entry_add(int unit, void **entries, 
    388                                          int entries_per_set, uint32 *index);
    389 extern int _bcm_lport_ind_profile_entry_delete(int unit, int index);
    390 extern int _bcm_lport_ind_profile_entry_get(int unit, int index, int count,
    391                                         void **entries);
    392 extern int _bcm_lport_ind_profile_fields32_modify(int unit, int table_id,
    393                                               int field_count,
    394                                               soc_field_t *fields,
    395                                               uint32 *values);
    396 extern int _bcm_lport_ind_profile_field32_modify(int unit, int table_id,
    397                                              soc_field_t field,
    398                                              uint32 value);
    399 
    400 /* RTAG7_1 Profile Table */
    401 extern int _bcm_rtag7_ind_profile_mem_reference(int unit, int index,
    402                                             int entries_per_set);
    403 extern int _bcm_rtag7_ind_profile_entry_add(int unit, void **entries, 
    404                                          int entries_per_set, uint32 *index);
    405 extern int _bcm_rtag7_ind_profile_entry_delete(int unit, int index);
    406 extern int _bcm_rtag7_ind_profile_entry_get(int unit, int index, int count,
    407                                         void **entries);
    408 extern int _bcm_rtag7_ind_profile_fields32_modify(int unit, int table_id,
    409                                               int field_count,
    410                                               soc_field_t *fields,
    411                                               uint32 *values);
    412 extern int _bcm_rtag7_ind_profile_field32_modify(int unit, int table_id,
    413                                              soc_field_t field,
    414                                              uint32 value);
    415 
    416 /* EGR LPORT Profile Table */
    417 #define _BCM_EGR_LPROF_MEM_COUNT    9
    418 extern int _bcm_egr_lport_profile_mem_index_get(int unit, soc_mem_t mem,
    419                                                 int *index);
    420 extern int _bcm_egr_lport_profile_mem_reference(int unit, int index,
    421                                             int entries_per_set);
    422 extern int _bcm_egr_lport_profile_entry_add(int unit, void **entries,
    423                                          int entries_per_set, uint32 *index);
    424 extern int _bcm_egr_lport_profile_entry_delete(int unit, int index);
    425 extern int _bcm_egr_lport_profile_entry_get(int unit, int index, int count,
    426                                         void **entries);
    427 extern int _bcm_egr_lport_profile_fields32_modify(int unit, soc_mem_t mem,
    428                 int field_count, soc_field_t *fields, uint32 *values);
    429 extern int _bcm_egr_lport_profile_field32_modify(int unit, soc_mem_t mem,
    430                 soc_field_t field, uint32 value);
    431 
    432 #define _BCM_TR2_PRI_CNG_MAP_SIZE (16)
    433 extern int _bcm_ing_pri_cng_map_entry_add(int unit, void **entries, 
    434                                          int entries_per_set, uint32 *index);
    435 
    436 extern int _bcm_ing_vft_pri_map_entry_add(int unit, void **entries, 
    437                                          int entries_per_set, uint32 *index);
    438 extern int _bcm_ing_l2_vlan_etag_map_entry_add(int unit, 
    439                             void **entries, int entries_per_set, uint32 *index);
    440 extern int _bcm_egr_l2_vlan_etag_map_entry_add(int unit, 
    441                             void **entries, int entries_per_set, uint32 *index);
    442 extern int _bcm_egr_vft_pri_map_entry_add(int unit, void **entries, 
    443                                          int entries_per_set, uint32 *index);
    444 extern int _bcm_ing_vft_pri_map_entry_del(int unit, int index);
    445 extern int _bcm_ing_l2_vlan_etag_map_entry_del(int unit, int index);
    446 extern int _bcm_egr_l2_vlan_etag_map_entry_del(int unit, int index);
    447 extern int _bcm_egr_vft_pri_map_entry_del(int unit, int index);
    448 extern int _bcm_ing_vft_pri_map_entry_get(int unit, int index, int count, 
    449                                           void **entries);
    450 extern int _bcm_ing_vft_pri_map_entry_reference(int unit, int index,
    451                                      int entries_per_set_override); 
    452 extern int _bcm_ing_l2_vlan_etag_map_entry_get(int unit, int index, 
    453                                            int count, void **entries);
    454 extern int _bcm_ing_l2_vlan_etag_map_entry_reference(int unit, int index,
    455                                      int entries_per_set_override);
    456 extern int _bcm_egr_vft_pri_map_entry_get(int unit, int index, int count, 
    457                                           void **entries);
    458 extern int _bcm_egr_vft_pri_map_entry_reference(int unit, int index,
    459                                      int entries_per_set_override); 
    460 extern int _bcm_egr_l2_vlan_etag_map_entry_get(int unit, int index, 
    461                                            int count, void **entries);
    462 extern int _bcm_egr_l2_vlan_etag_map_entry_reference(int unit, int index,
    463                                      int entries_per_set_override);
    464 extern int _bcm_egr_vsan_intpri_map_entry_add(int unit, void **entries, 
    465                                               int entries_per_set, 
    466                                               uint32 *index);
    467 extern int _bcm_egr_vsan_intpri_map_entry_del(int unit, int index);
    468 extern int _bcm_egr_vsan_intpri_map_entry_get(int unit, int index, int count, 
    469                                               void **entries);
    470 extern int _bcm_egr_vsan_intpri_map_entry_reference(int unit, int index,
    471                                      int entries_per_set_override);
    472 extern int _bcm_egr_vft_fields_entry_add(int unit, void **entries, 
    473                                          int entries_per_set, 
    474                                          uint32 *index);
    475 extern int _bcm_egr_vft_fields_entry_del(int unit, int index);
    476 extern int _bcm_egr_vft_fields_entry_get(int unit, int index, int count, 
    477                                          void **entries);
    478 extern int _bcm_egr_vft_fields_entry_reference(int unit, int index,
    479                                                int entries_per_set_override);
    480 
    481 extern int _bcm_ing_pri_cng_map_entry_delete(int unit, int index);
    482 extern int _bcm_ing_pri_cng_map_entry_get(int unit, int index, int count,
    483                                           void **entries);
    484 extern int _bcm_ing_pri_cng_map_entry_reference(int unit, int index, 
    485                                                 int entries_per_set_override);
    486 extern int _bcm_egr_mpls_combo_map_entry_add(int unit, void **entries, 
    487                                              int entries_per_set,
    488                                              uint32 *index);
    489 extern int _bcm_egr_mpls_combo_map_entry_update(int unit, void **entries, 
    490                                                 uint32 index);
    491 extern int _bcm_egr_mpls_combo_map_entry_delete(int unit, int index) ;
    492 extern int _bcm_egr_mpls_combo_map_entry_reference(int unit, int index, 
    493                                                    int entries_per_set_override);
    494 extern int _bcm_egr_mpls_combo_map_entry_write_mode_get(int unit,
    495                                                 uint32 index, int *mode);
    496 extern int _bcm_egr_qos_profile_mem_reference(int unit, int index, int entries_per_set);
    497 extern int _bcm_egr_qos_profile_entry_add(int unit, void **entries, 
    498                               int entries_per_set, uint32 *index);
    499 extern int _bcm_egr_qos_profile_entry_delete(int unit, int index); 
    500 extern int _bcm_egr_qos_profile_entry_get(int unit, int index, int count, void **entries);
    501 extern int _bcm_dscp_table_entry_add(int unit, void **entries, 
    502                                          int entries_per_set, uint32 *index);
    503 extern int _bcm_dscp_table_entry_delete(int unit, int index);
    504 extern int _bcm_dscp_table_entry_reference(int unit, int index,
    505                                            int entries_per_set_override);
    506 extern int _bcm_dscp_table_entry_ref_count_get(int unit, uint32 index,
    507                                                 int* ref_count);
    508 extern int _bcm_dscp_table_entry_get(int unit, int index, int count,
    509                                           void **entries);
    510 extern int  _bcm_dscp_table_entry_range(int unit, int *index_min, 
    511                                         int *index_max);
    512 extern int
    513 _bcm_egr_dscp_table_entry_ref_count_get(int unit, uint32 index, int *ref_count);
    514 
    515 extern int
    516 _bcm_egr_dscp_table_entry_get(int unit, int index, int count, void **entries);
    517 
    518 extern int _bcm_egr_dscp_table_entry_set(int unit, void **entries, uint32 index);
    519 
    520 extern int _bcm_egr_dscp_table_entry_add(int unit, void **entries, 
    521                                          int entries_per_set, uint32 *index, uint32 flags);
    522 extern int _bcm_egr_dscp_table_entry_delete(int unit, int index);
    523 extern int _bcm_egr_dscp_table_entry_reference(int unit, int index, 
    524                                                int entries_per_set_override);
    525 extern int _bcm_prot_pkt_ctrl_add(int unit, uint32 prot_pkt_ctrl,
    526                                   uint32 igmp_mld_pkt_ctrl, uint32 *index);
    527 extern int _bcm_prot_pkt_ctrl_delete(int unit, uint32 index);
    528 extern int _bcm_prot_pkt_ctrl_get(int unit, uint32 index,
    529                                   uint32 *prot_pkt_ctrl,
    530                                   uint32 *igmp_mld_pkt_ctrl);
    531 extern int _bcm_prot_pkt_ctrl_reference(int unit, uint32 index);
    532 extern int _bcm_prot_pkt_ctrl_ref_count_get(int unit, uint32 index,
    533                                             int* ref_count);
    534 extern int _bcm_ing_l3_nh_attrib_entry_add(int unit, void **entries, 
    535                               int entries_per_set, uint32 *index);
    536 extern int _bcm_ing_l3_nh_attrib_entry_delete(int unit, int index) ;
    537 extern int _bcm_ing_l3_nh_attrib_entry_reference(int unit, int index, 
    538                                 int entries_per_set_override);
    539 extern void _bcm_common_profile_mem_ref_cnt_update(int unit, soc_mem_t mem, 
    540                                                    int profile_ptr, int count);
    541 
    542 #ifdef BCM_TRIDENT2_SUPPORT
    543 extern int _bcm_l3_iif_profile_entry_add(int unit, void **entries, 
    544                               int entries_per_set, uint32 *index);
    545 extern int _bcm_l3_iif_profile_entry_delete(int unit, int index);
    546 extern int _bcm_l3_iif_profile_entry_get(int unit, int index, int count,
    547                                          void **entries);
    548 extern int _bcm_l3_iif_profile_entry_reference(int unit, int index, 
    549                                 int entries_per_set_override);
    550 extern int _bcm_l3_iif_profile_entry_update(int unit, void **entries, 
    551                                             uint32 *index);
    552 extern int
    553 _bcm_l3_iif_profile_entry_reference_get(int unit, int index, 
    554                                 int *ref_count);
    555 extern int _bcm_l3_ip4_options_profile_entry_add(int unit, void **entries, 
    556                               int entries_per_set, uint32 *index);
    557 extern int _bcm_l3_ip4_options_profile_entry_delete(int unit, int index);
    558 extern int _bcm_l3_ip4_options_profile_entry_get(int unit, int index, 
    559                                                  int count, void **entries);
    560 extern int _bcm_l3_ip4_options_profile_entry_reference(int unit, int index, 
    561                                 int entries_per_set_override);
    562 extern int _bcm_l3_ip4_options_profile_entry_update(int unit, void **entries,
    563                                                     uint32 index);
    564 extern int _bcm_fc_map_profile_entry_add(int unit, void **entries, 
    565                                          int entries_per_set, uint32 *index);
    566 extern int _bcm_fc_map_profile_entry_delete(int unit, int index);
    567 extern int _bcm_fc_map_profile_entry_get(int unit, int index, int count, 
    568                                          void **entries);
    569 extern int _bcm_fc_map_profile_entry_reference(int unit, int index,
    570                                                int entries_per_set_override);
    571 extern int _bcm_l3_iif_profile_sw_state_set(int unit, void **entries,
    572                                             int entries_per_set, uint32 index);
    573 
    574 #endif /* BCM_TRIDENT2_SUPPORT */
    575 
    576 #ifdef BCM_TRIDENT2PLUS_SUPPORT
    577 extern int _bcm_vfi_profile_entry_add(int unit, void **entries, 
    578                                       int entries_per_set, uint32 *index);
    579 extern int _bcm_vfi_profile_entry_delete(int unit, int index);
    580 extern int _bcm_vfi_profile_entry_get(int unit, int index, int count,
    581                                       void **entries);
    582 extern int _bcm_vfi_profile_entry_reference(int unit, int index, 
    583                                             int entries_per_set_override);
    584 #endif /* BCM_TRIDENT2PLUS_SUPPORT */
    585 
    586 #ifdef BCM_TRIDENT3_SUPPORT
    587 #define _BCM_TD3_PRI_CNG_MAP_SIZE (64)
    588 #endif /* BCM_TRIDENT3_SUPPORT */
    589 
    590 #ifdef BCM_KATANA_SUPPORT
    591 extern int _bcm_offset_map_table_entry_add(int unit, void **entries,
    592                                 int entries_per_set, uint32 *index);
    593 extern int _bcm_offset_map_table_entry_delete(int unit, int index);
    594 extern int _bcm_offset_map_table_entry_get(int unit, int index, 
    595                                            int count, void **entries);
    596 extern int _bcm_offset_map_table_entry_reference(int unit, int index,
    597                                 int entries_per_set_override);
    598 #endif /*BCM_KATANA_SUPPORT */
    599 #if defined(BCM_KATANA2_SUPPORT) || defined(BCM_TOMAHAWK_SUPPORT) || defined(BCM_TRIDENT2PLUS_SUPPORT)
    600 extern int _bcm_port_vlan_protocol_data_entry_add(
    601            int unit, void **entries, int entries_per_set, uint32 *index);
    602 extern int _bcm_port_vlan_protocol_data_entry_delete(
    603            int unit, int index);
    604 #endif
    605 #if defined(BCM_KATANA2_SUPPORT) || defined(BCM_TOMAHAWK_SUPPORT)
    606 extern int _bcm_port_vlan_protocol_data_entry_get(
    607            int unit, int index, int count, void **entries);
    608 extern int _bcm_port_vlan_protocol_data_entry_reference(
    609            int unit, int index, int entries_per_set_override);
    610 extern int
    611 _bcm_trx_vlan_protocol_data_profile_update(
    612     int unit, bcm_pbmp_t update_pbm, int prot_idx,
    613     bcm_vlan_action_set_t *action);
    614 
    615 extern int
    616 _bcm_trx_vlan_port_default_action_profile_set(int unit, bcm_port_t port,
    617                                       bcm_vlan_action_set_t *action);
    618 
    619 extern int
    620 _bcm_trx_vlan_port_default_action_profile_delete(int unit, bcm_port_t port);
    621 #endif /*BCM_KATANA2_SUPPORT */
    622 #ifdef BCM_SABER2_SUPPORT
    623 extern int
    624 _bcm_service_pri_map_table_entry_add(int unit, void **entries,
    625                                 int entries_per_set, uint32 *index);
    626 extern int
    627 _bcm_service_pri_map_table_entry_delete(int unit, int index);
    628 extern int
    629 _bcm_service_pri_map_table_entry_get(int unit, int index, int count, 
    630                                       void **entries);
    631 extern int
    632 _bcm_service_pri_map_table_entry_reference(int unit, int index,
    633                                 int entries_per_set_override);
    634 #endif
    635 #ifdef BCM_HURRICANE3_SUPPORT
    636 extern int _bcm_egr_header_encap_data_entry_add(int unit, void **entries, 
    637            int entries_per_set, uint32 *index);
    638 extern int _bcm_egr_header_encap_data_entry_delete(int unit, int index);
    639 extern int _bcm_egr_header_encap_data_entry_update(int unit, 
    640            void **entries, uint32 index);
    641 extern int _bcm_egr_header_encap_data_entry_ref_count_get(int unit, 
    642            uint32 index, int *ref_count);
    643 extern int _bcm_egr_header_encap_data_entry_search(int unit, void **entries,
    644            int entries_per_set, uint32 *index);
    645 extern int _bcm_custom_header_match_entry_add(int unit, void **entries, 
    646            int entries_per_set, uint32 *index);
    647 extern int _bcm_custom_header_match_entry_delete(int unit, int index);
    648 extern int _bcm_custom_header_match_entry_update(int unit, 
    649            void **entries, uint32 index);
    650 extern int _bcm_custom_header_match_entry_get(int unit, int index, 
    651            int count, void **entries);
    652 extern int _bcm_custom_header_match_entry_ref_count_get(int unit, 
    653            uint32 index, int *ref_count);
    654 #endif /* BCM_HURRICANE3_SUPPORT */
    655 #ifdef BCM_TOMAHAWK_SUPPORT
    656 extern int
    657 _bcm_ing_tunnel_term_map_entry_add(int unit, void **entries, 
    658                                    int entries_per_set, uint32 *index);
    659 extern int
    660 _bcm_ing_tunnel_term_map_entry_delete(int unit, int index);
    661 extern int
    662 _bcm_ing_tunnel_term_map_entry_get(int unit, int index, int count, void **entries);
    663 extern int
    664 _bcm_ing_tunnel_term_map_entry_reference(int unit, int index,
    665                                          int entries_per_set_override);
    666 #endif
    667 
    668 #if (defined(BCM_TOMAHAWK2_SUPPORT) || defined(BCM_TRIDENT3_SUPPORT))
    669 extern int
    670 _bcm_ing_exp_to_ip_ecn_map_entry_add(int unit, void **entries, 
    671                                      int entries_per_set, uint32 *index);
    672 extern int
    673 _bcm_ing_exp_to_ip_ecn_map_entry_delete(int unit, int index); 
    674 extern int
    675 _bcm_ing_exp_to_ip_ecn_map_entry_get(int unit, int index, int count, void **entries);
    676 extern int
    677 _bcm_ing_exp_to_ip_ecn_map_entry_reference(int unit, int index,
    678                                            int entries_per_set_override);
    679 extern int
    680 _bcm_egr_ip_ecn_to_exp_map_entry_add(int unit, void **entries, 
    681                                      int entries_per_set, uint32 *index);
    682 extern int
    683 _bcm_egr_ip_ecn_to_exp_map_entry_delete(int unit, int index); 
    684 extern int
    685 _bcm_egr_ip_ecn_to_exp_map_entry_get(int unit, int index, int count, void **entries);
    686 extern int
    687 _bcm_egr_ip_ecn_to_exp_map_entry_reference(int unit, int index, int entries_per_set_override); 
    688 extern int
    689 _bcm_egr_int_cn_to_exp_map_entry_add(int unit, void **entries, 
    690                                      int entries_per_set, uint32 *index);
    691 extern int
    692 _bcm_egr_int_cn_to_exp_map_entry_delete(int unit, int index); 
    693 extern int
    694 _bcm_egr_int_cn_to_exp_map_entry_get(int unit, int index, int count, void **entries);
    695 extern int
    696 _bcm_egr_int_cn_to_exp_map_entry_reference(int unit, int index,
    697                                            int entries_per_set_override); 
    698 #endif /* BCM_TOMAHAWK2_SUPPORT */
    699 
    700 #ifdef BCM_WARM_BOOT_SUPPORT_SW_DUMP
    701 extern void _bcm_common_sw_dump(int unit);
    702 #endif /* BCM_WARM_BOOT_SUPPORT_SW_DUMP */
    703 
    704 extern int _bcm_trx_egr_src_port_outer_tpid_set(int unit, int tpid_index,
    705                                                 int enable);
    706 extern int _bcm_trx_source_trunk_map_set(int unit, bcm_port_t port, 
    707                                          soc_field_t field, uint32 value);
    708 extern int _bcm_trx_source_trunk_map_get(int unit, bcm_port_t port, 
    709                                          soc_field_t field, uint32 *value);
    710 extern int _bcm_trx_port_force_vlan_set(int unit, bcm_port_t port,
    711                                         bcm_vlan_t vlan, int pkt_prio,
    712                                         uint32 flags);
    713 
    714 extern int _bcm_trx_port_force_vlan_get(int unit, bcm_port_t port,
    715                                         bcm_vlan_t *vlan, int *pkt_prio, 
    716                                         uint32 *flags);
    717 extern int  _bcm_trx_port_dtag_mode_set(int unit, bcm_port_t port, int mode);
    718 extern int  _bcm_trx_port_dtag_mode_get(int unit, bcm_port_t port, int *mode);
    719 extern int _bcm_trx_lport_tab_default_entry_add(int unit, 
    720                                                 soc_profile_mem_t *prof);
    721 extern int _bcm_trx_egr_lport_tab_default_entry_add(int unit, 
    722                                                 soc_profile_mem_t *prof);
    723 extern int _bcm_trx_rtag7_tab_default_entry_add(int unit, 
    724                                                 soc_profile_mem_t *prof);
    725 extern int _bcm_trx_lport_tab_default_entry_index_get(int unit);
    726 extern int _bcm_trx_rtag7_tab_default_entry_index_get(int unit);
    727 extern int _bcm_trx_egr_lport_tab_default_entry_index_get(int unit);
    728 extern int _bcm_trx_port_control_egress_class_select_set(int unit, 
    729                                                          bcm_port_t port,
    730                                                          uint32 value);
    731 extern int _bcm_trx_port_control_egress_class_select_get(int unit, 
    732                                                          bcm_port_t port,
    733                                                          uint32 *value);
    734 extern int _bcm_trx_port_control_higig_class_select_set(int unit,
    735                                                          bcm_port_t port,
    736                                                          uint32 value);
    737 extern int _bcm_trx_port_control_higig_class_select_get(int unit,
    738                                                          bcm_port_t port,
    739                                                          uint32 *value);
    740 
    741 extern int _bcm_trx_gport_to_nhi_set(int unit, int gport,
    742                                         int nh_index);
    743 
    744 extern int _bcm_trx_gport_to_nhi_get(int unit, int gport, 
    745                                                   int* nh_index);
    746 
    747 /* HW encodings */
    748 #define _BCM_TRX_PORT_FORCE_FORWARD_DISABLE  0
    749 #define _BCM_TRX_PORT_FORCE_FORWARD_ALL      1
    750 #define _BCM_TRX_PORT_FORCE_FORWARD_LOCAL    2
    751 
    752 #if defined(BCM_FIELD_SUPPORT)
    753 #define _BCM_FIELD_SC_INGRESS_SINGLE_WIDE_SLICE_SZ  (128)
    754 #define _BCM_FIELD_SC_INGRESS_DOUBLE_WIDE_SLICE_SZ  (256)
    755 #define _BCM_FIELD_SC_INGRESS_DOUBLE_WIDE_SLICE0 (8) 
    756 #define _BCM_FIELD_TD_INGRESS_SINGLE_WIDE_SLICE_SZ  (128)
    757 #define _BCM_FIELD_TD_INGRESS_DOUBLE_WIDE_SLICE_SZ  (256)
    758 #define _BCM_FIELD_TD_INGRESS_DOUBLE_WIDE_SLICE0 (4) 
    759 #define _BCM_FIELD_TD2_INGRESS_LARGE_SLICE_SZ  (512)
    760 #define _BCM_FIELD_TD2_INGRESS_SMALL_SLICE_SZ  (256)
    761 #define _BCM_FIELD_TD2_INGRESS_DOUBLE_WIDE_SLICE0 (4) 
    762 
    763 #define _FP_TRX_RANGE_CHECKER_LOWER_MAX (23)
    764 extern int _bcm_field_trx_tcp_ttl_tos_init(int unit);
    765 extern int _bcm_trx_range_checker_selcodes_update(int unit,
    766                                                   bcm_field_entry_t entry);
    767 extern int _bcm_field_trx_write_slice_map_vfp(int unit, _field_stage_t *stage_fc);
    768 extern int _bcm_field_trx_write_slice_map_egress(int unit, _field_stage_t *stage_fc);
    769 extern int _bcm_field_trx_mirror_ingress_add(int unit, soc_mem_t mem, 
    770                                              _field_entry_t *f_ent,
    771                                              _field_action_t *fa, uint32 *buf);
    772 extern int _bcm_field_trx_mirror_egress_add(int unit, soc_mem_t mem, 
    773                                             _field_entry_t *f_ent,
    774                                             _field_action_t *fa, uint32 *buf);
    775 extern int _bcm_field_trx_mirror_ingress_delete(int unit, soc_mem_t mem, 
    776                                                 _field_entry_t *f_ent, 
    777                                                 bcm_gport_t *mirror_dest, 
    778                                                 uint32 *buf);
    779 extern int _bcm_field_trx_mirror_egress_delete(int unit, soc_mem_t mem, 
    780                                                _field_entry_t *f_ent, 
    781                                                bcm_gport_t *mirror_dest, 
    782                                                uint32 *buf);
    783 extern int _bcm_field_trx_action_support_check(int unit, _field_entry_t *f_ent,
    784                                                 bcm_field_action_t action, 
    785                                                 int *result);
    786 extern int _bcm_field_trx_stage_action_support_check(int                unit,
    787                                                      unsigned           stage,
    788                                                      bcm_field_action_t action, 
    789                                                      int                *result
    790                                                      );
    791 extern int _bcm_field_trx_action_conflict_check(int                unit,
    792                                                 _field_entry_t     *f_ent, 
    793                                                 bcm_field_action_t action1,
    794                                                 bcm_field_action_t action
    795                                                 );
    796 extern int _bcm_field_trx_qualify_ip_type(int unit, bcm_field_entry_t entry,
    797                                           bcm_field_IpType_t type,
    798                                           bcm_field_qualify_t qual);
    799 extern int _bcm_field_trx_qualify_ip_type_get(int unit, bcm_field_entry_t entry,
    800                                               bcm_field_IpType_t *type,
    801                                               bcm_field_qualify_t qual);
    802 extern int _bcm_field_trx_qualify_ip_type_encode_get(int unit, uint32 hw_data,
    803                                                      uint32 hw_mask,
    804                                                      bcm_field_IpType_t *type);
    805 extern int _bcm_field_trx_egress_key_match_type_set(int unit, 
    806                                                     _field_entry_t *f_ent);
    807 extern int _bcm_field_trx_action_delete(int unit, _field_entry_t *f_ent,
    808                                         _field_action_t *fa, int tcam_idx, 
    809                                         uint32 param0, uint32 param1);
    810 extern int _bcm_field_trx_tcam_get(int unit, soc_mem_t mem, 
    811                                    _field_entry_t *f_ent, uint32 *buf);
    812 extern int _bcm_field_trx_action_counter_update(int unit, soc_mem_t mem, 
    813                                                 _field_entry_t *f_ent, 
    814                                                 _field_action_t *fa,
    815                                                 uint32 *buf);
    816 extern int _bcm_field_trx_action_get(int unit, soc_mem_t mem,
    817                                      _field_entry_t *f_ent, 
    818                                       int tcam_idx, _field_action_t *fa, 
    819                                       uint32 *buf);
    820 extern int _bcm_field_trx_range_check_set(int unit, int range, uint32 flags, 
    821                                           int enable, bcm_l4_port_t min, 
    822                                           bcm_l4_port_t max);
    823 extern int _bcm_field_trx_redirect_profile_delete(int unit, int index);
    824 extern int _bcm_field_trx_redirect_profile_alloc(int unit, _field_entry_t *f_ent, 
    825                                           _field_action_t *fa);
    826 extern int _bcm_field_trx_redirect_profile_ref_count_get(int unit, int index,
    827                                                          int *ref_count);
    828 extern int _bcm_field_trx_stat_hw_mode_to_bmap(int unit, uint16 mode, 
    829                                                _field_stage_id_t stage_id, 
    830                                                uint32 *hw_bmap,
    831                                                uint8 *hw_entry_count);
    832 extern int _bcm_field_trx_stat_index_get(int unit, _field_stat_t *f_st, 
    833                                          bcm_field_stat_t stat,
    834                                          int *idx1, int *idx2, int *idx3, 
    835                                          uint32 *flags);
    836 extern int _bcm_field_trx_stat_action_set(int unit, _field_entry_t *f_ent, 
    837                                           soc_mem_t mem, int tcam_idx,
    838                                           uint32 *buf);
    839 extern int _bcm_field_trx_selcodes_install(int unit, _field_group_t *fg, 
    840                                            uint8 slice_numb, bcm_pbmp_t pbmp, 
    841                                            int selcode_index);
    842 extern int _bcm_field_trx_policer_install(int unit, _field_entry_t *f_ent, 
    843                                           _field_policer_t *f_pl);
    844 extern int _field_entry_policer_update_actual_hw_rates(int unit, 
    845         soc_mem_t policer_mem, int instance, _field_entry_t *f_ent, _field_policer_t *f_pl);
    846 extern int _bcm_field_trx_policer_packet_counter_get(int unit,
    847                                           _field_policer_t *f_pl, uint32 *count);
    848 extern int _bcm_field_trx_policer_packet_reset_counter_get(int unit,
    849                                           _field_policer_t *f_pl, uint32 *count);
    850 extern int _bcm_field_trx_policer_action_set(int unit, _field_entry_t *f_ent,
    851                                              soc_mem_t mem, uint32 *buf);
    852 extern int _bcm_field_trx_control_arp_set(int unit,  
    853                                           bcm_field_control_t control,
    854                                           uint32 state);
    855 extern int _bcm_field_trx_egress_selcode_get(int unit, _field_stage_t *stage_fc, 
    856                                bcm_field_qset_t *qset_req,
    857                                _field_group_t *fg);
    858 extern int _bcm_field_trx_slice_clear(int unit, _field_group_t *fg, _field_slice_t *fs); 
    859 extern int _bcm_field_trx_ingress_slice_clear(int unit, uint8 slice_numb);
    860 extern int _bcm_field_trx_egress_slice_clear(int unit, uint8 slice_numb);
    861 extern int _bcm_field_trx_action_params_check(int unit,_field_entry_t *f_ent, 
    862                                                _field_action_t *fa);
    863 extern int
    864 _bcm_field_trx_vlan_format_qualify_is_double_tagged(unsigned data,
    865                                                     unsigned mask
    866                                                     );
    867 extern int
    868 _bcm_field_trx_action_depends_check(int             unit,
    869                                     _field_entry_t  *f_ent, 
    870                                     _field_action_t *fa
    871                                     );
    872 extern int _bcm_field_trx2_data_qualifier_ethertype_delete(int unit, int qual_id,
    873                                  bcm_field_data_ethertype_t *etype);
    874 extern int _bcm_field_trx2_data_qualifier_ethertype_add(int unit, int qual_id,
    875                                  bcm_field_data_ethertype_t *etype);
    876 extern int _bcm_field_trx2_data_qualifier_ip_protocol_add(int unit,  int qual_id,
    877                           bcm_field_data_ip_protocol_t *ip_protocol);
    878 extern int _bcm_field_trx2_data_qualifier_ip_protocol_delete(int unit,  int qual_id,
    879                           bcm_field_data_ip_protocol_t *ip_protocol);
    880 extern int _bcm_field_trx2_data_qualifier_packet_format_add(int unit,int qual_id,
    881                                 bcm_field_data_packet_format_t *packet_format);
    882 extern int _bcm_field_trx2_data_qualifier_packet_format_delete(int unit,int qual_id,
    883                                 bcm_field_data_packet_format_t *packet_format);
    884 extern int _bcm_field_trx2_l2_actions_hw_free(int unit, _field_entry_t *f_ent,
    885                                              uint32 flags);
    886 extern int _bcm_field_trx2_l2_actions_hw_alloc(int unit, _field_entry_t *f_ent);
    887 extern int _bcm_field_trx2_udf_tcam_entry_parse(int unit, uint32 *hw_buf, uint32 *flags);
    888 extern int _bcm_field_trx_ingress_pfs_bmap_get(int            unit,
    889                                                _field_group_t *fg,
    890                                                bcm_pbmp_t     *pbmp,
    891                                                int            selcode_index,
    892                                                SHR_BITDCL     *pfs_bmp
    893                                                );
    894 extern int _bcm_field_trx_ingress_selcodes_install(int            unit,
    895                                                    _field_group_t *fg,
    896                                                    uint8          slice_num,
    897                                                    bcm_pbmp_t     *pbmp,
    898                                                    int            selcode_idx
    899                                                    );
    900 extern int _bcm_field_trx_mode_set(int            unit,
    901                                    uint8          slice_numb,
    902                                    _field_group_t *fg,
    903                                    uint8          flags
    904                                    );
    905 extern int _bcm_field_trx_egress_mode_set(int            unit,
    906                                           uint8          slice_numb,
    907                                           _field_group_t *fg,
    908                                           uint8          flags
    909                                           );
    910 extern int _field_trx_group_qual_add(_bcm_field_group_qual_t *grp_qual,
    911                                      unsigned                 qid,
    912                                      _bcm_field_qual_offset_t *qual_offset
    913                                      );
    914 
    915 extern int _bcm_field_trx_qset_get(int unit, bcm_field_qset_t *qset_in,
    916                                    _field_stage_t *stage_fc,
    917                                    int pri_sel_val_primary,
    918                                    int pri_sel_val_secondary,
    919                                    bcm_field_qset_t *qset_out,
    920                                    _field_group_t *fg);
    921 
    922 extern int _bcm_field_trx_egress_default_selcode_get(int unit, 
    923                                                      _field_stage_t *stage_fc,
    924                                                      bcm_field_qset_t *qset_req,
    925                                                      uint8 key_pri, 
    926                                                      uint8 key_sec,
    927                                                      _field_group_t *fg);
    928 
    929 extern int _bcm_field_trx_lookup_selcodes_install(int unit, 
    930                                                   _field_group_t *fg,
    931                                                   uint8 slice_numb, 
    932                                                   int selcode_index);
    933 
    934 extern int _bcm_field_trx_policer_hw_update(int unit, _field_entry_t *f_ent,
    935                                      _field_policer_t *f_pl, uint8 index_mtr,
    936                                      uint32 bucket_size, uint32 refresh_rate,
    937                                      uint32 granularity, soc_mem_t meter_table);
    938 
    939 extern const soc_field_t _bcm_trx2_aux_tag_1_field[], _bcm_trx2_aux_tag_2_field[];
    940 extern const soc_field_t _bcm_field_trx_vfp_double_wide_sel[];
    941 extern const soc_field_t _bcm_field_trx_vfp_field_sel[][2];
    942 extern const soc_field_t _bcm_field_trx_vfp_ip_header_sel[];
    943 extern const soc_field_t _bcm_field_trx_slice_pairing_field[];
    944 extern const soc_field_t _bcm_field_trx_dw_f4_sel[];
    945 extern const soc_field_t _bcm_field_trx_slice_wide_mode_field[16];
    946 extern const soc_field_t _bcm_field_trx_field_sel[16][3];
    947 extern const soc_field_t _bcm_field_trx_d_type_sel[];
    948 extern const soc_field_t _bcm_field_trx_s_type_sel[];
    949 extern const soc_field_t _trx_ifp_double_wide_key[];
    950 extern const soc_field_t _bcm_trx2_vrf_force_forwarding_enable_field[];
    951 extern const soc_field_t _bcm_ifp_normalize_fldtbl[][2];
    952 #endif /* BCM_FIELD_SUPPORT */
    953 extern int _bcm_trx_vlan_block_set (int unit, bcm_vlan_t vid, 
    954                                     bcm_vlan_block_t *block);
    955 extern int _bcm_trx_vlan_block_get (int unit, bcm_vlan_t vid, 
    956                                     bcm_vlan_block_t *block);
    957 extern int _bcm_trx_vp_tpid_add(int unit, bcm_gport_t vport, uint16 tpid, int color_select);
    958 extern int _bcm_trx_vp_tpid_delete(int unit, bcm_gport_t vport, uint16 tpid);
    959 extern int _bcm_trx_vp_tpid_delete_all(int unit, bcm_gport_t vport);
    960 extern int _bcm_trx_vp_tpid_set(int unit, bcm_gport_t vport, uint16 tpid);
    961 extern int _bcm_trx_vp_tpid_get(int unit, bcm_gport_t vport, uint16 *tpid);
    962 extern int _bcm_trx_vp_tpid_get_all(int unit, bcm_gport_t vport, int size,
    963                          uint16 *tpid_array, int *color_array, int *count);
    964 
    965 extern int _bcm_trx_port_cml_hw2flags(int unit, uint32 val, uint32 *flgas);
    966 extern int _bcm_trx_port_cml_flags2hw(int unit, uint32 flags, uint32 *val);
    967 
    968 extern int _bcm_trx_defip128_used_count_get(int unit);
    969 extern int _bcm_trx_defip128_idx_max_get(int unit);
    970 extern int _bcm_trx_defip128_array_idx_prefix_len_get(int unit, int arr_idx);
    971 extern int _field_trx_meter_table_get(int unit, _field_stage_id_t stage_id,
    972                                       soc_mem_t *mem_x, soc_mem_t *mem_y);
    973 #endif /* BCM_TRX_SUPPORT */
    974 #if defined(BCM_TRIDENT_SUPPORT)
    975 extern int _bcm_field_trident_stat_hw_mode_to_bmap(int unit, uint16 mode, 
    976                                                _field_stage_id_t stage_id, 
    977                                                uint32 *hw_bmap,
    978                                                uint8 *hw_entry_count);
    979 #endif /* BCM_TRIDENT_SUPPORT */
    980 
    981 #if defined(BCM_TRIDENT2_SUPPORT)
    982 
    983 extern int _bcm_trx_ing_vlan_action_profile_entry_no_mod_add(
    984                                int                                 unit, 
    985                                ing_vlan_tag_action_profile_entry_t *entry, 
    986                                uint32                              *index);
    987 extern int _bcm_trx_egr_vlan_action_profile_entry_no_mod_add(
    988                                int                                 unit, 
    989                                egr_vlan_tag_action_profile_entry_t *entry, 
    990                                uint32                              *index);
    991 #endif /* BCM_TRIDENT2_SUPPORT */
    992 
    993 
    994 #ifdef BCM_FLOWTRACKER_SUPPORT
    995 extern int
    996 bcmi_ft_group_age_profile_entry_add(int unit, void **entries,
    997                               int entries_per_set, uint32 *index);
    998 
    999 extern int
   1000 bcmi_ft_group_age_profile_entry_delete(int unit, int index);
   1001 
   1002 extern int
   1003 bcmi_ft_group_age_profile_refcount_set(int unit, uint32 index);
   1004 
   1005 extern int
   1006 bcmi_ft_group_flow_limit_profile_entry_add(int unit, void **entries,
   1007                               int entries_per_set, uint32 *index);
   1008 
   1009 extern int
   1010 bcmi_ft_group_flow_limit_profile_entry_delete(int unit, int index);
   1011 
   1012 extern int
   1013 bcmi_ft_group_flow_limit_profile_refcount_set(int unit, uint32 index);
   1014 
   1015 
   1016 extern int
   1017 bcmi_ft_group_collector_copy_profile_entry_add(int unit, void **entries,
   1018                               int entries_per_set, uint32 *index);
   1019 
   1020 extern int
   1021 bcmi_ft_group_collector_copy_profile_entry_delete(int unit, int index);
   1022 
   1023 extern int
   1024 bcmi_ft_group_collector_copy_profile_refcount_set(int unit, uint32 index);
   1025 
   1026 
   1027 int
   1028 bcmi_ft_group_pdd_profile_entry_add(int unit, void **entries,
   1029                               int entries_per_set, uint32 *index);
   1030 
   1031 int
   1032 bcmi_ft_group_pdd_profile_entry_delete(int unit, int index);
   1033 
   1034 extern int
   1035 bcmi_ft_group_pdd_profile_refcount_set(int unit, uint32 index);
   1036 
   1037 int
   1038 bcmi_ft_group_pdd_profile_refcount_get(int unit,
   1039                             int index, int *ref_cnt);
   1040 
   1041 int
   1042 bcmi_ft_group_meter_profile_entry_add(int unit, void **entries,
   1043                               int entries_per_set, uint32 *index);
   1044 int
   1045 bcmi_ft_group_meter_profile_entry_delete(int unit, int index);
   1046 
   1047 extern int
   1048 bcmi_ft_group_meter_profile_refcount_set(int unit, uint32 index);
   1049 
   1050 
   1051 int
   1052 bcmi_ft_group_timestamp_profile_entry_add(int unit, void **entries,
   1053                               int entries_per_set, uint32 *index);
   1054 int
   1055 bcmi_ft_group_timestamp_profile_entry_delete(int unit, int index);
   1056 
   1057 extern int
   1058 bcmi_ft_group_timestamp_profile_refcount_set(int unit, uint32 index);
   1059 
   1060 #endif /* BCM_FLOWTRACKER_SUPPORT */
   1061 
   1062 
   1063 extern int _bcm_trx_system_reserved_vlan_ing_set(int unit, int arg);
   1064 extern int _bcm_trx_system_reserved_vlan_egr_set(int unit, int arg);
   1065 extern int _bcm_trx_system_reserved_vlan_ing_get(int unit, int *arg);
   1066 
   1067 extern int _vlan_block_bitmap_min(int unit, bcm_pbmp_t *array,
   1068                                   int arr_size, bcm_pbmp_t *min_pbm);
   1069 extern int _vlan_block_bitmap_clear(int unit, bcm_pbmp_t *array,
   1070                                     int arr_size, bcm_pbmp_t mask);
   1071 extern int _vlan_block_select_get(int unit, bcm_pbmp_t request,
   1072                                   bcm_pbmp_t first, bcm_pbmp_t second,
   1073                                   uint8 *sel);
   1074 extern int _vlan_block_mask_create(int unit, bcm_pbmp_t first_mask,
   1075                                    bcm_pbmp_t second_mask, uint8 select,
   1076                                    bcm_pbmp_t *result_mask);
   1077 
   1078 #if defined(BCM_TRX_SUPPORT)
   1079 extern int _bcm_trx_vlan_match_action_add(int unit, uint32 options,
   1080                                     bcm_gport_t svp_port,
   1081                                     bcm_vlan_match_info_t *vlan_match_info,
   1082                                     bcm_vlan_action_set_t *action_set);
   1083 extern int _bcm_trx_vlan_match_action_get(int unit, bcm_gport_t svp_port,
   1084                                     bcm_vlan_match_info_t *vlan_match_info,
   1085                                     bcm_vlan_action_set_t *action_set);
   1086 extern int _bcm_trx_vlan_match_action_delete(int unit, bcm_gport_t svp_port,
   1087                                     bcm_vlan_match_info_t *vlan_match_info);
   1088 extern int _bcm_trx_vlan_match_action_multi_get(int unit,
   1089                                     bcm_vlan_match_t match,
   1090                                     bcm_gport_t svp_port, int size,
   1091                                     bcm_vlan_match_info_t *match_info_array,
   1092                                     bcm_vlan_action_set_t *action_set, int *count);
   1093 extern int _bcm_vlan_match_action_multi_get(int unit, bcm_gport_t port,
   1094                                     int size, bcm_port_match_info_t *match_array,
   1095                                     int start, int *count);
   1096 extern int _bcm_trx_vlan_match_action_delete_all(int unit,
   1097                                     bcm_vlan_match_t match, bcm_gport_t svp_port);
   1098 #endif /* BCM_TRX_SUPPORT */
   1099 
   1100 #endif  /* !_BCM_INT_TRX_H_ */