]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - drivers/net/ns83820.c
Merge branch 'master' into tk71
[mv-sheeva.git] / drivers / net / ns83820.c
index 5a3488f76b388f49939a373abb1e03079ca07554..a41b2cf4d9176d4629a84aecb05659347e00ea78 100644 (file)
@@ -772,7 +772,7 @@ static int ns83820_setup_rx(struct net_device *ndev)
                phy_intr(ndev);
 
                /* Okay, let it rip */
-               spin_lock_irq(&dev->misc_lock);
+               spin_lock(&dev->misc_lock);
                dev->IMR_cache |= ISR_PHY;
                dev->IMR_cache |= ISR_RXRCMP;
                //dev->IMR_cache |= ISR_RXERR;
@@ -923,7 +923,7 @@ static void rx_irq(struct net_device *ndev)
                        if ((extsts & 0x002a0000) && !(extsts & 0x00540000)) {
                                skb->ip_summed = CHECKSUM_UNNECESSARY;
                        } else {
-                               skb->ip_summed = CHECKSUM_NONE;
+                               skb_checksum_none_assert(skb);
                        }
                        skb->protocol = eth_type_trans(skb, ndev);
 #ifdef NS83820_VLAN_ACCEL_SUPPORT
@@ -1246,7 +1246,6 @@ static int ns83820_get_settings(struct net_device *ndev,
 {
        struct ns83820 *dev = PRIV(ndev);
        u32 cfg, tanar, tbicr;
-       int have_optical = 0;
        int fullduplex   = 0;
 
        /*
@@ -1267,25 +1266,25 @@ static int ns83820_get_settings(struct net_device *ndev,
        tanar = readl(dev->base + TANAR);
        tbicr = readl(dev->base + TBICR);
 
-       if (dev->CFG_cache & CFG_TBI_EN) {
-               /* we have an optical interface */
-               have_optical = 1;
-               fullduplex = (cfg & CFG_DUPSTS) ? 1 : 0;
-
-       } else {
-               /* We have copper */
-               fullduplex = (cfg & CFG_DUPSTS) ? 1 : 0;
-        }
+       fullduplex = (cfg & CFG_DUPSTS) ? 1 : 0;
 
        cmd->supported = SUPPORTED_Autoneg;
 
-       /* we have optical interface */
        if (dev->CFG_cache & CFG_TBI_EN) {
+               /* we have optical interface */
                cmd->supported |= SUPPORTED_1000baseT_Half |
                                        SUPPORTED_1000baseT_Full |
                                        SUPPORTED_FIBRE;
                cmd->port       = PORT_FIBRE;
-       } /* TODO: else copper related  support */
+       } else {
+               /* we have copper */
+               cmd->supported |= SUPPORTED_10baseT_Half |
+                       SUPPORTED_10baseT_Full | SUPPORTED_100baseT_Half |
+                       SUPPORTED_100baseT_Full | SUPPORTED_1000baseT_Half |
+                       SUPPORTED_1000baseT_Full |
+                       SUPPORTED_MII;
+               cmd->port = PORT_MII;
+       }
 
        cmd->duplex = fullduplex ? DUPLEX_FULL : DUPLEX_HALF;
        switch (cfg / CFG_SPDSTS0 & 3) {
@@ -1299,7 +1298,8 @@ static int ns83820_get_settings(struct net_device *ndev,
                cmd->speed = SPEED_10;
                break;
        }
-       cmd->autoneg = (tbicr & TBICR_MR_AN_ENABLE) ? 1: 0;
+       cmd->autoneg = (tbicr & TBICR_MR_AN_ENABLE)
+               ? AUTONEG_ENABLE : AUTONEG_DISABLE;
        return 0;
 }
 
@@ -1405,6 +1405,13 @@ static const struct ethtool_ops ops = {
        .get_link        = ns83820_get_link
 };
 
+static inline void ns83820_disable_interrupts(struct ns83820 *dev)
+{
+       writel(0, dev->base + IMR);
+       writel(0, dev->base + IER);
+       readl(dev->base + IER);
+}
+
 /* this function is called in irq context from the ISR */
 static void ns83820_mib_isr(struct ns83820 *dev)
 {
@@ -1557,10 +1564,7 @@ static int ns83820_stop(struct net_device *ndev)
        /* FIXME: protect against interrupt handler? */
        del_timer_sync(&dev->tx_watchdog);
 
-       /* disable interrupts */
-       writel(0, dev->base + IMR);
-       writel(0, dev->base + IER);
-       readl(dev->base + IER);
+       ns83820_disable_interrupts(dev);
 
        dev->rx_info.up = 0;
        synchronize_irq(dev->pci_dev->irq);
@@ -1984,12 +1988,11 @@ static int __devinit ns83820_init_one(struct pci_dev *pci_dev,
        }
 
        ndev = alloc_etherdev(sizeof(struct ns83820));
-       dev = PRIV(ndev);
-
        err = -ENOMEM;
-       if (!dev)
+       if (!ndev)
                goto out;
 
+       dev = PRIV(ndev);
        dev->ndev = ndev;
 
        spin_lock_init(&dev->rx_info.lock);
@@ -2023,10 +2026,7 @@ static int __devinit ns83820_init_one(struct pci_dev *pci_dev,
                dev->tx_descs, (long)dev->tx_phy_descs,
                dev->rx_info.descs, (long)dev->rx_info.phy_descs);
 
-       /* disable interrupts */
-       writel(0, dev->base + IMR);
-       writel(0, dev->base + IER);
-       readl(dev->base + IER);
+       ns83820_disable_interrupts(dev);
 
        dev->IMR_cache = 0;
 
@@ -2250,9 +2250,7 @@ static int __devinit ns83820_init_one(struct pci_dev *pci_dev,
        return 0;
 
 out_cleanup:
-       writel(0, dev->base + IMR);     /* paranoia */
-       writel(0, dev->base + IER);
-       readl(dev->base + IER);
+       ns83820_disable_interrupts(dev); /* paranoia */
 out_free_irq:
        rtnl_unlock();
        free_irq(pci_dev->irq, ndev);
@@ -2277,9 +2275,7 @@ static void __devexit ns83820_remove_one(struct pci_dev *pci_dev)
        if (!ndev)                      /* paranoia */
                return;
 
-       writel(0, dev->base + IMR);     /* paranoia */
-       writel(0, dev->base + IER);
-       readl(dev->base + IER);
+       ns83820_disable_interrupts(dev); /* paranoia */
 
        unregister_netdev(ndev);
        free_irq(dev->pci_dev->irq, ndev);