cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

bfi_enet.h (20094B)


      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 Corporation
      8 * All rights reserved
      9 * www.qlogic.com
     10 */
     11
     12/* BNA Hardware and Firmware Interface */
     13
     14/* Skipping statistics collection to avoid clutter.
     15 * Command is no longer needed:
     16 *	MTU
     17 *	TxQ Stop
     18 *	RxQ Stop
     19 *	RxF Enable/Disable
     20 *
     21 * HDS-off request is dynamic
     22 * 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		8
     34#define BFI_ENET_RX_QSET_MAX		16
     35#define BFI_ENET_TXQ_WI_VECT_MAX	4
     36
     37#define BFI_ENET_VLAN_ID_MAX		4096
     38#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.base
    105#define wi_ext_hdr	wi.ext
    106
    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 Request
    341 *
    342 * bfi_enet_req is used by:
    343 *	BFI_ENET_H2I_RX_CFG_CLR_REQ
    344 *	BFI_ENET_H2I_TX_CFG_CLR_REQ
    345 */
    346struct bfi_enet_req {
    347	struct bfi_msgq_mhdr mh;
    348} __packed;
    349
    350/* Enable/Disable Request
    351 *
    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_REQ
    357 *	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_REQ
    377 */
    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_RSP
    384 */
    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 Configuration
    396 *
    397 * bfi_enet_tx_cfg is used by:
    398 *	BFI_ENET_H2I_TX_CFG_SET_REQ
    399 */
    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 Configuration
    445 *
    446 * bfi_enet_rx_cfg is used by:
    447 *	BFI_ENET_H2I_RX_CFG_SET_REQ
    448 */
    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 queues
    485 * 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/* RIT
    521 *
    522 * bfi_enet_rit_req is used by:
    523 *	BFI_ENET_H2I_RIT_CFG_REQ
    524 */
    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/* RSS
    533 *
    534 * bfi_enet_rss_cfg_req is used by:
    535 *	BFI_ENET_H2I_RSS_CFG_REQ
    536 */
    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	= 0x08
    542};
    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 Unicast
    557 *
    558 * bfi_enet_rx_vlan_req is used by:
    559 *	BFI_ENET_H2I_MAC_UCAST_SET_REQ
    560 *	BFI_ENET_H2I_MAC_UCAST_CLR_REQ
    561 *	BFI_ENET_H2I_MAC_UCAST_ADD_REQ
    562 *	BFI_ENET_H2I_MAC_UCAST_DEL_REQ
    563 */
    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 Multicast
    578 *
    579 * bfi_enet_mac_mfilter_add_req is used by:
    580 *	BFI_ENET_H2I_MAC_MCAST_ADD_REQ
    581 */
    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_RSP
    590 */
    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_REQ
    602 */
    603struct bfi_enet_mcast_del_req {
    604	struct bfi_msgq_mhdr	mh;
    605	u16			handle;
    606	u8			rsvd[2];
    607} __packed;
    608
    609/* VLAN
    610 *
    611 * bfi_enet_rx_vlan_req is used by:
    612 *	BFI_ENET_H2I_RX_VLAN_SET_REQ
    613 */
    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/* PAUSE
    622 *
    623 * bfi_enet_set_pause_req is used by:
    624 *	BFI_ENET_H2I_SET_PAUSE_REQ
    625 */
    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/* DIAGNOSTICS
    634 *
    635 * bfi_enet_diag_lb_req is used by:
    636 *      BFI_ENET_H2I_DIAG_LOOPBACK
    637 */
    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/* STATISTICS
    652 *
    653 * bfi_enet_stats_req is used by:
    654 *    BFI_ENET_H2I_STATS_GET_REQ
    655 *    BFI_ENET_I2H_STATS_CLR_REQ
    656 */
    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    0x1f
    674
    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 by
    834 * BFI_ENET_I2H_STATS_GET_RSP
    835 */
    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__ */