1 /* 3c509.c: A 3c509 EtherLink3 ethernet driver for linux. */
3 Written 1993-2000 by Donald Becker.
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.
11 This driver is for the 3Com EtherLinkIII series.
13 The author may be reached as becker@scyld.com, or C/O
14 Scyld Computing Corporation
15 410 Severn Ave., Suite 210
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.
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.
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)
35 v1.10 4/21/97 Fixed module code so that multiple cards may be detected,
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>
48 v1.18b 1Mar2002 Zwane Mwaikambo <zwane@commfireservices.com>
49 - Power Management support
50 v1.18c 1Mar2002 David Ruggiero <jdr@farfalle.com>
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
62 #define DRV_NAME "3c509"
64 /* A few values that may be tweaked. */
66 /* Time in jiffies before concluding the transmitter is hung. */
67 #define TX_TIMEOUT (400*HZ/1000)
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>
76 #include <linux/ioport.h>
77 #include <linux/init.h>
78 #include <linux/netdevice.h>
79 #include <linux/etherdevice.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>
89 #include <linux/uaccess.h>
94 static int el3_debug = EL3_DEBUG;
96 static int el3_debug = 2;
99 /* Used to do a global count of all the cards in the system. Must be
100 * a global variable so that the eisa probe routines can increment
102 static int el3_cards = 0;
103 #define EL3_MAX_CARDS 8
105 /* To minimize the size of the driver source I only define operating
106 constants if they are used several times. You'll need the manual
107 anyway if you want to understand driver details. */
108 /* Offsets from base I/O address. */
109 #define EL3_DATA 0x00
111 #define EL3_STATUS 0x0e
112 #define EEPROM_READ 0x80
114 #define EL3_IO_EXTENT 16
116 #define EL3WINDOW(win_num) outw(SelectWindow + (win_num), ioaddr + EL3_CMD)
119 /* The top five bits written to EL3_CMD are a command, the lower
120 11 bits are the parameter, if applicable. */
122 TotalReset = 0<<11, SelectWindow = 1<<11, StartCoax = 2<<11,
123 RxDisable = 3<<11, RxEnable = 4<<11, RxReset = 5<<11, RxDiscard = 8<<11,
124 TxEnable = 9<<11, TxDisable = 10<<11, TxReset = 11<<11,
125 FakeIntr = 12<<11, AckIntr = 13<<11, SetIntrEnb = 14<<11,
126 SetStatusEnb = 15<<11, SetRxFilter = 16<<11, SetRxThreshold = 17<<11,
127 SetTxThreshold = 18<<11, SetTxStart = 19<<11, StatsEnable = 21<<11,
128 StatsDisable = 22<<11, StopCoax = 23<<11, PowerUp = 27<<11,
129 PowerDown = 28<<11, PowerAuto = 29<<11};
132 IntLatch = 0x0001, AdapterFailure = 0x0002, TxComplete = 0x0004,
133 TxAvailable = 0x0008, RxComplete = 0x0010, RxEarly = 0x0020,
134 IntReq = 0x0040, StatsFull = 0x0080, CmdBusy = 0x1000, };
136 /* The SetRxFilter command accepts the following classes: */
138 RxStation = 1, RxMulticast = 2, RxBroadcast = 4, RxProm = 8 };
140 /* Register window 1 offsets, the window used in normal operation. */
143 #define RX_STATUS 0x08
144 #define TX_STATUS 0x0B
145 #define TX_FREE 0x0C /* Remaining free bytes in Tx buffer. */
147 #define WN0_CONF_CTRL 0x04 /* Window 0: Configuration control register */
148 #define WN0_ADDR_CONF 0x06 /* Window 0: Address configuration register */
149 #define WN0_IRQ 0x08 /* Window 0: Set IRQ line in bits 12-15. */
150 #define WN4_MEDIA 0x0A /* Window 4: Various transcvr/media bits. */
151 #define MEDIA_TP 0x00C0 /* Enable link beat and jabber for 10baseT. */
152 #define WN4_NETDIAG 0x06 /* Window 4: Net diagnostic */
153 #define FD_ENABLE 0x8000 /* Enable full-duplex ("external loopback") */
156 * Must be a power of two (we use a binary and in the
159 #define SKB_QUEUE_SIZE 64
161 enum el3_cardtype { EL3_ISA, EL3_PNP, EL3_EISA };
167 struct sk_buff *queue[SKB_QUEUE_SIZE];
168 enum el3_cardtype type;
171 static int current_tag;
172 static struct net_device *el3_devs[EL3_MAX_CARDS];
174 /* Parameters that may be passed into the module. */
175 static int debug = -1;
176 static int irq[] = {-1, -1, -1, -1, -1, -1, -1, -1};
177 /* Maximum events (Rx packets, etc.) to handle at each interrupt. */
178 static int max_interrupt_work = 10;
183 static int el3_common_init(struct net_device *dev);
184 static void el3_common_remove(struct net_device *dev);
185 static ushort id_read_eeprom(int index);
186 static ushort read_eeprom(int ioaddr, int index);
187 static int el3_open(struct net_device *dev);
188 static netdev_tx_t el3_start_xmit(struct sk_buff *skb, struct net_device *dev);
189 static irqreturn_t el3_interrupt(int irq, void *dev_id);
190 static void update_stats(struct net_device *dev);
191 static struct net_device_stats *el3_get_stats(struct net_device *dev);
192 static int el3_rx(struct net_device *dev);
193 static int el3_close(struct net_device *dev);
194 static void set_multicast_list(struct net_device *dev);
195 static void el3_tx_timeout (struct net_device *dev, unsigned int txqueue);
196 static void el3_down(struct net_device *dev);
197 static void el3_up(struct net_device *dev);
198 static const struct ethtool_ops ethtool_ops;
200 static int el3_suspend(struct device *, pm_message_t);
201 static int el3_resume(struct device *);
203 #define el3_suspend NULL
204 #define el3_resume NULL
208 /* generic device remove for all device types */
209 static int el3_device_remove (struct device *device);
210 #ifdef CONFIG_NET_POLL_CONTROLLER
211 static void el3_poll_controller(struct net_device *dev);
214 /* Return 0 on success, 1 on error, 2 when found already detected PnP card */
215 static int el3_isa_id_sequence(__be16 *phys_addr)
217 short lrs_state = 0xff;
220 /* ISA boards are detected by sending the ID sequence to the
221 ID_PORT. We find cards past the first by setting the 'current_tag'
222 on cards as they are found. Cards with their tag set will not
223 respond to subsequent ID sequences. */
227 for (i = 0; i < 255; i++) {
228 outb(lrs_state, id_port);
230 lrs_state = lrs_state & 0x100 ? lrs_state ^ 0xcf : lrs_state;
232 /* For the first probe, clear all board's tag registers. */
233 if (current_tag == 0)
235 else /* Otherwise kill off already-found boards. */
237 if (id_read_eeprom(7) != 0x6d50)
239 /* Read in EEPROM data, which does contention-select.
240 Only the lowest address board will stay "on-line".
241 3Com got the byte order backwards. */
242 for (i = 0; i < 3; i++)
243 phys_addr[i] = htons(id_read_eeprom(i));
246 /* The ISA PnP 3c509 cards respond to the ID sequence too.
247 This check is needed in order not to register them twice. */
248 for (i = 0; i < el3_cards; i++) {
249 struct el3_private *lp = netdev_priv(el3_devs[i]);
250 if (lp->type == EL3_PNP &&
251 ether_addr_equal((u8 *)phys_addr, el3_devs[i]->dev_addr)) {
253 pr_debug("3c509 with address %02x %02x %02x %02x %02x %02x was found by ISAPnP\n",
254 phys_addr[0] & 0xff, phys_addr[0] >> 8,
255 phys_addr[1] & 0xff, phys_addr[1] >> 8,
256 phys_addr[2] & 0xff, phys_addr[2] >> 8);
257 /* Set the adaptor tag so that the next card can be found. */
258 outb(0xd0 + ++current_tag, id_port);
263 #endif /* CONFIG_PNP */
268 static void el3_dev_fill(struct net_device *dev, __be16 *phys_addr, int ioaddr,
269 int irq, int if_port, enum el3_cardtype type)
271 struct el3_private *lp = netdev_priv(dev);
273 memcpy(dev->dev_addr, phys_addr, ETH_ALEN);
274 dev->base_addr = ioaddr;
276 dev->if_port = if_port;
280 static int el3_isa_match(struct device *pdev, unsigned int ndev)
282 struct net_device *dev;
283 int ioaddr, isa_irq, if_port, err;
287 while ((err = el3_isa_id_sequence(phys_addr)) == 2)
288 ; /* Skip to next card when PnP card found */
292 iobase = id_read_eeprom(8);
293 if_port = iobase >> 14;
294 ioaddr = 0x200 + ((iobase & 0x1f) << 4);
295 if (irq[el3_cards] > 1 && irq[el3_cards] < 16)
296 isa_irq = irq[el3_cards];
298 isa_irq = id_read_eeprom(9) >> 12;
300 dev = alloc_etherdev(sizeof(struct el3_private));
304 SET_NETDEV_DEV(dev, pdev);
305 netdev_boot_setup_check(dev);
307 if (!request_region(ioaddr, EL3_IO_EXTENT, "3c509-isa")) {
312 /* Set the adaptor tag so that the next card can be found. */
313 outb(0xd0 + ++current_tag, id_port);
315 /* Activate the adaptor at the EEPROM location. */
316 outb((ioaddr >> 4) | 0xe0, id_port);
319 if (inw(ioaddr) != 0x6d50) {
324 /* Free the interrupt so that some other card can use it. */
325 outw(0x0f00, ioaddr + WN0_IRQ);
327 el3_dev_fill(dev, phys_addr, ioaddr, isa_irq, if_port, EL3_ISA);
328 dev_set_drvdata(pdev, dev);
329 if (el3_common_init(dev)) {
334 el3_devs[el3_cards++] = dev;
338 static void el3_isa_remove(struct device *pdev,
341 el3_device_remove(pdev);
342 dev_set_drvdata(pdev, NULL);
346 static int el3_isa_suspend(struct device *dev, unsigned int n,
350 return el3_suspend(dev, state);
353 static int el3_isa_resume(struct device *dev, unsigned int n)
355 struct net_device *ndev = dev_get_drvdata(dev);
356 int ioaddr = ndev->base_addr, err;
359 while ((err = el3_isa_id_sequence(phys_addr)) == 2)
360 ; /* Skip to next card when PnP card found */
363 /* Set the adaptor tag so that the next card can be found. */
364 outb(0xd0 + ++current_tag, id_port);
365 /* Enable the card */
366 outb((ioaddr >> 4) | 0xe0, id_port);
368 if (inw(ioaddr) != 0x6d50)
370 /* Free the interrupt so that some other card can use it. */
371 outw(0x0f00, ioaddr + WN0_IRQ);
372 return el3_resume(dev);
376 static struct isa_driver el3_isa_driver = {
377 .match = el3_isa_match,
378 .remove = el3_isa_remove,
380 .suspend = el3_isa_suspend,
381 .resume = el3_isa_resume,
387 static int isa_registered;
390 static const struct pnp_device_id el3_pnp_ids[] = {
391 { .id = "TCM5090" }, /* 3Com Etherlink III (TP) */
392 { .id = "TCM5091" }, /* 3Com Etherlink III */
393 { .id = "TCM5094" }, /* 3Com Etherlink III (combo) */
394 { .id = "TCM5095" }, /* 3Com Etherlink III (TPO) */
395 { .id = "TCM5098" }, /* 3Com Etherlink III (TPC) */
396 { .id = "PNP80f7" }, /* 3Com Etherlink III compatible */
397 { .id = "PNP80f8" }, /* 3Com Etherlink III compatible */
400 MODULE_DEVICE_TABLE(pnp, el3_pnp_ids);
402 static int el3_pnp_probe(struct pnp_dev *pdev, const struct pnp_device_id *id)
405 int ioaddr, irq, if_port;
407 struct net_device *dev = NULL;
410 ioaddr = pnp_port_start(pdev, 0);
411 if (!request_region(ioaddr, EL3_IO_EXTENT, "3c509-pnp"))
413 irq = pnp_irq(pdev, 0);
415 for (i = 0; i < 3; i++)
416 phys_addr[i] = htons(read_eeprom(ioaddr, i));
417 if_port = read_eeprom(ioaddr, 8) >> 14;
418 dev = alloc_etherdev(sizeof(struct el3_private));
420 release_region(ioaddr, EL3_IO_EXTENT);
423 SET_NETDEV_DEV(dev, &pdev->dev);
424 netdev_boot_setup_check(dev);
426 el3_dev_fill(dev, phys_addr, ioaddr, irq, if_port, EL3_PNP);
427 pnp_set_drvdata(pdev, dev);
428 err = el3_common_init(dev);
431 pnp_set_drvdata(pdev, NULL);
436 el3_devs[el3_cards++] = dev;
440 static void el3_pnp_remove(struct pnp_dev *pdev)
442 el3_common_remove(pnp_get_drvdata(pdev));
443 pnp_set_drvdata(pdev, NULL);
447 static int el3_pnp_suspend(struct pnp_dev *pdev, pm_message_t state)
449 return el3_suspend(&pdev->dev, state);
452 static int el3_pnp_resume(struct pnp_dev *pdev)
454 return el3_resume(&pdev->dev);
458 static struct pnp_driver el3_pnp_driver = {
460 .id_table = el3_pnp_ids,
461 .probe = el3_pnp_probe,
462 .remove = el3_pnp_remove,
464 .suspend = el3_pnp_suspend,
465 .resume = el3_pnp_resume,
468 static int pnp_registered;
469 #endif /* CONFIG_PNP */
472 static const struct eisa_device_id el3_eisa_ids[] = {
482 MODULE_DEVICE_TABLE(eisa, el3_eisa_ids);
484 static int el3_eisa_probe (struct device *device);
486 static struct eisa_driver el3_eisa_driver = {
487 .id_table = el3_eisa_ids,
490 .probe = el3_eisa_probe,
491 .remove = el3_device_remove,
492 .suspend = el3_suspend,
493 .resume = el3_resume,
496 static int eisa_registered;
499 static const struct net_device_ops netdev_ops = {
500 .ndo_open = el3_open,
501 .ndo_stop = el3_close,
502 .ndo_start_xmit = el3_start_xmit,
503 .ndo_get_stats = el3_get_stats,
504 .ndo_set_rx_mode = set_multicast_list,
505 .ndo_tx_timeout = el3_tx_timeout,
506 .ndo_set_mac_address = eth_mac_addr,
507 .ndo_validate_addr = eth_validate_addr,
508 #ifdef CONFIG_NET_POLL_CONTROLLER
509 .ndo_poll_controller = el3_poll_controller,
513 static int el3_common_init(struct net_device *dev)
515 struct el3_private *lp = netdev_priv(dev);
517 static const char * const if_names[] = {
518 "10baseT", "AUI", "undefined", "BNC"
521 spin_lock_init(&lp->lock);
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);
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 = ðtool_ops;
535 err = register_netdev(dev);
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);
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);
551 static void el3_common_remove (struct net_device *dev)
553 unregister_netdev (dev);
554 release_region(dev->base_addr, EL3_IO_EXTENT);
559 static int el3_eisa_probe(struct device *device)
562 int ioaddr, irq, if_port;
564 struct net_device *dev = NULL;
565 struct eisa_device *edev;
568 /* Yeepee, The driver framework is calling us ! */
569 edev = to_eisa_device (device);
570 ioaddr = edev->base_addr;
572 if (!request_region(ioaddr, EL3_IO_EXTENT, "3c579-eisa"))
575 /* Change the register set to the configuration window 0. */
576 outw(SelectWindow | 0, ioaddr + 0xC80 + EL3_CMD);
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));
583 /* Restore the "Product ID" to the EEPROM read register. */
584 read_eeprom(ioaddr, 3);
586 dev = alloc_etherdev(sizeof (struct el3_private));
588 release_region(ioaddr, EL3_IO_EXTENT);
592 SET_NETDEV_DEV(dev, device);
593 netdev_boot_setup_check(dev);
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);
600 eisa_set_drvdata (edev, NULL);
605 el3_devs[el3_cards++] = dev;
610 /* This remove works for all device types.
612 * The net dev must be stored in the driver data field */
613 static int el3_device_remove(struct device *device)
615 struct net_device *dev;
617 dev = dev_get_drvdata(device);
619 el3_common_remove (dev);
623 /* Read a word from the EEPROM using the regular EEPROM access register.
624 Assume that we are in register window zero.
626 static ushort read_eeprom(int ioaddr, int index)
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 */
632 return inw(ioaddr + 12);
635 /* Read a word from the EEPROM when in the ISA ID probe state. */
636 static ushort id_read_eeprom(int index)
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);
644 /* Pause for at least 162 us. for the read to take place. */
645 /* Some chips seem to require much longer */
648 for (bit = 15; bit >= 0; bit--)
649 word = (word << 1) + (inb(id_port) & 0x01);
652 pr_debug(" 3c509 EEPROM word %d %#4.4x.\n", index, word);
659 el3_open(struct net_device *dev)
661 int ioaddr = dev->base_addr;
664 outw(TxReset, ioaddr + EL3_CMD);
665 outw(RxReset, ioaddr + EL3_CMD);
666 outw(SetStatusEnb | 0x00, ioaddr + EL3_CMD);
668 i = request_irq(dev->irq, el3_interrupt, 0, dev->name, dev);
674 pr_debug("%s: Opening, IRQ %d status@%x %4.4x.\n", dev->name,
675 dev->irq, ioaddr + EL3_STATUS, inw(ioaddr + EL3_STATUS));
680 pr_debug("%s: Opened 3c509 IRQ %d status %4.4x.\n",
681 dev->name, dev->irq, inw(ioaddr + EL3_STATUS));
687 el3_tx_timeout (struct net_device *dev, unsigned int txqueue)
689 int ioaddr = dev->base_addr;
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);
705 el3_start_xmit(struct sk_buff *skb, struct net_device *dev)
707 struct el3_private *lp = netdev_priv(dev);
708 int ioaddr = dev->base_addr;
711 netif_stop_queue (dev);
713 dev->stats.tx_bytes += skb->len;
716 pr_debug("%s: el3_start_xmit(length = %u) called, status %4.4x.\n",
717 dev->name, skb->len, inw(ioaddr + EL3_STATUS));
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)
726 * Using disable_irq stops us crapping on other
727 * time sensitive devices.
730 spin_lock_irqsave(&lp->lock, flags);
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);
738 if (inw(ioaddr + TX_FREE) > 1536)
739 netif_start_queue(dev);
741 /* Interrupt us when the FIFO has room for max-sized packet. */
742 outw(SetTxThreshold + 1536, ioaddr + EL3_CMD);
744 spin_unlock_irqrestore(&lp->lock, flags);
746 dev_consume_skb_any (skb);
748 /* Clear the Tx status stack. */
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. */
763 /* The EL3 interrupt handler. */
765 el3_interrupt(int irq, void *dev_id)
767 struct net_device *dev = dev_id;
768 struct el3_private *lp;
770 int i = max_interrupt_work;
772 lp = netdev_priv(dev);
773 spin_lock(&lp->lock);
775 ioaddr = dev->base_addr;
778 status = inw(ioaddr + EL3_STATUS);
779 pr_debug("%s: interrupt, status %4.4x.\n", dev->name, status);
782 while ((status = inw(ioaddr + EL3_STATUS)) &
783 (IntLatch | RxComplete | StatsFull)) {
785 if (status & RxComplete)
788 if (status & TxAvailable) {
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);
795 if (status & (AdapterFailure | RxEarly | StatsFull | TxComplete)) {
796 /* Handle all uncommon interrupts. */
797 if (status & StatsFull) /* Empty statistics. */
799 if (status & RxEarly) { /* Rx early is unused. */
801 outw(AckIntr | RxEarly, ioaddr + EL3_CMD);
803 if (status & TxComplete) { /* Really Tx error. */
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. */
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),
822 outw(RxEnable, ioaddr + EL3_CMD); /* Re-enable the receiver. */
823 outw(AckIntr | AdapterFailure, ioaddr + EL3_CMD);
828 pr_err("%s: Infinite loop in interrupt, status %4.4x.\n",
830 /* Clear all interrupts. */
831 outw(AckIntr | 0xFF, ioaddr + EL3_CMD);
834 /* Acknowledge the IRQ. */
835 outw(AckIntr | IntReq | IntLatch, ioaddr + EL3_CMD); /* Ack IRQ */
839 pr_debug("%s: exiting interrupt, status %4.4x.\n", dev->name,
840 inw(ioaddr + EL3_STATUS));
842 spin_unlock(&lp->lock);
847 #ifdef CONFIG_NET_POLL_CONTROLLER
849 * Polling receive - used by netconsole and other diagnostic tools
850 * to allow network i/o with interrupts disabled.
852 static void el3_poll_controller(struct net_device *dev)
854 disable_irq(dev->irq);
855 el3_interrupt(dev->irq, dev);
856 enable_irq(dev->irq);
860 static struct net_device_stats *
861 el3_get_stats(struct net_device *dev)
863 struct el3_private *lp = netdev_priv(dev);
867 * This is fast enough not to bother with disable IRQ
871 spin_lock_irqsave(&lp->lock, flags);
873 spin_unlock_irqrestore(&lp->lock, flags);
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.
882 static void update_stats(struct net_device *dev)
884 int ioaddr = dev->base_addr;
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. */
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. */
904 /* Back to window 1, and turn statistics back on. */
906 outw(StatsEnable, ioaddr + EL3_CMD);
910 el3_rx(struct net_device *dev)
912 int ioaddr = dev->base_addr;
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;
922 outw(RxDiscard, ioaddr + EL3_CMD);
923 dev->stats.rx_errors++;
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;
933 short pkt_len = rx_status & 0x7ff;
936 skb = netdev_alloc_skb(dev, pkt_len + 5);
938 pr_debug("Receiving packet size %d status %4.4x.\n",
941 skb_reserve(skb, 2); /* Align IP on 16 byte */
943 /* 'skb->data' points to the start of sk_buff data area. */
944 insl(ioaddr + RX_FIFO, skb_put(skb,pkt_len),
947 outw(RxDiscard, ioaddr + EL3_CMD); /* Pop top Rx packet. */
948 skb->protocol = eth_type_trans(skb,dev);
950 dev->stats.rx_bytes += pkt_len;
951 dev->stats.rx_packets++;
954 outw(RxDiscard, ioaddr + EL3_CMD);
955 dev->stats.rx_dropped++;
957 pr_debug("%s: Couldn't allocate a sk_buff of size %d.\n",
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) );
970 * Set or clear the multicast filter for this adaptor.
973 set_multicast_list(struct net_device *dev)
976 struct el3_private *lp = netdev_priv(dev);
977 int ioaddr = dev->base_addr;
978 int mc_count = netdev_mc_count(dev);
982 if (old != mc_count) {
984 pr_debug("%s: Setting Rx mode to %d addresses.\n",
985 dev->name, mc_count);
988 spin_lock_irqsave(&lp->lock, flags);
989 if (dev->flags&IFF_PROMISC) {
990 outw(SetRxFilter | RxStation | RxMulticast | RxBroadcast | RxProm,
993 else if (mc_count || (dev->flags&IFF_ALLMULTI)) {
994 outw(SetRxFilter | RxStation | RxMulticast | RxBroadcast, ioaddr + EL3_CMD);
997 outw(SetRxFilter | RxStation | RxBroadcast, ioaddr + EL3_CMD);
998 spin_unlock_irqrestore(&lp->lock, flags);
1002 el3_close(struct net_device *dev)
1004 int ioaddr = dev->base_addr;
1005 struct el3_private *lp = netdev_priv(dev);
1008 pr_debug("%s: Shutting down ethercard.\n", dev->name);
1012 free_irq(dev->irq, dev);
1013 /* Switching back to window 0 disables the IRQ. */
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);
1026 el3_link_ok(struct net_device *dev)
1028 int ioaddr = dev->base_addr;
1032 tmp = inw(ioaddr + WN4_MEDIA);
1034 return tmp & (1<<11);
1038 el3_netdev_get_ecmd(struct net_device *dev, struct ethtool_link_ksettings *cmd)
1041 int ioaddr = dev->base_addr;
1045 /* obtain current transceiver via WN4_MEDIA? */
1046 tmp = inw(ioaddr + WN0_ADDR_CONF);
1047 switch (tmp >> 14) {
1049 cmd->base.port = PORT_TP;
1052 cmd->base.port = PORT_AUI;
1055 cmd->base.port = PORT_BNC;
1061 cmd->base.duplex = DUPLEX_HALF;
1063 tmp = inw(ioaddr + WN0_CONF_CTRL);
1065 supported |= SUPPORTED_AUI;
1067 supported |= SUPPORTED_BNC;
1069 supported |= SUPPORTED_TP | SUPPORTED_10baseT_Half |
1070 SUPPORTED_10baseT_Full; /* hmm... */
1072 tmp = inw(ioaddr + WN4_NETDIAG);
1073 if (tmp & FD_ENABLE)
1074 cmd->base.duplex = DUPLEX_FULL;
1077 ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.supported,
1079 cmd->base.speed = SPEED_10;
1084 el3_netdev_set_ecmd(struct net_device *dev,
1085 const struct ethtool_link_ksettings *cmd)
1088 int ioaddr = dev->base_addr;
1090 if (cmd->base.speed != SPEED_10)
1092 if ((cmd->base.duplex != DUPLEX_HALF) &&
1093 (cmd->base.duplex != DUPLEX_FULL))
1096 /* change XCVR type */
1098 tmp = inw(ioaddr + WN0_ADDR_CONF);
1099 switch (cmd->base.port) {
1116 outw(tmp, ioaddr + WN0_ADDR_CONF);
1117 if (dev->if_port == 3) {
1118 /* fire up the DC-DC convertor if BNC gets enabled */
1119 tmp = inw(ioaddr + WN0_ADDR_CONF);
1120 if (tmp & (3 << 14)) {
1121 outw(StartCoax, ioaddr + EL3_CMD);
1128 tmp = inw(ioaddr + WN4_NETDIAG);
1129 if (cmd->base.duplex == DUPLEX_FULL)
1133 outw(tmp, ioaddr + WN4_NETDIAG);
1139 static void el3_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
1141 strlcpy(info->driver, DRV_NAME, sizeof(info->driver));
1144 static int el3_get_link_ksettings(struct net_device *dev,
1145 struct ethtool_link_ksettings *cmd)
1147 struct el3_private *lp = netdev_priv(dev);
1149 spin_lock_irq(&lp->lock);
1150 el3_netdev_get_ecmd(dev, cmd);
1151 spin_unlock_irq(&lp->lock);
1155 static int el3_set_link_ksettings(struct net_device *dev,
1156 const struct ethtool_link_ksettings *cmd)
1158 struct el3_private *lp = netdev_priv(dev);
1161 spin_lock_irq(&lp->lock);
1162 ret = el3_netdev_set_ecmd(dev, cmd);
1163 spin_unlock_irq(&lp->lock);
1167 static u32 el3_get_link(struct net_device *dev)
1169 struct el3_private *lp = netdev_priv(dev);
1172 spin_lock_irq(&lp->lock);
1173 ret = el3_link_ok(dev);
1174 spin_unlock_irq(&lp->lock);
1178 static u32 el3_get_msglevel(struct net_device *dev)
1183 static void el3_set_msglevel(struct net_device *dev, u32 v)
1188 static const struct ethtool_ops ethtool_ops = {
1189 .get_drvinfo = el3_get_drvinfo,
1190 .get_link = el3_get_link,
1191 .get_msglevel = el3_get_msglevel,
1192 .set_msglevel = el3_set_msglevel,
1193 .get_link_ksettings = el3_get_link_ksettings,
1194 .set_link_ksettings = el3_set_link_ksettings,
1198 el3_down(struct net_device *dev)
1200 int ioaddr = dev->base_addr;
1202 netif_stop_queue(dev);
1204 /* Turn off statistics ASAP. We update lp->stats below. */
1205 outw(StatsDisable, ioaddr + EL3_CMD);
1207 /* Disable the receiver and transmitter. */
1208 outw(RxDisable, ioaddr + EL3_CMD);
1209 outw(TxDisable, ioaddr + EL3_CMD);
1211 if (dev->if_port == 3)
1212 /* Turn off thinnet power. Green! */
1213 outw(StopCoax, ioaddr + EL3_CMD);
1214 else if (dev->if_port == 0) {
1215 /* Disable link beat and jabber, if_port may change here next open(). */
1217 outw(inw(ioaddr + WN4_MEDIA) & ~MEDIA_TP, ioaddr + WN4_MEDIA);
1220 outw(SetIntrEnb | 0x0000, ioaddr + EL3_CMD);
1226 el3_up(struct net_device *dev)
1228 int i, sw_info, net_diag;
1229 int ioaddr = dev->base_addr;
1231 /* Activating the board required and does no harm otherwise */
1232 outw(0x0001, ioaddr + 4);
1234 /* Set the IRQ line. */
1235 outw((dev->irq << 12) | 0x0f00, ioaddr + WN0_IRQ);
1237 /* Set the station address in window 2 each time opened. */
1240 for (i = 0; i < 6; i++)
1241 outb(dev->dev_addr[i], ioaddr + i);
1243 if ((dev->if_port & 0x03) == 3) /* BNC interface */
1244 /* Start the thinnet transceiver. We should really wait 50ms...*/
1245 outw(StartCoax, ioaddr + EL3_CMD);
1246 else if ((dev->if_port & 0x03) == 0) { /* 10baseT interface */
1247 /* Combine secondary sw_info word (the adapter level) and primary
1248 sw_info word (duplex setting plus other useless bits) */
1250 sw_info = (read_eeprom(ioaddr, 0x14) & 0x400f) |
1251 (read_eeprom(ioaddr, 0x0d) & 0xBff0);
1254 net_diag = inw(ioaddr + WN4_NETDIAG);
1255 net_diag = (net_diag | FD_ENABLE); /* temporarily assume full-duplex will be set */
1256 pr_info("%s: ", dev->name);
1257 switch (dev->if_port & 0x0c) {
1259 /* force full-duplex mode if 3c5x9b */
1260 if (sw_info & 0x000f) {
1261 pr_cont("Forcing 3c5x9b full-duplex mode");
1266 /* set full-duplex mode based on eeprom config setting */
1267 if ((sw_info & 0x000f) && (sw_info & 0x8000)) {
1268 pr_cont("Setting 3c5x9b full-duplex mode (from EEPROM configuration bit)");
1273 /* xcvr=(0 || 4) OR user has an old 3c5x9 non "B" model */
1274 pr_cont("Setting 3c5x9/3c5x9B half-duplex mode");
1275 net_diag = (net_diag & ~FD_ENABLE); /* disable full duplex */
1278 outw(net_diag, ioaddr + WN4_NETDIAG);
1279 pr_cont(" if_port: %d, sw_info: %4.4x\n", dev->if_port, sw_info);
1281 pr_debug("%s: 3c5x9 net diag word is now: %4.4x.\n", dev->name, net_diag);
1282 /* Enable link beat and jabber check. */
1283 outw(inw(ioaddr + WN4_MEDIA) | MEDIA_TP, ioaddr + WN4_MEDIA);
1286 /* Switch to the stats window, and clear all stats by reading. */
1287 outw(StatsDisable, ioaddr + EL3_CMD);
1289 for (i = 0; i < 9; i++)
1294 /* Switch to register set 1 for normal use. */
1297 /* Accept b-case and phys addr only. */
1298 outw(SetRxFilter | RxStation | RxBroadcast, ioaddr + EL3_CMD);
1299 outw(StatsEnable, ioaddr + EL3_CMD); /* Turn on statistics. */
1301 outw(RxEnable, ioaddr + EL3_CMD); /* Enable the receiver. */
1302 outw(TxEnable, ioaddr + EL3_CMD); /* Enable transmitter. */
1303 /* Allow status bits to be seen. */
1304 outw(SetStatusEnb | 0xff, ioaddr + EL3_CMD);
1305 /* Ack all pending events, and set active indicator mask. */
1306 outw(AckIntr | IntLatch | TxAvailable | RxEarly | IntReq,
1308 outw(SetIntrEnb | IntLatch|TxAvailable|TxComplete|RxComplete|StatsFull,
1311 netif_start_queue(dev);
1314 /* Power Management support functions */
1318 el3_suspend(struct device *pdev, pm_message_t state)
1320 unsigned long flags;
1321 struct net_device *dev;
1322 struct el3_private *lp;
1325 dev = dev_get_drvdata(pdev);
1326 lp = netdev_priv(dev);
1327 ioaddr = dev->base_addr;
1329 spin_lock_irqsave(&lp->lock, flags);
1331 if (netif_running(dev))
1332 netif_device_detach(dev);
1335 outw(PowerDown, ioaddr + EL3_CMD);
1337 spin_unlock_irqrestore(&lp->lock, flags);
1342 el3_resume(struct device *pdev)
1344 unsigned long flags;
1345 struct net_device *dev;
1346 struct el3_private *lp;
1349 dev = dev_get_drvdata(pdev);
1350 lp = netdev_priv(dev);
1351 ioaddr = dev->base_addr;
1353 spin_lock_irqsave(&lp->lock, flags);
1355 outw(PowerUp, ioaddr + EL3_CMD);
1359 if (netif_running(dev))
1360 netif_device_attach(dev);
1362 spin_unlock_irqrestore(&lp->lock, flags);
1366 #endif /* CONFIG_PM */
1368 module_param(debug,int, 0);
1369 module_param_hw_array(irq, int, irq, NULL, 0);
1370 module_param(max_interrupt_work, int, 0);
1371 MODULE_PARM_DESC(debug, "debug level (0-6)");
1372 MODULE_PARM_DESC(irq, "IRQ number(s) (assigned)");
1373 MODULE_PARM_DESC(max_interrupt_work, "maximum events handled per interrupt");
1375 module_param(nopnp, int, 0);
1376 MODULE_PARM_DESC(nopnp, "disable ISA PnP support (0-1)");
1377 #endif /* CONFIG_PNP */
1378 MODULE_DESCRIPTION("3Com Etherlink III (3c509, 3c509B, 3c529, 3c579) ethernet driver");
1379 MODULE_LICENSE("GPL");
1381 static int __init el3_init_module(void)
1390 ret = pnp_register_driver(&el3_pnp_driver);
1395 /* Select an open I/O location at 0x1*0 to do ISA contention select. */
1396 /* Start with 0x110 to avoid some sound cards.*/
1397 for (id_port = 0x110 ; id_port < 0x200; id_port += 0x10) {
1398 if (!request_region(id_port, 1, "3c509-control"))
1400 outb(0x00, id_port);
1401 outb(0xff, id_port);
1402 if (inb(id_port) & 0x01)
1405 release_region(id_port, 1);
1407 if (id_port >= 0x200) {
1409 pr_err("No I/O port available for 3c509 activation.\n");
1411 ret = isa_register_driver(&el3_isa_driver, EL3_MAX_CARDS);
1416 ret = eisa_driver_register(&el3_eisa_driver);
1418 eisa_registered = 1;
1428 if (eisa_registered)
1434 static void __exit el3_cleanup_module(void)
1438 pnp_unregister_driver(&el3_pnp_driver);
1441 isa_unregister_driver(&el3_isa_driver);
1443 release_region(id_port, 1);
1445 if (eisa_registered)
1446 eisa_driver_unregister(&el3_eisa_driver);
1450 module_init (el3_init_module);
1451 module_exit (el3_cleanup_module);