linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / drivers / net / sis900.c
index 29ee7ff..f185b4c 100644 (file)
@@ -1,6 +1,6 @@
 /* sis900.c: A SiS 900/7016 PCI Fast Ethernet driver for Linux.
    Copyright 1999 Silicon Integrated System Corporation 
-   Revision:   1.08.10 Apr. 2 2006
+   Revision:   1.08.09 Sep. 19 2005
    
    Modified from the driver which is originally written by Donald Becker.
    
    SiS 7014 Single Chip 100BASE-TX/10BASE-T Physical Layer Solution,
    preliminary Rev. 1.0 Jan. 18, 1998
 
-   Rev 1.08.10 Apr.  2 2006 Daniele Venzano add vlan (jumbo packets) support
    Rev 1.08.09 Sep. 19 2005 Daniele Venzano add Wake on LAN support
    Rev 1.08.08 Jan. 22 2005 Daniele Venzano use netif_msg for debugging messages
-   Rev 1.08.07 Nov.  2 2003 Daniele Venzano <venza@brownhat.org> add suspend/resume support
+   Rev 1.08.07 Nov.  2 2003 Daniele Venzano <webvenza@libero.it> add suspend/resume support
    Rev 1.08.06 Sep. 24 2002 Mufasa Yang bug fix for Tx timeout & add SiS963 support
    Rev 1.08.05 Jun.  6 2002 Mufasa Yang bug fix for read_eeprom & Tx descriptor over-boundary
    Rev 1.08.04 Apr. 25 2002 Mufasa Yang <mufasa@sis.com.tw> added SiS962 support
@@ -78,7 +77,7 @@
 #include "sis900.h"
 
 #define SIS900_MODULE_NAME "sis900"
-#define SIS900_DRV_VERSION "v1.08.10 Apr. 2 2006"
+#define SIS900_DRV_VERSION "v1.08.09 Sep. 19 2005"
 
 static char version[] __devinitdata =
 KERN_INFO "sis900.c: " SIS900_DRV_VERSION "\n";
@@ -101,7 +100,7 @@ enum {
        SIS_900 = 0,
        SIS_7016
 };
-static const char * card_names[] = {
+static char * card_names[] = {
        "SiS 900 PCI Fast Ethernet",
        "SiS 7016 PCI Fast Ethernet"
 };
@@ -116,7 +115,7 @@ MODULE_DEVICE_TABLE (pci, sis900_pci_tbl);
 
 static void sis900_read_mode(struct net_device *net_dev, int *speed, int *duplex);
 
-static const struct mii_chip_info {
+static struct mii_chip_info {
        const char * name;
        u16 phy_id0;
        u16 phy_id1;
@@ -128,12 +127,12 @@ static const struct mii_chip_info {
 } mii_chip_table[] = {
        { "SiS 900 Internal MII PHY",           0x001d, 0x8000, LAN },
        { "SiS 7014 Physical Layer Solution",   0x0016, 0xf830, LAN },
-       { "SiS 900 on Foxconn 661 7MI",         0x0143, 0xBC70, LAN },
        { "Altimata AC101LF PHY",               0x0022, 0x5520, LAN },
        { "ADM 7001 LAN PHY",                   0x002e, 0xcc60, LAN },
        { "AMD 79C901 10BASE-T PHY",            0x0000, 0x6B70, LAN },
        { "AMD 79C901 HomePNA PHY",             0x0000, 0x6B90, HOME},
        { "ICS LAN PHY",                        0x0015, 0xF440, LAN },
+       { "ICS LAN PHY",                        0x0143, 0xBC70, LAN },
        { "NS 83851 PHY",                       0x2000, 0x5C20, MIX },
        { "NS 83847 PHY",                       0x2000, 0x5C30, MIX },
        { "Realtek RTL8201 PHY",                0x0000, 0x8200, LAN },
@@ -403,7 +402,7 @@ static int __devinit sis900_probe(struct pci_dev *pci_dev,
        void *ring_space;
        long ioaddr;
        int i, ret;
-       const char *card_name = card_names[pci_id->driver_data];
+       char *card_name = card_names[pci_id->driver_data];
        const char *dev_name = pci_name(pci_dev);
 
 /* when built into the kernel, we only print version if device is found */
@@ -1013,7 +1012,7 @@ sis900_open(struct net_device *net_dev)
        /* Equalizer workaround Rule */
        sis630_set_eq(net_dev, sis_priv->chipset_rev);
 
-       ret = request_irq(net_dev->irq, &sis900_interrupt, IRQF_SHARED,
+       ret = request_irq(net_dev->irq, &sis900_interrupt, SA_SHIRQ,
                                                net_dev->name, net_dev);
        if (ret)
                return ret;
@@ -1278,7 +1277,7 @@ static void sis900_timer(unsigned long data)
        struct net_device *net_dev = (struct net_device *)data;
        struct sis900_private *sis_priv = net_dev->priv;
        struct mii_phy *mii_phy = sis_priv->mii;
-       static const int next_tick = 5*HZ;
+       static int next_tick = 5*HZ;
        u16 status;
 
        if (!sis_priv->autong_complete){
@@ -1403,11 +1402,6 @@ static void sis900_set_mode (long ioaddr, int speed, int duplex)
                rx_flags |= RxATX;
        }
 
-#if defined(CONFIG_VLAN_8021Q) || defined(CONFIG_VLAN_8021Q_MODULE)
-       /* Can accept Jumbo packet */
-       rx_flags |= RxAJAB;
-#endif
-
        outl (tx_flags, ioaddr + txcfg);
        outl (rx_flags, ioaddr + rxcfg);
 }
@@ -1700,7 +1694,7 @@ static irqreturn_t sis900_interrupt(int irq, void *dev_instance, struct pt_regs
  *
  *     Process receive interrupt events, 
  *     put buffer to higher layer and refill buffer pool
- *     Note: This function is called by interrupt handler,
+ *     Note: This fucntion is called by interrupt handler, 
  *     don't do "too much" work here
  */
 
@@ -1720,26 +1714,18 @@ static int sis900_rx(struct net_device *net_dev)
 
        while (rx_status & OWN) {
                unsigned int rx_size;
-               unsigned int data_size;
 
                if (--rx_work_limit < 0)
                        break;
 
-               data_size = rx_status & DSIZE;
-               rx_size = data_size - CRC_SIZE;
-
-#if defined(CONFIG_VLAN_8021Q) || defined(CONFIG_VLAN_8021Q_MODULE)
-               /* ``TOOLONG'' flag means jumbo packet recived. */
-               if ((rx_status & TOOLONG) && data_size <= MAX_FRAME_SIZE)
-                       rx_status &= (~ ((unsigned int)TOOLONG));
-#endif
+               rx_size = (rx_status & DSIZE) - CRC_SIZE;
 
                if (rx_status & (ABORT|OVERRUN|TOOLONG|RUNT|RXISERR|CRCERR|FAERR)) {
                        /* corrupted packet received */
                        if (netif_msg_rx_err(sis_priv))
                                printk(KERN_DEBUG "%s: Corrupted packet "
-                                      "received, buffer status = 0x%8.8x/%d.\n",
-                                      net_dev->name, rx_status, data_size);
+                                      "received, buffer status = 0x%8.8x.\n",
+                                      net_dev->name, rx_status);
                        sis_priv->stats.rx_errors++;
                        if (rx_status & OVERRUN)
                                sis_priv->stats.rx_over_errors++;
@@ -1855,7 +1841,7 @@ static int sis900_rx(struct net_device *net_dev)
  *
  *     Check for error condition and free socket buffer etc 
  *     schedule for more transmission as needed
- *     Note: This function is called by interrupt handler,
+ *     Note: This fucntion is called by interrupt handler, 
  *     don't do "too much" work here
  */
 
@@ -2298,7 +2284,7 @@ static void set_rx_mode(struct net_device *net_dev)
        int i, table_entries;
        u32 rx_mode;
 
-       /* 635 Hash Table entries = 256(2^16) */
+       /* 635 Hash Table entires = 256(2^16) */
        if((sis_priv->chipset_rev >= SIS635A_900_REV) ||
                        (sis_priv->chipset_rev == SIS900B_900_REV))
                table_entries = 16;