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

bfcmap.h (26524B)


      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 
      8 #ifndef BFCMAP_H
      9 #define BFCMAP_H
     10 
     11 #include <shared/fcmap.h>
     12 
     13 #include <shared/bsl.h>
     14 
     15 /*
     16  * Initilaize the BFCMAP module.
     17  */
     18 extern int bfcmap_init(void);
     19 
     20 /*
     21  * Attach console/debug functions to BFCMAP module.
     22  */
     23 typedef _shr_bfcmap_print_fn bfcmap_print_fn;
     24 
     25 #define BFCMAP_PRINT_DEBUG      BPRINT_FN_DEBUG
     26 #define BFCMAP_PRINT_PRINTF     BPRINT_FN_PRINTF
     27 
     28 /*
     29  * The following function sets/gets the print function pointers for
     30  * BFCMAP module. If the flag to this function is Zero, no printf are
     31  * done. If the flag is BFCMAP_PRINT_DEBUG, it sets the print function
     32  * pointer for the BFCMAP driver and API module.
     33  * If the flag is BFCMAP_PRINT_PRINTF, it sets the function pointer
     34  * for all other non-debug printf.
     35  */
     36 extern int 
     37 bfcmap_config_print_set(buint32_t flag, bfcmap_print_fn print_cb_fn);
     38 
     39 extern int 
     40 bfcmap_config_print_get(buint32_t *flag, bfcmap_print_fn *print_fn_cb);
     41 
     42 
     43 /*
     44  * Enum for traffic direction. 
     45  * Ingress traffic is defined as the one coming from the Line side.
     46  * Egress traffic is defined as coming from the switch/ASIC side.
     47  */
     48 typedef enum {
     49         BFCMAP_DIR_EGRESS  = _SHR_BFCMAP_DIR_EGRESS ,
     50         BFCMAP_DIR_INGRESS = _SHR_BFCMAP_DIR_INGRESS
     51 } bfcmap_dir_t;
     52 
     53 /*
     54  * Identifiers for BFCMAP core type.
     55  */
     56 typedef enum {
     57     BFCMAP_CORE_UNKNOWN = _SHR_BFCMAP_CORE_UNKNOWN,
     58     BFCMAP_CORE_OCTAL_GIG = _SHR_BFCMAP_CORE_OCTAL_GIG,
     59     BFCMAP_CORE_BCM5458X = _SHR_BFCMAP_CORE_BCM5458X,
     60     BFCMAP_CORE_BCM5458X_B0 = _SHR_BFCMAP_CORE_BCM5458X_B0,
     61     BFCMAP_CORE_BCM8729 = _SHR_BFCMAP_CORE_BCM8729,
     62     BFCMAP_CORE_BCM8483X = _SHR_BFCMAP_CORE_BCM8483X,
     63     BFCMAP_CORE_BCM5438X = _SHR_BFCMAP_CORE_BCM5438X,
     64     BFCMAP_CORE_BCM84756 = _SHR_BFCMAP_CORE_BCM84756,
     65     BFCMAP_CORE_BCM84756_C0 = _SHR_BFCMAP_CORE_BCM84756_C0,
     66     BFCMAP_CORE_BCM88060_A0 = _SHR_BFCMAP_CORE_BCM88060_A0,
     67     BFCMAP_CORE_BCM88061_A0 = _SHR_BFCMAP_CORE_BCM88061_A0
     68 } bfcmap_core_t;
     69 
     70 
     71 
     72 
     73 /* BFCMAP port is Enabled. Default is disabled. */
     74 #define BFCMAP_PORT_ENABLE                               0x0000001
     75 
     76 /* Single secure channel i.e. point-to-point configuration or LAN mode */
     77 #define BFCMAP_PORT_SINGLE_CHANNEL                       0x0000002
     78 
     79 /* Ingress Store-forward mode. Default is cut-through mode. 
     80  * In cut-through mode bfcmap errors are indicated to switch by corrupted CRC,
     81  * whereas in store-forward mode, error indication can be provided in special 
     82  * VLAN header. */
     83 #define BFCMAP_PORT_INGRESS_STORE_FORWARD                0x0000004
     84 
     85 /* Egress store-forward mode */
     86 #define BFCMAP_PORT_EGRESS_STORE_FORWARD                 0x0000008
     87 
     88 
     89 
     90 /* Port Mode */
     91 typedef enum bfcmap_port_mode_s {
     92     BFCMAP_FCOE_TO_FC_MODE=_SHR_BFCMAP_FCOE_TO_FC_MODE,
     93     BFCMAP_FCOE_TO_FCOE_MODE=_SHR_BFCMAP_FCOE_TO_FCOE_MODE
     94 } bfcmap_port_mode_t;
     95 
     96 /* Port Speed */
     97 typedef enum bfcmap_port_speed_s  {
     98     BFCMAP_PORT_SPEED_AN = _SHR_BFCMAP_PORT_SPEED_AN,
     99     BFCMAP_PORT_SPEED_2GBPS =_SHR_BFCMAP_PORT_SPEED_2GBPS,
    100     BFCMAP_PORT_SPEED_4GBPS =_SHR_BFCMAP_PORT_SPEED_4GBPS,
    101     BFCMAP_PORT_SPEED_8GBPS =_SHR_BFCMAP_PORT_SPEED_8GBPS,
    102     BFCMAP_PORT_SPEED_16GBPS = _SHR_BFCMAP_PORT_SPEED_16GBPS,
    103     BFCMAP_PORT_SPEED_32GBPS = _SHR_BFCMAP_PORT_SPEED_32GBPS,
    104     BFCMAP_PORT_SPEED_AN_2GBPS =_SHR_BFCMAP_PORT_SPEED_AN_2GBPS,
    105     BFCMAP_PORT_SPEED_AN_4GBPS =_SHR_BFCMAP_PORT_SPEED_AN_4GBPS,
    106     BFCMAP_PORT_SPEED_AN_8GBPS =_SHR_BFCMAP_PORT_SPEED_AN_8GBPS,
    107     BFCMAP_PORT_SPEED_AN_16GBPS = _SHR_BFCMAP_PORT_SPEED_AN_16GBPS,
    108     BFCMAP_PORT_SPEED_AN_32GBPS = _SHR_BFCMAP_PORT_SPEED_AN_32GBPS,
    109     BFCMAP_PORT_SPEED_MAX_COUNT=_SHR_BFCMAP_PORT_SPEED_MAX_COUNT
    110 } bfcmap_port_speed_t;
    111 
    112 /* Port State */
    113 typedef enum bfcmap_port_state_s  {
    114     BFCMAP_PORT_STATE_INIT  = _SHR_BFCMAP_PORT_STATE_INIT,
    115     BFCMAP_PORT_STATE_RESET = _SHR_BFCMAP_PORT_STATE_RESET,
    116     BFCMAP_PORT_STATE_ACTIVE = _SHR_BFCMAP_PORT_STATE_ACTIVE,
    117     BFCMAP_PORT_STATE_LINKDOWN = _SHR_BFCMAP_PORT_STATE_LINKDOWN,
    118     BFCMAP_PORT_STATE_DISABLE = _SHR_BFCMAP_PORT_STATE_DISABLE,
    119     BFCMAP_PORT_STATE_MAX_COUNT = _SHR_BFCMAP_PORT_STATE_MAX_COUNT
    120 } bfcmap_port_state_t;
    121 
    122 typedef enum {
    123     BFCMAP_ENCAP_FCOE_FPMA             = 0,/* FPMA, use prefix and Node
    124                                              ID to construct FCoE MAC Address */
    125     BFCMAP_ENCAP_FCOE_ETH_ADDRESS_NULL = 1,/* Null address for FCOE MAC */
    126     BFCMAP_ENCAP_FCOE_ETH_ADDRESS_USER = 2/* User Provided Address */
    127 } bfcmap_encap_mac_address_t;
    128 
    129 
    130 typedef enum bfcmap_8g_fw_on_active_s {
    131     BFCMAP_8G_FW_ON_ACTIVE_ARBFF = _SHR_BFCMAP_8G_FW_ON_ACTIVE_ARBFF,
    132     BFCMAP_8G_FW_ON_ACTIVE_IDLE =  _SHR_BFCMAP_8G_FW_ON_ACTIVE_IDLE  
    133 } bfcmap_8g_fw_on_active_t;
    134 
    135 
    136 typedef enum bfcmap_map_table_input_e {
    137     BFCMAP_MAP_TABLE_INPUT_VID = _SHR_BFCMAP_MAP_TABLE_INPUT_VID, 
    138     BFCMAP_MAP_TABLE_INPUT_VFID = _SHR_BFCMAP_MAP_TABLE_INPUT_VFID 
    139 } bfcmap_map_table_input_t;
    140 
    141 typedef enum bfcmap_fc_crc_mode_e {
    142     BFCMAP_FC_CRC_MODE_NORMAL = _SHR_BFCMAP_FC_CRC_MODE_NORMAL, 
    143     BFCMAP_FC_CRC_MODE_NO_CRC_CHECK = _SHR_BFCMAP_FC_CRC_MODE_NO_CRC_CHECK 
    144 } bfcmap_fc_crc_mode_t;
    145 
    146 typedef enum bfcmap_vfthdr_proc_mode_e {
    147     BFCMAP_VFTHDR_PRESERVE = _SHR_BFCMAP_VFTHDR_PRESERVE, 
    148     BFCMAP_VFTHDR_INSERT = _SHR_BFCMAP_VFTHDR_INSERT, 
    149     BFCMAP_VFTHDR_DELETE = _SHR_BFCMAP_VFTHDR_DELETE 
    150 } bfcmap_vfthdr_proc_mode_t;
    151 
    152 typedef enum bfcmap_vlantag_proc_mode_e {
    153     BFCMAP_VLANTAG_PRESERVE = _SHR_BFCMAP_VLANTAG_PRESERVE, 
    154     BFCMAP_VLANTAG_INSERT = _SHR_BFCMAP_VLANTAG_INSERT, 
    155     BFCMAP_VLANTAG_DELETE = _SHR_BFCMAP_VLANTAG_DELETE 
    156 } bfcmap_vlantag_proc_mode_t;
    157 
    158 typedef enum bfcmap_vfid_mapsrc_e {
    159     BFCMAP_VFID_MACSRC_PASSTHRU = _SHR_BFCMAP_VFID_MACSRC_PASSTHRU, 
    160     BFCMAP_VFID_MACSRC_PORT_DEFAULT = _SHR_BFCMAP_VFID_MACSRC_PORT_DEFAULT, 
    161     BFCMAP_VFID_MACSRC_VID = _SHR_BFCMAP_VFID_MACSRC_VID, 
    162     BFCMAP_VFID_MACSRC_MAPPER = _SHR_BFCMAP_VFID_MACSRC_MAPPER,
    163     BFCMAP_VFID_MACSRC_DISABLE = _SHR_BFCMAP_VFID_MACSRC_DISABLE
    164 } bfcmap_vfid_mapsrc_t;
    165 
    166 typedef enum bfcmap_vid_mapsrc_e {
    167     BFCMAP_VID_MACSRC_PASSTHRU = _SHR_BFCMAP_VID_MACSRC_PASSTHRU, 
    168     BFCMAP_VID_MACSRC_PORT_DEFAULT = _SHR_BFCMAP_VID_MACSRC_PORT_DEFAULT, 
    169     BFCMAP_VID_MACSRC_VFID = _SHR_BFCMAP_VID_MACSRC_VFID, 
    170     BFCMAP_VID_MACSRC_MAPPER = _SHR_BFCMAP_VID_MACSRC_MAPPER 
    171 } bfcmap_vid_mapsrc_t;
    172 
    173 typedef enum bfcmap_vlan_pri_map_mode_e {
    174     BFCMAP_VLAN_PRI_MAP_MODE_PORT_DEFAULT = _SHR_BFCMAP_VLAN_PRI_MAP_MODE_PORT_DEFAULT, 
    175     BFCMAP_VLAN_PRI_MAP_MODE_PASSTHRU = _SHR_BFCMAP_VLAN_PRI_MAP_MODE_PASSTHRU 
    176 } bfcmap_vlan_pri_map_mode_t;
    177 
    178 typedef enum bfcmap_hopcnt_check_mode_e {
    179     BFCMAP_HOPCNT_CHECK_MODE_NO_CHK = _SHR_BFCMAP_HOPCNT_CHECK_MODE_NO_CHK,
    180     BFCMAP_HOPCNT_CHECK_MODE_FAIL_DROP = _SHR_BFCMAP_HOPCNT_CHECK_MODE_FAIL_DROP,
    181     BFCMAP_HOPCNT_CHECK_MODE_FAIL_EOFNI = _SHR_BFCMAP_HOPCNT_CHECK_MODE_FAIL_EOFNI
    182 }  bfcmap_hopcnt_check_mode_t;
    183 
    184 
    185 /* action_mask/action_mask2 field in  bfcmap_port_config_t */
    186 #define BFCMAP_ATTR_PORT_MODE_MASK                  _SHR_FCMAP_ATTR_PORT_MODE_MASK 
    187 #define BFCMAP_ATTR_SPEED_MASK                      _SHR_FCMAP_ATTR_SPEED_MASK 
    188 #define BFCMAP_ATTR_TX_BB_CREDITS_MASK              _SHR_FCMAP_ATTR_TX_BB_CREDITS_MASK 
    189 #define BFCMAP_ATTR_RX_BB_CREDITS_MASK              _SHR_FCMAP_ATTR_RX_BB_CREDITS_MASK 
    190 #define BFCMAP_ATTR_MAX_FRAME_LENGTH_MASK           _SHR_FCMAP_ATTR_MAX_FRAME_LENGTH_MASK 
    191 #define BFCMAP_ATTR_BB_SC_N_MASK                    _SHR_FCMAP_ATTR_BB_SC_N_MASK 
    192 #define BFCMAP_ATTR_PORT_STATE_MASK                 _SHR_FCMAP_ATTR_PORT_STATE_MASK 
    193 #define BFCMAP_ATTR_R_T_TOV_MASK                    _SHR_FCMAP_ATTR_R_T_TOV_MASK 
    194 #define BFCMAP_ATTR_INTERRUPT_ENABLE_MASK           _SHR_FCMAP_ATTR_INTERRUPT_ENABLE_MASK 
    195 #define BFCMAP_ATTR_FW_ON_ACTIVE_8G_MASK            _SHR_FCMAP_ATTR_FW_ON_ACTIVE_8G_MASK 
    196 #define BFCMAP_ATTR_SRC_MAC_CONSTRUCT_MASK          _SHR_FCMAP_ATTR_SRC_MAC_CONSTRUCT_MASK 
    197 #define BFCMAP_ATTR_DST_MAC_CONSTRUCT_MASK          _SHR_FCMAP_ATTR_DST_MAC_CONSTRUCT_MASK 
    198 #define BFCMAP_ATTR_VLAN_TAG_MASK                   _SHR_FCMAP_ATTR_VLAN_TAG_MASK 
    199 #define BFCMAP_ATTR_VFT_TAG_MASK                    _SHR_FCMAP_ATTR_VFT_TAG_MASK 
    200 #define BFCMAP_ATTR_MAPPER_LEN_MASK                 _SHR_FCMAP_ATTR_MAPPER_LEN_MASK 
    201 #define BFCMAP_ATTR_INGRESS_MAPPER_BYPASS_MASK      _SHR_FCMAP_ATTR_INGRESS_MAPPER_BYPASS_MASK 
    202 #define BFCMAP_ATTR_EGRESS_MAPPER_BYPASS_MASK       _SHR_FCMAP_ATTR_EGRESS_MAPPER_BYPASS_MASK 
    203 #define BFCMAP_ATTR_INGRESS_MAP_TABLE_INPUT_MASK    _SHR_FCMAP_ATTR_INGRESS_MAP_TABLE_INPUT_MASK 
    204 #define BFCMAP_ATTR_EGRESS_MAP_TABLE_INPUT_MASK     _SHR_FCMAP_ATTR_EGRESS_MAP_TABLE_INPUT_MASK 
    205 #define BFCMAP_ATTR_INGRESS_FC_CRC_MODE_MASK        _SHR_FCMAP_ATTR_INGRESS_FC_CRC_MODE_MASK 
    206 #define BFCMAP_ATTR_EGRESS_FC_CRC_MODE_MASK         _SHR_FCMAP_ATTR_EGRESS_FC_CRC_MODE_MASK 
    207 #define BFCMAP_ATTR_INGRESS_VFTHDR_PROC_MODE_MASK   _SHR_FCMAP_ATTR_INGRESS_VFTHDR_PROC_MODE_MASK 
    208 #define BFCMAP_ATTR_EGRESS_VFTHDR_PROC_MODE_MASK    _SHR_FCMAP_ATTR_EGRESS_VFTHDR_PROC_MODE_MASK 
    209 #define BFCMAP_ATTR_INGRESS_VLANTAG_PROC_MODE_MASK  _SHR_FCMAP_ATTR_INGRESS_VLANTAG_PROC_MODE_MASK 
    210 #define BFCMAP_ATTR_EGRESS_VLANTAG_PROC_MODE_MASK   _SHR_FCMAP_ATTR_EGRESS_VLANTAG_PROC_MODE_MASK 
    211 #define BFCMAP_ATTR_INGRESS_VFID_MAPSRC_MASK        _SHR_FCMAP_ATTR_INGRESS_VFID_MAPSRC_MASK 
    212 #define BFCMAP_ATTR_EGRESS_VFID_MAPSRC_MASK         _SHR_FCMAP_ATTR_EGRESS_VFID_MAPSRC_MASK 
    213 #define BFCMAP_ATTR_INGRESS_VID_MAPSRC_MASK         _SHR_FCMAP_ATTR_INGRESS_VID_MAPSRC_MASK 
    214 #define BFCMAP_ATTR_EGRESS_VID_MAPSRC_MASK          _SHR_FCMAP_ATTR_EGRESS_VID_MAPSRC_MASK 
    215 #define BFCMAP_ATTR_INGRESS_VLAN_PRI_MAP_MODE_MASK  _SHR_FCMAP_ATTR_INGRESS_VLAN_PRI_MAP_MODE_MASK 
    216 #define BFCMAP_ATTR_EGRESS_VLAN_PRI_MAP_MODE_MASK   _SHR_FCMAP_ATTR_EGRESS_VLAN_PRI_MAP_MODE_MASK 
    217 #define BFCMAP_ATTR_INGRESS_HOPCNT_CHECK_MODE_MASK  _SHR_FCMAP_ATTR_INGRESS_HOPCNT_CHECK_MODE_MASK 
    218 #define BFCMAP_ATTR2_EGRESS_HOPCNT_DEC_ENABLE_MASK  _SHR_FCMAP_ATTR2_EGRESS_HOPCNT_DEC_ENABLE_MASK
    219 #define BFCMAP_ATTR2_USE_TTS_PCS_16G_MASK           _SHR_FCMAP_ATTR2_USE_TTS_PCS_16G_MASK
    220 #define BFCMAP_ATTR2_USE_TTS_PCS_32G_MASK           _SHR_FCMAP_ATTR2_USE_TTS_PCS_32G_MASK
    221 #define BFCMAP_ATTR2_TRAINING_ENABLE_16G_MASK       _SHR_FCMAP_ATTR2_TRAINING_ENABLE_16G_MASK
    222 #define BFCMAP_ATTR2_TRAINING_ENABLE_32G_MASK       _SHR_FCMAP_ATTR2_TRAINING_ENABLE_32G_MASK
    223 #define BFCMAP_ATTR2_FEC_ENABLE_16G_MASK            _SHR_FCMAP_ATTR2_FEC_ENABLE_16G_MASK
    224 #define BFCMAP_ATTR2_FEC_ENABLE_32G_MASK            _SHR_FCMAP_ATTR2_FEC_ENABLE_32G_MASK
    225 #define BFCMAP_ATTR2_INGRESS_FCS_CRRPT_EOF_ENABLE_MASK     _SHR_FCMAP_ATTR2_INGRESS_FCS_CRRPT_EOF_ENABLE_MASK
    226 #define BFCMAP_ATTR2_INGRESS_VLANTAG_PRESENCE_ENABLE_MASK  _SHR_FCMAP_ATTR2_INGRESS_VLANTAG_PRESENCE_ENABLE_MASK
    227 #define BFCMAP_ATTR2_EGRESS_HOPCNT_CHECK_MODE_MASK         _SHR_FCMAP_ATTR2_EGRESS_HOPCNT_CHECK_MODE_MASK
    228 #define BFCMAP_ATTR2_EGRESS_PASS_CTRL_FRAME_ENABLE_MASK    _SHR_FCMAP_ATTR2_EGRESS_PASS_CTRL_FRAME_ENABLE_MASK
    229 #define BFCMAP_ATTR2_EGRESS_PASS_PFC_FRAME_ENABLE_MASK     _SHR_FCMAP_ATTR2_EGRESS_PASS_PFC_FRAME_ENABLE_MASK
    230 #define BFCMAP_ATTR2_EGRESS_PASS_PAUSE_FRAME_ENABLE_MASK   _SHR_FCMAP_ATTR2_EGRESS_PASS_PAUSE_FRAME_ENABLE_MASK
    231 #define BFCMAP_ATTR2_EGRESS_FCOE_VER_CHK_DISABLE_MASK      _SHR_FCMAP_ATTR2_EGRESS_FCOE_VER_CHK_DISABLE_MASK
    232 #define BFCMAP_ATTR2_EGRESS_DEFAULT_COS_VALUE_MASK         _SHR_FCMAP_ATTR2_EGRESS_DEFAULT_COS_VALUE_MASK
    233 #define BFCMAP_ATTR2_EGRESS_USE_IP_COS_MAP_MASK            _SHR_FCMAP_ATTR2_EGRESS_USE_IP_COS_MAP_MASK
    234 #define BFCMAP_ATTR2_INGRESS_HOPCNT_DEC_ENABLE_MASK        _SHR_FCMAP_ATTR2_INGRESS_HOPCNT_DEC_ENABLE_MASK
    235 #define BFCMAP_ATTR2_SCRAMBLING_ENABLE_MASK                _SHR_FCMAP_ATTR2_SCRAMBLING_ENABLE_MASK
    236 #define BFCMAP_ATTR2_EGRESS_PAUSE_ENABLE_MASK              _SHR_FCMAP_ATTR2_EGRESS_PAUSE_ENABLE_MASK
    237 #define BFCMAP_ATTR2_EGRESS_PFC_ENABLE_MASK                _SHR_FCMAP_ATTR2_EGRESS_PFC_ENABLE_MASK
    238 #define BFCMAP_ATTR2_STAT_INTERVAL_MASK                    _SHR_FCMAP_ATTR2_STAT_INTERVAL_MASK
    239 #define BFCMAP_ATTR2_TRCM_ATTRIBS_MASK                     _SHR_FCMAP_ATTR2_TRCM_ATTRIBS_MASK
    240 #define BFCMAP_ATTR2_COS_TO_PRI_MASK                       _SHR_FCMAP_ATTR2_COS_TO_PRI_MASK
    241 
    242 #define BFCMAP_ATTR_ALL_MASK                        _SHR_FCMAP_ATTR_ALL_MASK
    243 #define BFCMAP_ATTR2_ALL_MASK                       _SHR_FCMAP_ATTR2_ALL_MASK
    244 
    245 
    246 /*
    247  * BFCMAP port configuration structure.
    248  */
    249 typedef _shr_bfcmap_port_config_t  bfcmap_port_config_t;
    250 
    251 /*
    252  * Set BFCMAP Port configuration.
    253  */
    254 extern int
    255 bfcmap_port_config_set(bfcmap_port_t p, bfcmap_port_config_t *cfg);
    256 
    257 /*
    258  * Get current BFCMAP Port configuration.
    259  */
    260 extern int
    261 bfcmap_port_config_get(bfcmap_port_t p, bfcmap_port_config_t *cfg);
    262 
    263 /*
    264  * Set BFCMAP Port configuration based on bitmask
    265  */
    266 extern int
    267 bfcmap_port_config_selective_set(bfcmap_port_t p, bfcmap_port_config_t *cfg);
    268 
    269 /*
    270  * Get BFCMAP Port configuration based on bitmask
    271  */
    272 extern int
    273 bfcmap_port_config_selective_get(bfcmap_port_t p, bfcmap_port_config_t *cfg);
    274 
    275 
    276 /*
    277  * Prototype for Port interation callback function.
    278  */
    279 typedef int (*bfcmap_port_traverse_cb)(bfcmap_port_t p, 
    280                                         bfcmap_core_t dev_core, 
    281                                         bfcmap_dev_addr_t dev_addr, 
    282                                         int dev_port, 
    283                                         bfcmap_dev_io_f devio_f, 
    284                                         void *user_data);
    285 
    286 /*
    287  * Iterates over all the BFCMAP ports and calls user provided callback
    288  * function for each port.
    289  */
    290 extern int bfcmap_port_traverse(bfcmap_port_traverse_cb callbk, 
    291                                 void *user_data);
    292 
    293 /*
    294  * BFCMAP VLAN - VSAN Mapping
    295  */
    296 typedef _shr_bfcmap_vlan_vsan_map_t  bfcmap_vlan_vsan_map_t;
    297 
    298 /*
    299  * Add entry into the VLAN to VSAN table for BFCMAP port
    300  */
    301 extern int
    302 bfcmap_vlan_map_add(bfcmap_port_t p, bfcmap_vlan_vsan_map_t *vlan);
    303 
    304 /*
    305  * Get entry from the VLAN to VSAN table for BFCMAP port
    306  */
    307 extern int
    308 bfcmap_vlan_map_get(bfcmap_port_t p, bfcmap_vlan_vsan_map_t *vlan);
    309 
    310 /*
    311  * Delete entry from the VLAN to VSAN table for BFCMAP port
    312  */
    313 extern int
    314 bfcmap_vlan_map_delete(bfcmap_port_t p, bfcmap_vlan_vsan_map_t *vlan);
    315 
    316 
    317 /*
    318  * BFCMAP Events that are triggered by the BFCMAP driver.
    319  */
    320 typedef enum {
    321     BFCMAP_EVENT_FC_LINK_INIT = _SHR_BFCMAP_EVENT_FC_LINK_INIT,
    322     BFCMAP_EVENT_FC_LINK_RESET = _SHR_BFCMAP_EVENT_FC_LINK_RESET,
    323     BFCMAP_EVENT_FC_LINK_DOWN = _SHR_BFCMAP_EVENT_FC_LINK_DOWN,
    324     BFCMAP_EVENT_FC_R_T_TIMEOUT = _SHR_BFCMAP_EVENT_FC_R_T_TIMEOUT,
    325     BFCMAP_EVENT_FC_E_D_TIMEOUT = _SHR_BFCMAP_EVENT_FC_E_D_TIMEOUT,
    326 
    327     BFCMAP_EVENT__COUNT = _SHR_BFCMAP_EVENT__COUNT
    328 } bfcmap_event_t;
    329 
    330 /*
    331  * BFCMAP event handler entry function. This function is/should be called
    332  * by the user either periodically or when when an interrupt is triggered.
    333  * This function will collect the pending events reported by the HW and call
    334  * the user provided callbacks for vaious events.
    335  */
    336 int bfcmap_event_handler(bfcmap_dev_addr_t dev_addr);
    337 
    338 /*
    339  * Prototype for the event callback function.
    340  */
    341 typedef int (*bfcmap_event_cb_fn)(bfcmap_port_t p,      /* Port ID          */
    342                                   bfcmap_event_t event, /* Event            */
    343                                   void *user_data);         /* secure assoc ID  */
    344 
    345 /*
    346  * Register user event handler callback function.
    347  */
    348 extern int 
    349 bfcmap_event_register(bfcmap_event_cb_fn cb, void *user_data);
    350                                
    351 /*
    352  * Unregister user event handler callabck function.
    353  */
    354 extern int 
    355 bfcmap_event_unregister(bfcmap_event_cb_fn cb);
    356 
    357 /*
    358  * Enables/Diable handling of the BFCMAP event.
    359  */
    360 extern int bfcmap_event_enable_set(bfcmap_event_t event, int enable);
    361 
    362 /*
    363  * Return the current event hanler status for specified event.
    364  */
    365 extern int bfcmap_event_enable_get(bfcmap_event_t event, int *enable);
    366 
    367 /*
    368  * The following enums define the stats/couter types.
    369  */
    370 typedef enum {
    371         fc_rxdebug0=_shr_fc_rxdebug0,
    372         fc_rxdebug1=_shr_fc_rxdebug1,
    373         fc_rxunicastpkts=_shr_fc_rxunicastpkts,
    374         fc_rxgoodframes=_shr_fc_rxgoodframes,
    375         fc_rxbcastpkts=_shr_fc_rxbcastpkts,
    376         fc_rxbbcredit0=_shr_fc_rxbbcredit0,
    377         fc_rxinvalidcrc=_shr_fc_rxinvalidcrc,
    378         fc_rxframetoolong=_shr_fc_rxframetoolong,
    379         fc_rxtruncframes=_shr_fc_rxtruncframes,
    380         fc_rxdelimitererr=_shr_fc_rxdelimitererr,
    381         fc_rxothererr=_shr_fc_rxothererr,
    382         fc_rxruntframes=_shr_fc_rxruntframes,
    383         fc_rxlipcount=_shr_fc_rxlipcount,
    384         fc_rxnoscount=_shr_fc_rxnoscount,
    385         fc_rxerrframes=_shr_fc_rxerrframes,
    386         fc_rxdropframes=_shr_fc_rxdropframes,
    387         fc_rxlinkfail=_shr_fc_rxlinkfail,
    388         fc_rxlosssync=_shr_fc_rxlosssync,
    389         fc_rxlosssig=_shr_fc_rxlosssig,
    390         fc_rxprimseqerr=_shr_fc_rxprimseqerr,
    391         fc_rxinvalidword=_shr_fc_rxinvalidword,
    392         fc_rxinvalidset=_shr_fc_rxinvalidset,
    393         fc_rxencodedisparity=_shr_fc_rxencodedisparity,
    394         fc_rxbyt=_shr_fc_rxbyt,
    395         fc_txdebug0=_shr_fc_txdebug0,
    396         fc_txdebug1=_shr_fc_txdebug1,
    397         fc_txunicastpkts=_shr_fc_txunicastpkts,
    398         fc_txbcastpkts=_shr_fc_txbcastpkts,
    399         fc_txbbcredit0=_shr_fc_txbbcredit0,
    400         fc_txgoodframes=_shr_fc_txgoodframes,
    401         fc_txfifounderrun=_shr_fc_txfifounderrun,
    402         fc_txdropframes=_shr_fc_txdropframes,
    403         fc_txbyt=_shr_fc_txbyt,
    404 
    405         fc_class2_rxgoodframes=_shr_fc_class2_rxgoodframes, 
    406         fc_class2_rxinvalidcrc=_shr_fc_class2_rxinvalidcrc, 
    407         fc_class2_rxframetoolong=_shr_fc_class2_rxframetoolong, 
    408         fc_class3_rxgoodframes=_shr_fc_class3_rxgoodframes, 
    409         fc_class3_rxinvalidcrc=_shr_fc_class3_rxinvalidcrc, 
    410         fc_class3_rxframetoolong=_shr_fc_class3_rxframetoolong, 
    411         fc_classf_rxgoodframes=_shr_fc_classf_rxgoodframes, 
    412         fc_classf_rxinvalidcrc=_shr_fc_classf_rxinvalidcrc, 
    413         fc_classf_rxframetoolong=_shr_fc_classf_rxframetoolong, 
    414         fc_rxbbc0drop=_shr_fc_rxbbc0drop, 
    415         fc_rxsyncfail=_shr_fc_rxsyncfail, 
    416         fc_rxbadxword=_shr_fc_rxbadxword, 
    417         fc_class2_rxruntframes=_shr_fc_class2_rxruntframes, 
    418         fc_class3_rxruntframes=_shr_fc_class3_rxruntframes, 
    419         fc_classf_rxruntframes=_shr_fc_classf_rxruntframes, 
    420         fc_class2_rxbyt=_shr_fc_class2_rxbyt, 
    421         fc_class3_rxbyt=_shr_fc_class3_rxbyt, 
    422         fc_classf_rxbyt=_shr_fc_classf_rxbyt, 
    423         fc_class2_txframes=_shr_fc_class2_txframes, 
    424         fc_class3_txframes=_shr_fc_class3_txframes, 
    425         fc_classf_txframes=_shr_fc_classf_txframes, 
    426         fc_txframes=_shr_fc_txframes, 
    427         fc_class2_txoversized_frames=_shr_fc_class2_txoversized_frames, 
    428         fc_class3_txoversized_frames=_shr_fc_class3_txoversized_frames, 
    429         fc_classf_txoversized_frames=_shr_fc_classf_txoversized_frames, 
    430         fc_txoversized_frames=_shr_fc_txoversized_frames, 
    431         fc_class2_txbyt=_shr_fc_class2_txbyt, 
    432         fc_class3_txbyt=_shr_fc_class3_txbyt, 
    433         fc_classf_txbyt=_shr_fc_classf_txbyt, 
    434 
    435 	bfcmap_stat__count = _shr_bfcmap_stat__count
    436 } bfcmap_stat_t;
    437 
    438 /*
    439  * Crear all the stats for the specified port.
    440  */
    441 extern int bfcmap_stat_clear(bfcmap_port_t p);
    442 
    443 /*
    444  * Return the current statistics for the specified counter.
    445  */
    446 extern int bfcmap_stat_get(bfcmap_port_t p, bfcmap_stat_t stat, buint64_t *val);
    447 
    448 /*
    449  * Return the current statistics for the specified counter.
    450  */
    451 extern int bfcmap_stat_get32(bfcmap_port_t p, bfcmap_stat_t stat,
    452                              buint32_t *val);
    453 
    454 
    455 /* FC link failure trigger type */
    456 typedef enum bfcmap_lf_tr_e {
    457     BFCMAP_LF_TR_NONE = _SHR_BFCMAP_LF_TR_NONE,
    458     BFCMAP_LF_TR_PORT_INIT = _SHR_BFCMAP_LF_TR_PORT_INIT,
    459     BFCMAP_LF_TR_OPEN_LINK = _SHR_BFCMAP_LF_TR_OPEN_LINK,
    460     BFCMAP_LF_TR_LINK_FAILURE = _SHR_BFCMAP_LF_TR_LINK_FAILURE,
    461     BFCMAP_LF_TR_OLS_RCVD = _SHR_BFCMAP_LF_TR_OLS_RCVD,
    462     BFCMAP_LF_TR_NOS_RCVD = _SHR_BFCMAP_LF_TR_NOS_RCVD,
    463     BFCMAP_LF_TR_SYNC_LOSS = _SHR_BFCMAP_LF_TR_SYNC_LOSS,
    464     BFCMAP_LF_TR_BOUCELINK_FROM_ADMIN = _SHR_BFCMAP_LF_TR_BOUCELINK_FROM_ADMIN,
    465     BFCMAP_LF_TR_CHGSPEED_FROM_ADMIN = _SHR_BFCMAP_LF_TR_CHGSPEED_FROM_ADMIN,
    466     BFCMAP_LF_TR_DISABLE_FROM_ADMIN = _SHR_BFCMAP_LF_TR_DISABLE_FROM_ADMIN,
    467     BFCMAP_LF_TR_RESET_FROM_ADMIN = _SHR_BFCMAP_LF_TR_RESET_FROM_ADMIN,
    468     BFCMAP_LF_TR_LR_RCVD = _SHR_BFCMAP_LF_TR_LR_RCVD,
    469     BFCMAP_LF_TR_LRR_RCVD = _SHR_BFCMAP_LF_TR_LRR_RCVD,
    470     BFCMAP_LF_TR_ED_TOV = _SHR_BFCMAP_LF_TR_ED_TOV
    471 }  bfcmap_lf_tr_t;
    472 
    473 
    474 /* FC link failure reason code */
    475 typedef enum bfcmap_lf_rc_e {
    476     BFCMAP_LF_RC_NONE = _SHR_BFCMAP_LF_RC_NONE,
    477     BFCMAP_LF_RC_PORT_INIT = _SHR_BFCMAP_LF_RC_PORT_INIT,
    478     BFCMAP_LF_RC_OPEN_LINK = _SHR_BFCMAP_LF_RC_OPEN_LINK,
    479     BFCMAP_LF_RC_LINK_FAILURE = _SHR_BFCMAP_LF_RC_LINK_FAILURE,
    480     BFCMAP_LF_RC_OLS_RCVD = _SHR_BFCMAP_LF_RC_OLS_RCVD,
    481     BFCMAP_LF_RC_NOS_RCVD = _SHR_BFCMAP_LF_RC_NOS_RCVD,
    482     BFCMAP_LF_RC_SYNC_LOSS = _SHR_BFCMAP_LF_RC_SYNC_LOSS,
    483     BFCMAP_LF_RC_BOUCELINK_FROM_ADMIN = _SHR_BFCMAP_LF_RC_BOUCELINK_FROM_ADMIN,
    484     BFCMAP_LF_RC_CHGSPEED_FROM_ADMIN = _SHR_BFCMAP_LF_RC_CHGSPEED_FROM_ADMIN,
    485     BFCMAP_LF_RC_DISABLE_FROM_ADMIN = _SHR_BFCMAP_LF_RC_DISABLE_FROM_ADMIN,
    486     BFCMAP_LF_RC_RESET_FAILURE = _SHR_BFCMAP_LF_RC_RESET_FAILURE
    487 }  bfcmap_lf_rc_t;
    488 
    489 
    490 extern int bfcmap_port_linkfault_trigger_rc_get(bfcmap_port_t p, bfcmap_lf_tr_t *lf_trigger, bfcmap_lf_rc_t *lf_rc);
    491 
    492 
    493 typedef enum bfcmap_diag_code_e {
    494     BFCMAP_DIAG_OK = _SHR_BFCMAP_DIAG_OK,
    495     BFCMAP_DIAG_PORT_INIT = _SHR_BFCMAP_DIAG_PORT_INIT,
    496     BFCMAP_DIAG_OPEN_LINK = _SHR_BFCMAP_DIAG_OPEN_LINK,
    497     BFCMAP_DIAG_LINK_FAILURE = _SHR_BFCMAP_DIAG_LINK_FAILURE,
    498     BFCMAP_DIAG_OLS_RCVD = _SHR_BFCMAP_DIAG_OLS_RCVD,
    499     BFCMAP_DIAG_NOS_RCVD = _SHR_BFCMAP_DIAG_NOS_RCVD,
    500     BFCMAP_DIAG_SYNC_LOSS = _SHR_BFCMAP_DIAG_SYNC_LOSS,
    501     BFCMAP_DIAG_BOUCELINK_FROM_ADMIN = _SHR_BFCMAP_DIAG_BOUCELINK_FROM_ADMIN,
    502     BFCMAP_DIAG_CHGSPEED_FROM_ADMIN = _SHR_BFCMAP_DIAG_CHGSPEED_FROM_ADMIN,
    503     BFCMAP_DIAG_DISABLE_FROM_ADMIN = _SHR_BFCMAP_DIAG_DISABLE_FROM_ADMIN,
    504     BFCMAP_DIAG_AN_NO_SIGNAL = _SHR_BFCMAP_DIAG_AN_NO_SIGNAL,
    505     BFCMAP_DIAG_AN_TIMEOUT = _SHR_BFCMAP_DIAG_AN_TIMEOUT,
    506     BFCMAP_DIAG_PROTO_TIMEOUT = _SHR_BFCMAP_DIAG_PROTO_TIMEOUT
    507 }  bfcmap_diag_code_t;
    508 
    509 
    510 extern int bfcmap_port_diag_get(bfcmap_port_t p, bfcmap_diag_code_t *diag);
    511 
    512 extern int bfcmap_port_private_data_set(bfcmap_port_t p, buint8_t *data, int len);
    513 
    514 /*
    515  * BFCMAP Port create.
    516  * This API creates a BFCMAP port and binds the bfcmap_port_t
    517  * to particular bfcmap device/port.
    518  */
    519 extern int 
    520 bfcmap_port_create(bfcmap_port_t p,             /* port identifier    */
    521                     bfcmap_core_t dev_core,      /* device core type   */
    522                     bfcmap_dev_addr_t dev_addr,  /* device address     */
    523                     bfcmap_dev_addr_t uc_dev_addr,  /* uc device address */
    524                     int dev_port,                 /* device port index  */
    525                     bfcmap_dev_io_f devio_f,      /* device I/O callback*/
    526                     void *fcmap_port_cfg);        /* port config */
    527 
    528 /*
    529  * BFCMAP Port destroy.
    530  */
    531 extern int bfcmap_port_destroy(bfcmap_port_t p);
    532 
    533 /*
    534  * BFCMAP Port reset.
    535  * The FC link reset protocol perform LINK reset when protocol errors
    536  * are detected. The FC-2 protocol errors,
    537  * e.g. Receive frame when no B2B credits exist,
    538  *  timeout conditions need FC Link reset. 
    539  */
    540 extern int bfcmap_port_reset(bfcmap_port_t p);
    541 
    542 /*
    543  * BFCMAP Port shutdown.
    544  * Initiates FC link Online to Offline protocol on the FC port
    545  */
    546 extern int bfcmap_port_shutdown(bfcmap_port_t p);
    547 
    548 /*
    549  * BFCMAP Port Enable.
    550  * Enables FC link to Online from Offline
    551  */
    552 extern int bfcmap_port_link_enable(bfcmap_port_t p);
    553 
    554 /*
    555  * BFCMAP Port Bounce link.
    556  * Bounce FC link 
    557  */
    558 extern int bfcmap_port_bounce(bfcmap_port_t p);
    559 
    560 /*
    561  * BFCMAP Port Speed.
    562  * Sets FC link speed
    563  */
    564 extern int bfcmap_port_speed_set(bfcmap_port_t p, bfcmap_port_speed_t speed);
    565 
    566 typedef _shr_bfcmap_port_ability_t bfcmap_port_ability_t;
    567 
    568 /* port_ability_speed field values in bfcmap_port_ability_t */
    569 #define BFCMAP_PORT_ABILITY_SPEED_AN     _SHR_FCMAP_PORT_ABILITY_SPEED_AN       
    570 #define BFCMAP_PORT_ABILITY_SPEED_2GBPS  _SHR_FCMAP_PORT_ABILITY_SPEED_2GBPS
    571 #define BFCMAP_PORT_ABILITY_SPEED_4GBPS  _SHR_FCMAP_PORT_ABILITY_SPEED_4GBPS
    572 #define BFCMAP_PORT_ABILITY_SPEED_8GBPS  _SHR_FCMAP_PORT_ABILITY_SPEED_8GBPS
    573 #define BFCMAP_PORT_ABILITY_SPEED_16GBPS _SHR_FCMAP_PORT_ABILITY_SPEED_16GBPS
    574 #define BFCMAP_PORT_ABILITY_SPEED_32GBPS _SHR_FCMAP_PORT_ABILITY_SPEED_32GBPS
    575 
    576 /*
    577  * BFCMAP Port Speed Ability Set
    578  * Sets discrete port speeds for AN or single forced port speed
    579  */
    580 
    581 extern int bfcmap_port_ability_advert_set(bfcmap_port_t port, bfcmap_port_ability_t *ability_mask);
    582 
    583 /*
    584  * BFCMAP Port Speed Ability Get
    585  * Retrieves supported port speeds 
    586  */
    587 
    588 extern int bfcmap_port_ability_advert_get(bfcmap_port_t port, bfcmap_port_ability_t *ability_mask);
    589 
    590 #define BFCMAP_PORT_SCRAMBLING_SPEED_2GBPS  _SHR_FCMAP_PORT_SCRAMBLING_SPEED_2GBPS 
    591 #define BFCMAP_PORT_SCRAMBLING_SPEED_4GBPS  _SHR_FCMAP_PORT_SCRAMBLING_SPEED_4GBPS 
    592 #define BFCMAP_PORT_SCRAMBLING_SPEED_8GBPS  _SHR_FCMAP_PORT_SCRAMBLING_SPEED_8GBPS 
    593 #define BFCMAP_PORT_SCRAMBLING_SPEED_16GBPS _SHR_FCMAP_PORT_SCRAMBLING_SPEED_16GBPS 
    594 #define BFCMAP_PORT_SCRAMBLING_SPEED_32GBPS _SHR_FCMAP_PORT_SCRAMBLING_SPEED_32GBPS 
    595 
    596 #define BFCMAP_PORT_MODULE_NO_FW_I2C     _SHR_FCMAP_PORT_MODULE_NO_FW_I2C 
    597 #define BFCMAP_PORT_MODULE_IS_COPPER     _SHR_FCMAP_PORT_MODULE_IS_COPPER 
    598 #define BFCMAP_PORT_MODULE_SPEED_CAP32G  _SHR_FCMAP_PORT_MODULE_SPEED_CAP32G 
    599 #define BFCMAP_PORT_MODULE_SPEED_CAP16G  _SHR_FCMAP_PORT_MODULE_SPEED_CAP16G 
    600 #define BFCMAP_PORT_MODULE_SPEED_CAP8G   _SHR_FCMAP_PORT_MODULE_SPEED_CAP8G 
    601 #define BFCMAP_PORT_MODULE_SPEED_CAP4G   _SHR_FCMAP_PORT_MODULE_SPEED_CAP4G 
    602 #define BFCMAP_PORT_MODULE_FEC_CAP32G    _SHR_FCMAP_PORT_MODULE_FEC_CAP32G 
    603 #define BFCMAP_PORT_MODULE_FEC_CAP16G    _SHR_FCMAP_PORT_MODULE_FEC_CAP16G 
    604 #define BFCMAP_PORT_MODULE_IS_QSFP       _SHR_FCMAP_PORT_MODULE_IS_QSFP 
    605 #define BFCMAP_PORT_MODULE_SUPP_RS       _SHR_FCMAP_PORT_MODULE_SUPP_RS 
    606 #define BFCMAP_PORT_MODULE_RS_HRD_RX_CUTOFF _SHR_FCMAP_PORT_MODULE_RS_HRD_RX_CUTOFF 
    607 #define BFCMAP_PORT_MODULE_RS_HRD_TX_CUTOFF _SHR_FCMAP_PORT_MODULE_RS_HRD_TX_CUTOFF 
    608 
    609 /* Internal routines to malloc and free 8-byte aligned memory */
    610 extern void* bfcmap_int_dword_malloc(unsigned int size, char *s);
    611 extern void bfcmap_int_dword_free(void *addr);
    612 
    613 #endif /* BFCMAP_H */
    614