]> git.hungrycats.org Git - linux/commitdiff
Amiga NCR53c710: Coalesce all configuration options into one
authorJames Bottomley <jejb@mulgrave.(none)>
Sat, 10 Jan 2004 16:18:26 +0000 (11:18 -0500)
committerJames Bottomley <jejb@mulgrave.(none)>
Sat, 10 Jan 2004 16:18:26 +0000 (11:18 -0500)
From: Geert Uytterhoeven <geert@linux-m68k.org>

Amiga NCR53c710: Coalesce all Amiga NCR53c710 SCSI host adapter configuration
options into one config option, as suggested by Matthew Wilcox.

drivers/scsi/Kconfig
drivers/scsi/Makefile
drivers/scsi/amiga7xx.c

index 2672977e74ced213cac6da7c6cd6a42913e39bef..acc6534bc9db77a0a05d4eceef688c4f9e4610a9 100644 (file)
@@ -1473,12 +1473,6 @@ config A3000_SCSI
          To compile this driver as a module, choose M here: the
          module will be called wd33c93.
 
-config A4000T_SCSI
-       bool "A4000T SCSI support (EXPERIMENTAL)"
-       depends on AMIGA && SCSI && EXPERIMENTAL && BROKEN
-       help
-         Support for the NCR53C710 SCSI controller on the Amiga 4000T.
-
 config A2091_SCSI
        tristate "A2091/A590 WD33C93A support"
        depends on ZORRO && SCSI
@@ -1541,28 +1535,24 @@ config FASTLANE_SCSI
          If you have the Phase5 Fastlane Z3 SCSI controller, or plan to use
          one in the near future, say Y to this question. Otherwise, say N.
 
-config A4091_SCSI
-       bool "A4091 SCSI support (EXPERIMENTAL)"
-       depends on ZORRO && SCSI && EXPERIMENTAL && BROKEN
-       help
-         Support for the NCR53C710 chip on the Amiga 4091 Z3 SCSI2 controller
-         (1993).  Very obscure -- the 4091 was part of an Amiga 4000 upgrade
-         plan at the time the Amiga business was sold to DKB.
-
-config WARPENGINE_SCSI
-       bool "WarpEngine SCSI support (EXPERIMENTAL)"
-       depends on ZORRO && SCSI && EXPERIMENTAL && BROKEN
-       help
-         Support for MacroSystem Development's WarpEngine Amiga SCSI-2
-         controller. Info at
-         <http://www.lysator.liu.se/amiga/ar/guide/ar310.guide?FEATURE5>.
-
-config BLZ603EPLUS_SCSI
-       bool "Blizzard PowerUP 603e+ SCSI (EXPERIMENTAL)"
-       depends on ZORRO && SCSI && EXPERIMENTAL && BROKEN
+config SCSI_AMIGA7XX
+       bool "Amiga NCR53c710 SCSI support (EXPERIMENTAL)"
+       depends on AMIGA && SCSI && EXPERIMENTAL && BROKEN
        help
-         If you have an Amiga 1200 with a Phase5 Blizzard PowerUP 603e+
-         accelerator, say Y. Otherwise, say N.
+         Support for various NCR53c710-based SCSI controllers on the Amiga.
+         This includes:
+           - the builtin SCSI controller on the Amiga 4000T,
+           - the Amiga 4091 Zorro III SCSI-2 controller,
+           - the MacroSystem Development's WarpEngine Amiga SCSI-2 controller
+             (info at
+             <http://www.lysator.liu.se/amiga/ar/guide/ar310.guide?FEATURE5>),
+           - the SCSI controller on the Phase5 Blizzard PowerUP 603e+
+             accelerator card for the Amiga 1200,
+           - the SCSI controller on the GVP Turbo 040/060 accelerator.
+         Note that all of the above SCSI controllers, except for the builtin
+         SCSI controller on the Amiga 4000T, reside on the Zorro expansion
+         bus, so you also have to enable Zorro bus support if you want to use
+         them.
 
 config OKTAGON_SCSI
        tristate "BSC Oktagon SCSI support (EXPERIMENTAL)"
@@ -1660,7 +1650,7 @@ config BVME6000_SCSI
 
 config SCSI_NCR53C7xx_FAST
        bool "allow FAST-SCSI [10MHz]"
-       depends on A4000T_SCSI || A4091_SCSI || BLZ603EPLUS_SCSI || WARPENGINE_SCSI || MVME16x_SCSI || BVME6000_SCSI
+       depends on SCSI_AMIGA7XX || MVME16x_SCSI || BVME6000_SCSI
        help
          This will enable 10MHz FAST-SCSI transfers with your host
          adapter. Some systems have problems with that speed, so it's safest
@@ -1706,7 +1696,6 @@ config WD33C93_PIO
        default y
 
 #      bool 'Cyberstorm Mk III SCSI support (EXPERIMENTAL)' CONFIG_CYBERSTORMIII_SCSI
-#      bool 'GVP Turbo 040/060 SCSI support (EXPERIMENTAL)' CONFIG_GVP_TURBO_SCSI
 
 config ZFCP
        tristate "IBM z900 OpenFCP/SCSI support"
index b4dcd58dc85122dad104a1822521ebc719a1ff25..ce1df486c6d073c132ec283d494ff9d297c311ae 100644 (file)
@@ -22,10 +22,7 @@ subdir-$(CONFIG_PCMCIA)              += pcmcia
 
 obj-$(CONFIG_SCSI)             += scsi_mod.o
 
-obj-$(CONFIG_A4000T_SCSI)      += amiga7xx.o   53c7xx.o
-obj-$(CONFIG_A4091_SCSI)       += amiga7xx.o   53c7xx.o
-obj-$(CONFIG_BLZ603EPLUS_SCSI) += amiga7xx.o   53c7xx.o
-obj-$(CONFIG_WARPENGINE_SCSI)  += amiga7xx.o   53c7xx.o
+obj-$(CONFIG_SCSI_AMIGA7XX)    += amiga7xx.o   53c7xx.o
 obj-$(CONFIG_A3000_SCSI)       += a3000.o      wd33c93.o
 obj-$(CONFIG_A2091_SCSI)       += a2091.o      wd33c93.o
 obj-$(CONFIG_GVP11_SCSI)       += gvp11.o      wd33c93.o
index 90c1da63c6e734e47121cc1eb1338772cfa93900..034194e06c122a96784b74f2de290f635d0e1a18 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Detection routine for the NCR53c710 based Amiga SCSI Controllers for Linux.
- *             Amiga MacroSystemUS WarpEngine SCSI controller.
+ *             Amiga MacroSystemUS WarpEngine SCSI controller.
  *             Amiga Technologies A4000T SCSI controller.
  *             Amiga Technologies/DKB A4091 SCSI controller.
  *
 #include <linux/version.h>
 #include <linux/config.h>
 #include <linux/zorro.h>
+#include <linux/stat.h>
 
 #include <asm/setup.h>
 #include <asm/page.h>
 #include <asm/pgtable.h>
 #include <asm/amigaints.h>
 #include <asm/amigahw.h>
-
+#include <asm/dma.h>
 #include <asm/irq.h>
 
 #include "scsi.h"
 #include "53c7xx.h"
 #include "amiga7xx.h"
 
-#include<linux/stat.h>
-
 
-int __init amiga7xx_detect(Scsi_Host_Template *tpnt)
+static int amiga7xx_register_one(Scsi_Host_Template *tpnt,
+                                unsigned long address)
 {
-    static unsigned char called = 0;
-    int num = 0, clock;
     long long options;
-    struct zorro_dev *z = NULL;
-    unsigned long address;
+    int clock;
 
-    if (called || !MACH_IS_AMIGA)
+    if (!request_mem_region(address, 0x1000, "ncr53c710"))
        return 0;
 
-    tpnt->proc_name = "Amiga7xx";
+    address = (unsigned long)z_ioremap(address, 0x1000);
+    options = OPTION_MEMORY_MAPPED | OPTION_DEBUG_TEST1 | OPTION_INTFLY |
+             OPTION_SYNCHRONOUS | OPTION_ALWAYS_SYNCHRONOUS |
+             OPTION_DISCONNECT;
+    clock = 50000000;  /* 50 MHz SCSI Clock */
+    ncr53c7xx_init(tpnt, 0, 710, address, 0, IRQ_AMIGA_PORTS, DMA_NONE,
+                  options, clock);
+    return 1;
+}
 
-#ifdef CONFIG_A4000T_SCSI
-    if (AMIGAHW_PRESENT(A4000_SCSI)) {
-       address = 0xdd0040;
-       if (request_mem_region(address, 0x1000, "ncr53c710")) { 
-           address = ZTWO_VADDR(address);
-           options = OPTION_MEMORY_MAPPED | OPTION_DEBUG_TEST1 |
-                     OPTION_INTFLY | OPTION_SYNCHRONOUS |
-                     OPTION_ALWAYS_SYNCHRONOUS | OPTION_DISCONNECT;
-           clock = 50000000;   /* 50MHz SCSI Clock */
-           ncr53c7xx_init(tpnt, 0, 710, address, 0, IRQ_AMIGA_PORTS, DMA_NONE,
-                          options, clock);
-           num++;
-       }
-    }
-#endif
+
+#ifdef CONFIG_ZORRO
+
+static struct {
+    zorro_id id;
+    unsigned long offset;
+    int absolute;      /* offset is absolute address */
+} amiga7xx_table[] = {
+    { .id = ZORRO_PROD_PHASE5_BLIZZARD_603E_PLUS, .offset = 0xf40000,
+      .absolute = 1 },
+    { .id = ZORRO_PROD_MACROSYSTEMS_WARP_ENGINE_40xx, .offset = 0x40000 },
+    { .id = ZORRO_PROD_CBM_A4091_1, .offset = 0x800000 },
+    { .id = ZORRO_PROD_CBM_A4091_2, .offset = 0x800000 },
+    { .id = ZORRO_PROD_GVP_GFORCE_040_060, .offset = 0x40000 },
+    { 0 }
+};
+
+static int __init amiga7xx_zorro_detect(Scsi_Host_Template *tpnt)
+{
+    int num = 0, i;
+    struct zorro_dev *z = NULL;
+    unsigned long address;
 
     while ((z = zorro_find_device(ZORRO_WILDCARD, z))) {
-       unsigned long address = z->resource.start;
-       unsigned long size = z->resource.end-z->resource.start+1;
-       switch (z->id) {
-#ifdef CONFIG_BLZ603EPLUS_SCSI
-           case ZORRO_PROD_PHASE5_BLIZZARD_603E_PLUS:
-               address = 0xf40000;
-               if (request_mem_region(address, 0x1000, "ncr53c710")) {
-                   address = ZTWO_VADDR(address);
-                   options = OPTION_MEMORY_MAPPED | OPTION_DEBUG_TEST1 |
-                             OPTION_INTFLY | OPTION_SYNCHRONOUS | 
-                             OPTION_ALWAYS_SYNCHRONOUS | OPTION_DISCONNECT;
-                   clock = 50000000;   /* 50MHz SCSI Clock */
-                   ncr53c7xx_init(tpnt, 0, 710, address, 0, IRQ_AMIGA_PORTS,
-                                  DMA_NONE, options, clock);
-                   num++;
-               }
+       for (i = 0; amiga7xx_table[i].id; i++)
+           if (z->id == amiga7xx_table[i].id)
                break;
-#endif
+       if (!amiga7xx_table[i].id)
+           continue;
+       if (amiga7xx_table[i].absolute)
+           address = amiga7xx_table[i].offset;
+       else
+           address = z->resource.start + amiga7xx_table[i].offset;
+       num += amiga7xx_register_one(tpnt, address);
+    }
+    return num;
+}
 
-#ifdef CONFIG_WARPENGINE_SCSI
-           case ZORRO_PROD_MACROSYSTEMS_WARP_ENGINE_40xx:
-               if (request_mem_region(address+0x40000, 0x1000, "ncr53c710")) {
-                   address = (unsigned long)z_ioremap(address, size);
-                   options = OPTION_MEMORY_MAPPED | OPTION_DEBUG_TEST1 |
-                             OPTION_INTFLY | OPTION_SYNCHRONOUS |
-                             OPTION_ALWAYS_SYNCHRONOUS | OPTION_DISCONNECT;
-                   clock = 50000000;   /* 50MHz SCSI Clock */
-                   ncr53c7xx_init(tpnt, 0, 710, address+0x40000, 0,
-                                  IRQ_AMIGA_PORTS, DMA_NONE, options, clock);
-                   num++;
-               }
-               break;
-#endif
+#endif /* CONFIG_ZORRO */
 
-#ifdef CONFIG_A4091_SCSI
-           case ZORRO_PROD_CBM_A4091_1:
-           case ZORRO_PROD_CBM_A4091_2:
-               if (request_mem_region(address+0x800000, 0x1000, "ncr53c710")) {
-                   address = (unsigned long)z_ioremap(address, size);
-                   options = OPTION_MEMORY_MAPPED | OPTION_DEBUG_TEST1 |
-                             OPTION_INTFLY | OPTION_SYNCHRONOUS |
-                             OPTION_ALWAYS_SYNCHRONOUS | OPTION_DISCONNECT;
-                   clock = 50000000;   /* 50MHz SCSI Clock */
-                   ncr53c7xx_init(tpnt, 0, 710, address+0x800000, 0,
-                                  IRQ_AMIGA_PORTS, DMA_NONE, options, clock);
-                   num++;
-               }
-               break;
-#endif
 
-#ifdef CONFIG_GVP_TURBO_SCSI
-           case ZORRO_PROD_GVP_GFORCE_040_060:
-               if (request_mem_region(address+0x40000, 0x1000, "ncr53c710")) {
-                   address = ZTWO_VADDR(address);
-                   options = OPTION_MEMORY_MAPPED | OPTION_DEBUG_TEST1 |
-                             OPTION_INTFLY | OPTION_SYNCHRONOUS |
-                             OPTION_ALWAYS_SYNCHRONOUS | OPTION_DISCONNECT;
-                   clock = 50000000;   /* 50MHz SCSI Clock */
-                   ncr53c7xx_init(tpnt, 0, 710, address+0x40000, 0,
-                                  IRQ_AMIGA_PORTS, DMA_NONE, options, clock);
-                   num++;
-               }
+int __init amiga7xx_detect(Scsi_Host_Template *tpnt)
+{
+    static unsigned char called = 0;
+    int num = 0;
+
+    if (called || !MACH_IS_AMIGA)
+       return 0;
+
+    tpnt->proc_name = "Amiga7xx";
+
+    if (AMIGAHW_PRESENT(A4000_SCSI))
+       num += amiga7xx_register_one(tpnt, 0xdd0040);
+
+#ifdef CONFIG_ZORRO
+    num += amiga7xx_zorro_detect(tpnt);
 #endif
-       }
-    }
 
     called = 1;
     return num;