]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/net/meth.c
sis190: RTNL and flush_scheduled_work deadlock
[linux-2.6-omap-h63xx.git] / drivers / net / meth.c
index d644bf3a933c7d4d7e199107063556f4073ca7f7..7e69ca6edd91a0a443c4f9f1349d9381ed0f4eb1 100644 (file)
@@ -11,7 +11,6 @@
 #include <linux/module.h>
 #include <linux/init.h>
 
-#include <linux/sched.h>
 #include <linux/kernel.h> /* printk() */
 #include <linux/delay.h>
 #include <linux/slab.h>
@@ -33,7 +32,6 @@
 #include <asm/ip32/ip32_ints.h>
 
 #include <asm/io.h>
-#include <asm/checksum.h>
 #include <asm/scatterlist.h>
 #include <linux/dma-mapping.h>
 
@@ -92,8 +90,8 @@ struct meth_private {
 };
 
 static void meth_tx_timeout(struct net_device *dev);
-static irqreturn_t meth_interrupt(int irq, void *dev_id, struct pt_regs *pregs);
-        
+static irqreturn_t meth_interrupt(int irq, void *dev_id);
+
 /* global, initialized in ip32-setup.c */
 char o2meth_eaddr[8]={0,0,0,0,0,0,0,0};
 
@@ -172,7 +170,7 @@ static int mdio_probe(struct meth_private *priv)
 
 static void meth_check_link(struct net_device *dev)
 {
-       struct meth_private *priv = (struct meth_private *) dev->priv;
+       struct meth_private *priv = netdev_priv(dev);
        unsigned long mii_advertising = mdio_read(priv, 4);
        unsigned long mii_partner = mdio_read(priv, 5);
        unsigned long negotiated = mii_advertising & mii_partner;
@@ -232,7 +230,7 @@ static int meth_init_rx_ring(struct meth_private *priv)
                skb_reserve(priv->rx_skbs[i],METH_RX_HEAD);
                priv->rx_ring[i]=(rx_packet*)(priv->rx_skbs[i]->head);
                /* I'll need to re-sync it after each RX */
-               priv->rx_ring_dmas[i] = 
+               priv->rx_ring_dmas[i] =
                        dma_map_single(NULL, priv->rx_ring[i],
                                       METH_RX_BUFF_SIZE, DMA_FROM_DEVICE);
                mace->eth.rx_fifo = priv->rx_ring_dmas[i];
@@ -270,7 +268,7 @@ static void meth_free_rx_ring(struct meth_private *priv)
 
 int meth_reset(struct net_device *dev)
 {
-       struct meth_private *priv = (struct meth_private *) dev->priv;
+       struct meth_private *priv = netdev_priv(dev);
 
        /* Reset card */
        mace->eth.mac_ctrl = SGI_MAC_RESET;
@@ -281,7 +279,7 @@ int meth_reset(struct net_device *dev)
        /* Load ethernet address */
        load_eaddr(dev);
        /* Should load some "errata", but later */
-       
+
        /* Check for device */
        if (mdio_probe(priv) < 0) {
                DPRINTK("Unable to find PHY\n");
@@ -312,7 +310,7 @@ int meth_reset(struct net_device *dev)
  */
 static int meth_open(struct net_device *dev)
 {
-       struct meth_private *priv = dev->priv;
+       struct meth_private *priv = netdev_priv(dev);
        int ret;
 
        priv->phy_addr = -1;    /* No PHY is known yet... */
@@ -356,7 +354,7 @@ out_free_tx_ring:
 
 static int meth_release(struct net_device *dev)
 {
-       struct meth_private *priv = dev->priv;
+       struct meth_private *priv = netdev_priv(dev);
 
        DPRINTK("Stopping queue\n");
        netif_stop_queue(dev); /* can't transmit any more */
@@ -378,7 +376,7 @@ static void meth_rx(struct net_device* dev, unsigned long int_status)
 {
        struct sk_buff *skb;
        unsigned long status;
-       struct meth_private *priv = (struct meth_private *) dev->priv;
+       struct meth_private *priv = netdev_priv(dev);
        unsigned long fifo_rptr = (int_status & METH_INT_RX_RPTR_MASK) >> 8;
 
        spin_lock(&priv->meth_lock);
@@ -452,7 +450,7 @@ static void meth_rx(struct net_device* dev, unsigned long int_status)
                }
                priv->rx_ring[priv->rx_write] = (rx_packet*)skb->head;
                priv->rx_ring[priv->rx_write]->status.raw = 0;
-               priv->rx_ring_dmas[priv->rx_write] = 
+               priv->rx_ring_dmas[priv->rx_write] =
                        dma_map_single(NULL, priv->rx_ring[priv->rx_write],
                                       METH_RX_BUFF_SIZE, DMA_FROM_DEVICE);
                mace->eth.rx_fifo = priv->rx_ring_dmas[priv->rx_write];
@@ -468,14 +466,14 @@ static void meth_rx(struct net_device* dev, unsigned long int_status)
 
 static int meth_tx_full(struct net_device *dev)
 {
-       struct meth_private *priv = (struct meth_private *) dev->priv;
+       struct meth_private *priv = netdev_priv(dev);
 
        return (priv->tx_count >= TX_RING_ENTRIES - 1);
 }
 
 static void meth_tx_cleanup(struct net_device* dev, unsigned long int_status)
 {
-       struct meth_private *priv = dev->priv;
+       struct meth_private *priv = netdev_priv(dev);
        unsigned long status;
        struct sk_buff *skb;
        unsigned long rptr = (int_status&TX_INFO_RPTR) >> 16;
@@ -538,7 +536,7 @@ static void meth_tx_cleanup(struct net_device* dev, unsigned long int_status)
 
 static void meth_error(struct net_device* dev, unsigned status)
 {
-       struct meth_private *priv = (struct meth_private *) dev->priv;
+       struct meth_private *priv = netdev_priv(dev);
 
        printk(KERN_WARNING "meth: error status: 0x%08x\n",status);
        /* check for errors too... */
@@ -555,7 +553,7 @@ static void meth_error(struct net_device* dev, unsigned status)
                printk(KERN_WARNING "meth: Rx underflow\n");
                spin_lock(&priv->meth_lock);
                mace->eth.int_stat = METH_INT_RX_UNDERFLOW;
-               /* more underflow interrupts will be delivered, 
+               /* more underflow interrupts will be delivered,
                 * effectively throwing us into an infinite loop.
                 *  Thus I stop processing Rx in this case. */
                priv->dma_ctrl &= ~METH_DMA_RX_EN;
@@ -569,10 +567,10 @@ static void meth_error(struct net_device* dev, unsigned status)
 /*
  * The typical interrupt entry point
  */
-static irqreturn_t meth_interrupt(int irq, void *dev_id, struct pt_regs *pregs)
+static irqreturn_t meth_interrupt(int irq, void *dev_id)
 {
        struct net_device *dev = (struct net_device *)dev_id;
-       struct meth_private *priv = (struct meth_private *) dev->priv;
+       struct meth_private *priv = netdev_priv(dev);
        unsigned long status;
 
        status = mace->eth.int_stat;
@@ -697,7 +695,7 @@ static void meth_add_to_tx_ring(struct meth_private *priv, struct sk_buff *skb)
  */
 static int meth_tx(struct sk_buff *skb, struct net_device *dev)
 {
-       struct meth_private *priv = (struct meth_private *) dev->priv;
+       struct meth_private *priv = netdev_priv(dev);
        unsigned long flags;
 
        spin_lock_irqsave(&priv->meth_lock, flags);
@@ -728,7 +726,7 @@ static int meth_tx(struct sk_buff *skb, struct net_device *dev)
  */
 static void meth_tx_timeout(struct net_device *dev)
 {
-       struct meth_private *priv = (struct meth_private *) dev->priv;
+       struct meth_private *priv = netdev_priv(dev);
        unsigned long flags;
 
        printk(KERN_WARNING "%s: transmit timed out\n", dev->name);
@@ -761,12 +759,12 @@ static void meth_tx_timeout(struct net_device *dev)
 }
 
 /*
- * Ioctl commands 
+ * Ioctl commands
  */
 static int meth_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
 {
        /* XXX Not yet implemented */
-       switch(cmd) { 
+       switch(cmd) {
        case SIOCGMIIPHY:
        case SIOCGMIIREG:
        case SIOCSMIIREG:
@@ -780,7 +778,7 @@ static int meth_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
  */
 static struct net_device_stats *meth_stats(struct net_device *dev)
 {
-       struct meth_private *priv = (struct meth_private *) dev->priv;
+       struct meth_private *priv = netdev_priv(dev);
        return &priv->stats;
 }
 
@@ -809,7 +807,7 @@ static struct net_device *meth_init(void)
        dev->irq             = MACE_ETHERNET_IRQ;
        dev->base_addr       = (unsigned long)&mace->eth;
 
-       priv = (struct meth_private *) dev->priv;
+       priv = netdev_priv(dev);
        spin_lock_init(&priv->meth_lock);
 
        ret = register_netdev(dev);