linux/drivers/net/ethernet/8390/ne.c
<<
>>
Prefs
   1/* ne.c: A general non-shared-memory NS8390 ethernet driver for linux. */
   2/*
   3    Written 1992-94 by Donald Becker.
   4
   5    Copyright 1993 United States Government as represented by the
   6    Director, National Security Agency.
   7
   8    This software may be used and distributed according to the terms
   9    of the GNU General Public License, incorporated herein by reference.
  10
  11    The author may be reached as becker@scyld.com, or C/O
  12    Scyld Computing Corporation, 410 Severn Ave., Suite 210, Annapolis MD 21403
  13
  14    This driver should work with many programmed-I/O 8390-based ethernet
  15    boards.  Currently it supports the NE1000, NE2000, many clones,
  16    and some Cabletron products.
  17
  18    Changelog:
  19
  20    Paul Gortmaker      : use ENISR_RDC to monitor Tx PIO uploads, made
  21                          sanity checks and bad clone support optional.
  22    Paul Gortmaker      : new reset code, reset card after probe at boot.
  23    Paul Gortmaker      : multiple card support for module users.
  24    Paul Gortmaker      : Support for PCI ne2k clones, similar to lance.c
  25    Paul Gortmaker      : Allow users with bad cards to avoid full probe.
  26    Paul Gortmaker      : PCI probe changes, more PCI cards supported.
  27    rjohnson@analogic.com : Changed init order so an interrupt will only
  28    occur after memory is allocated for dev->priv. Deallocated memory
  29    last in cleanup_modue()
  30    Richard Guenther    : Added support for ISAPnP cards
  31    Paul Gortmaker      : Discontinued PCI support - use ne2k-pci.c instead.
  32    Hayato Fujiwara     : Add m32r support.
  33
  34*/
  35
  36/* Routines for the NatSemi-based designs (NE[12]000). */
  37
  38static const char version1[] =
  39"ne.c:v1.10 9/23/94 Donald Becker (becker@scyld.com)\n";
  40static const char version2[] =
  41"Last modified Nov 1, 2000 by Paul Gortmaker\n";
  42
  43
  44#include <linux/module.h>
  45#include <linux/kernel.h>
  46#include <linux/errno.h>
  47#include <linux/isapnp.h>
  48#include <linux/init.h>
  49#include <linux/interrupt.h>
  50#include <linux/delay.h>
  51#include <linux/netdevice.h>
  52#include <linux/etherdevice.h>
  53#include <linux/jiffies.h>
  54#include <linux/platform_device.h>
  55
  56#include <asm/io.h>
  57
  58#include "8390.h"
  59
  60#define DRV_NAME "ne"
  61
  62/* Some defines that people can play with if so inclined. */
  63
  64/* Do we support clones that don't adhere to 14,15 of the SAprom ? */
  65#define SUPPORT_NE_BAD_CLONES
  66/* 0xbad = bad sig or no reset ack */
  67#define BAD 0xbad
  68
  69#define MAX_NE_CARDS    4       /* Max number of NE cards per module */
  70static struct platform_device *pdev_ne[MAX_NE_CARDS];
  71static int io[MAX_NE_CARDS];
  72static int irq[MAX_NE_CARDS];
  73static int bad[MAX_NE_CARDS];
  74static u32 ne_msg_enable;
  75
  76#ifdef MODULE
  77module_param_array(io, int, NULL, 0);
  78module_param_array(irq, int, NULL, 0);
  79module_param_array(bad, int, NULL, 0);
  80module_param_named(msg_enable, ne_msg_enable, uint, (S_IRUSR|S_IRGRP|S_IROTH));
  81MODULE_PARM_DESC(io, "I/O base address(es),required");
  82MODULE_PARM_DESC(irq, "IRQ number(s)");
  83MODULE_PARM_DESC(bad, "Accept card(s) with bad signatures");
  84MODULE_PARM_DESC(msg_enable, "Debug message level (see linux/netdevice.h for bitmap)");
  85MODULE_DESCRIPTION("NE1000/NE2000 ISA/PnP Ethernet driver");
  86MODULE_LICENSE("GPL");
  87#endif /* MODULE */
  88
  89/* Do we perform extra sanity checks on stuff ? */
  90/* #define NE_SANITY_CHECK */
  91
  92/* Do we implement the read before write bugfix ? */
  93/* #define NE_RW_BUGFIX */
  94
  95/* Do we have a non std. amount of memory? (in units of 256 byte pages) */
  96/* #define PACKETBUF_MEMSIZE    0x40 */
  97
  98/* This is set up so that no ISA autoprobe takes place. We can't guarantee
  99that the ne2k probe is the last 8390 based probe to take place (as it
 100is at boot) and so the probe will get confused by any other 8390 cards.
 101ISA device autoprobes on a running machine are not recommended anyway. */
 102#if !defined(MODULE) && (defined(CONFIG_ISA) || defined(CONFIG_M32R))
 103/* Do we need a portlist for the ISA auto-probe ? */
 104#define NEEDS_PORTLIST
 105#endif
 106
 107/* A zero-terminated list of I/O addresses to be probed at boot. */
 108#ifdef NEEDS_PORTLIST
 109static unsigned int netcard_portlist[] __initdata = {
 110        0x300, 0x280, 0x320, 0x340, 0x360, 0x380, 0
 111};
 112#endif
 113
 114static struct isapnp_device_id isapnp_clone_list[] __initdata = {
 115        {       ISAPNP_CARD_ID('A','X','E',0x2011),
 116                ISAPNP_VENDOR('A','X','E'), ISAPNP_FUNCTION(0x2011),
 117                (long) "NetGear EA201" },
 118        {       ISAPNP_ANY_ID, ISAPNP_ANY_ID,
 119                ISAPNP_VENDOR('E','D','I'), ISAPNP_FUNCTION(0x0216),
 120                (long) "NN NE2000" },
 121        {       ISAPNP_ANY_ID, ISAPNP_ANY_ID,
 122                ISAPNP_VENDOR('P','N','P'), ISAPNP_FUNCTION(0x80d6),
 123                (long) "Generic PNP" },
 124        { }     /* terminate list */
 125};
 126
 127MODULE_DEVICE_TABLE(isapnp, isapnp_clone_list);
 128
 129#ifdef SUPPORT_NE_BAD_CLONES
 130/* A list of bad clones that we none-the-less recognize. */
 131static struct { const char *name8, *name16; unsigned char SAprefix[4];}
 132bad_clone_list[] __initdata = {
 133    {"DE100", "DE200", {0x00, 0xDE, 0x01,}},
 134    {"DE120", "DE220", {0x00, 0x80, 0xc8,}},
 135    {"DFI1000", "DFI2000", {'D', 'F', 'I',}}, /* Original, eh?  */
 136    {"EtherNext UTP8", "EtherNext UTP16", {0x00, 0x00, 0x79}},
 137    {"NE1000","NE2000-invalid", {0x00, 0x00, 0xd8}}, /* Ancient real NE1000. */
 138    {"NN1000", "NN2000",  {0x08, 0x03, 0x08}}, /* Outlaw no-name clone. */
 139    {"4-DIM8","4-DIM16", {0x00,0x00,0x4d,}},  /* Outlaw 4-Dimension cards. */
 140    {"Con-Intl_8", "Con-Intl_16", {0x00, 0x00, 0x24}}, /* Connect Int'nl */
 141    {"ET-100","ET-200", {0x00, 0x45, 0x54}}, /* YANG and YA clone */
 142    {"COMPEX","COMPEX16",{0x00,0x80,0x48}}, /* Broken ISA Compex cards */
 143    {"E-LAN100", "E-LAN200", {0x00, 0x00, 0x5d}}, /* Broken ne1000 clones */
 144    {"PCM-4823", "PCM-4823", {0x00, 0xc0, 0x6c}}, /* Broken Advantech MoBo */
 145    {"REALTEK", "RTL8019", {0x00, 0x00, 0xe8}}, /* no-name with Realtek chip */
 146#ifdef CONFIG_MACH_TX49XX
 147    {"RBHMA4X00-RTL8019", "RBHMA4X00-RTL8019", {0x00, 0x60, 0x0a}},  /* Toshiba built-in */
 148#endif
 149    {"LCS-8834", "LCS-8836", {0x04, 0x04, 0x37}}, /* ShinyNet (SET) */
 150    {NULL,}
 151};
 152#endif
 153
 154/* ---- No user-serviceable parts below ---- */
 155
 156#define NE_BASE  (dev->base_addr)
 157#define NE_CMD          0x00
 158#define NE_DATAPORT     0x10    /* NatSemi-defined port window offset. */
 159#define NE_RESET        0x1f    /* Issue a read to reset, a write to clear. */
 160#define NE_IO_EXTENT    0x20
 161
 162#define NE1SM_START_PG  0x20    /* First page of TX buffer */
 163#define NE1SM_STOP_PG   0x40    /* Last page +1 of RX ring */
 164#define NESM_START_PG   0x40    /* First page of TX buffer */
 165#define NESM_STOP_PG    0x80    /* Last page +1 of RX ring */
 166
 167#if defined(CONFIG_PLAT_MAPPI)
 168#  define DCR_VAL 0x4b
 169#elif defined(CONFIG_PLAT_OAKS32R)  || \
 170   defined(CONFIG_MACH_TX49XX)
 171#  define DCR_VAL 0x48          /* 8-bit mode */
 172#elif defined(CONFIG_ATARI)     /* 8-bit mode on Atari, normal on Q40 */
 173#  define DCR_VAL (MACH_IS_ATARI ? 0x48 : 0x49)
 174#else
 175#  define DCR_VAL 0x49
 176#endif
 177
 178static int ne_probe1(struct net_device *dev, unsigned long ioaddr);
 179static int ne_probe_isapnp(struct net_device *dev);
 180
 181static void ne_reset_8390(struct net_device *dev);
 182static void ne_get_8390_hdr(struct net_device *dev, struct e8390_pkt_hdr *hdr,
 183                          int ring_page);
 184static void ne_block_input(struct net_device *dev, int count,
 185                          struct sk_buff *skb, int ring_offset);
 186static void ne_block_output(struct net_device *dev, const int count,
 187                const unsigned char *buf, const int start_page);
 188
 189
 190/*  Probe for various non-shared-memory ethercards.
 191
 192   NEx000-clone boards have a Station Address PROM (SAPROM) in the packet
 193   buffer memory space.  NE2000 clones have 0x57,0x57 in bytes 0x0e,0x0f of
 194   the SAPROM, while other supposed NE2000 clones must be detected by their
 195   SA prefix.
 196
 197   Reading the SAPROM from a word-wide card with the 8390 set in byte-wide
 198   mode results in doubled values, which can be detected and compensated for.
 199
 200   The probe is also responsible for initializing the card and filling
 201   in the 'dev' and 'ei_status' structures.
 202
 203   We use the minimum memory size for some ethercard product lines, iff we can't
 204   distinguish models.  You can increase the packet buffer size by setting
 205   PACKETBUF_MEMSIZE.  Reported Cabletron packet buffer locations are:
 206        E1010   starts at 0x100 and ends at 0x2000.
 207        E1010-x starts at 0x100 and ends at 0x8000. ("-x" means "more memory")
 208        E2010    starts at 0x100 and ends at 0x4000.
 209        E2010-x starts at 0x100 and ends at 0xffff.  */
 210
 211static int __init do_ne_probe(struct net_device *dev)
 212{
 213        unsigned long base_addr = dev->base_addr;
 214#ifdef NEEDS_PORTLIST
 215        int orig_irq = dev->irq;
 216#endif
 217
 218        /* First check any supplied i/o locations. User knows best. <cough> */
 219        if (base_addr > 0x1ff) {        /* Check a single specified location. */
 220                int ret = ne_probe1(dev, base_addr);
 221                if (ret)
 222                        netdev_warn(dev, "ne.c: No NE*000 card found at "
 223                                    "i/o = %#lx\n", base_addr);
 224                return ret;
 225        }
 226        else if (base_addr != 0)        /* Don't probe at all. */
 227                return -ENXIO;
 228
 229        /* Then look for any installed ISAPnP clones */
 230        if (isapnp_present() && (ne_probe_isapnp(dev) == 0))
 231                return 0;
 232
 233#ifdef NEEDS_PORTLIST
 234        /* Last resort. The semi-risky ISA auto-probe. */
 235        for (base_addr = 0; netcard_portlist[base_addr] != 0; base_addr++) {
 236                int ioaddr = netcard_portlist[base_addr];
 237                dev->irq = orig_irq;
 238                if (ne_probe1(dev, ioaddr) == 0)
 239                        return 0;
 240        }
 241#endif
 242
 243        return -ENODEV;
 244}
 245
 246static int __init ne_probe_isapnp(struct net_device *dev)
 247{
 248        int i;
 249
 250        for (i = 0; isapnp_clone_list[i].vendor != 0; i++) {
 251                struct pnp_dev *idev = NULL;
 252
 253                while ((idev = pnp_find_dev(NULL,
 254                                            isapnp_clone_list[i].vendor,
 255                                            isapnp_clone_list[i].function,
 256                                            idev))) {
 257                        /* Avoid already found cards from previous calls */
 258                        if (pnp_device_attach(idev) < 0)
 259                                continue;
 260                        if (pnp_activate_dev(idev) < 0) {
 261                                pnp_device_detach(idev);
 262                                continue;
 263                        }
 264                        /* if no io and irq, search for next */
 265                        if (!pnp_port_valid(idev, 0) || !pnp_irq_valid(idev, 0)) {
 266                                pnp_device_detach(idev);
 267                                continue;
 268                        }
 269                        /* found it */
 270                        dev->base_addr = pnp_port_start(idev, 0);
 271                        dev->irq = pnp_irq(idev, 0);
 272                        netdev_info(dev,
 273                                    "ne.c: ISAPnP reports %s at i/o %#lx, irq %d.\n",
 274                                    (char *) isapnp_clone_list[i].driver_data,
 275                                    dev->base_addr, dev->irq);
 276                        if (ne_probe1(dev, dev->base_addr) != 0) {      /* Shouldn't happen. */
 277                                netdev_err(dev,
 278                                           "ne.c: Probe of ISAPnP card at %#lx failed.\n",
 279                                           dev->base_addr);
 280                                pnp_device_detach(idev);
 281                                return -ENXIO;
 282                        }
 283                        ei_status.priv = (unsigned long)idev;
 284                        break;
 285                }
 286                if (!idev)
 287                        continue;
 288                return 0;
 289        }
 290
 291        return -ENODEV;
 292}
 293
 294static int __init ne_probe1(struct net_device *dev, unsigned long ioaddr)
 295{
 296        int i;
 297        unsigned char SA_prom[32];
 298        int wordlength = 2;
 299        const char *name = NULL;
 300        int start_page, stop_page;
 301        int neX000, ctron, copam, bad_card;
 302        int reg0, ret;
 303        static unsigned version_printed;
 304        struct ei_device *ei_local = netdev_priv(dev);
 305
 306        if (!request_region(ioaddr, NE_IO_EXTENT, DRV_NAME))
 307                return -EBUSY;
 308
 309        reg0 = inb_p(ioaddr);
 310        if (reg0 == 0xFF) {
 311                ret = -ENODEV;
 312                goto err_out;
 313        }
 314
 315        /* Do a preliminary verification that we have a 8390. */
 316        {
 317                int regd;
 318                outb_p(E8390_NODMA+E8390_PAGE1+E8390_STOP, ioaddr + E8390_CMD);
 319                regd = inb_p(ioaddr + 0x0d);
 320                outb_p(0xff, ioaddr + 0x0d);
 321                outb_p(E8390_NODMA+E8390_PAGE0, ioaddr + E8390_CMD);
 322                inb_p(ioaddr + EN0_COUNTER0); /* Clear the counter by reading. */
 323                if (inb_p(ioaddr + EN0_COUNTER0) != 0) {
 324                        outb_p(reg0, ioaddr);
 325                        outb_p(regd, ioaddr + 0x0d);    /* Restore the old values. */
 326                        ret = -ENODEV;
 327                        goto err_out;
 328                }
 329        }
 330
 331        if ((ne_msg_enable & NETIF_MSG_DRV) && (version_printed++ == 0))
 332                netdev_info(dev, "%s%s", version1, version2);
 333
 334        netdev_info(dev, "NE*000 ethercard probe at %#3lx:", ioaddr);
 335
 336        /* A user with a poor card that fails to ack the reset, or that
 337           does not have a valid 0x57,0x57 signature can still use this
 338           without having to recompile. Specifying an i/o address along
 339           with an otherwise unused dev->mem_end value of "0xBAD" will
 340           cause the driver to skip these parts of the probe. */
 341
 342        bad_card = ((dev->base_addr != 0) && (dev->mem_end == BAD));
 343
 344        /* Reset card. Who knows what dain-bramaged state it was left in. */
 345
 346        {
 347                unsigned long reset_start_time = jiffies;
 348
 349                /* DON'T change these to inb_p/outb_p or reset will fail on clones. */
 350                outb(inb(ioaddr + NE_RESET), ioaddr + NE_RESET);
 351
 352                while ((inb_p(ioaddr + EN0_ISR) & ENISR_RESET) == 0)
 353                if (time_after(jiffies, reset_start_time + 2*HZ/100)) {
 354                        if (bad_card) {
 355                                pr_cont(" (warning: no reset ack)");
 356                                break;
 357                        } else {
 358                                pr_cont(" not found (no reset ack).\n");
 359                                ret = -ENODEV;
 360                                goto err_out;
 361                        }
 362                }
 363
 364                outb_p(0xff, ioaddr + EN0_ISR);         /* Ack all intr. */
 365        }
 366
 367        /* Read the 16 bytes of station address PROM.
 368           We must first initialize registers, similar to NS8390p_init(eifdev, 0).
 369           We can't reliably read the SAPROM address without this.
 370           (I learned the hard way!). */
 371        {
 372                struct {unsigned char value, offset; } program_seq[] =
 373                {
 374                        {E8390_NODMA+E8390_PAGE0+E8390_STOP, E8390_CMD}, /* Select page 0*/
 375                        {0x48,  EN0_DCFG},      /* Set byte-wide (0x48) access. */
 376                        {0x00,  EN0_RCNTLO},    /* Clear the count regs. */
 377                        {0x00,  EN0_RCNTHI},
 378                        {0x00,  EN0_IMR},       /* Mask completion irq. */
 379                        {0xFF,  EN0_ISR},
 380                        {E8390_RXOFF, EN0_RXCR},        /* 0x20  Set to monitor */
 381                        {E8390_TXOFF, EN0_TXCR},        /* 0x02  and loopback mode. */
 382                        {32,    EN0_RCNTLO},
 383                        {0x00,  EN0_RCNTHI},
 384                        {0x00,  EN0_RSARLO},    /* DMA starting at 0x0000. */
 385                        {0x00,  EN0_RSARHI},
 386                        {E8390_RREAD+E8390_START, E8390_CMD},
 387                };
 388
 389                for (i = 0; i < ARRAY_SIZE(program_seq); i++)
 390                        outb_p(program_seq[i].value, ioaddr + program_seq[i].offset);
 391
 392        }
 393        for(i = 0; i < 32 /*sizeof(SA_prom)*/; i+=2) {
 394                SA_prom[i] = inb(ioaddr + NE_DATAPORT);
 395                SA_prom[i+1] = inb(ioaddr + NE_DATAPORT);
 396                if (SA_prom[i] != SA_prom[i+1])
 397                        wordlength = 1;
 398        }
 399
 400        if (wordlength == 2)
 401        {
 402                for (i = 0; i < 16; i++)
 403                        SA_prom[i] = SA_prom[i+i];
 404                /* We must set the 8390 for word mode. */
 405                outb_p(DCR_VAL, ioaddr + EN0_DCFG);
 406                start_page = NESM_START_PG;
 407
 408                /*
 409                 * Realtek RTL8019AS datasheet says that the PSTOP register
 410                 * shouldn't exceed 0x60 in 8-bit mode.
 411                 * This chip can be identified by reading the signature from
 412                 * the  remote byte count registers (otherwise write-only)...
 413                 */
 414                if ((DCR_VAL & 0x01) == 0 &&            /* 8-bit mode */
 415                    inb(ioaddr + EN0_RCNTLO) == 0x50 &&
 416                    inb(ioaddr + EN0_RCNTHI) == 0x70)
 417                        stop_page = 0x60;
 418                else
 419                        stop_page = NESM_STOP_PG;
 420        } else {
 421                start_page = NE1SM_START_PG;
 422                stop_page  = NE1SM_STOP_PG;
 423        }
 424
 425#if  defined(CONFIG_PLAT_MAPPI) || defined(CONFIG_PLAT_OAKS32R)
 426        neX000 = ((SA_prom[14] == 0x57  &&  SA_prom[15] == 0x57)
 427                || (SA_prom[14] == 0x42 && SA_prom[15] == 0x42));
 428#else
 429        neX000 = (SA_prom[14] == 0x57  &&  SA_prom[15] == 0x57);
 430#endif
 431        ctron =  (SA_prom[0] == 0x00 && SA_prom[1] == 0x00 && SA_prom[2] == 0x1d);
 432        copam =  (SA_prom[14] == 0x49 && SA_prom[15] == 0x00);
 433
 434        /* Set up the rest of the parameters. */
 435        if (neX000 || bad_card || copam) {
 436                name = (wordlength == 2) ? "NE2000" : "NE1000";
 437        }
 438        else if (ctron)
 439        {
 440                name = (wordlength == 2) ? "Ctron-8" : "Ctron-16";
 441                start_page = 0x01;
 442                stop_page = (wordlength == 2) ? 0x40 : 0x20;
 443        }
 444        else
 445        {
 446#ifdef SUPPORT_NE_BAD_CLONES
 447                /* Ack!  Well, there might be a *bad* NE*000 clone there.
 448                   Check for total bogus addresses. */
 449                for (i = 0; bad_clone_list[i].name8; i++)
 450                {
 451                        if (SA_prom[0] == bad_clone_list[i].SAprefix[0] &&
 452                                SA_prom[1] == bad_clone_list[i].SAprefix[1] &&
 453                                SA_prom[2] == bad_clone_list[i].SAprefix[2])
 454                        {
 455                                if (wordlength == 2)
 456                                {
 457                                        name = bad_clone_list[i].name16;
 458                                } else {
 459                                        name = bad_clone_list[i].name8;
 460                                }
 461                                break;
 462                        }
 463                }
 464                if (bad_clone_list[i].name8 == NULL)
 465                {
 466                        pr_cont(" not found (invalid signature %2.2x %2.2x).\n",
 467                                SA_prom[14], SA_prom[15]);
 468                        ret = -ENXIO;
 469                        goto err_out;
 470                }
 471#else
 472                pr_cont(" not found.\n");
 473                ret = -ENXIO;
 474                goto err_out;
 475#endif
 476        }
 477
 478        if (dev->irq < 2)
 479        {
 480                unsigned long cookie = probe_irq_on();
 481                outb_p(0x50, ioaddr + EN0_IMR); /* Enable one interrupt. */
 482                outb_p(0x00, ioaddr + EN0_RCNTLO);
 483                outb_p(0x00, ioaddr + EN0_RCNTHI);
 484                outb_p(E8390_RREAD+E8390_START, ioaddr); /* Trigger it... */
 485                mdelay(10);             /* wait 10ms for interrupt to propagate */
 486                outb_p(0x00, ioaddr + EN0_IMR);                 /* Mask it again. */
 487                dev->irq = probe_irq_off(cookie);
 488                if (netif_msg_probe(ei_local))
 489                        pr_cont(" autoirq is %d", dev->irq);
 490        } else if (dev->irq == 2)
 491                /* Fixup for users that don't know that IRQ 2 is really IRQ 9,
 492                   or don't know which one to set. */
 493                dev->irq = 9;
 494
 495        if (! dev->irq) {
 496                pr_cont(" failed to detect IRQ line.\n");
 497                ret = -EAGAIN;
 498                goto err_out;
 499        }
 500
 501        /* Snarf the interrupt now.  There's no point in waiting since we cannot
 502           share and the board will usually be enabled. */
 503        ret = request_irq(dev->irq, eip_interrupt, 0, name, dev);
 504        if (ret) {
 505                pr_cont(" unable to get IRQ %d (errno=%d).\n", dev->irq, ret);
 506                goto err_out;
 507        }
 508
 509        dev->base_addr = ioaddr;
 510
 511#ifdef CONFIG_PLAT_MAPPI
 512        outb_p(E8390_NODMA + E8390_PAGE1 + E8390_STOP,
 513                ioaddr + E8390_CMD); /* 0x61 */
 514        for (i = 0; i < ETH_ALEN; i++) {
 515                dev->dev_addr[i] = SA_prom[i]
 516                        = inb_p(ioaddr + EN1_PHYS_SHIFT(i));
 517        }
 518#else
 519        for (i = 0; i < ETH_ALEN; i++) {
 520                dev->dev_addr[i] = SA_prom[i];
 521        }
 522#endif
 523
 524        pr_cont("%pM\n", dev->dev_addr);
 525
 526        ei_status.name = name;
 527        ei_status.tx_start_page = start_page;
 528        ei_status.stop_page = stop_page;
 529
 530        /* Use 16-bit mode only if this wasn't overridden by DCR_VAL */
 531        ei_status.word16 = (wordlength == 2 && (DCR_VAL & 0x01));
 532
 533        ei_status.rx_start_page = start_page + TX_PAGES;
 534#ifdef PACKETBUF_MEMSIZE
 535         /* Allow the packet buffer size to be overridden by know-it-alls. */
 536        ei_status.stop_page = ei_status.tx_start_page + PACKETBUF_MEMSIZE;
 537#endif
 538
 539        ei_status.reset_8390 = &ne_reset_8390;
 540        ei_status.block_input = &ne_block_input;
 541        ei_status.block_output = &ne_block_output;
 542        ei_status.get_8390_hdr = &ne_get_8390_hdr;
 543        ei_status.priv = 0;
 544
 545        dev->netdev_ops = &eip_netdev_ops;
 546        NS8390p_init(dev, 0);
 547
 548        ei_local->msg_enable = ne_msg_enable;
 549        ret = register_netdev(dev);
 550        if (ret)
 551                goto out_irq;
 552        netdev_info(dev, "%s found at %#lx, using IRQ %d.\n",
 553                    name, ioaddr, dev->irq);
 554        return 0;
 555
 556out_irq:
 557        free_irq(dev->irq, dev);
 558err_out:
 559        release_region(ioaddr, NE_IO_EXTENT);
 560        return ret;
 561}
 562
 563/* Hard reset the card.  This used to pause for the same period that a
 564   8390 reset command required, but that shouldn't be necessary. */
 565
 566static void ne_reset_8390(struct net_device *dev)
 567{
 568        unsigned long reset_start_time = jiffies;
 569        struct ei_device *ei_local = netdev_priv(dev);
 570
 571        netif_dbg(ei_local, hw, dev, "resetting the 8390 t=%ld...\n", jiffies);
 572
 573        /* DON'T change these to inb_p/outb_p or reset will fail on clones. */
 574        outb(inb(NE_BASE + NE_RESET), NE_BASE + NE_RESET);
 575
 576        ei_status.txing = 0;
 577        ei_status.dmaing = 0;
 578
 579        /* This check _should_not_ be necessary, omit eventually. */
 580        while ((inb_p(NE_BASE+EN0_ISR) & ENISR_RESET) == 0)
 581                if (time_after(jiffies, reset_start_time + 2*HZ/100)) {
 582                        netdev_err(dev, "ne_reset_8390() did not complete.\n");
 583                        break;
 584                }
 585        outb_p(ENISR_RESET, NE_BASE + EN0_ISR); /* Ack intr. */
 586}
 587
 588/* Grab the 8390 specific header. Similar to the block_input routine, but
 589   we don't need to be concerned with ring wrap as the header will be at
 590   the start of a page, so we optimize accordingly. */
 591
 592static void ne_get_8390_hdr(struct net_device *dev, struct e8390_pkt_hdr *hdr, int ring_page)
 593{
 594        int nic_base = dev->base_addr;
 595
 596        /* This *shouldn't* happen. If it does, it's the last thing you'll see */
 597
 598        if (ei_status.dmaing)
 599        {
 600                netdev_err(dev, "DMAing conflict in ne_get_8390_hdr "
 601                           "[DMAstat:%d][irqlock:%d].\n",
 602                           ei_status.dmaing, ei_status.irqlock);
 603                return;
 604        }
 605
 606        ei_status.dmaing |= 0x01;
 607        outb_p(E8390_NODMA+E8390_PAGE0+E8390_START, nic_base+ NE_CMD);
 608        outb_p(sizeof(struct e8390_pkt_hdr), nic_base + EN0_RCNTLO);
 609        outb_p(0, nic_base + EN0_RCNTHI);
 610        outb_p(0, nic_base + EN0_RSARLO);               /* On page boundary */
 611        outb_p(ring_page, nic_base + EN0_RSARHI);
 612        outb_p(E8390_RREAD+E8390_START, nic_base + NE_CMD);
 613
 614        if (ei_status.word16)
 615                insw(NE_BASE + NE_DATAPORT, hdr, sizeof(struct e8390_pkt_hdr)>>1);
 616        else
 617                insb(NE_BASE + NE_DATAPORT, hdr, sizeof(struct e8390_pkt_hdr));
 618
 619        outb_p(ENISR_RDC, nic_base + EN0_ISR);  /* Ack intr. */
 620        ei_status.dmaing &= ~0x01;
 621
 622        le16_to_cpus(&hdr->count);
 623}
 624
 625/* Block input and output, similar to the Crynwr packet driver.  If you
 626   are porting to a new ethercard, look at the packet driver source for hints.
 627   The NEx000 doesn't share the on-board packet memory -- you have to put
 628   the packet out through the "remote DMA" dataport using outb. */
 629
 630static void ne_block_input(struct net_device *dev, int count, struct sk_buff *skb, int ring_offset)
 631{
 632#ifdef NE_SANITY_CHECK
 633        int xfer_count = count;
 634        struct ei_device *ei_local = netdev_priv(dev);
 635#endif
 636        int nic_base = dev->base_addr;
 637        char *buf = skb->data;
 638
 639        /* This *shouldn't* happen. If it does, it's the last thing you'll see */
 640        if (ei_status.dmaing)
 641        {
 642                netdev_err(dev, "DMAing conflict in ne_block_input "
 643                           "[DMAstat:%d][irqlock:%d].\n",
 644                           ei_status.dmaing, ei_status.irqlock);
 645                return;
 646        }
 647        ei_status.dmaing |= 0x01;
 648        outb_p(E8390_NODMA+E8390_PAGE0+E8390_START, nic_base+ NE_CMD);
 649        outb_p(count & 0xff, nic_base + EN0_RCNTLO);
 650        outb_p(count >> 8, nic_base + EN0_RCNTHI);
 651        outb_p(ring_offset & 0xff, nic_base + EN0_RSARLO);
 652        outb_p(ring_offset >> 8, nic_base + EN0_RSARHI);
 653        outb_p(E8390_RREAD+E8390_START, nic_base + NE_CMD);
 654        if (ei_status.word16)
 655        {
 656                insw(NE_BASE + NE_DATAPORT,buf,count>>1);
 657                if (count & 0x01)
 658                {
 659                        buf[count-1] = inb(NE_BASE + NE_DATAPORT);
 660#ifdef NE_SANITY_CHECK
 661                        xfer_count++;
 662#endif
 663                }
 664        } else {
 665                insb(NE_BASE + NE_DATAPORT, buf, count);
 666        }
 667
 668#ifdef NE_SANITY_CHECK
 669        /* This was for the ALPHA version only, but enough people have
 670           been encountering problems so it is still here.  If you see
 671           this message you either 1) have a slightly incompatible clone
 672           or 2) have noise/speed problems with your bus. */
 673
 674        if (netif_msg_rx_status(ei_local))
 675        {
 676                /* DMA termination address check... */
 677                int addr, tries = 20;
 678                do {
 679                        /* DON'T check for 'inb_p(EN0_ISR) & ENISR_RDC' here
 680                           -- it's broken for Rx on some cards! */
 681                        int high = inb_p(nic_base + EN0_RSARHI);
 682                        int low = inb_p(nic_base + EN0_RSARLO);
 683                        addr = (high << 8) + low;
 684                        if (((ring_offset + xfer_count) & 0xff) == low)
 685                                break;
 686                } while (--tries > 0);
 687                if (tries <= 0)
 688                        netdev_warn(dev, "RX transfer address mismatch,"
 689                                    "%#4.4x (expected) vs. %#4.4x (actual).\n",
 690                                    ring_offset + xfer_count, addr);
 691        }
 692#endif
 693        outb_p(ENISR_RDC, nic_base + EN0_ISR);  /* Ack intr. */
 694        ei_status.dmaing &= ~0x01;
 695}
 696
 697static void ne_block_output(struct net_device *dev, int count,
 698                const unsigned char *buf, const int start_page)
 699{
 700        int nic_base = NE_BASE;
 701        unsigned long dma_start;
 702#ifdef NE_SANITY_CHECK
 703        int retries = 0;
 704        struct ei_device *ei_local = netdev_priv(dev);
 705#endif
 706
 707        /* Round the count up for word writes.  Do we need to do this?
 708           What effect will an odd byte count have on the 8390?
 709           I should check someday. */
 710
 711        if (ei_status.word16 && (count & 0x01))
 712                count++;
 713
 714        /* This *shouldn't* happen. If it does, it's the last thing you'll see */
 715        if (ei_status.dmaing)
 716        {
 717                netdev_err(dev, "DMAing conflict in ne_block_output."
 718                           "[DMAstat:%d][irqlock:%d]\n",
 719                           ei_status.dmaing, ei_status.irqlock);
 720                return;
 721        }
 722        ei_status.dmaing |= 0x01;
 723        /* We should already be in page 0, but to be safe... */
 724        outb_p(E8390_PAGE0+E8390_START+E8390_NODMA, nic_base + NE_CMD);
 725
 726#ifdef NE_SANITY_CHECK
 727retry:
 728#endif
 729
 730#ifdef NE8390_RW_BUGFIX
 731        /* Handle the read-before-write bug the same way as the
 732           Crynwr packet driver -- the NatSemi method doesn't work.
 733           Actually this doesn't always work either, but if you have
 734           problems with your NEx000 this is better than nothing! */
 735
 736        outb_p(0x42, nic_base + EN0_RCNTLO);
 737        outb_p(0x00,   nic_base + EN0_RCNTHI);
 738        outb_p(0x42, nic_base + EN0_RSARLO);
 739        outb_p(0x00, nic_base + EN0_RSARHI);
 740        outb_p(E8390_RREAD+E8390_START, nic_base + NE_CMD);
 741        /* Make certain that the dummy read has occurred. */
 742        udelay(6);
 743#endif
 744
 745        outb_p(ENISR_RDC, nic_base + EN0_ISR);
 746
 747        /* Now the normal output. */
 748        outb_p(count & 0xff, nic_base + EN0_RCNTLO);
 749        outb_p(count >> 8,   nic_base + EN0_RCNTHI);
 750        outb_p(0x00, nic_base + EN0_RSARLO);
 751        outb_p(start_page, nic_base + EN0_RSARHI);
 752
 753        outb_p(E8390_RWRITE+E8390_START, nic_base + NE_CMD);
 754        if (ei_status.word16) {
 755                outsw(NE_BASE + NE_DATAPORT, buf, count>>1);
 756        } else {
 757                outsb(NE_BASE + NE_DATAPORT, buf, count);
 758        }
 759
 760        dma_start = jiffies;
 761
 762#ifdef NE_SANITY_CHECK
 763        /* This was for the ALPHA version only, but enough people have
 764           been encountering problems so it is still here. */
 765
 766        if (netif_msg_tx_queued(ei_local))
 767        {
 768                /* DMA termination address check... */
 769                int addr, tries = 20;
 770                do {
 771                        int high = inb_p(nic_base + EN0_RSARHI);
 772                        int low = inb_p(nic_base + EN0_RSARLO);
 773                        addr = (high << 8) + low;
 774                        if ((start_page << 8) + count == addr)
 775                                break;
 776                } while (--tries > 0);
 777
 778                if (tries <= 0)
 779                {
 780                        netdev_warn(dev, "Tx packet transfer address mismatch,"
 781                                    "%#4.4x (expected) vs. %#4.4x (actual).\n",
 782                                    (start_page << 8) + count, addr);
 783                        if (retries++ == 0)
 784                                goto retry;
 785                }
 786        }
 787#endif
 788
 789        while ((inb_p(nic_base + EN0_ISR) & ENISR_RDC) == 0)
 790                if (time_after(jiffies, dma_start + 2*HZ/100)) {                /* 20ms */
 791                        netdev_warn(dev, "timeout waiting for Tx RDC.\n");
 792                        ne_reset_8390(dev);
 793                        NS8390p_init(dev, 1);
 794                        break;
 795                }
 796
 797        outb_p(ENISR_RDC, nic_base + EN0_ISR);  /* Ack intr. */
 798        ei_status.dmaing &= ~0x01;
 799}
 800
 801static int __init ne_drv_probe(struct platform_device *pdev)
 802{
 803        struct net_device *dev;
 804        int err, this_dev = pdev->id;
 805        struct resource *res;
 806
 807        dev = alloc_eip_netdev();
 808        if (!dev)
 809                return -ENOMEM;
 810
 811        /* ne.c doesn't populate resources in platform_device, but
 812         * rbtx4927_ne_init and rbtx4938_ne_init do register devices
 813         * with resources.
 814         */
 815        res = platform_get_resource(pdev, IORESOURCE_IO, 0);
 816        if (res) {
 817                dev->base_addr = res->start;
 818                dev->irq = platform_get_irq(pdev, 0);
 819        } else {
 820                if (this_dev < 0 || this_dev >= MAX_NE_CARDS) {
 821                        free_netdev(dev);
 822                        return -EINVAL;
 823                }
 824                dev->base_addr = io[this_dev];
 825                dev->irq = irq[this_dev];
 826                dev->mem_end = bad[this_dev];
 827        }
 828        SET_NETDEV_DEV(dev, &pdev->dev);
 829        err = do_ne_probe(dev);
 830        if (err) {
 831                free_netdev(dev);
 832                return err;
 833        }
 834        platform_set_drvdata(pdev, dev);
 835
 836        /* Update with any values found by probing, don't update if
 837         * resources were specified.
 838         */
 839        if (!res) {
 840                io[this_dev] = dev->base_addr;
 841                irq[this_dev] = dev->irq;
 842        }
 843        return 0;
 844}
 845
 846static int ne_drv_remove(struct platform_device *pdev)
 847{
 848        struct net_device *dev = platform_get_drvdata(pdev);
 849
 850        if (dev) {
 851                struct pnp_dev *idev = (struct pnp_dev *)ei_status.priv;
 852                netif_device_detach(dev);
 853                unregister_netdev(dev);
 854                if (idev)
 855                        pnp_device_detach(idev);
 856                /* Careful ne_drv_remove can be called twice, once from
 857                 * the platform_driver.remove and again when the
 858                 * platform_device is being removed.
 859                 */
 860                ei_status.priv = 0;
 861                free_irq(dev->irq, dev);
 862                release_region(dev->base_addr, NE_IO_EXTENT);
 863                free_netdev(dev);
 864        }
 865        return 0;
 866}
 867
 868/* Remove unused devices or all if true. */
 869static void ne_loop_rm_unreg(int all)
 870{
 871        int this_dev;
 872        struct platform_device *pdev;
 873        for (this_dev = 0; this_dev < MAX_NE_CARDS; this_dev++) {
 874                pdev = pdev_ne[this_dev];
 875                /* No network device == unused */
 876                if (pdev && (!platform_get_drvdata(pdev) || all)) {
 877                        ne_drv_remove(pdev);
 878                        platform_device_unregister(pdev);
 879                        pdev_ne[this_dev] = NULL;
 880                }
 881        }
 882}
 883
 884#ifdef CONFIG_PM
 885static int ne_drv_suspend(struct platform_device *pdev, pm_message_t state)
 886{
 887        struct net_device *dev = platform_get_drvdata(pdev);
 888
 889        if (netif_running(dev)) {
 890                struct pnp_dev *idev = (struct pnp_dev *)ei_status.priv;
 891                netif_device_detach(dev);
 892                if (idev)
 893                        pnp_stop_dev(idev);
 894        }
 895        return 0;
 896}
 897
 898static int ne_drv_resume(struct platform_device *pdev)
 899{
 900        struct net_device *dev = platform_get_drvdata(pdev);
 901
 902        if (netif_running(dev)) {
 903                struct pnp_dev *idev = (struct pnp_dev *)ei_status.priv;
 904                if (idev)
 905                        pnp_start_dev(idev);
 906                ne_reset_8390(dev);
 907                NS8390p_init(dev, 1);
 908                netif_device_attach(dev);
 909        }
 910        return 0;
 911}
 912#else
 913#define ne_drv_suspend NULL
 914#define ne_drv_resume NULL
 915#endif
 916
 917static struct platform_driver ne_driver = {
 918        .remove         = ne_drv_remove,
 919        .suspend        = ne_drv_suspend,
 920        .resume         = ne_drv_resume,
 921        .driver         = {
 922                .name   = DRV_NAME,
 923        },
 924};
 925
 926static void __init ne_add_devices(void)
 927{
 928        int this_dev;
 929        struct platform_device *pdev;
 930
 931        for (this_dev = 0; this_dev < MAX_NE_CARDS; this_dev++) {
 932                if (pdev_ne[this_dev])
 933                        continue;
 934                pdev = platform_device_register_simple(
 935                        DRV_NAME, this_dev, NULL, 0);
 936                if (IS_ERR(pdev))
 937                        continue;
 938                pdev_ne[this_dev] = pdev;
 939        }
 940}
 941
 942#ifdef MODULE
 943int __init init_module(void)
 944{
 945        int retval;
 946        ne_add_devices();
 947        retval = platform_driver_probe(&ne_driver, ne_drv_probe);
 948        if (retval) {
 949                if (io[0] == 0)
 950                        pr_notice("ne.c: You must supply \"io=0xNNN\""
 951                               " value(s) for ISA cards.\n");
 952                ne_loop_rm_unreg(1);
 953                return retval;
 954        }
 955
 956        /* Unregister unused platform_devices. */
 957        ne_loop_rm_unreg(0);
 958        return retval;
 959}
 960#else /* MODULE */
 961static int __init ne_init(void)
 962{
 963        int retval = platform_driver_probe(&ne_driver, ne_drv_probe);
 964
 965        /* Unregister unused platform_devices. */
 966        ne_loop_rm_unreg(0);
 967        return retval;
 968}
 969module_init(ne_init);
 970
 971struct net_device * __init ne_probe(int unit)
 972{
 973        int this_dev;
 974        struct net_device *dev;
 975
 976        /* Find an empty slot, that is no net_device and zero io port. */
 977        this_dev = 0;
 978        while ((pdev_ne[this_dev] && platform_get_drvdata(pdev_ne[this_dev])) ||
 979                io[this_dev]) {
 980                if (++this_dev == MAX_NE_CARDS)
 981                        return ERR_PTR(-ENOMEM);
 982        }
 983
 984        /* Get irq, io from kernel command line */
 985        dev = alloc_eip_netdev();
 986        if (!dev)
 987                return ERR_PTR(-ENOMEM);
 988
 989        sprintf(dev->name, "eth%d", unit);
 990        netdev_boot_setup_check(dev);
 991
 992        io[this_dev] = dev->base_addr;
 993        irq[this_dev] = dev->irq;
 994        bad[this_dev] = dev->mem_end;
 995
 996        free_netdev(dev);
 997
 998        ne_add_devices();
 999
1000        /* return the first device found */
1001        for (this_dev = 0; this_dev < MAX_NE_CARDS; this_dev++) {
1002                if (pdev_ne[this_dev]) {
1003                        dev = platform_get_drvdata(pdev_ne[this_dev]);
1004                        if (dev)
1005                                return dev;
1006                }
1007        }
1008
1009        return ERR_PTR(-ENODEV);
1010}
1011#endif /* MODULE */
1012
1013static void __exit ne_exit(void)
1014{
1015        platform_driver_unregister(&ne_driver);
1016        ne_loop_rm_unreg(1);
1017}
1018module_exit(ne_exit);
1019