Annotation of Gnu-Mach/linux/src/drivers/net/lance.c, revision 1.1.1.2

1.1       root        1: /* lance.c: An AMD LANCE/PCnet ethernet driver for Linux. */
                      2: /*
                      3:        Written/copyright 1993-1998 by Donald Becker.
                      4: 
                      5:        Copyright 1993 United States Government as represented by the
                      6:        Director, National Security Agency.
                      7:        This software may be used and distributed according to the terms
                      8:        of the GNU Public License, incorporated herein by reference.
                      9: 
                     10:        This driver is for the Allied Telesis AT1500 and HP J2405A, and should work
                     11:        with most other LANCE-based bus-master (NE2100/NE2500) ethercards.
                     12: 
                     13:        The author may be reached as [email protected], or C/O
                     14:        Center of Excellence in Space Data and Information Sciences
                     15:           Code 930.5, Goddard Space Flight Center, Greenbelt MD 20771
                     16: 
                     17:        Fixing alignment problem with 1.3.* kernel and some minor changes
                     18:        by Andrey V. Savochkin, 1996.
                     19: 
                     20:        Problems or questions may be send to Donald Becker (see above) or to
                     21:        Andrey Savochkin -- [email protected] or
                     22:                Laboratory of Computation Methods, 
                     23:                Department of Mathematics and Mechanics,
                     24:                Moscow State University,
                     25:                Leninskye Gory, Moscow 119899
                     26: 
                     27:        But I should to inform you that I'm not an expert in the LANCE card
                     28:        and it may occurs that you will receive no answer on your mail
                     29:        to Donald Becker. I didn't receive any answer on all my letters
                     30:        to him. Who knows why... But may be you are more lucky?  ;->
                     31:                                                           SAW
                     32: 
                     33:        Thomas Bogendoerfer ([email protected]):
                     34:        - added support for Linux/Alpha, but removed most of it, because
                     35:         it worked only for the PCI chip. 
                     36:       - added hook for the 32bit lance driver
                     37:       - added PCnetPCI II (79C970A) to chip table
                     38:        Paul Gortmaker ([email protected]):
                     39:        - hopefully fix above so Linux/Alpha can use ISA cards too.
                     40:     8/20/96 Fixed 7990 autoIRQ failure and reversed unneeded alignment -djb
                     41:     v1.12 10/27/97 Module support -djb
                     42:     v1.14  2/3/98 Module support modified, made PCI support optional -djb
                     43: */
                     44: 
                     45: static const char *version = "lance.c:v1.14 2/3/1998 [email protected], [email protected]\n";
                     46: 
                     47: #ifdef MODULE
                     48: #ifdef MODVERSIONS
                     49: #include <linux/modversions.h>
                     50: #endif
                     51: #include <linux/module.h>
                     52: #include <linux/version.h>
                     53: #else
                     54: #define MOD_INC_USE_COUNT
                     55: #define MOD_DEC_USE_COUNT
                     56: #endif
                     57: 
                     58: #include <linux/config.h>
                     59: #include <linux/kernel.h>
                     60: #include <linux/sched.h>
                     61: #include <linux/string.h>
                     62: #include <linux/ptrace.h>
                     63: #include <linux/errno.h>
                     64: #include <linux/ioport.h>
                     65: #include <linux/malloc.h>
                     66: #include <linux/interrupt.h>
                     67: #include <linux/pci.h>
                     68: #include <linux/bios32.h>
                     69: #include <asm/bitops.h>
                     70: #include <asm/io.h>
                     71: #include <asm/dma.h>
                     72: 
                     73: #include <linux/netdevice.h>
                     74: #include <linux/etherdevice.h>
                     75: #include <linux/skbuff.h>
                     76: 
                     77: static unsigned int lance_portlist[] = { 0x300, 0x320, 0x340, 0x360, 0};
                     78: int lance_probe(struct device *dev);
                     79: int lance_probe1(struct device *dev, int ioaddr, int irq, int options);
                     80: 
                     81: #ifdef HAVE_DEVLIST
                     82: struct netdev_entry lance_drv =
                     83: {"lance", lance_probe1, LANCE_TOTAL_SIZE, lance_portlist};
                     84: #endif
                     85: 
                     86: #ifdef LANCE_DEBUG
                     87: int lance_debug = LANCE_DEBUG;
                     88: #else
                     89: int lance_debug = 1;
                     90: #endif
                     91: 
                     92: /*
                     93:                                Theory of Operation
                     94: 
                     95: I. Board Compatibility
                     96: 
                     97: This device driver is designed for the AMD 79C960, the "PCnet-ISA
                     98: single-chip ethernet controller for ISA".  This chip is used in a wide
                     99: variety of boards from vendors such as Allied Telesis, HP, Kingston,
                    100: and Boca.  This driver is also intended to work with older AMD 7990
                    101: designs, such as the NE1500 and NE2100, and newer 79C961.  For convenience,
                    102: I use the name LANCE to refer to all of the AMD chips, even though it properly
                    103: refers only to the original 7990.
                    104: 
                    105: II. Board-specific settings
                    106: 
                    107: The driver is designed to work the boards that use the faster
                    108: bus-master mode, rather than in shared memory mode.     (Only older designs
                    109: have on-board buffer memory needed to support the slower shared memory mode.)
                    110: 
                    111: Most ISA boards have jumpered settings for the I/O base, IRQ line, and DMA
                    112: channel.  This driver probes the likely base addresses:
                    113: {0x300, 0x320, 0x340, 0x360}.
                    114: After the board is found it generates a DMA-timeout interrupt and uses
                    115: autoIRQ to find the IRQ line.  The DMA channel can be set with the low bits
                    116: of the otherwise-unused dev->mem_start value (aka PARAM1).  If unset it is
                    117: probed for by enabling each free DMA channel in turn and checking if
                    118: initialization succeeds.
                    119: 
                    120: The HP-J2405A board is an exception: with this board it is easy to read the
                    121: EEPROM-set values for the base, IRQ, and DMA.  (Of course you must already
                    122: _know_ the base address -- that field is for writing the EEPROM.)
                    123: 
                    124: III. Driver operation
                    125: 
                    126: IIIa. Ring buffers
                    127: The LANCE uses ring buffers of Tx and Rx descriptors.  Each entry describes
                    128: the base and length of the data buffer, along with status bits.         The length
                    129: of these buffers is set by LANCE_LOG_{RX,TX}_BUFFERS, which is log_2() of
                    130: the buffer length (rather than being directly the buffer length) for
                    131: implementation ease.  The current values are 2 (Tx) and 4 (Rx), which leads to
                    132: ring sizes of 4 (Tx) and 16 (Rx).  Increasing the number of ring entries
                    133: needlessly uses extra space and reduces the chance that an upper layer will
                    134: be able to reorder queued Tx packets based on priority.         Decreasing the number
                    135: of entries makes it more difficult to achieve back-to-back packet transmission
                    136: and increases the chance that Rx ring will overflow.  (Consider the worst case
                    137: of receiving back-to-back minimum-sized packets.)
                    138: 
                    139: The LANCE has the capability to "chain" both Rx and Tx buffers, but this driver
                    140: statically allocates full-sized (slightly oversized -- PKT_BUF_SZ) buffers to
                    141: avoid the administrative overhead. For the Rx side this avoids dynamically
                    142: allocating full-sized buffers "just in case", at the expense of a
                    143: memory-to-memory data copy for each packet received.  For most systems this
                    144: is a good tradeoff: the Rx buffer will always be in low memory, the copy
                    145: is inexpensive, and it primes the cache for later packet processing.  For Tx
                    146: the buffers are only used when needed as low-memory bounce buffers.
                    147: 
                    148: IIIB. 16M memory limitations.
                    149: For the ISA bus master mode all structures used directly by the LANCE,
                    150: the initialization block, Rx and Tx rings, and data buffers, must be
                    151: accessible from the ISA bus, i.e. in the lower 16M of real memory.
                    152: This is a problem for current Linux kernels on >16M machines. The network
                    153: devices are initialized after memory initialization, and the kernel doles out
                    154: memory from the top of memory downward.         The current solution is to have a
                    155: special network initialization routine that's called before memory
                    156: initialization; this will eventually be generalized for all network devices.
                    157: As mentioned before, low-memory "bounce-buffers" are used when needed.
                    158: 
                    159: IIIC. Synchronization
                    160: The driver runs as two independent, single-threaded flows of control.  One
                    161: is the send-packet routine, which enforces single-threaded use by the
                    162: dev->tbusy flag.  The other thread is the interrupt handler, which is single
                    163: threaded by the hardware and other software.
                    164: 
                    165: The send packet thread has partial control over the Tx ring and 'dev->tbusy'
                    166: flag.  It sets the tbusy flag whenever it's queuing a Tx packet. If the next
                    167: queue slot is empty, it clears the tbusy flag when finished otherwise it sets
                    168: the 'lp->tx_full' flag.
                    169: 
                    170: The interrupt handler has exclusive control over the Rx ring and records stats
                    171: from the Tx ring.  (The Tx-done interrupt can't be selectively turned off, so
                    172: we can't avoid the interrupt overhead by having the Tx routine reap the Tx
                    173: stats.)         After reaping the stats, it marks the queue entry as empty by setting
                    174: the 'base' to zero.     Iff the 'lp->tx_full' flag is set, it clears both the
                    175: tx_full and tbusy flags.
                    176: 
                    177: */
                    178: 
                    179: /* Set the number of Tx and Rx buffers, using Log_2(# buffers).
                    180:    Reasonable default values are 16 Tx buffers, and 16 Rx buffers.
                    181:    That translates to 4 and 4 (16 == 2^^4).
                    182:    This is a compile-time option for efficiency.
                    183:    */
                    184: #ifndef LANCE_LOG_TX_BUFFERS
                    185: #define LANCE_LOG_TX_BUFFERS 4
                    186: #define LANCE_LOG_RX_BUFFERS 4
                    187: #endif
                    188: 
                    189: #define TX_RING_SIZE                   (1 << (LANCE_LOG_TX_BUFFERS))
                    190: #define TX_RING_MOD_MASK               (TX_RING_SIZE - 1)
                    191: #define TX_RING_LEN_BITS               ((LANCE_LOG_TX_BUFFERS) << 29)
                    192: 
                    193: #define RX_RING_SIZE                   (1 << (LANCE_LOG_RX_BUFFERS))
                    194: #define RX_RING_MOD_MASK               (RX_RING_SIZE - 1)
                    195: #define RX_RING_LEN_BITS               ((LANCE_LOG_RX_BUFFERS) << 29)
                    196: 
                    197: #define PKT_BUF_SZ             1544
                    198: 
                    199: /* Offsets from base I/O address. */
                    200: #define LANCE_DATA 0x10
                    201: #define LANCE_ADDR 0x12
                    202: #define LANCE_RESET 0x14
                    203: #define LANCE_BUS_IF 0x16
                    204: #define LANCE_TOTAL_SIZE 0x18
                    205: 
                    206: /* The LANCE Rx and Tx ring descriptors. */
                    207: struct lance_rx_head {
                    208:        s32 base;
                    209:        s16 buf_length;                 /* This length is 2s complement (negative)! */
                    210:        s16 msg_length;                 /* This length is "normal". */
                    211: };
                    212: 
                    213: struct lance_tx_head {
                    214:        s32 base;
                    215:        s16 length;                             /* Length is 2s complement (negative)! */
                    216:        s16 misc;
                    217: };
                    218: 
                    219: /* The LANCE initialization block, described in databook. */
                    220: struct lance_init_block {
                    221:        u16 mode;               /* Pre-set mode (reg. 15) */
                    222:        u8  phys_addr[6]; /* Physical ethernet address */
                    223:        u32 filter[2];                  /* Multicast filter (unused). */
                    224:        /* Receive and transmit ring base, along with extra bits. */
                    225:        u32  rx_ring;                   /* Tx and Rx ring base pointers */
                    226:        u32  tx_ring;
                    227: };
                    228: 
                    229: struct lance_private {
                    230:        /* The Tx and Rx ring entries must be aligned on 8-byte boundaries. */
                    231:        struct lance_rx_head rx_ring[RX_RING_SIZE];
                    232:        struct lance_tx_head tx_ring[TX_RING_SIZE];
                    233:        struct lance_init_block init_block;
                    234:        const char *name;
                    235:        /* The saved address of a sent-in-place packet/buffer, for skfree(). */
                    236:        struct sk_buff* tx_skbuff[TX_RING_SIZE];
                    237:        /* The addresses of receive-in-place skbuffs. */
                    238:        struct sk_buff* rx_skbuff[RX_RING_SIZE];
                    239:        unsigned long rx_buffs;         /* Address of Rx and Tx buffers. */
                    240:        /* Tx low-memory "bounce buffer" address. */
                    241:        char (*tx_bounce_buffs)[PKT_BUF_SZ];
                    242:        int cur_rx, cur_tx;                     /* The next free ring entry */
                    243:        int dirty_rx, dirty_tx;         /* The ring entries to be free()ed. */
                    244:        int dma;
                    245:        struct enet_statistics stats;
                    246:        unsigned char chip_version;     /* See lance_chip_type. */
                    247:        char tx_full;
                    248:        unsigned long lock;
                    249: };
                    250: 
                    251: #define LANCE_MUST_PAD          0x00000001
                    252: #define LANCE_ENABLE_AUTOSELECT 0x00000002
                    253: #define LANCE_MUST_REINIT_RING  0x00000004
                    254: #define LANCE_MUST_UNRESET      0x00000008
                    255: #define LANCE_HAS_MISSED_FRAME  0x00000010
                    256: 
                    257: /* A mapping from the chip ID number to the part number and features.
                    258:    These are from the datasheets -- in real life the '970 version
                    259:    reportedly has the same ID as the '965. */
                    260: static struct lance_chip_type {
                    261:        int id_number;
                    262:        const char *name;
                    263:        int flags;
                    264: } chip_table[] = {
                    265:        {0x0000, "LANCE 7990",                          /* Ancient lance chip.  */
                    266:                LANCE_MUST_PAD + LANCE_MUST_UNRESET},
                    267:        {0x0003, "PCnet/ISA 79C960",            /* 79C960 PCnet/ISA.  */
                    268:                LANCE_ENABLE_AUTOSELECT + LANCE_MUST_REINIT_RING +
                    269:                        LANCE_HAS_MISSED_FRAME},
                    270:        {0x2260, "PCnet/ISA+ 79C961",           /* 79C961 PCnet/ISA+, Plug-n-Play.  */
                    271:                LANCE_ENABLE_AUTOSELECT + LANCE_MUST_REINIT_RING +
                    272:                        LANCE_HAS_MISSED_FRAME},
                    273:        {0x2420, "PCnet/PCI 79C970",            /* 79C970 or 79C974 PCnet-SCSI, PCI. */
                    274:                LANCE_ENABLE_AUTOSELECT + LANCE_MUST_REINIT_RING +
                    275:                        LANCE_HAS_MISSED_FRAME},
                    276:        /* Bug: the PCnet/PCI actually uses the PCnet/VLB ID number, so just call
                    277:                it the PCnet32. */
                    278:        {0x2430, "PCnet32",                                     /* 79C965 PCnet for VL bus. */
                    279:                LANCE_ENABLE_AUTOSELECT + LANCE_MUST_REINIT_RING +
                    280:                        LANCE_HAS_MISSED_FRAME},
                    281:         {0x2621, "PCnet/PCI-II 79C970A",        /* 79C970A PCInetPCI II. */
                    282:                 LANCE_ENABLE_AUTOSELECT + LANCE_MUST_REINIT_RING +
                    283:                         LANCE_HAS_MISSED_FRAME},
                    284:        {0x0,    "PCnet (unknown)",
                    285:                LANCE_ENABLE_AUTOSELECT + LANCE_MUST_REINIT_RING +
                    286:                        LANCE_HAS_MISSED_FRAME},
                    287: };
                    288: 
                    289: enum {OLD_LANCE = 0, PCNET_ISA=1, PCNET_ISAP=2, PCNET_PCI=3, PCNET_VLB=4, PCNET_PCI_II=5, LANCE_UNKNOWN=6};
                    290: 
                    291: /* Non-zero only if the current card is a PCI with BIOS-set IRQ. */
                    292: static unsigned char pci_irq_line = 0;
                    293: 
                    294: /* Non-zero if lance_probe1() needs to allocate low-memory bounce buffers.
                    295:    Assume yes until we know the memory size. */
                    296: static unsigned char lance_need_isa_bounce_buffers = 1;
                    297: 
                    298: static int lance_open(struct device *dev);
                    299: static int lance_open_fail(struct device *dev);
                    300: static void lance_init_ring(struct device *dev, int mode);
                    301: static int lance_start_xmit(struct sk_buff *skb, struct device *dev);
                    302: static int lance_rx(struct device *dev);
                    303: static void lance_interrupt(int irq, void *dev_id, struct pt_regs *regs);
                    304: static int lance_close(struct device *dev);
                    305: static struct enet_statistics *lance_get_stats(struct device *dev);
                    306: static void set_multicast_list(struct device *dev);
                    307: 
                    308: 
                    309: 
                    310: #ifdef MODULE
                    311: #define MAX_CARDS              8       /* Max number of interfaces (cards) per module */
                    312: #define IF_NAMELEN             8       /* # of chars for storing dev->name */
                    313: 
                    314: static int io[MAX_CARDS] = { 0, };
                    315: static int dma[MAX_CARDS] = { 0, };
                    316: static int irq[MAX_CARDS]  = { 0, };
                    317: 
                    318: static char ifnames[MAX_CARDS][IF_NAMELEN] = { {0, }, };
                    319: static struct device dev_lance[MAX_CARDS] =
                    320: {{
                    321:     0, /* device name is inserted by linux/drivers/net/net_init.c */
                    322:        0, 0, 0, 0,
                    323:        0, 0,
                    324:        0, 0, 0, NULL, NULL}};
                    325: 
                    326: int init_module(void)
                    327: {
                    328:        int this_dev, found = 0;
                    329: 
                    330:        for (this_dev = 0; this_dev < MAX_CARDS; this_dev++) {
                    331:                struct device *dev = &dev_lance[this_dev];
                    332:                dev->name = ifnames[this_dev];
                    333:                dev->irq = irq[this_dev];
                    334:                dev->base_addr = io[this_dev];
                    335:                dev->dma = dma[this_dev];
                    336:                dev->init = lance_probe;
                    337:                if (io[this_dev] == 0)  {
                    338:                        if (this_dev != 0) break; /* only complain once */
                    339:                        printk(KERN_NOTICE "lance.c: Module autoprobing not allowed. Append \"io=0xNNN\" value(s).\n");
                    340:                        return -EPERM;
                    341:                }
                    342:                if (register_netdev(dev) != 0) {
                    343:                        printk(KERN_WARNING "lance.c: No PCnet/LANCE card found (i/o = 0x%x).\n", io[this_dev]);
                    344:                        if (found != 0) return 0;       /* Got at least one. */
                    345:                        return -ENXIO;
                    346:                }
                    347:                found++;
                    348:        }
                    349: 
                    350:        return 0;
                    351: }
                    352: 
                    353: void
                    354: cleanup_module(void)
                    355: {
                    356:        int this_dev;
                    357: 
                    358:        for (this_dev = 0; this_dev < MAX_CARDS; this_dev++) {
                    359:                struct device *dev = &dev_lance[this_dev];
                    360:                if (dev->priv != NULL) {
                    361:                        kfree(dev->priv);
                    362:                        dev->priv = NULL;
                    363:                        free_dma(dev->dma);
                    364:                        release_region(dev->base_addr, LANCE_TOTAL_SIZE);
                    365:                        unregister_netdev(dev);
                    366:                }
                    367:        }
                    368: }
                    369: #endif /* MODULE */
                    370: 
                    371: /* Starting in v2.1.*, the LANCE/PCnet probe is now similar to the other
                    372:    board probes now that kmalloc() can allocate ISA DMA-able regions.
                    373:    This also allows the LANCE driver to be used as a module.
                    374:    */
                    375: int lance_probe(struct device *dev)
                    376: {
                    377:        int *port, result;
                    378: 
                    379:        if (high_memory <= 16*1024*1024)
                    380:                lance_need_isa_bounce_buffers = 0;
                    381: 
                    382: #if defined(CONFIG_PCI)
                    383:     if (pcibios_present()) {
                    384:            int pci_index;
                    385:                if (lance_debug > 1)
                    386:                        printk("lance.c: PCI bios is present, checking for devices...\n");
                    387:                for (pci_index = 0; pci_index < 8; pci_index++) {
                    388:                        unsigned char pci_bus, pci_device_fn;
                    389:                        unsigned int pci_ioaddr;
                    390:                        unsigned short pci_command;
                    391: 
                    392:                        if (pcibios_find_device (PCI_VENDOR_ID_AMD,
                    393:                                                                         PCI_DEVICE_ID_AMD_LANCE, pci_index,
                    394:                                                                         &pci_bus, &pci_device_fn) != 0)
                    395:                                break;
                    396:                        pcibios_read_config_byte(pci_bus, pci_device_fn,
                    397:                                                                         PCI_INTERRUPT_LINE, &pci_irq_line);
                    398:                        pcibios_read_config_dword(pci_bus, pci_device_fn,
                    399:                                                                          PCI_BASE_ADDRESS_0, &pci_ioaddr);
                    400:                        /* Remove I/O space marker in bit 0. */
                    401:                        pci_ioaddr &= ~3;
                    402:                        /* PCI Spec 2.1 states that it is either the driver or PCI card's
                    403:                         * responsibility to set the PCI Master Enable Bit if needed.
                    404:                         *      (From Mark Stockton <[email protected]>)
                    405:                         */
                    406:                        pcibios_read_config_word(pci_bus, pci_device_fn,
                    407:                                                                         PCI_COMMAND, &pci_command);
                    408:                        if ( ! (pci_command & PCI_COMMAND_MASTER)) {
                    409:                                printk("PCI Master Bit has not been set. Setting...\n");
                    410:                                pci_command |= PCI_COMMAND_MASTER;
                    411:                                pcibios_write_config_word(pci_bus, pci_device_fn,
                    412:                                                                                  PCI_COMMAND, pci_command);
                    413:                        }
                    414:                        printk("Found PCnet/PCI at %#x, irq %d.\n",
                    415:                                   pci_ioaddr, pci_irq_line);
                    416:                        result = lance_probe1(dev, pci_ioaddr, pci_irq_line, 0);
                    417:                        pci_irq_line = 0;
                    418:                        if (!result) return 0;
                    419:                }
                    420:        }
                    421: #endif  /* defined(CONFIG_PCI) */
                    422: 
                    423:        for (port = lance_portlist; *port; port++) {
                    424:                int ioaddr = *port;
                    425: 
                    426:                if ( check_region(ioaddr, LANCE_TOTAL_SIZE) == 0) {
                    427:                        /* Detect "normal" 0x57 0x57 and the NI6510EB 0x52 0x44
                    428:                           signatures w/ minimal I/O reads */
                    429:                        char offset15, offset14 = inb(ioaddr + 14);
                    430:                        
                    431:                        if ((offset14 == 0x52 || offset14 == 0x57) &&
                    432:                                ((offset15 = inb(ioaddr + 15)) == 0x57 || offset15 == 0x44)) {
                    433:                                result = lance_probe1(dev, ioaddr, 0, 0);
                    434:                                if ( !result ) return 0;
                    435:                        }
                    436:                }
                    437:        }
                    438:        return -ENODEV;
                    439: }
                    440: 
                    441: int lance_probe1(struct device *dev, int ioaddr, int irq, int options)
                    442: {
                    443:        struct lance_private *lp;
                    444:        short dma_channels;                                     /* Mark spuriously-busy DMA channels */
                    445:        int i, reset_val, lance_version;
                    446:        const char *chipname;
                    447:        /* Flags for specific chips or boards. */
                    448:        unsigned char hpJ2405A = 0;                     /* HP ISA adaptor */
                    449:        int hp_builtin = 0;                                     /* HP on-board ethernet. */
                    450:        static int did_version = 0;                     /* Already printed version info. */
                    451: 
                    452:        /* First we look for special cases.
                    453:           Check for HP's on-board ethernet by looking for 'HP' in the BIOS.
                    454:           There are two HP versions, check the BIOS for the configuration port.
                    455:           This method provided by L. Julliard, [email protected].
                    456:           */
                    457:        if (readw(0x000f0102) == 0x5048)  {
                    458:                static const short ioaddr_table[] = { 0x300, 0x320, 0x340, 0x360};
                    459:                int hp_port = (readl(0x000f00f1) & 1)  ? 0x499 : 0x99;
                    460:                /* We can have boards other than the built-in!  Verify this is on-board. */
                    461:                if ((inb(hp_port) & 0xc0) == 0x80
                    462:                        && ioaddr_table[inb(hp_port) & 3] == ioaddr)
                    463:                        hp_builtin = hp_port;
                    464:        }
                    465:        /* We also recognize the HP Vectra on-board here, but check below. */
                    466:        hpJ2405A = (inb(ioaddr) == 0x08 && inb(ioaddr+1) == 0x00
                    467:                                && inb(ioaddr+2) == 0x09);
                    468: 
                    469:        /* Reset the LANCE.      */
                    470:        reset_val = inw(ioaddr+LANCE_RESET); /* Reset the LANCE */
                    471: 
                    472:        /* The Un-Reset needed is only needed for the real NE2100, and will
                    473:           confuse the HP board. */
                    474:        if (!hpJ2405A)
                    475:                outw(reset_val, ioaddr+LANCE_RESET);
                    476: 
                    477:        outw(0x0000, ioaddr+LANCE_ADDR); /* Switch to window 0 */
                    478:        if (inw(ioaddr+LANCE_DATA) != 0x0004)
                    479:                return -ENODEV;
                    480: 
                    481:        /* Get the version of the chip. */
                    482:        outw(88, ioaddr+LANCE_ADDR);
                    483:        if (inw(ioaddr+LANCE_ADDR) != 88) {
                    484:                lance_version = 0;
                    485:        } else {                                                        /* Good, it's a newer chip. */
                    486:                int chip_version = inw(ioaddr+LANCE_DATA);
                    487:                outw(89, ioaddr+LANCE_ADDR);
                    488:                chip_version |= inw(ioaddr+LANCE_DATA) << 16;
                    489:                if (lance_debug > 2)
                    490:                        printk("  LANCE chip version is %#x.\n", chip_version);
                    491:                if ((chip_version & 0xfff) != 0x003)
                    492:                        return -ENODEV;
                    493:                chip_version = (chip_version >> 12) & 0xffff;
                    494:                for (lance_version = 1; chip_table[lance_version].id_number; lance_version++) {
                    495:                        if (chip_table[lance_version].id_number == chip_version)
                    496:                                break;
                    497:                }
                    498:        }
                    499: 
                    500:        /* We can't use init_etherdev() to allocate dev->priv because it must
                    501:           a ISA DMA-able region. */
                    502:        dev = init_etherdev(dev, 0);
                    503:        dev->open = lance_open_fail;
                    504:        chipname = chip_table[lance_version].name;
                    505:        printk("%s: %s at %#3x,", dev->name, chipname, ioaddr);
                    506: 
                    507:        /* There is a 16 byte station address PROM at the base address.
                    508:           The first six bytes are the station address. */
                    509:        for (i = 0; i < 6; i++)
                    510:                printk(" %2.2x", dev->dev_addr[i] = inb(ioaddr + i));
                    511: 
                    512:        dev->base_addr = ioaddr;
                    513:        request_region(ioaddr, LANCE_TOTAL_SIZE, chip_table[lance_version].name);
                    514: 
                    515:        /* Make certain the data structures used by the LANCE are aligned and DMAble. */
                    516:                
                    517:        lp = (struct lance_private *)(((unsigned long)kmalloc(sizeof(*lp)+7,
                    518:                                                                                   GFP_DMA | GFP_KERNEL)+7) & ~7);
                    519:        if (lance_debug > 6) printk(" (#0x%05lx)", (unsigned long)lp);
                    520:        memset(lp, 0, sizeof(*lp));
                    521:        dev->priv = lp;
                    522:        lp->name = chipname;
                    523:        lp->rx_buffs = (unsigned long)kmalloc(PKT_BUF_SZ*RX_RING_SIZE,
                    524:                                                                                  GFP_DMA | GFP_KERNEL);
                    525:        if (lance_need_isa_bounce_buffers)
                    526:                lp->tx_bounce_buffs = kmalloc(PKT_BUF_SZ*TX_RING_SIZE,
                    527:                                                                          GFP_DMA | GFP_KERNEL);
                    528:        else
                    529:                lp->tx_bounce_buffs = NULL;
                    530: 
                    531:        lp->chip_version = lance_version;
                    532: 
                    533:        lp->init_block.mode = 0x0003;           /* Disable Rx and Tx. */
                    534:        for (i = 0; i < 6; i++)
                    535:                lp->init_block.phys_addr[i] = dev->dev_addr[i];
                    536:        lp->init_block.filter[0] = 0x00000000;
                    537:        lp->init_block.filter[1] = 0x00000000;
                    538:        lp->init_block.rx_ring = ((u32)virt_to_bus(lp->rx_ring) & 0xffffff) | RX_RING_LEN_BITS;
                    539:        lp->init_block.tx_ring = ((u32)virt_to_bus(lp->tx_ring) & 0xffffff) | TX_RING_LEN_BITS;
                    540: 
                    541:        outw(0x0001, ioaddr+LANCE_ADDR);
                    542:        inw(ioaddr+LANCE_ADDR);
                    543:        outw((short) (u32) virt_to_bus(&lp->init_block), ioaddr+LANCE_DATA);
                    544:        outw(0x0002, ioaddr+LANCE_ADDR);
                    545:        inw(ioaddr+LANCE_ADDR);
                    546:        outw(((u32)virt_to_bus(&lp->init_block)) >> 16, ioaddr+LANCE_DATA);
                    547:        outw(0x0000, ioaddr+LANCE_ADDR);
                    548:        inw(ioaddr+LANCE_ADDR);
                    549: 
                    550:        if (irq) {                                      /* Set iff PCI card. */
                    551:                dev->dma = 4;                   /* Native bus-master, no DMA channel needed. */
                    552:                dev->irq = irq;
                    553:        } else if (hp_builtin) {
                    554:                static const char dma_tbl[4] = {3, 5, 6, 0};
                    555:                static const char irq_tbl[4] = {3, 4, 5, 9};
                    556:                unsigned char port_val = inb(hp_builtin);
                    557:                dev->dma = dma_tbl[(port_val >> 4) & 3];
                    558:                dev->irq = irq_tbl[(port_val >> 2) & 3];
                    559:                printk(" HP Vectra IRQ %d DMA %d.\n", dev->irq, dev->dma);
                    560:        } else if (hpJ2405A) {
                    561:                static const char dma_tbl[4] = {3, 5, 6, 7};
                    562:                static const char irq_tbl[8] = {3, 4, 5, 9, 10, 11, 12, 15};
                    563:                short reset_val = inw(ioaddr+LANCE_RESET);
                    564:                dev->dma = dma_tbl[(reset_val >> 2) & 3];
                    565:                dev->irq = irq_tbl[(reset_val >> 4) & 7];
                    566:                printk(" HP J2405A IRQ %d DMA %d.\n", dev->irq, dev->dma);
                    567:        } else if (lance_version == PCNET_ISAP) {               /* The plug-n-play version. */
                    568:                short bus_info;
                    569:                outw(8, ioaddr+LANCE_ADDR);
                    570:                bus_info = inw(ioaddr+LANCE_BUS_IF);
                    571:                dev->dma = bus_info & 0x07;
                    572:                dev->irq = (bus_info >> 4) & 0x0F;
                    573:        } else {
                    574:                /* The DMA channel may be passed in PARAM1. */
                    575:                if (dev->mem_start & 0x07)
                    576:                        dev->dma = dev->mem_start & 0x07;
                    577:        }
                    578: 
                    579:        if (dev->dma == 0) {
                    580:                /* Read the DMA channel status register, so that we can avoid
                    581:                   stuck DMA channels in the DMA detection below. */
                    582:                dma_channels = ((inb(DMA1_STAT_REG) >> 4) & 0x0f) |
                    583:                        (inb(DMA2_STAT_REG) & 0xf0);
                    584:        }
                    585:        if (dev->irq >= 2)
                    586:                printk(" assigned IRQ %d", dev->irq);
                    587:        else if (lance_version != 0)  { /* 7990 boards need DMA detection first. */
                    588:                /* To auto-IRQ we enable the initialization-done and DMA error
                    589:                   interrupts. For ISA boards we get a DMA error, but VLB and PCI
                    590:                   boards will work. */
                    591:                autoirq_setup(0);
                    592: 
                    593:                /* Trigger an initialization just for the interrupt. */
                    594:                outw(0x0041, ioaddr+LANCE_DATA);
                    595: 
                    596:                dev->irq = autoirq_report(2);
                    597:                if (dev->irq)
                    598:                        printk(", probed IRQ %d", dev->irq);
                    599:                else {
                    600:                        printk(", failed to detect IRQ line.\n");
                    601:                        return -ENODEV;
                    602:                }
                    603: 
                    604:                /* Check for the initialization done bit, 0x0100, which means
                    605:                   that we don't need a DMA channel. */
                    606:                if (inw(ioaddr+LANCE_DATA) & 0x0100)
                    607:                        dev->dma = 4;
                    608:        }
                    609: 
                    610:        if (dev->dma == 4) {
                    611:                printk(", no DMA needed.\n");
                    612:        } else if (dev->dma) {
                    613:                if (request_dma(dev->dma, chipname)) {
                    614:                        printk("DMA %d allocation failed.\n", dev->dma);
                    615:                        return -ENODEV;
                    616:                } else
                    617:                        printk(", assigned DMA %d.\n", dev->dma);
                    618:        } else {                        /* OK, we have to auto-DMA. */
                    619:                for (i = 0; i < 4; i++) {
                    620:                        static const char dmas[] = { 5, 6, 7, 3 };
                    621:                        int dma = dmas[i];
                    622:                        int boguscnt;
                    623: 
                    624:                        /* Don't enable a permanently busy DMA channel, or the machine
                    625:                           will hang. */
                    626:                        if (test_bit(dma, &dma_channels))
                    627:                                continue;
                    628:                        outw(0x7f04, ioaddr+LANCE_DATA); /* Clear the memory error bits. */
                    629:                        if (request_dma(dma, chipname))
                    630:                                continue;
                    631:                        set_dma_mode(dma, DMA_MODE_CASCADE);
                    632:                        enable_dma(dma);
                    633: 
                    634:                        /* Trigger an initialization. */
                    635:                        outw(0x0001, ioaddr+LANCE_DATA);
                    636:                        for (boguscnt = 100; boguscnt > 0; --boguscnt)
                    637:                                if (inw(ioaddr+LANCE_DATA) & 0x0900)
                    638:                                        break;
                    639:                        if (inw(ioaddr+LANCE_DATA) & 0x0100) {
                    640:                                dev->dma = dma;
                    641:                                printk(", DMA %d.\n", dev->dma);
                    642:                                break;
                    643:                        } else {
                    644:                                disable_dma(dma);
                    645:                                free_dma(dma);
                    646:                        }
                    647:                }
                    648:                if (i == 4) {                   /* Failure: bail. */
                    649:                        printk("DMA detection failed.\n");
                    650:                        return -ENODEV;
                    651:                }
                    652:        }
                    653: 
                    654:        if (lance_version == 0 && dev->irq == 0) {
                    655:                /* We may auto-IRQ now that we have a DMA channel. */
                    656:                /* Trigger an initialization just for the interrupt. */
                    657:                autoirq_setup(0);
                    658:                outw(0x0041, ioaddr+LANCE_DATA);
                    659: 
                    660:                dev->irq = autoirq_report(4);
                    661:                if (dev->irq == 0) {
                    662:                        printk("  Failed to detect the 7990 IRQ line.\n");
                    663:                        return -ENODEV;
                    664:                }
                    665:                printk("  Auto-IRQ detected IRQ%d.\n", dev->irq);
                    666:        }
                    667: 
                    668:        if (chip_table[lp->chip_version].flags & LANCE_ENABLE_AUTOSELECT) {
                    669:                /* Turn on auto-select of media (10baseT or BNC) so that the user
                    670:                   can watch the LEDs even if the board isn't opened. */
                    671:                outw(0x0002, ioaddr+LANCE_ADDR);
                    672:                /* Don't touch 10base2 power bit. */
                    673:                outw(inw(ioaddr+LANCE_BUS_IF) | 0x0002, ioaddr+LANCE_BUS_IF);
                    674:        }
                    675: 
                    676:        if (lance_debug > 0  &&  did_version++ == 0)
1.1.1.2 ! root      677:                printk("%s", version);
1.1       root      678: 
                    679:        /* The LANCE-specific entries in the device structure. */
                    680:        dev->open = lance_open;
                    681:        dev->hard_start_xmit = lance_start_xmit;
                    682:        dev->stop = lance_close;
                    683:        dev->get_stats = lance_get_stats;
                    684:        dev->set_multicast_list = set_multicast_list;
                    685: 
                    686:        return 0;
                    687: }
                    688: 
                    689: static int
                    690: lance_open_fail(struct device *dev)
                    691: {
                    692:        return -ENODEV;
                    693: }
                    694: 
                    695: 
                    696: 
                    697: static int
                    698: lance_open(struct device *dev)
                    699: {
                    700:        struct lance_private *lp = (struct lance_private *)dev->priv;
                    701:        int ioaddr = dev->base_addr;
                    702:        int i;
                    703: 
                    704:        if (dev->irq == 0 ||
                    705:                request_irq(dev->irq, &lance_interrupt, 0, lp->name, dev)) {
                    706:                return -EAGAIN;
                    707:        }
                    708: 
                    709:        MOD_INC_USE_COUNT;
                    710: 
                    711:        /* We used to allocate DMA here, but that was silly.
                    712:           DMA lines can't be shared!  We now permanently allocate them. */
                    713: 
                    714:        /* Reset the LANCE */
                    715:        inw(ioaddr+LANCE_RESET);
                    716: 
                    717:        /* The DMA controller is used as a no-operation slave, "cascade mode". */
                    718:        if (dev->dma != 4) {
                    719:                enable_dma(dev->dma);
                    720:                set_dma_mode(dev->dma, DMA_MODE_CASCADE);
                    721:        }
                    722: 
                    723:        /* Un-Reset the LANCE, needed only for the NE2100. */
                    724:        if (chip_table[lp->chip_version].flags & LANCE_MUST_UNRESET)
                    725:                outw(0, ioaddr+LANCE_RESET);
                    726: 
                    727:        if (chip_table[lp->chip_version].flags & LANCE_ENABLE_AUTOSELECT) {
                    728:                /* This is 79C960-specific: Turn on auto-select of media (AUI, BNC). */
                    729:                outw(0x0002, ioaddr+LANCE_ADDR);
                    730:                /* Only touch autoselect bit. */
                    731:                outw(inw(ioaddr+LANCE_BUS_IF) | 0x0002, ioaddr+LANCE_BUS_IF);
                    732:        }
                    733: 
                    734:        if (lance_debug > 1)
                    735:                printk("%s: lance_open() irq %d dma %d tx/rx rings %#x/%#x init %#x.\n",
                    736:                           dev->name, dev->irq, dev->dma,
                    737:                           (u32) virt_to_bus(lp->tx_ring),
                    738:                           (u32) virt_to_bus(lp->rx_ring),
                    739:                           (u32) virt_to_bus(&lp->init_block));
                    740: 
                    741:        lance_init_ring(dev, GFP_KERNEL);
                    742:        /* Re-initialize the LANCE, and start it when done. */
                    743:        outw(0x0001, ioaddr+LANCE_ADDR);
                    744:        outw((short) (u32) virt_to_bus(&lp->init_block), ioaddr+LANCE_DATA);
                    745:        outw(0x0002, ioaddr+LANCE_ADDR);
                    746:        outw(((u32)virt_to_bus(&lp->init_block)) >> 16, ioaddr+LANCE_DATA);
                    747: 
                    748:        outw(0x0004, ioaddr+LANCE_ADDR);
                    749:        outw(0x0915, ioaddr+LANCE_DATA);
                    750: 
                    751:        outw(0x0000, ioaddr+LANCE_ADDR);
                    752:        outw(0x0001, ioaddr+LANCE_DATA);
                    753: 
                    754:        dev->tbusy = 0;
                    755:        dev->interrupt = 0;
                    756:        dev->start = 1;
                    757:        i = 0;
                    758:        while (i++ < 100)
                    759:                if (inw(ioaddr+LANCE_DATA) & 0x0100)
                    760:                        break;
                    761:        /* 
                    762:         * We used to clear the InitDone bit, 0x0100, here but Mark Stockton
                    763:         * reports that doing so triggers a bug in the '974.
                    764:         */
                    765:        outw(0x0042, ioaddr+LANCE_DATA);
                    766: 
                    767:        if (lance_debug > 2)
                    768:                printk("%s: LANCE open after %d ticks, init block %#x csr0 %4.4x.\n",
                    769:                           dev->name, i, (u32) virt_to_bus(&lp->init_block), inw(ioaddr+LANCE_DATA));
                    770: 
                    771:        return 0;                                       /* Always succeed */
                    772: }
                    773: 
                    774: /* The LANCE has been halted for one reason or another (busmaster memory
                    775:    arbitration error, Tx FIFO underflow, driver stopped it to reconfigure,
                    776:    etc.).  Modern LANCE variants always reload their ring-buffer
                    777:    configuration when restarted, so we must reinitialize our ring
                    778:    context before restarting.  As part of this reinitialization,
                    779:    find all packets still on the Tx ring and pretend that they had been
                    780:    sent (in effect, drop the packets on the floor) - the higher-level
                    781:    protocols will time out and retransmit.  It'd be better to shuffle
                    782:    these skbs to a temp list and then actually re-Tx them after
                    783:    restarting the chip, but I'm too lazy to do so right now.  [email protected]
                    784: */
                    785: 
                    786: static void 
                    787: lance_purge_tx_ring(struct device *dev)
                    788: {
                    789:        struct lance_private *lp = (struct lance_private *)dev->priv;
                    790:        int i;
                    791: 
                    792:        for (i = 0; i < TX_RING_SIZE; i++) {
                    793:                if (lp->tx_skbuff[i]) {
                    794:                        dev_kfree_skb(lp->tx_skbuff[i],FREE_WRITE);
                    795:                        lp->tx_skbuff[i] = NULL;
                    796:                }
                    797:        }
                    798: }
                    799: 
                    800: 
                    801: /* Initialize the LANCE Rx and Tx rings. */
                    802: static void
                    803: lance_init_ring(struct device *dev, int gfp)
                    804: {
                    805:        struct lance_private *lp = (struct lance_private *)dev->priv;
                    806:        int i;
                    807: 
                    808:        lp->lock = 0, lp->tx_full = 0;
                    809:        lp->cur_rx = lp->cur_tx = 0;
                    810:        lp->dirty_rx = lp->dirty_tx = 0;
                    811: 
                    812:        for (i = 0; i < RX_RING_SIZE; i++) {
                    813:                struct sk_buff *skb;
                    814:                void *rx_buff;
                    815: 
                    816:                skb = alloc_skb(PKT_BUF_SZ, GFP_DMA | gfp);
                    817:                lp->rx_skbuff[i] = skb;
                    818:                if (skb) {
                    819:                        skb->dev = dev;
                    820:                        rx_buff = skb->tail;
                    821:                } else
                    822:                        rx_buff = kmalloc(PKT_BUF_SZ, GFP_DMA | gfp);
                    823:                if (rx_buff == NULL)
                    824:                        lp->rx_ring[i].base = 0;
                    825:                else
                    826:                        lp->rx_ring[i].base = (u32)virt_to_bus(rx_buff) | 0x80000000;
                    827:                lp->rx_ring[i].buf_length = -PKT_BUF_SZ;
                    828:        }
                    829:        /* The Tx buffer address is filled in as needed, but we do need to clear
                    830:           the upper ownership bit. */
                    831:        for (i = 0; i < TX_RING_SIZE; i++) {
                    832:                lp->tx_skbuff[i] = 0;
                    833:                lp->tx_ring[i].base = 0;
                    834:        }
                    835: 
                    836:        lp->init_block.mode = 0x0000;
                    837:        for (i = 0; i < 6; i++)
                    838:                lp->init_block.phys_addr[i] = dev->dev_addr[i];
                    839:        lp->init_block.filter[0] = 0x00000000;
                    840:        lp->init_block.filter[1] = 0x00000000;
                    841:        lp->init_block.rx_ring = ((u32)virt_to_bus(lp->rx_ring) & 0xffffff) | RX_RING_LEN_BITS;
                    842:        lp->init_block.tx_ring = ((u32)virt_to_bus(lp->tx_ring) & 0xffffff) | TX_RING_LEN_BITS;
                    843: }
                    844: 
                    845: static void
                    846: lance_restart(struct device *dev, unsigned int csr0_bits, int must_reinit)
                    847: {
                    848:        struct lance_private *lp = (struct lance_private *)dev->priv;
                    849: 
                    850:        if (must_reinit ||
                    851:                (chip_table[lp->chip_version].flags & LANCE_MUST_REINIT_RING)) {
                    852:                lance_purge_tx_ring(dev);
                    853:                lance_init_ring(dev, GFP_ATOMIC);
                    854:        }
                    855:        outw(0x0000,    dev->base_addr + LANCE_ADDR);
                    856:        outw(csr0_bits, dev->base_addr + LANCE_DATA);
                    857: }
                    858: 
                    859: static int
                    860: lance_start_xmit(struct sk_buff *skb, struct device *dev)
                    861: {
                    862:        struct lance_private *lp = (struct lance_private *)dev->priv;
                    863:        int ioaddr = dev->base_addr;
                    864:        int entry;
                    865:        unsigned long flags;
                    866: 
                    867:        /* Transmitter timeout, serious problems. */
                    868:        if (dev->tbusy) {
                    869:                int tickssofar = jiffies - dev->trans_start;
                    870:                if (tickssofar < 20)
                    871:                        return 1;
                    872:                outw(0, ioaddr+LANCE_ADDR);
                    873:                printk("%s: transmit timed out, status %4.4x, resetting.\n",
                    874:                           dev->name, inw(ioaddr+LANCE_DATA));
                    875:                outw(0x0004, ioaddr+LANCE_DATA);
                    876:                lp->stats.tx_errors++;
                    877: #ifndef final_version
                    878:                {
                    879:                        int i;
                    880:                        printk(" Ring data dump: dirty_tx %d cur_tx %d%s cur_rx %d.",
                    881:                                   lp->dirty_tx, lp->cur_tx, lp->tx_full ? " (full)" : "",
                    882:                                   lp->cur_rx);
                    883:                        for (i = 0 ; i < RX_RING_SIZE; i++)
                    884:                                printk("%s %08x %04x %04x", i & 0x3 ? "" : "\n ",
                    885:                                           lp->rx_ring[i].base, -lp->rx_ring[i].buf_length,
                    886:                                           lp->rx_ring[i].msg_length);
                    887:                        for (i = 0 ; i < TX_RING_SIZE; i++)
                    888:                                printk("%s %08x %04x %04x", i & 0x3 ? "" : "\n ",
                    889:                                           lp->tx_ring[i].base, -lp->tx_ring[i].length,
                    890:                                           lp->tx_ring[i].misc);
                    891:                        printk("\n");
                    892:                }
                    893: #endif
                    894:                lance_restart(dev, 0x0043, 1);
                    895: 
                    896:                dev->tbusy=0;
                    897:                dev->trans_start = jiffies;
                    898: 
                    899:                return 0;
                    900:        }
                    901: 
                    902:        if (lance_debug > 3) {
                    903:                outw(0x0000, ioaddr+LANCE_ADDR);
                    904:                printk("%s: lance_start_xmit() called, csr0 %4.4x.\n", dev->name,
                    905:                           inw(ioaddr+LANCE_DATA));
                    906:                outw(0x0000, ioaddr+LANCE_DATA);
                    907:        }
                    908: 
                    909:        /* Block a timer-based transmit from overlapping.  This could better be
                    910:           done with atomic_swap(1, dev->tbusy), but set_bit() works as well. */
                    911:        if (set_bit(0, (void*)&dev->tbusy) != 0) {
                    912:                printk("%s: Transmitter access conflict.\n", dev->name);
                    913:                return 1;
                    914:        }
                    915: 
                    916:        if (set_bit(0, (void*)&lp->lock) != 0) {
                    917:                if (lance_debug > 0)
                    918:                        printk("%s: tx queue lock!.\n", dev->name);
                    919:                /* don't clear dev->tbusy flag. */
                    920:                return 1;
                    921:        }
                    922: 
                    923:        /* Fill in a Tx ring entry */
                    924: 
                    925:        /* Mask to ring buffer boundary. */
                    926:        entry = lp->cur_tx & TX_RING_MOD_MASK;
                    927: 
                    928:        /* Caution: the write order is important here, set the base address
                    929:           with the "ownership" bits last. */
                    930: 
                    931:        /* The old LANCE chips doesn't automatically pad buffers to min. size. */
                    932:        if (chip_table[lp->chip_version].flags & LANCE_MUST_PAD) {
                    933:                lp->tx_ring[entry].length =
                    934:                        -(ETH_ZLEN < skb->len ? skb->len : ETH_ZLEN);
                    935:        } else
                    936:                lp->tx_ring[entry].length = -skb->len;
                    937: 
                    938:        lp->tx_ring[entry].misc = 0x0000;
                    939: 
                    940:        /* If any part of this buffer is >16M we must copy it to a low-memory
                    941:           buffer. */
                    942:        if ((u32)virt_to_bus(skb->data) + skb->len > 0x01000000) {
                    943:                if (lance_debug > 5)
                    944:                        printk("%s: bouncing a high-memory packet (%#x).\n",
                    945:                                   dev->name, (u32)virt_to_bus(skb->data));
                    946:                memcpy(&lp->tx_bounce_buffs[entry], skb->data, skb->len);
                    947:                lp->tx_ring[entry].base =
                    948:                        ((u32)virt_to_bus((lp->tx_bounce_buffs + entry)) & 0xffffff) | 0x83000000;
                    949:                dev_kfree_skb (skb, FREE_WRITE);
                    950:        } else {
                    951:                lp->tx_skbuff[entry] = skb;
                    952:                lp->tx_ring[entry].base = ((u32)virt_to_bus(skb->data) & 0xffffff) | 0x83000000;
                    953:        }
                    954:        lp->cur_tx++;
                    955: 
                    956:        /* Trigger an immediate send poll. */
                    957:        outw(0x0000, ioaddr+LANCE_ADDR);
                    958:        outw(0x0048, ioaddr+LANCE_DATA);
                    959: 
                    960:        dev->trans_start = jiffies;
                    961: 
                    962:        save_flags(flags);
                    963:        cli();
                    964:        lp->lock = 0;
                    965:        if (lp->tx_ring[(entry+1) & TX_RING_MOD_MASK].base == 0)
                    966:                dev->tbusy=0;
                    967:        else
                    968:                lp->tx_full = 1;
                    969:        restore_flags(flags);
                    970: 
                    971:        return 0;
                    972: }
                    973: 
                    974: /* The LANCE interrupt handler. */
                    975: static void
                    976: lance_interrupt(int irq, void *dev_id, struct pt_regs * regs)
                    977: {
                    978:        struct device *dev = (struct device *)dev_id;
                    979:        struct lance_private *lp;
                    980:        int csr0, ioaddr, boguscnt=10;
                    981:        int must_restart;
                    982: 
                    983:        if (dev == NULL) {
                    984:                printk ("lance_interrupt(): irq %d for unknown device.\n", irq);
                    985:                return;
                    986:        }
                    987: 
                    988:        ioaddr = dev->base_addr;
                    989:        lp = (struct lance_private *)dev->priv;
                    990:        if (dev->interrupt)
                    991:                printk("%s: Re-entering the interrupt handler.\n", dev->name);
                    992: 
                    993:        dev->interrupt = 1;
                    994: 
                    995:        outw(0x00, dev->base_addr + LANCE_ADDR);
                    996:        while ((csr0 = inw(dev->base_addr + LANCE_DATA)) & 0x8600
                    997:                   && --boguscnt >= 0) {
                    998:                /* Acknowledge all of the current interrupt sources ASAP. */
                    999:                outw(csr0 & ~0x004f, dev->base_addr + LANCE_DATA);
                   1000: 
                   1001:                must_restart = 0;
                   1002: 
                   1003:                if (lance_debug > 5)
                   1004:                        printk("%s: interrupt  csr0=%#2.2x new csr=%#2.2x.\n",
                   1005:                                   dev->name, csr0, inw(dev->base_addr + LANCE_DATA));
                   1006: 
                   1007:                if (csr0 & 0x0400)                      /* Rx interrupt */
                   1008:                        lance_rx(dev);
                   1009: 
                   1010:                if (csr0 & 0x0200) {            /* Tx-done interrupt */
                   1011:                        int dirty_tx = lp->dirty_tx;
                   1012: 
                   1013:                        while (dirty_tx < lp->cur_tx) {
                   1014:                                int entry = dirty_tx & TX_RING_MOD_MASK;
                   1015:                                int status = lp->tx_ring[entry].base;
                   1016:                        
                   1017:                                if (status < 0)
                   1018:                                        break;                  /* It still hasn't been Txed */
                   1019: 
                   1020:                                lp->tx_ring[entry].base = 0;
                   1021: 
                   1022:                                if (status & 0x40000000) {
                   1023:                                        /* There was an major error, log it. */
                   1024:                                        int err_status = lp->tx_ring[entry].misc;
                   1025:                                        lp->stats.tx_errors++;
                   1026:                                        if (err_status & 0x0400) lp->stats.tx_aborted_errors++;
                   1027:                                        if (err_status & 0x0800) lp->stats.tx_carrier_errors++;
                   1028:                                        if (err_status & 0x1000) lp->stats.tx_window_errors++;
                   1029:                                        if (err_status & 0x4000) {
                   1030:                                                /* Ackk!  On FIFO errors the Tx unit is turned off! */
                   1031:                                                lp->stats.tx_fifo_errors++;
                   1032:                                                /* Remove this verbosity later! */
                   1033:                                                printk("%s: Tx FIFO error! Status %4.4x.\n",
                   1034:                                                           dev->name, csr0);
                   1035:                                                /* Restart the chip. */
                   1036:                                                must_restart = 1;
                   1037:                                        }
                   1038:                                } else {
                   1039:                                        if (status & 0x18000000)
                   1040:                                                lp->stats.collisions++;
                   1041:                                        lp->stats.tx_packets++;
                   1042:                                }
                   1043: 
                   1044:                                /* We must free the original skb if it's not a data-only copy
                   1045:                                   in the bounce buffer. */
                   1046:                                if (lp->tx_skbuff[entry]) {
                   1047:                                        dev_kfree_skb(lp->tx_skbuff[entry],FREE_WRITE);
                   1048:                                        lp->tx_skbuff[entry] = 0;
                   1049:                                }
                   1050:                                dirty_tx++;
                   1051:                        }
                   1052: 
                   1053: #ifndef final_version
                   1054:                        if (lp->cur_tx - dirty_tx >= TX_RING_SIZE) {
                   1055:                                printk("out-of-sync dirty pointer, %d vs. %d, full=%d.\n",
                   1056:                                           dirty_tx, lp->cur_tx, lp->tx_full);
                   1057:                                dirty_tx += TX_RING_SIZE;
                   1058:                        }
                   1059: #endif
                   1060: 
                   1061:                        if (lp->tx_full && dev->tbusy
                   1062:                                && dirty_tx > lp->cur_tx - TX_RING_SIZE + 2) {
                   1063:                                /* The ring is no longer full, clear tbusy. */
                   1064:                                lp->tx_full = 0;
                   1065:                                dev->tbusy = 0;
                   1066:                                mark_bh(NET_BH);
                   1067:                        }
                   1068: 
                   1069:                        lp->dirty_tx = dirty_tx;
                   1070:                }
                   1071: 
                   1072:                /* Log misc errors. */
                   1073:                if (csr0 & 0x4000) lp->stats.tx_errors++; /* Tx babble. */
                   1074:                if (csr0 & 0x1000) lp->stats.rx_errors++; /* Missed a Rx frame. */
                   1075:                if (csr0 & 0x0800) {
                   1076:                        printk("%s: Bus master arbitration failure, status %4.4x.\n",
                   1077:                                   dev->name, csr0);
                   1078:                        /* Restart the chip. */
                   1079:                        must_restart = 1;
                   1080:                }
                   1081: 
                   1082:                if (must_restart) {
                   1083:                        /* stop the chip to clear the error condition, then restart */
                   1084:                        outw(0x0000, dev->base_addr + LANCE_ADDR);
                   1085:                        outw(0x0004, dev->base_addr + LANCE_DATA);
                   1086:                        lance_restart(dev, 0x0002, 0);
                   1087:                }
                   1088:        }
                   1089: 
                   1090:        /* Clear any other interrupt, and set interrupt enable. */
                   1091:        outw(0x0000, dev->base_addr + LANCE_ADDR);
                   1092:        outw(0x7940, dev->base_addr + LANCE_DATA);
                   1093: 
                   1094:        if (lance_debug > 4)
                   1095:                printk("%s: exiting interrupt, csr%d=%#4.4x.\n",
                   1096:                           dev->name, inw(ioaddr + LANCE_ADDR),
                   1097:                           inw(dev->base_addr + LANCE_DATA));
                   1098: 
                   1099:        dev->interrupt = 0;
                   1100:        return;
                   1101: }
                   1102: 
                   1103: static int
                   1104: lance_rx(struct device *dev)
                   1105: {
                   1106:        struct lance_private *lp = (struct lance_private *)dev->priv;
                   1107:        int entry = lp->cur_rx & RX_RING_MOD_MASK;
                   1108:        int i;
                   1109:                
                   1110:        /* If we own the next entry, it's a new packet. Send it up. */
                   1111:        while (lp->rx_ring[entry].base >= 0) {
                   1112:                int status = lp->rx_ring[entry].base >> 24;
                   1113: 
                   1114:                if (status != 0x03) {                   /* There was an error. */
                   1115:                        /* There is a tricky error noted by John Murphy,
                   1116:                           <[email protected]> to Russ Nelson: Even with full-sized
                   1117:                           buffers it's possible for a jabber packet to use two
                   1118:                           buffers, with only the last correctly noting the error. */
                   1119:                        if (status & 0x01)      /* Only count a general error at the */
                   1120:                                lp->stats.rx_errors++; /* end of a packet.*/
                   1121:                        if (status & 0x20) lp->stats.rx_frame_errors++;
                   1122:                        if (status & 0x10) lp->stats.rx_over_errors++;
                   1123:                        if (status & 0x08) lp->stats.rx_crc_errors++;
                   1124:                        if (status & 0x04) lp->stats.rx_fifo_errors++;
                   1125:                        lp->rx_ring[entry].base &= 0x03ffffff;
                   1126:                }
                   1127:                else 
                   1128:                {
                   1129:                        /* Malloc up new buffer, compatible with net3. */
                   1130:                        short pkt_len = (lp->rx_ring[entry].msg_length & 0xfff)-4;
                   1131:                        struct sk_buff *skb;
                   1132:                        
                   1133:                        if(pkt_len<60)
                   1134:                        {
                   1135:                                printk("%s: Runt packet!\n",dev->name);
                   1136:                                lp->stats.rx_errors++;
                   1137:                        }
                   1138:                        else
                   1139:                        {
                   1140:                                skb = dev_alloc_skb(pkt_len+2);
                   1141:                                if (skb == NULL) 
                   1142:                                {
                   1143:                                        printk("%s: Memory squeeze, deferring packet.\n", dev->name);
                   1144:                                        for (i=0; i < RX_RING_SIZE; i++)
                   1145:                                                if (lp->rx_ring[(entry+i) & RX_RING_MOD_MASK].base < 0)
                   1146:                                                        break;
                   1147: 
                   1148:                                        if (i > RX_RING_SIZE -2) 
                   1149:                                        {
                   1150:                                                lp->stats.rx_dropped++;
                   1151:                                                lp->rx_ring[entry].base |= 0x80000000;
                   1152:                                                lp->cur_rx++;
                   1153:                                        }
                   1154:                                        break;
                   1155:                                }
                   1156:                                skb->dev = dev;
                   1157:                                skb_reserve(skb,2);     /* 16 byte align */
                   1158:                                skb_put(skb,pkt_len);   /* Make room */
                   1159:                                eth_copy_and_sum(skb,
                   1160:                                        (unsigned char *)bus_to_virt((lp->rx_ring[entry].base & 0x00ffffff)),
                   1161:                                        pkt_len,0);
                   1162:                                skb->protocol=eth_type_trans(skb,dev);
                   1163:                                netif_rx(skb);
                   1164:                                lp->stats.rx_packets++;
                   1165:                        }
                   1166:                }
                   1167:                /* The docs say that the buffer length isn't touched, but Andrew Boyd
                   1168:                   of QNX reports that some revs of the 79C965 clear it. */
                   1169:                lp->rx_ring[entry].buf_length = -PKT_BUF_SZ;
                   1170:                lp->rx_ring[entry].base |= 0x80000000;
                   1171:                entry = (++lp->cur_rx) & RX_RING_MOD_MASK;
                   1172:        }
                   1173: 
                   1174:        /* We should check that at least two ring entries are free.      If not,
                   1175:           we should free one and mark stats->rx_dropped++. */
                   1176: 
                   1177:        return 0;
                   1178: }
                   1179: 
                   1180: static int
                   1181: lance_close(struct device *dev)
                   1182: {
                   1183:        int ioaddr = dev->base_addr;
                   1184:        struct lance_private *lp = (struct lance_private *)dev->priv;
                   1185:        int i;
                   1186: 
                   1187:        dev->start = 0;
                   1188:        dev->tbusy = 1;
                   1189: 
                   1190:        if (chip_table[lp->chip_version].flags & LANCE_HAS_MISSED_FRAME) {
                   1191:                outw(112, ioaddr+LANCE_ADDR);
                   1192:                lp->stats.rx_missed_errors = inw(ioaddr+LANCE_DATA);
                   1193:        }
                   1194:        outw(0, ioaddr+LANCE_ADDR);
                   1195: 
                   1196:        if (lance_debug > 1)
                   1197:                printk("%s: Shutting down ethercard, status was %2.2x.\n",
                   1198:                           dev->name, inw(ioaddr+LANCE_DATA));
                   1199: 
                   1200:        /* We stop the LANCE here -- it occasionally polls
                   1201:           memory if we don't. */
                   1202:        outw(0x0004, ioaddr+LANCE_DATA);
                   1203: 
                   1204:        if (dev->dma != 4)
                   1205:                disable_dma(dev->dma);
                   1206: 
                   1207:        free_irq(dev->irq, dev);
                   1208: 
                   1209:        /* Free all the skbuffs in the Rx and Tx queues. */
                   1210:        for (i = 0; i < RX_RING_SIZE; i++) {
                   1211:                struct sk_buff *skb = lp->rx_skbuff[i];
                   1212:                lp->rx_skbuff[i] = 0;
                   1213:                lp->rx_ring[i].base = 0;                /* Not owned by LANCE chip. */
                   1214:                if (skb) {
                   1215:                        skb->free = 1;
                   1216:                        dev_kfree_skb(skb, FREE_WRITE);
                   1217:                }
                   1218:        }
                   1219:        for (i = 0; i < TX_RING_SIZE; i++) {
                   1220:                if (lp->tx_skbuff[i])
                   1221:                        dev_kfree_skb(lp->tx_skbuff[i], FREE_WRITE);
                   1222:                lp->tx_skbuff[i] = 0;
                   1223:        }
                   1224: 
                   1225:        MOD_DEC_USE_COUNT;
                   1226:        return 0;
                   1227: }
                   1228: 
                   1229: static struct enet_statistics *
                   1230: lance_get_stats(struct device *dev)
                   1231: {
                   1232:        struct lance_private *lp = (struct lance_private *)dev->priv;
                   1233:        short ioaddr = dev->base_addr;
                   1234:        short saved_addr;
                   1235:        unsigned long flags;
                   1236: 
                   1237:        if (chip_table[lp->chip_version].flags & LANCE_HAS_MISSED_FRAME) {
                   1238:                save_flags(flags);
                   1239:                cli();
                   1240:                saved_addr = inw(ioaddr+LANCE_ADDR);
                   1241:                outw(112, ioaddr+LANCE_ADDR);
                   1242:                lp->stats.rx_missed_errors = inw(ioaddr+LANCE_DATA);
                   1243:                outw(saved_addr, ioaddr+LANCE_ADDR);
                   1244:                restore_flags(flags);
                   1245:        }
                   1246: 
                   1247:        return &lp->stats;
                   1248: }
                   1249: 
                   1250: /* Set or clear the multicast filter for this adaptor.
                   1251:  */
                   1252: 
                   1253: static void set_multicast_list(struct device *dev)
                   1254: {
                   1255:        short ioaddr = dev->base_addr;
                   1256: 
                   1257:        outw(0, ioaddr+LANCE_ADDR);
                   1258:        outw(0x0004, ioaddr+LANCE_DATA); /* Temporarily stop the lance.  */
                   1259: 
                   1260:        if (dev->flags&IFF_PROMISC) {
                   1261:                /* Log any net taps. */
                   1262:                printk("%s: Promiscuous mode enabled.\n", dev->name);
                   1263:                outw(15, ioaddr+LANCE_ADDR);
                   1264:                outw(0x8000, ioaddr+LANCE_DATA); /* Set promiscuous mode */
                   1265:        } else {
                   1266:                short multicast_table[4];
                   1267:                int i;
                   1268:                int num_addrs=dev->mc_count;
                   1269:                if(dev->flags&IFF_ALLMULTI)
                   1270:                        num_addrs=1;
                   1271:                /* FIXIT: We don't use the multicast table, but rely on upper-layer filtering. */
                   1272:                memset(multicast_table, (num_addrs == 0) ? 0 : -1, sizeof(multicast_table));
                   1273:                for (i = 0; i < 4; i++) {
                   1274:                        outw(8 + i, ioaddr+LANCE_ADDR);
                   1275:                        outw(multicast_table[i], ioaddr+LANCE_DATA);
                   1276:                }
                   1277:                outw(15, ioaddr+LANCE_ADDR);
                   1278:                outw(0x0000, ioaddr+LANCE_DATA); /* Unset promiscuous mode */
                   1279:        }
                   1280: 
                   1281:        lance_restart(dev, 0x0142, 0); /*  Resume normal operation */
                   1282: 
                   1283: }
                   1284: 
                   1285: 
                   1286: /*
                   1287:  * Local variables:
                   1288:  *  compile-command: "gcc -DMODULE -D__KERNEL__ -I/usr/src/linux/net/inet -Wall -Wstrict-prototypes -O6 -m486 -c lance.c"
                   1289:  *  c-indent-level: 4
                   1290:  *  c-basic-offset: 4
                   1291:  *  tab-width: 4
                   1292:  * End:
                   1293:  */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.