linux-bk/drivers/net/8390.c
<<
>>
Prefs
   1/* 8390.c: A general NS8390 ethernet driver core for linux. */
   2/*
   3        Written 1992-94 by Donald Becker.
   4  
   5        Copyright 1993 United States Government as represented by the
   6        Director, National Security Agency.
   7
   8        This software may be used and distributed according to the terms
   9        of the GNU General Public License, incorporated herein by reference.
  10
  11        The author may be reached as becker@scyld.com, or C/O
  12        Scyld Computing Corporation
  13        410 Severn Ave., Suite 210
  14        Annapolis MD 21403
  15
  16  
  17  This is the chip-specific code for many 8390-based ethernet adaptors.
  18  This is not a complete driver, it must be combined with board-specific
  19  code such as ne.c, wd.c, 3c503.c, etc.
  20
  21  Seeing how at least eight drivers use this code, (not counting the
  22  PCMCIA ones either) it is easy to break some card by what seems like
  23  a simple innocent change. Please contact me or Donald if you think
  24  you have found something that needs changing. -- PG
  25
  26
  27  Changelog:
  28
  29  Paul Gortmaker        : remove set_bit lock, other cleanups.
  30  Paul Gortmaker        : add ei_get_8390_hdr() so we can pass skb's to 
  31                          ei_block_input() for eth_io_copy_and_sum().
  32  Paul Gortmaker        : exchange static int ei_pingpong for a #define,
  33                          also add better Tx error handling.
  34  Paul Gortmaker        : rewrite Rx overrun handling as per NS specs.
  35  Alexey Kuznetsov      : use the 8390's six bit hash multicast filter.
  36  Paul Gortmaker        : tweak ANK's above multicast changes a bit.
  37  Paul Gortmaker        : update packet statistics for v2.1.x
  38  Alan Cox              : support arbitary stupid port mappings on the
  39                          68K Macintosh. Support >16bit I/O spaces
  40  Paul Gortmaker        : add kmod support for auto-loading of the 8390
  41                          module by all drivers that require it.
  42  Alan Cox              : Spinlocking work, added 'BUG_83C690'
  43  Paul Gortmaker        : Separate out Tx timeout code from Tx path.
  44
  45  Sources:
  46  The National Semiconductor LAN Databook, and the 3Com 3c503 databook.
  47
  48  */
  49
  50static const char version[] =
  51    "8390.c:v1.10cvs 9/23/94 Donald Becker (becker@cesdis.gsfc.nasa.gov)\n";
  52
  53#include <linux/module.h>
  54#include <linux/kernel.h>
  55#include <linux/jiffies.h>
  56#include <linux/fs.h>
  57#include <linux/types.h>
  58#include <linux/string.h>
  59#include <asm/system.h>
  60#include <asm/uaccess.h>
  61#include <asm/bitops.h>
  62#include <asm/io.h>
  63#include <asm/irq.h>
  64#include <linux/delay.h>
  65#include <linux/errno.h>
  66#include <linux/fcntl.h>
  67#include <linux/in.h>
  68#include <linux/interrupt.h>
  69#include <linux/init.h>
  70#include <linux/crc32.h>
  71
  72#include <linux/netdevice.h>
  73#include <linux/etherdevice.h>
  74
  75#define NS8390_CORE
  76#include "8390.h"
  77
  78#define BUG_83C690
  79
  80/* These are the operational function interfaces to board-specific
  81   routines.
  82        void reset_8390(struct net_device *dev)
  83                Resets the board associated with DEV, including a hardware reset of
  84                the 8390.  This is only called when there is a transmit timeout, and
  85                it is always followed by 8390_init().
  86        void block_output(struct net_device *dev, int count, const unsigned char *buf,
  87                                          int start_page)
  88                Write the COUNT bytes of BUF to the packet buffer at START_PAGE.  The
  89                "page" value uses the 8390's 256-byte pages.
  90        void get_8390_hdr(struct net_device *dev, struct e8390_hdr *hdr, int ring_page)
  91                Read the 4 byte, page aligned 8390 header. *If* there is a
  92                subsequent read, it will be of the rest of the packet.
  93        void block_input(struct net_device *dev, int count, struct sk_buff *skb, int ring_offset)
  94                Read COUNT bytes from the packet buffer into the skb data area. Start 
  95                reading from RING_OFFSET, the address as the 8390 sees it.  This will always
  96                follow the read of the 8390 header. 
  97*/
  98#define ei_reset_8390 (ei_local->reset_8390)
  99#define ei_block_output (ei_local->block_output)
 100#define ei_block_input (ei_local->block_input)
 101#define ei_get_8390_hdr (ei_local->get_8390_hdr)
 102
 103/* use 0 for production, 1 for verification, >2 for debug */
 104#ifndef ei_debug
 105int ei_debug = 1;
 106#endif
 107
 108/* Index to functions. */
 109static void ei_tx_intr(struct net_device *dev);
 110static void ei_tx_err(struct net_device *dev);
 111static void ei_tx_timeout(struct net_device *dev);
 112static void ei_receive(struct net_device *dev);
 113static void ei_rx_overrun(struct net_device *dev);
 114
 115/* Routines generic to NS8390-based boards. */
 116static void NS8390_trigger_send(struct net_device *dev, unsigned int length,
 117                                                                int start_page);
 118static void set_multicast_list(struct net_device *dev);
 119static void do_set_multicast_list(struct net_device *dev);
 120
 121/*
 122 *      SMP and the 8390 setup.
 123 *
 124 *      The 8390 isnt exactly designed to be multithreaded on RX/TX. There is
 125 *      a page register that controls bank and packet buffer access. We guard
 126 *      this with ei_local->page_lock. Nobody should assume or set the page other
 127 *      than zero when the lock is not held. Lock holders must restore page 0
 128 *      before unlocking. Even pure readers must take the lock to protect in 
 129 *      page 0.
 130 *
 131 *      To make life difficult the chip can also be very slow. We therefore can't
 132 *      just use spinlocks. For the longer lockups we disable the irq the device
 133 *      sits on and hold the lock. We must hold the lock because there is a dual
 134 *      processor case other than interrupts (get stats/set multicast list in
 135 *      parallel with each other and transmit).
 136 *
 137 *      Note: in theory we can just disable the irq on the card _but_ there is
 138 *      a latency on SMP irq delivery. So we can easily go "disable irq" "sync irqs"
 139 *      enter lock, take the queued irq. So we waddle instead of flying.
 140 *
 141 *      Finally by special arrangement for the purpose of being generally 
 142 *      annoying the transmit function is called bh atomic. That places
 143 *      restrictions on the user context callers as disable_irq won't save
 144 *      them.
 145 */
 146 
 147
 148
 149/**
 150 * ei_open - Open/initialize the board.
 151 * @dev: network device to initialize
 152 *
 153 * This routine goes all-out, setting everything
 154 * up anew at each open, even though many of these registers should only
 155 * need to be set once at boot.
 156 */
 157int ei_open(struct net_device *dev)
 158{
 159        unsigned long flags;
 160        struct ei_device *ei_local = (struct ei_device *) dev->priv;
 161
 162        /* This can't happen unless somebody forgot to call ethdev_init(). */
 163        if (ei_local == NULL) 
 164        {
 165                printk(KERN_EMERG "%s: ei_open passed a non-existent device!\n", dev->name);
 166                return -ENXIO;
 167        }
 168        
 169        /* The card I/O part of the driver (e.g. 3c503) can hook a Tx timeout
 170            wrapper that does e.g. media check & then calls ei_tx_timeout. */
 171        if (dev->tx_timeout == NULL)
 172                 dev->tx_timeout = ei_tx_timeout;
 173        if (dev->watchdog_timeo <= 0)
 174                 dev->watchdog_timeo = TX_TIMEOUT;
 175    
 176        /*
 177         *      Grab the page lock so we own the register set, then call
 178         *      the init function.
 179         */
 180      
 181        spin_lock_irqsave(&ei_local->page_lock, flags);
 182        NS8390_init(dev, 1);
 183        /* Set the flag before we drop the lock, That way the IRQ arrives
 184           after its set and we get no silly warnings */
 185        netif_start_queue(dev);
 186        spin_unlock_irqrestore(&ei_local->page_lock, flags);
 187        ei_local->irqlock = 0;
 188        return 0;
 189}
 190
 191/**
 192 * ei_close - shut down network device
 193 * @dev: network device to close
 194 *
 195 * Opposite of ei_open(). Only used when "ifconfig <devname> down" is done.
 196 */
 197int ei_close(struct net_device *dev)
 198{
 199        struct ei_device *ei_local = (struct ei_device *) dev->priv;
 200        unsigned long flags;
 201
 202        /*
 203         *      Hold the page lock during close
 204         */
 205                
 206        spin_lock_irqsave(&ei_local->page_lock, flags);
 207        NS8390_init(dev, 0);
 208        spin_unlock_irqrestore(&ei_local->page_lock, flags);
 209        netif_stop_queue(dev);
 210        return 0;
 211}
 212
 213/**
 214 * ei_tx_timeout - handle transmit time out condition
 215 * @dev: network device which has apparently fallen asleep
 216 *
 217 * Called by kernel when device never acknowledges a transmit has
 218 * completed (or failed) - i.e. never posted a Tx related interrupt.
 219 */
 220
 221void ei_tx_timeout(struct net_device *dev)
 222{
 223        long e8390_base = dev->base_addr;
 224        struct ei_device *ei_local = (struct ei_device *) dev->priv;
 225        int txsr, isr, tickssofar = jiffies - dev->trans_start;
 226        unsigned long flags;
 227
 228        ei_local->stat.tx_errors++;
 229
 230        spin_lock_irqsave(&ei_local->page_lock, flags);
 231        txsr = inb(e8390_base+EN0_TSR);
 232        isr = inb(e8390_base+EN0_ISR);
 233        spin_unlock_irqrestore(&ei_local->page_lock, flags);
 234
 235        printk(KERN_DEBUG "%s: Tx timed out, %s TSR=%#2x, ISR=%#2x, t=%d.\n",
 236                dev->name, (txsr & ENTSR_ABT) ? "excess collisions." :
 237                (isr) ? "lost interrupt?" : "cable problem?", txsr, isr, tickssofar);
 238
 239        if (!isr && !ei_local->stat.tx_packets) 
 240        {
 241                /* The 8390 probably hasn't gotten on the cable yet. */
 242                ei_local->interface_num ^= 1;   /* Try a different xcvr.  */
 243        }
 244
 245        /* Ugly but a reset can be slow, yet must be protected */
 246                
 247        disable_irq_nosync(dev->irq);
 248        spin_lock(&ei_local->page_lock);
 249                
 250        /* Try to restart the card.  Perhaps the user has fixed something. */
 251        ei_reset_8390(dev);
 252        NS8390_init(dev, 1);
 253                
 254        spin_unlock(&ei_local->page_lock);
 255        enable_irq(dev->irq);
 256        netif_wake_queue(dev);
 257}
 258    
 259/**
 260 * ei_start_xmit - begin packet transmission
 261 * @skb: packet to be sent
 262 * @dev: network device to which packet is sent
 263 *
 264 * Sends a packet to an 8390 network device.
 265 */
 266 
 267static int ei_start_xmit(struct sk_buff *skb, struct net_device *dev)
 268{
 269        long e8390_base = dev->base_addr;
 270        struct ei_device *ei_local = (struct ei_device *) dev->priv;
 271        int length, send_length, output_page;
 272        unsigned long flags;
 273        char scratch[ETH_ZLEN];
 274
 275        length = skb->len;
 276
 277        /* Mask interrupts from the ethercard. 
 278           SMP: We have to grab the lock here otherwise the IRQ handler
 279           on another CPU can flip window and race the IRQ mask set. We end
 280           up trashing the mcast filter not disabling irqs if we don't lock */
 281           
 282        spin_lock_irqsave(&ei_local->page_lock, flags);
 283        outb_p(0x00, e8390_base + EN0_IMR);
 284        spin_unlock_irqrestore(&ei_local->page_lock, flags);
 285        
 286        
 287        /*
 288         *      Slow phase with lock held.
 289         */
 290         
 291        disable_irq_nosync(dev->irq);
 292        
 293        spin_lock(&ei_local->page_lock);
 294        
 295        ei_local->irqlock = 1;
 296
 297        send_length = ETH_ZLEN < length ? length : ETH_ZLEN;
 298    
 299#ifdef EI_PINGPONG
 300
 301        /*
 302         * We have two Tx slots available for use. Find the first free
 303         * slot, and then perform some sanity checks. With two Tx bufs,
 304         * you get very close to transmitting back-to-back packets. With
 305         * only one Tx buf, the transmitter sits idle while you reload the
 306         * card, leaving a substantial gap between each transmitted packet.
 307         */
 308
 309        if (ei_local->tx1 == 0) 
 310        {
 311                output_page = ei_local->tx_start_page;
 312                ei_local->tx1 = send_length;
 313                if (ei_debug  &&  ei_local->tx2 > 0)
 314                        printk(KERN_DEBUG "%s: idle transmitter tx2=%d, lasttx=%d, txing=%d.\n",
 315                                dev->name, ei_local->tx2, ei_local->lasttx, ei_local->txing);
 316        }
 317        else if (ei_local->tx2 == 0) 
 318        {
 319                output_page = ei_local->tx_start_page + TX_1X_PAGES;
 320                ei_local->tx2 = send_length;
 321                if (ei_debug  &&  ei_local->tx1 > 0)
 322                        printk(KERN_DEBUG "%s: idle transmitter, tx1=%d, lasttx=%d, txing=%d.\n",
 323                                dev->name, ei_local->tx1, ei_local->lasttx, ei_local->txing);
 324        }
 325        else
 326        {       /* We should never get here. */
 327                if (ei_debug)
 328                        printk(KERN_DEBUG "%s: No Tx buffers free! tx1=%d tx2=%d last=%d\n",
 329                                dev->name, ei_local->tx1, ei_local->tx2, ei_local->lasttx);
 330                ei_local->irqlock = 0;
 331                netif_stop_queue(dev);
 332                outb_p(ENISR_ALL, e8390_base + EN0_IMR);
 333                spin_unlock(&ei_local->page_lock);
 334                enable_irq(dev->irq);
 335                ei_local->stat.tx_errors++;
 336                return 1;
 337        }
 338
 339        /*
 340         * Okay, now upload the packet and trigger a send if the transmitter
 341         * isn't already sending. If it is busy, the interrupt handler will
 342         * trigger the send later, upon receiving a Tx done interrupt.
 343         */
 344         
 345        if (length == send_length)
 346                ei_block_output(dev, length, skb->data, output_page);
 347        else {
 348                memset(scratch, 0, ETH_ZLEN);
 349                memcpy(scratch, skb->data, skb->len);
 350                ei_block_output(dev, ETH_ZLEN, scratch, output_page);
 351        }
 352                
 353        if (! ei_local->txing) 
 354        {
 355                ei_local->txing = 1;
 356                NS8390_trigger_send(dev, send_length, output_page);
 357                dev->trans_start = jiffies;
 358                if (output_page == ei_local->tx_start_page) 
 359                {
 360                        ei_local->tx1 = -1;
 361                        ei_local->lasttx = -1;
 362                }
 363                else 
 364                {
 365                        ei_local->tx2 = -1;
 366                        ei_local->lasttx = -2;
 367                }
 368        }
 369        else ei_local->txqueue++;
 370
 371        if (ei_local->tx1  &&  ei_local->tx2)
 372                netif_stop_queue(dev);
 373        else
 374                netif_start_queue(dev);
 375
 376#else   /* EI_PINGPONG */
 377
 378        /*
 379         * Only one Tx buffer in use. You need two Tx bufs to come close to
 380         * back-to-back transmits. Expect a 20 -> 25% performance hit on
 381         * reasonable hardware if you only use one Tx buffer.
 382         */
 383
 384        if (length == send_length)
 385                ei_block_output(dev, length, skb->data, ei_local->tx_start_page);
 386        else {
 387                memset(scratch, 0, ETH_ZLEN);
 388                memcpy(scratch, skb->data, skb->len);
 389                ei_block_output(dev, ETH_ZLEN, scratch, ei_local->tx_start_page);
 390        }
 391        ei_local->txing = 1;
 392        NS8390_trigger_send(dev, send_length, ei_local->tx_start_page);
 393        dev->trans_start = jiffies;
 394        netif_stop_queue(dev);
 395
 396#endif  /* EI_PINGPONG */
 397
 398        /* Turn 8390 interrupts back on. */
 399        ei_local->irqlock = 0;
 400        outb_p(ENISR_ALL, e8390_base + EN0_IMR);
 401        
 402        spin_unlock(&ei_local->page_lock);
 403        enable_irq(dev->irq);
 404
 405        dev_kfree_skb (skb);
 406        ei_local->stat.tx_bytes += send_length;
 407    
 408        return 0;
 409}
 410
 411/**
 412 * ei_interrupt - handle the interrupts from an 8390
 413 * @irq: interrupt number
 414 * @dev_id: a pointer to the net_device
 415 * @regs: unused
 416 *
 417 * Handle the ether interface interrupts. We pull packets from
 418 * the 8390 via the card specific functions and fire them at the networking
 419 * stack. We also handle transmit completions and wake the transmit path if
 420 * necessary. We also update the counters and do other housekeeping as
 421 * needed.
 422 */
 423
 424irqreturn_t ei_interrupt(int irq, void *dev_id, struct pt_regs * regs)
 425{
 426        struct net_device *dev = dev_id;
 427        long e8390_base;
 428        int interrupts, nr_serviced = 0;
 429        struct ei_device *ei_local;
 430    
 431        if (dev == NULL) 
 432        {
 433                printk ("net_interrupt(): irq %d for unknown device.\n", irq);
 434                return IRQ_NONE;
 435        }
 436    
 437        e8390_base = dev->base_addr;
 438        ei_local = (struct ei_device *) dev->priv;
 439
 440        /*
 441         *      Protect the irq test too.
 442         */
 443         
 444        spin_lock(&ei_local->page_lock);
 445
 446        if (ei_local->irqlock) 
 447        {
 448#if 1 /* This might just be an interrupt for a PCI device sharing this line */
 449                /* The "irqlock" check is only for testing. */
 450                printk(ei_local->irqlock
 451                           ? "%s: Interrupted while interrupts are masked! isr=%#2x imr=%#2x.\n"
 452                           : "%s: Reentering the interrupt handler! isr=%#2x imr=%#2x.\n",
 453                           dev->name, inb_p(e8390_base + EN0_ISR),
 454                           inb_p(e8390_base + EN0_IMR));
 455#endif
 456                spin_unlock(&ei_local->page_lock);
 457                return IRQ_NONE;
 458        }
 459    
 460        /* Change to page 0 and read the intr status reg. */
 461        outb_p(E8390_NODMA+E8390_PAGE0, e8390_base + E8390_CMD);
 462        if (ei_debug > 3)
 463                printk(KERN_DEBUG "%s: interrupt(isr=%#2.2x).\n", dev->name,
 464                           inb_p(e8390_base + EN0_ISR));
 465    
 466        /* !!Assumption!! -- we stay in page 0.  Don't break this. */
 467        while ((interrupts = inb_p(e8390_base + EN0_ISR)) != 0
 468                   && ++nr_serviced < MAX_SERVICE) 
 469        {
 470                if (!netif_running(dev)) {
 471                        printk(KERN_WARNING "%s: interrupt from stopped card\n", dev->name);
 472                        /* rmk - acknowledge the interrupts */
 473                        outb_p(interrupts, e8390_base + EN0_ISR);
 474                        interrupts = 0;
 475                        break;
 476                }
 477                if (interrupts & ENISR_OVER) 
 478                        ei_rx_overrun(dev);
 479                else if (interrupts & (ENISR_RX+ENISR_RX_ERR)) 
 480                {
 481                        /* Got a good (?) packet. */
 482                        ei_receive(dev);
 483                }
 484                /* Push the next to-transmit packet through. */
 485                if (interrupts & ENISR_TX)
 486                        ei_tx_intr(dev);
 487                else if (interrupts & ENISR_TX_ERR)
 488                        ei_tx_err(dev);
 489
 490                if (interrupts & ENISR_COUNTERS) 
 491                {
 492                        ei_local->stat.rx_frame_errors += inb_p(e8390_base + EN0_COUNTER0);
 493                        ei_local->stat.rx_crc_errors   += inb_p(e8390_base + EN0_COUNTER1);
 494                        ei_local->stat.rx_missed_errors+= inb_p(e8390_base + EN0_COUNTER2);
 495                        outb_p(ENISR_COUNTERS, e8390_base + EN0_ISR); /* Ack intr. */
 496                }
 497                
 498                /* Ignore any RDC interrupts that make it back to here. */
 499                if (interrupts & ENISR_RDC) 
 500                {
 501                        outb_p(ENISR_RDC, e8390_base + EN0_ISR);
 502                }
 503
 504                outb_p(E8390_NODMA+E8390_PAGE0+E8390_START, e8390_base + E8390_CMD);
 505        }
 506    
 507        if (interrupts && ei_debug) 
 508        {
 509                outb_p(E8390_NODMA+E8390_PAGE0+E8390_START, e8390_base + E8390_CMD);
 510                if (nr_serviced >= MAX_SERVICE) 
 511                {
 512                        /* 0xFF is valid for a card removal */
 513                        if(interrupts!=0xFF)
 514                                printk(KERN_WARNING "%s: Too much work at interrupt, status %#2.2x\n",
 515                                   dev->name, interrupts);
 516                        outb_p(ENISR_ALL, e8390_base + EN0_ISR); /* Ack. most intrs. */
 517                } else {
 518                        printk(KERN_WARNING "%s: unknown interrupt %#2x\n", dev->name, interrupts);
 519                        outb_p(0xff, e8390_base + EN0_ISR); /* Ack. all intrs. */
 520                }
 521        }
 522        spin_unlock(&ei_local->page_lock);
 523        return IRQ_HANDLED;
 524}
 525
 526/**
 527 * ei_tx_err - handle transmitter error
 528 * @dev: network device which threw the exception
 529 *
 530 * A transmitter error has happened. Most likely excess collisions (which
 531 * is a fairly normal condition). If the error is one where the Tx will
 532 * have been aborted, we try and send another one right away, instead of
 533 * letting the failed packet sit and collect dust in the Tx buffer. This
 534 * is a much better solution as it avoids kernel based Tx timeouts, and
 535 * an unnecessary card reset.
 536 *
 537 * Called with lock held.
 538 */
 539
 540static void ei_tx_err(struct net_device *dev)
 541{
 542        long e8390_base = dev->base_addr;
 543        struct ei_device *ei_local = (struct ei_device *) dev->priv;
 544        unsigned char txsr = inb_p(e8390_base+EN0_TSR);
 545        unsigned char tx_was_aborted = txsr & (ENTSR_ABT+ENTSR_FU);
 546
 547#ifdef VERBOSE_ERROR_DUMP
 548        printk(KERN_DEBUG "%s: transmitter error (%#2x): ", dev->name, txsr);
 549        if (txsr & ENTSR_ABT)
 550                printk("excess-collisions ");
 551        if (txsr & ENTSR_ND)
 552                printk("non-deferral ");
 553        if (txsr & ENTSR_CRS)
 554                printk("lost-carrier ");
 555        if (txsr & ENTSR_FU)
 556                printk("FIFO-underrun ");
 557        if (txsr & ENTSR_CDH)
 558                printk("lost-heartbeat ");
 559        printk("\n");
 560#endif
 561
 562        outb_p(ENISR_TX_ERR, e8390_base + EN0_ISR); /* Ack intr. */
 563
 564        if (tx_was_aborted)
 565                ei_tx_intr(dev);
 566        else 
 567        {
 568                ei_local->stat.tx_errors++;
 569                if (txsr & ENTSR_CRS) ei_local->stat.tx_carrier_errors++;
 570                if (txsr & ENTSR_CDH) ei_local->stat.tx_heartbeat_errors++;
 571                if (txsr & ENTSR_OWC) ei_local->stat.tx_window_errors++;
 572        }
 573}
 574
 575/**
 576 * ei_tx_intr - transmit interrupt handler
 577 * @dev: network device for which tx intr is handled
 578 *
 579 * We have finished a transmit: check for errors and then trigger the next
 580 * packet to be sent. Called with lock held.
 581 */
 582
 583static void ei_tx_intr(struct net_device *dev)
 584{
 585        long e8390_base = dev->base_addr;
 586        struct ei_device *ei_local = (struct ei_device *) dev->priv;
 587        int status = inb(e8390_base + EN0_TSR);
 588    
 589        outb_p(ENISR_TX, e8390_base + EN0_ISR); /* Ack intr. */
 590
 591#ifdef EI_PINGPONG
 592
 593        /*
 594         * There are two Tx buffers, see which one finished, and trigger
 595         * the send of another one if it exists.
 596         */
 597        ei_local->txqueue--;
 598
 599        if (ei_local->tx1 < 0) 
 600        {
 601                if (ei_local->lasttx != 1 && ei_local->lasttx != -1)
 602                        printk(KERN_ERR "%s: bogus last_tx_buffer %d, tx1=%d.\n",
 603                                ei_local->name, ei_local->lasttx, ei_local->tx1);
 604                ei_local->tx1 = 0;
 605                if (ei_local->tx2 > 0) 
 606                {
 607                        ei_local->txing = 1;
 608                        NS8390_trigger_send(dev, ei_local->tx2, ei_local->tx_start_page + 6);
 609                        dev->trans_start = jiffies;
 610                        ei_local->tx2 = -1,
 611                        ei_local->lasttx = 2;
 612                }
 613                else ei_local->lasttx = 20, ei_local->txing = 0;        
 614        }
 615        else if (ei_local->tx2 < 0) 
 616        {
 617                if (ei_local->lasttx != 2  &&  ei_local->lasttx != -2)
 618                        printk("%s: bogus last_tx_buffer %d, tx2=%d.\n",
 619                                ei_local->name, ei_local->lasttx, ei_local->tx2);
 620                ei_local->tx2 = 0;
 621                if (ei_local->tx1 > 0) 
 622                {
 623                        ei_local->txing = 1;
 624                        NS8390_trigger_send(dev, ei_local->tx1, ei_local->tx_start_page);
 625                        dev->trans_start = jiffies;
 626                        ei_local->tx1 = -1;
 627                        ei_local->lasttx = 1;
 628                }
 629                else
 630                        ei_local->lasttx = 10, ei_local->txing = 0;
 631        }
 632//      else printk(KERN_WARNING "%s: unexpected TX-done interrupt, lasttx=%d.\n",
 633//                      dev->name, ei_local->lasttx);
 634
 635#else   /* EI_PINGPONG */
 636        /*
 637         *  Single Tx buffer: mark it free so another packet can be loaded.
 638         */
 639        ei_local->txing = 0;
 640#endif
 641
 642        /* Minimize Tx latency: update the statistics after we restart TXing. */
 643        if (status & ENTSR_COL)
 644                ei_local->stat.collisions++;
 645        if (status & ENTSR_PTX)
 646                ei_local->stat.tx_packets++;
 647        else 
 648        {
 649                ei_local->stat.tx_errors++;
 650                if (status & ENTSR_ABT) 
 651                {
 652                        ei_local->stat.tx_aborted_errors++;
 653                        ei_local->stat.collisions += 16;
 654                }
 655                if (status & ENTSR_CRS) 
 656                        ei_local->stat.tx_carrier_errors++;
 657                if (status & ENTSR_FU) 
 658                        ei_local->stat.tx_fifo_errors++;
 659                if (status & ENTSR_CDH)
 660                        ei_local->stat.tx_heartbeat_errors++;
 661                if (status & ENTSR_OWC)
 662                        ei_local->stat.tx_window_errors++;
 663        }
 664        netif_wake_queue(dev);
 665}
 666
 667/**
 668 * ei_receive - receive some packets
 669 * @dev: network device with which receive will be run
 670 *
 671 * We have a good packet(s), get it/them out of the buffers. 
 672 * Called with lock held.
 673 */
 674
 675static void ei_receive(struct net_device *dev)
 676{
 677        long e8390_base = dev->base_addr;
 678        struct ei_device *ei_local = (struct ei_device *) dev->priv;
 679        unsigned char rxing_page, this_frame, next_frame;
 680        unsigned short current_offset;
 681        int rx_pkt_count = 0;
 682        struct e8390_pkt_hdr rx_frame;
 683        int num_rx_pages = ei_local->stop_page-ei_local->rx_start_page;
 684    
 685        while (++rx_pkt_count < 10) 
 686        {
 687                int pkt_len, pkt_stat;
 688                
 689                /* Get the rx page (incoming packet pointer). */
 690                outb_p(E8390_NODMA+E8390_PAGE1, e8390_base + E8390_CMD);
 691                rxing_page = inb_p(e8390_base + EN1_CURPAG);
 692                outb_p(E8390_NODMA+E8390_PAGE0, e8390_base + E8390_CMD);
 693                
 694                /* Remove one frame from the ring.  Boundary is always a page behind. */
 695                this_frame = inb_p(e8390_base + EN0_BOUNDARY) + 1;
 696                if (this_frame >= ei_local->stop_page)
 697                        this_frame = ei_local->rx_start_page;
 698                
 699                /* Someday we'll omit the previous, iff we never get this message.
 700                   (There is at least one clone claimed to have a problem.)  
 701                   
 702                   Keep quiet if it looks like a card removal. One problem here
 703                   is that some clones crash in roughly the same way.
 704                 */
 705                if (ei_debug > 0  &&  this_frame != ei_local->current_page && (this_frame!=0x0 || rxing_page!=0xFF))
 706                        printk(KERN_ERR "%s: mismatched read page pointers %2x vs %2x.\n",
 707                                   dev->name, this_frame, ei_local->current_page);
 708                
 709                if (this_frame == rxing_page)   /* Read all the frames? */
 710                        break;                          /* Done for now */
 711                
 712                current_offset = this_frame << 8;
 713                ei_get_8390_hdr(dev, &rx_frame, this_frame);
 714                
 715                pkt_len = rx_frame.count - sizeof(struct e8390_pkt_hdr);
 716                pkt_stat = rx_frame.status;
 717                
 718                next_frame = this_frame + 1 + ((pkt_len+4)>>8);
 719                
 720                /* Check for bogosity warned by 3c503 book: the status byte is never
 721                   written.  This happened a lot during testing! This code should be
 722                   cleaned up someday. */
 723                if (rx_frame.next != next_frame
 724                        && rx_frame.next != next_frame + 1
 725                        && rx_frame.next != next_frame - num_rx_pages
 726                        && rx_frame.next != next_frame + 1 - num_rx_pages) {
 727                        ei_local->current_page = rxing_page;
 728                        outb(ei_local->current_page-1, e8390_base+EN0_BOUNDARY);
 729                        ei_local->stat.rx_errors++;
 730                        continue;
 731                }
 732
 733                if (pkt_len < 60  ||  pkt_len > 1518) 
 734                {
 735                        if (ei_debug)
 736                                printk(KERN_DEBUG "%s: bogus packet size: %d, status=%#2x nxpg=%#2x.\n",
 737                                           dev->name, rx_frame.count, rx_frame.status,
 738                                           rx_frame.next);
 739                        ei_local->stat.rx_errors++;
 740                        ei_local->stat.rx_length_errors++;
 741                }
 742                 else if ((pkt_stat & 0x0F) == ENRSR_RXOK) 
 743                {
 744                        struct sk_buff *skb;
 745                        
 746                        skb = dev_alloc_skb(pkt_len+2);
 747                        if (skb == NULL) 
 748                        {
 749                                if (ei_debug > 1)
 750                                        printk(KERN_DEBUG "%s: Couldn't allocate a sk_buff of size %d.\n",
 751                                                   dev->name, pkt_len);
 752                                ei_local->stat.rx_dropped++;
 753                                break;
 754                        }
 755                        else
 756                        {
 757                                skb_reserve(skb,2);     /* IP headers on 16 byte boundaries */
 758                                skb->dev = dev;
 759                                skb_put(skb, pkt_len);  /* Make room */
 760                                ei_block_input(dev, pkt_len, skb, current_offset + sizeof(rx_frame));
 761                                skb->protocol=eth_type_trans(skb,dev);
 762                                netif_rx(skb);
 763                                dev->last_rx = jiffies;
 764                                ei_local->stat.rx_packets++;
 765                                ei_local->stat.rx_bytes += pkt_len;
 766                                if (pkt_stat & ENRSR_PHY)
 767                                        ei_local->stat.multicast++;
 768                        }
 769                } 
 770                else 
 771                {
 772                        if (ei_debug)
 773                                printk(KERN_DEBUG "%s: bogus packet: status=%#2x nxpg=%#2x size=%d\n",
 774                                           dev->name, rx_frame.status, rx_frame.next,
 775                                           rx_frame.count);
 776                        ei_local->stat.rx_errors++;
 777                        /* NB: The NIC counts CRC, frame and missed errors. */
 778                        if (pkt_stat & ENRSR_FO)
 779                                ei_local->stat.rx_fifo_errors++;
 780                }
 781                next_frame = rx_frame.next;
 782                
 783                /* This _should_ never happen: it's here for avoiding bad clones. */
 784                if (next_frame >= ei_local->stop_page) {
 785                        printk("%s: next frame inconsistency, %#2x\n", dev->name,
 786                                   next_frame);
 787                        next_frame = ei_local->rx_start_page;
 788                }
 789                ei_local->current_page = next_frame;
 790                outb_p(next_frame-1, e8390_base+EN0_BOUNDARY);
 791        }
 792
 793        /* We used to also ack ENISR_OVER here, but that would sometimes mask
 794           a real overrun, leaving the 8390 in a stopped state with rec'vr off. */
 795        outb_p(ENISR_RX+ENISR_RX_ERR, e8390_base+EN0_ISR);
 796        return;
 797}
 798
 799/**
 800 * ei_rx_overrun - handle receiver overrun
 801 * @dev: network device which threw exception
 802 *
 803 * We have a receiver overrun: we have to kick the 8390 to get it started
 804 * again. Problem is that you have to kick it exactly as NS prescribes in
 805 * the updated datasheets, or "the NIC may act in an unpredictable manner."
 806 * This includes causing "the NIC to defer indefinitely when it is stopped
 807 * on a busy network."  Ugh.
 808 * Called with lock held. Don't call this with the interrupts off or your
 809 * computer will hate you - it takes 10ms or so. 
 810 */
 811
 812static void ei_rx_overrun(struct net_device *dev)
 813{
 814        long e8390_base = dev->base_addr;
 815        unsigned char was_txing, must_resend = 0;
 816        struct ei_device *ei_local = (struct ei_device *) dev->priv;
 817    
 818        /*
 819         * Record whether a Tx was in progress and then issue the
 820         * stop command.
 821         */
 822        was_txing = inb_p(e8390_base+E8390_CMD) & E8390_TRANS;
 823        outb_p(E8390_NODMA+E8390_PAGE0+E8390_STOP, e8390_base+E8390_CMD);
 824    
 825        if (ei_debug > 1)
 826                printk(KERN_DEBUG "%s: Receiver overrun.\n", dev->name);
 827        ei_local->stat.rx_over_errors++;
 828    
 829        /* 
 830         * Wait a full Tx time (1.2ms) + some guard time, NS says 1.6ms total.
 831         * Early datasheets said to poll the reset bit, but now they say that
 832         * it "is not a reliable indicator and subsequently should be ignored."
 833         * We wait at least 10ms.
 834         */
 835
 836        udelay(10*1000);
 837
 838        /*
 839         * Reset RBCR[01] back to zero as per magic incantation.
 840         */
 841        outb_p(0x00, e8390_base+EN0_RCNTLO);
 842        outb_p(0x00, e8390_base+EN0_RCNTHI);
 843
 844        /*
 845         * See if any Tx was interrupted or not. According to NS, this
 846         * step is vital, and skipping it will cause no end of havoc.
 847         */
 848
 849        if (was_txing)
 850        { 
 851                unsigned char tx_completed = inb_p(e8390_base+EN0_ISR) & (ENISR_TX+ENISR_TX_ERR);
 852                if (!tx_completed)
 853                        must_resend = 1;
 854        }
 855
 856        /*
 857         * Have to enter loopback mode and then restart the NIC before
 858         * you are allowed to slurp packets up off the ring.
 859         */
 860        outb_p(E8390_TXOFF, e8390_base + EN0_TXCR);
 861        outb_p(E8390_NODMA + E8390_PAGE0 + E8390_START, e8390_base + E8390_CMD);
 862
 863        /*
 864         * Clear the Rx ring of all the debris, and ack the interrupt.
 865         */
 866        ei_receive(dev);
 867        outb_p(ENISR_OVER, e8390_base+EN0_ISR);
 868
 869        /*
 870         * Leave loopback mode, and resend any packet that got stopped.
 871         */
 872        outb_p(E8390_TXCONFIG, e8390_base + EN0_TXCR); 
 873        if (must_resend)
 874                outb_p(E8390_NODMA + E8390_PAGE0 + E8390_START + E8390_TRANS, e8390_base + E8390_CMD);
 875}
 876
 877/*
 878 *      Collect the stats. This is called unlocked and from several contexts.
 879 */
 880 
 881static struct net_device_stats *get_stats(struct net_device *dev)
 882{
 883        long ioaddr = dev->base_addr;
 884        struct ei_device *ei_local = (struct ei_device *) dev->priv;
 885        unsigned long flags;
 886    
 887        /* If the card is stopped, just return the present stats. */
 888        if (!netif_running(dev))
 889                return &ei_local->stat;
 890
 891        spin_lock_irqsave(&ei_local->page_lock,flags);
 892        /* Read the counter registers, assuming we are in page 0. */
 893        ei_local->stat.rx_frame_errors += inb_p(ioaddr + EN0_COUNTER0);
 894        ei_local->stat.rx_crc_errors   += inb_p(ioaddr + EN0_COUNTER1);
 895        ei_local->stat.rx_missed_errors+= inb_p(ioaddr + EN0_COUNTER2);
 896        spin_unlock_irqrestore(&ei_local->page_lock, flags);
 897    
 898        return &ei_local->stat;
 899}
 900
 901/*
 902 * Form the 64 bit 8390 multicast table from the linked list of addresses
 903 * associated with this dev structure.
 904 */
 905 
 906static inline void make_mc_bits(u8 *bits, struct net_device *dev)
 907{
 908        struct dev_mc_list *dmi;
 909
 910        for (dmi=dev->mc_list; dmi; dmi=dmi->next) 
 911        {
 912                u32 crc;
 913                if (dmi->dmi_addrlen != ETH_ALEN) 
 914                {
 915                        printk(KERN_INFO "%s: invalid multicast address length given.\n", dev->name);
 916                        continue;
 917                }
 918                crc = ether_crc(ETH_ALEN, dmi->dmi_addr);
 919                /* 
 920                 * The 8390 uses the 6 most significant bits of the
 921                 * CRC to index the multicast table.
 922                 */
 923                bits[crc>>29] |= (1<<((crc>>26)&7));
 924        }
 925}
 926
 927/**
 928 * do_set_multicast_list - set/clear multicast filter
 929 * @dev: net device for which multicast filter is adjusted
 930 *
 931 *      Set or clear the multicast filter for this adaptor. May be called
 932 *      from a BH in 2.1.x. Must be called with lock held. 
 933 */
 934 
 935static void do_set_multicast_list(struct net_device *dev)
 936{
 937        long e8390_base = dev->base_addr;
 938        int i;
 939        struct ei_device *ei_local = (struct ei_device*)dev->priv;
 940
 941        if (!(dev->flags&(IFF_PROMISC|IFF_ALLMULTI))) 
 942        {
 943                memset(ei_local->mcfilter, 0, 8);
 944                if (dev->mc_list)
 945                        make_mc_bits(ei_local->mcfilter, dev);
 946        }
 947        else
 948                memset(ei_local->mcfilter, 0xFF, 8);    /* mcast set to accept-all */
 949
 950        /* 
 951         * DP8390 manuals don't specify any magic sequence for altering
 952         * the multicast regs on an already running card. To be safe, we
 953         * ensure multicast mode is off prior to loading up the new hash
 954         * table. If this proves to be not enough, we can always resort
 955         * to stopping the NIC, loading the table and then restarting.
 956         *
 957         * Bug Alert!  The MC regs on the SMC 83C690 (SMC Elite and SMC 
 958         * Elite16) appear to be write-only. The NS 8390 data sheet lists
 959         * them as r/w so this is a bug.  The SMC 83C790 (SMC Ultra and
 960         * Ultra32 EISA) appears to have this bug fixed.
 961         */
 962         
 963        if (netif_running(dev))
 964                outb_p(E8390_RXCONFIG, e8390_base + EN0_RXCR);
 965        outb_p(E8390_NODMA + E8390_PAGE1, e8390_base + E8390_CMD);
 966        for(i = 0; i < 8; i++) 
 967        {
 968                outb_p(ei_local->mcfilter[i], e8390_base + EN1_MULT_SHIFT(i));
 969#ifndef BUG_83C690
 970                if(inb_p(e8390_base + EN1_MULT_SHIFT(i))!=ei_local->mcfilter[i])
 971                        printk(KERN_ERR "Multicast filter read/write mismap %d\n",i);
 972#endif
 973        }
 974        outb_p(E8390_NODMA + E8390_PAGE0, e8390_base + E8390_CMD);
 975
 976        if(dev->flags&IFF_PROMISC)
 977                outb_p(E8390_RXCONFIG | 0x18, e8390_base + EN0_RXCR);
 978        else if(dev->flags&IFF_ALLMULTI || dev->mc_list)
 979                outb_p(E8390_RXCONFIG | 0x08, e8390_base + EN0_RXCR);
 980        else
 981                outb_p(E8390_RXCONFIG, e8390_base + EN0_RXCR);
 982 }
 983
 984/*
 985 *      Called without lock held. This is invoked from user context and may
 986 *      be parallel to just about everything else. Its also fairly quick and
 987 *      not called too often. Must protect against both bh and irq users
 988 */
 989 
 990static void set_multicast_list(struct net_device *dev)
 991{
 992        unsigned long flags;
 993        struct ei_device *ei_local = (struct ei_device*)dev->priv;
 994        
 995        spin_lock_irqsave(&ei_local->page_lock, flags);
 996        do_set_multicast_list(dev);
 997        spin_unlock_irqrestore(&ei_local->page_lock, flags);
 998}       
 999
1000static inline void ei_device_init(struct ei_device *ei_local)
1001{
1002        spin_lock_init(&ei_local->page_lock);
1003}
1004
1005/**
1006 * ethdev_init - init rest of 8390 device struct
1007 * @dev: network device structure to init
1008 *
1009 * Initialize the rest of the 8390 device structure.  Do NOT __init
1010 * this, as it is used by 8390 based modular drivers too.
1011 */
1012
1013int ethdev_init(struct net_device *dev)
1014{
1015        if (ei_debug > 1)
1016                printk(version);
1017    
1018        if (dev->priv == NULL) 
1019        {
1020                dev->priv = kmalloc(sizeof(struct ei_device), GFP_KERNEL);
1021                if (dev->priv == NULL)
1022                        return -ENOMEM;
1023                memset(dev->priv, 0, sizeof(struct ei_device));
1024                ei_device_init(dev->priv);
1025        }
1026    
1027        dev->hard_start_xmit = &ei_start_xmit;
1028        dev->get_stats  = get_stats;
1029        dev->set_multicast_list = &set_multicast_list;
1030
1031        ether_setup(dev);
1032        
1033        return 0;
1034}
1035
1036/* wrapper to make alloc_netdev happy; probably should just cast... */
1037static void __ethdev_init(struct net_device *dev)
1038{
1039        ethdev_init(dev);
1040}
1041
1042/**
1043 * alloc_ei_netdev - alloc_etherdev counterpart for 8390
1044 *
1045 * Allocate 8390-specific net_device.
1046 */
1047struct net_device *alloc_ei_netdev(void)
1048{
1049        struct net_device *dev;
1050        
1051        dev = alloc_netdev(sizeof(struct ei_device), "eth%d", __ethdev_init);
1052        if (dev)
1053                ei_device_init(dev->priv);
1054
1055        return dev;
1056}
1057
1058
1059
1060
1061/* This page of functions should be 8390 generic */
1062/* Follow National Semi's recommendations for initializing the "NIC". */
1063
1064/**
1065 * NS8390_init - initialize 8390 hardware
1066 * @dev: network device to initialize
1067 * @startp: boolean.  non-zero value to initiate chip processing
1068 *
1069 *      Must be called with lock held.
1070 */
1071
1072void NS8390_init(struct net_device *dev, int startp)
1073{
1074        long e8390_base = dev->base_addr;
1075        struct ei_device *ei_local = (struct ei_device *) dev->priv;
1076        int i;
1077        int endcfg = ei_local->word16
1078            ? (0x48 | ENDCFG_WTS | (ei_local->bigendian ? ENDCFG_BOS : 0))
1079            : 0x48;
1080    
1081        if(sizeof(struct e8390_pkt_hdr)!=4)
1082                panic("8390.c: header struct mispacked\n");    
1083        /* Follow National Semi's recommendations for initing the DP83902. */
1084        outb_p(E8390_NODMA+E8390_PAGE0+E8390_STOP, e8390_base+E8390_CMD); /* 0x21 */
1085        outb_p(endcfg, e8390_base + EN0_DCFG);  /* 0x48 or 0x49 */
1086        /* Clear the remote byte count registers. */
1087        outb_p(0x00,  e8390_base + EN0_RCNTLO);
1088        outb_p(0x00,  e8390_base + EN0_RCNTHI);
1089        /* Set to monitor and loopback mode -- this is vital!. */
1090        outb_p(E8390_RXOFF, e8390_base + EN0_RXCR); /* 0x20 */
1091        outb_p(E8390_TXOFF, e8390_base + EN0_TXCR); /* 0x02 */
1092        /* Set the transmit page and receive ring. */
1093        outb_p(ei_local->tx_start_page, e8390_base + EN0_TPSR);
1094        ei_local->tx1 = ei_local->tx2 = 0;
1095        outb_p(ei_local->rx_start_page, e8390_base + EN0_STARTPG);
1096        outb_p(ei_local->stop_page-1, e8390_base + EN0_BOUNDARY);       /* 3c503 says 0x3f,NS0x26*/
1097        ei_local->current_page = ei_local->rx_start_page;               /* assert boundary+1 */
1098        outb_p(ei_local->stop_page, e8390_base + EN0_STOPPG);
1099        /* Clear the pending interrupts and mask. */
1100        outb_p(0xFF, e8390_base + EN0_ISR);
1101        outb_p(0x00,  e8390_base + EN0_IMR);
1102    
1103        /* Copy the station address into the DS8390 registers. */
1104
1105        outb_p(E8390_NODMA + E8390_PAGE1 + E8390_STOP, e8390_base+E8390_CMD); /* 0x61 */
1106        for(i = 0; i < 6; i++) 
1107        {
1108                outb_p(dev->dev_addr[i], e8390_base + EN1_PHYS_SHIFT(i));
1109                if(inb_p(e8390_base + EN1_PHYS_SHIFT(i))!=dev->dev_addr[i])
1110                        printk(KERN_ERR "Hw. address read/write mismap %d\n",i);
1111        }
1112
1113        outb_p(ei_local->rx_start_page, e8390_base + EN1_CURPAG);
1114        outb_p(E8390_NODMA+E8390_PAGE0+E8390_STOP, e8390_base+E8390_CMD);
1115
1116        netif_start_queue(dev);
1117        ei_local->tx1 = ei_local->tx2 = 0;
1118        ei_local->txing = 0;
1119
1120        if (startp) 
1121        {
1122                outb_p(0xff,  e8390_base + EN0_ISR);
1123                outb_p(ENISR_ALL,  e8390_base + EN0_IMR);
1124                outb_p(E8390_NODMA+E8390_PAGE0+E8390_START, e8390_base+E8390_CMD);
1125                outb_p(E8390_TXCONFIG, e8390_base + EN0_TXCR); /* xmit on. */
1126                /* 3c503 TechMan says rxconfig only after the NIC is started. */
1127                outb_p(E8390_RXCONFIG, e8390_base + EN0_RXCR); /* rx on,  */
1128                do_set_multicast_list(dev);     /* (re)load the mcast table */
1129        }
1130}
1131
1132/* Trigger a transmit start, assuming the length is valid. 
1133   Always called with the page lock held */
1134   
1135static void NS8390_trigger_send(struct net_device *dev, unsigned int length,
1136                                                                int start_page)
1137{
1138        long e8390_base = dev->base_addr;
1139        struct ei_device *ei_local __attribute((unused)) = (struct ei_device *) dev->priv;
1140   
1141        outb_p(E8390_NODMA+E8390_PAGE0, e8390_base+E8390_CMD);
1142    
1143        if (inb_p(e8390_base) & E8390_TRANS) 
1144        {
1145                printk(KERN_WARNING "%s: trigger_send() called with the transmitter busy.\n",
1146                        dev->name);
1147                return;
1148        }
1149        outb_p(length & 0xff, e8390_base + EN0_TCNTLO);
1150        outb_p(length >> 8, e8390_base + EN0_TCNTHI);
1151        outb_p(start_page, e8390_base + EN0_TPSR);
1152        outb_p(E8390_NODMA+E8390_TRANS+E8390_START, e8390_base+E8390_CMD);
1153}
1154
1155EXPORT_SYMBOL(ei_open);
1156EXPORT_SYMBOL(ei_close);
1157EXPORT_SYMBOL(ei_interrupt);
1158EXPORT_SYMBOL(ei_tx_timeout);
1159EXPORT_SYMBOL(ethdev_init);
1160EXPORT_SYMBOL(NS8390_init);
1161EXPORT_SYMBOL(alloc_ei_netdev);
1162
1163#if defined(MODULE)
1164
1165int init_module(void)
1166{
1167        return 0;
1168}
1169
1170void cleanup_module(void)
1171{
1172}
1173
1174#endif /* MODULE */
1175MODULE_LICENSE("GPL");
1176
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.