[PATCH] s2io bogus memset
[sfrench/cifs-2.6.git] / drivers / net / smc911x.c
index 0b15290df278c5a0eb859a7a49fe370415e3dd75..880d9fdd7c670b6a31ff2e8d3282ba65b7cb40ab 100644 (file)
@@ -55,8 +55,6 @@ static const char version[] =
                         )
 #endif
 
-
-#include <linux/config.h>
 #include <linux/init.h>
 #include <linux/module.h>
 #include <linux/kernel.h>
@@ -150,6 +148,8 @@ struct smc911x_local {
        int tx_throttle;
        spinlock_t lock;
 
+       struct net_device *netdev;
+
 #ifdef SMC_USE_DMA
        /* DMA needs the physical address of the chip */
        u_long physaddr;
@@ -950,10 +950,11 @@ static void smc911x_phy_check_media(struct net_device *dev, int init)
  * of autonegotiation.)  If the RPC ANEG bit is cleared, the selection
  * is controlled by the RPC SPEED and RPC DPLX bits.
  */
-static void smc911x_phy_configure(void *data)
+static void smc911x_phy_configure(struct work_struct *work)
 {
-       struct net_device *dev = data;
-       struct smc911x_local *lp = netdev_priv(dev);
+       struct smc911x_local *lp = container_of(work, struct smc911x_local,
+                                               phy_configure);
+       struct net_device *dev = lp->netdev;
        unsigned long ioaddr = dev->base_addr;
        int phyaddr = lp->mii.phy_id;
        int my_phy_caps; /* My PHY capabilities */
@@ -1076,7 +1077,7 @@ static void smc911x_phy_interrupt(struct net_device *dev)
  * This is the main routine of the driver, to handle the device when
  * it needs some attention.
  */
-static irqreturn_t smc911x_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t smc911x_interrupt(int irq, void *dev_id)
 {
        struct net_device *dev = dev_id;
        unsigned long ioaddr = dev->base_addr;
@@ -1253,7 +1254,7 @@ static irqreturn_t smc911x_interrupt(int irq, void *dev_id, struct pt_regs *regs
 
 #ifdef SMC_USE_DMA
 static void
-smc911x_tx_dma_irq(int dma, void *data, struct pt_regs *regs)
+smc911x_tx_dma_irq(int dma, void *data)
 {
        struct net_device *dev = (struct net_device *)data;
        struct smc911x_local *lp = netdev_priv(dev);
@@ -1287,7 +1288,7 @@ smc911x_tx_dma_irq(int dma, void *data, struct pt_regs *regs)
                "%s: TX DMA irq completed\n", dev->name);
 }
 static void
-smc911x_rx_dma_irq(int dma, void *data, struct pt_regs *regs)
+smc911x_rx_dma_irq(int dma, void *data)
 {
        struct net_device *dev = (struct net_device *)data;
        unsigned long ioaddr = dev->base_addr;
@@ -1333,7 +1334,7 @@ smc911x_rx_dma_irq(int dma, void *data, struct pt_regs *regs)
 static void smc911x_poll_controller(struct net_device *dev)
 {
        disable_irq(dev->irq);
-       smc911x_interrupt(dev->irq, dev, NULL);
+       smc911x_interrupt(dev->irq, dev);
        enable_irq(dev->irq);
 }
 #endif
@@ -1497,6 +1498,8 @@ static void smc911x_set_multicast_list(struct net_device *dev)
 static int
 smc911x_open(struct net_device *dev)
 {
+       struct smc911x_local *lp = netdev_priv(dev);
+
        DBG(SMC_DEBUG_FUNC, "%s: --> %s\n", dev->name, __FUNCTION__);
 
        /*
@@ -1513,7 +1516,7 @@ smc911x_open(struct net_device *dev)
        smc911x_reset(dev);
 
        /* Configure the PHY, initialize the link state */
-       smc911x_phy_configure(dev);
+       smc911x_phy_configure(&lp->phy_configure);
 
        /* Turn on Tx + Rx */
        smc911x_enable(dev);
@@ -1823,7 +1826,7 @@ static int smc911x_ethtool_geteeprom_len(struct net_device *dev)
         return SMC911X_EEPROM_LEN;
 }
 
-static struct ethtool_ops smc911x_ethtool_ops = {
+static const struct ethtool_ops smc911x_ethtool_ops = {
        .get_settings    = smc911x_ethtool_getsettings,
        .set_settings    = smc911x_ethtool_setsettings,
        .get_drvinfo     = smc911x_ethtool_getdrvinfo,
@@ -2062,7 +2065,7 @@ static int __init smc911x_probe(struct net_device *dev, unsigned long ioaddr)
        dev->poll_controller = smc911x_poll_controller;
 #endif
 
-       INIT_WORK(&lp->phy_configure, smc911x_phy_configure, dev);
+       INIT_WORK(&lp->phy_configure, smc911x_phy_configure);
        lp->mii.phy_id_mask = 0x1f;
        lp->mii.reg_num_mask = 0x1f;
        lp->mii.force_media = 0;
@@ -2156,6 +2159,7 @@ static int smc911x_drv_probe(struct platform_device *pdev)
 {
        struct net_device *ndev;
        struct resource *res;
+       struct smc911x_local *lp;
        unsigned int *addr;
        int ret;
 
@@ -2185,6 +2189,8 @@ static int smc911x_drv_probe(struct platform_device *pdev)
 
        ndev->dma = (unsigned char)-1;
        ndev->irq = platform_get_irq(pdev, 0);
+       lp = netdev_priv(ndev);
+       lp->netdev = ndev;
 
        addr = ioremap(res->start, SMC911X_IO_EXTENT);
        if (!addr) {
@@ -2206,7 +2212,6 @@ out:
        }
 #ifdef SMC_USE_DMA
        else {
-               struct smc911x_local *lp = netdev_priv(ndev);
                lp->physaddr = res->start;
                lp->dev = &pdev->dev;
        }
@@ -2277,7 +2282,7 @@ static int smc911x_drv_resume(struct platform_device *dev)
                        smc911x_reset(ndev);
                        smc911x_enable(ndev);
                        if (lp->phy_type != 0)
-                               smc911x_phy_configure(ndev);
+                               smc911x_phy_configure(&lp->phy_configure);
                        netif_device_attach(ndev);
                }
        }