aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/scsi/g_NCR5380.c28
-rw-r--r--drivers/scsi/g_NCR5380.h23
2 files changed, 38 insertions, 13 deletions
diff --git a/drivers/scsi/g_NCR5380.c b/drivers/scsi/g_NCR5380.c
index 45756fa90777..e6bcfe949340 100644
--- a/drivers/scsi/g_NCR5380.c
+++ b/drivers/scsi/g_NCR5380.c
@@ -127,7 +127,7 @@ static int ncr_53c400a = NCR_NOT_SET;
127static int dtc_3181e = NCR_NOT_SET; 127static int dtc_3181e = NCR_NOT_SET;
128 128
129static struct override { 129static struct override {
130 NCR5380_implementation_fields; 130 NCR5380_map_type NCR5380_map_name;
131 int irq; 131 int irq;
132 int dma; 132 int dma;
133 int board; /* Use NCR53c400, Ricoh, etc. extensions ? */ 133 int board; /* Use NCR53c400, Ricoh, etc. extensions ? */
@@ -299,6 +299,10 @@ int __init generic_NCR5380_detect(struct scsi_host_template * tpnt)
299 }; 299 };
300 int flags = 0; 300 int flags = 0;
301 struct Scsi_Host *instance; 301 struct Scsi_Host *instance;
302#ifdef CONFIG_SCSI_G_NCR5380_MEM
303 unsigned long base;
304 void __iomem *iomem;
305#endif
302 306
303 if (ncr_irq != NCR_NOT_SET) 307 if (ncr_irq != NCR_NOT_SET)
304 overrides[0].irq = ncr_irq; 308 overrides[0].irq = ncr_irq;
@@ -424,15 +428,22 @@ int __init generic_NCR5380_detect(struct scsi_host_template * tpnt)
424 region_size = NCR5380_region_size; 428 region_size = NCR5380_region_size;
425 } 429 }
426#else 430#else
427 if(!request_mem_region(overrides[current_override].NCR5380_map_name, NCR5380_region_size, "ncr5380")) 431 base = overrides[current_override].NCR5380_map_name;
432 if (!request_mem_region(base, NCR5380_region_size, "ncr5380"))
433 continue;
434 iomem = ioremap(base, NCR5380_region_size);
435 if (!iomem) {
436 release_mem_region(base, NCR5380_region_size);
428 continue; 437 continue;
438 }
429#endif 439#endif
430 instance = scsi_register(tpnt, sizeof(struct NCR5380_hostdata)); 440 instance = scsi_register(tpnt, sizeof(struct NCR5380_hostdata));
431 if (instance == NULL) { 441 if (instance == NULL) {
432#ifndef CONFIG_SCSI_G_NCR5380_MEM 442#ifndef CONFIG_SCSI_G_NCR5380_MEM
433 release_region(overrides[current_override].NCR5380_map_name, region_size); 443 release_region(overrides[current_override].NCR5380_map_name, region_size);
434#else 444#else
435 release_mem_region(overrides[current_override].NCR5380_map_name, NCR5380_region_size); 445 iounmap(iomem);
446 release_mem_region(base, NCR5380_region_size);
436#endif 447#endif
437 continue; 448 continue;
438 } 449 }
@@ -440,6 +451,8 @@ int __init generic_NCR5380_detect(struct scsi_host_template * tpnt)
440 instance->NCR5380_instance_name = overrides[current_override].NCR5380_map_name; 451 instance->NCR5380_instance_name = overrides[current_override].NCR5380_map_name;
441#ifndef CONFIG_SCSI_G_NCR5380_MEM 452#ifndef CONFIG_SCSI_G_NCR5380_MEM
442 instance->n_io_port = region_size; 453 instance->n_io_port = region_size;
454#else
455 ((struct NCR5380_hostdata *)instance->hostdata).iomem = iomem;
443#endif 456#endif
444 457
445 NCR5380_init(instance, flags); 458 NCR5380_init(instance, flags);
@@ -509,6 +522,7 @@ int generic_NCR5380_release_resources(struct Scsi_Host *instance)
509#ifndef CONFIG_SCSI_G_NCR5380_MEM 522#ifndef CONFIG_SCSI_G_NCR5380_MEM
510 release_region(instance->NCR5380_instance_name, instance->n_io_port); 523 release_region(instance->NCR5380_instance_name, instance->n_io_port);
511#else 524#else
525 iounmap(((struct NCR5380_hostdata *)instance->hostdata).iomem);
512 release_mem_region(instance->NCR5380_instance_name, NCR5380_region_size); 526 release_mem_region(instance->NCR5380_instance_name, NCR5380_region_size);
513#endif 527#endif
514 528
@@ -586,7 +600,7 @@ static inline int NCR5380_pread(struct Scsi_Host *instance, unsigned char *dst,
586 } 600 }
587#else 601#else
588 /* implies CONFIG_SCSI_G_NCR5380_MEM */ 602 /* implies CONFIG_SCSI_G_NCR5380_MEM */
589 isa_memcpy_fromio(dst + start, NCR53C400_host_buffer + NCR5380_map_name, 128); 603 memcpy_fromio(dst + start, iomem + NCR53C400_host_buffer, 128);
590#endif 604#endif
591 start += 128; 605 start += 128;
592 blocks--; 606 blocks--;
@@ -606,7 +620,7 @@ static inline int NCR5380_pread(struct Scsi_Host *instance, unsigned char *dst,
606 } 620 }
607#else 621#else
608 /* implies CONFIG_SCSI_G_NCR5380_MEM */ 622 /* implies CONFIG_SCSI_G_NCR5380_MEM */
609 isa_memcpy_fromio(dst + start, NCR53C400_host_buffer + NCR5380_map_name, 128); 623 memcpy_fromio(dst + start, iomem + NCR53C400_host_buffer, 128);
610#endif 624#endif
611 start += 128; 625 start += 128;
612 blocks--; 626 blocks--;
@@ -671,7 +685,7 @@ static inline int NCR5380_pwrite(struct Scsi_Host *instance, unsigned char *src,
671 } 685 }
672#else 686#else
673 /* implies CONFIG_SCSI_G_NCR5380_MEM */ 687 /* implies CONFIG_SCSI_G_NCR5380_MEM */
674 isa_memcpy_toio(NCR53C400_host_buffer + NCR5380_map_name, src + start, 128); 688 memcpy_toio(iomem + NCR53C400_host_buffer, src + start, 128);
675#endif 689#endif
676 start += 128; 690 start += 128;
677 blocks--; 691 blocks--;
@@ -687,7 +701,7 @@ static inline int NCR5380_pwrite(struct Scsi_Host *instance, unsigned char *src,
687 } 701 }
688#else 702#else
689 /* implies CONFIG_SCSI_G_NCR5380_MEM */ 703 /* implies CONFIG_SCSI_G_NCR5380_MEM */
690 isa_memcpy_toio(NCR53C400_host_buffer + NCR5380_map_name, src + start, 128); 704 memcpy_toio(iomem + NCR53C400_host_buffer, src + start, 128);
691#endif 705#endif
692 start += 128; 706 start += 128;
693 blocks--; 707 blocks--;
diff --git a/drivers/scsi/g_NCR5380.h b/drivers/scsi/g_NCR5380.h
index 656fbe2f91f6..d60a89cb8052 100644
--- a/drivers/scsi/g_NCR5380.h
+++ b/drivers/scsi/g_NCR5380.h
@@ -82,6 +82,15 @@ static const char* generic_NCR5380_info(struct Scsi_Host *);
82#define NCR5380_read(reg) (inb(NCR5380_map_name + (reg))) 82#define NCR5380_read(reg) (inb(NCR5380_map_name + (reg)))
83#define NCR5380_write(reg, value) (outb((value), (NCR5380_map_name + (reg)))) 83#define NCR5380_write(reg, value) (outb((value), (NCR5380_map_name + (reg))))
84 84
85#define NCR5380_implementation_fields \
86 NCR5380_map_type NCR5380_map_name
87
88#define NCR5380_local_declare() \
89 register NCR5380_implementation_fields
90
91#define NCR5380_setup(instance) \
92 NCR5380_map_name = (NCR5380_map_type)((instance)->NCR5380_instance_name)
93
85#else 94#else
86/* therefore CONFIG_SCSI_G_NCR5380_MEM */ 95/* therefore CONFIG_SCSI_G_NCR5380_MEM */
87 96
@@ -95,18 +104,20 @@ static const char* generic_NCR5380_info(struct Scsi_Host *);
95#define NCR53C400_host_buffer 0x3900 104#define NCR53C400_host_buffer 0x3900
96#define NCR5380_region_size 0x3a00 105#define NCR5380_region_size 0x3a00
97 106
98#define NCR5380_read(reg) isa_readb(NCR5380_map_name + NCR53C400_mem_base + (reg)) 107#define NCR5380_read(reg) readb(iomem + NCR53C400_mem_base + (reg))
99#define NCR5380_write(reg, value) isa_writeb(value, NCR5380_map_name + NCR53C400_mem_base + (reg)) 108#define NCR5380_write(reg, value) writeb(value, iomem + NCR53C400_mem_base + (reg))
100#endif
101 109
102#define NCR5380_implementation_fields \ 110#define NCR5380_implementation_fields \
103 NCR5380_map_type NCR5380_map_name 111 NCR5380_map_type NCR5380_map_name; \
112 void __iomem *iomem;
104 113
105#define NCR5380_local_declare() \ 114#define NCR5380_local_declare() \
106 register NCR5380_implementation_fields 115 register void __iomem *iomem
107 116
108#define NCR5380_setup(instance) \ 117#define NCR5380_setup(instance) \
109 NCR5380_map_name = (NCR5380_map_type)((instance)->NCR5380_instance_name) 118 iomem = (((struct NCR5380_hostdata *)(instance)->hostdata).iomem)
119
120#endif
110 121
111#define NCR5380_intr generic_NCR5380_intr 122#define NCR5380_intr generic_NCR5380_intr
112#define NCR5380_queue_command generic_NCR5380_queue_command 123#define NCR5380_queue_command generic_NCR5380_queue_command