e1000.h 10.1 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
/* 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;
162
	dma_addr_t dma;
L
Linus Torvalds 已提交
163 164 165 166 167
	unsigned long time_stamp;
	uint16_t length;
	uint16_t next_to_watch;
};

168

169 170
struct e1000_ps_page { struct page *ps_page[PS_PAGE_BUFFERS]; };
struct e1000_ps_page_dma { uint64_t ps_page_dma[PS_PAGE_BUFFERS]; };
171

172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190
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 已提交
191
	boolean_t last_tx_tso;
192 193 194
};

struct e1000_rx_ring {
L
Linus Torvalds 已提交
195 196 197 198 199 200 201 202 203 204 205 206 207 208
	/* 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;
209 210 211
	/* arrays of page information for packet split */
	struct e1000_ps_page *ps_page;
	struct e1000_ps_page_dma *ps_page_dma;
212

J
Jeff Kirsher 已提交
213 214 215
	/* cpu for rx queue */
	int cpu;

216 217
	uint16_t rdh;
	uint16_t rdt;
L
Linus Torvalds 已提交
218 219 220 221 222 223
};

#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)

224 225 226 227
#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 已提交
228 229 230 231 232 233 234 235 236 237 238 239
#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;
240
	uint16_t mng_vlan_id;
L
Linus Torvalds 已提交
241 242 243 244 245 246 247 248
	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;
249 250 251
#ifdef CONFIG_E1000_NAPI
	spinlock_t tx_queue_lock;
#endif
L
Linus Torvalds 已提交
252
	atomic_t irq_sem;
J
Jesse Brandeburg 已提交
253 254 255 256 257 258 259 260 261 262
	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;

263
	struct work_struct reset_task;
L
Linus Torvalds 已提交
264 265 266 267 268 269
	uint8_t fc_autoneg;

	struct timer_list blink_timer;
	unsigned long led_status;

	/* TX */
270
	struct e1000_tx_ring *tx_ring;      /* One per active queue */
271
	unsigned int restart_queue;
272
	unsigned long tx_queue_len;
L
Linus Torvalds 已提交
273 274 275 276 277 278 279
	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 已提交
280
	uint32_t tx_timeout_count;
L
Linus Torvalds 已提交
281 282 283
	uint32_t tx_fifo_head;
	uint32_t tx_head_addr;
	uint32_t tx_fifo_size;
284
	uint8_t  tx_timeout_factor;
L
Linus Torvalds 已提交
285 286 287 288 289
	atomic_t tx_fifo_stall;
	boolean_t pcix_82544;
	boolean_t detect_tx_hung;

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

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


	/* 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;
334 335
	struct e1000_tx_ring test_tx_ring;
	struct e1000_rx_ring test_rx_ring;
L
Linus Torvalds 已提交
336 337

	int msg_enable;
338
	boolean_t have_msi;
339

340 341
	/* to not mess up cache alignment, always add to the bottom */
	boolean_t tso_force;
A
Auke Kok 已提交
342
	boolean_t smart_power_down;	/* phy smart power down */
343
	boolean_t quad_port_a;
344
	unsigned long flags;
345
	uint32_t eeprom_wol;
L
Linus Torvalds 已提交
346
};
347

348
enum e1000_state_t {
A
Auke Kok 已提交
349
	__E1000_TESTING,
350
	__E1000_RESETTING,
A
Auke Kok 已提交
351
	__E1000_DOWN
352
};
353

S
Stephen Hemminger 已提交
354 355 356 357 358 359 360 361
extern char e1000_driver_name[];
extern const char e1000_driver_version[];

extern void e1000_power_up_phy(struct e1000_adapter *);
extern void e1000_set_ethtool_ops(struct net_device *netdev);
extern void e1000_check_options(struct e1000_adapter *adapter);


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