Linux Audio

Check our new training course

Loading...
v6.13.7
   1/* SPDX-License-Identifier: GPL-2.0-only */
   2/*
   3 * QLogic qlcnic NIC Driver
   4 * Copyright (c) 2009-2013 QLogic Corporation
 
 
   5 */
   6
   7#ifndef _QLCNIC_H_
   8#define _QLCNIC_H_
   9
  10#include <linux/module.h>
  11#include <linux/kernel.h>
  12#include <linux/types.h>
  13#include <linux/ioport.h>
  14#include <linux/pci.h>
  15#include <linux/netdevice.h>
  16#include <linux/etherdevice.h>
  17#include <linux/ip.h>
  18#include <linux/in.h>
  19#include <linux/tcp.h>
  20#include <linux/skbuff.h>
  21#include <linux/firmware.h>
  22#include <linux/ethtool.h>
  23#include <linux/mii.h>
  24#include <linux/timer.h>
  25#include <linux/irq.h>
  26#include <linux/vmalloc.h>
  27#include <linux/io.h>
  28#include <asm/byteorder.h>
  29#include <linux/bitops.h>
  30#include <linux/if_vlan.h>
  31
  32#include "qlcnic_hdr.h"
  33#include "qlcnic_hw.h"
  34#include "qlcnic_83xx_hw.h"
  35#include "qlcnic_dcb.h"
  36
  37#define _QLCNIC_LINUX_MAJOR 5
  38#define _QLCNIC_LINUX_MINOR 3
  39#define _QLCNIC_LINUX_SUBVERSION 66
  40#define QLCNIC_LINUX_VERSIONID  "5.3.66"
  41#define QLCNIC_DRV_IDC_VER  0x01
  42#define QLCNIC_DRIVER_VERSION  ((_QLCNIC_LINUX_MAJOR << 16) |\
  43		 (_QLCNIC_LINUX_MINOR << 8) | (_QLCNIC_LINUX_SUBVERSION))
  44
  45#define QLCNIC_VERSION_CODE(a, b, c)	(((a) << 24) + ((b) << 16) + (c))
  46#define _major(v)	(((v) >> 24) & 0xff)
  47#define _minor(v)	(((v) >> 16) & 0xff)
  48#define _build(v)	((v) & 0xffff)
  49
  50/* version in image has weird encoding:
  51 *  7:0  - major
  52 * 15:8  - minor
  53 * 31:16 - build (little endian)
  54 */
  55#define QLCNIC_DECODE_VERSION(v) \
  56	QLCNIC_VERSION_CODE(((v) & 0xff), (((v) >> 8) & 0xff), ((v) >> 16))
  57
  58#define QLCNIC_MIN_FW_VERSION     QLCNIC_VERSION_CODE(4, 4, 2)
  59#define QLCNIC_NUM_FLASH_SECTORS (64)
  60#define QLCNIC_FLASH_SECTOR_SIZE (64 * 1024)
  61#define QLCNIC_FLASH_TOTAL_SIZE  (QLCNIC_NUM_FLASH_SECTORS \
  62					* QLCNIC_FLASH_SECTOR_SIZE)
  63
  64#define RCV_DESC_RINGSIZE(rds_ring)	\
  65	(sizeof(struct rcv_desc) * (rds_ring)->num_desc)
  66#define RCV_BUFF_RINGSIZE(rds_ring)	\
  67	(sizeof(struct qlcnic_rx_buffer) * rds_ring->num_desc)
  68#define STATUS_DESC_RINGSIZE(sds_ring)	\
  69	(sizeof(struct status_desc) * (sds_ring)->num_desc)
  70#define TX_BUFF_RINGSIZE(tx_ring)	\
  71	(sizeof(struct qlcnic_cmd_buffer) * tx_ring->num_desc)
  72#define TX_DESC_RINGSIZE(tx_ring)	\
  73	(sizeof(struct cmd_desc_type0) * tx_ring->num_desc)
  74
  75#define QLCNIC_P3P_A0		0x50
  76#define QLCNIC_P3P_C0		0x58
  77
  78#define QLCNIC_IS_REVISION_P3P(REVISION)     (REVISION >= QLCNIC_P3P_A0)
  79
  80#define FIRST_PAGE_GROUP_START	0
  81#define FIRST_PAGE_GROUP_END	0x100000
  82
  83#define P3P_MAX_MTU                     (9600)
  84#define P3P_MIN_MTU                     (68)
  85#define QLCNIC_MAX_ETHERHDR                32 /* This contains some padding */
  86
  87#define QLCNIC_P3P_RX_BUF_MAX_LEN         (QLCNIC_MAX_ETHERHDR + ETH_DATA_LEN)
  88#define QLCNIC_P3P_RX_JUMBO_BUF_MAX_LEN   (QLCNIC_MAX_ETHERHDR + P3P_MAX_MTU)
  89#define QLCNIC_CT_DEFAULT_RX_BUF_LEN	2048
  90#define QLCNIC_LRO_BUFFER_EXTRA		2048
  91
  92/* Tx defines */
  93#define QLCNIC_MAX_FRAGS_PER_TX	14
  94#define MAX_TSO_HEADER_DESC	2
  95#define MGMT_CMD_DESC_RESV	4
  96#define TX_STOP_THRESH		((MAX_SKB_FRAGS >> 2) + MAX_TSO_HEADER_DESC \
  97							+ MGMT_CMD_DESC_RESV)
  98#define QLCNIC_MAX_TX_TIMEOUTS	2
  99
 100/* Driver will use 1 Tx ring in INT-x/MSI/SRIOV mode. */
 101#define QLCNIC_SINGLE_RING		1
 102#define QLCNIC_DEF_SDS_RINGS		4
 103#define QLCNIC_DEF_TX_RINGS		4
 104#define QLCNIC_MAX_VNIC_TX_RINGS	4
 105#define QLCNIC_MAX_VNIC_SDS_RINGS	4
 106#define QLCNIC_83XX_MINIMUM_VECTOR	3
 107#define QLCNIC_82XX_MINIMUM_VECTOR	2
 108
 109enum qlcnic_queue_type {
 110	QLCNIC_TX_QUEUE = 1,
 111	QLCNIC_RX_QUEUE,
 112};
 113
 114/* Operational mode for driver */
 115#define QLCNIC_VNIC_MODE	0xFF
 116#define QLCNIC_DEFAULT_MODE	0x0
 117
 118/* Virtual NIC function count */
 119#define QLC_DEFAULT_VNIC_COUNT	8
 120#define QLC_84XX_VNIC_COUNT	16
 121
 122/*
 123 * Following are the states of the Phantom. Phantom will set them and
 124 * Host will read to check if the fields are correct.
 125 */
 126#define PHAN_INITIALIZE_FAILED		0xffff
 127#define PHAN_INITIALIZE_COMPLETE	0xff01
 128
 129/* Host writes the following to notify that it has done the init-handshake */
 130#define PHAN_INITIALIZE_ACK		0xf00f
 131#define PHAN_PEG_RCV_INITIALIZED	0xff01
 132
 133#define NUM_RCV_DESC_RINGS	3
 134
 135#define RCV_RING_NORMAL 0
 136#define RCV_RING_JUMBO	1
 137
 138#define MIN_CMD_DESCRIPTORS		64
 139#define MIN_RCV_DESCRIPTORS		64
 140#define MIN_JUMBO_DESCRIPTORS		32
 141
 142#define MAX_CMD_DESCRIPTORS		1024
 143#define MAX_RCV_DESCRIPTORS_1G		4096
 144#define MAX_RCV_DESCRIPTORS_10G 	8192
 145#define MAX_RCV_DESCRIPTORS_VF		2048
 146#define MAX_JUMBO_RCV_DESCRIPTORS_1G	512
 147#define MAX_JUMBO_RCV_DESCRIPTORS_10G	1024
 148
 149#define DEFAULT_RCV_DESCRIPTORS_1G	2048
 150#define DEFAULT_RCV_DESCRIPTORS_10G	4096
 151#define DEFAULT_RCV_DESCRIPTORS_VF	1024
 152#define MAX_RDS_RINGS                   2
 153
 154#define get_next_index(index, length)	\
 155	(((index) + 1) & ((length) - 1))
 156
 157/*
 158 * Following data structures describe the descriptors that will be used.
 159 * Added fileds of tcpHdrSize and ipHdrSize, The driver needs to do it only when
 160 * we are doing LSO (above the 1500 size packet) only.
 161 */
 162struct cmd_desc_type0 {
 163	u8 tcp_hdr_offset;	/* For LSO only */
 164	u8 ip_hdr_offset;	/* For LSO only */
 165	__le16 flags_opcode;	/* 15:13 unused, 12:7 opcode, 6:0 flags */
 166	__le32 nfrags__length;	/* 31:8 total len, 7:0 frag count */
 167
 168	__le64 addr_buffer2;
 169
 170	__le16 encap_descr;	/* 15:10 offset of outer L3 header,
 171				 * 9:6 number of 32bit words in outer L3 header,
 172				 * 5 offload outer L4 checksum,
 173				 * 4 offload outer L3 checksum,
 174				 * 3 Inner L4 type, TCP=0, UDP=1,
 175				 * 2 Inner L3 type, IPv4=0, IPv6=1,
 176				 * 1 Outer L3 type,IPv4=0, IPv6=1,
 177				 * 0 type of encapsulation, GRE=0, VXLAN=1
 178				 */
 179	__le16 mss;
 180	u8 port_ctxid;		/* 7:4 ctxid 3:0 port */
 181	u8 hdr_length;		/* LSO only : MAC+IP+TCP Hdr size */
 182	u8 outer_hdr_length;	/* Encapsulation only */
 183	u8 rsvd1;
 184
 185	__le64 addr_buffer3;
 186	__le64 addr_buffer1;
 187
 188	__le16 buffer_length[4];
 189
 190	__le64 addr_buffer4;
 191
 192	u8 eth_addr[ETH_ALEN];
 193	__le16 vlan_TCI;	/* In case of  encapsulation,
 194				 * this is for outer VLAN
 195				 */
 196
 197} __attribute__ ((aligned(64)));
 198
 199/* Note: sizeof(rcv_desc) should always be a mutliple of 2 */
 200struct rcv_desc {
 201	__le16 reference_handle;
 202	__le16 reserved;
 203	__le32 buffer_length;	/* allocated buffer length (usually 2K) */
 204	__le64 addr_buffer;
 205} __packed;
 206
 207struct status_desc {
 208	__le64 status_desc_data[2];
 209} __attribute__ ((aligned(16)));
 210
 211/* UNIFIED ROMIMAGE */
 212#define QLCNIC_UNI_FW_MIN_SIZE		0xc8000
 213#define QLCNIC_UNI_DIR_SECT_PRODUCT_TBL	0x0
 214#define QLCNIC_UNI_DIR_SECT_BOOTLD	0x6
 215#define QLCNIC_UNI_DIR_SECT_FW		0x7
 216
 217/*Offsets */
 218#define QLCNIC_UNI_CHIP_REV_OFF		10
 219#define QLCNIC_UNI_FLAGS_OFF		11
 220#define QLCNIC_UNI_BIOS_VERSION_OFF 	12
 221#define QLCNIC_UNI_BOOTLD_IDX_OFF	27
 222#define QLCNIC_UNI_FIRMWARE_IDX_OFF 	29
 223
 224struct uni_table_desc{
 225	__le32	findex;
 226	__le32	num_entries;
 227	__le32	entry_size;
 228	__le32	reserved[5];
 229};
 230
 231struct uni_data_desc{
 232	__le32	findex;
 233	__le32	size;
 234	__le32	reserved[5];
 235};
 236
 237/* Flash Defines and Structures */
 238#define QLCNIC_FLT_LOCATION	0x3F1000
 239#define QLCNIC_FDT_LOCATION     0x3F0000
 240#define QLCNIC_B0_FW_IMAGE_REGION 0x74
 241#define QLCNIC_C0_FW_IMAGE_REGION 0x97
 242#define QLCNIC_BOOTLD_REGION    0X72
 243struct qlcnic_flt_header {
 244	u16 version;
 245	u16 len;
 246	u16 checksum;
 247	u16 reserved;
 248};
 249
 250struct qlcnic_flt_entry {
 251	u8 region;
 252	u8 reserved0;
 253	u8 attrib;
 254	u8 reserved1;
 255	u32 size;
 256	u32 start_addr;
 257	u32 end_addr;
 258};
 259
 260/* Flash Descriptor Table */
 261struct qlcnic_fdt {
 262	u32	valid;
 263	u16	ver;
 264	u16	len;
 265	u16	cksum;
 266	u16	unused;
 267	u8	model[16];
 268	u8	mfg_id;
 269	u16	id;
 270	u8	flag;
 271	u8	erase_cmd;
 272	u8	alt_erase_cmd;
 273	u8	write_enable_cmd;
 274	u8	write_enable_bits;
 275	u8	write_statusreg_cmd;
 276	u8	unprotected_sec_cmd;
 277	u8	read_manuf_cmd;
 278	u32	block_size;
 279	u32	alt_block_size;
 280	u32	flash_size;
 281	u32	write_enable_data;
 282	u8	readid_addr_len;
 283	u8	write_disable_bits;
 284	u8	read_dev_id_len;
 285	u8	chip_erase_cmd;
 286	u16	read_timeo;
 287	u8	protected_sec_cmd;
 288	u8	resvd[65];
 289};
 290/* Magic number to let user know flash is programmed */
 291#define	QLCNIC_BDINFO_MAGIC 0x12345678
 292
 293#define QLCNIC_BRDTYPE_P3P_REF_QG	0x0021
 294#define QLCNIC_BRDTYPE_P3P_HMEZ		0x0022
 295#define QLCNIC_BRDTYPE_P3P_10G_CX4_LP	0x0023
 296#define QLCNIC_BRDTYPE_P3P_4_GB		0x0024
 297#define QLCNIC_BRDTYPE_P3P_IMEZ		0x0025
 298#define QLCNIC_BRDTYPE_P3P_10G_SFP_PLUS	0x0026
 299#define QLCNIC_BRDTYPE_P3P_10000_BASE_T	0x0027
 300#define QLCNIC_BRDTYPE_P3P_XG_LOM	0x0028
 301#define QLCNIC_BRDTYPE_P3P_4_GB_MM	0x0029
 302#define QLCNIC_BRDTYPE_P3P_10G_SFP_CT	0x002a
 303#define QLCNIC_BRDTYPE_P3P_10G_SFP_QT	0x002b
 304#define QLCNIC_BRDTYPE_P3P_10G_CX4	0x0031
 305#define QLCNIC_BRDTYPE_P3P_10G_XFP	0x0032
 306#define QLCNIC_BRDTYPE_P3P_10G_TP	0x0080
 307
 308#define QLCNIC_MSIX_TABLE_OFFSET	0x44
 309
 310/* Flash memory map */
 311#define QLCNIC_BRDCFG_START	0x4000		/* board config */
 312#define QLCNIC_BOOTLD_START	0x10000		/* bootld */
 313#define QLCNIC_IMAGE_START	0x43000		/* compressed image */
 314#define QLCNIC_USER_START	0x3E8000	/* Firmware info */
 315
 316#define QLCNIC_FW_VERSION_OFFSET	(QLCNIC_USER_START+0x408)
 317#define QLCNIC_FW_SIZE_OFFSET		(QLCNIC_USER_START+0x40c)
 318#define QLCNIC_FW_SERIAL_NUM_OFFSET	(QLCNIC_USER_START+0x81c)
 319#define QLCNIC_BIOS_VERSION_OFFSET	(QLCNIC_USER_START+0x83c)
 320
 321#define QLCNIC_BRDTYPE_OFFSET		(QLCNIC_BRDCFG_START+0x8)
 322#define QLCNIC_FW_MAGIC_OFFSET		(QLCNIC_BRDCFG_START+0x128)
 323
 324#define QLCNIC_FW_MIN_SIZE		(0x3fffff)
 325#define QLCNIC_UNIFIED_ROMIMAGE  	0
 326#define QLCNIC_FLASH_ROMIMAGE		1
 327#define QLCNIC_UNKNOWN_ROMIMAGE		0xff
 328
 329#define QLCNIC_UNIFIED_ROMIMAGE_NAME	"phanfw.bin"
 330#define QLCNIC_FLASH_ROMIMAGE_NAME	"flash"
 331
 332extern char qlcnic_driver_name[];
 333
 334extern int qlcnic_use_msi;
 335extern int qlcnic_use_msi_x;
 336extern int qlcnic_auto_fw_reset;
 337extern int qlcnic_load_fw_file;
 338
 339/* Number of status descriptors to handle per interrupt */
 340#define MAX_STATUS_HANDLE	(64)
 341
 342/*
 343 * qlcnic_skb_frag{} is to contain mapping info for each SG list. This
 344 * has to be freed when DMA is complete. This is part of qlcnic_tx_buffer{}.
 345 */
 346struct qlcnic_skb_frag {
 347	u64 dma;
 348	u64 length;
 349};
 350
 351/*    Following defines are for the state of the buffers    */
 352#define	QLCNIC_BUFFER_FREE	0
 353#define	QLCNIC_BUFFER_BUSY	1
 354
 355/*
 356 * There will be one qlcnic_buffer per skb packet.    These will be
 357 * used to save the dma info for pci_unmap_page()
 358 */
 359struct qlcnic_cmd_buffer {
 360	struct sk_buff *skb;
 361	struct qlcnic_skb_frag frag_array[MAX_SKB_FRAGS + 1];
 362	u32 frag_count;
 363};
 364
 365/* In rx_buffer, we do not need multiple fragments as is a single buffer */
 366struct qlcnic_rx_buffer {
 367	u16 ref_handle;
 368	struct sk_buff *skb;
 369	struct list_head list;
 370	u64 dma;
 371};
 372
 373/* Board types */
 374#define	QLCNIC_GBE	0x01
 375#define	QLCNIC_XGBE	0x02
 376
 377/*
 378 * Interrupt coalescing defaults. The defaults are for 1500 MTU. It is
 379 * adjusted based on configured MTU.
 380 */
 381#define QLCNIC_INTR_COAL_TYPE_RX		1
 382#define QLCNIC_INTR_COAL_TYPE_TX		2
 383#define QLCNIC_INTR_COAL_TYPE_RX_TX		3
 384
 385#define QLCNIC_DEF_INTR_COALESCE_RX_TIME_US	3
 386#define QLCNIC_DEF_INTR_COALESCE_RX_PACKETS	256
 387
 388#define QLCNIC_DEF_INTR_COALESCE_TX_TIME_US	64
 389#define QLCNIC_DEF_INTR_COALESCE_TX_PACKETS	64
 390
 391#define QLCNIC_INTR_DEFAULT			0x04
 392#define QLCNIC_CONFIG_INTR_COALESCE		3
 393#define QLCNIC_DEV_INFO_SIZE			2
 394
 395struct qlcnic_nic_intr_coalesce {
 396	u8	type;
 397	u8	sts_ring_mask;
 398	u16	rx_packets;
 399	u16	rx_time_us;
 400	u16	tx_packets;
 401	u16	tx_time_us;
 402	u16	flag;
 403	u32	timer_out;
 404};
 405
 406struct qlcnic_83xx_dump_template_hdr {
 407	u32	type;
 408	u32	offset;
 409	u32	size;
 410	u32	cap_mask;
 411	u32	num_entries;
 412	u32	version;
 413	u32	timestamp;
 414	u32	checksum;
 415	u32	drv_cap_mask;
 416	u32	sys_info[3];
 417	u32	saved_state[16];
 418	u32	cap_sizes[8];
 419	u32	ocm_wnd_reg[16];
 420	u32	rsvd[];
 421};
 422
 423struct qlcnic_82xx_dump_template_hdr {
 424	u32	type;
 425	u32	offset;
 426	u32	size;
 427	u32	cap_mask;
 428	u32	num_entries;
 429	u32	version;
 430	u32	timestamp;
 431	u32	checksum;
 432	u32	drv_cap_mask;
 433	u32	sys_info[3];
 434	u32	saved_state[16];
 435	u32	cap_sizes[8];
 436	u32	rsvd[7];
 437	u32	capabilities;
 438	u32	rsvd1[];
 439};
 440
 441#define QLC_PEX_DMA_READ_SIZE	(PAGE_SIZE * 16)
 442
 443struct qlcnic_fw_dump {
 444	u8	clr;	/* flag to indicate if dump is cleared */
 445	bool	enable; /* enable/disable dump */
 446	u32	size;	/* total size of the dump */
 447	u32	cap_mask; /* Current capture mask */
 448	void	*data;	/* dump data area */
 449	void	*tmpl_hdr;
 450	dma_addr_t phys_addr;
 451	void	*dma_buffer;
 452	bool	use_pex_dma;
 453	/* Read only elements which are common between 82xx and 83xx
 454	 * template header. Update these values immediately after we read
 455	 * template header from Firmware
 456	 */
 457	u32	tmpl_hdr_size;
 458	u32	version;
 459	u32	num_entries;
 460	u32	offset;
 461};
 462
 463/*
 464 * One hardware_context{} per adapter
 465 * contains interrupt info as well shared hardware info.
 466 */
 467struct qlcnic_hardware_context {
 468	void __iomem *pci_base0;
 469	void __iomem *ocm_win_crb;
 470
 471	unsigned long pci_len0;
 472
 473	rwlock_t crb_lock;
 474	struct mutex mem_lock;
 475
 476	u8 revision_id;
 477	u8 pci_func;
 478	u8 linkup;
 479	u8 loopback_state;
 480	u8 beacon_state;
 481	u8 has_link_events;
 482	u8 fw_type;
 483	u8 physical_port;
 484	u8 reset_context;
 485	u8 msix_supported;
 486	u8 max_mac_filters;
 487	u8 mc_enabled;
 488	u8 max_mc_count;
 489	u8 diag_test;
 490	u8 num_msix;
 491	u8 nic_mode;
 492	int diag_cnt;
 493
 494	u16 max_uc_count;
 495	u16 port_type;
 496	u16 board_type;
 497	u16 supported_type;
 498
 499	u32 link_speed;
 500	u16 link_duplex;
 501	u16 link_autoneg;
 502	u16 module_type;
 503
 504	u16 op_mode;
 505	u16 switch_mode;
 506	u16 max_tx_ques;
 507	u16 max_rx_ques;
 508	u16 max_mtu;
 509	u32 msg_enable;
 510	u16 total_nic_func;
 511	u16 max_pci_func;
 512	u32 max_vnic_func;
 513	u32 total_pci_func;
 514
 515	u32 capabilities;
 516	u32 extra_capability[3];
 517	u32 temp;
 518	u32 int_vec_bit;
 519	u32 fw_hal_version;
 520	u32 port_config;
 521	struct qlcnic_hardware_ops *hw_ops;
 522	struct qlcnic_nic_intr_coalesce coal;
 523	struct qlcnic_fw_dump fw_dump;
 524	struct qlcnic_fdt fdt;
 525	struct qlc_83xx_reset reset;
 526	struct qlc_83xx_idc idc;
 527	struct qlc_83xx_fw_info *fw_info;
 528	struct qlcnic_intrpt_config *intr_tbl;
 529	struct qlcnic_sriov *sriov;
 530	u32 *reg_tbl;
 531	u32 *ext_reg_tbl;
 532	u32 mbox_aen[QLC_83XX_MBX_AEN_CNT];
 533	u32 mbox_reg[4];
 534	struct qlcnic_mailbox *mailbox;
 535	u8 extend_lb_time;
 536	u8 phys_port_id[ETH_ALEN];
 537	u8 lb_mode;
 
 
 538	struct device *hwmon_dev;
 539	u32 post_mode;
 540	bool run_post;
 541};
 542
 543struct qlcnic_adapter_stats {
 544	u64  xmitcalled;
 545	u64  xmitfinished;
 546	u64  rxdropped;
 547	u64  txdropped;
 548	u64  csummed;
 549	u64  rx_pkts;
 550	u64  lro_pkts;
 551	u64  rxbytes;
 552	u64  txbytes;
 553	u64  lrobytes;
 554	u64  lso_frames;
 555	u64  encap_lso_frames;
 556	u64  encap_tx_csummed;
 557	u64  encap_rx_csummed;
 558	u64  xmit_on;
 559	u64  xmit_off;
 560	u64  skb_alloc_failure;
 561	u64  null_rxbuf;
 562	u64  rx_dma_map_error;
 563	u64  tx_dma_map_error;
 564	u64  spurious_intr;
 565	u64  mac_filter_limit_overrun;
 566	u64  mbx_spurious_intr;
 567};
 568
 569/*
 570 * Rcv Descriptor Context. One such per Rcv Descriptor. There may
 571 * be one Rcv Descriptor for normal packets, one for jumbo and may be others.
 572 */
 573struct qlcnic_host_rds_ring {
 574	void __iomem *crb_rcv_producer;
 575	struct rcv_desc *desc_head;
 576	struct qlcnic_rx_buffer *rx_buf_arr;
 577	u32 num_desc;
 578	u32 producer;
 579	u32 dma_size;
 580	u32 skb_size;
 581	u32 flags;
 582	struct list_head free_list;
 583	spinlock_t lock;
 584	dma_addr_t phys_addr;
 585} ____cacheline_internodealigned_in_smp;
 586
 587struct qlcnic_host_sds_ring {
 588	u32 consumer;
 589	u32 num_desc;
 590	void __iomem *crb_sts_consumer;
 591
 592	struct qlcnic_host_tx_ring *tx_ring;
 593	struct status_desc *desc_head;
 594	struct qlcnic_adapter *adapter;
 595	struct napi_struct napi;
 596	struct list_head free_list[NUM_RCV_DESC_RINGS];
 597
 598	void __iomem *crb_intr_mask;
 599	int irq;
 600
 601	dma_addr_t phys_addr;
 602	char name[IFNAMSIZ + 12];
 603} ____cacheline_internodealigned_in_smp;
 604
 605struct qlcnic_tx_queue_stats {
 606	u64 xmit_on;
 607	u64 xmit_off;
 608	u64 xmit_called;
 609	u64 xmit_finished;
 610	u64 tx_bytes;
 611};
 612
 613struct qlcnic_host_tx_ring {
 614	int irq;
 615	void __iomem *crb_intr_mask;
 616	char name[IFNAMSIZ + 12];
 617	u16 ctx_id;
 618
 619	u32 state;
 620	u32 producer;
 621	u32 sw_consumer;
 622	u32 num_desc;
 623
 624	struct qlcnic_tx_queue_stats tx_stats;
 625
 626	void __iomem *crb_cmd_producer;
 627	struct cmd_desc_type0 *desc_head;
 628	struct qlcnic_adapter *adapter;
 629	struct napi_struct napi;
 630	struct qlcnic_cmd_buffer *cmd_buf_arr;
 631	__le32 *hw_consumer;
 632
 633	dma_addr_t phys_addr;
 634	dma_addr_t hw_cons_phys_addr;
 635	struct netdev_queue *txq;
 636	/* Lock to protect Tx descriptors cleanup */
 637	spinlock_t tx_clean_lock;
 638} ____cacheline_internodealigned_in_smp;
 639
 640/*
 641 * Receive context. There is one such structure per instance of the
 642 * receive processing. Any state information that is relevant to
 643 * the receive, and is must be in this structure. The global data may be
 644 * present elsewhere.
 645 */
 646struct qlcnic_recv_context {
 647	struct qlcnic_host_rds_ring *rds_rings;
 648	struct qlcnic_host_sds_ring *sds_rings;
 649	u32 state;
 650	u16 context_id;
 651	u16 virt_port;
 652};
 653
 654/* HW context creation */
 655
 656#define QLCNIC_OS_CRB_RETRY_COUNT	4000
 657
 658#define QLCNIC_CDRP_CMD_BIT		0x80000000
 659
 660/*
 661 * All responses must have the QLCNIC_CDRP_CMD_BIT cleared
 662 * in the crb QLCNIC_CDRP_CRB_OFFSET.
 663 */
 664#define QLCNIC_CDRP_FORM_RSP(rsp)	(rsp)
 665#define QLCNIC_CDRP_IS_RSP(rsp)	(((rsp) & QLCNIC_CDRP_CMD_BIT) == 0)
 666
 667#define QLCNIC_CDRP_RSP_OK		0x00000001
 668#define QLCNIC_CDRP_RSP_FAIL		0x00000002
 669#define QLCNIC_CDRP_RSP_TIMEOUT 	0x00000003
 670
 671/*
 672 * All commands must have the QLCNIC_CDRP_CMD_BIT set in
 673 * the crb QLCNIC_CDRP_CRB_OFFSET.
 674 */
 675#define QLCNIC_CDRP_FORM_CMD(cmd)	(QLCNIC_CDRP_CMD_BIT | (cmd))
 676
 677#define QLCNIC_RCODE_SUCCESS		0
 678#define QLCNIC_RCODE_INVALID_ARGS	6
 679#define QLCNIC_RCODE_NOT_SUPPORTED	9
 680#define QLCNIC_RCODE_NOT_PERMITTED	10
 681#define QLCNIC_RCODE_NOT_IMPL		15
 682#define QLCNIC_RCODE_INVALID		16
 683#define QLCNIC_RCODE_TIMEOUT		17
 684#define QLCNIC_DESTROY_CTX_RESET	0
 685
 686/*
 687 * Capabilities Announced
 688 */
 689#define QLCNIC_CAP0_LEGACY_CONTEXT	(1)
 690#define QLCNIC_CAP0_LEGACY_MN		(1 << 2)
 691#define QLCNIC_CAP0_LSO 		(1 << 6)
 692#define QLCNIC_CAP0_JUMBO_CONTIGUOUS	(1 << 7)
 693#define QLCNIC_CAP0_LRO_CONTIGUOUS	(1 << 8)
 694#define QLCNIC_CAP0_VALIDOFF		(1 << 11)
 695#define QLCNIC_CAP0_LRO_MSS		(1 << 21)
 696#define QLCNIC_CAP0_TX_MULTI		(1 << 22)
 697
 698/*
 699 * Context state
 700 */
 701#define QLCNIC_HOST_CTX_STATE_FREED	0
 702#define QLCNIC_HOST_CTX_STATE_ACTIVE	2
 703
 704/*
 705 * Rx context
 706 */
 707
 708struct qlcnic_hostrq_sds_ring {
 709	__le64 host_phys_addr;	/* Ring base addr */
 710	__le32 ring_size;		/* Ring entries */
 711	__le16 msi_index;
 712	__le16 rsvd;		/* Padding */
 713} __packed;
 714
 715struct qlcnic_hostrq_rds_ring {
 716	__le64 host_phys_addr;	/* Ring base addr */
 717	__le64 buff_size;		/* Packet buffer size */
 718	__le32 ring_size;		/* Ring entries */
 719	__le32 ring_kind;		/* Class of ring */
 720} __packed;
 721
 722struct qlcnic_hostrq_rx_ctx {
 723	__le64 host_rsp_dma_addr;	/* Response dma'd here */
 724	__le32 capabilities[4];		/* Flag bit vector */
 725	__le32 host_int_crb_mode;	/* Interrupt crb usage */
 726	__le32 host_rds_crb_mode;	/* RDS crb usage */
 727	/* These ring offsets are relative to data[0] below */
 728	__le32 rds_ring_offset;	/* Offset to RDS config */
 729	__le32 sds_ring_offset;	/* Offset to SDS config */
 730	__le16 num_rds_rings;	/* Count of RDS rings */
 731	__le16 num_sds_rings;	/* Count of SDS rings */
 732	__le16 valid_field_offset;
 733	u8  txrx_sds_binding;
 734	u8  msix_handler;
 735	u8  reserved[128];      /* reserve space for future expansion*/
 736	/* MUST BE 64-bit aligned.
 737	   The following is packed:
 738	   - N hostrq_rds_rings
 739	   - N hostrq_sds_rings */
 740	char data[];
 741} __packed;
 742
 743struct qlcnic_cardrsp_rds_ring{
 744	__le32 host_producer_crb;	/* Crb to use */
 745	__le32 rsvd1;		/* Padding */
 746} __packed;
 747
 748struct qlcnic_cardrsp_sds_ring {
 749	__le32 host_consumer_crb;	/* Crb to use */
 750	__le32 interrupt_crb;	/* Crb to use */
 751} __packed;
 752
 753struct qlcnic_cardrsp_rx_ctx {
 754	/* These ring offsets are relative to data[0] below */
 755	__le32 rds_ring_offset;	/* Offset to RDS config */
 756	__le32 sds_ring_offset;	/* Offset to SDS config */
 757	__le32 host_ctx_state;	/* Starting State */
 758	__le32 num_fn_per_port;	/* How many PCI fn share the port */
 759	__le16 num_rds_rings;	/* Count of RDS rings */
 760	__le16 num_sds_rings;	/* Count of SDS rings */
 761	__le16 context_id;		/* Handle for context */
 762	u8  phys_port;		/* Physical id of port */
 763	u8  virt_port;		/* Virtual/Logical id of port */
 764	u8  reserved[128];	/* save space for future expansion */
 765	/*  MUST BE 64-bit aligned.
 766	   The following is packed:
 767	   - N cardrsp_rds_rings
 768	   - N cardrs_sds_rings */
 769	char data[];
 770} __packed;
 771
 772#define SIZEOF_HOSTRQ_RX(HOSTRQ_RX, rds_rings, sds_rings)	\
 773	(sizeof(HOSTRQ_RX) + 					\
 774	(rds_rings)*(sizeof(struct qlcnic_hostrq_rds_ring)) +		\
 775	(sds_rings)*(sizeof(struct qlcnic_hostrq_sds_ring)))
 776
 777#define SIZEOF_CARDRSP_RX(CARDRSP_RX, rds_rings, sds_rings) 	\
 778	(sizeof(CARDRSP_RX) + 					\
 779	(rds_rings)*(sizeof(struct qlcnic_cardrsp_rds_ring)) + 		\
 780	(sds_rings)*(sizeof(struct qlcnic_cardrsp_sds_ring)))
 781
 782/*
 783 * Tx context
 784 */
 785
 786struct qlcnic_hostrq_cds_ring {
 787	__le64 host_phys_addr;	/* Ring base addr */
 788	__le32 ring_size;		/* Ring entries */
 789	__le32 rsvd;		/* Padding */
 790} __packed;
 791
 792struct qlcnic_hostrq_tx_ctx {
 793	__le64 host_rsp_dma_addr;	/* Response dma'd here */
 794	__le64 cmd_cons_dma_addr;	/*  */
 795	__le64 dummy_dma_addr;	/*  */
 796	__le32 capabilities[4];	/* Flag bit vector */
 797	__le32 host_int_crb_mode;	/* Interrupt crb usage */
 798	__le32 rsvd1;		/* Padding */
 799	__le16 rsvd2;		/* Padding */
 800	__le16 interrupt_ctl;
 801	__le16 msi_index;
 802	__le16 rsvd3;		/* Padding */
 803	struct qlcnic_hostrq_cds_ring cds_ring;	/* Desc of cds ring */
 804	u8  reserved[128];	/* future expansion */
 805} __packed;
 806
 807struct qlcnic_cardrsp_cds_ring {
 808	__le32 host_producer_crb;	/* Crb to use */
 809	__le32 interrupt_crb;	/* Crb to use */
 810} __packed;
 811
 812struct qlcnic_cardrsp_tx_ctx {
 813	__le32 host_ctx_state;	/* Starting state */
 814	__le16 context_id;		/* Handle for context */
 815	u8  phys_port;		/* Physical id of port */
 816	u8  virt_port;		/* Virtual/Logical id of port */
 817	struct qlcnic_cardrsp_cds_ring cds_ring;	/* Card cds settings */
 818	u8  reserved[128];	/* future expansion */
 819} __packed;
 820
 821#define SIZEOF_HOSTRQ_TX(HOSTRQ_TX)	(sizeof(HOSTRQ_TX))
 822#define SIZEOF_CARDRSP_TX(CARDRSP_TX)	(sizeof(CARDRSP_TX))
 823
 824/* CRB */
 825
 826#define QLCNIC_HOST_RDS_CRB_MODE_UNIQUE	0
 827#define QLCNIC_HOST_RDS_CRB_MODE_SHARED	1
 828#define QLCNIC_HOST_RDS_CRB_MODE_CUSTOM	2
 829#define QLCNIC_HOST_RDS_CRB_MODE_MAX	3
 830
 831#define QLCNIC_HOST_INT_CRB_MODE_UNIQUE	0
 832#define QLCNIC_HOST_INT_CRB_MODE_SHARED	1
 833#define QLCNIC_HOST_INT_CRB_MODE_NORX	2
 834#define QLCNIC_HOST_INT_CRB_MODE_NOTX	3
 835#define QLCNIC_HOST_INT_CRB_MODE_NORXTX	4
 836
 837
 838/* MAC */
 839
 840#define MC_COUNT_P3P	38
 841
 842#define QLCNIC_MAC_NOOP	0
 843#define QLCNIC_MAC_ADD	1
 844#define QLCNIC_MAC_DEL	2
 845#define QLCNIC_MAC_VLAN_ADD	3
 846#define QLCNIC_MAC_VLAN_DEL	4
 847
 848enum qlcnic_mac_type {
 849	QLCNIC_UNICAST_MAC,
 850	QLCNIC_MULTICAST_MAC,
 851	QLCNIC_BROADCAST_MAC,
 852};
 853
 854struct qlcnic_mac_vlan_list {
 855	struct list_head list;
 856	uint8_t mac_addr[ETH_ALEN+2];
 857	u16 vlan_id;
 858	enum qlcnic_mac_type mac_type;
 859};
 860
 861/* MAC Learn */
 862#define NO_MAC_LEARN		0
 863#define DRV_MAC_LEARN		1
 864#define FDB_MAC_LEARN		2
 865
 866#define QLCNIC_HOST_REQUEST	0x13
 867#define QLCNIC_REQUEST		0x14
 868
 869#define QLCNIC_MAC_EVENT	0x1
 870
 871#define QLCNIC_IP_UP		2
 872#define QLCNIC_IP_DOWN		3
 873
 874#define QLCNIC_ILB_MODE		0x1
 875#define QLCNIC_ELB_MODE		0x2
 876#define QLCNIC_LB_MODE_MASK	0x3
 877
 878#define QLCNIC_LINKEVENT	0x1
 879#define QLCNIC_LB_RESPONSE	0x2
 880#define QLCNIC_IS_LB_CONFIGURED(VAL)	\
 881		(VAL == (QLCNIC_LINKEVENT | QLCNIC_LB_RESPONSE))
 882
 883/*
 884 * Driver --> Firmware
 885 */
 886#define QLCNIC_H2C_OPCODE_CONFIG_RSS			0x1
 887#define QLCNIC_H2C_OPCODE_CONFIG_INTR_COALESCE		0x3
 888#define QLCNIC_H2C_OPCODE_CONFIG_LED			0x4
 889#define QLCNIC_H2C_OPCODE_LRO_REQUEST			0x7
 890#define QLCNIC_H2C_OPCODE_SET_MAC_RECEIVE_MODE		0xc
 891#define QLCNIC_H2C_OPCODE_CONFIG_IPADDR		0x12
 892
 893#define QLCNIC_H2C_OPCODE_GET_LINKEVENT		0x15
 894#define QLCNIC_H2C_OPCODE_CONFIG_BRIDGING		0x17
 895#define QLCNIC_H2C_OPCODE_CONFIG_HW_LRO		0x18
 896#define QLCNIC_H2C_OPCODE_CONFIG_LOOPBACK		0x13
 897
 898/*
 899 * Firmware --> Driver
 900 */
 901
 902#define QLCNIC_C2H_OPCODE_CONFIG_LOOPBACK		0x8f
 903#define QLCNIC_C2H_OPCODE_GET_LINKEVENT_RESPONSE	0x8D
 904#define QLCNIC_C2H_OPCODE_GET_DCB_AEN			0x90
 905
 906#define VPORT_MISS_MODE_DROP		0 /* drop all unmatched */
 907#define VPORT_MISS_MODE_ACCEPT_ALL	1 /* accept all packets */
 908#define VPORT_MISS_MODE_ACCEPT_MULTI	2 /* accept unmatched multicast */
 909
 910#define QLCNIC_LRO_REQUEST_CLEANUP	4
 911
 912/* Capabilites received */
 913#define QLCNIC_FW_CAPABILITY_TSO		BIT_1
 914#define QLCNIC_FW_CAPABILITY_BDG		BIT_8
 915#define QLCNIC_FW_CAPABILITY_FVLANTX		BIT_9
 916#define QLCNIC_FW_CAPABILITY_HW_LRO		BIT_10
 917#define QLCNIC_FW_CAPABILITY_2_MULTI_TX		BIT_4
 918#define QLCNIC_FW_CAPABILITY_MULTI_LOOPBACK	BIT_27
 919#define QLCNIC_FW_CAPABILITY_MORE_CAPS		BIT_31
 920
 921#define QLCNIC_FW_CAPABILITY_2_LRO_MAX_TCP_SEG	BIT_2
 922#define QLCNIC_FW_CAP2_HW_LRO_IPV6		BIT_3
 923#define QLCNIC_FW_CAPABILITY_SET_DRV_VER	BIT_5
 924#define QLCNIC_FW_CAPABILITY_2_BEACON		BIT_7
 925#define QLCNIC_FW_CAPABILITY_2_PER_PORT_ESWITCH_CFG	BIT_9
 926#define QLCNIC_FW_CAPABILITY_2_EXT_ISCSI_DUMP	BIT_13
 927
 928#define QLCNIC_83XX_FW_CAPAB_ENCAP_RX_OFFLOAD	BIT_0
 929#define QLCNIC_83XX_FW_CAPAB_ENCAP_TX_OFFLOAD	BIT_1
 930#define QLCNIC_83XX_FW_CAPAB_ENCAP_CKO_OFFLOAD	BIT_4
 931
 932/* module types */
 933#define LINKEVENT_MODULE_NOT_PRESENT			1
 934#define LINKEVENT_MODULE_OPTICAL_UNKNOWN		2
 935#define LINKEVENT_MODULE_OPTICAL_SRLR			3
 936#define LINKEVENT_MODULE_OPTICAL_LRM			4
 937#define LINKEVENT_MODULE_OPTICAL_SFP_1G 		5
 938#define LINKEVENT_MODULE_TWINAX_UNSUPPORTED_CABLE	6
 939#define LINKEVENT_MODULE_TWINAX_UNSUPPORTED_CABLELEN	7
 940#define LINKEVENT_MODULE_TWINAX 			8
 941
 942#define LINKSPEED_10GBPS	10000
 943#define LINKSPEED_1GBPS 	1000
 944#define LINKSPEED_100MBPS	100
 945#define LINKSPEED_10MBPS	10
 946
 947#define LINKSPEED_ENCODED_10MBPS	0
 948#define LINKSPEED_ENCODED_100MBPS	1
 949#define LINKSPEED_ENCODED_1GBPS 	2
 950
 951#define LINKEVENT_AUTONEG_DISABLED	0
 952#define LINKEVENT_AUTONEG_ENABLED	1
 953
 954#define LINKEVENT_HALF_DUPLEX		0
 955#define LINKEVENT_FULL_DUPLEX		1
 956
 957#define LINKEVENT_LINKSPEED_MBPS	0
 958#define LINKEVENT_LINKSPEED_ENCODED	1
 959
 960/* firmware response header:
 961 *	63:58 - message type
 962 *	57:56 - owner
 963 *	55:53 - desc count
 964 *	52:48 - reserved
 965 *	47:40 - completion id
 966 *	39:32 - opcode
 967 *	31:16 - error code
 968 *	15:00 - reserved
 969 */
 970#define qlcnic_get_nic_msg_opcode(msg_hdr)	\
 971	((msg_hdr >> 32) & 0xFF)
 972
 973struct qlcnic_fw_msg {
 974	union {
 975		struct {
 976			u64 hdr;
 977			u64 body[7];
 978		};
 979		u64 words[8];
 980	};
 981};
 982
 983struct qlcnic_nic_req {
 984	__le64 qhdr;
 985	__le64 req_hdr;
 986	__le64 words[6];
 987} __packed;
 988
 989struct qlcnic_mac_req {
 990	u8 op;
 991	u8 tag;
 992	u8 mac_addr[6];
 993};
 994
 995struct qlcnic_vlan_req {
 996	__le16 vlan_id;
 997	__le16 rsvd[3];
 998} __packed;
 999
1000struct qlcnic_ipaddr {
1001	__be32 ipv4;
1002	__be32 ipv6[4];
1003};
1004
1005#define QLCNIC_MSI_ENABLED		0x02
1006#define QLCNIC_MSIX_ENABLED		0x04
1007#define QLCNIC_LRO_ENABLED		0x01
1008#define QLCNIC_LRO_DISABLED		0x00
1009#define QLCNIC_BRIDGE_ENABLED       	0X10
1010#define QLCNIC_DIAG_ENABLED		0x20
1011#define QLCNIC_ESWITCH_ENABLED		0x40
1012#define QLCNIC_ADAPTER_INITIALIZED	0x80
1013#define QLCNIC_TAGGING_ENABLED		0x100
1014#define QLCNIC_MACSPOOF			0x200
1015#define QLCNIC_MAC_OVERRIDE_DISABLED	0x400
1016#define QLCNIC_PROMISC_DISABLED		0x800
1017#define QLCNIC_NEED_FLR			0x1000
1018#define QLCNIC_FW_RESET_OWNER		0x2000
1019#define QLCNIC_FW_HANG			0x4000
1020#define QLCNIC_FW_LRO_MSS_CAP		0x8000
1021#define QLCNIC_TX_INTR_SHARED		0x10000
1022#define QLCNIC_APP_CHANGED_FLAGS	0x20000
1023#define QLCNIC_HAS_PHYS_PORT_ID		0x40000
1024#define QLCNIC_TSS_RSS			0x80000
1025
 
 
 
1026#define QLCNIC_VLAN_FILTERING		0x800000
1027
1028#define QLCNIC_IS_MSI_FAMILY(adapter) \
1029	((adapter)->flags & (QLCNIC_MSI_ENABLED | QLCNIC_MSIX_ENABLED))
1030#define QLCNIC_IS_TSO_CAPABLE(adapter)  \
1031	((adapter)->ahw->capabilities & QLCNIC_FW_CAPABILITY_TSO)
1032
1033#define QLCNIC_BEACON_EANBLE		0xC
1034#define QLCNIC_BEACON_DISABLE		0xD
1035
1036#define QLCNIC_BEACON_ON		2
1037#define QLCNIC_BEACON_OFF		0
1038
1039#define QLCNIC_MSIX_TBL_SPACE		8192
1040#define QLCNIC_PCI_REG_MSIX_TBL 	0x44
1041#define QLCNIC_MSIX_TBL_PGSIZE		4096
1042
1043#define QLCNIC_ADAPTER_UP_MAGIC 777
1044
1045#define __QLCNIC_FW_ATTACHED		0
1046#define __QLCNIC_DEV_UP 		1
1047#define __QLCNIC_RESETTING		2
1048#define __QLCNIC_START_FW 		4
1049#define __QLCNIC_AER			5
1050#define __QLCNIC_DIAG_RES_ALLOC		6
1051#define __QLCNIC_LED_ENABLE		7
1052#define __QLCNIC_ELB_INPROGRESS		8
1053#define __QLCNIC_MULTI_TX_UNIQUE	9
1054#define __QLCNIC_SRIOV_ENABLE		10
1055#define __QLCNIC_SRIOV_CAPABLE		11
1056#define __QLCNIC_MBX_POLL_ENABLE	12
1057#define __QLCNIC_DIAG_MODE		13
1058#define __QLCNIC_MAINTENANCE_MODE	16
1059
1060#define QLCNIC_INTERRUPT_TEST		1
1061#define QLCNIC_LOOPBACK_TEST		2
1062#define QLCNIC_LED_TEST		3
1063
1064#define QLCNIC_FILTER_AGE	80
1065#define QLCNIC_READD_AGE	20
1066#define QLCNIC_LB_MAX_FILTERS	64
1067#define QLCNIC_LB_BUCKET_SIZE	32
1068#define QLCNIC_ILB_MAX_RCV_LOOP	10
1069
1070struct qlcnic_filter {
1071	struct hlist_node fnode;
1072	u8 faddr[ETH_ALEN];
1073	u16 vlan_id;
1074	unsigned long ftime;
1075};
1076
1077struct qlcnic_filter_hash {
1078	struct hlist_head *fhead;
1079	u8 fnum;
1080	u16 fmax;
1081	u16 fbucket_size;
1082};
1083
1084/* Mailbox specific data structures */
1085struct qlcnic_mailbox {
1086	struct workqueue_struct	*work_q;
1087	struct qlcnic_adapter	*adapter;
1088	const struct qlcnic_mbx_ops *ops;
1089	struct work_struct	work;
1090	struct completion	completion;
1091	struct list_head	cmd_q;
1092	unsigned long		status;
1093	spinlock_t		queue_lock;	/* Mailbox queue lock */
1094	spinlock_t		aen_lock;	/* Mailbox response/AEN lock */
1095	u32			rsp_status;
1096	u32			num_cmds;
1097};
1098
1099struct qlcnic_adapter {
1100	struct qlcnic_hardware_context *ahw;
1101	struct qlcnic_recv_context *recv_ctx;
1102	struct qlcnic_host_tx_ring *tx_ring;
1103	struct net_device *netdev;
1104	struct pci_dev *pdev;
1105
1106	unsigned long state;
1107	u32 flags;
1108
1109	u16 num_txd;
1110	u16 num_rxd;
1111	u16 num_jumbo_rxd;
1112	u16 max_rxd;
1113	u16 max_jumbo_rxd;
1114
1115	u8 max_rds_rings;
1116
1117	u8 max_sds_rings; /* max sds rings supported by adapter */
1118	u8 max_tx_rings;  /* max tx rings supported by adapter */
1119
1120	u8 drv_tx_rings;  /* max tx rings supported by driver */
1121	u8 drv_sds_rings; /* max sds rings supported by driver */
1122
1123	u8 drv_tss_rings; /* tss ring input */
1124	u8 drv_rss_rings; /* rss ring input */
1125
1126	u8 rx_csum;
1127	u8 portnum;
1128
1129	u8 fw_wait_cnt;
1130	u8 fw_fail_cnt;
1131	u8 tx_timeo_cnt;
1132	u8 need_fw_reset;
1133	u8 reset_ctx_cnt;
1134
1135	u16 is_up;
1136	u16 rx_pvid;
1137	u16 tx_pvid;
1138
1139	u32 irq;
1140	u32 heartbeat;
1141
1142	u8 dev_state;
1143	u8 reset_ack_timeo;
1144	u8 dev_init_timeo;
1145
1146	u8 mac_addr[ETH_ALEN];
1147
1148	u64 dev_rst_time;
1149	bool drv_mac_learn;
1150	bool fdb_mac_learn;
1151	bool rx_mac_learn;
1152	unsigned long vlans[BITS_TO_LONGS(VLAN_N_VID)];
1153	u8 flash_mfg_id;
1154	struct qlcnic_npar_info *npars;
1155	struct qlcnic_eswitch *eswitch;
1156	struct qlcnic_nic_template *nic_ops;
1157
1158	struct qlcnic_adapter_stats stats;
1159	struct list_head mac_list;
1160
1161	void __iomem	*tgt_mask_reg;
1162	void __iomem	*tgt_status_reg;
1163	void __iomem	*crb_int_state_reg;
1164	void __iomem	*isr_int_vec;
1165
1166	struct msix_entry *msix_entries;
1167	struct workqueue_struct *qlcnic_wq;
1168	struct delayed_work fw_work;
1169	struct delayed_work idc_aen_work;
1170	struct delayed_work mbx_poll_work;
1171	struct qlcnic_dcb *dcb;
1172
1173	struct qlcnic_filter_hash fhash;
1174	struct qlcnic_filter_hash rx_fhash;
1175	struct list_head vf_mc_list;
1176
1177	spinlock_t mac_learn_lock;
1178	/* spinlock for catching rcv filters for eswitch traffic */
1179	spinlock_t rx_mac_learn_lock;
1180	u32 file_prd_off;	/*File fw product offset*/
1181	u32 fw_version;
1182	u32 offload_flags;
1183	const struct firmware *fw;
1184};
1185
1186struct qlcnic_info_le {
1187	__le16	pci_func;
1188	__le16	op_mode;	/* 1 = Priv, 2 = NP, 3 = NP passthru */
1189	__le16	phys_port;
1190	__le16	switch_mode;	/* 0 = disabled, 1 = int, 2 = ext */
1191
1192	__le32	capabilities;
1193	u8	max_mac_filters;
1194	u8	reserved1;
1195	__le16	max_mtu;
1196
1197	__le16	max_tx_ques;
1198	__le16	max_rx_ques;
1199	__le16	min_tx_bw;
1200	__le16	max_tx_bw;
1201	__le32  op_type;
1202	__le16  max_bw_reg_offset;
1203	__le16  max_linkspeed_reg_offset;
1204	__le32  capability1;
1205	__le32  capability2;
1206	__le32  capability3;
1207	__le16  max_tx_mac_filters;
1208	__le16  max_rx_mcast_mac_filters;
1209	__le16  max_rx_ucast_mac_filters;
1210	__le16  max_rx_ip_addr;
1211	__le16  max_rx_lro_flow;
1212	__le16  max_rx_status_rings;
1213	__le16  max_rx_buf_rings;
1214	__le16  max_tx_vlan_keys;
1215	u8      total_pf;
1216	u8      total_rss_engines;
1217	__le16  max_vports;
1218	__le16	linkstate_reg_offset;
1219	__le16	bit_offsets;
1220	__le16  max_local_ipv6_addrs;
1221	__le16  max_remote_ipv6_addrs;
1222	u8	reserved2[56];
1223} __packed;
1224
1225struct qlcnic_info {
1226	u16	pci_func;
1227	u16	op_mode;
1228	u16	phys_port;
1229	u16	switch_mode;
1230	u32	capabilities;
1231	u8	max_mac_filters;
1232	u16	max_mtu;
1233	u16	max_tx_ques;
1234	u16	max_rx_ques;
1235	u16	min_tx_bw;
1236	u16	max_tx_bw;
1237	u32	op_type;
1238	u16	max_bw_reg_offset;
1239	u16	max_linkspeed_reg_offset;
1240	u32	capability1;
1241	u32	capability2;
1242	u32	capability3;
1243	u16	max_tx_mac_filters;
1244	u16	max_rx_mcast_mac_filters;
1245	u16	max_rx_ucast_mac_filters;
1246	u16	max_rx_ip_addr;
1247	u16	max_rx_lro_flow;
1248	u16	max_rx_status_rings;
1249	u16	max_rx_buf_rings;
1250	u16	max_tx_vlan_keys;
1251	u8      total_pf;
1252	u8      total_rss_engines;
1253	u16	max_vports;
1254	u16	linkstate_reg_offset;
1255	u16	bit_offsets;
1256	u16	max_local_ipv6_addrs;
1257	u16	max_remote_ipv6_addrs;
1258};
1259
1260struct qlcnic_pci_info_le {
1261	__le16	id;		/* pci function id */
1262	__le16	active;		/* 1 = Enabled */
1263	__le16	type;		/* 1 = NIC, 2 = FCoE, 3 = iSCSI */
1264	__le16	default_port;	/* default port number */
1265
1266	__le16	tx_min_bw;	/* Multiple of 100mbpc */
1267	__le16	tx_max_bw;
1268	__le16	reserved1[2];
1269
1270	u8	mac[ETH_ALEN];
1271	__le16  func_count;
1272	u8      reserved2[104];
1273
1274} __packed;
1275
1276struct qlcnic_pci_info {
1277	u16	id;
1278	u16	active;
1279	u16	type;
1280	u16	default_port;
1281	u16	tx_min_bw;
1282	u16	tx_max_bw;
1283	u8	mac[ETH_ALEN];
1284	u16  func_count;
1285};
1286
1287struct qlcnic_npar_info {
1288	bool	eswitch_status;
1289	u16	pvid;
1290	u16	min_bw;
1291	u16	max_bw;
1292	u8	phy_port;
1293	u8	type;
1294	u8	active;
1295	u8	enable_pm;
1296	u8	dest_npar;
1297	u8	discard_tagged;
1298	u8	mac_override;
1299	u8	mac_anti_spoof;
1300	u8	promisc_mode;
1301	u8	offload_flags;
1302	u8      pci_func;
1303	u8      mac[ETH_ALEN];
1304};
1305
1306struct qlcnic_eswitch {
1307	u8	port;
1308	u8	active_vports;
1309	u8	active_vlans;
1310	u8	active_ucast_filters;
1311	u8	max_ucast_filters;
1312	u8	max_active_vlans;
1313
1314	u32	flags;
1315#define QLCNIC_SWITCH_ENABLE		BIT_1
1316#define QLCNIC_SWITCH_VLAN_FILTERING	BIT_2
1317#define QLCNIC_SWITCH_PROMISC_MODE	BIT_3
1318#define QLCNIC_SWITCH_PORT_MIRRORING	BIT_4
1319};
1320
1321
1322#define MAX_BW			100	/* % of link speed */
1323#define MIN_BW			1	/* % of link speed */
1324#define MAX_VLAN_ID		4095
1325#define MIN_VLAN_ID		2
1326#define DEFAULT_MAC_LEARN	1
1327
1328#define IS_VALID_VLAN(vlan)	(vlan >= MIN_VLAN_ID && vlan < MAX_VLAN_ID)
1329#define IS_VALID_BW(bw)		(bw <= MAX_BW)
1330
1331struct qlcnic_pci_func_cfg {
1332	u16	func_type;
1333	u16	min_bw;
1334	u16	max_bw;
1335	u16	port_num;
1336	u8	pci_func;
1337	u8	func_state;
1338	u8	def_mac_addr[ETH_ALEN];
1339};
1340
1341struct qlcnic_npar_func_cfg {
1342	u32	fw_capab;
1343	u16	port_num;
1344	u16	min_bw;
1345	u16	max_bw;
1346	u16	max_tx_queues;
1347	u16	max_rx_queues;
1348	u8	pci_func;
1349	u8	op_mode;
1350};
1351
1352struct qlcnic_pm_func_cfg {
1353	u8	pci_func;
1354	u8	action;
1355	u8	dest_npar;
1356	u8	reserved[5];
1357};
1358
1359struct qlcnic_esw_func_cfg {
1360	u16	vlan_id;
1361	u8	op_mode;
1362	u8	op_type;
1363	u8	pci_func;
1364	u8	host_vlan_tag;
1365	u8	promisc_mode;
1366	u8	discard_tagged;
1367	u8	mac_override;
1368	u8	mac_anti_spoof;
1369	u8	offload_flags;
1370	u8	reserved[5];
1371};
1372
1373#define QLCNIC_STATS_VERSION		1
1374#define QLCNIC_STATS_PORT		1
1375#define QLCNIC_STATS_ESWITCH		2
1376#define QLCNIC_QUERY_RX_COUNTER		0
1377#define QLCNIC_QUERY_TX_COUNTER		1
1378#define QLCNIC_STATS_NOT_AVAIL	0xffffffffffffffffULL
1379#define QLCNIC_FILL_STATS(VAL1) \
1380	(((VAL1) == QLCNIC_STATS_NOT_AVAIL) ? 0 : VAL1)
1381#define QLCNIC_MAC_STATS 1
1382#define QLCNIC_ESW_STATS 2
1383
1384#define QLCNIC_ADD_ESW_STATS(VAL1, VAL2)\
1385do {	\
1386	if (((VAL1) == QLCNIC_STATS_NOT_AVAIL) && \
1387	    ((VAL2) != QLCNIC_STATS_NOT_AVAIL)) \
1388		(VAL1) = (VAL2); \
1389	else if (((VAL1) != QLCNIC_STATS_NOT_AVAIL) && \
1390		 ((VAL2) != QLCNIC_STATS_NOT_AVAIL)) \
1391			(VAL1) += (VAL2); \
1392} while (0)
1393
1394struct qlcnic_mac_statistics_le {
1395	__le64	mac_tx_frames;
1396	__le64	mac_tx_bytes;
1397	__le64	mac_tx_mcast_pkts;
1398	__le64	mac_tx_bcast_pkts;
1399	__le64	mac_tx_pause_cnt;
1400	__le64	mac_tx_ctrl_pkt;
1401	__le64	mac_tx_lt_64b_pkts;
1402	__le64	mac_tx_lt_127b_pkts;
1403	__le64	mac_tx_lt_255b_pkts;
1404	__le64	mac_tx_lt_511b_pkts;
1405	__le64	mac_tx_lt_1023b_pkts;
1406	__le64	mac_tx_lt_1518b_pkts;
1407	__le64	mac_tx_gt_1518b_pkts;
1408	__le64	rsvd1[3];
1409
1410	__le64	mac_rx_frames;
1411	__le64	mac_rx_bytes;
1412	__le64	mac_rx_mcast_pkts;
1413	__le64	mac_rx_bcast_pkts;
1414	__le64	mac_rx_pause_cnt;
1415	__le64	mac_rx_ctrl_pkt;
1416	__le64	mac_rx_lt_64b_pkts;
1417	__le64	mac_rx_lt_127b_pkts;
1418	__le64	mac_rx_lt_255b_pkts;
1419	__le64	mac_rx_lt_511b_pkts;
1420	__le64	mac_rx_lt_1023b_pkts;
1421	__le64	mac_rx_lt_1518b_pkts;
1422	__le64	mac_rx_gt_1518b_pkts;
1423	__le64	rsvd2[3];
1424
1425	__le64	mac_rx_length_error;
1426	__le64	mac_rx_length_small;
1427	__le64	mac_rx_length_large;
1428	__le64	mac_rx_jabber;
1429	__le64	mac_rx_dropped;
1430	__le64	mac_rx_crc_error;
1431	__le64	mac_align_error;
1432} __packed;
1433
1434struct qlcnic_mac_statistics {
1435	u64	mac_tx_frames;
1436	u64	mac_tx_bytes;
1437	u64	mac_tx_mcast_pkts;
1438	u64	mac_tx_bcast_pkts;
1439	u64	mac_tx_pause_cnt;
1440	u64	mac_tx_ctrl_pkt;
1441	u64	mac_tx_lt_64b_pkts;
1442	u64	mac_tx_lt_127b_pkts;
1443	u64	mac_tx_lt_255b_pkts;
1444	u64	mac_tx_lt_511b_pkts;
1445	u64	mac_tx_lt_1023b_pkts;
1446	u64	mac_tx_lt_1518b_pkts;
1447	u64	mac_tx_gt_1518b_pkts;
1448	u64	rsvd1[3];
1449	u64	mac_rx_frames;
1450	u64	mac_rx_bytes;
1451	u64	mac_rx_mcast_pkts;
1452	u64	mac_rx_bcast_pkts;
1453	u64	mac_rx_pause_cnt;
1454	u64	mac_rx_ctrl_pkt;
1455	u64	mac_rx_lt_64b_pkts;
1456	u64	mac_rx_lt_127b_pkts;
1457	u64	mac_rx_lt_255b_pkts;
1458	u64	mac_rx_lt_511b_pkts;
1459	u64	mac_rx_lt_1023b_pkts;
1460	u64	mac_rx_lt_1518b_pkts;
1461	u64	mac_rx_gt_1518b_pkts;
1462	u64	rsvd2[3];
1463	u64	mac_rx_length_error;
1464	u64	mac_rx_length_small;
1465	u64	mac_rx_length_large;
1466	u64	mac_rx_jabber;
1467	u64	mac_rx_dropped;
1468	u64	mac_rx_crc_error;
1469	u64	mac_align_error;
1470};
1471
1472struct qlcnic_esw_stats_le {
1473	__le16 context_id;
1474	__le16 version;
1475	__le16 size;
1476	__le16 unused;
1477	__le64 unicast_frames;
1478	__le64 multicast_frames;
1479	__le64 broadcast_frames;
1480	__le64 dropped_frames;
1481	__le64 errors;
1482	__le64 local_frames;
1483	__le64 numbytes;
1484	__le64 rsvd[3];
1485} __packed;
1486
1487struct __qlcnic_esw_statistics {
1488	u16	context_id;
1489	u16	version;
1490	u16	size;
1491	u16	unused;
1492	u64	unicast_frames;
1493	u64	multicast_frames;
1494	u64	broadcast_frames;
1495	u64	dropped_frames;
1496	u64	errors;
1497	u64	local_frames;
1498	u64	numbytes;
1499	u64	rsvd[3];
1500};
1501
1502struct qlcnic_esw_statistics {
1503	struct __qlcnic_esw_statistics rx;
1504	struct __qlcnic_esw_statistics tx;
1505};
1506
1507#define QLCNIC_FORCE_FW_DUMP_KEY	0xdeadfeed
1508#define QLCNIC_ENABLE_FW_DUMP		0xaddfeed
1509#define QLCNIC_DISABLE_FW_DUMP		0xbadfeed
1510#define QLCNIC_FORCE_FW_RESET		0xdeaddead
1511#define QLCNIC_SET_QUIESCENT		0xadd00010
1512#define QLCNIC_RESET_QUIESCENT		0xadd00020
1513
1514struct _cdrp_cmd {
1515	u32 num;
1516	u32 *arg;
1517};
1518
1519struct qlcnic_cmd_args {
1520	struct completion	completion;
1521	struct list_head	list;
1522	struct _cdrp_cmd	req;
1523	struct _cdrp_cmd	rsp;
1524	atomic_t		rsp_status;
1525	int			pay_size;
1526	u32			rsp_opcode;
1527	u32			total_cmds;
1528	u32			op_type;
1529	u32			type;
1530	u32			cmd_op;
1531	u32			*hdr;	/* Back channel message header */
1532	u32			*pay;	/* Back channel message payload */
1533	u8			func_num;
1534};
1535
1536int qlcnic_fw_cmd_get_minidump_temp(struct qlcnic_adapter *adapter);
1537int qlcnic_fw_cmd_set_port(struct qlcnic_adapter *adapter, u32 config);
1538int qlcnic_pci_mem_write_2M(struct qlcnic_adapter *, u64 off, u64 data);
1539int qlcnic_pci_mem_read_2M(struct qlcnic_adapter *, u64 off, u64 *data);
1540
1541#define ADDR_IN_RANGE(addr, low, high)	\
1542	(((addr) < (high)) && ((addr) >= (low)))
1543
1544#define QLCRD32(adapter, off, err) \
1545	(adapter->ahw->hw_ops->read_reg)(adapter, off, err)
1546
1547#define QLCWR32(adapter, off, val) \
1548	adapter->ahw->hw_ops->write_reg(adapter, off, val)
1549
1550int qlcnic_pcie_sem_lock(struct qlcnic_adapter *, int, u32);
1551void qlcnic_pcie_sem_unlock(struct qlcnic_adapter *, int);
1552
1553#define qlcnic_rom_lock(a)	\
1554	qlcnic_pcie_sem_lock((a), 2, QLCNIC_ROM_LOCK_ID)
1555#define qlcnic_rom_unlock(a)	\
1556	qlcnic_pcie_sem_unlock((a), 2)
1557#define qlcnic_phy_lock(a)	\
1558	qlcnic_pcie_sem_lock((a), 3, QLCNIC_PHY_LOCK_ID)
1559#define qlcnic_phy_unlock(a)	\
1560	qlcnic_pcie_sem_unlock((a), 3)
1561#define qlcnic_sw_lock(a)	\
1562	qlcnic_pcie_sem_lock((a), 6, 0)
1563#define qlcnic_sw_unlock(a)	\
1564	qlcnic_pcie_sem_unlock((a), 6)
1565#define crb_win_lock(a)	\
1566	qlcnic_pcie_sem_lock((a), 7, QLCNIC_CRB_WIN_LOCK_ID)
1567#define crb_win_unlock(a)	\
1568	qlcnic_pcie_sem_unlock((a), 7)
1569
1570#define __QLCNIC_MAX_LED_RATE	0xf
1571#define __QLCNIC_MAX_LED_STATE	0x2
1572
1573#define MAX_CTL_CHECK 1000
1574
1575void qlcnic_prune_lb_filters(struct qlcnic_adapter *adapter);
1576void qlcnic_delete_lb_filters(struct qlcnic_adapter *adapter);
1577int qlcnic_dump_fw(struct qlcnic_adapter *);
1578int qlcnic_enable_fw_dump_state(struct qlcnic_adapter *);
1579bool qlcnic_check_fw_dump_state(struct qlcnic_adapter *);
1580
1581/* Functions from qlcnic_init.c */
1582void qlcnic_schedule_work(struct qlcnic_adapter *, work_func_t, int);
1583int qlcnic_load_firmware(struct qlcnic_adapter *adapter);
1584int qlcnic_need_fw_reset(struct qlcnic_adapter *adapter);
1585void qlcnic_request_firmware(struct qlcnic_adapter *adapter);
1586void qlcnic_release_firmware(struct qlcnic_adapter *adapter);
1587int qlcnic_pinit_from_rom(struct qlcnic_adapter *adapter);
1588int qlcnic_setup_idc_param(struct qlcnic_adapter *adapter);
1589int qlcnic_check_flash_fw_ver(struct qlcnic_adapter *adapter);
1590
1591int qlcnic_rom_fast_read(struct qlcnic_adapter *adapter, u32 addr, u32 *valp);
1592int qlcnic_rom_fast_read_words(struct qlcnic_adapter *adapter, int addr,
1593				u8 *bytes, size_t size);
1594int qlcnic_alloc_sw_resources(struct qlcnic_adapter *adapter);
1595void qlcnic_free_sw_resources(struct qlcnic_adapter *adapter);
1596
1597void __iomem *qlcnic_get_ioaddr(struct qlcnic_hardware_context *, u32);
1598
1599int qlcnic_alloc_hw_resources(struct qlcnic_adapter *adapter);
1600void qlcnic_free_hw_resources(struct qlcnic_adapter *adapter);
1601
1602int qlcnic_fw_create_ctx(struct qlcnic_adapter *adapter);
1603void qlcnic_fw_destroy_ctx(struct qlcnic_adapter *adapter);
1604
1605void qlcnic_reset_rx_buffers_list(struct qlcnic_adapter *adapter);
1606void qlcnic_release_rx_buffers(struct qlcnic_adapter *adapter);
1607void qlcnic_release_tx_buffers(struct qlcnic_adapter *,
1608			       struct qlcnic_host_tx_ring *);
1609
1610int qlcnic_check_fw_status(struct qlcnic_adapter *adapter);
 
1611void qlcnic_post_rx_buffers(struct qlcnic_adapter *adapter,
1612		struct qlcnic_host_rds_ring *rds_ring, u8 ring_id);
1613void qlcnic_set_multi(struct net_device *netdev);
1614void qlcnic_flush_mcast_mac(struct qlcnic_adapter *);
1615int qlcnic_nic_add_mac(struct qlcnic_adapter *, const u8 *, u16,
1616		       enum qlcnic_mac_type);
1617int qlcnic_nic_del_mac(struct qlcnic_adapter *, const u8 *);
1618void qlcnic_82xx_free_mac_list(struct qlcnic_adapter *adapter);
1619int qlcnic_82xx_read_phys_port_id(struct qlcnic_adapter *);
1620
1621int qlcnic_fw_cmd_set_mtu(struct qlcnic_adapter *adapter, int mtu);
1622int qlcnic_fw_cmd_set_drv_version(struct qlcnic_adapter *, u32);
1623int qlcnic_change_mtu(struct net_device *netdev, int new_mtu);
1624netdev_features_t qlcnic_fix_features(struct net_device *netdev,
1625	netdev_features_t features);
1626int qlcnic_set_features(struct net_device *netdev, netdev_features_t features);
1627int qlcnic_config_bridged_mode(struct qlcnic_adapter *adapter, u32 enable);
1628void qlcnic_update_cmd_producer(struct qlcnic_host_tx_ring *);
1629
1630/* Functions from qlcnic_ethtool.c */
1631int qlcnic_check_loopback_buff(unsigned char *, u8 []);
1632int qlcnic_do_lb_test(struct qlcnic_adapter *, u8);
1633
1634/* Functions from qlcnic_main.c */
1635int qlcnic_reset_context(struct qlcnic_adapter *);
1636void qlcnic_diag_free_res(struct net_device *netdev, int);
1637int qlcnic_diag_alloc_res(struct net_device *netdev, int);
1638netdev_tx_t qlcnic_xmit_frame(struct sk_buff *, struct net_device *);
1639void qlcnic_set_tx_ring_count(struct qlcnic_adapter *, u8);
1640void qlcnic_set_sds_ring_count(struct qlcnic_adapter *, u8);
1641int qlcnic_setup_rings(struct qlcnic_adapter *);
1642int qlcnic_validate_rings(struct qlcnic_adapter *, __u32, int);
1643void qlcnic_alloc_lb_filters_mem(struct qlcnic_adapter *adapter);
1644int qlcnic_enable_msix(struct qlcnic_adapter *, u32);
1645void qlcnic_set_drv_version(struct qlcnic_adapter *);
1646
1647/*  eSwitch management functions */
1648int qlcnic_config_switch_port(struct qlcnic_adapter *,
1649				struct qlcnic_esw_func_cfg *);
1650
1651int qlcnic_get_eswitch_port_config(struct qlcnic_adapter *,
1652				struct qlcnic_esw_func_cfg *);
1653int qlcnic_config_port_mirroring(struct qlcnic_adapter *, u8, u8, u8);
1654int qlcnic_get_port_stats(struct qlcnic_adapter *, const u8, const u8,
1655					struct __qlcnic_esw_statistics *);
1656int qlcnic_get_eswitch_stats(struct qlcnic_adapter *, const u8, u8,
1657					struct __qlcnic_esw_statistics *);
1658int qlcnic_clear_esw_stats(struct qlcnic_adapter *adapter, u8, u8, u8);
1659int qlcnic_get_mac_stats(struct qlcnic_adapter *, struct qlcnic_mac_statistics *);
1660
1661void qlcnic_free_mbx_args(struct qlcnic_cmd_args *cmd);
1662
1663int qlcnic_alloc_sds_rings(struct qlcnic_recv_context *, int);
1664void qlcnic_free_sds_rings(struct qlcnic_recv_context *);
1665void qlcnic_advert_link_change(struct qlcnic_adapter *, int);
1666void qlcnic_free_tx_rings(struct qlcnic_adapter *);
1667int qlcnic_alloc_tx_rings(struct qlcnic_adapter *, struct net_device *);
1668void qlcnic_dump_mbx(struct qlcnic_adapter *, struct qlcnic_cmd_args *);
1669
1670void qlcnic_create_sysfs_entries(struct qlcnic_adapter *adapter);
1671void qlcnic_remove_sysfs_entries(struct qlcnic_adapter *adapter);
1672void qlcnic_82xx_add_sysfs(struct qlcnic_adapter *adapter);
1673void qlcnic_82xx_remove_sysfs(struct qlcnic_adapter *adapter);
1674
1675int qlcnicvf_config_bridged_mode(struct qlcnic_adapter *, u32);
1676int qlcnicvf_config_led(struct qlcnic_adapter *, u32, u32);
1677void qlcnic_set_vlan_config(struct qlcnic_adapter *,
1678			    struct qlcnic_esw_func_cfg *);
1679void qlcnic_set_eswitch_port_features(struct qlcnic_adapter *,
1680				      struct qlcnic_esw_func_cfg *);
1681int qlcnic_setup_tss_rss_intr(struct qlcnic_adapter  *);
1682void qlcnic_down(struct qlcnic_adapter *, struct net_device *);
1683int qlcnic_up(struct qlcnic_adapter *, struct net_device *);
1684void __qlcnic_down(struct qlcnic_adapter *, struct net_device *);
1685void qlcnic_detach(struct qlcnic_adapter *);
1686void qlcnic_teardown_intr(struct qlcnic_adapter *);
1687int qlcnic_attach(struct qlcnic_adapter *);
1688int __qlcnic_up(struct qlcnic_adapter *, struct net_device *);
1689void qlcnic_restore_indev_addr(struct net_device *, unsigned long);
1690
1691int qlcnic_check_temp(struct qlcnic_adapter *);
1692int qlcnic_init_pci_info(struct qlcnic_adapter *);
1693int qlcnic_set_default_offload_settings(struct qlcnic_adapter *);
1694int qlcnic_reset_npar_config(struct qlcnic_adapter *);
1695int qlcnic_set_eswitch_port_config(struct qlcnic_adapter *);
1696int qlcnic_set_vxlan_port(struct qlcnic_adapter *adapter, u16 port);
1697int qlcnic_set_vxlan_parsing(struct qlcnic_adapter *adapter, u16 port);
1698int qlcnic_83xx_configure_opmode(struct qlcnic_adapter *adapter);
1699int qlcnic_read_mac_addr(struct qlcnic_adapter *);
1700int qlcnic_setup_netdev(struct qlcnic_adapter *, struct net_device *);
1701void qlcnic_set_netdev_features(struct qlcnic_adapter *,
1702				struct qlcnic_esw_func_cfg *);
1703void qlcnic_sriov_vf_set_multi(struct net_device *);
1704int qlcnic_is_valid_nic_func(struct qlcnic_adapter *, u8);
1705int qlcnic_get_pci_func_type(struct qlcnic_adapter *, u16, u16 *, u16 *,
1706			     u16 *);
1707
1708/*
1709 * QLOGIC Board information
1710 */
1711
1712#define QLCNIC_MAX_BOARD_NAME_LEN 100
1713struct qlcnic_board_info {
1714	unsigned short  vendor;
1715	unsigned short  device;
1716	unsigned short  sub_vendor;
1717	unsigned short  sub_device;
1718	char short_name[QLCNIC_MAX_BOARD_NAME_LEN];
1719};
1720
1721static inline u32 qlcnic_tx_avail(struct qlcnic_host_tx_ring *tx_ring)
1722{
1723	if (likely(tx_ring->producer < tx_ring->sw_consumer))
1724		return tx_ring->sw_consumer - tx_ring->producer;
1725	else
1726		return tx_ring->sw_consumer + tx_ring->num_desc -
1727				tx_ring->producer;
1728}
1729
1730struct qlcnic_nic_template {
1731	int (*config_bridged_mode) (struct qlcnic_adapter *, u32);
1732	int (*config_led) (struct qlcnic_adapter *, u32, u32);
1733	int (*start_firmware) (struct qlcnic_adapter *);
1734	int (*init_driver) (struct qlcnic_adapter *);
1735	void (*request_reset) (struct qlcnic_adapter *, u32);
1736	void (*cancel_idc_work) (struct qlcnic_adapter *);
1737	int (*napi_add)(struct qlcnic_adapter *, struct net_device *);
1738	void (*napi_del)(struct qlcnic_adapter *);
1739	void (*config_ipaddr)(struct qlcnic_adapter *, __be32, int);
1740	irqreturn_t (*clear_legacy_intr)(struct qlcnic_adapter *);
1741	int (*shutdown)(struct pci_dev *);
1742	int (*resume)(struct qlcnic_adapter *);
1743};
1744
1745struct qlcnic_mbx_ops {
1746	int (*enqueue_cmd) (struct qlcnic_adapter *,
1747			    struct qlcnic_cmd_args *, unsigned long *);
1748	void (*dequeue_cmd) (struct qlcnic_adapter *, struct qlcnic_cmd_args *);
1749	void (*decode_resp) (struct qlcnic_adapter *, struct qlcnic_cmd_args *);
1750	void (*encode_cmd) (struct qlcnic_adapter *, struct qlcnic_cmd_args *);
1751	void (*nofity_fw) (struct qlcnic_adapter *, u8);
1752};
1753
1754int qlcnic_83xx_init_mailbox_work(struct qlcnic_adapter *);
1755void qlcnic_83xx_detach_mailbox_work(struct qlcnic_adapter *);
1756void qlcnic_83xx_reinit_mbx_work(struct qlcnic_mailbox *mbx);
1757void qlcnic_83xx_free_mailbox(struct qlcnic_mailbox *mbx);
1758void qlcnic_update_stats(struct qlcnic_adapter *);
1759
1760/* Adapter hardware abstraction */
1761struct qlcnic_hardware_ops {
1762	void (*read_crb) (struct qlcnic_adapter *, char *, loff_t, size_t);
1763	void (*write_crb) (struct qlcnic_adapter *, char *, loff_t, size_t);
1764	int (*read_reg) (struct qlcnic_adapter *, ulong, int *);
1765	int (*write_reg) (struct qlcnic_adapter *, ulong, u32);
1766	void (*get_ocm_win) (struct qlcnic_hardware_context *);
1767	int (*get_mac_address) (struct qlcnic_adapter *, u8 *, u8);
1768	int (*setup_intr) (struct qlcnic_adapter *);
1769	int (*alloc_mbx_args)(struct qlcnic_cmd_args *,
1770			      struct qlcnic_adapter *, u32);
1771	int (*mbx_cmd) (struct qlcnic_adapter *, struct qlcnic_cmd_args *);
1772	void (*get_func_no) (struct qlcnic_adapter *);
1773	int (*api_lock) (struct qlcnic_adapter *);
1774	void (*api_unlock) (struct qlcnic_adapter *);
1775	void (*add_sysfs) (struct qlcnic_adapter *);
1776	void (*remove_sysfs) (struct qlcnic_adapter *);
1777	void (*process_lb_rcv_ring_diag) (struct qlcnic_host_sds_ring *);
1778	int (*create_rx_ctx) (struct qlcnic_adapter *);
1779	int (*create_tx_ctx) (struct qlcnic_adapter *,
1780	struct qlcnic_host_tx_ring *, int);
1781	void (*del_rx_ctx) (struct qlcnic_adapter *);
1782	void (*del_tx_ctx) (struct qlcnic_adapter *,
1783			    struct qlcnic_host_tx_ring *);
1784	int (*setup_link_event) (struct qlcnic_adapter *, int);
1785	int (*get_nic_info) (struct qlcnic_adapter *, struct qlcnic_info *, u8);
1786	int (*get_pci_info) (struct qlcnic_adapter *, struct qlcnic_pci_info *);
1787	int (*set_nic_info) (struct qlcnic_adapter *, struct qlcnic_info *);
1788	int (*change_macvlan) (struct qlcnic_adapter *, u8*, u16, u8);
1789	void (*napi_enable) (struct qlcnic_adapter *);
1790	void (*napi_disable) (struct qlcnic_adapter *);
1791	int (*config_intr_coal) (struct qlcnic_adapter *,
1792				 struct ethtool_coalesce *);
1793	int (*config_rss) (struct qlcnic_adapter *, int);
1794	int (*config_hw_lro) (struct qlcnic_adapter *, int);
1795	int (*config_loopback) (struct qlcnic_adapter *, u8);
1796	int (*clear_loopback) (struct qlcnic_adapter *, u8);
1797	int (*config_promisc_mode) (struct qlcnic_adapter *, u32);
1798	void (*change_l2_filter)(struct qlcnic_adapter *adapter, u64 *addr,
1799				 u16 vlan, struct qlcnic_host_tx_ring *tx_ring);
1800	int (*get_board_info) (struct qlcnic_adapter *);
1801	void (*set_mac_filter_count) (struct qlcnic_adapter *);
1802	void (*free_mac_list) (struct qlcnic_adapter *);
1803	int (*read_phys_port_id) (struct qlcnic_adapter *);
1804	pci_ers_result_t (*io_error_detected) (struct pci_dev *,
1805					       pci_channel_state_t);
1806	pci_ers_result_t (*io_slot_reset) (struct pci_dev *);
1807	void (*io_resume) (struct pci_dev *);
1808	void (*get_beacon_state)(struct qlcnic_adapter *);
1809	void (*enable_sds_intr) (struct qlcnic_adapter *,
1810				 struct qlcnic_host_sds_ring *);
1811	void (*disable_sds_intr) (struct qlcnic_adapter *,
1812				  struct qlcnic_host_sds_ring *);
1813	void (*enable_tx_intr) (struct qlcnic_adapter *,
1814				struct qlcnic_host_tx_ring *);
1815	void (*disable_tx_intr) (struct qlcnic_adapter *,
1816				 struct qlcnic_host_tx_ring *);
1817	u32 (*get_saved_state)(void *, u32);
1818	void (*set_saved_state)(void *, u32, u32);
1819	void (*cache_tmpl_hdr_values)(struct qlcnic_fw_dump *);
1820	u32 (*get_cap_size)(void *, int);
1821	void (*set_sys_info)(void *, int, u32);
1822	void (*store_cap_mask)(void *, u32);
1823	bool (*encap_rx_offload) (struct qlcnic_adapter *adapter);
1824	bool (*encap_tx_offload) (struct qlcnic_adapter *adapter);
1825};
1826
1827extern struct qlcnic_nic_template qlcnic_vf_ops;
1828
1829static inline bool qlcnic_83xx_encap_tx_offload(struct qlcnic_adapter *adapter)
1830{
1831	return adapter->ahw->extra_capability[0] &
1832	       QLCNIC_83XX_FW_CAPAB_ENCAP_TX_OFFLOAD;
1833}
1834
1835static inline bool qlcnic_83xx_encap_rx_offload(struct qlcnic_adapter *adapter)
1836{
1837	return adapter->ahw->extra_capability[0] &
1838	       QLCNIC_83XX_FW_CAPAB_ENCAP_RX_OFFLOAD;
1839}
1840
1841static inline bool qlcnic_82xx_encap_tx_offload(struct qlcnic_adapter *adapter)
1842{
1843	return false;
1844}
1845
1846static inline bool qlcnic_82xx_encap_rx_offload(struct qlcnic_adapter *adapter)
1847{
1848        return false;
1849}
1850
1851static inline bool qlcnic_encap_rx_offload(struct qlcnic_adapter *adapter)
1852{
1853        return adapter->ahw->hw_ops->encap_rx_offload(adapter);
1854}
1855
1856static inline bool qlcnic_encap_tx_offload(struct qlcnic_adapter *adapter)
1857{
1858        return adapter->ahw->hw_ops->encap_tx_offload(adapter);
1859}
1860
1861static inline int qlcnic_start_firmware(struct qlcnic_adapter *adapter)
1862{
1863	return adapter->nic_ops->start_firmware(adapter);
1864}
1865
1866static inline void qlcnic_read_crb(struct qlcnic_adapter *adapter, char *buf,
1867				   loff_t offset, size_t size)
1868{
1869	adapter->ahw->hw_ops->read_crb(adapter, buf, offset, size);
1870}
1871
1872static inline void qlcnic_write_crb(struct qlcnic_adapter *adapter, char *buf,
1873				    loff_t offset, size_t size)
1874{
1875	adapter->ahw->hw_ops->write_crb(adapter, buf, offset, size);
1876}
1877
 
 
 
 
 
 
1878static inline int qlcnic_get_mac_address(struct qlcnic_adapter *adapter,
1879					 u8 *mac, u8 function)
1880{
1881	return adapter->ahw->hw_ops->get_mac_address(adapter, mac, function);
1882}
1883
1884static inline int qlcnic_setup_intr(struct qlcnic_adapter *adapter)
1885{
1886	return adapter->ahw->hw_ops->setup_intr(adapter);
1887}
1888
1889static inline int qlcnic_alloc_mbx_args(struct qlcnic_cmd_args *mbx,
1890					struct qlcnic_adapter *adapter, u32 arg)
1891{
1892	return adapter->ahw->hw_ops->alloc_mbx_args(mbx, adapter, arg);
1893}
1894
1895static inline int qlcnic_issue_cmd(struct qlcnic_adapter *adapter,
1896				   struct qlcnic_cmd_args *cmd)
1897{
1898	if (adapter->ahw->hw_ops->mbx_cmd)
1899		return adapter->ahw->hw_ops->mbx_cmd(adapter, cmd);
1900
1901	return -EIO;
1902}
1903
1904static inline void qlcnic_get_func_no(struct qlcnic_adapter *adapter)
1905{
1906	adapter->ahw->hw_ops->get_func_no(adapter);
1907}
1908
1909static inline int qlcnic_api_lock(struct qlcnic_adapter *adapter)
1910{
1911	return adapter->ahw->hw_ops->api_lock(adapter);
1912}
1913
1914static inline void qlcnic_api_unlock(struct qlcnic_adapter *adapter)
1915{
1916	adapter->ahw->hw_ops->api_unlock(adapter);
1917}
1918
1919static inline void qlcnic_add_sysfs(struct qlcnic_adapter *adapter)
1920{
1921	if (adapter->ahw->hw_ops->add_sysfs)
1922		adapter->ahw->hw_ops->add_sysfs(adapter);
1923}
1924
1925static inline void qlcnic_remove_sysfs(struct qlcnic_adapter *adapter)
1926{
1927	if (adapter->ahw->hw_ops->remove_sysfs)
1928		adapter->ahw->hw_ops->remove_sysfs(adapter);
1929}
1930
1931static inline void
1932qlcnic_process_rcv_ring_diag(struct qlcnic_host_sds_ring *sds_ring)
1933{
1934	sds_ring->adapter->ahw->hw_ops->process_lb_rcv_ring_diag(sds_ring);
1935}
1936
1937static inline int qlcnic_fw_cmd_create_rx_ctx(struct qlcnic_adapter *adapter)
1938{
1939	return adapter->ahw->hw_ops->create_rx_ctx(adapter);
1940}
1941
1942static inline int qlcnic_fw_cmd_create_tx_ctx(struct qlcnic_adapter *adapter,
1943					      struct qlcnic_host_tx_ring *ptr,
1944					      int ring)
1945{
1946	return adapter->ahw->hw_ops->create_tx_ctx(adapter, ptr, ring);
1947}
1948
1949static inline void qlcnic_fw_cmd_del_rx_ctx(struct qlcnic_adapter *adapter)
1950{
1951	return adapter->ahw->hw_ops->del_rx_ctx(adapter);
1952}
1953
1954static inline void qlcnic_fw_cmd_del_tx_ctx(struct qlcnic_adapter *adapter,
1955					    struct qlcnic_host_tx_ring *ptr)
1956{
1957	return adapter->ahw->hw_ops->del_tx_ctx(adapter, ptr);
1958}
1959
1960static inline int qlcnic_linkevent_request(struct qlcnic_adapter *adapter,
1961					   int enable)
1962{
1963	return adapter->ahw->hw_ops->setup_link_event(adapter, enable);
1964}
1965
1966static inline int qlcnic_get_nic_info(struct qlcnic_adapter *adapter,
1967				      struct qlcnic_info *info, u8 id)
1968{
1969	return adapter->ahw->hw_ops->get_nic_info(adapter, info, id);
1970}
1971
1972static inline int qlcnic_get_pci_info(struct qlcnic_adapter *adapter,
1973				      struct qlcnic_pci_info *info)
1974{
1975	return adapter->ahw->hw_ops->get_pci_info(adapter, info);
1976}
1977
1978static inline int qlcnic_set_nic_info(struct qlcnic_adapter *adapter,
1979				      struct qlcnic_info *info)
1980{
1981	return adapter->ahw->hw_ops->set_nic_info(adapter, info);
1982}
1983
1984static inline int qlcnic_sre_macaddr_change(struct qlcnic_adapter *adapter,
1985					    u8 *addr, u16 id, u8 cmd)
1986{
1987	return adapter->ahw->hw_ops->change_macvlan(adapter, addr, id, cmd);
1988}
1989
1990static inline int qlcnic_napi_add(struct qlcnic_adapter *adapter,
1991				  struct net_device *netdev)
1992{
1993	return adapter->nic_ops->napi_add(adapter, netdev);
1994}
1995
1996static inline void qlcnic_napi_del(struct qlcnic_adapter *adapter)
1997{
1998	adapter->nic_ops->napi_del(adapter);
1999}
2000
2001static inline void qlcnic_napi_enable(struct qlcnic_adapter *adapter)
2002{
2003	adapter->ahw->hw_ops->napi_enable(adapter);
2004}
2005
2006static inline int __qlcnic_shutdown(struct pci_dev *pdev)
2007{
2008	struct qlcnic_adapter *adapter = pci_get_drvdata(pdev);
2009
2010	return adapter->nic_ops->shutdown(pdev);
2011}
2012
2013static inline int __qlcnic_resume(struct qlcnic_adapter *adapter)
2014{
2015	return adapter->nic_ops->resume(adapter);
2016}
2017
2018static inline void qlcnic_napi_disable(struct qlcnic_adapter *adapter)
2019{
2020	adapter->ahw->hw_ops->napi_disable(adapter);
2021}
2022
2023static inline int qlcnic_config_intr_coalesce(struct qlcnic_adapter *adapter,
2024					      struct ethtool_coalesce *ethcoal)
2025{
2026	return adapter->ahw->hw_ops->config_intr_coal(adapter, ethcoal);
2027}
2028
2029static inline int qlcnic_config_rss(struct qlcnic_adapter *adapter, int enable)
2030{
2031	return adapter->ahw->hw_ops->config_rss(adapter, enable);
2032}
2033
2034static inline int qlcnic_config_hw_lro(struct qlcnic_adapter *adapter,
2035				       int enable)
2036{
2037	return adapter->ahw->hw_ops->config_hw_lro(adapter, enable);
2038}
2039
2040static inline int qlcnic_set_lb_mode(struct qlcnic_adapter *adapter, u8 mode)
2041{
2042	return adapter->ahw->hw_ops->config_loopback(adapter, mode);
2043}
2044
2045static inline int qlcnic_clear_lb_mode(struct qlcnic_adapter *adapter, u8 mode)
2046{
2047	return adapter->ahw->hw_ops->clear_loopback(adapter, mode);
2048}
2049
2050static inline int qlcnic_nic_set_promisc(struct qlcnic_adapter *adapter,
2051					 u32 mode)
2052{
2053	return adapter->ahw->hw_ops->config_promisc_mode(adapter, mode);
2054}
2055
2056static inline void qlcnic_change_filter(struct qlcnic_adapter *adapter,
2057					u64 *addr, u16 vlan,
2058					struct qlcnic_host_tx_ring *tx_ring)
2059{
2060	adapter->ahw->hw_ops->change_l2_filter(adapter, addr, vlan, tx_ring);
2061}
2062
2063static inline int qlcnic_get_board_info(struct qlcnic_adapter *adapter)
2064{
2065	return adapter->ahw->hw_ops->get_board_info(adapter);
2066}
2067
2068static inline void qlcnic_free_mac_list(struct qlcnic_adapter *adapter)
2069{
2070	return adapter->ahw->hw_ops->free_mac_list(adapter);
2071}
2072
2073static inline void qlcnic_set_mac_filter_count(struct qlcnic_adapter *adapter)
2074{
2075	if (adapter->ahw->hw_ops->set_mac_filter_count)
2076		adapter->ahw->hw_ops->set_mac_filter_count(adapter);
2077}
2078
2079static inline void qlcnic_get_beacon_state(struct qlcnic_adapter *adapter)
2080{
2081	adapter->ahw->hw_ops->get_beacon_state(adapter);
2082}
2083
2084static inline void qlcnic_read_phys_port_id(struct qlcnic_adapter *adapter)
2085{
2086	if (adapter->ahw->hw_ops->read_phys_port_id)
2087		adapter->ahw->hw_ops->read_phys_port_id(adapter);
2088}
2089
2090static inline u32 qlcnic_get_saved_state(struct qlcnic_adapter *adapter,
2091					 void *t_hdr, u32 index)
2092{
2093	return adapter->ahw->hw_ops->get_saved_state(t_hdr, index);
2094}
2095
2096static inline void qlcnic_set_saved_state(struct qlcnic_adapter *adapter,
2097					  void *t_hdr, u32 index, u32 value)
2098{
2099	adapter->ahw->hw_ops->set_saved_state(t_hdr, index, value);
2100}
2101
2102static inline void qlcnic_cache_tmpl_hdr_values(struct qlcnic_adapter *adapter,
2103						struct qlcnic_fw_dump *fw_dump)
2104{
2105	adapter->ahw->hw_ops->cache_tmpl_hdr_values(fw_dump);
2106}
2107
2108static inline u32 qlcnic_get_cap_size(struct qlcnic_adapter *adapter,
2109				      void *tmpl_hdr, int index)
2110{
2111	return adapter->ahw->hw_ops->get_cap_size(tmpl_hdr, index);
2112}
2113
2114static inline void qlcnic_set_sys_info(struct qlcnic_adapter *adapter,
2115				       void *tmpl_hdr, int idx, u32 value)
2116{
2117	adapter->ahw->hw_ops->set_sys_info(tmpl_hdr, idx, value);
2118}
2119
2120static inline void qlcnic_store_cap_mask(struct qlcnic_adapter *adapter,
2121					 void *tmpl_hdr, u32 mask)
2122{
2123	adapter->ahw->hw_ops->store_cap_mask(tmpl_hdr, mask);
2124}
2125
2126static inline void qlcnic_dev_request_reset(struct qlcnic_adapter *adapter,
2127					    u32 key)
2128{
2129	if (adapter->nic_ops->request_reset)
2130		adapter->nic_ops->request_reset(adapter, key);
2131}
2132
2133static inline void qlcnic_cancel_idc_work(struct qlcnic_adapter *adapter)
2134{
2135	if (adapter->nic_ops->cancel_idc_work)
2136		adapter->nic_ops->cancel_idc_work(adapter);
2137}
2138
2139static inline irqreturn_t
2140qlcnic_clear_legacy_intr(struct qlcnic_adapter *adapter)
2141{
2142	return adapter->nic_ops->clear_legacy_intr(adapter);
2143}
2144
2145static inline int qlcnic_config_led(struct qlcnic_adapter *adapter, u32 state,
2146				    u32 rate)
2147{
2148	return adapter->nic_ops->config_led(adapter, state, rate);
2149}
2150
2151static inline void qlcnic_config_ipaddr(struct qlcnic_adapter *adapter,
2152					__be32 ip, int cmd)
2153{
2154	adapter->nic_ops->config_ipaddr(adapter, ip, cmd);
2155}
2156
2157static inline bool qlcnic_check_multi_tx(struct qlcnic_adapter *adapter)
2158{
2159	return test_bit(__QLCNIC_MULTI_TX_UNIQUE, &adapter->state);
2160}
2161
2162static inline void
2163qlcnic_82xx_enable_tx_intr(struct qlcnic_adapter *adapter,
2164			   struct qlcnic_host_tx_ring *tx_ring)
2165{
2166	if (qlcnic_check_multi_tx(adapter) &&
2167	    !adapter->ahw->diag_test)
2168		writel(0x0, tx_ring->crb_intr_mask);
2169}
2170
2171static inline void
2172qlcnic_82xx_disable_tx_intr(struct qlcnic_adapter *adapter,
2173			    struct qlcnic_host_tx_ring *tx_ring)
2174{
2175	if (qlcnic_check_multi_tx(adapter) &&
2176	    !adapter->ahw->diag_test)
2177		writel(1, tx_ring->crb_intr_mask);
2178}
2179
2180static inline void
2181qlcnic_83xx_enable_tx_intr(struct qlcnic_adapter *adapter,
2182			   struct qlcnic_host_tx_ring *tx_ring)
2183{
2184	writel(0, tx_ring->crb_intr_mask);
2185}
2186
2187static inline void
2188qlcnic_83xx_disable_tx_intr(struct qlcnic_adapter *adapter,
2189			    struct qlcnic_host_tx_ring *tx_ring)
2190{
2191	writel(1, tx_ring->crb_intr_mask);
2192}
2193
2194/* Enable MSI-x and INT-x interrupts */
2195static inline void
2196qlcnic_83xx_enable_sds_intr(struct qlcnic_adapter *adapter,
2197			    struct qlcnic_host_sds_ring *sds_ring)
2198{
2199	writel(0, sds_ring->crb_intr_mask);
2200}
2201
2202/* Disable MSI-x and INT-x interrupts */
2203static inline void
2204qlcnic_83xx_disable_sds_intr(struct qlcnic_adapter *adapter,
2205			     struct qlcnic_host_sds_ring *sds_ring)
2206{
2207	writel(1, sds_ring->crb_intr_mask);
2208}
2209
2210static inline void qlcnic_disable_multi_tx(struct qlcnic_adapter *adapter)
2211{
2212	test_and_clear_bit(__QLCNIC_MULTI_TX_UNIQUE, &adapter->state);
2213	adapter->drv_tx_rings = QLCNIC_SINGLE_RING;
2214}
2215
2216/* When operating in a muti tx mode, driver needs to write 0x1
2217 * to src register, instead of 0x0 to disable receiving interrupt.
2218 */
2219static inline void
2220qlcnic_82xx_disable_sds_intr(struct qlcnic_adapter *adapter,
2221			     struct qlcnic_host_sds_ring *sds_ring)
2222{
2223	if (qlcnic_check_multi_tx(adapter) &&
2224	    !adapter->ahw->diag_test &&
2225	    (adapter->flags & QLCNIC_MSIX_ENABLED))
2226		writel(0x1, sds_ring->crb_intr_mask);
2227	else
2228		writel(0, sds_ring->crb_intr_mask);
2229}
2230
2231static inline void qlcnic_enable_sds_intr(struct qlcnic_adapter *adapter,
2232					  struct qlcnic_host_sds_ring *sds_ring)
2233{
2234	if (adapter->ahw->hw_ops->enable_sds_intr)
2235		adapter->ahw->hw_ops->enable_sds_intr(adapter, sds_ring);
2236}
2237
2238static inline void
2239qlcnic_disable_sds_intr(struct qlcnic_adapter *adapter,
2240			struct qlcnic_host_sds_ring *sds_ring)
2241{
2242	if (adapter->ahw->hw_ops->disable_sds_intr)
2243		adapter->ahw->hw_ops->disable_sds_intr(adapter, sds_ring);
2244}
2245
2246static inline void qlcnic_enable_tx_intr(struct qlcnic_adapter *adapter,
2247					 struct qlcnic_host_tx_ring *tx_ring)
2248{
2249	if (adapter->ahw->hw_ops->enable_tx_intr)
2250		adapter->ahw->hw_ops->enable_tx_intr(adapter, tx_ring);
2251}
2252
2253static inline void qlcnic_disable_tx_intr(struct qlcnic_adapter *adapter,
2254					  struct qlcnic_host_tx_ring *tx_ring)
2255{
2256	if (adapter->ahw->hw_ops->disable_tx_intr)
2257		adapter->ahw->hw_ops->disable_tx_intr(adapter, tx_ring);
2258}
2259
2260/* When operating in a muti tx mode, driver needs to write 0x0
2261 * to src register, instead of 0x1 to enable receiving interrupts.
2262 */
2263static inline void
2264qlcnic_82xx_enable_sds_intr(struct qlcnic_adapter *adapter,
2265			    struct qlcnic_host_sds_ring *sds_ring)
2266{
2267	if (qlcnic_check_multi_tx(adapter) &&
2268	    !adapter->ahw->diag_test &&
2269	    (adapter->flags & QLCNIC_MSIX_ENABLED))
2270		writel(0, sds_ring->crb_intr_mask);
2271	else
2272		writel(0x1, sds_ring->crb_intr_mask);
2273
2274	if (!QLCNIC_IS_MSI_FAMILY(adapter))
2275		writel(0xfbff, adapter->tgt_mask_reg);
2276}
2277
2278static inline int qlcnic_get_diag_lock(struct qlcnic_adapter *adapter)
2279{
2280	return test_and_set_bit(__QLCNIC_DIAG_MODE, &adapter->state);
2281}
2282
2283static inline void qlcnic_release_diag_lock(struct qlcnic_adapter *adapter)
2284{
2285	clear_bit(__QLCNIC_DIAG_MODE, &adapter->state);
2286}
2287
2288static inline int qlcnic_check_diag_status(struct qlcnic_adapter *adapter)
2289{
2290	return test_bit(__QLCNIC_DIAG_MODE, &adapter->state);
2291}
2292
2293extern const struct ethtool_ops qlcnic_sriov_vf_ethtool_ops;
2294extern const struct ethtool_ops qlcnic_ethtool_ops;
2295extern const struct ethtool_ops qlcnic_ethtool_failed_ops;
2296
2297#define QLCDB(adapter, lvl, _fmt, _args...) do {	\
2298	if (NETIF_MSG_##lvl & adapter->ahw->msg_enable)	\
2299		printk(KERN_INFO "%s: %s: " _fmt,	\
2300			 dev_name(&adapter->pdev->dev),	\
2301			__func__, ##_args);		\
2302	} while (0)
2303
2304#define PCI_DEVICE_ID_QLOGIC_QLE824X		0x8020
2305#define PCI_DEVICE_ID_QLOGIC_QLE834X		0x8030
2306#define PCI_DEVICE_ID_QLOGIC_VF_QLE834X	0x8430
2307#define PCI_DEVICE_ID_QLOGIC_QLE8830		0x8830
2308#define PCI_DEVICE_ID_QLOGIC_VF_QLE8C30		0x8C30
2309#define PCI_DEVICE_ID_QLOGIC_QLE844X		0x8040
2310#define PCI_DEVICE_ID_QLOGIC_VF_QLE844X	0x8440
2311
2312static inline bool qlcnic_82xx_check(struct qlcnic_adapter *adapter)
2313{
2314	unsigned short device = adapter->pdev->device;
2315	return (device == PCI_DEVICE_ID_QLOGIC_QLE824X) ? true : false;
2316}
2317
2318static inline bool qlcnic_84xx_check(struct qlcnic_adapter *adapter)
2319{
2320	unsigned short device = adapter->pdev->device;
2321
2322	return ((device == PCI_DEVICE_ID_QLOGIC_QLE844X) ||
2323		(device == PCI_DEVICE_ID_QLOGIC_VF_QLE844X)) ? true : false;
2324}
2325
2326static inline bool qlcnic_83xx_check(struct qlcnic_adapter *adapter)
2327{
2328	unsigned short device = adapter->pdev->device;
2329	bool status;
2330
2331	status = ((device == PCI_DEVICE_ID_QLOGIC_QLE834X) ||
2332		  (device == PCI_DEVICE_ID_QLOGIC_QLE8830) ||
2333		  (device == PCI_DEVICE_ID_QLOGIC_QLE844X) ||
2334		  (device == PCI_DEVICE_ID_QLOGIC_VF_QLE844X) ||
2335		  (device == PCI_DEVICE_ID_QLOGIC_VF_QLE834X) ||
2336		  (device == PCI_DEVICE_ID_QLOGIC_VF_QLE8C30)) ? true : false;
2337
2338	return status;
2339}
2340
2341static inline bool qlcnic_sriov_pf_check(struct qlcnic_adapter *adapter)
2342{
2343	return (adapter->ahw->op_mode == QLCNIC_SRIOV_PF_FUNC) ? true : false;
2344}
2345
2346static inline bool qlcnic_sriov_vf_check(struct qlcnic_adapter *adapter)
2347{
2348	unsigned short device = adapter->pdev->device;
2349	bool status;
2350
2351	status = ((device == PCI_DEVICE_ID_QLOGIC_VF_QLE834X) ||
2352		  (device == PCI_DEVICE_ID_QLOGIC_VF_QLE844X) ||
2353		  (device == PCI_DEVICE_ID_QLOGIC_VF_QLE8C30)) ? true : false;
2354
2355	return status;
2356}
2357
2358static inline bool qlcnic_83xx_pf_check(struct qlcnic_adapter *adapter)
2359{
2360	unsigned short device = adapter->pdev->device;
2361
2362	return (device == PCI_DEVICE_ID_QLOGIC_QLE834X) ? true : false;
2363}
2364
2365static inline bool qlcnic_83xx_vf_check(struct qlcnic_adapter *adapter)
2366{
2367	unsigned short device = adapter->pdev->device;
2368
2369	return ((device == PCI_DEVICE_ID_QLOGIC_VF_QLE834X) ||
2370		(device == PCI_DEVICE_ID_QLOGIC_VF_QLE8C30)) ? true : false;
2371}
2372
2373static inline bool qlcnic_sriov_check(struct qlcnic_adapter *adapter)
2374{
2375	bool status;
2376
2377	status = (qlcnic_sriov_pf_check(adapter) ||
2378		  qlcnic_sriov_vf_check(adapter)) ? true : false;
2379
2380	return status;
2381}
2382
2383static inline u32 qlcnic_get_vnic_func_count(struct qlcnic_adapter *adapter)
2384{
2385	if (qlcnic_84xx_check(adapter))
2386		return QLC_84XX_VNIC_COUNT;
2387	else
2388		return QLC_DEFAULT_VNIC_COUNT;
2389}
2390
2391static inline void qlcnic_swap32_buffer(u32 *buffer, int count)
2392{
2393#if defined(__BIG_ENDIAN)
2394	u32 *tmp = buffer;
2395	int i;
2396
2397	for (i = 0; i < count; i++) {
2398		*tmp = swab32(*tmp);
2399		tmp++;
2400	}
2401#endif
2402}
2403
2404#ifdef CONFIG_QLCNIC_HWMON
2405void qlcnic_register_hwmon_dev(struct qlcnic_adapter *);
2406void qlcnic_unregister_hwmon_dev(struct qlcnic_adapter *);
2407#else
2408static inline void qlcnic_register_hwmon_dev(struct qlcnic_adapter *adapter)
2409{
2410	return;
2411}
2412static inline void qlcnic_unregister_hwmon_dev(struct qlcnic_adapter *adapter)
2413{
2414	return;
2415}
2416#endif
2417#endif				/* __QLCNIC_H_ */
v4.17
 
   1/*
   2 * QLogic qlcnic NIC Driver
   3 * Copyright (c) 2009-2013 QLogic Corporation
   4 *
   5 * See LICENSE.qlcnic for copyright and licensing details.
   6 */
   7
   8#ifndef _QLCNIC_H_
   9#define _QLCNIC_H_
  10
  11#include <linux/module.h>
  12#include <linux/kernel.h>
  13#include <linux/types.h>
  14#include <linux/ioport.h>
  15#include <linux/pci.h>
  16#include <linux/netdevice.h>
  17#include <linux/etherdevice.h>
  18#include <linux/ip.h>
  19#include <linux/in.h>
  20#include <linux/tcp.h>
  21#include <linux/skbuff.h>
  22#include <linux/firmware.h>
  23#include <linux/ethtool.h>
  24#include <linux/mii.h>
  25#include <linux/timer.h>
  26#include <linux/irq.h>
  27#include <linux/vmalloc.h>
  28#include <linux/io.h>
  29#include <asm/byteorder.h>
  30#include <linux/bitops.h>
  31#include <linux/if_vlan.h>
  32
  33#include "qlcnic_hdr.h"
  34#include "qlcnic_hw.h"
  35#include "qlcnic_83xx_hw.h"
  36#include "qlcnic_dcb.h"
  37
  38#define _QLCNIC_LINUX_MAJOR 5
  39#define _QLCNIC_LINUX_MINOR 3
  40#define _QLCNIC_LINUX_SUBVERSION 66
  41#define QLCNIC_LINUX_VERSIONID  "5.3.66"
  42#define QLCNIC_DRV_IDC_VER  0x01
  43#define QLCNIC_DRIVER_VERSION  ((_QLCNIC_LINUX_MAJOR << 16) |\
  44		 (_QLCNIC_LINUX_MINOR << 8) | (_QLCNIC_LINUX_SUBVERSION))
  45
  46#define QLCNIC_VERSION_CODE(a, b, c)	(((a) << 24) + ((b) << 16) + (c))
  47#define _major(v)	(((v) >> 24) & 0xff)
  48#define _minor(v)	(((v) >> 16) & 0xff)
  49#define _build(v)	((v) & 0xffff)
  50
  51/* version in image has weird encoding:
  52 *  7:0  - major
  53 * 15:8  - minor
  54 * 31:16 - build (little endian)
  55 */
  56#define QLCNIC_DECODE_VERSION(v) \
  57	QLCNIC_VERSION_CODE(((v) & 0xff), (((v) >> 8) & 0xff), ((v) >> 16))
  58
  59#define QLCNIC_MIN_FW_VERSION     QLCNIC_VERSION_CODE(4, 4, 2)
  60#define QLCNIC_NUM_FLASH_SECTORS (64)
  61#define QLCNIC_FLASH_SECTOR_SIZE (64 * 1024)
  62#define QLCNIC_FLASH_TOTAL_SIZE  (QLCNIC_NUM_FLASH_SECTORS \
  63					* QLCNIC_FLASH_SECTOR_SIZE)
  64
  65#define RCV_DESC_RINGSIZE(rds_ring)	\
  66	(sizeof(struct rcv_desc) * (rds_ring)->num_desc)
  67#define RCV_BUFF_RINGSIZE(rds_ring)	\
  68	(sizeof(struct qlcnic_rx_buffer) * rds_ring->num_desc)
  69#define STATUS_DESC_RINGSIZE(sds_ring)	\
  70	(sizeof(struct status_desc) * (sds_ring)->num_desc)
  71#define TX_BUFF_RINGSIZE(tx_ring)	\
  72	(sizeof(struct qlcnic_cmd_buffer) * tx_ring->num_desc)
  73#define TX_DESC_RINGSIZE(tx_ring)	\
  74	(sizeof(struct cmd_desc_type0) * tx_ring->num_desc)
  75
  76#define QLCNIC_P3P_A0		0x50
  77#define QLCNIC_P3P_C0		0x58
  78
  79#define QLCNIC_IS_REVISION_P3P(REVISION)     (REVISION >= QLCNIC_P3P_A0)
  80
  81#define FIRST_PAGE_GROUP_START	0
  82#define FIRST_PAGE_GROUP_END	0x100000
  83
  84#define P3P_MAX_MTU                     (9600)
  85#define P3P_MIN_MTU                     (68)
  86#define QLCNIC_MAX_ETHERHDR                32 /* This contains some padding */
  87
  88#define QLCNIC_P3P_RX_BUF_MAX_LEN         (QLCNIC_MAX_ETHERHDR + ETH_DATA_LEN)
  89#define QLCNIC_P3P_RX_JUMBO_BUF_MAX_LEN   (QLCNIC_MAX_ETHERHDR + P3P_MAX_MTU)
  90#define QLCNIC_CT_DEFAULT_RX_BUF_LEN	2048
  91#define QLCNIC_LRO_BUFFER_EXTRA		2048
  92
  93/* Tx defines */
  94#define QLCNIC_MAX_FRAGS_PER_TX	14
  95#define MAX_TSO_HEADER_DESC	2
  96#define MGMT_CMD_DESC_RESV	4
  97#define TX_STOP_THRESH		((MAX_SKB_FRAGS >> 2) + MAX_TSO_HEADER_DESC \
  98							+ MGMT_CMD_DESC_RESV)
  99#define QLCNIC_MAX_TX_TIMEOUTS	2
 100
 101/* Driver will use 1 Tx ring in INT-x/MSI/SRIOV mode. */
 102#define QLCNIC_SINGLE_RING		1
 103#define QLCNIC_DEF_SDS_RINGS		4
 104#define QLCNIC_DEF_TX_RINGS		4
 105#define QLCNIC_MAX_VNIC_TX_RINGS	4
 106#define QLCNIC_MAX_VNIC_SDS_RINGS	4
 107#define QLCNIC_83XX_MINIMUM_VECTOR	3
 108#define QLCNIC_82XX_MINIMUM_VECTOR	2
 109
 110enum qlcnic_queue_type {
 111	QLCNIC_TX_QUEUE = 1,
 112	QLCNIC_RX_QUEUE,
 113};
 114
 115/* Operational mode for driver */
 116#define QLCNIC_VNIC_MODE	0xFF
 117#define QLCNIC_DEFAULT_MODE	0x0
 118
 119/* Virtual NIC function count */
 120#define QLC_DEFAULT_VNIC_COUNT	8
 121#define QLC_84XX_VNIC_COUNT	16
 122
 123/*
 124 * Following are the states of the Phantom. Phantom will set them and
 125 * Host will read to check if the fields are correct.
 126 */
 127#define PHAN_INITIALIZE_FAILED		0xffff
 128#define PHAN_INITIALIZE_COMPLETE	0xff01
 129
 130/* Host writes the following to notify that it has done the init-handshake */
 131#define PHAN_INITIALIZE_ACK		0xf00f
 132#define PHAN_PEG_RCV_INITIALIZED	0xff01
 133
 134#define NUM_RCV_DESC_RINGS	3
 135
 136#define RCV_RING_NORMAL 0
 137#define RCV_RING_JUMBO	1
 138
 139#define MIN_CMD_DESCRIPTORS		64
 140#define MIN_RCV_DESCRIPTORS		64
 141#define MIN_JUMBO_DESCRIPTORS		32
 142
 143#define MAX_CMD_DESCRIPTORS		1024
 144#define MAX_RCV_DESCRIPTORS_1G		4096
 145#define MAX_RCV_DESCRIPTORS_10G 	8192
 146#define MAX_RCV_DESCRIPTORS_VF		2048
 147#define MAX_JUMBO_RCV_DESCRIPTORS_1G	512
 148#define MAX_JUMBO_RCV_DESCRIPTORS_10G	1024
 149
 150#define DEFAULT_RCV_DESCRIPTORS_1G	2048
 151#define DEFAULT_RCV_DESCRIPTORS_10G	4096
 152#define DEFAULT_RCV_DESCRIPTORS_VF	1024
 153#define MAX_RDS_RINGS                   2
 154
 155#define get_next_index(index, length)	\
 156	(((index) + 1) & ((length) - 1))
 157
 158/*
 159 * Following data structures describe the descriptors that will be used.
 160 * Added fileds of tcpHdrSize and ipHdrSize, The driver needs to do it only when
 161 * we are doing LSO (above the 1500 size packet) only.
 162 */
 163struct cmd_desc_type0 {
 164	u8 tcp_hdr_offset;	/* For LSO only */
 165	u8 ip_hdr_offset;	/* For LSO only */
 166	__le16 flags_opcode;	/* 15:13 unused, 12:7 opcode, 6:0 flags */
 167	__le32 nfrags__length;	/* 31:8 total len, 7:0 frag count */
 168
 169	__le64 addr_buffer2;
 170
 171	__le16 encap_descr;	/* 15:10 offset of outer L3 header,
 172				 * 9:6 number of 32bit words in outer L3 header,
 173				 * 5 offload outer L4 checksum,
 174				 * 4 offload outer L3 checksum,
 175				 * 3 Inner L4 type, TCP=0, UDP=1,
 176				 * 2 Inner L3 type, IPv4=0, IPv6=1,
 177				 * 1 Outer L3 type,IPv4=0, IPv6=1,
 178				 * 0 type of encapsulation, GRE=0, VXLAN=1
 179				 */
 180	__le16 mss;
 181	u8 port_ctxid;		/* 7:4 ctxid 3:0 port */
 182	u8 hdr_length;		/* LSO only : MAC+IP+TCP Hdr size */
 183	u8 outer_hdr_length;	/* Encapsulation only */
 184	u8 rsvd1;
 185
 186	__le64 addr_buffer3;
 187	__le64 addr_buffer1;
 188
 189	__le16 buffer_length[4];
 190
 191	__le64 addr_buffer4;
 192
 193	u8 eth_addr[ETH_ALEN];
 194	__le16 vlan_TCI;	/* In case of  encapsulation,
 195				 * this is for outer VLAN
 196				 */
 197
 198} __attribute__ ((aligned(64)));
 199
 200/* Note: sizeof(rcv_desc) should always be a mutliple of 2 */
 201struct rcv_desc {
 202	__le16 reference_handle;
 203	__le16 reserved;
 204	__le32 buffer_length;	/* allocated buffer length (usually 2K) */
 205	__le64 addr_buffer;
 206} __packed;
 207
 208struct status_desc {
 209	__le64 status_desc_data[2];
 210} __attribute__ ((aligned(16)));
 211
 212/* UNIFIED ROMIMAGE */
 213#define QLCNIC_UNI_FW_MIN_SIZE		0xc8000
 214#define QLCNIC_UNI_DIR_SECT_PRODUCT_TBL	0x0
 215#define QLCNIC_UNI_DIR_SECT_BOOTLD	0x6
 216#define QLCNIC_UNI_DIR_SECT_FW		0x7
 217
 218/*Offsets */
 219#define QLCNIC_UNI_CHIP_REV_OFF		10
 220#define QLCNIC_UNI_FLAGS_OFF		11
 221#define QLCNIC_UNI_BIOS_VERSION_OFF 	12
 222#define QLCNIC_UNI_BOOTLD_IDX_OFF	27
 223#define QLCNIC_UNI_FIRMWARE_IDX_OFF 	29
 224
 225struct uni_table_desc{
 226	__le32	findex;
 227	__le32	num_entries;
 228	__le32	entry_size;
 229	__le32	reserved[5];
 230};
 231
 232struct uni_data_desc{
 233	__le32	findex;
 234	__le32	size;
 235	__le32	reserved[5];
 236};
 237
 238/* Flash Defines and Structures */
 239#define QLCNIC_FLT_LOCATION	0x3F1000
 240#define QLCNIC_FDT_LOCATION     0x3F0000
 241#define QLCNIC_B0_FW_IMAGE_REGION 0x74
 242#define QLCNIC_C0_FW_IMAGE_REGION 0x97
 243#define QLCNIC_BOOTLD_REGION    0X72
 244struct qlcnic_flt_header {
 245	u16 version;
 246	u16 len;
 247	u16 checksum;
 248	u16 reserved;
 249};
 250
 251struct qlcnic_flt_entry {
 252	u8 region;
 253	u8 reserved0;
 254	u8 attrib;
 255	u8 reserved1;
 256	u32 size;
 257	u32 start_addr;
 258	u32 end_addr;
 259};
 260
 261/* Flash Descriptor Table */
 262struct qlcnic_fdt {
 263	u32	valid;
 264	u16	ver;
 265	u16	len;
 266	u16	cksum;
 267	u16	unused;
 268	u8	model[16];
 269	u8	mfg_id;
 270	u16	id;
 271	u8	flag;
 272	u8	erase_cmd;
 273	u8	alt_erase_cmd;
 274	u8	write_enable_cmd;
 275	u8	write_enable_bits;
 276	u8	write_statusreg_cmd;
 277	u8	unprotected_sec_cmd;
 278	u8	read_manuf_cmd;
 279	u32	block_size;
 280	u32	alt_block_size;
 281	u32	flash_size;
 282	u32	write_enable_data;
 283	u8	readid_addr_len;
 284	u8	write_disable_bits;
 285	u8	read_dev_id_len;
 286	u8	chip_erase_cmd;
 287	u16	read_timeo;
 288	u8	protected_sec_cmd;
 289	u8	resvd[65];
 290};
 291/* Magic number to let user know flash is programmed */
 292#define	QLCNIC_BDINFO_MAGIC 0x12345678
 293
 294#define QLCNIC_BRDTYPE_P3P_REF_QG	0x0021
 295#define QLCNIC_BRDTYPE_P3P_HMEZ		0x0022
 296#define QLCNIC_BRDTYPE_P3P_10G_CX4_LP	0x0023
 297#define QLCNIC_BRDTYPE_P3P_4_GB		0x0024
 298#define QLCNIC_BRDTYPE_P3P_IMEZ		0x0025
 299#define QLCNIC_BRDTYPE_P3P_10G_SFP_PLUS	0x0026
 300#define QLCNIC_BRDTYPE_P3P_10000_BASE_T	0x0027
 301#define QLCNIC_BRDTYPE_P3P_XG_LOM	0x0028
 302#define QLCNIC_BRDTYPE_P3P_4_GB_MM	0x0029
 303#define QLCNIC_BRDTYPE_P3P_10G_SFP_CT	0x002a
 304#define QLCNIC_BRDTYPE_P3P_10G_SFP_QT	0x002b
 305#define QLCNIC_BRDTYPE_P3P_10G_CX4	0x0031
 306#define QLCNIC_BRDTYPE_P3P_10G_XFP	0x0032
 307#define QLCNIC_BRDTYPE_P3P_10G_TP	0x0080
 308
 309#define QLCNIC_MSIX_TABLE_OFFSET	0x44
 310
 311/* Flash memory map */
 312#define QLCNIC_BRDCFG_START	0x4000		/* board config */
 313#define QLCNIC_BOOTLD_START	0x10000		/* bootld */
 314#define QLCNIC_IMAGE_START	0x43000		/* compressed image */
 315#define QLCNIC_USER_START	0x3E8000	/* Firmware info */
 316
 317#define QLCNIC_FW_VERSION_OFFSET	(QLCNIC_USER_START+0x408)
 318#define QLCNIC_FW_SIZE_OFFSET		(QLCNIC_USER_START+0x40c)
 319#define QLCNIC_FW_SERIAL_NUM_OFFSET	(QLCNIC_USER_START+0x81c)
 320#define QLCNIC_BIOS_VERSION_OFFSET	(QLCNIC_USER_START+0x83c)
 321
 322#define QLCNIC_BRDTYPE_OFFSET		(QLCNIC_BRDCFG_START+0x8)
 323#define QLCNIC_FW_MAGIC_OFFSET		(QLCNIC_BRDCFG_START+0x128)
 324
 325#define QLCNIC_FW_MIN_SIZE		(0x3fffff)
 326#define QLCNIC_UNIFIED_ROMIMAGE  	0
 327#define QLCNIC_FLASH_ROMIMAGE		1
 328#define QLCNIC_UNKNOWN_ROMIMAGE		0xff
 329
 330#define QLCNIC_UNIFIED_ROMIMAGE_NAME	"phanfw.bin"
 331#define QLCNIC_FLASH_ROMIMAGE_NAME	"flash"
 332
 333extern char qlcnic_driver_name[];
 334
 335extern int qlcnic_use_msi;
 336extern int qlcnic_use_msi_x;
 337extern int qlcnic_auto_fw_reset;
 338extern int qlcnic_load_fw_file;
 339
 340/* Number of status descriptors to handle per interrupt */
 341#define MAX_STATUS_HANDLE	(64)
 342
 343/*
 344 * qlcnic_skb_frag{} is to contain mapping info for each SG list. This
 345 * has to be freed when DMA is complete. This is part of qlcnic_tx_buffer{}.
 346 */
 347struct qlcnic_skb_frag {
 348	u64 dma;
 349	u64 length;
 350};
 351
 352/*    Following defines are for the state of the buffers    */
 353#define	QLCNIC_BUFFER_FREE	0
 354#define	QLCNIC_BUFFER_BUSY	1
 355
 356/*
 357 * There will be one qlcnic_buffer per skb packet.    These will be
 358 * used to save the dma info for pci_unmap_page()
 359 */
 360struct qlcnic_cmd_buffer {
 361	struct sk_buff *skb;
 362	struct qlcnic_skb_frag frag_array[MAX_SKB_FRAGS + 1];
 363	u32 frag_count;
 364};
 365
 366/* In rx_buffer, we do not need multiple fragments as is a single buffer */
 367struct qlcnic_rx_buffer {
 368	u16 ref_handle;
 369	struct sk_buff *skb;
 370	struct list_head list;
 371	u64 dma;
 372};
 373
 374/* Board types */
 375#define	QLCNIC_GBE	0x01
 376#define	QLCNIC_XGBE	0x02
 377
 378/*
 379 * Interrupt coalescing defaults. The defaults are for 1500 MTU. It is
 380 * adjusted based on configured MTU.
 381 */
 382#define QLCNIC_INTR_COAL_TYPE_RX		1
 383#define QLCNIC_INTR_COAL_TYPE_TX		2
 384#define QLCNIC_INTR_COAL_TYPE_RX_TX		3
 385
 386#define QLCNIC_DEF_INTR_COALESCE_RX_TIME_US	3
 387#define QLCNIC_DEF_INTR_COALESCE_RX_PACKETS	256
 388
 389#define QLCNIC_DEF_INTR_COALESCE_TX_TIME_US	64
 390#define QLCNIC_DEF_INTR_COALESCE_TX_PACKETS	64
 391
 392#define QLCNIC_INTR_DEFAULT			0x04
 393#define QLCNIC_CONFIG_INTR_COALESCE		3
 394#define QLCNIC_DEV_INFO_SIZE			2
 395
 396struct qlcnic_nic_intr_coalesce {
 397	u8	type;
 398	u8	sts_ring_mask;
 399	u16	rx_packets;
 400	u16	rx_time_us;
 401	u16	tx_packets;
 402	u16	tx_time_us;
 403	u16	flag;
 404	u32	timer_out;
 405};
 406
 407struct qlcnic_83xx_dump_template_hdr {
 408	u32	type;
 409	u32	offset;
 410	u32	size;
 411	u32	cap_mask;
 412	u32	num_entries;
 413	u32	version;
 414	u32	timestamp;
 415	u32	checksum;
 416	u32	drv_cap_mask;
 417	u32	sys_info[3];
 418	u32	saved_state[16];
 419	u32	cap_sizes[8];
 420	u32	ocm_wnd_reg[16];
 421	u32	rsvd[0];
 422};
 423
 424struct qlcnic_82xx_dump_template_hdr {
 425	u32	type;
 426	u32	offset;
 427	u32	size;
 428	u32	cap_mask;
 429	u32	num_entries;
 430	u32	version;
 431	u32	timestamp;
 432	u32	checksum;
 433	u32	drv_cap_mask;
 434	u32	sys_info[3];
 435	u32	saved_state[16];
 436	u32	cap_sizes[8];
 437	u32	rsvd[7];
 438	u32	capabilities;
 439	u32	rsvd1[0];
 440};
 441
 442#define QLC_PEX_DMA_READ_SIZE	(PAGE_SIZE * 16)
 443
 444struct qlcnic_fw_dump {
 445	u8	clr;	/* flag to indicate if dump is cleared */
 446	bool	enable; /* enable/disable dump */
 447	u32	size;	/* total size of the dump */
 448	u32	cap_mask; /* Current capture mask */
 449	void	*data;	/* dump data area */
 450	void	*tmpl_hdr;
 451	dma_addr_t phys_addr;
 452	void	*dma_buffer;
 453	bool	use_pex_dma;
 454	/* Read only elements which are common between 82xx and 83xx
 455	 * template header. Update these values immediately after we read
 456	 * template header from Firmware
 457	 */
 458	u32	tmpl_hdr_size;
 459	u32	version;
 460	u32	num_entries;
 461	u32	offset;
 462};
 463
 464/*
 465 * One hardware_context{} per adapter
 466 * contains interrupt info as well shared hardware info.
 467 */
 468struct qlcnic_hardware_context {
 469	void __iomem *pci_base0;
 470	void __iomem *ocm_win_crb;
 471
 472	unsigned long pci_len0;
 473
 474	rwlock_t crb_lock;
 475	struct mutex mem_lock;
 476
 477	u8 revision_id;
 478	u8 pci_func;
 479	u8 linkup;
 480	u8 loopback_state;
 481	u8 beacon_state;
 482	u8 has_link_events;
 483	u8 fw_type;
 484	u8 physical_port;
 485	u8 reset_context;
 486	u8 msix_supported;
 487	u8 max_mac_filters;
 488	u8 mc_enabled;
 489	u8 max_mc_count;
 490	u8 diag_test;
 491	u8 num_msix;
 492	u8 nic_mode;
 493	int diag_cnt;
 494
 495	u16 max_uc_count;
 496	u16 port_type;
 497	u16 board_type;
 498	u16 supported_type;
 499
 500	u16 link_speed;
 501	u16 link_duplex;
 502	u16 link_autoneg;
 503	u16 module_type;
 504
 505	u16 op_mode;
 506	u16 switch_mode;
 507	u16 max_tx_ques;
 508	u16 max_rx_ques;
 509	u16 max_mtu;
 510	u32 msg_enable;
 511	u16 total_nic_func;
 512	u16 max_pci_func;
 513	u32 max_vnic_func;
 514	u32 total_pci_func;
 515
 516	u32 capabilities;
 517	u32 extra_capability[3];
 518	u32 temp;
 519	u32 int_vec_bit;
 520	u32 fw_hal_version;
 521	u32 port_config;
 522	struct qlcnic_hardware_ops *hw_ops;
 523	struct qlcnic_nic_intr_coalesce coal;
 524	struct qlcnic_fw_dump fw_dump;
 525	struct qlcnic_fdt fdt;
 526	struct qlc_83xx_reset reset;
 527	struct qlc_83xx_idc idc;
 528	struct qlc_83xx_fw_info *fw_info;
 529	struct qlcnic_intrpt_config *intr_tbl;
 530	struct qlcnic_sriov *sriov;
 531	u32 *reg_tbl;
 532	u32 *ext_reg_tbl;
 533	u32 mbox_aen[QLC_83XX_MBX_AEN_CNT];
 534	u32 mbox_reg[4];
 535	struct qlcnic_mailbox *mailbox;
 536	u8 extend_lb_time;
 537	u8 phys_port_id[ETH_ALEN];
 538	u8 lb_mode;
 539	u8 vxlan_port_count;
 540	u16 vxlan_port;
 541	struct device *hwmon_dev;
 542	u32 post_mode;
 543	bool run_post;
 544};
 545
 546struct qlcnic_adapter_stats {
 547	u64  xmitcalled;
 548	u64  xmitfinished;
 549	u64  rxdropped;
 550	u64  txdropped;
 551	u64  csummed;
 552	u64  rx_pkts;
 553	u64  lro_pkts;
 554	u64  rxbytes;
 555	u64  txbytes;
 556	u64  lrobytes;
 557	u64  lso_frames;
 558	u64  encap_lso_frames;
 559	u64  encap_tx_csummed;
 560	u64  encap_rx_csummed;
 561	u64  xmit_on;
 562	u64  xmit_off;
 563	u64  skb_alloc_failure;
 564	u64  null_rxbuf;
 565	u64  rx_dma_map_error;
 566	u64  tx_dma_map_error;
 567	u64  spurious_intr;
 568	u64  mac_filter_limit_overrun;
 569	u64  mbx_spurious_intr;
 570};
 571
 572/*
 573 * Rcv Descriptor Context. One such per Rcv Descriptor. There may
 574 * be one Rcv Descriptor for normal packets, one for jumbo and may be others.
 575 */
 576struct qlcnic_host_rds_ring {
 577	void __iomem *crb_rcv_producer;
 578	struct rcv_desc *desc_head;
 579	struct qlcnic_rx_buffer *rx_buf_arr;
 580	u32 num_desc;
 581	u32 producer;
 582	u32 dma_size;
 583	u32 skb_size;
 584	u32 flags;
 585	struct list_head free_list;
 586	spinlock_t lock;
 587	dma_addr_t phys_addr;
 588} ____cacheline_internodealigned_in_smp;
 589
 590struct qlcnic_host_sds_ring {
 591	u32 consumer;
 592	u32 num_desc;
 593	void __iomem *crb_sts_consumer;
 594
 595	struct qlcnic_host_tx_ring *tx_ring;
 596	struct status_desc *desc_head;
 597	struct qlcnic_adapter *adapter;
 598	struct napi_struct napi;
 599	struct list_head free_list[NUM_RCV_DESC_RINGS];
 600
 601	void __iomem *crb_intr_mask;
 602	int irq;
 603
 604	dma_addr_t phys_addr;
 605	char name[IFNAMSIZ + 12];
 606} ____cacheline_internodealigned_in_smp;
 607
 608struct qlcnic_tx_queue_stats {
 609	u64 xmit_on;
 610	u64 xmit_off;
 611	u64 xmit_called;
 612	u64 xmit_finished;
 613	u64 tx_bytes;
 614};
 615
 616struct qlcnic_host_tx_ring {
 617	int irq;
 618	void __iomem *crb_intr_mask;
 619	char name[IFNAMSIZ + 12];
 620	u16 ctx_id;
 621
 622	u32 state;
 623	u32 producer;
 624	u32 sw_consumer;
 625	u32 num_desc;
 626
 627	struct qlcnic_tx_queue_stats tx_stats;
 628
 629	void __iomem *crb_cmd_producer;
 630	struct cmd_desc_type0 *desc_head;
 631	struct qlcnic_adapter *adapter;
 632	struct napi_struct napi;
 633	struct qlcnic_cmd_buffer *cmd_buf_arr;
 634	__le32 *hw_consumer;
 635
 636	dma_addr_t phys_addr;
 637	dma_addr_t hw_cons_phys_addr;
 638	struct netdev_queue *txq;
 639	/* Lock to protect Tx descriptors cleanup */
 640	spinlock_t tx_clean_lock;
 641} ____cacheline_internodealigned_in_smp;
 642
 643/*
 644 * Receive context. There is one such structure per instance of the
 645 * receive processing. Any state information that is relevant to
 646 * the receive, and is must be in this structure. The global data may be
 647 * present elsewhere.
 648 */
 649struct qlcnic_recv_context {
 650	struct qlcnic_host_rds_ring *rds_rings;
 651	struct qlcnic_host_sds_ring *sds_rings;
 652	u32 state;
 653	u16 context_id;
 654	u16 virt_port;
 655};
 656
 657/* HW context creation */
 658
 659#define QLCNIC_OS_CRB_RETRY_COUNT	4000
 660
 661#define QLCNIC_CDRP_CMD_BIT		0x80000000
 662
 663/*
 664 * All responses must have the QLCNIC_CDRP_CMD_BIT cleared
 665 * in the crb QLCNIC_CDRP_CRB_OFFSET.
 666 */
 667#define QLCNIC_CDRP_FORM_RSP(rsp)	(rsp)
 668#define QLCNIC_CDRP_IS_RSP(rsp)	(((rsp) & QLCNIC_CDRP_CMD_BIT) == 0)
 669
 670#define QLCNIC_CDRP_RSP_OK		0x00000001
 671#define QLCNIC_CDRP_RSP_FAIL		0x00000002
 672#define QLCNIC_CDRP_RSP_TIMEOUT 	0x00000003
 673
 674/*
 675 * All commands must have the QLCNIC_CDRP_CMD_BIT set in
 676 * the crb QLCNIC_CDRP_CRB_OFFSET.
 677 */
 678#define QLCNIC_CDRP_FORM_CMD(cmd)	(QLCNIC_CDRP_CMD_BIT | (cmd))
 679
 680#define QLCNIC_RCODE_SUCCESS		0
 681#define QLCNIC_RCODE_INVALID_ARGS	6
 682#define QLCNIC_RCODE_NOT_SUPPORTED	9
 683#define QLCNIC_RCODE_NOT_PERMITTED	10
 684#define QLCNIC_RCODE_NOT_IMPL		15
 685#define QLCNIC_RCODE_INVALID		16
 686#define QLCNIC_RCODE_TIMEOUT		17
 687#define QLCNIC_DESTROY_CTX_RESET	0
 688
 689/*
 690 * Capabilities Announced
 691 */
 692#define QLCNIC_CAP0_LEGACY_CONTEXT	(1)
 693#define QLCNIC_CAP0_LEGACY_MN		(1 << 2)
 694#define QLCNIC_CAP0_LSO 		(1 << 6)
 695#define QLCNIC_CAP0_JUMBO_CONTIGUOUS	(1 << 7)
 696#define QLCNIC_CAP0_LRO_CONTIGUOUS	(1 << 8)
 697#define QLCNIC_CAP0_VALIDOFF		(1 << 11)
 698#define QLCNIC_CAP0_LRO_MSS		(1 << 21)
 699#define QLCNIC_CAP0_TX_MULTI		(1 << 22)
 700
 701/*
 702 * Context state
 703 */
 704#define QLCNIC_HOST_CTX_STATE_FREED	0
 705#define QLCNIC_HOST_CTX_STATE_ACTIVE	2
 706
 707/*
 708 * Rx context
 709 */
 710
 711struct qlcnic_hostrq_sds_ring {
 712	__le64 host_phys_addr;	/* Ring base addr */
 713	__le32 ring_size;		/* Ring entries */
 714	__le16 msi_index;
 715	__le16 rsvd;		/* Padding */
 716} __packed;
 717
 718struct qlcnic_hostrq_rds_ring {
 719	__le64 host_phys_addr;	/* Ring base addr */
 720	__le64 buff_size;		/* Packet buffer size */
 721	__le32 ring_size;		/* Ring entries */
 722	__le32 ring_kind;		/* Class of ring */
 723} __packed;
 724
 725struct qlcnic_hostrq_rx_ctx {
 726	__le64 host_rsp_dma_addr;	/* Response dma'd here */
 727	__le32 capabilities[4];		/* Flag bit vector */
 728	__le32 host_int_crb_mode;	/* Interrupt crb usage */
 729	__le32 host_rds_crb_mode;	/* RDS crb usage */
 730	/* These ring offsets are relative to data[0] below */
 731	__le32 rds_ring_offset;	/* Offset to RDS config */
 732	__le32 sds_ring_offset;	/* Offset to SDS config */
 733	__le16 num_rds_rings;	/* Count of RDS rings */
 734	__le16 num_sds_rings;	/* Count of SDS rings */
 735	__le16 valid_field_offset;
 736	u8  txrx_sds_binding;
 737	u8  msix_handler;
 738	u8  reserved[128];      /* reserve space for future expansion*/
 739	/* MUST BE 64-bit aligned.
 740	   The following is packed:
 741	   - N hostrq_rds_rings
 742	   - N hostrq_sds_rings */
 743	char data[0];
 744} __packed;
 745
 746struct qlcnic_cardrsp_rds_ring{
 747	__le32 host_producer_crb;	/* Crb to use */
 748	__le32 rsvd1;		/* Padding */
 749} __packed;
 750
 751struct qlcnic_cardrsp_sds_ring {
 752	__le32 host_consumer_crb;	/* Crb to use */
 753	__le32 interrupt_crb;	/* Crb to use */
 754} __packed;
 755
 756struct qlcnic_cardrsp_rx_ctx {
 757	/* These ring offsets are relative to data[0] below */
 758	__le32 rds_ring_offset;	/* Offset to RDS config */
 759	__le32 sds_ring_offset;	/* Offset to SDS config */
 760	__le32 host_ctx_state;	/* Starting State */
 761	__le32 num_fn_per_port;	/* How many PCI fn share the port */
 762	__le16 num_rds_rings;	/* Count of RDS rings */
 763	__le16 num_sds_rings;	/* Count of SDS rings */
 764	__le16 context_id;		/* Handle for context */
 765	u8  phys_port;		/* Physical id of port */
 766	u8  virt_port;		/* Virtual/Logical id of port */
 767	u8  reserved[128];	/* save space for future expansion */
 768	/*  MUST BE 64-bit aligned.
 769	   The following is packed:
 770	   - N cardrsp_rds_rings
 771	   - N cardrs_sds_rings */
 772	char data[0];
 773} __packed;
 774
 775#define SIZEOF_HOSTRQ_RX(HOSTRQ_RX, rds_rings, sds_rings)	\
 776	(sizeof(HOSTRQ_RX) + 					\
 777	(rds_rings)*(sizeof(struct qlcnic_hostrq_rds_ring)) +		\
 778	(sds_rings)*(sizeof(struct qlcnic_hostrq_sds_ring)))
 779
 780#define SIZEOF_CARDRSP_RX(CARDRSP_RX, rds_rings, sds_rings) 	\
 781	(sizeof(CARDRSP_RX) + 					\
 782	(rds_rings)*(sizeof(struct qlcnic_cardrsp_rds_ring)) + 		\
 783	(sds_rings)*(sizeof(struct qlcnic_cardrsp_sds_ring)))
 784
 785/*
 786 * Tx context
 787 */
 788
 789struct qlcnic_hostrq_cds_ring {
 790	__le64 host_phys_addr;	/* Ring base addr */
 791	__le32 ring_size;		/* Ring entries */
 792	__le32 rsvd;		/* Padding */
 793} __packed;
 794
 795struct qlcnic_hostrq_tx_ctx {
 796	__le64 host_rsp_dma_addr;	/* Response dma'd here */
 797	__le64 cmd_cons_dma_addr;	/*  */
 798	__le64 dummy_dma_addr;	/*  */
 799	__le32 capabilities[4];	/* Flag bit vector */
 800	__le32 host_int_crb_mode;	/* Interrupt crb usage */
 801	__le32 rsvd1;		/* Padding */
 802	__le16 rsvd2;		/* Padding */
 803	__le16 interrupt_ctl;
 804	__le16 msi_index;
 805	__le16 rsvd3;		/* Padding */
 806	struct qlcnic_hostrq_cds_ring cds_ring;	/* Desc of cds ring */
 807	u8  reserved[128];	/* future expansion */
 808} __packed;
 809
 810struct qlcnic_cardrsp_cds_ring {
 811	__le32 host_producer_crb;	/* Crb to use */
 812	__le32 interrupt_crb;	/* Crb to use */
 813} __packed;
 814
 815struct qlcnic_cardrsp_tx_ctx {
 816	__le32 host_ctx_state;	/* Starting state */
 817	__le16 context_id;		/* Handle for context */
 818	u8  phys_port;		/* Physical id of port */
 819	u8  virt_port;		/* Virtual/Logical id of port */
 820	struct qlcnic_cardrsp_cds_ring cds_ring;	/* Card cds settings */
 821	u8  reserved[128];	/* future expansion */
 822} __packed;
 823
 824#define SIZEOF_HOSTRQ_TX(HOSTRQ_TX)	(sizeof(HOSTRQ_TX))
 825#define SIZEOF_CARDRSP_TX(CARDRSP_TX)	(sizeof(CARDRSP_TX))
 826
 827/* CRB */
 828
 829#define QLCNIC_HOST_RDS_CRB_MODE_UNIQUE	0
 830#define QLCNIC_HOST_RDS_CRB_MODE_SHARED	1
 831#define QLCNIC_HOST_RDS_CRB_MODE_CUSTOM	2
 832#define QLCNIC_HOST_RDS_CRB_MODE_MAX	3
 833
 834#define QLCNIC_HOST_INT_CRB_MODE_UNIQUE	0
 835#define QLCNIC_HOST_INT_CRB_MODE_SHARED	1
 836#define QLCNIC_HOST_INT_CRB_MODE_NORX	2
 837#define QLCNIC_HOST_INT_CRB_MODE_NOTX	3
 838#define QLCNIC_HOST_INT_CRB_MODE_NORXTX	4
 839
 840
 841/* MAC */
 842
 843#define MC_COUNT_P3P	38
 844
 845#define QLCNIC_MAC_NOOP	0
 846#define QLCNIC_MAC_ADD	1
 847#define QLCNIC_MAC_DEL	2
 848#define QLCNIC_MAC_VLAN_ADD	3
 849#define QLCNIC_MAC_VLAN_DEL	4
 850
 851enum qlcnic_mac_type {
 852	QLCNIC_UNICAST_MAC,
 853	QLCNIC_MULTICAST_MAC,
 854	QLCNIC_BROADCAST_MAC,
 855};
 856
 857struct qlcnic_mac_vlan_list {
 858	struct list_head list;
 859	uint8_t mac_addr[ETH_ALEN+2];
 860	u16 vlan_id;
 861	enum qlcnic_mac_type mac_type;
 862};
 863
 864/* MAC Learn */
 865#define NO_MAC_LEARN		0
 866#define DRV_MAC_LEARN		1
 867#define FDB_MAC_LEARN		2
 868
 869#define QLCNIC_HOST_REQUEST	0x13
 870#define QLCNIC_REQUEST		0x14
 871
 872#define QLCNIC_MAC_EVENT	0x1
 873
 874#define QLCNIC_IP_UP		2
 875#define QLCNIC_IP_DOWN		3
 876
 877#define QLCNIC_ILB_MODE		0x1
 878#define QLCNIC_ELB_MODE		0x2
 879#define QLCNIC_LB_MODE_MASK	0x3
 880
 881#define QLCNIC_LINKEVENT	0x1
 882#define QLCNIC_LB_RESPONSE	0x2
 883#define QLCNIC_IS_LB_CONFIGURED(VAL)	\
 884		(VAL == (QLCNIC_LINKEVENT | QLCNIC_LB_RESPONSE))
 885
 886/*
 887 * Driver --> Firmware
 888 */
 889#define QLCNIC_H2C_OPCODE_CONFIG_RSS			0x1
 890#define QLCNIC_H2C_OPCODE_CONFIG_INTR_COALESCE		0x3
 891#define QLCNIC_H2C_OPCODE_CONFIG_LED			0x4
 892#define QLCNIC_H2C_OPCODE_LRO_REQUEST			0x7
 893#define QLCNIC_H2C_OPCODE_SET_MAC_RECEIVE_MODE		0xc
 894#define QLCNIC_H2C_OPCODE_CONFIG_IPADDR		0x12
 895
 896#define QLCNIC_H2C_OPCODE_GET_LINKEVENT		0x15
 897#define QLCNIC_H2C_OPCODE_CONFIG_BRIDGING		0x17
 898#define QLCNIC_H2C_OPCODE_CONFIG_HW_LRO		0x18
 899#define QLCNIC_H2C_OPCODE_CONFIG_LOOPBACK		0x13
 900
 901/*
 902 * Firmware --> Driver
 903 */
 904
 905#define QLCNIC_C2H_OPCODE_CONFIG_LOOPBACK		0x8f
 906#define QLCNIC_C2H_OPCODE_GET_LINKEVENT_RESPONSE	0x8D
 907#define QLCNIC_C2H_OPCODE_GET_DCB_AEN			0x90
 908
 909#define VPORT_MISS_MODE_DROP		0 /* drop all unmatched */
 910#define VPORT_MISS_MODE_ACCEPT_ALL	1 /* accept all packets */
 911#define VPORT_MISS_MODE_ACCEPT_MULTI	2 /* accept unmatched multicast */
 912
 913#define QLCNIC_LRO_REQUEST_CLEANUP	4
 914
 915/* Capabilites received */
 916#define QLCNIC_FW_CAPABILITY_TSO		BIT_1
 917#define QLCNIC_FW_CAPABILITY_BDG		BIT_8
 918#define QLCNIC_FW_CAPABILITY_FVLANTX		BIT_9
 919#define QLCNIC_FW_CAPABILITY_HW_LRO		BIT_10
 920#define QLCNIC_FW_CAPABILITY_2_MULTI_TX		BIT_4
 921#define QLCNIC_FW_CAPABILITY_MULTI_LOOPBACK	BIT_27
 922#define QLCNIC_FW_CAPABILITY_MORE_CAPS		BIT_31
 923
 924#define QLCNIC_FW_CAPABILITY_2_LRO_MAX_TCP_SEG	BIT_2
 925#define QLCNIC_FW_CAP2_HW_LRO_IPV6		BIT_3
 926#define QLCNIC_FW_CAPABILITY_SET_DRV_VER	BIT_5
 927#define QLCNIC_FW_CAPABILITY_2_BEACON		BIT_7
 928#define QLCNIC_FW_CAPABILITY_2_PER_PORT_ESWITCH_CFG	BIT_9
 929#define QLCNIC_FW_CAPABILITY_2_EXT_ISCSI_DUMP	BIT_13
 930
 931#define QLCNIC_83XX_FW_CAPAB_ENCAP_RX_OFFLOAD	BIT_0
 932#define QLCNIC_83XX_FW_CAPAB_ENCAP_TX_OFFLOAD	BIT_1
 933#define QLCNIC_83XX_FW_CAPAB_ENCAP_CKO_OFFLOAD	BIT_4
 934
 935/* module types */
 936#define LINKEVENT_MODULE_NOT_PRESENT			1
 937#define LINKEVENT_MODULE_OPTICAL_UNKNOWN		2
 938#define LINKEVENT_MODULE_OPTICAL_SRLR			3
 939#define LINKEVENT_MODULE_OPTICAL_LRM			4
 940#define LINKEVENT_MODULE_OPTICAL_SFP_1G 		5
 941#define LINKEVENT_MODULE_TWINAX_UNSUPPORTED_CABLE	6
 942#define LINKEVENT_MODULE_TWINAX_UNSUPPORTED_CABLELEN	7
 943#define LINKEVENT_MODULE_TWINAX 			8
 944
 945#define LINKSPEED_10GBPS	10000
 946#define LINKSPEED_1GBPS 	1000
 947#define LINKSPEED_100MBPS	100
 948#define LINKSPEED_10MBPS	10
 949
 950#define LINKSPEED_ENCODED_10MBPS	0
 951#define LINKSPEED_ENCODED_100MBPS	1
 952#define LINKSPEED_ENCODED_1GBPS 	2
 953
 954#define LINKEVENT_AUTONEG_DISABLED	0
 955#define LINKEVENT_AUTONEG_ENABLED	1
 956
 957#define LINKEVENT_HALF_DUPLEX		0
 958#define LINKEVENT_FULL_DUPLEX		1
 959
 960#define LINKEVENT_LINKSPEED_MBPS	0
 961#define LINKEVENT_LINKSPEED_ENCODED	1
 962
 963/* firmware response header:
 964 *	63:58 - message type
 965 *	57:56 - owner
 966 *	55:53 - desc count
 967 *	52:48 - reserved
 968 *	47:40 - completion id
 969 *	39:32 - opcode
 970 *	31:16 - error code
 971 *	15:00 - reserved
 972 */
 973#define qlcnic_get_nic_msg_opcode(msg_hdr)	\
 974	((msg_hdr >> 32) & 0xFF)
 975
 976struct qlcnic_fw_msg {
 977	union {
 978		struct {
 979			u64 hdr;
 980			u64 body[7];
 981		};
 982		u64 words[8];
 983	};
 984};
 985
 986struct qlcnic_nic_req {
 987	__le64 qhdr;
 988	__le64 req_hdr;
 989	__le64 words[6];
 990} __packed;
 991
 992struct qlcnic_mac_req {
 993	u8 op;
 994	u8 tag;
 995	u8 mac_addr[6];
 996};
 997
 998struct qlcnic_vlan_req {
 999	__le16 vlan_id;
1000	__le16 rsvd[3];
1001} __packed;
1002
1003struct qlcnic_ipaddr {
1004	__be32 ipv4;
1005	__be32 ipv6[4];
1006};
1007
1008#define QLCNIC_MSI_ENABLED		0x02
1009#define QLCNIC_MSIX_ENABLED		0x04
1010#define QLCNIC_LRO_ENABLED		0x01
1011#define QLCNIC_LRO_DISABLED		0x00
1012#define QLCNIC_BRIDGE_ENABLED       	0X10
1013#define QLCNIC_DIAG_ENABLED		0x20
1014#define QLCNIC_ESWITCH_ENABLED		0x40
1015#define QLCNIC_ADAPTER_INITIALIZED	0x80
1016#define QLCNIC_TAGGING_ENABLED		0x100
1017#define QLCNIC_MACSPOOF			0x200
1018#define QLCNIC_MAC_OVERRIDE_DISABLED	0x400
1019#define QLCNIC_PROMISC_DISABLED		0x800
1020#define QLCNIC_NEED_FLR			0x1000
1021#define QLCNIC_FW_RESET_OWNER		0x2000
1022#define QLCNIC_FW_HANG			0x4000
1023#define QLCNIC_FW_LRO_MSS_CAP		0x8000
1024#define QLCNIC_TX_INTR_SHARED		0x10000
1025#define QLCNIC_APP_CHANGED_FLAGS	0x20000
1026#define QLCNIC_HAS_PHYS_PORT_ID		0x40000
1027#define QLCNIC_TSS_RSS			0x80000
1028
1029#define QLCNIC_ADD_VXLAN_PORT		0x100000
1030#define QLCNIC_DEL_VXLAN_PORT		0x200000
1031
1032#define QLCNIC_VLAN_FILTERING		0x800000
1033
1034#define QLCNIC_IS_MSI_FAMILY(adapter) \
1035	((adapter)->flags & (QLCNIC_MSI_ENABLED | QLCNIC_MSIX_ENABLED))
1036#define QLCNIC_IS_TSO_CAPABLE(adapter)  \
1037	((adapter)->ahw->capabilities & QLCNIC_FW_CAPABILITY_TSO)
1038
1039#define QLCNIC_BEACON_EANBLE		0xC
1040#define QLCNIC_BEACON_DISABLE		0xD
1041
1042#define QLCNIC_BEACON_ON		2
1043#define QLCNIC_BEACON_OFF		0
1044
1045#define QLCNIC_MSIX_TBL_SPACE		8192
1046#define QLCNIC_PCI_REG_MSIX_TBL 	0x44
1047#define QLCNIC_MSIX_TBL_PGSIZE		4096
1048
1049#define QLCNIC_ADAPTER_UP_MAGIC 777
1050
1051#define __QLCNIC_FW_ATTACHED		0
1052#define __QLCNIC_DEV_UP 		1
1053#define __QLCNIC_RESETTING		2
1054#define __QLCNIC_START_FW 		4
1055#define __QLCNIC_AER			5
1056#define __QLCNIC_DIAG_RES_ALLOC		6
1057#define __QLCNIC_LED_ENABLE		7
1058#define __QLCNIC_ELB_INPROGRESS		8
1059#define __QLCNIC_MULTI_TX_UNIQUE	9
1060#define __QLCNIC_SRIOV_ENABLE		10
1061#define __QLCNIC_SRIOV_CAPABLE		11
1062#define __QLCNIC_MBX_POLL_ENABLE	12
1063#define __QLCNIC_DIAG_MODE		13
1064#define __QLCNIC_MAINTENANCE_MODE	16
1065
1066#define QLCNIC_INTERRUPT_TEST		1
1067#define QLCNIC_LOOPBACK_TEST		2
1068#define QLCNIC_LED_TEST		3
1069
1070#define QLCNIC_FILTER_AGE	80
1071#define QLCNIC_READD_AGE	20
1072#define QLCNIC_LB_MAX_FILTERS	64
1073#define QLCNIC_LB_BUCKET_SIZE	32
1074#define QLCNIC_ILB_MAX_RCV_LOOP	10
1075
1076struct qlcnic_filter {
1077	struct hlist_node fnode;
1078	u8 faddr[ETH_ALEN];
1079	u16 vlan_id;
1080	unsigned long ftime;
1081};
1082
1083struct qlcnic_filter_hash {
1084	struct hlist_head *fhead;
1085	u8 fnum;
1086	u16 fmax;
1087	u16 fbucket_size;
1088};
1089
1090/* Mailbox specific data structures */
1091struct qlcnic_mailbox {
1092	struct workqueue_struct	*work_q;
1093	struct qlcnic_adapter	*adapter;
1094	const struct qlcnic_mbx_ops *ops;
1095	struct work_struct	work;
1096	struct completion	completion;
1097	struct list_head	cmd_q;
1098	unsigned long		status;
1099	spinlock_t		queue_lock;	/* Mailbox queue lock */
1100	spinlock_t		aen_lock;	/* Mailbox response/AEN lock */
1101	u32			rsp_status;
1102	u32			num_cmds;
1103};
1104
1105struct qlcnic_adapter {
1106	struct qlcnic_hardware_context *ahw;
1107	struct qlcnic_recv_context *recv_ctx;
1108	struct qlcnic_host_tx_ring *tx_ring;
1109	struct net_device *netdev;
1110	struct pci_dev *pdev;
1111
1112	unsigned long state;
1113	u32 flags;
1114
1115	u16 num_txd;
1116	u16 num_rxd;
1117	u16 num_jumbo_rxd;
1118	u16 max_rxd;
1119	u16 max_jumbo_rxd;
1120
1121	u8 max_rds_rings;
1122
1123	u8 max_sds_rings; /* max sds rings supported by adapter */
1124	u8 max_tx_rings;  /* max tx rings supported by adapter */
1125
1126	u8 drv_tx_rings;  /* max tx rings supported by driver */
1127	u8 drv_sds_rings; /* max sds rings supported by driver */
1128
1129	u8 drv_tss_rings; /* tss ring input */
1130	u8 drv_rss_rings; /* rss ring input */
1131
1132	u8 rx_csum;
1133	u8 portnum;
1134
1135	u8 fw_wait_cnt;
1136	u8 fw_fail_cnt;
1137	u8 tx_timeo_cnt;
1138	u8 need_fw_reset;
1139	u8 reset_ctx_cnt;
1140
1141	u16 is_up;
1142	u16 rx_pvid;
1143	u16 tx_pvid;
1144
1145	u32 irq;
1146	u32 heartbeat;
1147
1148	u8 dev_state;
1149	u8 reset_ack_timeo;
1150	u8 dev_init_timeo;
1151
1152	u8 mac_addr[ETH_ALEN];
1153
1154	u64 dev_rst_time;
1155	bool drv_mac_learn;
1156	bool fdb_mac_learn;
1157	bool rx_mac_learn;
1158	unsigned long vlans[BITS_TO_LONGS(VLAN_N_VID)];
1159	u8 flash_mfg_id;
1160	struct qlcnic_npar_info *npars;
1161	struct qlcnic_eswitch *eswitch;
1162	struct qlcnic_nic_template *nic_ops;
1163
1164	struct qlcnic_adapter_stats stats;
1165	struct list_head mac_list;
1166
1167	void __iomem	*tgt_mask_reg;
1168	void __iomem	*tgt_status_reg;
1169	void __iomem	*crb_int_state_reg;
1170	void __iomem	*isr_int_vec;
1171
1172	struct msix_entry *msix_entries;
1173	struct workqueue_struct *qlcnic_wq;
1174	struct delayed_work fw_work;
1175	struct delayed_work idc_aen_work;
1176	struct delayed_work mbx_poll_work;
1177	struct qlcnic_dcb *dcb;
1178
1179	struct qlcnic_filter_hash fhash;
1180	struct qlcnic_filter_hash rx_fhash;
1181	struct list_head vf_mc_list;
1182
1183	spinlock_t mac_learn_lock;
1184	/* spinlock for catching rcv filters for eswitch traffic */
1185	spinlock_t rx_mac_learn_lock;
1186	u32 file_prd_off;	/*File fw product offset*/
1187	u32 fw_version;
1188	u32 offload_flags;
1189	const struct firmware *fw;
1190};
1191
1192struct qlcnic_info_le {
1193	__le16	pci_func;
1194	__le16	op_mode;	/* 1 = Priv, 2 = NP, 3 = NP passthru */
1195	__le16	phys_port;
1196	__le16	switch_mode;	/* 0 = disabled, 1 = int, 2 = ext */
1197
1198	__le32	capabilities;
1199	u8	max_mac_filters;
1200	u8	reserved1;
1201	__le16	max_mtu;
1202
1203	__le16	max_tx_ques;
1204	__le16	max_rx_ques;
1205	__le16	min_tx_bw;
1206	__le16	max_tx_bw;
1207	__le32  op_type;
1208	__le16  max_bw_reg_offset;
1209	__le16  max_linkspeed_reg_offset;
1210	__le32  capability1;
1211	__le32  capability2;
1212	__le32  capability3;
1213	__le16  max_tx_mac_filters;
1214	__le16  max_rx_mcast_mac_filters;
1215	__le16  max_rx_ucast_mac_filters;
1216	__le16  max_rx_ip_addr;
1217	__le16  max_rx_lro_flow;
1218	__le16  max_rx_status_rings;
1219	__le16  max_rx_buf_rings;
1220	__le16  max_tx_vlan_keys;
1221	u8      total_pf;
1222	u8      total_rss_engines;
1223	__le16  max_vports;
1224	__le16	linkstate_reg_offset;
1225	__le16	bit_offsets;
1226	__le16  max_local_ipv6_addrs;
1227	__le16  max_remote_ipv6_addrs;
1228	u8	reserved2[56];
1229} __packed;
1230
1231struct qlcnic_info {
1232	u16	pci_func;
1233	u16	op_mode;
1234	u16	phys_port;
1235	u16	switch_mode;
1236	u32	capabilities;
1237	u8	max_mac_filters;
1238	u16	max_mtu;
1239	u16	max_tx_ques;
1240	u16	max_rx_ques;
1241	u16	min_tx_bw;
1242	u16	max_tx_bw;
1243	u32	op_type;
1244	u16	max_bw_reg_offset;
1245	u16	max_linkspeed_reg_offset;
1246	u32	capability1;
1247	u32	capability2;
1248	u32	capability3;
1249	u16	max_tx_mac_filters;
1250	u16	max_rx_mcast_mac_filters;
1251	u16	max_rx_ucast_mac_filters;
1252	u16	max_rx_ip_addr;
1253	u16	max_rx_lro_flow;
1254	u16	max_rx_status_rings;
1255	u16	max_rx_buf_rings;
1256	u16	max_tx_vlan_keys;
1257	u8      total_pf;
1258	u8      total_rss_engines;
1259	u16	max_vports;
1260	u16	linkstate_reg_offset;
1261	u16	bit_offsets;
1262	u16	max_local_ipv6_addrs;
1263	u16	max_remote_ipv6_addrs;
1264};
1265
1266struct qlcnic_pci_info_le {
1267	__le16	id;		/* pci function id */
1268	__le16	active;		/* 1 = Enabled */
1269	__le16	type;		/* 1 = NIC, 2 = FCoE, 3 = iSCSI */
1270	__le16	default_port;	/* default port number */
1271
1272	__le16	tx_min_bw;	/* Multiple of 100mbpc */
1273	__le16	tx_max_bw;
1274	__le16	reserved1[2];
1275
1276	u8	mac[ETH_ALEN];
1277	__le16  func_count;
1278	u8      reserved2[104];
1279
1280} __packed;
1281
1282struct qlcnic_pci_info {
1283	u16	id;
1284	u16	active;
1285	u16	type;
1286	u16	default_port;
1287	u16	tx_min_bw;
1288	u16	tx_max_bw;
1289	u8	mac[ETH_ALEN];
1290	u16  func_count;
1291};
1292
1293struct qlcnic_npar_info {
1294	bool	eswitch_status;
1295	u16	pvid;
1296	u16	min_bw;
1297	u16	max_bw;
1298	u8	phy_port;
1299	u8	type;
1300	u8	active;
1301	u8	enable_pm;
1302	u8	dest_npar;
1303	u8	discard_tagged;
1304	u8	mac_override;
1305	u8	mac_anti_spoof;
1306	u8	promisc_mode;
1307	u8	offload_flags;
1308	u8      pci_func;
1309	u8      mac[ETH_ALEN];
1310};
1311
1312struct qlcnic_eswitch {
1313	u8	port;
1314	u8	active_vports;
1315	u8	active_vlans;
1316	u8	active_ucast_filters;
1317	u8	max_ucast_filters;
1318	u8	max_active_vlans;
1319
1320	u32	flags;
1321#define QLCNIC_SWITCH_ENABLE		BIT_1
1322#define QLCNIC_SWITCH_VLAN_FILTERING	BIT_2
1323#define QLCNIC_SWITCH_PROMISC_MODE	BIT_3
1324#define QLCNIC_SWITCH_PORT_MIRRORING	BIT_4
1325};
1326
1327
1328#define MAX_BW			100	/* % of link speed */
1329#define MIN_BW			1	/* % of link speed */
1330#define MAX_VLAN_ID		4095
1331#define MIN_VLAN_ID		2
1332#define DEFAULT_MAC_LEARN	1
1333
1334#define IS_VALID_VLAN(vlan)	(vlan >= MIN_VLAN_ID && vlan < MAX_VLAN_ID)
1335#define IS_VALID_BW(bw)		(bw <= MAX_BW)
1336
1337struct qlcnic_pci_func_cfg {
1338	u16	func_type;
1339	u16	min_bw;
1340	u16	max_bw;
1341	u16	port_num;
1342	u8	pci_func;
1343	u8	func_state;
1344	u8	def_mac_addr[ETH_ALEN];
1345};
1346
1347struct qlcnic_npar_func_cfg {
1348	u32	fw_capab;
1349	u16	port_num;
1350	u16	min_bw;
1351	u16	max_bw;
1352	u16	max_tx_queues;
1353	u16	max_rx_queues;
1354	u8	pci_func;
1355	u8	op_mode;
1356};
1357
1358struct qlcnic_pm_func_cfg {
1359	u8	pci_func;
1360	u8	action;
1361	u8	dest_npar;
1362	u8	reserved[5];
1363};
1364
1365struct qlcnic_esw_func_cfg {
1366	u16	vlan_id;
1367	u8	op_mode;
1368	u8	op_type;
1369	u8	pci_func;
1370	u8	host_vlan_tag;
1371	u8	promisc_mode;
1372	u8	discard_tagged;
1373	u8	mac_override;
1374	u8	mac_anti_spoof;
1375	u8	offload_flags;
1376	u8	reserved[5];
1377};
1378
1379#define QLCNIC_STATS_VERSION		1
1380#define QLCNIC_STATS_PORT		1
1381#define QLCNIC_STATS_ESWITCH		2
1382#define QLCNIC_QUERY_RX_COUNTER		0
1383#define QLCNIC_QUERY_TX_COUNTER		1
1384#define QLCNIC_STATS_NOT_AVAIL	0xffffffffffffffffULL
1385#define QLCNIC_FILL_STATS(VAL1) \
1386	(((VAL1) == QLCNIC_STATS_NOT_AVAIL) ? 0 : VAL1)
1387#define QLCNIC_MAC_STATS 1
1388#define QLCNIC_ESW_STATS 2
1389
1390#define QLCNIC_ADD_ESW_STATS(VAL1, VAL2)\
1391do {	\
1392	if (((VAL1) == QLCNIC_STATS_NOT_AVAIL) && \
1393	    ((VAL2) != QLCNIC_STATS_NOT_AVAIL)) \
1394		(VAL1) = (VAL2); \
1395	else if (((VAL1) != QLCNIC_STATS_NOT_AVAIL) && \
1396		 ((VAL2) != QLCNIC_STATS_NOT_AVAIL)) \
1397			(VAL1) += (VAL2); \
1398} while (0)
1399
1400struct qlcnic_mac_statistics_le {
1401	__le64	mac_tx_frames;
1402	__le64	mac_tx_bytes;
1403	__le64	mac_tx_mcast_pkts;
1404	__le64	mac_tx_bcast_pkts;
1405	__le64	mac_tx_pause_cnt;
1406	__le64	mac_tx_ctrl_pkt;
1407	__le64	mac_tx_lt_64b_pkts;
1408	__le64	mac_tx_lt_127b_pkts;
1409	__le64	mac_tx_lt_255b_pkts;
1410	__le64	mac_tx_lt_511b_pkts;
1411	__le64	mac_tx_lt_1023b_pkts;
1412	__le64	mac_tx_lt_1518b_pkts;
1413	__le64	mac_tx_gt_1518b_pkts;
1414	__le64	rsvd1[3];
1415
1416	__le64	mac_rx_frames;
1417	__le64	mac_rx_bytes;
1418	__le64	mac_rx_mcast_pkts;
1419	__le64	mac_rx_bcast_pkts;
1420	__le64	mac_rx_pause_cnt;
1421	__le64	mac_rx_ctrl_pkt;
1422	__le64	mac_rx_lt_64b_pkts;
1423	__le64	mac_rx_lt_127b_pkts;
1424	__le64	mac_rx_lt_255b_pkts;
1425	__le64	mac_rx_lt_511b_pkts;
1426	__le64	mac_rx_lt_1023b_pkts;
1427	__le64	mac_rx_lt_1518b_pkts;
1428	__le64	mac_rx_gt_1518b_pkts;
1429	__le64	rsvd2[3];
1430
1431	__le64	mac_rx_length_error;
1432	__le64	mac_rx_length_small;
1433	__le64	mac_rx_length_large;
1434	__le64	mac_rx_jabber;
1435	__le64	mac_rx_dropped;
1436	__le64	mac_rx_crc_error;
1437	__le64	mac_align_error;
1438} __packed;
1439
1440struct qlcnic_mac_statistics {
1441	u64	mac_tx_frames;
1442	u64	mac_tx_bytes;
1443	u64	mac_tx_mcast_pkts;
1444	u64	mac_tx_bcast_pkts;
1445	u64	mac_tx_pause_cnt;
1446	u64	mac_tx_ctrl_pkt;
1447	u64	mac_tx_lt_64b_pkts;
1448	u64	mac_tx_lt_127b_pkts;
1449	u64	mac_tx_lt_255b_pkts;
1450	u64	mac_tx_lt_511b_pkts;
1451	u64	mac_tx_lt_1023b_pkts;
1452	u64	mac_tx_lt_1518b_pkts;
1453	u64	mac_tx_gt_1518b_pkts;
1454	u64	rsvd1[3];
1455	u64	mac_rx_frames;
1456	u64	mac_rx_bytes;
1457	u64	mac_rx_mcast_pkts;
1458	u64	mac_rx_bcast_pkts;
1459	u64	mac_rx_pause_cnt;
1460	u64	mac_rx_ctrl_pkt;
1461	u64	mac_rx_lt_64b_pkts;
1462	u64	mac_rx_lt_127b_pkts;
1463	u64	mac_rx_lt_255b_pkts;
1464	u64	mac_rx_lt_511b_pkts;
1465	u64	mac_rx_lt_1023b_pkts;
1466	u64	mac_rx_lt_1518b_pkts;
1467	u64	mac_rx_gt_1518b_pkts;
1468	u64	rsvd2[3];
1469	u64	mac_rx_length_error;
1470	u64	mac_rx_length_small;
1471	u64	mac_rx_length_large;
1472	u64	mac_rx_jabber;
1473	u64	mac_rx_dropped;
1474	u64	mac_rx_crc_error;
1475	u64	mac_align_error;
1476};
1477
1478struct qlcnic_esw_stats_le {
1479	__le16 context_id;
1480	__le16 version;
1481	__le16 size;
1482	__le16 unused;
1483	__le64 unicast_frames;
1484	__le64 multicast_frames;
1485	__le64 broadcast_frames;
1486	__le64 dropped_frames;
1487	__le64 errors;
1488	__le64 local_frames;
1489	__le64 numbytes;
1490	__le64 rsvd[3];
1491} __packed;
1492
1493struct __qlcnic_esw_statistics {
1494	u16	context_id;
1495	u16	version;
1496	u16	size;
1497	u16	unused;
1498	u64	unicast_frames;
1499	u64	multicast_frames;
1500	u64	broadcast_frames;
1501	u64	dropped_frames;
1502	u64	errors;
1503	u64	local_frames;
1504	u64	numbytes;
1505	u64	rsvd[3];
1506};
1507
1508struct qlcnic_esw_statistics {
1509	struct __qlcnic_esw_statistics rx;
1510	struct __qlcnic_esw_statistics tx;
1511};
1512
1513#define QLCNIC_FORCE_FW_DUMP_KEY	0xdeadfeed
1514#define QLCNIC_ENABLE_FW_DUMP		0xaddfeed
1515#define QLCNIC_DISABLE_FW_DUMP		0xbadfeed
1516#define QLCNIC_FORCE_FW_RESET		0xdeaddead
1517#define QLCNIC_SET_QUIESCENT		0xadd00010
1518#define QLCNIC_RESET_QUIESCENT		0xadd00020
1519
1520struct _cdrp_cmd {
1521	u32 num;
1522	u32 *arg;
1523};
1524
1525struct qlcnic_cmd_args {
1526	struct completion	completion;
1527	struct list_head	list;
1528	struct _cdrp_cmd	req;
1529	struct _cdrp_cmd	rsp;
1530	atomic_t		rsp_status;
1531	int			pay_size;
1532	u32			rsp_opcode;
1533	u32			total_cmds;
1534	u32			op_type;
1535	u32			type;
1536	u32			cmd_op;
1537	u32			*hdr;	/* Back channel message header */
1538	u32			*pay;	/* Back channel message payload */
1539	u8			func_num;
1540};
1541
1542int qlcnic_fw_cmd_get_minidump_temp(struct qlcnic_adapter *adapter);
1543int qlcnic_fw_cmd_set_port(struct qlcnic_adapter *adapter, u32 config);
1544int qlcnic_pci_mem_write_2M(struct qlcnic_adapter *, u64 off, u64 data);
1545int qlcnic_pci_mem_read_2M(struct qlcnic_adapter *, u64 off, u64 *data);
1546
1547#define ADDR_IN_RANGE(addr, low, high)	\
1548	(((addr) < (high)) && ((addr) >= (low)))
1549
1550#define QLCRD32(adapter, off, err) \
1551	(adapter->ahw->hw_ops->read_reg)(adapter, off, err)
1552
1553#define QLCWR32(adapter, off, val) \
1554	adapter->ahw->hw_ops->write_reg(adapter, off, val)
1555
1556int qlcnic_pcie_sem_lock(struct qlcnic_adapter *, int, u32);
1557void qlcnic_pcie_sem_unlock(struct qlcnic_adapter *, int);
1558
1559#define qlcnic_rom_lock(a)	\
1560	qlcnic_pcie_sem_lock((a), 2, QLCNIC_ROM_LOCK_ID)
1561#define qlcnic_rom_unlock(a)	\
1562	qlcnic_pcie_sem_unlock((a), 2)
1563#define qlcnic_phy_lock(a)	\
1564	qlcnic_pcie_sem_lock((a), 3, QLCNIC_PHY_LOCK_ID)
1565#define qlcnic_phy_unlock(a)	\
1566	qlcnic_pcie_sem_unlock((a), 3)
1567#define qlcnic_sw_lock(a)	\
1568	qlcnic_pcie_sem_lock((a), 6, 0)
1569#define qlcnic_sw_unlock(a)	\
1570	qlcnic_pcie_sem_unlock((a), 6)
1571#define crb_win_lock(a)	\
1572	qlcnic_pcie_sem_lock((a), 7, QLCNIC_CRB_WIN_LOCK_ID)
1573#define crb_win_unlock(a)	\
1574	qlcnic_pcie_sem_unlock((a), 7)
1575
1576#define __QLCNIC_MAX_LED_RATE	0xf
1577#define __QLCNIC_MAX_LED_STATE	0x2
1578
1579#define MAX_CTL_CHECK 1000
1580
1581void qlcnic_prune_lb_filters(struct qlcnic_adapter *adapter);
1582void qlcnic_delete_lb_filters(struct qlcnic_adapter *adapter);
1583int qlcnic_dump_fw(struct qlcnic_adapter *);
1584int qlcnic_enable_fw_dump_state(struct qlcnic_adapter *);
1585bool qlcnic_check_fw_dump_state(struct qlcnic_adapter *);
1586
1587/* Functions from qlcnic_init.c */
1588void qlcnic_schedule_work(struct qlcnic_adapter *, work_func_t, int);
1589int qlcnic_load_firmware(struct qlcnic_adapter *adapter);
1590int qlcnic_need_fw_reset(struct qlcnic_adapter *adapter);
1591void qlcnic_request_firmware(struct qlcnic_adapter *adapter);
1592void qlcnic_release_firmware(struct qlcnic_adapter *adapter);
1593int qlcnic_pinit_from_rom(struct qlcnic_adapter *adapter);
1594int qlcnic_setup_idc_param(struct qlcnic_adapter *adapter);
1595int qlcnic_check_flash_fw_ver(struct qlcnic_adapter *adapter);
1596
1597int qlcnic_rom_fast_read(struct qlcnic_adapter *adapter, u32 addr, u32 *valp);
1598int qlcnic_rom_fast_read_words(struct qlcnic_adapter *adapter, int addr,
1599				u8 *bytes, size_t size);
1600int qlcnic_alloc_sw_resources(struct qlcnic_adapter *adapter);
1601void qlcnic_free_sw_resources(struct qlcnic_adapter *adapter);
1602
1603void __iomem *qlcnic_get_ioaddr(struct qlcnic_hardware_context *, u32);
1604
1605int qlcnic_alloc_hw_resources(struct qlcnic_adapter *adapter);
1606void qlcnic_free_hw_resources(struct qlcnic_adapter *adapter);
1607
1608int qlcnic_fw_create_ctx(struct qlcnic_adapter *adapter);
1609void qlcnic_fw_destroy_ctx(struct qlcnic_adapter *adapter);
1610
1611void qlcnic_reset_rx_buffers_list(struct qlcnic_adapter *adapter);
1612void qlcnic_release_rx_buffers(struct qlcnic_adapter *adapter);
1613void qlcnic_release_tx_buffers(struct qlcnic_adapter *,
1614			       struct qlcnic_host_tx_ring *);
1615
1616int qlcnic_check_fw_status(struct qlcnic_adapter *adapter);
1617void qlcnic_watchdog_task(struct work_struct *work);
1618void qlcnic_post_rx_buffers(struct qlcnic_adapter *adapter,
1619		struct qlcnic_host_rds_ring *rds_ring, u8 ring_id);
1620void qlcnic_set_multi(struct net_device *netdev);
1621void qlcnic_flush_mcast_mac(struct qlcnic_adapter *);
1622int qlcnic_nic_add_mac(struct qlcnic_adapter *, const u8 *, u16,
1623		       enum qlcnic_mac_type);
1624int qlcnic_nic_del_mac(struct qlcnic_adapter *, const u8 *);
1625void qlcnic_82xx_free_mac_list(struct qlcnic_adapter *adapter);
1626int qlcnic_82xx_read_phys_port_id(struct qlcnic_adapter *);
1627
1628int qlcnic_fw_cmd_set_mtu(struct qlcnic_adapter *adapter, int mtu);
1629int qlcnic_fw_cmd_set_drv_version(struct qlcnic_adapter *, u32);
1630int qlcnic_change_mtu(struct net_device *netdev, int new_mtu);
1631netdev_features_t qlcnic_fix_features(struct net_device *netdev,
1632	netdev_features_t features);
1633int qlcnic_set_features(struct net_device *netdev, netdev_features_t features);
1634int qlcnic_config_bridged_mode(struct qlcnic_adapter *adapter, u32 enable);
1635void qlcnic_update_cmd_producer(struct qlcnic_host_tx_ring *);
1636
1637/* Functions from qlcnic_ethtool.c */
1638int qlcnic_check_loopback_buff(unsigned char *, u8 []);
1639int qlcnic_do_lb_test(struct qlcnic_adapter *, u8);
1640
1641/* Functions from qlcnic_main.c */
1642int qlcnic_reset_context(struct qlcnic_adapter *);
1643void qlcnic_diag_free_res(struct net_device *netdev, int);
1644int qlcnic_diag_alloc_res(struct net_device *netdev, int);
1645netdev_tx_t qlcnic_xmit_frame(struct sk_buff *, struct net_device *);
1646void qlcnic_set_tx_ring_count(struct qlcnic_adapter *, u8);
1647void qlcnic_set_sds_ring_count(struct qlcnic_adapter *, u8);
1648int qlcnic_setup_rings(struct qlcnic_adapter *);
1649int qlcnic_validate_rings(struct qlcnic_adapter *, __u32, int);
1650void qlcnic_alloc_lb_filters_mem(struct qlcnic_adapter *adapter);
1651int qlcnic_enable_msix(struct qlcnic_adapter *, u32);
1652void qlcnic_set_drv_version(struct qlcnic_adapter *);
1653
1654/*  eSwitch management functions */
1655int qlcnic_config_switch_port(struct qlcnic_adapter *,
1656				struct qlcnic_esw_func_cfg *);
1657
1658int qlcnic_get_eswitch_port_config(struct qlcnic_adapter *,
1659				struct qlcnic_esw_func_cfg *);
1660int qlcnic_config_port_mirroring(struct qlcnic_adapter *, u8, u8, u8);
1661int qlcnic_get_port_stats(struct qlcnic_adapter *, const u8, const u8,
1662					struct __qlcnic_esw_statistics *);
1663int qlcnic_get_eswitch_stats(struct qlcnic_adapter *, const u8, u8,
1664					struct __qlcnic_esw_statistics *);
1665int qlcnic_clear_esw_stats(struct qlcnic_adapter *adapter, u8, u8, u8);
1666int qlcnic_get_mac_stats(struct qlcnic_adapter *, struct qlcnic_mac_statistics *);
1667
1668void qlcnic_free_mbx_args(struct qlcnic_cmd_args *cmd);
1669
1670int qlcnic_alloc_sds_rings(struct qlcnic_recv_context *, int);
1671void qlcnic_free_sds_rings(struct qlcnic_recv_context *);
1672void qlcnic_advert_link_change(struct qlcnic_adapter *, int);
1673void qlcnic_free_tx_rings(struct qlcnic_adapter *);
1674int qlcnic_alloc_tx_rings(struct qlcnic_adapter *, struct net_device *);
1675void qlcnic_dump_mbx(struct qlcnic_adapter *, struct qlcnic_cmd_args *);
1676
1677void qlcnic_create_sysfs_entries(struct qlcnic_adapter *adapter);
1678void qlcnic_remove_sysfs_entries(struct qlcnic_adapter *adapter);
1679void qlcnic_82xx_add_sysfs(struct qlcnic_adapter *adapter);
1680void qlcnic_82xx_remove_sysfs(struct qlcnic_adapter *adapter);
1681
1682int qlcnicvf_config_bridged_mode(struct qlcnic_adapter *, u32);
1683int qlcnicvf_config_led(struct qlcnic_adapter *, u32, u32);
1684void qlcnic_set_vlan_config(struct qlcnic_adapter *,
1685			    struct qlcnic_esw_func_cfg *);
1686void qlcnic_set_eswitch_port_features(struct qlcnic_adapter *,
1687				      struct qlcnic_esw_func_cfg *);
1688int qlcnic_setup_tss_rss_intr(struct qlcnic_adapter  *);
1689void qlcnic_down(struct qlcnic_adapter *, struct net_device *);
1690int qlcnic_up(struct qlcnic_adapter *, struct net_device *);
1691void __qlcnic_down(struct qlcnic_adapter *, struct net_device *);
1692void qlcnic_detach(struct qlcnic_adapter *);
1693void qlcnic_teardown_intr(struct qlcnic_adapter *);
1694int qlcnic_attach(struct qlcnic_adapter *);
1695int __qlcnic_up(struct qlcnic_adapter *, struct net_device *);
1696void qlcnic_restore_indev_addr(struct net_device *, unsigned long);
1697
1698int qlcnic_check_temp(struct qlcnic_adapter *);
1699int qlcnic_init_pci_info(struct qlcnic_adapter *);
1700int qlcnic_set_default_offload_settings(struct qlcnic_adapter *);
1701int qlcnic_reset_npar_config(struct qlcnic_adapter *);
1702int qlcnic_set_eswitch_port_config(struct qlcnic_adapter *);
 
 
1703int qlcnic_83xx_configure_opmode(struct qlcnic_adapter *adapter);
1704int qlcnic_read_mac_addr(struct qlcnic_adapter *);
1705int qlcnic_setup_netdev(struct qlcnic_adapter *, struct net_device *, int);
1706void qlcnic_set_netdev_features(struct qlcnic_adapter *,
1707				struct qlcnic_esw_func_cfg *);
1708void qlcnic_sriov_vf_set_multi(struct net_device *);
1709int qlcnic_is_valid_nic_func(struct qlcnic_adapter *, u8);
1710int qlcnic_get_pci_func_type(struct qlcnic_adapter *, u16, u16 *, u16 *,
1711			     u16 *);
1712
1713/*
1714 * QLOGIC Board information
1715 */
1716
1717#define QLCNIC_MAX_BOARD_NAME_LEN 100
1718struct qlcnic_board_info {
1719	unsigned short  vendor;
1720	unsigned short  device;
1721	unsigned short  sub_vendor;
1722	unsigned short  sub_device;
1723	char short_name[QLCNIC_MAX_BOARD_NAME_LEN];
1724};
1725
1726static inline u32 qlcnic_tx_avail(struct qlcnic_host_tx_ring *tx_ring)
1727{
1728	if (likely(tx_ring->producer < tx_ring->sw_consumer))
1729		return tx_ring->sw_consumer - tx_ring->producer;
1730	else
1731		return tx_ring->sw_consumer + tx_ring->num_desc -
1732				tx_ring->producer;
1733}
1734
1735struct qlcnic_nic_template {
1736	int (*config_bridged_mode) (struct qlcnic_adapter *, u32);
1737	int (*config_led) (struct qlcnic_adapter *, u32, u32);
1738	int (*start_firmware) (struct qlcnic_adapter *);
1739	int (*init_driver) (struct qlcnic_adapter *);
1740	void (*request_reset) (struct qlcnic_adapter *, u32);
1741	void (*cancel_idc_work) (struct qlcnic_adapter *);
1742	int (*napi_add)(struct qlcnic_adapter *, struct net_device *);
1743	void (*napi_del)(struct qlcnic_adapter *);
1744	void (*config_ipaddr)(struct qlcnic_adapter *, __be32, int);
1745	irqreturn_t (*clear_legacy_intr)(struct qlcnic_adapter *);
1746	int (*shutdown)(struct pci_dev *);
1747	int (*resume)(struct qlcnic_adapter *);
1748};
1749
1750struct qlcnic_mbx_ops {
1751	int (*enqueue_cmd) (struct qlcnic_adapter *,
1752			    struct qlcnic_cmd_args *, unsigned long *);
1753	void (*dequeue_cmd) (struct qlcnic_adapter *, struct qlcnic_cmd_args *);
1754	void (*decode_resp) (struct qlcnic_adapter *, struct qlcnic_cmd_args *);
1755	void (*encode_cmd) (struct qlcnic_adapter *, struct qlcnic_cmd_args *);
1756	void (*nofity_fw) (struct qlcnic_adapter *, u8);
1757};
1758
1759int qlcnic_83xx_init_mailbox_work(struct qlcnic_adapter *);
1760void qlcnic_83xx_detach_mailbox_work(struct qlcnic_adapter *);
1761void qlcnic_83xx_reinit_mbx_work(struct qlcnic_mailbox *mbx);
1762void qlcnic_83xx_free_mailbox(struct qlcnic_mailbox *mbx);
1763void qlcnic_update_stats(struct qlcnic_adapter *);
1764
1765/* Adapter hardware abstraction */
1766struct qlcnic_hardware_ops {
1767	void (*read_crb) (struct qlcnic_adapter *, char *, loff_t, size_t);
1768	void (*write_crb) (struct qlcnic_adapter *, char *, loff_t, size_t);
1769	int (*read_reg) (struct qlcnic_adapter *, ulong, int *);
1770	int (*write_reg) (struct qlcnic_adapter *, ulong, u32);
1771	void (*get_ocm_win) (struct qlcnic_hardware_context *);
1772	int (*get_mac_address) (struct qlcnic_adapter *, u8 *, u8);
1773	int (*setup_intr) (struct qlcnic_adapter *);
1774	int (*alloc_mbx_args)(struct qlcnic_cmd_args *,
1775			      struct qlcnic_adapter *, u32);
1776	int (*mbx_cmd) (struct qlcnic_adapter *, struct qlcnic_cmd_args *);
1777	void (*get_func_no) (struct qlcnic_adapter *);
1778	int (*api_lock) (struct qlcnic_adapter *);
1779	void (*api_unlock) (struct qlcnic_adapter *);
1780	void (*add_sysfs) (struct qlcnic_adapter *);
1781	void (*remove_sysfs) (struct qlcnic_adapter *);
1782	void (*process_lb_rcv_ring_diag) (struct qlcnic_host_sds_ring *);
1783	int (*create_rx_ctx) (struct qlcnic_adapter *);
1784	int (*create_tx_ctx) (struct qlcnic_adapter *,
1785	struct qlcnic_host_tx_ring *, int);
1786	void (*del_rx_ctx) (struct qlcnic_adapter *);
1787	void (*del_tx_ctx) (struct qlcnic_adapter *,
1788			    struct qlcnic_host_tx_ring *);
1789	int (*setup_link_event) (struct qlcnic_adapter *, int);
1790	int (*get_nic_info) (struct qlcnic_adapter *, struct qlcnic_info *, u8);
1791	int (*get_pci_info) (struct qlcnic_adapter *, struct qlcnic_pci_info *);
1792	int (*set_nic_info) (struct qlcnic_adapter *, struct qlcnic_info *);
1793	int (*change_macvlan) (struct qlcnic_adapter *, u8*, u16, u8);
1794	void (*napi_enable) (struct qlcnic_adapter *);
1795	void (*napi_disable) (struct qlcnic_adapter *);
1796	int (*config_intr_coal) (struct qlcnic_adapter *,
1797				 struct ethtool_coalesce *);
1798	int (*config_rss) (struct qlcnic_adapter *, int);
1799	int (*config_hw_lro) (struct qlcnic_adapter *, int);
1800	int (*config_loopback) (struct qlcnic_adapter *, u8);
1801	int (*clear_loopback) (struct qlcnic_adapter *, u8);
1802	int (*config_promisc_mode) (struct qlcnic_adapter *, u32);
1803	void (*change_l2_filter) (struct qlcnic_adapter *, u64 *, u16);
 
1804	int (*get_board_info) (struct qlcnic_adapter *);
1805	void (*set_mac_filter_count) (struct qlcnic_adapter *);
1806	void (*free_mac_list) (struct qlcnic_adapter *);
1807	int (*read_phys_port_id) (struct qlcnic_adapter *);
1808	pci_ers_result_t (*io_error_detected) (struct pci_dev *,
1809					       pci_channel_state_t);
1810	pci_ers_result_t (*io_slot_reset) (struct pci_dev *);
1811	void (*io_resume) (struct pci_dev *);
1812	void (*get_beacon_state)(struct qlcnic_adapter *);
1813	void (*enable_sds_intr) (struct qlcnic_adapter *,
1814				 struct qlcnic_host_sds_ring *);
1815	void (*disable_sds_intr) (struct qlcnic_adapter *,
1816				  struct qlcnic_host_sds_ring *);
1817	void (*enable_tx_intr) (struct qlcnic_adapter *,
1818				struct qlcnic_host_tx_ring *);
1819	void (*disable_tx_intr) (struct qlcnic_adapter *,
1820				 struct qlcnic_host_tx_ring *);
1821	u32 (*get_saved_state)(void *, u32);
1822	void (*set_saved_state)(void *, u32, u32);
1823	void (*cache_tmpl_hdr_values)(struct qlcnic_fw_dump *);
1824	u32 (*get_cap_size)(void *, int);
1825	void (*set_sys_info)(void *, int, u32);
1826	void (*store_cap_mask)(void *, u32);
1827	bool (*encap_rx_offload) (struct qlcnic_adapter *adapter);
1828	bool (*encap_tx_offload) (struct qlcnic_adapter *adapter);
1829};
1830
1831extern struct qlcnic_nic_template qlcnic_vf_ops;
1832
1833static inline bool qlcnic_83xx_encap_tx_offload(struct qlcnic_adapter *adapter)
1834{
1835	return adapter->ahw->extra_capability[0] &
1836	       QLCNIC_83XX_FW_CAPAB_ENCAP_TX_OFFLOAD;
1837}
1838
1839static inline bool qlcnic_83xx_encap_rx_offload(struct qlcnic_adapter *adapter)
1840{
1841	return adapter->ahw->extra_capability[0] &
1842	       QLCNIC_83XX_FW_CAPAB_ENCAP_RX_OFFLOAD;
1843}
1844
1845static inline bool qlcnic_82xx_encap_tx_offload(struct qlcnic_adapter *adapter)
1846{
1847	return false;
1848}
1849
1850static inline bool qlcnic_82xx_encap_rx_offload(struct qlcnic_adapter *adapter)
1851{
1852        return false;
1853}
1854
1855static inline bool qlcnic_encap_rx_offload(struct qlcnic_adapter *adapter)
1856{
1857        return adapter->ahw->hw_ops->encap_rx_offload(adapter);
1858}
1859
1860static inline bool qlcnic_encap_tx_offload(struct qlcnic_adapter *adapter)
1861{
1862        return adapter->ahw->hw_ops->encap_tx_offload(adapter);
1863}
1864
1865static inline int qlcnic_start_firmware(struct qlcnic_adapter *adapter)
1866{
1867	return adapter->nic_ops->start_firmware(adapter);
1868}
1869
1870static inline void qlcnic_read_crb(struct qlcnic_adapter *adapter, char *buf,
1871				   loff_t offset, size_t size)
1872{
1873	adapter->ahw->hw_ops->read_crb(adapter, buf, offset, size);
1874}
1875
1876static inline void qlcnic_write_crb(struct qlcnic_adapter *adapter, char *buf,
1877				    loff_t offset, size_t size)
1878{
1879	adapter->ahw->hw_ops->write_crb(adapter, buf, offset, size);
1880}
1881
1882static inline int qlcnic_hw_write_wx_2M(struct qlcnic_adapter *adapter,
1883					ulong off, u32 data)
1884{
1885	return adapter->ahw->hw_ops->write_reg(adapter, off, data);
1886}
1887
1888static inline int qlcnic_get_mac_address(struct qlcnic_adapter *adapter,
1889					 u8 *mac, u8 function)
1890{
1891	return adapter->ahw->hw_ops->get_mac_address(adapter, mac, function);
1892}
1893
1894static inline int qlcnic_setup_intr(struct qlcnic_adapter *adapter)
1895{
1896	return adapter->ahw->hw_ops->setup_intr(adapter);
1897}
1898
1899static inline int qlcnic_alloc_mbx_args(struct qlcnic_cmd_args *mbx,
1900					struct qlcnic_adapter *adapter, u32 arg)
1901{
1902	return adapter->ahw->hw_ops->alloc_mbx_args(mbx, adapter, arg);
1903}
1904
1905static inline int qlcnic_issue_cmd(struct qlcnic_adapter *adapter,
1906				   struct qlcnic_cmd_args *cmd)
1907{
1908	if (adapter->ahw->hw_ops->mbx_cmd)
1909		return adapter->ahw->hw_ops->mbx_cmd(adapter, cmd);
1910
1911	return -EIO;
1912}
1913
1914static inline void qlcnic_get_func_no(struct qlcnic_adapter *adapter)
1915{
1916	adapter->ahw->hw_ops->get_func_no(adapter);
1917}
1918
1919static inline int qlcnic_api_lock(struct qlcnic_adapter *adapter)
1920{
1921	return adapter->ahw->hw_ops->api_lock(adapter);
1922}
1923
1924static inline void qlcnic_api_unlock(struct qlcnic_adapter *adapter)
1925{
1926	adapter->ahw->hw_ops->api_unlock(adapter);
1927}
1928
1929static inline void qlcnic_add_sysfs(struct qlcnic_adapter *adapter)
1930{
1931	if (adapter->ahw->hw_ops->add_sysfs)
1932		adapter->ahw->hw_ops->add_sysfs(adapter);
1933}
1934
1935static inline void qlcnic_remove_sysfs(struct qlcnic_adapter *adapter)
1936{
1937	if (adapter->ahw->hw_ops->remove_sysfs)
1938		adapter->ahw->hw_ops->remove_sysfs(adapter);
1939}
1940
1941static inline void
1942qlcnic_process_rcv_ring_diag(struct qlcnic_host_sds_ring *sds_ring)
1943{
1944	sds_ring->adapter->ahw->hw_ops->process_lb_rcv_ring_diag(sds_ring);
1945}
1946
1947static inline int qlcnic_fw_cmd_create_rx_ctx(struct qlcnic_adapter *adapter)
1948{
1949	return adapter->ahw->hw_ops->create_rx_ctx(adapter);
1950}
1951
1952static inline int qlcnic_fw_cmd_create_tx_ctx(struct qlcnic_adapter *adapter,
1953					      struct qlcnic_host_tx_ring *ptr,
1954					      int ring)
1955{
1956	return adapter->ahw->hw_ops->create_tx_ctx(adapter, ptr, ring);
1957}
1958
1959static inline void qlcnic_fw_cmd_del_rx_ctx(struct qlcnic_adapter *adapter)
1960{
1961	return adapter->ahw->hw_ops->del_rx_ctx(adapter);
1962}
1963
1964static inline void qlcnic_fw_cmd_del_tx_ctx(struct qlcnic_adapter *adapter,
1965					    struct qlcnic_host_tx_ring *ptr)
1966{
1967	return adapter->ahw->hw_ops->del_tx_ctx(adapter, ptr);
1968}
1969
1970static inline int qlcnic_linkevent_request(struct qlcnic_adapter *adapter,
1971					   int enable)
1972{
1973	return adapter->ahw->hw_ops->setup_link_event(adapter, enable);
1974}
1975
1976static inline int qlcnic_get_nic_info(struct qlcnic_adapter *adapter,
1977				      struct qlcnic_info *info, u8 id)
1978{
1979	return adapter->ahw->hw_ops->get_nic_info(adapter, info, id);
1980}
1981
1982static inline int qlcnic_get_pci_info(struct qlcnic_adapter *adapter,
1983				      struct qlcnic_pci_info *info)
1984{
1985	return adapter->ahw->hw_ops->get_pci_info(adapter, info);
1986}
1987
1988static inline int qlcnic_set_nic_info(struct qlcnic_adapter *adapter,
1989				      struct qlcnic_info *info)
1990{
1991	return adapter->ahw->hw_ops->set_nic_info(adapter, info);
1992}
1993
1994static inline int qlcnic_sre_macaddr_change(struct qlcnic_adapter *adapter,
1995					    u8 *addr, u16 id, u8 cmd)
1996{
1997	return adapter->ahw->hw_ops->change_macvlan(adapter, addr, id, cmd);
1998}
1999
2000static inline int qlcnic_napi_add(struct qlcnic_adapter *adapter,
2001				  struct net_device *netdev)
2002{
2003	return adapter->nic_ops->napi_add(adapter, netdev);
2004}
2005
2006static inline void qlcnic_napi_del(struct qlcnic_adapter *adapter)
2007{
2008	adapter->nic_ops->napi_del(adapter);
2009}
2010
2011static inline void qlcnic_napi_enable(struct qlcnic_adapter *adapter)
2012{
2013	adapter->ahw->hw_ops->napi_enable(adapter);
2014}
2015
2016static inline int __qlcnic_shutdown(struct pci_dev *pdev)
2017{
2018	struct qlcnic_adapter *adapter = pci_get_drvdata(pdev);
2019
2020	return adapter->nic_ops->shutdown(pdev);
2021}
2022
2023static inline int __qlcnic_resume(struct qlcnic_adapter *adapter)
2024{
2025	return adapter->nic_ops->resume(adapter);
2026}
2027
2028static inline void qlcnic_napi_disable(struct qlcnic_adapter *adapter)
2029{
2030	adapter->ahw->hw_ops->napi_disable(adapter);
2031}
2032
2033static inline int qlcnic_config_intr_coalesce(struct qlcnic_adapter *adapter,
2034					      struct ethtool_coalesce *ethcoal)
2035{
2036	return adapter->ahw->hw_ops->config_intr_coal(adapter, ethcoal);
2037}
2038
2039static inline int qlcnic_config_rss(struct qlcnic_adapter *adapter, int enable)
2040{
2041	return adapter->ahw->hw_ops->config_rss(adapter, enable);
2042}
2043
2044static inline int qlcnic_config_hw_lro(struct qlcnic_adapter *adapter,
2045				       int enable)
2046{
2047	return adapter->ahw->hw_ops->config_hw_lro(adapter, enable);
2048}
2049
2050static inline int qlcnic_set_lb_mode(struct qlcnic_adapter *adapter, u8 mode)
2051{
2052	return adapter->ahw->hw_ops->config_loopback(adapter, mode);
2053}
2054
2055static inline int qlcnic_clear_lb_mode(struct qlcnic_adapter *adapter, u8 mode)
2056{
2057	return adapter->ahw->hw_ops->clear_loopback(adapter, mode);
2058}
2059
2060static inline int qlcnic_nic_set_promisc(struct qlcnic_adapter *adapter,
2061					 u32 mode)
2062{
2063	return adapter->ahw->hw_ops->config_promisc_mode(adapter, mode);
2064}
2065
2066static inline void qlcnic_change_filter(struct qlcnic_adapter *adapter,
2067					u64 *addr, u16 id)
 
2068{
2069	adapter->ahw->hw_ops->change_l2_filter(adapter, addr, id);
2070}
2071
2072static inline int qlcnic_get_board_info(struct qlcnic_adapter *adapter)
2073{
2074	return adapter->ahw->hw_ops->get_board_info(adapter);
2075}
2076
2077static inline void qlcnic_free_mac_list(struct qlcnic_adapter *adapter)
2078{
2079	return adapter->ahw->hw_ops->free_mac_list(adapter);
2080}
2081
2082static inline void qlcnic_set_mac_filter_count(struct qlcnic_adapter *adapter)
2083{
2084	if (adapter->ahw->hw_ops->set_mac_filter_count)
2085		adapter->ahw->hw_ops->set_mac_filter_count(adapter);
2086}
2087
2088static inline void qlcnic_get_beacon_state(struct qlcnic_adapter *adapter)
2089{
2090	adapter->ahw->hw_ops->get_beacon_state(adapter);
2091}
2092
2093static inline void qlcnic_read_phys_port_id(struct qlcnic_adapter *adapter)
2094{
2095	if (adapter->ahw->hw_ops->read_phys_port_id)
2096		adapter->ahw->hw_ops->read_phys_port_id(adapter);
2097}
2098
2099static inline u32 qlcnic_get_saved_state(struct qlcnic_adapter *adapter,
2100					 void *t_hdr, u32 index)
2101{
2102	return adapter->ahw->hw_ops->get_saved_state(t_hdr, index);
2103}
2104
2105static inline void qlcnic_set_saved_state(struct qlcnic_adapter *adapter,
2106					  void *t_hdr, u32 index, u32 value)
2107{
2108	adapter->ahw->hw_ops->set_saved_state(t_hdr, index, value);
2109}
2110
2111static inline void qlcnic_cache_tmpl_hdr_values(struct qlcnic_adapter *adapter,
2112						struct qlcnic_fw_dump *fw_dump)
2113{
2114	adapter->ahw->hw_ops->cache_tmpl_hdr_values(fw_dump);
2115}
2116
2117static inline u32 qlcnic_get_cap_size(struct qlcnic_adapter *adapter,
2118				      void *tmpl_hdr, int index)
2119{
2120	return adapter->ahw->hw_ops->get_cap_size(tmpl_hdr, index);
2121}
2122
2123static inline void qlcnic_set_sys_info(struct qlcnic_adapter *adapter,
2124				       void *tmpl_hdr, int idx, u32 value)
2125{
2126	adapter->ahw->hw_ops->set_sys_info(tmpl_hdr, idx, value);
2127}
2128
2129static inline void qlcnic_store_cap_mask(struct qlcnic_adapter *adapter,
2130					 void *tmpl_hdr, u32 mask)
2131{
2132	adapter->ahw->hw_ops->store_cap_mask(tmpl_hdr, mask);
2133}
2134
2135static inline void qlcnic_dev_request_reset(struct qlcnic_adapter *adapter,
2136					    u32 key)
2137{
2138	if (adapter->nic_ops->request_reset)
2139		adapter->nic_ops->request_reset(adapter, key);
2140}
2141
2142static inline void qlcnic_cancel_idc_work(struct qlcnic_adapter *adapter)
2143{
2144	if (adapter->nic_ops->cancel_idc_work)
2145		adapter->nic_ops->cancel_idc_work(adapter);
2146}
2147
2148static inline irqreturn_t
2149qlcnic_clear_legacy_intr(struct qlcnic_adapter *adapter)
2150{
2151	return adapter->nic_ops->clear_legacy_intr(adapter);
2152}
2153
2154static inline int qlcnic_config_led(struct qlcnic_adapter *adapter, u32 state,
2155				    u32 rate)
2156{
2157	return adapter->nic_ops->config_led(adapter, state, rate);
2158}
2159
2160static inline void qlcnic_config_ipaddr(struct qlcnic_adapter *adapter,
2161					__be32 ip, int cmd)
2162{
2163	adapter->nic_ops->config_ipaddr(adapter, ip, cmd);
2164}
2165
2166static inline bool qlcnic_check_multi_tx(struct qlcnic_adapter *adapter)
2167{
2168	return test_bit(__QLCNIC_MULTI_TX_UNIQUE, &adapter->state);
2169}
2170
2171static inline void
2172qlcnic_82xx_enable_tx_intr(struct qlcnic_adapter *adapter,
2173			   struct qlcnic_host_tx_ring *tx_ring)
2174{
2175	if (qlcnic_check_multi_tx(adapter) &&
2176	    !adapter->ahw->diag_test)
2177		writel(0x0, tx_ring->crb_intr_mask);
2178}
2179
2180static inline void
2181qlcnic_82xx_disable_tx_intr(struct qlcnic_adapter *adapter,
2182			    struct qlcnic_host_tx_ring *tx_ring)
2183{
2184	if (qlcnic_check_multi_tx(adapter) &&
2185	    !adapter->ahw->diag_test)
2186		writel(1, tx_ring->crb_intr_mask);
2187}
2188
2189static inline void
2190qlcnic_83xx_enable_tx_intr(struct qlcnic_adapter *adapter,
2191			   struct qlcnic_host_tx_ring *tx_ring)
2192{
2193	writel(0, tx_ring->crb_intr_mask);
2194}
2195
2196static inline void
2197qlcnic_83xx_disable_tx_intr(struct qlcnic_adapter *adapter,
2198			    struct qlcnic_host_tx_ring *tx_ring)
2199{
2200	writel(1, tx_ring->crb_intr_mask);
2201}
2202
2203/* Enable MSI-x and INT-x interrupts */
2204static inline void
2205qlcnic_83xx_enable_sds_intr(struct qlcnic_adapter *adapter,
2206			    struct qlcnic_host_sds_ring *sds_ring)
2207{
2208	writel(0, sds_ring->crb_intr_mask);
2209}
2210
2211/* Disable MSI-x and INT-x interrupts */
2212static inline void
2213qlcnic_83xx_disable_sds_intr(struct qlcnic_adapter *adapter,
2214			     struct qlcnic_host_sds_ring *sds_ring)
2215{
2216	writel(1, sds_ring->crb_intr_mask);
2217}
2218
2219static inline void qlcnic_disable_multi_tx(struct qlcnic_adapter *adapter)
2220{
2221	test_and_clear_bit(__QLCNIC_MULTI_TX_UNIQUE, &adapter->state);
2222	adapter->drv_tx_rings = QLCNIC_SINGLE_RING;
2223}
2224
2225/* When operating in a muti tx mode, driver needs to write 0x1
2226 * to src register, instead of 0x0 to disable receiving interrupt.
2227 */
2228static inline void
2229qlcnic_82xx_disable_sds_intr(struct qlcnic_adapter *adapter,
2230			     struct qlcnic_host_sds_ring *sds_ring)
2231{
2232	if (qlcnic_check_multi_tx(adapter) &&
2233	    !adapter->ahw->diag_test &&
2234	    (adapter->flags & QLCNIC_MSIX_ENABLED))
2235		writel(0x1, sds_ring->crb_intr_mask);
2236	else
2237		writel(0, sds_ring->crb_intr_mask);
2238}
2239
2240static inline void qlcnic_enable_sds_intr(struct qlcnic_adapter *adapter,
2241					  struct qlcnic_host_sds_ring *sds_ring)
2242{
2243	if (adapter->ahw->hw_ops->enable_sds_intr)
2244		adapter->ahw->hw_ops->enable_sds_intr(adapter, sds_ring);
2245}
2246
2247static inline void
2248qlcnic_disable_sds_intr(struct qlcnic_adapter *adapter,
2249			struct qlcnic_host_sds_ring *sds_ring)
2250{
2251	if (adapter->ahw->hw_ops->disable_sds_intr)
2252		adapter->ahw->hw_ops->disable_sds_intr(adapter, sds_ring);
2253}
2254
2255static inline void qlcnic_enable_tx_intr(struct qlcnic_adapter *adapter,
2256					 struct qlcnic_host_tx_ring *tx_ring)
2257{
2258	if (adapter->ahw->hw_ops->enable_tx_intr)
2259		adapter->ahw->hw_ops->enable_tx_intr(adapter, tx_ring);
2260}
2261
2262static inline void qlcnic_disable_tx_intr(struct qlcnic_adapter *adapter,
2263					  struct qlcnic_host_tx_ring *tx_ring)
2264{
2265	if (adapter->ahw->hw_ops->disable_tx_intr)
2266		adapter->ahw->hw_ops->disable_tx_intr(adapter, tx_ring);
2267}
2268
2269/* When operating in a muti tx mode, driver needs to write 0x0
2270 * to src register, instead of 0x1 to enable receiving interrupts.
2271 */
2272static inline void
2273qlcnic_82xx_enable_sds_intr(struct qlcnic_adapter *adapter,
2274			    struct qlcnic_host_sds_ring *sds_ring)
2275{
2276	if (qlcnic_check_multi_tx(adapter) &&
2277	    !adapter->ahw->diag_test &&
2278	    (adapter->flags & QLCNIC_MSIX_ENABLED))
2279		writel(0, sds_ring->crb_intr_mask);
2280	else
2281		writel(0x1, sds_ring->crb_intr_mask);
2282
2283	if (!QLCNIC_IS_MSI_FAMILY(adapter))
2284		writel(0xfbff, adapter->tgt_mask_reg);
2285}
2286
2287static inline int qlcnic_get_diag_lock(struct qlcnic_adapter *adapter)
2288{
2289	return test_and_set_bit(__QLCNIC_DIAG_MODE, &adapter->state);
2290}
2291
2292static inline void qlcnic_release_diag_lock(struct qlcnic_adapter *adapter)
2293{
2294	clear_bit(__QLCNIC_DIAG_MODE, &adapter->state);
2295}
2296
2297static inline int qlcnic_check_diag_status(struct qlcnic_adapter *adapter)
2298{
2299	return test_bit(__QLCNIC_DIAG_MODE, &adapter->state);
2300}
2301
2302extern const struct ethtool_ops qlcnic_sriov_vf_ethtool_ops;
2303extern const struct ethtool_ops qlcnic_ethtool_ops;
2304extern const struct ethtool_ops qlcnic_ethtool_failed_ops;
2305
2306#define QLCDB(adapter, lvl, _fmt, _args...) do {	\
2307	if (NETIF_MSG_##lvl & adapter->ahw->msg_enable)	\
2308		printk(KERN_INFO "%s: %s: " _fmt,	\
2309			 dev_name(&adapter->pdev->dev),	\
2310			__func__, ##_args);		\
2311	} while (0)
2312
2313#define PCI_DEVICE_ID_QLOGIC_QLE824X		0x8020
2314#define PCI_DEVICE_ID_QLOGIC_QLE834X		0x8030
2315#define PCI_DEVICE_ID_QLOGIC_VF_QLE834X	0x8430
2316#define PCI_DEVICE_ID_QLOGIC_QLE8830		0x8830
2317#define PCI_DEVICE_ID_QLOGIC_VF_QLE8C30		0x8C30
2318#define PCI_DEVICE_ID_QLOGIC_QLE844X		0x8040
2319#define PCI_DEVICE_ID_QLOGIC_VF_QLE844X	0x8440
2320
2321static inline bool qlcnic_82xx_check(struct qlcnic_adapter *adapter)
2322{
2323	unsigned short device = adapter->pdev->device;
2324	return (device == PCI_DEVICE_ID_QLOGIC_QLE824X) ? true : false;
2325}
2326
2327static inline bool qlcnic_84xx_check(struct qlcnic_adapter *adapter)
2328{
2329	unsigned short device = adapter->pdev->device;
2330
2331	return ((device == PCI_DEVICE_ID_QLOGIC_QLE844X) ||
2332		(device == PCI_DEVICE_ID_QLOGIC_VF_QLE844X)) ? true : false;
2333}
2334
2335static inline bool qlcnic_83xx_check(struct qlcnic_adapter *adapter)
2336{
2337	unsigned short device = adapter->pdev->device;
2338	bool status;
2339
2340	status = ((device == PCI_DEVICE_ID_QLOGIC_QLE834X) ||
2341		  (device == PCI_DEVICE_ID_QLOGIC_QLE8830) ||
2342		  (device == PCI_DEVICE_ID_QLOGIC_QLE844X) ||
2343		  (device == PCI_DEVICE_ID_QLOGIC_VF_QLE844X) ||
2344		  (device == PCI_DEVICE_ID_QLOGIC_VF_QLE834X) ||
2345		  (device == PCI_DEVICE_ID_QLOGIC_VF_QLE8C30)) ? true : false;
2346
2347	return status;
2348}
2349
2350static inline bool qlcnic_sriov_pf_check(struct qlcnic_adapter *adapter)
2351{
2352	return (adapter->ahw->op_mode == QLCNIC_SRIOV_PF_FUNC) ? true : false;
2353}
2354
2355static inline bool qlcnic_sriov_vf_check(struct qlcnic_adapter *adapter)
2356{
2357	unsigned short device = adapter->pdev->device;
2358	bool status;
2359
2360	status = ((device == PCI_DEVICE_ID_QLOGIC_VF_QLE834X) ||
2361		  (device == PCI_DEVICE_ID_QLOGIC_VF_QLE844X) ||
2362		  (device == PCI_DEVICE_ID_QLOGIC_VF_QLE8C30)) ? true : false;
2363
2364	return status;
2365}
2366
2367static inline bool qlcnic_83xx_pf_check(struct qlcnic_adapter *adapter)
2368{
2369	unsigned short device = adapter->pdev->device;
2370
2371	return (device == PCI_DEVICE_ID_QLOGIC_QLE834X) ? true : false;
2372}
2373
2374static inline bool qlcnic_83xx_vf_check(struct qlcnic_adapter *adapter)
2375{
2376	unsigned short device = adapter->pdev->device;
2377
2378	return ((device == PCI_DEVICE_ID_QLOGIC_VF_QLE834X) ||
2379		(device == PCI_DEVICE_ID_QLOGIC_VF_QLE8C30)) ? true : false;
2380}
2381
2382static inline bool qlcnic_sriov_check(struct qlcnic_adapter *adapter)
2383{
2384	bool status;
2385
2386	status = (qlcnic_sriov_pf_check(adapter) ||
2387		  qlcnic_sriov_vf_check(adapter)) ? true : false;
2388
2389	return status;
2390}
2391
2392static inline u32 qlcnic_get_vnic_func_count(struct qlcnic_adapter *adapter)
2393{
2394	if (qlcnic_84xx_check(adapter))
2395		return QLC_84XX_VNIC_COUNT;
2396	else
2397		return QLC_DEFAULT_VNIC_COUNT;
2398}
2399
2400static inline void qlcnic_swap32_buffer(u32 *buffer, int count)
2401{
2402#if defined(__BIG_ENDIAN)
2403	u32 *tmp = buffer;
2404	int i;
2405
2406	for (i = 0; i < count; i++) {
2407		*tmp = swab32(*tmp);
2408		tmp++;
2409	}
2410#endif
2411}
2412
2413#ifdef CONFIG_QLCNIC_HWMON
2414void qlcnic_register_hwmon_dev(struct qlcnic_adapter *);
2415void qlcnic_unregister_hwmon_dev(struct qlcnic_adapter *);
2416#else
2417static inline void qlcnic_register_hwmon_dev(struct qlcnic_adapter *adapter)
2418{
2419	return;
2420}
2421static inline void qlcnic_unregister_hwmon_dev(struct qlcnic_adapter *adapter)
2422{
2423	return;
2424}
2425#endif
2426#endif				/* __QLCNIC_H_ */