diff options
author | Finn Thain <fthain@telegraphics.com.au> | 2016-01-03 06:05:09 +0100 |
---|---|---|
committer | Martin K. Petersen <martin.petersen@oracle.com> | 2016-01-07 03:42:52 +0100 |
commit | 4d8c08c71ea261a31855e4919fa8b875cd507ef3 (patch) | |
tree | 88679b155760c14a0c8418dca1003c5ea7b63981 /drivers/scsi/g_NCR5380.c | |
parent | ncr5380: Split NCR5380_init() into two functions (diff) | |
download | linux-4d8c08c71ea261a31855e4919fa8b875cd507ef3.tar.xz linux-4d8c08c71ea261a31855e4919fa8b875cd507ef3.zip |
ncr5380: Move NCR53C400-specific code
Move board-specific code like this,
NCR5380_write(C400_CONTROL_STATUS_REG, CSR_BASE);
from the core driver to the board driver. Eliminate the NCR53C400 macro
from the core driver. Removal of all macros like this one will be
necessary in order to have one core driver that can support all kinds of
boards.
Signed-off-by: Finn Thain <fthain@telegraphics.com.au>
Reviewed-by: Hannes Reinecke <hare@suse.com>
Tested-by: Ondrej Zary <linux@rainbow-software.org>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Diffstat (limited to 'drivers/scsi/g_NCR5380.c')
-rw-r--r-- | drivers/scsi/g_NCR5380.c | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/drivers/scsi/g_NCR5380.c b/drivers/scsi/g_NCR5380.c index 6f5fdf642296..ffbb07b0e9e8 100644 --- a/drivers/scsi/g_NCR5380.c +++ b/drivers/scsi/g_NCR5380.c @@ -64,9 +64,7 @@ #define AUTOPROBE_IRQ #ifdef CONFIG_SCSI_GENERIC_NCR53C400 -#define NCR53C400_PSEUDO_DMA 1 #define PSEUDO_DMA -#define NCR53C400 #endif #include <asm/io.h> @@ -263,7 +261,7 @@ static int __init generic_NCR5380_detect(struct scsi_host_template *tpnt) static unsigned int __initdata dtc_3181e_ports[] = { 0x220, 0x240, 0x280, 0x2a0, 0x2c0, 0x300, 0x320, 0x340, 0 }; - int flags = 0; + int flags; struct Scsi_Host *instance; #ifdef SCSI_G_NCR5380_MEM unsigned long base; @@ -324,12 +322,15 @@ static int __init generic_NCR5380_detect(struct scsi_host_template *tpnt) continue; ports = NULL; + flags = 0; switch (overrides[current_override].board) { case BOARD_NCR5380: flags = FLAG_NO_PSEUDO_DMA; break; case BOARD_NCR53C400: +#ifdef PSEUDO_DMA flags = FLAG_NCR53C400; +#endif break; case BOARD_NCR53C400A: flags = FLAG_NO_PSEUDO_DMA; @@ -415,6 +416,13 @@ static int __init generic_NCR5380_detect(struct scsi_host_template *tpnt) #ifndef SCSI_G_NCR5380_MEM instance->io_port = overrides[current_override].NCR5380_map_name; instance->n_io_port = region_size; + + /* + * On NCR53C400 boards, NCR5380 registers are mapped 8 past + * the base address. + */ + if (overrides[current_override].board == BOARD_NCR53C400) + instance->io_port += 8; #else instance->base = overrides[current_override].NCR5380_map_name; ((struct NCR5380_hostdata *)instance->hostdata)->iomem = iomem; @@ -422,6 +430,9 @@ static int __init generic_NCR5380_detect(struct scsi_host_template *tpnt) NCR5380_init(instance, flags); + if (overrides[current_override].board == BOARD_NCR53C400) + NCR5380_write(C400_CONTROL_STATUS_REG, CSR_BASE); + NCR5380_maybe_reset_bus(instance); if (overrides[current_override].irq != IRQ_AUTO) @@ -506,7 +517,7 @@ generic_NCR5380_biosparam(struct scsi_device *sdev, struct block_device *bdev, } #endif -#ifdef NCR53C400_PSEUDO_DMA +#ifdef PSEUDO_DMA /** * NCR5380_pread - pseudo DMA read @@ -690,7 +701,7 @@ static inline int NCR5380_pwrite(struct Scsi_Host *instance, unsigned char *src, ; // TIMEOUT return 0; } -#endif /* PSEUDO_DMA */ +#endif /* PSEUDO_DMA */ /* * Include the NCR5380 core code that we build our driver around |