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 <andrewm@uow.edu.au>
 
  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.
 
  60 #define DRV_NAME        "3c509"
 
  61 #define DRV_VERSION     "1.19b"
 
  62 #define DRV_RELDATE     "08Nov2002"
 
  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)
 
  68 /* Maximum events (Rx packets, etc.) to handle at each interrupt. */
 
  69 static int max_interrupt_work = 10;
 
  71 #include <linux/module.h>
 
  73 #include <linux/mca.h>
 
  75 #include <linux/isapnp.h>
 
  76 #include <linux/string.h>
 
  77 #include <linux/interrupt.h>
 
  78 #include <linux/errno.h>
 
  80 #include <linux/slab.h>
 
  81 #include <linux/ioport.h>
 
  82 #include <linux/init.h>
 
  83 #include <linux/netdevice.h>
 
  84 #include <linux/etherdevice.h>
 
  86 #include <linux/pm_legacy.h>
 
  87 #include <linux/skbuff.h>
 
  88 #include <linux/delay.h>        /* for udelay() */
 
  89 #include <linux/spinlock.h>
 
  90 #include <linux/ethtool.h>
 
  91 #include <linux/device.h>
 
  92 #include <linux/eisa.h>
 
  93 #include <linux/bitops.h>
 
  95 #include <asm/uaccess.h>
 
  99 static char versionA[] __initdata = DRV_NAME ".c:" DRV_VERSION " " DRV_RELDATE " becker@scyld.com\n";
 
 100 static char versionB[] __initdata = "http://www.scyld.com/network/3c509.html\n";
 
 102 #if defined(CONFIG_PM) && (defined(CONFIG_MCA) || defined(CONFIG_EISA))
 
 107 static int el3_debug = EL3_DEBUG;
 
 109 static int el3_debug = 2;
 
 112 /* Used to do a global count of all the cards in the system.  Must be
 
 113  * a global variable so that the mca/eisa probe routines can increment
 
 115 static int el3_cards = 0;
 
 117 /* To minimize the size of the driver source I only define operating
 
 118    constants if they are used several times.  You'll need the manual
 
 119    anyway if you want to understand driver details. */
 
 120 /* Offsets from base I/O address. */
 
 121 #define EL3_DATA 0x00
 
 123 #define EL3_STATUS 0x0e
 
 124 #define  EEPROM_READ 0x80
 
 126 #define EL3_IO_EXTENT   16
 
 128 #define EL3WINDOW(win_num) outw(SelectWindow + (win_num), ioaddr + EL3_CMD)
 
 131 /* The top five bits written to EL3_CMD are a command, the lower
 
 132    11 bits are the parameter, if applicable. */
 
 134         TotalReset = 0<<11, SelectWindow = 1<<11, StartCoax = 2<<11,
 
 135         RxDisable = 3<<11, RxEnable = 4<<11, RxReset = 5<<11, RxDiscard = 8<<11,
 
 136         TxEnable = 9<<11, TxDisable = 10<<11, TxReset = 11<<11,
 
 137         FakeIntr = 12<<11, AckIntr = 13<<11, SetIntrEnb = 14<<11,
 
 138         SetStatusEnb = 15<<11, SetRxFilter = 16<<11, SetRxThreshold = 17<<11,
 
 139         SetTxThreshold = 18<<11, SetTxStart = 19<<11, StatsEnable = 21<<11,
 
 140         StatsDisable = 22<<11, StopCoax = 23<<11, PowerUp = 27<<11,
 
 141         PowerDown = 28<<11, PowerAuto = 29<<11};
 
 144         IntLatch = 0x0001, AdapterFailure = 0x0002, TxComplete = 0x0004,
 
 145         TxAvailable = 0x0008, RxComplete = 0x0010, RxEarly = 0x0020,
 
 146         IntReq = 0x0040, StatsFull = 0x0080, CmdBusy = 0x1000, };
 
 148 /* The SetRxFilter command accepts the following classes: */
 
 150         RxStation = 1, RxMulticast = 2, RxBroadcast = 4, RxProm = 8 };
 
 152 /* Register window 1 offsets, the window used in normal operation. */
 
 155 #define RX_STATUS       0x08
 
 156 #define TX_STATUS       0x0B
 
 157 #define TX_FREE         0x0C            /* Remaining free bytes in Tx buffer. */
 
 159 #define WN0_CONF_CTRL   0x04            /* Window 0: Configuration control register */
 
 160 #define WN0_ADDR_CONF   0x06            /* Window 0: Address configuration register */
 
 161 #define WN0_IRQ         0x08            /* Window 0: Set IRQ line in bits 12-15. */
 
 162 #define WN4_MEDIA       0x0A            /* Window 4: Various transcvr/media bits. */
 
 163 #define MEDIA_TP        0x00C0          /* Enable link beat and jabber for 10baseT. */
 
 164 #define WN4_NETDIAG     0x06            /* Window 4: Net diagnostic */
 
 165 #define FD_ENABLE       0x8000          /* Enable full-duplex ("external loopback") */
 
 168  * Must be a power of two (we use a binary and in the
 
 171 #define SKB_QUEUE_SIZE  64
 
 174         struct net_device_stats stats;
 
 175         struct net_device *next_dev;
 
 179         struct sk_buff *queue[SKB_QUEUE_SIZE];
 
 184         } type;                                         /* type of device */
 
 187 static int id_port __initdata = 0x110;  /* Start with 0x110 to avoid new sound cards.*/
 
 188 static struct net_device *el3_root_dev;
 
 190 static ushort id_read_eeprom(int index);
 
 191 static ushort read_eeprom(int ioaddr, int index);
 
 192 static int el3_open(struct net_device *dev);
 
 193 static int el3_start_xmit(struct sk_buff *skb, struct net_device *dev);
 
 194 static irqreturn_t el3_interrupt(int irq, void *dev_id);
 
 195 static void update_stats(struct net_device *dev);
 
 196 static struct net_device_stats *el3_get_stats(struct net_device *dev);
 
 197 static int el3_rx(struct net_device *dev);
 
 198 static int el3_close(struct net_device *dev);
 
 199 static void set_multicast_list(struct net_device *dev);
 
 200 static void el3_tx_timeout (struct net_device *dev);
 
 201 static void el3_down(struct net_device *dev);
 
 202 static void el3_up(struct net_device *dev);
 
 203 static const struct ethtool_ops ethtool_ops;
 
 205 static int el3_suspend(struct device *, pm_message_t);
 
 206 static int el3_resume(struct device *);
 
 208 #define el3_suspend NULL
 
 209 #define el3_resume NULL
 
 213 /* generic device remove for all device types */
 
 214 #if defined(CONFIG_EISA) || defined(CONFIG_MCA)
 
 215 static int el3_device_remove (struct device *device);
 
 217 #ifdef CONFIG_NET_POLL_CONTROLLER
 
 218 static void el3_poll_controller(struct net_device *dev);
 
 222 static struct eisa_device_id el3_eisa_ids[] = {
 
 228 MODULE_DEVICE_TABLE(eisa, el3_eisa_ids);
 
 230 static int el3_eisa_probe (struct device *device);
 
 232 static struct eisa_driver el3_eisa_driver = {
 
 233                 .id_table = el3_eisa_ids,
 
 236                                 .probe   = el3_eisa_probe,
 
 237                                 .remove  = __devexit_p (el3_device_remove),
 
 238                                 .suspend = el3_suspend,
 
 239                                 .resume  = el3_resume,
 
 245 static int el3_mca_probe(struct device *dev);
 
 247 static short el3_mca_adapter_ids[] __initdata = {
 
 256 static char *el3_mca_adapter_names[] __initdata = {
 
 257                 "3Com 3c529 EtherLink III (10base2)",
 
 258                 "3Com 3c529 EtherLink III (10baseT)",
 
 259                 "3Com 3c529 EtherLink III (test mode)",
 
 260                 "3Com 3c529 EtherLink III (TP or coax)",
 
 261                 "3Com 3c529 EtherLink III (TP)",
 
 265 static struct mca_driver el3_mca_driver = {
 
 266                 .id_table = el3_mca_adapter_ids,
 
 269                                 .bus = &mca_bus_type,
 
 270                                 .probe = el3_mca_probe,
 
 271                                 .remove = __devexit_p(el3_device_remove),
 
 272                                 .suspend = el3_suspend,
 
 273                                 .resume  = el3_resume,
 
 276 #endif /* CONFIG_MCA */
 
 278 #if defined(__ISAPNP__)
 
 279 static struct isapnp_device_id el3_isapnp_adapters[] __initdata = {
 
 280         {       ISAPNP_ANY_ID, ISAPNP_ANY_ID,
 
 281                 ISAPNP_VENDOR('T', 'C', 'M'), ISAPNP_FUNCTION(0x5090),
 
 282                 (long) "3Com Etherlink III (TP)" },
 
 283         {       ISAPNP_ANY_ID, ISAPNP_ANY_ID,
 
 284                 ISAPNP_VENDOR('T', 'C', 'M'), ISAPNP_FUNCTION(0x5091),
 
 285                 (long) "3Com Etherlink III" },
 
 286         {       ISAPNP_ANY_ID, ISAPNP_ANY_ID,
 
 287                 ISAPNP_VENDOR('T', 'C', 'M'), ISAPNP_FUNCTION(0x5094),
 
 288                 (long) "3Com Etherlink III (combo)" },
 
 289         {       ISAPNP_ANY_ID, ISAPNP_ANY_ID,
 
 290                 ISAPNP_VENDOR('T', 'C', 'M'), ISAPNP_FUNCTION(0x5095),
 
 291                 (long) "3Com Etherlink III (TPO)" },
 
 292         {       ISAPNP_ANY_ID, ISAPNP_ANY_ID,
 
 293                 ISAPNP_VENDOR('T', 'C', 'M'), ISAPNP_FUNCTION(0x5098),
 
 294                 (long) "3Com Etherlink III (TPC)" },
 
 295         {       ISAPNP_ANY_ID, ISAPNP_ANY_ID,
 
 296                 ISAPNP_VENDOR('P', 'N', 'P'), ISAPNP_FUNCTION(0x80f7),
 
 297                 (long) "3Com Etherlink III compatible" },
 
 298         {       ISAPNP_ANY_ID, ISAPNP_ANY_ID,
 
 299                 ISAPNP_VENDOR('P', 'N', 'P'), ISAPNP_FUNCTION(0x80f8),
 
 300                 (long) "3Com Etherlink III compatible" },
 
 301         { }     /* terminate list */
 
 304 static u16 el3_isapnp_phys_addr[8][3];
 
 306 #endif /* __ISAPNP__ */
 
 308 /* With the driver model introduction for EISA devices, both init
 
 309  * and cleanup have been split :
 
 310  * - EISA devices probe/remove starts in el3_eisa_probe/el3_device_remove
 
 311  * - MCA/ISA still use el3_probe
 
 313  * Both call el3_common_init/el3_common_remove. */
 
 315 static int __init el3_common_init(struct net_device *dev)
 
 317         struct el3_private *lp = netdev_priv(dev);
 
 321         spin_lock_init(&lp->lock);
 
 323         if (dev->mem_start & 0x05) { /* xcvr codes 1/3/4/12 */
 
 324                 dev->if_port = (dev->mem_start & 0x0f);
 
 325         } else { /* xcvr codes 0/8 */
 
 326                 /* use eeprom value, but save user's full-duplex selection */
 
 327                 dev->if_port |= (dev->mem_start & 0x08);
 
 330         /* The EL3-specific entries in the device structure. */
 
 331         dev->open = &el3_open;
 
 332         dev->hard_start_xmit = &el3_start_xmit;
 
 333         dev->stop = &el3_close;
 
 334         dev->get_stats = &el3_get_stats;
 
 335         dev->set_multicast_list = &set_multicast_list;
 
 336         dev->tx_timeout = el3_tx_timeout;
 
 337         dev->watchdog_timeo = TX_TIMEOUT;
 
 338 #ifdef CONFIG_NET_POLL_CONTROLLER
 
 339         dev->poll_controller = el3_poll_controller;
 
 341         SET_ETHTOOL_OPS(dev, ðtool_ops);
 
 343         err = register_netdev(dev);
 
 345                 printk(KERN_ERR "Failed to register 3c5x9 at %#3.3lx, IRQ %d.\n",
 
 346                         dev->base_addr, dev->irq);
 
 347                 release_region(dev->base_addr, EL3_IO_EXTENT);
 
 352                 const char *if_names[] = {"10baseT", "AUI", "undefined", "BNC"};
 
 353                 printk("%s: 3c5x9 found at %#3.3lx, %s port, address ",
 
 354                         dev->name, dev->base_addr,
 
 355                         if_names[(dev->if_port & 0x03)]);
 
 358         /* Read in the station address. */
 
 359         for (i = 0; i < 6; i++)
 
 360                 printk(" %2.2x", dev->dev_addr[i]);
 
 361         printk(", IRQ %d.\n", dev->irq);
 
 364                 printk(KERN_INFO "%s" KERN_INFO "%s", versionA, versionB);
 
 369 static void el3_common_remove (struct net_device *dev)
 
 371         struct el3_private *lp = netdev_priv(dev);
 
 373         (void) lp;                              /* Keep gcc quiet... */
 
 374 #if defined(__ISAPNP__)
 
 375         if (lp->type == EL3_PNP)
 
 376                 pnp_device_detach(to_pnp_dev(lp->dev));
 
 379         unregister_netdev (dev);
 
 380         release_region(dev->base_addr, EL3_IO_EXTENT);
 
 384 static int __init el3_probe(int card_idx)
 
 386         struct net_device *dev;
 
 387         struct el3_private *lp;
 
 388         short lrs_state = 0xff, i;
 
 389         int ioaddr, irq, if_port;
 
 391         static int current_tag;
 
 393 #if defined(__ISAPNP__)
 
 394         static int pnp_cards;
 
 395         struct pnp_dev *idev = NULL;
 
 400         for (i=0; el3_isapnp_adapters[i].vendor != 0; i++) {
 
 402                 while ((idev = pnp_find_dev(NULL,
 
 403                                             el3_isapnp_adapters[i].vendor,
 
 404                                             el3_isapnp_adapters[i].function,
 
 406                         if (pnp_device_attach(idev) < 0)
 
 408                         if (pnp_activate_dev(idev) < 0) {
 
 410                                 pnp_device_detach(idev);
 
 413                         if (!pnp_port_valid(idev, 0) || !pnp_irq_valid(idev, 0))
 
 415                         ioaddr = pnp_port_start(idev, 0);
 
 416                         if (!request_region(ioaddr, EL3_IO_EXTENT, "3c509 PnP")) {
 
 417                                 pnp_device_detach(idev);
 
 420                         irq = pnp_irq(idev, 0);
 
 422                                 printk ("ISAPnP reports %s at i/o 0x%x, irq %d\n",
 
 423                                         (char*) el3_isapnp_adapters[i].driver_data, ioaddr, irq);
 
 425                         for (j = 0; j < 3; j++)
 
 426                                 el3_isapnp_phys_addr[pnp_cards][j] =
 
 428                                                 htons(read_eeprom(ioaddr, j));
 
 429                         if_port = read_eeprom(ioaddr, 8) >> 14;
 
 430                         dev = alloc_etherdev(sizeof (struct el3_private));
 
 432                                         release_region(ioaddr, EL3_IO_EXTENT);
 
 433                                         pnp_device_detach(idev);
 
 437                         SET_MODULE_OWNER(dev);
 
 438                         SET_NETDEV_DEV(dev, &idev->dev);
 
 441                         netdev_boot_setup_check(dev);
 
 446 #endif /* __ISAPNP__ */
 
 448         /* Select an open I/O location at 0x1*0 to do contention select. */
 
 449         for ( ; id_port < 0x200; id_port += 0x10) {
 
 450                 if (!request_region(id_port, 1, "3c509"))
 
 454                 if (inb(id_port) & 0x01){
 
 455                         release_region(id_port, 1);
 
 458                         release_region(id_port, 1);
 
 460         if (id_port >= 0x200) {
 
 461                 /* Rare -- do we really need a warning? */
 
 462                 printk(" WARNING: No I/O port available for 3c509 activation.\n");
 
 466         /* Next check for all ISA bus boards by sending the ID sequence to the
 
 467            ID_PORT.  We find cards past the first by setting the 'current_tag'
 
 468            on cards as they are found.  Cards with their tag set will not
 
 469            respond to subsequent ID sequences. */
 
 473         for(i = 0; i < 255; i++) {
 
 474                 outb(lrs_state, id_port);
 
 476                 lrs_state = lrs_state & 0x100 ? lrs_state ^ 0xcf : lrs_state;
 
 479         /* For the first probe, clear all board's tag registers. */
 
 480         if (current_tag == 0)
 
 482         else                            /* Otherwise kill off already-found boards. */
 
 485         if (id_read_eeprom(7) != 0x6d50) {
 
 489         /* Read in EEPROM data, which does contention-select.
 
 490            Only the lowest address board will stay "on-line".
 
 491            3Com got the byte order backwards. */
 
 492         for (i = 0; i < 3; i++) {
 
 493                 phys_addr[i] = htons(id_read_eeprom(i));
 
 496 #if defined(__ISAPNP__)
 
 498                 /* The ISA PnP 3c509 cards respond to the ID sequence.
 
 499                    This check is needed in order not to register them twice. */
 
 500                 for (i = 0; i < pnp_cards; i++) {
 
 501                         if (phys_addr[0] == el3_isapnp_phys_addr[i][0] &&
 
 502                             phys_addr[1] == el3_isapnp_phys_addr[i][1] &&
 
 503                             phys_addr[2] == el3_isapnp_phys_addr[i][2])
 
 506                                         printk("3c509 with address %02x %02x %02x %02x %02x %02x was found by ISAPnP\n",
 
 507                                                 phys_addr[0] & 0xff, phys_addr[0] >> 8,
 
 508                                                 phys_addr[1] & 0xff, phys_addr[1] >> 8,
 
 509                                                 phys_addr[2] & 0xff, phys_addr[2] >> 8);
 
 510                                 /* Set the adaptor tag so that the next card can be found. */
 
 511                                 outb(0xd0 + ++current_tag, id_port);
 
 516 #endif /* __ISAPNP__ */
 
 519                 unsigned int iobase = id_read_eeprom(8);
 
 520                 if_port = iobase >> 14;
 
 521                 ioaddr = 0x200 + ((iobase & 0x1f) << 4);
 
 523         irq = id_read_eeprom(9) >> 12;
 
 525         dev = alloc_etherdev(sizeof (struct el3_private));
 
 529         SET_MODULE_OWNER(dev);
 
 531         netdev_boot_setup_check(dev);
 
 533         /* Set passed-in IRQ or I/O Addr. */
 
 534         if (dev->irq > 1  &&  dev->irq < 16)
 
 537         if (dev->base_addr) {
 
 538                 if (dev->mem_end == 0x3c509     /* Magic key */
 
 539                     && dev->base_addr >= 0x200  &&  dev->base_addr <= 0x3e0)
 
 540                         ioaddr = dev->base_addr & 0x3f0;
 
 541                 else if (dev->base_addr != ioaddr)
 
 545         if (!request_region(ioaddr, EL3_IO_EXTENT, "3c509")) {
 
 550         /* Set the adaptor tag so that the next card can be found. */
 
 551         outb(0xd0 + ++current_tag, id_port);
 
 553         /* Activate the adaptor at the EEPROM location. */
 
 554         outb((ioaddr >> 4) | 0xe0, id_port);
 
 557         if (inw(ioaddr) != 0x6d50)
 
 560         /* Free the interrupt so that some other card can use it. */
 
 561         outw(0x0f00, ioaddr + WN0_IRQ);
 
 563 #if defined(__ISAPNP__)
 
 564  found:                                                 /* PNP jumps here... */
 
 565 #endif /* __ISAPNP__ */
 
 567         memcpy(dev->dev_addr, phys_addr, sizeof(phys_addr));
 
 568         dev->base_addr = ioaddr;
 
 570         dev->if_port = if_port;
 
 571         lp = netdev_priv(dev);
 
 572 #if defined(__ISAPNP__)
 
 573         lp->dev = &idev->dev;
 
 575         err = el3_common_init(dev);
 
 581         lp->next_dev = el3_root_dev;
 
 586 #if defined(__ISAPNP__)
 
 588                 pnp_device_detach(idev);
 
 596 static int __init el3_mca_probe(struct device *device)
 
 598         /* Based on Erik Nygren's (nygren@mit.edu) 3c529 patch,
 
 599          * heavily modified by Chris Beauregard
 
 600          * (cpbeaure@csclub.uwaterloo.ca) to support standard MCA
 
 603          * redone for multi-card detection by ZP Gu (zpg@castle.net)
 
 604          * now works as a module */
 
 606         struct el3_private *lp;
 
 608         int ioaddr, irq, if_port;
 
 610         struct net_device *dev = NULL;
 
 612         struct mca_device *mdev = to_mca_device(device);
 
 613         int slot = mdev->slot;
 
 616         pos4 = mca_device_read_stored_pos(mdev, 4);
 
 617         pos5 = mca_device_read_stored_pos(mdev, 5);
 
 619         ioaddr = ((short)((pos4&0xfc)|0x02)) << 8;
 
 623         printk("3c529: found %s at slot %d\n",
 
 624                    el3_mca_adapter_names[mdev->index], slot + 1);
 
 627         strncpy(mdev->name, el3_mca_adapter_names[mdev->index],
 
 629         mca_device_set_claim(mdev, 1);
 
 631         if_port = pos4 & 0x03;
 
 633         irq = mca_device_transform_irq(mdev, irq);
 
 634         ioaddr = mca_device_transform_ioport(mdev, ioaddr);
 
 636                         printk("3c529: irq %d  ioaddr 0x%x  ifport %d\n", irq, ioaddr, if_port);
 
 639         for (i = 0; i < 3; i++) {
 
 640                         phys_addr[i] = htons(read_eeprom(ioaddr, i));
 
 643         dev = alloc_etherdev(sizeof (struct el3_private));
 
 645                         release_region(ioaddr, EL3_IO_EXTENT);
 
 649         SET_MODULE_OWNER(dev);
 
 650         netdev_boot_setup_check(dev);
 
 652         memcpy(dev->dev_addr, phys_addr, sizeof(phys_addr));
 
 653         dev->base_addr = ioaddr;
 
 655         dev->if_port = if_port;
 
 656         lp = netdev_priv(dev);
 
 659         device->driver_data = dev;
 
 660         err = el3_common_init(dev);
 
 663                 device->driver_data = NULL;
 
 672 #endif /* CONFIG_MCA */
 
 675 static int __init el3_eisa_probe (struct device *device)
 
 677         struct el3_private *lp;
 
 679         int ioaddr, irq, if_port;
 
 681         struct net_device *dev = NULL;
 
 682         struct eisa_device *edev;
 
 685         /* Yeepee, The driver framework is calling us ! */
 
 686         edev = to_eisa_device (device);
 
 687         ioaddr = edev->base_addr;
 
 689         if (!request_region(ioaddr, EL3_IO_EXTENT, "3c509"))
 
 692         /* Change the register set to the configuration window 0. */
 
 693         outw(SelectWindow | 0, ioaddr + 0xC80 + EL3_CMD);
 
 695         irq = inw(ioaddr + WN0_IRQ) >> 12;
 
 696         if_port = inw(ioaddr + 6)>>14;
 
 697         for (i = 0; i < 3; i++)
 
 698                 phys_addr[i] = htons(read_eeprom(ioaddr, i));
 
 700         /* Restore the "Product ID" to the EEPROM read register. */
 
 701         read_eeprom(ioaddr, 3);
 
 703         dev = alloc_etherdev(sizeof (struct el3_private));
 
 705                 release_region(ioaddr, EL3_IO_EXTENT);
 
 709         SET_MODULE_OWNER(dev);
 
 711         netdev_boot_setup_check(dev);
 
 713         memcpy(dev->dev_addr, phys_addr, sizeof(phys_addr));
 
 714         dev->base_addr = ioaddr;
 
 716         dev->if_port = if_port;
 
 717         lp = netdev_priv(dev);
 
 720         eisa_set_drvdata (edev, dev);
 
 721         err = el3_common_init(dev);
 
 724                 eisa_set_drvdata (edev, NULL);
 
 734 #if defined(CONFIG_EISA) || defined(CONFIG_MCA)
 
 735 /* This remove works for all device types.
 
 737  * The net dev must be stored in the driver_data field */
 
 738 static int __devexit el3_device_remove (struct device *device)
 
 740         struct net_device *dev;
 
 742         dev  = device->driver_data;
 
 744         el3_common_remove (dev);
 
 749 /* Read a word from the EEPROM using the regular EEPROM access register.
 
 750    Assume that we are in register window zero.
 
 752 static ushort read_eeprom(int ioaddr, int index)
 
 754         outw(EEPROM_READ + index, ioaddr + 10);
 
 755         /* Pause for at least 162 us. for the read to take place.
 
 756            Some chips seem to require much longer */
 
 758         return inw(ioaddr + 12);
 
 761 /* Read a word from the EEPROM when in the ISA ID probe state. */
 
 762 static ushort __init id_read_eeprom(int index)
 
 766         /* Issue read command, and pause for at least 162 us. for it to complete.
 
 767            Assume extra-fast 16Mhz bus. */
 
 768         outb(EEPROM_READ + index, id_port);
 
 770         /* Pause for at least 162 us. for the read to take place. */
 
 771         /* Some chips seem to require much longer */
 
 774         for (bit = 15; bit >= 0; bit--)
 
 775                 word = (word << 1) + (inb(id_port) & 0x01);
 
 778                 printk("  3c509 EEPROM word %d %#4.4x.\n", index, word);
 
 785 el3_open(struct net_device *dev)
 
 787         int ioaddr = dev->base_addr;
 
 790         outw(TxReset, ioaddr + EL3_CMD);
 
 791         outw(RxReset, ioaddr + EL3_CMD);
 
 792         outw(SetStatusEnb | 0x00, ioaddr + EL3_CMD);
 
 794         i = request_irq(dev->irq, &el3_interrupt, 0, dev->name, dev);
 
 800                 printk("%s: Opening, IRQ %d      status@%x %4.4x.\n", dev->name,
 
 801                            dev->irq, ioaddr + EL3_STATUS, inw(ioaddr + EL3_STATUS));
 
 806                 printk("%s: Opened 3c509  IRQ %d  status %4.4x.\n",
 
 807                            dev->name, dev->irq, inw(ioaddr + EL3_STATUS));
 
 813 el3_tx_timeout (struct net_device *dev)
 
 815         struct el3_private *lp = netdev_priv(dev);
 
 816         int ioaddr = dev->base_addr;
 
 818         /* Transmitter timeout, serious problems. */
 
 819         printk("%s: transmit timed out, Tx_status %2.2x status %4.4x "
 
 820                    "Tx FIFO room %d.\n",
 
 821                    dev->name, inb(ioaddr + TX_STATUS), inw(ioaddr + EL3_STATUS),
 
 822                    inw(ioaddr + TX_FREE));
 
 823         lp->stats.tx_errors++;
 
 824         dev->trans_start = jiffies;
 
 825         /* Issue TX_RESET and TX_START commands. */
 
 826         outw(TxReset, ioaddr + EL3_CMD);
 
 827         outw(TxEnable, ioaddr + EL3_CMD);
 
 828         netif_wake_queue(dev);
 
 833 el3_start_xmit(struct sk_buff *skb, struct net_device *dev)
 
 835         struct el3_private *lp = netdev_priv(dev);
 
 836         int ioaddr = dev->base_addr;
 
 839         netif_stop_queue (dev);
 
 841         lp->stats.tx_bytes += skb->len;
 
 844                 printk("%s: el3_start_xmit(length = %u) called, status %4.4x.\n",
 
 845                            dev->name, skb->len, inw(ioaddr + EL3_STATUS));
 
 848 #ifndef final_version
 
 849         {       /* Error-checking code, delete someday. */
 
 850                 ushort status = inw(ioaddr + EL3_STATUS);
 
 851                 if (status & 0x0001             /* IRQ line active, missed one. */
 
 852                         && inw(ioaddr + EL3_STATUS) & 1) {                      /* Make sure. */
 
 853                         printk("%s: Missed interrupt, status then %04x now %04x"
 
 854                                    "  Tx %2.2x Rx %4.4x.\n", dev->name, status,
 
 855                                    inw(ioaddr + EL3_STATUS), inb(ioaddr + TX_STATUS),
 
 856                                    inw(ioaddr + RX_STATUS));
 
 857                         /* Fake interrupt trigger by masking, acknowledge interrupts. */
 
 858                         outw(SetStatusEnb | 0x00, ioaddr + EL3_CMD);
 
 859                         outw(AckIntr | IntLatch | TxAvailable | RxEarly | IntReq,
 
 861                         outw(SetStatusEnb | 0xff, ioaddr + EL3_CMD);
 
 867          *      We lock the driver against other processors. Note
 
 868          *      we don't need to lock versus the IRQ as we suspended
 
 869          *      that. This means that we lose the ability to take
 
 870          *      an RX during a TX upload. That sucks a bit with SMP
 
 871          *      on an original 3c509 (2K buffer)
 
 873          *      Using disable_irq stops us crapping on other
 
 874          *      time sensitive devices.
 
 877         spin_lock_irqsave(&lp->lock, flags);
 
 879         /* Put out the doubleword header... */
 
 880         outw(skb->len, ioaddr + TX_FIFO);
 
 881         outw(0x00, ioaddr + TX_FIFO);
 
 882         /* ... and the packet rounded to a doubleword. */
 
 883         outsl(ioaddr + TX_FIFO, skb->data, (skb->len + 3) >> 2);
 
 885         dev->trans_start = jiffies;
 
 886         if (inw(ioaddr + TX_FREE) > 1536)
 
 887                 netif_start_queue(dev);
 
 889                 /* Interrupt us when the FIFO has room for max-sized packet. */
 
 890                 outw(SetTxThreshold + 1536, ioaddr + EL3_CMD);
 
 892         spin_unlock_irqrestore(&lp->lock, flags);
 
 896         /* Clear the Tx status stack. */
 
 901                 while (--i > 0  &&      (tx_status = inb(ioaddr + TX_STATUS)) > 0) {
 
 902                         if (tx_status & 0x38) lp->stats.tx_aborted_errors++;
 
 903                         if (tx_status & 0x30) outw(TxReset, ioaddr + EL3_CMD);
 
 904                         if (tx_status & 0x3C) outw(TxEnable, ioaddr + EL3_CMD);
 
 905                         outb(0x00, ioaddr + TX_STATUS); /* Pop the status stack. */
 
 911 /* The EL3 interrupt handler. */
 
 913 el3_interrupt(int irq, void *dev_id)
 
 915         struct net_device *dev = dev_id;
 
 916         struct el3_private *lp;
 
 918         int i = max_interrupt_work;
 
 920         lp = netdev_priv(dev);
 
 921         spin_lock(&lp->lock);
 
 923         ioaddr = dev->base_addr;
 
 926                 status = inw(ioaddr + EL3_STATUS);
 
 927                 printk("%s: interrupt, status %4.4x.\n", dev->name, status);
 
 930         while ((status = inw(ioaddr + EL3_STATUS)) &
 
 931                    (IntLatch | RxComplete | StatsFull)) {
 
 933                 if (status & RxComplete)
 
 936                 if (status & TxAvailable) {
 
 938                                 printk("        TX room bit was handled.\n");
 
 939                         /* There's room in the FIFO for a full-sized packet. */
 
 940                         outw(AckIntr | TxAvailable, ioaddr + EL3_CMD);
 
 941                         netif_wake_queue (dev);
 
 943                 if (status & (AdapterFailure | RxEarly | StatsFull | TxComplete)) {
 
 944                         /* Handle all uncommon interrupts. */
 
 945                         if (status & StatsFull)                         /* Empty statistics. */
 
 947                         if (status & RxEarly) {                         /* Rx early is unused. */
 
 949                                 outw(AckIntr | RxEarly, ioaddr + EL3_CMD);
 
 951                         if (status & TxComplete) {                      /* Really Tx error. */
 
 952                                 struct el3_private *lp = netdev_priv(dev);
 
 956                                 while (--i>0 && (tx_status = inb(ioaddr + TX_STATUS)) > 0) {
 
 957                                         if (tx_status & 0x38) lp->stats.tx_aborted_errors++;
 
 958                                         if (tx_status & 0x30) outw(TxReset, ioaddr + EL3_CMD);
 
 959                                         if (tx_status & 0x3C) outw(TxEnable, ioaddr + EL3_CMD);
 
 960                                         outb(0x00, ioaddr + TX_STATUS); /* Pop the status stack. */
 
 963                         if (status & AdapterFailure) {
 
 964                                 /* Adapter failure requires Rx reset and reinit. */
 
 965                                 outw(RxReset, ioaddr + EL3_CMD);
 
 966                                 /* Set the Rx filter to the current state. */
 
 967                                 outw(SetRxFilter | RxStation | RxBroadcast
 
 968                                          | (dev->flags & IFF_ALLMULTI ? RxMulticast : 0)
 
 969                                          | (dev->flags & IFF_PROMISC ? RxProm : 0),
 
 971                                 outw(RxEnable, ioaddr + EL3_CMD); /* Re-enable the receiver. */
 
 972                                 outw(AckIntr | AdapterFailure, ioaddr + EL3_CMD);
 
 977                         printk("%s: Infinite loop in interrupt, status %4.4x.\n",
 
 979                         /* Clear all interrupts. */
 
 980                         outw(AckIntr | 0xFF, ioaddr + EL3_CMD);
 
 983                 /* Acknowledge the IRQ. */
 
 984                 outw(AckIntr | IntReq | IntLatch, ioaddr + EL3_CMD); /* Ack IRQ */
 
 988                 printk("%s: exiting interrupt, status %4.4x.\n", dev->name,
 
 989                            inw(ioaddr + EL3_STATUS));
 
 991         spin_unlock(&lp->lock);
 
 996 #ifdef CONFIG_NET_POLL_CONTROLLER
 
 998  * Polling receive - used by netconsole and other diagnostic tools
 
 999  * to allow network i/o with interrupts disabled.
 
1001 static void el3_poll_controller(struct net_device *dev)
 
1003         disable_irq(dev->irq);
 
1004         el3_interrupt(dev->irq, dev);
 
1005         enable_irq(dev->irq);
 
1009 static struct net_device_stats *
 
1010 el3_get_stats(struct net_device *dev)
 
1012         struct el3_private *lp = netdev_priv(dev);
 
1013         unsigned long flags;
 
1016          *      This is fast enough not to bother with disable IRQ
 
1020         spin_lock_irqsave(&lp->lock, flags);
 
1022         spin_unlock_irqrestore(&lp->lock, flags);
 
1026 /*  Update statistics.  We change to register window 6, so this should be run
 
1027         single-threaded if the device is active. This is expected to be a rare
 
1028         operation, and it's simpler for the rest of the driver to assume that
 
1029         window 1 is always valid rather than use a special window-state variable.
 
1031 static void update_stats(struct net_device *dev)
 
1033         struct el3_private *lp = netdev_priv(dev);
 
1034         int ioaddr = dev->base_addr;
 
1037                 printk("   Updating the statistics.\n");
 
1038         /* Turn off statistics updates while reading. */
 
1039         outw(StatsDisable, ioaddr + EL3_CMD);
 
1040         /* Switch to the stats window, and read everything. */
 
1042         lp->stats.tx_carrier_errors     += inb(ioaddr + 0);
 
1043         lp->stats.tx_heartbeat_errors   += inb(ioaddr + 1);
 
1044         /* Multiple collisions. */         inb(ioaddr + 2);
 
1045         lp->stats.collisions            += inb(ioaddr + 3);
 
1046         lp->stats.tx_window_errors      += inb(ioaddr + 4);
 
1047         lp->stats.rx_fifo_errors        += inb(ioaddr + 5);
 
1048         lp->stats.tx_packets            += inb(ioaddr + 6);
 
1049         /* Rx packets   */                 inb(ioaddr + 7);
 
1050         /* Tx deferrals */                 inb(ioaddr + 8);
 
1051         inw(ioaddr + 10);       /* Total Rx and Tx octets. */
 
1054         /* Back to window 1, and turn statistics back on. */
 
1056         outw(StatsEnable, ioaddr + EL3_CMD);
 
1061 el3_rx(struct net_device *dev)
 
1063         struct el3_private *lp = netdev_priv(dev);
 
1064         int ioaddr = dev->base_addr;
 
1068                 printk("   In rx_packet(), status %4.4x, rx_status %4.4x.\n",
 
1069                            inw(ioaddr+EL3_STATUS), inw(ioaddr+RX_STATUS));
 
1070         while ((rx_status = inw(ioaddr + RX_STATUS)) > 0) {
 
1071                 if (rx_status & 0x4000) { /* Error, update stats. */
 
1072                         short error = rx_status & 0x3800;
 
1074                         outw(RxDiscard, ioaddr + EL3_CMD);
 
1075                         lp->stats.rx_errors++;
 
1077                         case 0x0000:            lp->stats.rx_over_errors++; break;
 
1078                         case 0x0800:            lp->stats.rx_length_errors++; break;
 
1079                         case 0x1000:            lp->stats.rx_frame_errors++; break;
 
1080                         case 0x1800:            lp->stats.rx_length_errors++; break;
 
1081                         case 0x2000:            lp->stats.rx_frame_errors++; break;
 
1082                         case 0x2800:            lp->stats.rx_crc_errors++; break;
 
1085                         short pkt_len = rx_status & 0x7ff;
 
1086                         struct sk_buff *skb;
 
1088                         skb = dev_alloc_skb(pkt_len+5);
 
1089                         lp->stats.rx_bytes += pkt_len;
 
1091                                 printk("Receiving packet size %d status %4.4x.\n",
 
1092                                            pkt_len, rx_status);
 
1095                                 skb_reserve(skb, 2);     /* Align IP on 16 byte */
 
1097                                 /* 'skb->data' points to the start of sk_buff data area. */
 
1098                                 insl(ioaddr + RX_FIFO, skb_put(skb,pkt_len),
 
1099                                          (pkt_len + 3) >> 2);
 
1101                                 outw(RxDiscard, ioaddr + EL3_CMD); /* Pop top Rx packet. */
 
1102                                 skb->protocol = eth_type_trans(skb,dev);
 
1104                                 dev->last_rx = jiffies;
 
1105                                 lp->stats.rx_packets++;
 
1108                         outw(RxDiscard, ioaddr + EL3_CMD);
 
1109                         lp->stats.rx_dropped++;
 
1111                                 printk("%s: Couldn't allocate a sk_buff of size %d.\n",
 
1112                                            dev->name, pkt_len);
 
1114                 inw(ioaddr + EL3_STATUS);                               /* Delay. */
 
1115                 while (inw(ioaddr + EL3_STATUS) & 0x1000)
 
1116                         printk(KERN_DEBUG "     Waiting for 3c509 to discard packet, status %x.\n",
 
1117                                    inw(ioaddr + EL3_STATUS) );
 
1124  *     Set or clear the multicast filter for this adaptor.
 
1127 set_multicast_list(struct net_device *dev)
 
1129         unsigned long flags;
 
1130         struct el3_private *lp = netdev_priv(dev);
 
1131         int ioaddr = dev->base_addr;
 
1133         if (el3_debug > 1) {
 
1135                 if (old != dev->mc_count) {
 
1136                         old = dev->mc_count;
 
1137                         printk("%s: Setting Rx mode to %d addresses.\n", dev->name, dev->mc_count);
 
1140         spin_lock_irqsave(&lp->lock, flags);
 
1141         if (dev->flags&IFF_PROMISC) {
 
1142                 outw(SetRxFilter | RxStation | RxMulticast | RxBroadcast | RxProm,
 
1145         else if (dev->mc_count || (dev->flags&IFF_ALLMULTI)) {
 
1146                 outw(SetRxFilter | RxStation | RxMulticast | RxBroadcast, ioaddr + EL3_CMD);
 
1149                 outw(SetRxFilter | RxStation | RxBroadcast, ioaddr + EL3_CMD);
 
1150         spin_unlock_irqrestore(&lp->lock, flags);
 
1154 el3_close(struct net_device *dev)
 
1156         int ioaddr = dev->base_addr;
 
1157         struct el3_private *lp = netdev_priv(dev);
 
1160                 printk("%s: Shutting down ethercard.\n", dev->name);
 
1164         free_irq(dev->irq, dev);
 
1165         /* Switching back to window 0 disables the IRQ. */
 
1167         if (lp->type != EL3_EISA) {
 
1168                 /* But we explicitly zero the IRQ line select anyway. Don't do
 
1169                  * it on EISA cards, it prevents the module from getting an
 
1170                  * IRQ after unload+reload... */
 
1171                 outw(0x0f00, ioaddr + WN0_IRQ);
 
1178 el3_link_ok(struct net_device *dev)
 
1180         int ioaddr = dev->base_addr;
 
1184         tmp = inw(ioaddr + WN4_MEDIA);
 
1186         return tmp & (1<<11);
 
1190 el3_netdev_get_ecmd(struct net_device *dev, struct ethtool_cmd *ecmd)
 
1193         int ioaddr = dev->base_addr;
 
1196         /* obtain current transceiver via WN4_MEDIA? */
 
1197         tmp = inw(ioaddr + WN0_ADDR_CONF);
 
1198         ecmd->transceiver = XCVR_INTERNAL;
 
1199         switch (tmp >> 14) {
 
1201                 ecmd->port = PORT_TP;
 
1204                 ecmd->port = PORT_AUI;
 
1205                 ecmd->transceiver = XCVR_EXTERNAL;
 
1208                 ecmd->port = PORT_BNC;
 
1213         ecmd->duplex = DUPLEX_HALF;
 
1214         ecmd->supported = 0;
 
1215         tmp = inw(ioaddr + WN0_CONF_CTRL);
 
1217                 ecmd->supported |= SUPPORTED_AUI;
 
1219                 ecmd->supported |= SUPPORTED_BNC;
 
1221                 ecmd->supported |= SUPPORTED_TP | SUPPORTED_10baseT_Half |
 
1222                                 SUPPORTED_10baseT_Full; /* hmm... */
 
1224                 tmp = inw(ioaddr + WN4_NETDIAG);
 
1225                 if (tmp & FD_ENABLE)
 
1226                         ecmd->duplex = DUPLEX_FULL;
 
1229         ecmd->speed = SPEED_10;
 
1235 el3_netdev_set_ecmd(struct net_device *dev, struct ethtool_cmd *ecmd)
 
1238         int ioaddr = dev->base_addr;
 
1240         if (ecmd->speed != SPEED_10)
 
1242         if ((ecmd->duplex != DUPLEX_HALF) && (ecmd->duplex != DUPLEX_FULL))
 
1244         if ((ecmd->transceiver != XCVR_INTERNAL) && (ecmd->transceiver != XCVR_EXTERNAL))
 
1247         /* change XCVR type */
 
1249         tmp = inw(ioaddr + WN0_ADDR_CONF);
 
1250         switch (ecmd->port) {
 
1267         outw(tmp, ioaddr + WN0_ADDR_CONF);
 
1268         if (dev->if_port == 3) {
 
1269                 /* fire up the DC-DC convertor if BNC gets enabled */
 
1270                 tmp = inw(ioaddr + WN0_ADDR_CONF);
 
1271                 if (tmp & (3 << 14)) {
 
1272                         outw(StartCoax, ioaddr + EL3_CMD);
 
1279         tmp = inw(ioaddr + WN4_NETDIAG);
 
1280         if (ecmd->duplex == DUPLEX_FULL)
 
1284         outw(tmp, ioaddr + WN4_NETDIAG);
 
1290 static void el3_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
 
1292         strcpy(info->driver, DRV_NAME);
 
1293         strcpy(info->version, DRV_VERSION);
 
1296 static int el3_get_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
 
1298         struct el3_private *lp = netdev_priv(dev);
 
1301         spin_lock_irq(&lp->lock);
 
1302         ret = el3_netdev_get_ecmd(dev, ecmd);
 
1303         spin_unlock_irq(&lp->lock);
 
1307 static int el3_set_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
 
1309         struct el3_private *lp = netdev_priv(dev);
 
1312         spin_lock_irq(&lp->lock);
 
1313         ret = el3_netdev_set_ecmd(dev, ecmd);
 
1314         spin_unlock_irq(&lp->lock);
 
1318 static u32 el3_get_link(struct net_device *dev)
 
1320         struct el3_private *lp = netdev_priv(dev);
 
1323         spin_lock_irq(&lp->lock);
 
1324         ret = el3_link_ok(dev);
 
1325         spin_unlock_irq(&lp->lock);
 
1329 static u32 el3_get_msglevel(struct net_device *dev)
 
1334 static void el3_set_msglevel(struct net_device *dev, u32 v)
 
1339 static const struct ethtool_ops ethtool_ops = {
 
1340         .get_drvinfo = el3_get_drvinfo,
 
1341         .get_settings = el3_get_settings,
 
1342         .set_settings = el3_set_settings,
 
1343         .get_link = el3_get_link,
 
1344         .get_msglevel = el3_get_msglevel,
 
1345         .set_msglevel = el3_set_msglevel,
 
1349 el3_down(struct net_device *dev)
 
1351         int ioaddr = dev->base_addr;
 
1353         netif_stop_queue(dev);
 
1355         /* Turn off statistics ASAP.  We update lp->stats below. */
 
1356         outw(StatsDisable, ioaddr + EL3_CMD);
 
1358         /* Disable the receiver and transmitter. */
 
1359         outw(RxDisable, ioaddr + EL3_CMD);
 
1360         outw(TxDisable, ioaddr + EL3_CMD);
 
1362         if (dev->if_port == 3)
 
1363                 /* Turn off thinnet power.  Green! */
 
1364                 outw(StopCoax, ioaddr + EL3_CMD);
 
1365         else if (dev->if_port == 0) {
 
1366                 /* Disable link beat and jabber, if_port may change here next open(). */
 
1368                 outw(inw(ioaddr + WN4_MEDIA) & ~MEDIA_TP, ioaddr + WN4_MEDIA);
 
1371         outw(SetIntrEnb | 0x0000, ioaddr + EL3_CMD);
 
1377 el3_up(struct net_device *dev)
 
1379         int i, sw_info, net_diag;
 
1380         int ioaddr = dev->base_addr;
 
1382         /* Activating the board required and does no harm otherwise */
 
1383         outw(0x0001, ioaddr + 4);
 
1385         /* Set the IRQ line. */
 
1386         outw((dev->irq << 12) | 0x0f00, ioaddr + WN0_IRQ);
 
1388         /* Set the station address in window 2 each time opened. */
 
1391         for (i = 0; i < 6; i++)
 
1392                 outb(dev->dev_addr[i], ioaddr + i);
 
1394         if ((dev->if_port & 0x03) == 3) /* BNC interface */
 
1395                 /* Start the thinnet transceiver. We should really wait 50ms...*/
 
1396                 outw(StartCoax, ioaddr + EL3_CMD);
 
1397         else if ((dev->if_port & 0x03) == 0) { /* 10baseT interface */
 
1398                 /* Combine secondary sw_info word (the adapter level) and primary
 
1399                         sw_info word (duplex setting plus other useless bits) */
 
1401                 sw_info = (read_eeprom(ioaddr, 0x14) & 0x400f) |
 
1402                         (read_eeprom(ioaddr, 0x0d) & 0xBff0);
 
1405                 net_diag = inw(ioaddr + WN4_NETDIAG);
 
1406                 net_diag = (net_diag | FD_ENABLE); /* temporarily assume full-duplex will be set */
 
1407                 printk("%s: ", dev->name);
 
1408                 switch (dev->if_port & 0x0c) {
 
1410                                 /* force full-duplex mode if 3c5x9b */
 
1411                                 if (sw_info & 0x000f) {
 
1412                                         printk("Forcing 3c5x9b full-duplex mode");
 
1416                                 /* set full-duplex mode based on eeprom config setting */
 
1417                                 if ((sw_info & 0x000f) && (sw_info & 0x8000)) {
 
1418                                         printk("Setting 3c5x9b full-duplex mode (from EEPROM configuration bit)");
 
1422                                 /* xcvr=(0 || 4) OR user has an old 3c5x9 non "B" model */
 
1423                                 printk("Setting 3c5x9/3c5x9B half-duplex mode");
 
1424                                 net_diag = (net_diag & ~FD_ENABLE); /* disable full duplex */
 
1427                 outw(net_diag, ioaddr + WN4_NETDIAG);
 
1428                 printk(" if_port: %d, sw_info: %4.4x\n", dev->if_port, sw_info);
 
1430                         printk("%s: 3c5x9 net diag word is now: %4.4x.\n", dev->name, net_diag);
 
1431                 /* Enable link beat and jabber check. */
 
1432                 outw(inw(ioaddr + WN4_MEDIA) | MEDIA_TP, ioaddr + WN4_MEDIA);
 
1435         /* Switch to the stats window, and clear all stats by reading. */
 
1436         outw(StatsDisable, ioaddr + EL3_CMD);
 
1438         for (i = 0; i < 9; i++)
 
1443         /* Switch to register set 1 for normal use. */
 
1446         /* Accept b-case and phys addr only. */
 
1447         outw(SetRxFilter | RxStation | RxBroadcast, ioaddr + EL3_CMD);
 
1448         outw(StatsEnable, ioaddr + EL3_CMD); /* Turn on statistics. */
 
1450         outw(RxEnable, ioaddr + EL3_CMD); /* Enable the receiver. */
 
1451         outw(TxEnable, ioaddr + EL3_CMD); /* Enable transmitter. */
 
1452         /* Allow status bits to be seen. */
 
1453         outw(SetStatusEnb | 0xff, ioaddr + EL3_CMD);
 
1454         /* Ack all pending events, and set active indicator mask. */
 
1455         outw(AckIntr | IntLatch | TxAvailable | RxEarly | IntReq,
 
1457         outw(SetIntrEnb | IntLatch|TxAvailable|TxComplete|RxComplete|StatsFull,
 
1460         netif_start_queue(dev);
 
1463 /* Power Management support functions */
 
1467 el3_suspend(struct device *pdev, pm_message_t state)
 
1469         unsigned long flags;
 
1470         struct net_device *dev;
 
1471         struct el3_private *lp;
 
1474         dev = pdev->driver_data;
 
1475         lp = netdev_priv(dev);
 
1476         ioaddr = dev->base_addr;
 
1478         spin_lock_irqsave(&lp->lock, flags);
 
1480         if (netif_running(dev))
 
1481                 netif_device_detach(dev);
 
1484         outw(PowerDown, ioaddr + EL3_CMD);
 
1486         spin_unlock_irqrestore(&lp->lock, flags);
 
1491 el3_resume(struct device *pdev)
 
1493         unsigned long flags;
 
1494         struct net_device *dev;
 
1495         struct el3_private *lp;
 
1498         dev = pdev->driver_data;
 
1499         lp = netdev_priv(dev);
 
1500         ioaddr = dev->base_addr;
 
1502         spin_lock_irqsave(&lp->lock, flags);
 
1504         outw(PowerUp, ioaddr + EL3_CMD);
 
1507         if (netif_running(dev))
 
1508                 netif_device_attach(dev);
 
1510         spin_unlock_irqrestore(&lp->lock, flags);
 
1514 #endif /* EL3_SUSPEND */
 
1516 /* Parameters that may be passed into the module. */
 
1517 static int debug = -1;
 
1518 static int irq[] = {-1, -1, -1, -1, -1, -1, -1, -1};
 
1519 static int xcvr[] = {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1};
 
1521 module_param(debug,int, 0);
 
1522 module_param_array(irq, int, NULL, 0);
 
1523 module_param_array(xcvr, int, NULL, 0);
 
1524 module_param(max_interrupt_work, int, 0);
 
1525 MODULE_PARM_DESC(debug, "debug level (0-6)");
 
1526 MODULE_PARM_DESC(irq, "IRQ number(s) (assigned)");
 
1527 MODULE_PARM_DESC(xcvr,"transceiver(s) (0=internal, 1=external)");
 
1528 MODULE_PARM_DESC(max_interrupt_work, "maximum events handled per interrupt");
 
1529 #if defined(__ISAPNP__)
 
1530 module_param(nopnp, int, 0);
 
1531 MODULE_PARM_DESC(nopnp, "disable ISA PnP support (0-1)");
 
1532 MODULE_DEVICE_TABLE(isapnp, el3_isapnp_adapters);
 
1533 #endif  /* __ISAPNP__ */
 
1534 MODULE_DESCRIPTION("3Com Etherlink III (3c509, 3c509B) ISA/PnP ethernet driver");
 
1535 MODULE_LICENSE("GPL");
 
1537 static int __init el3_init_module(void)
 
1545         el3_root_dev = NULL;
 
1546         while (el3_probe(el3_cards) == 0) {
 
1547                 if (irq[el3_cards] > 1)
 
1548                         el3_root_dev->irq = irq[el3_cards];
 
1549                 if (xcvr[el3_cards] >= 0)
 
1550                         el3_root_dev->if_port = xcvr[el3_cards];
 
1555         ret = eisa_driver_register(&el3_eisa_driver);
 
1559                 int err = mca_register_driver(&el3_mca_driver);
 
1567 static void __exit el3_cleanup_module(void)
 
1569         struct net_device *next_dev;
 
1571         while (el3_root_dev) {
 
1572                 struct el3_private *lp = netdev_priv(el3_root_dev);
 
1574                 next_dev = lp->next_dev;
 
1575                 el3_common_remove (el3_root_dev);
 
1576                 el3_root_dev = next_dev;
 
1580         eisa_driver_unregister (&el3_eisa_driver);
 
1583         mca_unregister_driver(&el3_mca_driver);
 
1587 module_init (el3_init_module);
 
1588 module_exit (el3_cleanup_module);