linux/drivers/net/pcmcia/axnet_cs.c
<<
>>
Prefs
   1/*======================================================================
   2
   3    A PCMCIA ethernet driver for Asix AX88190-based cards
   4
   5    The Asix AX88190 is a NS8390-derived chipset with a few nasty
   6    idiosyncracies that make it very inconvenient to support with a
   7    standard 8390 driver.  This driver is based on pcnet_cs, with the
   8    tweaked 8390 code grafted on the end.  Much of what I did was to
   9    clean up and update a similar driver supplied by Asix, which was
  10    adapted by William Lee, william@asix.com.tw.
  11
  12    Copyright (C) 2001 David A. Hinds -- dahinds@users.sourceforge.net
  13
  14    axnet_cs.c 1.28 2002/06/29 06:27:37
  15
  16    The network driver code is based on Donald Becker's NE2000 code:
  17
  18    Written 1992,1993 by Donald Becker.
  19    Copyright 1993 United States Government as represented by the
  20    Director, National Security Agency.  This software may be used and
  21    distributed according to the terms of the GNU General Public License,
  22    incorporated herein by reference.
  23    Donald Becker may be reached at becker@scyld.com
  24
  25======================================================================*/
  26
  27#include <linux/kernel.h>
  28#include <linux/module.h>
  29#include <linux/init.h>
  30#include <linux/ptrace.h>
  31#include <linux/slab.h>
  32#include <linux/string.h>
  33#include <linux/timer.h>
  34#include <linux/delay.h>
  35#include <linux/spinlock.h>
  36#include <linux/ethtool.h>
  37#include <linux/netdevice.h>
  38#include <linux/crc32.h>
  39#include "../8390.h"
  40
  41#include <pcmcia/cs_types.h>
  42#include <pcmcia/cs.h>
  43#include <pcmcia/cistpl.h>
  44#include <pcmcia/ciscode.h>
  45#include <pcmcia/ds.h>
  46#include <pcmcia/cisreg.h>
  47
  48#include <asm/io.h>
  49#include <asm/system.h>
  50#include <asm/byteorder.h>
  51#include <asm/uaccess.h>
  52
  53#define AXNET_CMD       0x00
  54#define AXNET_DATAPORT  0x10    /* NatSemi-defined port window offset. */
  55#define AXNET_RESET     0x1f    /* Issue a read to reset, a write to clear. */
  56#define AXNET_MII_EEP   0x14    /* Offset of MII access port */
  57#define AXNET_TEST      0x15    /* Offset of TEST Register port */
  58#define AXNET_GPIO      0x17    /* Offset of General Purpose Register Port */
  59
  60#define AXNET_START_PG  0x40    /* First page of TX buffer */
  61#define AXNET_STOP_PG   0x80    /* Last page +1 of RX ring */
  62
  63#define AXNET_RDC_TIMEOUT 0x02  /* Max wait in jiffies for Tx RDC */
  64
  65#define IS_AX88190      0x0001
  66#define IS_AX88790      0x0002
  67
  68/*====================================================================*/
  69
  70/* Module parameters */
  71
  72MODULE_AUTHOR("David Hinds <dahinds@users.sourceforge.net>");
  73MODULE_DESCRIPTION("Asix AX88190 PCMCIA ethernet driver");
  74MODULE_LICENSE("GPL");
  75
  76#ifdef PCMCIA_DEBUG
  77#define INT_MODULE_PARM(n, v) static int n = v; module_param(n, int, 0)
  78
  79INT_MODULE_PARM(pc_debug, PCMCIA_DEBUG);
  80#define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args)
  81static char *version =
  82"axnet_cs.c 1.28 2002/06/29 06:27:37 (David Hinds)";
  83#else
  84#define DEBUG(n, args...)
  85#endif
  86
  87/*====================================================================*/
  88
  89static int axnet_config(struct pcmcia_device *link);
  90static void axnet_release(struct pcmcia_device *link);
  91static int axnet_open(struct net_device *dev);
  92static int axnet_close(struct net_device *dev);
  93static int axnet_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
  94static const struct ethtool_ops netdev_ethtool_ops;
  95static irqreturn_t ei_irq_wrapper(int irq, void *dev_id);
  96static void ei_watchdog(u_long arg);
  97static void axnet_reset_8390(struct net_device *dev);
  98
  99static int mdio_read(kio_addr_t addr, int phy_id, int loc);
 100static void mdio_write(kio_addr_t addr, int phy_id, int loc, int value);
 101
 102static void get_8390_hdr(struct net_device *,
 103                         struct e8390_pkt_hdr *, int);
 104static void block_input(struct net_device *dev, int count,
 105                        struct sk_buff *skb, int ring_offset);
 106static void block_output(struct net_device *dev, int count,
 107                         const u_char *buf, const int start_page);
 108
 109static void axnet_detach(struct pcmcia_device *p_dev);
 110
 111static void axdev_setup(struct net_device *dev);
 112static void AX88190_init(struct net_device *dev, int startp);
 113static int ax_open(struct net_device *dev);
 114static int ax_close(struct net_device *dev);
 115static irqreturn_t ax_interrupt(int irq, void *dev_id);
 116
 117/*====================================================================*/
 118
 119typedef struct axnet_dev_t {
 120        struct pcmcia_device    *p_dev;
 121    dev_node_t          node;
 122    caddr_t             base;
 123    struct timer_list   watchdog;
 124    int                 stale, fast_poll;
 125    u_short             link_status;
 126    u_char              duplex_flag;
 127    int                 phy_id;
 128    int                 flags;
 129} axnet_dev_t;
 130
 131static inline axnet_dev_t *PRIV(struct net_device *dev)
 132{
 133        void *p = (char *)netdev_priv(dev) + sizeof(struct ei_device);
 134        return p;
 135}
 136
 137/*======================================================================
 138
 139    axnet_attach() creates an "instance" of the driver, allocating
 140    local data structures for one device.  The device is registered
 141    with Card Services.
 142
 143======================================================================*/
 144
 145static int axnet_probe(struct pcmcia_device *link)
 146{
 147    axnet_dev_t *info;
 148    struct net_device *dev;
 149
 150    DEBUG(0, "axnet_attach()\n");
 151
 152    dev = alloc_netdev(sizeof(struct ei_device) + sizeof(axnet_dev_t),
 153                        "eth%d", axdev_setup);
 154
 155    if (!dev)
 156        return -ENOMEM;
 157
 158    info = PRIV(dev);
 159    info->p_dev = link;
 160    link->priv = dev;
 161    link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
 162    link->irq.IRQInfo1 = IRQ_LEVEL_ID;
 163    link->conf.Attributes = CONF_ENABLE_IRQ;
 164    link->conf.IntType = INT_MEMORY_AND_IO;
 165
 166    dev->open = &axnet_open;
 167    dev->stop = &axnet_close;
 168    dev->do_ioctl = &axnet_ioctl;
 169    SET_ETHTOOL_OPS(dev, &netdev_ethtool_ops);
 170
 171    return axnet_config(link);
 172} /* axnet_attach */
 173
 174/*======================================================================
 175
 176    This deletes a driver "instance".  The device is de-registered
 177    with Card Services.  If it has been released, all local data
 178    structures are freed.  Otherwise, the structures will be freed
 179    when the device is released.
 180
 181======================================================================*/
 182
 183static void axnet_detach(struct pcmcia_device *link)
 184{
 185    struct net_device *dev = link->priv;
 186
 187    DEBUG(0, "axnet_detach(0x%p)\n", link);
 188
 189    if (link->dev_node)
 190        unregister_netdev(dev);
 191
 192    axnet_release(link);
 193
 194    free_netdev(dev);
 195} /* axnet_detach */
 196
 197/*======================================================================
 198
 199    This probes for a card's hardware address by reading the PROM.
 200
 201======================================================================*/
 202
 203static int get_prom(struct pcmcia_device *link)
 204{
 205    struct net_device *dev = link->priv;
 206    kio_addr_t ioaddr = dev->base_addr;
 207    int i, j;
 208
 209    /* This is based on drivers/net/ne.c */
 210    struct {
 211        u_char value, offset;
 212    } program_seq[] = {
 213        {E8390_NODMA+E8390_PAGE0+E8390_STOP, E8390_CMD}, /* Select page 0*/
 214        {0x01,  EN0_DCFG},      /* Set word-wide access. */
 215        {0x00,  EN0_RCNTLO},    /* Clear the count regs. */
 216        {0x00,  EN0_RCNTHI},
 217        {0x00,  EN0_IMR},       /* Mask completion irq. */
 218        {0xFF,  EN0_ISR},
 219        {E8390_RXOFF|0x40, EN0_RXCR},   /* 0x60  Set to monitor */
 220        {E8390_TXOFF, EN0_TXCR},        /* 0x02  and loopback mode. */
 221        {0x10,  EN0_RCNTLO},
 222        {0x00,  EN0_RCNTHI},
 223        {0x00,  EN0_RSARLO},    /* DMA starting at 0x0400. */
 224        {0x04,  EN0_RSARHI},
 225        {E8390_RREAD+E8390_START, E8390_CMD},
 226    };
 227
 228    /* Not much of a test, but the alternatives are messy */
 229    if (link->conf.ConfigBase != 0x03c0)
 230        return 0;
 231
 232    axnet_reset_8390(dev);
 233    mdelay(10);
 234
 235    for (i = 0; i < ARRAY_SIZE(program_seq); i++)
 236        outb_p(program_seq[i].value, ioaddr + program_seq[i].offset);
 237
 238    for (i = 0; i < 6; i += 2) {
 239        j = inw(ioaddr + AXNET_DATAPORT);
 240        dev->dev_addr[i] = j & 0xff;
 241        dev->dev_addr[i+1] = j >> 8;
 242    }
 243    return 1;
 244} /* get_prom */
 245
 246/*======================================================================
 247
 248    axnet_config() is scheduled to run after a CARD_INSERTION event
 249    is received, to configure the PCMCIA socket, and to make the
 250    ethernet device available to the system.
 251
 252======================================================================*/
 253
 254#define CS_CHECK(fn, ret) \
 255do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
 256
 257static int try_io_port(struct pcmcia_device *link)
 258{
 259    int j, ret;
 260    if (link->io.NumPorts1 == 32) {
 261        link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
 262        if (link->io.NumPorts2 > 0) {
 263            /* for master/slave multifunction cards */
 264            link->io.Attributes2 = IO_DATA_PATH_WIDTH_8;
 265            link->irq.Attributes = 
 266                IRQ_TYPE_DYNAMIC_SHARING|IRQ_FIRST_SHARED;
 267        }
 268    } else {
 269        /* This should be two 16-port windows */
 270        link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
 271        link->io.Attributes2 = IO_DATA_PATH_WIDTH_16;
 272    }
 273    if (link->io.BasePort1 == 0) {
 274        link->io.IOAddrLines = 16;
 275        for (j = 0; j < 0x400; j += 0x20) {
 276            link->io.BasePort1 = j ^ 0x300;
 277            link->io.BasePort2 = (j ^ 0x300) + 0x10;
 278            ret = pcmcia_request_io(link, &link->io);
 279            if (ret == CS_SUCCESS) return ret;
 280        }
 281        return ret;
 282    } else {
 283        return pcmcia_request_io(link, &link->io);
 284    }
 285}
 286
 287static int axnet_config(struct pcmcia_device *link)
 288{
 289    struct net_device *dev = link->priv;
 290    axnet_dev_t *info = PRIV(dev);
 291    tuple_t tuple;
 292    cisparse_t parse;
 293    int i, j, last_ret, last_fn;
 294    u_short buf[64];
 295    DECLARE_MAC_BUF(mac);
 296
 297    DEBUG(0, "axnet_config(0x%p)\n", link);
 298
 299    tuple.Attributes = 0;
 300    tuple.TupleData = (cisdata_t *)buf;
 301    tuple.TupleDataMax = sizeof(buf);
 302    tuple.TupleOffset = 0;
 303
 304    /* don't trust the CIS on this; Linksys got it wrong */
 305    link->conf.Present = 0x63;
 306
 307    tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
 308    tuple.Attributes = 0;
 309    CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
 310    while (last_ret == CS_SUCCESS) {
 311        cistpl_cftable_entry_t *cfg = &(parse.cftable_entry);
 312        cistpl_io_t *io = &(parse.cftable_entry.io);
 313        
 314        if (pcmcia_get_tuple_data(link, &tuple) != 0 ||
 315                pcmcia_parse_tuple(link, &tuple, &parse) != 0 ||
 316                cfg->index == 0 || cfg->io.nwin == 0)
 317            goto next_entry;
 318        
 319        link->conf.ConfigIndex = 0x05;
 320        /* For multifunction cards, by convention, we configure the
 321           network function with window 0, and serial with window 1 */
 322        if (io->nwin > 1) {
 323            i = (io->win[1].len > io->win[0].len);
 324            link->io.BasePort2 = io->win[1-i].base;
 325            link->io.NumPorts2 = io->win[1-i].len;
 326        } else {
 327            i = link->io.NumPorts2 = 0;
 328        }
 329        link->io.BasePort1 = io->win[i].base;
 330        link->io.NumPorts1 = io->win[i].len;
 331        link->io.IOAddrLines = io->flags & CISTPL_IO_LINES_MASK;
 332        if (link->io.NumPorts1 + link->io.NumPorts2 >= 32) {
 333            last_ret = try_io_port(link);
 334            if (last_ret == CS_SUCCESS) break;
 335        }
 336    next_entry:
 337        last_ret = pcmcia_get_next_tuple(link, &tuple);
 338    }
 339    if (last_ret != CS_SUCCESS) {
 340        cs_error(link, RequestIO, last_ret);
 341        goto failed;
 342    }
 343
 344    CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq));
 345    
 346    if (link->io.NumPorts2 == 8) {
 347        link->conf.Attributes |= CONF_ENABLE_SPKR;
 348        link->conf.Status = CCSR_AUDIO_ENA;
 349    }
 350    
 351    CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf));
 352    dev->irq = link->irq.AssignedIRQ;
 353    dev->base_addr = link->io.BasePort1;
 354
 355    if (!get_prom(link)) {
 356        printk(KERN_NOTICE "axnet_cs: this is not an AX88190 card!\n");
 357        printk(KERN_NOTICE "axnet_cs: use pcnet_cs instead.\n");
 358        goto failed;
 359    }
 360
 361    ei_status.name = "AX88190";
 362    ei_status.word16 = 1;
 363    ei_status.tx_start_page = AXNET_START_PG;
 364    ei_status.rx_start_page = AXNET_START_PG + TX_PAGES;
 365    ei_status.stop_page = AXNET_STOP_PG;
 366    ei_status.reset_8390 = &axnet_reset_8390;
 367    ei_status.get_8390_hdr = &get_8390_hdr;
 368    ei_status.block_input = &block_input;
 369    ei_status.block_output = &block_output;
 370
 371    if (inb(dev->base_addr + AXNET_TEST) != 0)
 372        info->flags |= IS_AX88790;
 373    else
 374        info->flags |= IS_AX88190;
 375
 376    if (info->flags & IS_AX88790)
 377        outb(0x10, dev->base_addr + AXNET_GPIO);  /* select Internal PHY */
 378
 379    for (i = 0; i < 32; i++) {
 380        j = mdio_read(dev->base_addr + AXNET_MII_EEP, i, 1);
 381        if ((j != 0) && (j != 0xffff)) break;
 382    }
 383
 384    /* Maybe PHY is in power down mode. (PPD_SET = 1) 
 385       Bit 2 of CCSR is active low. */ 
 386    if (i == 32) {
 387        conf_reg_t reg = { 0, CS_WRITE, CISREG_CCSR, 0x04 };
 388        pcmcia_access_configuration_register(link, &reg);
 389        for (i = 0; i < 32; i++) {
 390            j = mdio_read(dev->base_addr + AXNET_MII_EEP, i, 1);
 391            if ((j != 0) && (j != 0xffff)) break;
 392        }
 393    }
 394
 395    info->phy_id = (i < 32) ? i : -1;
 396    link->dev_node = &info->node;
 397    SET_NETDEV_DEV(dev, &handle_to_dev(link));
 398
 399    if (register_netdev(dev) != 0) {
 400        printk(KERN_NOTICE "axnet_cs: register_netdev() failed\n");
 401        link->dev_node = NULL;
 402        goto failed;
 403    }
 404
 405    strcpy(info->node.dev_name, dev->name);
 406
 407    printk(KERN_INFO "%s: Asix AX88%d90: io %#3lx, irq %d, "
 408           "hw_addr %s\n",
 409           dev->name, ((info->flags & IS_AX88790) ? 7 : 1),
 410           dev->base_addr, dev->irq,
 411           print_mac(mac, dev->dev_addr));
 412    if (info->phy_id != -1) {
 413        DEBUG(0, "  MII transceiver at index %d, status %x.\n", info->phy_id, j);
 414    } else {
 415        printk(KERN_NOTICE "  No MII transceivers found!\n");
 416    }
 417    return 0;
 418
 419cs_failed:
 420    cs_error(link, last_fn, last_ret);
 421failed:
 422    axnet_release(link);
 423    return -ENODEV;
 424} /* axnet_config */
 425
 426/*======================================================================
 427
 428    After a card is removed, axnet_release() will unregister the net
 429    device, and release the PCMCIA configuration.  If the device is
 430    still open, this will be postponed until it is closed.
 431
 432======================================================================*/
 433
 434static void axnet_release(struct pcmcia_device *link)
 435{
 436        pcmcia_disable_device(link);
 437}
 438
 439static int axnet_suspend(struct pcmcia_device *link)
 440{
 441        struct net_device *dev = link->priv;
 442
 443        if (link->open)
 444                netif_device_detach(dev);
 445
 446        return 0;
 447}
 448
 449static int axnet_resume(struct pcmcia_device *link)
 450{
 451        struct net_device *dev = link->priv;
 452
 453        if (link->open) {
 454                axnet_reset_8390(dev);
 455                AX88190_init(dev, 1);
 456                netif_device_attach(dev);
 457        }
 458
 459        return 0;
 460}
 461
 462
 463/*======================================================================
 464
 465    MII interface support
 466
 467======================================================================*/
 468
 469#define MDIO_SHIFT_CLK          0x01
 470#define MDIO_DATA_WRITE0        0x00
 471#define MDIO_DATA_WRITE1        0x08
 472#define MDIO_DATA_READ          0x04
 473#define MDIO_MASK               0x0f
 474#define MDIO_ENB_IN             0x02
 475
 476static void mdio_sync(kio_addr_t addr)
 477{
 478    int bits;
 479    for (bits = 0; bits < 32; bits++) {
 480        outb_p(MDIO_DATA_WRITE1, addr);
 481        outb_p(MDIO_DATA_WRITE1 | MDIO_SHIFT_CLK, addr);
 482    }
 483}
 484
 485static int mdio_read(kio_addr_t addr, int phy_id, int loc)
 486{
 487    u_int cmd = (0xf6<<10)|(phy_id<<5)|loc;
 488    int i, retval = 0;
 489
 490    mdio_sync(addr);
 491    for (i = 14; i >= 0; i--) {
 492        int dat = (cmd&(1<<i)) ? MDIO_DATA_WRITE1 : MDIO_DATA_WRITE0;
 493        outb_p(dat, addr);
 494        outb_p(dat | MDIO_SHIFT_CLK, addr);
 495    }
 496    for (i = 19; i > 0; i--) {
 497        outb_p(MDIO_ENB_IN, addr);
 498        retval = (retval << 1) | ((inb_p(addr) & MDIO_DATA_READ) != 0);
 499        outb_p(MDIO_ENB_IN | MDIO_SHIFT_CLK, addr);
 500    }
 501    return (retval>>1) & 0xffff;
 502}
 503
 504static void mdio_write(kio_addr_t addr, int phy_id, int loc, int value)
 505{
 506    u_int cmd = (0x05<<28)|(phy_id<<23)|(loc<<18)|(1<<17)|value;
 507    int i;
 508
 509    mdio_sync(addr);
 510    for (i = 31; i >= 0; i--) {
 511        int dat = (cmd&(1<<i)) ? MDIO_DATA_WRITE1 : MDIO_DATA_WRITE0;
 512        outb_p(dat, addr);
 513        outb_p(dat | MDIO_SHIFT_CLK, addr);
 514    }
 515    for (i = 1; i >= 0; i--) {
 516        outb_p(MDIO_ENB_IN, addr);
 517        outb_p(MDIO_ENB_IN | MDIO_SHIFT_CLK, addr);
 518    }
 519}
 520
 521/*====================================================================*/
 522
 523static int axnet_open(struct net_device *dev)
 524{
 525    int ret;
 526    axnet_dev_t *info = PRIV(dev);
 527    struct pcmcia_device *link = info->p_dev;
 528    
 529    DEBUG(2, "axnet_open('%s')\n", dev->name);
 530
 531    if (!pcmcia_dev_present(link))
 532        return -ENODEV;
 533
 534    ret = request_irq(dev->irq, ei_irq_wrapper, IRQF_SHARED, "axnet_cs", dev);
 535    if (ret)
 536            return ret;
 537
 538    link->open++;
 539
 540    info->link_status = 0x00;
 541    init_timer(&info->watchdog);
 542    info->watchdog.function = &ei_watchdog;
 543    info->watchdog.data = (u_long)dev;
 544    info->watchdog.expires = jiffies + HZ;
 545    add_timer(&info->watchdog);
 546
 547    return ax_open(dev);
 548} /* axnet_open */
 549
 550/*====================================================================*/
 551
 552static int axnet_close(struct net_device *dev)
 553{
 554    axnet_dev_t *info = PRIV(dev);
 555    struct pcmcia_device *link = info->p_dev;
 556
 557    DEBUG(2, "axnet_close('%s')\n", dev->name);
 558
 559    ax_close(dev);
 560    free_irq(dev->irq, dev);
 561    
 562    link->open--;
 563    netif_stop_queue(dev);
 564    del_timer_sync(&info->watchdog);
 565
 566    return 0;
 567} /* axnet_close */
 568
 569/*======================================================================
 570
 571    Hard reset the card.  This used to pause for the same period that
 572    a 8390 reset command required, but that shouldn't be necessary.
 573
 574======================================================================*/
 575
 576static void axnet_reset_8390(struct net_device *dev)
 577{
 578    kio_addr_t nic_base = dev->base_addr;
 579    int i;
 580
 581    ei_status.txing = ei_status.dmaing = 0;
 582
 583    outb_p(E8390_NODMA+E8390_PAGE0+E8390_STOP, nic_base + E8390_CMD);
 584
 585    outb(inb(nic_base + AXNET_RESET), nic_base + AXNET_RESET);
 586
 587    for (i = 0; i < 100; i++) {
 588        if ((inb_p(nic_base+EN0_ISR) & ENISR_RESET) != 0)
 589            break;
 590        udelay(100);
 591    }
 592    outb_p(ENISR_RESET, nic_base + EN0_ISR); /* Ack intr. */
 593    
 594    if (i == 100)
 595        printk(KERN_ERR "%s: axnet_reset_8390() did not complete.\n",
 596               dev->name);
 597    
 598} /* axnet_reset_8390 */
 599
 600/*====================================================================*/
 601
 602static irqreturn_t ei_irq_wrapper(int irq, void *dev_id)
 603{
 604    struct net_device *dev = dev_id;
 605    PRIV(dev)->stale = 0;
 606    return ax_interrupt(irq, dev_id);
 607}
 608
 609static void ei_watchdog(u_long arg)
 610{
 611    struct net_device *dev = (struct net_device *)(arg);
 612    axnet_dev_t *info = PRIV(dev);
 613    kio_addr_t nic_base = dev->base_addr;
 614    kio_addr_t mii_addr = nic_base + AXNET_MII_EEP;
 615    u_short link;
 616
 617    if (!netif_device_present(dev)) goto reschedule;
 618
 619    /* Check for pending interrupt with expired latency timer: with
 620       this, we can limp along even if the interrupt is blocked */
 621    if (info->stale++ && (inb_p(nic_base + EN0_ISR) & ENISR_ALL)) {
 622        if (!info->fast_poll)
 623            printk(KERN_INFO "%s: interrupt(s) dropped!\n", dev->name);
 624        ei_irq_wrapper(dev->irq, dev);
 625        info->fast_poll = HZ;
 626    }
 627    if (info->fast_poll) {
 628        info->fast_poll--;
 629        info->watchdog.expires = jiffies + 1;
 630        add_timer(&info->watchdog);
 631        return;
 632    }
 633
 634    if (info->phy_id < 0)
 635        goto reschedule;
 636    link = mdio_read(mii_addr, info->phy_id, 1);
 637    if (!link || (link == 0xffff)) {
 638        printk(KERN_INFO "%s: MII is missing!\n", dev->name);
 639        info->phy_id = -1;
 640        goto reschedule;
 641    }
 642
 643    link &= 0x0004;
 644    if (link != info->link_status) {
 645        u_short p = mdio_read(mii_addr, info->phy_id, 5);
 646        printk(KERN_INFO "%s: %s link beat\n", dev->name,
 647               (link) ? "found" : "lost");
 648        if (link) {
 649            info->duplex_flag = (p & 0x0140) ? 0x80 : 0x00;
 650            if (p)
 651                printk(KERN_INFO "%s: autonegotiation complete: "
 652                       "%sbaseT-%cD selected\n", dev->name,
 653                       ((p & 0x0180) ? "100" : "10"),
 654                       ((p & 0x0140) ? 'F' : 'H'));
 655            else
 656                printk(KERN_INFO "%s: link partner did not autonegotiate\n",
 657                       dev->name);
 658            AX88190_init(dev, 1);
 659        }
 660        info->link_status = link;
 661    }
 662
 663reschedule:
 664    info->watchdog.expires = jiffies + HZ;
 665    add_timer(&info->watchdog);
 666}
 667
 668static void netdev_get_drvinfo(struct net_device *dev,
 669                               struct ethtool_drvinfo *info)
 670{
 671        strcpy(info->driver, "axnet_cs");
 672}
 673
 674static const struct ethtool_ops netdev_ethtool_ops = {
 675        .get_drvinfo            = netdev_get_drvinfo,
 676};
 677
 678/*====================================================================*/
 679
 680static int axnet_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
 681{
 682    axnet_dev_t *info = PRIV(dev);
 683    u16 *data = (u16 *)&rq->ifr_ifru;
 684    kio_addr_t mii_addr = dev->base_addr + AXNET_MII_EEP;
 685    switch (cmd) {
 686    case SIOCGMIIPHY:
 687        data[0] = info->phy_id;
 688    case SIOCGMIIREG:           /* Read MII PHY register. */
 689        data[3] = mdio_read(mii_addr, data[0], data[1] & 0x1f);
 690        return 0;
 691    case SIOCSMIIREG:           /* Write MII PHY register. */
 692        if (!capable(CAP_NET_ADMIN))
 693            return -EPERM;
 694        mdio_write(mii_addr, data[0], data[1] & 0x1f, data[2]);
 695        return 0;
 696    }
 697    return -EOPNOTSUPP;
 698}
 699
 700/*====================================================================*/
 701
 702static void get_8390_hdr(struct net_device *dev,
 703                         struct e8390_pkt_hdr *hdr,
 704                         int ring_page)
 705{
 706    kio_addr_t nic_base = dev->base_addr;
 707
 708    outb_p(0, nic_base + EN0_RSARLO);           /* On page boundary */
 709    outb_p(ring_page, nic_base + EN0_RSARHI);
 710    outb_p(E8390_RREAD+E8390_START, nic_base + AXNET_CMD);
 711
 712    insw(nic_base + AXNET_DATAPORT, hdr,
 713            sizeof(struct e8390_pkt_hdr)>>1);
 714    /* Fix for big endian systems */
 715    hdr->count = le16_to_cpu(hdr->count);
 716
 717}
 718
 719/*====================================================================*/
 720
 721static void block_input(struct net_device *dev, int count,
 722                        struct sk_buff *skb, int ring_offset)
 723{
 724    kio_addr_t nic_base = dev->base_addr;
 725    int xfer_count = count;
 726    char *buf = skb->data;
 727
 728#ifdef PCMCIA_DEBUG
 729    if ((ei_debug > 4) && (count != 4))
 730        printk(KERN_DEBUG "%s: [bi=%d]\n", dev->name, count+4);
 731#endif
 732    outb_p(ring_offset & 0xff, nic_base + EN0_RSARLO);
 733    outb_p(ring_offset >> 8, nic_base + EN0_RSARHI);
 734    outb_p(E8390_RREAD+E8390_START, nic_base + AXNET_CMD);
 735
 736    insw(nic_base + AXNET_DATAPORT,buf,count>>1);
 737    if (count & 0x01)
 738        buf[count-1] = inb(nic_base + AXNET_DATAPORT), xfer_count++;
 739
 740}
 741
 742/*====================================================================*/
 743
 744static void block_output(struct net_device *dev, int count,
 745                         const u_char *buf, const int start_page)
 746{
 747    kio_addr_t nic_base = dev->base_addr;
 748
 749#ifdef PCMCIA_DEBUG
 750    if (ei_debug > 4)
 751        printk(KERN_DEBUG "%s: [bo=%d]\n", dev->name, count);
 752#endif
 753
 754    /* Round the count up for word writes.  Do we need to do this?
 755       What effect will an odd byte count have on the 8390?
 756       I should check someday. */
 757    if (count & 0x01)
 758        count++;
 759
 760    outb_p(0x00, nic_base + EN0_RSARLO);
 761    outb_p(start_page, nic_base + EN0_RSARHI);
 762    outb_p(E8390_RWRITE+E8390_START, nic_base + AXNET_CMD);
 763    outsw(nic_base + AXNET_DATAPORT, buf, count>>1);
 764}
 765
 766static struct pcmcia_device_id axnet_ids[] = {
 767        PCMCIA_PFC_DEVICE_MANF_CARD(0, 0x016c, 0x0081),
 768        PCMCIA_DEVICE_MANF_CARD(0x018a, 0x0301),
 769        PCMCIA_DEVICE_MANF_CARD(0x026f, 0x0301),
 770        PCMCIA_DEVICE_MANF_CARD(0x026f, 0x0303),
 771        PCMCIA_DEVICE_MANF_CARD(0x026f, 0x0309),
 772        PCMCIA_DEVICE_MANF_CARD(0x0274, 0x1106),
 773        PCMCIA_DEVICE_MANF_CARD(0x8a01, 0xc1ab),
 774        PCMCIA_DEVICE_MANF_CARD(0x021b, 0x0202), 
 775        PCMCIA_DEVICE_MANF_CARD(0xffff, 0x1090),
 776        PCMCIA_DEVICE_PROD_ID12("AmbiCom,Inc.", "Fast Ethernet PC Card(AMB8110)", 0x49b020a7, 0x119cc9fc),
 777        PCMCIA_DEVICE_PROD_ID124("Fast Ethernet", "16-bit PC Card", "AX88190", 0xb4be14e3, 0x9a12eb6a, 0xab9be5ef),
 778        PCMCIA_DEVICE_PROD_ID12("ASIX", "AX88190", 0x0959823b, 0xab9be5ef),
 779        PCMCIA_DEVICE_PROD_ID12("Billionton", "LNA-100B", 0x552ab682, 0xbc3b87e1),
 780        PCMCIA_DEVICE_PROD_ID12("CHEETAH ETHERCARD", "EN2228", 0x00fa7bc8, 0x00e990cc),
 781        PCMCIA_DEVICE_PROD_ID12("CNet", "CNF301", 0xbc477dde, 0x78c5f40b),
 782        PCMCIA_DEVICE_PROD_ID12("corega K.K.", "corega FEther PCC-TXD", 0x5261440f, 0x436768c5),
 783        PCMCIA_DEVICE_PROD_ID12("corega K.K.", "corega FEtherII PCC-TXD", 0x5261440f, 0x730df72e),
 784        PCMCIA_DEVICE_PROD_ID12("Dynalink", "L100C16", 0x55632fd5, 0x66bc2a90),
 785        PCMCIA_DEVICE_PROD_ID12("Linksys", "EtherFast 10/100 PC Card (PCMPC100 V3)", 0x0733cc81, 0x232019a8),
 786        PCMCIA_DEVICE_PROD_ID12("MELCO", "LPC3-TX", 0x481e0094, 0xf91af609),
 787        PCMCIA_DEVICE_PROD_ID12("PCMCIA", "100BASE", 0x281f1c5d, 0x7c2add04),
 788        PCMCIA_DEVICE_PROD_ID12("PCMCIA", "FastEtherCard", 0x281f1c5d, 0x7ef26116),
 789        PCMCIA_DEVICE_PROD_ID12("PCMCIA", "FEP501", 0x281f1c5d, 0x2e272058),
 790        PCMCIA_DEVICE_PROD_ID14("Network Everywhere", "AX88190", 0x820a67b6,  0xab9be5ef),
 791        PCMCIA_DEVICE_NULL,
 792};
 793MODULE_DEVICE_TABLE(pcmcia, axnet_ids);
 794
 795static struct pcmcia_driver axnet_cs_driver = {
 796        .owner          = THIS_MODULE,
 797        .drv            = {
 798                .name   = "axnet_cs",
 799        },
 800        .probe          = axnet_probe,
 801        .remove         = axnet_detach,
 802        .id_table       = axnet_ids,
 803        .suspend        = axnet_suspend,
 804        .resume         = axnet_resume,
 805};
 806
 807static int __init init_axnet_cs(void)
 808{
 809        return pcmcia_register_driver(&axnet_cs_driver);
 810}
 811
 812static void __exit exit_axnet_cs(void)
 813{
 814        pcmcia_unregister_driver(&axnet_cs_driver);
 815}
 816
 817module_init(init_axnet_cs);
 818module_exit(exit_axnet_cs);
 819
 820/*====================================================================*/
 821
 822/* 8390.c: A general NS8390 ethernet driver core for linux. */
 823/*
 824        Written 1992-94 by Donald Becker.
 825  
 826        Copyright 1993 United States Government as represented by the
 827        Director, National Security Agency.
 828
 829        This software may be used and distributed according to the terms
 830        of the GNU General Public License, incorporated herein by reference.
 831
 832        The author may be reached as becker@scyld.com, or C/O
 833        Scyld Computing Corporation
 834        410 Severn Ave., Suite 210
 835        Annapolis MD 21403
 836
 837  This is the chip-specific code for many 8390-based ethernet adaptors.
 838  This is not a complete driver, it must be combined with board-specific
 839  code such as ne.c, wd.c, 3c503.c, etc.
 840
 841  Seeing how at least eight drivers use this code, (not counting the
 842  PCMCIA ones either) it is easy to break some card by what seems like
 843  a simple innocent change. Please contact me or Donald if you think
 844  you have found something that needs changing. -- PG
 845
 846  Changelog:
 847
 848  Paul Gortmaker        : remove set_bit lock, other cleanups.
 849  Paul Gortmaker        : add ei_get_8390_hdr() so we can pass skb's to 
 850                          ei_block_input() for eth_io_copy_and_sum().
 851  Paul Gortmaker        : exchange static int ei_pingpong for a #define,
 852                          also add better Tx error handling.
 853  Paul Gortmaker        : rewrite Rx overrun handling as per NS specs.
 854  Alexey Kuznetsov      : use the 8390's six bit hash multicast filter.
 855  Paul Gortmaker        : tweak ANK's above multicast changes a bit.
 856  Paul Gortmaker        : update packet statistics for v2.1.x
 857  Alan Cox              : support arbitary stupid port mappings on the
 858                          68K Macintosh. Support >16bit I/O spaces
 859  Paul Gortmaker        : add kmod support for auto-loading of the 8390
 860                          module by all drivers that require it.
 861  Alan Cox              : Spinlocking work, added 'BUG_83C690'
 862  Paul Gortmaker        : Separate out Tx timeout code from Tx path.
 863
 864  Sources:
 865  The National Semiconductor LAN Databook, and the 3Com 3c503 databook.
 866
 867  */
 868
 869static const char *version_8390 =
 870    "8390.c:v1.10cvs 9/23/94 Donald Becker (becker@scyld.com)\n";
 871
 872#include <linux/bitops.h>
 873#include <asm/irq.h>
 874#include <linux/fcntl.h>
 875#include <linux/in.h>
 876#include <linux/interrupt.h>
 877
 878#include <linux/etherdevice.h>
 879
 880#define BUG_83C690
 881
 882/* These are the operational function interfaces to board-specific
 883   routines.
 884        void reset_8390(struct net_device *dev)
 885                Resets the board associated with DEV, including a hardware reset of
 886                the 8390.  This is only called when there is a transmit timeout, and
 887                it is always followed by 8390_init().
 888        void block_output(struct net_device *dev, int count, const unsigned char *buf,
 889                                          int start_page)
 890                Write the COUNT bytes of BUF to the packet buffer at START_PAGE.  The
 891                "page" value uses the 8390's 256-byte pages.
 892        void get_8390_hdr(struct net_device *dev, struct e8390_hdr *hdr, int ring_page)
 893                Read the 4 byte, page aligned 8390 header. *If* there is a
 894                subsequent read, it will be of the rest of the packet.
 895        void block_input(struct net_device *dev, int count, struct sk_buff *skb, int ring_offset)
 896                Read COUNT bytes from the packet buffer into the skb data area. Start 
 897                reading from RING_OFFSET, the address as the 8390 sees it.  This will always
 898                follow the read of the 8390 header. 
 899*/
 900#define ei_reset_8390 (ei_local->reset_8390)
 901#define ei_block_output (ei_local->block_output)
 902#define ei_block_input (ei_local->block_input)
 903#define ei_get_8390_hdr (ei_local->get_8390_hdr)
 904
 905/* use 0 for production, 1 for verification, >2 for debug */
 906#ifndef ei_debug
 907int ei_debug = 1;
 908#endif
 909
 910/* Index to functions. */
 911static void ei_tx_intr(struct net_device *dev);
 912static void ei_tx_err(struct net_device *dev);
 913static void ei_tx_timeout(struct net_device *dev);
 914static void ei_receive(struct net_device *dev);
 915static void ei_rx_overrun(struct net_device *dev);
 916
 917/* Routines generic to NS8390-based boards. */
 918static void NS8390_trigger_send(struct net_device *dev, unsigned int length,
 919                                                                int start_page);
 920static void set_multicast_list(struct net_device *dev);
 921static void do_set_multicast_list(struct net_device *dev);
 922
 923/*
 924 *      SMP and the 8390 setup.
 925 *
 926 *      The 8390 isnt exactly designed to be multithreaded on RX/TX. There is
 927 *      a page register that controls bank and packet buffer access. We guard
 928 *      this with ei_local->page_lock. Nobody should assume or set the page other
 929 *      than zero when the lock is not held. Lock holders must restore page 0
 930 *      before unlocking. Even pure readers must take the lock to protect in 
 931 *      page 0.
 932 *
 933 *      To make life difficult the chip can also be very slow. We therefore can't
 934 *      just use spinlocks. For the longer lockups we disable the irq the device
 935 *      sits on and hold the lock. We must hold the lock because there is a dual
 936 *      processor case other than interrupts (get stats/set multicast list in
 937 *      parallel with each other and transmit).
 938 *
 939 *      Note: in theory we can just disable the irq on the card _but_ there is
 940 *      a latency on SMP irq delivery. So we can easily go "disable irq" "sync irqs"
 941 *      enter lock, take the queued irq. So we waddle instead of flying.
 942 *
 943 *      Finally by special arrangement for the purpose of being generally 
 944 *      annoying the transmit function is called bh atomic. That places
 945 *      restrictions on the user context callers as disable_irq won't save
 946 *      them.
 947 */
 948 
 949/**
 950 * ax_open - Open/initialize the board.
 951 * @dev: network device to initialize
 952 *
 953 * This routine goes all-out, setting everything
 954 * up anew at each open, even though many of these registers should only
 955 * need to be set once at boot.
 956 */
 957static int ax_open(struct net_device *dev)
 958{
 959        unsigned long flags;
 960        struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
 961
 962#ifdef HAVE_TX_TIMEOUT
 963        /* The card I/O part of the driver (e.g. 3c503) can hook a Tx timeout
 964            wrapper that does e.g. media check & then calls ei_tx_timeout. */
 965        if (dev->tx_timeout == NULL)
 966                 dev->tx_timeout = ei_tx_timeout;
 967        if (dev->watchdog_timeo <= 0)
 968                 dev->watchdog_timeo = TX_TIMEOUT;
 969#endif
 970
 971        /*
 972         *      Grab the page lock so we own the register set, then call
 973         *      the init function.
 974         */
 975      
 976        spin_lock_irqsave(&ei_local->page_lock, flags);
 977        AX88190_init(dev, 1);
 978        /* Set the flag before we drop the lock, That way the IRQ arrives
 979           after its set and we get no silly warnings */
 980        netif_start_queue(dev);
 981        spin_unlock_irqrestore(&ei_local->page_lock, flags);
 982        ei_local->irqlock = 0;
 983        return 0;
 984}
 985
 986#define dev_lock(dev) (((struct ei_device *)netdev_priv(dev))->page_lock)
 987
 988/**
 989 * ax_close - shut down network device
 990 * @dev: network device to close
 991 *
 992 * Opposite of ax_open(). Only used when "ifconfig <devname> down" is done.
 993 */
 994int ax_close(struct net_device *dev)
 995{
 996        unsigned long flags;
 997
 998        /*
 999         *      Hold the page lock during close
1000         */
1001
1002        spin_lock_irqsave(&dev_lock(dev), flags);
1003        AX88190_init(dev, 0);
1004        spin_unlock_irqrestore(&dev_lock(dev), flags);
1005        netif_stop_queue(dev);
1006        return 0;
1007}
1008
1009/**
1010 * ei_tx_timeout - handle transmit time out condition
1011 * @dev: network device which has apparently fallen asleep
1012 *
1013 * Called by kernel when device never acknowledges a transmit has
1014 * completed (or failed) - i.e. never posted a Tx related interrupt.
1015 */
1016
1017void ei_tx_timeout(struct net_device *dev)
1018{
1019        long e8390_base = dev->base_addr;
1020        struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
1021        int txsr, isr, tickssofar = jiffies - dev->trans_start;
1022        unsigned long flags;
1023
1024        ei_local->stat.tx_errors++;
1025
1026        spin_lock_irqsave(&ei_local->page_lock, flags);
1027        txsr = inb(e8390_base+EN0_TSR);
1028        isr = inb(e8390_base+EN0_ISR);
1029        spin_unlock_irqrestore(&ei_local->page_lock, flags);
1030
1031        printk(KERN_DEBUG "%s: Tx timed out, %s TSR=%#2x, ISR=%#2x, t=%d.\n",
1032                dev->name, (txsr & ENTSR_ABT) ? "excess collisions." :
1033                (isr) ? "lost interrupt?" : "cable problem?", txsr, isr, tickssofar);
1034
1035        if (!isr && !ei_local->stat.tx_packets) 
1036        {
1037                /* The 8390 probably hasn't gotten on the cable yet. */
1038                ei_local->interface_num ^= 1;   /* Try a different xcvr.  */
1039        }
1040
1041        /* Ugly but a reset can be slow, yet must be protected */
1042                
1043        disable_irq_nosync(dev->irq);
1044        spin_lock(&ei_local->page_lock);
1045                
1046        /* Try to restart the card.  Perhaps the user has fixed something. */
1047        ei_reset_8390(dev);
1048        AX88190_init(dev, 1);
1049                
1050        spin_unlock(&ei_local->page_lock);
1051        enable_irq(dev->irq);
1052        netif_wake_queue(dev);
1053}
1054    
1055/**
1056 * ei_start_xmit - begin packet transmission
1057 * @skb: packet to be sent
1058 * @dev: network device to which packet is sent
1059 *
1060 * Sends a packet to an 8390 network device.
1061 */
1062 
1063static int ei_start_xmit(struct sk_buff *skb, struct net_device *dev)
1064{
1065        long e8390_base = dev->base_addr;
1066        struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
1067        int length, send_length, output_page;
1068        unsigned long flags;
1069        u8 packet[ETH_ZLEN];
1070        
1071        netif_stop_queue(dev);
1072
1073        length = skb->len;
1074
1075        /* Mask interrupts from the ethercard. 
1076           SMP: We have to grab the lock here otherwise the IRQ handler
1077           on another CPU can flip window and race the IRQ mask set. We end
1078           up trashing the mcast filter not disabling irqs if we don't lock */
1079           
1080        spin_lock_irqsave(&ei_local->page_lock, flags);
1081        outb_p(0x00, e8390_base + EN0_IMR);
1082        spin_unlock_irqrestore(&ei_local->page_lock, flags);
1083        
1084        /*
1085         *      Slow phase with lock held.
1086         */
1087         
1088        disable_irq_nosync(dev->irq);
1089        
1090        spin_lock(&ei_local->page_lock);
1091        
1092        ei_local->irqlock = 1;
1093
1094        send_length = ETH_ZLEN < length ? length : ETH_ZLEN;
1095        
1096        /*
1097         * We have two Tx slots available for use. Find the first free
1098         * slot, and then perform some sanity checks. With two Tx bufs,
1099         * you get very close to transmitting back-to-back packets. With
1100         * only one Tx buf, the transmitter sits idle while you reload the
1101         * card, leaving a substantial gap between each transmitted packet.
1102         */
1103
1104        if (ei_local->tx1 == 0) 
1105        {
1106                output_page = ei_local->tx_start_page;
1107                ei_local->tx1 = send_length;
1108                if (ei_debug  &&  ei_local->tx2 > 0)
1109                        printk(KERN_DEBUG "%s: idle transmitter tx2=%d, lasttx=%d, txing=%d.\n",
1110                                dev->name, ei_local->tx2, ei_local->lasttx, ei_local->txing);
1111        }
1112        else if (ei_local->tx2 == 0) 
1113        {
1114                output_page = ei_local->tx_start_page + TX_PAGES/2;
1115                ei_local->tx2 = send_length;
1116                if (ei_debug  &&  ei_local->tx1 > 0)
1117                        printk(KERN_DEBUG "%s: idle transmitter, tx1=%d, lasttx=%d, txing=%d.\n",
1118                                dev->name, ei_local->tx1, ei_local->lasttx, ei_local->txing);
1119        }
1120        else
1121        {       /* We should never get here. */
1122                if (ei_debug)
1123                        printk(KERN_DEBUG "%s: No Tx buffers free! tx1=%d tx2=%d last=%d\n",
1124                                dev->name, ei_local->tx1, ei_local->tx2, ei_local->lasttx);
1125                ei_local->irqlock = 0;
1126                netif_stop_queue(dev);
1127                outb_p(ENISR_ALL, e8390_base + EN0_IMR);
1128                spin_unlock(&ei_local->page_lock);
1129                enable_irq(dev->irq);
1130                ei_local->stat.tx_errors++;
1131                return 1;
1132        }
1133
1134        /*
1135         * Okay, now upload the packet and trigger a send if the transmitter
1136         * isn't already sending. If it is busy, the interrupt handler will
1137         * trigger the send later, upon receiving a Tx done interrupt.
1138         */
1139
1140        if (length == skb->len)
1141                ei_block_output(dev, length, skb->data, output_page);
1142        else {
1143                memset(packet, 0, ETH_ZLEN);
1144                skb_copy_from_linear_data(skb, packet, skb->len);
1145                ei_block_output(dev, length, packet, output_page);
1146        }
1147        
1148        if (! ei_local->txing) 
1149        {
1150                ei_local->txing = 1;
1151                NS8390_trigger_send(dev, send_length, output_page);
1152                dev->trans_start = jiffies;
1153                if (output_page == ei_local->tx_start_page) 
1154                {
1155                        ei_local->tx1 = -1;
1156                        ei_local->lasttx = -1;
1157                }
1158                else 
1159                {
1160                        ei_local->tx2 = -1;
1161                        ei_local->lasttx = -2;
1162                }
1163        }
1164        else ei_local->txqueue++;
1165
1166        if (ei_local->tx1  &&  ei_local->tx2)
1167                netif_stop_queue(dev);
1168        else
1169                netif_start_queue(dev);
1170
1171        /* Turn 8390 interrupts back on. */
1172        ei_local->irqlock = 0;
1173        outb_p(ENISR_ALL, e8390_base + EN0_IMR);
1174        
1175        spin_unlock(&ei_local->page_lock);
1176        enable_irq(dev->irq);
1177
1178        dev_kfree_skb (skb);
1179        ei_local->stat.tx_bytes += send_length;
1180    
1181        return 0;
1182}
1183
1184/**
1185 * ax_interrupt - handle the interrupts from an 8390
1186 * @irq: interrupt number
1187 * @dev_id: a pointer to the net_device
1188 * @regs: unused
1189 *
1190 * Handle the ether interface interrupts. We pull packets from
1191 * the 8390 via the card specific functions and fire them at the networking
1192 * stack. We also handle transmit completions and wake the transmit path if
1193 * necessary. We also update the counters and do other housekeeping as
1194 * needed.
1195 */
1196
1197static irqreturn_t ax_interrupt(int irq, void *dev_id)
1198{
1199        struct net_device *dev = dev_id;
1200        long e8390_base;
1201        int interrupts, nr_serviced = 0, i;
1202        struct ei_device *ei_local;
1203        int handled = 0;
1204
1205        e8390_base = dev->base_addr;
1206        ei_local = netdev_priv(dev);
1207
1208        /*
1209         *      Protect the irq test too.
1210         */
1211         
1212        spin_lock(&ei_local->page_lock);
1213
1214        if (ei_local->irqlock) 
1215        {
1216#if 1 /* This might just be an interrupt for a PCI device sharing this line */
1217                /* The "irqlock" check is only for testing. */
1218                printk(ei_local->irqlock
1219                           ? "%s: Interrupted while interrupts are masked! isr=%#2x imr=%#2x.\n"
1220                           : "%s: Reentering the interrupt handler! isr=%#2x imr=%#2x.\n",
1221                           dev->name, inb_p(e8390_base + EN0_ISR),
1222                           inb_p(e8390_base + EN0_IMR));
1223#endif
1224                spin_unlock(&ei_local->page_lock);
1225                return IRQ_NONE;
1226        }
1227    
1228        if (ei_debug > 3)
1229                printk(KERN_DEBUG "%s: interrupt(isr=%#2.2x).\n", dev->name,
1230                           inb_p(e8390_base + EN0_ISR));
1231
1232        outb_p(0x00, e8390_base + EN0_ISR);
1233        ei_local->irqlock = 1;
1234   
1235        /* !!Assumption!! -- we stay in page 0.  Don't break this. */
1236        while ((interrupts = inb_p(e8390_base + EN0_ISR)) != 0
1237                   && ++nr_serviced < MAX_SERVICE) 
1238        {
1239                if (!netif_running(dev) || (interrupts == 0xff)) {
1240                        if (ei_debug > 1)
1241                                printk(KERN_WARNING "%s: interrupt from stopped card\n", dev->name);
1242                        outb_p(interrupts, e8390_base + EN0_ISR);
1243                        interrupts = 0;
1244                        break;
1245                }
1246                handled = 1;
1247
1248                /* AX88190 bug fix. */
1249                outb_p(interrupts, e8390_base + EN0_ISR);
1250                for (i = 0; i < 10; i++) {
1251                        if (!(inb(e8390_base + EN0_ISR) & interrupts))
1252                                break;
1253                        outb_p(0, e8390_base + EN0_ISR);
1254                        outb_p(interrupts, e8390_base + EN0_ISR);
1255                }
1256                if (interrupts & ENISR_OVER) 
1257                        ei_rx_overrun(dev);
1258                else if (interrupts & (ENISR_RX+ENISR_RX_ERR)) 
1259                {
1260                        /* Got a good (?) packet. */
1261                        ei_receive(dev);
1262                }
1263                /* Push the next to-transmit packet through. */
1264                if (interrupts & ENISR_TX)
1265                        ei_tx_intr(dev);
1266                else if (interrupts & ENISR_TX_ERR)
1267                        ei_tx_err(dev);
1268
1269                if (interrupts & ENISR_COUNTERS) 
1270                {
1271                        ei_local->stat.rx_frame_errors += inb_p(e8390_base + EN0_COUNTER0);
1272                        ei_local->stat.rx_crc_errors   += inb_p(e8390_base + EN0_COUNTER1);
1273                        ei_local->stat.rx_missed_errors+= inb_p(e8390_base + EN0_COUNTER2);
1274                }
1275        }
1276    
1277        if (interrupts && ei_debug) 
1278        {
1279                handled = 1;
1280                if (nr_serviced >= MAX_SERVICE) 
1281                {
1282                        /* 0xFF is valid for a card removal */
1283                        if(interrupts!=0xFF)
1284                                printk(KERN_WARNING "%s: Too much work at interrupt, status %#2.2x\n",
1285                                   dev->name, interrupts);
1286                        outb_p(ENISR_ALL, e8390_base + EN0_ISR); /* Ack. most intrs. */
1287                } else {
1288                        printk(KERN_WARNING "%s: unknown interrupt %#2x\n", dev->name, interrupts);
1289                        outb_p(0xff, e8390_base + EN0_ISR); /* Ack. all intrs. */
1290                }
1291        }
1292
1293        /* Turn 8390 interrupts back on. */
1294        ei_local->irqlock = 0;
1295        outb_p(ENISR_ALL, e8390_base + EN0_IMR);
1296
1297        spin_unlock(&ei_local->page_lock);
1298        return IRQ_RETVAL(handled);
1299}
1300
1301/**
1302 * ei_tx_err - handle transmitter error
1303 * @dev: network device which threw the exception
1304 *
1305 * A transmitter error has happened. Most likely excess collisions (which
1306 * is a fairly normal condition). If the error is one where the Tx will
1307 * have been aborted, we try and send another one right away, instead of
1308 * letting the failed packet sit and collect dust in the Tx buffer. This
1309 * is a much better solution as it avoids kernel based Tx timeouts, and
1310 * an unnecessary card reset.
1311 *
1312 * Called with lock held.
1313 */
1314
1315static void ei_tx_err(struct net_device *dev)
1316{
1317        long e8390_base = dev->base_addr;
1318        struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
1319        unsigned char txsr = inb_p(e8390_base+EN0_TSR);
1320        unsigned char tx_was_aborted = txsr & (ENTSR_ABT+ENTSR_FU);
1321
1322#ifdef VERBOSE_ERROR_DUMP
1323        printk(KERN_DEBUG "%s: transmitter error (%#2x): ", dev->name, txsr);
1324        if (txsr & ENTSR_ABT)
1325                printk("excess-collisions ");
1326        if (txsr & ENTSR_ND)
1327                printk("non-deferral ");
1328        if (txsr & ENTSR_CRS)
1329                printk("lost-carrier ");
1330        if (txsr & ENTSR_FU)
1331                printk("FIFO-underrun ");
1332        if (txsr & ENTSR_CDH)
1333                printk("lost-heartbeat ");
1334        printk("\n");
1335#endif
1336
1337        if (tx_was_aborted)
1338                ei_tx_intr(dev);
1339        else 
1340        {
1341                ei_local->stat.tx_errors++;
1342                if (txsr & ENTSR_CRS) ei_local->stat.tx_carrier_errors++;
1343                if (txsr & ENTSR_CDH) ei_local->stat.tx_heartbeat_errors++;
1344                if (txsr & ENTSR_OWC) ei_local->stat.tx_window_errors++;
1345        }
1346}
1347
1348/**
1349 * ei_tx_intr - transmit interrupt handler
1350 * @dev: network device for which tx intr is handled
1351 *
1352 * We have finished a transmit: check for errors and then trigger the next
1353 * packet to be sent. Called with lock held.
1354 */
1355
1356static void ei_tx_intr(struct net_device *dev)
1357{
1358        long e8390_base = dev->base_addr;
1359        struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
1360        int status = inb(e8390_base + EN0_TSR);
1361    
1362        /*
1363         * There are two Tx buffers, see which one finished, and trigger
1364         * the send of another one if it exists.
1365         */
1366        ei_local->txqueue--;
1367
1368        if (ei_local->tx1 < 0) 
1369        {
1370                if (ei_local->lasttx != 1 && ei_local->lasttx != -1)
1371                        printk(KERN_ERR "%s: bogus last_tx_buffer %d, tx1=%d.\n",
1372                                ei_local->name, ei_local->lasttx, ei_local->tx1);
1373                ei_local->tx1 = 0;
1374                if (ei_local->tx2 > 0) 
1375                {
1376                        ei_local->txing = 1;
1377                        NS8390_trigger_send(dev, ei_local->tx2, ei_local->tx_start_page + 6);
1378                        dev->trans_start = jiffies;
1379                        ei_local->tx2 = -1,
1380                        ei_local->lasttx = 2;
1381                }
1382                else ei_local->lasttx = 20, ei_local->txing = 0;        
1383        }
1384        else if (ei_local->tx2 < 0) 
1385        {
1386                if (ei_local->lasttx != 2  &&  ei_local->lasttx != -2)
1387                        printk("%s: bogus last_tx_buffer %d, tx2=%d.\n",
1388                                ei_local->name, ei_local->lasttx, ei_local->tx2);
1389                ei_local->tx2 = 0;
1390                if (ei_local->tx1 > 0) 
1391                {
1392                        ei_local->txing = 1;
1393                        NS8390_trigger_send(dev, ei_local->tx1, ei_local->tx_start_page);
1394                        dev->trans_start = jiffies;
1395                        ei_local->tx1 = -1;
1396                        ei_local->lasttx = 1;
1397                }
1398                else
1399                        ei_local->lasttx = 10, ei_local->txing = 0;
1400        }
1401//      else printk(KERN_WARNING "%s: unexpected TX-done interrupt, lasttx=%d.\n",
1402//                      dev->name, ei_local->lasttx);
1403
1404        /* Minimize Tx latency: update the statistics after we restart TXing. */
1405        if (status & ENTSR_COL)
1406                ei_local->stat.collisions++;
1407        if (status & ENTSR_PTX)
1408                ei_local->stat.tx_packets++;
1409        else 
1410        {
1411                ei_local->stat.tx_errors++;
1412                if (status & ENTSR_ABT) 
1413                {
1414                        ei_local->stat.tx_aborted_errors++;
1415                        ei_local->stat.collisions += 16;
1416                }
1417                if (status & ENTSR_CRS) 
1418                        ei_local->stat.tx_carrier_errors++;
1419                if (status & ENTSR_FU) 
1420                        ei_local->stat.tx_fifo_errors++;
1421                if (status & ENTSR_CDH)
1422                        ei_local->stat.tx_heartbeat_errors++;
1423                if (status & ENTSR_OWC)
1424                        ei_local->stat.tx_window_errors++;
1425        }
1426        netif_wake_queue(dev);
1427}
1428
1429/**
1430 * ei_receive - receive some packets
1431 * @dev: network device with which receive will be run
1432 *
1433 * We have a good packet(s), get it/them out of the buffers. 
1434 * Called with lock held.
1435 */
1436
1437static void ei_receive(struct net_device *dev)
1438{
1439        long e8390_base = dev->base_addr;
1440        struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
1441        unsigned char rxing_page, this_frame, next_frame;
1442        unsigned short current_offset;
1443        int rx_pkt_count = 0;
1444        struct e8390_pkt_hdr rx_frame;
1445    
1446        while (++rx_pkt_count < 10) 
1447        {
1448                int pkt_len, pkt_stat;
1449                
1450                /* Get the rx page (incoming packet pointer). */
1451                rxing_page = inb_p(e8390_base + EN1_CURPAG -1);
1452                
1453                /* Remove one frame from the ring.  Boundary is always a page behind. */
1454                this_frame = inb_p(e8390_base + EN0_BOUNDARY) + 1;
1455                if (this_frame >= ei_local->stop_page)
1456                        this_frame = ei_local->rx_start_page;
1457                
1458                /* Someday we'll omit the previous, iff we never get this message.
1459                   (There is at least one clone claimed to have a problem.)  
1460                   
1461                   Keep quiet if it looks like a card removal. One problem here
1462                   is that some clones crash in roughly the same way.
1463                 */
1464                if (ei_debug > 0  &&  this_frame != ei_local->current_page && (this_frame!=0x0 || rxing_page!=0xFF))
1465                        printk(KERN_ERR "%s: mismatched read page pointers %2x vs %2x.\n",
1466                                   dev->name, this_frame, ei_local->current_page);
1467                
1468                if (this_frame == rxing_page)   /* Read all the frames? */
1469                        break;                          /* Done for now */
1470                
1471                current_offset = this_frame << 8;
1472                ei_get_8390_hdr(dev, &rx_frame, this_frame);
1473                
1474                pkt_len = rx_frame.count - sizeof(struct e8390_pkt_hdr);
1475                pkt_stat = rx_frame.status;
1476                
1477                next_frame = this_frame + 1 + ((pkt_len+4)>>8);
1478                
1479                if (pkt_len < 60  ||  pkt_len > 1518) 
1480                {
1481                        if (ei_debug)
1482                                printk(KERN_DEBUG "%s: bogus packet size: %d, status=%#2x nxpg=%#2x.\n",
1483                                           dev->name, rx_frame.count, rx_frame.status,
1484                                           rx_frame.next);
1485                        ei_local->stat.rx_errors++;
1486                        ei_local->stat.rx_length_errors++;
1487                }
1488                 else if ((pkt_stat & 0x0F) == ENRSR_RXOK) 
1489                {
1490                        struct sk_buff *skb;
1491                        
1492                        skb = dev_alloc_skb(pkt_len+2);
1493                        if (skb == NULL) 
1494                        {
1495                                if (ei_debug > 1)
1496                                        printk(KERN_DEBUG "%s: Couldn't allocate a sk_buff of size %d.\n",
1497                                                   dev->name, pkt_len);
1498                                ei_local->stat.rx_dropped++;
1499                                break;
1500                        }
1501                        else
1502                        {
1503                                skb_reserve(skb,2);     /* IP headers on 16 byte boundaries */
1504                                skb_put(skb, pkt_len);  /* Make room */
1505                                ei_block_input(dev, pkt_len, skb, current_offset + sizeof(rx_frame));
1506                                skb->protocol=eth_type_trans(skb,dev);
1507                                netif_rx(skb);
1508                                dev->last_rx = jiffies;
1509                                ei_local->stat.rx_packets++;
1510                                ei_local->stat.rx_bytes += pkt_len;
1511                                if (pkt_stat & ENRSR_PHY)
1512                                        ei_local->stat.multicast++;
1513                        }
1514                } 
1515                else 
1516                {
1517                        if (ei_debug)
1518                                printk(KERN_DEBUG "%s: bogus packet: status=%#2x nxpg=%#2x size=%d\n",
1519                                           dev->name, rx_frame.status, rx_frame.next,
1520                                           rx_frame.count);
1521                        ei_local->stat.rx_errors++;
1522                        /* NB: The NIC counts CRC, frame and missed errors. */
1523                        if (pkt_stat & ENRSR_FO)
1524                                ei_local->stat.rx_fifo_errors++;
1525                }
1526                next_frame = rx_frame.next;
1527                
1528                /* This _should_ never happen: it's here for avoiding bad clones. */
1529                if (next_frame >= ei_local->stop_page) {
1530                        printk("%s: next frame inconsistency, %#2x\n", dev->name,
1531                                   next_frame);
1532                        next_frame = ei_local->rx_start_page;
1533                }
1534                ei_local->current_page = next_frame;
1535                outb_p(next_frame-1, e8390_base+EN0_BOUNDARY);
1536        }
1537
1538        return;
1539}
1540
1541/**
1542 * ei_rx_overrun - handle receiver overrun
1543 * @dev: network device which threw exception
1544 *
1545 * We have a receiver overrun: we have to kick the 8390 to get it started
1546 * again. Problem is that you have to kick it exactly as NS prescribes in
1547 * the updated datasheets, or "the NIC may act in an unpredictable manner."
1548 * This includes causing "the NIC to defer indefinitely when it is stopped
1549 * on a busy network."  Ugh.
1550 * Called with lock held. Don't call this with the interrupts off or your
1551 * computer will hate you - it takes 10ms or so. 
1552 */
1553
1554static void ei_rx_overrun(struct net_device *dev)
1555{
1556        axnet_dev_t *info = PRIV(dev);
1557        long e8390_base = dev->base_addr;
1558        unsigned char was_txing, must_resend = 0;
1559        struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
1560    
1561        /*
1562         * Record whether a Tx was in progress and then issue the
1563         * stop command.
1564         */
1565        was_txing = inb_p(e8390_base+E8390_CMD) & E8390_TRANS;
1566        outb_p(E8390_NODMA+E8390_PAGE0+E8390_STOP, e8390_base+E8390_CMD);
1567    
1568        if (ei_debug > 1)
1569                printk(KERN_DEBUG "%s: Receiver overrun.\n", dev->name);
1570        ei_local->stat.rx_over_errors++;
1571    
1572        /* 
1573         * Wait a full Tx time (1.2ms) + some guard time, NS says 1.6ms total.
1574         * Early datasheets said to poll the reset bit, but now they say that
1575         * it "is not a reliable indicator and subsequently should be ignored."
1576         * We wait at least 10ms.
1577         */
1578
1579        mdelay(10);
1580
1581        /*
1582         * Reset RBCR[01] back to zero as per magic incantation.
1583         */
1584        outb_p(0x00, e8390_base+EN0_RCNTLO);
1585        outb_p(0x00, e8390_base+EN0_RCNTHI);
1586
1587        /*
1588         * See if any Tx was interrupted or not. According to NS, this
1589         * step is vital, and skipping it will cause no end of havoc.
1590         */
1591
1592        if (was_txing)
1593        { 
1594                unsigned char tx_completed = inb_p(e8390_base+EN0_ISR) & (ENISR_TX+ENISR_TX_ERR);
1595                if (!tx_completed)
1596                        must_resend = 1;
1597        }
1598
1599        /*
1600         * Have to enter loopback mode and then restart the NIC before
1601         * you are allowed to slurp packets up off the ring.
1602         */
1603        outb_p(E8390_TXOFF, e8390_base + EN0_TXCR);
1604        outb_p(E8390_NODMA + E8390_PAGE0 + E8390_START, e8390_base + E8390_CMD);
1605
1606        /*
1607         * Clear the Rx ring of all the debris, and ack the interrupt.
1608         */
1609        ei_receive(dev);
1610
1611        /*
1612         * Leave loopback mode, and resend any packet that got stopped.
1613         */
1614        outb_p(E8390_TXCONFIG | info->duplex_flag, e8390_base + EN0_TXCR); 
1615        if (must_resend)
1616                outb_p(E8390_NODMA + E8390_PAGE0 + E8390_START + E8390_TRANS, e8390_base + E8390_CMD);
1617}
1618
1619/*
1620 *      Collect the stats. This is called unlocked and from several contexts.
1621 */
1622 
1623static struct net_device_stats *get_stats(struct net_device *dev)
1624{
1625        long ioaddr = dev->base_addr;
1626        struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
1627        unsigned long flags;
1628    
1629        /* If the card is stopped, just return the present stats. */
1630        if (!netif_running(dev))
1631                return &ei_local->stat;
1632
1633        spin_lock_irqsave(&ei_local->page_lock,flags);
1634        /* Read the counter registers, assuming we are in page 0. */
1635        ei_local->stat.rx_frame_errors += inb_p(ioaddr + EN0_COUNTER0);
1636        ei_local->stat.rx_crc_errors   += inb_p(ioaddr + EN0_COUNTER1);
1637        ei_local->stat.rx_missed_errors+= inb_p(ioaddr + EN0_COUNTER2);
1638        spin_unlock_irqrestore(&ei_local->page_lock, flags);
1639    
1640        return &ei_local->stat;
1641}
1642
1643/*
1644 * Form the 64 bit 8390 multicast table from the linked list of addresses
1645 * associated with this dev structure.
1646 */
1647 
1648static inline void make_mc_bits(u8 *bits, struct net_device *dev)
1649{
1650        struct dev_mc_list *dmi;
1651        u32 crc;
1652
1653        for (dmi=dev->mc_list; dmi; dmi=dmi->next) {
1654                
1655                crc = ether_crc(ETH_ALEN, dmi->dmi_addr);
1656                /* 
1657                 * The 8390 uses the 6 most significant bits of the
1658                 * CRC to index the multicast table.
1659                 */
1660                bits[crc>>29] |= (1<<((crc>>26)&7));
1661        }
1662}
1663
1664/**
1665 * do_set_multicast_list - set/clear multicast filter
1666 * @dev: net device for which multicast filter is adjusted
1667 *
1668 *      Set or clear the multicast filter for this adaptor.
1669 *      Must be called with lock held. 
1670 */
1671 
1672static void do_set_multicast_list(struct net_device *dev)
1673{
1674        long e8390_base = dev->base_addr;
1675        int i;
1676        struct ei_device *ei_local = (struct ei_device*)netdev_priv(dev);
1677
1678        if (!(dev->flags&(IFF_PROMISC|IFF_ALLMULTI))) {
1679                memset(ei_local->mcfilter, 0, 8);
1680                if (dev->mc_list)
1681                        make_mc_bits(ei_local->mcfilter, dev);
1682        } else {
1683                /* set to accept-all */
1684                memset(ei_local->mcfilter, 0xFF, 8);
1685        }
1686
1687        outb_p(E8390_NODMA + E8390_PAGE1, e8390_base + E8390_CMD);
1688        for(i = 0; i < 8; i++) 
1689        {
1690                outb_p(ei_local->mcfilter[i], e8390_base + EN1_MULT_SHIFT(i));
1691        }
1692        outb_p(E8390_NODMA + E8390_PAGE0, e8390_base + E8390_CMD);
1693
1694        if(dev->flags&IFF_PROMISC)
1695                outb_p(E8390_RXCONFIG | 0x58, e8390_base + EN0_RXCR);
1696        else if(dev->flags&IFF_ALLMULTI || dev->mc_list)
1697                outb_p(E8390_RXCONFIG | 0x48, e8390_base + EN0_RXCR);
1698        else
1699                outb_p(E8390_RXCONFIG | 0x40, e8390_base + EN0_RXCR);
1700
1701        outb_p(E8390_NODMA+E8390_PAGE0+E8390_START, e8390_base+E8390_CMD);
1702}
1703
1704/*
1705 *      Called without lock held. This is invoked from user context and may
1706 *      be parallel to just about everything else. Its also fairly quick and
1707 *      not called too often. Must protect against both bh and irq users
1708 */
1709
1710static void set_multicast_list(struct net_device *dev)
1711{
1712        unsigned long flags;
1713
1714        spin_lock_irqsave(&dev_lock(dev), flags);
1715        do_set_multicast_list(dev);
1716        spin_unlock_irqrestore(&dev_lock(dev), flags);
1717}       
1718
1719/**
1720 * axdev_setup - init rest of 8390 device struct
1721 * @dev: network device structure to init
1722 *
1723 * Initialize the rest of the 8390 device structure.  Do NOT __init
1724 * this, as it is used by 8390 based modular drivers too.
1725 */
1726
1727static void axdev_setup(struct net_device *dev)
1728{
1729        struct ei_device *ei_local;
1730        if (ei_debug > 1)
1731                printk(version_8390);
1732    
1733        ei_local = (struct ei_device *)netdev_priv(dev);
1734        spin_lock_init(&ei_local->page_lock);
1735    
1736        dev->hard_start_xmit = &ei_start_xmit;
1737        dev->get_stats  = get_stats;
1738        dev->set_multicast_list = &set_multicast_list;
1739
1740        ether_setup(dev);
1741}
1742
1743/* This page of functions should be 8390 generic */
1744/* Follow National Semi's recommendations for initializing the "NIC". */
1745
1746/**
1747 * AX88190_init - initialize 8390 hardware
1748 * @dev: network device to initialize
1749 * @startp: boolean.  non-zero value to initiate chip processing
1750 *
1751 *      Must be called with lock held.
1752 */
1753
1754static void AX88190_init(struct net_device *dev, int startp)
1755{
1756        axnet_dev_t *info = PRIV(dev);
1757        long e8390_base = dev->base_addr;
1758        struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
1759        int i;
1760        int endcfg = ei_local->word16 ? (0x48 | ENDCFG_WTS) : 0x48;
1761    
1762        if(sizeof(struct e8390_pkt_hdr)!=4)
1763                panic("8390.c: header struct mispacked\n");    
1764        /* Follow National Semi's recommendations for initing the DP83902. */
1765        outb_p(E8390_NODMA+E8390_PAGE0+E8390_STOP, e8390_base+E8390_CMD); /* 0x21 */
1766        outb_p(endcfg, e8390_base + EN0_DCFG);  /* 0x48 or 0x49 */
1767        /* Clear the remote byte count registers. */
1768        outb_p(0x00,  e8390_base + EN0_RCNTLO);
1769        outb_p(0x00,  e8390_base + EN0_RCNTHI);
1770        /* Set to monitor and loopback mode -- this is vital!. */
1771        outb_p(E8390_RXOFF|0x40, e8390_base + EN0_RXCR); /* 0x60 */
1772        outb_p(E8390_TXOFF, e8390_base + EN0_TXCR); /* 0x02 */
1773        /* Set the transmit page and receive ring. */
1774        outb_p(ei_local->tx_start_page, e8390_base + EN0_TPSR);
1775        ei_local->tx1 = ei_local->tx2 = 0;
1776        outb_p(ei_local->rx_start_page, e8390_base + EN0_STARTPG);
1777        outb_p(ei_local->stop_page-1, e8390_base + EN0_BOUNDARY);       /* 3c503 says 0x3f,NS0x26*/
1778        ei_local->current_page = ei_local->rx_start_page;               /* assert boundary+1 */
1779        outb_p(ei_local->stop_page, e8390_base + EN0_STOPPG);
1780        /* Clear the pending interrupts and mask. */
1781        outb_p(0xFF, e8390_base + EN0_ISR);
1782        outb_p(0x00,  e8390_base + EN0_IMR);
1783    
1784        /* Copy the station address into the DS8390 registers. */
1785
1786        outb_p(E8390_NODMA + E8390_PAGE1 + E8390_STOP, e8390_base+E8390_CMD); /* 0x61 */
1787        for(i = 0; i < 6; i++) 
1788        {
1789                outb_p(dev->dev_addr[i], e8390_base + EN1_PHYS_SHIFT(i));
1790                if(inb_p(e8390_base + EN1_PHYS_SHIFT(i))!=dev->dev_addr[i])
1791                        printk(KERN_ERR "Hw. address read/write mismap %d\n",i);
1792        }
1793
1794        outb_p(ei_local->rx_start_page, e8390_base + EN1_CURPAG);
1795        outb_p(E8390_NODMA+E8390_PAGE0+E8390_STOP, e8390_base+E8390_CMD);
1796
1797        netif_start_queue(dev);
1798        ei_local->tx1 = ei_local->tx2 = 0;
1799        ei_local->txing = 0;
1800
1801        if (startp) 
1802        {
1803                outb_p(0xff,  e8390_base + EN0_ISR);
1804                outb_p(ENISR_ALL,  e8390_base + EN0_IMR);
1805                outb_p(E8390_NODMA+E8390_PAGE0+E8390_START, e8390_base+E8390_CMD);
1806                outb_p(E8390_TXCONFIG | info->duplex_flag,
1807                       e8390_base + EN0_TXCR); /* xmit on. */
1808                /* 3c503 TechMan says rxconfig only after the NIC is started. */
1809                outb_p(E8390_RXCONFIG | 0x40, e8390_base + EN0_RXCR); /* rx on, */
1810                do_set_multicast_list(dev);     /* (re)load the mcast table */
1811        }
1812}
1813
1814/* Trigger a transmit start, assuming the length is valid. 
1815   Always called with the page lock held */
1816   
1817static void NS8390_trigger_send(struct net_device *dev, unsigned int length,
1818                                                                int start_page)
1819{
1820        long e8390_base = dev->base_addr;
1821        struct ei_device *ei_local __attribute((unused)) = (struct ei_device *) netdev_priv(dev);
1822    
1823        if (inb_p(e8390_base) & E8390_TRANS) 
1824        {
1825                printk(KERN_WARNING "%s: trigger_send() called with the transmitter busy.\n",
1826                        dev->name);
1827                return;
1828        }
1829        outb_p(length & 0xff, e8390_base + EN0_TCNTLO);
1830        outb_p(length >> 8, e8390_base + EN0_TCNTHI);
1831        outb_p(start_page, e8390_base + EN0_TPSR);
1832        outb_p(E8390_NODMA+E8390_TRANS+E8390_START, e8390_base+E8390_CMD);
1833}
1834