Merge branch 'master' into devel
[sfrench/cifs-2.6.git] / drivers / scsi / arm / cumana_2.c
index 719af0dcc0e580d9059cff9c2be96091435f3865..c9902b5c1f2b3b788119c9e46a270696eb5abee4 100644 (file)
@@ -21,7 +21,6 @@
 #include <linux/kernel.h>
 #include <linux/string.h>
 #include <linux/ioport.h>
-#include <linux/sched.h>
 #include <linux/proc_fs.h>
 #include <linux/delay.h>
 #include <linux/interrupt.h>
@@ -137,10 +136,9 @@ cumanascsi_2_terminator_ctl(struct Scsi_Host *host, int on_off)
  * Purpose  : handle interrupts from Cumana SCSI 2 card
  * Params   : irq    - interrupt number
  *           dev_id - user-defined (Scsi_Host structure)
- *           regs   - processor registers at interrupt
  */
 static irqreturn_t
-cumanascsi_2_intr(int irq, void *dev_id, struct pt_regs *regs)
+cumanascsi_2_intr(int irq, void *dev_id)
 {
        struct cumanascsi2_info *info = dev_id;
 
@@ -180,10 +178,10 @@ cumanascsi_2_dma_setup(struct Scsi_Host *host, struct scsi_pointer *SCp,
                        dma_dir = DMA_MODE_READ,
                        alatch_dir = ALATCH_DMA_IN;
 
-               dma_map_sg(dev, info->sg, bufs + 1, map_dir);
+               dma_map_sg(dev, info->sg, bufs, map_dir);
 
                disable_dma(dmach);
-               set_dma_sg(dmach, info->sg, bufs + 1);
+               set_dma_sg(dmach, info->sg, bufs);
                writeb(alatch_dir, info->base + CUMANASCSI2_ALATCH);
                set_dma_mode(dmach, dma_dir);
                enable_dma(dmach);
@@ -320,7 +318,7 @@ cumanascsi_2_set_proc_info(struct Scsi_Host *host, char *buffer, int length)
 {
        int ret = length;
 
-       if (length >= 11 && strcmp(buffer, "CUMANASCSI2") == 0) {
+       if (length >= 11 && strncmp(buffer, "CUMANASCSI2", 11) == 0) {
                buffer += 11;
                length -= 11;
 
@@ -392,7 +390,8 @@ static struct scsi_host_template cumanascsi2_template = {
        .eh_abort_handler               = fas216_eh_abort,
        .can_queue                      = 1,
        .this_id                        = 7,
-       .sg_tablesize                   = SG_ALL,
+       .sg_tablesize                   = SCSI_MAX_SG_CHAIN_SEGMENTS,
+       .dma_boundary                   = IOMD_DMA_BOUNDARY,
        .cmd_per_lun                    = 1,
        .use_clustering                 = DISABLE_CLUSTERING,
        .proc_name                      = "cumanascsi2",
@@ -403,7 +402,6 @@ cumanascsi2_probe(struct expansion_card *ec, const struct ecard_id *id)
 {
        struct Scsi_Host *host;
        struct cumanascsi2_info *info;
-       unsigned long resbase, reslen;
        void __iomem *base;
        int ret;
 
@@ -411,9 +409,7 @@ cumanascsi2_probe(struct expansion_card *ec, const struct ecard_id *id)
        if (ret)
                goto out;
 
-       resbase = ecard_resource_start(ec, ECARD_RES_MEMC);
-       reslen = ecard_resource_len(ec, ECARD_RES_MEMC);
-       base = ioremap(resbase, reslen);
+       base = ecardm_iomap(ec, ECARD_RES_MEMC, 0, 0);
        if (!base) {
                ret = -ENOMEM;
                goto out_region;
@@ -423,7 +419,7 @@ cumanascsi2_probe(struct expansion_card *ec, const struct ecard_id *id)
                               sizeof(struct cumanascsi2_info));
        if (!host) {
                ret = -ENOMEM;
-               goto out_unmap;
+               goto out_region;
        }
 
        ecard_set_drvdata(ec, host);
@@ -452,8 +448,8 @@ cumanascsi2_probe(struct expansion_card *ec, const struct ecard_id *id)
 
        ec->irqaddr     = info->base + CUMANASCSI2_STATUS;
        ec->irqmask     = STATUS_INT;
-       ec->irq_data    = info;
-       ec->ops         = &cumanascsi_2_ops;
+
+       ecard_setirq(ec, &cumanascsi_2_ops, info);
 
        ret = fas216_init(host);
        if (ret)
@@ -492,9 +488,6 @@ cumanascsi2_probe(struct expansion_card *ec, const struct ecard_id *id)
  out_free:
        scsi_host_put(host);
 
- out_unmap:
-       iounmap(base);
-
  out_region:
        ecard_release_resources(ec);
 
@@ -514,8 +507,6 @@ static void __devexit cumanascsi2_remove(struct expansion_card *ec)
                free_dma(info->info.scsi.dma);
        free_irq(ec->irq, info);
 
-       iounmap(info->base);
-
        fas216_release(host);
        scsi_host_put(host);
        ecard_release_resources(ec);