14e400768SDavid Christensen /*- 2*7282444bSPedro F. Giffuni * SPDX-License-Identifier: BSD-2-Clause 3*7282444bSPedro F. Giffuni * 44ef8ebfdSDavid C Somayajulu * Copyright (c) 2007-2017 QLogic Corporation. All rights reserved. 54e400768SDavid Christensen * 64e400768SDavid Christensen * Redistribution and use in source and binary forms, with or without 74e400768SDavid Christensen * modification, are permitted provided that the following conditions 84e400768SDavid Christensen * are met: 94e400768SDavid Christensen * 104e400768SDavid Christensen * 1. Redistributions of source code must retain the above copyright 114e400768SDavid Christensen * notice, this list of conditions and the following disclaimer. 124e400768SDavid Christensen * 2. Redistributions in binary form must reproduce the above copyright 134e400768SDavid Christensen * notice, this list of conditions and the following disclaimer in the 144e400768SDavid Christensen * documentation and/or other materials provided with the distribution. 154e400768SDavid Christensen * 164ef8ebfdSDavid C Somayajulu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 174e400768SDavid Christensen * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 184e400768SDavid Christensen * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 194e400768SDavid Christensen * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 204e400768SDavid Christensen * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 214e400768SDavid Christensen * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 224e400768SDavid Christensen * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 234e400768SDavid Christensen * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 244e400768SDavid Christensen * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 254e400768SDavid Christensen * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 264e400768SDavid Christensen * THE POSSIBILITY OF SUCH DAMAGE. 274e400768SDavid Christensen */ 284e400768SDavid Christensen 294e400768SDavid Christensen #include <sys/cdefs.h> 304e400768SDavid Christensen #ifndef ECORE_MFW_REQ_H 314e400768SDavid Christensen #define ECORE_MFW_REQ_H 324e400768SDavid Christensen 334e400768SDavid Christensen 344e400768SDavid Christensen 354e400768SDavid Christensen #define PORT_0 0 364e400768SDavid Christensen #define PORT_1 1 374e400768SDavid Christensen #define PORT_MAX 2 384e400768SDavid Christensen #define NVM_PATH_MAX 2 394e400768SDavid Christensen 404e400768SDavid Christensen /* FCoE capabilities required from the driver */ 414e400768SDavid Christensen struct fcoe_capabilities { 424e400768SDavid Christensen uint32_t capability1; 434e400768SDavid Christensen /* Maximum number of I/Os per connection */ 444e400768SDavid Christensen #define FCOE_IOS_PER_CONNECTION_MASK 0x0000ffff 454e400768SDavid Christensen #define FCOE_IOS_PER_CONNECTION_SHIFT 0 464e400768SDavid Christensen /* Maximum number of Logins per port */ 474e400768SDavid Christensen #define FCOE_LOGINS_PER_PORT_MASK 0xffff0000 484e400768SDavid Christensen #define FCOE_LOGINS_PER_PORT_SHIFT 16 494e400768SDavid Christensen 504e400768SDavid Christensen uint32_t capability2; 514e400768SDavid Christensen /* Maximum number of exchanges */ 524e400768SDavid Christensen #define FCOE_NUMBER_OF_EXCHANGES_MASK 0x0000ffff 534e400768SDavid Christensen #define FCOE_NUMBER_OF_EXCHANGES_SHIFT 0 544e400768SDavid Christensen /* Maximum NPIV WWN per port */ 554e400768SDavid Christensen #define FCOE_NPIV_WWN_PER_PORT_MASK 0xffff0000 564e400768SDavid Christensen #define FCOE_NPIV_WWN_PER_PORT_SHIFT 16 574e400768SDavid Christensen 584e400768SDavid Christensen uint32_t capability3; 594e400768SDavid Christensen /* Maximum number of targets supported */ 604e400768SDavid Christensen #define FCOE_TARGETS_SUPPORTED_MASK 0x0000ffff 614e400768SDavid Christensen #define FCOE_TARGETS_SUPPORTED_SHIFT 0 624e400768SDavid Christensen /* Maximum number of outstanding commands across all connections */ 634e400768SDavid Christensen #define FCOE_OUTSTANDING_COMMANDS_MASK 0xffff0000 644e400768SDavid Christensen #define FCOE_OUTSTANDING_COMMANDS_SHIFT 16 654e400768SDavid Christensen 664e400768SDavid Christensen uint32_t capability4; 674e400768SDavid Christensen #define FCOE_CAPABILITY4_STATEFUL 0x00000001 684e400768SDavid Christensen #define FCOE_CAPABILITY4_STATELESS 0x00000002 694e400768SDavid Christensen #define FCOE_CAPABILITY4_CAPABILITIES_REPORTED_VALID 0x00000004 704e400768SDavid Christensen }; 714e400768SDavid Christensen 724e400768SDavid Christensen struct glob_ncsi_oem_data 734e400768SDavid Christensen { 744e400768SDavid Christensen uint32_t driver_version; 754e400768SDavid Christensen uint32_t unused[3]; 764e400768SDavid Christensen struct fcoe_capabilities fcoe_features[NVM_PATH_MAX][PORT_MAX]; 774e400768SDavid Christensen }; 784e400768SDavid Christensen 794e400768SDavid Christensen /* current drv_info version */ 804e400768SDavid Christensen #define DRV_INFO_CUR_VER 2 814e400768SDavid Christensen 824e400768SDavid Christensen /* drv_info op codes supported */ 834e400768SDavid Christensen enum drv_info_opcode { 844e400768SDavid Christensen ETH_STATS_OPCODE, 854e400768SDavid Christensen FCOE_STATS_OPCODE, 864e400768SDavid Christensen ISCSI_STATS_OPCODE 874e400768SDavid Christensen }; 884e400768SDavid Christensen 894e400768SDavid Christensen #define ETH_STAT_INFO_VERSION_LEN 12 904e400768SDavid Christensen /* Per PCI Function Ethernet Statistics required from the driver */ 914e400768SDavid Christensen struct eth_stats_info { 924e400768SDavid Christensen /* Function's Driver Version. padded to 12 */ 934e400768SDavid Christensen uint8_t version[ETH_STAT_INFO_VERSION_LEN]; 944e400768SDavid Christensen /* Locally Admin Addr. BigEndian EIU48. Actual size is 6 bytes */ 954e400768SDavid Christensen uint8_t mac_local[8]; 964e400768SDavid Christensen uint8_t mac_add1[8]; /* Additional Programmed MAC Addr 1. */ 974e400768SDavid Christensen uint8_t mac_add2[8]; /* Additional Programmed MAC Addr 2. */ 984e400768SDavid Christensen uint32_t mtu_size; /* MTU Size. Note : Negotiated MTU */ 994e400768SDavid Christensen uint32_t feature_flags; /* Feature_Flags. */ 1004e400768SDavid Christensen #define FEATURE_ETH_CHKSUM_OFFLOAD_MASK 0x01 1014e400768SDavid Christensen #define FEATURE_ETH_LSO_MASK 0x02 1024e400768SDavid Christensen #define FEATURE_ETH_BOOTMODE_MASK 0x1C 1034e400768SDavid Christensen #define FEATURE_ETH_BOOTMODE_SHIFT 2 1044e400768SDavid Christensen #define FEATURE_ETH_BOOTMODE_NONE (0x0 << 2) 1054e400768SDavid Christensen #define FEATURE_ETH_BOOTMODE_PXE (0x1 << 2) 1064e400768SDavid Christensen #define FEATURE_ETH_BOOTMODE_ISCSI (0x2 << 2) 1074e400768SDavid Christensen #define FEATURE_ETH_BOOTMODE_FCOE (0x3 << 2) 1084e400768SDavid Christensen #define FEATURE_ETH_TOE_MASK 0x20 1094e400768SDavid Christensen uint32_t lso_max_size; /* LSO MaxOffloadSize. */ 1104e400768SDavid Christensen uint32_t lso_min_seg_cnt; /* LSO MinSegmentCount. */ 1114e400768SDavid Christensen /* Num Offloaded Connections TCP_IPv4. */ 1124e400768SDavid Christensen uint32_t ipv4_ofld_cnt; 1134e400768SDavid Christensen /* Num Offloaded Connections TCP_IPv6. */ 1144e400768SDavid Christensen uint32_t ipv6_ofld_cnt; 1154e400768SDavid Christensen uint32_t promiscuous_mode; /* Promiscuous Mode. non-zero true */ 1164e400768SDavid Christensen uint32_t txq_size; /* TX Descriptors Queue Size */ 1174e400768SDavid Christensen uint32_t rxq_size; /* RX Descriptors Queue Size */ 1184e400768SDavid Christensen /* TX Descriptor Queue Avg Depth. % Avg Queue Depth since last poll */ 1194e400768SDavid Christensen uint32_t txq_avg_depth; 1204e400768SDavid Christensen /* RX Descriptors Queue Avg Depth. % Avg Queue Depth since last poll */ 1214e400768SDavid Christensen uint32_t rxq_avg_depth; 1224e400768SDavid Christensen /* IOV_Offload. 0=none; 1=MultiQueue, 2=VEB 3= VEPA*/ 1234e400768SDavid Christensen uint32_t iov_offload; 1244e400768SDavid Christensen /* Number of NetQueue/VMQ Config'd. */ 1254e400768SDavid Christensen uint32_t netq_cnt; 1264e400768SDavid Christensen uint32_t vf_cnt; /* Num VF assigned to this PF. */ 1274e400768SDavid Christensen }; 1284e400768SDavid Christensen 1294e400768SDavid Christensen /* Per PCI Function FCOE Statistics required from the driver */ 1304e400768SDavid Christensen struct fcoe_stats_info { 1314e400768SDavid Christensen uint8_t version[12]; /* Function's Driver Version. */ 1324e400768SDavid Christensen uint8_t mac_local[8]; /* Locally Admin Addr. */ 1334e400768SDavid Christensen uint8_t mac_add1[8]; /* Additional Programmed MAC Addr 1. */ 1344e400768SDavid Christensen uint8_t mac_add2[8]; /* Additional Programmed MAC Addr 2. */ 1354e400768SDavid Christensen /* QoS Priority (per 802.1p). 0-7255 */ 1364e400768SDavid Christensen uint32_t qos_priority; 1374e400768SDavid Christensen uint32_t txq_size; /* FCoE TX Descriptors Queue Size. */ 1384e400768SDavid Christensen uint32_t rxq_size; /* FCoE RX Descriptors Queue Size. */ 1394e400768SDavid Christensen /* FCoE TX Descriptor Queue Avg Depth. */ 1404e400768SDavid Christensen uint32_t txq_avg_depth; 1414e400768SDavid Christensen /* FCoE RX Descriptors Queue Avg Depth. */ 1424e400768SDavid Christensen uint32_t rxq_avg_depth; 1434e400768SDavid Christensen uint32_t rx_frames_lo; /* FCoE RX Frames received. */ 1444e400768SDavid Christensen uint32_t rx_frames_hi; /* FCoE RX Frames received. */ 1454e400768SDavid Christensen uint32_t rx_bytes_lo; /* FCoE RX Bytes received. */ 1464e400768SDavid Christensen uint32_t rx_bytes_hi; /* FCoE RX Bytes received. */ 1474e400768SDavid Christensen uint32_t tx_frames_lo; /* FCoE TX Frames sent. */ 1484e400768SDavid Christensen uint32_t tx_frames_hi; /* FCoE TX Frames sent. */ 1494e400768SDavid Christensen uint32_t tx_bytes_lo; /* FCoE TX Bytes sent. */ 1504e400768SDavid Christensen uint32_t tx_bytes_hi; /* FCoE TX Bytes sent. */ 1514e400768SDavid Christensen uint32_t rx_fcs_errors; /* number of receive packets with FCS errors */ 1524e400768SDavid Christensen uint32_t rx_fc_crc_errors; /* number of FC frames with CRC errors*/ 1534e400768SDavid Christensen uint32_t fip_login_failures; /* number of FCoE/FIP Login failures */ 1544e400768SDavid Christensen }; 1554e400768SDavid Christensen 1564e400768SDavid Christensen /* Per PCI Function iSCSI Statistics required from the driver*/ 1574e400768SDavid Christensen struct iscsi_stats_info { 1584e400768SDavid Christensen uint8_t version[12]; /* Function's Driver Version. */ 1594e400768SDavid Christensen uint8_t mac_local[8]; /* Locally Admin iSCSI MAC Addr. */ 1604e400768SDavid Christensen uint8_t mac_add1[8]; /* Additional Programmed MAC Addr 1. */ 1614e400768SDavid Christensen /* QoS Priority (per 802.1p). 0-7255 */ 1624e400768SDavid Christensen uint32_t qos_priority; 1634e400768SDavid Christensen 1644e400768SDavid Christensen uint8_t initiator_name[64]; /* iSCSI Boot Initiator Node name. */ 1654e400768SDavid Christensen 1664e400768SDavid Christensen uint8_t ww_port_name[64]; /* iSCSI World wide port name */ 1674e400768SDavid Christensen 1684e400768SDavid Christensen uint8_t boot_target_name[64];/* iSCSI Boot Target Name. */ 1694e400768SDavid Christensen 1704e400768SDavid Christensen uint8_t boot_target_ip[16]; /* iSCSI Boot Target IP. */ 1714e400768SDavid Christensen uint32_t boot_target_portal; /* iSCSI Boot Target Portal. */ 1724e400768SDavid Christensen uint8_t boot_init_ip[16]; /* iSCSI Boot Initiator IP Address. */ 1734e400768SDavid Christensen uint32_t max_frame_size; /* Max Frame Size. bytes */ 1744e400768SDavid Christensen uint32_t txq_size; /* PDU TX Descriptors Queue Size. */ 1754e400768SDavid Christensen uint32_t rxq_size; /* PDU RX Descriptors Queue Size. */ 1764e400768SDavid Christensen 1774e400768SDavid Christensen uint32_t txq_avg_depth; /*PDU TX Descriptor Queue Avg Depth. */ 1784e400768SDavid Christensen uint32_t rxq_avg_depth; /*PDU RX Descriptors Queue Avg Depth. */ 1794e400768SDavid Christensen uint32_t rx_pdus_lo; /* iSCSI PDUs received. */ 1804e400768SDavid Christensen uint32_t rx_pdus_hi; /* iSCSI PDUs received. */ 1814e400768SDavid Christensen 1824e400768SDavid Christensen uint32_t rx_bytes_lo; /* iSCSI RX Bytes received. */ 1834e400768SDavid Christensen uint32_t rx_bytes_hi; /* iSCSI RX Bytes received. */ 1844e400768SDavid Christensen uint32_t tx_pdus_lo; /* iSCSI PDUs sent. */ 1854e400768SDavid Christensen uint32_t tx_pdus_hi; /* iSCSI PDUs sent. */ 1864e400768SDavid Christensen 1874e400768SDavid Christensen uint32_t tx_bytes_lo; /* iSCSI PDU TX Bytes sent. */ 1884e400768SDavid Christensen uint32_t tx_bytes_hi; /* iSCSI PDU TX Bytes sent. */ 1894e400768SDavid Christensen uint32_t pcp_prior_map_tbl; /*C-PCP to S-PCP Priority MapTable. 1904e400768SDavid Christensen 9 nibbles, the position of each nibble 1914e400768SDavid Christensen represents the C-PCP value, the value 1924e400768SDavid Christensen of the nibble = S-PCP value.*/ 1934e400768SDavid Christensen }; 1944e400768SDavid Christensen 1954e400768SDavid Christensen union drv_info_to_mcp { 1964e400768SDavid Christensen struct eth_stats_info ether_stat; 1974e400768SDavid Christensen struct fcoe_stats_info fcoe_stat; 1984e400768SDavid Christensen struct iscsi_stats_info iscsi_stat; 1994e400768SDavid Christensen }; 2004e400768SDavid Christensen 2014e400768SDavid Christensen 2024e400768SDavid Christensen #endif /* ECORE_MFW_REQ_H */ 2034e400768SDavid Christensen 204