xref: /openbmc/linux/drivers/net/ethernet/3com/3c509.c (revision 6bba2e89)
1 /* 3c509.c: A 3c509 EtherLink3 ethernet driver for linux. */
2 /*
3 	Written 1993-2000 by Donald Becker.
4 
5 	Copyright 1994-2000 by Donald Becker.
6 	Copyright 1993 United States Government as represented by the
7 	Director, National Security Agency.	 This software may be used and
8 	distributed according to the terms of the GNU General Public License,
9 	incorporated herein by reference.
10 
11 	This driver is for the 3Com EtherLinkIII series.
12 
13 	The author may be reached as becker@scyld.com, or C/O
14 	Scyld Computing Corporation
15 	410 Severn Ave., Suite 210
16 	Annapolis MD 21403
17 
18 	Known limitations:
19 	Because of the way 3c509 ISA detection works it's difficult to predict
20 	a priori which of several ISA-mode cards will be detected first.
21 
22 	This driver does not use predictive interrupt mode, resulting in higher
23 	packet latency but lower overhead.  If interrupts are disabled for an
24 	unusually long time it could also result in missed packets, but in
25 	practice this rarely happens.
26 
27 
28 	FIXES:
29 		Alan Cox:       Removed the 'Unexpected interrupt' bug.
30 		Michael Meskes:	Upgraded to Donald Becker's version 1.07.
31 		Alan Cox:	Increased the eeprom delay. Regardless of
32 				what the docs say some people definitely
33 				get problems with lower (but in card spec)
34 				delays
35 		v1.10 4/21/97 Fixed module code so that multiple cards may be detected,
36 				other cleanups.  -djb
37 		Andrea Arcangeli:	Upgraded to Donald Becker's version 1.12.
38 		Rick Payne:	Fixed SMP race condition
39 		v1.13 9/8/97 Made 'max_interrupt_work' an insmod-settable variable -djb
40 		v1.14 10/15/97 Avoided waiting..discard message for fast machines -djb
41 		v1.15 1/31/98 Faster recovery for Tx errors. -djb
42 		v1.16 2/3/98 Different ID port handling to avoid sound cards. -djb
43 		v1.18 12Mar2001 Andrew Morton
44 			- Avoid bogus detect of 3c590's (Andrzej Krzysztofowicz)
45 			- Reviewed against 1.18 from scyld.com
46 		v1.18a 17Nov2001 Jeff Garzik <jgarzik@pobox.com>
47 			- ethtool support
48 		v1.18b 1Mar2002 Zwane Mwaikambo <zwane@commfireservices.com>
49 			- Power Management support
50 		v1.18c 1Mar2002 David Ruggiero <jdr@farfalle.com>
51 			- Full duplex support
52 		v1.19  16Oct2002 Zwane Mwaikambo <zwane@linuxpower.ca>
53 			- Additional ethtool features
54 		v1.19a 28Oct2002 Davud Ruggiero <jdr@farfalle.com>
55 			- Increase *read_eeprom udelay to workaround oops with 2 cards.
56 		v1.19b 08Nov2002 Marc Zyngier <maz@wild-wind.fr.eu.org>
57 			- Introduce driver model for EISA cards.
58 		v1.20  04Feb2008 Ondrej Zary <linux@rainbow-software.org>
59 			- convert to isa_driver and pnp_driver and some cleanups
60 */
61 
62 #define DRV_NAME	"3c509"
63 
64 /* A few values that may be tweaked. */
65 
66 /* Time in jiffies before concluding the transmitter is hung. */
67 #define TX_TIMEOUT  (400*HZ/1000)
68 
69 #include <linux/module.h>
70 #include <linux/isa.h>
71 #include <linux/pnp.h>
72 #include <linux/string.h>
73 #include <linux/interrupt.h>
74 #include <linux/errno.h>
75 #include <linux/in.h>
76 #include <linux/ioport.h>
77 #include <linux/init.h>
78 #include <linux/netdevice.h>
79 #include <linux/etherdevice.h>
80 #include <linux/pm.h>
81 #include <linux/skbuff.h>
82 #include <linux/delay.h>	/* for udelay() */
83 #include <linux/spinlock.h>
84 #include <linux/ethtool.h>
85 #include <linux/device.h>
86 #include <linux/eisa.h>
87 #include <linux/bitops.h>
88 #include <linux/vermagic.h>
89 
90 #include <linux/uaccess.h>
91 #include <asm/io.h>
92 #include <asm/irq.h>
93 
94 #ifdef EL3_DEBUG
95 static int el3_debug = EL3_DEBUG;
96 #else
97 static int el3_debug = 2;
98 #endif
99 
100 /* Used to do a global count of all the cards in the system.  Must be
101  * a global variable so that the eisa probe routines can increment
102  * it */
103 static int el3_cards = 0;
104 #define EL3_MAX_CARDS 8
105 
106 /* To minimize the size of the driver source I only define operating
107    constants if they are used several times.  You'll need the manual
108    anyway if you want to understand driver details. */
109 /* Offsets from base I/O address. */
110 #define EL3_DATA 0x00
111 #define EL3_CMD 0x0e
112 #define EL3_STATUS 0x0e
113 #define	EEPROM_READ 0x80
114 
115 #define EL3_IO_EXTENT	16
116 
117 #define EL3WINDOW(win_num) outw(SelectWindow + (win_num), ioaddr + EL3_CMD)
118 
119 
120 /* The top five bits written to EL3_CMD are a command, the lower
121    11 bits are the parameter, if applicable. */
122 enum c509cmd {
123 	TotalReset = 0<<11, SelectWindow = 1<<11, StartCoax = 2<<11,
124 	RxDisable = 3<<11, RxEnable = 4<<11, RxReset = 5<<11, RxDiscard = 8<<11,
125 	TxEnable = 9<<11, TxDisable = 10<<11, TxReset = 11<<11,
126 	FakeIntr = 12<<11, AckIntr = 13<<11, SetIntrEnb = 14<<11,
127 	SetStatusEnb = 15<<11, SetRxFilter = 16<<11, SetRxThreshold = 17<<11,
128 	SetTxThreshold = 18<<11, SetTxStart = 19<<11, StatsEnable = 21<<11,
129 	StatsDisable = 22<<11, StopCoax = 23<<11, PowerUp = 27<<11,
130 	PowerDown = 28<<11, PowerAuto = 29<<11};
131 
132 enum c509status {
133 	IntLatch = 0x0001, AdapterFailure = 0x0002, TxComplete = 0x0004,
134 	TxAvailable = 0x0008, RxComplete = 0x0010, RxEarly = 0x0020,
135 	IntReq = 0x0040, StatsFull = 0x0080, CmdBusy = 0x1000, };
136 
137 /* The SetRxFilter command accepts the following classes: */
138 enum RxFilter {
139 	RxStation = 1, RxMulticast = 2, RxBroadcast = 4, RxProm = 8 };
140 
141 /* Register window 1 offsets, the window used in normal operation. */
142 #define TX_FIFO		0x00
143 #define RX_FIFO		0x00
144 #define RX_STATUS 	0x08
145 #define TX_STATUS 	0x0B
146 #define TX_FREE		0x0C		/* Remaining free bytes in Tx buffer. */
147 
148 #define WN0_CONF_CTRL	0x04		/* Window 0: Configuration control register */
149 #define WN0_ADDR_CONF	0x06		/* Window 0: Address configuration register */
150 #define WN0_IRQ		0x08		/* Window 0: Set IRQ line in bits 12-15. */
151 #define WN4_MEDIA	0x0A		/* Window 4: Various transcvr/media bits. */
152 #define	MEDIA_TP	0x00C0		/* Enable link beat and jabber for 10baseT. */
153 #define WN4_NETDIAG	0x06		/* Window 4: Net diagnostic */
154 #define FD_ENABLE	0x8000		/* Enable full-duplex ("external loopback") */
155 
156 /*
157  * Must be a power of two (we use a binary and in the
158  * circular queue)
159  */
160 #define SKB_QUEUE_SIZE	64
161 
162 enum el3_cardtype { EL3_ISA, EL3_PNP, EL3_EISA };
163 
164 struct el3_private {
165 	spinlock_t lock;
166 	/* skb send-queue */
167 	int head, size;
168 	struct sk_buff *queue[SKB_QUEUE_SIZE];
169 	enum el3_cardtype type;
170 };
171 static int id_port;
172 static int current_tag;
173 static struct net_device *el3_devs[EL3_MAX_CARDS];
174 
175 /* Parameters that may be passed into the module. */
176 static int debug = -1;
177 static int irq[] = {-1, -1, -1, -1, -1, -1, -1, -1};
178 /* Maximum events (Rx packets, etc.) to handle at each interrupt. */
179 static int max_interrupt_work = 10;
180 #ifdef CONFIG_PNP
181 static int nopnp;
182 #endif
183 
184 static int el3_common_init(struct net_device *dev);
185 static void el3_common_remove(struct net_device *dev);
186 static ushort id_read_eeprom(int index);
187 static ushort read_eeprom(int ioaddr, int index);
188 static int el3_open(struct net_device *dev);
189 static netdev_tx_t el3_start_xmit(struct sk_buff *skb, struct net_device *dev);
190 static irqreturn_t el3_interrupt(int irq, void *dev_id);
191 static void update_stats(struct net_device *dev);
192 static struct net_device_stats *el3_get_stats(struct net_device *dev);
193 static int el3_rx(struct net_device *dev);
194 static int el3_close(struct net_device *dev);
195 static void set_multicast_list(struct net_device *dev);
196 static void el3_tx_timeout (struct net_device *dev, unsigned int txqueue);
197 static void el3_down(struct net_device *dev);
198 static void el3_up(struct net_device *dev);
199 static const struct ethtool_ops ethtool_ops;
200 #ifdef CONFIG_PM
201 static int el3_suspend(struct device *, pm_message_t);
202 static int el3_resume(struct device *);
203 #else
204 #define el3_suspend NULL
205 #define el3_resume NULL
206 #endif
207 
208 
209 /* generic device remove for all device types */
210 static int el3_device_remove (struct device *device);
211 #ifdef CONFIG_NET_POLL_CONTROLLER
212 static void el3_poll_controller(struct net_device *dev);
213 #endif
214 
215 /* Return 0 on success, 1 on error, 2 when found already detected PnP card */
216 static int el3_isa_id_sequence(__be16 *phys_addr)
217 {
218 	short lrs_state = 0xff;
219 	int i;
220 
221 	/* ISA boards are detected by sending the ID sequence to the
222 	   ID_PORT.  We find cards past the first by setting the 'current_tag'
223 	   on cards as they are found.  Cards with their tag set will not
224 	   respond to subsequent ID sequences. */
225 
226 	outb(0x00, id_port);
227 	outb(0x00, id_port);
228 	for (i = 0; i < 255; i++) {
229 		outb(lrs_state, id_port);
230 		lrs_state <<= 1;
231 		lrs_state = lrs_state & 0x100 ? lrs_state ^ 0xcf : lrs_state;
232 	}
233 	/* For the first probe, clear all board's tag registers. */
234 	if (current_tag == 0)
235 		outb(0xd0, id_port);
236 	else			/* Otherwise kill off already-found boards. */
237 		outb(0xd8, id_port);
238 	if (id_read_eeprom(7) != 0x6d50)
239 		return 1;
240 	/* Read in EEPROM data, which does contention-select.
241 	   Only the lowest address board will stay "on-line".
242 	   3Com got the byte order backwards. */
243 	for (i = 0; i < 3; i++)
244 		phys_addr[i] = htons(id_read_eeprom(i));
245 #ifdef CONFIG_PNP
246 	if (!nopnp) {
247 		/* The ISA PnP 3c509 cards respond to the ID sequence too.
248 		   This check is needed in order not to register them twice. */
249 		for (i = 0; i < el3_cards; i++) {
250 			struct el3_private *lp = netdev_priv(el3_devs[i]);
251 			if (lp->type == EL3_PNP &&
252 			    ether_addr_equal((u8 *)phys_addr, el3_devs[i]->dev_addr)) {
253 				if (el3_debug > 3)
254 					pr_debug("3c509 with address %02x %02x %02x %02x %02x %02x was found by ISAPnP\n",
255 						phys_addr[0] & 0xff, phys_addr[0] >> 8,
256 						phys_addr[1] & 0xff, phys_addr[1] >> 8,
257 						phys_addr[2] & 0xff, phys_addr[2] >> 8);
258 				/* Set the adaptor tag so that the next card can be found. */
259 				outb(0xd0 + ++current_tag, id_port);
260 				return 2;
261 			}
262 		}
263 	}
264 #endif /* CONFIG_PNP */
265 	return 0;
266 
267 }
268 
269 static void el3_dev_fill(struct net_device *dev, __be16 *phys_addr, int ioaddr,
270 			 int irq, int if_port, enum el3_cardtype type)
271 {
272 	struct el3_private *lp = netdev_priv(dev);
273 
274 	memcpy(dev->dev_addr, phys_addr, ETH_ALEN);
275 	dev->base_addr = ioaddr;
276 	dev->irq = irq;
277 	dev->if_port = if_port;
278 	lp->type = type;
279 }
280 
281 static int el3_isa_match(struct device *pdev, unsigned int ndev)
282 {
283 	struct net_device *dev;
284 	int ioaddr, isa_irq, if_port, err;
285 	unsigned int iobase;
286 	__be16 phys_addr[3];
287 
288 	while ((err = el3_isa_id_sequence(phys_addr)) == 2)
289 		;	/* Skip to next card when PnP card found */
290 	if (err == 1)
291 		return 0;
292 
293 	iobase = id_read_eeprom(8);
294 	if_port = iobase >> 14;
295 	ioaddr = 0x200 + ((iobase & 0x1f) << 4);
296 	if (irq[el3_cards] > 1 && irq[el3_cards] < 16)
297 		isa_irq = irq[el3_cards];
298 	else
299 		isa_irq = id_read_eeprom(9) >> 12;
300 
301 	dev = alloc_etherdev(sizeof(struct el3_private));
302 	if (!dev)
303 		return -ENOMEM;
304 
305 	SET_NETDEV_DEV(dev, pdev);
306 	netdev_boot_setup_check(dev);
307 
308 	if (!request_region(ioaddr, EL3_IO_EXTENT, "3c509-isa")) {
309 		free_netdev(dev);
310 		return 0;
311 	}
312 
313 	/* Set the adaptor tag so that the next card can be found. */
314 	outb(0xd0 + ++current_tag, id_port);
315 
316 	/* Activate the adaptor at the EEPROM location. */
317 	outb((ioaddr >> 4) | 0xe0, id_port);
318 
319 	EL3WINDOW(0);
320 	if (inw(ioaddr) != 0x6d50) {
321 		free_netdev(dev);
322 		return 0;
323 	}
324 
325 	/* Free the interrupt so that some other card can use it. */
326 	outw(0x0f00, ioaddr + WN0_IRQ);
327 
328 	el3_dev_fill(dev, phys_addr, ioaddr, isa_irq, if_port, EL3_ISA);
329 	dev_set_drvdata(pdev, dev);
330 	if (el3_common_init(dev)) {
331 		free_netdev(dev);
332 		return 0;
333 	}
334 
335 	el3_devs[el3_cards++] = dev;
336 	return 1;
337 }
338 
339 static int el3_isa_remove(struct device *pdev,
340 				    unsigned int ndev)
341 {
342 	el3_device_remove(pdev);
343 	dev_set_drvdata(pdev, NULL);
344 	return 0;
345 }
346 
347 #ifdef CONFIG_PM
348 static int el3_isa_suspend(struct device *dev, unsigned int n,
349 			   pm_message_t state)
350 {
351 	current_tag = 0;
352 	return el3_suspend(dev, state);
353 }
354 
355 static int el3_isa_resume(struct device *dev, unsigned int n)
356 {
357 	struct net_device *ndev = dev_get_drvdata(dev);
358 	int ioaddr = ndev->base_addr, err;
359 	__be16 phys_addr[3];
360 
361 	while ((err = el3_isa_id_sequence(phys_addr)) == 2)
362 		;	/* Skip to next card when PnP card found */
363 	if (err == 1)
364 		return 0;
365 	/* Set the adaptor tag so that the next card can be found. */
366 	outb(0xd0 + ++current_tag, id_port);
367 	/* Enable the card */
368 	outb((ioaddr >> 4) | 0xe0, id_port);
369 	EL3WINDOW(0);
370 	if (inw(ioaddr) != 0x6d50)
371 		return 1;
372 	/* Free the interrupt so that some other card can use it. */
373 	outw(0x0f00, ioaddr + WN0_IRQ);
374 	return el3_resume(dev);
375 }
376 #endif
377 
378 static struct isa_driver el3_isa_driver = {
379 	.match		= el3_isa_match,
380 	.remove		= el3_isa_remove,
381 #ifdef CONFIG_PM
382 	.suspend	= el3_isa_suspend,
383 	.resume		= el3_isa_resume,
384 #endif
385 	.driver		= {
386 		.name	= "3c509"
387 	},
388 };
389 static int isa_registered;
390 
391 #ifdef CONFIG_PNP
392 static const struct pnp_device_id el3_pnp_ids[] = {
393 	{ .id = "TCM5090" }, /* 3Com Etherlink III (TP) */
394 	{ .id = "TCM5091" }, /* 3Com Etherlink III */
395 	{ .id = "TCM5094" }, /* 3Com Etherlink III (combo) */
396 	{ .id = "TCM5095" }, /* 3Com Etherlink III (TPO) */
397 	{ .id = "TCM5098" }, /* 3Com Etherlink III (TPC) */
398 	{ .id = "PNP80f7" }, /* 3Com Etherlink III compatible */
399 	{ .id = "PNP80f8" }, /* 3Com Etherlink III compatible */
400 	{ .id = "" }
401 };
402 MODULE_DEVICE_TABLE(pnp, el3_pnp_ids);
403 
404 static int el3_pnp_probe(struct pnp_dev *pdev, const struct pnp_device_id *id)
405 {
406 	short i;
407 	int ioaddr, irq, if_port;
408 	__be16 phys_addr[3];
409 	struct net_device *dev = NULL;
410 	int err;
411 
412 	ioaddr = pnp_port_start(pdev, 0);
413 	if (!request_region(ioaddr, EL3_IO_EXTENT, "3c509-pnp"))
414 		return -EBUSY;
415 	irq = pnp_irq(pdev, 0);
416 	EL3WINDOW(0);
417 	for (i = 0; i < 3; i++)
418 		phys_addr[i] = htons(read_eeprom(ioaddr, i));
419 	if_port = read_eeprom(ioaddr, 8) >> 14;
420 	dev = alloc_etherdev(sizeof(struct el3_private));
421 	if (!dev) {
422 		release_region(ioaddr, EL3_IO_EXTENT);
423 		return -ENOMEM;
424 	}
425 	SET_NETDEV_DEV(dev, &pdev->dev);
426 	netdev_boot_setup_check(dev);
427 
428 	el3_dev_fill(dev, phys_addr, ioaddr, irq, if_port, EL3_PNP);
429 	pnp_set_drvdata(pdev, dev);
430 	err = el3_common_init(dev);
431 
432 	if (err) {
433 		pnp_set_drvdata(pdev, NULL);
434 		free_netdev(dev);
435 		return err;
436 	}
437 
438 	el3_devs[el3_cards++] = dev;
439 	return 0;
440 }
441 
442 static void el3_pnp_remove(struct pnp_dev *pdev)
443 {
444 	el3_common_remove(pnp_get_drvdata(pdev));
445 	pnp_set_drvdata(pdev, NULL);
446 }
447 
448 #ifdef CONFIG_PM
449 static int el3_pnp_suspend(struct pnp_dev *pdev, pm_message_t state)
450 {
451 	return el3_suspend(&pdev->dev, state);
452 }
453 
454 static int el3_pnp_resume(struct pnp_dev *pdev)
455 {
456 	return el3_resume(&pdev->dev);
457 }
458 #endif
459 
460 static struct pnp_driver el3_pnp_driver = {
461 	.name		= "3c509",
462 	.id_table	= el3_pnp_ids,
463 	.probe		= el3_pnp_probe,
464 	.remove		= el3_pnp_remove,
465 #ifdef CONFIG_PM
466 	.suspend	= el3_pnp_suspend,
467 	.resume		= el3_pnp_resume,
468 #endif
469 };
470 static int pnp_registered;
471 #endif /* CONFIG_PNP */
472 
473 #ifdef CONFIG_EISA
474 static const struct eisa_device_id el3_eisa_ids[] = {
475 		{ "TCM5090" },
476 		{ "TCM5091" },
477 		{ "TCM5092" },
478 		{ "TCM5093" },
479 		{ "TCM5094" },
480 		{ "TCM5095" },
481 		{ "TCM5098" },
482 		{ "" }
483 };
484 MODULE_DEVICE_TABLE(eisa, el3_eisa_ids);
485 
486 static int el3_eisa_probe (struct device *device);
487 
488 static struct eisa_driver el3_eisa_driver = {
489 		.id_table = el3_eisa_ids,
490 		.driver   = {
491 				.name    = "3c579",
492 				.probe   = el3_eisa_probe,
493 				.remove  = el3_device_remove,
494 				.suspend = el3_suspend,
495 				.resume  = el3_resume,
496 		}
497 };
498 static int eisa_registered;
499 #endif
500 
501 static const struct net_device_ops netdev_ops = {
502 	.ndo_open 		= el3_open,
503 	.ndo_stop	 	= el3_close,
504 	.ndo_start_xmit 	= el3_start_xmit,
505 	.ndo_get_stats 		= el3_get_stats,
506 	.ndo_set_rx_mode	= set_multicast_list,
507 	.ndo_tx_timeout 	= el3_tx_timeout,
508 	.ndo_set_mac_address 	= eth_mac_addr,
509 	.ndo_validate_addr	= eth_validate_addr,
510 #ifdef CONFIG_NET_POLL_CONTROLLER
511 	.ndo_poll_controller	= el3_poll_controller,
512 #endif
513 };
514 
515 static int el3_common_init(struct net_device *dev)
516 {
517 	struct el3_private *lp = netdev_priv(dev);
518 	int err;
519 	const char *if_names[] = {"10baseT", "AUI", "undefined", "BNC"};
520 
521 	spin_lock_init(&lp->lock);
522 
523 	if (dev->mem_start & 0x05) { /* xcvr codes 1/3/4/12 */
524 		dev->if_port = (dev->mem_start & 0x0f);
525 	} else { /* xcvr codes 0/8 */
526 		/* use eeprom value, but save user's full-duplex selection */
527 		dev->if_port |= (dev->mem_start & 0x08);
528 	}
529 
530 	/* The EL3-specific entries in the device structure. */
531 	dev->netdev_ops = &netdev_ops;
532 	dev->watchdog_timeo = TX_TIMEOUT;
533 	dev->ethtool_ops = &ethtool_ops;
534 
535 	err = register_netdev(dev);
536 	if (err) {
537 		pr_err("Failed to register 3c5x9 at %#3.3lx, IRQ %d.\n",
538 			dev->base_addr, dev->irq);
539 		release_region(dev->base_addr, EL3_IO_EXTENT);
540 		return err;
541 	}
542 
543 	pr_info("%s: 3c5x9 found at %#3.3lx, %s port, address %pM, IRQ %d.\n",
544 	       dev->name, dev->base_addr, if_names[(dev->if_port & 0x03)],
545 	       dev->dev_addr, dev->irq);
546 
547 	return 0;
548 
549 }
550 
551 static void el3_common_remove (struct net_device *dev)
552 {
553 	unregister_netdev (dev);
554 	release_region(dev->base_addr, EL3_IO_EXTENT);
555 	free_netdev (dev);
556 }
557 
558 #ifdef CONFIG_EISA
559 static int el3_eisa_probe(struct device *device)
560 {
561 	short i;
562 	int ioaddr, irq, if_port;
563 	__be16 phys_addr[3];
564 	struct net_device *dev = NULL;
565 	struct eisa_device *edev;
566 	int err;
567 
568 	/* Yeepee, The driver framework is calling us ! */
569 	edev = to_eisa_device (device);
570 	ioaddr = edev->base_addr;
571 
572 	if (!request_region(ioaddr, EL3_IO_EXTENT, "3c579-eisa"))
573 		return -EBUSY;
574 
575 	/* Change the register set to the configuration window 0. */
576 	outw(SelectWindow | 0, ioaddr + 0xC80 + EL3_CMD);
577 
578 	irq = inw(ioaddr + WN0_IRQ) >> 12;
579 	if_port = inw(ioaddr + 6)>>14;
580 	for (i = 0; i < 3; i++)
581 		phys_addr[i] = htons(read_eeprom(ioaddr, i));
582 
583 	/* Restore the "Product ID" to the EEPROM read register. */
584 	read_eeprom(ioaddr, 3);
585 
586 	dev = alloc_etherdev(sizeof (struct el3_private));
587 	if (dev == NULL) {
588 		release_region(ioaddr, EL3_IO_EXTENT);
589 		return -ENOMEM;
590 	}
591 
592 	SET_NETDEV_DEV(dev, device);
593 	netdev_boot_setup_check(dev);
594 
595 	el3_dev_fill(dev, phys_addr, ioaddr, irq, if_port, EL3_EISA);
596 	eisa_set_drvdata (edev, dev);
597 	err = el3_common_init(dev);
598 
599 	if (err) {
600 		eisa_set_drvdata (edev, NULL);
601 		free_netdev(dev);
602 		return err;
603 	}
604 
605 	el3_devs[el3_cards++] = dev;
606 	return 0;
607 }
608 #endif
609 
610 /* This remove works for all device types.
611  *
612  * The net dev must be stored in the driver data field */
613 static int el3_device_remove(struct device *device)
614 {
615 	struct net_device *dev;
616 
617 	dev = dev_get_drvdata(device);
618 
619 	el3_common_remove (dev);
620 	return 0;
621 }
622 
623 /* Read a word from the EEPROM using the regular EEPROM access register.
624    Assume that we are in register window zero.
625  */
626 static ushort read_eeprom(int ioaddr, int index)
627 {
628 	outw(EEPROM_READ + index, ioaddr + 10);
629 	/* Pause for at least 162 us. for the read to take place.
630 	   Some chips seem to require much longer */
631 	mdelay(2);
632 	return inw(ioaddr + 12);
633 }
634 
635 /* Read a word from the EEPROM when in the ISA ID probe state. */
636 static ushort id_read_eeprom(int index)
637 {
638 	int bit, word = 0;
639 
640 	/* Issue read command, and pause for at least 162 us. for it to complete.
641 	   Assume extra-fast 16Mhz bus. */
642 	outb(EEPROM_READ + index, id_port);
643 
644 	/* Pause for at least 162 us. for the read to take place. */
645 	/* Some chips seem to require much longer */
646 	mdelay(4);
647 
648 	for (bit = 15; bit >= 0; bit--)
649 		word = (word << 1) + (inb(id_port) & 0x01);
650 
651 	if (el3_debug > 3)
652 		pr_debug("  3c509 EEPROM word %d %#4.4x.\n", index, word);
653 
654 	return word;
655 }
656 
657 
658 static int
659 el3_open(struct net_device *dev)
660 {
661 	int ioaddr = dev->base_addr;
662 	int i;
663 
664 	outw(TxReset, ioaddr + EL3_CMD);
665 	outw(RxReset, ioaddr + EL3_CMD);
666 	outw(SetStatusEnb | 0x00, ioaddr + EL3_CMD);
667 
668 	i = request_irq(dev->irq, el3_interrupt, 0, dev->name, dev);
669 	if (i)
670 		return i;
671 
672 	EL3WINDOW(0);
673 	if (el3_debug > 3)
674 		pr_debug("%s: Opening, IRQ %d	 status@%x %4.4x.\n", dev->name,
675 			   dev->irq, ioaddr + EL3_STATUS, inw(ioaddr + EL3_STATUS));
676 
677 	el3_up(dev);
678 
679 	if (el3_debug > 3)
680 		pr_debug("%s: Opened 3c509  IRQ %d  status %4.4x.\n",
681 			   dev->name, dev->irq, inw(ioaddr + EL3_STATUS));
682 
683 	return 0;
684 }
685 
686 static void
687 el3_tx_timeout (struct net_device *dev, unsigned int txqueue)
688 {
689 	int ioaddr = dev->base_addr;
690 
691 	/* Transmitter timeout, serious problems. */
692 	pr_warn("%s: transmit timed out, Tx_status %2.2x status %4.4x Tx FIFO room %d\n",
693 		dev->name, inb(ioaddr + TX_STATUS), inw(ioaddr + EL3_STATUS),
694 		inw(ioaddr + TX_FREE));
695 	dev->stats.tx_errors++;
696 	netif_trans_update(dev); /* prevent tx timeout */
697 	/* Issue TX_RESET and TX_START commands. */
698 	outw(TxReset, ioaddr + EL3_CMD);
699 	outw(TxEnable, ioaddr + EL3_CMD);
700 	netif_wake_queue(dev);
701 }
702 
703 
704 static netdev_tx_t
705 el3_start_xmit(struct sk_buff *skb, struct net_device *dev)
706 {
707 	struct el3_private *lp = netdev_priv(dev);
708 	int ioaddr = dev->base_addr;
709 	unsigned long flags;
710 
711 	netif_stop_queue (dev);
712 
713 	dev->stats.tx_bytes += skb->len;
714 
715 	if (el3_debug > 4) {
716 		pr_debug("%s: el3_start_xmit(length = %u) called, status %4.4x.\n",
717 			   dev->name, skb->len, inw(ioaddr + EL3_STATUS));
718 	}
719 	/*
720 	 *	We lock the driver against other processors. Note
721 	 *	we don't need to lock versus the IRQ as we suspended
722 	 *	that. This means that we lose the ability to take
723 	 *	an RX during a TX upload. That sucks a bit with SMP
724 	 *	on an original 3c509 (2K buffer)
725 	 *
726 	 *	Using disable_irq stops us crapping on other
727 	 *	time sensitive devices.
728 	 */
729 
730 	spin_lock_irqsave(&lp->lock, flags);
731 
732 	/* Put out the doubleword header... */
733 	outw(skb->len, ioaddr + TX_FIFO);
734 	outw(0x00, ioaddr + TX_FIFO);
735 	/* ... and the packet rounded to a doubleword. */
736 	outsl(ioaddr + TX_FIFO, skb->data, (skb->len + 3) >> 2);
737 
738 	if (inw(ioaddr + TX_FREE) > 1536)
739 		netif_start_queue(dev);
740 	else
741 		/* Interrupt us when the FIFO has room for max-sized packet. */
742 		outw(SetTxThreshold + 1536, ioaddr + EL3_CMD);
743 
744 	spin_unlock_irqrestore(&lp->lock, flags);
745 
746 	dev_consume_skb_any (skb);
747 
748 	/* Clear the Tx status stack. */
749 	{
750 		short tx_status;
751 		int i = 4;
752 
753 		while (--i > 0	&&	(tx_status = inb(ioaddr + TX_STATUS)) > 0) {
754 			if (tx_status & 0x38) dev->stats.tx_aborted_errors++;
755 			if (tx_status & 0x30) outw(TxReset, ioaddr + EL3_CMD);
756 			if (tx_status & 0x3C) outw(TxEnable, ioaddr + EL3_CMD);
757 			outb(0x00, ioaddr + TX_STATUS); /* Pop the status stack. */
758 		}
759 	}
760 	return NETDEV_TX_OK;
761 }
762 
763 /* The EL3 interrupt handler. */
764 static irqreturn_t
765 el3_interrupt(int irq, void *dev_id)
766 {
767 	struct net_device *dev = dev_id;
768 	struct el3_private *lp;
769 	int ioaddr, status;
770 	int i = max_interrupt_work;
771 
772 	lp = netdev_priv(dev);
773 	spin_lock(&lp->lock);
774 
775 	ioaddr = dev->base_addr;
776 
777 	if (el3_debug > 4) {
778 		status = inw(ioaddr + EL3_STATUS);
779 		pr_debug("%s: interrupt, status %4.4x.\n", dev->name, status);
780 	}
781 
782 	while ((status = inw(ioaddr + EL3_STATUS)) &
783 		   (IntLatch | RxComplete | StatsFull)) {
784 
785 		if (status & RxComplete)
786 			el3_rx(dev);
787 
788 		if (status & TxAvailable) {
789 			if (el3_debug > 5)
790 				pr_debug("	TX room bit was handled.\n");
791 			/* There's room in the FIFO for a full-sized packet. */
792 			outw(AckIntr | TxAvailable, ioaddr + EL3_CMD);
793 			netif_wake_queue (dev);
794 		}
795 		if (status & (AdapterFailure | RxEarly | StatsFull | TxComplete)) {
796 			/* Handle all uncommon interrupts. */
797 			if (status & StatsFull)				/* Empty statistics. */
798 				update_stats(dev);
799 			if (status & RxEarly) {				/* Rx early is unused. */
800 				el3_rx(dev);
801 				outw(AckIntr | RxEarly, ioaddr + EL3_CMD);
802 			}
803 			if (status & TxComplete) {			/* Really Tx error. */
804 				short tx_status;
805 				int i = 4;
806 
807 				while (--i>0 && (tx_status = inb(ioaddr + TX_STATUS)) > 0) {
808 					if (tx_status & 0x38) dev->stats.tx_aborted_errors++;
809 					if (tx_status & 0x30) outw(TxReset, ioaddr + EL3_CMD);
810 					if (tx_status & 0x3C) outw(TxEnable, ioaddr + EL3_CMD);
811 					outb(0x00, ioaddr + TX_STATUS); /* Pop the status stack. */
812 				}
813 			}
814 			if (status & AdapterFailure) {
815 				/* Adapter failure requires Rx reset and reinit. */
816 				outw(RxReset, ioaddr + EL3_CMD);
817 				/* Set the Rx filter to the current state. */
818 				outw(SetRxFilter | RxStation | RxBroadcast
819 					 | (dev->flags & IFF_ALLMULTI ? RxMulticast : 0)
820 					 | (dev->flags & IFF_PROMISC ? RxProm : 0),
821 					 ioaddr + EL3_CMD);
822 				outw(RxEnable, ioaddr + EL3_CMD); /* Re-enable the receiver. */
823 				outw(AckIntr | AdapterFailure, ioaddr + EL3_CMD);
824 			}
825 		}
826 
827 		if (--i < 0) {
828 			pr_err("%s: Infinite loop in interrupt, status %4.4x.\n",
829 				   dev->name, status);
830 			/* Clear all interrupts. */
831 			outw(AckIntr | 0xFF, ioaddr + EL3_CMD);
832 			break;
833 		}
834 		/* Acknowledge the IRQ. */
835 		outw(AckIntr | IntReq | IntLatch, ioaddr + EL3_CMD); /* Ack IRQ */
836 	}
837 
838 	if (el3_debug > 4) {
839 		pr_debug("%s: exiting interrupt, status %4.4x.\n", dev->name,
840 			   inw(ioaddr + EL3_STATUS));
841 	}
842 	spin_unlock(&lp->lock);
843 	return IRQ_HANDLED;
844 }
845 
846 
847 #ifdef CONFIG_NET_POLL_CONTROLLER
848 /*
849  * Polling receive - used by netconsole and other diagnostic tools
850  * to allow network i/o with interrupts disabled.
851  */
852 static void el3_poll_controller(struct net_device *dev)
853 {
854 	disable_irq(dev->irq);
855 	el3_interrupt(dev->irq, dev);
856 	enable_irq(dev->irq);
857 }
858 #endif
859 
860 static struct net_device_stats *
861 el3_get_stats(struct net_device *dev)
862 {
863 	struct el3_private *lp = netdev_priv(dev);
864 	unsigned long flags;
865 
866 	/*
867 	 *	This is fast enough not to bother with disable IRQ
868 	 *	stuff.
869 	 */
870 
871 	spin_lock_irqsave(&lp->lock, flags);
872 	update_stats(dev);
873 	spin_unlock_irqrestore(&lp->lock, flags);
874 	return &dev->stats;
875 }
876 
877 /*  Update statistics.  We change to register window 6, so this should be run
878 	single-threaded if the device is active. This is expected to be a rare
879 	operation, and it's simpler for the rest of the driver to assume that
880 	window 1 is always valid rather than use a special window-state variable.
881 	*/
882 static void update_stats(struct net_device *dev)
883 {
884 	int ioaddr = dev->base_addr;
885 
886 	if (el3_debug > 5)
887 		pr_debug("   Updating the statistics.\n");
888 	/* Turn off statistics updates while reading. */
889 	outw(StatsDisable, ioaddr + EL3_CMD);
890 	/* Switch to the stats window, and read everything. */
891 	EL3WINDOW(6);
892 	dev->stats.tx_carrier_errors 	+= inb(ioaddr + 0);
893 	dev->stats.tx_heartbeat_errors	+= inb(ioaddr + 1);
894 	/* Multiple collisions. */	   inb(ioaddr + 2);
895 	dev->stats.collisions		+= inb(ioaddr + 3);
896 	dev->stats.tx_window_errors	+= inb(ioaddr + 4);
897 	dev->stats.rx_fifo_errors	+= inb(ioaddr + 5);
898 	dev->stats.tx_packets		+= inb(ioaddr + 6);
899 	/* Rx packets	*/		   inb(ioaddr + 7);
900 	/* Tx deferrals */		   inb(ioaddr + 8);
901 	inw(ioaddr + 10);	/* Total Rx and Tx octets. */
902 	inw(ioaddr + 12);
903 
904 	/* Back to window 1, and turn statistics back on. */
905 	EL3WINDOW(1);
906 	outw(StatsEnable, ioaddr + EL3_CMD);
907 }
908 
909 static int
910 el3_rx(struct net_device *dev)
911 {
912 	int ioaddr = dev->base_addr;
913 	short rx_status;
914 
915 	if (el3_debug > 5)
916 		pr_debug("   In rx_packet(), status %4.4x, rx_status %4.4x.\n",
917 			   inw(ioaddr+EL3_STATUS), inw(ioaddr+RX_STATUS));
918 	while ((rx_status = inw(ioaddr + RX_STATUS)) > 0) {
919 		if (rx_status & 0x4000) { /* Error, update stats. */
920 			short error = rx_status & 0x3800;
921 
922 			outw(RxDiscard, ioaddr + EL3_CMD);
923 			dev->stats.rx_errors++;
924 			switch (error) {
925 			case 0x0000:		dev->stats.rx_over_errors++; break;
926 			case 0x0800:		dev->stats.rx_length_errors++; break;
927 			case 0x1000:		dev->stats.rx_frame_errors++; break;
928 			case 0x1800:		dev->stats.rx_length_errors++; break;
929 			case 0x2000:		dev->stats.rx_frame_errors++; break;
930 			case 0x2800:		dev->stats.rx_crc_errors++; break;
931 			}
932 		} else {
933 			short pkt_len = rx_status & 0x7ff;
934 			struct sk_buff *skb;
935 
936 			skb = netdev_alloc_skb(dev, pkt_len + 5);
937 			if (el3_debug > 4)
938 				pr_debug("Receiving packet size %d status %4.4x.\n",
939 					   pkt_len, rx_status);
940 			if (skb != NULL) {
941 				skb_reserve(skb, 2);     /* Align IP on 16 byte */
942 
943 				/* 'skb->data' points to the start of sk_buff data area. */
944 				insl(ioaddr + RX_FIFO, skb_put(skb,pkt_len),
945 					 (pkt_len + 3) >> 2);
946 
947 				outw(RxDiscard, ioaddr + EL3_CMD); /* Pop top Rx packet. */
948 				skb->protocol = eth_type_trans(skb,dev);
949 				netif_rx(skb);
950 				dev->stats.rx_bytes += pkt_len;
951 				dev->stats.rx_packets++;
952 				continue;
953 			}
954 			outw(RxDiscard, ioaddr + EL3_CMD);
955 			dev->stats.rx_dropped++;
956 			if (el3_debug)
957 				pr_debug("%s: Couldn't allocate a sk_buff of size %d.\n",
958 					   dev->name, pkt_len);
959 		}
960 		inw(ioaddr + EL3_STATUS); 				/* Delay. */
961 		while (inw(ioaddr + EL3_STATUS) & 0x1000)
962 			pr_debug("	Waiting for 3c509 to discard packet, status %x.\n",
963 				   inw(ioaddr + EL3_STATUS) );
964 	}
965 
966 	return 0;
967 }
968 
969 /*
970  *     Set or clear the multicast filter for this adaptor.
971  */
972 static void
973 set_multicast_list(struct net_device *dev)
974 {
975 	unsigned long flags;
976 	struct el3_private *lp = netdev_priv(dev);
977 	int ioaddr = dev->base_addr;
978 	int mc_count = netdev_mc_count(dev);
979 
980 	if (el3_debug > 1) {
981 		static int old;
982 		if (old != mc_count) {
983 			old = mc_count;
984 			pr_debug("%s: Setting Rx mode to %d addresses.\n",
985 				 dev->name, mc_count);
986 		}
987 	}
988 	spin_lock_irqsave(&lp->lock, flags);
989 	if (dev->flags&IFF_PROMISC) {
990 		outw(SetRxFilter | RxStation | RxMulticast | RxBroadcast | RxProm,
991 			 ioaddr + EL3_CMD);
992 	}
993 	else if (mc_count || (dev->flags&IFF_ALLMULTI)) {
994 		outw(SetRxFilter | RxStation | RxMulticast | RxBroadcast, ioaddr + EL3_CMD);
995 	}
996 	else
997 		outw(SetRxFilter | RxStation | RxBroadcast, ioaddr + EL3_CMD);
998 	spin_unlock_irqrestore(&lp->lock, flags);
999 }
1000 
1001 static int
1002 el3_close(struct net_device *dev)
1003 {
1004 	int ioaddr = dev->base_addr;
1005 	struct el3_private *lp = netdev_priv(dev);
1006 
1007 	if (el3_debug > 2)
1008 		pr_debug("%s: Shutting down ethercard.\n", dev->name);
1009 
1010 	el3_down(dev);
1011 
1012 	free_irq(dev->irq, dev);
1013 	/* Switching back to window 0 disables the IRQ. */
1014 	EL3WINDOW(0);
1015 	if (lp->type != EL3_EISA) {
1016 		/* But we explicitly zero the IRQ line select anyway. Don't do
1017 		 * it on EISA cards, it prevents the module from getting an
1018 		 * IRQ after unload+reload... */
1019 		outw(0x0f00, ioaddr + WN0_IRQ);
1020 	}
1021 
1022 	return 0;
1023 }
1024 
1025 static int
1026 el3_link_ok(struct net_device *dev)
1027 {
1028 	int ioaddr = dev->base_addr;
1029 	u16 tmp;
1030 
1031 	EL3WINDOW(4);
1032 	tmp = inw(ioaddr + WN4_MEDIA);
1033 	EL3WINDOW(1);
1034 	return tmp & (1<<11);
1035 }
1036 
1037 static void
1038 el3_netdev_get_ecmd(struct net_device *dev, struct ethtool_link_ksettings *cmd)
1039 {
1040 	u16 tmp;
1041 	int ioaddr = dev->base_addr;
1042 	u32 supported;
1043 
1044 	EL3WINDOW(0);
1045 	/* obtain current transceiver via WN4_MEDIA? */
1046 	tmp = inw(ioaddr + WN0_ADDR_CONF);
1047 	switch (tmp >> 14) {
1048 	case 0:
1049 		cmd->base.port = PORT_TP;
1050 		break;
1051 	case 1:
1052 		cmd->base.port = PORT_AUI;
1053 		break;
1054 	case 3:
1055 		cmd->base.port = PORT_BNC;
1056 	default:
1057 		break;
1058 	}
1059 
1060 	cmd->base.duplex = DUPLEX_HALF;
1061 	supported = 0;
1062 	tmp = inw(ioaddr + WN0_CONF_CTRL);
1063 	if (tmp & (1<<13))
1064 		supported |= SUPPORTED_AUI;
1065 	if (tmp & (1<<12))
1066 		supported |= SUPPORTED_BNC;
1067 	if (tmp & (1<<9)) {
1068 		supported |= SUPPORTED_TP | SUPPORTED_10baseT_Half |
1069 				SUPPORTED_10baseT_Full;	/* hmm... */
1070 		EL3WINDOW(4);
1071 		tmp = inw(ioaddr + WN4_NETDIAG);
1072 		if (tmp & FD_ENABLE)
1073 			cmd->base.duplex = DUPLEX_FULL;
1074 	}
1075 
1076 	ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.supported,
1077 						supported);
1078 	cmd->base.speed = SPEED_10;
1079 	EL3WINDOW(1);
1080 }
1081 
1082 static int
1083 el3_netdev_set_ecmd(struct net_device *dev,
1084 		    const struct ethtool_link_ksettings *cmd)
1085 {
1086 	u16 tmp;
1087 	int ioaddr = dev->base_addr;
1088 
1089 	if (cmd->base.speed != SPEED_10)
1090 		return -EINVAL;
1091 	if ((cmd->base.duplex != DUPLEX_HALF) &&
1092 	    (cmd->base.duplex != DUPLEX_FULL))
1093 		return -EINVAL;
1094 
1095 	/* change XCVR type */
1096 	EL3WINDOW(0);
1097 	tmp = inw(ioaddr + WN0_ADDR_CONF);
1098 	switch (cmd->base.port) {
1099 	case PORT_TP:
1100 		tmp &= ~(3<<14);
1101 		dev->if_port = 0;
1102 		break;
1103 	case PORT_AUI:
1104 		tmp |= (1<<14);
1105 		dev->if_port = 1;
1106 		break;
1107 	case PORT_BNC:
1108 		tmp |= (3<<14);
1109 		dev->if_port = 3;
1110 		break;
1111 	default:
1112 		return -EINVAL;
1113 	}
1114 
1115 	outw(tmp, ioaddr + WN0_ADDR_CONF);
1116 	if (dev->if_port == 3) {
1117 		/* fire up the DC-DC convertor if BNC gets enabled */
1118 		tmp = inw(ioaddr + WN0_ADDR_CONF);
1119 		if (tmp & (3 << 14)) {
1120 			outw(StartCoax, ioaddr + EL3_CMD);
1121 			udelay(800);
1122 		} else
1123 			return -EIO;
1124 	}
1125 
1126 	EL3WINDOW(4);
1127 	tmp = inw(ioaddr + WN4_NETDIAG);
1128 	if (cmd->base.duplex == DUPLEX_FULL)
1129 		tmp |= FD_ENABLE;
1130 	else
1131 		tmp &= ~FD_ENABLE;
1132 	outw(tmp, ioaddr + WN4_NETDIAG);
1133 	EL3WINDOW(1);
1134 
1135 	return 0;
1136 }
1137 
1138 static void el3_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
1139 {
1140 	strlcpy(info->driver, DRV_NAME, sizeof(info->driver));
1141 }
1142 
1143 static int el3_get_link_ksettings(struct net_device *dev,
1144 				  struct ethtool_link_ksettings *cmd)
1145 {
1146 	struct el3_private *lp = netdev_priv(dev);
1147 
1148 	spin_lock_irq(&lp->lock);
1149 	el3_netdev_get_ecmd(dev, cmd);
1150 	spin_unlock_irq(&lp->lock);
1151 	return 0;
1152 }
1153 
1154 static int el3_set_link_ksettings(struct net_device *dev,
1155 				  const struct ethtool_link_ksettings *cmd)
1156 {
1157 	struct el3_private *lp = netdev_priv(dev);
1158 	int ret;
1159 
1160 	spin_lock_irq(&lp->lock);
1161 	ret = el3_netdev_set_ecmd(dev, cmd);
1162 	spin_unlock_irq(&lp->lock);
1163 	return ret;
1164 }
1165 
1166 static u32 el3_get_link(struct net_device *dev)
1167 {
1168 	struct el3_private *lp = netdev_priv(dev);
1169 	u32 ret;
1170 
1171 	spin_lock_irq(&lp->lock);
1172 	ret = el3_link_ok(dev);
1173 	spin_unlock_irq(&lp->lock);
1174 	return ret;
1175 }
1176 
1177 static u32 el3_get_msglevel(struct net_device *dev)
1178 {
1179 	return el3_debug;
1180 }
1181 
1182 static void el3_set_msglevel(struct net_device *dev, u32 v)
1183 {
1184 	el3_debug = v;
1185 }
1186 
1187 static const struct ethtool_ops ethtool_ops = {
1188 	.get_drvinfo = el3_get_drvinfo,
1189 	.get_link = el3_get_link,
1190 	.get_msglevel = el3_get_msglevel,
1191 	.set_msglevel = el3_set_msglevel,
1192 	.get_link_ksettings = el3_get_link_ksettings,
1193 	.set_link_ksettings = el3_set_link_ksettings,
1194 };
1195 
1196 static void
1197 el3_down(struct net_device *dev)
1198 {
1199 	int ioaddr = dev->base_addr;
1200 
1201 	netif_stop_queue(dev);
1202 
1203 	/* Turn off statistics ASAP.  We update lp->stats below. */
1204 	outw(StatsDisable, ioaddr + EL3_CMD);
1205 
1206 	/* Disable the receiver and transmitter. */
1207 	outw(RxDisable, ioaddr + EL3_CMD);
1208 	outw(TxDisable, ioaddr + EL3_CMD);
1209 
1210 	if (dev->if_port == 3)
1211 		/* Turn off thinnet power.  Green! */
1212 		outw(StopCoax, ioaddr + EL3_CMD);
1213 	else if (dev->if_port == 0) {
1214 		/* Disable link beat and jabber, if_port may change here next open(). */
1215 		EL3WINDOW(4);
1216 		outw(inw(ioaddr + WN4_MEDIA) & ~MEDIA_TP, ioaddr + WN4_MEDIA);
1217 	}
1218 
1219 	outw(SetIntrEnb | 0x0000, ioaddr + EL3_CMD);
1220 
1221 	update_stats(dev);
1222 }
1223 
1224 static void
1225 el3_up(struct net_device *dev)
1226 {
1227 	int i, sw_info, net_diag;
1228 	int ioaddr = dev->base_addr;
1229 
1230 	/* Activating the board required and does no harm otherwise */
1231 	outw(0x0001, ioaddr + 4);
1232 
1233 	/* Set the IRQ line. */
1234 	outw((dev->irq << 12) | 0x0f00, ioaddr + WN0_IRQ);
1235 
1236 	/* Set the station address in window 2 each time opened. */
1237 	EL3WINDOW(2);
1238 
1239 	for (i = 0; i < 6; i++)
1240 		outb(dev->dev_addr[i], ioaddr + i);
1241 
1242 	if ((dev->if_port & 0x03) == 3) /* BNC interface */
1243 		/* Start the thinnet transceiver. We should really wait 50ms...*/
1244 		outw(StartCoax, ioaddr + EL3_CMD);
1245 	else if ((dev->if_port & 0x03) == 0) { /* 10baseT interface */
1246 		/* Combine secondary sw_info word (the adapter level) and primary
1247 			sw_info word (duplex setting plus other useless bits) */
1248 		EL3WINDOW(0);
1249 		sw_info = (read_eeprom(ioaddr, 0x14) & 0x400f) |
1250 			(read_eeprom(ioaddr, 0x0d) & 0xBff0);
1251 
1252 		EL3WINDOW(4);
1253 		net_diag = inw(ioaddr + WN4_NETDIAG);
1254 		net_diag = (net_diag | FD_ENABLE); /* temporarily assume full-duplex will be set */
1255 		pr_info("%s: ", dev->name);
1256 		switch (dev->if_port & 0x0c) {
1257 			case 12:
1258 				/* force full-duplex mode if 3c5x9b */
1259 				if (sw_info & 0x000f) {
1260 					pr_cont("Forcing 3c5x9b full-duplex mode");
1261 					break;
1262 				}
1263 				/* fall through */
1264 			case 8:
1265 				/* set full-duplex mode based on eeprom config setting */
1266 				if ((sw_info & 0x000f) && (sw_info & 0x8000)) {
1267 					pr_cont("Setting 3c5x9b full-duplex mode (from EEPROM configuration bit)");
1268 					break;
1269 				}
1270 				/* fall through */
1271 			default:
1272 				/* xcvr=(0 || 4) OR user has an old 3c5x9 non "B" model */
1273 				pr_cont("Setting 3c5x9/3c5x9B half-duplex mode");
1274 				net_diag = (net_diag & ~FD_ENABLE); /* disable full duplex */
1275 		}
1276 
1277 		outw(net_diag, ioaddr + WN4_NETDIAG);
1278 		pr_cont(" if_port: %d, sw_info: %4.4x\n", dev->if_port, sw_info);
1279 		if (el3_debug > 3)
1280 			pr_debug("%s: 3c5x9 net diag word is now: %4.4x.\n", dev->name, net_diag);
1281 		/* Enable link beat and jabber check. */
1282 		outw(inw(ioaddr + WN4_MEDIA) | MEDIA_TP, ioaddr + WN4_MEDIA);
1283 	}
1284 
1285 	/* Switch to the stats window, and clear all stats by reading. */
1286 	outw(StatsDisable, ioaddr + EL3_CMD);
1287 	EL3WINDOW(6);
1288 	for (i = 0; i < 9; i++)
1289 		inb(ioaddr + i);
1290 	inw(ioaddr + 10);
1291 	inw(ioaddr + 12);
1292 
1293 	/* Switch to register set 1 for normal use. */
1294 	EL3WINDOW(1);
1295 
1296 	/* Accept b-case and phys addr only. */
1297 	outw(SetRxFilter | RxStation | RxBroadcast, ioaddr + EL3_CMD);
1298 	outw(StatsEnable, ioaddr + EL3_CMD); /* Turn on statistics. */
1299 
1300 	outw(RxEnable, ioaddr + EL3_CMD); /* Enable the receiver. */
1301 	outw(TxEnable, ioaddr + EL3_CMD); /* Enable transmitter. */
1302 	/* Allow status bits to be seen. */
1303 	outw(SetStatusEnb | 0xff, ioaddr + EL3_CMD);
1304 	/* Ack all pending events, and set active indicator mask. */
1305 	outw(AckIntr | IntLatch | TxAvailable | RxEarly | IntReq,
1306 		 ioaddr + EL3_CMD);
1307 	outw(SetIntrEnb | IntLatch|TxAvailable|TxComplete|RxComplete|StatsFull,
1308 		 ioaddr + EL3_CMD);
1309 
1310 	netif_start_queue(dev);
1311 }
1312 
1313 /* Power Management support functions */
1314 #ifdef CONFIG_PM
1315 
1316 static int
1317 el3_suspend(struct device *pdev, pm_message_t state)
1318 {
1319 	unsigned long flags;
1320 	struct net_device *dev;
1321 	struct el3_private *lp;
1322 	int ioaddr;
1323 
1324 	dev = dev_get_drvdata(pdev);
1325 	lp = netdev_priv(dev);
1326 	ioaddr = dev->base_addr;
1327 
1328 	spin_lock_irqsave(&lp->lock, flags);
1329 
1330 	if (netif_running(dev))
1331 		netif_device_detach(dev);
1332 
1333 	el3_down(dev);
1334 	outw(PowerDown, ioaddr + EL3_CMD);
1335 
1336 	spin_unlock_irqrestore(&lp->lock, flags);
1337 	return 0;
1338 }
1339 
1340 static int
1341 el3_resume(struct device *pdev)
1342 {
1343 	unsigned long flags;
1344 	struct net_device *dev;
1345 	struct el3_private *lp;
1346 	int ioaddr;
1347 
1348 	dev = dev_get_drvdata(pdev);
1349 	lp = netdev_priv(dev);
1350 	ioaddr = dev->base_addr;
1351 
1352 	spin_lock_irqsave(&lp->lock, flags);
1353 
1354 	outw(PowerUp, ioaddr + EL3_CMD);
1355 	EL3WINDOW(0);
1356 	el3_up(dev);
1357 
1358 	if (netif_running(dev))
1359 		netif_device_attach(dev);
1360 
1361 	spin_unlock_irqrestore(&lp->lock, flags);
1362 	return 0;
1363 }
1364 
1365 #endif /* CONFIG_PM */
1366 
1367 module_param(debug,int, 0);
1368 module_param_hw_array(irq, int, irq, NULL, 0);
1369 module_param(max_interrupt_work, int, 0);
1370 MODULE_PARM_DESC(debug, "debug level (0-6)");
1371 MODULE_PARM_DESC(irq, "IRQ number(s) (assigned)");
1372 MODULE_PARM_DESC(max_interrupt_work, "maximum events handled per interrupt");
1373 #ifdef CONFIG_PNP
1374 module_param(nopnp, int, 0);
1375 MODULE_PARM_DESC(nopnp, "disable ISA PnP support (0-1)");
1376 #endif	/* CONFIG_PNP */
1377 MODULE_DESCRIPTION("3Com Etherlink III (3c509, 3c509B, 3c529, 3c579) ethernet driver");
1378 MODULE_LICENSE("GPL");
1379 
1380 static int __init el3_init_module(void)
1381 {
1382 	int ret = 0;
1383 
1384 	if (debug >= 0)
1385 		el3_debug = debug;
1386 
1387 #ifdef CONFIG_PNP
1388 	if (!nopnp) {
1389 		ret = pnp_register_driver(&el3_pnp_driver);
1390 		if (!ret)
1391 			pnp_registered = 1;
1392 	}
1393 #endif
1394 	/* Select an open I/O location at 0x1*0 to do ISA contention select. */
1395 	/* Start with 0x110 to avoid some sound cards.*/
1396 	for (id_port = 0x110 ; id_port < 0x200; id_port += 0x10) {
1397 		if (!request_region(id_port, 1, "3c509-control"))
1398 			continue;
1399 		outb(0x00, id_port);
1400 		outb(0xff, id_port);
1401 		if (inb(id_port) & 0x01)
1402 			break;
1403 		else
1404 			release_region(id_port, 1);
1405 	}
1406 	if (id_port >= 0x200) {
1407 		id_port = 0;
1408 		pr_err("No I/O port available for 3c509 activation.\n");
1409 	} else {
1410 		ret = isa_register_driver(&el3_isa_driver, EL3_MAX_CARDS);
1411 		if (!ret)
1412 			isa_registered = 1;
1413 	}
1414 #ifdef CONFIG_EISA
1415 	ret = eisa_driver_register(&el3_eisa_driver);
1416 	if (!ret)
1417 		eisa_registered = 1;
1418 #endif
1419 
1420 #ifdef CONFIG_PNP
1421 	if (pnp_registered)
1422 		ret = 0;
1423 #endif
1424 	if (isa_registered)
1425 		ret = 0;
1426 #ifdef CONFIG_EISA
1427 	if (eisa_registered)
1428 		ret = 0;
1429 #endif
1430 	return ret;
1431 }
1432 
1433 static void __exit el3_cleanup_module(void)
1434 {
1435 #ifdef CONFIG_PNP
1436 	if (pnp_registered)
1437 		pnp_unregister_driver(&el3_pnp_driver);
1438 #endif
1439 	if (isa_registered)
1440 		isa_unregister_driver(&el3_isa_driver);
1441 	if (id_port)
1442 		release_region(id_port, 1);
1443 #ifdef CONFIG_EISA
1444 	if (eisa_registered)
1445 		eisa_driver_unregister(&el3_eisa_driver);
1446 #endif
1447 }
1448 
1449 module_init (el3_init_module);
1450 module_exit (el3_cleanup_module);
1451