Annotation of Gnu-Mach/linux/src/drivers/net/eepro.c, revision 1.1.1.1

1.1       root        1: /* eepro.c: Intel EtherExpress Pro/10 device driver for Linux. */
                      2: /*
                      3:        Written 1994-1998 by Bao C. Ha.
                      4: 
                      5:        Copyright (C) 1994-1998 by Bao C. Ha.
                      6: 
                      7:        This software may be used and distributed
                      8:        according to the terms of the GNU Public License,
                      9:        incorporated herein by reference.
                     10: 
                     11:        The author may be reached at [email protected] 
                     12:        or Hacom, 2477 Wrightsboro Rd., Augusta, GA 30904.
                     13: 
                     14:        Things remaining to do:
                     15:        Better record keeping of errors.
                     16:        Eliminate transmit interrupt to reduce overhead.
                     17:        Implement "concurrent processing". I won't be doing it!
                     18: 
                     19:        Bugs:
                     20: 
                     21:        If you have a problem of not detecting the 82595 during a
                     22:        reboot (warm reset), disable the FLASH memory should fix it.
                     23:        This is a compatibility hardware problem.
                     24: 
                     25:        Versions:
                     26: 
                     27:        0.10c   Some cosmetic changes. (9/28/98, BCH)
                     28: 
                     29:         0.10b  Should work now with (some) Pro/10+. At least for 
                     30:                me (and my two cards) it does. _No_ guarantee for 
                     31:                function with non-Pro/10+ cards! (don't have any)
                     32:                (RMC, 9/11/96)
                     33: 
                     34:        0.10    Added support for the Etherexpress Pro/10+.  The
                     35:                IRQ map was changed significantly from the old
                     36:                pro/10.  The new interrupt map was provided by
                     37:                Rainer M. Canavan ([email protected]).
                     38:                (BCH, 9/3/96)
                     39: 
                     40:        0.09    Fixed a race condition in the transmit algorithm,
                     41:                which causes crashes under heavy load with fast
                     42:                pentium computers.  The performance should also
                     43:                improve a bit.  The size of RX buffer, and hence
                     44:                TX buffer, can also be changed via lilo or insmod.
                     45:                (BCH, 7/31/96)
                     46: 
                     47:        0.08    Implement 32-bit I/O for the 82595TX and 82595FX
                     48:                based lan cards.  Disable full-duplex mode if TPE
                     49:                is not used.  (BCH, 4/8/96)
                     50: 
                     51:        0.07a   Fix a stat report which counts every packet as a
                     52:                heart-beat failure. (BCH, 6/3/95)
                     53: 
                     54:        0.07    Modified to support all other 82595-based lan cards.  
                     55:                The IRQ vector of the EtherExpress Pro will be set
                     56:                according to the value saved in the EEPROM.  For other
                     57:                cards, I will do autoirq_request() to grab the next
                     58:                available interrupt vector. (BCH, 3/17/95)
                     59: 
                     60:        0.06a,b Interim released.  Minor changes in the comments and
                     61:                print out format. (BCH, 3/9/95 and 3/14/95)
                     62: 
                     63:        0.06    First stable release that I am comfortable with. (BCH,
                     64:                3/2/95) 
                     65: 
                     66:        0.05    Complete testing of multicast. (BCH, 2/23/95)   
                     67: 
                     68:        0.04    Adding multicast support. (BCH, 2/14/95)        
                     69: 
                     70:        0.03    First widely alpha release for public testing. 
                     71:                (BCH, 2/14/95)  
                     72: 
                     73: */
                     74: 
                     75: static const char *version =
                     76:        "eepro.c: v0.10c 9/28/98 Bao C. Ha ([email protected])\n";
                     77: 
                     78: #include <linux/module.h>
                     79: 
                     80: /*
                     81:   Sources:
                     82: 
                     83:        This driver wouldn't have been written without the availability 
                     84:        of the Crynwr's Lan595 driver source code.  It helps me to 
                     85:        familiarize with the 82595 chipset while waiting for the Intel 
                     86:        documentation.  I also learned how to detect the 82595 using 
                     87:        the packet driver's technique.
                     88: 
                     89:        This driver is written by cutting and pasting the skeleton.c driver
                     90:        provided by Donald Becker.  I also borrowed the EEPROM routine from
                     91:        Donald Becker's 82586 driver.
                     92: 
                     93:        Datasheet for the Intel 82595 (including the TX and FX version). It 
                     94:        provides just enough info that the casual reader might think that it 
                     95:        documents the i82595.
                     96: 
                     97:        The User Manual for the 82595.  It provides a lot of the missing
                     98:        information.
                     99: 
                    100: */
                    101: 
                    102: #include <linux/kernel.h>
                    103: #include <linux/sched.h>
                    104: #include <linux/types.h>
                    105: #include <linux/fcntl.h>
                    106: #include <linux/interrupt.h>
                    107: #include <linux/ptrace.h>
                    108: #include <linux/ioport.h>
                    109: #include <linux/in.h>
                    110: #include <linux/malloc.h>
                    111: #include <linux/string.h>
                    112: #include <asm/system.h>
                    113: #include <asm/bitops.h>
                    114: #include <asm/io.h>
                    115: #include <asm/dma.h>
                    116: #include <linux/errno.h>
                    117: 
                    118: #include <linux/netdevice.h>
                    119: #include <linux/etherdevice.h>
                    120: #include <linux/skbuff.h>
                    121: 
                    122: /* First, a few definitions that the brave might change. */
                    123: 
                    124: /* A zero-terminated list of I/O addresses to be probed. */
                    125: static unsigned int eepro_portlist[] =
                    126:    { 0x300, 0x240, 0x280, 0x2C0, 0x200, 0x320, 0x340, 0x360, 0};
                    127: 
                    128: /* use 0 for production, 1 for verification, >2 for debug */
                    129: 
                    130: #ifndef NET_DEBUG
                    131: #define NET_DEBUG 1
                    132: #endif
                    133: 
                    134: static unsigned int net_debug = NET_DEBUG;
                    135: 
                    136: /* The number of low I/O ports used by the ethercard. */
                    137: 
                    138: #define EEPRO_IO_EXTENT        16
                    139: 
                    140: /* Different 82595 chips */
                    141: 
                    142: #define        LAN595          0
                    143: #define        LAN595TX        1
                    144: #define        LAN595FX        2
                    145: 
                    146: /* Information that need to be kept for each board. */
                    147: struct eepro_local {
                    148:        struct enet_statistics stats;
                    149:        unsigned rx_start;
                    150:        unsigned tx_start; /* start of the transmit chain */
                    151:        int tx_last;  /* pointer to last packet in the transmit chain */
                    152:        unsigned tx_end;   /* end of the transmit chain (plus 1) */
                    153:        int eepro;      /* 1 for the EtherExpress Pro/10,
                    154:                           2 for the EtherExpress Pro/10+,
                    155:                           0 for other 82595-based lan cards. */
                    156:        int version;    /* a flag to indicate if this is a TX or FX
                    157:                                   version of the 82595 chip. */
                    158:        int stepping;
                    159: };
                    160: 
                    161: /* The station (ethernet) address prefix, used for IDing the board. */
                    162: 
                    163: #define SA_ADDR0 0x00  /* Etherexpress Pro/10 */
                    164: #define SA_ADDR1 0xaa
                    165: #define SA_ADDR2 0x00
                    166: 
                    167: #define SA2_ADDR0 0x00 /* Etherexpress Pro/10+ */
                    168: #define SA2_ADDR1 0xa0
                    169: #define SA2_ADDR2 0xc9
                    170: 
                    171: #define SA3_ADDR0 0x00 /* more Etherexpress Pro/10+ */
                    172: #define SA3_ADDR1 0xaa
                    173: #define SA3_ADDR2 0x00
                    174: #define SA3_ADDR3 0xc9
                    175: 
                    176: /* Index to functions, as function prototypes. */
                    177: 
                    178: extern int eepro_probe(struct device *dev);    
                    179: 
                    180: static int     eepro_probe1(struct device *dev, short ioaddr);
                    181: static int     eepro_open(struct device *dev);
                    182: static int     eepro_send_packet(struct sk_buff *skb, struct device *dev);
                    183: static void    eepro_interrupt(int irq, void *dev_id, struct pt_regs *regs);
                    184: static void    eepro_rx(struct device *dev);
                    185: static void    eepro_transmit_interrupt(struct device *dev);
                    186: static int     eepro_close(struct device *dev);
                    187: static struct enet_statistics *eepro_get_stats(struct device *dev);
                    188: static void set_multicast_list(struct device *dev);
                    189: 
                    190: static int read_eeprom(int ioaddr, int location);
                    191: static void hardware_send_packet(struct device *dev, void *buf, short length);
                    192: static int     eepro_grab_irq(struct device *dev);
                    193: 
                    194: /*
                    195:                        Details of the i82595.
                    196: 
                    197: You will need either the datasheet or the user manual to understand what
                    198: is going on here.  The 82595 is very different from the 82586, 82593.
                    199: 
                    200: The receive algorithm in eepro_rx() is just an implementation of the
                    201: RCV ring structure that the Intel 82595 imposes at the hardware level.
                    202: The receive buffer is set at 24K, and the transmit buffer is 8K.  I
                    203: am assuming that the total buffer memory is 32K, which is true for the
                    204: Intel EtherExpress Pro/10.  If it is less than that on a generic card,
                    205: the driver will be broken.
                    206: 
                    207: The transmit algorithm in the hardware_send_packet() is similar to the
                    208: one in the eepro_rx().  The transmit buffer is a ring linked list.
                    209: I just queue the next available packet to the end of the list.  In my
                    210: system, the 82595 is so fast that the list seems to always contain a
                    211: single packet.  In other systems with faster computers and more congested
                    212: network traffics, the ring linked list should improve performance by
                    213: allowing up to 8K worth of packets to be queued.
                    214: 
                    215: The sizes of the receive and transmit buffers can now be changed via lilo 
                    216: or insmod.  Lilo uses the appended line "ether=io,irq,debug,rx-buffer,eth0"
                    217: where rx-buffer is in KB unit.  Modules uses the parameter mem which is
                    218: also in KB unit, for example "insmod io=io-address irq=0 mem=rx-buffer."  
                    219: The receive buffer has to be more than 3K or less than 29K.  Otherwise,
                    220: it is reset to the default of 24K, and, hence, 8K for the trasnmit
                    221: buffer (transmit-buffer = 32K - receive-buffer).
                    222: 
                    223: */
                    224: 
                    225: #define        RAM_SIZE        0x8000
                    226: #define        RCV_HEADER      8
                    227: #define RCV_RAM         0x6000  /* 24KB default for RCV buffer */
                    228: #define RCV_LOWER_LIMIT 0x00    /* 0x0000 */
                    229: 
                    230: /* #define RCV_UPPER_LIMIT ((RCV_RAM - 2) >> 8) */    /* 0x5ffe */
                    231: #define RCV_UPPER_LIMIT (((rcv_ram) - 2) >> 8)   
                    232: 
                    233: /* #define XMT_RAM         (RAM_SIZE - RCV_RAM) */    /* 8KB for XMT buffer */
                    234: #define XMT_RAM         (RAM_SIZE - (rcv_ram))    /* 8KB for XMT buffer */
                    235: 
                    236: /* #define XMT_LOWER_LIMIT (RCV_RAM >> 8) */  /* 0x6000 */
                    237: #define XMT_LOWER_LIMIT ((rcv_ram) >> 8) 
                    238: #define XMT_UPPER_LIMIT ((RAM_SIZE - 2) >> 8)   /* 0x7ffe */
                    239: #define        XMT_HEADER      8
                    240: 
                    241: #define        RCV_DONE        0x0008
                    242: #define        RX_OK           0x2000
                    243: #define        RX_ERROR        0x0d81
                    244: 
                    245: #define        TX_DONE_BIT     0x0080
                    246: #define        CHAIN_BIT       0x8000
                    247: #define        XMT_STATUS      0x02
                    248: #define        XMT_CHAIN       0x04
                    249: #define        XMT_COUNT       0x06
                    250: 
                    251: #define        BANK0_SELECT    0x00            
                    252: #define        BANK1_SELECT    0x40            
                    253: #define        BANK2_SELECT    0x80            
                    254: 
                    255: /* Bank 0 registers */
                    256: 
                    257: #define        COMMAND_REG     0x00    /* Register 0 */
                    258: #define        MC_SETUP        0x03
                    259: #define        XMT_CMD         0x04
                    260: #define        DIAGNOSE_CMD    0x07
                    261: #define        RCV_ENABLE_CMD  0x08
                    262: #define        RCV_DISABLE_CMD 0x0a
                    263: #define        STOP_RCV_CMD    0x0b
                    264: #define        RESET_CMD       0x0e
                    265: #define        POWER_DOWN_CMD  0x18
                    266: #define        RESUME_XMT_CMD  0x1c
                    267: #define        SEL_RESET_CMD   0x1e
                    268: #define        STATUS_REG      0x01    /* Register 1 */
                    269: #define        RX_INT          0x02
                    270: #define        TX_INT          0x04
                    271: #define        EXEC_STATUS     0x30
                    272: #define        ID_REG          0x02    /* Register 2   */
                    273: #define        R_ROBIN_BITS    0xc0    /* round robin counter */
                    274: #define        ID_REG_MASK     0x2c
                    275: #define        ID_REG_SIG      0x24
                    276: #define        AUTO_ENABLE     0x10
                    277: #define        INT_MASK_REG    0x03    /* Register 3   */
                    278: #define        RX_STOP_MASK    0x01
                    279: #define        RX_MASK         0x02
                    280: #define        TX_MASK         0x04
                    281: #define        EXEC_MASK       0x08
                    282: #define        ALL_MASK        0x0f
                    283: #define        IO_32_BIT       0x10
                    284: #define        RCV_BAR         0x04    /* The following are word (16-bit) registers */
                    285: #define        RCV_STOP        0x06
                    286: #define        XMT_BAR         0x0a
                    287: #define        HOST_ADDRESS_REG        0x0c
                    288: #define        IO_PORT         0x0e
                    289: #define        IO_PORT_32_BIT  0x0c
                    290: 
                    291: /* Bank 1 registers */
                    292: 
                    293: #define        REG1    0x01
                    294: #define        WORD_WIDTH      0x02
                    295: #define        INT_ENABLE      0x80
                    296: #define INT_NO_REG     0x02
                    297: #define        RCV_LOWER_LIMIT_REG     0x08
                    298: #define        RCV_UPPER_LIMIT_REG     0x09
                    299: #define        XMT_LOWER_LIMIT_REG     0x0a
                    300: #define        XMT_UPPER_LIMIT_REG     0x0b
                    301: 
                    302: /* Bank 2 registers */
                    303: 
                    304: #define        XMT_Chain_Int   0x20    /* Interrupt at the end of the transmit chain */
                    305: #define        XMT_Chain_ErrStop       0x40 /* Interrupt at the end of the chain even if there are errors */
                    306: #define        RCV_Discard_BadFrame    0x80 /* Throw bad frames away, and continue to receive others */
                    307: #define        REG2            0x02
                    308: #define        PRMSC_Mode      0x01
                    309: #define        Multi_IA        0x20
                    310: #define        REG3            0x03
                    311: #define        TPE_BIT         0x04
                    312: #define        BNC_BIT         0x20
                    313: #define        REG13           0x0d
                    314: #define        FDX             0x00
                    315: #define        A_N_ENABLE      0x02
                    316: 
                    317: #define        I_ADD_REG0      0x04
                    318: #define        I_ADD_REG1      0x05
                    319: #define        I_ADD_REG2      0x06
                    320: #define        I_ADD_REG3      0x07
                    321: #define        I_ADD_REG4      0x08
                    322: #define        I_ADD_REG5      0x09
                    323: 
                    324: #define EEPROM_REG 0x0a
                    325: #define EESK 0x01
                    326: #define EECS 0x02
                    327: #define EEDI 0x04
                    328: #define EEDO 0x08
                    329: 
                    330: /* Check for a network adaptor of this type, and return '0' if one exists.
                    331: 
                    332:    If dev->base_addr == 0, probe all likely locations.
                    333:    If dev->base_addr == 1, always return failure.
                    334:    If dev->base_addr == 2, allocate space for the device and return success
                    335:    (detachable devices only).
                    336: 
                    337:    */
                    338: 
                    339: #ifdef HAVE_DEVLIST
                    340: 
                    341: /* Support for a alternate probe manager, which will eliminate the
                    342:    boilerplate below. */
                    343: 
                    344: struct netdev_entry netcard_drv =
                    345: {"eepro", eepro_probe1, EEPRO_IO_EXTENT, eepro_portlist};
                    346: 
                    347: #else
                    348: 
                    349: int 
                    350: eepro_probe(struct device *dev)
                    351: {
                    352:        int i;
                    353:        int base_addr = dev ? dev->base_addr : 0;
                    354: 
                    355:        if (base_addr > 0x1ff)          /* Check a single specified location. */
                    356:                return eepro_probe1(dev, base_addr);
                    357:        else if (base_addr != 0)        /* Don't probe at all. */
                    358:                return ENXIO;
                    359: 
                    360:        for (i = 0; eepro_portlist[i]; i++) {
                    361:                int ioaddr = eepro_portlist[i];
                    362:                if (check_region(ioaddr, EEPRO_IO_EXTENT))
                    363:                        continue;
                    364: 
                    365:                if (eepro_probe1(dev, ioaddr) == 0)
                    366:                        return 0;
                    367:        }
                    368: 
                    369:        return ENODEV;
                    370: }
                    371: #endif
                    372: 
                    373: /* This is the real probe routine.  Linux has a history of friendly device
                    374:    probes on the ISA bus.  A good device probes avoids doing writes, and
                    375:    verifies that the correct device exists and functions.  */
                    376: 
                    377: int 
                    378: eepro_probe1(struct device *dev, short ioaddr)
                    379: {
                    380:        unsigned short station_addr[6], id, counter;
                    381:        int i;
                    382:        int eepro;
                    383:        const char *ifmap[] = {"AUI", "10Base2", "10BaseT"};
                    384:        enum iftype { AUI=0, BNC=1, TPE=2 };
                    385: 
                    386:        /* Now, we are going to check for the signature of the
                    387:           ID_REG (register 2 of bank 0) */
                    388:        if (((id=inb(ioaddr + ID_REG)) & ID_REG_MASK) == ID_REG_SIG) {
                    389: 
                    390:                /* We seem to have the 82595 signature, let's
                    391:                   play with its counter (last 2 bits of
                    392:                   register 2 of bank 0) to be sure. */
                    393: 
                    394:                counter = (id & R_ROBIN_BITS);  
                    395:                if (((id=inb(ioaddr+ID_REG)) & R_ROBIN_BITS) == 
                    396:                        (counter + 0x40)) {
                    397: 
                    398:                        /* Yes, the 82595 has been found */
                    399: 
                    400:                        /* Now, get the ethernet hardware address from
                    401:                           the EEPROM */
                    402: 
                    403:                        station_addr[0] = read_eeprom(ioaddr, 2);
                    404:                        station_addr[1] = read_eeprom(ioaddr, 3);
                    405:                        station_addr[2] = read_eeprom(ioaddr, 4);
                    406: 
                    407:                        /* Check the station address for the manufacturer's code */
                    408: 
                    409:                        if ((station_addr[2] == 0x00aa) && (station_addr[1]!= 0x00c9)) {
                    410:                                eepro = 1;
                    411:                                printk("%s: Intel EtherExpress Pro/10 ISA at %#x,", 
                    412:                                        dev->name, ioaddr);
                    413:                        } else
                    414:                        if ( (station_addr[2] == 0x00a0)
                    415:                             || ((station_addr[2] == 0x00aa) && (station_addr[1] == 0x00c9) )) {
                    416:                                eepro = 2;
                    417:                                printk("%s: Intel EtherExpress Pro/10+ ISA\n at %#x,", 
                    418:                                        dev->name, ioaddr);
                    419:                        }
                    420:                        else {
                    421:                                eepro = 0;
                    422:                                printk("%s: Intel 82595-based lan card at %#x,", 
                    423:                                        dev->name, ioaddr);
                    424:                        }
                    425: 
                    426:                        /* Fill in the 'dev' fields. */
                    427:                        dev->base_addr = ioaddr;
                    428: 
                    429:                        for (i=0; i < 6; i++) {
                    430:                                dev->dev_addr[i] = ((unsigned char *) station_addr)[5-i];
                    431:                                printk("%c%02x", i ? ':' : ' ', dev->dev_addr[i]);
                    432:                        }
                    433: 
                    434:                        if ((dev->mem_end & 0x3f) < 3 ||        /* RX buffer must be more than 3K */
                    435:                                (dev->mem_end & 0x3f) > 29)     /* and less than 29K */
                    436:                                dev->mem_end = RCV_RAM;         /* or it will be set to 24K */
                    437:                        else dev->mem_end = 1024*dev->mem_end;  /* Maybe I should shift << 10 */
                    438: 
                    439:                        /* From now on, dev->mem_end contains the actual size of rx buffer */
                    440: 
                    441:                        if (net_debug > 3)
                    442:                                printk(", %dK RCV buffer", (int)(dev->mem_end)/1024);
                    443: 
                    444:                        outb(BANK2_SELECT, ioaddr); /* be CAREFUL, BANK 2 now */
                    445:                        id = inb(ioaddr + REG3);
                    446:                        if (id & TPE_BIT)
                    447:                                dev->if_port = TPE;
                    448:                        else dev->if_port = BNC;
                    449: 
                    450:                        if (net_debug>3) 
                    451:                                printk("id: %x\n", id);
                    452: 
                    453:                        if (dev->irq < 2 && eepro) {
                    454:                                i = read_eeprom(ioaddr, 1);
                    455:                                if (eepro == 1)
                    456:                                   switch (i & 0x07) {
                    457:                                        case 0: dev->irq = 9; break;
                    458:                                        case 1: dev->irq = 3; break;
                    459:                                        case 2: dev->irq = 5; break;
                    460:                                        case 3: dev->irq = 10; break;
                    461:                                        case 4: dev->irq = 11; break;
                    462:                                        default: /* should never get here !!!!! */
                    463:                                                printk(" illegal interrupt vector stored in EEPROM.\n");
                    464:                                                return ENODEV;
                    465:                                        }
                    466:                                else switch (i & 0x07) {
                    467:                                        case 0: dev->irq = 3; break;
                    468:                                        case 1: dev->irq = 4; break;
                    469:                                        case 2: dev->irq = 5; break;
                    470:                                        case 3: dev->irq = 7; break;
                    471:                                        case 4: dev->irq = 9; break;
                    472:                                        case 5: dev->irq = 10; break;
                    473:                                        case 6: dev->irq = 11; break;
                    474:                                        case 7: dev->irq = 12; break;
                    475:                                        }
                    476:                                }
                    477:                        else if (dev->irq == 2)
                    478:                                dev->irq = 9;
                    479: 
                    480:                        if (dev->irq > 2) {
                    481:                                printk(", IRQ %d, %s.\n", dev->irq,
                    482:                                                ifmap[dev->if_port]);
                    483:                                if (request_irq(dev->irq, &eepro_interrupt, 0, "eepro", NULL)) {
                    484:                                        printk("%s: unable to get IRQ %d.\n", dev->name, dev->irq);
                    485:                                        return -EAGAIN;
                    486:                                }
                    487:                        }
                    488:                        else printk(", %s.\n", ifmap[dev->if_port]);
                    489: 
                    490:                        if ((dev->mem_start & 0xf) > 0) /* I don't know if this is */
                    491:                                net_debug = dev->mem_start & 7; /* still useful or not */
                    492: 
                    493:                        if (net_debug > 3) {
                    494:                                i = read_eeprom(ioaddr, 5);
                    495:                                if (i & 0x2000) /* bit 13 of EEPROM word 5 */
                    496:                                        printk("%s: Concurrent Processing is enabled but not used!\n",
                    497:                                                dev->name);
                    498:                        }
                    499: 
                    500:                        if (net_debug) 
                    501:                                printk(version);
                    502: 
                    503:                        /* Grab the region so we can find another board if autoIRQ fails. */
                    504:                        request_region(ioaddr, EEPRO_IO_EXTENT, "eepro");
                    505: 
                    506:                        /* Initialize the device structure */
                    507:                        dev->priv = kmalloc(sizeof(struct eepro_local), GFP_KERNEL);
                    508:                        if (dev->priv == NULL)
                    509:                                return -ENOMEM;
                    510:                        memset(dev->priv, 0, sizeof(struct eepro_local));
                    511: 
                    512:                        dev->open = eepro_open;
                    513:                        dev->stop = eepro_close;
                    514:                        dev->hard_start_xmit = eepro_send_packet;
                    515:                        dev->get_stats = eepro_get_stats;
                    516:                        dev->set_multicast_list = &set_multicast_list;
                    517: 
                    518:                        /* Fill in the fields of the device structure with
                    519:                           ethernet generic values */
                    520: 
                    521:                        ether_setup(dev);
                    522: 
                    523:                        outb(RESET_CMD, ioaddr); /* RESET the 82595 */
                    524: 
                    525:                        return 0;
                    526:                        }
                    527:                else return ENODEV;
                    528:                }
                    529:        else if (net_debug > 3)
                    530:                printk ("EtherExpress Pro probed failed!\n");
                    531:        return ENODEV;
                    532: }
                    533: 
                    534: /* Open/initialize the board.  This is called (in the current kernel)
                    535:    sometime after booting when the 'ifconfig' program is run.
                    536: 
                    537:    This routine should set everything up anew at each open, even
                    538:    registers that "should" only need to be set once at boot, so that
                    539:    there is non-reboot way to recover if something goes wrong.
                    540:    */
                    541: 
                    542: static char irqrmap[] = {-1,-1,0,1,-1,2,-1,-1,-1,0,3,4,-1,-1,-1,-1};
                    543: static char irqrmap2[] = {-1,-1,4,0,1,2,-1,3,-1,4,5,6,7,-1,-1,-1};
                    544: 
                    545: static int     
                    546: eepro_grab_irq(struct device *dev)
                    547: {
                    548:        int irqlist[] = { 3, 4, 5, 7, 9, 10, 11, 12 };  
                    549:        int *irqp = irqlist, temp_reg, ioaddr = dev->base_addr;
                    550: 
                    551:        outb(BANK1_SELECT, ioaddr); /* be CAREFUL, BANK 1 now */
                    552: 
                    553:        /* Enable the interrupt line. */
                    554:        temp_reg = inb(ioaddr + REG1);
                    555:        outb(temp_reg | INT_ENABLE, ioaddr + REG1); 
                    556: 
                    557:        outb(BANK0_SELECT, ioaddr); /* be CAREFUL, BANK 0 now */
                    558: 
                    559:        /* clear all interrupts */
                    560:        outb(ALL_MASK, ioaddr + STATUS_REG); 
                    561: 
                    562:        /* Let EXEC event to interrupt */
                    563:        outb(ALL_MASK & ~(EXEC_MASK), ioaddr + INT_MASK_REG); 
                    564: 
                    565:        do {
                    566:                outb(BANK1_SELECT, ioaddr); /* be CAREFUL, BANK 1 now */
                    567:                temp_reg = inb(ioaddr + INT_NO_REG);
                    568:                outb((temp_reg & 0xf8) | irqrmap[*irqp], ioaddr + INT_NO_REG); 
                    569:                outb(BANK0_SELECT, ioaddr); /* Switch back to Bank 0 */
                    570:                if (request_irq (*irqp, NULL, 0, "bogus", NULL) != EBUSY) {
                    571:                        /* Twinkle the interrupt, and check if it's seen */
                    572:                        autoirq_setup(0);
                    573:                        outb(DIAGNOSE_CMD, ioaddr); /* RESET the 82595 */
                    574:                                
                    575:                        if (*irqp == autoirq_report(2) &&  /* It's a good IRQ line */
                    576:                                (request_irq(dev->irq = *irqp, &eepro_interrupt, 0, "eepro", NULL) == 0)) 
                    577:                                        break;
                    578:                        /* clear all interrupts */
                    579:                        outb(ALL_MASK, ioaddr + STATUS_REG); 
                    580:                }
                    581:        } while (*++irqp);
                    582: 
                    583:        outb(BANK1_SELECT, ioaddr); /* Switch back to Bank 1 */
                    584: 
                    585:        /* Disable the physical interrupt line. */
                    586:        temp_reg = inb(ioaddr + REG1);
                    587:        outb(temp_reg & 0x7f, ioaddr + REG1); 
                    588:        outb(BANK0_SELECT, ioaddr); /* Switch back to Bank 0 */
                    589: 
                    590:        /* Mask all the interrupts. */
                    591:        outb(ALL_MASK, ioaddr + INT_MASK_REG); 
                    592: 
                    593:        /* clear all interrupts */
                    594:        outb(ALL_MASK, ioaddr + STATUS_REG); 
                    595: 
                    596:        return dev->irq;
                    597: }
                    598: 
                    599: static int
                    600: eepro_open(struct device *dev)
                    601: {
                    602:        unsigned short temp_reg, old8, old9;
                    603:        int i, ioaddr = dev->base_addr, rcv_ram = dev->mem_end;
                    604:        struct eepro_local *lp = (struct eepro_local *)dev->priv;
                    605: 
                    606:        if (net_debug > 3)
                    607:                printk("eepro: entering eepro_open routine.\n");
                    608: 
                    609:        if ((dev->dev_addr[0] == SA_ADDR0 &&
                    610:                        dev->dev_addr[1] == SA_ADDR1 &&
                    611:                        dev->dev_addr[2] == SA_ADDR2)&&
                    612:                        (dev->dev_addr[3] != SA3_ADDR3))
                    613:                { 
                    614:                        lp->eepro = 1;
                    615:                        if (net_debug > 3) printk("p->eepro = 1;\n"); 
                    616:                }  /* Yes, an Intel EtherExpress Pro/10 */
                    617: 
                    618:        else if ((dev->dev_addr[0] == SA2_ADDR0 &&
                    619:                        dev->dev_addr[1] == SA2_ADDR1 &&
                    620:                        dev->dev_addr[2] == SA2_ADDR2)||
                    621:                (dev->dev_addr[0] == SA3_ADDR0 &&
                    622:                        dev->dev_addr[1] == SA3_ADDR1 &&
                    623:                        dev->dev_addr[2] == SA3_ADDR2 &&
                    624:                        dev->dev_addr[3] == SA3_ADDR3))
                    625:                {
                    626:                        lp->eepro = 2; /* Yes, an Intel EtherExpress Pro/10+ */
                    627:                        if (net_debug > 3) printk("p->eepro = 2;\n"); 
                    628:                }
                    629:        
                    630:        else lp->eepro = 0; /* No, it is a generic 82585 lan card */
                    631: 
                    632:        /* Get the interrupt vector for the 82595 */    
                    633:        if (dev->irq < 2 && eepro_grab_irq(dev) == 0) {
                    634:                printk("%s: unable to get IRQ %d.\n", dev->name, dev->irq);
                    635:                return -EAGAIN;
                    636:        }
                    637:                                
                    638:        if (irq2dev_map[dev->irq] != 0
                    639:                || (irq2dev_map[dev->irq] = dev) == 0)
                    640:                return -EAGAIN;
                    641: 
                    642:        /* Initialize the 82595. */
                    643:        outb(BANK2_SELECT, ioaddr); /* be CAREFUL, BANK 2 now */
                    644:        temp_reg = inb(ioaddr + EEPROM_REG);
                    645:        lp->stepping = temp_reg >> 5;   /* Get the stepping number of the 595 */
                    646:        
                    647:        if (net_debug > 3)
                    648:                printk("The stepping of the 82595 is %d\n", lp->stepping);
                    649:        if (temp_reg & 0x10) /* Check the TurnOff Enable bit */
                    650:                outb(temp_reg & 0xef, ioaddr + EEPROM_REG);
                    651:        for (i=0; i < 6; i++) 
                    652:                outb(dev->dev_addr[i] , ioaddr + I_ADD_REG0 + i); 
                    653:                        
                    654:        temp_reg = inb(ioaddr + REG1);    /* Setup Transmit Chaining */
                    655:        outb(temp_reg | XMT_Chain_Int | XMT_Chain_ErrStop /* and discard bad RCV frames */
                    656:                | RCV_Discard_BadFrame, ioaddr + REG1);  
                    657:        temp_reg = inb(ioaddr + REG2); /* Match broadcast */
                    658:        outb(temp_reg | 0x14, ioaddr + REG2);
                    659:        temp_reg = inb(ioaddr + REG3);
                    660:        outb(temp_reg & 0x3f, ioaddr + REG3); /* clear test mode */
                    661: 
                    662:        /* Set the receiving mode */
                    663:        outb(BANK1_SELECT, ioaddr); /* be CAREFUL, BANK 1 now */
                    664: 
                    665:        /* Set the interrupt vector */  
                    666:        temp_reg = inb(ioaddr + INT_NO_REG);
                    667:        
                    668:        if (lp->eepro == 2)
                    669:                outb((temp_reg & 0xf8) | irqrmap2[dev->irq], ioaddr + INT_NO_REG); 
                    670:        else outb((temp_reg & 0xf8) | irqrmap[dev->irq], ioaddr + INT_NO_REG); 
                    671:     
                    672:        temp_reg = inb(ioaddr + INT_NO_REG);
                    673:     
                    674:        if (lp->eepro == 2)
                    675:                        outb((temp_reg & 0xf0) | irqrmap2[dev->irq] | 0x08,ioaddr+INT_NO_REG);
                    676:        else outb((temp_reg & 0xf8) | irqrmap[dev->irq], ioaddr + INT_NO_REG);
                    677:     
                    678:        if (net_debug > 3)
                    679:                        printk("eepro_open: content of INT Reg is %x\n", temp_reg);
                    680:        
                    681:        
                    682:        /* Initialize the RCV and XMT upper and lower limits */
                    683:        outb(RCV_LOWER_LIMIT, ioaddr + RCV_LOWER_LIMIT_REG); 
                    684:        outb(RCV_UPPER_LIMIT, ioaddr + RCV_UPPER_LIMIT_REG); 
                    685:        outb(XMT_LOWER_LIMIT, ioaddr + XMT_LOWER_LIMIT_REG); 
                    686:        outb(XMT_UPPER_LIMIT, ioaddr + XMT_UPPER_LIMIT_REG); 
                    687: 
                    688:        /* Enable the interrupt line. */
                    689:        temp_reg = inb(ioaddr + REG1);
                    690:        outb(temp_reg | INT_ENABLE, ioaddr + REG1); 
                    691:        outb(BANK0_SELECT, ioaddr); /* Switch back to Bank 0 */
                    692:        
                    693:        /* Let RX and TX events to interrupt */
                    694:        outb(ALL_MASK & ~(RX_MASK | TX_MASK), ioaddr + INT_MASK_REG); 
                    695:        
                    696:        /* clear all interrupts */
                    697:        outb(ALL_MASK, ioaddr + STATUS_REG); 
                    698:        
                    699:        /* Initialize RCV */
                    700:        outw(RCV_LOWER_LIMIT << 8, ioaddr + RCV_BAR); 
                    701:        lp->rx_start = (RCV_LOWER_LIMIT << 8) ;
                    702:        outw((RCV_UPPER_LIMIT << 8) | 0xfe, ioaddr + RCV_STOP); 
                    703:        
                    704:        /* Initialize XMT */
                    705:        outw(XMT_LOWER_LIMIT << 8, ioaddr + XMT_BAR); 
                    706:        
                    707:        /* Check for the i82595TX and i82595FX */
                    708:        old8 = inb(ioaddr + 8);
                    709:        outb(~old8, ioaddr + 8);
                    710:        
                    711:        if ((temp_reg = inb(ioaddr + 8)) == old8) {
                    712:                if (net_debug > 3)
                    713:                        printk("i82595 detected!\n");
                    714:                lp->version = LAN595;
                    715:        }
                    716:        else {
                    717:                lp->version = LAN595TX;
                    718:                outb(old8, ioaddr + 8);
                    719:                old9 = inb(ioaddr + 9);
                    720:                outb(~old9, ioaddr + 9);
                    721:        
                    722:                if (((temp_reg = inb(ioaddr + 9)) == ( (~old9)&0xff) )) {
                    723:                        enum iftype { AUI=0, BNC=1, TPE=2 };
                    724:        
                    725:                        if (net_debug > 3) {
                    726:                                printk("temp_reg: %#x  ~old9: %#x\n",temp_reg, ~old9);
                    727:                                printk("i82595FX detected!\n");
                    728:                        }
                    729:        
                    730:                        lp->version = LAN595FX;
                    731:                        outb(old9, ioaddr + 9);
                    732:        
                    733:                        if (dev->if_port != TPE) {      /* Hopefully, this will fix the
                    734:                                                        problem of using Pentiums and
                    735:                                                        pro/10 w/ BNC. */
                    736:                                outb(BANK2_SELECT, ioaddr); /* be CAREFUL, BANK 2 now */
                    737:                                temp_reg = inb(ioaddr + REG13);
                    738:        
                    739:                                /* disable the full duplex mode since it is not
                    740:                                applicable with the 10Base2 cable. */
                    741:                                outb(temp_reg & ~(FDX | A_N_ENABLE), REG13);
                    742:                                outb(BANK0_SELECT, ioaddr); /* be CAREFUL, BANK 0 now */
                    743:                        }
                    744:                }
                    745:                else if (net_debug > 3) {
                    746:                        printk("temp_reg: %#x  ~old9: %#x\n",temp_reg,((~old9)&0xff));
                    747:                        printk("i82595TX detected!\n");
                    748:                }
                    749:        }
                    750:        
                    751:        outb(SEL_RESET_CMD, ioaddr);
                    752:        
                    753:        /* We are supposed to wait for 2 us after a SEL_RESET */
                    754:        SLOW_DOWN_IO;
                    755:        SLOW_DOWN_IO;   
                    756:        
                    757:        lp->tx_start = lp->tx_end = XMT_LOWER_LIMIT << 8; /* or = RCV_RAM */
                    758:        lp->tx_last = 0;  
                    759:        
                    760:        dev->tbusy = 0;
                    761:        dev->interrupt = 0;
                    762:        dev->start = 1;
                    763:        
                    764:        if (net_debug > 3)
                    765:                printk("eepro: exiting eepro_open routine.\n");
                    766:        
                    767:        outb(RCV_ENABLE_CMD, ioaddr);
                    768:        MOD_INC_USE_COUNT;
                    769:        
                    770:        return 0;
                    771: }
                    772: 
                    773: static int
                    774: eepro_send_packet(struct sk_buff *skb, struct device *dev)
                    775: {
                    776:        struct eepro_local *lp = (struct eepro_local *)dev->priv;
                    777:        int ioaddr = dev->base_addr;
                    778:        int rcv_ram = dev->mem_end;
                    779: 
                    780:        if (net_debug > 5)
                    781:                printk("eepro: entering eepro_send_packet routine.\n");
                    782:        
                    783:        if (dev->tbusy) {
                    784:                /* If we get here, some higher level has decided we are broken.
                    785:                   There should really be a "kick me" function call instead. */
                    786:        
                    787:                int tickssofar = jiffies - dev->trans_start;
                    788:        
                    789:                if (tickssofar < 40)
                    790:                        return 1;
                    791:        
                    792:                if (net_debug > 1)
                    793:                        printk("%s: transmit timed out, %s?\n", dev->name,
                    794:                                   "network cable problem");
                    795:        
                    796:                lp->stats.tx_errors++;
                    797:        
                    798:                /* Try to restart the adaptor. */
                    799:                outb(SEL_RESET_CMD, ioaddr); 
                    800:        
                    801:                /* We are supposed to wait for 2 us after a SEL_RESET */
                    802:                SLOW_DOWN_IO;
                    803:                SLOW_DOWN_IO;
                    804:        
                    805:                /* Do I also need to flush the transmit buffers here? YES? */
                    806:                lp->tx_start = lp->tx_end = rcv_ram; 
                    807:                lp->tx_last = 0;
                    808:        
                    809:                dev->tbusy=0;
                    810:                dev->trans_start = jiffies;
                    811:                outb(RCV_ENABLE_CMD, ioaddr);
                    812:        }
                    813:        
                    814:        /* If some higher layer thinks we've missed an tx-done interrupt
                    815:           we are passed NULL. Caution: dev_tint() handles the cli()/sti()
                    816:           itself. */
                    817:        
                    818:        if (skb == NULL) {
                    819:                dev_tint(dev);
                    820:                return 0;
                    821:        }
                    822:        
                    823:        /* Block a timer-based transmit from overlapping. */
                    824:        
                    825:        if (set_bit(0, (void*)&dev->tbusy) != 0)
                    826:                printk("%s: Transmitter access conflict.\n", dev->name);
                    827:        else {
                    828:                short length = ETH_ZLEN < skb->len ? skb->len : ETH_ZLEN;
                    829:                unsigned char *buf = skb->data;
                    830:                hardware_send_packet(dev, buf, length);
                    831:                dev->trans_start = jiffies;
                    832:        }
                    833:        
                    834:        dev_kfree_skb (skb, FREE_WRITE);
                    835:        
                    836:        /* You might need to clean up and record Tx statistics here. */
                    837:        /* lp->stats.tx_aborted_errors++; */
                    838:        
                    839:        if (net_debug > 5)
                    840:                printk("eepro: exiting eepro_send_packet routine.\n");
                    841:        
                    842:        return 0;
                    843: }
                    844: 
                    845: /*     The typical workload of the driver:
                    846:        Handle the network interface interrupts. */
                    847: 
                    848: static void
                    849: eepro_interrupt(int irq, void *dev_id, struct pt_regs * regs)
                    850: {
                    851:        struct device *dev = (struct device *)(irq2dev_map[irq]);
                    852:        int ioaddr, status, boguscount = 20;
                    853: 
                    854:        if (net_debug > 5)
                    855:                printk("eepro: entering eepro_interrupt routine.\n");
                    856:        
                    857:        if (dev == NULL) {
                    858:                printk ("eepro_interrupt(): irq %d for unknown device.\n", irq);
                    859:                return;
                    860:        }
                    861:        
                    862:        dev->interrupt = 1;
                    863:        
                    864:        ioaddr = dev->base_addr;
                    865:        
                    866:        do { 
                    867:                status = inb(ioaddr + STATUS_REG);
                    868:                
                    869:                if (status & RX_INT) {
                    870:                        if (net_debug > 4)
                    871:                                printk("eepro: packet received interrupt.\n");
                    872:                        /* Acknowledge the RX_INT */
                    873:                        outb(RX_INT, ioaddr + STATUS_REG); 
                    874:                        /* Get the received packets */
                    875:                        eepro_rx(dev);
                    876:                }
                    877:                else if (status & TX_INT) {
                    878:                        if (net_debug > 4)
                    879:                                printk("eepro: packet transmit interrupt.\n");
                    880:                        /* Acknowledge the TX_INT */
                    881:                        outb(TX_INT, ioaddr + STATUS_REG); 
                    882:                        /* Process the status of transmitted packets */
                    883:                        eepro_transmit_interrupt(dev);
                    884:                }
                    885:        
                    886:        } while ((boguscount-- > 0) && (status & 0x06));
                    887:        
                    888:        dev->interrupt = 0;
                    889:                
                    890:        if (net_debug > 5)
                    891:                printk("eepro: exiting eepro_interrupt routine.\n");
                    892:        
                    893:        return;
                    894: }
                    895: 
                    896: static int
                    897: eepro_close(struct device *dev)
                    898: {
                    899:        struct eepro_local *lp = (struct eepro_local *)dev->priv;
                    900:        int ioaddr = dev->base_addr;
                    901:        int rcv_ram = dev->mem_end;
                    902:        short temp_reg;
                    903: 
                    904:        dev->tbusy = 1;
                    905:        dev->start = 0;
                    906:        
                    907:        outb(BANK1_SELECT, ioaddr); /* Switch back to Bank 1 */
                    908:        
                    909:        /* Disable the physical interrupt line. */
                    910:        temp_reg = inb(ioaddr + REG1);
                    911:        outb(temp_reg & 0x7f, ioaddr + REG1); 
                    912:        outb(BANK0_SELECT, ioaddr); /* Switch back to Bank 0 */
                    913:        
                    914:        /* Flush the Tx and disable Rx. */
                    915:        outb(STOP_RCV_CMD, ioaddr); 
                    916:        
                    917:        lp->tx_start = lp->tx_end = rcv_ram ;
                    918:        lp->tx_last = 0;  
                    919:        
                    920:        /* Mask all the interrupts. */
                    921:        outb(ALL_MASK, ioaddr + INT_MASK_REG); 
                    922:        
                    923:        /* clear all interrupts */
                    924:        outb(ALL_MASK, ioaddr + STATUS_REG); 
                    925:        
                    926:        /* Reset the 82595 */
                    927:        outb(RESET_CMD, ioaddr); 
                    928:        
                    929:        /* release the interrupt */
                    930:        free_irq(dev->irq, NULL);
                    931:        irq2dev_map[dev->irq] = 0;
                    932:        
                    933:        /* Update the statistics here. What statistics? */
                    934:        /* We are supposed to wait for 200 us after a RESET */
                    935:        SLOW_DOWN_IO;
                    936:        SLOW_DOWN_IO; /* May not be enough? */
                    937:        MOD_DEC_USE_COUNT;
                    938:        
                    939:        return 0;
                    940: }
                    941: 
                    942: /* Get the current statistics. This may be called with the card open or
                    943:    closed. */
                    944: static struct enet_statistics *
                    945: eepro_get_stats(struct device *dev)
                    946: {
                    947:        struct eepro_local *lp = (struct eepro_local *)dev->priv;
                    948:        return &lp->stats;
                    949: }
                    950: 
                    951: /* Set or clear the multicast filter for this adaptor.
                    952:  */
                    953: 
                    954: static void
                    955: set_multicast_list(struct device *dev)
                    956: {
                    957:        struct eepro_local *lp = (struct eepro_local *)dev->priv;
                    958:        short ioaddr = dev->base_addr;
                    959:        unsigned short mode;
                    960:        struct dev_mc_list *dmi=dev->mc_list;
                    961:        
                    962:        if (dev->flags&(IFF_ALLMULTI|IFF_PROMISC) || dev->mc_count > 63) 
                    963:        {
                    964:                /*
                    965:                 *      We must make the kernel realise we had to move
                    966:                 *      into promisc mode or we start all out war on
                    967:                 *      the cable. If it was a promisc request the
                    968:                 *      flag is already set. If not we assert it.
                    969:                 */
                    970:                dev->flags|=IFF_PROMISC;                
                    971:                outb(BANK2_SELECT, ioaddr); /* be CAREFUL, BANK 2 now */
                    972:                mode = inb(ioaddr + REG2);
                    973:                outb(mode | PRMSC_Mode, ioaddr + REG2); 
                    974:                mode = inb(ioaddr + REG3);
                    975:                outb(mode, ioaddr + REG3); /* writing reg. 3 to complete the update */
                    976:                outb(BANK0_SELECT, ioaddr); /* Return to BANK 0 now */
                    977:                printk("%s: promiscuous mode enabled.\n", dev->name);
                    978:        } 
                    979:        
                    980:        else if (dev->mc_count==0 ) 
                    981:        {
                    982:                outb(BANK2_SELECT, ioaddr); /* be CAREFUL, BANK 2 now */
                    983:                mode = inb(ioaddr + REG2);
                    984:                outb(mode & 0xd6, ioaddr + REG2); /* Turn off Multi-IA and PRMSC_Mode bits */
                    985:                mode = inb(ioaddr + REG3);
                    986:                outb(mode, ioaddr + REG3); /* writing reg. 3 to complete the update */
                    987:                outb(BANK0_SELECT, ioaddr); /* Return to BANK 0 now */
                    988:        }
                    989:        
                    990:        else 
                    991:        {
                    992:                unsigned short status, *eaddrs;
                    993:                int i, boguscount = 0;
                    994:                
                    995:                /* Disable RX and TX interrupts.  Necessary to avoid
                    996:                   corruption of the HOST_ADDRESS_REG by interrupt
                    997:                   service routines. */
                    998:                outb(ALL_MASK, ioaddr + INT_MASK_REG);
                    999:                outb(BANK2_SELECT, ioaddr); /* be CAREFUL, BANK 2 now */
                   1000:                mode = inb(ioaddr + REG2);
                   1001:                outb(mode | Multi_IA, ioaddr + REG2);   
                   1002:                mode = inb(ioaddr + REG3);
                   1003:                outb(mode, ioaddr + REG3); /* writing reg. 3 to complete the update */
                   1004:                outb(BANK0_SELECT, ioaddr); /* Return to BANK 0 now */
                   1005:                outw(lp->tx_end, ioaddr + HOST_ADDRESS_REG);
                   1006:                outw(MC_SETUP, ioaddr + IO_PORT);
                   1007:                outw(0, ioaddr + IO_PORT);
                   1008:                outw(0, ioaddr + IO_PORT);
                   1009:                outw(6*(dev->mc_count + 1), ioaddr + IO_PORT);
                   1010:        
                   1011:                for (i = 0; i < dev->mc_count; i++) 
                   1012:                {
                   1013:                        eaddrs=(unsigned short *)dmi->dmi_addr;
                   1014:                        dmi=dmi->next;
                   1015:                        outw(*eaddrs++, ioaddr + IO_PORT);
                   1016:                        outw(*eaddrs++, ioaddr + IO_PORT);
                   1017:                        outw(*eaddrs++, ioaddr + IO_PORT);
                   1018:                }
                   1019:        
                   1020:                eaddrs = (unsigned short *) dev->dev_addr;
                   1021:                outw(eaddrs[0], ioaddr + IO_PORT);
                   1022:                outw(eaddrs[1], ioaddr + IO_PORT);
                   1023:                outw(eaddrs[2], ioaddr + IO_PORT);
                   1024:                outw(lp->tx_end, ioaddr + XMT_BAR);
                   1025:                outb(MC_SETUP, ioaddr);
                   1026:        
                   1027:                /* Update the transmit queue */
                   1028:                i = lp->tx_end + XMT_HEADER + 6*(dev->mc_count + 1);
                   1029:        
                   1030:                if (lp->tx_start != lp->tx_end) 
                   1031:                { 
                   1032:                        /* update the next address and the chain bit in the 
                   1033:                           last packet */
                   1034:                        outw(lp->tx_last + XMT_CHAIN, ioaddr + HOST_ADDRESS_REG);
                   1035:                        outw(i, ioaddr + IO_PORT);
                   1036:                        outw(lp->tx_last + XMT_COUNT, ioaddr + HOST_ADDRESS_REG);
                   1037:                        status = inw(ioaddr + IO_PORT);
                   1038:                        outw(status | CHAIN_BIT, ioaddr + IO_PORT);
                   1039:                        lp->tx_end = i ;
                   1040:                }
                   1041:                else {
                   1042:                        lp->tx_start = lp->tx_end = i ;
                   1043:                }
                   1044:        
                   1045:                /* Acknowledge that the MC setup is done */
                   1046:                do { /* We should be doing this in the eepro_interrupt()! */
                   1047:                        SLOW_DOWN_IO;
                   1048:                        SLOW_DOWN_IO;
                   1049:        
                   1050:                        if (inb(ioaddr + STATUS_REG) & 0x08) 
                   1051:                        {
                   1052:                                i = inb(ioaddr);
                   1053:                                outb(0x08, ioaddr + STATUS_REG);
                   1054:        
                   1055:                                if (i & 0x20) { /* command ABORTed */
                   1056:                                        printk("%s: multicast setup failed.\n", 
                   1057:                                                dev->name);
                   1058:                                        break;
                   1059:                                } else if ((i & 0x0f) == 0x03)  { /* MC-Done */
                   1060:                                        printk("%s: set Rx mode to %d addresses.\n", 
                   1061:                                                dev->name, dev->mc_count);
                   1062:                                        break;
                   1063:                                }
                   1064:                        }
                   1065:                } while (++boguscount < 100);
                   1066:        
                   1067:                /* Re-enable RX and TX interrupts */
                   1068:                outb(ALL_MASK & ~(RX_MASK | TX_MASK), ioaddr + INT_MASK_REG); 
                   1069:        
                   1070:        }
                   1071:        outb(RCV_ENABLE_CMD, ioaddr);
                   1072: }
                   1073: 
                   1074: /* The horrible routine to read a word from the serial EEPROM. */
                   1075: /* IMPORTANT - the 82595 will be set to Bank 0 after the eeprom is read */
                   1076: /* The delay between EEPROM clock transitions. */
                   1077: 
                   1078: #define eeprom_delay() { int _i = 40; while (--_i > 0) { __SLOW_DOWN_IO; }}
                   1079: #define EE_READ_CMD (6 << 6)
                   1080: 
                   1081: int
                   1082: read_eeprom(int ioaddr, int location)
                   1083: {
                   1084:        int i;
                   1085:        unsigned short retval = 0;
                   1086:        short ee_addr = ioaddr + EEPROM_REG;
                   1087:        int read_cmd = location | EE_READ_CMD;
                   1088:        short ctrl_val = EECS ;
                   1089:        
                   1090:        outb(BANK2_SELECT, ioaddr);
                   1091:        outb(ctrl_val, ee_addr);
                   1092:        
                   1093:        /* Shift the read command bits out. */
                   1094:        for (i = 8; i >= 0; i--) {
                   1095:                short outval = (read_cmd & (1 << i)) ? ctrl_val | EEDI
                   1096:                        : ctrl_val;
                   1097:                outb(outval, ee_addr);
                   1098:                outb(outval | EESK, ee_addr);   /* EEPROM clock tick. */
                   1099:                eeprom_delay();
                   1100:                outb(outval, ee_addr);  /* Finish EEPROM a clock tick. */
                   1101:                eeprom_delay();
                   1102:        }
                   1103:        outb(ctrl_val, ee_addr);
                   1104:        
                   1105:        for (i = 16; i > 0; i--) {
                   1106:                outb(ctrl_val | EESK, ee_addr);  eeprom_delay();
                   1107:                retval = (retval << 1) | ((inb(ee_addr) & EEDO) ? 1 : 0);
                   1108:                outb(ctrl_val, ee_addr);  eeprom_delay();
                   1109:        }
                   1110:        /* Terminate the EEPROM access. */
                   1111:        ctrl_val &= ~EECS;
                   1112:        outb(ctrl_val | EESK, ee_addr);
                   1113:        eeprom_delay();
                   1114:        outb(ctrl_val, ee_addr);
                   1115:        eeprom_delay();
                   1116:        outb(BANK0_SELECT, ioaddr);
                   1117:        return retval;
                   1118: }
                   1119: 
                   1120: static void
                   1121: hardware_send_packet(struct device *dev, void *buf, short length)
                   1122: {
                   1123:        struct eepro_local *lp = (struct eepro_local *)dev->priv;
                   1124:        short ioaddr = dev->base_addr;
                   1125:        int rcv_ram = dev->mem_end;
                   1126:        unsigned status, tx_available, last, end, boguscount = 100;
                   1127: 
                   1128:        if (net_debug > 5)
                   1129:                printk("eepro: entering hardware_send_packet routine.\n");
                   1130:        
                   1131:        while (boguscount-- > 0) {
                   1132:        
                   1133:                /* Disable RX and TX interrupts.  Necessary to avoid
                   1134:                corruption of the HOST_ADDRESS_REG by interrupt
                   1135:                service routines. */
                   1136:                outb(ALL_MASK, ioaddr + INT_MASK_REG);
                   1137:        
                   1138:                if (dev->interrupt == 1) {  
                   1139:                        /* Enable RX and TX interrupts */
                   1140:                        outb(ALL_MASK & ~(RX_MASK | TX_MASK), ioaddr + INT_MASK_REG); 
                   1141:                        continue;
                   1142:                }
                   1143:        
                   1144:                /* determine how much of the transmit buffer space is available */
                   1145:                if (lp->tx_end > lp->tx_start)
                   1146:                        tx_available = XMT_RAM - (lp->tx_end - lp->tx_start);
                   1147:                else if (lp->tx_end < lp->tx_start)
                   1148:                        tx_available = lp->tx_start - lp->tx_end;
                   1149:                else tx_available = XMT_RAM;
                   1150:        
                   1151:                if (((((length + 3) >> 1) << 1) + 2*XMT_HEADER) 
                   1152:                        >= tx_available)   /* No space available ??? */
                   1153:                        {
                   1154:                        eepro_transmit_interrupt(dev); /* Clean up the transmiting queue */
                   1155:                        /* Enable RX and TX interrupts */
                   1156:                        outb(ALL_MASK & ~(RX_MASK | TX_MASK), ioaddr + INT_MASK_REG); 
                   1157:                        continue;
                   1158:                }
                   1159:        
                   1160:                last = lp->tx_end;
                   1161:                end = last + (((length + 3) >> 1) << 1) + XMT_HEADER;
                   1162:                if (end >= RAM_SIZE) { /* the transmit buffer is wrapped around */
                   1163:        
                   1164:                        if ((RAM_SIZE - last) <= XMT_HEADER) {  
                   1165:                        /* Arrrr!!!, must keep the xmt header together,
                   1166:                          several days were lost to chase this one down. */
                   1167:                                last = rcv_ram;
                   1168:                                end = last + (((length + 3) >> 1) << 1) + XMT_HEADER;
                   1169:                        }       
                   1170: 
                   1171:                        else end = rcv_ram + (end - RAM_SIZE);
                   1172:                }
                   1173: 
                   1174:                outw(last, ioaddr + HOST_ADDRESS_REG);
                   1175:                outw(XMT_CMD, ioaddr + IO_PORT);
                   1176:                outw(0, ioaddr + IO_PORT);
                   1177:                outw(end, ioaddr + IO_PORT);
                   1178:                outw(length, ioaddr + IO_PORT);
                   1179:        
                   1180:                if (lp->version == LAN595)
                   1181:                        outsw(ioaddr + IO_PORT, buf, (length + 3) >> 1);
                   1182:        
                   1183:                else {  /* LAN595TX or LAN595FX, capable of 32-bit I/O processing */
                   1184:                        unsigned short temp = inb(ioaddr + INT_MASK_REG);
                   1185:                        outb(temp | IO_32_BIT, ioaddr + INT_MASK_REG);
                   1186:                        outsl(ioaddr + IO_PORT_32_BIT, buf, (length + 3) >> 2);
                   1187:                        outb(temp & ~(IO_32_BIT), ioaddr + INT_MASK_REG);
                   1188:                }
                   1189:        
                   1190:                /* A dummy read to flush the DRAM write pipeline */
                   1191:                status = inw(ioaddr + IO_PORT); 
                   1192:        
                   1193:                if (lp->tx_start == lp->tx_end) {       
                   1194:                        outw(last, ioaddr + XMT_BAR);
                   1195:                        outb(XMT_CMD, ioaddr);
                   1196:                        lp->tx_start = last;   /* I don't like to change tx_start here */
                   1197:                }
                   1198:                else {
                   1199:                        /* update the next address and the chain bit in the 
                   1200:                        last packet */
                   1201: 
                   1202:                        if (lp->tx_end != last) {
                   1203:                                outw(lp->tx_last + XMT_CHAIN, ioaddr + HOST_ADDRESS_REG);
                   1204:                                outw(last, ioaddr + IO_PORT);
                   1205:                        }
                   1206:        
                   1207:                        outw(lp->tx_last + XMT_COUNT, ioaddr + HOST_ADDRESS_REG);
                   1208:                        status = inw(ioaddr + IO_PORT);
                   1209:                        outw(status | CHAIN_BIT, ioaddr + IO_PORT);
                   1210:        
                   1211:                        /* Continue the transmit command */
                   1212:                        outb(RESUME_XMT_CMD, ioaddr);
                   1213:                }
                   1214:                lp->tx_last = last;
                   1215:                lp->tx_end = end;
                   1216:        
                   1217:                /* Enable RX and TX interrupts */
                   1218:                outb(ALL_MASK & ~(RX_MASK | TX_MASK), ioaddr + INT_MASK_REG); 
                   1219:        
                   1220:                if (dev->tbusy) {
                   1221:                        dev->tbusy = 0;
                   1222:                }
                   1223:        
                   1224:                if (net_debug > 5)
                   1225:                        printk("eepro: exiting hardware_send_packet routine.\n");
                   1226:        
                   1227:                return;
                   1228:        }
                   1229:        dev->tbusy = 1;
                   1230:        
                   1231:        if (net_debug > 5)
                   1232:                printk("eepro: exiting hardware_send_packet routine.\n");
                   1233: }
                   1234: 
                   1235: static void
                   1236: eepro_rx(struct device *dev)
                   1237: {
                   1238:        struct eepro_local *lp = (struct eepro_local *)dev->priv;
                   1239:        short ioaddr = dev->base_addr, rcv_ram = dev->mem_end;
                   1240:        short boguscount = 20;
                   1241:        short rcv_car = lp->rx_start;
                   1242:        unsigned rcv_event, rcv_status, rcv_next_frame, rcv_size;
                   1243: 
                   1244:        if (net_debug > 5)
                   1245:                printk("eepro: entering eepro_rx routine.\n");
                   1246:        
                   1247:        /* Set the read pointer to the start of the RCV */
                   1248:        outw(rcv_car, ioaddr + HOST_ADDRESS_REG);
                   1249:        
                   1250:        rcv_event = inw(ioaddr + IO_PORT);
                   1251:        while (rcv_event == RCV_DONE) {
                   1252: 
                   1253:                rcv_status = inw(ioaddr + IO_PORT);
                   1254:                rcv_next_frame = inw(ioaddr + IO_PORT);
                   1255:                rcv_size = inw(ioaddr + IO_PORT);
                   1256:        
                   1257:                if ((rcv_status & (RX_OK | RX_ERROR)) == RX_OK) {
                   1258:        
                   1259:                        /* Malloc up new buffer. */
                   1260:                        struct sk_buff *skb;
                   1261:                        rcv_size &= 0x3fff;
                   1262:                        skb = dev_alloc_skb(rcv_size+5);
                   1263:        
                   1264:                        if (skb == NULL) {
                   1265:                                printk("%s: Memory squeeze, dropping packet.\n", dev->name);
                   1266:                                lp->stats.rx_dropped++;
                   1267:                                break;
                   1268:                        }
                   1269:        
                   1270:                        skb->dev = dev;
                   1271:                        skb_reserve(skb,2);
                   1272:        
                   1273:                        if (lp->version == LAN595)
                   1274:                                insw(ioaddr+IO_PORT, skb_put(skb,rcv_size), (rcv_size + 3) >> 1);
                   1275:        
                   1276:                        else {  /* LAN595TX or LAN595FX, capable of 32-bit I/O processing */
                   1277:                                unsigned short temp = inb(ioaddr + INT_MASK_REG);
                   1278:                                outb(temp | IO_32_BIT, ioaddr + INT_MASK_REG);
                   1279:                                insl(ioaddr+IO_PORT_32_BIT, skb_put(skb,rcv_size), (rcv_size + 3) >> 2);
                   1280:                                outb(temp & ~(IO_32_BIT), ioaddr + INT_MASK_REG);
                   1281:                        }
                   1282:        
                   1283:                        skb->protocol = eth_type_trans(skb,dev);        
                   1284:                        netif_rx(skb);
                   1285:                        lp->stats.rx_packets++;
                   1286:                }
                   1287:        
                   1288:                else { /* Not sure will ever reach here, 
                   1289:                          I set the 595 to discard bad received frames */
                   1290:                        lp->stats.rx_errors++;
                   1291:        
                   1292:                        if (rcv_status & 0x0100)
                   1293:                                lp->stats.rx_over_errors++;
                   1294:        
                   1295:                        else if (rcv_status & 0x0400)
                   1296:                                lp->stats.rx_frame_errors++;
                   1297:        
                   1298:                        else if (rcv_status & 0x0800)
                   1299:                                lp->stats.rx_crc_errors++;
                   1300:        
                   1301:                        printk("%s: event = %#x, status = %#x, next = %#x, size = %#x\n", 
                   1302:                                dev->name, rcv_event, rcv_status, rcv_next_frame, rcv_size);
                   1303:                }
                   1304:        
                   1305:                if (rcv_status & 0x1000)
                   1306:                        lp->stats.rx_length_errors++;
                   1307:        
                   1308:                if (--boguscount == 0)
                   1309:                        break;
                   1310:        
                   1311:                rcv_car = lp->rx_start + RCV_HEADER + rcv_size;
                   1312:                lp->rx_start = rcv_next_frame;
                   1313:                outw(rcv_next_frame, ioaddr + HOST_ADDRESS_REG);
                   1314:                rcv_event = inw(ioaddr + IO_PORT);
                   1315:        } 
                   1316:        if (rcv_car == 0)
                   1317:                rcv_car = (RCV_UPPER_LIMIT << 8) | 0xff;
                   1318:        
                   1319:        outw(rcv_car - 1, ioaddr + RCV_STOP);
                   1320:        
                   1321:        if (net_debug > 5)
                   1322:                printk("eepro: exiting eepro_rx routine.\n");
                   1323: }
                   1324: 
                   1325: static void
                   1326: eepro_transmit_interrupt(struct device *dev)
                   1327: {
                   1328:        struct eepro_local *lp = (struct eepro_local *)dev->priv;
                   1329:        short ioaddr = dev->base_addr;
                   1330:        short boguscount = 20; 
                   1331:        short xmt_status;
                   1332: 
                   1333:        while (lp->tx_start != lp->tx_end) { 
                   1334:        
                   1335:                outw(lp->tx_start, ioaddr + HOST_ADDRESS_REG);
                   1336:                xmt_status = inw(ioaddr+IO_PORT);
                   1337:        
                   1338:                if ((xmt_status & TX_DONE_BIT) == 0) break;
                   1339:        
                   1340:                xmt_status = inw(ioaddr+IO_PORT);
                   1341:                lp->tx_start = inw(ioaddr+IO_PORT);
                   1342:                dev->tbusy = 0;
                   1343:                mark_bh(NET_BH);
                   1344:        
                   1345:                if (xmt_status & 0x2000)
                   1346:                        lp->stats.tx_packets++; 
                   1347:                else {
                   1348:                        lp->stats.tx_errors++;
                   1349:                        if (xmt_status & 0x0400)
                   1350:                                lp->stats.tx_carrier_errors++;
                   1351:                        printk("%s: XMT status = %#x\n",
                   1352:                                dev->name, xmt_status);
                   1353:                }
                   1354:        
                   1355:                if (xmt_status & 0x000f) {
                   1356:                        lp->stats.collisions += (xmt_status & 0x000f);
                   1357:                }
                   1358:        
                   1359:                if ((xmt_status & 0x0040) == 0x0) {
                   1360:                        lp->stats.tx_heartbeat_errors++;
                   1361:                }
                   1362:        
                   1363:                if (--boguscount == 0)
                   1364:                        break;  
                   1365:        }
                   1366: }
                   1367: 
                   1368: #ifdef MODULE
                   1369: 
                   1370: static char devicename[9] = { 0, };
                   1371: static struct device dev_eepro = {
                   1372:        devicename, /* device name is inserted by linux/drivers/net/net_init.c */
                   1373:        0, 0, 0, 0,
                   1374:        0, 0,
                   1375:        0, 0, 0, NULL, eepro_probe };
                   1376: static int io = 0x200;
                   1377: static int irq = 0;
                   1378: static int mem = (RCV_RAM/1024);       /* Size of the rx buffer in KB */
                   1379: 
                   1380: int 
                   1381: init_module(void)
                   1382: {
                   1383:        if (io == 0)
                   1384:                printk("eepro: You should not use auto-probing with insmod!\n");
                   1385: 
                   1386:        dev_eepro.base_addr = io;
                   1387:        dev_eepro.irq       = irq;
                   1388:        dev_eepro.mem_end   = mem;
                   1389: 
                   1390:        if (register_netdev(&dev_eepro) != 0)
                   1391:                return -EIO;
                   1392: 
                   1393:        return 0;
                   1394: }
                   1395: 
                   1396: void
                   1397: cleanup_module(void)
                   1398: {
                   1399:        unregister_netdev(&dev_eepro);
                   1400: 
                   1401:        kfree_s(dev_eepro.priv,sizeof(struct eepro_local));
                   1402:        dev_eepro.priv=NULL;
                   1403: 
                   1404:        /* If we don't do this, we can't re-insmod it later. */
                   1405:        release_region(dev_eepro.base_addr, EEPRO_IO_EXTENT);
                   1406: }
                   1407: #endif /* MODULE */

unix.superglobalmegacorp.com

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