Linux Audio

Check our new training course

Loading...
Note: File does not exist in v6.13.7.
   1/* de2104x.c: A Linux PCI Ethernet driver for Intel/Digital 21040/1 chips. */
   2/*
   3	Copyright 2001,2003 Jeff Garzik <jgarzik@pobox.com>
   4
   5	Copyright 1994, 1995 Digital Equipment Corporation.	    [de4x5.c]
   6	Written/copyright 1994-2001 by Donald Becker.		    [tulip.c]
   7
   8	This software may be used and distributed according to the terms of
   9	the GNU General Public License (GPL), incorporated herein by reference.
  10	Drivers based on or derived from this code fall under the GPL and must
  11	retain the authorship, copyright and license notice.  This file is not
  12	a complete program and may only be used when the entire operating
  13	system is licensed under the GPL.
  14
  15	See the file COPYING in this distribution for more information.
  16
  17	TODO, in rough priority order:
  18	* Support forcing media type with a module parameter,
  19	  like dl2k.c/sundance.c
  20	* Constants (module parms?) for Rx work limit
  21	* Complete reset on PciErr
  22	* Jumbo frames / dev->change_mtu
  23	* Adjust Rx FIFO threshold and Max Rx DMA burst on Rx FIFO error
  24	* Adjust Tx FIFO threshold and Max Tx DMA burst on Tx FIFO error
  25	* Implement Tx software interrupt mitigation via
  26	  Tx descriptor bit
  27
  28 */
  29
  30#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
  31
  32#define DRV_NAME		"de2104x"
  33#define DRV_VERSION		"0.7"
  34#define DRV_RELDATE		"Mar 17, 2004"
  35
  36#include <linux/module.h>
  37#include <linux/kernel.h>
  38#include <linux/netdevice.h>
  39#include <linux/etherdevice.h>
  40#include <linux/init.h>
  41#include <linux/interrupt.h>
  42#include <linux/pci.h>
  43#include <linux/delay.h>
  44#include <linux/ethtool.h>
  45#include <linux/compiler.h>
  46#include <linux/rtnetlink.h>
  47#include <linux/crc32.h>
  48#include <linux/slab.h>
  49
  50#include <asm/io.h>
  51#include <asm/irq.h>
  52#include <asm/uaccess.h>
  53#include <asm/unaligned.h>
  54
  55/* These identify the driver base version and may not be removed. */
  56static char version[] =
  57"PCI Ethernet driver v" DRV_VERSION " (" DRV_RELDATE ")";
  58
  59MODULE_AUTHOR("Jeff Garzik <jgarzik@pobox.com>");
  60MODULE_DESCRIPTION("Intel/Digital 21040/1 series PCI Ethernet driver");
  61MODULE_LICENSE("GPL");
  62MODULE_VERSION(DRV_VERSION);
  63
  64static int debug = -1;
  65module_param (debug, int, 0);
  66MODULE_PARM_DESC (debug, "de2104x bitmapped message enable number");
  67
  68/* Set the copy breakpoint for the copy-only-tiny-buffer Rx structure. */
  69#if defined(__alpha__) || defined(__arm__) || defined(__hppa__) || \
  70        defined(CONFIG_SPARC) || defined(__ia64__) ||		   \
  71        defined(__sh__) || defined(__mips__)
  72static int rx_copybreak = 1518;
  73#else
  74static int rx_copybreak = 100;
  75#endif
  76module_param (rx_copybreak, int, 0);
  77MODULE_PARM_DESC (rx_copybreak, "de2104x Breakpoint at which Rx packets are copied");
  78
  79#define DE_DEF_MSG_ENABLE	(NETIF_MSG_DRV		| \
  80				 NETIF_MSG_PROBE 	| \
  81				 NETIF_MSG_LINK		| \
  82				 NETIF_MSG_IFDOWN	| \
  83				 NETIF_MSG_IFUP		| \
  84				 NETIF_MSG_RX_ERR	| \
  85				 NETIF_MSG_TX_ERR)
  86
  87/* Descriptor skip length in 32 bit longwords. */
  88#ifndef CONFIG_DE2104X_DSL
  89#define DSL			0
  90#else
  91#define DSL			CONFIG_DE2104X_DSL
  92#endif
  93
  94#define DE_RX_RING_SIZE		64
  95#define DE_TX_RING_SIZE		64
  96#define DE_RING_BYTES		\
  97		((sizeof(struct de_desc) * DE_RX_RING_SIZE) +	\
  98		(sizeof(struct de_desc) * DE_TX_RING_SIZE))
  99#define NEXT_TX(N)		(((N) + 1) & (DE_TX_RING_SIZE - 1))
 100#define NEXT_RX(N)		(((N) + 1) & (DE_RX_RING_SIZE - 1))
 101#define TX_BUFFS_AVAIL(CP)					\
 102	(((CP)->tx_tail <= (CP)->tx_head) ?			\
 103	  (CP)->tx_tail + (DE_TX_RING_SIZE - 1) - (CP)->tx_head :	\
 104	  (CP)->tx_tail - (CP)->tx_head - 1)
 105
 106#define PKT_BUF_SZ		1536	/* Size of each temporary Rx buffer.*/
 107#define RX_OFFSET		2
 108
 109#define DE_SETUP_SKB		((struct sk_buff *) 1)
 110#define DE_DUMMY_SKB		((struct sk_buff *) 2)
 111#define DE_SETUP_FRAME_WORDS	96
 112#define DE_EEPROM_WORDS		256
 113#define DE_EEPROM_SIZE		(DE_EEPROM_WORDS * sizeof(u16))
 114#define DE_MAX_MEDIA		5
 115
 116#define DE_MEDIA_TP_AUTO	0
 117#define DE_MEDIA_BNC		1
 118#define DE_MEDIA_AUI		2
 119#define DE_MEDIA_TP		3
 120#define DE_MEDIA_TP_FD		4
 121#define DE_MEDIA_INVALID	DE_MAX_MEDIA
 122#define DE_MEDIA_FIRST		0
 123#define DE_MEDIA_LAST		(DE_MAX_MEDIA - 1)
 124#define DE_AUI_BNC		(SUPPORTED_AUI | SUPPORTED_BNC)
 125
 126#define DE_TIMER_LINK		(60 * HZ)
 127#define DE_TIMER_NO_LINK	(5 * HZ)
 128
 129#define DE_NUM_REGS		16
 130#define DE_REGS_SIZE		(DE_NUM_REGS * sizeof(u32))
 131#define DE_REGS_VER		1
 132
 133/* Time in jiffies before concluding the transmitter is hung. */
 134#define TX_TIMEOUT		(6*HZ)
 135
 136/* This is a mysterious value that can be written to CSR11 in the 21040 (only)
 137   to support a pre-NWay full-duplex signaling mechanism using short frames.
 138   No one knows what it should be, but if left at its default value some
 139   10base2(!) packets trigger a full-duplex-request interrupt. */
 140#define FULL_DUPLEX_MAGIC	0x6969
 141
 142enum {
 143	/* NIC registers */
 144	BusMode			= 0x00,
 145	TxPoll			= 0x08,
 146	RxPoll			= 0x10,
 147	RxRingAddr		= 0x18,
 148	TxRingAddr		= 0x20,
 149	MacStatus		= 0x28,
 150	MacMode			= 0x30,
 151	IntrMask		= 0x38,
 152	RxMissed		= 0x40,
 153	ROMCmd			= 0x48,
 154	CSR11			= 0x58,
 155	SIAStatus		= 0x60,
 156	CSR13			= 0x68,
 157	CSR14			= 0x70,
 158	CSR15			= 0x78,
 159	PCIPM			= 0x40,
 160
 161	/* BusMode bits */
 162	CmdReset		= (1 << 0),
 163	CacheAlign16		= 0x00008000,
 164	BurstLen4		= 0x00000400,
 165	DescSkipLen		= (DSL << 2),
 166
 167	/* Rx/TxPoll bits */
 168	NormalTxPoll		= (1 << 0),
 169	NormalRxPoll		= (1 << 0),
 170
 171	/* Tx/Rx descriptor status bits */
 172	DescOwn			= (1 << 31),
 173	RxError			= (1 << 15),
 174	RxErrLong		= (1 << 7),
 175	RxErrCRC		= (1 << 1),
 176	RxErrFIFO		= (1 << 0),
 177	RxErrRunt		= (1 << 11),
 178	RxErrFrame		= (1 << 14),
 179	RingEnd			= (1 << 25),
 180	FirstFrag		= (1 << 29),
 181	LastFrag		= (1 << 30),
 182	TxError			= (1 << 15),
 183	TxFIFOUnder		= (1 << 1),
 184	TxLinkFail		= (1 << 2) | (1 << 10) | (1 << 11),
 185	TxMaxCol		= (1 << 8),
 186	TxOWC			= (1 << 9),
 187	TxJabber		= (1 << 14),
 188	SetupFrame		= (1 << 27),
 189	TxSwInt			= (1 << 31),
 190
 191	/* MacStatus bits */
 192	IntrOK			= (1 << 16),
 193	IntrErr			= (1 << 15),
 194	RxIntr			= (1 << 6),
 195	RxEmpty			= (1 << 7),
 196	TxIntr			= (1 << 0),
 197	TxEmpty			= (1 << 2),
 198	PciErr			= (1 << 13),
 199	TxState			= (1 << 22) | (1 << 21) | (1 << 20),
 200	RxState			= (1 << 19) | (1 << 18) | (1 << 17),
 201	LinkFail		= (1 << 12),
 202	LinkPass		= (1 << 4),
 203	RxStopped		= (1 << 8),
 204	TxStopped		= (1 << 1),
 205
 206	/* MacMode bits */
 207	TxEnable		= (1 << 13),
 208	RxEnable		= (1 << 1),
 209	RxTx			= TxEnable | RxEnable,
 210	FullDuplex		= (1 << 9),
 211	AcceptAllMulticast	= (1 << 7),
 212	AcceptAllPhys		= (1 << 6),
 213	BOCnt			= (1 << 5),
 214	MacModeClear		= (1<<12) | (1<<11) | (1<<10) | (1<<8) | (1<<3) |
 215				  RxTx | BOCnt | AcceptAllPhys | AcceptAllMulticast,
 216
 217	/* ROMCmd bits */
 218	EE_SHIFT_CLK		= 0x02,	/* EEPROM shift clock. */
 219	EE_CS			= 0x01,	/* EEPROM chip select. */
 220	EE_DATA_WRITE		= 0x04,	/* Data from the Tulip to EEPROM. */
 221	EE_WRITE_0		= 0x01,
 222	EE_WRITE_1		= 0x05,
 223	EE_DATA_READ		= 0x08,	/* Data from the EEPROM chip. */
 224	EE_ENB			= (0x4800 | EE_CS),
 225
 226	/* The EEPROM commands include the alway-set leading bit. */
 227	EE_READ_CMD		= 6,
 228
 229	/* RxMissed bits */
 230	RxMissedOver		= (1 << 16),
 231	RxMissedMask		= 0xffff,
 232
 233	/* SROM-related bits */
 234	SROMC0InfoLeaf		= 27,
 235	MediaBlockMask		= 0x3f,
 236	MediaCustomCSRs		= (1 << 6),
 237
 238	/* PCIPM bits */
 239	PM_Sleep		= (1 << 31),
 240	PM_Snooze		= (1 << 30),
 241	PM_Mask			= PM_Sleep | PM_Snooze,
 242
 243	/* SIAStatus bits */
 244	NWayState		= (1 << 14) | (1 << 13) | (1 << 12),
 245	NWayRestart		= (1 << 12),
 246	NonselPortActive	= (1 << 9),
 247	SelPortActive		= (1 << 8),
 248	LinkFailStatus		= (1 << 2),
 249	NetCxnErr		= (1 << 1),
 250};
 251
 252static const u32 de_intr_mask =
 253	IntrOK | IntrErr | RxIntr | RxEmpty | TxIntr | TxEmpty |
 254	LinkPass | LinkFail | PciErr;
 255
 256/*
 257 * Set the programmable burst length to 4 longwords for all:
 258 * DMA errors result without these values. Cache align 16 long.
 259 */
 260static const u32 de_bus_mode = CacheAlign16 | BurstLen4 | DescSkipLen;
 261
 262struct de_srom_media_block {
 263	u8			opts;
 264	u16			csr13;
 265	u16			csr14;
 266	u16			csr15;
 267} __packed;
 268
 269struct de_srom_info_leaf {
 270	u16			default_media;
 271	u8			n_blocks;
 272	u8			unused;
 273} __packed;
 274
 275struct de_desc {
 276	__le32			opts1;
 277	__le32			opts2;
 278	__le32			addr1;
 279	__le32			addr2;
 280#if DSL
 281	__le32			skip[DSL];
 282#endif
 283};
 284
 285struct media_info {
 286	u16			type;	/* DE_MEDIA_xxx */
 287	u16			csr13;
 288	u16			csr14;
 289	u16			csr15;
 290};
 291
 292struct ring_info {
 293	struct sk_buff		*skb;
 294	dma_addr_t		mapping;
 295};
 296
 297struct de_private {
 298	unsigned		tx_head;
 299	unsigned		tx_tail;
 300	unsigned		rx_tail;
 301
 302	void			__iomem *regs;
 303	struct net_device	*dev;
 304	spinlock_t		lock;
 305
 306	struct de_desc		*rx_ring;
 307	struct de_desc		*tx_ring;
 308	struct ring_info	tx_skb[DE_TX_RING_SIZE];
 309	struct ring_info	rx_skb[DE_RX_RING_SIZE];
 310	unsigned		rx_buf_sz;
 311	dma_addr_t		ring_dma;
 312
 313	u32			msg_enable;
 314
 315	struct net_device_stats net_stats;
 316
 317	struct pci_dev		*pdev;
 318
 319	u16			setup_frame[DE_SETUP_FRAME_WORDS];
 320
 321	u32			media_type;
 322	u32			media_supported;
 323	u32			media_advertise;
 324	struct media_info	media[DE_MAX_MEDIA];
 325	struct timer_list	media_timer;
 326
 327	u8			*ee_data;
 328	unsigned		board_idx;
 329	unsigned		de21040 : 1;
 330	unsigned		media_lock : 1;
 331};
 332
 333
 334static void de_set_rx_mode (struct net_device *dev);
 335static void de_tx (struct de_private *de);
 336static void de_clean_rings (struct de_private *de);
 337static void de_media_interrupt (struct de_private *de, u32 status);
 338static void de21040_media_timer (unsigned long data);
 339static void de21041_media_timer (unsigned long data);
 340static unsigned int de_ok_to_advertise (struct de_private *de, u32 new_media);
 341
 342
 343static DEFINE_PCI_DEVICE_TABLE(de_pci_tbl) = {
 344	{ PCI_VENDOR_ID_DEC, PCI_DEVICE_ID_DEC_TULIP,
 345	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
 346	{ PCI_VENDOR_ID_DEC, PCI_DEVICE_ID_DEC_TULIP_PLUS,
 347	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1 },
 348	{ },
 349};
 350MODULE_DEVICE_TABLE(pci, de_pci_tbl);
 351
 352static const char * const media_name[DE_MAX_MEDIA] = {
 353	"10baseT auto",
 354	"BNC",
 355	"AUI",
 356	"10baseT-HD",
 357	"10baseT-FD"
 358};
 359
 360/* 21040 transceiver register settings:
 361 * TP AUTO(unused), BNC(unused), AUI, TP, TP FD*/
 362static u16 t21040_csr13[] = { 0, 0, 0x8F09, 0x8F01, 0x8F01, };
 363static u16 t21040_csr14[] = { 0, 0, 0x0705, 0xFFFF, 0xFFFD, };
 364static u16 t21040_csr15[] = { 0, 0, 0x0006, 0x0000, 0x0000, };
 365
 366/* 21041 transceiver register settings: TP AUTO, BNC, AUI, TP, TP FD*/
 367static u16 t21041_csr13[] = { 0xEF01, 0xEF09, 0xEF09, 0xEF01, 0xEF09, };
 368static u16 t21041_csr14[] = { 0xFFFF, 0xF7FD, 0xF7FD, 0x7F3F, 0x7F3D, };
 369/* If on-chip autonegotiation is broken, use half-duplex (FF3F) instead */
 370static u16 t21041_csr14_brk[] = { 0xFF3F, 0xF7FD, 0xF7FD, 0x7F3F, 0x7F3D, };
 371static u16 t21041_csr15[] = { 0x0008, 0x0006, 0x000E, 0x0008, 0x0008, };
 372
 373
 374#define dr32(reg)	ioread32(de->regs + (reg))
 375#define dw32(reg, val)	iowrite32((val), de->regs + (reg))
 376
 377
 378static void de_rx_err_acct (struct de_private *de, unsigned rx_tail,
 379			    u32 status, u32 len)
 380{
 381	netif_dbg(de, rx_err, de->dev,
 382		  "rx err, slot %d status 0x%x len %d\n",
 383		  rx_tail, status, len);
 384
 385	if ((status & 0x38000300) != 0x0300) {
 386		/* Ingore earlier buffers. */
 387		if ((status & 0xffff) != 0x7fff) {
 388			netif_warn(de, rx_err, de->dev,
 389				   "Oversized Ethernet frame spanned multiple buffers, status %08x!\n",
 390				   status);
 391			de->net_stats.rx_length_errors++;
 392		}
 393	} else if (status & RxError) {
 394		/* There was a fatal error. */
 395		de->net_stats.rx_errors++; /* end of a packet.*/
 396		if (status & 0x0890) de->net_stats.rx_length_errors++;
 397		if (status & RxErrCRC) de->net_stats.rx_crc_errors++;
 398		if (status & RxErrFIFO) de->net_stats.rx_fifo_errors++;
 399	}
 400}
 401
 402static void de_rx (struct de_private *de)
 403{
 404	unsigned rx_tail = de->rx_tail;
 405	unsigned rx_work = DE_RX_RING_SIZE;
 406	unsigned drop = 0;
 407	int rc;
 408
 409	while (--rx_work) {
 410		u32 status, len;
 411		dma_addr_t mapping;
 412		struct sk_buff *skb, *copy_skb;
 413		unsigned copying_skb, buflen;
 414
 415		skb = de->rx_skb[rx_tail].skb;
 416		BUG_ON(!skb);
 417		rmb();
 418		status = le32_to_cpu(de->rx_ring[rx_tail].opts1);
 419		if (status & DescOwn)
 420			break;
 421
 422		len = ((status >> 16) & 0x7ff) - 4;
 423		mapping = de->rx_skb[rx_tail].mapping;
 424
 425		if (unlikely(drop)) {
 426			de->net_stats.rx_dropped++;
 427			goto rx_next;
 428		}
 429
 430		if (unlikely((status & 0x38008300) != 0x0300)) {
 431			de_rx_err_acct(de, rx_tail, status, len);
 432			goto rx_next;
 433		}
 434
 435		copying_skb = (len <= rx_copybreak);
 436
 437		netif_dbg(de, rx_status, de->dev,
 438			  "rx slot %d status 0x%x len %d copying? %d\n",
 439			  rx_tail, status, len, copying_skb);
 440
 441		buflen = copying_skb ? (len + RX_OFFSET) : de->rx_buf_sz;
 442		copy_skb = dev_alloc_skb (buflen);
 443		if (unlikely(!copy_skb)) {
 444			de->net_stats.rx_dropped++;
 445			drop = 1;
 446			rx_work = 100;
 447			goto rx_next;
 448		}
 449
 450		if (!copying_skb) {
 451			pci_unmap_single(de->pdev, mapping,
 452					 buflen, PCI_DMA_FROMDEVICE);
 453			skb_put(skb, len);
 454
 455			mapping =
 456			de->rx_skb[rx_tail].mapping =
 457				pci_map_single(de->pdev, copy_skb->data,
 458					       buflen, PCI_DMA_FROMDEVICE);
 459			de->rx_skb[rx_tail].skb = copy_skb;
 460		} else {
 461			pci_dma_sync_single_for_cpu(de->pdev, mapping, len, PCI_DMA_FROMDEVICE);
 462			skb_reserve(copy_skb, RX_OFFSET);
 463			skb_copy_from_linear_data(skb, skb_put(copy_skb, len),
 464						  len);
 465			pci_dma_sync_single_for_device(de->pdev, mapping, len, PCI_DMA_FROMDEVICE);
 466
 467			/* We'll reuse the original ring buffer. */
 468			skb = copy_skb;
 469		}
 470
 471		skb->protocol = eth_type_trans (skb, de->dev);
 472
 473		de->net_stats.rx_packets++;
 474		de->net_stats.rx_bytes += skb->len;
 475		rc = netif_rx (skb);
 476		if (rc == NET_RX_DROP)
 477			drop = 1;
 478
 479rx_next:
 480		if (rx_tail == (DE_RX_RING_SIZE - 1))
 481			de->rx_ring[rx_tail].opts2 =
 482				cpu_to_le32(RingEnd | de->rx_buf_sz);
 483		else
 484			de->rx_ring[rx_tail].opts2 = cpu_to_le32(de->rx_buf_sz);
 485		de->rx_ring[rx_tail].addr1 = cpu_to_le32(mapping);
 486		wmb();
 487		de->rx_ring[rx_tail].opts1 = cpu_to_le32(DescOwn);
 488		rx_tail = NEXT_RX(rx_tail);
 489	}
 490
 491	if (!rx_work)
 492		netdev_warn(de->dev, "rx work limit reached\n");
 493
 494	de->rx_tail = rx_tail;
 495}
 496
 497static irqreturn_t de_interrupt (int irq, void *dev_instance)
 498{
 499	struct net_device *dev = dev_instance;
 500	struct de_private *de = netdev_priv(dev);
 501	u32 status;
 502
 503	status = dr32(MacStatus);
 504	if ((!(status & (IntrOK|IntrErr))) || (status == 0xFFFF))
 505		return IRQ_NONE;
 506
 507	netif_dbg(de, intr, dev, "intr, status %08x mode %08x desc %u/%u/%u\n",
 508		  status, dr32(MacMode),
 509		  de->rx_tail, de->tx_head, de->tx_tail);
 510
 511	dw32(MacStatus, status);
 512
 513	if (status & (RxIntr | RxEmpty)) {
 514		de_rx(de);
 515		if (status & RxEmpty)
 516			dw32(RxPoll, NormalRxPoll);
 517	}
 518
 519	spin_lock(&de->lock);
 520
 521	if (status & (TxIntr | TxEmpty))
 522		de_tx(de);
 523
 524	if (status & (LinkPass | LinkFail))
 525		de_media_interrupt(de, status);
 526
 527	spin_unlock(&de->lock);
 528
 529	if (status & PciErr) {
 530		u16 pci_status;
 531
 532		pci_read_config_word(de->pdev, PCI_STATUS, &pci_status);
 533		pci_write_config_word(de->pdev, PCI_STATUS, pci_status);
 534		netdev_err(de->dev,
 535			   "PCI bus error, status=%08x, PCI status=%04x\n",
 536			   status, pci_status);
 537	}
 538
 539	return IRQ_HANDLED;
 540}
 541
 542static void de_tx (struct de_private *de)
 543{
 544	unsigned tx_head = de->tx_head;
 545	unsigned tx_tail = de->tx_tail;
 546
 547	while (tx_tail != tx_head) {
 548		struct sk_buff *skb;
 549		u32 status;
 550
 551		rmb();
 552		status = le32_to_cpu(de->tx_ring[tx_tail].opts1);
 553		if (status & DescOwn)
 554			break;
 555
 556		skb = de->tx_skb[tx_tail].skb;
 557		BUG_ON(!skb);
 558		if (unlikely(skb == DE_DUMMY_SKB))
 559			goto next;
 560
 561		if (unlikely(skb == DE_SETUP_SKB)) {
 562			pci_unmap_single(de->pdev, de->tx_skb[tx_tail].mapping,
 563					 sizeof(de->setup_frame), PCI_DMA_TODEVICE);
 564			goto next;
 565		}
 566
 567		pci_unmap_single(de->pdev, de->tx_skb[tx_tail].mapping,
 568				 skb->len, PCI_DMA_TODEVICE);
 569
 570		if (status & LastFrag) {
 571			if (status & TxError) {
 572				netif_dbg(de, tx_err, de->dev,
 573					  "tx err, status 0x%x\n",
 574					  status);
 575				de->net_stats.tx_errors++;
 576				if (status & TxOWC)
 577					de->net_stats.tx_window_errors++;
 578				if (status & TxMaxCol)
 579					de->net_stats.tx_aborted_errors++;
 580				if (status & TxLinkFail)
 581					de->net_stats.tx_carrier_errors++;
 582				if (status & TxFIFOUnder)
 583					de->net_stats.tx_fifo_errors++;
 584			} else {
 585				de->net_stats.tx_packets++;
 586				de->net_stats.tx_bytes += skb->len;
 587				netif_dbg(de, tx_done, de->dev,
 588					  "tx done, slot %d\n", tx_tail);
 589			}
 590			dev_kfree_skb_irq(skb);
 591		}
 592
 593next:
 594		de->tx_skb[tx_tail].skb = NULL;
 595
 596		tx_tail = NEXT_TX(tx_tail);
 597	}
 598
 599	de->tx_tail = tx_tail;
 600
 601	if (netif_queue_stopped(de->dev) && (TX_BUFFS_AVAIL(de) > (DE_TX_RING_SIZE / 4)))
 602		netif_wake_queue(de->dev);
 603}
 604
 605static netdev_tx_t de_start_xmit (struct sk_buff *skb,
 606					struct net_device *dev)
 607{
 608	struct de_private *de = netdev_priv(dev);
 609	unsigned int entry, tx_free;
 610	u32 mapping, len, flags = FirstFrag | LastFrag;
 611	struct de_desc *txd;
 612
 613	spin_lock_irq(&de->lock);
 614
 615	tx_free = TX_BUFFS_AVAIL(de);
 616	if (tx_free == 0) {
 617		netif_stop_queue(dev);
 618		spin_unlock_irq(&de->lock);
 619		return NETDEV_TX_BUSY;
 620	}
 621	tx_free--;
 622
 623	entry = de->tx_head;
 624
 625	txd = &de->tx_ring[entry];
 626
 627	len = skb->len;
 628	mapping = pci_map_single(de->pdev, skb->data, len, PCI_DMA_TODEVICE);
 629	if (entry == (DE_TX_RING_SIZE - 1))
 630		flags |= RingEnd;
 631	if (!tx_free || (tx_free == (DE_TX_RING_SIZE / 2)))
 632		flags |= TxSwInt;
 633	flags |= len;
 634	txd->opts2 = cpu_to_le32(flags);
 635	txd->addr1 = cpu_to_le32(mapping);
 636
 637	de->tx_skb[entry].skb = skb;
 638	de->tx_skb[entry].mapping = mapping;
 639	wmb();
 640
 641	txd->opts1 = cpu_to_le32(DescOwn);
 642	wmb();
 643
 644	de->tx_head = NEXT_TX(entry);
 645	netif_dbg(de, tx_queued, dev, "tx queued, slot %d, skblen %d\n",
 646		  entry, skb->len);
 647
 648	if (tx_free == 0)
 649		netif_stop_queue(dev);
 650
 651	spin_unlock_irq(&de->lock);
 652
 653	/* Trigger an immediate transmit demand. */
 654	dw32(TxPoll, NormalTxPoll);
 655
 656	return NETDEV_TX_OK;
 657}
 658
 659/* Set or clear the multicast filter for this adaptor.
 660   Note that we only use exclusion around actually queueing the
 661   new frame, not around filling de->setup_frame.  This is non-deterministic
 662   when re-entered but still correct. */
 663
 664#undef set_bit_le
 665#define set_bit_le(i,p) do { ((char *)(p))[(i)/8] |= (1<<((i)%8)); } while(0)
 666
 667static void build_setup_frame_hash(u16 *setup_frm, struct net_device *dev)
 668{
 669	struct de_private *de = netdev_priv(dev);
 670	u16 hash_table[32];
 671	struct netdev_hw_addr *ha;
 672	int i;
 673	u16 *eaddrs;
 674
 675	memset(hash_table, 0, sizeof(hash_table));
 676	set_bit_le(255, hash_table); 			/* Broadcast entry */
 677	/* This should work on big-endian machines as well. */
 678	netdev_for_each_mc_addr(ha, dev) {
 679		int index = ether_crc_le(ETH_ALEN, ha->addr) & 0x1ff;
 680
 681		set_bit_le(index, hash_table);
 682	}
 683
 684	for (i = 0; i < 32; i++) {
 685		*setup_frm++ = hash_table[i];
 686		*setup_frm++ = hash_table[i];
 687	}
 688	setup_frm = &de->setup_frame[13*6];
 689
 690	/* Fill the final entry with our physical address. */
 691	eaddrs = (u16 *)dev->dev_addr;
 692	*setup_frm++ = eaddrs[0]; *setup_frm++ = eaddrs[0];
 693	*setup_frm++ = eaddrs[1]; *setup_frm++ = eaddrs[1];
 694	*setup_frm++ = eaddrs[2]; *setup_frm++ = eaddrs[2];
 695}
 696
 697static void build_setup_frame_perfect(u16 *setup_frm, struct net_device *dev)
 698{
 699	struct de_private *de = netdev_priv(dev);
 700	struct netdev_hw_addr *ha;
 701	u16 *eaddrs;
 702
 703	/* We have <= 14 addresses so we can use the wonderful
 704	   16 address perfect filtering of the Tulip. */
 705	netdev_for_each_mc_addr(ha, dev) {
 706		eaddrs = (u16 *) ha->addr;
 707		*setup_frm++ = *eaddrs; *setup_frm++ = *eaddrs++;
 708		*setup_frm++ = *eaddrs; *setup_frm++ = *eaddrs++;
 709		*setup_frm++ = *eaddrs; *setup_frm++ = *eaddrs++;
 710	}
 711	/* Fill the unused entries with the broadcast address. */
 712	memset(setup_frm, 0xff, (15 - netdev_mc_count(dev)) * 12);
 713	setup_frm = &de->setup_frame[15*6];
 714
 715	/* Fill the final entry with our physical address. */
 716	eaddrs = (u16 *)dev->dev_addr;
 717	*setup_frm++ = eaddrs[0]; *setup_frm++ = eaddrs[0];
 718	*setup_frm++ = eaddrs[1]; *setup_frm++ = eaddrs[1];
 719	*setup_frm++ = eaddrs[2]; *setup_frm++ = eaddrs[2];
 720}
 721
 722
 723static void __de_set_rx_mode (struct net_device *dev)
 724{
 725	struct de_private *de = netdev_priv(dev);
 726	u32 macmode;
 727	unsigned int entry;
 728	u32 mapping;
 729	struct de_desc *txd;
 730	struct de_desc *dummy_txd = NULL;
 731
 732	macmode = dr32(MacMode) & ~(AcceptAllMulticast | AcceptAllPhys);
 733
 734	if (dev->flags & IFF_PROMISC) {	/* Set promiscuous. */
 735		macmode |= AcceptAllMulticast | AcceptAllPhys;
 736		goto out;
 737	}
 738
 739	if ((netdev_mc_count(dev) > 1000) || (dev->flags & IFF_ALLMULTI)) {
 740		/* Too many to filter well -- accept all multicasts. */
 741		macmode |= AcceptAllMulticast;
 742		goto out;
 743	}
 744
 745	/* Note that only the low-address shortword of setup_frame is valid!
 746	   The values are doubled for big-endian architectures. */
 747	if (netdev_mc_count(dev) > 14)	/* Must use a multicast hash table. */
 748		build_setup_frame_hash (de->setup_frame, dev);
 749	else
 750		build_setup_frame_perfect (de->setup_frame, dev);
 751
 752	/*
 753	 * Now add this frame to the Tx list.
 754	 */
 755
 756	entry = de->tx_head;
 757
 758	/* Avoid a chip errata by prefixing a dummy entry. */
 759	if (entry != 0) {
 760		de->tx_skb[entry].skb = DE_DUMMY_SKB;
 761
 762		dummy_txd = &de->tx_ring[entry];
 763		dummy_txd->opts2 = (entry == (DE_TX_RING_SIZE - 1)) ?
 764				   cpu_to_le32(RingEnd) : 0;
 765		dummy_txd->addr1 = 0;
 766
 767		/* Must set DescOwned later to avoid race with chip */
 768
 769		entry = NEXT_TX(entry);
 770	}
 771
 772	de->tx_skb[entry].skb = DE_SETUP_SKB;
 773	de->tx_skb[entry].mapping = mapping =
 774	    pci_map_single (de->pdev, de->setup_frame,
 775			    sizeof (de->setup_frame), PCI_DMA_TODEVICE);
 776
 777	/* Put the setup frame on the Tx list. */
 778	txd = &de->tx_ring[entry];
 779	if (entry == (DE_TX_RING_SIZE - 1))
 780		txd->opts2 = cpu_to_le32(SetupFrame | RingEnd | sizeof (de->setup_frame));
 781	else
 782		txd->opts2 = cpu_to_le32(SetupFrame | sizeof (de->setup_frame));
 783	txd->addr1 = cpu_to_le32(mapping);
 784	wmb();
 785
 786	txd->opts1 = cpu_to_le32(DescOwn);
 787	wmb();
 788
 789	if (dummy_txd) {
 790		dummy_txd->opts1 = cpu_to_le32(DescOwn);
 791		wmb();
 792	}
 793
 794	de->tx_head = NEXT_TX(entry);
 795
 796	if (TX_BUFFS_AVAIL(de) == 0)
 797		netif_stop_queue(dev);
 798
 799	/* Trigger an immediate transmit demand. */
 800	dw32(TxPoll, NormalTxPoll);
 801
 802out:
 803	if (macmode != dr32(MacMode))
 804		dw32(MacMode, macmode);
 805}
 806
 807static void de_set_rx_mode (struct net_device *dev)
 808{
 809	unsigned long flags;
 810	struct de_private *de = netdev_priv(dev);
 811
 812	spin_lock_irqsave (&de->lock, flags);
 813	__de_set_rx_mode(dev);
 814	spin_unlock_irqrestore (&de->lock, flags);
 815}
 816
 817static inline void de_rx_missed(struct de_private *de, u32 rx_missed)
 818{
 819	if (unlikely(rx_missed & RxMissedOver))
 820		de->net_stats.rx_missed_errors += RxMissedMask;
 821	else
 822		de->net_stats.rx_missed_errors += (rx_missed & RxMissedMask);
 823}
 824
 825static void __de_get_stats(struct de_private *de)
 826{
 827	u32 tmp = dr32(RxMissed); /* self-clearing */
 828
 829	de_rx_missed(de, tmp);
 830}
 831
 832static struct net_device_stats *de_get_stats(struct net_device *dev)
 833{
 834	struct de_private *de = netdev_priv(dev);
 835
 836	/* The chip only need report frame silently dropped. */
 837	spin_lock_irq(&de->lock);
 838 	if (netif_running(dev) && netif_device_present(dev))
 839 		__de_get_stats(de);
 840	spin_unlock_irq(&de->lock);
 841
 842	return &de->net_stats;
 843}
 844
 845static inline int de_is_running (struct de_private *de)
 846{
 847	return (dr32(MacStatus) & (RxState | TxState)) ? 1 : 0;
 848}
 849
 850static void de_stop_rxtx (struct de_private *de)
 851{
 852	u32 macmode;
 853	unsigned int i = 1300/100;
 854
 855	macmode = dr32(MacMode);
 856	if (macmode & RxTx) {
 857		dw32(MacMode, macmode & ~RxTx);
 858		dr32(MacMode);
 859	}
 860
 861	/* wait until in-flight frame completes.
 862	 * Max time @ 10BT: 1500*8b/10Mbps == 1200us (+ 100us margin)
 863	 * Typically expect this loop to end in < 50 us on 100BT.
 864	 */
 865	while (--i) {
 866		if (!de_is_running(de))
 867			return;
 868		udelay(100);
 869	}
 870
 871	netdev_warn(de->dev, "timeout expired, stopping DMA\n");
 872}
 873
 874static inline void de_start_rxtx (struct de_private *de)
 875{
 876	u32 macmode;
 877
 878	macmode = dr32(MacMode);
 879	if ((macmode & RxTx) != RxTx) {
 880		dw32(MacMode, macmode | RxTx);
 881		dr32(MacMode);
 882	}
 883}
 884
 885static void de_stop_hw (struct de_private *de)
 886{
 887
 888	udelay(5);
 889	dw32(IntrMask, 0);
 890
 891	de_stop_rxtx(de);
 892
 893	dw32(MacStatus, dr32(MacStatus));
 894
 895	udelay(10);
 896
 897	de->rx_tail = 0;
 898	de->tx_head = de->tx_tail = 0;
 899}
 900
 901static void de_link_up(struct de_private *de)
 902{
 903	if (!netif_carrier_ok(de->dev)) {
 904		netif_carrier_on(de->dev);
 905		netif_info(de, link, de->dev, "link up, media %s\n",
 906			   media_name[de->media_type]);
 907	}
 908}
 909
 910static void de_link_down(struct de_private *de)
 911{
 912	if (netif_carrier_ok(de->dev)) {
 913		netif_carrier_off(de->dev);
 914		netif_info(de, link, de->dev, "link down\n");
 915	}
 916}
 917
 918static void de_set_media (struct de_private *de)
 919{
 920	unsigned media = de->media_type;
 921	u32 macmode = dr32(MacMode);
 922
 923	if (de_is_running(de))
 924		netdev_warn(de->dev, "chip is running while changing media!\n");
 925
 926	if (de->de21040)
 927		dw32(CSR11, FULL_DUPLEX_MAGIC);
 928	dw32(CSR13, 0); /* Reset phy */
 929	dw32(CSR14, de->media[media].csr14);
 930	dw32(CSR15, de->media[media].csr15);
 931	dw32(CSR13, de->media[media].csr13);
 932
 933	/* must delay 10ms before writing to other registers,
 934	 * especially CSR6
 935	 */
 936	mdelay(10);
 937
 938	if (media == DE_MEDIA_TP_FD)
 939		macmode |= FullDuplex;
 940	else
 941		macmode &= ~FullDuplex;
 942
 943	netif_info(de, link, de->dev, "set link %s\n", media_name[media]);
 944	netif_info(de, hw, de->dev, "mode 0x%x, sia 0x%x,0x%x,0x%x,0x%x\n",
 945		   dr32(MacMode), dr32(SIAStatus),
 946		   dr32(CSR13), dr32(CSR14), dr32(CSR15));
 947	netif_info(de, hw, de->dev, "set mode 0x%x, set sia 0x%x,0x%x,0x%x\n",
 948		   macmode, de->media[media].csr13,
 949		   de->media[media].csr14, de->media[media].csr15);
 950	if (macmode != dr32(MacMode))
 951		dw32(MacMode, macmode);
 952}
 953
 954static void de_next_media (struct de_private *de, const u32 *media,
 955			   unsigned int n_media)
 956{
 957	unsigned int i;
 958
 959	for (i = 0; i < n_media; i++) {
 960		if (de_ok_to_advertise(de, media[i])) {
 961			de->media_type = media[i];
 962			return;
 963		}
 964	}
 965}
 966
 967static void de21040_media_timer (unsigned long data)
 968{
 969	struct de_private *de = (struct de_private *) data;
 970	struct net_device *dev = de->dev;
 971	u32 status = dr32(SIAStatus);
 972	unsigned int carrier;
 973	unsigned long flags;
 974
 975	carrier = (status & NetCxnErr) ? 0 : 1;
 976
 977	if (carrier) {
 978		if (de->media_type != DE_MEDIA_AUI && (status & LinkFailStatus))
 979			goto no_link_yet;
 980
 981		de->media_timer.expires = jiffies + DE_TIMER_LINK;
 982		add_timer(&de->media_timer);
 983		if (!netif_carrier_ok(dev))
 984			de_link_up(de);
 985		else
 986			netif_info(de, timer, dev, "%s link ok, status %x\n",
 987				   media_name[de->media_type], status);
 988		return;
 989	}
 990
 991	de_link_down(de);
 992
 993	if (de->media_lock)
 994		return;
 995
 996	if (de->media_type == DE_MEDIA_AUI) {
 997		static const u32 next_state = DE_MEDIA_TP;
 998		de_next_media(de, &next_state, 1);
 999	} else {
1000		static const u32 next_state = DE_MEDIA_AUI;
1001		de_next_media(de, &next_state, 1);
1002	}
1003
1004	spin_lock_irqsave(&de->lock, flags);
1005	de_stop_rxtx(de);
1006	spin_unlock_irqrestore(&de->lock, flags);
1007	de_set_media(de);
1008	de_start_rxtx(de);
1009
1010no_link_yet:
1011	de->media_timer.expires = jiffies + DE_TIMER_NO_LINK;
1012	add_timer(&de->media_timer);
1013
1014	netif_info(de, timer, dev, "no link, trying media %s, status %x\n",
1015		   media_name[de->media_type], status);
1016}
1017
1018static unsigned int de_ok_to_advertise (struct de_private *de, u32 new_media)
1019{
1020	switch (new_media) {
1021	case DE_MEDIA_TP_AUTO:
1022		if (!(de->media_advertise & ADVERTISED_Autoneg))
1023			return 0;
1024		if (!(de->media_advertise & (ADVERTISED_10baseT_Half | ADVERTISED_10baseT_Full)))
1025			return 0;
1026		break;
1027	case DE_MEDIA_BNC:
1028		if (!(de->media_advertise & ADVERTISED_BNC))
1029			return 0;
1030		break;
1031	case DE_MEDIA_AUI:
1032		if (!(de->media_advertise & ADVERTISED_AUI))
1033			return 0;
1034		break;
1035	case DE_MEDIA_TP:
1036		if (!(de->media_advertise & ADVERTISED_10baseT_Half))
1037			return 0;
1038		break;
1039	case DE_MEDIA_TP_FD:
1040		if (!(de->media_advertise & ADVERTISED_10baseT_Full))
1041			return 0;
1042		break;
1043	}
1044
1045	return 1;
1046}
1047
1048static void de21041_media_timer (unsigned long data)
1049{
1050	struct de_private *de = (struct de_private *) data;
1051	struct net_device *dev = de->dev;
1052	u32 status = dr32(SIAStatus);
1053	unsigned int carrier;
1054	unsigned long flags;
1055
1056	/* clear port active bits */
1057	dw32(SIAStatus, NonselPortActive | SelPortActive);
1058
1059	carrier = (status & NetCxnErr) ? 0 : 1;
1060
1061	if (carrier) {
1062		if ((de->media_type == DE_MEDIA_TP_AUTO ||
1063		     de->media_type == DE_MEDIA_TP ||
1064		     de->media_type == DE_MEDIA_TP_FD) &&
1065		    (status & LinkFailStatus))
1066			goto no_link_yet;
1067
1068		de->media_timer.expires = jiffies + DE_TIMER_LINK;
1069		add_timer(&de->media_timer);
1070		if (!netif_carrier_ok(dev))
1071			de_link_up(de);
1072		else
1073			netif_info(de, timer, dev,
1074				   "%s link ok, mode %x status %x\n",
1075				   media_name[de->media_type],
1076				   dr32(MacMode), status);
1077		return;
1078	}
1079
1080	de_link_down(de);
1081
1082	/* if media type locked, don't switch media */
1083	if (de->media_lock)
1084		goto set_media;
1085
1086	/* if activity detected, use that as hint for new media type */
1087	if (status & NonselPortActive) {
1088		unsigned int have_media = 1;
1089
1090		/* if AUI/BNC selected, then activity is on TP port */
1091		if (de->media_type == DE_MEDIA_AUI ||
1092		    de->media_type == DE_MEDIA_BNC) {
1093			if (de_ok_to_advertise(de, DE_MEDIA_TP_AUTO))
1094				de->media_type = DE_MEDIA_TP_AUTO;
1095			else
1096				have_media = 0;
1097		}
1098
1099		/* TP selected.  If there is only TP and BNC, then it's BNC */
1100		else if (((de->media_supported & DE_AUI_BNC) == SUPPORTED_BNC) &&
1101			 de_ok_to_advertise(de, DE_MEDIA_BNC))
1102			de->media_type = DE_MEDIA_BNC;
1103
1104		/* TP selected.  If there is only TP and AUI, then it's AUI */
1105		else if (((de->media_supported & DE_AUI_BNC) == SUPPORTED_AUI) &&
1106			 de_ok_to_advertise(de, DE_MEDIA_AUI))
1107			de->media_type = DE_MEDIA_AUI;
1108
1109		/* otherwise, ignore the hint */
1110		else
1111			have_media = 0;
1112
1113		if (have_media)
1114			goto set_media;
1115	}
1116
1117	/*
1118	 * Absent or ambiguous activity hint, move to next advertised
1119	 * media state.  If de->media_type is left unchanged, this
1120	 * simply resets the PHY and reloads the current media settings.
1121	 */
1122	if (de->media_type == DE_MEDIA_AUI) {
1123		static const u32 next_states[] = {
1124			DE_MEDIA_BNC, DE_MEDIA_TP_AUTO
1125		};
1126		de_next_media(de, next_states, ARRAY_SIZE(next_states));
1127	} else if (de->media_type == DE_MEDIA_BNC) {
1128		static const u32 next_states[] = {
1129			DE_MEDIA_TP_AUTO, DE_MEDIA_AUI
1130		};
1131		de_next_media(de, next_states, ARRAY_SIZE(next_states));
1132	} else {
1133		static const u32 next_states[] = {
1134			DE_MEDIA_AUI, DE_MEDIA_BNC, DE_MEDIA_TP_AUTO
1135		};
1136		de_next_media(de, next_states, ARRAY_SIZE(next_states));
1137	}
1138
1139set_media:
1140	spin_lock_irqsave(&de->lock, flags);
1141	de_stop_rxtx(de);
1142	spin_unlock_irqrestore(&de->lock, flags);
1143	de_set_media(de);
1144	de_start_rxtx(de);
1145
1146no_link_yet:
1147	de->media_timer.expires = jiffies + DE_TIMER_NO_LINK;
1148	add_timer(&de->media_timer);
1149
1150	netif_info(de, timer, dev, "no link, trying media %s, status %x\n",
1151		   media_name[de->media_type], status);
1152}
1153
1154static void de_media_interrupt (struct de_private *de, u32 status)
1155{
1156	if (status & LinkPass) {
1157		/* Ignore if current media is AUI or BNC and we can't use TP */
1158		if ((de->media_type == DE_MEDIA_AUI ||
1159		     de->media_type == DE_MEDIA_BNC) &&
1160		    (de->media_lock ||
1161		     !de_ok_to_advertise(de, DE_MEDIA_TP_AUTO)))
1162			return;
1163		/* If current media is not TP, change it to TP */
1164		if ((de->media_type == DE_MEDIA_AUI ||
1165		     de->media_type == DE_MEDIA_BNC)) {
1166			de->media_type = DE_MEDIA_TP_AUTO;
1167			de_stop_rxtx(de);
1168			de_set_media(de);
1169			de_start_rxtx(de);
1170		}
1171		de_link_up(de);
1172		mod_timer(&de->media_timer, jiffies + DE_TIMER_LINK);
1173		return;
1174	}
1175
1176	BUG_ON(!(status & LinkFail));
1177	/* Mark the link as down only if current media is TP */
1178	if (netif_carrier_ok(de->dev) && de->media_type != DE_MEDIA_AUI &&
1179	    de->media_type != DE_MEDIA_BNC) {
1180		de_link_down(de);
1181		mod_timer(&de->media_timer, jiffies + DE_TIMER_NO_LINK);
1182	}
1183}
1184
1185static int de_reset_mac (struct de_private *de)
1186{
1187	u32 status, tmp;
1188
1189	/*
1190	 * Reset MAC.  de4x5.c and tulip.c examined for "advice"
1191	 * in this area.
1192	 */
1193
1194	if (dr32(BusMode) == 0xffffffff)
1195		return -EBUSY;
1196
1197	/* Reset the chip, holding bit 0 set at least 50 PCI cycles. */
1198	dw32 (BusMode, CmdReset);
1199	mdelay (1);
1200
1201	dw32 (BusMode, de_bus_mode);
1202	mdelay (1);
1203
1204	for (tmp = 0; tmp < 5; tmp++) {
1205		dr32 (BusMode);
1206		mdelay (1);
1207	}
1208
1209	mdelay (1);
1210
1211	status = dr32(MacStatus);
1212	if (status & (RxState | TxState))
1213		return -EBUSY;
1214	if (status == 0xffffffff)
1215		return -ENODEV;
1216	return 0;
1217}
1218
1219static void de_adapter_wake (struct de_private *de)
1220{
1221	u32 pmctl;
1222
1223	if (de->de21040)
1224		return;
1225
1226	pci_read_config_dword(de->pdev, PCIPM, &pmctl);
1227	if (pmctl & PM_Mask) {
1228		pmctl &= ~PM_Mask;
1229		pci_write_config_dword(de->pdev, PCIPM, pmctl);
1230
1231		/* de4x5.c delays, so we do too */
1232		msleep(10);
1233	}
1234}
1235
1236static void de_adapter_sleep (struct de_private *de)
1237{
1238	u32 pmctl;
1239
1240	if (de->de21040)
1241		return;
1242
1243	dw32(CSR13, 0); /* Reset phy */
1244	pci_read_config_dword(de->pdev, PCIPM, &pmctl);
1245	pmctl |= PM_Sleep;
1246	pci_write_config_dword(de->pdev, PCIPM, pmctl);
1247}
1248
1249static int de_init_hw (struct de_private *de)
1250{
1251	struct net_device *dev = de->dev;
1252	u32 macmode;
1253	int rc;
1254
1255	de_adapter_wake(de);
1256
1257	macmode = dr32(MacMode) & ~MacModeClear;
1258
1259	rc = de_reset_mac(de);
1260	if (rc)
1261		return rc;
1262
1263	de_set_media(de); /* reset phy */
1264
1265	dw32(RxRingAddr, de->ring_dma);
1266	dw32(TxRingAddr, de->ring_dma + (sizeof(struct de_desc) * DE_RX_RING_SIZE));
1267
1268	dw32(MacMode, RxTx | macmode);
1269
1270	dr32(RxMissed); /* self-clearing */
1271
1272	dw32(IntrMask, de_intr_mask);
1273
1274	de_set_rx_mode(dev);
1275
1276	return 0;
1277}
1278
1279static int de_refill_rx (struct de_private *de)
1280{
1281	unsigned i;
1282
1283	for (i = 0; i < DE_RX_RING_SIZE; i++) {
1284		struct sk_buff *skb;
1285
1286		skb = dev_alloc_skb(de->rx_buf_sz);
1287		if (!skb)
1288			goto err_out;
1289
1290		skb->dev = de->dev;
1291
1292		de->rx_skb[i].mapping = pci_map_single(de->pdev,
1293			skb->data, de->rx_buf_sz, PCI_DMA_FROMDEVICE);
1294		de->rx_skb[i].skb = skb;
1295
1296		de->rx_ring[i].opts1 = cpu_to_le32(DescOwn);
1297		if (i == (DE_RX_RING_SIZE - 1))
1298			de->rx_ring[i].opts2 =
1299				cpu_to_le32(RingEnd | de->rx_buf_sz);
1300		else
1301			de->rx_ring[i].opts2 = cpu_to_le32(de->rx_buf_sz);
1302		de->rx_ring[i].addr1 = cpu_to_le32(de->rx_skb[i].mapping);
1303		de->rx_ring[i].addr2 = 0;
1304	}
1305
1306	return 0;
1307
1308err_out:
1309	de_clean_rings(de);
1310	return -ENOMEM;
1311}
1312
1313static int de_init_rings (struct de_private *de)
1314{
1315	memset(de->tx_ring, 0, sizeof(struct de_desc) * DE_TX_RING_SIZE);
1316	de->tx_ring[DE_TX_RING_SIZE - 1].opts2 = cpu_to_le32(RingEnd);
1317
1318	de->rx_tail = 0;
1319	de->tx_head = de->tx_tail = 0;
1320
1321	return de_refill_rx (de);
1322}
1323
1324static int de_alloc_rings (struct de_private *de)
1325{
1326	de->rx_ring = pci_alloc_consistent(de->pdev, DE_RING_BYTES, &de->ring_dma);
1327	if (!de->rx_ring)
1328		return -ENOMEM;
1329	de->tx_ring = &de->rx_ring[DE_RX_RING_SIZE];
1330	return de_init_rings(de);
1331}
1332
1333static void de_clean_rings (struct de_private *de)
1334{
1335	unsigned i;
1336
1337	memset(de->rx_ring, 0, sizeof(struct de_desc) * DE_RX_RING_SIZE);
1338	de->rx_ring[DE_RX_RING_SIZE - 1].opts2 = cpu_to_le32(RingEnd);
1339	wmb();
1340	memset(de->tx_ring, 0, sizeof(struct de_desc) * DE_TX_RING_SIZE);
1341	de->tx_ring[DE_TX_RING_SIZE - 1].opts2 = cpu_to_le32(RingEnd);
1342	wmb();
1343
1344	for (i = 0; i < DE_RX_RING_SIZE; i++) {
1345		if (de->rx_skb[i].skb) {
1346			pci_unmap_single(de->pdev, de->rx_skb[i].mapping,
1347					 de->rx_buf_sz, PCI_DMA_FROMDEVICE);
1348			dev_kfree_skb(de->rx_skb[i].skb);
1349		}
1350	}
1351
1352	for (i = 0; i < DE_TX_RING_SIZE; i++) {
1353		struct sk_buff *skb = de->tx_skb[i].skb;
1354		if ((skb) && (skb != DE_DUMMY_SKB)) {
1355			if (skb != DE_SETUP_SKB) {
1356				de->net_stats.tx_dropped++;
1357				pci_unmap_single(de->pdev,
1358					de->tx_skb[i].mapping,
1359					skb->len, PCI_DMA_TODEVICE);
1360				dev_kfree_skb(skb);
1361			} else {
1362				pci_unmap_single(de->pdev,
1363					de->tx_skb[i].mapping,
1364					sizeof(de->setup_frame),
1365					PCI_DMA_TODEVICE);
1366			}
1367		}
1368	}
1369
1370	memset(&de->rx_skb, 0, sizeof(struct ring_info) * DE_RX_RING_SIZE);
1371	memset(&de->tx_skb, 0, sizeof(struct ring_info) * DE_TX_RING_SIZE);
1372}
1373
1374static void de_free_rings (struct de_private *de)
1375{
1376	de_clean_rings(de);
1377	pci_free_consistent(de->pdev, DE_RING_BYTES, de->rx_ring, de->ring_dma);
1378	de->rx_ring = NULL;
1379	de->tx_ring = NULL;
1380}
1381
1382static int de_open (struct net_device *dev)
1383{
1384	struct de_private *de = netdev_priv(dev);
1385	int rc;
1386
1387	netif_dbg(de, ifup, dev, "enabling interface\n");
1388
1389	de->rx_buf_sz = (dev->mtu <= 1500 ? PKT_BUF_SZ : dev->mtu + 32);
1390
1391	rc = de_alloc_rings(de);
1392	if (rc) {
1393		netdev_err(dev, "ring allocation failure, err=%d\n", rc);
1394		return rc;
1395	}
1396
1397	dw32(IntrMask, 0);
1398
1399	rc = request_irq(dev->irq, de_interrupt, IRQF_SHARED, dev->name, dev);
1400	if (rc) {
1401		netdev_err(dev, "IRQ %d request failure, err=%d\n",
1402			   dev->irq, rc);
1403		goto err_out_free;
1404	}
1405
1406	rc = de_init_hw(de);
1407	if (rc) {
1408		netdev_err(dev, "h/w init failure, err=%d\n", rc);
1409		goto err_out_free_irq;
1410	}
1411
1412	netif_start_queue(dev);
1413	mod_timer(&de->media_timer, jiffies + DE_TIMER_NO_LINK);
1414
1415	return 0;
1416
1417err_out_free_irq:
1418	free_irq(dev->irq, dev);
1419err_out_free:
1420	de_free_rings(de);
1421	return rc;
1422}
1423
1424static int de_close (struct net_device *dev)
1425{
1426	struct de_private *de = netdev_priv(dev);
1427	unsigned long flags;
1428
1429	netif_dbg(de, ifdown, dev, "disabling interface\n");
1430
1431	del_timer_sync(&de->media_timer);
1432
1433	spin_lock_irqsave(&de->lock, flags);
1434	de_stop_hw(de);
1435	netif_stop_queue(dev);
1436	netif_carrier_off(dev);
1437	spin_unlock_irqrestore(&de->lock, flags);
1438
1439	free_irq(dev->irq, dev);
1440
1441	de_free_rings(de);
1442	de_adapter_sleep(de);
1443	return 0;
1444}
1445
1446static void de_tx_timeout (struct net_device *dev)
1447{
1448	struct de_private *de = netdev_priv(dev);
1449
1450	netdev_dbg(dev, "NIC status %08x mode %08x sia %08x desc %u/%u/%u\n",
1451		   dr32(MacStatus), dr32(MacMode), dr32(SIAStatus),
1452		   de->rx_tail, de->tx_head, de->tx_tail);
1453
1454	del_timer_sync(&de->media_timer);
1455
1456	disable_irq(dev->irq);
1457	spin_lock_irq(&de->lock);
1458
1459	de_stop_hw(de);
1460	netif_stop_queue(dev);
1461	netif_carrier_off(dev);
1462
1463	spin_unlock_irq(&de->lock);
1464	enable_irq(dev->irq);
1465
1466	/* Update the error counts. */
1467	__de_get_stats(de);
1468
1469	synchronize_irq(dev->irq);
1470	de_clean_rings(de);
1471
1472	de_init_rings(de);
1473
1474	de_init_hw(de);
1475
1476	netif_wake_queue(dev);
1477}
1478
1479static void __de_get_regs(struct de_private *de, u8 *buf)
1480{
1481	int i;
1482	u32 *rbuf = (u32 *)buf;
1483
1484	/* read all CSRs */
1485	for (i = 0; i < DE_NUM_REGS; i++)
1486		rbuf[i] = dr32(i * 8);
1487
1488	/* handle self-clearing RxMissed counter, CSR8 */
1489	de_rx_missed(de, rbuf[8]);
1490}
1491
1492static int __de_get_settings(struct de_private *de, struct ethtool_cmd *ecmd)
1493{
1494	ecmd->supported = de->media_supported;
1495	ecmd->transceiver = XCVR_INTERNAL;
1496	ecmd->phy_address = 0;
1497	ecmd->advertising = de->media_advertise;
1498
1499	switch (de->media_type) {
1500	case DE_MEDIA_AUI:
1501		ecmd->port = PORT_AUI;
1502		break;
1503	case DE_MEDIA_BNC:
1504		ecmd->port = PORT_BNC;
1505		break;
1506	default:
1507		ecmd->port = PORT_TP;
1508		break;
1509	}
1510
1511	ethtool_cmd_speed_set(ecmd, 10);
1512
1513	if (dr32(MacMode) & FullDuplex)
1514		ecmd->duplex = DUPLEX_FULL;
1515	else
1516		ecmd->duplex = DUPLEX_HALF;
1517
1518	if (de->media_lock)
1519		ecmd->autoneg = AUTONEG_DISABLE;
1520	else
1521		ecmd->autoneg = AUTONEG_ENABLE;
1522
1523	/* ignore maxtxpkt, maxrxpkt for now */
1524
1525	return 0;
1526}
1527
1528static int __de_set_settings(struct de_private *de, struct ethtool_cmd *ecmd)
1529{
1530	u32 new_media;
1531	unsigned int media_lock;
1532
1533	if (ethtool_cmd_speed(ecmd) != 10)
1534		return -EINVAL;
1535	if (ecmd->duplex != DUPLEX_HALF && ecmd->duplex != DUPLEX_FULL)
1536		return -EINVAL;
1537	if (ecmd->port != PORT_TP && ecmd->port != PORT_AUI && ecmd->port != PORT_BNC)
1538		return -EINVAL;
1539	if (de->de21040 && ecmd->port == PORT_BNC)
1540		return -EINVAL;
1541	if (ecmd->transceiver != XCVR_INTERNAL)
1542		return -EINVAL;
1543	if (ecmd->autoneg != AUTONEG_DISABLE && ecmd->autoneg != AUTONEG_ENABLE)
1544		return -EINVAL;
1545	if (ecmd->advertising & ~de->media_supported)
1546		return -EINVAL;
1547	if (ecmd->autoneg == AUTONEG_ENABLE &&
1548	    (!(ecmd->advertising & ADVERTISED_Autoneg)))
1549		return -EINVAL;
1550
1551	switch (ecmd->port) {
1552	case PORT_AUI:
1553		new_media = DE_MEDIA_AUI;
1554		if (!(ecmd->advertising & ADVERTISED_AUI))
1555			return -EINVAL;
1556		break;
1557	case PORT_BNC:
1558		new_media = DE_MEDIA_BNC;
1559		if (!(ecmd->advertising & ADVERTISED_BNC))
1560			return -EINVAL;
1561		break;
1562	default:
1563		if (ecmd->autoneg == AUTONEG_ENABLE)
1564			new_media = DE_MEDIA_TP_AUTO;
1565		else if (ecmd->duplex == DUPLEX_FULL)
1566			new_media = DE_MEDIA_TP_FD;
1567		else
1568			new_media = DE_MEDIA_TP;
1569		if (!(ecmd->advertising & ADVERTISED_TP))
1570			return -EINVAL;
1571		if (!(ecmd->advertising & (ADVERTISED_10baseT_Full | ADVERTISED_10baseT_Half)))
1572			return -EINVAL;
1573		break;
1574	}
1575
1576	media_lock = (ecmd->autoneg == AUTONEG_ENABLE) ? 0 : 1;
1577
1578	if ((new_media == de->media_type) &&
1579	    (media_lock == de->media_lock) &&
1580	    (ecmd->advertising == de->media_advertise))
1581		return 0; /* nothing to change */
1582
1583	de_link_down(de);
1584	mod_timer(&de->media_timer, jiffies + DE_TIMER_NO_LINK);
1585	de_stop_rxtx(de);
1586
1587	de->media_type = new_media;
1588	de->media_lock = media_lock;
1589	de->media_advertise = ecmd->advertising;
1590	de_set_media(de);
1591	if (netif_running(de->dev))
1592		de_start_rxtx(de);
1593
1594	return 0;
1595}
1596
1597static void de_get_drvinfo (struct net_device *dev,struct ethtool_drvinfo *info)
1598{
1599	struct de_private *de = netdev_priv(dev);
1600
1601	strcpy (info->driver, DRV_NAME);
1602	strcpy (info->version, DRV_VERSION);
1603	strcpy (info->bus_info, pci_name(de->pdev));
1604	info->eedump_len = DE_EEPROM_SIZE;
1605}
1606
1607static int de_get_regs_len(struct net_device *dev)
1608{
1609	return DE_REGS_SIZE;
1610}
1611
1612static int de_get_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
1613{
1614	struct de_private *de = netdev_priv(dev);
1615	int rc;
1616
1617	spin_lock_irq(&de->lock);
1618	rc = __de_get_settings(de, ecmd);
1619	spin_unlock_irq(&de->lock);
1620
1621	return rc;
1622}
1623
1624static int de_set_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
1625{
1626	struct de_private *de = netdev_priv(dev);
1627	int rc;
1628
1629	spin_lock_irq(&de->lock);
1630	rc = __de_set_settings(de, ecmd);
1631	spin_unlock_irq(&de->lock);
1632
1633	return rc;
1634}
1635
1636static u32 de_get_msglevel(struct net_device *dev)
1637{
1638	struct de_private *de = netdev_priv(dev);
1639
1640	return de->msg_enable;
1641}
1642
1643static void de_set_msglevel(struct net_device *dev, u32 msglvl)
1644{
1645	struct de_private *de = netdev_priv(dev);
1646
1647	de->msg_enable = msglvl;
1648}
1649
1650static int de_get_eeprom(struct net_device *dev,
1651			 struct ethtool_eeprom *eeprom, u8 *data)
1652{
1653	struct de_private *de = netdev_priv(dev);
1654
1655	if (!de->ee_data)
1656		return -EOPNOTSUPP;
1657	if ((eeprom->offset != 0) || (eeprom->magic != 0) ||
1658	    (eeprom->len != DE_EEPROM_SIZE))
1659		return -EINVAL;
1660	memcpy(data, de->ee_data, eeprom->len);
1661
1662	return 0;
1663}
1664
1665static int de_nway_reset(struct net_device *dev)
1666{
1667	struct de_private *de = netdev_priv(dev);
1668	u32 status;
1669
1670	if (de->media_type != DE_MEDIA_TP_AUTO)
1671		return -EINVAL;
1672	if (netif_carrier_ok(de->dev))
1673		de_link_down(de);
1674
1675	status = dr32(SIAStatus);
1676	dw32(SIAStatus, (status & ~NWayState) | NWayRestart);
1677	netif_info(de, link, dev, "link nway restart, status %x,%x\n",
1678		   status, dr32(SIAStatus));
1679	return 0;
1680}
1681
1682static void de_get_regs(struct net_device *dev, struct ethtool_regs *regs,
1683			void *data)
1684{
1685	struct de_private *de = netdev_priv(dev);
1686
1687	regs->version = (DE_REGS_VER << 2) | de->de21040;
1688
1689	spin_lock_irq(&de->lock);
1690	__de_get_regs(de, data);
1691	spin_unlock_irq(&de->lock);
1692}
1693
1694static const struct ethtool_ops de_ethtool_ops = {
1695	.get_link		= ethtool_op_get_link,
1696	.get_drvinfo		= de_get_drvinfo,
1697	.get_regs_len		= de_get_regs_len,
1698	.get_settings		= de_get_settings,
1699	.set_settings		= de_set_settings,
1700	.get_msglevel		= de_get_msglevel,
1701	.set_msglevel		= de_set_msglevel,
1702	.get_eeprom		= de_get_eeprom,
1703	.nway_reset		= de_nway_reset,
1704	.get_regs		= de_get_regs,
1705};
1706
1707static void __devinit de21040_get_mac_address (struct de_private *de)
1708{
1709	unsigned i;
1710
1711	dw32 (ROMCmd, 0);	/* Reset the pointer with a dummy write. */
1712	udelay(5);
1713
1714	for (i = 0; i < 6; i++) {
1715		int value, boguscnt = 100000;
1716		do {
1717			value = dr32(ROMCmd);
1718			rmb();
1719		} while (value < 0 && --boguscnt > 0);
1720		de->dev->dev_addr[i] = value;
1721		udelay(1);
1722		if (boguscnt <= 0)
1723			pr_warn("timeout reading 21040 MAC address byte %u\n",
1724				i);
1725	}
1726}
1727
1728static void __devinit de21040_get_media_info(struct de_private *de)
1729{
1730	unsigned int i;
1731
1732	de->media_type = DE_MEDIA_TP;
1733	de->media_supported |= SUPPORTED_TP | SUPPORTED_10baseT_Full |
1734			       SUPPORTED_10baseT_Half | SUPPORTED_AUI;
1735	de->media_advertise = de->media_supported;
1736
1737	for (i = 0; i < DE_MAX_MEDIA; i++) {
1738		switch (i) {
1739		case DE_MEDIA_AUI:
1740		case DE_MEDIA_TP:
1741		case DE_MEDIA_TP_FD:
1742			de->media[i].type = i;
1743			de->media[i].csr13 = t21040_csr13[i];
1744			de->media[i].csr14 = t21040_csr14[i];
1745			de->media[i].csr15 = t21040_csr15[i];
1746			break;
1747		default:
1748			de->media[i].type = DE_MEDIA_INVALID;
1749			break;
1750		}
1751	}
1752}
1753
1754/* Note: this routine returns extra data bits for size detection. */
1755static unsigned __devinit tulip_read_eeprom(void __iomem *regs, int location, int addr_len)
1756{
1757	int i;
1758	unsigned retval = 0;
1759	void __iomem *ee_addr = regs + ROMCmd;
1760	int read_cmd = location | (EE_READ_CMD << addr_len);
1761
1762	writel(EE_ENB & ~EE_CS, ee_addr);
1763	writel(EE_ENB, ee_addr);
1764
1765	/* Shift the read command bits out. */
1766	for (i = 4 + addr_len; i >= 0; i--) {
1767		short dataval = (read_cmd & (1 << i)) ? EE_DATA_WRITE : 0;
1768		writel(EE_ENB | dataval, ee_addr);
1769		readl(ee_addr);
1770		writel(EE_ENB | dataval | EE_SHIFT_CLK, ee_addr);
1771		readl(ee_addr);
1772		retval = (retval << 1) | ((readl(ee_addr) & EE_DATA_READ) ? 1 : 0);
1773	}
1774	writel(EE_ENB, ee_addr);
1775	readl(ee_addr);
1776
1777	for (i = 16; i > 0; i--) {
1778		writel(EE_ENB | EE_SHIFT_CLK, ee_addr);
1779		readl(ee_addr);
1780		retval = (retval << 1) | ((readl(ee_addr) & EE_DATA_READ) ? 1 : 0);
1781		writel(EE_ENB, ee_addr);
1782		readl(ee_addr);
1783	}
1784
1785	/* Terminate the EEPROM access. */
1786	writel(EE_ENB & ~EE_CS, ee_addr);
1787	return retval;
1788}
1789
1790static void __devinit de21041_get_srom_info (struct de_private *de)
1791{
1792	unsigned i, sa_offset = 0, ofs;
1793	u8 ee_data[DE_EEPROM_SIZE + 6] = {};
1794	unsigned ee_addr_size = tulip_read_eeprom(de->regs, 0xff, 8) & 0x40000 ? 8 : 6;
1795	struct de_srom_info_leaf *il;
1796	void *bufp;
1797
1798	/* download entire eeprom */
1799	for (i = 0; i < DE_EEPROM_WORDS; i++)
1800		((__le16 *)ee_data)[i] =
1801			cpu_to_le16(tulip_read_eeprom(de->regs, i, ee_addr_size));
1802
1803	/* DEC now has a specification but early board makers
1804	   just put the address in the first EEPROM locations. */
1805	/* This does  memcmp(eedata, eedata+16, 8) */
1806
1807#ifndef CONFIG_MIPS_COBALT
1808
1809	for (i = 0; i < 8; i ++)
1810		if (ee_data[i] != ee_data[16+i])
1811			sa_offset = 20;
1812
1813#endif
1814
1815	/* store MAC address */
1816	for (i = 0; i < 6; i ++)
1817		de->dev->dev_addr[i] = ee_data[i + sa_offset];
1818
1819	/* get offset of controller 0 info leaf.  ignore 2nd byte. */
1820	ofs = ee_data[SROMC0InfoLeaf];
1821	if (ofs >= (sizeof(ee_data) - sizeof(struct de_srom_info_leaf) - sizeof(struct de_srom_media_block)))
1822		goto bad_srom;
1823
1824	/* get pointer to info leaf */
1825	il = (struct de_srom_info_leaf *) &ee_data[ofs];
1826
1827	/* paranoia checks */
1828	if (il->n_blocks == 0)
1829		goto bad_srom;
1830	if ((sizeof(ee_data) - ofs) <
1831	    (sizeof(struct de_srom_info_leaf) + (sizeof(struct de_srom_media_block) * il->n_blocks)))
1832		goto bad_srom;
1833
1834	/* get default media type */
1835	switch (get_unaligned(&il->default_media)) {
1836	case 0x0001:  de->media_type = DE_MEDIA_BNC; break;
1837	case 0x0002:  de->media_type = DE_MEDIA_AUI; break;
1838	case 0x0204:  de->media_type = DE_MEDIA_TP_FD; break;
1839	default: de->media_type = DE_MEDIA_TP_AUTO; break;
1840	}
1841
1842	if (netif_msg_probe(de))
1843		pr_info("de%d: SROM leaf offset %u, default media %s\n",
1844		       de->board_idx, ofs, media_name[de->media_type]);
1845
1846	/* init SIA register values to defaults */
1847	for (i = 0; i < DE_MAX_MEDIA; i++) {
1848		de->media[i].type = DE_MEDIA_INVALID;
1849		de->media[i].csr13 = 0xffff;
1850		de->media[i].csr14 = 0xffff;
1851		de->media[i].csr15 = 0xffff;
1852	}
1853
1854	/* parse media blocks to see what medias are supported,
1855	 * and if any custom CSR values are provided
1856	 */
1857	bufp = ((void *)il) + sizeof(*il);
1858	for (i = 0; i < il->n_blocks; i++) {
1859		struct de_srom_media_block *ib = bufp;
1860		unsigned idx;
1861
1862		/* index based on media type in media block */
1863		switch(ib->opts & MediaBlockMask) {
1864		case 0: /* 10baseT */
1865			de->media_supported |= SUPPORTED_TP | SUPPORTED_10baseT_Half
1866					  | SUPPORTED_Autoneg;
1867			idx = DE_MEDIA_TP;
1868			de->media[DE_MEDIA_TP_AUTO].type = DE_MEDIA_TP_AUTO;
1869			break;
1870		case 1: /* BNC */
1871			de->media_supported |= SUPPORTED_BNC;
1872			idx = DE_MEDIA_BNC;
1873			break;
1874		case 2: /* AUI */
1875			de->media_supported |= SUPPORTED_AUI;
1876			idx = DE_MEDIA_AUI;
1877			break;
1878		case 4: /* 10baseT-FD */
1879			de->media_supported |= SUPPORTED_TP | SUPPORTED_10baseT_Full
1880					  | SUPPORTED_Autoneg;
1881			idx = DE_MEDIA_TP_FD;
1882			de->media[DE_MEDIA_TP_AUTO].type = DE_MEDIA_TP_AUTO;
1883			break;
1884		default:
1885			goto bad_srom;
1886		}
1887
1888		de->media[idx].type = idx;
1889
1890		if (netif_msg_probe(de))
1891			pr_info("de%d:   media block #%u: %s",
1892				de->board_idx, i,
1893				media_name[de->media[idx].type]);
1894
1895		bufp += sizeof (ib->opts);
1896
1897		if (ib->opts & MediaCustomCSRs) {
1898			de->media[idx].csr13 = get_unaligned(&ib->csr13);
1899			de->media[idx].csr14 = get_unaligned(&ib->csr14);
1900			de->media[idx].csr15 = get_unaligned(&ib->csr15);
1901			bufp += sizeof(ib->csr13) + sizeof(ib->csr14) +
1902				sizeof(ib->csr15);
1903
1904			if (netif_msg_probe(de))
1905				pr_cont(" (%x,%x,%x)\n",
1906					de->media[idx].csr13,
1907					de->media[idx].csr14,
1908					de->media[idx].csr15);
1909
1910		} else {
1911			if (netif_msg_probe(de))
1912				pr_cont("\n");
1913		}
1914
1915		if (bufp > ((void *)&ee_data[DE_EEPROM_SIZE - 3]))
1916			break;
1917	}
1918
1919	de->media_advertise = de->media_supported;
1920
1921fill_defaults:
1922	/* fill in defaults, for cases where custom CSRs not used */
1923	for (i = 0; i < DE_MAX_MEDIA; i++) {
1924		if (de->media[i].csr13 == 0xffff)
1925			de->media[i].csr13 = t21041_csr13[i];
1926		if (de->media[i].csr14 == 0xffff) {
1927			/* autonegotiation is broken at least on some chip
1928			   revisions - rev. 0x21 works, 0x11 does not */
1929			if (de->pdev->revision < 0x20)
1930				de->media[i].csr14 = t21041_csr14_brk[i];
1931			else
1932				de->media[i].csr14 = t21041_csr14[i];
1933		}
1934		if (de->media[i].csr15 == 0xffff)
1935			de->media[i].csr15 = t21041_csr15[i];
1936	}
1937
1938	de->ee_data = kmemdup(&ee_data[0], DE_EEPROM_SIZE, GFP_KERNEL);
1939
1940	return;
1941
1942bad_srom:
1943	/* for error cases, it's ok to assume we support all these */
1944	for (i = 0; i < DE_MAX_MEDIA; i++)
1945		de->media[i].type = i;
1946	de->media_supported =
1947		SUPPORTED_10baseT_Half |
1948		SUPPORTED_10baseT_Full |
1949		SUPPORTED_Autoneg |
1950		SUPPORTED_TP |
1951		SUPPORTED_AUI |
1952		SUPPORTED_BNC;
1953	goto fill_defaults;
1954}
1955
1956static const struct net_device_ops de_netdev_ops = {
1957	.ndo_open		= de_open,
1958	.ndo_stop		= de_close,
1959	.ndo_set_multicast_list = de_set_rx_mode,
1960	.ndo_start_xmit		= de_start_xmit,
1961	.ndo_get_stats		= de_get_stats,
1962	.ndo_tx_timeout 	= de_tx_timeout,
1963	.ndo_change_mtu		= eth_change_mtu,
1964	.ndo_set_mac_address 	= eth_mac_addr,
1965	.ndo_validate_addr	= eth_validate_addr,
1966};
1967
1968static int __devinit de_init_one (struct pci_dev *pdev,
1969				  const struct pci_device_id *ent)
1970{
1971	struct net_device *dev;
1972	struct de_private *de;
1973	int rc;
1974	void __iomem *regs;
1975	unsigned long pciaddr;
1976	static int board_idx = -1;
1977
1978	board_idx++;
1979
1980#ifndef MODULE
1981	if (board_idx == 0)
1982		pr_info("%s\n", version);
1983#endif
1984
1985	/* allocate a new ethernet device structure, and fill in defaults */
1986	dev = alloc_etherdev(sizeof(struct de_private));
1987	if (!dev)
1988		return -ENOMEM;
1989
1990	dev->netdev_ops = &de_netdev_ops;
1991	SET_NETDEV_DEV(dev, &pdev->dev);
1992	dev->ethtool_ops = &de_ethtool_ops;
1993	dev->watchdog_timeo = TX_TIMEOUT;
1994
1995	de = netdev_priv(dev);
1996	de->de21040 = ent->driver_data == 0 ? 1 : 0;
1997	de->pdev = pdev;
1998	de->dev = dev;
1999	de->msg_enable = (debug < 0 ? DE_DEF_MSG_ENABLE : debug);
2000	de->board_idx = board_idx;
2001	spin_lock_init (&de->lock);
2002	init_timer(&de->media_timer);
2003	if (de->de21040)
2004		de->media_timer.function = de21040_media_timer;
2005	else
2006		de->media_timer.function = de21041_media_timer;
2007	de->media_timer.data = (unsigned long) de;
2008
2009	netif_carrier_off(dev);
2010
2011	/* wake up device, assign resources */
2012	rc = pci_enable_device(pdev);
2013	if (rc)
2014		goto err_out_free;
2015
2016	/* reserve PCI resources to ensure driver atomicity */
2017	rc = pci_request_regions(pdev, DRV_NAME);
2018	if (rc)
2019		goto err_out_disable;
2020
2021	/* check for invalid IRQ value */
2022	if (pdev->irq < 2) {
2023		rc = -EIO;
2024		pr_err("invalid irq (%d) for pci dev %s\n",
2025		       pdev->irq, pci_name(pdev));
2026		goto err_out_res;
2027	}
2028
2029	dev->irq = pdev->irq;
2030
2031	/* obtain and check validity of PCI I/O address */
2032	pciaddr = pci_resource_start(pdev, 1);
2033	if (!pciaddr) {
2034		rc = -EIO;
2035		pr_err("no MMIO resource for pci dev %s\n", pci_name(pdev));
2036		goto err_out_res;
2037	}
2038	if (pci_resource_len(pdev, 1) < DE_REGS_SIZE) {
2039		rc = -EIO;
2040		pr_err("MMIO resource (%llx) too small on pci dev %s\n",
2041		       (unsigned long long)pci_resource_len(pdev, 1),
2042		       pci_name(pdev));
2043		goto err_out_res;
2044	}
2045
2046	/* remap CSR registers */
2047	regs = ioremap_nocache(pciaddr, DE_REGS_SIZE);
2048	if (!regs) {
2049		rc = -EIO;
2050		pr_err("Cannot map PCI MMIO (%llx@%lx) on pci dev %s\n",
2051		       (unsigned long long)pci_resource_len(pdev, 1),
2052		       pciaddr, pci_name(pdev));
2053		goto err_out_res;
2054	}
2055	dev->base_addr = (unsigned long) regs;
2056	de->regs = regs;
2057
2058	de_adapter_wake(de);
2059
2060	/* make sure hardware is not running */
2061	rc = de_reset_mac(de);
2062	if (rc) {
2063		pr_err("Cannot reset MAC, pci dev %s\n", pci_name(pdev));
2064		goto err_out_iomap;
2065	}
2066
2067	/* get MAC address, initialize default media type and
2068	 * get list of supported media
2069	 */
2070	if (de->de21040) {
2071		de21040_get_mac_address(de);
2072		de21040_get_media_info(de);
2073	} else {
2074		de21041_get_srom_info(de);
2075	}
2076
2077	/* register new network interface with kernel */
2078	rc = register_netdev(dev);
2079	if (rc)
2080		goto err_out_iomap;
2081
2082	/* print info about board and interface just registered */
2083	netdev_info(dev, "%s at 0x%lx, %pM, IRQ %d\n",
2084		    de->de21040 ? "21040" : "21041",
2085		    dev->base_addr,
2086		    dev->dev_addr,
2087		    dev->irq);
2088
2089	pci_set_drvdata(pdev, dev);
2090
2091	/* enable busmastering */
2092	pci_set_master(pdev);
2093
2094	/* put adapter to sleep */
2095	de_adapter_sleep(de);
2096
2097	return 0;
2098
2099err_out_iomap:
2100	kfree(de->ee_data);
2101	iounmap(regs);
2102err_out_res:
2103	pci_release_regions(pdev);
2104err_out_disable:
2105	pci_disable_device(pdev);
2106err_out_free:
2107	free_netdev(dev);
2108	return rc;
2109}
2110
2111static void __devexit de_remove_one (struct pci_dev *pdev)
2112{
2113	struct net_device *dev = pci_get_drvdata(pdev);
2114	struct de_private *de = netdev_priv(dev);
2115
2116	BUG_ON(!dev);
2117	unregister_netdev(dev);
2118	kfree(de->ee_data);
2119	iounmap(de->regs);
2120	pci_release_regions(pdev);
2121	pci_disable_device(pdev);
2122	pci_set_drvdata(pdev, NULL);
2123	free_netdev(dev);
2124}
2125
2126#ifdef CONFIG_PM
2127
2128static int de_suspend (struct pci_dev *pdev, pm_message_t state)
2129{
2130	struct net_device *dev = pci_get_drvdata (pdev);
2131	struct de_private *de = netdev_priv(dev);
2132
2133	rtnl_lock();
2134	if (netif_running (dev)) {
2135		del_timer_sync(&de->media_timer);
2136
2137		disable_irq(dev->irq);
2138		spin_lock_irq(&de->lock);
2139
2140		de_stop_hw(de);
2141		netif_stop_queue(dev);
2142		netif_device_detach(dev);
2143		netif_carrier_off(dev);
2144
2145		spin_unlock_irq(&de->lock);
2146		enable_irq(dev->irq);
2147
2148		/* Update the error counts. */
2149		__de_get_stats(de);
2150
2151		synchronize_irq(dev->irq);
2152		de_clean_rings(de);
2153
2154		de_adapter_sleep(de);
2155		pci_disable_device(pdev);
2156	} else {
2157		netif_device_detach(dev);
2158	}
2159	rtnl_unlock();
2160	return 0;
2161}
2162
2163static int de_resume (struct pci_dev *pdev)
2164{
2165	struct net_device *dev = pci_get_drvdata (pdev);
2166	struct de_private *de = netdev_priv(dev);
2167	int retval = 0;
2168
2169	rtnl_lock();
2170	if (netif_device_present(dev))
2171		goto out;
2172	if (!netif_running(dev))
2173		goto out_attach;
2174	if ((retval = pci_enable_device(pdev))) {
2175		netdev_err(dev, "pci_enable_device failed in resume\n");
2176		goto out;
2177	}
2178	pci_set_master(pdev);
2179	de_init_rings(de);
2180	de_init_hw(de);
2181out_attach:
2182	netif_device_attach(dev);
2183out:
2184	rtnl_unlock();
2185	return 0;
2186}
2187
2188#endif /* CONFIG_PM */
2189
2190static struct pci_driver de_driver = {
2191	.name		= DRV_NAME,
2192	.id_table	= de_pci_tbl,
2193	.probe		= de_init_one,
2194	.remove		= __devexit_p(de_remove_one),
2195#ifdef CONFIG_PM
2196	.suspend	= de_suspend,
2197	.resume		= de_resume,
2198#endif
2199};
2200
2201static int __init de_init (void)
2202{
2203#ifdef MODULE
2204	pr_info("%s\n", version);
2205#endif
2206	return pci_register_driver(&de_driver);
2207}
2208
2209static void __exit de_exit (void)
2210{
2211	pci_unregister_driver (&de_driver);
2212}
2213
2214module_init(de_init);
2215module_exit(de_exit);