[PATCH 2/6] arcnet: com20020: Add IO cb for configure rw
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
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); -