e1000.h 10.0 KB
Newer Older
L
Linus Torvalds 已提交
1 2
/*******************************************************************************

3 4 5 6 7 8 9 10 11 12
  Intel PRO/1000 Linux driver
  Copyright(c) 1999 - 2006 Intel Corporation.

  This program is free software; you can redistribute it and/or modify it
  under the terms and conditions of the GNU General Public License,
  version 2, as published by the Free Software Foundation.

  This program is distributed in the hope it will be useful, but WITHOUT
  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
L
Linus Torvalds 已提交
13
  more details.
14

L
Linus Torvalds 已提交
15
  You should have received a copy of the GNU General Public License along with
16 17 18 19 20 21
  this program; if not, write to the Free Software Foundation, Inc.,
  51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.

  The full GNU General Public License is included in this distribution in
  the file called "COPYING".

L
Linus Torvalds 已提交
22 23
  Contact Information:
  Linux NICS <linux.nics@intel.com>
24
  e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
L
Linus Torvalds 已提交
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
  Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497

*******************************************************************************/


/* Linux PRO/1000 Ethernet Driver main header file */

#ifndef _E1000_H_
#define _E1000_H_

#include <linux/stddef.h>
#include <linux/module.h>
#include <linux/types.h>
#include <asm/byteorder.h>
#include <linux/init.h>
#include <linux/mm.h>
#include <linux/errno.h>
#include <linux/ioport.h>
#include <linux/pci.h>
#include <linux/kernel.h>
#include <linux/netdevice.h>
#include <linux/etherdevice.h>
#include <linux/skbuff.h>
#include <linux/delay.h>
#include <linux/timer.h>
#include <linux/slab.h>
#include <linux/vmalloc.h>
#include <linux/interrupt.h>
#include <linux/string.h>
#include <linux/pagemap.h>
#include <linux/dma-mapping.h>
#include <linux/bitops.h>
#include <asm/io.h>
#include <asm/irq.h>
#include <linux/capability.h>
#include <linux/in.h>
#include <linux/ip.h>
A
Auke Kok 已提交
62
#include <linux/ipv6.h>
L
Linus Torvalds 已提交
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
#include <linux/tcp.h>
#include <linux/udp.h>
#include <net/pkt_sched.h>
#include <linux/list.h>
#include <linux/reboot.h>
#include <net/checksum.h>
#include <linux/mii.h>
#include <linux/ethtool.h>
#include <linux/if_vlan.h>

#define BAR_0		0
#define BAR_1		1
#define BAR_5		5

#define INTEL_E1000_ETHERNET_DEVICE(device_id) {\
	PCI_DEVICE(PCI_VENDOR_ID_INTEL, device_id)}

struct e1000_adapter;

#include "e1000_hw.h"

#ifdef DBG
#define E1000_DBG(args...) printk(KERN_DEBUG "e1000: " args)
#else
#define E1000_DBG(args...)
#endif

#define E1000_ERR(args...) printk(KERN_ERR "e1000: " args)

#define PFX "e1000: "
#define DPRINTK(nlevel, klevel, fmt, args...) \
	(void)((NETIF_MSG_##nlevel & adapter->msg_enable) && \
	printk(KERN_##klevel PFX "%s: %s: " fmt, adapter->netdev->name, \
		__FUNCTION__ , ## args))

#define E1000_MAX_INTR 10

/* TX/RX descriptor defines */
#define E1000_DEFAULT_TXD                  256
#define E1000_MAX_TXD                      256
#define E1000_MIN_TXD                       80
#define E1000_MAX_82544_TXD               4096

#define E1000_DEFAULT_RXD                  256
#define E1000_MAX_RXD                      256
#define E1000_MIN_RXD                       80
#define E1000_MAX_82544_RXD               4096

111 112 113
/* this is the size past which hardware will drop packets when setting LPE=0 */
#define MAXIMUM_ETHERNET_VLAN_SIZE 1522

L
Linus Torvalds 已提交
114
/* Supported Rx Buffer Sizes */
115 116
#define E1000_RXBUFFER_128   128    /* Used for packet split */
#define E1000_RXBUFFER_256   256    /* Used for packet split */
117 118
#define E1000_RXBUFFER_512   512
#define E1000_RXBUFFER_1024  1024
L
Linus Torvalds 已提交
119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
#define E1000_RXBUFFER_2048  2048
#define E1000_RXBUFFER_4096  4096
#define E1000_RXBUFFER_8192  8192
#define E1000_RXBUFFER_16384 16384

/* SmartSpeed delimiters */
#define E1000_SMARTSPEED_DOWNSHIFT 3
#define E1000_SMARTSPEED_MAX       15

/* Packet Buffer allocations */
#define E1000_PBA_BYTES_SHIFT 0xA
#define E1000_TX_HEAD_ADDR_SHIFT 7
#define E1000_PBA_TX_MASK 0xFFFF0000

/* Flow Control Watermarks */
#define E1000_FC_HIGH_DIFF 0x1638  /* High: 5688 bytes below Rx FIFO size */
#define E1000_FC_LOW_DIFF 0x1640   /* Low:  5696 bytes below Rx FIFO size */

#define E1000_FC_PAUSE_TIME 0x0680 /* 858 usec */

/* How many Tx Descriptors do we need to call netif_wake_queue ? */
#define E1000_TX_QUEUE_WAKE	16
/* How many Rx Buffers do we bundle into one write to the hardware ? */
#define E1000_RX_BUFFER_WRITE	16	/* Must be power of 2 */

144
#define AUTO_ALL_MODES            0
145
#define E1000_EEPROM_82544_APM    0x0004
146
#define E1000_EEPROM_ICH8_APME    0x0004
147
#define E1000_EEPROM_APME         0x0400
L
Linus Torvalds 已提交
148 149 150 151 152 153

#ifndef E1000_MASTER_SLAVE
/* Switch to override PHY master/slave setting */
#define E1000_MASTER_SLAVE	e1000_ms_hw_default
#endif

154 155 156 157
#define E1000_MNG_VLAN_NONE -1
/* Number of packet split data buffers (not including the header buffer) */
#define PS_PAGE_BUFFERS MAX_PS_BUFFERS-1

L
Linus Torvalds 已提交
158 159 160 161 162 163 164
/* only works for sizes that are powers of 2 */
#define E1000_ROUNDUP(i, size) ((i) = (((i) + (size) - 1) & ~((size) - 1)))

/* wrapper around a pointer to a socket buffer,
 * so a DMA handle can be stored along with the buffer */
struct e1000_buffer {
	struct sk_buff *skb;
165
	dma_addr_t dma;
L
Linus Torvalds 已提交
166 167 168 169 170
	unsigned long time_stamp;
	uint16_t length;
	uint16_t next_to_watch;
};

171

172 173
struct e1000_ps_page { struct page *ps_page[PS_PAGE_BUFFERS]; };
struct e1000_ps_page_dma { uint64_t ps_page_dma[PS_PAGE_BUFFERS]; };
174

175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193
struct e1000_tx_ring {
	/* pointer to the descriptor ring memory */
	void *desc;
	/* physical address of the descriptor ring */
	dma_addr_t dma;
	/* length of descriptor ring in bytes */
	unsigned int size;
	/* number of descriptors in the ring */
	unsigned int count;
	/* next descriptor to associate a buffer with */
	unsigned int next_to_use;
	/* next descriptor to check for DD status bit */
	unsigned int next_to_clean;
	/* array of buffer information structs */
	struct e1000_buffer *buffer_info;

	spinlock_t tx_lock;
	uint16_t tdh;
	uint16_t tdt;
J
Jeff Kirsher 已提交
194
	boolean_t last_tx_tso;
195 196 197
};

struct e1000_rx_ring {
L
Linus Torvalds 已提交
198 199 200 201 202 203 204 205 206 207 208 209 210 211
	/* pointer to the descriptor ring memory */
	void *desc;
	/* physical address of the descriptor ring */
	dma_addr_t dma;
	/* length of descriptor ring in bytes */
	unsigned int size;
	/* number of descriptors in the ring */
	unsigned int count;
	/* next descriptor to associate a buffer with */
	unsigned int next_to_use;
	/* next descriptor to check for DD status bit */
	unsigned int next_to_clean;
	/* array of buffer information structs */
	struct e1000_buffer *buffer_info;
212 213 214
	/* arrays of page information for packet split */
	struct e1000_ps_page *ps_page;
	struct e1000_ps_page_dma *ps_page_dma;
215

J
Jeff Kirsher 已提交
216 217 218
	/* cpu for rx queue */
	int cpu;

219 220
	uint16_t rdh;
	uint16_t rdt;
L
Linus Torvalds 已提交
221 222 223 224 225 226
};

#define E1000_DESC_UNUSED(R) \
	((((R)->next_to_clean > (R)->next_to_use) ? 0 : (R)->count) + \
	(R)->next_to_clean - (R)->next_to_use - 1)

227 228 229 230
#define E1000_RX_DESC_PS(R, i)	    \
	(&(((union e1000_rx_desc_packet_split *)((R).desc))[i]))
#define E1000_RX_DESC_EXT(R, i)	    \
	(&(((union e1000_rx_desc_extended *)((R).desc))[i]))
L
Linus Torvalds 已提交
231 232 233 234 235 236 237 238 239 240 241 242
#define E1000_GET_DESC(R, i, type)	(&(((struct type *)((R).desc))[i]))
#define E1000_RX_DESC(R, i)		E1000_GET_DESC(R, i, e1000_rx_desc)
#define E1000_TX_DESC(R, i)		E1000_GET_DESC(R, i, e1000_tx_desc)
#define E1000_CONTEXT_DESC(R, i)	E1000_GET_DESC(R, i, e1000_context_desc)

/* board specific private data structure */

struct e1000_adapter {
	struct timer_list tx_fifo_stall_timer;
	struct timer_list watchdog_timer;
	struct timer_list phy_info_timer;
	struct vlan_group *vlgrp;
243
	uint16_t mng_vlan_id;
L
Linus Torvalds 已提交
244 245 246 247 248 249 250 251
	uint32_t bd_number;
	uint32_t rx_buffer_len;
	uint32_t wol;
	uint32_t smartspeed;
	uint32_t en_mng_pt;
	uint16_t link_speed;
	uint16_t link_duplex;
	spinlock_t stats_lock;
252 253 254
#ifdef CONFIG_E1000_NAPI
	spinlock_t tx_queue_lock;
#endif
L
Linus Torvalds 已提交
255
	atomic_t irq_sem;
J
Jesse Brandeburg 已提交
256 257 258 259 260 261 262 263 264 265
	unsigned int total_tx_bytes;
	unsigned int total_tx_packets;
	unsigned int total_rx_bytes;
	unsigned int total_rx_packets;
	/* Interrupt Throttle Rate */
	uint32_t itr;
	uint32_t itr_setting;
	uint16_t tx_itr;
	uint16_t rx_itr;

266
	struct work_struct reset_task;
L
Linus Torvalds 已提交
267 268 269 270 271 272
	uint8_t fc_autoneg;

	struct timer_list blink_timer;
	unsigned long led_status;

	/* TX */
273
	struct e1000_tx_ring *tx_ring;      /* One per active queue */
274
	unsigned int restart_queue;
275
	unsigned long tx_queue_len;
L
Linus Torvalds 已提交
276 277 278 279 280 281 282
	uint32_t txd_cmd;
	uint32_t tx_int_delay;
	uint32_t tx_abs_int_delay;
	uint32_t gotcl;
	uint64_t gotcl_old;
	uint64_t tpt_old;
	uint64_t colc_old;
J
Jeff Kirsher 已提交
283
	uint32_t tx_timeout_count;
L
Linus Torvalds 已提交
284 285 286
	uint32_t tx_fifo_head;
	uint32_t tx_head_addr;
	uint32_t tx_fifo_size;
287
	uint8_t  tx_timeout_factor;
L
Linus Torvalds 已提交
288 289 290 291 292
	atomic_t tx_fifo_stall;
	boolean_t pcix_82544;
	boolean_t detect_tx_hung;

	/* RX */
293
#ifdef CONFIG_E1000_NAPI
294
	boolean_t (*clean_rx) (struct e1000_adapter *adapter,
295 296
			       struct e1000_rx_ring *rx_ring,
			       int *work_done, int work_to_do);
297
#else
298
	boolean_t (*clean_rx) (struct e1000_adapter *adapter,
299
			       struct e1000_rx_ring *rx_ring);
300
#endif
301
	void (*alloc_rx_buf) (struct e1000_adapter *adapter,
302 303
			      struct e1000_rx_ring *rx_ring,
				int cleaned_count);
304 305 306 307
	struct e1000_rx_ring *rx_ring;      /* One per active queue */
#ifdef CONFIG_E1000_NAPI
	struct net_device *polling_netdev;  /* One per active queue */
#endif
308 309
	int num_tx_queues;
	int num_rx_queues;
310

L
Linus Torvalds 已提交
311 312
	uint64_t hw_csum_err;
	uint64_t hw_csum_good;
313
	uint64_t rx_hdr_split;
J
Jeff Kirsher 已提交
314
	uint32_t alloc_rx_buff_failed;
L
Linus Torvalds 已提交
315 316 317
	uint32_t rx_int_delay;
	uint32_t rx_abs_int_delay;
	boolean_t rx_csum;
318
	unsigned int rx_ps_pages;
L
Linus Torvalds 已提交
319 320
	uint32_t gorcl;
	uint64_t gorcl_old;
321
	uint16_t rx_ps_bsize0;
L
Linus Torvalds 已提交
322 323 324 325 326 327 328 329 330 331 332 333 334 335


	/* OS defined structs */
	struct net_device *netdev;
	struct pci_dev *pdev;
	struct net_device_stats net_stats;

	/* structs defined in e1000_hw.h */
	struct e1000_hw hw;
	struct e1000_hw_stats stats;
	struct e1000_phy_info phy_info;
	struct e1000_phy_stats phy_stats;

	uint32_t test_icr;
336 337
	struct e1000_tx_ring test_tx_ring;
	struct e1000_rx_ring test_rx_ring;
L
Linus Torvalds 已提交
338 339


340
	uint32_t *config_space;
L
Linus Torvalds 已提交
341
	int msg_enable;
342 343
#ifdef CONFIG_PCI_MSI
	boolean_t have_msi;
344 345 346
#endif
	/* to not mess up cache alignment, always add to the bottom */
	boolean_t tso_force;
A
Auke Kok 已提交
347
	boolean_t smart_power_down;	/* phy smart power down */
348
	boolean_t quad_port_a;
349
	unsigned long flags;
350
	uint32_t eeprom_wol;
L
Linus Torvalds 已提交
351
};
352

353
enum e1000_state_t {
A
Auke Kok 已提交
354
	__E1000_TESTING,
355
	__E1000_RESETTING,
A
Auke Kok 已提交
356
	__E1000_DOWN
357
};
358

L
Linus Torvalds 已提交
359
#endif /* _E1000_H_ */