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

  
4
  Copyright(c) 1999 - 2006 Intel Corporation. All rights reserved.
L
Linus Torvalds 已提交
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
  
  This program is free software; you can redistribute it and/or modify it 
  under the terms of the GNU General Public License as published by the Free 
  Software Foundation; either version 2 of the License, or (at your option) 
  any later version.
  
  This program is distributed in the hope that 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 
  more details.
  
  You should have received a copy of the GNU General Public License along with
  this program; if not, write to the Free Software Foundation, Inc., 59 
  Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  
  The full GNU General Public License is included in this distribution in the
  file called LICENSE.
  
  Contact Information:
  Linux NICS <linux.nics@intel.com>
25
  e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
L
Linus Torvalds 已提交
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 62 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 111 112
  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>
#include <linux/tcp.h>
#include <linux/udp.h>
#include <net/pkt_sched.h>
#include <linux/list.h>
#include <linux/reboot.h>
#ifdef NETIF_F_TSO
#include <net/checksum.h>
#endif
#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

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

L
Linus Torvalds 已提交
116
/* Supported Rx Buffer Sizes */
117 118
#define E1000_RXBUFFER_128   128    /* Used for packet split */
#define E1000_RXBUFFER_256   256    /* Used for packet split */
119 120
#define E1000_RXBUFFER_512   512
#define E1000_RXBUFFER_1024  1024
L
Linus Torvalds 已提交
121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
#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 */

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

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

156 157 158 159
#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 已提交
160 161 162 163 164 165 166
/* 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;
167
	dma_addr_t dma;
L
Linus Torvalds 已提交
168 169 170 171 172
	unsigned long time_stamp;
	uint16_t length;
	uint16_t next_to_watch;
};

173

174 175
struct e1000_ps_page { struct page *ps_page[PS_PAGE_BUFFERS]; };
struct e1000_ps_page_dma { uint64_t ps_page_dma[PS_PAGE_BUFFERS]; };
176

177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195
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 已提交
196
	boolean_t last_tx_tso;
197 198 199
};

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

J
Jeff Kirsher 已提交
218 219 220
	/* cpu for rx queue */
	int cpu;

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

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

229 230 231 232
#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 已提交
233 234 235 236 237 238 239 240 241 242 243 244
#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;
245
	uint16_t mng_vlan_id;
L
Linus Torvalds 已提交
246 247 248
	uint32_t bd_number;
	uint32_t rx_buffer_len;
	uint32_t wol;
J
Jeff Kirsher 已提交
249
	uint32_t ksp3_port_a;
L
Linus Torvalds 已提交
250 251 252 253 254
	uint32_t smartspeed;
	uint32_t en_mng_pt;
	uint16_t link_speed;
	uint16_t link_duplex;
	spinlock_t stats_lock;
255 256 257
#ifdef CONFIG_E1000_NAPI
	spinlock_t tx_queue_lock;
#endif
L
Linus Torvalds 已提交
258
	atomic_t irq_sem;
259
	struct work_struct reset_task;
L
Linus Torvalds 已提交
260 261 262 263 264 265
	uint8_t fc_autoneg;

	struct timer_list blink_timer;
	unsigned long led_status;

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

	/* RX */
285
#ifdef CONFIG_E1000_NAPI
286
	boolean_t (*clean_rx) (struct e1000_adapter *adapter,
287 288
			       struct e1000_rx_ring *rx_ring,
			       int *work_done, int work_to_do);
289
#else
290
	boolean_t (*clean_rx) (struct e1000_adapter *adapter,
291
			       struct e1000_rx_ring *rx_ring);
292
#endif
293
	void (*alloc_rx_buf) (struct e1000_adapter *adapter,
294 295
			      struct e1000_rx_ring *rx_ring,
				int cleaned_count);
296 297 298 299
	struct e1000_rx_ring *rx_ring;      /* One per active queue */
#ifdef CONFIG_E1000_NAPI
	struct net_device *polling_netdev;  /* One per active queue */
#endif
300 301
	int num_tx_queues;
	int num_rx_queues;
302

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

	/* Interrupt Throttle Rate */
	uint32_t itr;

	/* 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;
330 331
	struct e1000_tx_ring test_tx_ring;
	struct e1000_rx_ring test_rx_ring;
L
Linus Torvalds 已提交
332 333


334
	uint32_t *config_space;
L
Linus Torvalds 已提交
335
	int msg_enable;
336 337
#ifdef CONFIG_PCI_MSI
	boolean_t have_msi;
338 339 340 341
#endif
	/* to not mess up cache alignment, always add to the bottom */
#ifdef NETIF_F_TSO
	boolean_t tso_force;
342
#endif
A
Auke Kok 已提交
343
	boolean_t smart_power_down;	/* phy smart power down */
344
	unsigned long flags;
L
Linus Torvalds 已提交
345
};
346

347 348 349 350
enum e1000_state_t {
	__E1000_DRIVER_TESTING,
	__E1000_RESETTING,
};
351 352 353 354 355 356 357

/*  e1000_main.c  */
extern char e1000_driver_name[];
extern char e1000_driver_version[];
int e1000_up(struct e1000_adapter *adapter);
void e1000_down(struct e1000_adapter *adapter);
void e1000_reset(struct e1000_adapter *adapter);
358
void e1000_reinit_locked(struct e1000_adapter *adapter);
359 360 361 362 363 364 365 366 367 368 369 370 371 372
int e1000_setup_all_tx_resources(struct e1000_adapter *adapter);
void e1000_free_all_tx_resources(struct e1000_adapter *adapter);
int e1000_setup_all_rx_resources(struct e1000_adapter *adapter);
void e1000_free_all_rx_resources(struct e1000_adapter *adapter);
void e1000_update_stats(struct e1000_adapter *adapter);
int e1000_set_spd_dplx(struct e1000_adapter *adapter, uint16_t spddplx);

/*  e1000_ethtool.c  */
void e1000_set_ethtool_ops(struct net_device *netdev);

/*  e1000_param.c  */
void e1000_check_options(struct e1000_adapter *adapter);


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