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