brintos

brintos / linux-shallow public Read only

0
0
Text · 19.6 KiB · 112aadf Raw
848 lines · c
1/* SPDX-License-Identifier: GPL-2.0-only */2/*3 * Linux network driver for QLogic BR-series Converged Network Adapter.4 */5/*6 * Copyright (c) 2005-2014 Brocade Communications Systems, Inc.7 * Copyright (c) 2014-2015 QLogic Corporation8 * All rights reserved9 * www.qlogic.com10 */11 12/* BNA Hardware and Firmware Interface */13 14/* Skipping statistics collection to avoid clutter.15 * Command is no longer needed:16 *	MTU17 *	TxQ Stop18 *	RxQ Stop19 *	RxF Enable/Disable20 *21 * HDS-off request is dynamic22 * keep structures as multiple of 32-bit fields for alignment.23 * All values must be written in big-endian.24 */25#ifndef __BFI_ENET_H__26#define __BFI_ENET_H__27 28#include "bfa_defs.h"29#include "bfi.h"30 31#define BFI_ENET_CFG_MAX		32	/* Max resources per PF */32 33#define BFI_ENET_TXQ_PRIO_MAX		834#define BFI_ENET_RX_QSET_MAX		1635#define BFI_ENET_TXQ_WI_VECT_MAX	436 37#define BFI_ENET_VLAN_ID_MAX		409638#define BFI_ENET_VLAN_BLOCK_SIZE	512	/* in bits */39#define BFI_ENET_VLAN_BLOCKS_MAX					\40	(BFI_ENET_VLAN_ID_MAX / BFI_ENET_VLAN_BLOCK_SIZE)41#define BFI_ENET_VLAN_WORD_SIZE		32	/* in bits */42#define BFI_ENET_VLAN_WORDS_MAX						\43	(BFI_ENET_VLAN_BLOCK_SIZE / BFI_ENET_VLAN_WORD_SIZE)44 45#define BFI_ENET_RSS_RIT_MAX		64	/* entries */46#define BFI_ENET_RSS_KEY_LEN		10	/* 32-bit words */47 48union bfi_addr_be_u {49	struct {50		u32	addr_hi;	/* Most Significant 32-bits */51		u32	addr_lo;	/* Least Significant 32-Bits */52	} __packed a32;53} __packed;54 55/*	T X   Q U E U E   D E F I N E S      */56/* TxQ Vector (a.k.a. Tx-Buffer Descriptor) */57/* TxQ Entry Opcodes */58#define BFI_ENET_TXQ_WI_SEND		(0x402)	/* Single Frame Transmission */59#define BFI_ENET_TXQ_WI_SEND_LSO	(0x403)	/* Multi-Frame Transmission */60#define BFI_ENET_TXQ_WI_EXTENSION	(0x104)	/* Extension WI */61 62/* TxQ Entry Control Flags */63#define BFI_ENET_TXQ_WI_CF_FCOE_CRC	BIT(8)64#define BFI_ENET_TXQ_WI_CF_IPID_MODE	BIT(5)65#define BFI_ENET_TXQ_WI_CF_INS_PRIO	BIT(4)66#define BFI_ENET_TXQ_WI_CF_INS_VLAN	BIT(3)67#define BFI_ENET_TXQ_WI_CF_UDP_CKSUM	BIT(2)68#define BFI_ENET_TXQ_WI_CF_TCP_CKSUM	BIT(1)69#define BFI_ENET_TXQ_WI_CF_IP_CKSUM	BIT(0)70 71struct bfi_enet_txq_wi_base {72	u8			reserved;73	u8			num_vectors;	/* number of vectors present */74	u16			opcode;75			/* BFI_ENET_TXQ_WI_SEND or BFI_ENET_TXQ_WI_SEND_LSO */76	u16			flags;		/* OR of all the flags */77	u16			l4_hdr_size_n_offset;78	u16			vlan_tag;79	u16			lso_mss;	/* Only 14 LSB are valid */80	u32			frame_length;	/* Only 24 LSB are valid */81} __packed;82 83struct bfi_enet_txq_wi_ext {84	u16			reserved;85	u16			opcode;		/* BFI_ENET_TXQ_WI_EXTENSION */86	u32			reserved2[3];87} __packed;88 89struct bfi_enet_txq_wi_vector {			/* Tx Buffer Descriptor */90	u16			reserved;91	u16			length;		/* Only 14 LSB are valid */92	union bfi_addr_be_u	addr;93} __packed;94 95/*  TxQ Entry Structure  */96struct bfi_enet_txq_entry {97	union {98		struct bfi_enet_txq_wi_base	base;99		struct bfi_enet_txq_wi_ext	ext;100	} __packed wi;101	struct bfi_enet_txq_wi_vector vector[BFI_ENET_TXQ_WI_VECT_MAX];102} __packed;103 104#define wi_hdr		wi.base105#define wi_ext_hdr	wi.ext106 107#define BFI_ENET_TXQ_WI_L4_HDR_N_OFFSET(_hdr_size, _offset) \108		(((_hdr_size) << 10) | ((_offset) & 0x3FF))109 110/*   R X   Q U E U E   D E F I N E S   */111struct bfi_enet_rxq_entry {112	union bfi_addr_be_u  rx_buffer;113} __packed;114 115/*   R X   C O M P L E T I O N   Q U E U E   D E F I N E S   */116/* CQ Entry Flags */117#define BFI_ENET_CQ_EF_MAC_ERROR	BIT(0)118#define BFI_ENET_CQ_EF_FCS_ERROR	BIT(1)119#define BFI_ENET_CQ_EF_TOO_LONG		BIT(2)120#define BFI_ENET_CQ_EF_FC_CRC_OK	BIT(3)121 122#define BFI_ENET_CQ_EF_RSVD1		BIT(4)123#define BFI_ENET_CQ_EF_L4_CKSUM_OK	BIT(5)124#define BFI_ENET_CQ_EF_L3_CKSUM_OK	BIT(6)125#define BFI_ENET_CQ_EF_HDS_HEADER	BIT(7)126 127#define BFI_ENET_CQ_EF_UDP		BIT(8)128#define BFI_ENET_CQ_EF_TCP		BIT(9)129#define BFI_ENET_CQ_EF_IP_OPTIONS	BIT(10)130#define BFI_ENET_CQ_EF_IPV6		BIT(11)131 132#define BFI_ENET_CQ_EF_IPV4		BIT(12)133#define BFI_ENET_CQ_EF_VLAN		BIT(13)134#define BFI_ENET_CQ_EF_RSS		BIT(14)135#define BFI_ENET_CQ_EF_RSVD2		BIT(15)136 137#define BFI_ENET_CQ_EF_MCAST_MATCH	BIT(16)138#define BFI_ENET_CQ_EF_MCAST		BIT(17)139#define BFI_ENET_CQ_EF_BCAST		BIT(18)140#define BFI_ENET_CQ_EF_REMOTE		BIT(19)141 142#define BFI_ENET_CQ_EF_LOCAL		BIT(20)143 144/* CQ Entry Structure */145struct bfi_enet_cq_entry {146	u32 flags;147	u16	vlan_tag;148	u16	length;149	u32	rss_hash;150	u8	valid;151	u8	reserved1;152	u8	reserved2;153	u8	rxq_id;154} __packed;155 156/*   E N E T   C O N T R O L   P A T H   C O M M A N D S   */157struct bfi_enet_q {158	union bfi_addr_u	pg_tbl;159	union bfi_addr_u	first_entry;160	u16		pages;	/* # of pages */161	u16		page_sz;162} __packed;163 164struct bfi_enet_txq {165	struct bfi_enet_q	q;166	u8			priority;167	u8			rsvd[3];168} __packed;169 170struct bfi_enet_rxq {171	struct bfi_enet_q	q;172	u16		rx_buffer_size;173	u16		rsvd;174} __packed;175 176struct bfi_enet_cq {177	struct bfi_enet_q	q;178} __packed;179 180struct bfi_enet_ib_cfg {181	u8		int_pkt_dma;182	u8		int_enabled;183	u8		int_pkt_enabled;184	u8		continuous_coalescing;185	u8		msix;186	u8		rsvd[3];187	u32	coalescing_timeout;188	u32	inter_pkt_timeout;189	u8		inter_pkt_count;190	u8		rsvd1[3];191} __packed;192 193struct bfi_enet_ib {194	union bfi_addr_u	index_addr;195	union {196		u16	msix_index;197		u16	intx_bitmask;198	} __packed intr;199	u16		rsvd;200} __packed;201 202/* ENET command messages */203enum bfi_enet_h2i_msgs {204	/* Rx Commands */205	BFI_ENET_H2I_RX_CFG_SET_REQ = 1,206	BFI_ENET_H2I_RX_CFG_CLR_REQ = 2,207 208	BFI_ENET_H2I_RIT_CFG_REQ = 3,209	BFI_ENET_H2I_RSS_CFG_REQ = 4,210	BFI_ENET_H2I_RSS_ENABLE_REQ = 5,211	BFI_ENET_H2I_RX_PROMISCUOUS_REQ = 6,212	BFI_ENET_H2I_RX_DEFAULT_REQ = 7,213 214	BFI_ENET_H2I_MAC_UCAST_SET_REQ = 8,215	BFI_ENET_H2I_MAC_UCAST_CLR_REQ = 9,216	BFI_ENET_H2I_MAC_UCAST_ADD_REQ = 10,217	BFI_ENET_H2I_MAC_UCAST_DEL_REQ = 11,218 219	BFI_ENET_H2I_MAC_MCAST_ADD_REQ = 12,220	BFI_ENET_H2I_MAC_MCAST_DEL_REQ = 13,221	BFI_ENET_H2I_MAC_MCAST_FILTER_REQ = 14,222 223	BFI_ENET_H2I_RX_VLAN_SET_REQ = 15,224	BFI_ENET_H2I_RX_VLAN_STRIP_ENABLE_REQ = 16,225 226	/* Tx Commands */227	BFI_ENET_H2I_TX_CFG_SET_REQ = 17,228	BFI_ENET_H2I_TX_CFG_CLR_REQ = 18,229 230	/* Port Commands */231	BFI_ENET_H2I_PORT_ADMIN_UP_REQ = 19,232	BFI_ENET_H2I_SET_PAUSE_REQ = 20,233	BFI_ENET_H2I_DIAG_LOOPBACK_REQ = 21,234 235	/* Get Attributes Command */236	BFI_ENET_H2I_GET_ATTR_REQ = 22,237 238	/*  Statistics Commands */239	BFI_ENET_H2I_STATS_GET_REQ = 23,240	BFI_ENET_H2I_STATS_CLR_REQ = 24,241 242	BFI_ENET_H2I_WOL_MAGIC_REQ = 25,243	BFI_ENET_H2I_WOL_FRAME_REQ = 26,244 245	BFI_ENET_H2I_MAX = 27,246};247 248enum bfi_enet_i2h_msgs {249	/* Rx Responses */250	BFI_ENET_I2H_RX_CFG_SET_RSP =251		BFA_I2HM(BFI_ENET_H2I_RX_CFG_SET_REQ),252	BFI_ENET_I2H_RX_CFG_CLR_RSP =253		BFA_I2HM(BFI_ENET_H2I_RX_CFG_CLR_REQ),254 255	BFI_ENET_I2H_RIT_CFG_RSP =256		BFA_I2HM(BFI_ENET_H2I_RIT_CFG_REQ),257	BFI_ENET_I2H_RSS_CFG_RSP =258		BFA_I2HM(BFI_ENET_H2I_RSS_CFG_REQ),259	BFI_ENET_I2H_RSS_ENABLE_RSP =260		BFA_I2HM(BFI_ENET_H2I_RSS_ENABLE_REQ),261	BFI_ENET_I2H_RX_PROMISCUOUS_RSP =262		BFA_I2HM(BFI_ENET_H2I_RX_PROMISCUOUS_REQ),263	BFI_ENET_I2H_RX_DEFAULT_RSP =264		BFA_I2HM(BFI_ENET_H2I_RX_DEFAULT_REQ),265 266	BFI_ENET_I2H_MAC_UCAST_SET_RSP =267		BFA_I2HM(BFI_ENET_H2I_MAC_UCAST_SET_REQ),268	BFI_ENET_I2H_MAC_UCAST_CLR_RSP =269		BFA_I2HM(BFI_ENET_H2I_MAC_UCAST_CLR_REQ),270	BFI_ENET_I2H_MAC_UCAST_ADD_RSP =271		BFA_I2HM(BFI_ENET_H2I_MAC_UCAST_ADD_REQ),272	BFI_ENET_I2H_MAC_UCAST_DEL_RSP =273		BFA_I2HM(BFI_ENET_H2I_MAC_UCAST_DEL_REQ),274 275	BFI_ENET_I2H_MAC_MCAST_ADD_RSP =276		BFA_I2HM(BFI_ENET_H2I_MAC_MCAST_ADD_REQ),277	BFI_ENET_I2H_MAC_MCAST_DEL_RSP =278		BFA_I2HM(BFI_ENET_H2I_MAC_MCAST_DEL_REQ),279	BFI_ENET_I2H_MAC_MCAST_FILTER_RSP =280		BFA_I2HM(BFI_ENET_H2I_MAC_MCAST_FILTER_REQ),281 282	BFI_ENET_I2H_RX_VLAN_SET_RSP =283		BFA_I2HM(BFI_ENET_H2I_RX_VLAN_SET_REQ),284 285	BFI_ENET_I2H_RX_VLAN_STRIP_ENABLE_RSP =286		BFA_I2HM(BFI_ENET_H2I_RX_VLAN_STRIP_ENABLE_REQ),287 288	/* Tx Responses */289	BFI_ENET_I2H_TX_CFG_SET_RSP =290		BFA_I2HM(BFI_ENET_H2I_TX_CFG_SET_REQ),291	BFI_ENET_I2H_TX_CFG_CLR_RSP =292		BFA_I2HM(BFI_ENET_H2I_TX_CFG_CLR_REQ),293 294	/* Port Responses */295	BFI_ENET_I2H_PORT_ADMIN_RSP =296		BFA_I2HM(BFI_ENET_H2I_PORT_ADMIN_UP_REQ),297 298	BFI_ENET_I2H_SET_PAUSE_RSP =299		BFA_I2HM(BFI_ENET_H2I_SET_PAUSE_REQ),300	BFI_ENET_I2H_DIAG_LOOPBACK_RSP =301		BFA_I2HM(BFI_ENET_H2I_DIAG_LOOPBACK_REQ),302 303	/*  Attributes Response */304	BFI_ENET_I2H_GET_ATTR_RSP =305		BFA_I2HM(BFI_ENET_H2I_GET_ATTR_REQ),306 307	/* Statistics Responses */308	BFI_ENET_I2H_STATS_GET_RSP =309		BFA_I2HM(BFI_ENET_H2I_STATS_GET_REQ),310	BFI_ENET_I2H_STATS_CLR_RSP =311		BFA_I2HM(BFI_ENET_H2I_STATS_CLR_REQ),312 313	BFI_ENET_I2H_WOL_MAGIC_RSP =314		BFA_I2HM(BFI_ENET_H2I_WOL_MAGIC_REQ),315	BFI_ENET_I2H_WOL_FRAME_RSP =316		BFA_I2HM(BFI_ENET_H2I_WOL_FRAME_REQ),317 318	/* AENs */319	BFI_ENET_I2H_LINK_DOWN_AEN = BFA_I2HM(BFI_ENET_H2I_MAX),320	BFI_ENET_I2H_LINK_UP_AEN = BFA_I2HM(BFI_ENET_H2I_MAX + 1),321 322	BFI_ENET_I2H_PORT_ENABLE_AEN = BFA_I2HM(BFI_ENET_H2I_MAX + 2),323	BFI_ENET_I2H_PORT_DISABLE_AEN = BFA_I2HM(BFI_ENET_H2I_MAX + 3),324 325	BFI_ENET_I2H_BW_UPDATE_AEN = BFA_I2HM(BFI_ENET_H2I_MAX + 4),326};327 328/* The following error codes can be returned by the enet commands */329enum bfi_enet_err {330	BFI_ENET_CMD_OK		= 0,331	BFI_ENET_CMD_FAIL	= 1,332	BFI_ENET_CMD_DUP_ENTRY	= 2,	/* !< Duplicate entry in CAM */333	BFI_ENET_CMD_CAM_FULL	= 3,	/* !< CAM is full */334	BFI_ENET_CMD_NOT_OWNER	= 4,	/* !< Not permitted, b'cos not owner */335	BFI_ENET_CMD_NOT_EXEC	= 5,	/* !< Was not sent to f/w at all */336	BFI_ENET_CMD_WAITING	= 6,	/* !< Waiting for completion */337	BFI_ENET_CMD_PORT_DISABLED = 7,	/* !< port in disabled state */338};339 340/* Generic Request341 *342 * bfi_enet_req is used by:343 *	BFI_ENET_H2I_RX_CFG_CLR_REQ344 *	BFI_ENET_H2I_TX_CFG_CLR_REQ345 */346struct bfi_enet_req {347	struct bfi_msgq_mhdr mh;348} __packed;349 350/* Enable/Disable Request351 *352 * bfi_enet_enable_req is used by:353 *	BFI_ENET_H2I_RSS_ENABLE_REQ	(enet_id must be zero)354 *	BFI_ENET_H2I_RX_PROMISCUOUS_REQ (enet_id must be zero)355 *	BFI_ENET_H2I_RX_DEFAULT_REQ	(enet_id must be zero)356 *	BFI_ENET_H2I_RX_MAC_MCAST_FILTER_REQ357 *	BFI_ENET_H2I_PORT_ADMIN_UP_REQ	(enet_id must be zero)358 */359struct bfi_enet_enable_req {360	struct		bfi_msgq_mhdr mh;361	u8		enable;		/* 1 = enable;  0 = disable */362	u8		rsvd[3];363} __packed;364 365/* Generic Response */366struct bfi_enet_rsp {367	struct bfi_msgq_mhdr mh;368	u8		error;		/*!< if error see cmd_offset */369	u8		rsvd;370	u16		cmd_offset;	/*!< offset to invalid parameter */371} __packed;372 373/* GLOBAL CONFIGURATION */374 375/* bfi_enet_attr_req is used by:376 *	BFI_ENET_H2I_GET_ATTR_REQ377 */378struct bfi_enet_attr_req {379	struct bfi_msgq_mhdr	mh;380} __packed;381 382/* bfi_enet_attr_rsp is used by:383 *	BFI_ENET_I2H_GET_ATTR_RSP384 */385struct bfi_enet_attr_rsp {386	struct bfi_msgq_mhdr mh;387	u8		error;		/*!< if error see cmd_offset */388	u8		rsvd;389	u16		cmd_offset;	/*!< offset to invalid parameter */390	u32		max_cfg;391	u32		max_ucmac;392	u32		rit_size;393} __packed;394 395/* Tx Configuration396 *397 * bfi_enet_tx_cfg is used by:398 *	BFI_ENET_H2I_TX_CFG_SET_REQ399 */400enum bfi_enet_tx_vlan_mode {401	BFI_ENET_TX_VLAN_NOP	= 0,402	BFI_ENET_TX_VLAN_INS	= 1,403	BFI_ENET_TX_VLAN_WI	= 2,404};405 406struct bfi_enet_tx_cfg {407	u8		vlan_mode;	/*!< processing mode */408	u8		rsvd;409	u16		vlan_id;410	u8		admit_tagged_frame;411	u8		apply_vlan_filter;412	u8		add_to_vswitch;413	u8		rsvd1[1];414} __packed;415 416struct bfi_enet_tx_cfg_req {417	struct bfi_msgq_mhdr mh;418	u8			num_queues;	/* # of Tx Queues */419	u8			rsvd[3];420 421	struct {422		struct bfi_enet_txq	q;423		struct bfi_enet_ib	ib;424	} __packed q_cfg[BFI_ENET_TXQ_PRIO_MAX];425 426	struct bfi_enet_ib_cfg	ib_cfg;427 428	struct bfi_enet_tx_cfg	tx_cfg;429};430 431struct bfi_enet_tx_cfg_rsp {432	struct		bfi_msgq_mhdr mh;433	u8		error;434	u8		hw_id;		/* For debugging */435	u8		rsvd[2];436	struct {437		u32	q_dbell;	/* PCI base address offset */438		u32	i_dbell;	/* PCI base address offset */439		u8	hw_qid;		/* For debugging */440		u8	rsvd[3];441	} __packed q_handles[BFI_ENET_TXQ_PRIO_MAX];442};443 444/* Rx Configuration445 *446 * bfi_enet_rx_cfg is used by:447 *	BFI_ENET_H2I_RX_CFG_SET_REQ448 */449enum bfi_enet_rxq_type {450	BFI_ENET_RXQ_SINGLE		= 1,451	BFI_ENET_RXQ_LARGE_SMALL	= 2,452	BFI_ENET_RXQ_HDS		= 3,453	BFI_ENET_RXQ_HDS_OPT_BASED	= 4,454};455 456enum bfi_enet_hds_type {457	BFI_ENET_HDS_FORCED	= 0x01,458	BFI_ENET_HDS_IPV6_UDP	= 0x02,459	BFI_ENET_HDS_IPV6_TCP	= 0x04,460	BFI_ENET_HDS_IPV4_TCP	= 0x08,461	BFI_ENET_HDS_IPV4_UDP	= 0x10,462};463 464struct bfi_enet_rx_cfg {465	u8		rxq_type;466	u8		rsvd[1];467	u16		frame_size;468 469	struct {470		u8			max_header_size;471		u8			force_offset;472		u8			type;473		u8			rsvd1;474	} __packed hds;475 476	u8		multi_buffer;477	u8		strip_vlan;478	u8		drop_untagged;479	u8		rsvd2;480} __packed;481 482/*483 * Multicast frames are received on the ql of q-set index zero.484 * On the completion queue.  RxQ ID = even is for large/data buffer queues485 * and RxQ ID = odd is for small/header buffer queues.486 */487struct bfi_enet_rx_cfg_req {488	struct bfi_msgq_mhdr mh;489	u8			num_queue_sets;	/* # of Rx Queue Sets */490	u8			rsvd[3];491 492	struct {493		struct bfi_enet_rxq	ql;	/* large/data/single buffers */494		struct bfi_enet_rxq	qs;	/* small/header buffers */495		struct bfi_enet_cq	cq;496		struct bfi_enet_ib	ib;497	} __packed q_cfg[BFI_ENET_RX_QSET_MAX];498 499	struct bfi_enet_ib_cfg	ib_cfg;500 501	struct bfi_enet_rx_cfg	rx_cfg;502} __packed;503 504struct bfi_enet_rx_cfg_rsp {505	struct bfi_msgq_mhdr mh;506	u8		error;507	u8		hw_id;	 /* For debugging */508	u8		rsvd[2];509	struct {510		u32	ql_dbell; /* PCI base address offset */511		u32	qs_dbell; /* PCI base address offset */512		u32	i_dbell;  /* PCI base address offset */513		u8		hw_lqid;  /* For debugging */514		u8		hw_sqid;  /* For debugging */515		u8		hw_cqid;  /* For debugging */516		u8		rsvd;517	} __packed q_handles[BFI_ENET_RX_QSET_MAX];518} __packed;519 520/* RIT521 *522 * bfi_enet_rit_req is used by:523 *	BFI_ENET_H2I_RIT_CFG_REQ524 */525struct bfi_enet_rit_req {526	struct	bfi_msgq_mhdr mh;527	u16	size;			/* number of table-entries used */528	u8	rsvd[2];529	u8	table[BFI_ENET_RSS_RIT_MAX];530} __packed;531 532/* RSS533 *534 * bfi_enet_rss_cfg_req is used by:535 *	BFI_ENET_H2I_RSS_CFG_REQ536 */537enum bfi_enet_rss_type {538	BFI_ENET_RSS_IPV6	= 0x01,539	BFI_ENET_RSS_IPV6_TCP	= 0x02,540	BFI_ENET_RSS_IPV4	= 0x04,541	BFI_ENET_RSS_IPV4_TCP	= 0x08542};543 544struct bfi_enet_rss_cfg {545	u8	type;546	u8	mask;547	u8	rsvd[2];548	u32	key[BFI_ENET_RSS_KEY_LEN];549} __packed;550 551struct bfi_enet_rss_cfg_req {552	struct bfi_msgq_mhdr	mh;553	struct bfi_enet_rss_cfg	cfg;554} __packed;555 556/* MAC Unicast557 *558 * bfi_enet_rx_vlan_req is used by:559 *	BFI_ENET_H2I_MAC_UCAST_SET_REQ560 *	BFI_ENET_H2I_MAC_UCAST_CLR_REQ561 *	BFI_ENET_H2I_MAC_UCAST_ADD_REQ562 *	BFI_ENET_H2I_MAC_UCAST_DEL_REQ563 */564struct bfi_enet_ucast_req {565	struct bfi_msgq_mhdr	mh;566	u8			mac_addr[ETH_ALEN];567	u8			rsvd[2];568} __packed;569 570/* MAC Unicast + VLAN */571struct bfi_enet_mac_n_vlan_req {572	struct bfi_msgq_mhdr	mh;573	u16			vlan_id;574	u8			mac_addr[ETH_ALEN];575} __packed;576 577/* MAC Multicast578 *579 * bfi_enet_mac_mfilter_add_req is used by:580 *	BFI_ENET_H2I_MAC_MCAST_ADD_REQ581 */582struct bfi_enet_mcast_add_req {583	struct bfi_msgq_mhdr	mh;584	u8			mac_addr[ETH_ALEN];585	u8			rsvd[2];586} __packed;587 588/* bfi_enet_mac_mfilter_add_rsp is used by:589 *	BFI_ENET_I2H_MAC_MCAST_ADD_RSP590 */591struct bfi_enet_mcast_add_rsp {592	struct bfi_msgq_mhdr	mh;593	u8			error;594	u8			rsvd;595	u16			cmd_offset;596	u16			handle;597	u8			rsvd1[2];598} __packed;599 600/* bfi_enet_mac_mfilter_del_req is used by:601 *	BFI_ENET_H2I_MAC_MCAST_DEL_REQ602 */603struct bfi_enet_mcast_del_req {604	struct bfi_msgq_mhdr	mh;605	u16			handle;606	u8			rsvd[2];607} __packed;608 609/* VLAN610 *611 * bfi_enet_rx_vlan_req is used by:612 *	BFI_ENET_H2I_RX_VLAN_SET_REQ613 */614struct bfi_enet_rx_vlan_req {615	struct bfi_msgq_mhdr	mh;616	u8			block_idx;617	u8			rsvd[3];618	u32			bit_mask[BFI_ENET_VLAN_WORDS_MAX];619} __packed;620 621/* PAUSE622 *623 * bfi_enet_set_pause_req is used by:624 *	BFI_ENET_H2I_SET_PAUSE_REQ625 */626struct bfi_enet_set_pause_req {627	struct bfi_msgq_mhdr	mh;628	u8			rsvd[2];629	u8			tx_pause;	/* 1 = enable;  0 = disable */630	u8			rx_pause;	/* 1 = enable;  0 = disable */631} __packed;632 633/* DIAGNOSTICS634 *635 * bfi_enet_diag_lb_req is used by:636 *      BFI_ENET_H2I_DIAG_LOOPBACK637 */638struct bfi_enet_diag_lb_req {639	struct bfi_msgq_mhdr	mh;640	u8			rsvd[2];641	u8			mode;		/* cable or Serdes */642	u8			enable;		/* 1 = enable;  0 = disable */643} __packed;644 645/* enum for Loopback opmodes */646enum {647	BFI_ENET_DIAG_LB_OPMODE_EXT = 0,648	BFI_ENET_DIAG_LB_OPMODE_CBL = 1,649};650 651/* STATISTICS652 *653 * bfi_enet_stats_req is used by:654 *    BFI_ENET_H2I_STATS_GET_REQ655 *    BFI_ENET_I2H_STATS_CLR_REQ656 */657struct bfi_enet_stats_req {658	struct bfi_msgq_mhdr	mh;659	u16			stats_mask;660	u8			rsvd[2];661	u32			rx_enet_mask;662	u32			tx_enet_mask;663	union bfi_addr_u	host_buffer;664} __packed;665 666/* defines for "stats_mask" above. */667#define BFI_ENET_STATS_MAC    BIT(0)    /* !< MAC Statistics */668#define BFI_ENET_STATS_BPC    BIT(1)    /* !< Pause Stats from BPC */669#define BFI_ENET_STATS_RAD    BIT(2)    /* !< Rx Admission Statistics */670#define BFI_ENET_STATS_RX_FC  BIT(3)    /* !< Rx FC Stats from RxA */671#define BFI_ENET_STATS_TX_FC  BIT(4)    /* !< Tx FC Stats from TxA */672 673#define BFI_ENET_STATS_ALL    0x1f674 675/* TxF Frame Statistics */676struct bfi_enet_stats_txf {677	u64 ucast_octets;678	u64 ucast;679	u64 ucast_vlan;680 681	u64 mcast_octets;682	u64 mcast;683	u64 mcast_vlan;684 685	u64 bcast_octets;686	u64 bcast;687	u64 bcast_vlan;688 689	u64 errors;690	u64 filter_vlan;      /* frames filtered due to VLAN */691	u64 filter_mac_sa;    /* frames filtered due to SA check */692} __packed;693 694/* RxF Frame Statistics */695struct bfi_enet_stats_rxf {696	u64 ucast_octets;697	u64 ucast;698	u64 ucast_vlan;699 700	u64 mcast_octets;701	u64 mcast;702	u64 mcast_vlan;703 704	u64 bcast_octets;705	u64 bcast;706	u64 bcast_vlan;707	u64 frame_drops;708} __packed;709 710/* FC Tx Frame Statistics */711struct bfi_enet_stats_fc_tx {712	u64 txf_ucast_octets;713	u64 txf_ucast;714	u64 txf_ucast_vlan;715 716	u64 txf_mcast_octets;717	u64 txf_mcast;718	u64 txf_mcast_vlan;719 720	u64 txf_bcast_octets;721	u64 txf_bcast;722	u64 txf_bcast_vlan;723 724	u64 txf_parity_errors;725	u64 txf_timeout;726	u64 txf_fid_parity_errors;727} __packed;728 729/* FC Rx Frame Statistics */730struct bfi_enet_stats_fc_rx {731	u64 rxf_ucast_octets;732	u64 rxf_ucast;733	u64 rxf_ucast_vlan;734 735	u64 rxf_mcast_octets;736	u64 rxf_mcast;737	u64 rxf_mcast_vlan;738 739	u64 rxf_bcast_octets;740	u64 rxf_bcast;741	u64 rxf_bcast_vlan;742} __packed;743 744/* RAD Frame Statistics */745struct bfi_enet_stats_rad {746	u64 rx_frames;747	u64 rx_octets;748	u64 rx_vlan_frames;749 750	u64 rx_ucast;751	u64 rx_ucast_octets;752	u64 rx_ucast_vlan;753 754	u64 rx_mcast;755	u64 rx_mcast_octets;756	u64 rx_mcast_vlan;757 758	u64 rx_bcast;759	u64 rx_bcast_octets;760	u64 rx_bcast_vlan;761 762	u64 rx_drops;763} __packed;764 765/* BPC Tx Registers */766struct bfi_enet_stats_bpc {767	/* transmit stats */768	u64 tx_pause[8];769	u64 tx_zero_pause[8];	/*!< Pause cancellation */770	/*!<Pause initiation rather than retention */771	u64 tx_first_pause[8];772 773	/* receive stats */774	u64 rx_pause[8];775	u64 rx_zero_pause[8];	/*!< Pause cancellation */776	/*!<Pause initiation rather than retention */777	u64 rx_first_pause[8];778} __packed;779 780/* MAC Rx Statistics */781struct bfi_enet_stats_mac {782	u64 stats_clr_cnt;	/* times this stats cleared */783	u64 frame_64;		/* both rx and tx counter */784	u64 frame_65_127;		/* both rx and tx counter */785	u64 frame_128_255;		/* both rx and tx counter */786	u64 frame_256_511;		/* both rx and tx counter */787	u64 frame_512_1023;	/* both rx and tx counter */788	u64 frame_1024_1518;	/* both rx and tx counter */789	u64 frame_1519_1522;	/* both rx and tx counter */790 791	/* receive stats */792	u64 rx_bytes;793	u64 rx_packets;794	u64 rx_fcs_error;795	u64 rx_multicast;796	u64 rx_broadcast;797	u64 rx_control_frames;798	u64 rx_pause;799	u64 rx_unknown_opcode;800	u64 rx_alignment_error;801	u64 rx_frame_length_error;802	u64 rx_code_error;803	u64 rx_carrier_sense_error;804	u64 rx_undersize;805	u64 rx_oversize;806	u64 rx_fragments;807	u64 rx_jabber;808	u64 rx_drop;809 810	/* transmit stats */811	u64 tx_bytes;812	u64 tx_packets;813	u64 tx_multicast;814	u64 tx_broadcast;815	u64 tx_pause;816	u64 tx_deferral;817	u64 tx_excessive_deferral;818	u64 tx_single_collision;819	u64 tx_muliple_collision;820	u64 tx_late_collision;821	u64 tx_excessive_collision;822	u64 tx_total_collision;823	u64 tx_pause_honored;824	u64 tx_drop;825	u64 tx_jabber;826	u64 tx_fcs_error;827	u64 tx_control_frame;828	u64 tx_oversize;829	u64 tx_undersize;830	u64 tx_fragments;831} __packed;832 833/* Complete statistics, DMAed from fw to host followed by834 * BFI_ENET_I2H_STATS_GET_RSP835 */836struct bfi_enet_stats {837	struct bfi_enet_stats_mac	mac_stats;838	struct bfi_enet_stats_bpc	bpc_stats;839	struct bfi_enet_stats_rad	rad_stats;840	struct bfi_enet_stats_rad	rlb_stats;841	struct bfi_enet_stats_fc_rx	fc_rx_stats;842	struct bfi_enet_stats_fc_tx	fc_tx_stats;843	struct bfi_enet_stats_rxf	rxf_stats[BFI_ENET_CFG_MAX];844	struct bfi_enet_stats_txf	txf_stats[BFI_ENET_CFG_MAX];845} __packed;846 847#endif  /* __BFI_ENET_H__ */848