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
 274        length = skb->len;
 275
 276        /* Mask interrupts from the ethercard. 
 277           SMP: We have to grab the lock here otherwise the IRQ handler
 278           on another CPU can flip window and race the IRQ mask set. We end
 279           up trashing the mcast filter not disabling irqs if we dont lock */
 280           
 281        spin_lock_irqsave(&ei_local->page_lock, flags);
 282        outb_p(0x00, e8390_base + EN0_IMR);
 283        spin_unlock_irqrestore(&ei_local->page_lock, flags);
 284        
 285        
 286        /*
 287         *      Slow phase with lock held.
 288         */
 289         
 290        disable_irq_nosync(dev->irq);
 291        
 292        spin_lock(&ei_local->page_lock);
 293        
 294        ei_local->irqlock = 1;
 295
 296        send_length = ETH_ZLEN < length ? length : ETH_ZLEN;
 297    
 298#ifdef EI_PINGPONG
 299
 300        /*
 301         * We have two Tx slots available for use. Find the first free
 302         * slot, and then perform some sanity checks. With two Tx bufs,
 303         * you get very close to transmitting back-to-back packets. With
 304         * only one Tx buf, the transmitter sits idle while you reload the
 305         * card, leaving a substantial gap between each transmitted packet.
 306         */
 307
 308        if (ei_local->tx1 == 0) 
 309        {
 310                output_page = ei_local->tx_start_page;
 311                ei_local->tx1 = send_length;
 312                if (ei_debug  &&  ei_local->tx2 > 0)
 313                        printk(KERN_DEBUG "%s: idle transmitter tx2=%d, lasttx=%d, txing=%d.\n",
 314                                dev->name, ei_local->tx2, ei_local->lasttx, ei_local->txing);
 315        }
 316        else if (ei_local->tx2 == 0) 
 317        {
 318                output_page = ei_local->tx_start_page + TX_1X_PAGES;
 319                ei_local->tx2 = send_length;
 320                if (ei_debug  &&  ei_local->tx1 > 0)
 321                        printk(KERN_DEBUG "%s: idle transmitter, tx1=%d, lasttx=%d, txing=%d.\n",
 322                                dev->name, ei_local->tx1, ei_local->lasttx, ei_local->txing);
 323        }
 324        else
 325        {       /* We should never get here. */
 326                if (ei_debug)
 327                        printk(KERN_DEBUG "%s: No Tx buffers free! tx1=%d tx2=%d last=%d\n",
 328                                dev->name, ei_local->tx1, ei_local->tx2, ei_local->lasttx);
 329                ei_local->irqlock = 0;
 330                netif_stop_queue(dev);
 331                outb_p(ENISR_ALL, e8390_base + EN0_IMR);
 332                spin_unlock(&ei_local->page_lock);
 333                enable_irq(dev->irq);
 334                ei_local->stat.tx_errors++;
 335                return 1;
 336        }
 337
 338        /*
 339         * Okay, now upload the packet and trigger a send if the transmitter
 340         * isn't already sending. If it is busy, the interrupt handler will
 341         * trigger the send later, upon receiving a Tx done interrupt.
 342         */
 343
 344        ei_block_output(dev, length, skb->data, output_page);
 345        if (! ei_local->txing) 
 346        {
 347                ei_local->txing = 1;
 348                NS8390_trigger_send(dev, send_length, output_page);
 349                dev->trans_start = jiffies;
 350                if (output_page == ei_local->tx_start_page) 
 351                {
 352                        ei_local->tx1 = -1;
 353                        ei_local->lasttx = -1;
 354                }
 355                else 
 356                {
 357                        ei_local->tx2 = -1;
 358                        ei_local->lasttx = -2;
 359                }
 360        }
 361        else ei_local->txqueue++;
 362
 363        if (ei_local->tx1  &&  ei_local->tx2)
 364                netif_stop_queue(dev);
 365        else
 366                netif_start_queue(dev);
 367
 368#else   /* EI_PINGPONG */
 369
 370        /*
 371         * Only one Tx buffer in use. You need two Tx bufs to come close to
 372         * back-to-back transmits. Expect a 20 -> 25% performance hit on
 373         * reasonable hardware if you only use one Tx buffer.
 374         */
 375
 376        ei_block_output(dev, length, skb->data, ei_local->tx_start_page);
 377        ei_local->txing = 1;
 378        NS8390_trigger_send(dev, send_length, ei_local->tx_start_page);
 379        dev->trans_start = jiffies;
 380        netif_stop_queue(dev);
 381
 382#endif  /* EI_PINGPONG */
 383
 384        /* Turn 8390 interrupts back on. */
 385        ei_local->irqlock = 0;
 386        outb_p(ENISR_ALL, e8390_base + EN0_IMR);
 387        
 388        spin_unlock(&ei_local->page_lock);
 389        enable_irq(dev->irq);
 390
 391        dev_kfree_skb (skb);
 392        ei_local->stat.tx_bytes += send_length;
 393    
 394        return 0;
 395}
 396
 397/**
 398 * ei_interrupt - handle the interrupts from an 8390
 399 * @irq: interrupt number
 400 * @dev_id: a pointer to the net_device
 401 * @regs: unused
 402 *
 403 * Handle the ether interface interrupts. We pull packets from
 404 * the 8390 via the card specific functions and fire them at the networking
 405 * stack. We also handle transmit completions and wake the transmit path if
 406 * neccessary. We also update the counters and do other housekeeping as
 407 * needed.
 408 */
 409
 410void ei_interrupt(int irq, void *dev_id, struct pt_regs * regs)
 411{
 412        struct net_device *dev = dev_id;
 413        long e8390_base;
 414        int interrupts, nr_serviced = 0;
 415        struct ei_device *ei_local;
 416    
 417        if (dev == NULL) 
 418        {
 419                printk ("net_interrupt(): irq %d for unknown device.\n", irq);
 420                return;
 421        }
 422    
 423        e8390_base = dev->base_addr;
 424        ei_local = (struct ei_device *) dev->priv;
 425
 426        /*
 427         *      Protect the irq test too.
 428         */
 429         
 430        spin_lock(&ei_local->page_lock);
 431
 432        if (ei_local->irqlock) 
 433        {
 434#if 1 /* This might just be an interrupt for a PCI device sharing this line */
 435                /* The "irqlock" check is only for testing. */
 436                printk(ei_local->irqlock
 437                           ? "%s: Interrupted while interrupts are masked! isr=%#2x imr=%#2x.\n"
 438                           : "%s: Reentering the interrupt handler! isr=%#2x imr=%#2x.\n",
 439                           dev->name, inb_p(e8390_base + EN0_ISR),
 440                           inb_p(e8390_base + EN0_IMR));
 441#endif
 442                spin_unlock(&ei_local->page_lock);
 443                return;
 444        }
 445    
 446        /* Change to page 0 and read the intr status reg. */
 447        outb_p(E8390_NODMA+E8390_PAGE0, e8390_base + E8390_CMD);
 448        if (ei_debug > 3)
 449                printk(KERN_DEBUG "%s: interrupt(isr=%#2.2x).\n", dev->name,
 450                           inb_p(e8390_base + EN0_ISR));
 451    
 452        /* !!Assumption!! -- we stay in page 0.  Don't break this. */
 453        while ((interrupts = inb_p(e8390_base + EN0_ISR)) != 0
 454                   && ++nr_serviced < MAX_SERVICE) 
 455        {
 456                if (!netif_running(dev)) {
 457                        printk(KERN_WARNING "%s: interrupt from stopped card\n", dev->name);
 458                        /* rmk - acknowledge the interrupts */
 459                        outb_p(interrupts, e8390_base + EN0_ISR);
 460                        interrupts = 0;
 461                        break;
 462                }
 463                if (interrupts & ENISR_OVER) 
 464                        ei_rx_overrun(dev);
 465                else if (interrupts & (ENISR_RX+ENISR_RX_ERR)) 
 466                {
 467                        /* Got a good (?) packet. */
 468                        ei_receive(dev);
 469                }
 470                /* Push the next to-transmit packet through. */
 471                if (interrupts & ENISR_TX)
 472                        ei_tx_intr(dev);
 473                else if (interrupts & ENISR_TX_ERR)
 474                        ei_tx_err(dev);
 475
 476                if (interrupts & ENISR_COUNTERS) 
 477                {
 478                        ei_local->stat.rx_frame_errors += inb_p(e8390_base + EN0_COUNTER0);
 479                        ei_local->stat.rx_crc_errors   += inb_p(e8390_base + EN0_COUNTER1);
 480                        ei_local->stat.rx_missed_errors+= inb_p(e8390_base + EN0_COUNTER2);
 481                        outb_p(ENISR_COUNTERS, e8390_base + EN0_ISR); /* Ack intr. */
 482                }
 483                
 484                /* Ignore any RDC interrupts that make it back to here. */
 485                if (interrupts & ENISR_RDC) 
 486                {
 487                        outb_p(ENISR_RDC, e8390_base + EN0_ISR);
 488                }
 489
 490                outb_p(E8390_NODMA+E8390_PAGE0+E8390_START, e8390_base + E8390_CMD);
 491        }
 492    
 493        if (interrupts && ei_debug) 
 494        {
 495                outb_p(E8390_NODMA+E8390_PAGE0+E8390_START, e8390_base + E8390_CMD);
 496                if (nr_serviced >= MAX_SERVICE) 
 497                {
 498                        /* 0xFF is valid for a card removal */
 499                        if(interrupts!=0xFF)
 500                                printk(KERN_WARNING "%s: Too much work at interrupt, status %#2.2x\n",
 501                                   dev->name, interrupts);
 502                        outb_p(ENISR_ALL, e8390_base + EN0_ISR); /* Ack. most intrs. */
 503                } else {
 504                        printk(KERN_WARNING "%s: unknown interrupt %#2x\n", dev->name, interrupts);
 505                        outb_p(0xff, e8390_base + EN0_ISR); /* Ack. all intrs. */
 506                }
 507        }
 508        spin_unlock(&ei_local->page_lock);
 509        return;
 510}
 511
 512/**
 513 * ei_tx_err - handle transmitter error
 514 * @dev: network device which threw the exception
 515 *
 516 * A transmitter error has happened. Most likely excess collisions (which
 517 * is a fairly normal condition). If the error is one where the Tx will
 518 * have been aborted, we try and send another one right away, instead of
 519 * letting the failed packet sit and collect dust in the Tx buffer. This
 520 * is a much better solution as it avoids kernel based Tx timeouts, and
 521 * an unnecessary card reset.
 522 *
 523 * Called with lock held.
 524 */
 525
 526static void ei_tx_err(struct net_device *dev)
 527{
 528        long e8390_base = dev->base_addr;
 529        struct ei_device *ei_local = (struct ei_device *) dev->priv;
 530        unsigned char txsr = inb_p(e8390_base+EN0_TSR);
 531        unsigned char tx_was_aborted = txsr & (ENTSR_ABT+ENTSR_FU);
 532
 533#ifdef VERBOSE_ERROR_DUMP
 534        printk(KERN_DEBUG "%s: transmitter error (%#2x): ", dev->name, txsr);
 535        if (txsr & ENTSR_ABT)
 536                printk("excess-collisions ");
 537        if (txsr & ENTSR_ND)
 538                printk("non-deferral ");
 539        if (txsr & ENTSR_CRS)
 540                printk("lost-carrier ");
 541        if (txsr & ENTSR_FU)
 542                printk("FIFO-underrun ");
 543        if (txsr & ENTSR_CDH)
 544                printk("lost-heartbeat ");
 545        printk("\n");
 546#endif
 547
 548        outb_p(ENISR_TX_ERR, e8390_base + EN0_ISR); /* Ack intr. */
 549
 550        if (tx_was_aborted)
 551                ei_tx_intr(dev);
 552        else 
 553        {
 554                ei_local->stat.tx_errors++;
 555                if (txsr & ENTSR_CRS) ei_local->stat.tx_carrier_errors++;
 556                if (txsr & ENTSR_CDH) ei_local->stat.tx_heartbeat_errors++;
 557                if (txsr & ENTSR_OWC) ei_local->stat.tx_window_errors++;
 558        }
 559}
 560
 561/**
 562 * ei_tx_intr - transmit interrupt handler
 563 * @dev: network device for which tx intr is handled
 564 *
 565 * We have finished a transmit: check for errors and then trigger the next
 566 * packet to be sent. Called with lock held.
 567 */
 568
 569static void ei_tx_intr(struct net_device *dev)
 570{
 571        long e8390_base = dev->base_addr;
 572        struct ei_device *ei_local = (struct ei_device *) dev->priv;
 573        int status = inb(e8390_base + EN0_TSR);
 574    
 575        outb_p(ENISR_TX, e8390_base + EN0_ISR); /* Ack intr. */
 576
 577#ifdef EI_PINGPONG
 578
 579        /*
 580         * There are two Tx buffers, see which one finished, and trigger
 581         * the send of another one if it exists.
 582         */
 583        ei_local->txqueue--;
 584
 585        if (ei_local->tx1 < 0) 
 586        {
 587                if (ei_local->lasttx != 1 && ei_local->lasttx != -1)
 588                        printk(KERN_ERR "%s: bogus last_tx_buffer %d, tx1=%d.\n",
 589                                ei_local->name, ei_local->lasttx, ei_local->tx1);
 590                ei_local->tx1 = 0;
 591                if (ei_local->tx2 > 0) 
 592                {
 593                        ei_local->txing = 1;
 594                        NS8390_trigger_send(dev, ei_local->tx2, ei_local->tx_start_page + 6);
 595                        dev->trans_start = jiffies;
 596                        ei_local->tx2 = -1,
 597                        ei_local->lasttx = 2;
 598                }
 599                else ei_local->lasttx = 20, ei_local->txing = 0;        
 600        }
 601        else if (ei_local->tx2 < 0) 
 602        {
 603                if (ei_local->lasttx != 2  &&  ei_local->lasttx != -2)
 604                        printk("%s: bogus last_tx_buffer %d, tx2=%d.\n",
 605                                ei_local->name, ei_local->lasttx, ei_local->tx2);
 606                ei_local->tx2 = 0;
 607                if (ei_local->tx1 > 0) 
 608                {
 609                        ei_local->txing = 1;
 610                        NS8390_trigger_send(dev, ei_local->tx1, ei_local->tx_start_page);
 611                        dev->trans_start = jiffies;
 612                        ei_local->tx1 = -1;
 613                        ei_local->lasttx = 1;
 614                }
 615                else
 616                        ei_local->lasttx = 10, ei_local->txing = 0;
 617        }
 618//      else printk(KERN_WARNING "%s: unexpected TX-done interrupt, lasttx=%d.\n",
 619//                      dev->name, ei_local->lasttx);
 620
 621#else   /* EI_PINGPONG */
 622        /*
 623         *  Single Tx buffer: mark it free so another packet can be loaded.
 624         */
 625        ei_local->txing = 0;
 626#endif
 627
 628        /* Minimize Tx latency: update the statistics after we restart TXing. */
 629        if (status & ENTSR_COL)
 630                ei_local->stat.collisions++;
 631        if (status & ENTSR_PTX)
 632                ei_local->stat.tx_packets++;
 633        else 
 634        {
 635                ei_local->stat.tx_errors++;
 636                if (status & ENTSR_ABT) 
 637                {
 638                        ei_local->stat.tx_aborted_errors++;
 639                        ei_local->stat.collisions += 16;
 640                }
 641                if (status & ENTSR_CRS) 
 642                        ei_local->stat.tx_carrier_errors++;
 643                if (status & ENTSR_FU) 
 644                        ei_local->stat.tx_fifo_errors++;
 645                if (status & ENTSR_CDH)
 646                        ei_local->stat.tx_heartbeat_errors++;
 647                if (status & ENTSR_OWC)
 648                        ei_local->stat.tx_window_errors++;
 649        }
 650        netif_wake_queue(dev);
 651}
 652
 653/**
 654 * ei_receive - receive some packets
 655 * @dev: network device with which receive will be run
 656 *
 657 * We have a good packet(s), get it/them out of the buffers. 
 658 * Called with lock held.
 659 */
 660
 661static void ei_receive(struct net_device *dev)
 662{
 663        long e8390_base = dev->base_addr;
 664        struct ei_device *ei_local = (struct ei_device *) dev->priv;
 665        unsigned char rxing_page, this_frame, next_frame;
 666        unsigned short current_offset;
 667        int rx_pkt_count = 0;
 668        struct e8390_pkt_hdr rx_frame;
 669        int num_rx_pages = ei_local->stop_page-ei_local->rx_start_page;
 670    
 671        while (++rx_pkt_count < 10) 
 672        {
 673                int pkt_len, pkt_stat;
 674                
 675                /* Get the rx page (incoming packet pointer). */
 676                outb_p(E8390_NODMA+E8390_PAGE1, e8390_base + E8390_CMD);
 677                rxing_page = inb_p(e8390_base + EN1_CURPAG);
 678                outb_p(E8390_NODMA+E8390_PAGE0, e8390_base + E8390_CMD);
 679                
 680                /* Remove one frame from the ring.  Boundary is always a page behind. */
 681                this_frame = inb_p(e8390_base + EN0_BOUNDARY) + 1;
 682                if (this_frame >= ei_local->stop_page)
 683                        this_frame = ei_local->rx_start_page;
 684                
 685                /* Someday we'll omit the previous, iff we never get this message.
 686                   (There is at least one clone claimed to have a problem.)  
 687                   
 688                   Keep quiet if it looks like a card removal. One problem here
 689                   is that some clones crash in roughly the same way.
 690                 */
 691                if (ei_debug > 0  &&  this_frame != ei_local->current_page && (this_frame!=0x0 || rxing_page!=0xFF))
 692                        printk(KERN_ERR "%s: mismatched read page pointers %2x vs %2x.\n",
 693                                   dev->name, this_frame, ei_local->current_page);
 694                
 695                if (this_frame == rxing_page)   /* Read all the frames? */
 696                        break;                          /* Done for now */
 697                
 698                current_offset = this_frame << 8;
 699                ei_get_8390_hdr(dev, &rx_frame, this_frame);
 700                
 701                pkt_len = rx_frame.count - sizeof(struct e8390_pkt_hdr);
 702                pkt_stat = rx_frame.status;
 703                
 704                next_frame = this_frame + 1 + ((pkt_len+4)>>8);
 705                
 706                /* Check for bogosity warned by 3c503 book: the status byte is never
 707                   written.  This happened a lot during testing! This code should be
 708                   cleaned up someday. */
 709                if (rx_frame.next != next_frame
 710                        && rx_frame.next != next_frame + 1
 711                        && rx_frame.next != next_frame - num_rx_pages
 712                        && rx_frame.next != next_frame + 1 - num_rx_pages) {
 713                        ei_local->current_page = rxing_page;
 714                        outb(ei_local->current_page-1, e8390_base+EN0_BOUNDARY);
 715                        ei_local->stat.rx_errors++;
 716                        continue;
 717                }
 718
 719                if (pkt_len < 60  ||  pkt_len > 1518) 
 720                {
 721                        if (ei_debug)
 722                                printk(KERN_DEBUG "%s: bogus packet size: %d, status=%#2x nxpg=%#2x.\n",
 723                                           dev->name, rx_frame.count, rx_frame.status,
 724                                           rx_frame.next);
 725                        ei_local->stat.rx_errors++;
 726                        ei_local->stat.rx_length_errors++;
 727                }
 728                 else if ((pkt_stat & 0x0F) == ENRSR_RXOK) 
 729                {
 730                        struct sk_buff *skb;
 731                        
 732                        skb = dev_alloc_skb(pkt_len+2);
 733                        if (skb == NULL) 
 734                        {
 735                                if (ei_debug > 1)
 736                                        printk(KERN_DEBUG "%s: Couldn't allocate a sk_buff of size %d.\n",
 737                                                   dev->name, pkt_len);
 738                                ei_local->stat.rx_dropped++;
 739                                break;
 740                        }
 741                        else
 742                        {
 743                                skb_reserve(skb,2);     /* IP headers on 16 byte boundaries */
 744                                skb->dev = dev;
 745                                skb_put(skb, pkt_len);  /* Make room */
 746                                ei_block_input(dev, pkt_len, skb, current_offset + sizeof(rx_frame));
 747                                skb->protocol=eth_type_trans(skb,dev);
 748                                netif_rx(skb);
 749                                dev->last_rx = jiffies;
 750                                ei_local->stat.rx_packets++;
 751                                ei_local->stat.rx_bytes += pkt_len;
 752                                if (pkt_stat & ENRSR_PHY)
 753                                        ei_local->stat.multicast++;
 754                        }
 755                } 
 756                else 
 757                {
 758                        if (ei_debug)
 759                                printk(KERN_DEBUG "%s: bogus packet: status=%#2x nxpg=%#2x size=%d\n",
 760                                           dev->name, rx_frame.status, rx_frame.next,
 761                                           rx_frame.count);
 762                        ei_local->stat.rx_errors++;
 763                        /* NB: The NIC counts CRC, frame and missed errors. */
 764                        if (pkt_stat & ENRSR_FO)
 765                                ei_local->stat.rx_fifo_errors++;
 766                }
 767                next_frame = rx_frame.next;
 768                
 769                /* This _should_ never happen: it's here for avoiding bad clones. */
 770                if (next_frame >= ei_local->stop_page) {
 771                        printk("%s: next frame inconsistency, %#2x\n", dev->name,
 772                                   next_frame);
 773                        next_frame = ei_local->rx_start_page;
 774                }
 775                ei_local->current_page = next_frame;
 776                outb_p(next_frame-1, e8390_base+EN0_BOUNDARY);
 777        }
 778
 779        /* We used to also ack ENISR_OVER here, but that would sometimes mask
 780           a real overrun, leaving the 8390 in a stopped state with rec'vr off. */
 781        outb_p(ENISR_RX+ENISR_RX_ERR, e8390_base+EN0_ISR);
 782        return;
 783}
 784
 785/**
 786 * ei_rx_overrun - handle receiver overrun
 787 * @dev: network device which threw exception
 788 *
 789 * We have a receiver overrun: we have to kick the 8390 to get it started
 790 * again. Problem is that you have to kick it exactly as NS prescribes in
 791 * the updated datasheets, or "the NIC may act in an unpredictable manner."
 792 * This includes causing "the NIC to defer indefinitely when it is stopped
 793 * on a busy network."  Ugh.
 794 * Called with lock held. Don't call this with the interrupts off or your
 795 * computer will hate you - it takes 10ms or so. 
 796 */
 797
 798static void ei_rx_overrun(struct net_device *dev)
 799{
 800        long e8390_base = dev->base_addr;
 801        unsigned char was_txing, must_resend = 0;
 802        struct ei_device *ei_local = (struct ei_device *) dev->priv;
 803    
 804        /*
 805         * Record whether a Tx was in progress and then issue the
 806         * stop command.
 807         */
 808        was_txing = inb_p(e8390_base+E8390_CMD) & E8390_TRANS;
 809        outb_p(E8390_NODMA+E8390_PAGE0+E8390_STOP, e8390_base+E8390_CMD);
 810    
 811        if (ei_debug > 1)
 812                printk(KERN_DEBUG "%s: Receiver overrun.\n", dev->name);
 813        ei_local->stat.rx_over_errors++;
 814    
 815        /* 
 816         * Wait a full Tx time (1.2ms) + some guard time, NS says 1.6ms total.
 817         * Early datasheets said to poll the reset bit, but now they say that
 818         * it "is not a reliable indicator and subsequently should be ignored."
 819         * We wait at least 10ms.
 820         */
 821
 822        udelay(10*1000);
 823
 824        /*
 825         * Reset RBCR[01] back to zero as per magic incantation.
 826         */
 827        outb_p(0x00, e8390_base+EN0_RCNTLO);
 828        outb_p(0x00, e8390_base+EN0_RCNTHI);
 829
 830        /*
 831         * See if any Tx was interrupted or not. According to NS, this
 832         * step is vital, and skipping it will cause no end of havoc.
 833         */
 834
 835        if (was_txing)
 836        { 
 837                unsigned char tx_completed = inb_p(e8390_base+EN0_ISR) & (ENISR_TX+ENISR_TX_ERR);
 838                if (!tx_completed)
 839                        must_resend = 1;
 840        }
 841
 842        /*
 843         * Have to enter loopback mode and then restart the NIC before
 844         * you are allowed to slurp packets up off the ring.
 845         */
 846        outb_p(E8390_TXOFF, e8390_base + EN0_TXCR);
 847        outb_p(E8390_NODMA + E8390_PAGE0 + E8390_START, e8390_base + E8390_CMD);
 848
 849        /*
 850         * Clear the Rx ring of all the debris, and ack the interrupt.
 851         */
 852        ei_receive(dev);
 853        outb_p(ENISR_OVER, e8390_base+EN0_ISR);
 854
 855        /*
 856         * Leave loopback mode, and resend any packet that got stopped.
 857         */
 858        outb_p(E8390_TXCONFIG, e8390_base + EN0_TXCR); 
 859        if (must_resend)
 860                outb_p(E8390_NODMA + E8390_PAGE0 + E8390_START + E8390_TRANS, e8390_base + E8390_CMD);
 861}
 862
 863/*
 864 *      Collect the stats. This is called unlocked and from several contexts.
 865 */
 866 
 867static struct net_device_stats *get_stats(struct net_device *dev)
 868{
 869        long ioaddr = dev->base_addr;
 870        struct ei_device *ei_local = (struct ei_device *) dev->priv;
 871        unsigned long flags;
 872    
 873        /* If the card is stopped, just return the present stats. */
 874        if (!netif_running(dev))
 875                return &ei_local->stat;
 876
 877        spin_lock_irqsave(&ei_local->page_lock,flags);
 878        /* Read the counter registers, assuming we are in page 0. */
 879        ei_local->stat.rx_frame_errors += inb_p(ioaddr + EN0_COUNTER0);
 880        ei_local->stat.rx_crc_errors   += inb_p(ioaddr + EN0_COUNTER1);
 881        ei_local->stat.rx_missed_errors+= inb_p(ioaddr + EN0_COUNTER2);
 882        spin_unlock_irqrestore(&ei_local->page_lock, flags);
 883    
 884        return &ei_local->stat;
 885}
 886
 887/*
 888 * Form the 64 bit 8390 multicast table from the linked list of addresses
 889 * associated with this dev structure.
 890 */
 891 
 892static inline void make_mc_bits(u8 *bits, struct net_device *dev)
 893{
 894        struct dev_mc_list *dmi;
 895
 896        for (dmi=dev->mc_list; dmi; dmi=dmi->next) 
 897        {
 898                u32 crc;
 899                if (dmi->dmi_addrlen != ETH_ALEN) 
 900                {
 901                        printk(KERN_INFO "%s: invalid multicast address length given.\n", dev->name);
 902                        continue;
 903                }
 904                crc = ether_crc(ETH_ALEN, dmi->dmi_addr);
 905                /* 
 906                 * The 8390 uses the 6 most significant bits of the
 907                 * CRC to index the multicast table.
 908                 */
 909                bits[crc>>29] |= (1<<((crc>>26)&7));
 910        }
 911}
 912
 913/**
 914 * do_set_multicast_list - set/clear multicast filter
 915 * @dev: net device for which multicast filter is adjusted
 916 *
 917 *      Set or clear the multicast filter for this adaptor. May be called
 918 *      from a BH in 2.1.x. Must be called with lock held. 
 919 */
 920 
 921static void do_set_multicast_list(struct net_device *dev)
 922{
 923        long e8390_base = dev->base_addr;
 924        int i;
 925        struct ei_device *ei_local = (struct ei_device*)dev->priv;
 926
 927        if (!(dev->flags&(IFF_PROMISC|IFF_ALLMULTI))) 
 928        {
 929                memset(ei_local->mcfilter, 0, 8);
 930                if (dev->mc_list)
 931                        make_mc_bits(ei_local->mcfilter, dev);
 932        }
 933        else
 934                memset(ei_local->mcfilter, 0xFF, 8);    /* mcast set to accept-all */
 935
 936        /* 
 937         * DP8390 manuals don't specify any magic sequence for altering
 938         * the multicast regs on an already running card. To be safe, we
 939         * ensure multicast mode is off prior to loading up the new hash
 940         * table. If this proves to be not enough, we can always resort
 941         * to stopping the NIC, loading the table and then restarting.
 942         *
 943         * Bug Alert!  The MC regs on the SMC 83C690 (SMC Elite and SMC 
 944         * Elite16) appear to be write-only. The NS 8390 data sheet lists
 945         * them as r/w so this is a bug.  The SMC 83C790 (SMC Ultra and
 946         * Ultra32 EISA) appears to have this bug fixed.
 947         */
 948         
 949        if (netif_running(dev))
 950                outb_p(E8390_RXCONFIG, e8390_base + EN0_RXCR);
 951        outb_p(E8390_NODMA + E8390_PAGE1, e8390_base + E8390_CMD);
 952        for(i = 0; i < 8; i++) 
 953        {
 954                outb_p(ei_local->mcfilter[i], e8390_base + EN1_MULT_SHIFT(i));
 955#ifndef BUG_83C690
 956                if(inb_p(e8390_base + EN1_MULT_SHIFT(i))!=ei_local->mcfilter[i])
 957                        printk(KERN_ERR "Multicast filter read/write mismap %d\n",i);
 958#endif
 959        }
 960        outb_p(E8390_NODMA + E8390_PAGE0, e8390_base + E8390_CMD);
 961
 962        if(dev->flags&IFF_PROMISC)
 963                outb_p(E8390_RXCONFIG | 0x18, e8390_base + EN0_RXCR);
 964        else if(dev->flags&IFF_ALLMULTI || dev->mc_list)
 965                outb_p(E8390_RXCONFIG | 0x08, e8390_base + EN0_RXCR);
 966        else
 967                outb_p(E8390_RXCONFIG, e8390_base + EN0_RXCR);
 968 }
 969
 970/*
 971 *      Called without lock held. This is invoked from user context and may
 972 *      be parallel to just about everything else. Its also fairly quick and
 973 *      not called too often. Must protect against both bh and irq users
 974 */
 975 
 976static void set_multicast_list(struct net_device *dev)
 977{
 978        unsigned long flags;
 979        struct ei_device *ei_local = (struct ei_device*)dev->priv;
 980        
 981        spin_lock_irqsave(&ei_local->page_lock, flags);
 982        do_set_multicast_list(dev);
 983        spin_unlock_irqrestore(&ei_local->page_lock, flags);
 984}       
 985
 986/**
 987 * ethdev_init - init rest of 8390 device struct
 988 * @dev: network device structure to init
 989 *
 990 * Initialize the rest of the 8390 device structure.  Do NOT __init
 991 * this, as it is used by 8390 based modular drivers too.
 992 */
 993
 994int ethdev_init(struct net_device *dev)
 995{
 996        if (ei_debug > 1)
 997                printk(version);
 998    
 999        if (dev->priv == NULL) 
1000        {
1001                struct ei_device *ei_local;
1002                
1003                dev->priv = kmalloc(sizeof(struct ei_device), GFP_KERNEL);
1004                if (dev->priv == NULL)
1005                        return -ENOMEM;
1006                memset(dev->priv, 0, sizeof(struct ei_device));
1007                ei_local = (struct ei_device *)dev->priv;
1008                spin_lock_init(&ei_local->page_lock);
1009        }
1010    
1011        dev->hard_start_xmit = &ei_start_xmit;
1012        dev->get_stats  = get_stats;
1013        dev->set_multicast_list = &set_multicast_list;
1014
1015        ether_setup(dev);
1016        
1017        return 0;
1018}
1019
1020
1021
1022/* This page of functions should be 8390 generic */
1023/* Follow National Semi's recommendations for initializing the "NIC". */
1024
1025/**
1026 * NS8390_init - initialize 8390 hardware
1027 * @dev: network device to initialize
1028 * @startp: boolean.  non-zero value to initiate chip processing
1029 *
1030 *      Must be called with lock held.
1031 */
1032
1033void NS8390_init(struct net_device *dev, int startp)
1034{
1035        long e8390_base = dev->base_addr;
1036        struct ei_device *ei_local = (struct ei_device *) dev->priv;
1037        int i;
1038        int endcfg = ei_local->word16
1039            ? (0x48 | ENDCFG_WTS | (ei_local->bigendian ? ENDCFG_BOS : 0))
1040            : 0x48;
1041    
1042        if(sizeof(struct e8390_pkt_hdr)!=4)
1043                panic("8390.c: header struct mispacked\n");    
1044        /* Follow National Semi's recommendations for initing the DP83902. */
1045        outb_p(E8390_NODMA+E8390_PAGE0+E8390_STOP, e8390_base+E8390_CMD); /* 0x21 */
1046        outb_p(endcfg, e8390_base + EN0_DCFG);  /* 0x48 or 0x49 */
1047        /* Clear the remote byte count registers. */
1048        outb_p(0x00,  e8390_base + EN0_RCNTLO);
1049        outb_p(0x00,  e8390_base + EN0_RCNTHI);
1050        /* Set to monitor and loopback mode -- this is vital!. */
1051        outb_p(E8390_RXOFF, e8390_base + EN0_RXCR); /* 0x20 */
1052        outb_p(E8390_TXOFF, e8390_base + EN0_TXCR); /* 0x02 */
1053        /* Set the transmit page and receive ring. */
1054        outb_p(ei_local->tx_start_page, e8390_base + EN0_TPSR);
1055        ei_local->tx1 = ei_local->tx2 = 0;
1056        outb_p(ei_local->rx_start_page, e8390_base + EN0_STARTPG);
1057        outb_p(ei_local->stop_page-1, e8390_base + EN0_BOUNDARY);       /* 3c503 says 0x3f,NS0x26*/
1058        ei_local->current_page = ei_local->rx_start_page;               /* assert boundary+1 */
1059        outb_p(ei_local->stop_page, e8390_base + EN0_STOPPG);
1060        /* Clear the pending interrupts and mask. */
1061        outb_p(0xFF, e8390_base + EN0_ISR);
1062        outb_p(0x00,  e8390_base + EN0_IMR);
1063    
1064        /* Copy the station address into the DS8390 registers. */
1065
1066        outb_p(E8390_NODMA + E8390_PAGE1 + E8390_STOP, e8390_base+E8390_CMD); /* 0x61 */
1067        for(i = 0; i < 6; i++) 
1068        {
1069                outb_p(dev->dev_addr[i], e8390_base + EN1_PHYS_SHIFT(i));
1070                if(inb_p(e8390_base + EN1_PHYS_SHIFT(i))!=dev->dev_addr[i])
1071                        printk(KERN_ERR "Hw. address read/write mismap %d\n",i);
1072        }
1073
1074        outb_p(ei_local->rx_start_page, e8390_base + EN1_CURPAG);
1075        outb_p(E8390_NODMA+E8390_PAGE0+E8390_STOP, e8390_base+E8390_CMD);
1076
1077        netif_start_queue(dev);
1078        ei_local->tx1 = ei_local->tx2 = 0;
1079        ei_local->txing = 0;
1080
1081        if (startp) 
1082        {
1083                outb_p(0xff,  e8390_base + EN0_ISR);
1084                outb_p(ENISR_ALL,  e8390_base + EN0_IMR);
1085                outb_p(E8390_NODMA+E8390_PAGE0+E8390_START, e8390_base+E8390_CMD);
1086                outb_p(E8390_TXCONFIG, e8390_base + EN0_TXCR); /* xmit on. */
1087                /* 3c503 TechMan says rxconfig only after the NIC is started. */
1088                outb_p(E8390_RXCONFIG, e8390_base + EN0_RXCR); /* rx on,  */
1089                do_set_multicast_list(dev);     /* (re)load the mcast table */
1090        }
1091}
1092
1093/* Trigger a transmit start, assuming the length is valid. 
1094   Always called with the page lock held */
1095   
1096static void NS8390_trigger_send(struct net_device *dev, unsigned int length,
1097                                                                int start_page)
1098{
1099        long e8390_base = dev->base_addr;
1100        struct ei_device *ei_local __attribute((unused)) = (struct ei_device *) dev->priv;
1101   
1102        outb_p(E8390_NODMA+E8390_PAGE0, e8390_base+E8390_CMD);
1103    
1104        if (inb_p(e8390_base) & E8390_TRANS) 
1105        {
1106                printk(KERN_WARNING "%s: trigger_send() called with the transmitter busy.\n",
1107                        dev->name);
1108                return;
1109        }
1110        outb_p(length & 0xff, e8390_base + EN0_TCNTLO);
1111        outb_p(length >> 8, e8390_base + EN0_TCNTHI);
1112        outb_p(start_page, e8390_base + EN0_TPSR);
1113        outb_p(E8390_NODMA+E8390_TRANS+E8390_START, e8390_base+E8390_CMD);
1114}
1115
1116EXPORT_SYMBOL(ei_open);
1117EXPORT_SYMBOL(ei_close);
1118EXPORT_SYMBOL(ei_interrupt);
1119EXPORT_SYMBOL(ei_tx_timeout);
1120EXPORT_SYMBOL(ethdev_init);
1121EXPORT_SYMBOL(NS8390_init);
1122
1123#if defined(MODULE)
1124
1125int init_module(void)
1126{
1127        return 0;
1128}
1129
1130void cleanup_module(void)
1131{
1132}
1133
1134#endif /* MODULE */
1135MODULE_LICENSE("GPL");
1136
1137
1138/*
1139 * Local variables:
1140 *  compile-command: "gcc -D__KERNEL__ -I/usr/src/linux/net/inet -Wall -Wstrict-prototypes -O6 -m486 -c 8390.c"
1141 *  version-control: t
1142 *  kept-new-versions: 5
1143 *  c-indent-level: 4
1144 *  tab-width: 4
1145 * End:
1146 */
1147
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.