]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - drivers/net/arcnet/arc-rimi.c
Merge remote-tracking branch 'input-current/for-linus'
[karo-tx-linux.git] / drivers / net / arcnet / arc-rimi.c
index b8b4c7ba884f0c2ed9499e1ede4a20ad1df4f732..a07e24970be4216f16df473c80dab72b516ab11c 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Linux ARCnet driver - "RIM I" (entirely mem-mapped) cards
- * 
+ *
  * Written 1994-1999 by Avery Pennarun.
  * Written 1999-2000 by Martin Mares <mj@ucw.cz>.
  * Derived from skeleton.c by Donald Becker.
@@ -24,6 +24,9 @@
  *
  * **********************
  */
+
+#define pr_fmt(fmt) "arcnet:" KBUILD_MODNAME ": " fmt
+
 #include <linux/kernel.h>
 #include <linux/module.h>
 #include <linux/moduleparam.h>
 #include <linux/bootmem.h>
 #include <linux/init.h>
 #include <linux/interrupt.h>
-#include <asm/io.h>
-#include <linux/arcdevice.h>
-
-
-#define VERSION "arcnet: RIM I (entirely mem-mapped) support\n"
+#include <linux/io.h>
 
+#include "arcdevice.h"
+#include "com9026.h"
 
 /* Internal function declarations */
 
@@ -50,66 +51,46 @@ static void arcrimi_setmask(struct net_device *dev, int mask);
 static int arcrimi_reset(struct net_device *dev, int really_reset);
 static void arcrimi_copy_to_card(struct net_device *dev, int bufnum, int offset,
                                 void *buf, int count);
-static void arcrimi_copy_from_card(struct net_device *dev, int bufnum, int offset,
-                                  void *buf, int count);
+static void arcrimi_copy_from_card(struct net_device *dev, int bufnum,
+                                  int offset, void *buf, int count);
 
 /* Handy defines for ARCnet specific stuff */
 
 /* Amount of I/O memory used by the card */
-#define BUFFER_SIZE (512)
-#define MIRROR_SIZE (BUFFER_SIZE*4)
+#define BUFFER_SIZE    (512)
+#define MIRROR_SIZE    (BUFFER_SIZE * 4)
 
-/* COM 9026 controller chip --> ARCnet register addresses */
-#define _INTMASK (ioaddr+0)    /* writable */
-#define _STATUS  (ioaddr+0)    /* readable */
-#define _COMMAND (ioaddr+1)    /* writable, returns random vals on read (?) */
-#define _RESET  (ioaddr+8)     /* software reset (on read) */
-#define _MEMDATA  (ioaddr+12)  /* Data port for IO-mapped memory */
-#define _ADDR_HI  (ioaddr+15)  /* Control registers for said */
-#define _ADDR_LO  (ioaddr+14)
-#define _CONFIG  (ioaddr+2)    /* Configuration register */
-
-#undef ASTATUS
-#undef ACOMMAND
-#undef AINTMASK
-
-#define ASTATUS()      readb(_STATUS)
-#define ACOMMAND(cmd)  writeb((cmd),_COMMAND)
-#define AINTMASK(msk)  writeb((msk),_INTMASK)
-#define SETCONF()      writeb(lp->config,_CONFIG)
-
-
-/*
- * We cannot probe for a RIM I card; one reason is I don't know how to reset
+/* We cannot probe for a RIM I card; one reason is I don't know how to reset
  * them.  In fact, we can't even get their node ID automatically.  So, we
  * need to be passed a specific shmem address, IRQ, and node ID.
  */
 static int __init arcrimi_probe(struct net_device *dev)
 {
-       BUGLVL(D_NORMAL) printk(VERSION);
-       BUGLVL(D_NORMAL) printk("E-mail me if you actually test the RIM I driver, please!\n");
-
-       BUGLVL(D_NORMAL) printk("Given: node %02Xh, shmem %lXh, irq %d\n",
-              dev->dev_addr[0], dev->mem_start, dev->irq);
+       if (BUGLVL(D_NORMAL)) {
+               pr_info("%s\n", "RIM I (entirely mem-mapped) support");
+               pr_info("E-mail me if you actually test the RIM I driver, please!\n");
+               pr_info("Given: node %02Xh, shmem %lXh, irq %d\n",
+                       dev->dev_addr[0], dev->mem_start, dev->irq);
+       }
 
        if (dev->mem_start <= 0 || dev->irq <= 0) {
-               BUGLVL(D_NORMAL) printk("No autoprobe for RIM I; you "
-                      "must specify the shmem and irq!\n");
+               if (BUGLVL(D_NORMAL))
+                       pr_err("No autoprobe for RIM I; you must specify the shmem and irq!\n");
                return -ENODEV;
        }
        if (dev->dev_addr[0] == 0) {
-               BUGLVL(D_NORMAL) printk("You need to specify your card's station "
-                      "ID!\n");
+               if (BUGLVL(D_NORMAL))
+                       pr_err("You need to specify your card's station ID!\n");
                return -ENODEV;
        }
-       /*
-        * Grab the memory region at mem_start for MIRROR_SIZE bytes.
+       /* Grab the memory region at mem_start for MIRROR_SIZE bytes.
         * Later in arcrimi_found() the real size will be determined
         * and this reserve will be released and the correct size
         * will be taken.
         */
        if (!request_mem_region(dev->mem_start, MIRROR_SIZE, "arcnet (90xx)")) {
-               BUGLVL(D_NORMAL) printk("Card memory already allocated\n");
+               if (BUGLVL(D_NORMAL))
+                       pr_notice("Card memory already allocated\n");
                return -ENODEV;
        }
        return arcrimi_found(dev);
@@ -125,7 +106,7 @@ static int check_mirror(unsigned long addr, size_t size)
 
        p = ioremap(addr, size);
        if (p) {
-               if (readb(p) == TESTvalue)
+               if (arcnet_readb(p, COM9026_REG_R_STATUS) == TESTvalue)
                        res = 1;
                else
                        res = 0;
@@ -136,9 +117,8 @@ static int check_mirror(unsigned long addr, size_t size)
        return res;
 }
 
-/*
- * Set up the struct net_device associated with this card.  Called after
- * probing succeeds.
+/* Set up the struct net_device associated with this card.
+ * Called after probing succeeds.
  */
 static int __init arcrimi_found(struct net_device *dev)
 {
@@ -151,7 +131,7 @@ static int __init arcrimi_found(struct net_device *dev)
        p = ioremap(dev->mem_start, MIRROR_SIZE);
        if (!p) {
                release_mem_region(dev->mem_start, MIRROR_SIZE);
-               BUGMSG(D_NORMAL, "Can't ioremap\n");
+               arc_printk(D_NORMAL, dev, "Can't ioremap\n");
                return -ENODEV;
        }
 
@@ -159,13 +139,14 @@ static int __init arcrimi_found(struct net_device *dev)
        if (request_irq(dev->irq, arcnet_interrupt, 0, "arcnet (RIM I)", dev)) {
                iounmap(p);
                release_mem_region(dev->mem_start, MIRROR_SIZE);
-               BUGMSG(D_NORMAL, "Can't get IRQ %d!\n", dev->irq);
+               arc_printk(D_NORMAL, dev, "Can't get IRQ %d!\n", dev->irq);
                return -ENODEV;
        }
 
        shmem = dev->mem_start;
-       writeb(TESTvalue, p);
-       writeb(dev->dev_addr[0], p + 1);        /* actually the node ID */
+       arcnet_writeb(TESTvalue, p, COM9026_REG_W_INTMASK);
+       arcnet_writeb(TESTvalue, p, COM9026_REG_W_COMMAND);
+                                       /* actually the station/node ID */
 
        /* find the real shared memory start/end points, including mirrors */
 
@@ -174,7 +155,7 @@ static int __init arcrimi_found(struct net_device *dev)
         * 2k (or there are no mirrors at all) but on some, it's 4k.
         */
        mirror_size = MIRROR_SIZE;
-       if (readb(p) == TESTvalue &&
+       if (arcnet_readb(p, COM9026_REG_R_STATUS) == TESTvalue &&
            check_mirror(shmem - MIRROR_SIZE, MIRROR_SIZE) == 0 &&
            check_mirror(shmem - 2 * MIRROR_SIZE, MIRROR_SIZE) == 1)
                mirror_size = 2 * MIRROR_SIZE;
@@ -204,8 +185,7 @@ static int __init arcrimi_found(struct net_device *dev)
        lp->hw.copy_to_card = arcrimi_copy_to_card;
        lp->hw.copy_from_card = arcrimi_copy_from_card;
 
-       /*
-        * re-reserve the memory region - arcrimi_probe() alloced this reqion
+       /* re-reserve the memory region - arcrimi_probe() alloced this reqion
         * but didn't know the real size.  Free that region and then re-get
         * with the correct size.  There is a VERY slim chance this could
         * fail.
@@ -215,24 +195,25 @@ static int __init arcrimi_found(struct net_device *dev)
        if (!request_mem_region(dev->mem_start,
                                dev->mem_end - dev->mem_start + 1,
                                "arcnet (90xx)")) {
-               BUGMSG(D_NORMAL, "Card memory already allocated\n");
+               arc_printk(D_NORMAL, dev, "Card memory already allocated\n");
                goto err_free_irq;
        }
 
-       lp->mem_start = ioremap(dev->mem_start, dev->mem_end - dev->mem_start + 1);
+       lp->mem_start = ioremap(dev->mem_start,
+                               dev->mem_end - dev->mem_start + 1);
        if (!lp->mem_start) {
-               BUGMSG(D_NORMAL, "Can't remap device memory!\n");
+               arc_printk(D_NORMAL, dev, "Can't remap device memory!\n");
                goto err_release_mem;
        }
 
        /* get and check the station ID from offset 1 in shmem */
-       dev->dev_addr[0] = readb(lp->mem_start + 1);
+       dev->dev_addr[0] = arcnet_readb(lp->mem_start, COM9026_REG_R_STATION);
 
-       BUGMSG(D_NORMAL, "ARCnet RIM I: station %02Xh found at IRQ %d, "
-              "ShMem %lXh (%ld*%d bytes).\n",
-              dev->dev_addr[0],
-              dev->irq, dev->mem_start,
-        (dev->mem_end - dev->mem_start + 1) / mirror_size, mirror_size);
+       arc_printk(D_NORMAL, dev, "ARCnet RIM I: station %02Xh found at IRQ %d, ShMem %lXh (%ld*%d bytes)\n",
+                  dev->dev_addr[0],
+                  dev->irq, dev->mem_start,
+                  (dev->mem_end - dev->mem_start + 1) / mirror_size,
+                  mirror_size);
 
        err = register_netdev(dev);
        if (err)
@@ -249,9 +230,7 @@ err_free_irq:
        return -EIO;
 }
 
-
-/*
- * Do a hardware reset on the card, and set up necessary registers.
+/* Do a hardware reset on the card, and set up necessary registers.
  *
  * This should be called as little as possible, because it disrupts the
  * token on the network (causes a RECON) and requires a significant delay.
@@ -263,17 +242,19 @@ static int arcrimi_reset(struct net_device *dev, int really_reset)
        struct arcnet_local *lp = netdev_priv(dev);
        void __iomem *ioaddr = lp->mem_start + 0x800;
 
-       BUGMSG(D_INIT, "Resetting %s (status=%02Xh)\n", dev->name, ASTATUS());
+       arc_printk(D_INIT, dev, "Resetting %s (status=%02Xh)\n",
+                  dev->name, arcnet_readb(ioaddr, COM9026_REG_R_STATUS));
 
        if (really_reset) {
-               writeb(TESTvalue, ioaddr - 0x800);      /* fake reset */
+               arcnet_writeb(TESTvalue, ioaddr, -0x800);       /* fake reset */
                return 0;
        }
-       ACOMMAND(CFLAGScmd | RESETclear);       /* clear flags & end reset */
-       ACOMMAND(CFLAGScmd | CONFIGclear);
+       /* clear flags & end reset */
+       arcnet_writeb(CFLAGScmd | RESETclear, ioaddr, COM9026_REG_W_COMMAND);
+       arcnet_writeb(CFLAGScmd | CONFIGclear, ioaddr, COM9026_REG_W_COMMAND);
 
        /* enable extended (512-byte) packets */
-       ACOMMAND(CONFIGcmd | EXTconf);
+       arcnet_writeb(CONFIGcmd | EXTconf, ioaddr, COM9026_REG_W_COMMAND);
 
        /* done!  return success. */
        return 0;
@@ -284,7 +265,7 @@ static void arcrimi_setmask(struct net_device *dev, int mask)
        struct arcnet_local *lp = netdev_priv(dev);
        void __iomem *ioaddr = lp->mem_start + 0x800;
 
-       AINTMASK(mask);
+       arcnet_writeb(mask, ioaddr, COM9026_REG_W_INTMASK);
 }
 
 static int arcrimi_status(struct net_device *dev)
@@ -292,7 +273,7 @@ static int arcrimi_status(struct net_device *dev)
        struct arcnet_local *lp = netdev_priv(dev);
        void __iomem *ioaddr = lp->mem_start + 0x800;
 
-       return ASTATUS();
+       return arcnet_readb(ioaddr, COM9026_REG_R_STATUS);
 }
 
 static void arcrimi_command(struct net_device *dev, int cmd)
@@ -300,7 +281,7 @@ static void arcrimi_command(struct net_device *dev, int cmd)
        struct arcnet_local *lp = netdev_priv(dev);
        void __iomem *ioaddr = lp->mem_start + 0x800;
 
-       ACOMMAND(cmd);
+       arcnet_writeb(cmd, ioaddr, COM9026_REG_W_COMMAND);
 }
 
 static void arcrimi_copy_to_card(struct net_device *dev, int bufnum, int offset,
@@ -308,16 +289,17 @@ static void arcrimi_copy_to_card(struct net_device *dev, int bufnum, int offset,
 {
        struct arcnet_local *lp = netdev_priv(dev);
        void __iomem *memaddr = lp->mem_start + 0x800 + bufnum * 512 + offset;
-       TIME("memcpy_toio", count, memcpy_toio(memaddr, buf, count));
-}
 
+       TIME(dev, "memcpy_toio", count, memcpy_toio(memaddr, buf, count));
+}
 
-static void arcrimi_copy_from_card(struct net_device *dev, int bufnum, int offset,
-                                  void *buf, int count)
+static void arcrimi_copy_from_card(struct net_device *dev, int bufnum,
+                                  int offset, void *buf, int count)
 {
        struct arcnet_local *lp = netdev_priv(dev);
        void __iomem *memaddr = lp->mem_start + 0x800 + bufnum * 512 + offset;
-       TIME("memcpy_fromio", count, memcpy_fromio(buf, memaddr, count));
+
+       TIME(dev, "memcpy_fromio", count, memcpy_fromio(buf, memaddr, count));
 }
 
 static int node;
@@ -374,12 +356,13 @@ static void __exit arc_rimi_exit(void)
 static int __init arcrimi_setup(char *s)
 {
        int ints[8];
+
        s = get_options(s, 8, ints);
        if (!ints[0])
                return 1;
        switch (ints[0]) {
        default:                /* ERROR */
-               printk("arcrimi: Too many arguments.\n");
+               pr_err("Too many arguments\n");
        case 3:         /* Node ID */
                node = ints[3];
        case 2:         /* IRQ */