fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git] / drivers / net / mace.c
index fab5607..2907cfb 100644 (file)
@@ -5,7 +5,6 @@
  * Copyright (C) 1996 Paul Mackerras.
  */
 
-#include <linux/config.h>
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/netdevice.h>
@@ -40,10 +39,10 @@ static int port_aaui = -1;
 #define TX_DMA_ERR     0x80
 
 struct mace_data {
-    volatile struct mace *mace;
-    volatile struct dbdma_regs *tx_dma;
+    volatile struct mace __iomem *mace;
+    volatile struct dbdma_regs __iomem *tx_dma;
     int tx_dma_intr;
-    volatile struct dbdma_regs *rx_dma;
+    volatile struct dbdma_regs __iomem *rx_dma;
     int rx_dma_intr;
     volatile struct dbdma_cmd *tx_cmds;        /* xmit dma command list */
     volatile struct dbdma_cmd *rx_cmds;        /* recv dma command list */
@@ -83,12 +82,12 @@ static struct net_device_stats *mace_stats(struct net_device *dev);
 static void mace_set_multicast(struct net_device *dev);
 static void mace_reset(struct net_device *dev);
 static int mace_set_address(struct net_device *dev, void *addr);
-static irqreturn_t mace_interrupt(int irq, void *dev_id, struct pt_regs *regs);
-static irqreturn_t mace_txdma_intr(int irq, void *dev_id, struct pt_regs *regs);
-static irqreturn_t mace_rxdma_intr(int irq, void *dev_id, struct pt_regs *regs);
+static irqreturn_t mace_interrupt(int irq, void *dev_id);
+static irqreturn_t mace_txdma_intr(int irq, void *dev_id);
+static irqreturn_t mace_rxdma_intr(int irq, void *dev_id);
 static void mace_set_timeout(struct net_device *dev);
 static void mace_tx_timeout(unsigned long data);
-static inline void dbdma_reset(volatile struct dbdma_regs *dma);
+static inline void dbdma_reset(volatile struct dbdma_regs __iomem *dma);
 static inline void mace_clean_rings(struct mace_data *mp);
 static void __mace_set_address(struct net_device *dev, void *addr);
 
@@ -109,12 +108,12 @@ bitrev(int b)
 }
 
 
-static int __devinit mace_probe(struct macio_dev *mdev, const struct of_match *match)
+static int __devinit mace_probe(struct macio_dev *mdev, const struct of_device_id *match)
 {
        struct device_node *mace = macio_get_of_node(mdev);
        struct net_device *dev;
        struct mace_data *mp;
-       unsigned char *addr;
+       const unsigned char *addr;
        int j, rev, rc = -EBUSY;
 
        if (macio_resource_count(mdev) != 3 || macio_irq_count(mdev) != 3) {
@@ -164,7 +163,7 @@ static int __devinit mace_probe(struct macio_dev *mdev, const struct of_match *m
        macio_set_drvdata(mdev, dev);
 
        dev->base_addr = macio_resource_start(mdev, 0);
-       mp->mace = (volatile struct mace *)ioremap(dev->base_addr, 0x1000);
+       mp->mace = ioremap(dev->base_addr, 0x1000);
        if (mp->mace == NULL) {
                printk(KERN_ERR "MACE: can't map IO resources !\n");
                rc = -ENOMEM;
@@ -178,13 +177,12 @@ static int __devinit mace_probe(struct macio_dev *mdev, const struct of_match *m
        }
        mp->chipid = (in_8(&mp->mace->chipid_hi) << 8) |
                        in_8(&mp->mace->chipid_lo);
-               
+
 
        mp = (struct mace_data *) dev->priv;
        mp->maccc = ENXMT | ENRCV;
 
-       mp->tx_dma = (volatile struct dbdma_regs *)
-               ioremap(macio_resource_start(mdev, 1), 0x1000);
+       mp->tx_dma = ioremap(macio_resource_start(mdev, 1), 0x1000);
        if (mp->tx_dma == NULL) {
                printk(KERN_ERR "MACE: can't map TX DMA resources !\n");
                rc = -ENOMEM;
@@ -192,8 +190,7 @@ static int __devinit mace_probe(struct macio_dev *mdev, const struct of_match *m
        }
        mp->tx_dma_intr = macio_irq(mdev, 1);
 
-       mp->rx_dma = (volatile struct dbdma_regs *)
-               ioremap(macio_resource_start(mdev, 2), 0x1000);
+       mp->rx_dma = ioremap(macio_resource_start(mdev, 2), 0x1000);
        if (mp->rx_dma == NULL) {
                printk(KERN_ERR "MACE: can't map RX DMA resources !\n");
                rc = -ENOMEM;
@@ -222,7 +219,7 @@ static int __devinit mace_probe(struct macio_dev *mdev, const struct of_match *m
                        mp->port_aaui = 1;
 #else
                        mp->port_aaui = 0;
-#endif                 
+#endif
                }
        }
 
@@ -245,12 +242,12 @@ static int __devinit mace_probe(struct macio_dev *mdev, const struct of_match *m
        }
        rc = request_irq(mp->tx_dma_intr, mace_txdma_intr, 0, "MACE-txdma", dev);
        if (rc) {
-               printk(KERN_ERR "MACE: can't get irq %d\n", mace->intrs[1].line);
+               printk(KERN_ERR "MACE: can't get irq %d\n", mp->tx_dma_intr);
                goto err_free_irq;
        }
        rc = request_irq(mp->rx_dma_intr, mace_rxdma_intr, 0, "MACE-rxdma", dev);
        if (rc) {
-               printk(KERN_ERR "MACE: can't get irq %d\n", mace->intrs[2].line);
+               printk(KERN_ERR "MACE: can't get irq %d\n", mp->rx_dma_intr);
                goto err_free_tx_irq;
        }
 
@@ -267,7 +264,7 @@ static int __devinit mace_probe(struct macio_dev *mdev, const struct of_match *m
        printk(", chip revision %d.%d\n", mp->chipid >> 8, mp->chipid & 0xff);
 
        return 0;
+
  err_free_rx_irq:
        free_irq(macio_irq(mdev, 2), dev);
  err_free_tx_irq:
@@ -275,11 +272,11 @@ static int __devinit mace_probe(struct macio_dev *mdev, const struct of_match *m
  err_free_irq:
        free_irq(macio_irq(mdev, 0), dev);
  err_unmap_rx_dma:
-       iounmap((void*)mp->rx_dma);
+       iounmap(mp->rx_dma);
  err_unmap_tx_dma:
-       iounmap((void*)mp->tx_dma);
+       iounmap(mp->tx_dma);
  err_unmap_io:
-       iounmap((void*)mp->mace);
+       iounmap(mp->mace);
  err_free:
        free_netdev(dev);
  err_release:
@@ -305,9 +302,9 @@ static int __devexit mace_remove(struct macio_dev *mdev)
        free_irq(mp->tx_dma_intr, dev);
        free_irq(mp->rx_dma_intr, dev);
 
-       iounmap((void*)mp->rx_dma);
-       iounmap((void*)mp->tx_dma);
-       iounmap((void*)mp->mace);
+       iounmap(mp->rx_dma);
+       iounmap(mp->tx_dma);
+       iounmap(mp->mace);
 
        free_netdev(dev);
 
@@ -316,7 +313,7 @@ static int __devexit mace_remove(struct macio_dev *mdev)
        return 0;
 }
 
-static void dbdma_reset(volatile struct dbdma_regs *dma)
+static void dbdma_reset(volatile struct dbdma_regs __iomem *dma)
 {
     int i;
 
@@ -334,7 +331,7 @@ static void dbdma_reset(volatile struct dbdma_regs *dma)
 static void mace_reset(struct net_device *dev)
 {
     struct mace_data *mp = (struct mace_data *) dev->priv;
-    volatile struct mace *mb = mp->mace;
+    volatile struct mace __iomem *mb = mp->mace;
     int i;
 
     /* soft-reset the chip */
@@ -389,7 +386,7 @@ static void mace_reset(struct net_device *dev)
 static void __mace_set_address(struct net_device *dev, void *addr)
 {
     struct mace_data *mp = (struct mace_data *) dev->priv;
-    volatile struct mace *mb = mp->mace;
+    volatile struct mace __iomem *mb = mp->mace;
     unsigned char *p = addr;
     int i;
 
@@ -410,7 +407,7 @@ static void __mace_set_address(struct net_device *dev, void *addr)
 static int mace_set_address(struct net_device *dev, void *addr)
 {
     struct mace_data *mp = (struct mace_data *) dev->priv;
-    volatile struct mace *mb = mp->mace;
+    volatile struct mace __iomem *mb = mp->mace;
     unsigned long flags;
 
     spin_lock_irqsave(&mp->lock, flags);
@@ -445,9 +442,9 @@ static inline void mace_clean_rings(struct mace_data *mp)
 static int mace_open(struct net_device *dev)
 {
     struct mace_data *mp = (struct mace_data *) dev->priv;
-    volatile struct mace *mb = mp->mace;
-    volatile struct dbdma_regs *rd = mp->rx_dma;
-    volatile struct dbdma_regs *td = mp->tx_dma;
+    volatile struct mace __iomem *mb = mp->mace;
+    volatile struct dbdma_regs __iomem *rd = mp->rx_dma;
+    volatile struct dbdma_regs __iomem *td = mp->tx_dma;
     volatile struct dbdma_cmd *cp;
     int i;
     struct sk_buff *skb;
@@ -515,9 +512,9 @@ static int mace_open(struct net_device *dev)
 static int mace_close(struct net_device *dev)
 {
     struct mace_data *mp = (struct mace_data *) dev->priv;
-    volatile struct mace *mb = mp->mace;
-    volatile struct dbdma_regs *rd = mp->rx_dma;
-    volatile struct dbdma_regs *td = mp->tx_dma;
+    volatile struct mace __iomem *mb = mp->mace;
+    volatile struct dbdma_regs __iomem *rd = mp->rx_dma;
+    volatile struct dbdma_regs __iomem *td = mp->tx_dma;
 
     /* disable rx and tx */
     out_8(&mb->maccc, 0);
@@ -548,7 +545,7 @@ static inline void mace_set_timeout(struct net_device *dev)
 static int mace_xmit_start(struct sk_buff *skb, struct net_device *dev)
 {
     struct mace_data *mp = (struct mace_data *) dev->priv;
-    volatile struct dbdma_regs *td = mp->tx_dma;
+    volatile struct dbdma_regs __iomem *td = mp->tx_dma;
     volatile struct dbdma_cmd *cp, *np;
     unsigned long flags;
     int fill, next, len;
@@ -610,7 +607,7 @@ static struct net_device_stats *mace_stats(struct net_device *dev)
 static void mace_set_multicast(struct net_device *dev)
 {
     struct mace_data *mp = (struct mace_data *) dev->priv;
-    volatile struct mace *mb = mp->mace;
+    volatile struct mace __iomem *mb = mp->mace;
     int i, j;
     u32 crc;
     unsigned long flags;
@@ -662,7 +659,7 @@ static void mace_set_multicast(struct net_device *dev)
 
 static void mace_handle_misc_intrs(struct mace_data *mp, int intr)
 {
-    volatile struct mace *mb = mp->mace;
+    volatile struct mace __iomem *mb = mp->mace;
     static int mace_babbles, mace_jabbers;
 
     if (intr & MPCO)
@@ -681,12 +678,12 @@ static void mace_handle_misc_intrs(struct mace_data *mp, int intr)
            printk(KERN_DEBUG "mace: jabbering transceiver\n");
 }
 
-static irqreturn_t mace_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t mace_interrupt(int irq, void *dev_id)
 {
     struct net_device *dev = (struct net_device *) dev_id;
     struct mace_data *mp = (struct mace_data *) dev->priv;
-    volatile struct mace *mb = mp->mace;
-    volatile struct dbdma_regs *td = mp->tx_dma;
+    volatile struct mace __iomem *mb = mp->mace;
+    volatile struct dbdma_regs __iomem *td = mp->tx_dma;
     volatile struct dbdma_cmd *cp;
     int intr, fs, i, stat, x;
     int xcount, dstat;
@@ -831,9 +828,9 @@ static void mace_tx_timeout(unsigned long data)
 {
     struct net_device *dev = (struct net_device *) data;
     struct mace_data *mp = (struct mace_data *) dev->priv;
-    volatile struct mace *mb = mp->mace;
-    volatile struct dbdma_regs *td = mp->tx_dma;
-    volatile struct dbdma_regs *rd = mp->rx_dma;
+    volatile struct mace __iomem *mb = mp->mace;
+    volatile struct dbdma_regs __iomem *td = mp->tx_dma;
+    volatile struct dbdma_regs __iomem *rd = mp->rx_dma;
     volatile struct dbdma_cmd *cp;
     unsigned long flags;
     int i;
@@ -893,16 +890,16 @@ out:
     spin_unlock_irqrestore(&mp->lock, flags);
 }
 
-static irqreturn_t mace_txdma_intr(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t mace_txdma_intr(int irq, void *dev_id)
 {
        return IRQ_HANDLED;
 }
 
-static irqreturn_t mace_rxdma_intr(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t mace_rxdma_intr(int irq, void *dev_id)
 {
     struct net_device *dev = (struct net_device *) dev_id;
     struct mace_data *mp = (struct mace_data *) dev->priv;
-    volatile struct dbdma_regs *rd = mp->rx_dma;
+    volatile struct dbdma_regs __iomem *rd = mp->rx_dma;
     volatile struct dbdma_cmd *cp, *np;
     int i, nb, stat, next;
     struct sk_buff *skb;
@@ -1011,17 +1008,16 @@ static irqreturn_t mace_rxdma_intr(int irq, void *dev_id, struct pt_regs *regs)
     return IRQ_HANDLED;
 }
 
-static struct of_match mace_match[] = 
+static struct of_device_id mace_match[] =
 {
        {
        .name           = "mace",
-       .type           = OF_ANY_MATCH,
-       .compatible     = OF_ANY_MATCH
        },
        {},
 };
+MODULE_DEVICE_TABLE (of, mace_match);
 
-static struct macio_driver mace_driver = 
+static struct macio_driver mace_driver =
 {
        .name           = "mace",
        .match_table    = mace_match,
@@ -1039,15 +1035,13 @@ static void __exit mace_cleanup(void)
 {
        macio_unregister_driver(&mace_driver);
 
-       if (dummy_buf) {
-               kfree(dummy_buf);
-               dummy_buf = NULL;
-       }
+       kfree(dummy_buf);
+       dummy_buf = NULL;
 }
 
 MODULE_AUTHOR("Paul Mackerras");
 MODULE_DESCRIPTION("PowerMac MACE driver.");
-MODULE_PARM(port_aaui, "i");
+module_param(port_aaui, int, 0);
 MODULE_PARM_DESC(port_aaui, "MACE uses AAUI port (0-1)");
 MODULE_LICENSE("GPL");