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 <linux/uaccess.h>
53 #include <asm/unaligned.h>
54 
55 /* These identify the driver base version and may not be removed. */
56 static char version[] =
57 "PCI Ethernet driver v" DRV_VERSION " (" DRV_RELDATE ")";
58 
59 MODULE_AUTHOR("Jeff Garzik <jgarzik@pobox.com>");
60 MODULE_DESCRIPTION("Intel/Digital 21040/1 series PCI Ethernet driver");
61 MODULE_LICENSE("GPL");
62 MODULE_VERSION(DRV_VERSION);
63 
64 static int debug = -1;
65 module_param (debug, int, 0);
66 MODULE_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__)
72 static int rx_copybreak = 1518;
73 #else
74 static int rx_copybreak = 100;
75 #endif
76 module_param (rx_copybreak, int, 0);
77 MODULE_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 
142 enum {
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 
252 static 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  */
260 static const u32 de_bus_mode = CacheAlign16 | BurstLen4 | DescSkipLen;
261 
262 struct de_srom_media_block {
263 	u8			opts;
264 	u16			csr13;
265 	u16			csr14;
266 	u16			csr15;
267 } __packed;
268 
269 struct de_srom_info_leaf {
270 	u16			default_media;
271 	u8			n_blocks;
272 	u8			unused;
273 } __packed;
274 
275 struct 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 
285 struct media_info {
286 	u16			type;	/* DE_MEDIA_xxx */
287 	u16			csr13;
288 	u16			csr14;
289 	u16			csr15;
290 };
291 
292 struct ring_info {
293 	struct sk_buff		*skb;
294 	dma_addr_t		mapping;
295 };
296 
297 struct 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 
334 static void de_set_rx_mode (struct net_device *dev);
335 static void de_tx (struct de_private *de);
336 static void de_clean_rings (struct de_private *de);
337 static void de_media_interrupt (struct de_private *de, u32 status);
338 static void de21040_media_timer (unsigned long data);
339 static void de21041_media_timer (unsigned long data);
340 static unsigned int de_ok_to_advertise (struct de_private *de, u32 new_media);
341 
342 
343 static const struct pci_device_id 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 };
350 MODULE_DEVICE_TABLE(pci, de_pci_tbl);
351 
352 static 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*/
362 static u16 t21040_csr13[] = { 0, 0, 0x8F09, 0x8F01, 0x8F01, };
363 static u16 t21040_csr14[] = { 0, 0, 0x0705, 0xFFFF, 0xFFFD, };
364 static u16 t21040_csr15[] = { 0, 0, 0x0006, 0x0000, 0x0000, };
365 
366 /* 21041 transceiver register settings: TP AUTO, BNC, AUI, TP, TP FD*/
367 static u16 t21041_csr13[] = { 0xEF01, 0xEF09, 0xEF09, 0xEF01, 0xEF09, };
368 static u16 t21041_csr14[] = { 0xFFFF, 0xF7FD, 0xF7FD, 0x7F3F, 0x7F3D, };
369 /* If on-chip autonegotiation is broken, use half-duplex (FF3F) instead */
370 static u16 t21041_csr14_brk[] = { 0xFF3F, 0xF7FD, 0xF7FD, 0x7F3F, 0x7F3D, };
371 static 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 
378 static 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 
402 static 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 = netdev_alloc_skb(de->dev, 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 
479 rx_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 
497 static 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 
542 static 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 
593 next:
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 
605 static 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 static void build_setup_frame_hash(u16 *setup_frm, struct net_device *dev)
665 {
666 	struct de_private *de = netdev_priv(dev);
667 	u16 hash_table[32];
668 	struct netdev_hw_addr *ha;
669 	int i;
670 	u16 *eaddrs;
671 
672 	memset(hash_table, 0, sizeof(hash_table));
673 	__set_bit_le(255, hash_table);			/* Broadcast entry */
674 	/* This should work on big-endian machines as well. */
675 	netdev_for_each_mc_addr(ha, dev) {
676 		int index = ether_crc_le(ETH_ALEN, ha->addr) & 0x1ff;
677 
678 		__set_bit_le(index, hash_table);
679 	}
680 
681 	for (i = 0; i < 32; i++) {
682 		*setup_frm++ = hash_table[i];
683 		*setup_frm++ = hash_table[i];
684 	}
685 	setup_frm = &de->setup_frame[13*6];
686 
687 	/* Fill the final entry with our physical address. */
688 	eaddrs = (u16 *)dev->dev_addr;
689 	*setup_frm++ = eaddrs[0]; *setup_frm++ = eaddrs[0];
690 	*setup_frm++ = eaddrs[1]; *setup_frm++ = eaddrs[1];
691 	*setup_frm++ = eaddrs[2]; *setup_frm++ = eaddrs[2];
692 }
693 
694 static void build_setup_frame_perfect(u16 *setup_frm, struct net_device *dev)
695 {
696 	struct de_private *de = netdev_priv(dev);
697 	struct netdev_hw_addr *ha;
698 	u16 *eaddrs;
699 
700 	/* We have <= 14 addresses so we can use the wonderful
701 	   16 address perfect filtering of the Tulip. */
702 	netdev_for_each_mc_addr(ha, dev) {
703 		eaddrs = (u16 *) ha->addr;
704 		*setup_frm++ = *eaddrs; *setup_frm++ = *eaddrs++;
705 		*setup_frm++ = *eaddrs; *setup_frm++ = *eaddrs++;
706 		*setup_frm++ = *eaddrs; *setup_frm++ = *eaddrs++;
707 	}
708 	/* Fill the unused entries with the broadcast address. */
709 	memset(setup_frm, 0xff, (15 - netdev_mc_count(dev)) * 12);
710 	setup_frm = &de->setup_frame[15*6];
711 
712 	/* Fill the final entry with our physical address. */
713 	eaddrs = (u16 *)dev->dev_addr;
714 	*setup_frm++ = eaddrs[0]; *setup_frm++ = eaddrs[0];
715 	*setup_frm++ = eaddrs[1]; *setup_frm++ = eaddrs[1];
716 	*setup_frm++ = eaddrs[2]; *setup_frm++ = eaddrs[2];
717 }
718 
719 
720 static void __de_set_rx_mode (struct net_device *dev)
721 {
722 	struct de_private *de = netdev_priv(dev);
723 	u32 macmode;
724 	unsigned int entry;
725 	u32 mapping;
726 	struct de_desc *txd;
727 	struct de_desc *dummy_txd = NULL;
728 
729 	macmode = dr32(MacMode) & ~(AcceptAllMulticast | AcceptAllPhys);
730 
731 	if (dev->flags & IFF_PROMISC) {	/* Set promiscuous. */
732 		macmode |= AcceptAllMulticast | AcceptAllPhys;
733 		goto out;
734 	}
735 
736 	if ((netdev_mc_count(dev) > 1000) || (dev->flags & IFF_ALLMULTI)) {
737 		/* Too many to filter well -- accept all multicasts. */
738 		macmode |= AcceptAllMulticast;
739 		goto out;
740 	}
741 
742 	/* Note that only the low-address shortword of setup_frame is valid!
743 	   The values are doubled for big-endian architectures. */
744 	if (netdev_mc_count(dev) > 14)	/* Must use a multicast hash table. */
745 		build_setup_frame_hash (de->setup_frame, dev);
746 	else
747 		build_setup_frame_perfect (de->setup_frame, dev);
748 
749 	/*
750 	 * Now add this frame to the Tx list.
751 	 */
752 
753 	entry = de->tx_head;
754 
755 	/* Avoid a chip errata by prefixing a dummy entry. */
756 	if (entry != 0) {
757 		de->tx_skb[entry].skb = DE_DUMMY_SKB;
758 
759 		dummy_txd = &de->tx_ring[entry];
760 		dummy_txd->opts2 = (entry == (DE_TX_RING_SIZE - 1)) ?
761 				   cpu_to_le32(RingEnd) : 0;
762 		dummy_txd->addr1 = 0;
763 
764 		/* Must set DescOwned later to avoid race with chip */
765 
766 		entry = NEXT_TX(entry);
767 	}
768 
769 	de->tx_skb[entry].skb = DE_SETUP_SKB;
770 	de->tx_skb[entry].mapping = mapping =
771 	    pci_map_single (de->pdev, de->setup_frame,
772 			    sizeof (de->setup_frame), PCI_DMA_TODEVICE);
773 
774 	/* Put the setup frame on the Tx list. */
775 	txd = &de->tx_ring[entry];
776 	if (entry == (DE_TX_RING_SIZE - 1))
777 		txd->opts2 = cpu_to_le32(SetupFrame | RingEnd | sizeof (de->setup_frame));
778 	else
779 		txd->opts2 = cpu_to_le32(SetupFrame | sizeof (de->setup_frame));
780 	txd->addr1 = cpu_to_le32(mapping);
781 	wmb();
782 
783 	txd->opts1 = cpu_to_le32(DescOwn);
784 	wmb();
785 
786 	if (dummy_txd) {
787 		dummy_txd->opts1 = cpu_to_le32(DescOwn);
788 		wmb();
789 	}
790 
791 	de->tx_head = NEXT_TX(entry);
792 
793 	if (TX_BUFFS_AVAIL(de) == 0)
794 		netif_stop_queue(dev);
795 
796 	/* Trigger an immediate transmit demand. */
797 	dw32(TxPoll, NormalTxPoll);
798 
799 out:
800 	if (macmode != dr32(MacMode))
801 		dw32(MacMode, macmode);
802 }
803 
804 static void de_set_rx_mode (struct net_device *dev)
805 {
806 	unsigned long flags;
807 	struct de_private *de = netdev_priv(dev);
808 
809 	spin_lock_irqsave (&de->lock, flags);
810 	__de_set_rx_mode(dev);
811 	spin_unlock_irqrestore (&de->lock, flags);
812 }
813 
814 static inline void de_rx_missed(struct de_private *de, u32 rx_missed)
815 {
816 	if (unlikely(rx_missed & RxMissedOver))
817 		de->net_stats.rx_missed_errors += RxMissedMask;
818 	else
819 		de->net_stats.rx_missed_errors += (rx_missed & RxMissedMask);
820 }
821 
822 static void __de_get_stats(struct de_private *de)
823 {
824 	u32 tmp = dr32(RxMissed); /* self-clearing */
825 
826 	de_rx_missed(de, tmp);
827 }
828 
829 static struct net_device_stats *de_get_stats(struct net_device *dev)
830 {
831 	struct de_private *de = netdev_priv(dev);
832 
833 	/* The chip only need report frame silently dropped. */
834 	spin_lock_irq(&de->lock);
835  	if (netif_running(dev) && netif_device_present(dev))
836  		__de_get_stats(de);
837 	spin_unlock_irq(&de->lock);
838 
839 	return &de->net_stats;
840 }
841 
842 static inline int de_is_running (struct de_private *de)
843 {
844 	return (dr32(MacStatus) & (RxState | TxState)) ? 1 : 0;
845 }
846 
847 static void de_stop_rxtx (struct de_private *de)
848 {
849 	u32 macmode;
850 	unsigned int i = 1300/100;
851 
852 	macmode = dr32(MacMode);
853 	if (macmode & RxTx) {
854 		dw32(MacMode, macmode & ~RxTx);
855 		dr32(MacMode);
856 	}
857 
858 	/* wait until in-flight frame completes.
859 	 * Max time @ 10BT: 1500*8b/10Mbps == 1200us (+ 100us margin)
860 	 * Typically expect this loop to end in < 50 us on 100BT.
861 	 */
862 	while (--i) {
863 		if (!de_is_running(de))
864 			return;
865 		udelay(100);
866 	}
867 
868 	netdev_warn(de->dev, "timeout expired, stopping DMA\n");
869 }
870 
871 static inline void de_start_rxtx (struct de_private *de)
872 {
873 	u32 macmode;
874 
875 	macmode = dr32(MacMode);
876 	if ((macmode & RxTx) != RxTx) {
877 		dw32(MacMode, macmode | RxTx);
878 		dr32(MacMode);
879 	}
880 }
881 
882 static void de_stop_hw (struct de_private *de)
883 {
884 
885 	udelay(5);
886 	dw32(IntrMask, 0);
887 
888 	de_stop_rxtx(de);
889 
890 	dw32(MacStatus, dr32(MacStatus));
891 
892 	udelay(10);
893 
894 	de->rx_tail = 0;
895 	de->tx_head = de->tx_tail = 0;
896 }
897 
898 static void de_link_up(struct de_private *de)
899 {
900 	if (!netif_carrier_ok(de->dev)) {
901 		netif_carrier_on(de->dev);
902 		netif_info(de, link, de->dev, "link up, media %s\n",
903 			   media_name[de->media_type]);
904 	}
905 }
906 
907 static void de_link_down(struct de_private *de)
908 {
909 	if (netif_carrier_ok(de->dev)) {
910 		netif_carrier_off(de->dev);
911 		netif_info(de, link, de->dev, "link down\n");
912 	}
913 }
914 
915 static void de_set_media (struct de_private *de)
916 {
917 	unsigned media = de->media_type;
918 	u32 macmode = dr32(MacMode);
919 
920 	if (de_is_running(de))
921 		netdev_warn(de->dev, "chip is running while changing media!\n");
922 
923 	if (de->de21040)
924 		dw32(CSR11, FULL_DUPLEX_MAGIC);
925 	dw32(CSR13, 0); /* Reset phy */
926 	dw32(CSR14, de->media[media].csr14);
927 	dw32(CSR15, de->media[media].csr15);
928 	dw32(CSR13, de->media[media].csr13);
929 
930 	/* must delay 10ms before writing to other registers,
931 	 * especially CSR6
932 	 */
933 	mdelay(10);
934 
935 	if (media == DE_MEDIA_TP_FD)
936 		macmode |= FullDuplex;
937 	else
938 		macmode &= ~FullDuplex;
939 
940 	netif_info(de, link, de->dev, "set link %s\n", media_name[media]);
941 	netif_info(de, hw, de->dev, "mode 0x%x, sia 0x%x,0x%x,0x%x,0x%x\n",
942 		   dr32(MacMode), dr32(SIAStatus),
943 		   dr32(CSR13), dr32(CSR14), dr32(CSR15));
944 	netif_info(de, hw, de->dev, "set mode 0x%x, set sia 0x%x,0x%x,0x%x\n",
945 		   macmode, de->media[media].csr13,
946 		   de->media[media].csr14, de->media[media].csr15);
947 	if (macmode != dr32(MacMode))
948 		dw32(MacMode, macmode);
949 }
950 
951 static void de_next_media (struct de_private *de, const u32 *media,
952 			   unsigned int n_media)
953 {
954 	unsigned int i;
955 
956 	for (i = 0; i < n_media; i++) {
957 		if (de_ok_to_advertise(de, media[i])) {
958 			de->media_type = media[i];
959 			return;
960 		}
961 	}
962 }
963 
964 static void de21040_media_timer (unsigned long data)
965 {
966 	struct de_private *de = (struct de_private *) data;
967 	struct net_device *dev = de->dev;
968 	u32 status = dr32(SIAStatus);
969 	unsigned int carrier;
970 	unsigned long flags;
971 
972 	carrier = (status & NetCxnErr) ? 0 : 1;
973 
974 	if (carrier) {
975 		if (de->media_type != DE_MEDIA_AUI && (status & LinkFailStatus))
976 			goto no_link_yet;
977 
978 		de->media_timer.expires = jiffies + DE_TIMER_LINK;
979 		add_timer(&de->media_timer);
980 		if (!netif_carrier_ok(dev))
981 			de_link_up(de);
982 		else
983 			netif_info(de, timer, dev, "%s link ok, status %x\n",
984 				   media_name[de->media_type], status);
985 		return;
986 	}
987 
988 	de_link_down(de);
989 
990 	if (de->media_lock)
991 		return;
992 
993 	if (de->media_type == DE_MEDIA_AUI) {
994 		static const u32 next_state = DE_MEDIA_TP;
995 		de_next_media(de, &next_state, 1);
996 	} else {
997 		static const u32 next_state = DE_MEDIA_AUI;
998 		de_next_media(de, &next_state, 1);
999 	}
1000 
1001 	spin_lock_irqsave(&de->lock, flags);
1002 	de_stop_rxtx(de);
1003 	spin_unlock_irqrestore(&de->lock, flags);
1004 	de_set_media(de);
1005 	de_start_rxtx(de);
1006 
1007 no_link_yet:
1008 	de->media_timer.expires = jiffies + DE_TIMER_NO_LINK;
1009 	add_timer(&de->media_timer);
1010 
1011 	netif_info(de, timer, dev, "no link, trying media %s, status %x\n",
1012 		   media_name[de->media_type], status);
1013 }
1014 
1015 static unsigned int de_ok_to_advertise (struct de_private *de, u32 new_media)
1016 {
1017 	switch (new_media) {
1018 	case DE_MEDIA_TP_AUTO:
1019 		if (!(de->media_advertise & ADVERTISED_Autoneg))
1020 			return 0;
1021 		if (!(de->media_advertise & (ADVERTISED_10baseT_Half | ADVERTISED_10baseT_Full)))
1022 			return 0;
1023 		break;
1024 	case DE_MEDIA_BNC:
1025 		if (!(de->media_advertise & ADVERTISED_BNC))
1026 			return 0;
1027 		break;
1028 	case DE_MEDIA_AUI:
1029 		if (!(de->media_advertise & ADVERTISED_AUI))
1030 			return 0;
1031 		break;
1032 	case DE_MEDIA_TP:
1033 		if (!(de->media_advertise & ADVERTISED_10baseT_Half))
1034 			return 0;
1035 		break;
1036 	case DE_MEDIA_TP_FD:
1037 		if (!(de->media_advertise & ADVERTISED_10baseT_Full))
1038 			return 0;
1039 		break;
1040 	}
1041 
1042 	return 1;
1043 }
1044 
1045 static void de21041_media_timer (unsigned long data)
1046 {
1047 	struct de_private *de = (struct de_private *) data;
1048 	struct net_device *dev = de->dev;
1049 	u32 status = dr32(SIAStatus);
1050 	unsigned int carrier;
1051 	unsigned long flags;
1052 
1053 	/* clear port active bits */
1054 	dw32(SIAStatus, NonselPortActive | SelPortActive);
1055 
1056 	carrier = (status & NetCxnErr) ? 0 : 1;
1057 
1058 	if (carrier) {
1059 		if ((de->media_type == DE_MEDIA_TP_AUTO ||
1060 		     de->media_type == DE_MEDIA_TP ||
1061 		     de->media_type == DE_MEDIA_TP_FD) &&
1062 		    (status & LinkFailStatus))
1063 			goto no_link_yet;
1064 
1065 		de->media_timer.expires = jiffies + DE_TIMER_LINK;
1066 		add_timer(&de->media_timer);
1067 		if (!netif_carrier_ok(dev))
1068 			de_link_up(de);
1069 		else
1070 			netif_info(de, timer, dev,
1071 				   "%s link ok, mode %x status %x\n",
1072 				   media_name[de->media_type],
1073 				   dr32(MacMode), status);
1074 		return;
1075 	}
1076 
1077 	de_link_down(de);
1078 
1079 	/* if media type locked, don't switch media */
1080 	if (de->media_lock)
1081 		goto set_media;
1082 
1083 	/* if activity detected, use that as hint for new media type */
1084 	if (status & NonselPortActive) {
1085 		unsigned int have_media = 1;
1086 
1087 		/* if AUI/BNC selected, then activity is on TP port */
1088 		if (de->media_type == DE_MEDIA_AUI ||
1089 		    de->media_type == DE_MEDIA_BNC) {
1090 			if (de_ok_to_advertise(de, DE_MEDIA_TP_AUTO))
1091 				de->media_type = DE_MEDIA_TP_AUTO;
1092 			else
1093 				have_media = 0;
1094 		}
1095 
1096 		/* TP selected.  If there is only TP and BNC, then it's BNC */
1097 		else if (((de->media_supported & DE_AUI_BNC) == SUPPORTED_BNC) &&
1098 			 de_ok_to_advertise(de, DE_MEDIA_BNC))
1099 			de->media_type = DE_MEDIA_BNC;
1100 
1101 		/* TP selected.  If there is only TP and AUI, then it's AUI */
1102 		else if (((de->media_supported & DE_AUI_BNC) == SUPPORTED_AUI) &&
1103 			 de_ok_to_advertise(de, DE_MEDIA_AUI))
1104 			de->media_type = DE_MEDIA_AUI;
1105 
1106 		/* otherwise, ignore the hint */
1107 		else
1108 			have_media = 0;
1109 
1110 		if (have_media)
1111 			goto set_media;
1112 	}
1113 
1114 	/*
1115 	 * Absent or ambiguous activity hint, move to next advertised
1116 	 * media state.  If de->media_type is left unchanged, this
1117 	 * simply resets the PHY and reloads the current media settings.
1118 	 */
1119 	if (de->media_type == DE_MEDIA_AUI) {
1120 		static const u32 next_states[] = {
1121 			DE_MEDIA_BNC, DE_MEDIA_TP_AUTO
1122 		};
1123 		de_next_media(de, next_states, ARRAY_SIZE(next_states));
1124 	} else if (de->media_type == DE_MEDIA_BNC) {
1125 		static const u32 next_states[] = {
1126 			DE_MEDIA_TP_AUTO, DE_MEDIA_AUI
1127 		};
1128 		de_next_media(de, next_states, ARRAY_SIZE(next_states));
1129 	} else {
1130 		static const u32 next_states[] = {
1131 			DE_MEDIA_AUI, DE_MEDIA_BNC, DE_MEDIA_TP_AUTO
1132 		};
1133 		de_next_media(de, next_states, ARRAY_SIZE(next_states));
1134 	}
1135 
1136 set_media:
1137 	spin_lock_irqsave(&de->lock, flags);
1138 	de_stop_rxtx(de);
1139 	spin_unlock_irqrestore(&de->lock, flags);
1140 	de_set_media(de);
1141 	de_start_rxtx(de);
1142 
1143 no_link_yet:
1144 	de->media_timer.expires = jiffies + DE_TIMER_NO_LINK;
1145 	add_timer(&de->media_timer);
1146 
1147 	netif_info(de, timer, dev, "no link, trying media %s, status %x\n",
1148 		   media_name[de->media_type], status);
1149 }
1150 
1151 static void de_media_interrupt (struct de_private *de, u32 status)
1152 {
1153 	if (status & LinkPass) {
1154 		/* Ignore if current media is AUI or BNC and we can't use TP */
1155 		if ((de->media_type == DE_MEDIA_AUI ||
1156 		     de->media_type == DE_MEDIA_BNC) &&
1157 		    (de->media_lock ||
1158 		     !de_ok_to_advertise(de, DE_MEDIA_TP_AUTO)))
1159 			return;
1160 		/* If current media is not TP, change it to TP */
1161 		if ((de->media_type == DE_MEDIA_AUI ||
1162 		     de->media_type == DE_MEDIA_BNC)) {
1163 			de->media_type = DE_MEDIA_TP_AUTO;
1164 			de_stop_rxtx(de);
1165 			de_set_media(de);
1166 			de_start_rxtx(de);
1167 		}
1168 		de_link_up(de);
1169 		mod_timer(&de->media_timer, jiffies + DE_TIMER_LINK);
1170 		return;
1171 	}
1172 
1173 	BUG_ON(!(status & LinkFail));
1174 	/* Mark the link as down only if current media is TP */
1175 	if (netif_carrier_ok(de->dev) && de->media_type != DE_MEDIA_AUI &&
1176 	    de->media_type != DE_MEDIA_BNC) {
1177 		de_link_down(de);
1178 		mod_timer(&de->media_timer, jiffies + DE_TIMER_NO_LINK);
1179 	}
1180 }
1181 
1182 static int de_reset_mac (struct de_private *de)
1183 {
1184 	u32 status, tmp;
1185 
1186 	/*
1187 	 * Reset MAC.  de4x5.c and tulip.c examined for "advice"
1188 	 * in this area.
1189 	 */
1190 
1191 	if (dr32(BusMode) == 0xffffffff)
1192 		return -EBUSY;
1193 
1194 	/* Reset the chip, holding bit 0 set at least 50 PCI cycles. */
1195 	dw32 (BusMode, CmdReset);
1196 	mdelay (1);
1197 
1198 	dw32 (BusMode, de_bus_mode);
1199 	mdelay (1);
1200 
1201 	for (tmp = 0; tmp < 5; tmp++) {
1202 		dr32 (BusMode);
1203 		mdelay (1);
1204 	}
1205 
1206 	mdelay (1);
1207 
1208 	status = dr32(MacStatus);
1209 	if (status & (RxState | TxState))
1210 		return -EBUSY;
1211 	if (status == 0xffffffff)
1212 		return -ENODEV;
1213 	return 0;
1214 }
1215 
1216 static void de_adapter_wake (struct de_private *de)
1217 {
1218 	u32 pmctl;
1219 
1220 	if (de->de21040)
1221 		return;
1222 
1223 	pci_read_config_dword(de->pdev, PCIPM, &pmctl);
1224 	if (pmctl & PM_Mask) {
1225 		pmctl &= ~PM_Mask;
1226 		pci_write_config_dword(de->pdev, PCIPM, pmctl);
1227 
1228 		/* de4x5.c delays, so we do too */
1229 		msleep(10);
1230 	}
1231 }
1232 
1233 static void de_adapter_sleep (struct de_private *de)
1234 {
1235 	u32 pmctl;
1236 
1237 	if (de->de21040)
1238 		return;
1239 
1240 	dw32(CSR13, 0); /* Reset phy */
1241 	pci_read_config_dword(de->pdev, PCIPM, &pmctl);
1242 	pmctl |= PM_Sleep;
1243 	pci_write_config_dword(de->pdev, PCIPM, pmctl);
1244 }
1245 
1246 static int de_init_hw (struct de_private *de)
1247 {
1248 	struct net_device *dev = de->dev;
1249 	u32 macmode;
1250 	int rc;
1251 
1252 	de_adapter_wake(de);
1253 
1254 	macmode = dr32(MacMode) & ~MacModeClear;
1255 
1256 	rc = de_reset_mac(de);
1257 	if (rc)
1258 		return rc;
1259 
1260 	de_set_media(de); /* reset phy */
1261 
1262 	dw32(RxRingAddr, de->ring_dma);
1263 	dw32(TxRingAddr, de->ring_dma + (sizeof(struct de_desc) * DE_RX_RING_SIZE));
1264 
1265 	dw32(MacMode, RxTx | macmode);
1266 
1267 	dr32(RxMissed); /* self-clearing */
1268 
1269 	dw32(IntrMask, de_intr_mask);
1270 
1271 	de_set_rx_mode(dev);
1272 
1273 	return 0;
1274 }
1275 
1276 static int de_refill_rx (struct de_private *de)
1277 {
1278 	unsigned i;
1279 
1280 	for (i = 0; i < DE_RX_RING_SIZE; i++) {
1281 		struct sk_buff *skb;
1282 
1283 		skb = netdev_alloc_skb(de->dev, de->rx_buf_sz);
1284 		if (!skb)
1285 			goto err_out;
1286 
1287 		de->rx_skb[i].mapping = pci_map_single(de->pdev,
1288 			skb->data, de->rx_buf_sz, PCI_DMA_FROMDEVICE);
1289 		de->rx_skb[i].skb = skb;
1290 
1291 		de->rx_ring[i].opts1 = cpu_to_le32(DescOwn);
1292 		if (i == (DE_RX_RING_SIZE - 1))
1293 			de->rx_ring[i].opts2 =
1294 				cpu_to_le32(RingEnd | de->rx_buf_sz);
1295 		else
1296 			de->rx_ring[i].opts2 = cpu_to_le32(de->rx_buf_sz);
1297 		de->rx_ring[i].addr1 = cpu_to_le32(de->rx_skb[i].mapping);
1298 		de->rx_ring[i].addr2 = 0;
1299 	}
1300 
1301 	return 0;
1302 
1303 err_out:
1304 	de_clean_rings(de);
1305 	return -ENOMEM;
1306 }
1307 
1308 static int de_init_rings (struct de_private *de)
1309 {
1310 	memset(de->tx_ring, 0, sizeof(struct de_desc) * DE_TX_RING_SIZE);
1311 	de->tx_ring[DE_TX_RING_SIZE - 1].opts2 = cpu_to_le32(RingEnd);
1312 
1313 	de->rx_tail = 0;
1314 	de->tx_head = de->tx_tail = 0;
1315 
1316 	return de_refill_rx (de);
1317 }
1318 
1319 static int de_alloc_rings (struct de_private *de)
1320 {
1321 	de->rx_ring = pci_alloc_consistent(de->pdev, DE_RING_BYTES, &de->ring_dma);
1322 	if (!de->rx_ring)
1323 		return -ENOMEM;
1324 	de->tx_ring = &de->rx_ring[DE_RX_RING_SIZE];
1325 	return de_init_rings(de);
1326 }
1327 
1328 static void de_clean_rings (struct de_private *de)
1329 {
1330 	unsigned i;
1331 
1332 	memset(de->rx_ring, 0, sizeof(struct de_desc) * DE_RX_RING_SIZE);
1333 	de->rx_ring[DE_RX_RING_SIZE - 1].opts2 = cpu_to_le32(RingEnd);
1334 	wmb();
1335 	memset(de->tx_ring, 0, sizeof(struct de_desc) * DE_TX_RING_SIZE);
1336 	de->tx_ring[DE_TX_RING_SIZE - 1].opts2 = cpu_to_le32(RingEnd);
1337 	wmb();
1338 
1339 	for (i = 0; i < DE_RX_RING_SIZE; i++) {
1340 		if (de->rx_skb[i].skb) {
1341 			pci_unmap_single(de->pdev, de->rx_skb[i].mapping,
1342 					 de->rx_buf_sz, PCI_DMA_FROMDEVICE);
1343 			dev_kfree_skb(de->rx_skb[i].skb);
1344 		}
1345 	}
1346 
1347 	for (i = 0; i < DE_TX_RING_SIZE; i++) {
1348 		struct sk_buff *skb = de->tx_skb[i].skb;
1349 		if ((skb) && (skb != DE_DUMMY_SKB)) {
1350 			if (skb != DE_SETUP_SKB) {
1351 				de->net_stats.tx_dropped++;
1352 				pci_unmap_single(de->pdev,
1353 					de->tx_skb[i].mapping,
1354 					skb->len, PCI_DMA_TODEVICE);
1355 				dev_kfree_skb(skb);
1356 			} else {
1357 				pci_unmap_single(de->pdev,
1358 					de->tx_skb[i].mapping,
1359 					sizeof(de->setup_frame),
1360 					PCI_DMA_TODEVICE);
1361 			}
1362 		}
1363 	}
1364 
1365 	memset(&de->rx_skb, 0, sizeof(struct ring_info) * DE_RX_RING_SIZE);
1366 	memset(&de->tx_skb, 0, sizeof(struct ring_info) * DE_TX_RING_SIZE);
1367 }
1368 
1369 static void de_free_rings (struct de_private *de)
1370 {
1371 	de_clean_rings(de);
1372 	pci_free_consistent(de->pdev, DE_RING_BYTES, de->rx_ring, de->ring_dma);
1373 	de->rx_ring = NULL;
1374 	de->tx_ring = NULL;
1375 }
1376 
1377 static int de_open (struct net_device *dev)
1378 {
1379 	struct de_private *de = netdev_priv(dev);
1380 	const int irq = de->pdev->irq;
1381 	int rc;
1382 
1383 	netif_dbg(de, ifup, dev, "enabling interface\n");
1384 
1385 	de->rx_buf_sz = (dev->mtu <= 1500 ? PKT_BUF_SZ : dev->mtu + 32);
1386 
1387 	rc = de_alloc_rings(de);
1388 	if (rc) {
1389 		netdev_err(dev, "ring allocation failure, err=%d\n", rc);
1390 		return rc;
1391 	}
1392 
1393 	dw32(IntrMask, 0);
1394 
1395 	rc = request_irq(irq, de_interrupt, IRQF_SHARED, dev->name, dev);
1396 	if (rc) {
1397 		netdev_err(dev, "IRQ %d request failure, err=%d\n", irq, rc);
1398 		goto err_out_free;
1399 	}
1400 
1401 	rc = de_init_hw(de);
1402 	if (rc) {
1403 		netdev_err(dev, "h/w init failure, err=%d\n", rc);
1404 		goto err_out_free_irq;
1405 	}
1406 
1407 	netif_start_queue(dev);
1408 	mod_timer(&de->media_timer, jiffies + DE_TIMER_NO_LINK);
1409 
1410 	return 0;
1411 
1412 err_out_free_irq:
1413 	free_irq(irq, dev);
1414 err_out_free:
1415 	de_free_rings(de);
1416 	return rc;
1417 }
1418 
1419 static int de_close (struct net_device *dev)
1420 {
1421 	struct de_private *de = netdev_priv(dev);
1422 	unsigned long flags;
1423 
1424 	netif_dbg(de, ifdown, dev, "disabling interface\n");
1425 
1426 	del_timer_sync(&de->media_timer);
1427 
1428 	spin_lock_irqsave(&de->lock, flags);
1429 	de_stop_hw(de);
1430 	netif_stop_queue(dev);
1431 	netif_carrier_off(dev);
1432 	spin_unlock_irqrestore(&de->lock, flags);
1433 
1434 	free_irq(de->pdev->irq, dev);
1435 
1436 	de_free_rings(de);
1437 	de_adapter_sleep(de);
1438 	return 0;
1439 }
1440 
1441 static void de_tx_timeout (struct net_device *dev)
1442 {
1443 	struct de_private *de = netdev_priv(dev);
1444 	const int irq = de->pdev->irq;
1445 
1446 	netdev_dbg(dev, "NIC status %08x mode %08x sia %08x desc %u/%u/%u\n",
1447 		   dr32(MacStatus), dr32(MacMode), dr32(SIAStatus),
1448 		   de->rx_tail, de->tx_head, de->tx_tail);
1449 
1450 	del_timer_sync(&de->media_timer);
1451 
1452 	disable_irq(irq);
1453 	spin_lock_irq(&de->lock);
1454 
1455 	de_stop_hw(de);
1456 	netif_stop_queue(dev);
1457 	netif_carrier_off(dev);
1458 
1459 	spin_unlock_irq(&de->lock);
1460 	enable_irq(irq);
1461 
1462 	/* Update the error counts. */
1463 	__de_get_stats(de);
1464 
1465 	synchronize_irq(irq);
1466 	de_clean_rings(de);
1467 
1468 	de_init_rings(de);
1469 
1470 	de_init_hw(de);
1471 
1472 	netif_wake_queue(dev);
1473 }
1474 
1475 static void __de_get_regs(struct de_private *de, u8 *buf)
1476 {
1477 	int i;
1478 	u32 *rbuf = (u32 *)buf;
1479 
1480 	/* read all CSRs */
1481 	for (i = 0; i < DE_NUM_REGS; i++)
1482 		rbuf[i] = dr32(i * 8);
1483 
1484 	/* handle self-clearing RxMissed counter, CSR8 */
1485 	de_rx_missed(de, rbuf[8]);
1486 }
1487 
1488 static int __de_get_link_ksettings(struct de_private *de,
1489 				   struct ethtool_link_ksettings *cmd)
1490 {
1491 	ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.supported,
1492 						de->media_supported);
1493 	cmd->base.phy_address = 0;
1494 	ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.advertising,
1495 						de->media_advertise);
1496 
1497 	switch (de->media_type) {
1498 	case DE_MEDIA_AUI:
1499 		cmd->base.port = PORT_AUI;
1500 		break;
1501 	case DE_MEDIA_BNC:
1502 		cmd->base.port = PORT_BNC;
1503 		break;
1504 	default:
1505 		cmd->base.port = PORT_TP;
1506 		break;
1507 	}
1508 
1509 	cmd->base.speed = 10;
1510 
1511 	if (dr32(MacMode) & FullDuplex)
1512 		cmd->base.duplex = DUPLEX_FULL;
1513 	else
1514 		cmd->base.duplex = DUPLEX_HALF;
1515 
1516 	if (de->media_lock)
1517 		cmd->base.autoneg = AUTONEG_DISABLE;
1518 	else
1519 		cmd->base.autoneg = AUTONEG_ENABLE;
1520 
1521 	/* ignore maxtxpkt, maxrxpkt for now */
1522 
1523 	return 0;
1524 }
1525 
1526 static int __de_set_link_ksettings(struct de_private *de,
1527 				   const struct ethtool_link_ksettings *cmd)
1528 {
1529 	u32 new_media;
1530 	unsigned int media_lock;
1531 	u8 duplex = cmd->base.duplex;
1532 	u8 port = cmd->base.port;
1533 	u8 autoneg = cmd->base.autoneg;
1534 	u32 advertising;
1535 
1536 	ethtool_convert_link_mode_to_legacy_u32(&advertising,
1537 						cmd->link_modes.advertising);
1538 
1539 	if (cmd->base.speed != 10)
1540 		return -EINVAL;
1541 	if (duplex != DUPLEX_HALF && duplex != DUPLEX_FULL)
1542 		return -EINVAL;
1543 	if (port != PORT_TP && port != PORT_AUI && port != PORT_BNC)
1544 		return -EINVAL;
1545 	if (de->de21040 && port == PORT_BNC)
1546 		return -EINVAL;
1547 	if (autoneg != AUTONEG_DISABLE && autoneg != AUTONEG_ENABLE)
1548 		return -EINVAL;
1549 	if (advertising & ~de->media_supported)
1550 		return -EINVAL;
1551 	if (autoneg == AUTONEG_ENABLE &&
1552 	    (!(advertising & ADVERTISED_Autoneg)))
1553 		return -EINVAL;
1554 
1555 	switch (port) {
1556 	case PORT_AUI:
1557 		new_media = DE_MEDIA_AUI;
1558 		if (!(advertising & ADVERTISED_AUI))
1559 			return -EINVAL;
1560 		break;
1561 	case PORT_BNC:
1562 		new_media = DE_MEDIA_BNC;
1563 		if (!(advertising & ADVERTISED_BNC))
1564 			return -EINVAL;
1565 		break;
1566 	default:
1567 		if (autoneg == AUTONEG_ENABLE)
1568 			new_media = DE_MEDIA_TP_AUTO;
1569 		else if (duplex == DUPLEX_FULL)
1570 			new_media = DE_MEDIA_TP_FD;
1571 		else
1572 			new_media = DE_MEDIA_TP;
1573 		if (!(advertising & ADVERTISED_TP))
1574 			return -EINVAL;
1575 		if (!(advertising & (ADVERTISED_10baseT_Full |
1576 				     ADVERTISED_10baseT_Half)))
1577 			return -EINVAL;
1578 		break;
1579 	}
1580 
1581 	media_lock = (autoneg == AUTONEG_ENABLE) ? 0 : 1;
1582 
1583 	if ((new_media == de->media_type) &&
1584 	    (media_lock == de->media_lock) &&
1585 	    (advertising == de->media_advertise))
1586 		return 0; /* nothing to change */
1587 
1588 	de_link_down(de);
1589 	mod_timer(&de->media_timer, jiffies + DE_TIMER_NO_LINK);
1590 	de_stop_rxtx(de);
1591 
1592 	de->media_type = new_media;
1593 	de->media_lock = media_lock;
1594 	de->media_advertise = advertising;
1595 	de_set_media(de);
1596 	if (netif_running(de->dev))
1597 		de_start_rxtx(de);
1598 
1599 	return 0;
1600 }
1601 
1602 static void de_get_drvinfo (struct net_device *dev,struct ethtool_drvinfo *info)
1603 {
1604 	struct de_private *de = netdev_priv(dev);
1605 
1606 	strlcpy(info->driver, DRV_NAME, sizeof(info->driver));
1607 	strlcpy(info->version, DRV_VERSION, sizeof(info->version));
1608 	strlcpy(info->bus_info, pci_name(de->pdev), sizeof(info->bus_info));
1609 }
1610 
1611 static int de_get_regs_len(struct net_device *dev)
1612 {
1613 	return DE_REGS_SIZE;
1614 }
1615 
1616 static int de_get_link_ksettings(struct net_device *dev,
1617 				 struct ethtool_link_ksettings *cmd)
1618 {
1619 	struct de_private *de = netdev_priv(dev);
1620 	int rc;
1621 
1622 	spin_lock_irq(&de->lock);
1623 	rc = __de_get_link_ksettings(de, cmd);
1624 	spin_unlock_irq(&de->lock);
1625 
1626 	return rc;
1627 }
1628 
1629 static int de_set_link_ksettings(struct net_device *dev,
1630 				 const struct ethtool_link_ksettings *cmd)
1631 {
1632 	struct de_private *de = netdev_priv(dev);
1633 	int rc;
1634 
1635 	spin_lock_irq(&de->lock);
1636 	rc = __de_set_link_ksettings(de, cmd);
1637 	spin_unlock_irq(&de->lock);
1638 
1639 	return rc;
1640 }
1641 
1642 static u32 de_get_msglevel(struct net_device *dev)
1643 {
1644 	struct de_private *de = netdev_priv(dev);
1645 
1646 	return de->msg_enable;
1647 }
1648 
1649 static void de_set_msglevel(struct net_device *dev, u32 msglvl)
1650 {
1651 	struct de_private *de = netdev_priv(dev);
1652 
1653 	de->msg_enable = msglvl;
1654 }
1655 
1656 static int de_get_eeprom(struct net_device *dev,
1657 			 struct ethtool_eeprom *eeprom, u8 *data)
1658 {
1659 	struct de_private *de = netdev_priv(dev);
1660 
1661 	if (!de->ee_data)
1662 		return -EOPNOTSUPP;
1663 	if ((eeprom->offset != 0) || (eeprom->magic != 0) ||
1664 	    (eeprom->len != DE_EEPROM_SIZE))
1665 		return -EINVAL;
1666 	memcpy(data, de->ee_data, eeprom->len);
1667 
1668 	return 0;
1669 }
1670 
1671 static int de_nway_reset(struct net_device *dev)
1672 {
1673 	struct de_private *de = netdev_priv(dev);
1674 	u32 status;
1675 
1676 	if (de->media_type != DE_MEDIA_TP_AUTO)
1677 		return -EINVAL;
1678 	if (netif_carrier_ok(de->dev))
1679 		de_link_down(de);
1680 
1681 	status = dr32(SIAStatus);
1682 	dw32(SIAStatus, (status & ~NWayState) | NWayRestart);
1683 	netif_info(de, link, dev, "link nway restart, status %x,%x\n",
1684 		   status, dr32(SIAStatus));
1685 	return 0;
1686 }
1687 
1688 static void de_get_regs(struct net_device *dev, struct ethtool_regs *regs,
1689 			void *data)
1690 {
1691 	struct de_private *de = netdev_priv(dev);
1692 
1693 	regs->version = (DE_REGS_VER << 2) | de->de21040;
1694 
1695 	spin_lock_irq(&de->lock);
1696 	__de_get_regs(de, data);
1697 	spin_unlock_irq(&de->lock);
1698 }
1699 
1700 static const struct ethtool_ops de_ethtool_ops = {
1701 	.get_link		= ethtool_op_get_link,
1702 	.get_drvinfo		= de_get_drvinfo,
1703 	.get_regs_len		= de_get_regs_len,
1704 	.get_msglevel		= de_get_msglevel,
1705 	.set_msglevel		= de_set_msglevel,
1706 	.get_eeprom		= de_get_eeprom,
1707 	.nway_reset		= de_nway_reset,
1708 	.get_regs		= de_get_regs,
1709 	.get_link_ksettings	= de_get_link_ksettings,
1710 	.set_link_ksettings	= de_set_link_ksettings,
1711 };
1712 
1713 static void de21040_get_mac_address(struct de_private *de)
1714 {
1715 	unsigned i;
1716 
1717 	dw32 (ROMCmd, 0);	/* Reset the pointer with a dummy write. */
1718 	udelay(5);
1719 
1720 	for (i = 0; i < 6; i++) {
1721 		int value, boguscnt = 100000;
1722 		do {
1723 			value = dr32(ROMCmd);
1724 			rmb();
1725 		} while (value < 0 && --boguscnt > 0);
1726 		de->dev->dev_addr[i] = value;
1727 		udelay(1);
1728 		if (boguscnt <= 0)
1729 			pr_warn("timeout reading 21040 MAC address byte %u\n",
1730 				i);
1731 	}
1732 }
1733 
1734 static void de21040_get_media_info(struct de_private *de)
1735 {
1736 	unsigned int i;
1737 
1738 	de->media_type = DE_MEDIA_TP;
1739 	de->media_supported |= SUPPORTED_TP | SUPPORTED_10baseT_Full |
1740 			       SUPPORTED_10baseT_Half | SUPPORTED_AUI;
1741 	de->media_advertise = de->media_supported;
1742 
1743 	for (i = 0; i < DE_MAX_MEDIA; i++) {
1744 		switch (i) {
1745 		case DE_MEDIA_AUI:
1746 		case DE_MEDIA_TP:
1747 		case DE_MEDIA_TP_FD:
1748 			de->media[i].type = i;
1749 			de->media[i].csr13 = t21040_csr13[i];
1750 			de->media[i].csr14 = t21040_csr14[i];
1751 			de->media[i].csr15 = t21040_csr15[i];
1752 			break;
1753 		default:
1754 			de->media[i].type = DE_MEDIA_INVALID;
1755 			break;
1756 		}
1757 	}
1758 }
1759 
1760 /* Note: this routine returns extra data bits for size detection. */
1761 static unsigned tulip_read_eeprom(void __iomem *regs, int location,
1762 				  int addr_len)
1763 {
1764 	int i;
1765 	unsigned retval = 0;
1766 	void __iomem *ee_addr = regs + ROMCmd;
1767 	int read_cmd = location | (EE_READ_CMD << addr_len);
1768 
1769 	writel(EE_ENB & ~EE_CS, ee_addr);
1770 	writel(EE_ENB, ee_addr);
1771 
1772 	/* Shift the read command bits out. */
1773 	for (i = 4 + addr_len; i >= 0; i--) {
1774 		short dataval = (read_cmd & (1 << i)) ? EE_DATA_WRITE : 0;
1775 		writel(EE_ENB | dataval, ee_addr);
1776 		readl(ee_addr);
1777 		writel(EE_ENB | dataval | EE_SHIFT_CLK, ee_addr);
1778 		readl(ee_addr);
1779 		retval = (retval << 1) | ((readl(ee_addr) & EE_DATA_READ) ? 1 : 0);
1780 	}
1781 	writel(EE_ENB, ee_addr);
1782 	readl(ee_addr);
1783 
1784 	for (i = 16; i > 0; i--) {
1785 		writel(EE_ENB | EE_SHIFT_CLK, ee_addr);
1786 		readl(ee_addr);
1787 		retval = (retval << 1) | ((readl(ee_addr) & EE_DATA_READ) ? 1 : 0);
1788 		writel(EE_ENB, ee_addr);
1789 		readl(ee_addr);
1790 	}
1791 
1792 	/* Terminate the EEPROM access. */
1793 	writel(EE_ENB & ~EE_CS, ee_addr);
1794 	return retval;
1795 }
1796 
1797 static void de21041_get_srom_info(struct de_private *de)
1798 {
1799 	unsigned i, sa_offset = 0, ofs;
1800 	u8 ee_data[DE_EEPROM_SIZE + 6] = {};
1801 	unsigned ee_addr_size = tulip_read_eeprom(de->regs, 0xff, 8) & 0x40000 ? 8 : 6;
1802 	struct de_srom_info_leaf *il;
1803 	void *bufp;
1804 
1805 	/* download entire eeprom */
1806 	for (i = 0; i < DE_EEPROM_WORDS; i++)
1807 		((__le16 *)ee_data)[i] =
1808 			cpu_to_le16(tulip_read_eeprom(de->regs, i, ee_addr_size));
1809 
1810 	/* DEC now has a specification but early board makers
1811 	   just put the address in the first EEPROM locations. */
1812 	/* This does  memcmp(eedata, eedata+16, 8) */
1813 
1814 #ifndef CONFIG_MIPS_COBALT
1815 
1816 	for (i = 0; i < 8; i ++)
1817 		if (ee_data[i] != ee_data[16+i])
1818 			sa_offset = 20;
1819 
1820 #endif
1821 
1822 	/* store MAC address */
1823 	for (i = 0; i < 6; i ++)
1824 		de->dev->dev_addr[i] = ee_data[i + sa_offset];
1825 
1826 	/* get offset of controller 0 info leaf.  ignore 2nd byte. */
1827 	ofs = ee_data[SROMC0InfoLeaf];
1828 	if (ofs >= (sizeof(ee_data) - sizeof(struct de_srom_info_leaf) - sizeof(struct de_srom_media_block)))
1829 		goto bad_srom;
1830 
1831 	/* get pointer to info leaf */
1832 	il = (struct de_srom_info_leaf *) &ee_data[ofs];
1833 
1834 	/* paranoia checks */
1835 	if (il->n_blocks == 0)
1836 		goto bad_srom;
1837 	if ((sizeof(ee_data) - ofs) <
1838 	    (sizeof(struct de_srom_info_leaf) + (sizeof(struct de_srom_media_block) * il->n_blocks)))
1839 		goto bad_srom;
1840 
1841 	/* get default media type */
1842 	switch (get_unaligned(&il->default_media)) {
1843 	case 0x0001:  de->media_type = DE_MEDIA_BNC; break;
1844 	case 0x0002:  de->media_type = DE_MEDIA_AUI; break;
1845 	case 0x0204:  de->media_type = DE_MEDIA_TP_FD; break;
1846 	default: de->media_type = DE_MEDIA_TP_AUTO; break;
1847 	}
1848 
1849 	if (netif_msg_probe(de))
1850 		pr_info("de%d: SROM leaf offset %u, default media %s\n",
1851 		       de->board_idx, ofs, media_name[de->media_type]);
1852 
1853 	/* init SIA register values to defaults */
1854 	for (i = 0; i < DE_MAX_MEDIA; i++) {
1855 		de->media[i].type = DE_MEDIA_INVALID;
1856 		de->media[i].csr13 = 0xffff;
1857 		de->media[i].csr14 = 0xffff;
1858 		de->media[i].csr15 = 0xffff;
1859 	}
1860 
1861 	/* parse media blocks to see what medias are supported,
1862 	 * and if any custom CSR values are provided
1863 	 */
1864 	bufp = ((void *)il) + sizeof(*il);
1865 	for (i = 0; i < il->n_blocks; i++) {
1866 		struct de_srom_media_block *ib = bufp;
1867 		unsigned idx;
1868 
1869 		/* index based on media type in media block */
1870 		switch(ib->opts & MediaBlockMask) {
1871 		case 0: /* 10baseT */
1872 			de->media_supported |= SUPPORTED_TP | SUPPORTED_10baseT_Half
1873 					  | SUPPORTED_Autoneg;
1874 			idx = DE_MEDIA_TP;
1875 			de->media[DE_MEDIA_TP_AUTO].type = DE_MEDIA_TP_AUTO;
1876 			break;
1877 		case 1: /* BNC */
1878 			de->media_supported |= SUPPORTED_BNC;
1879 			idx = DE_MEDIA_BNC;
1880 			break;
1881 		case 2: /* AUI */
1882 			de->media_supported |= SUPPORTED_AUI;
1883 			idx = DE_MEDIA_AUI;
1884 			break;
1885 		case 4: /* 10baseT-FD */
1886 			de->media_supported |= SUPPORTED_TP | SUPPORTED_10baseT_Full
1887 					  | SUPPORTED_Autoneg;
1888 			idx = DE_MEDIA_TP_FD;
1889 			de->media[DE_MEDIA_TP_AUTO].type = DE_MEDIA_TP_AUTO;
1890 			break;
1891 		default:
1892 			goto bad_srom;
1893 		}
1894 
1895 		de->media[idx].type = idx;
1896 
1897 		if (netif_msg_probe(de))
1898 			pr_info("de%d:   media block #%u: %s",
1899 				de->board_idx, i,
1900 				media_name[de->media[idx].type]);
1901 
1902 		bufp += sizeof (ib->opts);
1903 
1904 		if (ib->opts & MediaCustomCSRs) {
1905 			de->media[idx].csr13 = get_unaligned(&ib->csr13);
1906 			de->media[idx].csr14 = get_unaligned(&ib->csr14);
1907 			de->media[idx].csr15 = get_unaligned(&ib->csr15);
1908 			bufp += sizeof(ib->csr13) + sizeof(ib->csr14) +
1909 				sizeof(ib->csr15);
1910 
1911 			if (netif_msg_probe(de))
1912 				pr_cont(" (%x,%x,%x)\n",
1913 					de->media[idx].csr13,
1914 					de->media[idx].csr14,
1915 					de->media[idx].csr15);
1916 
1917 		} else {
1918 			if (netif_msg_probe(de))
1919 				pr_cont("\n");
1920 		}
1921 
1922 		if (bufp > ((void *)&ee_data[DE_EEPROM_SIZE - 3]))
1923 			break;
1924 	}
1925 
1926 	de->media_advertise = de->media_supported;
1927 
1928 fill_defaults:
1929 	/* fill in defaults, for cases where custom CSRs not used */
1930 	for (i = 0; i < DE_MAX_MEDIA; i++) {
1931 		if (de->media[i].csr13 == 0xffff)
1932 			de->media[i].csr13 = t21041_csr13[i];
1933 		if (de->media[i].csr14 == 0xffff) {
1934 			/* autonegotiation is broken at least on some chip
1935 			   revisions - rev. 0x21 works, 0x11 does not */
1936 			if (de->pdev->revision < 0x20)
1937 				de->media[i].csr14 = t21041_csr14_brk[i];
1938 			else
1939 				de->media[i].csr14 = t21041_csr14[i];
1940 		}
1941 		if (de->media[i].csr15 == 0xffff)
1942 			de->media[i].csr15 = t21041_csr15[i];
1943 	}
1944 
1945 	de->ee_data = kmemdup(&ee_data[0], DE_EEPROM_SIZE, GFP_KERNEL);
1946 
1947 	return;
1948 
1949 bad_srom:
1950 	/* for error cases, it's ok to assume we support all these */
1951 	for (i = 0; i < DE_MAX_MEDIA; i++)
1952 		de->media[i].type = i;
1953 	de->media_supported =
1954 		SUPPORTED_10baseT_Half |
1955 		SUPPORTED_10baseT_Full |
1956 		SUPPORTED_Autoneg |
1957 		SUPPORTED_TP |
1958 		SUPPORTED_AUI |
1959 		SUPPORTED_BNC;
1960 	goto fill_defaults;
1961 }
1962 
1963 static const struct net_device_ops de_netdev_ops = {
1964 	.ndo_open		= de_open,
1965 	.ndo_stop		= de_close,
1966 	.ndo_set_rx_mode	= de_set_rx_mode,
1967 	.ndo_start_xmit		= de_start_xmit,
1968 	.ndo_get_stats		= de_get_stats,
1969 	.ndo_tx_timeout 	= de_tx_timeout,
1970 	.ndo_set_mac_address 	= eth_mac_addr,
1971 	.ndo_validate_addr	= eth_validate_addr,
1972 };
1973 
1974 static int de_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
1975 {
1976 	struct net_device *dev;
1977 	struct de_private *de;
1978 	int rc;
1979 	void __iomem *regs;
1980 	unsigned long pciaddr;
1981 	static int board_idx = -1;
1982 
1983 	board_idx++;
1984 
1985 #ifndef MODULE
1986 	if (board_idx == 0)
1987 		pr_info("%s\n", version);
1988 #endif
1989 
1990 	/* allocate a new ethernet device structure, and fill in defaults */
1991 	dev = alloc_etherdev(sizeof(struct de_private));
1992 	if (!dev)
1993 		return -ENOMEM;
1994 
1995 	dev->netdev_ops = &de_netdev_ops;
1996 	SET_NETDEV_DEV(dev, &pdev->dev);
1997 	dev->ethtool_ops = &de_ethtool_ops;
1998 	dev->watchdog_timeo = TX_TIMEOUT;
1999 
2000 	de = netdev_priv(dev);
2001 	de->de21040 = ent->driver_data == 0 ? 1 : 0;
2002 	de->pdev = pdev;
2003 	de->dev = dev;
2004 	de->msg_enable = (debug < 0 ? DE_DEF_MSG_ENABLE : debug);
2005 	de->board_idx = board_idx;
2006 	spin_lock_init (&de->lock);
2007 	init_timer(&de->media_timer);
2008 	if (de->de21040)
2009 		de->media_timer.function = de21040_media_timer;
2010 	else
2011 		de->media_timer.function = de21041_media_timer;
2012 	de->media_timer.data = (unsigned long) de;
2013 
2014 	netif_carrier_off(dev);
2015 
2016 	/* wake up device, assign resources */
2017 	rc = pci_enable_device(pdev);
2018 	if (rc)
2019 		goto err_out_free;
2020 
2021 	/* reserve PCI resources to ensure driver atomicity */
2022 	rc = pci_request_regions(pdev, DRV_NAME);
2023 	if (rc)
2024 		goto err_out_disable;
2025 
2026 	/* check for invalid IRQ value */
2027 	if (pdev->irq < 2) {
2028 		rc = -EIO;
2029 		pr_err("invalid irq (%d) for pci dev %s\n",
2030 		       pdev->irq, pci_name(pdev));
2031 		goto err_out_res;
2032 	}
2033 
2034 	/* obtain and check validity of PCI I/O address */
2035 	pciaddr = pci_resource_start(pdev, 1);
2036 	if (!pciaddr) {
2037 		rc = -EIO;
2038 		pr_err("no MMIO resource for pci dev %s\n", pci_name(pdev));
2039 		goto err_out_res;
2040 	}
2041 	if (pci_resource_len(pdev, 1) < DE_REGS_SIZE) {
2042 		rc = -EIO;
2043 		pr_err("MMIO resource (%llx) too small on pci dev %s\n",
2044 		       (unsigned long long)pci_resource_len(pdev, 1),
2045 		       pci_name(pdev));
2046 		goto err_out_res;
2047 	}
2048 
2049 	/* remap CSR registers */
2050 	regs = ioremap_nocache(pciaddr, DE_REGS_SIZE);
2051 	if (!regs) {
2052 		rc = -EIO;
2053 		pr_err("Cannot map PCI MMIO (%llx@%lx) on pci dev %s\n",
2054 		       (unsigned long long)pci_resource_len(pdev, 1),
2055 		       pciaddr, pci_name(pdev));
2056 		goto err_out_res;
2057 	}
2058 	de->regs = regs;
2059 
2060 	de_adapter_wake(de);
2061 
2062 	/* make sure hardware is not running */
2063 	rc = de_reset_mac(de);
2064 	if (rc) {
2065 		pr_err("Cannot reset MAC, pci dev %s\n", pci_name(pdev));
2066 		goto err_out_iomap;
2067 	}
2068 
2069 	/* get MAC address, initialize default media type and
2070 	 * get list of supported media
2071 	 */
2072 	if (de->de21040) {
2073 		de21040_get_mac_address(de);
2074 		de21040_get_media_info(de);
2075 	} else {
2076 		de21041_get_srom_info(de);
2077 	}
2078 
2079 	/* register new network interface with kernel */
2080 	rc = register_netdev(dev);
2081 	if (rc)
2082 		goto err_out_iomap;
2083 
2084 	/* print info about board and interface just registered */
2085 	netdev_info(dev, "%s at %p, %pM, IRQ %d\n",
2086 		    de->de21040 ? "21040" : "21041",
2087 		    regs, dev->dev_addr, pdev->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 
2099 err_out_iomap:
2100 	kfree(de->ee_data);
2101 	iounmap(regs);
2102 err_out_res:
2103 	pci_release_regions(pdev);
2104 err_out_disable:
2105 	pci_disable_device(pdev);
2106 err_out_free:
2107 	free_netdev(dev);
2108 	return rc;
2109 }
2110 
2111 static void 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 	free_netdev(dev);
2123 }
2124 
2125 #ifdef CONFIG_PM
2126 
2127 static int de_suspend (struct pci_dev *pdev, pm_message_t state)
2128 {
2129 	struct net_device *dev = pci_get_drvdata (pdev);
2130 	struct de_private *de = netdev_priv(dev);
2131 
2132 	rtnl_lock();
2133 	if (netif_running (dev)) {
2134 		const int irq = pdev->irq;
2135 
2136 		del_timer_sync(&de->media_timer);
2137 
2138 		disable_irq(irq);
2139 		spin_lock_irq(&de->lock);
2140 
2141 		de_stop_hw(de);
2142 		netif_stop_queue(dev);
2143 		netif_device_detach(dev);
2144 		netif_carrier_off(dev);
2145 
2146 		spin_unlock_irq(&de->lock);
2147 		enable_irq(irq);
2148 
2149 		/* Update the error counts. */
2150 		__de_get_stats(de);
2151 
2152 		synchronize_irq(irq);
2153 		de_clean_rings(de);
2154 
2155 		de_adapter_sleep(de);
2156 		pci_disable_device(pdev);
2157 	} else {
2158 		netif_device_detach(dev);
2159 	}
2160 	rtnl_unlock();
2161 	return 0;
2162 }
2163 
2164 static int de_resume (struct pci_dev *pdev)
2165 {
2166 	struct net_device *dev = pci_get_drvdata (pdev);
2167 	struct de_private *de = netdev_priv(dev);
2168 	int retval = 0;
2169 
2170 	rtnl_lock();
2171 	if (netif_device_present(dev))
2172 		goto out;
2173 	if (!netif_running(dev))
2174 		goto out_attach;
2175 	if ((retval = pci_enable_device(pdev))) {
2176 		netdev_err(dev, "pci_enable_device failed in resume\n");
2177 		goto out;
2178 	}
2179 	pci_set_master(pdev);
2180 	de_init_rings(de);
2181 	de_init_hw(de);
2182 out_attach:
2183 	netif_device_attach(dev);
2184 out:
2185 	rtnl_unlock();
2186 	return 0;
2187 }
2188 
2189 #endif /* CONFIG_PM */
2190 
2191 static struct pci_driver de_driver = {
2192 	.name		= DRV_NAME,
2193 	.id_table	= de_pci_tbl,
2194 	.probe		= de_init_one,
2195 	.remove		= de_remove_one,
2196 #ifdef CONFIG_PM
2197 	.suspend	= de_suspend,
2198 	.resume		= de_resume,
2199 #endif
2200 };
2201 
2202 static int __init de_init (void)
2203 {
2204 #ifdef MODULE
2205 	pr_info("%s\n", version);
2206 #endif
2207 	return pci_register_driver(&de_driver);
2208 }
2209 
2210 static void __exit de_exit (void)
2211 {
2212 	pci_unregister_driver (&de_driver);
2213 }
2214 
2215 module_init(de_init);
2216 module_exit(de_exit);
2217