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

1.1       root        1: /*------------------------------------------------------------------------
                      2:  . smc9194.c
                      3:  . This is a driver for SMC's 9000 series of Ethernet cards. 
                      4:  .
                      5:  . Copyright (C) 1996 by Erik Stahlman
                      6:  . This software may be used and distributed according to the terms
                      7:  . of the GNU Public License, incorporated herein by reference.
                      8:  .
                      9:  . "Features" of the SMC chip:  
                     10:  .   4608 byte packet memory. ( for the 91C92.  Others have more ) 
                     11:  .   EEPROM for configuration
                     12:  .   AUI/TP selection  ( mine has 10Base2/10BaseT select )
                     13:  .
                     14:  . Arguments:
                     15:  .     io               = for the base address
                     16:  .     irq      = for the IRQ 
                     17:  .     ifport = 0 for autodetect, 1 for TP, 2 for AUI ( or 10base2 )   
                     18:  .
                     19:  . author:  
                     20:  .     Erik Stahlman                           ( [email protected] )
                     21:  .   
                     22:  . Hardware multicast code from Peter Cammaert ( [email protected] )
                     23:  .
                     24:  . Sources:
                     25:  .    o   SMC databook
                     26:  .    o   skeleton.c by Donald Becker ( [email protected] )
                     27:  .    o   ( a LOT of advice from Becker as well )
                     28:  .
                     29:  . History:
                     30:  .     12/07/95  Erik Stahlman  written, got receive/xmit handled 
                     31:  .     01/03/96  Erik Stahlman  worked out some bugs, actually usable!!! :-)
                     32:  .     01/06/96  Erik Stahlman  cleaned up some, better testing, etc 
                     33:  .     01/29/96  Erik Stahlman  fixed autoirq, added multicast
                     34:  .     02/01/96  Erik Stahlman  1. disabled all interrupts in smc_reset
                     35:  .                              2. got rid of post-decrementing bug -- UGH.  
                     36:  .     02/13/96  Erik Stahlman  Tried to fix autoirq failure.  Added more
                     37:  .                              descriptive error messages.
                     38:  .     02/15/96  Erik Stahlman  Fixed typo that caused detection failure
                     39:  .     02/23/96  Erik Stahlman  Modified it to fit into kernel tree  
                     40:  .                              Added support to change hardware address
                     41:  .                              Cleared stats on opens
                     42:  .     02/26/96  Erik Stahlman  Trial support for Kernel 1.2.13
                     43:  .                              Kludge for automatic IRQ detection
                     44:  .     03/04/96  Erik Stahlman  Fixed kernel 1.3.70 + 
                     45:  .                              Fixed bug reported by Gardner Buchanan in 
                     46:  .                                smc_enable, with outw instead of outb
                     47:  .     03/06/96  Erik Stahlman  Added hardware multicast from Peter Cammaert
                     48:  ----------------------------------------------------------------------------*/
                     49: 
                     50: static const char *version =
                     51:        "smc9194.c:v0.12 03/06/96 by Erik Stahlman ([email protected])\n";  
                     52: 
                     53: #ifdef MODULE
                     54: #include <linux/module.h>
                     55: #include <linux/version.h>
                     56: #endif 
                     57: 
                     58: #include <linux/kernel.h>
                     59: #include <linux/sched.h>
                     60: #include <linux/types.h>
                     61: #include <linux/fcntl.h>
                     62: #include <linux/interrupt.h>
                     63: #include <linux/ptrace.h>
                     64: #include <linux/ioport.h>
                     65: #include <linux/in.h>
                     66: #include <linux/malloc.h>
                     67: #include <linux/string.h>
                     68: #include <linux/ioport.h>
                     69: #include <asm/bitops.h>
                     70: #include <asm/io.h>
                     71: #include <linux/errno.h>
                     72: 
                     73: #include <linux/netdevice.h>
                     74: #include <linux/etherdevice.h>
                     75: #include <linux/skbuff.h>
                     76: 
                     77: #include "smc9194.h"
                     78: /*------------------------------------------------------------------------
                     79:  .  
                     80:  . Configuration options, for the experienced user to change. 
                     81:  .
                     82:  -------------------------------------------------------------------------*/
                     83: 
                     84: /* 
                     85:  . this is for kernels > 1.2.70 
                     86: */
                     87: #define REALLY_NEW_KERNEL 
                     88: #ifndef REALLY_NEW_KERNEL
                     89: #define free_irq( x, y ) free_irq( x )
                     90: #define request_irq( x, y, z, u, v ) request_irq( x, y, z, u )
                     91: #endif
                     92: 
                     93: /*
                     94:  . Do you want to use this with old kernels.  
                     95:  . WARNING: this is not well tested.  
                     96: #define SUPPORT_OLD_KERNEL
                     97: */
                     98: 
                     99: 
                    100: /*
                    101:  . Do you want to use 32 bit xfers?  This should work on all chips, as
                    102:  . the chipset is designed to accommodate them.   
                    103: */
                    104: #define USE_32_BIT 1
                    105: 
                    106: /* 
                    107:  .the SMC9194 can be at any of the following port addresses.  To change,
                    108:  .for a slightly different card, you can add it to the array.  Keep in 
                    109:  .mind that the array must end in zero.
                    110: */
                    111: static unsigned int smc_portlist[] =
                    112:    { 0x200, 0x220, 0x240, 0x260, 0x280, 0x2A0, 0x2C0, 0x2E0,
                    113:          0x300, 0x320, 0x340, 0x360, 0x380, 0x3A0, 0x3C0, 0x3E0, 0};
                    114: 
                    115: /* 
                    116:  . Wait time for memory to be free.  This probably shouldn't be 
                    117:  . tuned that much, as waiting for this means nothing else happens 
                    118:  . in the system 
                    119: */
                    120: #define MEMORY_WAIT_TIME 16
                    121: 
                    122: /*
                    123:  . DEBUGGING LEVELS
                    124:  . 
                    125:  . 0 for normal operation
                    126:  . 1 for slightly more details
                    127:  . >2 for various levels of increasingly useless information
                    128:  .    2 for interrupt tracking, status flags
                    129:  .    3 for packet dumps, etc.
                    130: */
                    131: #define SMC_DEBUG 0
                    132: 
                    133: #if (SMC_DEBUG > 2 )
                    134: #define PRINTK3(x) printk x 
                    135: #else 
                    136: #define PRINTK3(x) 
                    137: #endif
                    138: 
                    139: #if SMC_DEBUG > 1 
                    140: #define PRINTK2(x) printk x 
                    141: #else
                    142: #define PRINTK2(x)
                    143: #endif
                    144: 
                    145: #ifdef SMC_DEBUG
                    146: #define PRINTK(x) printk x
                    147: #else
                    148: #define PRINTK(x)
                    149: #endif 
                    150: 
                    151: 
                    152: /* the older versions of the kernel cannot support autoprobing */
                    153: #ifdef SUPPORT_OLD_KERNEL
                    154: #define NO_AUTOPROBE
                    155: #endif
                    156: 
                    157: 
                    158: /*------------------------------------------------------------------------
                    159:  .
                    160:  . The internal workings of the driver.  If you are changing anything 
                    161:  . here with the SMC stuff, you should have the datasheet and known 
                    162:  . what you are doing.  
                    163:  .  
                    164:  -------------------------------------------------------------------------*/
                    165: #define CARDNAME "SMC9194"
                    166: 
                    167: #ifdef SUPPORT_OLD_KERNEL
                    168: char kernel_version[] = UTS_RELEASE;
                    169: #endif 
                    170: 
                    171: /* store this information for the driver.. */ 
                    172: struct smc_local {
                    173:        /*
                    174:           these are things that the kernel wants me to keep, so users
                    175:           can find out semi-useless statistics of how well the card is
                    176:           performing 
                    177:        */
                    178:        struct enet_statistics stats;
                    179:        
                    180:        /* 
                    181:           If I have to wait until memory is available to send
                    182:           a packet, I will store the skbuff here, until I get the
                    183:           desired memory.  Then, I'll send it out and free it.    
                    184:        */
                    185:        struct sk_buff * saved_skb;
                    186: 
                    187:        /*
                    188:         . This keeps track of how many packets that I have
                    189:         . sent out.  When an TX_EMPTY interrupt comes, I know
                    190:         . that all of these have been sent.
                    191:        */
                    192:        int     packets_waiting;
                    193: };
                    194: 
                    195: 
                    196: /*-----------------------------------------------------------------
                    197:  .
                    198:  .  The driver can be entered at any of the following entry points.
                    199:  . 
                    200:  .------------------------------------------------------------------  */
                    201: 
                    202: /*
                    203:  . This is called by  register_netdev().  It is responsible for 
                    204:  . checking the portlist for the SMC9000 series chipset.  If it finds 
                    205:  . one, then it will initialize the device, find the hardware information,
                    206:  . and sets up the appropriate device parameters.   
                    207:  . NOTE: Interrupts are *OFF* when this procedure is called.
                    208:  .
                    209:  . NB:This shouldn't be static since it is referred to externally.
                    210: */
                    211: int smc_init(struct device *dev);
                    212: 
                    213: /*
                    214:  . The kernel calls this function when someone wants to use the device,
                    215:  . typically 'ifconfig ethX up'.   
                    216: */
                    217: static int smc_open(struct device *dev);
                    218: 
                    219: /*
                    220:  . This is called by the kernel to send a packet out into the net.  it's
                    221:  . responsible for doing a best-effort send, but if it's simply not possible
                    222:  . to send it, the packet gets dropped. 
                    223: */  
                    224: static int smc_send_packet(struct sk_buff *skb, struct device *dev);
                    225: 
                    226: /* 
                    227:  . This is called by the kernel in response to 'ifconfig ethX down'.  It
                    228:  . is responsible for cleaning up everything that the open routine 
                    229:  . does, and maybe putting the card into a powerdown state. 
                    230: */
                    231: static int smc_close(struct device *dev);
                    232: 
                    233: /*
                    234:  . This routine allows the proc file system to query the driver's 
                    235:  . statistics.  
                    236: */
                    237: static struct enet_statistics * smc_query_statistics( struct device *dev);
                    238: 
                    239: /*
                    240:  . Finally, a call to set promiscuous mode ( for TCPDUMP and related 
                    241:  . programs ) and multicast modes.
                    242: */
                    243: #ifdef SUPPORT_OLD_KERNEL
                    244: static void smc_set_multicast_list(struct device *dev, int num_addrs,
                    245:                                 void *addrs);
                    246: #else
                    247: static void smc_set_multicast_list(struct device *dev);
                    248: #endif 
                    249: 
                    250: /*---------------------------------------------------------------
                    251:  . 
                    252:  . Interrupt level calls.. 
                    253:  .
                    254:  ----------------------------------------------------------------*/
                    255: 
                    256: /*
                    257:  . Handles the actual interrupt 
                    258: */
                    259: #ifdef REALLY_NEW_KERNEL
                    260: static void smc_interrupt(int irq, void *, struct pt_regs *regs);
                    261: #else
                    262: static void smc_interrupt(int irq, struct pt_regs *regs);
                    263: #endif 
                    264: /*
                    265:  . This is a separate procedure to handle the receipt of a packet, to
                    266:  . leave the interrupt code looking slightly cleaner 
                    267: */ 
                    268: inline static void smc_rcv( struct device *dev );
                    269: /*
                    270:  . This handles a TX interrupt, which is only called when an error
                    271:  . relating to a packet is sent.  
                    272: */
                    273: inline static void smc_tx( struct device * dev );
                    274: 
                    275: /*
                    276:  ------------------------------------------------------------
                    277:  . 
                    278:  . Internal routines
                    279:  .
                    280:  ------------------------------------------------------------
                    281: */
                    282: 
                    283: /*
                    284:  . Test if a given location contains a chip, trying to cause as 
                    285:  . little damage as possible if it's not a SMC chip.
                    286: */
                    287: static int smc_probe( int ioaddr );
                    288: 
                    289: /*
                    290:  . this routine initializes the cards hardware, prints out the configuration
                    291:  . to the system log as well as the vanity message, and handles the setup
                    292:  . of a device parameter. 
                    293:  . It will give an error if it can't initialize the card.
                    294: */
                    295: static int smc_initcard( struct device *, int ioaddr ); 
                    296: 
                    297: /*
                    298:  . A rather simple routine to print out a packet for debugging purposes.
                    299: */ 
                    300: #if SMC_DEBUG > 2 
                    301: static void print_packet( byte *, int );
                    302: #endif  
                    303: 
                    304: #define tx_done(dev) 1
                    305: 
                    306: /* this is called to actually send the packet to the chip */ 
                    307: static void smc_hardware_send_packet( struct device * dev );
                    308: 
                    309: /* Since I am not sure if I will have enough room in the chip's ram
                    310:  . to store the packet, I call this routine, which either sends it 
                    311:  . now, or generates an interrupt when the card is ready for the 
                    312:  . packet */
                    313: static int  smc_wait_to_send_packet( struct sk_buff * skb, struct device *dev );
                    314: 
                    315: /* this does a soft reset on the device */
                    316: static void smc_reset( int ioaddr );
                    317: 
                    318: /* Enable Interrupts, Receive, and Transmit */
                    319: static void smc_enable( int ioaddr );
                    320: 
                    321: /* this puts the device in an inactive state */
                    322: static void smc_shutdown( int ioaddr );
                    323: 
                    324: #ifndef NO_AUTOPROBE
                    325: /* This routine will find the IRQ of the driver if one is not
                    326:  . specified in the input to the device.  */
                    327: static int smc_findirq( int ioaddr );
                    328: #endif
                    329: 
                    330: /*
                    331:   this routine will set the hardware multicast table to the specified 
                    332:   values given it by the higher level routines
                    333: */
                    334: #ifndef SUPPORT_OLD_KERNEL
                    335: static void smc_setmulticast( int ioaddr, int count, struct dev_mc_list *  );
                    336: static int crc32( char *, int );
                    337: #endif
                    338: 
                    339: #ifdef SUPPORT_OLD_KERNEL
                    340: extern struct device *init_etherdev(struct device *dev, int sizeof_private,
                    341:                        unsigned long *mem_startp );
                    342: #endif 
                    343: 
                    344: /*
                    345:  . Function: smc_reset( int ioaddr )
                    346:  . Purpose:
                    347:  .     This sets the SMC91xx chip to its normal state, hopefully from whatever
                    348:  .     mess that any other DOS driver has put it in.   
                    349:  . 
                    350:  . Maybe I should reset more registers to defaults in here?  SOFTRESET  should
                    351:  . do that for me.  
                    352:  . 
                    353:  . Method:
                    354:  .     1.  send a SOFT RESET 
                    355:  .     2.  wait for it to finish
                    356:  .     3.  enable autorelease mode
                    357:  .     4.  reset the memory management unit
                    358:  .     5.  clear all interrupts
                    359:  .
                    360: */  
                    361: static void smc_reset( int ioaddr ) 
                    362: { 
                    363:        /* This resets the registers mostly to defaults, but doesn't
                    364:           affect EEPROM.  That seems unnecessary */
                    365:        SMC_SELECT_BANK( 0 );
                    366:        outw( RCR_SOFTRESET, ioaddr + RCR ); 
                    367:        
                    368:        /* this should pause enough for the chip to be happy */
                    369:        SMC_DELAY( );
                    370: 
                    371:        /* Set the transmit and receive configuration registers to 
                    372:           default values */
                    373:        outw( RCR_CLEAR, ioaddr + RCR );
                    374:        outw( TCR_CLEAR, ioaddr + TCR );
                    375: 
                    376:        /* set the control register to automatically
                    377:           release successfully transmitted packets, to make the best 
                    378:           use out of our limited memory */
                    379:        SMC_SELECT_BANK( 1 );
                    380:        outw( inw( ioaddr + CONTROL ) | CTL_AUTO_RELEASE , ioaddr + CONTROL );  
                    381: 
                    382:        /* Reset the MMU */
                    383:        SMC_SELECT_BANK( 2 );
                    384:        outw( MC_RESET, ioaddr + MMU_CMD );
                    385: 
                    386:        /* Note:  It doesn't seem that waiting for the MMU busy is needed here, 
                    387:           but this is a place where future chipsets _COULD_ break.  Be wary
                    388:           of issuing another MMU command right after this */
                    389: 
                    390:        outb( 0, ioaddr + INT_MASK );
                    391: }
                    392: 
                    393: /* 
                    394:  . Function: smc_enable
                    395:  . Purpose: let the chip talk to the outside work
                    396:  . Method: 
                    397:  .     1.  Enable the transmitter
                    398:  .     2.  Enable the receiver
                    399:  .     3.  Enable interrupts
                    400: */
                    401: static void smc_enable( int ioaddr ) 
                    402: {
                    403:        SMC_SELECT_BANK( 0 );
                    404:        /* see the header file for options in TCR/RCR NORMAL*/
                    405:        outw( TCR_NORMAL, ioaddr + TCR );
                    406:        outw( RCR_NORMAL, ioaddr + RCR );
                    407: 
                    408:        /* now, enable interrupts */
                    409:        SMC_SELECT_BANK( 2 );
                    410:        outb( SMC_INTERRUPT_MASK, ioaddr + INT_MASK );
                    411: }      
                    412:        
                    413: /*
                    414:  . Function: smc_shutdown
                    415:  . Purpose:  closes down the SMC91xxx chip.
                    416:  . Method:   
                    417:  .     1. zero the interrupt mask
                    418:  .     2. clear the enable receive flag
                    419:  .     3. clear the enable xmit flags
                    420:  .
                    421:  . TODO: 
                    422:  .   (1) maybe utilize power down mode.
                    423:  .     Why not yet?  Because while the chip will go into power down mode,
                    424:  .     the manual says that it will wake up in response to any I/O requests
                    425:  .     in the register space.   Empirical results do not show this working.
                    426: */
                    427: static void smc_shutdown( int ioaddr ) 
                    428: {
                    429:        /* no more interrupts for me */
                    430:        SMC_SELECT_BANK( 2 );
                    431:        outb( 0, ioaddr + INT_MASK );
                    432: 
                    433:        /* and tell the card to stay away from that nasty outside world */
                    434:        SMC_SELECT_BANK( 0 );
                    435:        outb( RCR_CLEAR, ioaddr + RCR );
                    436:        outb( TCR_CLEAR, ioaddr + TCR );
                    437: #if 0 
                    438:        /* finally, shut the chip down */
                    439:        SMC_SELECT_BANK( 1 ); 
                    440:        outw( inw( ioaddr + CONTROL ), CTL_POWERDOWN, ioaddr + CONTROL  );
                    441: #endif 
                    442: }
                    443: 
                    444: 
                    445: #ifndef SUPPORT_OLD_KERNEL 
                    446: /* 
                    447:  . Function: smc_setmulticast( int ioaddr, int count, dev_mc_list * adds )
                    448:  . Purpose:
                    449:  .    This sets the internal hardware table to filter out unwanted multicast
                    450:  .    packets before they take up memory.  
                    451:  .    
                    452:  .    The SMC chip uses a hash table where the high 6 bits of the CRC of
                    453:  .    address are the offset into the table.  If that bit is 1, then the 
                    454:  .    multicast packet is accepted.  Otherwise, it's dropped silently.
                    455:  .  
                    456:  .    To use the 6 bits as an offset into the table, the high 3 bits are the
                    457:  .    number of the 8 bit register, while the low 3 bits are the bit within
                    458:  .    that register.
                    459:  .
                    460:  . This routine is based very heavily on the one provided by Peter Cammaert. 
                    461: */
                    462: 
                    463: 
                    464: static void smc_setmulticast( int ioaddr, int count, struct dev_mc_list * addrs ) {
                    465:        int                     i;
                    466:        unsigned char           multicast_table[ 8 ];
                    467:        struct dev_mc_list      * cur_addr;
                    468:        /* table for flipping the order of 3 bits */  
                    469:        unsigned char invert3[] = { 0, 4, 2, 6, 1, 5, 3, 7 };
                    470: 
                    471:        /* start with a table of all zeros: reject all */       
                    472:        memset( multicast_table, 0, sizeof( multicast_table ) );
                    473: 
                    474:        cur_addr = addrs;
                    475:        for ( i = 0; i < count ; i ++, cur_addr = cur_addr->next  ) {
                    476:                int position;
                    477:                
                    478:                /* do we have a pointer here? */
                    479:                if ( !cur_addr ) 
                    480:                        break;
                    481:                /* make sure this is a multicast address - shouldn't this
                    482:                   be a given if we have it here ? */   
                    483:                if ( !( *cur_addr->dmi_addr & 1 ) )     
                    484:                        continue;       
                    485: 
                    486:                /* only use the low order bits */       
                    487:                position = crc32( cur_addr->dmi_addr, 6 ) & 0x3f;
                    488:                                
                    489:                /* do some messy swapping to put the bit in the right spot */
                    490:                multicast_table[invert3[position&7]] |= 
                    491:                                        (1<<invert3[(position>>3)&7]);
                    492: 
                    493:        }
                    494:        /* now, the table can be loaded into the chipset */
                    495:        SMC_SELECT_BANK( 3 );
                    496:        
                    497:        for ( i = 0; i < 8 ; i++ ) {
                    498:                outb( multicast_table[i], ioaddr + MULTICAST1 + i );
                    499:        }
                    500: }
                    501: 
                    502: /*
                    503:   Finds the CRC32 of a set of bytes.
                    504:   Again, from Peter Cammaert's code. 
                    505: */
                    506: static int crc32( char * s, int length ) { 
                    507:        /* indices */
                    508:        int perByte;
                    509:        int perBit;
                    510:        /* crc polynomial for Ethernet */
                    511:        const unsigned long poly = 0xedb88320;
                    512:        /* crc value - preinitialized to all 1's */
                    513:        unsigned long crc_value = 0xffffffff; 
                    514: 
                    515:        for ( perByte = 0; perByte < length; perByte ++ ) {
                    516:                unsigned char   c;
                    517:        
                    518:                c = *(s++);
                    519:                for ( perBit = 0; perBit < 8; perBit++ ) {
                    520:                        crc_value = (crc_value>>1)^
                    521:                                (((crc_value^c)&0x01)?poly:0);
                    522:                        c >>= 1;
                    523:                }
                    524:        }
                    525:        return  crc_value;
                    526: } 
                    527: 
                    528: #endif 
                    529: 
                    530: 
                    531: /* 
                    532:  . Function: smc_wait_to_send_packet( struct sk_buff * skb, struct device * ) 
                    533:  . Purpose: 
                    534:  .    Attempt to allocate memory for a packet, if chip-memory is not
                    535:  .    available, then tell the card to generate an interrupt when it 
                    536:  .    is available.
                    537:  .
                    538:  . Algorithm:
                    539:  .
                    540:  . o   if the saved_skb is not currently null, then drop this packet
                    541:  .     on the floor.  This should never happen, because of TBUSY.
                    542:  . o   if the saved_skb is null, then replace it with the current packet,
                    543:  . o   See if I can sending it now. 
                    544:  . o   (NO): Enable interrupts and let the interrupt handler deal with it.
                    545:  . o   (YES):Send it now.
                    546: */
                    547: static int smc_wait_to_send_packet( struct sk_buff * skb, struct device * dev )
                    548: { 
                    549:        struct smc_local *lp    = (struct smc_local *)dev->priv;
                    550:        unsigned short ioaddr   = dev->base_addr;
                    551:        word                    length;
                    552:        unsigned short          numPages;
                    553:        word                    time_out;       
                    554:        
                    555:        if ( lp->saved_skb) {
                    556:                /* THIS SHOULD NEVER HAPPEN. */
                    557:                lp->stats.tx_aborted_errors++;
                    558:                printk(CARDNAME": Bad Craziness - sent packet while busy.\n" );
                    559:                return 1;
                    560:        }
                    561:        lp->saved_skb = skb;
                    562: 
                    563:        length = ETH_ZLEN < skb->len ? skb->len : ETH_ZLEN;
                    564:                
                    565:        /*
                    566:        . the MMU wants the number of pages to be the number of 256 bytes 
                    567:        . 'pages', minus 1 ( since a packet can't ever have 0 pages :) ) 
                    568:        */
                    569:        numPages = length / 256;
                    570: 
                    571:        if (numPages > 7 ) {
                    572:                printk(CARDNAME": Far too big packet error. \n");
                    573:                /* freeing the packet is a good thing here... but should                
                    574:                 . any packets of this size get down here?   */
                    575:                dev_kfree_skb (skb, FREE_WRITE);
                    576:                lp->saved_skb = NULL;
                    577:                /* this IS an error, but, i don't want the skb saved */
                    578:                return 0; 
                    579:        }
                    580:        /* either way, a packet is waiting now */
                    581:        lp->packets_waiting++;
                    582:         
                    583:        /* now, try to allocate the memory */
                    584:        SMC_SELECT_BANK( 2 );
                    585:        outw( MC_ALLOC | numPages, ioaddr + MMU_CMD );
                    586:        /*
                    587:        . Performance Hack
                    588:        .  
                    589:        . wait a short amount of time.. if I can send a packet now, I send
                    590:        . it now.  Otherwise, I enable an interrupt and wait for one to be
                    591:        . available. 
                    592:        .
                    593:        . I could have handled this a slightly different way, by checking to
                    594:        . see if any memory was available in the FREE MEMORY register.  However,
                    595:        . either way, I need to generate an allocation, and the allocation works
                    596:        . no matter what, so I saw no point in checking free memory.   
                    597:        */ 
                    598:        time_out = MEMORY_WAIT_TIME;
                    599:        do { 
                    600:                word    status;
                    601: 
                    602:                status = inb( ioaddr + INTERRUPT );
                    603:                if ( status & IM_ALLOC_INT ) { 
                    604:                        /* acknowledge the interrupt */
                    605:                        outb( IM_ALLOC_INT, ioaddr + INTERRUPT );
                    606:                        break;  
                    607:                }
                    608:        } while ( -- time_out );
                    609: 
                    610:        if ( !time_out ) {
                    611:                /* oh well, wait until the chip finds memory later */ 
                    612:                SMC_ENABLE_INT( IM_ALLOC_INT );
                    613:                PRINTK2((CARDNAME": memory allocation deferred. \n"));
                    614:                /* it's deferred, but I'll handle it later */
                    615:                return 0;
                    616:        }
                    617:        /* or YES! I can send the packet now.. */
                    618:        smc_hardware_send_packet(dev);
                    619:        
                    620:        return 0;
                    621: }      
                    622: 
                    623: /*
                    624:  . Function:  smc_hardware_send_packet(struct device * )
                    625:  . Purpose:    
                    626:  .     This sends the actual packet to the SMC9xxx chip.   
                    627:  . 
                    628:  . Algorithm:
                    629:  .     First, see if a saved_skb is available.    
                    630:  .             ( this should NOT be called if there is no 'saved_skb'
                    631:  .     Now, find the packet number that the chip allocated
                    632:  .     Point the data pointers at it in memory 
                    633:  .     Set the length word in the chip's memory
                    634:  .     Dump the packet to chip memory
                    635:  .     Check if a last byte is needed ( odd length packet )
                    636:  .             if so, set the control flag right 
                    637:  .     Tell the card to send it 
                    638:  .     Enable the transmit interrupt, so I know if it failed
                    639:  .     Free the kernel data if I actually sent it.
                    640: */
                    641: static void smc_hardware_send_packet( struct device * dev ) 
                    642: {
                    643:        struct smc_local *lp = (struct smc_local *)dev->priv;
                    644:        byte                    packet_no;
                    645:        struct sk_buff *        skb = lp->saved_skb;
                    646:        word                    length; 
                    647:        unsigned short          ioaddr;
                    648:        byte                    * buf;
                    649: 
                    650:        ioaddr = dev->base_addr;        
                    651: 
                    652:        if ( !skb ) {
                    653:                PRINTK((CARDNAME": In XMIT with no packet to send \n"));
                    654:                return;
                    655:        }
                    656:        length = ETH_ZLEN < skb->len ? skb->len : ETH_ZLEN;
                    657:        buf = skb->data;
                    658: 
                    659:        /* If I get here, I _know_ there is a packet slot waiting for me */
                    660:        packet_no = inb( ioaddr + PNR_ARR + 1 ); 
                    661:        if ( packet_no & 0x80 ) { 
                    662:                /* or isn't there?  BAD CHIP! */
                    663:                printk(KERN_DEBUG CARDNAME": Memory allocation failed. \n");
                    664:                kfree(skb);
                    665:                lp->saved_skb = NULL;
                    666:                dev->tbusy = 0;
                    667:                return;
                    668:        }
                    669: 
                    670:        /* we have a packet address, so tell the card to use it */
                    671:        outb( packet_no, ioaddr + PNR_ARR );
                    672: 
                    673:        /* point to the beginning of the packet */      
                    674:        outw( PTR_AUTOINC , ioaddr + POINTER );
                    675: 
                    676:        PRINTK3((CARDNAME": Trying to xmit packet of length %x\n", length ));
                    677: #if SMC_DEBUG > 2
                    678:        print_packet( buf, length );
                    679: #endif
                    680: 
                    681:        /* send the packet length ( +6 for status, length and ctl byte ) 
                    682:           and the status word ( set to zeros ) */ 
                    683: #ifdef USE_32_BIT
                    684:        outl(  (length +6 ) << 16 , ioaddr + DATA_1 );
                    685: #else
                    686:        outw( 0, ioaddr + DATA_1 );      
                    687:        /* send the packet length ( +6 for status words, length, and ctl*/              
                    688:        outb( (length+6) & 0xFF,ioaddr + DATA_1 );
                    689:        outb( (length+6) >> 8 , ioaddr + DATA_1 );
                    690: #endif 
                    691: 
                    692:        /* send the actual data 
                    693:         . I _think_ it's faster to send the longs first, and then 
                    694:         . mop up by sending the last word.  It depends heavily 
                    695:         . on alignment, at least on the 486.  Maybe it would be 
                    696:         . a good idea to check which is optimal?  But that could take
                    697:         . almost as much time as is saved? 
                    698:        */      
                    699: #ifdef USE_32_BIT 
                    700:        if ( length & 0x2  ) {  
                    701:                outsl(ioaddr + DATA_1, buf,  length >> 2 ); 
                    702:                outw( *((word *)(buf + (length & 0xFFFFFFFC))),ioaddr +DATA_1);
                    703:        }
                    704:        else
                    705:                outsl(ioaddr + DATA_1, buf,  length >> 2 ); 
                    706: #else
                    707:        outsw(ioaddr + DATA_1 , buf, (length ) >> 1);
                    708: #endif
                    709:        /* Send the last byte, if there is one.   */
                    710:        
                    711:        if ( (length & 1) == 0 ) {
                    712:                outw( 0, ioaddr + DATA_1 );
                    713:        } else {
                    714:                outb( buf[length -1 ], ioaddr + DATA_1 );
                    715:                outb( 0x20, ioaddr + DATA_1);
                    716:        }
                    717: 
                    718:        /* enable the interrupts */
                    719:        SMC_ENABLE_INT( (IM_TX_INT | IM_TX_EMPTY_INT) );
                    720: 
                    721:        /* and let the chipset deal with it */
                    722:        outw( MC_ENQUEUE , ioaddr + MMU_CMD );
                    723: 
                    724:        PRINTK2((CARDNAME": Sent packet of length %d \n",length)); 
                    725: 
                    726:        lp->saved_skb = NULL;
                    727:        dev_kfree_skb (skb, FREE_WRITE);
                    728: 
                    729:        dev->trans_start = jiffies;
                    730: 
                    731:        /* we can send another packet */
                    732:        dev->tbusy = 0;
                    733: 
                    734: 
                    735:        return;
                    736: }
                    737: 
                    738: /*-------------------------------------------------------------------------
                    739:  |
                    740:  | smc_init( struct device * dev )  
                    741:  |   Input parameters: 
                    742:  |     dev->base_addr == 0, try to find all possible locations
                    743:  |     dev->base_addr == 1, return failure code
                    744:  |     dev->base_addr == 2, always allocate space,  and return success
                    745:  |     dev->base_addr == <anything else>   this is the address to check 
                    746:  |
                    747:  |   Output: 
                    748:  |     0 --> there is a device
                    749:  |     anything else, error 
                    750:  | 
                    751:  ---------------------------------------------------------------------------
                    752: */ 
                    753: int smc_init(struct device *dev)
                    754: {
                    755:        int i;
                    756:        int base_addr = dev ? dev->base_addr : 0;
                    757: 
                    758:        /*  try a specific location */
                    759:        if (base_addr > 0x1ff)  {                
                    760:                int     error; 
                    761:                error = smc_probe(base_addr);
                    762:                if ( 0 == error ) {
                    763:                        return smc_initcard( dev, base_addr );
                    764:                }
                    765:                return error; 
                    766:        } else {
                    767:                if ( 0 != base_addr ) {
                    768:                        return -ENXIO;
                    769:                }
                    770:        }
                    771:        
                    772:        /* check every ethernet address */
                    773:        for (i = 0; smc_portlist[i]; i++) {
                    774:                int ioaddr = smc_portlist[i];
                    775: 
                    776:                /* check if the area is available */
                    777:                if (check_region( ioaddr , SMC_IO_EXTENT))
                    778:                        continue;
                    779: 
                    780:                /* check this specific address */
                    781:                if ( smc_probe( ioaddr ) == 0)  {  
                    782:                        return smc_initcard( dev, ioaddr  ); 
                    783:                }
                    784:        }
                    785: 
                    786:        /* couldn't find anything */
                    787:        return -ENODEV;
                    788: }
                    789: 
                    790: #ifndef NO_AUTOPROBE
                    791: /*----------------------------------------------------------------------
                    792:  . smc_findirq 
                    793:  . 
                    794:  . This routine has a simple purpose -- make the SMC chip generate an 
                    795:  . interrupt, so an auto-detect routine can detect it, and find the IRQ,
                    796:  ------------------------------------------------------------------------
                    797: */
                    798: int smc_findirq( int ioaddr ) 
                    799: {
                    800:        int     timeout = 20;
                    801: 
                    802: 
                    803:        /* I have to do a STI() here, because this is called from
                    804:           a routine that does an CLI during this process, making it 
                    805:           rather difficult to get interrupts for auto detection */
                    806:        sti();
                    807: 
                    808:        autoirq_setup( 0 );
                    809: 
                    810:        /*
                    811:         * What I try to do here is trigger an ALLOC_INT. This is done
                    812:         * by allocating a small chunk of memory, which will give an interrupt
                    813:         * when done.
                    814:         */
                    815: 
                    816:          
                    817:        SMC_SELECT_BANK(2);     
                    818:        /* enable ALLOCation interrupts ONLY */
                    819:        outb( IM_ALLOC_INT, ioaddr + INT_MASK );        
                    820: 
                    821:        /*
                    822:         . Allocate 512 bytes of memory.  Note that the chip was just 
                    823:         . reset so all the memory is available
                    824:        */
                    825:        outw( MC_ALLOC | 1, ioaddr + MMU_CMD );         
                    826: 
                    827:        /*
                    828:         . Wait until positive that the interrupt has been generated
                    829:        */
                    830:        while ( timeout ) {
                    831:                byte    int_status;
                    832: 
                    833:                int_status = inb( ioaddr + INTERRUPT );
                    834: 
                    835:                if ( int_status & IM_ALLOC_INT )        
                    836:                        break;          /* got the interrupt */
                    837:                timeout--;
                    838:        }
                    839:        /* there is really nothing that I can do here if timeout fails,
                    840:           as autoirq_report will return a 0 anyway, which is what I
                    841:           want in this case.   Plus, the clean up is needed in both
                    842:           cases.  */
                    843: 
                    844:        /* DELAY HERE!
                    845:           On a fast machine, the status might change before the interrupt
                    846:           is given to the processor.  This means that the interrupt was 
                    847:           never detected, and autoirq_report fails to report anything.  
                    848:           This should fix autoirq_* problems. 
                    849:        */
                    850:        SMC_DELAY();
                    851:        SMC_DELAY();            
                    852:        
                    853:        /* and disable all interrupts again */
                    854:        outb( 0, ioaddr + INT_MASK );
                    855: 
                    856:        /* clear hardware interrupts again, because that's how it
                    857:           was when I was called... */
                    858:        cli();
                    859: 
                    860:        /* and return what I found */
                    861:        return autoirq_report( 0 );     
                    862: }
                    863: #endif
                    864:  
                    865: /*----------------------------------------------------------------------
                    866:  . Function: smc_probe( int ioaddr )
                    867:  . 
                    868:  . Purpose:  
                    869:  .     Tests to see if a given ioaddr points to an SMC9xxx chip.
                    870:  .     Returns a 0 on success  
                    871:  . 
                    872:  . Algorithm:
                    873:  .     (1) see if the high byte of BANK_SELECT is 0x33
                    874:  .     (2) compare the ioaddr with the base register's address
                    875:  .     (3) see if I recognize the chip ID in the appropriate register
                    876:  . 
                    877:  .---------------------------------------------------------------------
                    878:  */ 
                    879: 
                    880: static int smc_probe( int ioaddr ) 
                    881: {
                    882:        unsigned int    bank;
                    883:        word    revision_register;      
                    884:        word  base_address_register;
                    885: 
                    886:        /* First, see if the high byte is 0x33 */
                    887:        bank = inw( ioaddr + BANK_SELECT );
                    888:        if ( (bank & 0xFF00) != 0x3300 ) {
                    889:                return -ENODEV;
                    890:        }
                    891:        /* The above MIGHT indicate a device, but I need to write to further
                    892:                test this.  */
                    893:        outw( 0x0, ioaddr + BANK_SELECT );
                    894:        bank = inw( ioaddr + BANK_SELECT );
                    895:        if ( (bank & 0xFF00 ) != 0x3300 ) {
                    896:                return -ENODEV;
                    897:        }
                    898:        /* well, we've already written once, so hopefully another time won't
                    899:           hurt.  This time, I need to switch the bank register to bank 1, 
                    900:           so I can access the base address register */
                    901:        SMC_SELECT_BANK(1);
                    902:        base_address_register = inw( ioaddr + BASE );
                    903:        if ( ioaddr != ( base_address_register >> 3 & 0x3E0 ) )  {
                    904:                printk(CARDNAME ": IOADDR %x doesn't match configuration (%x)." 
                    905:                        "Probably not a SMC chip\n",
                    906:                        ioaddr, base_address_register >> 3 & 0x3E0 );
                    907:                /* well, the base address register didn't match.  Must not have
                    908:                   been a SMC chip after all. */
                    909:                return -ENODEV;
                    910:        }
                    911: 
                    912:        /*  check if the revision register is something that I recognize.  
                    913:            These might need to be added to later, as future revisions 
                    914:            could be added.  */
                    915:        SMC_SELECT_BANK(3);
                    916:        revision_register  = inw( ioaddr + REVISION );
                    917:        if ( !chip_ids[ ( revision_register  >> 4 ) & 0xF  ] ) { 
                    918:                /* I don't recognize this chip, so... */
                    919:                printk(CARDNAME ": IO %x: Unrecognized revision register:"
                    920:                        " %x, Contact author. \n", ioaddr, revision_register );
                    921: 
                    922:                return -ENODEV;
                    923:        }
                    924: 
                    925:        /* at this point I'll assume that the chip is an SMC9xxx.   
                    926:           It might be prudent to check a listing of MAC addresses 
                    927:           against the hardware address, or do some other tests. */     
                    928:        return 0;
                    929: }
                    930: 
                    931: /*---------------------------------------------------------------
                    932:  . Here I do typical initialization tasks. 
                    933:  . 
                    934:  . o  Initialize the structure if needed
                    935:  . o  print out my vanity message if not done so already
                    936:  . o  print out what type of hardware is detected
                    937:  . o  print out the ethernet address
                    938:  . o  find the IRQ 
                    939:  . o  set up my private data 
                    940:  . o  configure the dev structure with my subroutines
                    941:  . o  actually GRAB the irq.
                    942:  . o  GRAB the region 
                    943:  .-----------------------------------------------------------------
                    944: */
                    945: static int  smc_initcard(struct device *dev, int ioaddr)
                    946: {
                    947:        int i;
                    948: 
                    949:        static unsigned version_printed = 0;
                    950: 
                    951:        /* registers */
                    952:        word    revision_register;      
                    953:        word    configuration_register; 
                    954:        word    memory_info_register;
                    955:        word    memory_cfg_register;
                    956: 
                    957:        const char *    version_string;
                    958:        const char *    if_string;
                    959:        int     memory;
                    960: 
                    961:        int   irqval;
                    962: 
                    963:        /* see if I need to initialize the ethernet card structure */
                    964:        if (dev == NULL) {
                    965: #ifdef SUPPORT_OLD_KERNEL
                    966: #ifndef MODULE
                    967: /* note: the old module interface does not support this call */
                    968:                dev = init_etherdev( 0, sizeof( struct smc_local ), 0 );
                    969: #endif 
                    970: #else
                    971:                dev = init_etherdev(0, 0);
                    972: #endif 
                    973:                if (dev == NULL)
                    974:                        return -ENOMEM;
                    975:        }
                    976: 
                    977:        if (version_printed++ == 0)
                    978:                printk("%s", version);
                    979: 
                    980:        /* fill in some of the fields */
                    981:        dev->base_addr = ioaddr;
                    982: 
                    983:        /*
                    984:         . Get the MAC address ( bank 1, regs 4 - 9 )
                    985:        */
                    986:        SMC_SELECT_BANK( 1 );
                    987:        for ( i = 0; i < 6; i += 2 ) { 
                    988:                word    address;
                    989: 
                    990:                address = inw( ioaddr + ADDR0 + i  );
                    991:                dev->dev_addr[ i + 1] = address >> 8;
                    992:                dev->dev_addr[ i ] = address & 0xFF;    
                    993:        }
                    994: 
                    995:        /* get the memory information */
                    996: 
                    997:        SMC_SELECT_BANK( 0 );
                    998:        memory_info_register = inw( ioaddr + MIR );
                    999:        memory_cfg_register  = inw( ioaddr + MCR );
                   1000:        memory = ( memory_cfg_register >> 9 )  & 0x7;  /* multiplier */
                   1001:        memory *= 256 * ( memory_info_register & 0xFF );
                   1002: 
                   1003:        /* 
                   1004:         Now, I want to find out more about the chip.  This is sort of
                   1005:         redundant, but it's cleaner to have it in both, rather than having
                   1006:         one VERY long probe procedure.
                   1007:        */      
                   1008:        SMC_SELECT_BANK(3);
                   1009:        revision_register  = inw( ioaddr + REVISION );
                   1010:        version_string = chip_ids[ ( revision_register  >> 4 ) & 0xF  ];
                   1011:        if ( !version_string ) {
                   1012:                /* I shouldn't get here because this call was done before.... */ 
                   1013:                return -ENODEV;
                   1014:        }
                   1015: 
                   1016:        /* is it using AUI or 10BaseT ? */
                   1017:        if ( dev->if_port == 0 ) {
                   1018:                SMC_SELECT_BANK(1);
                   1019:                configuration_register = inw( ioaddr + CONFIG );
                   1020:                if ( configuration_register & CFG_AUI_SELECT )  
                   1021:                        dev->if_port = 2;
                   1022:                else
                   1023:                        dev->if_port = 1;
                   1024:        }
                   1025:        if_string = interfaces[ dev->if_port - 1 ];
                   1026: 
                   1027:        /* now, reset the chip, and put it into a known state */
                   1028:        smc_reset( ioaddr );
                   1029: 
                   1030:        /*
                   1031:         . If dev->irq is 0, then the device has to be banged on to see
                   1032:         . what the IRQ is. 
                   1033:         . 
                   1034:         . This banging doesn't always detect the IRQ, for unknown reasons.
                   1035:         . a workaround is to reset the chip and try again.  
                   1036:         .    
                   1037:         . Interestingly, the DOS packet driver *SETS* the IRQ on the card to
                   1038:         . be what is requested on the command line.   I don't do that, mostly
                   1039:         . because the card that I have uses a non-standard method of accessing
                   1040:         . the IRQs, and because this _should_ work in most configurations.
                   1041:         .
                   1042:         . Specifying an IRQ is done with the assumption that the user knows 
                   1043:         . what (s)he is doing.  No checking is done!!!!
                   1044:         .
                   1045:        */
                   1046: #ifndef NO_AUTOPROBE
                   1047:        if ( dev->irq < 2 ) {
                   1048:                int     trials;
                   1049: 
                   1050:                trials = 3;
                   1051:                while ( trials-- ) { 
                   1052:                        dev->irq = smc_findirq( ioaddr );
                   1053:                        if ( dev->irq ) 
                   1054:                                break;
                   1055:                        /* kick the card and try again */
                   1056:                        smc_reset( ioaddr );
                   1057:                }
                   1058:        } 
                   1059:        if (dev->irq == 0 ) {
                   1060:                printk(CARDNAME": Couldn't autodetect your IRQ. Use irq=xx.\n");
                   1061:                return -ENODEV;
                   1062:        }
                   1063: #else
                   1064:        if (dev->irq == 0 ) {
                   1065:                printk(CARDNAME
                   1066:                ": Autoprobing IRQs is not supported for old kernels.\n");
                   1067:                return -ENODEV;
                   1068:        }
                   1069: #endif
                   1070:        if (dev->irq == 2) {
                   1071:                /* Fixup for users that don't know that IRQ 2 is really IRQ 9,
                   1072:                 * or don't know which one to set.
                   1073:                 */
                   1074:                dev->irq = 9;
                   1075:        }
                   1076: 
                   1077:        /* now, print out the card info, in a short format.. */
                   1078:        
                   1079:        printk(CARDNAME ": %s(r:%d) at %#3x IRQ:%d INTF:%s MEM:%db ",
                   1080:                version_string, revision_register & 0xF, ioaddr, dev->irq, 
                   1081:                if_string, memory );
                   1082:        /*
                   1083:         . Print the Ethernet address 
                   1084:        */
                   1085:        printk("ADDR: ");
                   1086:        for (i = 0; i < 5; i++)
                   1087:                printk("%2.2x:", dev->dev_addr[i] );
                   1088:        printk("%2.2x \n", dev->dev_addr[5] );
                   1089: 
                   1090: 
                   1091:        /* Initialize the private structure. */
                   1092:        if (dev->priv == NULL) {
                   1093:                dev->priv = kmalloc(sizeof(struct smc_local), GFP_KERNEL);
                   1094:                if (dev->priv == NULL)
                   1095:                        return -ENOMEM;
                   1096:        }
                   1097:        /* set the private data to zero by default */
                   1098:        memset(dev->priv, 0, sizeof(struct smc_local));
                   1099: 
                   1100:        /* Fill in the fields of the device structure with ethernet values. */
                   1101:        ether_setup(dev);
                   1102: 
                   1103:        /* Grab the IRQ */
                   1104:        irqval = request_irq(dev->irq, &smc_interrupt, 0, CARDNAME, NULL);
                   1105:        if (irqval) {
                   1106:                  printk(CARDNAME": unable to get IRQ %d (irqval=%d).\n",
                   1107:                dev->irq, irqval);
                   1108:                  return -EAGAIN;
                   1109:        }
                   1110:        irq2dev_map[dev->irq] = dev;
                   1111: 
                   1112:        /* Grab the region so that no one else tries to probe our ioports. */
                   1113:        request_region(ioaddr, SMC_IO_EXTENT, CARDNAME);
                   1114: 
                   1115:        dev->open                       = smc_open;
                   1116:        dev->stop                       = smc_close;
                   1117:        dev->hard_start_xmit            = smc_send_packet;
                   1118:        dev->get_stats                  = smc_query_statistics;
                   1119: #ifdef HAVE_MULTICAST
                   1120:        dev->set_multicast_list         = &smc_set_multicast_list;
                   1121: #endif
                   1122: 
                   1123:        return 0;
                   1124: }
                   1125: 
                   1126: #if SMC_DEBUG > 2
                   1127: static void print_packet( byte * buf, int length ) 
                   1128: { 
                   1129: #if 0
                   1130:        int i;
                   1131:        int remainder;
                   1132:        int lines;
                   1133:        
                   1134:        printk("Packet of length %d \n", length );
                   1135:        lines = length / 16;
                   1136:        remainder = length % 16;
                   1137: 
                   1138:        for ( i = 0; i < lines ; i ++ ) { 
                   1139:                int cur;
                   1140: 
                   1141:                for ( cur = 0; cur < 8; cur ++ ) { 
                   1142:                        byte a, b;
                   1143: 
                   1144:                        a = *(buf ++ );
                   1145:                        b = *(buf ++ );
                   1146:                        printk("%02x%02x ", a, b );
                   1147:                }
                   1148:                printk("\n");
                   1149:        }
                   1150:        for ( i = 0; i < remainder/2 ; i++ ) {
                   1151:                byte a, b;
                   1152: 
                   1153:                a = *(buf ++ );
                   1154:                b = *(buf ++ );
                   1155:                printk("%02x%02x ", a, b );
                   1156:        }
                   1157:        printk("\n");
                   1158: #endif
                   1159: }
                   1160: #endif 
                   1161: 
                   1162: 
                   1163: /*
                   1164:  * Open and Initialize the board
                   1165:  * 
                   1166:  * Set up everything, reset the card, etc ..
                   1167:  *
                   1168:  */
                   1169: static int smc_open(struct device *dev)
                   1170: {
                   1171:        int     ioaddr = dev->base_addr;
                   1172: 
                   1173:        int     i;      /* used to set hw ethernet address */ 
                   1174: 
                   1175:        /* clear out all the junk that was put here before... */
                   1176:        memset(dev->priv, 0, sizeof(struct smc_local));
                   1177: 
                   1178:        dev->tbusy      = 0;
                   1179:        dev->interrupt  = 0;
                   1180:        dev->start      = 1;
                   1181: #ifdef MODULE
                   1182:        MOD_INC_USE_COUNT;
                   1183: #endif
                   1184: 
                   1185:        /* reset the hardware */
                   1186: 
                   1187:        smc_reset( ioaddr );
                   1188:        smc_enable( ioaddr );
                   1189: 
                   1190:        /* Select which interface to use */
                   1191:         
                   1192:        SMC_SELECT_BANK( 1 );
                   1193:        if ( dev->if_port == 1 ) {      
                   1194:                outw( inw( ioaddr + CONFIG ) & ~CFG_AUI_SELECT, 
                   1195:                        ioaddr + CONFIG );                                                      
                   1196:        } 
                   1197:        else if ( dev->if_port == 2 ) { 
                   1198:                outw( inw( ioaddr + CONFIG ) | CFG_AUI_SELECT, 
                   1199:                        ioaddr + CONFIG );                                                      
                   1200:        }
                   1201: 
                   1202:        /*
                   1203:                According to Becker, I have to set the hardware address
                   1204:                at this point, because the (l)user can set it with an
                   1205:                ioctl.  Easily done... 
                   1206:        */
                   1207:        SMC_SELECT_BANK( 1 );
                   1208:        for ( i = 0; i < 6; i += 2 ) { 
                   1209:                word    address;
                   1210:                
                   1211:                address = dev->dev_addr[ i + 1 ] << 8 ;
                   1212:                address  |= dev->dev_addr[ i ];
                   1213:                outw( address, ioaddr + ADDR0 + i );
                   1214:        }
                   1215:        return 0;
                   1216: }
                   1217: 
                   1218: /*--------------------------------------------------------
                   1219:  . Called by the kernel to send a packet out into the void
                   1220:  . of the net.  This routine is largely based on 
                   1221:  . skeleton.c, from Becker.   
                   1222:  .--------------------------------------------------------
                   1223: */
                   1224: static int smc_send_packet(struct sk_buff *skb, struct device *dev)
                   1225: {
                   1226:        if (dev->tbusy) {
                   1227:                /* If we get here, some higher level has decided we are broken.
                   1228:                   There should really be a "kick me" function call instead. */
                   1229:                int tickssofar = jiffies - dev->trans_start;
                   1230:                if (tickssofar < 5)
                   1231:                        return 1;
                   1232:                printk(KERN_WARNING CARDNAME": transmit timed out, %s?\n",
                   1233:                        tx_done(dev) ? "IRQ conflict" : 
                   1234:                        "network cable problem");
                   1235:                /* "kick" the adaptor */
                   1236:                smc_reset( dev->base_addr );
                   1237:                smc_enable( dev->base_addr );
                   1238: 
                   1239:                dev->tbusy = 0;
                   1240:                dev->trans_start = jiffies;
                   1241:                /* clear anything saved */
                   1242:                ((struct smc_local *)dev->priv)->saved_skb = NULL;
                   1243:        }
                   1244: 
                   1245:        /* If some higher layer thinks we've missed an tx-done interrupt
                   1246:           we are passed NULL. Caution: dev_tint() handles the cli()/sti()
                   1247:           itself. */
                   1248:        if (skb == NULL) {
                   1249:                dev_tint(dev);
                   1250:                return 0;
                   1251:        }
                   1252: 
                   1253:        /* Block a timer-based transmit from overlapping.  This could better be
                   1254:           done with atomic_swap(1, dev->tbusy), but set_bit() works as well. */
                   1255:        if (set_bit(0, (void*)&dev->tbusy) != 0) {
                   1256:                printk(KERN_WARNING CARDNAME": Transmitter access conflict.\n");
                   1257:                dev_kfree_skb (skb, FREE_WRITE);
                   1258:        } else {
                   1259:                /* Well, I want to send the packet.. but I don't know 
                   1260:                   if I can send it right now...  */    
                   1261:                return smc_wait_to_send_packet( skb, dev );
                   1262:        }
                   1263:        return 0;
                   1264: }
                   1265: 
                   1266: /*--------------------------------------------------------------------
                   1267:  .
                   1268:  . This is the main routine of the driver, to handle the device when
                   1269:  . it needs some attention.
                   1270:  .
                   1271:  . So:
                   1272:  .   first, save state of the chipset
                   1273:  .   branch off into routines to handle each case, and acknowledge 
                   1274:  .         each to the interrupt register
                   1275:  .   and finally restore state. 
                   1276:  .  
                   1277:  ---------------------------------------------------------------------*/
                   1278: #ifdef REALLY_NEW_KERNEL
                   1279: static void smc_interrupt(int irq, void * dev_id,  struct pt_regs * regs)
                   1280: #else 
                   1281: static void smc_interrupt(int irq, struct pt_regs * regs)
                   1282: #endif 
                   1283: {
                   1284:        struct device *dev      = (struct device *)(irq2dev_map[irq]);
                   1285:        int ioaddr              = dev->base_addr;
                   1286:        struct smc_local *lp    = (struct smc_local *)dev->priv;
                   1287: 
                   1288:        byte    status;
                   1289:        word    card_stats;
                   1290:        byte    mask;
                   1291:        int     timeout;
                   1292:        /* state registers */
                   1293:        word    saved_bank;
                   1294:        word    saved_pointer;
                   1295: 
                   1296: 
                   1297:        
                   1298:        PRINTK3((CARDNAME": SMC interrupt started \n"));
                   1299: 
                   1300:        if (dev == NULL) {
                   1301:                printk(KERN_WARNING  CARDNAME": irq %d for unknown device.\n", 
                   1302:                        irq);
                   1303:                return;
                   1304:        }
                   1305: 
                   1306: /* will Linux let this happen ??  If not, this costs some speed */
                   1307:        if ( dev->interrupt ) { 
                   1308:                printk(KERN_WARNING CARDNAME": interrupt inside interrupt.\n");
                   1309:                return;
                   1310:        }
                   1311:                
                   1312:        dev->interrupt = 1;
                   1313: 
                   1314:        saved_bank = inw( ioaddr + BANK_SELECT );
                   1315: 
                   1316:        SMC_SELECT_BANK(2);
                   1317:        saved_pointer = inw( ioaddr + POINTER );
                   1318: 
                   1319:        mask = inb( ioaddr + INT_MASK );
                   1320:        /* clear all interrupts */
                   1321:        outb( 0, ioaddr + INT_MASK );
                   1322: 
                   1323: 
                   1324:        /* set a timeout value, so I don't stay here forever */
                   1325:        timeout = 4;
                   1326: 
                   1327:        PRINTK2((KERN_WARNING CARDNAME ": MASK IS %x \n", mask ));
                   1328:        do {    
                   1329:                /* read the status flag, and mask it */
                   1330:                status = inb( ioaddr + INTERRUPT ) & mask;
                   1331:                if (!status )
                   1332:                        break;
                   1333: 
                   1334:                PRINTK3((KERN_WARNING CARDNAME
                   1335:                        ": Handling interrupt status %x \n", status )); 
                   1336: 
                   1337:                if (status & IM_RCV_INT) {
                   1338:                        /* Got a packet(s). */
                   1339:                        PRINTK2((KERN_WARNING CARDNAME
                   1340:                                ": Receive Interrupt\n"));
                   1341:                        smc_rcv(dev);
                   1342:                } else if (status & IM_TX_INT ) {
                   1343:                        PRINTK2((KERN_WARNING CARDNAME
                   1344:                                ": TX ERROR handled\n"));
                   1345:                        smc_tx(dev);
                   1346:                        outb(IM_TX_INT, ioaddr + INTERRUPT ); 
                   1347:                } else if (status & IM_TX_EMPTY_INT ) {
                   1348:                        /* update stats */
                   1349:                        SMC_SELECT_BANK( 0 );
                   1350:                        card_stats = inw( ioaddr + COUNTER );
                   1351:                        /* single collisions */
                   1352:                        lp->stats.collisions += card_stats & 0xF;
                   1353:                        card_stats >>= 4;
                   1354:                        /* multiple collisions */
                   1355:                        lp->stats.collisions += card_stats & 0xF;
                   1356: 
                   1357:                        /* these are for when linux supports these statistics */
                   1358: #if 0 
                   1359:                        card_stats >>= 4;
                   1360:                        /* deferred */
                   1361:                        card_stats >>= 4;
                   1362:                        /* excess deferred */
                   1363: #endif 
                   1364:                        SMC_SELECT_BANK( 2 );
                   1365:                        PRINTK2((KERN_WARNING CARDNAME 
                   1366:                                ": TX_BUFFER_EMPTY handled\n"));
                   1367:                        outb( IM_TX_EMPTY_INT, ioaddr + INTERRUPT );
                   1368:                        mask &= ~IM_TX_EMPTY_INT;
                   1369:                        lp->stats.tx_packets += lp->packets_waiting;
                   1370:                        lp->packets_waiting = 0;
                   1371: 
                   1372:                } else if (status & IM_ALLOC_INT ) {
                   1373:                        PRINTK2((KERN_DEBUG CARDNAME
                   1374:                                ": Allocation interrupt \n"));
                   1375:                        /* clear this interrupt so it doesn't happen again */
                   1376:                        mask &= ~IM_ALLOC_INT;
                   1377:                
                   1378:                        smc_hardware_send_packet( dev );
                   1379:                        
                   1380:                        /* enable xmit interrupts based on this */
                   1381:                        mask |= ( IM_TX_EMPTY_INT | IM_TX_INT );
                   1382: 
                   1383:                        /* and let the card send more packets to me */
                   1384:                        mark_bh( NET_BH );
                   1385: 
                   1386:                        PRINTK2((CARDNAME": Handoff done successfully.\n"));    
                   1387:                } else if (status & IM_RX_OVRN_INT ) {
                   1388:                        lp->stats.rx_errors++;
                   1389:                        lp->stats.rx_fifo_errors++;                     
                   1390:                        outb( IM_RX_OVRN_INT, ioaddr + INTERRUPT );
                   1391:                } else if (status & IM_EPH_INT ) {
                   1392:                        PRINTK((CARDNAME ": UNSUPPORTED: EPH INTERRUPT \n"));
                   1393:                } else if (status & IM_ERCV_INT ) {
                   1394:                        PRINTK((CARDNAME ": UNSUPPORTED: ERCV INTERRUPT \n"));
                   1395:                        outb( IM_ERCV_INT, ioaddr + INTERRUPT );
                   1396:                }
                   1397:        } while ( timeout -- ); 
                   1398: 
                   1399:        
                   1400:        /* restore state register */
                   1401:        SMC_SELECT_BANK( 2 );
                   1402:        outb( mask, ioaddr + INT_MASK );
                   1403:        
                   1404:        PRINTK3(( KERN_WARNING CARDNAME ": MASK is now %x \n", mask ));
                   1405:        outw( saved_pointer, ioaddr + POINTER );
                   1406: 
                   1407:        SMC_SELECT_BANK( saved_bank );
                   1408: 
                   1409:        dev->interrupt = 0;
                   1410:        PRINTK3((CARDNAME ": Interrupt done\n"));
                   1411:        return;
                   1412: }
                   1413: 
                   1414: /*-------------------------------------------------------------
                   1415:  .
                   1416:  . smc_rcv -  receive a packet from the card
                   1417:  .
                   1418:  . There is ( at least ) a packet waiting to be read from
                   1419:  . chip-memory.
                   1420:  . 
                   1421:  . o Read the status 
                   1422:  . o If an error, record it  
                   1423:  . o otherwise, read in the packet 
                   1424:  --------------------------------------------------------------
                   1425: */
                   1426: static void smc_rcv(struct device *dev)
                   1427: {
                   1428:        struct smc_local *lp = (struct smc_local *)dev->priv;
                   1429:        int     ioaddr = dev->base_addr;
                   1430:        int     packet_number;
                   1431:        word    status;
                   1432:        word    packet_length; 
                   1433:        
                   1434:        /* assume bank 2 */
                   1435: 
                   1436:        packet_number = inw( ioaddr + FIFO_PORTS );
                   1437: 
                   1438:        if ( packet_number & FP_RXEMPTY ) {
                   1439:                /* we got called , but nothing was on the FIFO */
                   1440:                PRINTK((CARDNAME ": WARNING: smc_rcv with nothing on FIFO. \n"));
                   1441:                /* don't need to restore anything */
                   1442:                return;
                   1443:        }
                   1444:                
                   1445:        /*  start reading from the start of the packet */
                   1446:        outw( PTR_READ | PTR_RCV | PTR_AUTOINC, ioaddr + POINTER );
                   1447: 
                   1448:        /* First two words are status and packet_length */      
                   1449:        status          = inw( ioaddr + DATA_1 );
                   1450:        packet_length   = inw( ioaddr + DATA_1 );
                   1451:        
                   1452:        packet_length &= 0x07ff;  /* mask off top bits */
                   1453: 
                   1454:        PRINTK2(("RCV: STATUS %4x LENGTH %4x\n", status, packet_length ));
                   1455:        /* 
                   1456:         . the packet length contains 3 extra words : 
                   1457:         . status, length, and a extra word with an odd byte .
                   1458:        */
                   1459:        packet_length -= 6; 
                   1460:        
                   1461:        if ( !(status & RS_ERRORS ) ){                  
                   1462:                /* do stuff to make a new packet */
                   1463:                struct sk_buff  * skb;
                   1464:                byte            * data;
                   1465: 
                   1466:                /* read one extra byte */
                   1467:                if ( status & RS_ODDFRAME )     
                   1468:                        packet_length++;        
                   1469: 
                   1470:                /* set multicast stats */ 
                   1471:                if ( status & RS_MULTICAST )
                   1472:                        lp->stats.multicast++;
                   1473: 
                   1474: #ifdef SUPPORT_OLD_KERNEL
                   1475:                skb = alloc_skb( packet_length + 5, GFP_ATOMIC );
                   1476: #else  
                   1477:                skb = dev_alloc_skb( packet_length + 5); 
                   1478: #endif
                   1479: 
                   1480:                if ( skb == NULL ) {    
                   1481:                        printk(KERN_NOTICE CARDNAME
                   1482:                        ": Low memory, packet dropped.\n");
                   1483:                        lp->stats.rx_dropped++;
                   1484:                }
                   1485: 
                   1486:                /* 
                   1487:                 ! This should work without alignment, but it could be
                   1488:                 ! in the worse case 
                   1489:                */
                   1490: #ifndef SUPPORT_OLD_KERNEL
                   1491:                /* TODO: Should I use 32bit alignment here ? */
                   1492:                skb_reserve( skb, 2 );   /* 16 bit alignment */
                   1493: #endif
                   1494: 
                   1495:                skb->dev = dev;
                   1496: #ifdef SUPPORT_OLD_KERNEL
                   1497:                skb->len = packet_length;
                   1498:                data = skb->data;
                   1499: #else
                   1500:                data = skb_put( skb, packet_length);
                   1501: #endif
                   1502: #ifdef USE_32_BIT
                   1503:                /* QUESTION:  Like in the TX routine, do I want                 
                   1504:                   to send the DWORDs or the bytes first, or some
                   1505:                   mixture.  A mixture might improve already slow PIO
                   1506:                   performance  */
                   1507:                PRINTK3((" Reading %d dwords (and %d bytes) \n", 
                   1508:                        packet_length >> 2, packet_length & 3 ));
                   1509:                insl(ioaddr + DATA_1 , data, packet_length >> 2 ); 
                   1510:                /* read the left over bytes */
                   1511:                insb( ioaddr + DATA_1, data + (packet_length & 0xFFFFFC), 
                   1512:                        packet_length & 0x3  );
                   1513: #else
                   1514:                PRINTK3((" Reading %d words and %d byte(s) \n", 
                   1515:                        (packet_length >> 1 ), packet_length & 1 );
                   1516:                if ( packet_length & 1 ) 
                   1517:                        *(data++) = inb( ioaddr + DATA_1 ); 
                   1518:                insw(ioaddr + DATA_1 , data, (packet_length + 1 ) >> 1);
                   1519:                if ( packet_length & 1 ) {
                   1520:                        data += packet_length & ~1;
                   1521:                        *((data++) = inb( ioaddr + DATA_1 ); 
                   1522:                }
                   1523: #endif                 
                   1524: #if    SMC_DEBUG > 2   
                   1525:                        print_packet( data, packet_length );
                   1526: #endif
                   1527: 
                   1528: #ifndef SUPPORT_OLD_KERNEL
                   1529:                skb->protocol = eth_type_trans(skb, dev ); 
                   1530: #endif
                   1531:                netif_rx(skb);
                   1532:                lp->stats.rx_packets++;
                   1533:        } else {
                   1534:                /* error ... */
                   1535:                lp->stats.rx_errors++;
                   1536:                        
                   1537:                if ( status & RS_ALGNERR )  lp->stats.rx_frame_errors++;  
                   1538:                if ( status & (RS_TOOSHORT | RS_TOOLONG ) )  
                   1539:                        lp->stats.rx_length_errors++;
                   1540:                if ( status & RS_BADCRC)        lp->stats.rx_crc_errors++;
                   1541:        }
                   1542:        /*  error or good, tell the card to get rid of this packet */
                   1543:        outw( MC_RELEASE, ioaddr + MMU_CMD );
                   1544: 
                   1545: 
                   1546:        return;
                   1547: }
                   1548: 
                   1549: 
                   1550: /************************************************************************* 
                   1551:  . smc_tx
                   1552:  . 
                   1553:  . Purpose:  Handle a transmit error message.   This will only be called
                   1554:  .   when an error, because of the AUTO_RELEASE mode. 
                   1555:  . 
                   1556:  . Algorithm:
                   1557:  .     Save pointer and packet no
                   1558:  .     Get the packet no from the top of the queue
                   1559:  .     check if it's valid ( if not, is this an error??? )
                   1560:  .     read the status word 
                   1561:  .     record the error
                   1562:  .     ( resend?  Not really, since we don't want old packets around )
                   1563:  .     Restore saved values 
                   1564:  ************************************************************************/ 
                   1565: static void smc_tx( struct device * dev ) 
                   1566: {
                   1567:        int     ioaddr = dev->base_addr;
                   1568:        struct smc_local *lp = (struct smc_local *)dev->priv;
                   1569:        byte saved_packet;
                   1570:        byte packet_no;
                   1571:        word tx_status;
                   1572: 
                   1573: 
                   1574:        /* assume bank 2  */
                   1575: 
                   1576:        saved_packet = inb( ioaddr + PNR_ARR );
                   1577:        packet_no = inw( ioaddr + FIFO_PORTS );
                   1578:        packet_no &= 0x7F;
                   1579: 
                   1580:        /* select this as the packet to read from */
                   1581:        outb( packet_no, ioaddr + PNR_ARR ); 
                   1582:        
                   1583:        /* read the first word from this packet */      
                   1584:        outw( PTR_AUTOINC | PTR_READ, ioaddr + POINTER );
                   1585: 
                   1586:        tx_status = inw( ioaddr + DATA_1 );
                   1587:        PRINTK3((CARDNAME": TX DONE STATUS: %4x \n", tx_status ));
                   1588:        
                   1589:        lp->stats.tx_errors++;
                   1590:        if ( tx_status & TS_LOSTCAR ) lp->stats.tx_carrier_errors++;
                   1591:        if ( tx_status & TS_LATCOL  ) {
                   1592:                printk(KERN_DEBUG CARDNAME 
                   1593:                        ": Late collision occurred on last xmit.\n");
                   1594:                lp->stats.tx_window_errors++;
                   1595:        }
                   1596: #if 0
                   1597:                if ( tx_status & TS_16COL ) { ... }
                   1598: #endif 
                   1599: 
                   1600:        if ( tx_status & TS_SUCCESS ) {  
                   1601:                printk(CARDNAME": Successful packet caused interrupt \n");
                   1602:        } 
                   1603:        /* re-enable transmit */
                   1604:        SMC_SELECT_BANK( 0 );
                   1605:        outw( inw( ioaddr + TCR ) | TCR_ENABLE, ioaddr + TCR );
                   1606: 
                   1607:        /* kill the packet */                   
                   1608:        SMC_SELECT_BANK( 2 );
                   1609:        outw( MC_FREEPKT, ioaddr + MMU_CMD );
                   1610: 
                   1611:        /* one less packet waiting for me */
                   1612:        lp->packets_waiting--;
                   1613:                
                   1614:        outb( saved_packet, ioaddr + PNR_ARR );
                   1615:        return;
                   1616: }
                   1617: 
                   1618: /*----------------------------------------------------
                   1619:  . smc_close
                   1620:  . 
                   1621:  . this makes the board clean up everything that it can
                   1622:  . and not talk to the outside world.   Caused by
                   1623:  . an 'ifconfig ethX down'
                   1624:  .
                   1625:  -----------------------------------------------------*/
                   1626: static int smc_close(struct device *dev)
                   1627: {
                   1628:        dev->tbusy = 1;
                   1629:        dev->start = 0;
                   1630: 
                   1631:        /* clear everything */
                   1632:        smc_shutdown( dev->base_addr );
                   1633: 
                   1634:        /* Update the statistics here. */
                   1635: #ifdef MODULE
                   1636:        MOD_DEC_USE_COUNT;
                   1637: #endif
                   1638: 
                   1639:        return 0;
                   1640: }
                   1641: 
                   1642: /*------------------------------------------------------------
                   1643:  . Get the current statistics. 
                   1644:  . This may be called with the card open or closed. 
                   1645:  .-------------------------------------------------------------*/
                   1646: static struct enet_statistics * smc_query_statistics(struct device *dev) {
                   1647:        struct smc_local *lp = (struct smc_local *)dev->priv;
                   1648: 
                   1649:        return &lp->stats;
                   1650: }
                   1651: 
                   1652: /*-----------------------------------------------------------
                   1653:  . smc_set_multicast_list
                   1654:  .  
                   1655:  . This routine will, depending on the values passed to it,
                   1656:  . either make it accept multicast packets, go into 
                   1657:  . promiscuous mode ( for TCPDUMP and cousins ) or accept
                   1658:  . a select set of multicast packets  
                   1659: */
                   1660: #ifdef SUPPORT_OLD_KERNEL
                   1661: static void smc_set_multicast_list( struct device * dev, 
                   1662:                        int num_addrs, void * addrs )   
                   1663: #else
                   1664: static void smc_set_multicast_list(struct device *dev) 
                   1665: #endif 
                   1666: {
                   1667:        short ioaddr = dev->base_addr;
                   1668: 
                   1669:        SMC_SELECT_BANK(0);
                   1670: #ifdef  SUPPORT_OLD_KERNEL
                   1671:        if ( num_addrs < 0 )  
                   1672: #else
                   1673:        if ( dev->flags & IFF_PROMISC ) 
                   1674: #endif 
                   1675:                outw( inw(ioaddr + RCR ) | RCR_PROMISC, ioaddr + RCR );
                   1676: 
                   1677: /* BUG?  I never disable promiscuous mode if multicasting was turned on. 
                   1678:    Now, I turn off promiscuous mode, but I don't do anything to multicasting
                   1679:    when promiscuous mode is turned on. 
                   1680: */
                   1681: 
                   1682:        /* Here, I am setting this to accept all multicast packets.  
                   1683:           I don't need to zero the multicast table, because the flag is
                   1684:           checked before the table is 
                   1685:        */
                   1686: #ifdef  SUPPORT_OLD_KERNEL 
                   1687:        else if ( num_addrs > 20 )      /* arbitrary constant */
                   1688: #else
                   1689:        else if (dev->flags & IFF_ALLMULTI)  
                   1690: #endif 
                   1691:                outw( inw(ioaddr + RCR ) | RCR_ALMUL, ioaddr + RCR ); 
                   1692: 
                   1693:        /* We just get all multicast packets even if we only want them
                   1694:         . from one source.  This will be changed at some future
                   1695:         . point. */
                   1696: #ifdef  SUPPORT_OLD_KERNEL
                   1697:        else if (num_addrs > 0 ) { 
                   1698: /* the old kernel support will not have hardware multicast support. It would
                   1699:    involve more kludges, and make the multicast setting code even worse.  
                   1700:    Instead, just use the ALMUL method.   This is reasonable, considering that
                   1701:    it is seldom used
                   1702: */
                   1703:                outw( inw( ioaddr + RCR ) & ~RCR_PROMISC, ioaddr + RCR );
                   1704:                outw( inw( ioadddr + RCR ) | RCR_ALMUL, ioadddr + RCR );
                   1705:        }
                   1706: #else
                   1707:        else if (dev->mc_count )  { 
                   1708:                /* support hardware multicasting */
                   1709:                
                   1710:                /* be sure I get rid of flags I might have set */       
                   1711:                outw( inw( ioaddr + RCR ) & ~(RCR_PROMISC | RCR_ALMUL), 
                   1712:                        ioaddr + RCR );
                   1713:                /* NOTE: this has to set the bank, so make sure it is the
                   1714:                   last thing called.  The bank is set to zero at the top */
                   1715:                smc_setmulticast( ioaddr, dev->mc_count, dev->mc_list );
                   1716:        }
                   1717: #endif
                   1718:        else  {
                   1719:                outw( inw( ioaddr + RCR ) & ~(RCR_PROMISC | RCR_ALMUL), 
                   1720:                        ioaddr + RCR );
                   1721: 
                   1722:                /* 
                   1723:                  since I'm disabling all multicast entirely, I need to 
                   1724:                  clear the multicast list 
                   1725:                */
                   1726:                SMC_SELECT_BANK( 3 );
                   1727:                outw( 0, ioaddr + MULTICAST1 ); 
                   1728:                outw( 0, ioaddr + MULTICAST2 ); 
                   1729:                outw( 0, ioaddr + MULTICAST3 ); 
                   1730:                outw( 0, ioaddr + MULTICAST4 ); 
                   1731:        }
                   1732: }
                   1733: 
                   1734: #ifdef MODULE
                   1735: 
                   1736: static char devicename[9] = { 0, };
                   1737: static struct device devSMC9194 = {
                   1738:        devicename, /* device name is inserted by linux/drivers/net/net_init.c */
                   1739:        0, 0, 0, 0,
                   1740:        0, 0,  /* I/O address, IRQ */
                   1741:        0, 0, 0, NULL, smc_init };
                   1742: 
                   1743: int io = 0;
                   1744: int irq = 0;
                   1745: int ifport = 0;
                   1746: 
                   1747: int init_module(void)
                   1748: {
                   1749:        int result;
                   1750: 
                   1751:        if (io == 0)
                   1752:                printk(KERN_WARNING 
                   1753:                CARDNAME": You shouldn't use auto-probing with insmod!\n" );
                   1754: 
                   1755:        /* copy the parameters from insmod into the device structure */
                   1756:        devSMC9194.base_addr = io;
                   1757:        devSMC9194.irq       = irq;
                   1758:        devSMC9194.if_port      = ifport;
                   1759:        if ((result = register_netdev(&devSMC9194)) != 0)
                   1760:                return result;
                   1761: 
                   1762:        return 0;
                   1763: }
                   1764: 
                   1765: void cleanup_module(void)
                   1766: {
                   1767:        /* No need to check MOD_IN_USE, as sys_delete_module() checks. */
                   1768:        unregister_netdev(&devSMC9194);
                   1769: 
                   1770:        free_irq(devSMC9194.irq, NULL );
                   1771:        irq2dev_map[devSMC9194.irq] = NULL;
                   1772:        release_region(devSMC9194.base_addr, SMC_IO_EXTENT);
                   1773: 
                   1774:        if (devSMC9194.priv)
                   1775:                kfree_s(devSMC9194.priv, sizeof(struct smc_local));
                   1776: }
                   1777: 
                   1778: #endif /* MODULE */
                   1779: 

unix.superglobalmegacorp.com

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