X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fscsi%2Farm%2Farxescsi.c;h=4385e9e3ded68abbe895189866e415c989f5c5f5;hb=refs%2Fheads%2Fvserver;hp=cd5a63ca7793703e0b9af0b0563356646a8102a3;hpb=9bf4aaab3e101692164d49b7ca357651eb691cb6;p=linux-2.6.git diff --git a/drivers/scsi/arm/arxescsi.c b/drivers/scsi/arm/arxescsi.c index cd5a63ca7..4385e9e3d 100644 --- a/drivers/scsi/arm/arxescsi.c +++ b/drivers/scsi/arm/arxescsi.c @@ -1,5 +1,5 @@ /* - * linux/arch/arm/drivers/scsi/arxescsi.c + * linux/drivers/scsi/arm/arxescsi.c * * Copyright (C) 1997-2000 Russell King, Stefan Hanske * @@ -33,7 +33,6 @@ #include #include -#include #include #include "../scsi.h" @@ -43,6 +42,7 @@ struct arxescsi_info { FAS216_Info info; struct expansion_card *ec; + void __iomem *base; }; #define DMADATA_OFFSET (0x200) @@ -64,7 +64,7 @@ struct arxescsi_info { * Returns : 0 if we should not set CMD_WITHDMA for transfer info command */ static fasdmatype_t -arxescsi_dma_setup(struct Scsi_Host *host, Scsi_Pointer *SCp, +arxescsi_dma_setup(struct Scsi_Host *host, struct scsi_pointer *SCp, fasdmadir_t direction, fasdmatype_t min_type) { /* @@ -73,7 +73,7 @@ arxescsi_dma_setup(struct Scsi_Host *host, Scsi_Pointer *SCp, return fasdma_pseudo; } -static void arxescsi_pseudo_dma_write(unsigned char *addr, unsigned char *base) +static void arxescsi_pseudo_dma_write(unsigned char *addr, void __iomem *base) { __asm__ __volatile__( " stmdb sp!, {r0-r12}\n" @@ -110,12 +110,12 @@ static void arxescsi_pseudo_dma_write(unsigned char *addr, unsigned char *base) * transfer - minimum number of bytes we expect to transfer */ static void -arxescsi_dma_pseudo(struct Scsi_Host *host, Scsi_Pointer *SCp, +arxescsi_dma_pseudo(struct Scsi_Host *host, struct scsi_pointer *SCp, fasdmadir_t direction, int transfer) { struct arxescsi_info *info = (struct arxescsi_info *)host->hostdata; unsigned int length, error = 0; - unsigned char *base = info->info.scsi.io_base; + void __iomem *base = info->info.scsi.io_base; unsigned char *addr; length = SCp->this_residual; @@ -196,7 +196,7 @@ arxescsi_dma_pseudo(struct Scsi_Host *host, Scsi_Pointer *SCp, * Params : host - host * SCpnt - command */ -static void arxescsi_dma_stop(struct Scsi_Host *host, Scsi_Pointer *SCp) +static void arxescsi_dma_stop(struct Scsi_Host *host, struct scsi_pointer *SCp) { /* * no DMA to stop @@ -260,7 +260,7 @@ arxescsi_proc_info(struct Scsi_Host *host, char *buffer, char **start, off_t off return pos; } -static Scsi_Host_Template arxescsi_template = { +static struct scsi_host_template arxescsi_template = { .proc_info = arxescsi_proc_info, .name = "ARXE SCSI card", .info = arxescsi_info, @@ -283,17 +283,15 @@ arxescsi_probe(struct expansion_card *ec, const struct ecard_id *id) struct Scsi_Host *host; struct arxescsi_info *info; unsigned long resbase, reslen; - unsigned char *base; + void __iomem *base; int ret; - resbase = ecard_resource_start(ec, ECARD_RES_MEMC); - reslen = ecard_resource_len(ec, ECARD_RES_MEMC); - - if (!request_mem_region(resbase, reslen, "arxescsi")) { - ret = -EBUSY; + ret = ecard_request_resources(ec); + if (ret) goto out; - } + resbase = ecard_resource_start(ec, ECARD_RES_MEMC); + reslen = ecard_resource_len(ec, ECARD_RES_MEMC); base = ioremap(resbase, reslen); if (!base) { ret = -ENOMEM; @@ -306,15 +304,13 @@ arxescsi_probe(struct expansion_card *ec, const struct ecard_id *id) goto out_unmap; } - host->base = (unsigned long)base; - host->irq = NO_IRQ; - host->dma_channel = NO_DMA; - info = (struct arxescsi_info *)host->hostdata; info->ec = ec; + info->base = base; info->info.scsi.io_base = base + 0x2000; - info->info.scsi.irq = host->irq; + info->info.scsi.irq = NO_IRQ; + info->info.scsi.dma = NO_DMA; info->info.scsi.io_shift = 5; info->info.ifcfg.clockrate = 24; /* MHz */ info->info.ifcfg.select_timeout = 255; @@ -345,7 +341,7 @@ arxescsi_probe(struct expansion_card *ec, const struct ecard_id *id) out_unmap: iounmap(base); out_region: - release_mem_region(resbase, reslen); + ecard_release_resources(ec); out: return ret; } @@ -353,20 +349,16 @@ arxescsi_probe(struct expansion_card *ec, const struct ecard_id *id) static void __devexit arxescsi_remove(struct expansion_card *ec) { struct Scsi_Host *host = ecard_get_drvdata(ec); - unsigned long resbase, reslen; + struct arxescsi_info *info = (struct arxescsi_info *)host->hostdata; ecard_set_drvdata(ec, NULL); fas216_remove(host); - iounmap((void *)host->base); - - resbase = ecard_resource_start(ec, ECARD_RES_MEMC); - reslen = ecard_resource_len(ec, ECARD_RES_MEMC); - - release_mem_region(resbase, reslen); + iounmap(info->base); fas216_release(host); scsi_host_put(host); + ecard_release_resources(ec); } static const struct ecard_id arxescsi_cids[] = {