mirror of
https://github.com/fail0verflow/switch-linux.git
synced 2025-05-04 02:34:21 -04:00
[ARM] ecard: add ecardm_iomap() / ecardm_iounmap()
Add devres ecardm_iomap() and ecardm_iounmap() for Acorn expansion cards. Convert all expansion card drivers to use them. Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
parent
c7b87f3d50
commit
10bdaaa0fa
13 changed files with 53 additions and 118 deletions
|
@ -41,11 +41,11 @@
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/mutex.h>
|
#include <linux/mutex.h>
|
||||||
#include <linux/kthread.h>
|
#include <linux/kthread.h>
|
||||||
|
#include <linux/io.h>
|
||||||
|
|
||||||
#include <asm/dma.h>
|
#include <asm/dma.h>
|
||||||
#include <asm/ecard.h>
|
#include <asm/ecard.h>
|
||||||
#include <asm/hardware.h>
|
#include <asm/hardware.h>
|
||||||
#include <asm/io.h>
|
|
||||||
#include <asm/irq.h>
|
#include <asm/irq.h>
|
||||||
#include <asm/mmu_context.h>
|
#include <asm/mmu_context.h>
|
||||||
#include <asm/mach/irq.h>
|
#include <asm/mach/irq.h>
|
||||||
|
@ -966,6 +966,23 @@ void ecard_setirq(struct expansion_card *ec, const struct expansion_card_ops *op
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(ecard_setirq);
|
EXPORT_SYMBOL(ecard_setirq);
|
||||||
|
|
||||||
|
void __iomem *ecardm_iomap(struct expansion_card *ec, unsigned int res,
|
||||||
|
unsigned long offset, unsigned long maxsize)
|
||||||
|
{
|
||||||
|
unsigned long start = ecard_resource_start(ec, res);
|
||||||
|
unsigned long end = ecard_resource_end(ec, res);
|
||||||
|
|
||||||
|
if (offset > (end - start))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
start += offset;
|
||||||
|
if (maxsize && end - start > maxsize)
|
||||||
|
end = start + maxsize;
|
||||||
|
|
||||||
|
return devm_ioremap(&ec->dev, start, end - start);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(ecardm_iomap);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Probe for an expansion card.
|
* Probe for an expansion card.
|
||||||
*
|
*
|
||||||
|
|
|
@ -425,8 +425,7 @@ pata_icside_register_v5(struct ata_probe_ent *ae, struct expansion_card *ec)
|
||||||
struct pata_icside_state *state = ae->private_data;
|
struct pata_icside_state *state = ae->private_data;
|
||||||
void __iomem *base;
|
void __iomem *base;
|
||||||
|
|
||||||
base = ioremap(ecard_resource_start(ec, ECARD_RES_MEMC),
|
base = ecardm_iomap(info->ec, ECARD_RES_MEMC, 0, 0);
|
||||||
ecard_resource_len(ec, ECARD_RES_MEMC));
|
|
||||||
if (!base)
|
if (!base)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
|
@ -453,24 +452,17 @@ pata_icside_register_v6(struct ata_probe_ent *ae, struct expansion_card *ec)
|
||||||
struct pata_icside_state *state = ae->private_data;
|
struct pata_icside_state *state = ae->private_data;
|
||||||
void __iomem *ioc_base, *easi_base;
|
void __iomem *ioc_base, *easi_base;
|
||||||
unsigned int sel = 0;
|
unsigned int sel = 0;
|
||||||
int ret;
|
|
||||||
|
|
||||||
ioc_base = ioremap(ecard_resource_start(ec, ECARD_RES_IOCFAST),
|
ioc_base = ecardm_iomap(ec, ECARD_RES_IOCFAST, 0, 0);
|
||||||
ecard_resource_len(ec, ECARD_RES_IOCFAST));
|
if (!ioc_base)
|
||||||
if (!ioc_base) {
|
return -ENOMEM;
|
||||||
ret = -ENOMEM;
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
easi_base = ioc_base;
|
easi_base = ioc_base;
|
||||||
|
|
||||||
if (ecard_resource_flags(ec, ECARD_RES_EASI)) {
|
if (ecard_resource_flags(ec, ECARD_RES_EASI)) {
|
||||||
easi_base = ioremap(ecard_resource_start(ec, ECARD_RES_EASI),
|
easi_base = ecardm_iomap(ec, ECARD_RES_EASI, 0, 0);
|
||||||
ecard_resource_len(ec, ECARD_RES_EASI));
|
if (!easi_base)
|
||||||
if (!easi_base) {
|
return -ENOMEM;
|
||||||
ret = -ENOMEM;
|
|
||||||
goto unmap_slot;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Enable access to the EASI region.
|
* Enable access to the EASI region.
|
||||||
|
@ -507,10 +499,6 @@ pata_icside_register_v6(struct ata_probe_ent *ae, struct expansion_card *ec)
|
||||||
|
|
||||||
return icside_dma_init(ae, ec);
|
return icside_dma_init(ae, ec);
|
||||||
|
|
||||||
unmap_slot:
|
|
||||||
iounmap(ioc_base);
|
|
||||||
out:
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __devinit
|
static int __devinit
|
||||||
|
@ -534,8 +522,7 @@ pata_icside_probe(struct expansion_card *ec, const struct ecard_id *id)
|
||||||
state->type = ICS_TYPE_NOTYPE;
|
state->type = ICS_TYPE_NOTYPE;
|
||||||
state->dma = NO_DMA;
|
state->dma = NO_DMA;
|
||||||
|
|
||||||
idmem = ioremap(ecard_resource_start(ec, ECARD_RES_IOCFAST),
|
idmem = ecardm_iomap(ec, ECARD_RES_IOCFAST, 0, 0);
|
||||||
ecard_resource_len(ec, ECARD_RES_IOCFAST));
|
|
||||||
if (idmem) {
|
if (idmem) {
|
||||||
unsigned int type;
|
unsigned int type;
|
||||||
|
|
||||||
|
@ -543,7 +530,7 @@ pata_icside_probe(struct expansion_card *ec, const struct ecard_id *id)
|
||||||
type |= (readb(idmem + ICS_IDENT_OFFSET + 4) & 1) << 1;
|
type |= (readb(idmem + ICS_IDENT_OFFSET + 4) & 1) << 1;
|
||||||
type |= (readb(idmem + ICS_IDENT_OFFSET + 8) & 1) << 2;
|
type |= (readb(idmem + ICS_IDENT_OFFSET + 8) & 1) << 2;
|
||||||
type |= (readb(idmem + ICS_IDENT_OFFSET + 12) & 1) << 3;
|
type |= (readb(idmem + ICS_IDENT_OFFSET + 12) & 1) << 3;
|
||||||
iounmap(idmem);
|
ecardm_iounmap(ec, idmem);
|
||||||
|
|
||||||
state->type = type;
|
state->type = type;
|
||||||
}
|
}
|
||||||
|
@ -638,10 +625,6 @@ static void __devexit pata_icside_remove(struct expansion_card *ec)
|
||||||
*/
|
*/
|
||||||
if (state->dma != NO_DMA)
|
if (state->dma != NO_DMA)
|
||||||
free_dma(state->dma);
|
free_dma(state->dma);
|
||||||
if (state->ioc_base)
|
|
||||||
iounmap(state->ioc_base);
|
|
||||||
if (state->ioc_base != state->irq_port)
|
|
||||||
iounmap(state->irq_port);
|
|
||||||
|
|
||||||
kfree(state);
|
kfree(state);
|
||||||
ecard_release_resources(ec);
|
ecard_release_resources(ec);
|
||||||
|
|
|
@ -565,8 +565,7 @@ icside_register_v5(struct icside_state *state, struct expansion_card *ec)
|
||||||
ide_hwif_t *hwif;
|
ide_hwif_t *hwif;
|
||||||
void __iomem *base;
|
void __iomem *base;
|
||||||
|
|
||||||
base = ioremap(ecard_resource_start(ec, ECARD_RES_MEMC),
|
base = ecardm_iomap(ec, ECARD_RES_MEMC, 0, 0);
|
||||||
ecard_resource_len(ec, ECARD_RES_MEMC));
|
|
||||||
if (!base)
|
if (!base)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
|
@ -583,10 +582,8 @@ icside_register_v5(struct icside_state *state, struct expansion_card *ec)
|
||||||
icside_irqdisable_arcin_v5(ec, 0);
|
icside_irqdisable_arcin_v5(ec, 0);
|
||||||
|
|
||||||
hwif = icside_setup(base, &icside_cardinfo_v5, ec);
|
hwif = icside_setup(base, &icside_cardinfo_v5, ec);
|
||||||
if (!hwif) {
|
if (!hwif)
|
||||||
iounmap(base);
|
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
|
||||||
|
|
||||||
state->hwif[0] = hwif;
|
state->hwif[0] = hwif;
|
||||||
|
|
||||||
|
@ -605,8 +602,7 @@ icside_register_v6(struct icside_state *state, struct expansion_card *ec)
|
||||||
unsigned int sel = 0;
|
unsigned int sel = 0;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ioc_base = ioremap(ecard_resource_start(ec, ECARD_RES_IOCFAST),
|
ioc_base = ecardm_iomap(ec, ECARD_RES_IOCFAST, 0, 0);
|
||||||
ecard_resource_len(ec, ECARD_RES_IOCFAST));
|
|
||||||
if (!ioc_base) {
|
if (!ioc_base) {
|
||||||
ret = -ENOMEM;
|
ret = -ENOMEM;
|
||||||
goto out;
|
goto out;
|
||||||
|
@ -615,11 +611,10 @@ icside_register_v6(struct icside_state *state, struct expansion_card *ec)
|
||||||
easi_base = ioc_base;
|
easi_base = ioc_base;
|
||||||
|
|
||||||
if (ecard_resource_flags(ec, ECARD_RES_EASI)) {
|
if (ecard_resource_flags(ec, ECARD_RES_EASI)) {
|
||||||
easi_base = ioremap(ecard_resource_start(ec, ECARD_RES_EASI),
|
easi_base = ecardm_iomap(ec, ECARD_RES_EASI, 0, 0);
|
||||||
ecard_resource_len(ec, ECARD_RES_EASI));
|
|
||||||
if (!easi_base) {
|
if (!easi_base) {
|
||||||
ret = -ENOMEM;
|
ret = -ENOMEM;
|
||||||
goto unmap_slot;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -648,7 +643,7 @@ icside_register_v6(struct icside_state *state, struct expansion_card *ec)
|
||||||
|
|
||||||
if (!hwif || !mate) {
|
if (!hwif || !mate) {
|
||||||
ret = -ENODEV;
|
ret = -ENODEV;
|
||||||
goto unmap_port;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
state->hwif[0] = hwif;
|
state->hwif[0] = hwif;
|
||||||
|
@ -685,11 +680,6 @@ icside_register_v6(struct icside_state *state, struct expansion_card *ec)
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
unmap_port:
|
|
||||||
if (easi_base != ioc_base)
|
|
||||||
iounmap(easi_base);
|
|
||||||
unmap_slot:
|
|
||||||
iounmap(ioc_base);
|
|
||||||
out:
|
out:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -715,8 +705,7 @@ icside_probe(struct expansion_card *ec, const struct ecard_id *id)
|
||||||
state->type = ICS_TYPE_NOTYPE;
|
state->type = ICS_TYPE_NOTYPE;
|
||||||
state->dev = &ec->dev;
|
state->dev = &ec->dev;
|
||||||
|
|
||||||
idmem = ioremap(ecard_resource_start(ec, ECARD_RES_IOCFAST),
|
idmem = ecardm_iomap(ec, ECARD_RES_IOCFAST, 0, 0);
|
||||||
ecard_resource_len(ec, ECARD_RES_IOCFAST));
|
|
||||||
if (idmem) {
|
if (idmem) {
|
||||||
unsigned int type;
|
unsigned int type;
|
||||||
|
|
||||||
|
@ -724,7 +713,7 @@ icside_probe(struct expansion_card *ec, const struct ecard_id *id)
|
||||||
type |= (readb(idmem + ICS_IDENT_OFFSET + 4) & 1) << 1;
|
type |= (readb(idmem + ICS_IDENT_OFFSET + 4) & 1) << 1;
|
||||||
type |= (readb(idmem + ICS_IDENT_OFFSET + 8) & 1) << 2;
|
type |= (readb(idmem + ICS_IDENT_OFFSET + 8) & 1) << 2;
|
||||||
type |= (readb(idmem + ICS_IDENT_OFFSET + 12) & 1) << 3;
|
type |= (readb(idmem + ICS_IDENT_OFFSET + 12) & 1) << 3;
|
||||||
iounmap(idmem);
|
ecardm_iounmap(ec, idmem);
|
||||||
|
|
||||||
state->type = type;
|
state->type = type;
|
||||||
}
|
}
|
||||||
|
@ -793,11 +782,6 @@ static void __devexit icside_remove(struct expansion_card *ec)
|
||||||
|
|
||||||
ecard_set_drvdata(ec, NULL);
|
ecard_set_drvdata(ec, NULL);
|
||||||
|
|
||||||
if (state->ioc_base)
|
|
||||||
iounmap(state->ioc_base);
|
|
||||||
if (state->ioc_base != state->irq_port)
|
|
||||||
iounmap(state->irq_port);
|
|
||||||
|
|
||||||
kfree(state);
|
kfree(state);
|
||||||
ecard_release_resources(ec);
|
ecard_release_resources(ec);
|
||||||
}
|
}
|
||||||
|
|
|
@ -63,8 +63,7 @@ rapide_probe(struct expansion_card *ec, const struct ecard_id *id)
|
||||||
if (ret)
|
if (ret)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
base = ioremap(ecard_resource_start(ec, ECARD_RES_MEMC),
|
base = ecardm_iomap(ec, ECARD_RES_MEMC, 0, 0);
|
||||||
ecard_resource_len(ec, ECARD_RES_MEMC));
|
|
||||||
if (!base) {
|
if (!base) {
|
||||||
ret = -ENOMEM;
|
ret = -ENOMEM;
|
||||||
goto release;
|
goto release;
|
||||||
|
@ -81,7 +80,6 @@ rapide_probe(struct expansion_card *ec, const struct ecard_id *id)
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
iounmap(base);
|
|
||||||
release:
|
release:
|
||||||
ecard_release_resources(ec);
|
ecard_release_resources(ec);
|
||||||
out:
|
out:
|
||||||
|
@ -96,7 +94,6 @@ static void __devexit rapide_remove(struct expansion_card *ec)
|
||||||
|
|
||||||
/* there must be a better way */
|
/* there must be a better way */
|
||||||
ide_unregister(hwif - ide_hwifs);
|
ide_unregister(hwif - ide_hwifs);
|
||||||
iounmap(hwif->hwif_data);
|
|
||||||
ecard_release_resources(ec);
|
ecard_release_resources(ec);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1014,8 +1014,7 @@ ether1_probe(struct expansion_card *ec, const struct ecard_id *id)
|
||||||
SET_NETDEV_DEV(dev, &ec->dev);
|
SET_NETDEV_DEV(dev, &ec->dev);
|
||||||
|
|
||||||
dev->irq = ec->irq;
|
dev->irq = ec->irq;
|
||||||
priv(dev)->base = ioremap(ecard_resource_start(ec, ECARD_RES_IOCFAST),
|
priv(dev)->base = ecardm_iomap(ec, ECARD_RES_IOCFAST, 0, 0);
|
||||||
ecard_resource_len(ec, ECARD_RES_IOCFAST));
|
|
||||||
if (!priv(dev)->base) {
|
if (!priv(dev)->base) {
|
||||||
ret = -ENOMEM;
|
ret = -ENOMEM;
|
||||||
goto free;
|
goto free;
|
||||||
|
@ -1056,8 +1055,6 @@ ether1_probe(struct expansion_card *ec, const struct ecard_id *id)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
free:
|
free:
|
||||||
if (priv(dev)->base)
|
|
||||||
iounmap(priv(dev)->base);
|
|
||||||
free_netdev(dev);
|
free_netdev(dev);
|
||||||
release:
|
release:
|
||||||
ecard_release_resources(ec);
|
ecard_release_resources(ec);
|
||||||
|
@ -1072,7 +1069,6 @@ static void __devexit ether1_remove(struct expansion_card *ec)
|
||||||
ecard_set_drvdata(ec, NULL);
|
ecard_set_drvdata(ec, NULL);
|
||||||
|
|
||||||
unregister_netdev(dev);
|
unregister_netdev(dev);
|
||||||
iounmap(priv(dev)->base);
|
|
||||||
free_netdev(dev);
|
free_netdev(dev);
|
||||||
ecard_release_resources(ec);
|
ecard_release_resources(ec);
|
||||||
}
|
}
|
||||||
|
|
|
@ -793,8 +793,7 @@ ether3_probe(struct expansion_card *ec, const struct ecard_id *id)
|
||||||
SET_MODULE_OWNER(dev);
|
SET_MODULE_OWNER(dev);
|
||||||
SET_NETDEV_DEV(dev, &ec->dev);
|
SET_NETDEV_DEV(dev, &ec->dev);
|
||||||
|
|
||||||
priv(dev)->base = ioremap(ecard_resource_start(ec, ECARD_RES_MEMC),
|
priv(dev)->base = ecardm_iomap(ec, ECARD_RES_MEMC, 0, 0);
|
||||||
ecard_resource_len(ec, ECARD_RES_MEMC));
|
|
||||||
if (!priv(dev)->base) {
|
if (!priv(dev)->base) {
|
||||||
ret = -ENOMEM;
|
ret = -ENOMEM;
|
||||||
goto free;
|
goto free;
|
||||||
|
@ -869,8 +868,6 @@ ether3_probe(struct expansion_card *ec, const struct ecard_id *id)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
free:
|
free:
|
||||||
if (priv(dev)->base)
|
|
||||||
iounmap(priv(dev)->base);
|
|
||||||
free_netdev(dev);
|
free_netdev(dev);
|
||||||
release:
|
release:
|
||||||
ecard_release_resources(ec);
|
ecard_release_resources(ec);
|
||||||
|
@ -885,7 +882,6 @@ static void __devexit ether3_remove(struct expansion_card *ec)
|
||||||
ecard_set_drvdata(ec, NULL);
|
ecard_set_drvdata(ec, NULL);
|
||||||
|
|
||||||
unregister_netdev(dev);
|
unregister_netdev(dev);
|
||||||
iounmap(priv(dev)->base);
|
|
||||||
free_netdev(dev);
|
free_netdev(dev);
|
||||||
ecard_release_resources(ec);
|
ecard_release_resources(ec);
|
||||||
}
|
}
|
||||||
|
|
|
@ -686,7 +686,7 @@ etherh_probe(struct expansion_card *ec, const struct ecard_id *id)
|
||||||
eh->supported = data->supported;
|
eh->supported = data->supported;
|
||||||
eh->ctrl = 0;
|
eh->ctrl = 0;
|
||||||
eh->id = ec->cid.product;
|
eh->id = ec->cid.product;
|
||||||
eh->memc = ioremap(ecard_resource_start(ec, ECARD_RES_MEMC), PAGE_SIZE);
|
eh->memc = ecardm_iomap(ec, ECARD_RES_MEMC, 0, PAGE_SIZE);
|
||||||
if (!eh->memc) {
|
if (!eh->memc) {
|
||||||
ret = -ENOMEM;
|
ret = -ENOMEM;
|
||||||
goto free;
|
goto free;
|
||||||
|
@ -694,7 +694,7 @@ etherh_probe(struct expansion_card *ec, const struct ecard_id *id)
|
||||||
|
|
||||||
eh->ctrl_port = eh->memc;
|
eh->ctrl_port = eh->memc;
|
||||||
if (data->ctrl_ioc) {
|
if (data->ctrl_ioc) {
|
||||||
eh->ioc_fast = ioremap(ecard_resource_start(ec, ECARD_RES_IOCFAST), PAGE_SIZE);
|
eh->ioc_fast = ecardm_iomap(ec, ECARD_RES_IOCFAST, 0, PAGE_SIZE);
|
||||||
if (!eh->ioc_fast) {
|
if (!eh->ioc_fast) {
|
||||||
ret = -ENOMEM;
|
ret = -ENOMEM;
|
||||||
goto free;
|
goto free;
|
||||||
|
@ -758,10 +758,6 @@ etherh_probe(struct expansion_card *ec, const struct ecard_id *id)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
free:
|
free:
|
||||||
if (eh->ioc_fast)
|
|
||||||
iounmap(eh->ioc_fast);
|
|
||||||
if (eh->memc)
|
|
||||||
iounmap(eh->memc);
|
|
||||||
free_netdev(dev);
|
free_netdev(dev);
|
||||||
release:
|
release:
|
||||||
ecard_release_resources(ec);
|
ecard_release_resources(ec);
|
||||||
|
@ -772,16 +768,11 @@ etherh_probe(struct expansion_card *ec, const struct ecard_id *id)
|
||||||
static void __devexit etherh_remove(struct expansion_card *ec)
|
static void __devexit etherh_remove(struct expansion_card *ec)
|
||||||
{
|
{
|
||||||
struct net_device *dev = ecard_get_drvdata(ec);
|
struct net_device *dev = ecard_get_drvdata(ec);
|
||||||
struct etherh_priv *eh = etherh_priv(dev);
|
|
||||||
|
|
||||||
ecard_set_drvdata(ec, NULL);
|
ecard_set_drvdata(ec, NULL);
|
||||||
|
|
||||||
unregister_netdev(dev);
|
unregister_netdev(dev);
|
||||||
|
|
||||||
if (eh->ioc_fast)
|
|
||||||
iounmap(eh->ioc_fast);
|
|
||||||
iounmap(eh->memc);
|
|
||||||
|
|
||||||
free_netdev(dev);
|
free_netdev(dev);
|
||||||
|
|
||||||
ecard_release_resources(ec);
|
ecard_release_resources(ec);
|
||||||
|
|
|
@ -281,7 +281,6 @@ arxescsi_probe(struct expansion_card *ec, const struct ecard_id *id)
|
||||||
{
|
{
|
||||||
struct Scsi_Host *host;
|
struct Scsi_Host *host;
|
||||||
struct arxescsi_info *info;
|
struct arxescsi_info *info;
|
||||||
unsigned long resbase, reslen;
|
|
||||||
void __iomem *base;
|
void __iomem *base;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
@ -289,9 +288,7 @@ arxescsi_probe(struct expansion_card *ec, const struct ecard_id *id)
|
||||||
if (ret)
|
if (ret)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
resbase = ecard_resource_start(ec, ECARD_RES_MEMC);
|
base = ecardm_iomap(ec, ECARD_RES_MEMC, 0, 0);
|
||||||
reslen = ecard_resource_len(ec, ECARD_RES_MEMC);
|
|
||||||
base = ioremap(resbase, reslen);
|
|
||||||
if (!base) {
|
if (!base) {
|
||||||
ret = -ENOMEM;
|
ret = -ENOMEM;
|
||||||
goto out_region;
|
goto out_region;
|
||||||
|
@ -300,7 +297,7 @@ arxescsi_probe(struct expansion_card *ec, const struct ecard_id *id)
|
||||||
host = scsi_host_alloc(&arxescsi_template, sizeof(struct arxescsi_info));
|
host = scsi_host_alloc(&arxescsi_template, sizeof(struct arxescsi_info));
|
||||||
if (!host) {
|
if (!host) {
|
||||||
ret = -ENOMEM;
|
ret = -ENOMEM;
|
||||||
goto out_unmap;
|
goto out_region;
|
||||||
}
|
}
|
||||||
|
|
||||||
info = (struct arxescsi_info *)host->hostdata;
|
info = (struct arxescsi_info *)host->hostdata;
|
||||||
|
@ -337,8 +334,6 @@ arxescsi_probe(struct expansion_card *ec, const struct ecard_id *id)
|
||||||
fas216_release(host);
|
fas216_release(host);
|
||||||
out_unregister:
|
out_unregister:
|
||||||
scsi_host_put(host);
|
scsi_host_put(host);
|
||||||
out_unmap:
|
|
||||||
iounmap(base);
|
|
||||||
out_region:
|
out_region:
|
||||||
ecard_release_resources(ec);
|
ecard_release_resources(ec);
|
||||||
out:
|
out:
|
||||||
|
@ -348,13 +343,10 @@ arxescsi_probe(struct expansion_card *ec, const struct ecard_id *id)
|
||||||
static void __devexit arxescsi_remove(struct expansion_card *ec)
|
static void __devexit arxescsi_remove(struct expansion_card *ec)
|
||||||
{
|
{
|
||||||
struct Scsi_Host *host = ecard_get_drvdata(ec);
|
struct Scsi_Host *host = ecard_get_drvdata(ec);
|
||||||
struct arxescsi_info *info = (struct arxescsi_info *)host->hostdata;
|
|
||||||
|
|
||||||
ecard_set_drvdata(ec, NULL);
|
ecard_set_drvdata(ec, NULL);
|
||||||
fas216_remove(host);
|
fas216_remove(host);
|
||||||
|
|
||||||
iounmap(info->base);
|
|
||||||
|
|
||||||
fas216_release(host);
|
fas216_release(host);
|
||||||
scsi_host_put(host);
|
scsi_host_put(host);
|
||||||
ecard_release_resources(ec);
|
ecard_release_resources(ec);
|
||||||
|
|
|
@ -401,7 +401,6 @@ cumanascsi2_probe(struct expansion_card *ec, const struct ecard_id *id)
|
||||||
{
|
{
|
||||||
struct Scsi_Host *host;
|
struct Scsi_Host *host;
|
||||||
struct cumanascsi2_info *info;
|
struct cumanascsi2_info *info;
|
||||||
unsigned long resbase, reslen;
|
|
||||||
void __iomem *base;
|
void __iomem *base;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
@ -409,9 +408,7 @@ cumanascsi2_probe(struct expansion_card *ec, const struct ecard_id *id)
|
||||||
if (ret)
|
if (ret)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
resbase = ecard_resource_start(ec, ECARD_RES_MEMC);
|
base = ecardm_iomap(ec, ECARD_RES_MEMC, 0, 0);
|
||||||
reslen = ecard_resource_len(ec, ECARD_RES_MEMC);
|
|
||||||
base = ioremap(resbase, reslen);
|
|
||||||
if (!base) {
|
if (!base) {
|
||||||
ret = -ENOMEM;
|
ret = -ENOMEM;
|
||||||
goto out_region;
|
goto out_region;
|
||||||
|
@ -421,7 +418,7 @@ cumanascsi2_probe(struct expansion_card *ec, const struct ecard_id *id)
|
||||||
sizeof(struct cumanascsi2_info));
|
sizeof(struct cumanascsi2_info));
|
||||||
if (!host) {
|
if (!host) {
|
||||||
ret = -ENOMEM;
|
ret = -ENOMEM;
|
||||||
goto out_unmap;
|
goto out_region;
|
||||||
}
|
}
|
||||||
|
|
||||||
ecard_set_drvdata(ec, host);
|
ecard_set_drvdata(ec, host);
|
||||||
|
@ -490,9 +487,6 @@ cumanascsi2_probe(struct expansion_card *ec, const struct ecard_id *id)
|
||||||
out_free:
|
out_free:
|
||||||
scsi_host_put(host);
|
scsi_host_put(host);
|
||||||
|
|
||||||
out_unmap:
|
|
||||||
iounmap(base);
|
|
||||||
|
|
||||||
out_region:
|
out_region:
|
||||||
ecard_release_resources(ec);
|
ecard_release_resources(ec);
|
||||||
|
|
||||||
|
@ -512,8 +506,6 @@ static void __devexit cumanascsi2_remove(struct expansion_card *ec)
|
||||||
free_dma(info->info.scsi.dma);
|
free_dma(info->info.scsi.dma);
|
||||||
free_irq(ec->irq, info);
|
free_irq(ec->irq, info);
|
||||||
|
|
||||||
iounmap(info->base);
|
|
||||||
|
|
||||||
fas216_release(host);
|
fas216_release(host);
|
||||||
scsi_host_put(host);
|
scsi_host_put(host);
|
||||||
ecard_release_resources(ec);
|
ecard_release_resources(ec);
|
||||||
|
|
|
@ -519,7 +519,6 @@ eesoxscsi_probe(struct expansion_card *ec, const struct ecard_id *id)
|
||||||
{
|
{
|
||||||
struct Scsi_Host *host;
|
struct Scsi_Host *host;
|
||||||
struct eesoxscsi_info *info;
|
struct eesoxscsi_info *info;
|
||||||
unsigned long resbase, reslen;
|
|
||||||
void __iomem *base;
|
void __iomem *base;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
@ -527,9 +526,7 @@ eesoxscsi_probe(struct expansion_card *ec, const struct ecard_id *id)
|
||||||
if (ret)
|
if (ret)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
resbase = ecard_resource_start(ec, ECARD_RES_IOCFAST);
|
base = ecardm_iomap(ec, ECARD_RES_IOCFAST, 0, 0);
|
||||||
reslen = ecard_resource_len(ec, ECARD_RES_IOCFAST);
|
|
||||||
base = ioremap(resbase, reslen);
|
|
||||||
if (!base) {
|
if (!base) {
|
||||||
ret = -ENOMEM;
|
ret = -ENOMEM;
|
||||||
goto out_region;
|
goto out_region;
|
||||||
|
@ -539,7 +536,7 @@ eesoxscsi_probe(struct expansion_card *ec, const struct ecard_id *id)
|
||||||
sizeof(struct eesoxscsi_info));
|
sizeof(struct eesoxscsi_info));
|
||||||
if (!host) {
|
if (!host) {
|
||||||
ret = -ENOMEM;
|
ret = -ENOMEM;
|
||||||
goto out_unmap;
|
goto out_region;
|
||||||
}
|
}
|
||||||
|
|
||||||
ecard_set_drvdata(ec, host);
|
ecard_set_drvdata(ec, host);
|
||||||
|
@ -612,9 +609,6 @@ eesoxscsi_probe(struct expansion_card *ec, const struct ecard_id *id)
|
||||||
device_remove_file(&ec->dev, &dev_attr_bus_term);
|
device_remove_file(&ec->dev, &dev_attr_bus_term);
|
||||||
scsi_host_put(host);
|
scsi_host_put(host);
|
||||||
|
|
||||||
out_unmap:
|
|
||||||
iounmap(base);
|
|
||||||
|
|
||||||
out_region:
|
out_region:
|
||||||
ecard_release_resources(ec);
|
ecard_release_resources(ec);
|
||||||
|
|
||||||
|
@ -636,8 +630,6 @@ static void __devexit eesoxscsi_remove(struct expansion_card *ec)
|
||||||
|
|
||||||
device_remove_file(&ec->dev, &dev_attr_bus_term);
|
device_remove_file(&ec->dev, &dev_attr_bus_term);
|
||||||
|
|
||||||
iounmap(info->base);
|
|
||||||
|
|
||||||
fas216_release(host);
|
fas216_release(host);
|
||||||
scsi_host_put(host);
|
scsi_host_put(host);
|
||||||
ecard_release_resources(ec);
|
ecard_release_resources(ec);
|
||||||
|
|
|
@ -313,7 +313,6 @@ powertecscsi_probe(struct expansion_card *ec, const struct ecard_id *id)
|
||||||
{
|
{
|
||||||
struct Scsi_Host *host;
|
struct Scsi_Host *host;
|
||||||
struct powertec_info *info;
|
struct powertec_info *info;
|
||||||
unsigned long resbase, reslen;
|
|
||||||
void __iomem *base;
|
void __iomem *base;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
@ -321,9 +320,7 @@ powertecscsi_probe(struct expansion_card *ec, const struct ecard_id *id)
|
||||||
if (ret)
|
if (ret)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
resbase = ecard_resource_start(ec, ECARD_RES_IOCFAST);
|
base = ecardm_iomap(ec, ECARD_RES_IOCFAST, 0, 0);
|
||||||
reslen = ecard_resource_len(ec, ECARD_RES_IOCFAST);
|
|
||||||
base = ioremap(resbase, reslen);
|
|
||||||
if (!base) {
|
if (!base) {
|
||||||
ret = -ENOMEM;
|
ret = -ENOMEM;
|
||||||
goto out_region;
|
goto out_region;
|
||||||
|
@ -333,7 +330,7 @@ powertecscsi_probe(struct expansion_card *ec, const struct ecard_id *id)
|
||||||
sizeof (struct powertec_info));
|
sizeof (struct powertec_info));
|
||||||
if (!host) {
|
if (!host) {
|
||||||
ret = -ENOMEM;
|
ret = -ENOMEM;
|
||||||
goto out_unmap;
|
goto out_region;
|
||||||
}
|
}
|
||||||
|
|
||||||
ecard_set_drvdata(ec, host);
|
ecard_set_drvdata(ec, host);
|
||||||
|
@ -404,9 +401,6 @@ powertecscsi_probe(struct expansion_card *ec, const struct ecard_id *id)
|
||||||
device_remove_file(&ec->dev, &dev_attr_bus_term);
|
device_remove_file(&ec->dev, &dev_attr_bus_term);
|
||||||
scsi_host_put(host);
|
scsi_host_put(host);
|
||||||
|
|
||||||
out_unmap:
|
|
||||||
iounmap(base);
|
|
||||||
|
|
||||||
out_region:
|
out_region:
|
||||||
ecard_release_resources(ec);
|
ecard_release_resources(ec);
|
||||||
|
|
||||||
|
@ -428,8 +422,6 @@ static void __devexit powertecscsi_remove(struct expansion_card *ec)
|
||||||
free_dma(info->info.scsi.dma);
|
free_dma(info->info.scsi.dma);
|
||||||
free_irq(ec->irq, info);
|
free_irq(ec->irq, info);
|
||||||
|
|
||||||
iounmap(info->base);
|
|
||||||
|
|
||||||
fas216_release(host);
|
fas216_release(host);
|
||||||
scsi_host_put(host);
|
scsi_host_put(host);
|
||||||
ecard_release_resources(ec);
|
ecard_release_resources(ec);
|
||||||
|
|
|
@ -54,7 +54,7 @@ serial_card_probe(struct expansion_card *ec, const struct ecard_id *id)
|
||||||
info->num_ports = type->num_ports;
|
info->num_ports = type->num_ports;
|
||||||
|
|
||||||
bus_addr = ecard_resource_start(ec, type->type);
|
bus_addr = ecard_resource_start(ec, type->type);
|
||||||
info->vaddr = ioremap(bus_addr, ecard_resource_len(ec, type->type));
|
info->vaddr = ecardm_iomap(ec, type->type, 0, 0);
|
||||||
if (!info->vaddr) {
|
if (!info->vaddr) {
|
||||||
kfree(info);
|
kfree(info);
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
@ -91,7 +91,6 @@ static void __devexit serial_card_remove(struct expansion_card *ec)
|
||||||
if (info->ports[i] > 0)
|
if (info->ports[i] > 0)
|
||||||
serial8250_unregister_port(info->ports[i]);
|
serial8250_unregister_port(info->ports[i]);
|
||||||
|
|
||||||
iounmap(info->vaddr);
|
|
||||||
kfree(info);
|
kfree(info);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -226,6 +226,10 @@ ecard_address(struct expansion_card *ec, card_type_t type, card_speed_t speed)
|
||||||
extern int ecard_request_resources(struct expansion_card *ec);
|
extern int ecard_request_resources(struct expansion_card *ec);
|
||||||
extern void ecard_release_resources(struct expansion_card *ec);
|
extern void ecard_release_resources(struct expansion_card *ec);
|
||||||
|
|
||||||
|
void __iomem *ecardm_iomap(struct expansion_card *ec, unsigned int res,
|
||||||
|
unsigned long offset, unsigned long maxsize);
|
||||||
|
#define ecardm_iounmap(__ec, __addr) devm_iounmap(&(__ec)->dev, __addr)
|
||||||
|
|
||||||
extern struct bus_type ecard_bus_type;
|
extern struct bus_type ecard_bus_type;
|
||||||
|
|
||||||
#define ECARD_DEV(_d) container_of((_d), struct expansion_card, dev)
|
#define ECARD_DEV(_d) container_of((_d), struct expansion_card, dev)
|
||||||
|
|
Loading…
Add table
Reference in a new issue