1 /* 3c527.c: 3Com Etherlink/MC32 driver for Linux 2.4 and 2.6.
 
   3  *      (c) Copyright 1998 Red Hat Software Inc
 
   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>
 
   9  *      Based on skeleton.c written 1993-94 by Donald Becker and ne2.c
 
  10  *      (for the MCA stuff) written by Wim Dumon.
 
  12  *      Thanks to 3Com for making this possible by providing me with the
 
  15  *      This software may be used and distributed according to the terms
 
  16  *      of the GNU General Public License, incorporated herein by reference.
 
  20 #define DRV_NAME                "3c527"
 
  21 #define DRV_VERSION             "0.7-SMP"
 
  22 #define DRV_RELDATE             "2003/09/21"
 
  24 static const char *version =
 
  25 DRV_NAME ".c:v" DRV_VERSION " " DRV_RELDATE " Richard Procter <rnp@paradise.net.nz>\n";
 
  28  * DOC: Traps for the unwary
 
  30  *      The diagram (Figure 1-1) and the POS summary disagree with the
 
  31  *      "Interrupt Level" section in the manual.
 
  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.
 
  37  *      Setting the SAV BP bit does not save bad packets, but
 
  38  *      only enables RX on-card stats collection.
 
  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.
 
  44  * DOC: Theory Of Operation
 
  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.
 
  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.
 
  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.
 
  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().
 
  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.
 
  80  *      The on-board 82586 NIC has trouble receiving multiple
 
  81  *      back-to-back frames and so is likely to drop packets from fast
 
  85 #include <linux/module.h>
 
  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>
 
  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 #include <linux/semaphore.h>
 
 108 #include <asm/uaccess.h>
 
 109 #include <asm/system.h>
 
 115 MODULE_LICENSE("GPL");
 
 118  * The name of the card. Is used for messages and in the requests for
 
 119  * io regions, irqs and dma channels
 
 121 static const char* cardname = DRV_NAME;
 
 123 /* use 0 for production, 1 for verification, >2 for debug */
 
 130 static unsigned int mc32_debug = NET_DEBUG;
 
 132 /* The number of low I/O ports used by the ethercard. */
 
 133 #define MC32_IO_EXTENT  8
 
 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        /*     "       "        "          */
 
 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 */
 
 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. */
 
 146 static const int WORKAROUND_82586=1;
 
 148 /* Pointers to buffers and their on-card records */
 
 149 struct mc32_ring_desc
 
 151         volatile struct skb_header *p;
 
 155 /* Information that needs to be kept for each board. */
 
 161         volatile struct mc32_mailbox *rx_box;
 
 162         volatile struct mc32_mailbox *tx_box;
 
 163         volatile struct mc32_mailbox *exec_box;
 
 164         volatile struct mc32_stats *stats;    /* Start of on-card statistics */
 
 165         u16 tx_chain;           /* Transmit list start offset */
 
 166         u16 rx_chain;           /* Receive list start offset */
 
 167         u16 tx_len;             /* Transmit list count */
 
 168         u16 rx_len;             /* Receive list count */
 
 170         u16 xceiver_desired_state; /* HALTED or RUNNING */
 
 171         u16 cmd_nonblocking;    /* Thread is uninterested in command result */
 
 172         u16 mc_reload_wait;     /* A multicast load request is pending */
 
 173         u32 mc_list_valid;      /* True when the mclist is set */
 
 175         struct mc32_ring_desc tx_ring[TX_RING_LEN];     /* Host Transmit ring */
 
 176         struct mc32_ring_desc rx_ring[RX_RING_LEN];     /* Host Receive ring */
 
 178         atomic_t tx_count;      /* buffers left */
 
 179         atomic_t tx_ring_head;  /* index to tx en-queue end */
 
 180         u16 tx_ring_tail;       /* index to tx de-queue end */
 
 182         u16 rx_ring_tail;       /* index to rx de-queue end */
 
 184         struct semaphore cmd_mutex;    /* Serialises issuing of execute commands */
 
 185         struct completion execution_cmd; /* Card has completed an execute command */
 
 186         struct completion xceiver_cmd;   /* Card has completed a tx or rx command */
 
 189 /* The station (ethernet) address prefix, used for a sanity check. */
 
 190 #define SA_ADDR0 0x02
 
 191 #define SA_ADDR1 0x60
 
 192 #define SA_ADDR2 0xAC
 
 194 struct mca_adapters_t {
 
 199 static const struct mca_adapters_t mc32_adapters[] = {
 
 200         { 0x0041, "3COM EtherLink MC/32" },
 
 201         { 0x8EF5, "IBM High Performance Lan Adapter" },
 
 206 /* Macros for ring index manipulations */
 
 207 static inline u16 next_rx(u16 rx) { return (rx+1)&(RX_RING_LEN-1); };
 
 208 static inline u16 prev_rx(u16 rx) { return (rx-1)&(RX_RING_LEN-1); };
 
 210 static inline u16 next_tx(u16 tx) { return (tx+1)&(TX_RING_LEN-1); };
 
 213 /* Index to functions, as function prototypes. */
 
 214 static int      mc32_probe1(struct net_device *dev, int ioaddr);
 
 215 static int      mc32_command(struct net_device *dev, u16 cmd, void *data, int len);
 
 216 static int      mc32_open(struct net_device *dev);
 
 217 static void     mc32_timeout(struct net_device *dev);
 
 218 static int      mc32_send_packet(struct sk_buff *skb, struct net_device *dev);
 
 219 static irqreturn_t mc32_interrupt(int irq, void *dev_id);
 
 220 static int      mc32_close(struct net_device *dev);
 
 221 static struct   net_device_stats *mc32_get_stats(struct net_device *dev);
 
 222 static void     mc32_set_multicast_list(struct net_device *dev);
 
 223 static void     mc32_reset_multicast_list(struct net_device *dev);
 
 224 static const struct ethtool_ops netdev_ethtool_ops;
 
 226 static void cleanup_card(struct net_device *dev)
 
 228         struct mc32_local *lp = netdev_priv(dev);
 
 229         unsigned slot = lp->slot;
 
 230         mca_mark_as_unused(slot);
 
 231         mca_set_adapter_name(slot, NULL);
 
 232         free_irq(dev->irq, dev);
 
 233         release_region(dev->base_addr, MC32_IO_EXTENT);
 
 237  * mc32_probe   -       Search for supported boards
 
 238  * @unit: interface number to use
 
 240  * Because MCA bus is a real bus and we can scan for cards we could do a
 
 241  * single scan for all boards here. Right now we use the passed in device
 
 242  * structure and scan for only one board. This needs fixing for modules
 
 246 struct net_device *__init mc32_probe(int unit)
 
 248         struct net_device *dev = alloc_etherdev(sizeof(struct mc32_local));
 
 249         static int current_mca_slot = -1;
 
 254                 return ERR_PTR(-ENOMEM);
 
 257                 sprintf(dev->name, "eth%d", unit);
 
 259         /* Do not check any supplied i/o locations.
 
 260            POS registers usually don't fail :) */
 
 262         /* MCA cards have POS registers.
 
 263            Autodetecting MCA cards is extremely simple.
 
 264            Just search for the card. */
 
 266         for(i = 0; (mc32_adapters[i].name != NULL); i++) {
 
 268                         mca_find_unused_adapter(mc32_adapters[i].id, 0);
 
 270                 if(current_mca_slot != MCA_NOTFOUND) {
 
 271                         if(!mc32_probe1(dev, current_mca_slot))
 
 273                                 mca_set_adapter_name(current_mca_slot,
 
 274                                                 mc32_adapters[i].name);
 
 275                                 mca_mark_as_used(current_mca_slot);
 
 276                                 err = register_netdev(dev);
 
 288         return ERR_PTR(-ENODEV);
 
 292  * mc32_probe1  -       Check a given slot for a board and test the card
 
 293  * @dev:  Device structure to fill in
 
 294  * @slot: The MCA bus slot being used by this card
 
 296  * Decode the slot data and configure the card structures. Having done this we
 
 297  * can reset the card and configure it. The card does a full self test cycle
 
 298  * in firmware so we have to wait for it to return and post us either a
 
 299  * failure case or some addresses we use to find the board internals.
 
 302 static int __init mc32_probe1(struct net_device *dev, int slot)
 
 304         static unsigned version_printed;
 
 308         struct mc32_local *lp = netdev_priv(dev);
 
 309         static u16 mca_io_bases[]={
 
 315         static u32 mca_mem_bases[]={
 
 325         static char *failures[]={
 
 326                 "Processor instruction",
 
 327                 "Processor data bus",
 
 328                 "Processor data bus",
 
 329                 "Processor data bus",
 
 334                 "82586 internal loopback",
 
 335                 "82586 initialisation failure",
 
 336                 "Adapter list configuration error"
 
 338         DECLARE_MAC_BUF(mac);
 
 340         /* Time to play MCA games */
 
 342         if (mc32_debug  &&  version_printed++ == 0)
 
 343                 printk(KERN_DEBUG "%s", version);
 
 345         printk(KERN_INFO "%s: %s found in slot %d:", dev->name, cardname, slot);
 
 347         POS = mca_read_stored_pos(slot, 2);
 
 351                 printk(" disabled.\n");
 
 355         /* Fill in the 'dev' fields. */
 
 356         dev->base_addr = mca_io_bases[(POS>>1)&7];
 
 357         dev->mem_start = mca_mem_bases[(POS>>4)&7];
 
 359         POS = mca_read_stored_pos(slot, 4);
 
 362                 printk("memory window disabled.\n");
 
 366         POS = mca_read_stored_pos(slot, 5);
 
 371                 printk("invalid memory window.\n");
 
 378         dev->mem_end=dev->mem_start + i;
 
 380         dev->irq = ((POS>>2)&3)+9;
 
 382         if(!request_region(dev->base_addr, MC32_IO_EXTENT, cardname))
 
 384                 printk("io 0x%3lX, which is busy.\n", dev->base_addr);
 
 388         printk("io 0x%3lX irq %d mem 0x%lX (%dK)\n",
 
 389                 dev->base_addr, dev->irq, dev->mem_start, i/1024);
 
 392         /* We ought to set the cache line size here.. */
 
 399         /* Retrieve and print the ethernet address. */
 
 400         for (i = 0; i < 6; i++)
 
 402                 mca_write_pos(slot, 6, i+12);
 
 403                 mca_write_pos(slot, 7, 0);
 
 405                 dev->dev_addr[i] = mca_read_pos(slot,3);
 
 408         printk("%s: Address %s", dev->name, print_mac(mac, dev->dev_addr));
 
 410         mca_write_pos(slot, 6, 0);
 
 411         mca_write_pos(slot, 7, 0);
 
 413         POS = mca_read_stored_pos(slot, 4);
 
 416                 printk(" : BNC port selected.\n");
 
 418                 printk(" : AUI port selected.\n");
 
 420         POS=inb(dev->base_addr+HOST_CTRL);
 
 421         POS|=HOST_CTRL_ATTN|HOST_CTRL_RESET;
 
 422         POS&=~HOST_CTRL_INTE;
 
 423         outb(POS, dev->base_addr+HOST_CTRL);
 
 427         POS&=~(HOST_CTRL_ATTN|HOST_CTRL_RESET);
 
 428         outb(POS, dev->base_addr+HOST_CTRL);
 
 436         err = request_irq(dev->irq, &mc32_interrupt, IRQF_SHARED | IRQF_SAMPLE_RANDOM, DRV_NAME, dev);
 
 438                 release_region(dev->base_addr, MC32_IO_EXTENT);
 
 439                 printk(KERN_ERR "%s: unable to get IRQ %d.\n", DRV_NAME, dev->irq);
 
 443         memset(lp, 0, sizeof(struct mc32_local));
 
 448         base = inb(dev->base_addr);
 
 455                         printk(KERN_ERR "%s: failed to boot adapter.\n", dev->name);
 
 460                 if(inb(dev->base_addr+2)&(1<<5))
 
 461                         base = inb(dev->base_addr);
 
 467                         printk(KERN_ERR "%s: %s%s.\n", dev->name, failures[base-1],
 
 468                                 base<0x0A?" test failure":"");
 
 470                         printk(KERN_ERR "%s: unknown failure %d.\n", dev->name, base);
 
 480                 while(!(inb(dev->base_addr+2)&(1<<5)))
 
 486                                 printk(KERN_ERR "%s: mailbox read fail (%d).\n", dev->name, i);
 
 492                 base|=(inb(dev->base_addr)<<(8*i));
 
 495         lp->exec_box=isa_bus_to_virt(dev->mem_start+base);
 
 497         base=lp->exec_box->data[1]<<16|lp->exec_box->data[0];
 
 499         lp->base = dev->mem_start+base;
 
 501         lp->rx_box=isa_bus_to_virt(lp->base + lp->exec_box->data[2]);
 
 502         lp->tx_box=isa_bus_to_virt(lp->base + lp->exec_box->data[3]);
 
 504         lp->stats = isa_bus_to_virt(lp->base + lp->exec_box->data[5]);
 
 507          *      Descriptor chains (card relative)
 
 510         lp->tx_chain            = lp->exec_box->data[8];   /* Transmit list start offset */
 
 511         lp->rx_chain            = lp->exec_box->data[10];  /* Receive list start offset */
 
 512         lp->tx_len              = lp->exec_box->data[9];   /* Transmit list count */
 
 513         lp->rx_len              = lp->exec_box->data[11];  /* Receive list count */
 
 515         init_MUTEX_LOCKED(&lp->cmd_mutex);
 
 516         init_completion(&lp->execution_cmd);
 
 517         init_completion(&lp->xceiver_cmd);
 
 519         printk("%s: Firmware Rev %d. %d RX buffers, %d TX buffers. Base of 0x%08X.\n",
 
 520                 dev->name, lp->exec_box->data[12], lp->rx_len, lp->tx_len, lp->base);
 
 522         dev->open               = mc32_open;
 
 523         dev->stop               = mc32_close;
 
 524         dev->hard_start_xmit    = mc32_send_packet;
 
 525         dev->get_stats          = mc32_get_stats;
 
 526         dev->set_multicast_list = mc32_set_multicast_list;
 
 527         dev->tx_timeout         = mc32_timeout;
 
 528         dev->watchdog_timeo     = HZ*5; /* Board does all the work */
 
 529         dev->ethtool_ops        = &netdev_ethtool_ops;
 
 534         free_irq(dev->irq, dev);
 
 536         release_region(dev->base_addr, MC32_IO_EXTENT);
 
 542  *      mc32_ready_poll         -       wait until we can feed it a command
 
 543  *      @dev:   The device to wait for
 
 545  *      Wait until the card becomes ready to accept a command via the
 
 546  *      command register. This tells us nothing about the completion
 
 547  *      status of any pending commands and takes very little time at all.
 
 550 static inline void mc32_ready_poll(struct net_device *dev)
 
 552         int ioaddr = dev->base_addr;
 
 553         while(!(inb(ioaddr+HOST_STATUS)&HOST_STATUS_CRR));
 
 558  *      mc32_command_nowait     -       send a command non blocking
 
 559  *      @dev: The 3c527 to issue the command to
 
 560  *      @cmd: The command word to write to the mailbox
 
 561  *      @data: A data block if the command expects one
 
 562  *      @len: Length of the data block
 
 564  *      Send a command from interrupt state. If there is a command
 
 565  *      currently being executed then we return an error of -1. It
 
 566  *      simply isn't viable to wait around as commands may be
 
 567  *      slow. This can theoretically be starved on SMP, but it's hard
 
 568  *      to see a realistic situation.  We do not wait for the command
 
 569  *      to complete --- we rely on the interrupt handler to tidy up
 
 573 static int mc32_command_nowait(struct net_device *dev, u16 cmd, void *data, int len)
 
 575         struct mc32_local *lp = netdev_priv(dev);
 
 576         int ioaddr = dev->base_addr;
 
 579         if (down_trylock(&lp->cmd_mutex) == 0)
 
 581                 lp->cmd_nonblocking=1;
 
 582                 lp->exec_box->mbox=0;
 
 583                 lp->exec_box->mbox=cmd;
 
 584                 memcpy((void *)lp->exec_box->data, data, len);
 
 585                 barrier();      /* the memcpy forgot the volatile so be sure */
 
 587                 /* Send the command */
 
 588                 mc32_ready_poll(dev);
 
 589                 outb(1<<6, ioaddr+HOST_CMD);
 
 593                 /* Interrupt handler will signal mutex on completion */
 
 601  *      mc32_command    -       send a command and sleep until completion
 
 602  *      @dev: The 3c527 card to issue the command to
 
 603  *      @cmd: The command word to write to the mailbox
 
 604  *      @data: A data block if the command expects one
 
 605  *      @len: Length of the data block
 
 607  *      Sends exec commands in a user context. This permits us to wait around
 
 608  *      for the replies and also to wait for the command buffer to complete
 
 609  *      from a previous command before we execute our command. After our
 
 610  *      command completes we will attempt any pending multicast reload
 
 611  *      we blocked off by hogging the exec buffer.
 
 613  *      You feed the card a command, you wait, it interrupts you get a
 
 614  *      reply. All well and good. The complication arises because you use
 
 615  *      commands for filter list changes which come in at bh level from things
 
 616  *      like IPV6 group stuff.
 
 619 static int mc32_command(struct net_device *dev, u16 cmd, void *data, int len)
 
 621         struct mc32_local *lp = netdev_priv(dev);
 
 622         int ioaddr = dev->base_addr;
 
 625         down(&lp->cmd_mutex);
 
 631         lp->cmd_nonblocking=0;
 
 632         lp->exec_box->mbox=0;
 
 633         lp->exec_box->mbox=cmd;
 
 634         memcpy((void *)lp->exec_box->data, data, len);
 
 635         barrier();      /* the memcpy forgot the volatile so be sure */
 
 637         mc32_ready_poll(dev);
 
 638         outb(1<<6, ioaddr+HOST_CMD);
 
 640         wait_for_completion(&lp->execution_cmd);
 
 642         if(lp->exec_box->mbox&(1<<13))
 
 648          *      A multicast set got blocked - try it now
 
 651         if(lp->mc_reload_wait)
 
 653                 mc32_reset_multicast_list(dev);
 
 661  *      mc32_start_transceiver  -       tell board to restart tx/rx
 
 662  *      @dev: The 3c527 card to issue the command to
 
 664  *      This may be called from the interrupt state, where it is used
 
 665  *      to restart the rx ring if the card runs out of rx buffers.
 
 667  *      We must first check if it's ok to (re)start the transceiver. See
 
 668  *      mc32_close for details.
 
 671 static void mc32_start_transceiver(struct net_device *dev) {
 
 673         struct mc32_local *lp = netdev_priv(dev);
 
 674         int ioaddr = dev->base_addr;
 
 676         /* Ignore RX overflow on device closure */
 
 677         if (lp->xceiver_desired_state==HALTED)
 
 680         /* Give the card the offset to the post-EOL-bit RX descriptor */
 
 681         mc32_ready_poll(dev);
 
 683         lp->rx_box->data[0]=lp->rx_ring[prev_rx(lp->rx_ring_tail)].p->next;
 
 684         outb(HOST_CMD_START_RX, ioaddr+HOST_CMD);
 
 686         mc32_ready_poll(dev);
 
 688         outb(HOST_CMD_RESTRT_TX, ioaddr+HOST_CMD);   /* card ignores this on RX restart */
 
 690         /* We are not interrupted on start completion */
 
 695  *      mc32_halt_transceiver   -       tell board to stop tx/rx
 
 696  *      @dev: The 3c527 card to issue the command to
 
 698  *      We issue the commands to halt the card's transceiver. In fact,
 
 699  *      after some experimenting we now simply tell the card to
 
 700  *      suspend. When issuing aborts occasionally odd things happened.
 
 702  *      We then sleep until the card has notified us that both rx and
 
 703  *      tx have been suspended.
 
 706 static void mc32_halt_transceiver(struct net_device *dev)
 
 708         struct mc32_local *lp = netdev_priv(dev);
 
 709         int ioaddr = dev->base_addr;
 
 711         mc32_ready_poll(dev);
 
 713         outb(HOST_CMD_SUSPND_RX, ioaddr+HOST_CMD);
 
 714         wait_for_completion(&lp->xceiver_cmd);
 
 716         mc32_ready_poll(dev);
 
 718         outb(HOST_CMD_SUSPND_TX, ioaddr+HOST_CMD);
 
 719         wait_for_completion(&lp->xceiver_cmd);
 
 724  *      mc32_load_rx_ring       -       load the ring of receive buffers
 
 725  *      @dev: 3c527 to build the ring for
 
 727  *      This initalises the on-card and driver datastructures to
 
 728  *      the point where mc32_start_transceiver() can be called.
 
 730  *      The card sets up the receive ring for us. We are required to use the
 
 731  *      ring it provides, although the size of the ring is configurable.
 
 733  *      We allocate an sk_buff for each ring entry in turn and
 
 734  *      initalise its house-keeping info. At the same time, we read
 
 735  *      each 'next' pointer in our rx_ring array. This reduces slow
 
 736  *      shared-memory reads and makes it easy to access predecessor
 
 739  *      We then set the end-of-list bit for the last entry so that the
 
 740  *      card will know when it has run out of buffers.
 
 743 static int mc32_load_rx_ring(struct net_device *dev)
 
 745         struct mc32_local *lp = netdev_priv(dev);
 
 748         volatile struct skb_header *p;
 
 750         rx_base=lp->rx_chain;
 
 752         for(i=0; i<RX_RING_LEN; i++) {
 
 753                 lp->rx_ring[i].skb=alloc_skb(1532, GFP_KERNEL);
 
 754                 if (lp->rx_ring[i].skb==NULL) {
 
 756                                 kfree_skb(lp->rx_ring[i].skb);
 
 759                 skb_reserve(lp->rx_ring[i].skb, 18);
 
 761                 p=isa_bus_to_virt(lp->base+rx_base);
 
 764                 p->data=isa_virt_to_bus(lp->rx_ring[i].skb->data);
 
 772         lp->rx_ring[i-1].p->control |= CONTROL_EOL;
 
 781  *      mc32_flush_rx_ring      -       free the ring of receive buffers
 
 782  *      @lp: Local data of 3c527 to flush the rx ring of
 
 784  *      Free the buffer for each ring slot. This may be called
 
 785  *      before mc32_load_rx_ring(), eg. on error in mc32_open().
 
 786  *      Requires rx skb pointers to point to a valid skb, or NULL.
 
 789 static void mc32_flush_rx_ring(struct net_device *dev)
 
 791         struct mc32_local *lp = netdev_priv(dev);
 
 794         for(i=0; i < RX_RING_LEN; i++)
 
 796                 if (lp->rx_ring[i].skb) {
 
 797                         dev_kfree_skb(lp->rx_ring[i].skb);
 
 798                         lp->rx_ring[i].skb = NULL;
 
 800                 lp->rx_ring[i].p=NULL;
 
 806  *      mc32_load_tx_ring       -       load transmit ring
 
 807  *      @dev: The 3c527 card to issue the command to
 
 809  *      This sets up the host transmit data-structures.
 
 811  *      First, we obtain from the card it's current postion in the tx
 
 812  *      ring, so that we will know where to begin transmitting
 
 815  *      Then, we read the 'next' pointers from the on-card tx ring into
 
 816  *      our tx_ring array to reduce slow shared-mem reads. Finally, we
 
 817  *      intitalise the tx house keeping variables.
 
 821 static void mc32_load_tx_ring(struct net_device *dev)
 
 823         struct mc32_local *lp = netdev_priv(dev);
 
 824         volatile struct skb_header *p;
 
 828         tx_base=lp->tx_box->data[0];
 
 830         for(i=0 ; i<TX_RING_LEN ; i++)
 
 832                 p=isa_bus_to_virt(lp->base+tx_base);
 
 834                 lp->tx_ring[i].skb=NULL;
 
 839         /* -1 so that tx_ring_head cannot "lap" tx_ring_tail */
 
 840         /* see mc32_tx_ring */
 
 842         atomic_set(&lp->tx_count, TX_RING_LEN-1);
 
 843         atomic_set(&lp->tx_ring_head, 0);
 
 849  *      mc32_flush_tx_ring      -       free transmit ring
 
 850  *      @lp: Local data of 3c527 to flush the tx ring of
 
 852  *      If the ring is non-empty, zip over the it, freeing any
 
 853  *      allocated skb_buffs.  The tx ring house-keeping variables are
 
 854  *      then reset. Requires rx skb pointers to point to a valid skb,
 
 858 static void mc32_flush_tx_ring(struct net_device *dev)
 
 860         struct mc32_local *lp = netdev_priv(dev);
 
 863         for (i=0; i < TX_RING_LEN; i++)
 
 865                 if (lp->tx_ring[i].skb)
 
 867                         dev_kfree_skb(lp->tx_ring[i].skb);
 
 868                         lp->tx_ring[i].skb = NULL;
 
 872         atomic_set(&lp->tx_count, 0);
 
 873         atomic_set(&lp->tx_ring_head, 0);
 
 879  *      mc32_open       -       handle 'up' of card
 
 880  *      @dev: device to open
 
 882  *      The user is trying to bring the card into ready state. This requires
 
 883  *      a brief dialogue with the card. Firstly we enable interrupts and then
 
 884  *      'indications'. Without these enabled the card doesn't bother telling
 
 885  *      us what it has done. This had me puzzled for a week.
 
 887  *      We configure the number of card descriptors, then load the network
 
 888  *      address and multicast filters. Turn on the workaround mode. This
 
 889  *      works around a bug in the 82586 - it asks the firmware to do
 
 890  *      so. It has a performance (latency) hit but is needed on busy
 
 891  *      [read most] lans. We load the ring with buffers then we kick it
 
 895 static int mc32_open(struct net_device *dev)
 
 897         int ioaddr = dev->base_addr;
 
 898         struct mc32_local *lp = netdev_priv(dev);
 
 901         u16 descnumbuffs[2] = {TX_RING_LEN, RX_RING_LEN};
 
 907         regs=inb(ioaddr+HOST_CTRL);
 
 908         regs|=HOST_CTRL_INTE;
 
 909         outb(regs, ioaddr+HOST_CTRL);
 
 912          *      Allow ourselves to issue commands
 
 919          *      Send the indications on command
 
 922         mc32_command(dev, 4, &one, 2);
 
 925          *      Poke it to make sure it's really dead.
 
 928         mc32_halt_transceiver(dev);
 
 929         mc32_flush_tx_ring(dev);
 
 932          *      Ask card to set up on-card descriptors to our spec
 
 935         if(mc32_command(dev, 8, descnumbuffs, 4)) {
 
 936                 printk("%s: %s rejected our buffer configuration!\n",
 
 937                        dev->name, cardname);
 
 942         /* Report new configuration */
 
 943         mc32_command(dev, 6, NULL, 0);
 
 945         lp->tx_chain            = lp->exec_box->data[8];   /* Transmit list start offset */
 
 946         lp->rx_chain            = lp->exec_box->data[10];  /* Receive list start offset */
 
 947         lp->tx_len              = lp->exec_box->data[9];   /* Transmit list count */
 
 948         lp->rx_len              = lp->exec_box->data[11];  /* Receive list count */
 
 950         /* Set Network Address */
 
 951         mc32_command(dev, 1, dev->dev_addr, 6);
 
 953         /* Set the filters */
 
 954         mc32_set_multicast_list(dev);
 
 956         if (WORKAROUND_82586) {
 
 958                 mc32_command(dev, 0x0D, &zero_word, 2);   /* 82586 bug workaround on  */
 
 961         mc32_load_tx_ring(dev);
 
 963         if(mc32_load_rx_ring(dev))
 
 969         lp->xceiver_desired_state = RUNNING;
 
 971         /* And finally, set the ball rolling... */
 
 972         mc32_start_transceiver(dev);
 
 974         netif_start_queue(dev);
 
 981  *      mc32_timeout    -       handle a timeout from the network layer
 
 982  *      @dev: 3c527 that timed out
 
 984  *      Handle a timeout on transmit from the 3c527. This normally means
 
 985  *      bad things as the hardware handles cable timeouts and mess for
 
 990 static void mc32_timeout(struct net_device *dev)
 
 992         printk(KERN_WARNING "%s: transmit timed out?\n", dev->name);
 
 993         /* Try to restart the adaptor. */
 
 994         netif_wake_queue(dev);
 
 999  *      mc32_send_packet        -       queue a frame for transmit
 
1000  *      @skb: buffer to transmit
 
1001  *      @dev: 3c527 to send it out of
 
1003  *      Transmit a buffer. This normally means throwing the buffer onto
 
1004  *      the transmit queue as the queue is quite large. If the queue is
 
1005  *      full then we set tx_busy and return. Once the interrupt handler
 
1006  *      gets messages telling it to reclaim transmit queue entries, we will
 
1007  *      clear tx_busy and the kernel will start calling this again.
 
1009  *      We do not disable interrupts or acquire any locks; this can
 
1010  *      run concurrently with mc32_tx_ring(), and the function itself
 
1011  *      is serialised at a higher layer. However, similarly for the
 
1012  *      card itself, we must ensure that we update tx_ring_head only
 
1013  *      after we've established a valid packet on the tx ring (and
 
1014  *      before we let the card "see" it, to prevent it racing with the
 
1019 static int mc32_send_packet(struct sk_buff *skb, struct net_device *dev)
 
1021         struct mc32_local *lp = netdev_priv(dev);
 
1022         u32 head = atomic_read(&lp->tx_ring_head);
 
1024         volatile struct skb_header *p, *np;
 
1026         netif_stop_queue(dev);
 
1028         if(atomic_read(&lp->tx_count)==0) {
 
1032         if (skb_padto(skb, ETH_ZLEN)) {
 
1033                 netif_wake_queue(dev);
 
1037         atomic_dec(&lp->tx_count);
 
1039         /* P is the last sending/sent buffer as a pointer */
 
1040         p=lp->tx_ring[head].p;
 
1042         head = next_tx(head);
 
1044         /* NP is the buffer we will be loading */
 
1045         np=lp->tx_ring[head].p;
 
1047         /* We will need this to flush the buffer out */
 
1048         lp->tx_ring[head].skb=skb;
 
1050         np->length      = unlikely(skb->len < ETH_ZLEN) ? ETH_ZLEN : skb->len;
 
1051         np->data        = isa_virt_to_bus(skb->data);
 
1053         np->control     = CONTROL_EOP | CONTROL_EOL;
 
1057          * The new frame has been setup; we can now
 
1058          * let the interrupt handler and card "see" it
 
1061         atomic_set(&lp->tx_ring_head, head);
 
1062         p->control     &= ~CONTROL_EOL;
 
1064         netif_wake_queue(dev);
 
1070  *      mc32_update_stats       -       pull off the on board statistics
 
1071  *      @dev: 3c527 to service
 
1074  *      Query and reset the on-card stats. There's the small possibility
 
1075  *      of a race here, which would result in an underestimation of
 
1076  *      actual errors. As such, we'd prefer to keep all our stats
 
1077  *      collection in software. As a rule, we do. However it can't be
 
1078  *      used for rx errors and collisions as, by default, the card discards
 
1081  *      Setting the SAV BP in the rx filter command supposedly
 
1082  *      stops this behaviour. However, testing shows that it only seems to
 
1083  *      enable the collation of on-card rx statistics --- the driver
 
1084  *      never sees an RX descriptor with an error status set.
 
1088 static void mc32_update_stats(struct net_device *dev)
 
1090         struct mc32_local *lp = netdev_priv(dev);
 
1091         volatile struct mc32_stats *st = lp->stats;
 
1095         rx_errors+=dev->stats.rx_crc_errors   +=st->rx_crc_errors;
 
1096                                                    st->rx_crc_errors=0;
 
1097         rx_errors+=dev->stats.rx_fifo_errors  +=st->rx_overrun_errors;
 
1098                                                    st->rx_overrun_errors=0;
 
1099         rx_errors+=dev->stats.rx_frame_errors +=st->rx_alignment_errors;
 
1100                                                    st->rx_alignment_errors=0;
 
1101         rx_errors+=dev->stats.rx_length_errors+=st->rx_tooshort_errors;
 
1102                                                    st->rx_tooshort_errors=0;
 
1103         rx_errors+=dev->stats.rx_missed_errors+=st->rx_outofresource_errors;
 
1104                                                    st->rx_outofresource_errors=0;
 
1105         dev->stats.rx_errors=rx_errors;
 
1107         /* Number of packets which saw one collision */
 
1108         dev->stats.collisions+=st->dataC[10];
 
1111         /* Number of packets which saw 2--15 collisions */
 
1112         dev->stats.collisions+=st->dataC[11];
 
1118  *      mc32_rx_ring    -       process the receive ring
 
1119  *      @dev: 3c527 that needs its receive ring processing
 
1122  *      We have received one or more indications from the card that a
 
1123  *      receive has completed. The buffer ring thus contains dirty
 
1124  *      entries. We walk the ring by iterating over the circular rx_ring
 
1125  *      array, starting at the next dirty buffer (which happens to be the
 
1126  *      one we finished up at last time around).
 
1128  *      For each completed packet, we will either copy it and pass it up
 
1129  *      the stack or, if the packet is near MTU sized, we allocate
 
1130  *      another buffer and flip the old one up the stack.
 
1132  *      We must succeed in keeping a buffer on the ring. If necessary we
 
1133  *      will toss a received packet rather than lose a ring entry. Once
 
1134  *      the first uncompleted descriptor is found, we move the
 
1135  *      End-Of-List bit to include the buffers just processed.
 
1139 static void mc32_rx_ring(struct net_device *dev)
 
1141         struct mc32_local *lp = netdev_priv(dev);
 
1142         volatile struct skb_header *p;
 
1147         rx_old_tail = rx_ring_tail = lp->rx_ring_tail;
 
1151                 p=lp->rx_ring[rx_ring_tail].p;
 
1153                 if(!(p->status & (1<<7))) { /* Not COMPLETED */
 
1156                 if(p->status & (1<<6)) /* COMPLETED_OK */
 
1159                         u16 length=p->length;
 
1160                         struct sk_buff *skb;
 
1161                         struct sk_buff *newskb;
 
1163                         /* Try to save time by avoiding a copy on big frames */
 
1165                         if ((length > RX_COPYBREAK)
 
1166                             && ((newskb=dev_alloc_skb(1532)) != NULL))
 
1168                                 skb=lp->rx_ring[rx_ring_tail].skb;
 
1169                                 skb_put(skb, length);
 
1171                                 skb_reserve(newskb,18);
 
1172                                 lp->rx_ring[rx_ring_tail].skb=newskb;
 
1173                                 p->data=isa_virt_to_bus(newskb->data);
 
1177                                 skb=dev_alloc_skb(length+2);
 
1180                                         dev->stats.rx_dropped++;
 
1185                                 memcpy(skb_put(skb, length),
 
1186                                        lp->rx_ring[rx_ring_tail].skb->data, length);
 
1189                         skb->protocol=eth_type_trans(skb,dev);
 
1190                         dev->last_rx = jiffies;
 
1191                         dev->stats.rx_packets++;
 
1192                         dev->stats.rx_bytes += length;
 
1200                 rx_ring_tail=next_rx(rx_ring_tail);
 
1204         /* If there was actually a frame to be processed, place the EOL bit */
 
1205         /* at the descriptor prior to the one to be filled next */
 
1207         if (rx_ring_tail != rx_old_tail)
 
1209                 lp->rx_ring[prev_rx(rx_ring_tail)].p->control |=  CONTROL_EOL;
 
1210                 lp->rx_ring[prev_rx(rx_old_tail)].p->control  &= ~CONTROL_EOL;
 
1212                 lp->rx_ring_tail=rx_ring_tail;
 
1218  *      mc32_tx_ring    -       process completed transmits
 
1219  *      @dev: 3c527 that needs its transmit ring processing
 
1222  *      This operates in a similar fashion to mc32_rx_ring. We iterate
 
1223  *      over the transmit ring. For each descriptor which has been
 
1224  *      processed by the card, we free its associated buffer and note
 
1225  *      any errors. This continues until the transmit ring is emptied
 
1226  *      or we reach a descriptor that hasn't yet been processed by the
 
1231 static void mc32_tx_ring(struct net_device *dev)
 
1233         struct mc32_local *lp = netdev_priv(dev);
 
1234         volatile struct skb_header *np;
 
1237          * We rely on head==tail to mean 'queue empty'.
 
1238          * This is why lp->tx_count=TX_RING_LEN-1: in order to prevent
 
1239          * tx_ring_head wrapping to tail and confusing a 'queue empty'
 
1240          * condition with 'queue full'
 
1243         while (lp->tx_ring_tail != atomic_read(&lp->tx_ring_head))
 
1247                 t=next_tx(lp->tx_ring_tail);
 
1248                 np=lp->tx_ring[t].p;
 
1250                 if(!(np->status & (1<<7)))
 
1255                 dev->stats.tx_packets++;
 
1256                 if(!(np->status & (1<<6))) /* Not COMPLETED_OK */
 
1258                         dev->stats.tx_errors++;
 
1260                         switch(np->status&0x0F)
 
1263                                         dev->stats.tx_aborted_errors++;
 
1264                                         break; /* Max collisions */
 
1266                                         dev->stats.tx_fifo_errors++;
 
1269                                         dev->stats.tx_carrier_errors++;
 
1272                                         dev->stats.tx_window_errors++;
 
1273                                         break;  /* CTS Lost */
 
1275                                         dev->stats.tx_aborted_errors++;
 
1276                                         break; /* Transmit timeout */
 
1279                 /* Packets are sent in order - this is
 
1280                     basically a FIFO queue of buffers matching
 
1282                 dev->stats.tx_bytes+=lp->tx_ring[t].skb->len;
 
1283                 dev_kfree_skb_irq(lp->tx_ring[t].skb);
 
1284                 lp->tx_ring[t].skb=NULL;
 
1285                 atomic_inc(&lp->tx_count);
 
1286                 netif_wake_queue(dev);
 
1295  *      mc32_interrupt          -       handle an interrupt from a 3c527
 
1296  *      @irq: Interrupt number
 
1297  *      @dev_id: 3c527 that requires servicing
 
1298  *      @regs: Registers (unused)
 
1301  *      An interrupt is raised whenever the 3c527 writes to the command
 
1302  *      register. This register contains the message it wishes to send us
 
1303  *      packed into a single byte field. We keep reading status entries
 
1304  *      until we have processed all the control items, but simply count
 
1305  *      transmit and receive reports. When all reports are in we empty the
 
1306  *      transceiver rings as appropriate. This saves the overhead of
 
1307  *      multiple command requests.
 
1309  *      Because MCA is level-triggered, we shouldn't miss indications.
 
1310  *      Therefore, we needn't ask the card to suspend interrupts within
 
1311  *      this handler. The card receives an implicit acknowledgment of the
 
1312  *      current interrupt when we read the command register.
 
1316 static irqreturn_t mc32_interrupt(int irq, void *dev_id)
 
1318         struct net_device *dev = dev_id;
 
1319         struct mc32_local *lp;
 
1320         int ioaddr, status, boguscount = 0;
 
1324         ioaddr = dev->base_addr;
 
1325         lp = netdev_priv(dev);
 
1327         /* See whats cooking */
 
1329         while((inb(ioaddr+HOST_STATUS)&HOST_STATUS_CWR) && boguscount++<2000)
 
1331                 status=inb(ioaddr+HOST_CMD);
 
1334                 printk("Status TX%d RX%d EX%d OV%d BC%d\n",
 
1335                         (status&7), (status>>3)&7, (status>>6)&1,
 
1336                         (status>>7)&1, boguscount);
 
1343                         case 6: /* TX fail */
 
1349                                 complete(&lp->xceiver_cmd);
 
1352                                 printk("%s: strange tx ack %d\n", dev->name, status&7);
 
1364                                 complete(&lp->xceiver_cmd);
 
1367                                 /* Out of RX buffers stat */
 
1368                                 /* Must restart rx */
 
1369                                 dev->stats.rx_dropped++;
 
1371                                 mc32_start_transceiver(dev);
 
1374                                 printk("%s: strange rx ack %d\n",
 
1375                                         dev->name, status&7);
 
1381                          * No thread is waiting: we need to tidy
 
1385                         if (lp->cmd_nonblocking) {
 
1387                                 if (lp->mc_reload_wait)
 
1388                                         mc32_reset_multicast_list(dev);
 
1390                         else complete(&lp->execution_cmd);
 
1395                          *      We get interrupted once per
 
1396                          *      counter that is about to overflow.
 
1399                         mc32_update_stats(dev);
 
1405          *      Process the transmit and receive rings
 
1419  *      mc32_close      -       user configuring the 3c527 down
 
1420  *      @dev: 3c527 card to shut down
 
1422  *      The 3c527 is a bus mastering device. We must be careful how we
 
1423  *      shut it down. It may also be running shared interrupt so we have
 
1424  *      to be sure to silence it properly
 
1426  *      We indicate that the card is closing to the rest of the
 
1427  *      driver.  Otherwise, it is possible that the card may run out
 
1428  *      of receive buffers and restart the transceiver while we're
 
1429  *      trying to close it.
 
1431  *      We abort any receive and transmits going on and then wait until
 
1432  *      any pending exec commands have completed in other code threads.
 
1433  *      In theory we can't get here while that is true, in practice I am
 
1436  *      We turn off the interrupt enable for the board to be sure it can't
 
1437  *      intefere with other devices.
 
1440 static int mc32_close(struct net_device *dev)
 
1442         struct mc32_local *lp = netdev_priv(dev);
 
1443         int ioaddr = dev->base_addr;
 
1448         lp->xceiver_desired_state = HALTED;
 
1449         netif_stop_queue(dev);
 
1452          *      Send the indications on command (handy debug check)
 
1455         mc32_command(dev, 4, &one, 2);
 
1457         /* Shut down the transceiver */
 
1459         mc32_halt_transceiver(dev);
 
1461         /* Ensure we issue no more commands beyond this point */
 
1463         down(&lp->cmd_mutex);
 
1465         /* Ok the card is now stopping */
 
1467         regs=inb(ioaddr+HOST_CTRL);
 
1468         regs&=~HOST_CTRL_INTE;
 
1469         outb(regs, ioaddr+HOST_CTRL);
 
1471         mc32_flush_rx_ring(dev);
 
1472         mc32_flush_tx_ring(dev);
 
1474         mc32_update_stats(dev);
 
1481  *      mc32_get_stats          -       hand back stats to network layer
 
1482  *      @dev: The 3c527 card to handle
 
1484  *      We've collected all the stats we can in software already. Now
 
1485  *      it's time to update those kept on-card and return the lot.
 
1489 static struct net_device_stats *mc32_get_stats(struct net_device *dev)
 
1491         mc32_update_stats(dev);
 
1497  *      do_mc32_set_multicast_list      -       attempt to update multicasts
 
1498  *      @dev: 3c527 device to load the list on
 
1499  *      @retry: indicates this is not the first call.
 
1502  *      Actually set or clear the multicast filter for this adaptor. The
 
1503  *      locking issues are handled by this routine. We have to track
 
1504  *      state as it may take multiple calls to get the command sequence
 
1505  *      completed. We just keep trying to schedule the loads until we
 
1506  *      manage to process them all.
 
1508  *      num_addrs == -1 Promiscuous mode, receive all packets
 
1510  *      num_addrs == 0  Normal mode, clear multicast list
 
1512  *      num_addrs > 0   Multicast mode, receive normal and MC packets,
 
1513  *                      and do best-effort filtering.
 
1515  *      See mc32_update_stats() regards setting the SAV BP bit.
 
1519 static void do_mc32_set_multicast_list(struct net_device *dev, int retry)
 
1521         struct mc32_local *lp = netdev_priv(dev);
 
1522         u16 filt = (1<<2); /* Save Bad Packets, for stats purposes */
 
1524         if ((dev->flags&IFF_PROMISC) ||
 
1525             (dev->flags&IFF_ALLMULTI) ||
 
1527                 /* Enable promiscuous mode */
 
1529         else if(dev->mc_count)
 
1531                 unsigned char block[62];
 
1533                 struct dev_mc_list *dmc=dev->mc_list;
 
1538                         lp->mc_list_valid = 0;
 
1539                 if(!lp->mc_list_valid)
 
1542                         block[0]=dev->mc_count;
 
1545                         for(i=0;i<dev->mc_count;i++)
 
1547                                 memcpy(bp, dmc->dmi_addr, 6);
 
1551                         if(mc32_command_nowait(dev, 2, block, 2+6*dev->mc_count)==-1)
 
1553                                 lp->mc_reload_wait = 1;
 
1556                         lp->mc_list_valid=1;
 
1560         if(mc32_command_nowait(dev, 0, &filt, 2)==-1)
 
1562                 lp->mc_reload_wait = 1;
 
1565                 lp->mc_reload_wait = 0;
 
1571  *      mc32_set_multicast_list -       queue multicast list update
 
1572  *      @dev: The 3c527 to use
 
1574  *      Commence loading the multicast list. This is called when the kernel
 
1575  *      changes the lists. It will override any pending list we are trying to
 
1579 static void mc32_set_multicast_list(struct net_device *dev)
 
1581         do_mc32_set_multicast_list(dev,0);
 
1586  *      mc32_reset_multicast_list       -       reset multicast list
 
1587  *      @dev: The 3c527 to use
 
1589  *      Attempt the next step in loading the multicast lists. If this attempt
 
1590  *      fails to complete then it will be scheduled and this function called
 
1591  *      again later from elsewhere.
 
1594 static void mc32_reset_multicast_list(struct net_device *dev)
 
1596         do_mc32_set_multicast_list(dev,1);
 
1599 static void netdev_get_drvinfo(struct net_device *dev,
 
1600                                struct ethtool_drvinfo *info)
 
1602         strcpy(info->driver, DRV_NAME);
 
1603         strcpy(info->version, DRV_VERSION);
 
1604         sprintf(info->bus_info, "MCA 0x%lx", dev->base_addr);
 
1607 static u32 netdev_get_msglevel(struct net_device *dev)
 
1612 static void netdev_set_msglevel(struct net_device *dev, u32 level)
 
1617 static const struct ethtool_ops netdev_ethtool_ops = {
 
1618         .get_drvinfo            = netdev_get_drvinfo,
 
1619         .get_msglevel           = netdev_get_msglevel,
 
1620         .set_msglevel           = netdev_set_msglevel,
 
1625 static struct net_device *this_device;
 
1628  *      init_module             -       entry point
 
1630  *      Probe and locate a 3c527 card. This really should probe and locate
 
1631  *      all the 3c527 cards in the machine not just one of them. Yes you can
 
1632  *      insmod multiple modules for now but it's a hack.
 
1635 int __init init_module(void)
 
1637         this_device = mc32_probe(-1);
 
1638         if (IS_ERR(this_device))
 
1639                 return PTR_ERR(this_device);
 
1644  *      cleanup_module  -       free resources for an unload
 
1646  *      Unloading time. We release the MCA bus resources and the interrupt
 
1647  *      at which point everything is ready to unload. The card must be stopped
 
1648  *      at this point or we would not have been called. When we unload we
 
1649  *      leave the card stopped but not totally shut down. When the card is
 
1650  *      initialized it must be rebooted or the rings reloaded before any
 
1651  *      transmit operations are allowed to start scribbling into memory.
 
1654 void __exit cleanup_module(void)
 
1656         unregister_netdev(this_device);
 
1657         cleanup_card(this_device);
 
1658         free_netdev(this_device);