152fa7bf9SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */ 2f844a0eaSJeff Kirsher /* 32732ba56SRasesh Mody * Linux network driver for QLogic BR-series Converged Network Adapter. 4f844a0eaSJeff Kirsher */ 5f844a0eaSJeff Kirsher /* 62732ba56SRasesh Mody * Copyright (c) 2005-2014 Brocade Communications Systems, Inc. 72732ba56SRasesh Mody * Copyright (c) 2014-2015 QLogic Corporation 8f844a0eaSJeff Kirsher * All rights reserved 92732ba56SRasesh Mody * www.qlogic.com 10f844a0eaSJeff Kirsher */ 11f844a0eaSJeff Kirsher #ifndef __BFA_DEFS_CNA_H__ 12f844a0eaSJeff Kirsher #define __BFA_DEFS_CNA_H__ 13f844a0eaSJeff Kirsher 14f844a0eaSJeff Kirsher #include "bfa_defs.h" 15f844a0eaSJeff Kirsher 161aa8b471SBen Hutchings /* FC physical port statistics. */ 17f844a0eaSJeff Kirsher struct bfa_port_fc_stats { 18f844a0eaSJeff Kirsher u64 secs_reset; /*!< Seconds since stats is reset */ 19f844a0eaSJeff Kirsher u64 tx_frames; /*!< Tx frames */ 20f844a0eaSJeff Kirsher u64 tx_words; /*!< Tx words */ 21f844a0eaSJeff Kirsher u64 tx_lip; /*!< Tx LIP */ 22f844a0eaSJeff Kirsher u64 tx_nos; /*!< Tx NOS */ 23f844a0eaSJeff Kirsher u64 tx_ols; /*!< Tx OLS */ 24f844a0eaSJeff Kirsher u64 tx_lr; /*!< Tx LR */ 25f844a0eaSJeff Kirsher u64 tx_lrr; /*!< Tx LRR */ 26f844a0eaSJeff Kirsher u64 rx_frames; /*!< Rx frames */ 27f844a0eaSJeff Kirsher u64 rx_words; /*!< Rx words */ 28f844a0eaSJeff Kirsher u64 lip_count; /*!< Rx LIP */ 29f844a0eaSJeff Kirsher u64 nos_count; /*!< Rx NOS */ 30f844a0eaSJeff Kirsher u64 ols_count; /*!< Rx OLS */ 31f844a0eaSJeff Kirsher u64 lr_count; /*!< Rx LR */ 32f844a0eaSJeff Kirsher u64 lrr_count; /*!< Rx LRR */ 33f844a0eaSJeff Kirsher u64 invalid_crcs; /*!< Rx CRC err frames */ 34f844a0eaSJeff Kirsher u64 invalid_crc_gd_eof; /*!< Rx CRC err good EOF frames */ 35f844a0eaSJeff Kirsher u64 undersized_frm; /*!< Rx undersized frames */ 36f844a0eaSJeff Kirsher u64 oversized_frm; /*!< Rx oversized frames */ 37f844a0eaSJeff Kirsher u64 bad_eof_frm; /*!< Rx frames with bad EOF */ 38f844a0eaSJeff Kirsher u64 error_frames; /*!< Errored frames */ 39f844a0eaSJeff Kirsher u64 dropped_frames; /*!< Dropped frames */ 40f844a0eaSJeff Kirsher u64 link_failures; /*!< Link Failure (LF) count */ 41f844a0eaSJeff Kirsher u64 loss_of_syncs; /*!< Loss of sync count */ 42f844a0eaSJeff Kirsher u64 loss_of_signals; /*!< Loss of signal count */ 43f844a0eaSJeff Kirsher u64 primseq_errs; /*!< Primitive sequence protocol err. */ 44f844a0eaSJeff Kirsher u64 bad_os_count; /*!< Invalid ordered sets */ 45f844a0eaSJeff Kirsher u64 err_enc_out; /*!< Encoding err nonframe_8b10b */ 46f844a0eaSJeff Kirsher u64 err_enc; /*!< Encoding err frame_8b10b */ 47aafd5c2cSRasesh Mody u64 bbsc_frames_lost; /*!< Credit Recovery-Frames Lost */ 48aafd5c2cSRasesh Mody u64 bbsc_credits_lost; /*!< Credit Recovery-Credits Lost */ 49aafd5c2cSRasesh Mody u64 bbsc_link_resets; /*!< Credit Recovery-Link Resets */ 50f844a0eaSJeff Kirsher }; 51f844a0eaSJeff Kirsher 521aa8b471SBen Hutchings /* Eth Physical Port statistics. */ 53f844a0eaSJeff Kirsher struct bfa_port_eth_stats { 54f844a0eaSJeff Kirsher u64 secs_reset; /*!< Seconds since stats is reset */ 55f844a0eaSJeff Kirsher u64 frame_64; /*!< Frames 64 bytes */ 56f844a0eaSJeff Kirsher u64 frame_65_127; /*!< Frames 65-127 bytes */ 57f844a0eaSJeff Kirsher u64 frame_128_255; /*!< Frames 128-255 bytes */ 58f844a0eaSJeff Kirsher u64 frame_256_511; /*!< Frames 256-511 bytes */ 59f844a0eaSJeff Kirsher u64 frame_512_1023; /*!< Frames 512-1023 bytes */ 60f844a0eaSJeff Kirsher u64 frame_1024_1518; /*!< Frames 1024-1518 bytes */ 61f844a0eaSJeff Kirsher u64 frame_1519_1522; /*!< Frames 1519-1522 bytes */ 62f844a0eaSJeff Kirsher u64 tx_bytes; /*!< Tx bytes */ 63f844a0eaSJeff Kirsher u64 tx_packets; /*!< Tx packets */ 64f844a0eaSJeff Kirsher u64 tx_mcast_packets; /*!< Tx multicast packets */ 65f844a0eaSJeff Kirsher u64 tx_bcast_packets; /*!< Tx broadcast packets */ 66f844a0eaSJeff Kirsher u64 tx_control_frame; /*!< Tx control frame */ 67f844a0eaSJeff Kirsher u64 tx_drop; /*!< Tx drops */ 68f844a0eaSJeff Kirsher u64 tx_jabber; /*!< Tx jabber */ 69f844a0eaSJeff Kirsher u64 tx_fcs_error; /*!< Tx FCS errors */ 70f844a0eaSJeff Kirsher u64 tx_fragments; /*!< Tx fragments */ 71f844a0eaSJeff Kirsher u64 rx_bytes; /*!< Rx bytes */ 72f844a0eaSJeff Kirsher u64 rx_packets; /*!< Rx packets */ 73f844a0eaSJeff Kirsher u64 rx_mcast_packets; /*!< Rx multicast packets */ 74f844a0eaSJeff Kirsher u64 rx_bcast_packets; /*!< Rx broadcast packets */ 75f844a0eaSJeff Kirsher u64 rx_control_frames; /*!< Rx control frames */ 76f844a0eaSJeff Kirsher u64 rx_unknown_opcode; /*!< Rx unknown opcode */ 77f844a0eaSJeff Kirsher u64 rx_drop; /*!< Rx drops */ 78f844a0eaSJeff Kirsher u64 rx_jabber; /*!< Rx jabber */ 79f844a0eaSJeff Kirsher u64 rx_fcs_error; /*!< Rx FCS errors */ 80f844a0eaSJeff Kirsher u64 rx_alignment_error; /*!< Rx alignment errors */ 81f844a0eaSJeff Kirsher u64 rx_frame_length_error; /*!< Rx frame len errors */ 82f844a0eaSJeff Kirsher u64 rx_code_error; /*!< Rx code errors */ 83f844a0eaSJeff Kirsher u64 rx_fragments; /*!< Rx fragments */ 84f844a0eaSJeff Kirsher u64 rx_pause; /*!< Rx pause */ 85f844a0eaSJeff Kirsher u64 rx_zero_pause; /*!< Rx zero pause */ 86f844a0eaSJeff Kirsher u64 tx_pause; /*!< Tx pause */ 87f844a0eaSJeff Kirsher u64 tx_zero_pause; /*!< Tx zero pause */ 88f844a0eaSJeff Kirsher u64 rx_fcoe_pause; /*!< Rx FCoE pause */ 89f844a0eaSJeff Kirsher u64 rx_fcoe_zero_pause; /*!< Rx FCoE zero pause */ 90f844a0eaSJeff Kirsher u64 tx_fcoe_pause; /*!< Tx FCoE pause */ 91f844a0eaSJeff Kirsher u64 tx_fcoe_zero_pause; /*!< Tx FCoE zero pause */ 92aafd5c2cSRasesh Mody u64 rx_iscsi_pause; /*!< Rx iSCSI pause */ 93aafd5c2cSRasesh Mody u64 rx_iscsi_zero_pause; /*!< Rx iSCSI zero pause */ 94aafd5c2cSRasesh Mody u64 tx_iscsi_pause; /*!< Tx iSCSI pause */ 95aafd5c2cSRasesh Mody u64 tx_iscsi_zero_pause; /*!< Tx iSCSI zero pause */ 96f844a0eaSJeff Kirsher }; 97f844a0eaSJeff Kirsher 981aa8b471SBen Hutchings /* Port statistics. */ 99f844a0eaSJeff Kirsher union bfa_port_stats_u { 100f844a0eaSJeff Kirsher struct bfa_port_fc_stats fc; 101f844a0eaSJeff Kirsher struct bfa_port_eth_stats eth; 102f844a0eaSJeff Kirsher }; 103f844a0eaSJeff Kirsher 104f844a0eaSJeff Kirsher #define BFA_CEE_LLDP_MAX_STRING_LEN (128) 105f844a0eaSJeff Kirsher #define BFA_CEE_DCBX_MAX_PRIORITY (8) 106f844a0eaSJeff Kirsher #define BFA_CEE_DCBX_MAX_PGID (8) 107f844a0eaSJeff Kirsher 108f844a0eaSJeff Kirsher #define BFA_CEE_LLDP_SYS_CAP_OTHER 0x0001 109f844a0eaSJeff Kirsher #define BFA_CEE_LLDP_SYS_CAP_REPEATER 0x0002 110f844a0eaSJeff Kirsher #define BFA_CEE_LLDP_SYS_CAP_MAC_BRIDGE 0x0004 111f844a0eaSJeff Kirsher #define BFA_CEE_LLDP_SYS_CAP_WLAN_AP 0x0008 112f844a0eaSJeff Kirsher #define BFA_CEE_LLDP_SYS_CAP_ROUTER 0x0010 113f844a0eaSJeff Kirsher #define BFA_CEE_LLDP_SYS_CAP_TELEPHONE 0x0020 114f844a0eaSJeff Kirsher #define BFA_CEE_LLDP_SYS_CAP_DOCSIS_CD 0x0040 115f844a0eaSJeff Kirsher #define BFA_CEE_LLDP_SYS_CAP_STATION 0x0080 116f844a0eaSJeff Kirsher #define BFA_CEE_LLDP_SYS_CAP_CVLAN 0x0100 117f844a0eaSJeff Kirsher #define BFA_CEE_LLDP_SYS_CAP_SVLAN 0x0200 118f844a0eaSJeff Kirsher #define BFA_CEE_LLDP_SYS_CAP_TPMR 0x0400 119f844a0eaSJeff Kirsher 120f844a0eaSJeff Kirsher /* LLDP string type */ 121f844a0eaSJeff Kirsher struct bfa_cee_lldp_str { 122f844a0eaSJeff Kirsher u8 sub_type; 123f844a0eaSJeff Kirsher u8 len; 124f844a0eaSJeff Kirsher u8 rsvd[2]; 125f844a0eaSJeff Kirsher u8 value[BFA_CEE_LLDP_MAX_STRING_LEN]; 126e423c856SIvan Vecera } __packed; 127f844a0eaSJeff Kirsher 128dbedd44eSJoe Perches /* LLDP parameters */ 129f844a0eaSJeff Kirsher struct bfa_cee_lldp_cfg { 130f844a0eaSJeff Kirsher struct bfa_cee_lldp_str chassis_id; 131f844a0eaSJeff Kirsher struct bfa_cee_lldp_str port_id; 132f844a0eaSJeff Kirsher struct bfa_cee_lldp_str port_desc; 133f844a0eaSJeff Kirsher struct bfa_cee_lldp_str sys_name; 134f844a0eaSJeff Kirsher struct bfa_cee_lldp_str sys_desc; 135f844a0eaSJeff Kirsher struct bfa_cee_lldp_str mgmt_addr; 136f844a0eaSJeff Kirsher u16 time_to_live; 137f844a0eaSJeff Kirsher u16 enabled_system_cap; 138e423c856SIvan Vecera } __packed; 139f844a0eaSJeff Kirsher 140f844a0eaSJeff Kirsher enum bfa_cee_dcbx_version { 141f844a0eaSJeff Kirsher DCBX_PROTOCOL_PRECEE = 1, 142f844a0eaSJeff Kirsher DCBX_PROTOCOL_CEE = 2, 143f844a0eaSJeff Kirsher }; 144f844a0eaSJeff Kirsher 145f844a0eaSJeff Kirsher enum bfa_cee_lls { 146f844a0eaSJeff Kirsher /* LLS is down because the TLV not sent by the peer */ 147f844a0eaSJeff Kirsher CEE_LLS_DOWN_NO_TLV = 0, 148f844a0eaSJeff Kirsher /* LLS is down as advertised by the peer */ 149f844a0eaSJeff Kirsher CEE_LLS_DOWN = 1, 150f844a0eaSJeff Kirsher CEE_LLS_UP = 2, 151f844a0eaSJeff Kirsher }; 152f844a0eaSJeff Kirsher 153f844a0eaSJeff Kirsher /* CEE/DCBX parameters */ 154f844a0eaSJeff Kirsher struct bfa_cee_dcbx_cfg { 155f844a0eaSJeff Kirsher u8 pgid[BFA_CEE_DCBX_MAX_PRIORITY]; 156f844a0eaSJeff Kirsher u8 pg_percentage[BFA_CEE_DCBX_MAX_PGID]; 157f844a0eaSJeff Kirsher u8 pfc_primap; /* bitmap of priorties with PFC enabled */ 158f844a0eaSJeff Kirsher u8 fcoe_primap; /* bitmap of priorities used for FcoE traffic */ 159f844a0eaSJeff Kirsher u8 iscsi_primap; /* bitmap of priorities used for iSCSI traffic */ 160f844a0eaSJeff Kirsher u8 dcbx_version; /* operating version:CEE or preCEE */ 161f844a0eaSJeff Kirsher u8 lls_fcoe; /* FCoE Logical Link Status */ 162f844a0eaSJeff Kirsher u8 lls_lan; /* LAN Logical Link Status */ 163f844a0eaSJeff Kirsher u8 rsvd[2]; 164e423c856SIvan Vecera } __packed; 165f844a0eaSJeff Kirsher 166f844a0eaSJeff Kirsher /* CEE status */ 167f844a0eaSJeff Kirsher /* Making this to tri-state for the benefit of port list command */ 168f844a0eaSJeff Kirsher enum bfa_cee_status { 169f844a0eaSJeff Kirsher CEE_UP = 0, 170f844a0eaSJeff Kirsher CEE_PHY_UP = 1, 171f844a0eaSJeff Kirsher CEE_LOOPBACK = 2, 172f844a0eaSJeff Kirsher CEE_PHY_DOWN = 3, 173f844a0eaSJeff Kirsher }; 174f844a0eaSJeff Kirsher 175f844a0eaSJeff Kirsher /* CEE Query */ 176f844a0eaSJeff Kirsher struct bfa_cee_attr { 177f844a0eaSJeff Kirsher u8 cee_status; 178f844a0eaSJeff Kirsher u8 error_reason; 179f844a0eaSJeff Kirsher struct bfa_cee_lldp_cfg lldp_remote; 180f844a0eaSJeff Kirsher struct bfa_cee_dcbx_cfg dcbx_remote; 181d6b30598SIvan Vecera u8 src_mac[ETH_ALEN]; 182f844a0eaSJeff Kirsher u8 link_speed; 183f844a0eaSJeff Kirsher u8 nw_priority; 184f844a0eaSJeff Kirsher u8 filler[2]; 185e423c856SIvan Vecera } __packed; 186f844a0eaSJeff Kirsher 187f844a0eaSJeff Kirsher /* LLDP/DCBX/CEE Statistics */ 188f844a0eaSJeff Kirsher struct bfa_cee_stats { 189f844a0eaSJeff Kirsher u32 lldp_tx_frames; /*!< LLDP Tx Frames */ 190f844a0eaSJeff Kirsher u32 lldp_rx_frames; /*!< LLDP Rx Frames */ 191f844a0eaSJeff Kirsher u32 lldp_rx_frames_invalid; /*!< LLDP Rx Frames invalid */ 192f844a0eaSJeff Kirsher u32 lldp_rx_frames_new; /*!< LLDP Rx Frames new */ 193f844a0eaSJeff Kirsher u32 lldp_tlvs_unrecognized; /*!< LLDP Rx unrecognized TLVs */ 194f844a0eaSJeff Kirsher u32 lldp_rx_shutdown_tlvs; /*!< LLDP Rx shutdown TLVs */ 195f844a0eaSJeff Kirsher u32 lldp_info_aged_out; /*!< LLDP remote info aged out */ 196f844a0eaSJeff Kirsher u32 dcbx_phylink_ups; /*!< DCBX phy link ups */ 197f844a0eaSJeff Kirsher u32 dcbx_phylink_downs; /*!< DCBX phy link downs */ 198f844a0eaSJeff Kirsher u32 dcbx_rx_tlvs; /*!< DCBX Rx TLVs */ 199f844a0eaSJeff Kirsher u32 dcbx_rx_tlvs_invalid; /*!< DCBX Rx TLVs invalid */ 200f844a0eaSJeff Kirsher u32 dcbx_control_tlv_error; /*!< DCBX control TLV errors */ 201f844a0eaSJeff Kirsher u32 dcbx_feature_tlv_error; /*!< DCBX feature TLV errors */ 202f844a0eaSJeff Kirsher u32 dcbx_cee_cfg_new; /*!< DCBX new CEE cfg rcvd */ 203f844a0eaSJeff Kirsher u32 cee_status_down; /*!< CEE status down */ 204f844a0eaSJeff Kirsher u32 cee_status_up; /*!< CEE status up */ 205f844a0eaSJeff Kirsher u32 cee_hw_cfg_changed; /*!< CEE hw cfg changed */ 206f844a0eaSJeff Kirsher u32 cee_rx_invalid_cfg; /*!< CEE invalid cfg */ 207e423c856SIvan Vecera } __packed; 208f844a0eaSJeff Kirsher 209f844a0eaSJeff Kirsher #endif /* __BFA_DEFS_CNA_H__ */ 210