linux/drivers/net/ethernet/8390/ne2k-pci.c
<<
>>
Prefs
   1/* ne2k-pci.c: A NE2000 clone on PCI bus driver for Linux. */
   2/*
   3        A Linux device driver for PCI NE2000 clones.
   4
   5        Authors and other copyright holders:
   6        1992-2000 by Donald Becker, NE2000 core and various modifications.
   7        1995-1998 by Paul Gortmaker, core modifications and PCI support.
   8        Copyright 1993 assigned to the United States Government as represented
   9        by the Director, National Security Agency.
  10
  11        This software may be used and distributed according to the terms of
  12        the GNU General Public License (GPL), incorporated herein by reference.
  13        Drivers based on or derived from this code fall under the GPL and must
  14        retain the authorship, copyright and license notice.  This file is not
  15        a complete program and may only be used when the entire operating
  16        system is licensed under the GPL.
  17
  18        The author may be reached as becker@scyld.com, or C/O
  19        Scyld Computing Corporation
  20        410 Severn Ave., Suite 210
  21        Annapolis MD 21403
  22
  23        Issues remaining:
  24        People are making PCI ne2000 clones! Oh the horror, the horror...
  25        Limited full-duplex support.
  26*/
  27
  28#define DRV_NAME        "ne2k-pci"
  29#define DRV_VERSION     "1.03"
  30#define DRV_RELDATE     "9/22/2003"
  31
  32
  33/* The user-configurable values.
  34   These may be modified when a driver module is loaded.*/
  35
  36static int debug = 1;                   /* 1 normal messages, 0 quiet .. 7 verbose. */
  37
  38#define MAX_UNITS 8                             /* More are supported, limit only on options */
  39/* Used to pass the full-duplex flag, etc. */
  40static int full_duplex[MAX_UNITS];
  41static int options[MAX_UNITS];
  42
  43/* Force a non std. amount of memory.  Units are 256 byte pages. */
  44/* #define PACKETBUF_MEMSIZE    0x40 */
  45
  46
  47#include <linux/module.h>
  48#include <linux/kernel.h>
  49#include <linux/errno.h>
  50#include <linux/pci.h>
  51#include <linux/init.h>
  52#include <linux/interrupt.h>
  53#include <linux/ethtool.h>
  54#include <linux/netdevice.h>
  55#include <linux/etherdevice.h>
  56
  57#include <asm/io.h>
  58#include <asm/irq.h>
  59#include <asm/uaccess.h>
  60
  61#include "8390.h"
  62
  63/* These identify the driver base version and may not be removed. */
  64static const char version[] __devinitconst =
  65        KERN_INFO DRV_NAME ".c:v" DRV_VERSION " " DRV_RELDATE
  66        " D. Becker/P. Gortmaker\n";
  67
  68#if defined(__powerpc__)
  69#define inl_le(addr)  le32_to_cpu(inl(addr))
  70#define inw_le(addr)  le16_to_cpu(inw(addr))
  71#endif
  72
  73#define PFX DRV_NAME ": "
  74
  75MODULE_AUTHOR("Donald Becker / Paul Gortmaker");
  76MODULE_DESCRIPTION("PCI NE2000 clone driver");
  77MODULE_LICENSE("GPL");
  78
  79module_param(debug, int, 0);
  80module_param_array(options, int, NULL, 0);
  81module_param_array(full_duplex, int, NULL, 0);
  82MODULE_PARM_DESC(debug, "debug level (1-2)");
  83MODULE_PARM_DESC(options, "Bit 5: full duplex");
  84MODULE_PARM_DESC(full_duplex, "full duplex setting(s) (1)");
  85
  86/* Some defines that people can play with if so inclined. */
  87
  88/* Use 32 bit data-movement operations instead of 16 bit. */
  89#define USE_LONGIO
  90
  91/* Do we implement the read before write bugfix ? */
  92/* #define NE_RW_BUGFIX */
  93
  94/* Flags.  We rename an existing ei_status field to store flags! */
  95/* Thus only the low 8 bits are usable for non-init-time flags. */
  96#define ne2k_flags reg0
  97enum {
  98        ONLY_16BIT_IO=8, ONLY_32BIT_IO=4,       /* Chip can do only 16/32-bit xfers. */
  99        FORCE_FDX=0x20,                                         /* User override. */
 100        REALTEK_FDX=0x40, HOLTEK_FDX=0x80,
 101        STOP_PG_0x60=0x100,
 102};
 103
 104enum ne2k_pci_chipsets {
 105        CH_RealTek_RTL_8029 = 0,
 106        CH_Winbond_89C940,
 107        CH_Compex_RL2000,
 108        CH_KTI_ET32P2,
 109        CH_NetVin_NV5000SC,
 110        CH_Via_86C926,
 111        CH_SureCom_NE34,
 112        CH_Winbond_W89C940F,
 113        CH_Holtek_HT80232,
 114        CH_Holtek_HT80229,
 115        CH_Winbond_89C940_8c4a,
 116};
 117
 118
 119static struct {
 120        char *name;
 121        int flags;
 122} pci_clone_list[] __devinitdata = {
 123        {"RealTek RTL-8029", REALTEK_FDX},
 124        {"Winbond 89C940", 0},
 125        {"Compex RL2000", 0},
 126        {"KTI ET32P2", 0},
 127        {"NetVin NV5000SC", 0},
 128        {"Via 86C926", ONLY_16BIT_IO},
 129        {"SureCom NE34", 0},
 130        {"Winbond W89C940F", 0},
 131        {"Holtek HT80232", ONLY_16BIT_IO | HOLTEK_FDX},
 132        {"Holtek HT80229", ONLY_32BIT_IO | HOLTEK_FDX | STOP_PG_0x60 },
 133        {"Winbond W89C940(misprogrammed)", 0},
 134        {NULL,}
 135};
 136
 137
 138static DEFINE_PCI_DEVICE_TABLE(ne2k_pci_tbl) = {
 139        { 0x10ec, 0x8029, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CH_RealTek_RTL_8029 },
 140        { 0x1050, 0x0940, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CH_Winbond_89C940 },
 141        { 0x11f6, 0x1401, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CH_Compex_RL2000 },
 142        { 0x8e2e, 0x3000, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CH_KTI_ET32P2 },
 143        { 0x4a14, 0x5000, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CH_NetVin_NV5000SC },
 144        { 0x1106, 0x0926, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CH_Via_86C926 },
 145        { 0x10bd, 0x0e34, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CH_SureCom_NE34 },
 146        { 0x1050, 0x5a5a, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CH_Winbond_W89C940F },
 147        { 0x12c3, 0x0058, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CH_Holtek_HT80232 },
 148        { 0x12c3, 0x5598, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CH_Holtek_HT80229 },
 149        { 0x8c4a, 0x1980, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CH_Winbond_89C940_8c4a },
 150        { 0, }
 151};
 152MODULE_DEVICE_TABLE(pci, ne2k_pci_tbl);
 153
 154
 155/* ---- No user-serviceable parts below ---- */
 156
 157#define NE_BASE  (dev->base_addr)
 158#define NE_CMD          0x00
 159#define NE_DATAPORT     0x10    /* NatSemi-defined port window offset. */
 160#define NE_RESET        0x1f    /* Issue a read to reset, a write to clear. */
 161#define NE_IO_EXTENT    0x20
 162
 163#define NESM_START_PG   0x40    /* First page of TX buffer */
 164#define NESM_STOP_PG    0x80    /* Last page +1 of RX ring */
 165
 166
 167static int ne2k_pci_open(struct net_device *dev);
 168static int ne2k_pci_close(struct net_device *dev);
 169
 170static void ne2k_pci_reset_8390(struct net_device *dev);
 171static void ne2k_pci_get_8390_hdr(struct net_device *dev, struct e8390_pkt_hdr *hdr,
 172                          int ring_page);
 173static void ne2k_pci_block_input(struct net_device *dev, int count,
 174                          struct sk_buff *skb, int ring_offset);
 175static void ne2k_pci_block_output(struct net_device *dev, const int count,
 176                const unsigned char *buf, const int start_page);
 177static const struct ethtool_ops ne2k_pci_ethtool_ops;
 178
 179
 180
 181/* There is no room in the standard 8390 structure for extra info we need,
 182   so we build a meta/outer-wrapper structure.. */
 183struct ne2k_pci_card {
 184        struct net_device *dev;
 185        struct pci_dev *pci_dev;
 186};
 187
 188
 189
 190/*
 191  NEx000-clone boards have a Station Address (SA) PROM (SAPROM) in the packet
 192  buffer memory space.  By-the-spec NE2000 clones have 0x57,0x57 in bytes
 193  0x0e,0x0f of the SAPROM, while other supposed NE2000 clones must be
 194  detected by their SA prefix.
 195
 196  Reading the SAPROM from a word-wide card with the 8390 set in byte-wide
 197  mode results in doubled values, which can be detected and compensated for.
 198
 199  The probe is also responsible for initializing the card and filling
 200  in the 'dev' and 'ei_status' structures.
 201*/
 202
 203static const struct net_device_ops ne2k_netdev_ops = {
 204        .ndo_open               = ne2k_pci_open,
 205        .ndo_stop               = ne2k_pci_close,
 206        .ndo_start_xmit         = ei_start_xmit,
 207        .ndo_tx_timeout         = ei_tx_timeout,
 208        .ndo_get_stats          = ei_get_stats,
 209        .ndo_set_rx_mode        = ei_set_multicast_list,
 210        .ndo_validate_addr      = eth_validate_addr,
 211        .ndo_set_mac_address    = eth_mac_addr,
 212        .ndo_change_mtu         = eth_change_mtu,
 213#ifdef CONFIG_NET_POLL_CONTROLLER
 214        .ndo_poll_controller = ei_poll,
 215#endif
 216};
 217
 218static int __devinit ne2k_pci_init_one (struct pci_dev *pdev,
 219                                     const struct pci_device_id *ent)
 220{
 221        struct net_device *dev;
 222        int i;
 223        unsigned char SA_prom[32];
 224        int start_page, stop_page;
 225        int irq, reg0, chip_idx = ent->driver_data;
 226        static unsigned int fnd_cnt;
 227        long ioaddr;
 228        int flags = pci_clone_list[chip_idx].flags;
 229
 230/* when built into the kernel, we only print version if device is found */
 231#ifndef MODULE
 232        static int printed_version;
 233        if (!printed_version++)
 234                printk(version);
 235#endif
 236
 237        fnd_cnt++;
 238
 239        i = pci_enable_device (pdev);
 240        if (i)
 241                return i;
 242
 243        ioaddr = pci_resource_start (pdev, 0);
 244        irq = pdev->irq;
 245
 246        if (!ioaddr || ((pci_resource_flags (pdev, 0) & IORESOURCE_IO) == 0)) {
 247                dev_err(&pdev->dev, "no I/O resource at PCI BAR #0\n");
 248                return -ENODEV;
 249        }
 250
 251        if (request_region (ioaddr, NE_IO_EXTENT, DRV_NAME) == NULL) {
 252                dev_err(&pdev->dev, "I/O resource 0x%x @ 0x%lx busy\n",
 253                        NE_IO_EXTENT, ioaddr);
 254                return -EBUSY;
 255        }
 256
 257        reg0 = inb(ioaddr);
 258        if (reg0 == 0xFF)
 259                goto err_out_free_res;
 260
 261        /* Do a preliminary verification that we have a 8390. */
 262        {
 263                int regd;
 264                outb(E8390_NODMA+E8390_PAGE1+E8390_STOP, ioaddr + E8390_CMD);
 265                regd = inb(ioaddr + 0x0d);
 266                outb(0xff, ioaddr + 0x0d);
 267                outb(E8390_NODMA+E8390_PAGE0, ioaddr + E8390_CMD);
 268                inb(ioaddr + EN0_COUNTER0); /* Clear the counter by reading. */
 269                if (inb(ioaddr + EN0_COUNTER0) != 0) {
 270                        outb(reg0, ioaddr);
 271                        outb(regd, ioaddr + 0x0d);      /* Restore the old values. */
 272                        goto err_out_free_res;
 273                }
 274        }
 275
 276        /* Allocate net_device, dev->priv; fill in 8390 specific dev fields. */
 277        dev = alloc_ei_netdev();
 278        if (!dev) {
 279                dev_err(&pdev->dev, "cannot allocate ethernet device\n");
 280                goto err_out_free_res;
 281        }
 282        dev->netdev_ops = &ne2k_netdev_ops;
 283
 284        SET_NETDEV_DEV(dev, &pdev->dev);
 285
 286        /* Reset card. Who knows what dain-bramaged state it was left in. */
 287        {
 288                unsigned long reset_start_time = jiffies;
 289
 290                outb(inb(ioaddr + NE_RESET), ioaddr + NE_RESET);
 291
 292                /* This looks like a horrible timing loop, but it should never take
 293                   more than a few cycles.
 294                */
 295                while ((inb(ioaddr + EN0_ISR) & ENISR_RESET) == 0)
 296                        /* Limit wait: '2' avoids jiffy roll-over. */
 297                        if (jiffies - reset_start_time > 2) {
 298                                dev_err(&pdev->dev,
 299                                        "Card failure (no reset ack).\n");
 300                                goto err_out_free_netdev;
 301                        }
 302
 303                outb(0xff, ioaddr + EN0_ISR);           /* Ack all intr. */
 304        }
 305
 306        /* Read the 16 bytes of station address PROM.
 307           We must first initialize registers, similar to NS8390_init(eifdev, 0).
 308           We can't reliably read the SAPROM address without this.
 309           (I learned the hard way!). */
 310        {
 311                struct {unsigned char value, offset; } program_seq[] = {
 312                        {E8390_NODMA+E8390_PAGE0+E8390_STOP, E8390_CMD}, /* Select page 0*/
 313                        {0x49,  EN0_DCFG},      /* Set word-wide access. */
 314                        {0x00,  EN0_RCNTLO},    /* Clear the count regs. */
 315                        {0x00,  EN0_RCNTHI},
 316                        {0x00,  EN0_IMR},       /* Mask completion irq. */
 317                        {0xFF,  EN0_ISR},
 318                        {E8390_RXOFF, EN0_RXCR},        /* 0x20  Set to monitor */
 319                        {E8390_TXOFF, EN0_TXCR},        /* 0x02  and loopback mode. */
 320                        {32,    EN0_RCNTLO},
 321                        {0x00,  EN0_RCNTHI},
 322                        {0x00,  EN0_RSARLO},    /* DMA starting at 0x0000. */
 323                        {0x00,  EN0_RSARHI},
 324                        {E8390_RREAD+E8390_START, E8390_CMD},
 325                };
 326                for (i = 0; i < ARRAY_SIZE(program_seq); i++)
 327                        outb(program_seq[i].value, ioaddr + program_seq[i].offset);
 328
 329        }
 330
 331        /* Note: all PCI cards have at least 16 bit access, so we don't have
 332           to check for 8 bit cards.  Most cards permit 32 bit access. */
 333        if (flags & ONLY_32BIT_IO) {
 334                for (i = 0; i < 4 ; i++)
 335                        ((u32 *)SA_prom)[i] = le32_to_cpu(inl(ioaddr + NE_DATAPORT));
 336        } else
 337                for(i = 0; i < 32 /*sizeof(SA_prom)*/; i++)
 338                        SA_prom[i] = inb(ioaddr + NE_DATAPORT);
 339
 340        /* We always set the 8390 registers for word mode. */
 341        outb(0x49, ioaddr + EN0_DCFG);
 342        start_page = NESM_START_PG;
 343
 344        stop_page = flags & STOP_PG_0x60 ? 0x60 : NESM_STOP_PG;
 345
 346        /* Set up the rest of the parameters. */
 347        dev->irq = irq;
 348        dev->base_addr = ioaddr;
 349        pci_set_drvdata(pdev, dev);
 350
 351        ei_status.name = pci_clone_list[chip_idx].name;
 352        ei_status.tx_start_page = start_page;
 353        ei_status.stop_page = stop_page;
 354        ei_status.word16 = 1;
 355        ei_status.ne2k_flags = flags;
 356        if (fnd_cnt < MAX_UNITS) {
 357                if (full_duplex[fnd_cnt] > 0  ||  (options[fnd_cnt] & FORCE_FDX))
 358                        ei_status.ne2k_flags |= FORCE_FDX;
 359        }
 360
 361        ei_status.rx_start_page = start_page + TX_PAGES;
 362#ifdef PACKETBUF_MEMSIZE
 363        /* Allow the packet buffer size to be overridden by know-it-alls. */
 364        ei_status.stop_page = ei_status.tx_start_page + PACKETBUF_MEMSIZE;
 365#endif
 366
 367        ei_status.reset_8390 = &ne2k_pci_reset_8390;
 368        ei_status.block_input = &ne2k_pci_block_input;
 369        ei_status.block_output = &ne2k_pci_block_output;
 370        ei_status.get_8390_hdr = &ne2k_pci_get_8390_hdr;
 371        ei_status.priv = (unsigned long) pdev;
 372
 373        dev->ethtool_ops = &ne2k_pci_ethtool_ops;
 374        NS8390_init(dev, 0);
 375
 376        memcpy(dev->dev_addr, SA_prom, dev->addr_len);
 377        memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len);
 378
 379        i = register_netdev(dev);
 380        if (i)
 381                goto err_out_free_netdev;
 382
 383        printk("%s: %s found at %#lx, IRQ %d, %pM.\n",
 384               dev->name, pci_clone_list[chip_idx].name, ioaddr, dev->irq,
 385               dev->dev_addr);
 386
 387        return 0;
 388
 389err_out_free_netdev:
 390        free_netdev (dev);
 391err_out_free_res:
 392        release_region (ioaddr, NE_IO_EXTENT);
 393        pci_set_drvdata (pdev, NULL);
 394        return -ENODEV;
 395
 396}
 397
 398/*
 399 * Magic incantation sequence for full duplex on the supported cards.
 400 */
 401static inline int set_realtek_fdx(struct net_device *dev)
 402{
 403        long ioaddr = dev->base_addr;
 404
 405        outb(0xC0 + E8390_NODMA, ioaddr + NE_CMD); /* Page 3 */
 406        outb(0xC0, ioaddr + 0x01); /* Enable writes to CONFIG3 */
 407        outb(0x40, ioaddr + 0x06); /* Enable full duplex */
 408        outb(0x00, ioaddr + 0x01); /* Disable writes to CONFIG3 */
 409        outb(E8390_PAGE0 + E8390_NODMA, ioaddr + NE_CMD); /* Page 0 */
 410        return 0;
 411}
 412
 413static inline int set_holtek_fdx(struct net_device *dev)
 414{
 415        long ioaddr = dev->base_addr;
 416
 417        outb(inb(ioaddr + 0x20) | 0x80, ioaddr + 0x20);
 418        return 0;
 419}
 420
 421static int ne2k_pci_set_fdx(struct net_device *dev)
 422{
 423        if (ei_status.ne2k_flags & REALTEK_FDX)
 424                return set_realtek_fdx(dev);
 425        else if (ei_status.ne2k_flags & HOLTEK_FDX)
 426                return set_holtek_fdx(dev);
 427
 428        return -EOPNOTSUPP;
 429}
 430
 431static int ne2k_pci_open(struct net_device *dev)
 432{
 433        int ret = request_irq(dev->irq, ei_interrupt, IRQF_SHARED, dev->name, dev);
 434        if (ret)
 435                return ret;
 436
 437        if (ei_status.ne2k_flags & FORCE_FDX)
 438                ne2k_pci_set_fdx(dev);
 439
 440        ei_open(dev);
 441        return 0;
 442}
 443
 444static int ne2k_pci_close(struct net_device *dev)
 445{
 446        ei_close(dev);
 447        free_irq(dev->irq, dev);
 448        return 0;
 449}
 450
 451/* Hard reset the card.  This used to pause for the same period that a
 452   8390 reset command required, but that shouldn't be necessary. */
 453static void ne2k_pci_reset_8390(struct net_device *dev)
 454{
 455        unsigned long reset_start_time = jiffies;
 456
 457        if (debug > 1) printk("%s: Resetting the 8390 t=%ld...",
 458                                                  dev->name, jiffies);
 459
 460        outb(inb(NE_BASE + NE_RESET), NE_BASE + NE_RESET);
 461
 462        ei_status.txing = 0;
 463        ei_status.dmaing = 0;
 464
 465        /* This check _should_not_ be necessary, omit eventually. */
 466        while ((inb(NE_BASE+EN0_ISR) & ENISR_RESET) == 0)
 467                if (jiffies - reset_start_time > 2) {
 468                        printk("%s: ne2k_pci_reset_8390() did not complete.\n", dev->name);
 469                        break;
 470                }
 471        outb(ENISR_RESET, NE_BASE + EN0_ISR);   /* Ack intr. */
 472}
 473
 474/* Grab the 8390 specific header. Similar to the block_input routine, but
 475   we don't need to be concerned with ring wrap as the header will be at
 476   the start of a page, so we optimize accordingly. */
 477
 478static void ne2k_pci_get_8390_hdr(struct net_device *dev, struct e8390_pkt_hdr *hdr, int ring_page)
 479{
 480
 481        long nic_base = dev->base_addr;
 482
 483        /* This *shouldn't* happen. If it does, it's the last thing you'll see */
 484        if (ei_status.dmaing) {
 485                printk("%s: DMAing conflict in ne2k_pci_get_8390_hdr "
 486                           "[DMAstat:%d][irqlock:%d].\n",
 487                           dev->name, ei_status.dmaing, ei_status.irqlock);
 488                return;
 489        }
 490
 491        ei_status.dmaing |= 0x01;
 492        outb(E8390_NODMA+E8390_PAGE0+E8390_START, nic_base+ NE_CMD);
 493        outb(sizeof(struct e8390_pkt_hdr), nic_base + EN0_RCNTLO);
 494        outb(0, nic_base + EN0_RCNTHI);
 495        outb(0, nic_base + EN0_RSARLO);         /* On page boundary */
 496        outb(ring_page, nic_base + EN0_RSARHI);
 497        outb(E8390_RREAD+E8390_START, nic_base + NE_CMD);
 498
 499        if (ei_status.ne2k_flags & ONLY_16BIT_IO) {
 500                insw(NE_BASE + NE_DATAPORT, hdr, sizeof(struct e8390_pkt_hdr)>>1);
 501        } else {
 502                *(u32*)hdr = le32_to_cpu(inl(NE_BASE + NE_DATAPORT));
 503                le16_to_cpus(&hdr->count);
 504        }
 505
 506        outb(ENISR_RDC, nic_base + EN0_ISR);    /* Ack intr. */
 507        ei_status.dmaing &= ~0x01;
 508}
 509
 510/* Block input and output, similar to the Crynwr packet driver.  If you
 511   are porting to a new ethercard, look at the packet driver source for hints.
 512   The NEx000 doesn't share the on-board packet memory -- you have to put
 513   the packet out through the "remote DMA" dataport using outb. */
 514
 515static void ne2k_pci_block_input(struct net_device *dev, int count,
 516                                 struct sk_buff *skb, int ring_offset)
 517{
 518        long nic_base = dev->base_addr;
 519        char *buf = skb->data;
 520
 521        /* This *shouldn't* happen. If it does, it's the last thing you'll see */
 522        if (ei_status.dmaing) {
 523                printk("%s: DMAing conflict in ne2k_pci_block_input "
 524                           "[DMAstat:%d][irqlock:%d].\n",
 525                           dev->name, ei_status.dmaing, ei_status.irqlock);
 526                return;
 527        }
 528        ei_status.dmaing |= 0x01;
 529        if (ei_status.ne2k_flags & ONLY_32BIT_IO)
 530                count = (count + 3) & 0xFFFC;
 531        outb(E8390_NODMA+E8390_PAGE0+E8390_START, nic_base+ NE_CMD);
 532        outb(count & 0xff, nic_base + EN0_RCNTLO);
 533        outb(count >> 8, nic_base + EN0_RCNTHI);
 534        outb(ring_offset & 0xff, nic_base + EN0_RSARLO);
 535        outb(ring_offset >> 8, nic_base + EN0_RSARHI);
 536        outb(E8390_RREAD+E8390_START, nic_base + NE_CMD);
 537
 538        if (ei_status.ne2k_flags & ONLY_16BIT_IO) {
 539                insw(NE_BASE + NE_DATAPORT,buf,count>>1);
 540                if (count & 0x01) {
 541                        buf[count-1] = inb(NE_BASE + NE_DATAPORT);
 542                }
 543        } else {
 544                insl(NE_BASE + NE_DATAPORT, buf, count>>2);
 545                if (count & 3) {
 546                        buf += count & ~3;
 547                        if (count & 2) {
 548                                __le16 *b = (__le16 *)buf;
 549
 550                                *b++ = cpu_to_le16(inw(NE_BASE + NE_DATAPORT));
 551                                buf = (char *)b;
 552                        }
 553                        if (count & 1)
 554                                *buf = inb(NE_BASE + NE_DATAPORT);
 555                }
 556        }
 557
 558        outb(ENISR_RDC, nic_base + EN0_ISR);    /* Ack intr. */
 559        ei_status.dmaing &= ~0x01;
 560}
 561
 562static void ne2k_pci_block_output(struct net_device *dev, int count,
 563                                  const unsigned char *buf, const int start_page)
 564{
 565        long nic_base = NE_BASE;
 566        unsigned long dma_start;
 567
 568        /* On little-endian it's always safe to round the count up for
 569           word writes. */
 570        if (ei_status.ne2k_flags & ONLY_32BIT_IO)
 571                count = (count + 3) & 0xFFFC;
 572        else
 573                if (count & 0x01)
 574                        count++;
 575
 576        /* This *shouldn't* happen. If it does, it's the last thing you'll see */
 577        if (ei_status.dmaing) {
 578                printk("%s: DMAing conflict in ne2k_pci_block_output."
 579                           "[DMAstat:%d][irqlock:%d]\n",
 580                           dev->name, ei_status.dmaing, ei_status.irqlock);
 581                return;
 582        }
 583        ei_status.dmaing |= 0x01;
 584        /* We should already be in page 0, but to be safe... */
 585        outb(E8390_PAGE0+E8390_START+E8390_NODMA, nic_base + NE_CMD);
 586
 587#ifdef NE8390_RW_BUGFIX
 588        /* Handle the read-before-write bug the same way as the
 589           Crynwr packet driver -- the NatSemi method doesn't work.
 590           Actually this doesn't always work either, but if you have
 591           problems with your NEx000 this is better than nothing! */
 592        outb(0x42, nic_base + EN0_RCNTLO);
 593        outb(0x00, nic_base + EN0_RCNTHI);
 594        outb(0x42, nic_base + EN0_RSARLO);
 595        outb(0x00, nic_base + EN0_RSARHI);
 596        outb(E8390_RREAD+E8390_START, nic_base + NE_CMD);
 597#endif
 598        outb(ENISR_RDC, nic_base + EN0_ISR);
 599
 600   /* Now the normal output. */
 601        outb(count & 0xff, nic_base + EN0_RCNTLO);
 602        outb(count >> 8,   nic_base + EN0_RCNTHI);
 603        outb(0x00, nic_base + EN0_RSARLO);
 604        outb(start_page, nic_base + EN0_RSARHI);
 605        outb(E8390_RWRITE+E8390_START, nic_base + NE_CMD);
 606        if (ei_status.ne2k_flags & ONLY_16BIT_IO) {
 607                outsw(NE_BASE + NE_DATAPORT, buf, count>>1);
 608        } else {
 609                outsl(NE_BASE + NE_DATAPORT, buf, count>>2);
 610                if (count & 3) {
 611                        buf += count & ~3;
 612                        if (count & 2) {
 613                                __le16 *b = (__le16 *)buf;
 614
 615                                outw(le16_to_cpu(*b++), NE_BASE + NE_DATAPORT);
 616                                buf = (char *)b;
 617                        }
 618                }
 619        }
 620
 621        dma_start = jiffies;
 622
 623        while ((inb(nic_base + EN0_ISR) & ENISR_RDC) == 0)
 624                if (jiffies - dma_start > 2) {                  /* Avoid clock roll-over. */
 625                        printk(KERN_WARNING "%s: timeout waiting for Tx RDC.\n", dev->name);
 626                        ne2k_pci_reset_8390(dev);
 627                        NS8390_init(dev,1);
 628                        break;
 629                }
 630
 631        outb(ENISR_RDC, nic_base + EN0_ISR);    /* Ack intr. */
 632        ei_status.dmaing &= ~0x01;
 633}
 634
 635static void ne2k_pci_get_drvinfo(struct net_device *dev,
 636                                 struct ethtool_drvinfo *info)
 637{
 638        struct ei_device *ei = netdev_priv(dev);
 639        struct pci_dev *pci_dev = (struct pci_dev *) ei->priv;
 640
 641        strlcpy(info->driver, DRV_NAME, sizeof(info->driver));
 642        strlcpy(info->version, DRV_VERSION, sizeof(info->version));
 643        strlcpy(info->bus_info, pci_name(pci_dev), sizeof(info->bus_info));
 644}
 645
 646static const struct ethtool_ops ne2k_pci_ethtool_ops = {
 647        .get_drvinfo            = ne2k_pci_get_drvinfo,
 648};
 649
 650static void __devexit ne2k_pci_remove_one (struct pci_dev *pdev)
 651{
 652        struct net_device *dev = pci_get_drvdata(pdev);
 653
 654        BUG_ON(!dev);
 655        unregister_netdev(dev);
 656        release_region(dev->base_addr, NE_IO_EXTENT);
 657        free_netdev(dev);
 658        pci_disable_device(pdev);
 659        pci_set_drvdata(pdev, NULL);
 660}
 661
 662#ifdef CONFIG_PM
 663static int ne2k_pci_suspend (struct pci_dev *pdev, pm_message_t state)
 664{
 665        struct net_device *dev = pci_get_drvdata (pdev);
 666
 667        netif_device_detach(dev);
 668        pci_save_state(pdev);
 669        pci_disable_device(pdev);
 670        pci_set_power_state(pdev, pci_choose_state(pdev, state));
 671
 672        return 0;
 673}
 674
 675static int ne2k_pci_resume (struct pci_dev *pdev)
 676{
 677        struct net_device *dev = pci_get_drvdata (pdev);
 678        int rc;
 679
 680        pci_set_power_state(pdev, 0);
 681        pci_restore_state(pdev);
 682
 683        rc = pci_enable_device(pdev);
 684        if (rc)
 685                return rc;
 686
 687        NS8390_init(dev, 1);
 688        netif_device_attach(dev);
 689
 690        return 0;
 691}
 692
 693#endif /* CONFIG_PM */
 694
 695
 696static struct pci_driver ne2k_driver = {
 697        .name           = DRV_NAME,
 698        .probe          = ne2k_pci_init_one,
 699        .remove         = __devexit_p(ne2k_pci_remove_one),
 700        .id_table       = ne2k_pci_tbl,
 701#ifdef CONFIG_PM
 702        .suspend        = ne2k_pci_suspend,
 703        .resume         = ne2k_pci_resume,
 704#endif /* CONFIG_PM */
 705
 706};
 707
 708
 709static int __init ne2k_pci_init(void)
 710{
 711/* when a module, this is printed whether or not devices are found in probe */
 712#ifdef MODULE
 713        printk(version);
 714#endif
 715        return pci_register_driver(&ne2k_driver);
 716}
 717
 718
 719static void __exit ne2k_pci_cleanup(void)
 720{
 721        pci_unregister_driver (&ne2k_driver);
 722}
 723
 724module_init(ne2k_pci_init);
 725module_exit(ne2k_pci_cleanup);
 726