ixgbe.h revision 762f4c57105853d1cbad3b96ef18aa23beff3db2
19a799d71034c4e2b168740c8a8530591011313d5Auke Kok/*******************************************************************************
29a799d71034c4e2b168740c8a8530591011313d5Auke Kok
39a799d71034c4e2b168740c8a8530591011313d5Auke Kok  Intel 10 Gigabit PCI Express Linux driver
49a799d71034c4e2b168740c8a8530591011313d5Auke Kok  Copyright(c) 1999 - 2007 Intel Corporation.
59a799d71034c4e2b168740c8a8530591011313d5Auke Kok
69a799d71034c4e2b168740c8a8530591011313d5Auke Kok  This program is free software; you can redistribute it and/or modify it
79a799d71034c4e2b168740c8a8530591011313d5Auke Kok  under the terms and conditions of the GNU General Public License,
89a799d71034c4e2b168740c8a8530591011313d5Auke Kok  version 2, as published by the Free Software Foundation.
99a799d71034c4e2b168740c8a8530591011313d5Auke Kok
109a799d71034c4e2b168740c8a8530591011313d5Auke Kok  This program is distributed in the hope it will be useful, but WITHOUT
119a799d71034c4e2b168740c8a8530591011313d5Auke Kok  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
129a799d71034c4e2b168740c8a8530591011313d5Auke Kok  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
139a799d71034c4e2b168740c8a8530591011313d5Auke Kok  more details.
149a799d71034c4e2b168740c8a8530591011313d5Auke Kok
159a799d71034c4e2b168740c8a8530591011313d5Auke Kok  You should have received a copy of the GNU General Public License along with
169a799d71034c4e2b168740c8a8530591011313d5Auke Kok  this program; if not, write to the Free Software Foundation, Inc.,
179a799d71034c4e2b168740c8a8530591011313d5Auke Kok  51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
189a799d71034c4e2b168740c8a8530591011313d5Auke Kok
199a799d71034c4e2b168740c8a8530591011313d5Auke Kok  The full GNU General Public License is included in this distribution in
209a799d71034c4e2b168740c8a8530591011313d5Auke Kok  the file called "COPYING".
219a799d71034c4e2b168740c8a8530591011313d5Auke Kok
229a799d71034c4e2b168740c8a8530591011313d5Auke Kok  Contact Information:
239a799d71034c4e2b168740c8a8530591011313d5Auke Kok  Linux NICS <linux.nics@intel.com>
249a799d71034c4e2b168740c8a8530591011313d5Auke Kok  e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
259a799d71034c4e2b168740c8a8530591011313d5Auke Kok  Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
269a799d71034c4e2b168740c8a8530591011313d5Auke Kok
279a799d71034c4e2b168740c8a8530591011313d5Auke Kok*******************************************************************************/
289a799d71034c4e2b168740c8a8530591011313d5Auke Kok
299a799d71034c4e2b168740c8a8530591011313d5Auke Kok#ifndef _IXGBE_H_
309a799d71034c4e2b168740c8a8530591011313d5Auke Kok#define _IXGBE_H_
319a799d71034c4e2b168740c8a8530591011313d5Auke Kok
329a799d71034c4e2b168740c8a8530591011313d5Auke Kok#include <linux/types.h>
339a799d71034c4e2b168740c8a8530591011313d5Auke Kok#include <linux/pci.h>
349a799d71034c4e2b168740c8a8530591011313d5Auke Kok#include <linux/netdevice.h>
35177db6ffd0599430a2ab63045e88fc4031f42420Mallikarjuna R Chilakala#include <linux/inet_lro.h>
369a799d71034c4e2b168740c8a8530591011313d5Auke Kok
379a799d71034c4e2b168740c8a8530591011313d5Auke Kok#include "ixgbe_type.h"
389a799d71034c4e2b168740c8a8530591011313d5Auke Kok#include "ixgbe_common.h"
399a799d71034c4e2b168740c8a8530591011313d5Auke Kok
4096b0e0f63b03153f7f2915f584083b4191b1932dJesse Brandeburg#if defined(CONFIG_DCA) || defined(CONFIG_DCA_MODULE)
41bd0362dde080cef377d99fa5beb5c25308c29c73Jeb Cramer#include <linux/dca.h>
42bd0362dde080cef377d99fa5beb5c25308c29c73Jeb Cramer#endif
439a799d71034c4e2b168740c8a8530591011313d5Auke Kok
449a799d71034c4e2b168740c8a8530591011313d5Auke Kok#define IXGBE_ERR(args...) printk(KERN_ERR "ixgbe: " args)
459a799d71034c4e2b168740c8a8530591011313d5Auke Kok
469a799d71034c4e2b168740c8a8530591011313d5Auke Kok#define PFX "ixgbe: "
479a799d71034c4e2b168740c8a8530591011313d5Auke Kok#define DPRINTK(nlevel, klevel, fmt, args...) \
489a799d71034c4e2b168740c8a8530591011313d5Auke Kok	((void)((NETIF_MSG_##nlevel & adapter->msg_enable) && \
499a799d71034c4e2b168740c8a8530591011313d5Auke Kok	printk(KERN_##klevel PFX "%s: %s: " fmt, adapter->netdev->name, \
509a799d71034c4e2b168740c8a8530591011313d5Auke Kok		__FUNCTION__ , ## args)))
519a799d71034c4e2b168740c8a8530591011313d5Auke Kok
529a799d71034c4e2b168740c8a8530591011313d5Auke Kok/* TX/RX descriptor defines */
539a799d71034c4e2b168740c8a8530591011313d5Auke Kok#define IXGBE_DEFAULT_TXD		   1024
549a799d71034c4e2b168740c8a8530591011313d5Auke Kok#define IXGBE_MAX_TXD			   4096
559a799d71034c4e2b168740c8a8530591011313d5Auke Kok#define IXGBE_MIN_TXD			     64
569a799d71034c4e2b168740c8a8530591011313d5Auke Kok
579a799d71034c4e2b168740c8a8530591011313d5Auke Kok#define IXGBE_DEFAULT_RXD		   1024
589a799d71034c4e2b168740c8a8530591011313d5Auke Kok#define IXGBE_MAX_RXD			   4096
599a799d71034c4e2b168740c8a8530591011313d5Auke Kok#define IXGBE_MIN_RXD			     64
609a799d71034c4e2b168740c8a8530591011313d5Auke Kok
619a799d71034c4e2b168740c8a8530591011313d5Auke Kok#define IXGBE_DEFAULT_RXQ			   1
629a799d71034c4e2b168740c8a8530591011313d5Auke Kok#define IXGBE_MAX_RXQ				   1
639a799d71034c4e2b168740c8a8530591011313d5Auke Kok#define IXGBE_MIN_RXQ				   1
649a799d71034c4e2b168740c8a8530591011313d5Auke Kok
659a799d71034c4e2b168740c8a8530591011313d5Auke Kok/* flow control */
669a799d71034c4e2b168740c8a8530591011313d5Auke Kok#define IXGBE_DEFAULT_FCRTL		0x10000
672b9ade935cd2be6db26f5445656950bc3da7055dJesse Brandeburg#define IXGBE_MIN_FCRTL			   0x40
689a799d71034c4e2b168740c8a8530591011313d5Auke Kok#define IXGBE_MAX_FCRTL			0x7FF80
699a799d71034c4e2b168740c8a8530591011313d5Auke Kok#define IXGBE_DEFAULT_FCRTH		0x20000
702b9ade935cd2be6db26f5445656950bc3da7055dJesse Brandeburg#define IXGBE_MIN_FCRTH			  0x600
719a799d71034c4e2b168740c8a8530591011313d5Auke Kok#define IXGBE_MAX_FCRTH			0x7FFF0
722b9ade935cd2be6db26f5445656950bc3da7055dJesse Brandeburg#define IXGBE_DEFAULT_FCPAUSE		 0xFFFF
739a799d71034c4e2b168740c8a8530591011313d5Auke Kok#define IXGBE_MIN_FCPAUSE		      0
749a799d71034c4e2b168740c8a8530591011313d5Auke Kok#define IXGBE_MAX_FCPAUSE		 0xFFFF
759a799d71034c4e2b168740c8a8530591011313d5Auke Kok
769a799d71034c4e2b168740c8a8530591011313d5Auke Kok/* Supported Rx Buffer Sizes */
779a799d71034c4e2b168740c8a8530591011313d5Auke Kok#define IXGBE_RXBUFFER_64    64     /* Used for packet split */
789a799d71034c4e2b168740c8a8530591011313d5Auke Kok#define IXGBE_RXBUFFER_128   128    /* Used for packet split */
799a799d71034c4e2b168740c8a8530591011313d5Auke Kok#define IXGBE_RXBUFFER_256   256    /* Used for packet split */
809a799d71034c4e2b168740c8a8530591011313d5Auke Kok#define IXGBE_RXBUFFER_2048  2048
819a799d71034c4e2b168740c8a8530591011313d5Auke Kok
829a799d71034c4e2b168740c8a8530591011313d5Auke Kok#define IXGBE_RX_HDR_SIZE IXGBE_RXBUFFER_256
839a799d71034c4e2b168740c8a8530591011313d5Auke Kok
849a799d71034c4e2b168740c8a8530591011313d5Auke Kok#define MAXIMUM_ETHERNET_VLAN_SIZE (ETH_FRAME_LEN + ETH_FCS_LEN + VLAN_HLEN)
859a799d71034c4e2b168740c8a8530591011313d5Auke Kok
869a799d71034c4e2b168740c8a8530591011313d5Auke Kok/* How many Tx Descriptors do we need to call netif_wake_queue? */
879a799d71034c4e2b168740c8a8530591011313d5Auke Kok#define IXGBE_TX_QUEUE_WAKE 16
889a799d71034c4e2b168740c8a8530591011313d5Auke Kok
899a799d71034c4e2b168740c8a8530591011313d5Auke Kok/* How many Rx Buffers do we bundle into one write to the hardware ? */
909a799d71034c4e2b168740c8a8530591011313d5Auke Kok#define IXGBE_RX_BUFFER_WRITE	16	/* Must be power of 2 */
919a799d71034c4e2b168740c8a8530591011313d5Auke Kok
929a799d71034c4e2b168740c8a8530591011313d5Auke Kok#define IXGBE_TX_FLAGS_CSUM		(u32)(1)
939a799d71034c4e2b168740c8a8530591011313d5Auke Kok#define IXGBE_TX_FLAGS_VLAN		(u32)(1 << 1)
949a799d71034c4e2b168740c8a8530591011313d5Auke Kok#define IXGBE_TX_FLAGS_TSO		(u32)(1 << 2)
959a799d71034c4e2b168740c8a8530591011313d5Auke Kok#define IXGBE_TX_FLAGS_IPV4		(u32)(1 << 3)
969a799d71034c4e2b168740c8a8530591011313d5Auke Kok#define IXGBE_TX_FLAGS_VLAN_MASK	0xffff0000
979a799d71034c4e2b168740c8a8530591011313d5Auke Kok#define IXGBE_TX_FLAGS_VLAN_SHIFT	16
989a799d71034c4e2b168740c8a8530591011313d5Auke Kok
99177db6ffd0599430a2ab63045e88fc4031f42420Mallikarjuna R Chilakala#define IXGBE_MAX_LRO_DESCRIPTORS       8
100177db6ffd0599430a2ab63045e88fc4031f42420Mallikarjuna R Chilakala#define IXGBE_MAX_LRO_AGGREGATE         32
101177db6ffd0599430a2ab63045e88fc4031f42420Mallikarjuna R Chilakala
1029a799d71034c4e2b168740c8a8530591011313d5Auke Kok/* wrapper around a pointer to a socket buffer,
1039a799d71034c4e2b168740c8a8530591011313d5Auke Kok * so a DMA handle can be stored along with the buffer */
1049a799d71034c4e2b168740c8a8530591011313d5Auke Kokstruct ixgbe_tx_buffer {
1059a799d71034c4e2b168740c8a8530591011313d5Auke Kok	struct sk_buff *skb;
1069a799d71034c4e2b168740c8a8530591011313d5Auke Kok	dma_addr_t dma;
1079a799d71034c4e2b168740c8a8530591011313d5Auke Kok	unsigned long time_stamp;
1089a799d71034c4e2b168740c8a8530591011313d5Auke Kok	u16 length;
1099a799d71034c4e2b168740c8a8530591011313d5Auke Kok	u16 next_to_watch;
1109a799d71034c4e2b168740c8a8530591011313d5Auke Kok};
1119a799d71034c4e2b168740c8a8530591011313d5Auke Kok
1129a799d71034c4e2b168740c8a8530591011313d5Auke Kokstruct ixgbe_rx_buffer {
1139a799d71034c4e2b168740c8a8530591011313d5Auke Kok	struct sk_buff *skb;
1149a799d71034c4e2b168740c8a8530591011313d5Auke Kok	dma_addr_t dma;
1159a799d71034c4e2b168740c8a8530591011313d5Auke Kok	struct page *page;
1169a799d71034c4e2b168740c8a8530591011313d5Auke Kok	dma_addr_t page_dma;
117762f4c57105853d1cbad3b96ef18aa23beff3db2Jesse Brandeburg	unsigned int page_offset;
1189a799d71034c4e2b168740c8a8530591011313d5Auke Kok};
1199a799d71034c4e2b168740c8a8530591011313d5Auke Kok
1209a799d71034c4e2b168740c8a8530591011313d5Auke Kokstruct ixgbe_queue_stats {
1219a799d71034c4e2b168740c8a8530591011313d5Auke Kok	u64 packets;
1229a799d71034c4e2b168740c8a8530591011313d5Auke Kok	u64 bytes;
1239a799d71034c4e2b168740c8a8530591011313d5Auke Kok};
1249a799d71034c4e2b168740c8a8530591011313d5Auke Kok
1259a799d71034c4e2b168740c8a8530591011313d5Auke Kokstruct ixgbe_ring {
1269a799d71034c4e2b168740c8a8530591011313d5Auke Kok	void *desc;			/* descriptor ring memory */
1279a799d71034c4e2b168740c8a8530591011313d5Auke Kok	dma_addr_t dma;			/* phys. address of descriptor ring */
1289a799d71034c4e2b168740c8a8530591011313d5Auke Kok	unsigned int size;		/* length in bytes */
1299a799d71034c4e2b168740c8a8530591011313d5Auke Kok	unsigned int count;		/* amount of descriptors */
1309a799d71034c4e2b168740c8a8530591011313d5Auke Kok	unsigned int next_to_use;
1319a799d71034c4e2b168740c8a8530591011313d5Auke Kok	unsigned int next_to_clean;
1329a799d71034c4e2b168740c8a8530591011313d5Auke Kok
133021230d40ae0e6508d6c717b6e0d6d81cd77ac25Ayyappan Veeraiyan	int queue_index; /* needed for multiqueue queue management */
1349a799d71034c4e2b168740c8a8530591011313d5Auke Kok	union {
1359a799d71034c4e2b168740c8a8530591011313d5Auke Kok		struct ixgbe_tx_buffer *tx_buffer_info;
1369a799d71034c4e2b168740c8a8530591011313d5Auke Kok		struct ixgbe_rx_buffer *rx_buffer_info;
1379a799d71034c4e2b168740c8a8530591011313d5Auke Kok	};
1389a799d71034c4e2b168740c8a8530591011313d5Auke Kok
1399a799d71034c4e2b168740c8a8530591011313d5Auke Kok	u16 head;
1409a799d71034c4e2b168740c8a8530591011313d5Auke Kok	u16 tail;
1419a799d71034c4e2b168740c8a8530591011313d5Auke Kok
142f494e8faa77bd4147324f7666441e0b780e7db94Ayyappan Veeraiyan	unsigned int total_bytes;
143f494e8faa77bd4147324f7666441e0b780e7db94Ayyappan Veeraiyan	unsigned int total_packets;
1449a799d71034c4e2b168740c8a8530591011313d5Auke Kok
145021230d40ae0e6508d6c717b6e0d6d81cd77ac25Ayyappan Veeraiyan	u16 reg_idx; /* holds the special value that gets the hardware register
146021230d40ae0e6508d6c717b6e0d6d81cd77ac25Ayyappan Veeraiyan		      * offset associated with this ring, which is different
147021230d40ae0e6508d6c717b6e0d6d81cd77ac25Ayyappan Veeraiyan		      * for DCE and RSS modes */
148bd0362dde080cef377d99fa5beb5c25308c29c73Jeb Cramer
14996b0e0f63b03153f7f2915f584083b4191b1932dJesse Brandeburg#if defined(CONFIG_DCA) || defined(CONFIG_DCA_MODULE)
150bd0362dde080cef377d99fa5beb5c25308c29c73Jeb Cramer	/* cpu for tx queue */
151bd0362dde080cef377d99fa5beb5c25308c29c73Jeb Cramer	int cpu;
152bd0362dde080cef377d99fa5beb5c25308c29c73Jeb Cramer#endif
153177db6ffd0599430a2ab63045e88fc4031f42420Mallikarjuna R Chilakala	struct net_lro_mgr lro_mgr;
154177db6ffd0599430a2ab63045e88fc4031f42420Mallikarjuna R Chilakala	bool lro_used;
1559a799d71034c4e2b168740c8a8530591011313d5Auke Kok	struct ixgbe_queue_stats stats;
156ff819cfb5d95c4945811f5e33aa57274885c7527Jesse Brandeburg	u16 v_idx; /* maps directly to the index for this ring in the hardware
157ff819cfb5d95c4945811f5e33aa57274885c7527Jesse Brandeburg	           * vector array, can also be used for finding the bit in EICR
158ff819cfb5d95c4945811f5e33aa57274885c7527Jesse Brandeburg	           * and friends that represents the vector for this ring */
1599a799d71034c4e2b168740c8a8530591011313d5Auke Kok
1609a799d71034c4e2b168740c8a8530591011313d5Auke Kok
1619a799d71034c4e2b168740c8a8530591011313d5Auke Kok	u16 work_limit;                /* max work per interrupt */
1627c6e0a436d971641d37cebcb12e8cc0c4419b5d4Jesse Brandeburg	u16 rx_buf_len;
1639a799d71034c4e2b168740c8a8530591011313d5Auke Kok};
1649a799d71034c4e2b168740c8a8530591011313d5Auke Kok
165021230d40ae0e6508d6c717b6e0d6d81cd77ac25Ayyappan Veeraiyan#define RING_F_VMDQ 1
166021230d40ae0e6508d6c717b6e0d6d81cd77ac25Ayyappan Veeraiyan#define RING_F_RSS  2
167021230d40ae0e6508d6c717b6e0d6d81cd77ac25Ayyappan Veeraiyan#define IXGBE_MAX_RSS_INDICES  16
168021230d40ae0e6508d6c717b6e0d6d81cd77ac25Ayyappan Veeraiyan#define IXGBE_MAX_VMDQ_INDICES 16
169021230d40ae0e6508d6c717b6e0d6d81cd77ac25Ayyappan Veeraiyanstruct ixgbe_ring_feature {
170021230d40ae0e6508d6c717b6e0d6d81cd77ac25Ayyappan Veeraiyan	int indices;
171021230d40ae0e6508d6c717b6e0d6d81cd77ac25Ayyappan Veeraiyan	int mask;
172021230d40ae0e6508d6c717b6e0d6d81cd77ac25Ayyappan Veeraiyan};
173021230d40ae0e6508d6c717b6e0d6d81cd77ac25Ayyappan Veeraiyan
174021230d40ae0e6508d6c717b6e0d6d81cd77ac25Ayyappan Veeraiyan#define MAX_RX_QUEUES 64
175021230d40ae0e6508d6c717b6e0d6d81cd77ac25Ayyappan Veeraiyan#define MAX_TX_QUEUES 32
176021230d40ae0e6508d6c717b6e0d6d81cd77ac25Ayyappan Veeraiyan
177021230d40ae0e6508d6c717b6e0d6d81cd77ac25Ayyappan Veeraiyan/* MAX_MSIX_Q_VECTORS of these are allocated,
178021230d40ae0e6508d6c717b6e0d6d81cd77ac25Ayyappan Veeraiyan * but we only use one per queue-specific vector.
179021230d40ae0e6508d6c717b6e0d6d81cd77ac25Ayyappan Veeraiyan */
180021230d40ae0e6508d6c717b6e0d6d81cd77ac25Ayyappan Veeraiyanstruct ixgbe_q_vector {
181021230d40ae0e6508d6c717b6e0d6d81cd77ac25Ayyappan Veeraiyan	struct ixgbe_adapter *adapter;
182021230d40ae0e6508d6c717b6e0d6d81cd77ac25Ayyappan Veeraiyan	struct napi_struct napi;
183021230d40ae0e6508d6c717b6e0d6d81cd77ac25Ayyappan Veeraiyan	DECLARE_BITMAP(rxr_idx, MAX_RX_QUEUES); /* Rx ring indices */
184021230d40ae0e6508d6c717b6e0d6d81cd77ac25Ayyappan Veeraiyan	DECLARE_BITMAP(txr_idx, MAX_TX_QUEUES); /* Tx ring indices */
185021230d40ae0e6508d6c717b6e0d6d81cd77ac25Ayyappan Veeraiyan	u8 rxr_count;     /* Rx ring count assigned to this vector */
186021230d40ae0e6508d6c717b6e0d6d81cd77ac25Ayyappan Veeraiyan	u8 txr_count;     /* Tx ring count assigned to this vector */
18730efa5a363d18f1c284455879cb67fb1bf547bdcJesse Brandeburg	u8 tx_itr;
18830efa5a363d18f1c284455879cb67fb1bf547bdcJesse Brandeburg	u8 rx_itr;
189021230d40ae0e6508d6c717b6e0d6d81cd77ac25Ayyappan Veeraiyan	u32 eitr;
190021230d40ae0e6508d6c717b6e0d6d81cd77ac25Ayyappan Veeraiyan};
191021230d40ae0e6508d6c717b6e0d6d81cd77ac25Ayyappan Veeraiyan
1929a799d71034c4e2b168740c8a8530591011313d5Auke Kok/* Helper macros to switch between ints/sec and what the register uses.
1939a799d71034c4e2b168740c8a8530591011313d5Auke Kok * And yes, it's the same math going both ways.
1949a799d71034c4e2b168740c8a8530591011313d5Auke Kok */
1959a799d71034c4e2b168740c8a8530591011313d5Auke Kok#define EITR_INTS_PER_SEC_TO_REG(_eitr) \
1969a799d71034c4e2b168740c8a8530591011313d5Auke Kok	((_eitr) ? (1000000000 / ((_eitr) * 256)) : 0)
1979a799d71034c4e2b168740c8a8530591011313d5Auke Kok#define EITR_REG_TO_INTS_PER_SEC EITR_INTS_PER_SEC_TO_REG
1989a799d71034c4e2b168740c8a8530591011313d5Auke Kok
1999a799d71034c4e2b168740c8a8530591011313d5Auke Kok#define IXGBE_DESC_UNUSED(R) \
2009a799d71034c4e2b168740c8a8530591011313d5Auke Kok	((((R)->next_to_clean > (R)->next_to_use) ? 0 : (R)->count) + \
2019a799d71034c4e2b168740c8a8530591011313d5Auke Kok	(R)->next_to_clean - (R)->next_to_use - 1)
2029a799d71034c4e2b168740c8a8530591011313d5Auke Kok
2039a799d71034c4e2b168740c8a8530591011313d5Auke Kok#define IXGBE_RX_DESC_ADV(R, i)	    \
2049a799d71034c4e2b168740c8a8530591011313d5Auke Kok	(&(((union ixgbe_adv_rx_desc *)((R).desc))[i]))
2059a799d71034c4e2b168740c8a8530591011313d5Auke Kok#define IXGBE_TX_DESC_ADV(R, i)	    \
2069a799d71034c4e2b168740c8a8530591011313d5Auke Kok	(&(((union ixgbe_adv_tx_desc *)((R).desc))[i]))
2079a799d71034c4e2b168740c8a8530591011313d5Auke Kok#define IXGBE_TX_CTXTDESC_ADV(R, i)	    \
2089a799d71034c4e2b168740c8a8530591011313d5Auke Kok	(&(((struct ixgbe_adv_tx_context_desc *)((R).desc))[i]))
2099a799d71034c4e2b168740c8a8530591011313d5Auke Kok
2109a799d71034c4e2b168740c8a8530591011313d5Auke Kok#define IXGBE_MAX_JUMBO_FRAME_SIZE        16128
2119a799d71034c4e2b168740c8a8530591011313d5Auke Kok
212021230d40ae0e6508d6c717b6e0d6d81cd77ac25Ayyappan Veeraiyan#define OTHER_VECTOR 1
213021230d40ae0e6508d6c717b6e0d6d81cd77ac25Ayyappan Veeraiyan#define NON_Q_VECTORS (OTHER_VECTOR)
214021230d40ae0e6508d6c717b6e0d6d81cd77ac25Ayyappan Veeraiyan
215021230d40ae0e6508d6c717b6e0d6d81cd77ac25Ayyappan Veeraiyan#define MAX_MSIX_Q_VECTORS 16
216021230d40ae0e6508d6c717b6e0d6d81cd77ac25Ayyappan Veeraiyan#define MIN_MSIX_Q_VECTORS 2
217021230d40ae0e6508d6c717b6e0d6d81cd77ac25Ayyappan Veeraiyan#define MAX_MSIX_COUNT (MAX_MSIX_Q_VECTORS + NON_Q_VECTORS)
218021230d40ae0e6508d6c717b6e0d6d81cd77ac25Ayyappan Veeraiyan#define MIN_MSIX_COUNT (MIN_MSIX_Q_VECTORS + NON_Q_VECTORS)
219021230d40ae0e6508d6c717b6e0d6d81cd77ac25Ayyappan Veeraiyan
2209a799d71034c4e2b168740c8a8530591011313d5Auke Kok/* board specific private data structure */
2219a799d71034c4e2b168740c8a8530591011313d5Auke Kokstruct ixgbe_adapter {
2229a799d71034c4e2b168740c8a8530591011313d5Auke Kok	struct timer_list watchdog_timer;
2239a799d71034c4e2b168740c8a8530591011313d5Auke Kok	struct vlan_group *vlgrp;
2249a799d71034c4e2b168740c8a8530591011313d5Auke Kok	u16 bd_number;
2259a799d71034c4e2b168740c8a8530591011313d5Auke Kok	struct work_struct reset_task;
226021230d40ae0e6508d6c717b6e0d6d81cd77ac25Ayyappan Veeraiyan	struct ixgbe_q_vector q_vector[MAX_MSIX_Q_VECTORS];
227021230d40ae0e6508d6c717b6e0d6d81cd77ac25Ayyappan Veeraiyan	char name[MAX_MSIX_COUNT][IFNAMSIZ + 5];
2289a799d71034c4e2b168740c8a8530591011313d5Auke Kok
229f494e8faa77bd4147324f7666441e0b780e7db94Ayyappan Veeraiyan	/* Interrupt Throttle Rate */
230f494e8faa77bd4147324f7666441e0b780e7db94Ayyappan Veeraiyan	u32 itr_setting;
231f494e8faa77bd4147324f7666441e0b780e7db94Ayyappan Veeraiyan	u16 eitr_low;
232f494e8faa77bd4147324f7666441e0b780e7db94Ayyappan Veeraiyan	u16 eitr_high;
233f494e8faa77bd4147324f7666441e0b780e7db94Ayyappan Veeraiyan
2349a799d71034c4e2b168740c8a8530591011313d5Auke Kok	/* TX */
2359a799d71034c4e2b168740c8a8530591011313d5Auke Kok	struct ixgbe_ring *tx_ring;	/* One per active queue */
23630efa5a363d18f1c284455879cb67fb1bf547bdcJesse Brandeburg	int num_tx_queues;
2379a799d71034c4e2b168740c8a8530591011313d5Auke Kok	u64 restart_queue;
23830efa5a363d18f1c284455879cb67fb1bf547bdcJesse Brandeburg	u64 hw_csum_tx_good;
2399a799d71034c4e2b168740c8a8530591011313d5Auke Kok	u64 lsc_int;
2409a799d71034c4e2b168740c8a8530591011313d5Auke Kok	u64 hw_tso_ctxt;
2419a799d71034c4e2b168740c8a8530591011313d5Auke Kok	u64 hw_tso6_ctxt;
2429a799d71034c4e2b168740c8a8530591011313d5Auke Kok	u32 tx_timeout_count;
2439a799d71034c4e2b168740c8a8530591011313d5Auke Kok	bool detect_tx_hung;
2449a799d71034c4e2b168740c8a8530591011313d5Auke Kok
2459a799d71034c4e2b168740c8a8530591011313d5Auke Kok	/* RX */
2469a799d71034c4e2b168740c8a8530591011313d5Auke Kok	struct ixgbe_ring *rx_ring;	/* One per active queue */
24730efa5a363d18f1c284455879cb67fb1bf547bdcJesse Brandeburg	int num_rx_queues;
2489a799d71034c4e2b168740c8a8530591011313d5Auke Kok	u64 hw_csum_rx_error;
2499a799d71034c4e2b168740c8a8530591011313d5Auke Kok	u64 hw_csum_rx_good;
2509a799d71034c4e2b168740c8a8530591011313d5Auke Kok	u64 non_eop_descs;
251021230d40ae0e6508d6c717b6e0d6d81cd77ac25Ayyappan Veeraiyan	int num_msix_vectors;
252021230d40ae0e6508d6c717b6e0d6d81cd77ac25Ayyappan Veeraiyan	struct ixgbe_ring_feature ring_feature[3];
2539a799d71034c4e2b168740c8a8530591011313d5Auke Kok	struct msix_entry *msix_entries;
2549a799d71034c4e2b168740c8a8530591011313d5Auke Kok
2559a799d71034c4e2b168740c8a8530591011313d5Auke Kok	u64 rx_hdr_split;
2569a799d71034c4e2b168740c8a8530591011313d5Auke Kok	u32 alloc_rx_page_failed;
2579a799d71034c4e2b168740c8a8530591011313d5Auke Kok	u32 alloc_rx_buff_failed;
2589a799d71034c4e2b168740c8a8530591011313d5Auke Kok
259021230d40ae0e6508d6c717b6e0d6d81cd77ac25Ayyappan Veeraiyan	/* Some features need tri-state capability,
260021230d40ae0e6508d6c717b6e0d6d81cd77ac25Ayyappan Veeraiyan	 * thus the additional *_CAPABLE flags.
261021230d40ae0e6508d6c717b6e0d6d81cd77ac25Ayyappan Veeraiyan	 */
2629a799d71034c4e2b168740c8a8530591011313d5Auke Kok	u32 flags;
26396b0e0f63b03153f7f2915f584083b4191b1932dJesse Brandeburg#define IXGBE_FLAG_RX_CSUM_ENABLED              (u32)(1)
26496b0e0f63b03153f7f2915f584083b4191b1932dJesse Brandeburg#define IXGBE_FLAG_MSI_CAPABLE                  (u32)(1 << 1)
26596b0e0f63b03153f7f2915f584083b4191b1932dJesse Brandeburg#define IXGBE_FLAG_MSI_ENABLED                  (u32)(1 << 2)
26696b0e0f63b03153f7f2915f584083b4191b1932dJesse Brandeburg#define IXGBE_FLAG_MSIX_CAPABLE                 (u32)(1 << 3)
26796b0e0f63b03153f7f2915f584083b4191b1932dJesse Brandeburg#define IXGBE_FLAG_MSIX_ENABLED                 (u32)(1 << 4)
26896b0e0f63b03153f7f2915f584083b4191b1932dJesse Brandeburg#define IXGBE_FLAG_RX_1BUF_CAPABLE              (u32)(1 << 6)
26996b0e0f63b03153f7f2915f584083b4191b1932dJesse Brandeburg#define IXGBE_FLAG_RX_PS_CAPABLE                (u32)(1 << 7)
27096b0e0f63b03153f7f2915f584083b4191b1932dJesse Brandeburg#define IXGBE_FLAG_RX_PS_ENABLED                (u32)(1 << 8)
27196b0e0f63b03153f7f2915f584083b4191b1932dJesse Brandeburg#define IXGBE_FLAG_IN_NETPOLL                   (u32)(1 << 9)
27296b0e0f63b03153f7f2915f584083b4191b1932dJesse Brandeburg#define IXGBE_FLAG_DCA_ENABLED                  (u32)(1 << 10)
27396b0e0f63b03153f7f2915f584083b4191b1932dJesse Brandeburg#define IXGBE_FLAG_DCA_CAPABLE                  (u32)(1 << 11)
27496b0e0f63b03153f7f2915f584083b4191b1932dJesse Brandeburg#define IXGBE_FLAG_IMIR_ENABLED                 (u32)(1 << 12)
27596b0e0f63b03153f7f2915f584083b4191b1932dJesse Brandeburg#define IXGBE_FLAG_MQ_CAPABLE                   (u32)(1 << 13)
27696b0e0f63b03153f7f2915f584083b4191b1932dJesse Brandeburg#define IXGBE_FLAG_RSS_ENABLED                  (u32)(1 << 16)
27796b0e0f63b03153f7f2915f584083b4191b1932dJesse Brandeburg#define IXGBE_FLAG_RSS_CAPABLE                  (u32)(1 << 17)
27896b0e0f63b03153f7f2915f584083b4191b1932dJesse Brandeburg#define IXGBE_FLAG_VMDQ_CAPABLE                 (u32)(1 << 18)
27996b0e0f63b03153f7f2915f584083b4191b1932dJesse Brandeburg#define IXGBE_FLAG_VMDQ_ENABLED                 (u32)(1 << 19)
28096b0e0f63b03153f7f2915f584083b4191b1932dJesse Brandeburg#define IXGBE_FLAG_NEED_LINK_UPDATE             (u32)(1 << 22)
28196b0e0f63b03153f7f2915f584083b4191b1932dJesse Brandeburg#define IXGBE_FLAG_IN_WATCHDOG_TASK             (u32)(1 << 23)
28296b0e0f63b03153f7f2915f584083b4191b1932dJesse Brandeburg
28396b0e0f63b03153f7f2915f584083b4191b1932dJesse Brandeburg/* default to trying for four seconds */
28496b0e0f63b03153f7f2915f584083b4191b1932dJesse Brandeburg#define IXGBE_TRY_LINK_TIMEOUT (4 * HZ)
2859a799d71034c4e2b168740c8a8530591011313d5Auke Kok
2869a799d71034c4e2b168740c8a8530591011313d5Auke Kok	/* OS defined structs */
2879a799d71034c4e2b168740c8a8530591011313d5Auke Kok	struct net_device *netdev;
2889a799d71034c4e2b168740c8a8530591011313d5Auke Kok	struct pci_dev *pdev;
2899a799d71034c4e2b168740c8a8530591011313d5Auke Kok	struct net_device_stats net_stats;
2909a799d71034c4e2b168740c8a8530591011313d5Auke Kok
2919a799d71034c4e2b168740c8a8530591011313d5Auke Kok	/* structs defined in ixgbe_hw.h */
2929a799d71034c4e2b168740c8a8530591011313d5Auke Kok	struct ixgbe_hw hw;
2939a799d71034c4e2b168740c8a8530591011313d5Auke Kok	u16 msg_enable;
2949a799d71034c4e2b168740c8a8530591011313d5Auke Kok	struct ixgbe_hw_stats stats;
295021230d40ae0e6508d6c717b6e0d6d81cd77ac25Ayyappan Veeraiyan
296021230d40ae0e6508d6c717b6e0d6d81cd77ac25Ayyappan Veeraiyan	/* Interrupt Throttle Rate */
29730efa5a363d18f1c284455879cb67fb1bf547bdcJesse Brandeburg	u32 eitr_param;
2989a799d71034c4e2b168740c8a8530591011313d5Auke Kok
2999a799d71034c4e2b168740c8a8530591011313d5Auke Kok	unsigned long state;
3009a799d71034c4e2b168740c8a8530591011313d5Auke Kok	u64 tx_busy;
301177db6ffd0599430a2ab63045e88fc4031f42420Mallikarjuna R Chilakala	u64 lro_aggregated;
302177db6ffd0599430a2ab63045e88fc4031f42420Mallikarjuna R Chilakala	u64 lro_flushed;
303177db6ffd0599430a2ab63045e88fc4031f42420Mallikarjuna R Chilakala	u64 lro_no_desc;
30430efa5a363d18f1c284455879cb67fb1bf547bdcJesse Brandeburg	unsigned int tx_ring_count;
30530efa5a363d18f1c284455879cb67fb1bf547bdcJesse Brandeburg	unsigned int rx_ring_count;
306cf8280ee7be3aaf44d32e389f15c725b850e5e32Jesse Brandeburg
307cf8280ee7be3aaf44d32e389f15c725b850e5e32Jesse Brandeburg	u32 link_speed;
308cf8280ee7be3aaf44d32e389f15c725b850e5e32Jesse Brandeburg	bool link_up;
309cf8280ee7be3aaf44d32e389f15c725b850e5e32Jesse Brandeburg	unsigned long link_check_timeout;
310cf8280ee7be3aaf44d32e389f15c725b850e5e32Jesse Brandeburg
311cf8280ee7be3aaf44d32e389f15c725b850e5e32Jesse Brandeburg	struct work_struct watchdog_task;
3129a799d71034c4e2b168740c8a8530591011313d5Auke Kok};
3139a799d71034c4e2b168740c8a8530591011313d5Auke Kok
3149a799d71034c4e2b168740c8a8530591011313d5Auke Kokenum ixbge_state_t {
3159a799d71034c4e2b168740c8a8530591011313d5Auke Kok	__IXGBE_TESTING,
3169a799d71034c4e2b168740c8a8530591011313d5Auke Kok	__IXGBE_RESETTING,
3179a799d71034c4e2b168740c8a8530591011313d5Auke Kok	__IXGBE_DOWN
3189a799d71034c4e2b168740c8a8530591011313d5Auke Kok};
3199a799d71034c4e2b168740c8a8530591011313d5Auke Kok
3209a799d71034c4e2b168740c8a8530591011313d5Auke Kokenum ixgbe_boards {
3213957d63da0067ad6a7dc8261b7eeb824f9dc42b4Auke Kok	board_82598,
3229a799d71034c4e2b168740c8a8530591011313d5Auke Kok};
3239a799d71034c4e2b168740c8a8530591011313d5Auke Kok
3243957d63da0067ad6a7dc8261b7eeb824f9dc42b4Auke Kokextern struct ixgbe_info ixgbe_82598_info;
3259a799d71034c4e2b168740c8a8530591011313d5Auke Kok
3269a799d71034c4e2b168740c8a8530591011313d5Auke Kokextern char ixgbe_driver_name[];
3279c8eb7206f4ef481d12da9196a6bdfd8d5def164Stephen Hemmingerextern const char ixgbe_driver_version[];
3289a799d71034c4e2b168740c8a8530591011313d5Auke Kok
3299a799d71034c4e2b168740c8a8530591011313d5Auke Kokextern int ixgbe_up(struct ixgbe_adapter *adapter);
3309a799d71034c4e2b168740c8a8530591011313d5Auke Kokextern void ixgbe_down(struct ixgbe_adapter *adapter);
331d4f80882ee7bdc721230b9ac209ddd3a837e4545Ayyappan Veeraiyanextern void ixgbe_reinit_locked(struct ixgbe_adapter *adapter);
3329a799d71034c4e2b168740c8a8530591011313d5Auke Kokextern void ixgbe_reset(struct ixgbe_adapter *adapter);
3339a799d71034c4e2b168740c8a8530591011313d5Auke Kokextern void ixgbe_update_stats(struct ixgbe_adapter *adapter);
3349a799d71034c4e2b168740c8a8530591011313d5Auke Kokextern void ixgbe_set_ethtool_ops(struct net_device *netdev);
3359a799d71034c4e2b168740c8a8530591011313d5Auke Kokextern int ixgbe_setup_rx_resources(struct ixgbe_adapter *adapter,
3369a799d71034c4e2b168740c8a8530591011313d5Auke Kok				    struct ixgbe_ring *rxdr);
3379a799d71034c4e2b168740c8a8530591011313d5Auke Kokextern int ixgbe_setup_tx_resources(struct ixgbe_adapter *adapter,
3389a799d71034c4e2b168740c8a8530591011313d5Auke Kok				    struct ixgbe_ring *txdr);
3399a799d71034c4e2b168740c8a8530591011313d5Auke Kok
3409a799d71034c4e2b168740c8a8530591011313d5Auke Kok#endif /* _IXGBE_H_ */
341