xref: /freebsd-src/sys/dev/bxe/ecore_mfw_req.h (revision 685dc743dc3b5645e34836464128e1c0558b404b)
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