From: Finn Thain <fthain@telegraphics.com.au> To: "James E.J. Bottomley" <JBottomley@odin.com>, "Martin K. Petersen" <martin.petersen@oracle.com>, Michael Schmitz <schmitzmic@gmail.com>, <linux-m68k@vger.kernel.org>, <linux-scsi@vger.kernel.org>, <linux-kernel@vger.kernel.org> Cc: Ondrej Zary <linux@rainbow-software.org> Subject: [PATCH v4 74/78] ncr5380: Use runtime register mapping Date: Sun, 03 Jan 2016 16:06:15 +1100 [thread overview] Message-ID: <20160103050522.561796482@telegraphics.com.au> (raw) In-Reply-To: 20160103050501.042035135@telegraphics.com.au [-- Attachment #1: 73-71 --] [-- Type: text/plain, Size: 10244 bytes --] From: Ondrej Zary <linux@rainbow-software.org> Convert compile-time C400_ register mapping to runtime mapping. This removes the weird negative register offsets and allows adding additional mappings. While at it, convert read/write loops into insb/outsb. Signed-off-by: Ondrej Zary <linux@rainbow-software.org> Signed-off-by: Finn Thain <fthain@telegraphics.com.au> Reviewed-by: Hannes Reinecke <hare@suse.com> --- drivers/scsi/NCR5380.h | 13 ------ drivers/scsi/g_NCR5380.c | 88 +++++++++++++++++++++-------------------------- drivers/scsi/g_NCR5380.h | 12 ++++-- 3 files changed, 49 insertions(+), 64 deletions(-) Index: linux/drivers/scsi/NCR5380.h =================================================================== --- linux.orig/drivers/scsi/NCR5380.h 2016-01-03 16:04:30.000000000 +1100 +++ linux/drivers/scsi/NCR5380.h 2016-01-03 16:04:51.000000000 +1100 @@ -163,8 +163,7 @@ /* Write any value to this register to start an ini mode DMA receive */ #define START_DMA_INITIATOR_RECEIVE_REG 7 /* wo */ -#define C400_CONTROL_STATUS_REG NCR53C400_register_offset-8 /* rw */ - +/* NCR 53C400(A) Control Status Register bits: */ #define CSR_RESET 0x80 /* wo Resets 53c400 */ #define CSR_53C80_REG 0x80 /* ro 5380 registers busy */ #define CSR_TRANS_DIR 0x40 /* rw Data transfer direction */ @@ -181,16 +180,6 @@ #define CSR_BASE CSR_53C80_INTR #endif -/* Number of 128-byte blocks to be transferred */ -#define C400_BLOCK_COUNTER_REG NCR53C400_register_offset-7 /* rw */ - -/* Resume transfer after disconnect */ -#define C400_RESUME_TRANSFER_REG NCR53C400_register_offset-6 /* wo */ - -/* Access to host buffer stack */ -#define C400_HOST_BUFFER NCR53C400_register_offset-4 /* rw */ - - /* Note : PHASE_* macros are based on the values of the STATUS register */ #define PHASE_MASK (SR_MSG | SR_CD | SR_IO) Index: linux/drivers/scsi/g_NCR5380.c =================================================================== --- linux.orig/drivers/scsi/g_NCR5380.c 2016-01-03 16:04:50.000000000 +1100 +++ linux/drivers/scsi/g_NCR5380.c 2016-01-03 16:04:51.000000000 +1100 @@ -253,6 +253,7 @@ static int __init generic_NCR5380_detect }; int flags; struct Scsi_Host *instance; + struct NCR5380_hostdata *hostdata; #ifdef SCSI_G_NCR5380_MEM unsigned long base; void __iomem *iomem; @@ -394,6 +395,7 @@ static int __init generic_NCR5380_detect instance = scsi_register(tpnt, sizeof(struct NCR5380_hostdata)); if (instance == NULL) goto out_release; + hostdata = shost_priv(instance); #ifndef SCSI_G_NCR5380_MEM instance->io_port = overrides[current_override].NCR5380_map_name; @@ -403,18 +405,27 @@ static int __init generic_NCR5380_detect * On NCR53C400 boards, NCR5380 registers are mapped 8 past * the base address. */ - if (overrides[current_override].board == BOARD_NCR53C400) + if (overrides[current_override].board == BOARD_NCR53C400) { instance->io_port += 8; + hostdata->c400_ctl_status = 0; + hostdata->c400_blk_cnt = 1; + hostdata->c400_host_buf = 4; + } #else instance->base = overrides[current_override].NCR5380_map_name; - ((struct NCR5380_hostdata *)instance->hostdata)->iomem = iomem; + hostdata->iomem = iomem; + if (overrides[current_override].board == BOARD_NCR53C400) { + hostdata->c400_ctl_status = 0x100; + hostdata->c400_blk_cnt = 0x101; + hostdata->c400_host_buf = 0x104; + } #endif if (NCR5380_init(instance, flags)) goto out_unregister; if (overrides[current_override].board == BOARD_NCR53C400) - NCR5380_write(C400_CONTROL_STATUS_REG, CSR_BASE); + NCR5380_write(hostdata->c400_ctl_status, CSR_BASE); NCR5380_maybe_reset_bus(instance); @@ -522,31 +533,25 @@ generic_NCR5380_biosparam(struct scsi_de static inline int NCR5380_pread(struct Scsi_Host *instance, unsigned char *dst, int len) { -#ifdef SCSI_G_NCR5380_MEM struct NCR5380_hostdata *hostdata = shost_priv(instance); -#endif int blocks = len / 128; int start = 0; - int bl; - NCR5380_write(C400_CONTROL_STATUS_REG, CSR_BASE | CSR_TRANS_DIR); - NCR5380_write(C400_BLOCK_COUNTER_REG, blocks); + NCR5380_write(hostdata->c400_ctl_status, CSR_BASE | CSR_TRANS_DIR); + NCR5380_write(hostdata->c400_blk_cnt, blocks); while (1) { - if ((bl = NCR5380_read(C400_BLOCK_COUNTER_REG)) == 0) { + if (NCR5380_read(hostdata->c400_blk_cnt) == 0) break; - } - if (NCR5380_read(C400_CONTROL_STATUS_REG) & CSR_GATED_53C80_IRQ) { + if (NCR5380_read(hostdata->c400_ctl_status) & CSR_GATED_53C80_IRQ) { printk(KERN_ERR "53C400r: Got 53C80_IRQ start=%d, blocks=%d\n", start, blocks); return -1; } - while (NCR5380_read(C400_CONTROL_STATUS_REG) & CSR_HOST_BUF_NOT_RDY); + while (NCR5380_read(hostdata->c400_ctl_status) & CSR_HOST_BUF_NOT_RDY) + ; /* FIXME - no timeout */ #ifndef SCSI_G_NCR5380_MEM - { - int i; - for (i = 0; i < 128; i++) - dst[start + i] = NCR5380_read(C400_HOST_BUFFER); - } + insb(instance->io_port + hostdata->c400_host_buf, + dst + start, 128); #else /* implies SCSI_G_NCR5380_MEM */ memcpy_fromio(dst + start, @@ -557,17 +562,12 @@ static inline int NCR5380_pread(struct S } if (blocks) { - while (NCR5380_read(C400_CONTROL_STATUS_REG) & CSR_HOST_BUF_NOT_RDY) - { - // FIXME - no timeout - } + while (NCR5380_read(hostdata->c400_ctl_status) & CSR_HOST_BUF_NOT_RDY) + ; /* FIXME - no timeout */ #ifndef SCSI_G_NCR5380_MEM - { - int i; - for (i = 0; i < 128; i++) - dst[start + i] = NCR5380_read(C400_HOST_BUFFER); - } + insb(instance->io_port + hostdata->c400_host_buf, + dst + start, 128); #else /* implies SCSI_G_NCR5380_MEM */ memcpy_fromio(dst + start, @@ -577,7 +577,7 @@ static inline int NCR5380_pread(struct S blocks--; } - if (!(NCR5380_read(C400_CONTROL_STATUS_REG) & CSR_GATED_53C80_IRQ)) + if (!(NCR5380_read(hostdata->c400_ctl_status) & CSR_GATED_53C80_IRQ)) printk("53C400r: no 53C80 gated irq after transfer"); #if 0 @@ -585,7 +585,7 @@ static inline int NCR5380_pread(struct S * DON'T DO THIS - THEY NEVER ARRIVE! */ printk("53C400r: Waiting for 53C80 registers\n"); - while (NCR5380_read(C400_CONTROL_STATUS_REG) & CSR_53C80_REG) + while (NCR5380_read(hostdata->c400_ctl_status) & CSR_53C80_REG) ; #endif if (!(NCR5380_read(BUS_AND_STATUS_REG) & BASR_END_DMA_TRANSFER)) @@ -606,32 +606,26 @@ static inline int NCR5380_pread(struct S static inline int NCR5380_pwrite(struct Scsi_Host *instance, unsigned char *src, int len) { -#ifdef SCSI_G_NCR5380_MEM struct NCR5380_hostdata *hostdata = shost_priv(instance); -#endif int blocks = len / 128; int start = 0; - int bl; int i; - NCR5380_write(C400_CONTROL_STATUS_REG, CSR_BASE); - NCR5380_write(C400_BLOCK_COUNTER_REG, blocks); + NCR5380_write(hostdata->c400_ctl_status, CSR_BASE); + NCR5380_write(hostdata->c400_blk_cnt, blocks); while (1) { - if (NCR5380_read(C400_CONTROL_STATUS_REG) & CSR_GATED_53C80_IRQ) { + if (NCR5380_read(hostdata->c400_ctl_status) & CSR_GATED_53C80_IRQ) { printk(KERN_ERR "53C400w: Got 53C80_IRQ start=%d, blocks=%d\n", start, blocks); return -1; } - if ((bl = NCR5380_read(C400_BLOCK_COUNTER_REG)) == 0) { + if (NCR5380_read(hostdata->c400_blk_cnt) == 0) break; - } - while (NCR5380_read(C400_CONTROL_STATUS_REG) & CSR_HOST_BUF_NOT_RDY) + while (NCR5380_read(hostdata->c400_ctl_status) & CSR_HOST_BUF_NOT_RDY) ; // FIXME - timeout #ifndef SCSI_G_NCR5380_MEM - { - for (i = 0; i < 128; i++) - NCR5380_write(C400_HOST_BUFFER, src[start + i]); - } + outsb(instance->io_port + hostdata->c400_host_buf, + src + start, 128); #else /* implies SCSI_G_NCR5380_MEM */ memcpy_toio(hostdata->iomem + NCR53C400_host_buffer, @@ -641,14 +635,12 @@ static inline int NCR5380_pwrite(struct blocks--; } if (blocks) { - while (NCR5380_read(C400_CONTROL_STATUS_REG) & CSR_HOST_BUF_NOT_RDY) + while (NCR5380_read(hostdata->c400_ctl_status) & CSR_HOST_BUF_NOT_RDY) ; // FIXME - no timeout #ifndef SCSI_G_NCR5380_MEM - { - for (i = 0; i < 128; i++) - NCR5380_write(C400_HOST_BUFFER, src[start + i]); - } + outsb(instance->io_port + hostdata->c400_host_buf, + src + start, 128); #else /* implies SCSI_G_NCR5380_MEM */ memcpy_toio(hostdata->iomem + NCR53C400_host_buffer, @@ -660,7 +652,7 @@ static inline int NCR5380_pwrite(struct #if 0 printk("53C400w: waiting for registers to be available\n"); - THEY NEVER DO ! while (NCR5380_read(C400_CONTROL_STATUS_REG) & CSR_53C80_REG); + THEY NEVER DO ! while (NCR5380_read(hostdata->c400_ctl_status) & CSR_53C80_REG); printk("53C400w: Got em\n"); #endif @@ -668,7 +660,7 @@ static inline int NCR5380_pwrite(struct /* All documentation says to check for this. Maybe my hardware is too * fast. Waiting for it seems to work fine! KLL */ - while (!(i = NCR5380_read(C400_CONTROL_STATUS_REG) & CSR_GATED_53C80_IRQ)) + while (!(i = NCR5380_read(hostdata->c400_ctl_status) & CSR_GATED_53C80_IRQ)) ; // FIXME - no timeout /* Index: linux/drivers/scsi/g_NCR5380.h =================================================================== --- linux.orig/drivers/scsi/g_NCR5380.h 2016-01-03 16:04:03.000000000 +1100 +++ linux/drivers/scsi/g_NCR5380.h 2016-01-03 16:04:51.000000000 +1100 @@ -29,7 +29,6 @@ #define NCR5380_map_type int #define NCR5380_map_name port -#define NCR53C400_register_offset 0 #ifdef CONFIG_SCSI_GENERIC_NCR53C400 #define NCR5380_region_size 16 @@ -42,7 +41,10 @@ #define NCR5380_write(reg, value) \ outb(value, instance->io_port + (reg)) -#define NCR5380_implementation_fields /* none */ +#define NCR5380_implementation_fields \ + int c400_ctl_status; \ + int c400_blk_cnt; \ + int c400_host_buf; #else /* therefore SCSI_G_NCR5380_MEM */ @@ -50,7 +52,6 @@ #define NCR5380_map_type unsigned long #define NCR5380_map_name base -#define NCR53C400_register_offset 0x108 #define NCR53C400_mem_base 0x3880 #define NCR53C400_host_buffer 0x3900 #define NCR5380_region_size 0x3a00 @@ -63,7 +64,10 @@ NCR53C400_mem_base + (reg)) #define NCR5380_implementation_fields \ - void __iomem *iomem; + void __iomem *iomem; \ + int c400_ctl_status; \ + int c400_blk_cnt; \ + int c400_host_buf; #endif
WARNING: multiple messages have this Message-ID (diff)
From: Finn Thain <fthain@telegraphics.com.au> To: "James E.J. Bottomley" <JBottomley@odin.com>, "Martin K. Petersen" <martin.petersen@oracle.com>, Michael Schmitz <schmitzmic@gmail.com>, linux-m68k@vger.kernel.org, linux-scsi@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Ondrej Zary <linux@rainbow-software.org> Subject: [PATCH v4 74/78] ncr5380: Use runtime register mapping Date: Sun, 03 Jan 2016 16:06:15 +1100 [thread overview] Message-ID: <20160103050522.561796482@telegraphics.com.au> (raw) In-Reply-To: 20160103050501.042035135@telegraphics.com.au [-- Attachment #1: 73-71 --] [-- Type: text/plain, Size: 10242 bytes --] From: Ondrej Zary <linux@rainbow-software.org> Convert compile-time C400_ register mapping to runtime mapping. This removes the weird negative register offsets and allows adding additional mappings. While at it, convert read/write loops into insb/outsb. Signed-off-by: Ondrej Zary <linux@rainbow-software.org> Signed-off-by: Finn Thain <fthain@telegraphics.com.au> Reviewed-by: Hannes Reinecke <hare@suse.com> --- drivers/scsi/NCR5380.h | 13 ------ drivers/scsi/g_NCR5380.c | 88 +++++++++++++++++++++-------------------------- drivers/scsi/g_NCR5380.h | 12 ++++-- 3 files changed, 49 insertions(+), 64 deletions(-) Index: linux/drivers/scsi/NCR5380.h =================================================================== --- linux.orig/drivers/scsi/NCR5380.h 2016-01-03 16:04:30.000000000 +1100 +++ linux/drivers/scsi/NCR5380.h 2016-01-03 16:04:51.000000000 +1100 @@ -163,8 +163,7 @@ /* Write any value to this register to start an ini mode DMA receive */ #define START_DMA_INITIATOR_RECEIVE_REG 7 /* wo */ -#define C400_CONTROL_STATUS_REG NCR53C400_register_offset-8 /* rw */ - +/* NCR 53C400(A) Control Status Register bits: */ #define CSR_RESET 0x80 /* wo Resets 53c400 */ #define CSR_53C80_REG 0x80 /* ro 5380 registers busy */ #define CSR_TRANS_DIR 0x40 /* rw Data transfer direction */ @@ -181,16 +180,6 @@ #define CSR_BASE CSR_53C80_INTR #endif -/* Number of 128-byte blocks to be transferred */ -#define C400_BLOCK_COUNTER_REG NCR53C400_register_offset-7 /* rw */ - -/* Resume transfer after disconnect */ -#define C400_RESUME_TRANSFER_REG NCR53C400_register_offset-6 /* wo */ - -/* Access to host buffer stack */ -#define C400_HOST_BUFFER NCR53C400_register_offset-4 /* rw */ - - /* Note : PHASE_* macros are based on the values of the STATUS register */ #define PHASE_MASK (SR_MSG | SR_CD | SR_IO) Index: linux/drivers/scsi/g_NCR5380.c =================================================================== --- linux.orig/drivers/scsi/g_NCR5380.c 2016-01-03 16:04:50.000000000 +1100 +++ linux/drivers/scsi/g_NCR5380.c 2016-01-03 16:04:51.000000000 +1100 @@ -253,6 +253,7 @@ static int __init generic_NCR5380_detect }; int flags; struct Scsi_Host *instance; + struct NCR5380_hostdata *hostdata; #ifdef SCSI_G_NCR5380_MEM unsigned long base; void __iomem *iomem; @@ -394,6 +395,7 @@ static int __init generic_NCR5380_detect instance = scsi_register(tpnt, sizeof(struct NCR5380_hostdata)); if (instance == NULL) goto out_release; + hostdata = shost_priv(instance); #ifndef SCSI_G_NCR5380_MEM instance->io_port = overrides[current_override].NCR5380_map_name; @@ -403,18 +405,27 @@ static int __init generic_NCR5380_detect * On NCR53C400 boards, NCR5380 registers are mapped 8 past * the base address. */ - if (overrides[current_override].board == BOARD_NCR53C400) + if (overrides[current_override].board == BOARD_NCR53C400) { instance->io_port += 8; + hostdata->c400_ctl_status = 0; + hostdata->c400_blk_cnt = 1; + hostdata->c400_host_buf = 4; + } #else instance->base = overrides[current_override].NCR5380_map_name; - ((struct NCR5380_hostdata *)instance->hostdata)->iomem = iomem; + hostdata->iomem = iomem; + if (overrides[current_override].board == BOARD_NCR53C400) { + hostdata->c400_ctl_status = 0x100; + hostdata->c400_blk_cnt = 0x101; + hostdata->c400_host_buf = 0x104; + } #endif if (NCR5380_init(instance, flags)) goto out_unregister; if (overrides[current_override].board == BOARD_NCR53C400) - NCR5380_write(C400_CONTROL_STATUS_REG, CSR_BASE); + NCR5380_write(hostdata->c400_ctl_status, CSR_BASE); NCR5380_maybe_reset_bus(instance); @@ -522,31 +533,25 @@ generic_NCR5380_biosparam(struct scsi_de static inline int NCR5380_pread(struct Scsi_Host *instance, unsigned char *dst, int len) { -#ifdef SCSI_G_NCR5380_MEM struct NCR5380_hostdata *hostdata = shost_priv(instance); -#endif int blocks = len / 128; int start = 0; - int bl; - NCR5380_write(C400_CONTROL_STATUS_REG, CSR_BASE | CSR_TRANS_DIR); - NCR5380_write(C400_BLOCK_COUNTER_REG, blocks); + NCR5380_write(hostdata->c400_ctl_status, CSR_BASE | CSR_TRANS_DIR); + NCR5380_write(hostdata->c400_blk_cnt, blocks); while (1) { - if ((bl = NCR5380_read(C400_BLOCK_COUNTER_REG)) == 0) { + if (NCR5380_read(hostdata->c400_blk_cnt) == 0) break; - } - if (NCR5380_read(C400_CONTROL_STATUS_REG) & CSR_GATED_53C80_IRQ) { + if (NCR5380_read(hostdata->c400_ctl_status) & CSR_GATED_53C80_IRQ) { printk(KERN_ERR "53C400r: Got 53C80_IRQ start=%d, blocks=%d\n", start, blocks); return -1; } - while (NCR5380_read(C400_CONTROL_STATUS_REG) & CSR_HOST_BUF_NOT_RDY); + while (NCR5380_read(hostdata->c400_ctl_status) & CSR_HOST_BUF_NOT_RDY) + ; /* FIXME - no timeout */ #ifndef SCSI_G_NCR5380_MEM - { - int i; - for (i = 0; i < 128; i++) - dst[start + i] = NCR5380_read(C400_HOST_BUFFER); - } + insb(instance->io_port + hostdata->c400_host_buf, + dst + start, 128); #else /* implies SCSI_G_NCR5380_MEM */ memcpy_fromio(dst + start, @@ -557,17 +562,12 @@ static inline int NCR5380_pread(struct S } if (blocks) { - while (NCR5380_read(C400_CONTROL_STATUS_REG) & CSR_HOST_BUF_NOT_RDY) - { - // FIXME - no timeout - } + while (NCR5380_read(hostdata->c400_ctl_status) & CSR_HOST_BUF_NOT_RDY) + ; /* FIXME - no timeout */ #ifndef SCSI_G_NCR5380_MEM - { - int i; - for (i = 0; i < 128; i++) - dst[start + i] = NCR5380_read(C400_HOST_BUFFER); - } + insb(instance->io_port + hostdata->c400_host_buf, + dst + start, 128); #else /* implies SCSI_G_NCR5380_MEM */ memcpy_fromio(dst + start, @@ -577,7 +577,7 @@ static inline int NCR5380_pread(struct S blocks--; } - if (!(NCR5380_read(C400_CONTROL_STATUS_REG) & CSR_GATED_53C80_IRQ)) + if (!(NCR5380_read(hostdata->c400_ctl_status) & CSR_GATED_53C80_IRQ)) printk("53C400r: no 53C80 gated irq after transfer"); #if 0 @@ -585,7 +585,7 @@ static inline int NCR5380_pread(struct S * DON'T DO THIS - THEY NEVER ARRIVE! */ printk("53C400r: Waiting for 53C80 registers\n"); - while (NCR5380_read(C400_CONTROL_STATUS_REG) & CSR_53C80_REG) + while (NCR5380_read(hostdata->c400_ctl_status) & CSR_53C80_REG) ; #endif if (!(NCR5380_read(BUS_AND_STATUS_REG) & BASR_END_DMA_TRANSFER)) @@ -606,32 +606,26 @@ static inline int NCR5380_pread(struct S static inline int NCR5380_pwrite(struct Scsi_Host *instance, unsigned char *src, int len) { -#ifdef SCSI_G_NCR5380_MEM struct NCR5380_hostdata *hostdata = shost_priv(instance); -#endif int blocks = len / 128; int start = 0; - int bl; int i; - NCR5380_write(C400_CONTROL_STATUS_REG, CSR_BASE); - NCR5380_write(C400_BLOCK_COUNTER_REG, blocks); + NCR5380_write(hostdata->c400_ctl_status, CSR_BASE); + NCR5380_write(hostdata->c400_blk_cnt, blocks); while (1) { - if (NCR5380_read(C400_CONTROL_STATUS_REG) & CSR_GATED_53C80_IRQ) { + if (NCR5380_read(hostdata->c400_ctl_status) & CSR_GATED_53C80_IRQ) { printk(KERN_ERR "53C400w: Got 53C80_IRQ start=%d, blocks=%d\n", start, blocks); return -1; } - if ((bl = NCR5380_read(C400_BLOCK_COUNTER_REG)) == 0) { + if (NCR5380_read(hostdata->c400_blk_cnt) == 0) break; - } - while (NCR5380_read(C400_CONTROL_STATUS_REG) & CSR_HOST_BUF_NOT_RDY) + while (NCR5380_read(hostdata->c400_ctl_status) & CSR_HOST_BUF_NOT_RDY) ; // FIXME - timeout #ifndef SCSI_G_NCR5380_MEM - { - for (i = 0; i < 128; i++) - NCR5380_write(C400_HOST_BUFFER, src[start + i]); - } + outsb(instance->io_port + hostdata->c400_host_buf, + src + start, 128); #else /* implies SCSI_G_NCR5380_MEM */ memcpy_toio(hostdata->iomem + NCR53C400_host_buffer, @@ -641,14 +635,12 @@ static inline int NCR5380_pwrite(struct blocks--; } if (blocks) { - while (NCR5380_read(C400_CONTROL_STATUS_REG) & CSR_HOST_BUF_NOT_RDY) + while (NCR5380_read(hostdata->c400_ctl_status) & CSR_HOST_BUF_NOT_RDY) ; // FIXME - no timeout #ifndef SCSI_G_NCR5380_MEM - { - for (i = 0; i < 128; i++) - NCR5380_write(C400_HOST_BUFFER, src[start + i]); - } + outsb(instance->io_port + hostdata->c400_host_buf, + src + start, 128); #else /* implies SCSI_G_NCR5380_MEM */ memcpy_toio(hostdata->iomem + NCR53C400_host_buffer, @@ -660,7 +652,7 @@ static inline int NCR5380_pwrite(struct #if 0 printk("53C400w: waiting for registers to be available\n"); - THEY NEVER DO ! while (NCR5380_read(C400_CONTROL_STATUS_REG) & CSR_53C80_REG); + THEY NEVER DO ! while (NCR5380_read(hostdata->c400_ctl_status) & CSR_53C80_REG); printk("53C400w: Got em\n"); #endif @@ -668,7 +660,7 @@ static inline int NCR5380_pwrite(struct /* All documentation says to check for this. Maybe my hardware is too * fast. Waiting for it seems to work fine! KLL */ - while (!(i = NCR5380_read(C400_CONTROL_STATUS_REG) & CSR_GATED_53C80_IRQ)) + while (!(i = NCR5380_read(hostdata->c400_ctl_status) & CSR_GATED_53C80_IRQ)) ; // FIXME - no timeout /* Index: linux/drivers/scsi/g_NCR5380.h =================================================================== --- linux.orig/drivers/scsi/g_NCR5380.h 2016-01-03 16:04:03.000000000 +1100 +++ linux/drivers/scsi/g_NCR5380.h 2016-01-03 16:04:51.000000000 +1100 @@ -29,7 +29,6 @@ #define NCR5380_map_type int #define NCR5380_map_name port -#define NCR53C400_register_offset 0 #ifdef CONFIG_SCSI_GENERIC_NCR53C400 #define NCR5380_region_size 16 @@ -42,7 +41,10 @@ #define NCR5380_write(reg, value) \ outb(value, instance->io_port + (reg)) -#define NCR5380_implementation_fields /* none */ +#define NCR5380_implementation_fields \ + int c400_ctl_status; \ + int c400_blk_cnt; \ + int c400_host_buf; #else /* therefore SCSI_G_NCR5380_MEM */ @@ -50,7 +52,6 @@ #define NCR5380_map_type unsigned long #define NCR5380_map_name base -#define NCR53C400_register_offset 0x108 #define NCR53C400_mem_base 0x3880 #define NCR53C400_host_buffer 0x3900 #define NCR5380_region_size 0x3a00 @@ -63,7 +64,10 @@ NCR53C400_mem_base + (reg)) #define NCR5380_implementation_fields \ - void __iomem *iomem; + void __iomem *iomem; \ + int c400_ctl_status; \ + int c400_blk_cnt; \ + int c400_host_buf; #endif
next prev parent reply other threads:[~2016-01-03 5:24 UTC|newest] Thread overview: 186+ messages / expand[flat|nested] mbox.gz Atom feed top 2016-01-03 5:05 [PATCH v4 00/78] More fixes, cleanup and modernization for NCR5380 drivers Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` [PATCH v4 01/78] atari_scsi: Fix SCSI host ID setting Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` [PATCH v4 02/78] ncr5380: Remove redundant static variable initializers Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` [PATCH v4 03/78] ncr5380: Eliminate PDEBUG*, TDEBUG* and DTCDEBUG* macros Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` [PATCH v4 04/78] ncr5380: Remove more pointless macros Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` [PATCH v4 05/78] ncr5380: Remove NCR5380_local_declare and NCR5380_setup macros Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` [PATCH v4 06/78] ncr5380: Remove NCR5380_instance_name macro Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` [PATCH v4 07/78] ncr5380: Split NCR5380_init() into two functions Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` [PATCH v4 08/78] ncr5380: Move NCR53C400-specific code Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` [PATCH v4 09/78] atari_NCR5380: Reset bus on driver initialization if required Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` [PATCH v4 10/78] atari_NCR5380: Remove RESET_BOOT, CONFIG_ATARI_SCSI_TOSHIBA_DELAY and CONFIG_ATARI_SCSI_RESET_BOOT Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` [PATCH v4 11/78] ncr5380: Simplify bus reset handlers Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` [PATCH v4 12/78] ncr5380: Remove unused hostdata->aborted flag Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` [PATCH v4 13/78] ncr5380: Remove redundant register writes Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` [PATCH v4 14/78] ncr5380: Use return instead of goto in NCR5380_select() Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` [PATCH v4 15/78] ncr5380: Always escalate bad target time-out " Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` [PATCH v4 16/78] ncr5380: Proceed with next command after NCR5380_select() calls scsi_done Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` [PATCH v4 17/78] ncr5380: Keep BSY asserted when entering SELECTION phase Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` [PATCH v4 18/78] ncr5380: Eliminate USLEEP_WAITLONG delay Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` [PATCH v4 19/78] ncr5380: Cleanup bogus {request,release}_region() calls Finn Thain 2016-01-03 5:05 ` [PATCH v4 19/78] ncr5380: Cleanup bogus {request, release}_region() calls Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` [PATCH v4 20/78] ncr5380: Introduce unbound workqueue Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` [PATCH v4 21/78] ncr5380: Sleep when polling, if possible Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` [PATCH v4 22/78] ncr5380: Eliminate selecting state Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` [PATCH v4 23/78] ncr5380: Always retry arbitration and selection Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` [PATCH v4 24/78] ncr5380: Implement NCR5380_dma_xfer_len and remove LIMIT_TRANSFERSIZE macro Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` [PATCH v4 25/78] ncr5380: Rework disconnect versus poll logic Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` [PATCH v4 26/78] ncr5380: Fix NCR5380_transfer_pio() result Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` [PATCH v4 27/78] ncr5380: Add missing lock in eh_abort_handler Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` [PATCH v4 28/78] ncr5380: Drop DEF_SCSI_QCMD macro Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` [PATCH v4 29/78] ncr5380: Remove references to linked commands Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` [PATCH v4 30/78] ncr5380: Add missing break after case MESSAGE_REJECT Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` [PATCH v4 31/78] ncr5380: Fix !REQ timeout in do_abort() Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` [PATCH v4 32/78] ncr5380: Fix bus phase " Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` [PATCH v4 33/78] atari_NCR5380: Set do_abort() timeouts Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` [PATCH v4 34/78] atari_NCR5380: Use arbitration timeout Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-24 10:38 ` Geert Uytterhoeven 2016-01-24 10:38 ` Geert Uytterhoeven 2016-01-25 2:45 ` Finn Thain 2016-01-25 8:05 ` Geert Uytterhoeven 2016-01-25 18:28 ` Andreas Schwab 2016-01-25 18:28 ` Andreas Schwab 2016-01-25 19:56 ` Michael Schmitz 2016-01-26 0:18 ` Finn Thain 2016-01-26 11:13 ` Geert Uytterhoeven 2016-01-03 5:05 ` [PATCH v4 35/78] ncr5380: Dont wait for BUS FREE after disconnect Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` [PATCH v4 36/78] ncr5380: Use work_struct instead of delayed_work Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` [PATCH v4 37/78] ncr5380: Standardize work queueing algorithm Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` [PATCH v4 38/78] ncr5380: Remove UNSAFE macro Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` [PATCH v4 39/78] ncr5380: Standardize interrupt handling Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` [PATCH v4 40/78] ncr5380: Introduce NCR5380_poll_politely2 Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` [PATCH v4 41/78] ncr5380: Replace redundant flags with FLAG_NO_DMA_FIXUP Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` [PATCH v4 42/78] ncr5380: Replace READ_OVERRUNS macro with FLAG_NO_DMA_FIXUPS Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` [PATCH v4 43/78] ncr5380: Standardize reselection handling Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` [PATCH v4 44/78] ncr5380: Fix off-by-one bug in extended_msg[] bounds check Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` [PATCH v4 45/78] ncr5380: Cleanup #include directives Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` [PATCH v4 46/78] ncr5380: Fix NDEBUG_NO_DATAOUT flag Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` [PATCH v4 47/78] ncr5380: Fix and cleanup scsi_host_template initializers Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` [PATCH v4 48/78] atari_NCR5380: Fix queue_size limit Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` [PATCH v4 49/78] ncr5380: Remove redundant ICR_ARBITRATION_LOST test and eliminate FLAG_DTC3181E Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` [PATCH v4 50/78] ncr5380: Change instance->host_lock to hostdata->lock Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` [PATCH v4 51/78] ncr5380: Remove command list debug code Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` [PATCH v4 52/78] ncr5380: Remove H_NO macro and introduce dsprintk Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` [PATCH v4 53/78] ncr5380: Use shost_priv helper Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` [PATCH v4 54/78] ncr5380: Use dsprintk() for queue debugging Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` [PATCH v4 55/78] ncr5380: Remove LIST and REMOVE macros Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` [PATCH v4 56/78] ncr5380: Remove redundant volatile qualifiers Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` [PATCH v4 57/78] ncr5380: Use standard list data structure Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:05 ` [PATCH v4 58/78] ncr5380: Refactor command completion Finn Thain 2016-01-03 5:05 ` Finn Thain 2016-01-03 5:06 ` [PATCH v4 59/78] ncr5380: Fix autosense bugs Finn Thain 2016-01-03 5:06 ` Finn Thain 2016-01-03 5:06 ` [PATCH v4 60/78] ncr5380: Implement new eh_abort_handler Finn Thain 2016-01-03 5:06 ` Finn Thain 2016-01-03 5:06 ` [PATCH v4 61/78] ncr5380: Fix EH during arbitration and selection Finn Thain 2016-01-03 5:06 ` Finn Thain 2016-01-03 5:06 ` [PATCH v4 62/78] ncr5380: Implement new eh_bus_reset_handler Finn Thain 2016-01-03 5:06 ` Finn Thain 2016-01-03 5:06 ` [PATCH v4 63/78] atari_NCR5380: Remove HOSTNO macro from printk() and seq_printf() calls Finn Thain 2016-01-03 5:06 ` Finn Thain 2016-01-03 5:06 ` [PATCH v4 64/78] atari_NCR5380: Eliminate HOSTNO macro Finn Thain 2016-01-03 5:06 ` Finn Thain 2016-01-03 5:06 ` [PATCH v4 65/78] atari_scsi, sun3_scsi: Remove global Scsi_Host pointer Finn Thain 2016-01-03 5:06 ` Finn Thain 2016-01-03 5:06 ` [PATCH v4 66/78] ncr5380: Fix soft lockups Finn Thain 2016-01-03 5:06 ` Finn Thain 2016-01-03 5:06 ` Finn Thain 2016-01-03 5:06 ` [PATCH v4 67/78] ncr5380: Cleanup comments Finn Thain 2016-01-03 5:06 ` Finn Thain 2016-01-03 5:06 ` [PATCH v4 68/78] ncr5380: Fix trailing whitespace using regexp Finn Thain 2016-01-03 5:06 ` Finn Thain 2016-01-03 5:06 ` [PATCH v4 69/78] ncr5380: Fix whitespace in comments " Finn Thain 2016-01-03 5:06 ` Finn Thain 2016-01-03 7:54 ` Joe Perches 2016-01-03 7:54 ` Joe Perches 2016-01-03 8:17 ` Finn Thain 2016-01-03 14:10 ` One Thousand Gnomes 2016-01-03 18:20 ` Joe Perches 2016-01-03 21:29 ` One Thousand Gnomes 2016-01-03 21:46 ` Joe Perches [not found] ` <20160103220505.7734a879@lxorguk.ukuu.org.uk> 2016-01-03 22:13 ` Joe Perches 2016-01-03 5:06 ` [PATCH v4 70/78] ncr5380: Merge changes from atari_NCR5380.c Finn Thain 2016-01-03 5:06 ` Finn Thain 2016-01-03 5:06 ` [PATCH v4 71/78] atari_NCR5380: Merge changes from NCR5380.c Finn Thain 2016-01-03 5:06 ` Finn Thain 2016-01-03 5:06 ` [PATCH v4 72/78] ncr5380: Cleanup whitespace and parentheses Finn Thain 2016-01-03 5:06 ` Finn Thain 2016-01-03 5:06 ` [PATCH v4 73/78] ncr5380: Fix pseudo DMA transfers on 53C400 Finn Thain 2016-01-03 5:06 ` Finn Thain 2016-01-03 5:06 ` Finn Thain [this message] 2016-01-03 5:06 ` [PATCH v4 74/78] ncr5380: Use runtime register mapping Finn Thain 2016-01-03 5:06 ` [PATCH v4 75/78] ncr5380: Enable PDMA for NCR53C400A Finn Thain 2016-01-03 5:06 ` Finn Thain 2016-01-03 5:06 ` [PATCH v4 76/78] ncr5380: Enable PDMA for DTC chips Finn Thain 2016-01-03 5:06 ` Finn Thain 2016-01-03 5:06 ` [PATCH v4 77/78] ncr5380: Fix wait for 53C80 registers registers after PDMA Finn Thain 2016-01-03 5:06 ` Finn Thain 2016-01-03 5:06 ` [PATCH v4 78/78] ncr5380: Add support for HP C2502 Finn Thain 2016-01-03 5:06 ` Finn Thain 2016-01-07 2:53 ` [PATCH v4 00/78] More fixes, cleanup and modernization for NCR5380 drivers Martin K. Petersen 2016-01-07 2:53 ` Martin K. Petersen
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20160103050522.561796482@telegraphics.com.au \ --to=fthain@telegraphics.com.au \ --cc=JBottomley@odin.com \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-m68k@vger.kernel.org \ --cc=linux-scsi@vger.kernel.org \ --cc=linux@rainbow-software.org \ --cc=martin.petersen@oracle.com \ --cc=schmitzmic@gmail.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.