2 * Detection routine for the NCR53c710 based Amiga SCSI Controllers for Linux.
3 * Amiga MacroSystemUS WarpEngine SCSI controller.
4 * Amiga Technologies A4000T SCSI controller.
5 * Amiga Technologies/DKB A4091 SCSI controller.
7 * Written 1997 by Alan Hourihane <alanh@fairlite.demon.co.uk>
8 * plus modifications of the 53c7xx.c driver to support the Amiga.
10 #include <linux/types.h>
12 #include <linux/blk.h>
13 #include <linux/sched.h>
14 #include <linux/version.h>
15 #include <linux/config.h>
16 #include <linux/zorro.h>
18 #include <asm/setup.h>
20 #include <asm/pgtable.h>
21 #include <asm/amigaints.h>
22 #include <asm/amigahw.h>
32 #include<linux/stat.h>
34 extern int ncr53c7xx_init (Scsi_Host_Template
*tpnt
, int board
, int chip
,
35 u32 base
, int io_port
, int irq
, int dma
,
36 long long options
, int clock
);
38 int __init
amiga7xx_detect(Scsi_Host_Template
*tpnt
)
40 static unsigned char called
= 0;
43 struct zorro_dev
*z
= NULL
;
44 unsigned long address
;
46 if (called
|| !MACH_IS_AMIGA
)
49 tpnt
->proc_name
= "Amiga7xx";
51 #ifdef CONFIG_A4000T_SCSI
52 if (AMIGAHW_PRESENT(A4000_SCSI
)) {
54 if (request_mem_region(address
, 0x1000, "ncr53c710")) {
55 address
= ZTWO_VADDR(address
);
56 options
= OPTION_MEMORY_MAPPED
| OPTION_DEBUG_TEST1
|
57 OPTION_INTFLY
| OPTION_SYNCHRONOUS
|
58 OPTION_ALWAYS_SYNCHRONOUS
| OPTION_DISCONNECT
;
59 clock
= 50000000; /* 50MHz SCSI Clock */
60 ncr53c7xx_init(tpnt
, 0, 710, address
, 0, IRQ_AMIGA_PORTS
, DMA_NONE
,
67 while ((z
= zorro_find_device(ZORRO_WILDCARD
, z
))) {
68 unsigned long address
= z
->resource
.start
;
69 unsigned long size
= z
->resource
.end
-z
->resource
.start
+1;
71 #ifdef CONFIG_BLZ603EPLUS_SCSI
72 case ZORRO_PROD_PHASE5_BLIZZARD_603E_PLUS
:
74 if (request_mem_region(address
, 0x1000, "ncr53c710")) {
75 address
= ZTWO_VADDR(address
);
76 options
= OPTION_MEMORY_MAPPED
| OPTION_DEBUG_TEST1
|
77 OPTION_INTFLY
| OPTION_SYNCHRONOUS
|
78 OPTION_ALWAYS_SYNCHRONOUS
| OPTION_DISCONNECT
;
79 clock
= 50000000; /* 50MHz SCSI Clock */
80 ncr53c7xx_init(tpnt
, 0, 710, address
, 0, IRQ_AMIGA_PORTS
,
81 DMA_NONE
, options
, clock
);
87 #ifdef CONFIG_WARPENGINE_SCSI
88 case ZORRO_PROD_MACROSYSTEMS_WARP_ENGINE_40xx
:
89 if (request_mem_region(address
+0x40000, 0x1000, "ncr53c710")) {
90 address
= (unsigned long)ioremap(address
, size
);
91 options
= OPTION_MEMORY_MAPPED
| OPTION_DEBUG_TEST1
|
92 OPTION_INTFLY
| OPTION_SYNCHRONOUS
|
93 OPTION_ALWAYS_SYNCHRONOUS
| OPTION_DISCONNECT
;
94 clock
= 50000000; /* 50MHz SCSI Clock */
95 ncr53c7xx_init(tpnt
, 0, 710, address
+0x40000, 0,
96 IRQ_AMIGA_PORTS
, DMA_NONE
, options
, clock
);
102 #ifdef CONFIG_A4091_SCSI
103 case ZORRO_PROD_CBM_A4091_1
:
104 case ZORRO_PROD_CBM_A4091_2
:
105 if (request_mem_region(address
+0x800000, 0x1000, "ncr53c710")) {
106 address
= (unsigned long)ioremap(address
, size
);
107 options
= OPTION_MEMORY_MAPPED
| OPTION_DEBUG_TEST1
|
108 OPTION_INTFLY
| OPTION_SYNCHRONOUS
|
109 OPTION_ALWAYS_SYNCHRONOUS
| OPTION_DISCONNECT
;
110 clock
= 50000000; /* 50MHz SCSI Clock */
111 ncr53c7xx_init(tpnt
, 0, 710, address
+0x800000, 0,
112 IRQ_AMIGA_PORTS
, DMA_NONE
, options
, clock
);
118 #ifdef CONFIG_GVP_TURBO_SCSI
119 case ZORRO_PROD_GVP_GFORCE_040_060
:
120 if (request_mem_region(address
+0x40000, 0x1000, "ncr53c710")) {
121 address
= ZTWO_VADDR(address
);
122 options
= OPTION_MEMORY_MAPPED
| OPTION_DEBUG_TEST1
|
123 OPTION_INTFLY
| OPTION_SYNCHRONOUS
|
124 OPTION_ALWAYS_SYNCHRONOUS
| OPTION_DISCONNECT
;
125 clock
= 50000000; /* 50MHz SCSI Clock */
126 ncr53c7xx_init(tpnt
, 0, 710, address
+0x40000, 0,
127 IRQ_AMIGA_PORTS
, DMA_NONE
, options
, clock
);