1 /* sundance.c: A Linux device driver for the Sundance ST201 "Alta". */
2 /*
3 	Written 1999-2000 by Donald Becker.
4 
5 	This software may be used and distributed according to the terms of
6 	the GNU General Public License (GPL), incorporated herein by reference.
7 	Drivers based on or derived from this code fall under the GPL and must
8 	retain the authorship, copyright and license notice.  This file is not
9 	a complete program and may only be used when the entire operating
10 	system is licensed under the GPL.
11 
12 	The author may be reached as becker@scyld.com, or C/O
13 	Scyld Computing Corporation
14 	410 Severn Ave., Suite 210
15 	Annapolis MD 21403
16 
17 	Support and updates available at
18 	http://www.scyld.com/network/sundance.html
19 	[link no longer provides useful info -jgarzik]
20 	Archives of the mailing list are still available at
21 	http://www.beowulf.org/pipermail/netdrivers/
22 
23 */
24 
25 #define DRV_NAME	"sundance"
26 #define DRV_VERSION	"1.2"
27 #define DRV_RELDATE	"11-Sep-2006"
28 
29 
30 /* The user-configurable values.
31    These may be modified when a driver module is loaded.*/
32 static int debug = 1;			/* 1 normal messages, 0 quiet .. 7 verbose. */
33 /* Maximum number of multicast addresses to filter (vs. rx-all-multicast).
34    Typical is a 64 element hash table based on the Ethernet CRC.  */
35 static const int multicast_filter_limit = 32;
36 
37 /* Set the copy breakpoint for the copy-only-tiny-frames scheme.
38    Setting to > 1518 effectively disables this feature.
39    This chip can receive into offset buffers, so the Alpha does not
40    need a copy-align. */
41 static int rx_copybreak;
42 static int flowctrl=1;
43 
44 /* media[] specifies the media type the NIC operates at.
45 		 autosense	Autosensing active media.
46 		 10mbps_hd 	10Mbps half duplex.
47 		 10mbps_fd 	10Mbps full duplex.
48 		 100mbps_hd 	100Mbps half duplex.
49 		 100mbps_fd 	100Mbps full duplex.
50 		 0		Autosensing active media.
51 		 1	 	10Mbps half duplex.
52 		 2	 	10Mbps full duplex.
53 		 3	 	100Mbps half duplex.
54 		 4	 	100Mbps full duplex.
55 */
56 #define MAX_UNITS 8
57 static char *media[MAX_UNITS];
58 
59 
60 /* Operational parameters that are set at compile time. */
61 
62 /* Keep the ring sizes a power of two for compile efficiency.
63    The compiler will convert <unsigned>'%'<2^N> into a bit mask.
64    Making the Tx ring too large decreases the effectiveness of channel
65    bonding and packet priority, and more than 128 requires modifying the
66    Tx error recovery.
67    Large receive rings merely waste memory. */
68 #define TX_RING_SIZE	32
69 #define TX_QUEUE_LEN	(TX_RING_SIZE - 1) /* Limit ring entries actually used.  */
70 #define RX_RING_SIZE	64
71 #define RX_BUDGET	32
72 #define TX_TOTAL_SIZE	TX_RING_SIZE*sizeof(struct netdev_desc)
73 #define RX_TOTAL_SIZE	RX_RING_SIZE*sizeof(struct netdev_desc)
74 
75 /* Operational parameters that usually are not changed. */
76 /* Time in jiffies before concluding the transmitter is hung. */
77 #define TX_TIMEOUT  (4*HZ)
78 #define PKT_BUF_SZ		1536	/* Size of each temporary Rx buffer.*/
79 
80 /* Include files, designed to support most kernel versions 2.0.0 and later. */
81 #include <linux/module.h>
82 #include <linux/kernel.h>
83 #include <linux/string.h>
84 #include <linux/timer.h>
85 #include <linux/errno.h>
86 #include <linux/ioport.h>
87 #include <linux/interrupt.h>
88 #include <linux/pci.h>
89 #include <linux/netdevice.h>
90 #include <linux/etherdevice.h>
91 #include <linux/skbuff.h>
92 #include <linux/init.h>
93 #include <linux/bitops.h>
94 #include <asm/uaccess.h>
95 #include <asm/processor.h>		/* Processor type for cache alignment. */
96 #include <asm/io.h>
97 #include <linux/delay.h>
98 #include <linux/spinlock.h>
99 #include <linux/dma-mapping.h>
100 #include <linux/crc32.h>
101 #include <linux/ethtool.h>
102 #include <linux/mii.h>
103 
104 /* These identify the driver base version and may not be removed. */
105 static const char version[] =
106 	KERN_INFO DRV_NAME ".c:v" DRV_VERSION " " DRV_RELDATE
107 	" Written by Donald Becker\n";
108 
109 MODULE_AUTHOR("Donald Becker <becker@scyld.com>");
110 MODULE_DESCRIPTION("Sundance Alta Ethernet driver");
111 MODULE_LICENSE("GPL");
112 
113 module_param(debug, int, 0);
114 module_param(rx_copybreak, int, 0);
115 module_param_array(media, charp, NULL, 0);
116 module_param(flowctrl, int, 0);
117 MODULE_PARM_DESC(debug, "Sundance Alta debug level (0-5)");
118 MODULE_PARM_DESC(rx_copybreak, "Sundance Alta copy breakpoint for copy-only-tiny-frames");
119 MODULE_PARM_DESC(flowctrl, "Sundance Alta flow control [0|1]");
120 
121 /*
122 				Theory of Operation
123 
124 I. Board Compatibility
125 
126 This driver is designed for the Sundance Technologies "Alta" ST201 chip.
127 
128 II. Board-specific settings
129 
130 III. Driver operation
131 
132 IIIa. Ring buffers
133 
134 This driver uses two statically allocated fixed-size descriptor lists
135 formed into rings by a branch from the final descriptor to the beginning of
136 the list.  The ring sizes are set at compile time by RX/TX_RING_SIZE.
137 Some chips explicitly use only 2^N sized rings, while others use a
138 'next descriptor' pointer that the driver forms into rings.
139 
140 IIIb/c. Transmit/Receive Structure
141 
142 This driver uses a zero-copy receive and transmit scheme.
143 The driver allocates full frame size skbuffs for the Rx ring buffers at
144 open() time and passes the skb->data field to the chip as receive data
145 buffers.  When an incoming frame is less than RX_COPYBREAK bytes long,
146 a fresh skbuff is allocated and the frame is copied to the new skbuff.
147 When the incoming frame is larger, the skbuff is passed directly up the
148 protocol stack.  Buffers consumed this way are replaced by newly allocated
149 skbuffs in a later phase of receives.
150 
151 The RX_COPYBREAK value is chosen to trade-off the memory wasted by
152 using a full-sized skbuff for small frames vs. the copying costs of larger
153 frames.  New boards are typically used in generously configured machines
154 and the underfilled buffers have negligible impact compared to the benefit of
155 a single allocation size, so the default value of zero results in never
156 copying packets.  When copying is done, the cost is usually mitigated by using
157 a combined copy/checksum routine.  Copying also preloads the cache, which is
158 most useful with small frames.
159 
160 A subtle aspect of the operation is that the IP header at offset 14 in an
161 ethernet frame isn't longword aligned for further processing.
162 Unaligned buffers are permitted by the Sundance hardware, so
163 frames are received into the skbuff at an offset of "+2", 16-byte aligning
164 the IP header.
165 
166 IIId. Synchronization
167 
168 The driver runs as two independent, single-threaded flows of control.  One
169 is the send-packet routine, which enforces single-threaded use by the
170 dev->tbusy flag.  The other thread is the interrupt handler, which is single
171 threaded by the hardware and interrupt handling software.
172 
173 The send packet thread has partial control over the Tx ring and 'dev->tbusy'
174 flag.  It sets the tbusy flag whenever it's queuing a Tx packet. If the next
175 queue slot is empty, it clears the tbusy flag when finished otherwise it sets
176 the 'lp->tx_full' flag.
177 
178 The interrupt handler has exclusive control over the Rx ring and records stats
179 from the Tx ring.  After reaping the stats, it marks the Tx queue entry as
180 empty by incrementing the dirty_tx mark. Iff the 'lp->tx_full' flag is set, it
181 clears both the tx_full and tbusy flags.
182 
183 IV. Notes
184 
185 IVb. References
186 
187 The Sundance ST201 datasheet, preliminary version.
188 The Kendin KS8723 datasheet, preliminary version.
189 The ICplus IP100 datasheet, preliminary version.
190 http://www.scyld.com/expert/100mbps.html
191 http://www.scyld.com/expert/NWay.html
192 
193 IVc. Errata
194 
195 */
196 
197 /* Work-around for Kendin chip bugs. */
198 #ifndef CONFIG_SUNDANCE_MMIO
199 #define USE_IO_OPS 1
200 #endif
201 
202 static DEFINE_PCI_DEVICE_TABLE(sundance_pci_tbl) = {
203 	{ 0x1186, 0x1002, 0x1186, 0x1002, 0, 0, 0 },
204 	{ 0x1186, 0x1002, 0x1186, 0x1003, 0, 0, 1 },
205 	{ 0x1186, 0x1002, 0x1186, 0x1012, 0, 0, 2 },
206 	{ 0x1186, 0x1002, 0x1186, 0x1040, 0, 0, 3 },
207 	{ 0x1186, 0x1002, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4 },
208 	{ 0x13F0, 0x0201, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5 },
209 	{ 0x13F0, 0x0200, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 6 },
210 	{ }
211 };
212 MODULE_DEVICE_TABLE(pci, sundance_pci_tbl);
213 
214 enum {
215 	netdev_io_size = 128
216 };
217 
218 struct pci_id_info {
219         const char *name;
220 };
221 static const struct pci_id_info pci_id_tbl[] = {
222 	{"D-Link DFE-550TX FAST Ethernet Adapter"},
223 	{"D-Link DFE-550FX 100Mbps Fiber-optics Adapter"},
224 	{"D-Link DFE-580TX 4 port Server Adapter"},
225 	{"D-Link DFE-530TXS FAST Ethernet Adapter"},
226 	{"D-Link DL10050-based FAST Ethernet Adapter"},
227 	{"Sundance Technology Alta"},
228 	{"IC Plus Corporation IP100A FAST Ethernet Adapter"},
229 	{ }	/* terminate list. */
230 };
231 
232 /* This driver was written to use PCI memory space, however x86-oriented
233    hardware often uses I/O space accesses. */
234 
235 /* Offsets to the device registers.
236    Unlike software-only systems, device drivers interact with complex hardware.
237    It's not useful to define symbolic names for every register bit in the
238    device.  The name can only partially document the semantics and make
239    the driver longer and more difficult to read.
240    In general, only the important configuration values or bits changed
241    multiple times should be defined symbolically.
242 */
243 enum alta_offsets {
244 	DMACtrl = 0x00,
245 	TxListPtr = 0x04,
246 	TxDMABurstThresh = 0x08,
247 	TxDMAUrgentThresh = 0x09,
248 	TxDMAPollPeriod = 0x0a,
249 	RxDMAStatus = 0x0c,
250 	RxListPtr = 0x10,
251 	DebugCtrl0 = 0x1a,
252 	DebugCtrl1 = 0x1c,
253 	RxDMABurstThresh = 0x14,
254 	RxDMAUrgentThresh = 0x15,
255 	RxDMAPollPeriod = 0x16,
256 	LEDCtrl = 0x1a,
257 	ASICCtrl = 0x30,
258 	EEData = 0x34,
259 	EECtrl = 0x36,
260 	FlashAddr = 0x40,
261 	FlashData = 0x44,
262 	WakeEvent = 0x45,
263 	TxStatus = 0x46,
264 	TxFrameId = 0x47,
265 	DownCounter = 0x18,
266 	IntrClear = 0x4a,
267 	IntrEnable = 0x4c,
268 	IntrStatus = 0x4e,
269 	MACCtrl0 = 0x50,
270 	MACCtrl1 = 0x52,
271 	StationAddr = 0x54,
272 	MaxFrameSize = 0x5A,
273 	RxMode = 0x5c,
274 	MIICtrl = 0x5e,
275 	MulticastFilter0 = 0x60,
276 	MulticastFilter1 = 0x64,
277 	RxOctetsLow = 0x68,
278 	RxOctetsHigh = 0x6a,
279 	TxOctetsLow = 0x6c,
280 	TxOctetsHigh = 0x6e,
281 	TxFramesOK = 0x70,
282 	RxFramesOK = 0x72,
283 	StatsCarrierError = 0x74,
284 	StatsLateColl = 0x75,
285 	StatsMultiColl = 0x76,
286 	StatsOneColl = 0x77,
287 	StatsTxDefer = 0x78,
288 	RxMissed = 0x79,
289 	StatsTxXSDefer = 0x7a,
290 	StatsTxAbort = 0x7b,
291 	StatsBcastTx = 0x7c,
292 	StatsBcastRx = 0x7d,
293 	StatsMcastTx = 0x7e,
294 	StatsMcastRx = 0x7f,
295 	/* Aliased and bogus values! */
296 	RxStatus = 0x0c,
297 };
298 
299 #define ASIC_HI_WORD(x)	((x) + 2)
300 
301 enum ASICCtrl_HiWord_bit {
302 	GlobalReset = 0x0001,
303 	RxReset = 0x0002,
304 	TxReset = 0x0004,
305 	DMAReset = 0x0008,
306 	FIFOReset = 0x0010,
307 	NetworkReset = 0x0020,
308 	HostReset = 0x0040,
309 	ResetBusy = 0x0400,
310 };
311 
312 /* Bits in the interrupt status/mask registers. */
313 enum intr_status_bits {
314 	IntrSummary=0x0001, IntrPCIErr=0x0002, IntrMACCtrl=0x0008,
315 	IntrTxDone=0x0004, IntrRxDone=0x0010, IntrRxStart=0x0020,
316 	IntrDrvRqst=0x0040,
317 	StatsMax=0x0080, LinkChange=0x0100,
318 	IntrTxDMADone=0x0200, IntrRxDMADone=0x0400,
319 };
320 
321 /* Bits in the RxMode register. */
322 enum rx_mode_bits {
323 	AcceptAllIPMulti=0x20, AcceptMultiHash=0x10, AcceptAll=0x08,
324 	AcceptBroadcast=0x04, AcceptMulticast=0x02, AcceptMyPhys=0x01,
325 };
326 /* Bits in MACCtrl. */
327 enum mac_ctrl0_bits {
328 	EnbFullDuplex=0x20, EnbRcvLargeFrame=0x40,
329 	EnbFlowCtrl=0x100, EnbPassRxCRC=0x200,
330 };
331 enum mac_ctrl1_bits {
332 	StatsEnable=0x0020,	StatsDisable=0x0040, StatsEnabled=0x0080,
333 	TxEnable=0x0100, TxDisable=0x0200, TxEnabled=0x0400,
334 	RxEnable=0x0800, RxDisable=0x1000, RxEnabled=0x2000,
335 };
336 
337 /* Bits in WakeEvent register. */
338 enum wake_event_bits {
339 	WakePktEnable = 0x01,
340 	MagicPktEnable = 0x02,
341 	LinkEventEnable = 0x04,
342 	WolEnable = 0x80,
343 };
344 
345 /* The Rx and Tx buffer descriptors. */
346 /* Note that using only 32 bit fields simplifies conversion to big-endian
347    architectures. */
348 struct netdev_desc {
349 	__le32 next_desc;
350 	__le32 status;
351 	struct desc_frag { __le32 addr, length; } frag[1];
352 };
353 
354 /* Bits in netdev_desc.status */
355 enum desc_status_bits {
356 	DescOwn=0x8000,
357 	DescEndPacket=0x4000,
358 	DescEndRing=0x2000,
359 	LastFrag=0x80000000,
360 	DescIntrOnTx=0x8000,
361 	DescIntrOnDMADone=0x80000000,
362 	DisableAlign = 0x00000001,
363 };
364 
365 #define PRIV_ALIGN	15 	/* Required alignment mask */
366 /* Use  __attribute__((aligned (L1_CACHE_BYTES)))  to maintain alignment
367    within the structure. */
368 #define MII_CNT		4
369 struct netdev_private {
370 	/* Descriptor rings first for alignment. */
371 	struct netdev_desc *rx_ring;
372 	struct netdev_desc *tx_ring;
373 	struct sk_buff* rx_skbuff[RX_RING_SIZE];
374 	struct sk_buff* tx_skbuff[TX_RING_SIZE];
375         dma_addr_t tx_ring_dma;
376         dma_addr_t rx_ring_dma;
377 	struct timer_list timer;		/* Media monitoring timer. */
378 	/* ethtool extra stats */
379 	struct {
380 		u64 tx_multiple_collisions;
381 		u64 tx_single_collisions;
382 		u64 tx_late_collisions;
383 		u64 tx_deferred;
384 		u64 tx_deferred_excessive;
385 		u64 tx_aborted;
386 		u64 tx_bcasts;
387 		u64 rx_bcasts;
388 		u64 tx_mcasts;
389 		u64 rx_mcasts;
390 	} xstats;
391 	/* Frequently used values: keep some adjacent for cache effect. */
392 	spinlock_t lock;
393 	int msg_enable;
394 	int chip_id;
395 	unsigned int cur_rx, dirty_rx;		/* Producer/consumer ring indices */
396 	unsigned int rx_buf_sz;			/* Based on MTU+slack. */
397 	struct netdev_desc *last_tx;		/* Last Tx descriptor used. */
398 	unsigned int cur_tx, dirty_tx;
399 	/* These values are keep track of the transceiver/media in use. */
400 	unsigned int flowctrl:1;
401 	unsigned int default_port:4;		/* Last dev->if_port value. */
402 	unsigned int an_enable:1;
403 	unsigned int speed;
404 	unsigned int wol_enabled:1;			/* Wake on LAN enabled */
405 	struct tasklet_struct rx_tasklet;
406 	struct tasklet_struct tx_tasklet;
407 	int budget;
408 	int cur_task;
409 	/* Multicast and receive mode. */
410 	spinlock_t mcastlock;			/* SMP lock multicast updates. */
411 	u16 mcast_filter[4];
412 	/* MII transceiver section. */
413 	struct mii_if_info mii_if;
414 	int mii_preamble_required;
415 	unsigned char phys[MII_CNT];		/* MII device addresses, only first one used. */
416 	struct pci_dev *pci_dev;
417 	void __iomem *base;
418 	spinlock_t statlock;
419 };
420 
421 /* The station address location in the EEPROM. */
422 #define EEPROM_SA_OFFSET	0x10
423 #define DEFAULT_INTR (IntrRxDMADone | IntrPCIErr | \
424 			IntrDrvRqst | IntrTxDone | StatsMax | \
425 			LinkChange)
426 
427 static int  change_mtu(struct net_device *dev, int new_mtu);
428 static int  eeprom_read(void __iomem *ioaddr, int location);
429 static int  mdio_read(struct net_device *dev, int phy_id, int location);
430 static void mdio_write(struct net_device *dev, int phy_id, int location, int value);
431 static int  mdio_wait_link(struct net_device *dev, int wait);
432 static int  netdev_open(struct net_device *dev);
433 static void check_duplex(struct net_device *dev);
434 static void netdev_timer(unsigned long data);
435 static void tx_timeout(struct net_device *dev);
436 static void init_ring(struct net_device *dev);
437 static netdev_tx_t start_tx(struct sk_buff *skb, struct net_device *dev);
438 static int reset_tx (struct net_device *dev);
439 static irqreturn_t intr_handler(int irq, void *dev_instance);
440 static void rx_poll(unsigned long data);
441 static void tx_poll(unsigned long data);
442 static void refill_rx (struct net_device *dev);
443 static void netdev_error(struct net_device *dev, int intr_status);
444 static void netdev_error(struct net_device *dev, int intr_status);
445 static void set_rx_mode(struct net_device *dev);
446 static int __set_mac_addr(struct net_device *dev);
447 static int sundance_set_mac_addr(struct net_device *dev, void *data);
448 static struct net_device_stats *get_stats(struct net_device *dev);
449 static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
450 static int  netdev_close(struct net_device *dev);
451 static const struct ethtool_ops ethtool_ops;
452 
453 static void sundance_reset(struct net_device *dev, unsigned long reset_cmd)
454 {
455 	struct netdev_private *np = netdev_priv(dev);
456 	void __iomem *ioaddr = np->base + ASICCtrl;
457 	int countdown;
458 
459 	/* ST201 documentation states ASICCtrl is a 32bit register */
460 	iowrite32 (reset_cmd | ioread32 (ioaddr), ioaddr);
461 	/* ST201 documentation states reset can take up to 1 ms */
462 	countdown = 10 + 1;
463 	while (ioread32 (ioaddr) & (ResetBusy << 16)) {
464 		if (--countdown == 0) {
465 			printk(KERN_WARNING "%s : reset not completed !!\n", dev->name);
466 			break;
467 		}
468 		udelay(100);
469 	}
470 }
471 
472 static const struct net_device_ops netdev_ops = {
473 	.ndo_open		= netdev_open,
474 	.ndo_stop		= netdev_close,
475 	.ndo_start_xmit		= start_tx,
476 	.ndo_get_stats 		= get_stats,
477 	.ndo_set_rx_mode	= set_rx_mode,
478 	.ndo_do_ioctl 		= netdev_ioctl,
479 	.ndo_tx_timeout		= tx_timeout,
480 	.ndo_change_mtu		= change_mtu,
481 	.ndo_set_mac_address 	= sundance_set_mac_addr,
482 	.ndo_validate_addr	= eth_validate_addr,
483 };
484 
485 static int sundance_probe1(struct pci_dev *pdev,
486 			   const struct pci_device_id *ent)
487 {
488 	struct net_device *dev;
489 	struct netdev_private *np;
490 	static int card_idx;
491 	int chip_idx = ent->driver_data;
492 	int irq;
493 	int i;
494 	void __iomem *ioaddr;
495 	u16 mii_ctl;
496 	void *ring_space;
497 	dma_addr_t ring_dma;
498 #ifdef USE_IO_OPS
499 	int bar = 0;
500 #else
501 	int bar = 1;
502 #endif
503 	int phy, phy_end, phy_idx = 0;
504 
505 /* when built into the kernel, we only print version if device is found */
506 #ifndef MODULE
507 	static int printed_version;
508 	if (!printed_version++)
509 		printk(version);
510 #endif
511 
512 	if (pci_enable_device(pdev))
513 		return -EIO;
514 	pci_set_master(pdev);
515 
516 	irq = pdev->irq;
517 
518 	dev = alloc_etherdev(sizeof(*np));
519 	if (!dev)
520 		return -ENOMEM;
521 	SET_NETDEV_DEV(dev, &pdev->dev);
522 
523 	if (pci_request_regions(pdev, DRV_NAME))
524 		goto err_out_netdev;
525 
526 	ioaddr = pci_iomap(pdev, bar, netdev_io_size);
527 	if (!ioaddr)
528 		goto err_out_res;
529 
530 	for (i = 0; i < 3; i++)
531 		((__le16 *)dev->dev_addr)[i] =
532 			cpu_to_le16(eeprom_read(ioaddr, i + EEPROM_SA_OFFSET));
533 
534 	np = netdev_priv(dev);
535 	np->base = ioaddr;
536 	np->pci_dev = pdev;
537 	np->chip_id = chip_idx;
538 	np->msg_enable = (1 << debug) - 1;
539 	spin_lock_init(&np->lock);
540 	spin_lock_init(&np->statlock);
541 	tasklet_init(&np->rx_tasklet, rx_poll, (unsigned long)dev);
542 	tasklet_init(&np->tx_tasklet, tx_poll, (unsigned long)dev);
543 
544 	ring_space = dma_alloc_coherent(&pdev->dev, TX_TOTAL_SIZE,
545 			&ring_dma, GFP_KERNEL);
546 	if (!ring_space)
547 		goto err_out_cleardev;
548 	np->tx_ring = (struct netdev_desc *)ring_space;
549 	np->tx_ring_dma = ring_dma;
550 
551 	ring_space = dma_alloc_coherent(&pdev->dev, RX_TOTAL_SIZE,
552 			&ring_dma, GFP_KERNEL);
553 	if (!ring_space)
554 		goto err_out_unmap_tx;
555 	np->rx_ring = (struct netdev_desc *)ring_space;
556 	np->rx_ring_dma = ring_dma;
557 
558 	np->mii_if.dev = dev;
559 	np->mii_if.mdio_read = mdio_read;
560 	np->mii_if.mdio_write = mdio_write;
561 	np->mii_if.phy_id_mask = 0x1f;
562 	np->mii_if.reg_num_mask = 0x1f;
563 
564 	/* The chip-specific entries in the device structure. */
565 	dev->netdev_ops = &netdev_ops;
566 	SET_ETHTOOL_OPS(dev, &ethtool_ops);
567 	dev->watchdog_timeo = TX_TIMEOUT;
568 
569 	pci_set_drvdata(pdev, dev);
570 
571 	i = register_netdev(dev);
572 	if (i)
573 		goto err_out_unmap_rx;
574 
575 	printk(KERN_INFO "%s: %s at %p, %pM, IRQ %d.\n",
576 	       dev->name, pci_id_tbl[chip_idx].name, ioaddr,
577 	       dev->dev_addr, irq);
578 
579 	np->phys[0] = 1;		/* Default setting */
580 	np->mii_preamble_required++;
581 
582 	/*
583 	 * It seems some phys doesn't deal well with address 0 being accessed
584 	 * first
585 	 */
586 	if (sundance_pci_tbl[np->chip_id].device == 0x0200) {
587 		phy = 0;
588 		phy_end = 31;
589 	} else {
590 		phy = 1;
591 		phy_end = 32;	/* wraps to zero, due to 'phy & 0x1f' */
592 	}
593 	for (; phy <= phy_end && phy_idx < MII_CNT; phy++) {
594 		int phyx = phy & 0x1f;
595 		int mii_status = mdio_read(dev, phyx, MII_BMSR);
596 		if (mii_status != 0xffff  &&  mii_status != 0x0000) {
597 			np->phys[phy_idx++] = phyx;
598 			np->mii_if.advertising = mdio_read(dev, phyx, MII_ADVERTISE);
599 			if ((mii_status & 0x0040) == 0)
600 				np->mii_preamble_required++;
601 			printk(KERN_INFO "%s: MII PHY found at address %d, status "
602 				   "0x%4.4x advertising %4.4x.\n",
603 				   dev->name, phyx, mii_status, np->mii_if.advertising);
604 		}
605 	}
606 	np->mii_preamble_required--;
607 
608 	if (phy_idx == 0) {
609 		printk(KERN_INFO "%s: No MII transceiver found, aborting.  ASIC status %x\n",
610 			   dev->name, ioread32(ioaddr + ASICCtrl));
611 		goto err_out_unregister;
612 	}
613 
614 	np->mii_if.phy_id = np->phys[0];
615 
616 	/* Parse override configuration */
617 	np->an_enable = 1;
618 	if (card_idx < MAX_UNITS) {
619 		if (media[card_idx] != NULL) {
620 			np->an_enable = 0;
621 			if (strcmp (media[card_idx], "100mbps_fd") == 0 ||
622 			    strcmp (media[card_idx], "4") == 0) {
623 				np->speed = 100;
624 				np->mii_if.full_duplex = 1;
625 			} else if (strcmp (media[card_idx], "100mbps_hd") == 0 ||
626 				   strcmp (media[card_idx], "3") == 0) {
627 				np->speed = 100;
628 				np->mii_if.full_duplex = 0;
629 			} else if (strcmp (media[card_idx], "10mbps_fd") == 0 ||
630 				   strcmp (media[card_idx], "2") == 0) {
631 				np->speed = 10;
632 				np->mii_if.full_duplex = 1;
633 			} else if (strcmp (media[card_idx], "10mbps_hd") == 0 ||
634 				   strcmp (media[card_idx], "1") == 0) {
635 				np->speed = 10;
636 				np->mii_if.full_duplex = 0;
637 			} else {
638 				np->an_enable = 1;
639 			}
640 		}
641 		if (flowctrl == 1)
642 			np->flowctrl = 1;
643 	}
644 
645 	/* Fibre PHY? */
646 	if (ioread32 (ioaddr + ASICCtrl) & 0x80) {
647 		/* Default 100Mbps Full */
648 		if (np->an_enable) {
649 			np->speed = 100;
650 			np->mii_if.full_duplex = 1;
651 			np->an_enable = 0;
652 		}
653 	}
654 	/* Reset PHY */
655 	mdio_write (dev, np->phys[0], MII_BMCR, BMCR_RESET);
656 	mdelay (300);
657 	/* If flow control enabled, we need to advertise it.*/
658 	if (np->flowctrl)
659 		mdio_write (dev, np->phys[0], MII_ADVERTISE, np->mii_if.advertising | 0x0400);
660 	mdio_write (dev, np->phys[0], MII_BMCR, BMCR_ANENABLE|BMCR_ANRESTART);
661 	/* Force media type */
662 	if (!np->an_enable) {
663 		mii_ctl = 0;
664 		mii_ctl |= (np->speed == 100) ? BMCR_SPEED100 : 0;
665 		mii_ctl |= (np->mii_if.full_duplex) ? BMCR_FULLDPLX : 0;
666 		mdio_write (dev, np->phys[0], MII_BMCR, mii_ctl);
667 		printk (KERN_INFO "Override speed=%d, %s duplex\n",
668 			np->speed, np->mii_if.full_duplex ? "Full" : "Half");
669 
670 	}
671 
672 	/* Perhaps move the reset here? */
673 	/* Reset the chip to erase previous misconfiguration. */
674 	if (netif_msg_hw(np))
675 		printk("ASIC Control is %x.\n", ioread32(ioaddr + ASICCtrl));
676 	sundance_reset(dev, 0x00ff << 16);
677 	if (netif_msg_hw(np))
678 		printk("ASIC Control is now %x.\n", ioread32(ioaddr + ASICCtrl));
679 
680 	card_idx++;
681 	return 0;
682 
683 err_out_unregister:
684 	unregister_netdev(dev);
685 err_out_unmap_rx:
686 	dma_free_coherent(&pdev->dev, RX_TOTAL_SIZE,
687 		np->rx_ring, np->rx_ring_dma);
688 err_out_unmap_tx:
689 	dma_free_coherent(&pdev->dev, TX_TOTAL_SIZE,
690 		np->tx_ring, np->tx_ring_dma);
691 err_out_cleardev:
692 	pci_set_drvdata(pdev, NULL);
693 	pci_iounmap(pdev, ioaddr);
694 err_out_res:
695 	pci_release_regions(pdev);
696 err_out_netdev:
697 	free_netdev (dev);
698 	return -ENODEV;
699 }
700 
701 static int change_mtu(struct net_device *dev, int new_mtu)
702 {
703 	if ((new_mtu < 68) || (new_mtu > 8191)) /* Set by RxDMAFrameLen */
704 		return -EINVAL;
705 	if (netif_running(dev))
706 		return -EBUSY;
707 	dev->mtu = new_mtu;
708 	return 0;
709 }
710 
711 #define eeprom_delay(ee_addr)	ioread32(ee_addr)
712 /* Read the EEPROM and MII Management Data I/O (MDIO) interfaces. */
713 static int eeprom_read(void __iomem *ioaddr, int location)
714 {
715 	int boguscnt = 10000;		/* Typical 1900 ticks. */
716 	iowrite16(0x0200 | (location & 0xff), ioaddr + EECtrl);
717 	do {
718 		eeprom_delay(ioaddr + EECtrl);
719 		if (! (ioread16(ioaddr + EECtrl) & 0x8000)) {
720 			return ioread16(ioaddr + EEData);
721 		}
722 	} while (--boguscnt > 0);
723 	return 0;
724 }
725 
726 /*  MII transceiver control section.
727 	Read and write the MII registers using software-generated serial
728 	MDIO protocol.  See the MII specifications or DP83840A data sheet
729 	for details.
730 
731 	The maximum data clock rate is 2.5 Mhz.  The minimum timing is usually
732 	met by back-to-back 33Mhz PCI cycles. */
733 #define mdio_delay() ioread8(mdio_addr)
734 
735 enum mii_reg_bits {
736 	MDIO_ShiftClk=0x0001, MDIO_Data=0x0002, MDIO_EnbOutput=0x0004,
737 };
738 #define MDIO_EnbIn  (0)
739 #define MDIO_WRITE0 (MDIO_EnbOutput)
740 #define MDIO_WRITE1 (MDIO_Data | MDIO_EnbOutput)
741 
742 /* Generate the preamble required for initial synchronization and
743    a few older transceivers. */
744 static void mdio_sync(void __iomem *mdio_addr)
745 {
746 	int bits = 32;
747 
748 	/* Establish sync by sending at least 32 logic ones. */
749 	while (--bits >= 0) {
750 		iowrite8(MDIO_WRITE1, mdio_addr);
751 		mdio_delay();
752 		iowrite8(MDIO_WRITE1 | MDIO_ShiftClk, mdio_addr);
753 		mdio_delay();
754 	}
755 }
756 
757 static int mdio_read(struct net_device *dev, int phy_id, int location)
758 {
759 	struct netdev_private *np = netdev_priv(dev);
760 	void __iomem *mdio_addr = np->base + MIICtrl;
761 	int mii_cmd = (0xf6 << 10) | (phy_id << 5) | location;
762 	int i, retval = 0;
763 
764 	if (np->mii_preamble_required)
765 		mdio_sync(mdio_addr);
766 
767 	/* Shift the read command bits out. */
768 	for (i = 15; i >= 0; i--) {
769 		int dataval = (mii_cmd & (1 << i)) ? MDIO_WRITE1 : MDIO_WRITE0;
770 
771 		iowrite8(dataval, mdio_addr);
772 		mdio_delay();
773 		iowrite8(dataval | MDIO_ShiftClk, mdio_addr);
774 		mdio_delay();
775 	}
776 	/* Read the two transition, 16 data, and wire-idle bits. */
777 	for (i = 19; i > 0; i--) {
778 		iowrite8(MDIO_EnbIn, mdio_addr);
779 		mdio_delay();
780 		retval = (retval << 1) | ((ioread8(mdio_addr) & MDIO_Data) ? 1 : 0);
781 		iowrite8(MDIO_EnbIn | MDIO_ShiftClk, mdio_addr);
782 		mdio_delay();
783 	}
784 	return (retval>>1) & 0xffff;
785 }
786 
787 static void mdio_write(struct net_device *dev, int phy_id, int location, int value)
788 {
789 	struct netdev_private *np = netdev_priv(dev);
790 	void __iomem *mdio_addr = np->base + MIICtrl;
791 	int mii_cmd = (0x5002 << 16) | (phy_id << 23) | (location<<18) | value;
792 	int i;
793 
794 	if (np->mii_preamble_required)
795 		mdio_sync(mdio_addr);
796 
797 	/* Shift the command bits out. */
798 	for (i = 31; i >= 0; i--) {
799 		int dataval = (mii_cmd & (1 << i)) ? MDIO_WRITE1 : MDIO_WRITE0;
800 
801 		iowrite8(dataval, mdio_addr);
802 		mdio_delay();
803 		iowrite8(dataval | MDIO_ShiftClk, mdio_addr);
804 		mdio_delay();
805 	}
806 	/* Clear out extra bits. */
807 	for (i = 2; i > 0; i--) {
808 		iowrite8(MDIO_EnbIn, mdio_addr);
809 		mdio_delay();
810 		iowrite8(MDIO_EnbIn | MDIO_ShiftClk, mdio_addr);
811 		mdio_delay();
812 	}
813 }
814 
815 static int mdio_wait_link(struct net_device *dev, int wait)
816 {
817 	int bmsr;
818 	int phy_id;
819 	struct netdev_private *np;
820 
821 	np = netdev_priv(dev);
822 	phy_id = np->phys[0];
823 
824 	do {
825 		bmsr = mdio_read(dev, phy_id, MII_BMSR);
826 		if (bmsr & 0x0004)
827 			return 0;
828 		mdelay(1);
829 	} while (--wait > 0);
830 	return -1;
831 }
832 
833 static int netdev_open(struct net_device *dev)
834 {
835 	struct netdev_private *np = netdev_priv(dev);
836 	void __iomem *ioaddr = np->base;
837 	const int irq = np->pci_dev->irq;
838 	unsigned long flags;
839 	int i;
840 
841 	sundance_reset(dev, 0x00ff << 16);
842 
843 	i = request_irq(irq, intr_handler, IRQF_SHARED, dev->name, dev);
844 	if (i)
845 		return i;
846 
847 	if (netif_msg_ifup(np))
848 		printk(KERN_DEBUG "%s: netdev_open() irq %d\n", dev->name, irq);
849 
850 	init_ring(dev);
851 
852 	iowrite32(np->rx_ring_dma, ioaddr + RxListPtr);
853 	/* The Tx list pointer is written as packets are queued. */
854 
855 	/* Initialize other registers. */
856 	__set_mac_addr(dev);
857 #if defined(CONFIG_VLAN_8021Q) || defined(CONFIG_VLAN_8021Q_MODULE)
858 	iowrite16(dev->mtu + 18, ioaddr + MaxFrameSize);
859 #else
860 	iowrite16(dev->mtu + 14, ioaddr + MaxFrameSize);
861 #endif
862 	if (dev->mtu > 2047)
863 		iowrite32(ioread32(ioaddr + ASICCtrl) | 0x0C, ioaddr + ASICCtrl);
864 
865 	/* Configure the PCI bus bursts and FIFO thresholds. */
866 
867 	if (dev->if_port == 0)
868 		dev->if_port = np->default_port;
869 
870 	spin_lock_init(&np->mcastlock);
871 
872 	set_rx_mode(dev);
873 	iowrite16(0, ioaddr + IntrEnable);
874 	iowrite16(0, ioaddr + DownCounter);
875 	/* Set the chip to poll every N*320nsec. */
876 	iowrite8(100, ioaddr + RxDMAPollPeriod);
877 	iowrite8(127, ioaddr + TxDMAPollPeriod);
878 	/* Fix DFE-580TX packet drop issue */
879 	if (np->pci_dev->revision >= 0x14)
880 		iowrite8(0x01, ioaddr + DebugCtrl1);
881 	netif_start_queue(dev);
882 
883 	spin_lock_irqsave(&np->lock, flags);
884 	reset_tx(dev);
885 	spin_unlock_irqrestore(&np->lock, flags);
886 
887 	iowrite16 (StatsEnable | RxEnable | TxEnable, ioaddr + MACCtrl1);
888 
889 	/* Disable Wol */
890 	iowrite8(ioread8(ioaddr + WakeEvent) | 0x00, ioaddr + WakeEvent);
891 	np->wol_enabled = 0;
892 
893 	if (netif_msg_ifup(np))
894 		printk(KERN_DEBUG "%s: Done netdev_open(), status: Rx %x Tx %x "
895 			   "MAC Control %x, %4.4x %4.4x.\n",
896 			   dev->name, ioread32(ioaddr + RxStatus), ioread8(ioaddr + TxStatus),
897 			   ioread32(ioaddr + MACCtrl0),
898 			   ioread16(ioaddr + MACCtrl1), ioread16(ioaddr + MACCtrl0));
899 
900 	/* Set the timer to check for link beat. */
901 	init_timer(&np->timer);
902 	np->timer.expires = jiffies + 3*HZ;
903 	np->timer.data = (unsigned long)dev;
904 	np->timer.function = netdev_timer;				/* timer handler */
905 	add_timer(&np->timer);
906 
907 	/* Enable interrupts by setting the interrupt mask. */
908 	iowrite16(DEFAULT_INTR, ioaddr + IntrEnable);
909 
910 	return 0;
911 }
912 
913 static void check_duplex(struct net_device *dev)
914 {
915 	struct netdev_private *np = netdev_priv(dev);
916 	void __iomem *ioaddr = np->base;
917 	int mii_lpa = mdio_read(dev, np->phys[0], MII_LPA);
918 	int negotiated = mii_lpa & np->mii_if.advertising;
919 	int duplex;
920 
921 	/* Force media */
922 	if (!np->an_enable || mii_lpa == 0xffff) {
923 		if (np->mii_if.full_duplex)
924 			iowrite16 (ioread16 (ioaddr + MACCtrl0) | EnbFullDuplex,
925 				ioaddr + MACCtrl0);
926 		return;
927 	}
928 
929 	/* Autonegotiation */
930 	duplex = (negotiated & 0x0100) || (negotiated & 0x01C0) == 0x0040;
931 	if (np->mii_if.full_duplex != duplex) {
932 		np->mii_if.full_duplex = duplex;
933 		if (netif_msg_link(np))
934 			printk(KERN_INFO "%s: Setting %s-duplex based on MII #%d "
935 				   "negotiated capability %4.4x.\n", dev->name,
936 				   duplex ? "full" : "half", np->phys[0], negotiated);
937 		iowrite16(ioread16(ioaddr + MACCtrl0) | (duplex ? 0x20 : 0), ioaddr + MACCtrl0);
938 	}
939 }
940 
941 static void netdev_timer(unsigned long data)
942 {
943 	struct net_device *dev = (struct net_device *)data;
944 	struct netdev_private *np = netdev_priv(dev);
945 	void __iomem *ioaddr = np->base;
946 	int next_tick = 10*HZ;
947 
948 	if (netif_msg_timer(np)) {
949 		printk(KERN_DEBUG "%s: Media selection timer tick, intr status %4.4x, "
950 			   "Tx %x Rx %x.\n",
951 			   dev->name, ioread16(ioaddr + IntrEnable),
952 			   ioread8(ioaddr + TxStatus), ioread32(ioaddr + RxStatus));
953 	}
954 	check_duplex(dev);
955 	np->timer.expires = jiffies + next_tick;
956 	add_timer(&np->timer);
957 }
958 
959 static void tx_timeout(struct net_device *dev)
960 {
961 	struct netdev_private *np = netdev_priv(dev);
962 	void __iomem *ioaddr = np->base;
963 	unsigned long flag;
964 
965 	netif_stop_queue(dev);
966 	tasklet_disable(&np->tx_tasklet);
967 	iowrite16(0, ioaddr + IntrEnable);
968 	printk(KERN_WARNING "%s: Transmit timed out, TxStatus %2.2x "
969 		   "TxFrameId %2.2x,"
970 		   " resetting...\n", dev->name, ioread8(ioaddr + TxStatus),
971 		   ioread8(ioaddr + TxFrameId));
972 
973 	{
974 		int i;
975 		for (i=0; i<TX_RING_SIZE; i++) {
976 			printk(KERN_DEBUG "%02x %08llx %08x %08x(%02x) %08x %08x\n", i,
977 				(unsigned long long)(np->tx_ring_dma + i*sizeof(*np->tx_ring)),
978 				le32_to_cpu(np->tx_ring[i].next_desc),
979 				le32_to_cpu(np->tx_ring[i].status),
980 				(le32_to_cpu(np->tx_ring[i].status) >> 2) & 0xff,
981 				le32_to_cpu(np->tx_ring[i].frag[0].addr),
982 				le32_to_cpu(np->tx_ring[i].frag[0].length));
983 		}
984 		printk(KERN_DEBUG "TxListPtr=%08x netif_queue_stopped=%d\n",
985 			ioread32(np->base + TxListPtr),
986 			netif_queue_stopped(dev));
987 		printk(KERN_DEBUG "cur_tx=%d(%02x) dirty_tx=%d(%02x)\n",
988 			np->cur_tx, np->cur_tx % TX_RING_SIZE,
989 			np->dirty_tx, np->dirty_tx % TX_RING_SIZE);
990 		printk(KERN_DEBUG "cur_rx=%d dirty_rx=%d\n", np->cur_rx, np->dirty_rx);
991 		printk(KERN_DEBUG "cur_task=%d\n", np->cur_task);
992 	}
993 	spin_lock_irqsave(&np->lock, flag);
994 
995 	/* Stop and restart the chip's Tx processes . */
996 	reset_tx(dev);
997 	spin_unlock_irqrestore(&np->lock, flag);
998 
999 	dev->if_port = 0;
1000 
1001 	dev->trans_start = jiffies; /* prevent tx timeout */
1002 	dev->stats.tx_errors++;
1003 	if (np->cur_tx - np->dirty_tx < TX_QUEUE_LEN - 4) {
1004 		netif_wake_queue(dev);
1005 	}
1006 	iowrite16(DEFAULT_INTR, ioaddr + IntrEnable);
1007 	tasklet_enable(&np->tx_tasklet);
1008 }
1009 
1010 
1011 /* Initialize the Rx and Tx rings, along with various 'dev' bits. */
1012 static void init_ring(struct net_device *dev)
1013 {
1014 	struct netdev_private *np = netdev_priv(dev);
1015 	int i;
1016 
1017 	np->cur_rx = np->cur_tx = 0;
1018 	np->dirty_rx = np->dirty_tx = 0;
1019 	np->cur_task = 0;
1020 
1021 	np->rx_buf_sz = (dev->mtu <= 1520 ? PKT_BUF_SZ : dev->mtu + 16);
1022 
1023 	/* Initialize all Rx descriptors. */
1024 	for (i = 0; i < RX_RING_SIZE; i++) {
1025 		np->rx_ring[i].next_desc = cpu_to_le32(np->rx_ring_dma +
1026 			((i+1)%RX_RING_SIZE)*sizeof(*np->rx_ring));
1027 		np->rx_ring[i].status = 0;
1028 		np->rx_ring[i].frag[0].length = 0;
1029 		np->rx_skbuff[i] = NULL;
1030 	}
1031 
1032 	/* Fill in the Rx buffers.  Handle allocation failure gracefully. */
1033 	for (i = 0; i < RX_RING_SIZE; i++) {
1034 		struct sk_buff *skb =
1035 			netdev_alloc_skb(dev, np->rx_buf_sz + 2);
1036 		np->rx_skbuff[i] = skb;
1037 		if (skb == NULL)
1038 			break;
1039 		skb_reserve(skb, 2);	/* 16 byte align the IP header. */
1040 		np->rx_ring[i].frag[0].addr = cpu_to_le32(
1041 			dma_map_single(&np->pci_dev->dev, skb->data,
1042 				np->rx_buf_sz, DMA_FROM_DEVICE));
1043 		if (dma_mapping_error(&np->pci_dev->dev,
1044 					np->rx_ring[i].frag[0].addr)) {
1045 			dev_kfree_skb(skb);
1046 			np->rx_skbuff[i] = NULL;
1047 			break;
1048 		}
1049 		np->rx_ring[i].frag[0].length = cpu_to_le32(np->rx_buf_sz | LastFrag);
1050 	}
1051 	np->dirty_rx = (unsigned int)(i - RX_RING_SIZE);
1052 
1053 	for (i = 0; i < TX_RING_SIZE; i++) {
1054 		np->tx_skbuff[i] = NULL;
1055 		np->tx_ring[i].status = 0;
1056 	}
1057 }
1058 
1059 static void tx_poll (unsigned long data)
1060 {
1061 	struct net_device *dev = (struct net_device *)data;
1062 	struct netdev_private *np = netdev_priv(dev);
1063 	unsigned head = np->cur_task % TX_RING_SIZE;
1064 	struct netdev_desc *txdesc =
1065 		&np->tx_ring[(np->cur_tx - 1) % TX_RING_SIZE];
1066 
1067 	/* Chain the next pointer */
1068 	for (; np->cur_tx - np->cur_task > 0; np->cur_task++) {
1069 		int entry = np->cur_task % TX_RING_SIZE;
1070 		txdesc = &np->tx_ring[entry];
1071 		if (np->last_tx) {
1072 			np->last_tx->next_desc = cpu_to_le32(np->tx_ring_dma +
1073 				entry*sizeof(struct netdev_desc));
1074 		}
1075 		np->last_tx = txdesc;
1076 	}
1077 	/* Indicate the latest descriptor of tx ring */
1078 	txdesc->status |= cpu_to_le32(DescIntrOnTx);
1079 
1080 	if (ioread32 (np->base + TxListPtr) == 0)
1081 		iowrite32 (np->tx_ring_dma + head * sizeof(struct netdev_desc),
1082 			np->base + TxListPtr);
1083 }
1084 
1085 static netdev_tx_t
1086 start_tx (struct sk_buff *skb, struct net_device *dev)
1087 {
1088 	struct netdev_private *np = netdev_priv(dev);
1089 	struct netdev_desc *txdesc;
1090 	unsigned entry;
1091 
1092 	/* Calculate the next Tx descriptor entry. */
1093 	entry = np->cur_tx % TX_RING_SIZE;
1094 	np->tx_skbuff[entry] = skb;
1095 	txdesc = &np->tx_ring[entry];
1096 
1097 	txdesc->next_desc = 0;
1098 	txdesc->status = cpu_to_le32 ((entry << 2) | DisableAlign);
1099 	txdesc->frag[0].addr = cpu_to_le32(dma_map_single(&np->pci_dev->dev,
1100 				skb->data, skb->len, DMA_TO_DEVICE));
1101 	if (dma_mapping_error(&np->pci_dev->dev,
1102 				txdesc->frag[0].addr))
1103 			goto drop_frame;
1104 	txdesc->frag[0].length = cpu_to_le32 (skb->len | LastFrag);
1105 
1106 	/* Increment cur_tx before tasklet_schedule() */
1107 	np->cur_tx++;
1108 	mb();
1109 	/* Schedule a tx_poll() task */
1110 	tasklet_schedule(&np->tx_tasklet);
1111 
1112 	/* On some architectures: explicitly flush cache lines here. */
1113 	if (np->cur_tx - np->dirty_tx < TX_QUEUE_LEN - 1 &&
1114 	    !netif_queue_stopped(dev)) {
1115 		/* do nothing */
1116 	} else {
1117 		netif_stop_queue (dev);
1118 	}
1119 	if (netif_msg_tx_queued(np)) {
1120 		printk (KERN_DEBUG
1121 			"%s: Transmit frame #%d queued in slot %d.\n",
1122 			dev->name, np->cur_tx, entry);
1123 	}
1124 	return NETDEV_TX_OK;
1125 
1126 drop_frame:
1127 	dev_kfree_skb(skb);
1128 	np->tx_skbuff[entry] = NULL;
1129 	dev->stats.tx_dropped++;
1130 	return NETDEV_TX_OK;
1131 }
1132 
1133 /* Reset hardware tx and free all of tx buffers */
1134 static int
1135 reset_tx (struct net_device *dev)
1136 {
1137 	struct netdev_private *np = netdev_priv(dev);
1138 	void __iomem *ioaddr = np->base;
1139 	struct sk_buff *skb;
1140 	int i;
1141 
1142 	/* Reset tx logic, TxListPtr will be cleaned */
1143 	iowrite16 (TxDisable, ioaddr + MACCtrl1);
1144 	sundance_reset(dev, (NetworkReset|FIFOReset|DMAReset|TxReset) << 16);
1145 
1146 	/* free all tx skbuff */
1147 	for (i = 0; i < TX_RING_SIZE; i++) {
1148 		np->tx_ring[i].next_desc = 0;
1149 
1150 		skb = np->tx_skbuff[i];
1151 		if (skb) {
1152 			dma_unmap_single(&np->pci_dev->dev,
1153 				le32_to_cpu(np->tx_ring[i].frag[0].addr),
1154 				skb->len, DMA_TO_DEVICE);
1155 			dev_kfree_skb_any(skb);
1156 			np->tx_skbuff[i] = NULL;
1157 			dev->stats.tx_dropped++;
1158 		}
1159 	}
1160 	np->cur_tx = np->dirty_tx = 0;
1161 	np->cur_task = 0;
1162 
1163 	np->last_tx = NULL;
1164 	iowrite8(127, ioaddr + TxDMAPollPeriod);
1165 
1166 	iowrite16 (StatsEnable | RxEnable | TxEnable, ioaddr + MACCtrl1);
1167 	return 0;
1168 }
1169 
1170 /* The interrupt handler cleans up after the Tx thread,
1171    and schedule a Rx thread work */
1172 static irqreturn_t intr_handler(int irq, void *dev_instance)
1173 {
1174 	struct net_device *dev = (struct net_device *)dev_instance;
1175 	struct netdev_private *np = netdev_priv(dev);
1176 	void __iomem *ioaddr = np->base;
1177 	int hw_frame_id;
1178 	int tx_cnt;
1179 	int tx_status;
1180 	int handled = 0;
1181 	int i;
1182 
1183 
1184 	do {
1185 		int intr_status = ioread16(ioaddr + IntrStatus);
1186 		iowrite16(intr_status, ioaddr + IntrStatus);
1187 
1188 		if (netif_msg_intr(np))
1189 			printk(KERN_DEBUG "%s: Interrupt, status %4.4x.\n",
1190 				   dev->name, intr_status);
1191 
1192 		if (!(intr_status & DEFAULT_INTR))
1193 			break;
1194 
1195 		handled = 1;
1196 
1197 		if (intr_status & (IntrRxDMADone)) {
1198 			iowrite16(DEFAULT_INTR & ~(IntrRxDone|IntrRxDMADone),
1199 					ioaddr + IntrEnable);
1200 			if (np->budget < 0)
1201 				np->budget = RX_BUDGET;
1202 			tasklet_schedule(&np->rx_tasklet);
1203 		}
1204 		if (intr_status & (IntrTxDone | IntrDrvRqst)) {
1205 			tx_status = ioread16 (ioaddr + TxStatus);
1206 			for (tx_cnt=32; tx_status & 0x80; --tx_cnt) {
1207 				if (netif_msg_tx_done(np))
1208 					printk
1209 					    ("%s: Transmit status is %2.2x.\n",
1210 				     	dev->name, tx_status);
1211 				if (tx_status & 0x1e) {
1212 					if (netif_msg_tx_err(np))
1213 						printk("%s: Transmit error status %4.4x.\n",
1214 							   dev->name, tx_status);
1215 					dev->stats.tx_errors++;
1216 					if (tx_status & 0x10)
1217 						dev->stats.tx_fifo_errors++;
1218 					if (tx_status & 0x08)
1219 						dev->stats.collisions++;
1220 					if (tx_status & 0x04)
1221 						dev->stats.tx_fifo_errors++;
1222 					if (tx_status & 0x02)
1223 						dev->stats.tx_window_errors++;
1224 
1225 					/*
1226 					** This reset has been verified on
1227 					** DFE-580TX boards ! phdm@macqel.be.
1228 					*/
1229 					if (tx_status & 0x10) {	/* TxUnderrun */
1230 						/* Restart Tx FIFO and transmitter */
1231 						sundance_reset(dev, (NetworkReset|FIFOReset|TxReset) << 16);
1232 						/* No need to reset the Tx pointer here */
1233 					}
1234 					/* Restart the Tx. Need to make sure tx enabled */
1235 					i = 10;
1236 					do {
1237 						iowrite16(ioread16(ioaddr + MACCtrl1) | TxEnable, ioaddr + MACCtrl1);
1238 						if (ioread16(ioaddr + MACCtrl1) & TxEnabled)
1239 							break;
1240 						mdelay(1);
1241 					} while (--i);
1242 				}
1243 				/* Yup, this is a documentation bug.  It cost me *hours*. */
1244 				iowrite16 (0, ioaddr + TxStatus);
1245 				if (tx_cnt < 0) {
1246 					iowrite32(5000, ioaddr + DownCounter);
1247 					break;
1248 				}
1249 				tx_status = ioread16 (ioaddr + TxStatus);
1250 			}
1251 			hw_frame_id = (tx_status >> 8) & 0xff;
1252 		} else 	{
1253 			hw_frame_id = ioread8(ioaddr + TxFrameId);
1254 		}
1255 
1256 		if (np->pci_dev->revision >= 0x14) {
1257 			spin_lock(&np->lock);
1258 			for (; np->cur_tx - np->dirty_tx > 0; np->dirty_tx++) {
1259 				int entry = np->dirty_tx % TX_RING_SIZE;
1260 				struct sk_buff *skb;
1261 				int sw_frame_id;
1262 				sw_frame_id = (le32_to_cpu(
1263 					np->tx_ring[entry].status) >> 2) & 0xff;
1264 				if (sw_frame_id == hw_frame_id &&
1265 					!(le32_to_cpu(np->tx_ring[entry].status)
1266 					& 0x00010000))
1267 						break;
1268 				if (sw_frame_id == (hw_frame_id + 1) %
1269 					TX_RING_SIZE)
1270 						break;
1271 				skb = np->tx_skbuff[entry];
1272 				/* Free the original skb. */
1273 				dma_unmap_single(&np->pci_dev->dev,
1274 					le32_to_cpu(np->tx_ring[entry].frag[0].addr),
1275 					skb->len, DMA_TO_DEVICE);
1276 				dev_kfree_skb_irq (np->tx_skbuff[entry]);
1277 				np->tx_skbuff[entry] = NULL;
1278 				np->tx_ring[entry].frag[0].addr = 0;
1279 				np->tx_ring[entry].frag[0].length = 0;
1280 			}
1281 			spin_unlock(&np->lock);
1282 		} else {
1283 			spin_lock(&np->lock);
1284 			for (; np->cur_tx - np->dirty_tx > 0; np->dirty_tx++) {
1285 				int entry = np->dirty_tx % TX_RING_SIZE;
1286 				struct sk_buff *skb;
1287 				if (!(le32_to_cpu(np->tx_ring[entry].status)
1288 							& 0x00010000))
1289 					break;
1290 				skb = np->tx_skbuff[entry];
1291 				/* Free the original skb. */
1292 				dma_unmap_single(&np->pci_dev->dev,
1293 					le32_to_cpu(np->tx_ring[entry].frag[0].addr),
1294 					skb->len, DMA_TO_DEVICE);
1295 				dev_kfree_skb_irq (np->tx_skbuff[entry]);
1296 				np->tx_skbuff[entry] = NULL;
1297 				np->tx_ring[entry].frag[0].addr = 0;
1298 				np->tx_ring[entry].frag[0].length = 0;
1299 			}
1300 			spin_unlock(&np->lock);
1301 		}
1302 
1303 		if (netif_queue_stopped(dev) &&
1304 			np->cur_tx - np->dirty_tx < TX_QUEUE_LEN - 4) {
1305 			/* The ring is no longer full, clear busy flag. */
1306 			netif_wake_queue (dev);
1307 		}
1308 		/* Abnormal error summary/uncommon events handlers. */
1309 		if (intr_status & (IntrPCIErr | LinkChange | StatsMax))
1310 			netdev_error(dev, intr_status);
1311 	} while (0);
1312 	if (netif_msg_intr(np))
1313 		printk(KERN_DEBUG "%s: exiting interrupt, status=%#4.4x.\n",
1314 			   dev->name, ioread16(ioaddr + IntrStatus));
1315 	return IRQ_RETVAL(handled);
1316 }
1317 
1318 static void rx_poll(unsigned long data)
1319 {
1320 	struct net_device *dev = (struct net_device *)data;
1321 	struct netdev_private *np = netdev_priv(dev);
1322 	int entry = np->cur_rx % RX_RING_SIZE;
1323 	int boguscnt = np->budget;
1324 	void __iomem *ioaddr = np->base;
1325 	int received = 0;
1326 
1327 	/* If EOP is set on the next entry, it's a new packet. Send it up. */
1328 	while (1) {
1329 		struct netdev_desc *desc = &(np->rx_ring[entry]);
1330 		u32 frame_status = le32_to_cpu(desc->status);
1331 		int pkt_len;
1332 
1333 		if (--boguscnt < 0) {
1334 			goto not_done;
1335 		}
1336 		if (!(frame_status & DescOwn))
1337 			break;
1338 		pkt_len = frame_status & 0x1fff;	/* Chip omits the CRC. */
1339 		if (netif_msg_rx_status(np))
1340 			printk(KERN_DEBUG "  netdev_rx() status was %8.8x.\n",
1341 				   frame_status);
1342 		if (frame_status & 0x001f4000) {
1343 			/* There was a error. */
1344 			if (netif_msg_rx_err(np))
1345 				printk(KERN_DEBUG "  netdev_rx() Rx error was %8.8x.\n",
1346 					   frame_status);
1347 			dev->stats.rx_errors++;
1348 			if (frame_status & 0x00100000)
1349 				dev->stats.rx_length_errors++;
1350 			if (frame_status & 0x00010000)
1351 				dev->stats.rx_fifo_errors++;
1352 			if (frame_status & 0x00060000)
1353 				dev->stats.rx_frame_errors++;
1354 			if (frame_status & 0x00080000)
1355 				dev->stats.rx_crc_errors++;
1356 			if (frame_status & 0x00100000) {
1357 				printk(KERN_WARNING "%s: Oversized Ethernet frame,"
1358 					   " status %8.8x.\n",
1359 					   dev->name, frame_status);
1360 			}
1361 		} else {
1362 			struct sk_buff *skb;
1363 #ifndef final_version
1364 			if (netif_msg_rx_status(np))
1365 				printk(KERN_DEBUG "  netdev_rx() normal Rx pkt length %d"
1366 					   ", bogus_cnt %d.\n",
1367 					   pkt_len, boguscnt);
1368 #endif
1369 			/* Check if the packet is long enough to accept without copying
1370 			   to a minimally-sized skbuff. */
1371 			if (pkt_len < rx_copybreak &&
1372 			    (skb = netdev_alloc_skb(dev, pkt_len + 2)) != NULL) {
1373 				skb_reserve(skb, 2);	/* 16 byte align the IP header */
1374 				dma_sync_single_for_cpu(&np->pci_dev->dev,
1375 						le32_to_cpu(desc->frag[0].addr),
1376 						np->rx_buf_sz, DMA_FROM_DEVICE);
1377 				skb_copy_to_linear_data(skb, np->rx_skbuff[entry]->data, pkt_len);
1378 				dma_sync_single_for_device(&np->pci_dev->dev,
1379 						le32_to_cpu(desc->frag[0].addr),
1380 						np->rx_buf_sz, DMA_FROM_DEVICE);
1381 				skb_put(skb, pkt_len);
1382 			} else {
1383 				dma_unmap_single(&np->pci_dev->dev,
1384 					le32_to_cpu(desc->frag[0].addr),
1385 					np->rx_buf_sz, DMA_FROM_DEVICE);
1386 				skb_put(skb = np->rx_skbuff[entry], pkt_len);
1387 				np->rx_skbuff[entry] = NULL;
1388 			}
1389 			skb->protocol = eth_type_trans(skb, dev);
1390 			/* Note: checksum -> skb->ip_summed = CHECKSUM_UNNECESSARY; */
1391 			netif_rx(skb);
1392 		}
1393 		entry = (entry + 1) % RX_RING_SIZE;
1394 		received++;
1395 	}
1396 	np->cur_rx = entry;
1397 	refill_rx (dev);
1398 	np->budget -= received;
1399 	iowrite16(DEFAULT_INTR, ioaddr + IntrEnable);
1400 	return;
1401 
1402 not_done:
1403 	np->cur_rx = entry;
1404 	refill_rx (dev);
1405 	if (!received)
1406 		received = 1;
1407 	np->budget -= received;
1408 	if (np->budget <= 0)
1409 		np->budget = RX_BUDGET;
1410 	tasklet_schedule(&np->rx_tasklet);
1411 }
1412 
1413 static void refill_rx (struct net_device *dev)
1414 {
1415 	struct netdev_private *np = netdev_priv(dev);
1416 	int entry;
1417 	int cnt = 0;
1418 
1419 	/* Refill the Rx ring buffers. */
1420 	for (;(np->cur_rx - np->dirty_rx + RX_RING_SIZE) % RX_RING_SIZE > 0;
1421 		np->dirty_rx = (np->dirty_rx + 1) % RX_RING_SIZE) {
1422 		struct sk_buff *skb;
1423 		entry = np->dirty_rx % RX_RING_SIZE;
1424 		if (np->rx_skbuff[entry] == NULL) {
1425 			skb = netdev_alloc_skb(dev, np->rx_buf_sz + 2);
1426 			np->rx_skbuff[entry] = skb;
1427 			if (skb == NULL)
1428 				break;		/* Better luck next round. */
1429 			skb_reserve(skb, 2);	/* Align IP on 16 byte boundaries */
1430 			np->rx_ring[entry].frag[0].addr = cpu_to_le32(
1431 				dma_map_single(&np->pci_dev->dev, skb->data,
1432 					np->rx_buf_sz, DMA_FROM_DEVICE));
1433 			if (dma_mapping_error(&np->pci_dev->dev,
1434 				    np->rx_ring[entry].frag[0].addr)) {
1435 			    dev_kfree_skb_irq(skb);
1436 			    np->rx_skbuff[entry] = NULL;
1437 			    break;
1438 			}
1439 		}
1440 		/* Perhaps we need not reset this field. */
1441 		np->rx_ring[entry].frag[0].length =
1442 			cpu_to_le32(np->rx_buf_sz | LastFrag);
1443 		np->rx_ring[entry].status = 0;
1444 		cnt++;
1445 	}
1446 }
1447 static void netdev_error(struct net_device *dev, int intr_status)
1448 {
1449 	struct netdev_private *np = netdev_priv(dev);
1450 	void __iomem *ioaddr = np->base;
1451 	u16 mii_ctl, mii_advertise, mii_lpa;
1452 	int speed;
1453 
1454 	if (intr_status & LinkChange) {
1455 		if (mdio_wait_link(dev, 10) == 0) {
1456 			printk(KERN_INFO "%s: Link up\n", dev->name);
1457 			if (np->an_enable) {
1458 				mii_advertise = mdio_read(dev, np->phys[0],
1459 							   MII_ADVERTISE);
1460 				mii_lpa = mdio_read(dev, np->phys[0], MII_LPA);
1461 				mii_advertise &= mii_lpa;
1462 				printk(KERN_INFO "%s: Link changed: ",
1463 					dev->name);
1464 				if (mii_advertise & ADVERTISE_100FULL) {
1465 					np->speed = 100;
1466 					printk("100Mbps, full duplex\n");
1467 				} else if (mii_advertise & ADVERTISE_100HALF) {
1468 					np->speed = 100;
1469 					printk("100Mbps, half duplex\n");
1470 				} else if (mii_advertise & ADVERTISE_10FULL) {
1471 					np->speed = 10;
1472 					printk("10Mbps, full duplex\n");
1473 				} else if (mii_advertise & ADVERTISE_10HALF) {
1474 					np->speed = 10;
1475 					printk("10Mbps, half duplex\n");
1476 				} else
1477 					printk("\n");
1478 
1479 			} else {
1480 				mii_ctl = mdio_read(dev, np->phys[0], MII_BMCR);
1481 				speed = (mii_ctl & BMCR_SPEED100) ? 100 : 10;
1482 				np->speed = speed;
1483 				printk(KERN_INFO "%s: Link changed: %dMbps ,",
1484 					dev->name, speed);
1485 				printk("%s duplex.\n",
1486 					(mii_ctl & BMCR_FULLDPLX) ?
1487 						"full" : "half");
1488 			}
1489 			check_duplex(dev);
1490 			if (np->flowctrl && np->mii_if.full_duplex) {
1491 				iowrite16(ioread16(ioaddr + MulticastFilter1+2) | 0x0200,
1492 					ioaddr + MulticastFilter1+2);
1493 				iowrite16(ioread16(ioaddr + MACCtrl0) | EnbFlowCtrl,
1494 					ioaddr + MACCtrl0);
1495 			}
1496 			netif_carrier_on(dev);
1497 		} else {
1498 			printk(KERN_INFO "%s: Link down\n", dev->name);
1499 			netif_carrier_off(dev);
1500 		}
1501 	}
1502 	if (intr_status & StatsMax) {
1503 		get_stats(dev);
1504 	}
1505 	if (intr_status & IntrPCIErr) {
1506 		printk(KERN_ERR "%s: Something Wicked happened! %4.4x.\n",
1507 			   dev->name, intr_status);
1508 		/* We must do a global reset of DMA to continue. */
1509 	}
1510 }
1511 
1512 static struct net_device_stats *get_stats(struct net_device *dev)
1513 {
1514 	struct netdev_private *np = netdev_priv(dev);
1515 	void __iomem *ioaddr = np->base;
1516 	unsigned long flags;
1517 	u8 late_coll, single_coll, mult_coll;
1518 
1519 	spin_lock_irqsave(&np->statlock, flags);
1520 	/* The chip only need report frame silently dropped. */
1521 	dev->stats.rx_missed_errors	+= ioread8(ioaddr + RxMissed);
1522 	dev->stats.tx_packets += ioread16(ioaddr + TxFramesOK);
1523 	dev->stats.rx_packets += ioread16(ioaddr + RxFramesOK);
1524 	dev->stats.tx_carrier_errors += ioread8(ioaddr + StatsCarrierError);
1525 
1526 	mult_coll = ioread8(ioaddr + StatsMultiColl);
1527 	np->xstats.tx_multiple_collisions += mult_coll;
1528 	single_coll = ioread8(ioaddr + StatsOneColl);
1529 	np->xstats.tx_single_collisions += single_coll;
1530 	late_coll = ioread8(ioaddr + StatsLateColl);
1531 	np->xstats.tx_late_collisions += late_coll;
1532 	dev->stats.collisions += mult_coll
1533 		+ single_coll
1534 		+ late_coll;
1535 
1536 	np->xstats.tx_deferred += ioread8(ioaddr + StatsTxDefer);
1537 	np->xstats.tx_deferred_excessive += ioread8(ioaddr + StatsTxXSDefer);
1538 	np->xstats.tx_aborted += ioread8(ioaddr + StatsTxAbort);
1539 	np->xstats.tx_bcasts += ioread8(ioaddr + StatsBcastTx);
1540 	np->xstats.rx_bcasts += ioread8(ioaddr + StatsBcastRx);
1541 	np->xstats.tx_mcasts += ioread8(ioaddr + StatsMcastTx);
1542 	np->xstats.rx_mcasts += ioread8(ioaddr + StatsMcastRx);
1543 
1544 	dev->stats.tx_bytes += ioread16(ioaddr + TxOctetsLow);
1545 	dev->stats.tx_bytes += ioread16(ioaddr + TxOctetsHigh) << 16;
1546 	dev->stats.rx_bytes += ioread16(ioaddr + RxOctetsLow);
1547 	dev->stats.rx_bytes += ioread16(ioaddr + RxOctetsHigh) << 16;
1548 
1549 	spin_unlock_irqrestore(&np->statlock, flags);
1550 
1551 	return &dev->stats;
1552 }
1553 
1554 static void set_rx_mode(struct net_device *dev)
1555 {
1556 	struct netdev_private *np = netdev_priv(dev);
1557 	void __iomem *ioaddr = np->base;
1558 	u16 mc_filter[4];			/* Multicast hash filter */
1559 	u32 rx_mode;
1560 	int i;
1561 
1562 	if (dev->flags & IFF_PROMISC) {			/* Set promiscuous. */
1563 		memset(mc_filter, 0xff, sizeof(mc_filter));
1564 		rx_mode = AcceptBroadcast | AcceptMulticast | AcceptAll | AcceptMyPhys;
1565 	} else if ((netdev_mc_count(dev) > multicast_filter_limit) ||
1566 		   (dev->flags & IFF_ALLMULTI)) {
1567 		/* Too many to match, or accept all multicasts. */
1568 		memset(mc_filter, 0xff, sizeof(mc_filter));
1569 		rx_mode = AcceptBroadcast | AcceptMulticast | AcceptMyPhys;
1570 	} else if (!netdev_mc_empty(dev)) {
1571 		struct netdev_hw_addr *ha;
1572 		int bit;
1573 		int index;
1574 		int crc;
1575 		memset (mc_filter, 0, sizeof (mc_filter));
1576 		netdev_for_each_mc_addr(ha, dev) {
1577 			crc = ether_crc_le(ETH_ALEN, ha->addr);
1578 			for (index=0, bit=0; bit < 6; bit++, crc <<= 1)
1579 				if (crc & 0x80000000) index |= 1 << bit;
1580 			mc_filter[index/16] |= (1 << (index % 16));
1581 		}
1582 		rx_mode = AcceptBroadcast | AcceptMultiHash | AcceptMyPhys;
1583 	} else {
1584 		iowrite8(AcceptBroadcast | AcceptMyPhys, ioaddr + RxMode);
1585 		return;
1586 	}
1587 	if (np->mii_if.full_duplex && np->flowctrl)
1588 		mc_filter[3] |= 0x0200;
1589 
1590 	for (i = 0; i < 4; i++)
1591 		iowrite16(mc_filter[i], ioaddr + MulticastFilter0 + i*2);
1592 	iowrite8(rx_mode, ioaddr + RxMode);
1593 }
1594 
1595 static int __set_mac_addr(struct net_device *dev)
1596 {
1597 	struct netdev_private *np = netdev_priv(dev);
1598 	u16 addr16;
1599 
1600 	addr16 = (dev->dev_addr[0] | (dev->dev_addr[1] << 8));
1601 	iowrite16(addr16, np->base + StationAddr);
1602 	addr16 = (dev->dev_addr[2] | (dev->dev_addr[3] << 8));
1603 	iowrite16(addr16, np->base + StationAddr+2);
1604 	addr16 = (dev->dev_addr[4] | (dev->dev_addr[5] << 8));
1605 	iowrite16(addr16, np->base + StationAddr+4);
1606 	return 0;
1607 }
1608 
1609 /* Invoked with rtnl_lock held */
1610 static int sundance_set_mac_addr(struct net_device *dev, void *data)
1611 {
1612 	const struct sockaddr *addr = data;
1613 
1614 	if (!is_valid_ether_addr(addr->sa_data))
1615 		return -EADDRNOTAVAIL;
1616 	memcpy(dev->dev_addr, addr->sa_data, ETH_ALEN);
1617 	__set_mac_addr(dev);
1618 
1619 	return 0;
1620 }
1621 
1622 static const struct {
1623 	const char name[ETH_GSTRING_LEN];
1624 } sundance_stats[] = {
1625 	{ "tx_multiple_collisions" },
1626 	{ "tx_single_collisions" },
1627 	{ "tx_late_collisions" },
1628 	{ "tx_deferred" },
1629 	{ "tx_deferred_excessive" },
1630 	{ "tx_aborted" },
1631 	{ "tx_bcasts" },
1632 	{ "rx_bcasts" },
1633 	{ "tx_mcasts" },
1634 	{ "rx_mcasts" },
1635 };
1636 
1637 static int check_if_running(struct net_device *dev)
1638 {
1639 	if (!netif_running(dev))
1640 		return -EINVAL;
1641 	return 0;
1642 }
1643 
1644 static void get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
1645 {
1646 	struct netdev_private *np = netdev_priv(dev);
1647 	strlcpy(info->driver, DRV_NAME, sizeof(info->driver));
1648 	strlcpy(info->version, DRV_VERSION, sizeof(info->version));
1649 	strlcpy(info->bus_info, pci_name(np->pci_dev), sizeof(info->bus_info));
1650 }
1651 
1652 static int get_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
1653 {
1654 	struct netdev_private *np = netdev_priv(dev);
1655 	spin_lock_irq(&np->lock);
1656 	mii_ethtool_gset(&np->mii_if, ecmd);
1657 	spin_unlock_irq(&np->lock);
1658 	return 0;
1659 }
1660 
1661 static int set_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
1662 {
1663 	struct netdev_private *np = netdev_priv(dev);
1664 	int res;
1665 	spin_lock_irq(&np->lock);
1666 	res = mii_ethtool_sset(&np->mii_if, ecmd);
1667 	spin_unlock_irq(&np->lock);
1668 	return res;
1669 }
1670 
1671 static int nway_reset(struct net_device *dev)
1672 {
1673 	struct netdev_private *np = netdev_priv(dev);
1674 	return mii_nway_restart(&np->mii_if);
1675 }
1676 
1677 static u32 get_link(struct net_device *dev)
1678 {
1679 	struct netdev_private *np = netdev_priv(dev);
1680 	return mii_link_ok(&np->mii_if);
1681 }
1682 
1683 static u32 get_msglevel(struct net_device *dev)
1684 {
1685 	struct netdev_private *np = netdev_priv(dev);
1686 	return np->msg_enable;
1687 }
1688 
1689 static void set_msglevel(struct net_device *dev, u32 val)
1690 {
1691 	struct netdev_private *np = netdev_priv(dev);
1692 	np->msg_enable = val;
1693 }
1694 
1695 static void get_strings(struct net_device *dev, u32 stringset,
1696 		u8 *data)
1697 {
1698 	if (stringset == ETH_SS_STATS)
1699 		memcpy(data, sundance_stats, sizeof(sundance_stats));
1700 }
1701 
1702 static int get_sset_count(struct net_device *dev, int sset)
1703 {
1704 	switch (sset) {
1705 	case ETH_SS_STATS:
1706 		return ARRAY_SIZE(sundance_stats);
1707 	default:
1708 		return -EOPNOTSUPP;
1709 	}
1710 }
1711 
1712 static void get_ethtool_stats(struct net_device *dev,
1713 		struct ethtool_stats *stats, u64 *data)
1714 {
1715 	struct netdev_private *np = netdev_priv(dev);
1716 	int i = 0;
1717 
1718 	get_stats(dev);
1719 	data[i++] = np->xstats.tx_multiple_collisions;
1720 	data[i++] = np->xstats.tx_single_collisions;
1721 	data[i++] = np->xstats.tx_late_collisions;
1722 	data[i++] = np->xstats.tx_deferred;
1723 	data[i++] = np->xstats.tx_deferred_excessive;
1724 	data[i++] = np->xstats.tx_aborted;
1725 	data[i++] = np->xstats.tx_bcasts;
1726 	data[i++] = np->xstats.rx_bcasts;
1727 	data[i++] = np->xstats.tx_mcasts;
1728 	data[i++] = np->xstats.rx_mcasts;
1729 }
1730 
1731 #ifdef CONFIG_PM
1732 
1733 static void sundance_get_wol(struct net_device *dev,
1734 		struct ethtool_wolinfo *wol)
1735 {
1736 	struct netdev_private *np = netdev_priv(dev);
1737 	void __iomem *ioaddr = np->base;
1738 	u8 wol_bits;
1739 
1740 	wol->wolopts = 0;
1741 
1742 	wol->supported = (WAKE_PHY | WAKE_MAGIC);
1743 	if (!np->wol_enabled)
1744 		return;
1745 
1746 	wol_bits = ioread8(ioaddr + WakeEvent);
1747 	if (wol_bits & MagicPktEnable)
1748 		wol->wolopts |= WAKE_MAGIC;
1749 	if (wol_bits & LinkEventEnable)
1750 		wol->wolopts |= WAKE_PHY;
1751 }
1752 
1753 static int sundance_set_wol(struct net_device *dev,
1754 	struct ethtool_wolinfo *wol)
1755 {
1756 	struct netdev_private *np = netdev_priv(dev);
1757 	void __iomem *ioaddr = np->base;
1758 	u8 wol_bits;
1759 
1760 	if (!device_can_wakeup(&np->pci_dev->dev))
1761 		return -EOPNOTSUPP;
1762 
1763 	np->wol_enabled = !!(wol->wolopts);
1764 	wol_bits = ioread8(ioaddr + WakeEvent);
1765 	wol_bits &= ~(WakePktEnable | MagicPktEnable |
1766 			LinkEventEnable | WolEnable);
1767 
1768 	if (np->wol_enabled) {
1769 		if (wol->wolopts & WAKE_MAGIC)
1770 			wol_bits |= (MagicPktEnable | WolEnable);
1771 		if (wol->wolopts & WAKE_PHY)
1772 			wol_bits |= (LinkEventEnable | WolEnable);
1773 	}
1774 	iowrite8(wol_bits, ioaddr + WakeEvent);
1775 
1776 	device_set_wakeup_enable(&np->pci_dev->dev, np->wol_enabled);
1777 
1778 	return 0;
1779 }
1780 #else
1781 #define sundance_get_wol NULL
1782 #define sundance_set_wol NULL
1783 #endif /* CONFIG_PM */
1784 
1785 static const struct ethtool_ops ethtool_ops = {
1786 	.begin = check_if_running,
1787 	.get_drvinfo = get_drvinfo,
1788 	.get_settings = get_settings,
1789 	.set_settings = set_settings,
1790 	.nway_reset = nway_reset,
1791 	.get_link = get_link,
1792 	.get_wol = sundance_get_wol,
1793 	.set_wol = sundance_set_wol,
1794 	.get_msglevel = get_msglevel,
1795 	.set_msglevel = set_msglevel,
1796 	.get_strings = get_strings,
1797 	.get_sset_count = get_sset_count,
1798 	.get_ethtool_stats = get_ethtool_stats,
1799 };
1800 
1801 static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
1802 {
1803 	struct netdev_private *np = netdev_priv(dev);
1804 	int rc;
1805 
1806 	if (!netif_running(dev))
1807 		return -EINVAL;
1808 
1809 	spin_lock_irq(&np->lock);
1810 	rc = generic_mii_ioctl(&np->mii_if, if_mii(rq), cmd, NULL);
1811 	spin_unlock_irq(&np->lock);
1812 
1813 	return rc;
1814 }
1815 
1816 static int netdev_close(struct net_device *dev)
1817 {
1818 	struct netdev_private *np = netdev_priv(dev);
1819 	void __iomem *ioaddr = np->base;
1820 	struct sk_buff *skb;
1821 	int i;
1822 
1823 	/* Wait and kill tasklet */
1824 	tasklet_kill(&np->rx_tasklet);
1825 	tasklet_kill(&np->tx_tasklet);
1826 	np->cur_tx = 0;
1827 	np->dirty_tx = 0;
1828 	np->cur_task = 0;
1829 	np->last_tx = NULL;
1830 
1831 	netif_stop_queue(dev);
1832 
1833 	if (netif_msg_ifdown(np)) {
1834 		printk(KERN_DEBUG "%s: Shutting down ethercard, status was Tx %2.2x "
1835 			   "Rx %4.4x Int %2.2x.\n",
1836 			   dev->name, ioread8(ioaddr + TxStatus),
1837 			   ioread32(ioaddr + RxStatus), ioread16(ioaddr + IntrStatus));
1838 		printk(KERN_DEBUG "%s: Queue pointers were Tx %d / %d,  Rx %d / %d.\n",
1839 			   dev->name, np->cur_tx, np->dirty_tx, np->cur_rx, np->dirty_rx);
1840 	}
1841 
1842 	/* Disable interrupts by clearing the interrupt mask. */
1843 	iowrite16(0x0000, ioaddr + IntrEnable);
1844 
1845 	/* Disable Rx and Tx DMA for safely release resource */
1846 	iowrite32(0x500, ioaddr + DMACtrl);
1847 
1848 	/* Stop the chip's Tx and Rx processes. */
1849 	iowrite16(TxDisable | RxDisable | StatsDisable, ioaddr + MACCtrl1);
1850 
1851     	for (i = 2000; i > 0; i--) {
1852  		if ((ioread32(ioaddr + DMACtrl) & 0xc000) == 0)
1853 			break;
1854 		mdelay(1);
1855     	}
1856 
1857     	iowrite16(GlobalReset | DMAReset | FIFOReset | NetworkReset,
1858 			ioaddr + ASIC_HI_WORD(ASICCtrl));
1859 
1860     	for (i = 2000; i > 0; i--) {
1861 		if ((ioread16(ioaddr + ASIC_HI_WORD(ASICCtrl)) & ResetBusy) == 0)
1862 			break;
1863 		mdelay(1);
1864     	}
1865 
1866 #ifdef __i386__
1867 	if (netif_msg_hw(np)) {
1868 		printk(KERN_DEBUG "  Tx ring at %8.8x:\n",
1869 			   (int)(np->tx_ring_dma));
1870 		for (i = 0; i < TX_RING_SIZE; i++)
1871 			printk(KERN_DEBUG " #%d desc. %4.4x %8.8x %8.8x.\n",
1872 				   i, np->tx_ring[i].status, np->tx_ring[i].frag[0].addr,
1873 				   np->tx_ring[i].frag[0].length);
1874 		printk(KERN_DEBUG "  Rx ring %8.8x:\n",
1875 			   (int)(np->rx_ring_dma));
1876 		for (i = 0; i < /*RX_RING_SIZE*/4 ; i++) {
1877 			printk(KERN_DEBUG " #%d desc. %4.4x %4.4x %8.8x\n",
1878 				   i, np->rx_ring[i].status, np->rx_ring[i].frag[0].addr,
1879 				   np->rx_ring[i].frag[0].length);
1880 		}
1881 	}
1882 #endif /* __i386__ debugging only */
1883 
1884 	free_irq(np->pci_dev->irq, dev);
1885 
1886 	del_timer_sync(&np->timer);
1887 
1888 	/* Free all the skbuffs in the Rx queue. */
1889 	for (i = 0; i < RX_RING_SIZE; i++) {
1890 		np->rx_ring[i].status = 0;
1891 		skb = np->rx_skbuff[i];
1892 		if (skb) {
1893 			dma_unmap_single(&np->pci_dev->dev,
1894 				le32_to_cpu(np->rx_ring[i].frag[0].addr),
1895 				np->rx_buf_sz, DMA_FROM_DEVICE);
1896 			dev_kfree_skb(skb);
1897 			np->rx_skbuff[i] = NULL;
1898 		}
1899 		np->rx_ring[i].frag[0].addr = cpu_to_le32(0xBADF00D0); /* poison */
1900 	}
1901 	for (i = 0; i < TX_RING_SIZE; i++) {
1902 		np->tx_ring[i].next_desc = 0;
1903 		skb = np->tx_skbuff[i];
1904 		if (skb) {
1905 			dma_unmap_single(&np->pci_dev->dev,
1906 				le32_to_cpu(np->tx_ring[i].frag[0].addr),
1907 				skb->len, DMA_TO_DEVICE);
1908 			dev_kfree_skb(skb);
1909 			np->tx_skbuff[i] = NULL;
1910 		}
1911 	}
1912 
1913 	return 0;
1914 }
1915 
1916 static void sundance_remove1(struct pci_dev *pdev)
1917 {
1918 	struct net_device *dev = pci_get_drvdata(pdev);
1919 
1920 	if (dev) {
1921 	    struct netdev_private *np = netdev_priv(dev);
1922 	    unregister_netdev(dev);
1923 	    dma_free_coherent(&pdev->dev, RX_TOTAL_SIZE,
1924 		    np->rx_ring, np->rx_ring_dma);
1925 	    dma_free_coherent(&pdev->dev, TX_TOTAL_SIZE,
1926 		    np->tx_ring, np->tx_ring_dma);
1927 	    pci_iounmap(pdev, np->base);
1928 	    pci_release_regions(pdev);
1929 	    free_netdev(dev);
1930 	    pci_set_drvdata(pdev, NULL);
1931 	}
1932 }
1933 
1934 #ifdef CONFIG_PM
1935 
1936 static int sundance_suspend(struct pci_dev *pci_dev, pm_message_t state)
1937 {
1938 	struct net_device *dev = pci_get_drvdata(pci_dev);
1939 	struct netdev_private *np = netdev_priv(dev);
1940 	void __iomem *ioaddr = np->base;
1941 
1942 	if (!netif_running(dev))
1943 		return 0;
1944 
1945 	netdev_close(dev);
1946 	netif_device_detach(dev);
1947 
1948 	pci_save_state(pci_dev);
1949 	if (np->wol_enabled) {
1950 		iowrite8(AcceptBroadcast | AcceptMyPhys, ioaddr + RxMode);
1951 		iowrite16(RxEnable, ioaddr + MACCtrl1);
1952 	}
1953 	pci_enable_wake(pci_dev, pci_choose_state(pci_dev, state),
1954 			np->wol_enabled);
1955 	pci_set_power_state(pci_dev, pci_choose_state(pci_dev, state));
1956 
1957 	return 0;
1958 }
1959 
1960 static int sundance_resume(struct pci_dev *pci_dev)
1961 {
1962 	struct net_device *dev = pci_get_drvdata(pci_dev);
1963 	int err = 0;
1964 
1965 	if (!netif_running(dev))
1966 		return 0;
1967 
1968 	pci_set_power_state(pci_dev, PCI_D0);
1969 	pci_restore_state(pci_dev);
1970 	pci_enable_wake(pci_dev, PCI_D0, 0);
1971 
1972 	err = netdev_open(dev);
1973 	if (err) {
1974 		printk(KERN_ERR "%s: Can't resume interface!\n",
1975 				dev->name);
1976 		goto out;
1977 	}
1978 
1979 	netif_device_attach(dev);
1980 
1981 out:
1982 	return err;
1983 }
1984 
1985 #endif /* CONFIG_PM */
1986 
1987 static struct pci_driver sundance_driver = {
1988 	.name		= DRV_NAME,
1989 	.id_table	= sundance_pci_tbl,
1990 	.probe		= sundance_probe1,
1991 	.remove		= sundance_remove1,
1992 #ifdef CONFIG_PM
1993 	.suspend	= sundance_suspend,
1994 	.resume		= sundance_resume,
1995 #endif /* CONFIG_PM */
1996 };
1997 
1998 static int __init sundance_init(void)
1999 {
2000 /* when a module, this is printed whether or not devices are found in probe */
2001 #ifdef MODULE
2002 	printk(version);
2003 #endif
2004 	return pci_register_driver(&sundance_driver);
2005 }
2006 
2007 static void __exit sundance_exit(void)
2008 {
2009 	pci_unregister_driver(&sundance_driver);
2010 }
2011 
2012 module_init(sundance_init);
2013 module_exit(sundance_exit);
2014 
2015 
2016