linux/drivers/net/3c527.c
<<
>>
Prefs
   1/* 3c527.c: 3Com Etherlink/MC32 driver for Linux 2.4 and 2.6.
   2 *
   3 *      (c) Copyright 1998 Red Hat Software Inc
   4 *      Written by Alan Cox.
   5 *      Further debugging by Carl Drougge.
   6 *      Initial SMP support by Felipe W Damasio <felipewd@terra.com.br>
   7 *      Heavily modified by Richard Procter <rnp@paradise.net.nz>
   8 *
   9 *      Based on skeleton.c written 1993-94 by Donald Becker and ne2.c
  10 *      (for the MCA stuff) written by Wim Dumon.
  11 *
  12 *      Thanks to 3Com for making this possible by providing me with the
  13 *      documentation.
  14 *
  15 *      This software may be used and distributed according to the terms
  16 *      of the GNU General Public License, incorporated herein by reference.
  17 *
  18 */
  19
  20#define DRV_NAME                "3c527"
  21#define DRV_VERSION             "0.7-SMP"
  22#define DRV_RELDATE             "2003/09/21"
  23
  24static const char *version =
  25DRV_NAME ".c:v" DRV_VERSION " " DRV_RELDATE " Richard Procter <rnp@paradise.net.nz>\n";
  26
  27/**
  28 * DOC: Traps for the unwary
  29 *
  30 *      The diagram (Figure 1-1) and the POS summary disagree with the
  31 *      "Interrupt Level" section in the manual.
  32 *
  33 *      The manual contradicts itself when describing the minimum number
  34 *      buffers in the 'configure lists' command.
  35 *      My card accepts a buffer config of 4/4.
  36 *
  37 *      Setting the SAV BP bit does not save bad packets, but
  38 *      only enables RX on-card stats collection.
  39 *
  40 *      The documentation in places seems to miss things. In actual fact
  41 *      I've always eventually found everything is documented, it just
  42 *      requires careful study.
  43 *
  44 * DOC: Theory Of Operation
  45 *
  46 *      The 3com 3c527 is a 32bit MCA bus mastering adapter with a large
  47 *      amount of on board intelligence that housekeeps a somewhat dumber
  48 *      Intel NIC. For performance we want to keep the transmit queue deep
  49 *      as the card can transmit packets while fetching others from main
  50 *      memory by bus master DMA. Transmission and reception are driven by
  51 *      circular buffer queues.
  52 *
  53 *      The mailboxes can be used for controlling how the card traverses
  54 *      its buffer rings, but are used only for inital setup in this
  55 *      implementation.  The exec mailbox allows a variety of commands to
  56 *      be executed. Each command must complete before the next is
  57 *      executed. Primarily we use the exec mailbox for controlling the
  58 *      multicast lists.  We have to do a certain amount of interesting
  59 *      hoop jumping as the multicast list changes can occur in interrupt
  60 *      state when the card has an exec command pending. We defer such
  61 *      events until the command completion interrupt.
  62 *
  63 *      A copy break scheme (taken from 3c59x.c) is employed whereby
  64 *      received frames exceeding a configurable length are passed
  65 *      directly to the higher networking layers without incuring a copy,
  66 *      in what amounts to a time/space trade-off.
  67 *
  68 *      The card also keeps a large amount of statistical information
  69 *      on-board. In a perfect world, these could be used safely at no
  70 *      cost. However, lacking information to the contrary, processing
  71 *      them without races would involve so much extra complexity as to
  72 *      make it unworthwhile to do so. In the end, a hybrid SW/HW
  73 *      implementation was made necessary --- see mc32_update_stats().
  74 *
  75 * DOC: Notes
  76 *
  77 *      It should be possible to use two or more cards, but at this stage
  78 *      only by loading two copies of the same module.
  79 *
  80 *      The on-board 82586 NIC has trouble receiving multiple
  81 *      back-to-back frames and so is likely to drop packets from fast
  82 *      senders.
  83**/
  84
  85#include <linux/module.h>
  86
  87#include <linux/errno.h>
  88#include <linux/netdevice.h>
  89#include <linux/etherdevice.h>
  90#include <linux/if_ether.h>
  91#include <linux/init.h>
  92#include <linux/kernel.h>
  93#include <linux/types.h>
  94#include <linux/fcntl.h>
  95#include <linux/interrupt.h>
  96#include <linux/mca-legacy.h>
  97#include <linux/ioport.h>
  98#include <linux/in.h>
  99#include <linux/skbuff.h>
 100#include <linux/slab.h>
 101#include <linux/string.h>
 102#include <linux/wait.h>
 103#include <linux/ethtool.h>
 104#include <linux/completion.h>
 105#include <linux/bitops.h>
 106
 107#include <asm/semaphore.h>
 108#include <asm/uaccess.h>
 109#include <asm/system.h>
 110#include <asm/io.h>
 111#include <asm/dma.h>
 112
 113#include "3c527.h"
 114
 115MODULE_LICENSE("GPL");
 116
 117/*
 118 * The name of the card. Is used for messages and in the requests for
 119 * io regions, irqs and dma channels
 120 */
 121static const char* cardname = DRV_NAME;
 122
 123/* use 0 for production, 1 for verification, >2 for debug */
 124#ifndef NET_DEBUG
 125#define NET_DEBUG 2
 126#endif
 127
 128#undef DEBUG_IRQ
 129
 130static unsigned int mc32_debug = NET_DEBUG;
 131
 132/* The number of low I/O ports used by the ethercard. */
 133#define MC32_IO_EXTENT  8
 134
 135/* As implemented, values must be a power-of-2 -- 4/8/16/32 */
 136#define TX_RING_LEN     32       /* Typically the card supports 37  */
 137#define RX_RING_LEN     8        /*     "       "        "          */
 138
 139/* Copy break point, see above for details.
 140 * Setting to > 1512 effectively disables this feature. */
 141#define RX_COPYBREAK    200      /* Value from 3c59x.c */
 142
 143/* Issue the 82586 workaround command - this is for "busy lans", but
 144 * basically means for all lans now days - has a performance (latency)
 145 * cost, but best set. */
 146static const int WORKAROUND_82586=1;
 147
 148/* Pointers to buffers and their on-card records */
 149struct mc32_ring_desc
 150{
 151        volatile struct skb_header *p;
 152        struct sk_buff *skb;
 153};
 154
 155/* Information that needs to be kept for each board. */
 156struct mc32_local
 157{
 158        int slot;
 159
 160        u32 base;
 161        struct net_device_stats net_stats;
 162        volatile struct mc32_mailbox *rx_box;
 163        volatile struct mc32_mailbox *tx_box;
 164        volatile struct mc32_mailbox *exec_box;
 165        volatile struct mc32_stats *stats;    /* Start of on-card statistics */
 166        u16 tx_chain;           /* Transmit list start offset */
 167        u16 rx_chain;           /* Receive list start offset */
 168        u16 tx_len;             /* Transmit list count */
 169        u16 rx_len;             /* Receive list count */
 170
 171        u16 xceiver_desired_state; /* HALTED or RUNNING */
 172        u16 cmd_nonblocking;    /* Thread is uninterested in command result */
 173        u16 mc_reload_wait;     /* A multicast load request is pending */
 174        u32 mc_list_valid;      /* True when the mclist is set */
 175
 176        struct mc32_ring_desc tx_ring[TX_RING_LEN];     /* Host Transmit ring */
 177        struct mc32_ring_desc rx_ring[RX_RING_LEN];     /* Host Receive ring */
 178
 179        atomic_t tx_count;      /* buffers left */
 180        atomic_t tx_ring_head;  /* index to tx en-queue end */
 181        u16 tx_ring_tail;       /* index to tx de-queue end */
 182
 183        u16 rx_ring_tail;       /* index to rx de-queue end */
 184
 185        struct semaphore cmd_mutex;    /* Serialises issuing of execute commands */
 186        struct completion execution_cmd; /* Card has completed an execute command */
 187        struct completion xceiver_cmd;   /* Card has completed a tx or rx command */
 188};
 189
 190/* The station (ethernet) address prefix, used for a sanity check. */
 191#define SA_ADDR0 0x02
 192#define SA_ADDR1 0x60
 193#define SA_ADDR2 0xAC
 194
 195struct mca_adapters_t {
 196        unsigned int    id;
 197        char            *name;
 198};
 199
 200static const struct mca_adapters_t mc32_adapters[] = {
 201        { 0x0041, "3COM EtherLink MC/32" },
 202        { 0x8EF5, "IBM High Performance Lan Adapter" },
 203        { 0x0000, NULL }
 204};
 205
 206
 207/* Macros for ring index manipulations */
 208static inline u16 next_rx(u16 rx) { return (rx+1)&(RX_RING_LEN-1); };
 209static inline u16 prev_rx(u16 rx) { return (rx-1)&(RX_RING_LEN-1); };
 210
 211static inline u16 next_tx(u16 tx) { return (tx+1)&(TX_RING_LEN-1); };
 212
 213
 214/* Index to functions, as function prototypes. */
 215static int      mc32_probe1(struct net_device *dev, int ioaddr);
 216static int      mc32_command(struct net_device *dev, u16 cmd, void *data, int len);
 217static int      mc32_open(struct net_device *dev);
 218static void     mc32_timeout(struct net_device *dev);
 219static int      mc32_send_packet(struct sk_buff *skb, struct net_device *dev);
 220static irqreturn_t mc32_interrupt(int irq, void *dev_id);
 221static int      mc32_close(struct net_device *dev);
 222static struct   net_device_stats *mc32_get_stats(struct net_device *dev);
 223static void     mc32_set_multicast_list(struct net_device *dev);
 224static void     mc32_reset_multicast_list(struct net_device *dev);
 225static const struct ethtool_ops netdev_ethtool_ops;
 226
 227static void cleanup_card(struct net_device *dev)
 228{
 229        struct mc32_local *lp = netdev_priv(dev);
 230        unsigned slot = lp->slot;
 231        mca_mark_as_unused(slot);
 232        mca_set_adapter_name(slot, NULL);
 233        free_irq(dev->irq, dev);
 234        release_region(dev->base_addr, MC32_IO_EXTENT);
 235}
 236
 237/**
 238 * mc32_probe   -       Search for supported boards
 239 * @unit: interface number to use
 240 *
 241 * Because MCA bus is a real bus and we can scan for cards we could do a
 242 * single scan for all boards here. Right now we use the passed in device
 243 * structure and scan for only one board. This needs fixing for modules
 244 * in particular.
 245 */
 246
 247struct net_device *__init mc32_probe(int unit)
 248{
 249        struct net_device *dev = alloc_etherdev(sizeof(struct mc32_local));
 250        static int current_mca_slot = -1;
 251        int i;
 252        int err;
 253
 254        if (!dev)
 255                return ERR_PTR(-ENOMEM);
 256
 257        if (unit >= 0)
 258                sprintf(dev->name, "eth%d", unit);
 259
 260        /* Do not check any supplied i/o locations.
 261           POS registers usually don't fail :) */
 262
 263        /* MCA cards have POS registers.
 264           Autodetecting MCA cards is extremely simple.
 265           Just search for the card. */
 266
 267        for(i = 0; (mc32_adapters[i].name != NULL); i++) {
 268                current_mca_slot =
 269                        mca_find_unused_adapter(mc32_adapters[i].id, 0);
 270
 271                if(current_mca_slot != MCA_NOTFOUND) {
 272                        if(!mc32_probe1(dev, current_mca_slot))
 273                        {
 274                                mca_set_adapter_name(current_mca_slot,
 275                                                mc32_adapters[i].name);
 276                                mca_mark_as_used(current_mca_slot);
 277                                err = register_netdev(dev);
 278                                if (err) {
 279                                        cleanup_card(dev);
 280                                        free_netdev(dev);
 281                                        dev = ERR_PTR(err);
 282                                }
 283                                return dev;
 284                        }
 285
 286                }
 287        }
 288        free_netdev(dev);
 289        return ERR_PTR(-ENODEV);
 290}
 291
 292/**
 293 * mc32_probe1  -       Check a given slot for a board and test the card
 294 * @dev:  Device structure to fill in
 295 * @slot: The MCA bus slot being used by this card
 296 *
 297 * Decode the slot data and configure the card structures. Having done this we
 298 * can reset the card and configure it. The card does a full self test cycle
 299 * in firmware so we have to wait for it to return and post us either a
 300 * failure case or some addresses we use to find the board internals.
 301 */
 302
 303static int __init mc32_probe1(struct net_device *dev, int slot)
 304{
 305        static unsigned version_printed;
 306        int i, err;
 307        u8 POS;
 308        u32 base;
 309        struct mc32_local *lp = netdev_priv(dev);
 310        static u16 mca_io_bases[]={
 311                0x7280,0x7290,
 312                0x7680,0x7690,
 313                0x7A80,0x7A90,
 314                0x7E80,0x7E90
 315        };
 316        static u32 mca_mem_bases[]={
 317                0x00C0000,
 318                0x00C4000,
 319                0x00C8000,
 320                0x00CC000,
 321                0x00D0000,
 322                0x00D4000,
 323                0x00D8000,
 324                0x00DC000
 325        };
 326        static char *failures[]={
 327                "Processor instruction",
 328                "Processor data bus",
 329                "Processor data bus",
 330                "Processor data bus",
 331                "Adapter bus",
 332                "ROM checksum",
 333                "Base RAM",
 334                "Extended RAM",
 335                "82586 internal loopback",
 336                "82586 initialisation failure",
 337                "Adapter list configuration error"
 338        };
 339        DECLARE_MAC_BUF(mac);
 340
 341        /* Time to play MCA games */
 342
 343        if (mc32_debug  &&  version_printed++ == 0)
 344                printk(KERN_DEBUG "%s", version);
 345
 346        printk(KERN_INFO "%s: %s found in slot %d:", dev->name, cardname, slot);
 347
 348        POS = mca_read_stored_pos(slot, 2);
 349
 350        if(!(POS&1))
 351        {
 352                printk(" disabled.\n");
 353                return -ENODEV;
 354        }
 355
 356        /* Fill in the 'dev' fields. */
 357        dev->base_addr = mca_io_bases[(POS>>1)&7];
 358        dev->mem_start = mca_mem_bases[(POS>>4)&7];
 359
 360        POS = mca_read_stored_pos(slot, 4);
 361        if(!(POS&1))
 362        {
 363                printk("memory window disabled.\n");
 364                return -ENODEV;
 365        }
 366
 367        POS = mca_read_stored_pos(slot, 5);
 368
 369        i=(POS>>4)&3;
 370        if(i==3)
 371        {
 372                printk("invalid memory window.\n");
 373                return -ENODEV;
 374        }
 375
 376        i*=16384;
 377        i+=16384;
 378
 379        dev->mem_end=dev->mem_start + i;
 380
 381        dev->irq = ((POS>>2)&3)+9;
 382
 383        if(!request_region(dev->base_addr, MC32_IO_EXTENT, cardname))
 384        {
 385                printk("io 0x%3lX, which is busy.\n", dev->base_addr);
 386                return -EBUSY;
 387        }
 388
 389        printk("io 0x%3lX irq %d mem 0x%lX (%dK)\n",
 390                dev->base_addr, dev->irq, dev->mem_start, i/1024);
 391
 392
 393        /* We ought to set the cache line size here.. */
 394
 395
 396        /*
 397         *      Go PROM browsing
 398         */
 399
 400        /* Retrieve and print the ethernet address. */
 401        for (i = 0; i < 6; i++)
 402        {
 403                mca_write_pos(slot, 6, i+12);
 404                mca_write_pos(slot, 7, 0);
 405
 406                dev->dev_addr[i] = mca_read_pos(slot,3);
 407        }
 408
 409        printk("%s: Address %s", dev->name, print_mac(mac, dev->dev_addr));
 410
 411        mca_write_pos(slot, 6, 0);
 412        mca_write_pos(slot, 7, 0);
 413
 414        POS = mca_read_stored_pos(slot, 4);
 415
 416        if(POS&2)
 417                printk(" : BNC port selected.\n");
 418        else
 419                printk(" : AUI port selected.\n");
 420
 421        POS=inb(dev->base_addr+HOST_CTRL);
 422        POS|=HOST_CTRL_ATTN|HOST_CTRL_RESET;
 423        POS&=~HOST_CTRL_INTE;
 424        outb(POS, dev->base_addr+HOST_CTRL);
 425        /* Reset adapter */
 426        udelay(100);
 427        /* Reset off */
 428        POS&=~(HOST_CTRL_ATTN|HOST_CTRL_RESET);
 429        outb(POS, dev->base_addr+HOST_CTRL);
 430
 431        udelay(300);
 432
 433        /*
 434         *      Grab the IRQ
 435         */
 436
 437        err = request_irq(dev->irq, &mc32_interrupt, IRQF_SHARED | IRQF_SAMPLE_RANDOM, DRV_NAME, dev);
 438        if (err) {
 439                release_region(dev->base_addr, MC32_IO_EXTENT);
 440                printk(KERN_ERR "%s: unable to get IRQ %d.\n", DRV_NAME, dev->irq);
 441                goto err_exit_ports;
 442        }
 443
 444        memset(lp, 0, sizeof(struct mc32_local));
 445        lp->slot = slot;
 446
 447        i=0;
 448
 449        base = inb(dev->base_addr);
 450
 451        while(base == 0xFF)
 452        {
 453                i++;
 454                if(i == 1000)
 455                {
 456                        printk(KERN_ERR "%s: failed to boot adapter.\n", dev->name);
 457                        err = -ENODEV;
 458                        goto err_exit_irq;
 459                }
 460                udelay(1000);
 461                if(inb(dev->base_addr+2)&(1<<5))
 462                        base = inb(dev->base_addr);
 463        }
 464
 465        if(base>0)
 466        {
 467                if(base < 0x0C)
 468                        printk(KERN_ERR "%s: %s%s.\n", dev->name, failures[base-1],
 469                                base<0x0A?" test failure":"");
 470                else
 471                        printk(KERN_ERR "%s: unknown failure %d.\n", dev->name, base);
 472                err = -ENODEV;
 473                goto err_exit_irq;
 474        }
 475
 476        base=0;
 477        for(i=0;i<4;i++)
 478        {
 479                int n=0;
 480
 481                while(!(inb(dev->base_addr+2)&(1<<5)))
 482                {
 483                        n++;
 484                        udelay(50);
 485                        if(n>100)
 486                        {
 487                                printk(KERN_ERR "%s: mailbox read fail (%d).\n", dev->name, i);
 488                                err = -ENODEV;
 489                                goto err_exit_irq;
 490                        }
 491                }
 492
 493                base|=(inb(dev->base_addr)<<(8*i));
 494        }
 495
 496        lp->exec_box=isa_bus_to_virt(dev->mem_start+base);
 497
 498        base=lp->exec_box->data[1]<<16|lp->exec_box->data[0];
 499
 500        lp->base = dev->mem_start+base;
 501
 502        lp->rx_box=isa_bus_to_virt(lp->base + lp->exec_box->data[2]);
 503        lp->tx_box=isa_bus_to_virt(lp->base + lp->exec_box->data[3]);
 504
 505        lp->stats = isa_bus_to_virt(lp->base + lp->exec_box->data[5]);
 506
 507        /*
 508         *      Descriptor chains (card relative)
 509         */
 510
 511        lp->tx_chain            = lp->exec_box->data[8];   /* Transmit list start offset */
 512        lp->rx_chain            = lp->exec_box->data[10];  /* Receive list start offset */
 513        lp->tx_len              = lp->exec_box->data[9];   /* Transmit list count */
 514        lp->rx_len              = lp->exec_box->data[11];  /* Receive list count */
 515
 516        init_MUTEX_LOCKED(&lp->cmd_mutex);
 517        init_completion(&lp->execution_cmd);
 518        init_completion(&lp->xceiver_cmd);
 519
 520        printk("%s: Firmware Rev %d. %d RX buffers, %d TX buffers. Base of 0x%08X.\n",
 521                dev->name, lp->exec_box->data[12], lp->rx_len, lp->tx_len, lp->base);
 522
 523        dev->open               = mc32_open;
 524        dev->stop               = mc32_close;
 525        dev->hard_start_xmit    = mc32_send_packet;
 526        dev->get_stats          = mc32_get_stats;
 527        dev->set_multicast_list = mc32_set_multicast_list;
 528        dev->tx_timeout         = mc32_timeout;
 529        dev->watchdog_timeo     = HZ*5; /* Board does all the work */
 530        dev->ethtool_ops        = &netdev_ethtool_ops;
 531
 532        return 0;
 533
 534err_exit_irq:
 535        free_irq(dev->irq, dev);
 536err_exit_ports:
 537        release_region(dev->base_addr, MC32_IO_EXTENT);
 538        return err;
 539}
 540
 541
 542/**
 543 *      mc32_ready_poll         -       wait until we can feed it a command
 544 *      @dev:   The device to wait for
 545 *
 546 *      Wait until the card becomes ready to accept a command via the
 547 *      command register. This tells us nothing about the completion
 548 *      status of any pending commands and takes very little time at all.
 549 */
 550
 551static inline void mc32_ready_poll(struct net_device *dev)
 552{
 553        int ioaddr = dev->base_addr;
 554        while(!(inb(ioaddr+HOST_STATUS)&HOST_STATUS_CRR));
 555}
 556
 557
 558/**
 559 *      mc32_command_nowait     -       send a command non blocking
 560 *      @dev: The 3c527 to issue the command to
 561 *      @cmd: The command word to write to the mailbox
 562 *      @data: A data block if the command expects one
 563 *      @len: Length of the data block
 564 *
 565 *      Send a command from interrupt state. If there is a command
 566 *      currently being executed then we return an error of -1. It
 567 *      simply isn't viable to wait around as commands may be
 568 *      slow. This can theoretically be starved on SMP, but it's hard
 569 *      to see a realistic situation.  We do not wait for the command
 570 *      to complete --- we rely on the interrupt handler to tidy up
 571 *      after us.
 572 */
 573
 574static int mc32_command_nowait(struct net_device *dev, u16 cmd, void *data, int len)
 575{
 576        struct mc32_local *lp = netdev_priv(dev);
 577        int ioaddr = dev->base_addr;
 578        int ret = -1;
 579
 580        if (down_trylock(&lp->cmd_mutex) == 0)
 581        {
 582                lp->cmd_nonblocking=1;
 583                lp->exec_box->mbox=0;
 584                lp->exec_box->mbox=cmd;
 585                memcpy((void *)lp->exec_box->data, data, len);
 586                barrier();      /* the memcpy forgot the volatile so be sure */
 587
 588                /* Send the command */
 589                mc32_ready_poll(dev);
 590                outb(1<<6, ioaddr+HOST_CMD);
 591
 592                ret = 0;
 593
 594                /* Interrupt handler will signal mutex on completion */
 595        }
 596
 597        return ret;
 598}
 599
 600
 601/**
 602 *      mc32_command    -       send a command and sleep until completion
 603 *      @dev: The 3c527 card to issue the command to
 604 *      @cmd: The command word to write to the mailbox
 605 *      @data: A data block if the command expects one
 606 *      @len: Length of the data block
 607 *
 608 *      Sends exec commands in a user context. This permits us to wait around
 609 *      for the replies and also to wait for the command buffer to complete
 610 *      from a previous command before we execute our command. After our
 611 *      command completes we will attempt any pending multicast reload
 612 *      we blocked off by hogging the exec buffer.
 613 *
 614 *      You feed the card a command, you wait, it interrupts you get a
 615 *      reply. All well and good. The complication arises because you use
 616 *      commands for filter list changes which come in at bh level from things
 617 *      like IPV6 group stuff.
 618 */
 619
 620static int mc32_command(struct net_device *dev, u16 cmd, void *data, int len)
 621{
 622        struct mc32_local *lp = netdev_priv(dev);
 623        int ioaddr = dev->base_addr;
 624        int ret = 0;
 625
 626        down(&lp->cmd_mutex);
 627
 628        /*
 629         *     My Turn
 630         */
 631
 632        lp->cmd_nonblocking=0;
 633        lp->exec_box->mbox=0;
 634        lp->exec_box->mbox=cmd;
 635        memcpy((void *)lp->exec_box->data, data, len);
 636        barrier();      /* the memcpy forgot the volatile so be sure */
 637
 638        mc32_ready_poll(dev);
 639        outb(1<<6, ioaddr+HOST_CMD);
 640
 641        wait_for_completion(&lp->execution_cmd);
 642
 643        if(lp->exec_box->mbox&(1<<13))
 644                ret = -1;
 645
 646        up(&lp->cmd_mutex);
 647
 648        /*
 649         *      A multicast set got blocked - try it now
 650         */
 651
 652        if(lp->mc_reload_wait)
 653        {
 654                mc32_reset_multicast_list(dev);
 655        }
 656
 657        return ret;
 658}
 659
 660
 661/**
 662 *      mc32_start_transceiver  -       tell board to restart tx/rx
 663 *      @dev: The 3c527 card to issue the command to
 664 *
 665 *      This may be called from the interrupt state, where it is used
 666 *      to restart the rx ring if the card runs out of rx buffers.
 667 *
 668 *      We must first check if it's ok to (re)start the transceiver. See
 669 *      mc32_close for details.
 670 */
 671
 672static void mc32_start_transceiver(struct net_device *dev) {
 673
 674        struct mc32_local *lp = netdev_priv(dev);
 675        int ioaddr = dev->base_addr;
 676
 677        /* Ignore RX overflow on device closure */
 678        if (lp->xceiver_desired_state==HALTED)
 679                return;
 680
 681        /* Give the card the offset to the post-EOL-bit RX descriptor */
 682        mc32_ready_poll(dev);
 683        lp->rx_box->mbox=0;
 684        lp->rx_box->data[0]=lp->rx_ring[prev_rx(lp->rx_ring_tail)].p->next;
 685        outb(HOST_CMD_START_RX, ioaddr+HOST_CMD);
 686
 687        mc32_ready_poll(dev);
 688        lp->tx_box->mbox=0;
 689        outb(HOST_CMD_RESTRT_TX, ioaddr+HOST_CMD);   /* card ignores this on RX restart */
 690
 691        /* We are not interrupted on start completion */
 692}
 693
 694
 695/**
 696 *      mc32_halt_transceiver   -       tell board to stop tx/rx
 697 *      @dev: The 3c527 card to issue the command to
 698 *
 699 *      We issue the commands to halt the card's transceiver. In fact,
 700 *      after some experimenting we now simply tell the card to
 701 *      suspend. When issuing aborts occasionally odd things happened.
 702 *
 703 *      We then sleep until the card has notified us that both rx and
 704 *      tx have been suspended.
 705 */
 706
 707static void mc32_halt_transceiver(struct net_device *dev)
 708{
 709        struct mc32_local *lp = netdev_priv(dev);
 710        int ioaddr = dev->base_addr;
 711
 712        mc32_ready_poll(dev);
 713        lp->rx_box->mbox=0;
 714        outb(HOST_CMD_SUSPND_RX, ioaddr+HOST_CMD);
 715        wait_for_completion(&lp->xceiver_cmd);
 716
 717        mc32_ready_poll(dev);
 718        lp->tx_box->mbox=0;
 719        outb(HOST_CMD_SUSPND_TX, ioaddr+HOST_CMD);
 720        wait_for_completion(&lp->xceiver_cmd);
 721}
 722
 723
 724/**
 725 *      mc32_load_rx_ring       -       load the ring of receive buffers
 726 *      @dev: 3c527 to build the ring for
 727 *
 728 *      This initalises the on-card and driver datastructures to
 729 *      the point where mc32_start_transceiver() can be called.
 730 *
 731 *      The card sets up the receive ring for us. We are required to use the
 732 *      ring it provides, although the size of the ring is configurable.
 733 *
 734 *      We allocate an sk_buff for each ring entry in turn and
 735 *      initalise its house-keeping info. At the same time, we read
 736 *      each 'next' pointer in our rx_ring array. This reduces slow
 737 *      shared-memory reads and makes it easy to access predecessor
 738 *      descriptors.
 739 *
 740 *      We then set the end-of-list bit for the last entry so that the
 741 *      card will know when it has run out of buffers.
 742 */
 743
 744static int mc32_load_rx_ring(struct net_device *dev)
 745{
 746        struct mc32_local *lp = netdev_priv(dev);
 747        int i;
 748        u16 rx_base;
 749        volatile struct skb_header *p;
 750
 751        rx_base=lp->rx_chain;
 752
 753        for(i=0; i<RX_RING_LEN; i++) {
 754                lp->rx_ring[i].skb=alloc_skb(1532, GFP_KERNEL);
 755                if (lp->rx_ring[i].skb==NULL) {
 756                        for (;i>=0;i--)
 757                                kfree_skb(lp->rx_ring[i].skb);
 758                        return -ENOBUFS;
 759                }
 760                skb_reserve(lp->rx_ring[i].skb, 18);
 761
 762                p=isa_bus_to_virt(lp->base+rx_base);
 763
 764                p->control=0;
 765                p->data=isa_virt_to_bus(lp->rx_ring[i].skb->data);
 766                p->status=0;
 767                p->length=1532;
 768
 769                lp->rx_ring[i].p=p;
 770                rx_base=p->next;
 771        }
 772
 773        lp->rx_ring[i-1].p->control |= CONTROL_EOL;
 774
 775        lp->rx_ring_tail=0;
 776
 777        return 0;
 778}
 779
 780
 781/**
 782 *      mc32_flush_rx_ring      -       free the ring of receive buffers
 783 *      @lp: Local data of 3c527 to flush the rx ring of
 784 *
 785 *      Free the buffer for each ring slot. This may be called
 786 *      before mc32_load_rx_ring(), eg. on error in mc32_open().
 787 *      Requires rx skb pointers to point to a valid skb, or NULL.
 788 */
 789
 790static void mc32_flush_rx_ring(struct net_device *dev)
 791{
 792        struct mc32_local *lp = netdev_priv(dev);
 793        int i;
 794
 795        for(i=0; i < RX_RING_LEN; i++)
 796        {
 797                if (lp->rx_ring[i].skb) {
 798                        dev_kfree_skb(lp->rx_ring[i].skb);
 799                        lp->rx_ring[i].skb = NULL;
 800                }
 801                lp->rx_ring[i].p=NULL;
 802        }
 803}
 804
 805
 806/**
 807 *      mc32_load_tx_ring       -       load transmit ring
 808 *      @dev: The 3c527 card to issue the command to
 809 *
 810 *      This sets up the host transmit data-structures.
 811 *
 812 *      First, we obtain from the card it's current postion in the tx
 813 *      ring, so that we will know where to begin transmitting
 814 *      packets.
 815 *
 816 *      Then, we read the 'next' pointers from the on-card tx ring into
 817 *      our tx_ring array to reduce slow shared-mem reads. Finally, we
 818 *      intitalise the tx house keeping variables.
 819 *
 820 */
 821
 822static void mc32_load_tx_ring(struct net_device *dev)
 823{
 824        struct mc32_local *lp = netdev_priv(dev);
 825        volatile struct skb_header *p;
 826        int i;
 827        u16 tx_base;
 828
 829        tx_base=lp->tx_box->data[0];
 830
 831        for(i=0 ; i<TX_RING_LEN ; i++)
 832        {
 833                p=isa_bus_to_virt(lp->base+tx_base);
 834                lp->tx_ring[i].p=p;
 835                lp->tx_ring[i].skb=NULL;
 836
 837                tx_base=p->next;
 838        }
 839
 840        /* -1 so that tx_ring_head cannot "lap" tx_ring_tail */
 841        /* see mc32_tx_ring */
 842
 843        atomic_set(&lp->tx_count, TX_RING_LEN-1);
 844        atomic_set(&lp->tx_ring_head, 0);
 845        lp->tx_ring_tail=0;
 846}
 847
 848
 849/**
 850 *      mc32_flush_tx_ring      -       free transmit ring
 851 *      @lp: Local data of 3c527 to flush the tx ring of
 852 *
 853 *      If the ring is non-empty, zip over the it, freeing any
 854 *      allocated skb_buffs.  The tx ring house-keeping variables are
 855 *      then reset. Requires rx skb pointers to point to a valid skb,
 856 *      or NULL.
 857 */
 858
 859static void mc32_flush_tx_ring(struct net_device *dev)
 860{
 861        struct mc32_local *lp = netdev_priv(dev);
 862        int i;
 863
 864        for (i=0; i < TX_RING_LEN; i++)
 865        {
 866                if (lp->tx_ring[i].skb)
 867                {
 868                        dev_kfree_skb(lp->tx_ring[i].skb);
 869                        lp->tx_ring[i].skb = NULL;
 870                }
 871        }
 872
 873        atomic_set(&lp->tx_count, 0);
 874        atomic_set(&lp->tx_ring_head, 0);
 875        lp->tx_ring_tail=0;
 876}
 877
 878
 879/**
 880 *      mc32_open       -       handle 'up' of card
 881 *      @dev: device to open
 882 *
 883 *      The user is trying to bring the card into ready state. This requires
 884 *      a brief dialogue with the card. Firstly we enable interrupts and then
 885 *      'indications'. Without these enabled the card doesn't bother telling
 886 *      us what it has done. This had me puzzled for a week.
 887 *
 888 *      We configure the number of card descriptors, then load the network
 889 *      address and multicast filters. Turn on the workaround mode. This
 890 *      works around a bug in the 82586 - it asks the firmware to do
 891 *      so. It has a performance (latency) hit but is needed on busy
 892 *      [read most] lans. We load the ring with buffers then we kick it
 893 *      all off.
 894 */
 895
 896static int mc32_open(struct net_device *dev)
 897{
 898        int ioaddr = dev->base_addr;
 899        struct mc32_local *lp = netdev_priv(dev);
 900        u8 one=1;
 901        u8 regs;
 902        u16 descnumbuffs[2] = {TX_RING_LEN, RX_RING_LEN};
 903
 904        /*
 905         *      Interrupts enabled
 906         */
 907
 908        regs=inb(ioaddr+HOST_CTRL);
 909        regs|=HOST_CTRL_INTE;
 910        outb(regs, ioaddr+HOST_CTRL);
 911
 912        /*
 913         *      Allow ourselves to issue commands
 914         */
 915
 916        up(&lp->cmd_mutex);
 917
 918
 919        /*
 920         *      Send the indications on command
 921         */
 922
 923        mc32_command(dev, 4, &one, 2);
 924
 925        /*
 926         *      Poke it to make sure it's really dead.
 927         */
 928
 929        mc32_halt_transceiver(dev);
 930        mc32_flush_tx_ring(dev);
 931
 932        /*
 933         *      Ask card to set up on-card descriptors to our spec
 934         */
 935
 936        if(mc32_command(dev, 8, descnumbuffs, 4)) {
 937                printk("%s: %s rejected our buffer configuration!\n",
 938                       dev->name, cardname);
 939                mc32_close(dev);
 940                return -ENOBUFS;
 941        }
 942
 943        /* Report new configuration */
 944        mc32_command(dev, 6, NULL, 0);
 945
 946        lp->tx_chain            = lp->exec_box->data[8];   /* Transmit list start offset */
 947        lp->rx_chain            = lp->exec_box->data[10];  /* Receive list start offset */
 948        lp->tx_len              = lp->exec_box->data[9];   /* Transmit list count */
 949        lp->rx_len              = lp->exec_box->data[11];  /* Receive list count */
 950
 951        /* Set Network Address */
 952        mc32_command(dev, 1, dev->dev_addr, 6);
 953
 954        /* Set the filters */
 955        mc32_set_multicast_list(dev);
 956
 957        if (WORKAROUND_82586) {
 958                u16 zero_word=0;
 959                mc32_command(dev, 0x0D, &zero_word, 2);   /* 82586 bug workaround on  */
 960        }
 961
 962        mc32_load_tx_ring(dev);
 963
 964        if(mc32_load_rx_ring(dev))
 965        {
 966                mc32_close(dev);
 967                return -ENOBUFS;
 968        }
 969
 970        lp->xceiver_desired_state = RUNNING;
 971
 972        /* And finally, set the ball rolling... */
 973        mc32_start_transceiver(dev);
 974
 975        netif_start_queue(dev);
 976
 977        return 0;
 978}
 979
 980
 981/**
 982 *      mc32_timeout    -       handle a timeout from the network layer
 983 *      @dev: 3c527 that timed out
 984 *
 985 *      Handle a timeout on transmit from the 3c527. This normally means
 986 *      bad things as the hardware handles cable timeouts and mess for
 987 *      us.
 988 *
 989 */
 990
 991static void mc32_timeout(struct net_device *dev)
 992{
 993        printk(KERN_WARNING "%s: transmit timed out?\n", dev->name);
 994        /* Try to restart the adaptor. */
 995        netif_wake_queue(dev);
 996}
 997
 998
 999/**
1000 *      mc32_send_packet        -       queue a frame for transmit
1001 *      @skb: buffer to transmit
1002 *      @dev: 3c527 to send it out of
1003 *
1004 *      Transmit a buffer. This normally means throwing the buffer onto
1005 *      the transmit queue as the queue is quite large. If the queue is
1006 *      full then we set tx_busy and return. Once the interrupt handler
1007 *      gets messages telling it to reclaim transmit queue entries, we will
1008 *      clear tx_busy and the kernel will start calling this again.
1009 *
1010 *      We do not disable interrupts or acquire any locks; this can
1011 *      run concurrently with mc32_tx_ring(), and the function itself
1012 *      is serialised at a higher layer. However, similarly for the
1013 *      card itself, we must ensure that we update tx_ring_head only
1014 *      after we've established a valid packet on the tx ring (and
1015 *      before we let the card "see" it, to prevent it racing with the
1016 *      irq handler).
1017 *
1018 */
1019
1020static int mc32_send_packet(struct sk_buff *skb, struct net_device *dev)
1021{
1022        struct mc32_local *lp = netdev_priv(dev);
1023        u32 head = atomic_read(&lp->tx_ring_head);
1024
1025        volatile struct skb_header *p, *np;
1026
1027        netif_stop_queue(dev);
1028
1029        if(atomic_read(&lp->tx_count)==0) {
1030                return 1;
1031        }
1032
1033        if (skb_padto(skb, ETH_ZLEN)) {
1034                netif_wake_queue(dev);
1035                return 0;
1036        }
1037
1038        atomic_dec(&lp->tx_count);
1039
1040        /* P is the last sending/sent buffer as a pointer */
1041        p=lp->tx_ring[head].p;
1042
1043        head = next_tx(head);
1044
1045        /* NP is the buffer we will be loading */
1046        np=lp->tx_ring[head].p;
1047
1048        /* We will need this to flush the buffer out */
1049        lp->tx_ring[head].skb=skb;
1050
1051        np->length      = unlikely(skb->len < ETH_ZLEN) ? ETH_ZLEN : skb->len;
1052        np->data        = isa_virt_to_bus(skb->data);
1053        np->status      = 0;
1054        np->control     = CONTROL_EOP | CONTROL_EOL;
1055        wmb();
1056
1057        /*
1058         * The new frame has been setup; we can now
1059         * let the interrupt handler and card "see" it
1060         */
1061
1062        atomic_set(&lp->tx_ring_head, head);
1063        p->control     &= ~CONTROL_EOL;
1064
1065        netif_wake_queue(dev);
1066        return 0;
1067}
1068
1069
1070/**
1071 *      mc32_update_stats       -       pull off the on board statistics
1072 *      @dev: 3c527 to service
1073 *
1074 *
1075 *      Query and reset the on-card stats. There's the small possibility
1076 *      of a race here, which would result in an underestimation of
1077 *      actual errors. As such, we'd prefer to keep all our stats
1078 *      collection in software. As a rule, we do. However it can't be
1079 *      used for rx errors and collisions as, by default, the card discards
1080 *      bad rx packets.
1081 *
1082 *      Setting the SAV BP in the rx filter command supposedly
1083 *      stops this behaviour. However, testing shows that it only seems to
1084 *      enable the collation of on-card rx statistics --- the driver
1085 *      never sees an RX descriptor with an error status set.
1086 *
1087 */
1088
1089static void mc32_update_stats(struct net_device *dev)
1090{
1091        struct mc32_local *lp = netdev_priv(dev);
1092        volatile struct mc32_stats *st = lp->stats;
1093
1094        u32 rx_errors=0;
1095
1096        rx_errors+=lp->net_stats.rx_crc_errors   +=st->rx_crc_errors;
1097                                                   st->rx_crc_errors=0;
1098        rx_errors+=lp->net_stats.rx_fifo_errors  +=st->rx_overrun_errors;
1099                                                   st->rx_overrun_errors=0;
1100        rx_errors+=lp->net_stats.rx_frame_errors +=st->rx_alignment_errors;
1101                                                   st->rx_alignment_errors=0;
1102        rx_errors+=lp->net_stats.rx_length_errors+=st->rx_tooshort_errors;
1103                                                   st->rx_tooshort_errors=0;
1104        rx_errors+=lp->net_stats.rx_missed_errors+=st->rx_outofresource_errors;
1105                                                   st->rx_outofresource_errors=0;
1106        lp->net_stats.rx_errors=rx_errors;
1107
1108        /* Number of packets which saw one collision */
1109        lp->net_stats.collisions+=st->dataC[10];
1110        st->dataC[10]=0;
1111
1112        /* Number of packets which saw 2--15 collisions */
1113        lp->net_stats.collisions+=st->dataC[11];
1114        st->dataC[11]=0;
1115}
1116
1117
1118/**
1119 *      mc32_rx_ring    -       process the receive ring
1120 *      @dev: 3c527 that needs its receive ring processing
1121 *
1122 *
1123 *      We have received one or more indications from the card that a
1124 *      receive has completed. The buffer ring thus contains dirty
1125 *      entries. We walk the ring by iterating over the circular rx_ring
1126 *      array, starting at the next dirty buffer (which happens to be the
1127 *      one we finished up at last time around).
1128 *
1129 *      For each completed packet, we will either copy it and pass it up
1130 *      the stack or, if the packet is near MTU sized, we allocate
1131 *      another buffer and flip the old one up the stack.
1132 *
1133 *      We must succeed in keeping a buffer on the ring. If necessary we
1134 *      will toss a received packet rather than lose a ring entry. Once
1135 *      the first uncompleted descriptor is found, we move the
1136 *      End-Of-List bit to include the buffers just processed.
1137 *
1138 */
1139
1140static void mc32_rx_ring(struct net_device *dev)
1141{
1142        struct mc32_local *lp = netdev_priv(dev);
1143        volatile struct skb_header *p;
1144        u16 rx_ring_tail;
1145        u16 rx_old_tail;
1146        int x=0;
1147
1148        rx_old_tail = rx_ring_tail = lp->rx_ring_tail;
1149
1150        do
1151        {
1152                p=lp->rx_ring[rx_ring_tail].p;
1153
1154                if(!(p->status & (1<<7))) { /* Not COMPLETED */
1155                        break;
1156                }
1157                if(p->status & (1<<6)) /* COMPLETED_OK */
1158                {
1159
1160                        u16 length=p->length;
1161                        struct sk_buff *skb;
1162                        struct sk_buff *newskb;
1163
1164                        /* Try to save time by avoiding a copy on big frames */
1165
1166                        if ((length > RX_COPYBREAK)
1167                            && ((newskb=dev_alloc_skb(1532)) != NULL))
1168                        {
1169                                skb=lp->rx_ring[rx_ring_tail].skb;
1170                                skb_put(skb, length);
1171
1172                                skb_reserve(newskb,18);
1173                                lp->rx_ring[rx_ring_tail].skb=newskb;
1174                                p->data=isa_virt_to_bus(newskb->data);
1175                        }
1176                        else
1177                        {
1178                                skb=dev_alloc_skb(length+2);
1179
1180                                if(skb==NULL) {
1181                                        lp->net_stats.rx_dropped++;
1182                                        goto dropped;
1183                                }
1184
1185                                skb_reserve(skb,2);
1186                                memcpy(skb_put(skb, length),
1187                                       lp->rx_ring[rx_ring_tail].skb->data, length);
1188                        }
1189
1190                        skb->protocol=eth_type_trans(skb,dev);
1191                        dev->last_rx = jiffies;
1192                        lp->net_stats.rx_packets++;
1193                        lp->net_stats.rx_bytes += length;
1194                        netif_rx(skb);
1195                }
1196
1197        dropped:
1198                p->length = 1532;
1199                p->status = 0;
1200
1201                rx_ring_tail=next_rx(rx_ring_tail);
1202        }
1203        while(x++<48);
1204
1205        /* If there was actually a frame to be processed, place the EOL bit */
1206        /* at the descriptor prior to the one to be filled next */
1207
1208        if (rx_ring_tail != rx_old_tail)
1209        {
1210                lp->rx_ring[prev_rx(rx_ring_tail)].p->control |=  CONTROL_EOL;
1211                lp->rx_ring[prev_rx(rx_old_tail)].p->control  &= ~CONTROL_EOL;
1212
1213                lp->rx_ring_tail=rx_ring_tail;
1214        }
1215}
1216
1217
1218/**
1219 *      mc32_tx_ring    -       process completed transmits
1220 *      @dev: 3c527 that needs its transmit ring processing
1221 *
1222 *
1223 *      This operates in a similar fashion to mc32_rx_ring. We iterate
1224 *      over the transmit ring. For each descriptor which has been
1225 *      processed by the card, we free its associated buffer and note
1226 *      any errors. This continues until the transmit ring is emptied
1227 *      or we reach a descriptor that hasn't yet been processed by the
1228 *      card.
1229 *
1230 */
1231
1232static void mc32_tx_ring(struct net_device *dev)
1233{
1234        struct mc32_local *lp = netdev_priv(dev);
1235        volatile struct skb_header *np;
1236
1237        /*
1238         * We rely on head==tail to mean 'queue empty'.
1239         * This is why lp->tx_count=TX_RING_LEN-1: in order to prevent
1240         * tx_ring_head wrapping to tail and confusing a 'queue empty'
1241         * condition with 'queue full'
1242         */
1243
1244        while (lp->tx_ring_tail != atomic_read(&lp->tx_ring_head))
1245        {
1246                u16 t;
1247
1248                t=next_tx(lp->tx_ring_tail);
1249                np=lp->tx_ring[t].p;
1250
1251                if(!(np->status & (1<<7)))
1252                {
1253                        /* Not COMPLETED */
1254                        break;
1255                }
1256                lp->net_stats.tx_packets++;
1257                if(!(np->status & (1<<6))) /* Not COMPLETED_OK */
1258                {
1259                        lp->net_stats.tx_errors++;
1260
1261                        switch(np->status&0x0F)
1262                        {
1263                                case 1:
1264                                        lp->net_stats.tx_aborted_errors++;
1265                                        break; /* Max collisions */
1266                                case 2:
1267                                        lp->net_stats.tx_fifo_errors++;
1268                                        break;
1269                                case 3:
1270                                        lp->net_stats.tx_carrier_errors++;
1271                                        break;
1272                                case 4:
1273                                        lp->net_stats.tx_window_errors++;
1274                                        break;  /* CTS Lost */
1275                                case 5:
1276                                        lp->net_stats.tx_aborted_errors++;
1277                                        break; /* Transmit timeout */
1278                        }
1279                }
1280                /* Packets are sent in order - this is
1281                    basically a FIFO queue of buffers matching
1282                    the card ring */
1283                lp->net_stats.tx_bytes+=lp->tx_ring[t].skb->len;
1284                dev_kfree_skb_irq(lp->tx_ring[t].skb);
1285                lp->tx_ring[t].skb=NULL;
1286                atomic_inc(&lp->tx_count);
1287                netif_wake_queue(dev);
1288
1289                lp->tx_ring_tail=t;
1290        }
1291
1292}
1293
1294
1295/**
1296 *      mc32_interrupt          -       handle an interrupt from a 3c527
1297 *      @irq: Interrupt number
1298 *      @dev_id: 3c527 that requires servicing
1299 *      @regs: Registers (unused)
1300 *
1301 *
1302 *      An interrupt is raised whenever the 3c527 writes to the command
1303 *      register. This register contains the message it wishes to send us
1304 *      packed into a single byte field. We keep reading status entries
1305 *      until we have processed all the control items, but simply count
1306 *      transmit and receive reports. When all reports are in we empty the
1307 *      transceiver rings as appropriate. This saves the overhead of
1308 *      multiple command requests.
1309 *
1310 *      Because MCA is level-triggered, we shouldn't miss indications.
1311 *      Therefore, we needn't ask the card to suspend interrupts within
1312 *      this handler. The card receives an implicit acknowledgment of the
1313 *      current interrupt when we read the command register.
1314 *
1315 */
1316
1317static irqreturn_t mc32_interrupt(int irq, void *dev_id)
1318{
1319        struct net_device *dev = dev_id;
1320        struct mc32_local *lp;
1321        int ioaddr, status, boguscount = 0;
1322        int rx_event = 0;
1323        int tx_event = 0;
1324
1325        ioaddr = dev->base_addr;
1326        lp = netdev_priv(dev);
1327
1328        /* See whats cooking */
1329
1330        while((inb(ioaddr+HOST_STATUS)&HOST_STATUS_CWR) && boguscount++<2000)
1331        {
1332                status=inb(ioaddr+HOST_CMD);
1333
1334#ifdef DEBUG_IRQ
1335                printk("Status TX%d RX%d EX%d OV%d BC%d\n",
1336                        (status&7), (status>>3)&7, (status>>6)&1,
1337                        (status>>7)&1, boguscount);
1338#endif
1339
1340                switch(status&7)
1341                {
1342                        case 0:
1343                                break;
1344                        case 6: /* TX fail */
1345                        case 2: /* TX ok */
1346                                tx_event = 1;
1347                                break;
1348                        case 3: /* Halt */
1349                        case 4: /* Abort */
1350                                complete(&lp->xceiver_cmd);
1351                                break;
1352                        default:
1353                                printk("%s: strange tx ack %d\n", dev->name, status&7);
1354                }
1355                status>>=3;
1356                switch(status&7)
1357                {
1358                        case 0:
1359                                break;
1360                        case 2: /* RX */
1361                                rx_event=1;
1362                                break;
1363                        case 3: /* Halt */
1364                        case 4: /* Abort */
1365                                complete(&lp->xceiver_cmd);
1366                                break;
1367                        case 6:
1368                                /* Out of RX buffers stat */
1369                                /* Must restart rx */
1370                                lp->net_stats.rx_dropped++;
1371                                mc32_rx_ring(dev);
1372                                mc32_start_transceiver(dev);
1373                                break;
1374                        default:
1375                                printk("%s: strange rx ack %d\n",
1376                                        dev->name, status&7);
1377                }
1378                status>>=3;
1379                if(status&1)
1380                {
1381                        /*
1382                         * No thread is waiting: we need to tidy
1383                         * up ourself.
1384                         */
1385
1386                        if (lp->cmd_nonblocking) {
1387                                up(&lp->cmd_mutex);
1388                                if (lp->mc_reload_wait)
1389                                        mc32_reset_multicast_list(dev);
1390                        }
1391                        else complete(&lp->execution_cmd);
1392                }
1393                if(status&2)
1394                {
1395                        /*
1396                         *      We get interrupted once per
1397                         *      counter that is about to overflow.
1398                         */
1399
1400                        mc32_update_stats(dev);
1401                }
1402        }
1403
1404
1405        /*
1406         *      Process the transmit and receive rings
1407         */
1408
1409        if(tx_event)
1410                mc32_tx_ring(dev);
1411
1412        if(rx_event)
1413                mc32_rx_ring(dev);
1414
1415        return IRQ_HANDLED;
1416}
1417
1418
1419/**
1420 *      mc32_close      -       user configuring the 3c527 down
1421 *      @dev: 3c527 card to shut down
1422 *
1423 *      The 3c527 is a bus mastering device. We must be careful how we
1424 *      shut it down. It may also be running shared interrupt so we have
1425 *      to be sure to silence it properly
1426 *
1427 *      We indicate that the card is closing to the rest of the
1428 *      driver.  Otherwise, it is possible that the card may run out
1429 *      of receive buffers and restart the transceiver while we're
1430 *      trying to close it.
1431 *
1432 *      We abort any receive and transmits going on and then wait until
1433 *      any pending exec commands have completed in other code threads.
1434 *      In theory we can't get here while that is true, in practice I am
1435 *      paranoid
1436 *
1437 *      We turn off the interrupt enable for the board to be sure it can't
1438 *      intefere with other devices.
1439 */
1440
1441static int mc32_close(struct net_device *dev)
1442{
1443        struct mc32_local *lp = netdev_priv(dev);
1444        int ioaddr = dev->base_addr;
1445
1446        u8 regs;
1447        u16 one=1;
1448
1449        lp->xceiver_desired_state = HALTED;
1450        netif_stop_queue(dev);
1451
1452        /*
1453         *      Send the indications on command (handy debug check)
1454         */
1455
1456        mc32_command(dev, 4, &one, 2);
1457
1458        /* Shut down the transceiver */
1459
1460        mc32_halt_transceiver(dev);
1461
1462        /* Ensure we issue no more commands beyond this point */
1463
1464        down(&lp->cmd_mutex);
1465
1466        /* Ok the card is now stopping */
1467
1468        regs=inb(ioaddr+HOST_CTRL);
1469        regs&=~HOST_CTRL_INTE;
1470        outb(regs, ioaddr+HOST_CTRL);
1471
1472        mc32_flush_rx_ring(dev);
1473        mc32_flush_tx_ring(dev);
1474
1475        mc32_update_stats(dev);
1476
1477        return 0;
1478}
1479
1480
1481/**
1482 *      mc32_get_stats          -       hand back stats to network layer
1483 *      @dev: The 3c527 card to handle
1484 *
1485 *      We've collected all the stats we can in software already. Now
1486 *      it's time to update those kept on-card and return the lot.
1487 *
1488 */
1489
1490static struct net_device_stats *mc32_get_stats(struct net_device *dev)
1491{
1492        struct mc32_local *lp = netdev_priv(dev);
1493
1494        mc32_update_stats(dev);
1495        return &lp->net_stats;
1496}
1497
1498
1499/**
1500 *      do_mc32_set_multicast_list      -       attempt to update multicasts
1501 *      @dev: 3c527 device to load the list on
1502 *      @retry: indicates this is not the first call.
1503 *
1504 *
1505 *      Actually set or clear the multicast filter for this adaptor. The
1506 *      locking issues are handled by this routine. We have to track
1507 *      state as it may take multiple calls to get the command sequence
1508 *      completed. We just keep trying to schedule the loads until we
1509 *      manage to process them all.
1510 *
1511 *      num_addrs == -1 Promiscuous mode, receive all packets
1512 *
1513 *      num_addrs == 0  Normal mode, clear multicast list
1514 *
1515 *      num_addrs > 0   Multicast mode, receive normal and MC packets,
1516 *                      and do best-effort filtering.
1517 *
1518 *      See mc32_update_stats() regards setting the SAV BP bit.
1519 *
1520 */
1521
1522static void do_mc32_set_multicast_list(struct net_device *dev, int retry)
1523{
1524        struct mc32_local *lp = netdev_priv(dev);
1525        u16 filt = (1<<2); /* Save Bad Packets, for stats purposes */
1526
1527        if (dev->flags&IFF_PROMISC)
1528                /* Enable promiscuous mode */
1529                filt |= 1;
1530        else if((dev->flags&IFF_ALLMULTI) || dev->mc_count > 10)
1531        {
1532                dev->flags|=IFF_PROMISC;
1533                filt |= 1;
1534        }
1535        else if(dev->mc_count)
1536        {
1537                unsigned char block[62];
1538                unsigned char *bp;
1539                struct dev_mc_list *dmc=dev->mc_list;
1540
1541                int i;
1542
1543                if(retry==0)
1544                        lp->mc_list_valid = 0;
1545                if(!lp->mc_list_valid)
1546                {
1547                        block[1]=0;
1548                        block[0]=dev->mc_count;
1549                        bp=block+2;
1550
1551                        for(i=0;i<dev->mc_count;i++)
1552                        {
1553                                memcpy(bp, dmc->dmi_addr, 6);
1554                                bp+=6;
1555                                dmc=dmc->next;
1556                        }
1557                        if(mc32_command_nowait(dev, 2, block, 2+6*dev->mc_count)==-1)
1558                        {
1559                                lp->mc_reload_wait = 1;
1560                                return;
1561                        }
1562                        lp->mc_list_valid=1;
1563                }
1564        }
1565
1566        if(mc32_command_nowait(dev, 0, &filt, 2)==-1)
1567        {
1568                lp->mc_reload_wait = 1;
1569        }
1570        else {
1571                lp->mc_reload_wait = 0;
1572        }
1573}
1574
1575
1576/**
1577 *      mc32_set_multicast_list -       queue multicast list update
1578 *      @dev: The 3c527 to use
1579 *
1580 *      Commence loading the multicast list. This is called when the kernel
1581 *      changes the lists. It will override any pending list we are trying to
1582 *      load.
1583 */
1584
1585static void mc32_set_multicast_list(struct net_device *dev)
1586{
1587        do_mc32_set_multicast_list(dev,0);
1588}
1589
1590
1591/**
1592 *      mc32_reset_multicast_list       -       reset multicast list
1593 *      @dev: The 3c527 to use
1594 *
1595 *      Attempt the next step in loading the multicast lists. If this attempt
1596 *      fails to complete then it will be scheduled and this function called
1597 *      again later from elsewhere.
1598 */
1599
1600static void mc32_reset_multicast_list(struct net_device *dev)
1601{
1602        do_mc32_set_multicast_list(dev,1);
1603}
1604
1605static void netdev_get_drvinfo(struct net_device *dev,
1606                               struct ethtool_drvinfo *info)
1607{
1608        strcpy(info->driver, DRV_NAME);
1609        strcpy(info->version, DRV_VERSION);
1610        sprintf(info->bus_info, "MCA 0x%lx", dev->base_addr);
1611}
1612
1613static u32 netdev_get_msglevel(struct net_device *dev)
1614{
1615        return mc32_debug;
1616}
1617
1618static void netdev_set_msglevel(struct net_device *dev, u32 level)
1619{
1620        mc32_debug = level;
1621}
1622
1623static const struct ethtool_ops netdev_ethtool_ops = {
1624        .get_drvinfo            = netdev_get_drvinfo,
1625        .get_msglevel           = netdev_get_msglevel,
1626        .set_msglevel           = netdev_set_msglevel,
1627};
1628
1629#ifdef MODULE
1630
1631static struct net_device *this_device;
1632
1633/**
1634 *      init_module             -       entry point
1635 *
1636 *      Probe and locate a 3c527 card. This really should probe and locate
1637 *      all the 3c527 cards in the machine not just one of them. Yes you can
1638 *      insmod multiple modules for now but it's a hack.
1639 */
1640
1641int __init init_module(void)
1642{
1643        this_device = mc32_probe(-1);
1644        if (IS_ERR(this_device))
1645                return PTR_ERR(this_device);
1646        return 0;
1647}
1648
1649/**
1650 *      cleanup_module  -       free resources for an unload
1651 *
1652 *      Unloading time. We release the MCA bus resources and the interrupt
1653 *      at which point everything is ready to unload. The card must be stopped
1654 *      at this point or we would not have been called. When we unload we
1655 *      leave the card stopped but not totally shut down. When the card is
1656 *      initialized it must be rebooted or the rings reloaded before any
1657 *      transmit operations are allowed to start scribbling into memory.
1658 */
1659
1660void __exit cleanup_module(void)
1661{
1662        unregister_netdev(this_device);
1663        cleanup_card(this_device);
1664        free_netdev(this_device);
1665}
1666
1667#endif /* MODULE */
1668