[PATCH 2/6] arcnet: com20020: Add IO cb for configure rw

2018-06-11 Thread Andrea Greco
From: Andrea Greco 

Add IO callback. No logic change are intended.
Now every driver implementation could specify IO callback.
Default IO callback is provided.

Signed-off-by: Andrea Greco 
---
 drivers/net/arcnet/arcdevice.h|   4 ++
 drivers/net/arcnet/com20020-isa.c |  21 --
 drivers/net/arcnet/com20020-pci.c |  11 +++-
 drivers/net/arcnet/com20020.c | 134 --
 drivers/net/arcnet/com20020.h |   9 ++-
 drivers/net/arcnet/com20020_cs.c  |  23 +--
 6 files changed, 134 insertions(+), 68 deletions(-)

diff --git a/drivers/net/arcnet/arcdevice.h b/drivers/net/arcnet/arcdevice.h
index d09b2b46ab63..cb7afadac5f6 100644
--- a/drivers/net/arcnet/arcdevice.h
+++ b/drivers/net/arcnet/arcdevice.h
@@ -324,6 +324,10 @@ struct arcnet_local {
void (*close)(struct net_device *dev);
void (*datatrigger) (struct net_device * dev, int enable);
void (*recontrigger) (struct net_device * dev, int enable);
+   unsigned int (*arc_inb)(int addr, int offset);
+   void (*arc_outb)(int value, int addr, int offset);
+   void (*arc_insb)(int addr, int offset, void *buff, int cnt);
+   void (*arc_outsb)(int addr, int offset, void *buff, int cnt);
 
void (*copy_to_card)(struct net_device *dev, int bufnum,
 int offset, void *buf, int count);
diff --git a/drivers/net/arcnet/com20020-isa.c 
b/drivers/net/arcnet/com20020-isa.c
index 38fa60ddaf2e..757586de5d08 100644
--- a/drivers/net/arcnet/com20020-isa.c
+++ b/drivers/net/arcnet/com20020-isa.c
@@ -67,7 +67,7 @@ static int __init com20020isa_probe(struct net_device *dev)
   ioaddr, ioaddr + ARCNET_TOTAL_SIZE - 1);
return -ENXIO;
}
-   if (arcnet_inb(ioaddr, COM20020_REG_R_STATUS) == 0xFF) {
+   if (lp->hw.arc_inb(ioaddr, COM20020_REG_R_STATUS) == 0xFF) {
arc_printk(D_NORMAL, dev, "IO address %x empty\n", ioaddr);
err = -ENODEV;
goto out;
@@ -83,20 +83,21 @@ static int __init com20020isa_probe(struct net_device *dev)
 * we tell it to start receiving.
 */
arc_printk(D_INIT_REASONS, dev, "intmask was %02Xh\n",
-  arcnet_inb(ioaddr, COM20020_REG_R_STATUS));
-   arcnet_outb(0, ioaddr, COM20020_REG_W_INTMASK);
+  lp->hw.arc_inb(ioaddr, COM20020_REG_R_STATUS));
+   lp->hw.arc_outb(0, ioaddr, COM20020_REG_W_INTMASK);
airqmask = probe_irq_on();
-   arcnet_outb(NORXflag, ioaddr, COM20020_REG_W_INTMASK);
+   lp->hw.arc_outb(NORXflag, ioaddr, COM20020_REG_W_INTMASK);
udelay(1);
-   arcnet_outb(0, ioaddr, COM20020_REG_W_INTMASK);
+   lp->hw.arc_outb(0, ioaddr, COM20020_REG_W_INTMASK);
dev->irq = probe_irq_off(airqmask);
 
if ((int)dev->irq <= 0) {
arc_printk(D_INIT_REASONS, dev, "Autoprobe IRQ failed 
first time\n");
airqmask = probe_irq_on();
-   arcnet_outb(NORXflag, ioaddr, COM20020_REG_W_INTMASK);
+   lp->hw.arc_outb(NORXflag, ioaddr,
+   COM20020_REG_W_INTMASK);
udelay(5);
-   arcnet_outb(0, ioaddr, COM20020_REG_W_INTMASK);
+   lp->hw.arc_outb(0, ioaddr, COM20020_REG_W_INTMASK);
dev->irq = probe_irq_off(airqmask);
if ((int)dev->irq <= 0) {
arc_printk(D_NORMAL, dev, "Autoprobe IRQ 
failed.\n");
@@ -156,6 +157,12 @@ static int __init com20020_init(void)
dev->netdev_ops = _netdev_ops;
 
lp = netdev_priv(dev);
+
+   lp->hw.arc_inb = com20020_def_arc_inb;
+   lp->hw.arc_outb = com20020_def_arc_outb;
+   lp->hw.arc_insb = com20020_def_arc_insb;
+   lp->hw.arc_outsb = com20020_def_arc_outsb;
+
lp->backplane = backplane;
lp->clockp = clockp & 7;
lp->clockm = clockm & 3;
diff --git a/drivers/net/arcnet/com20020-pci.c 
b/drivers/net/arcnet/com20020-pci.c
index eb7f76753c9c..dcf12e5cf889 100644
--- a/drivers/net/arcnet/com20020-pci.c
+++ b/drivers/net/arcnet/com20020-pci.c
@@ -181,12 +181,17 @@ static int com20020pci_probe(struct pci_dev *pdev,
goto out_port;
}
 
+   lp->hw.arc_inb = com20020_def_arc_inb;
+   lp->hw.arc_outb = com20020_def_arc_outb;
+   lp->hw.arc_insb = com20020_def_arc_insb;
+   lp->hw.arc_outsb = com20020_def_arc_outsb;
+
/* Dummy access after Reset
 * ARCNET controller needs
 * this access to detect bustype
 */
-   arcnet_outb(0x00, ioaddr, COM20020_REG_W_COMMAND);
-   

[PATCH 2/6] arcnet: com20020: Add IO cb for configure rw

2018-06-11 Thread Andrea Greco
From: Andrea Greco 

Add IO callback. No logic change are intended.
Now every driver implementation could specify IO callback.
Default IO callback is provided.

Signed-off-by: Andrea Greco 
---
 drivers/net/arcnet/arcdevice.h|   4 ++
 drivers/net/arcnet/com20020-isa.c |  21 --
 drivers/net/arcnet/com20020-pci.c |  11 +++-
 drivers/net/arcnet/com20020.c | 134 --
 drivers/net/arcnet/com20020.h |   9 ++-
 drivers/net/arcnet/com20020_cs.c  |  23 +--
 6 files changed, 134 insertions(+), 68 deletions(-)

diff --git a/drivers/net/arcnet/arcdevice.h b/drivers/net/arcnet/arcdevice.h
index d09b2b46ab63..cb7afadac5f6 100644
--- a/drivers/net/arcnet/arcdevice.h
+++ b/drivers/net/arcnet/arcdevice.h
@@ -324,6 +324,10 @@ struct arcnet_local {
void (*close)(struct net_device *dev);
void (*datatrigger) (struct net_device * dev, int enable);
void (*recontrigger) (struct net_device * dev, int enable);
+   unsigned int (*arc_inb)(int addr, int offset);
+   void (*arc_outb)(int value, int addr, int offset);
+   void (*arc_insb)(int addr, int offset, void *buff, int cnt);
+   void (*arc_outsb)(int addr, int offset, void *buff, int cnt);
 
void (*copy_to_card)(struct net_device *dev, int bufnum,
 int offset, void *buf, int count);
diff --git a/drivers/net/arcnet/com20020-isa.c 
b/drivers/net/arcnet/com20020-isa.c
index 38fa60ddaf2e..757586de5d08 100644
--- a/drivers/net/arcnet/com20020-isa.c
+++ b/drivers/net/arcnet/com20020-isa.c
@@ -67,7 +67,7 @@ static int __init com20020isa_probe(struct net_device *dev)
   ioaddr, ioaddr + ARCNET_TOTAL_SIZE - 1);
return -ENXIO;
}
-   if (arcnet_inb(ioaddr, COM20020_REG_R_STATUS) == 0xFF) {
+   if (lp->hw.arc_inb(ioaddr, COM20020_REG_R_STATUS) == 0xFF) {
arc_printk(D_NORMAL, dev, "IO address %x empty\n", ioaddr);
err = -ENODEV;
goto out;
@@ -83,20 +83,21 @@ static int __init com20020isa_probe(struct net_device *dev)
 * we tell it to start receiving.
 */
arc_printk(D_INIT_REASONS, dev, "intmask was %02Xh\n",
-  arcnet_inb(ioaddr, COM20020_REG_R_STATUS));
-   arcnet_outb(0, ioaddr, COM20020_REG_W_INTMASK);
+  lp->hw.arc_inb(ioaddr, COM20020_REG_R_STATUS));
+   lp->hw.arc_outb(0, ioaddr, COM20020_REG_W_INTMASK);
airqmask = probe_irq_on();
-   arcnet_outb(NORXflag, ioaddr, COM20020_REG_W_INTMASK);
+   lp->hw.arc_outb(NORXflag, ioaddr, COM20020_REG_W_INTMASK);
udelay(1);
-   arcnet_outb(0, ioaddr, COM20020_REG_W_INTMASK);
+   lp->hw.arc_outb(0, ioaddr, COM20020_REG_W_INTMASK);
dev->irq = probe_irq_off(airqmask);
 
if ((int)dev->irq <= 0) {
arc_printk(D_INIT_REASONS, dev, "Autoprobe IRQ failed 
first time\n");
airqmask = probe_irq_on();
-   arcnet_outb(NORXflag, ioaddr, COM20020_REG_W_INTMASK);
+   lp->hw.arc_outb(NORXflag, ioaddr,
+   COM20020_REG_W_INTMASK);
udelay(5);
-   arcnet_outb(0, ioaddr, COM20020_REG_W_INTMASK);
+   lp->hw.arc_outb(0, ioaddr, COM20020_REG_W_INTMASK);
dev->irq = probe_irq_off(airqmask);
if ((int)dev->irq <= 0) {
arc_printk(D_NORMAL, dev, "Autoprobe IRQ 
failed.\n");
@@ -156,6 +157,12 @@ static int __init com20020_init(void)
dev->netdev_ops = _netdev_ops;
 
lp = netdev_priv(dev);
+
+   lp->hw.arc_inb = com20020_def_arc_inb;
+   lp->hw.arc_outb = com20020_def_arc_outb;
+   lp->hw.arc_insb = com20020_def_arc_insb;
+   lp->hw.arc_outsb = com20020_def_arc_outsb;
+
lp->backplane = backplane;
lp->clockp = clockp & 7;
lp->clockm = clockm & 3;
diff --git a/drivers/net/arcnet/com20020-pci.c 
b/drivers/net/arcnet/com20020-pci.c
index eb7f76753c9c..dcf12e5cf889 100644
--- a/drivers/net/arcnet/com20020-pci.c
+++ b/drivers/net/arcnet/com20020-pci.c
@@ -181,12 +181,17 @@ static int com20020pci_probe(struct pci_dev *pdev,
goto out_port;
}
 
+   lp->hw.arc_inb = com20020_def_arc_inb;
+   lp->hw.arc_outb = com20020_def_arc_outb;
+   lp->hw.arc_insb = com20020_def_arc_insb;
+   lp->hw.arc_outsb = com20020_def_arc_outsb;
+
/* Dummy access after Reset
 * ARCNET controller needs
 * this access to detect bustype
 */
-   arcnet_outb(0x00, ioaddr, COM20020_REG_W_COMMAND);
-