From: Finn Thain <fthain@telegraphics.com.au>
To: "James E.J. Bottomley" <JBottomley@odin.com>,
Michael Schmitz <schmitzmic@gmail.com>,
<linux-m68k@vger.kernel.org>, <linux-scsi@vger.kernel.org>,
<linux-kernel@vger.kernel.org>,
Russell King <linux@arm.linux.org.uk>,
linux-arm-kernel@lists.infradead.org
Subject: [PATCH v2 24/72] ncr5380: Implement NCR5380_dma_xfer_len and remove LIMIT_TRANSFERSIZE macro
Date: Sun, 06 Dec 2015 12:31:50 +1100 [thread overview]
Message-ID: <20151206013132.886681432@telegraphics.com.au> (raw)
In-Reply-To: 20151206013126.995379403@telegraphics.com.au
[-- Attachment #1: ncr5380-implement-NCR5380_dma_xfer_len --]
[-- Type: text/plain, Size: 9613 bytes --]
Follow the example of the atari_NCR5380.c core driver and adopt the
NCR5380_dma_xfer_len() hook. Implement NCR5380_dma_xfer_len() for dtc.c
and g_NCR5380.c to take care of the limitations of these cards. Keep the
default for drivers using PSEUDO_DMA.
Eliminate the unused macro LIMIT_TRANSFERSIZE.
Signed-off-by: Finn Thain <fthain@telegraphics.com.au>
---
drivers/scsi/NCR5380.c | 32 +++++---------------------------
drivers/scsi/arm/cumana_1.c | 3 +++
drivers/scsi/arm/oak.c | 2 ++
drivers/scsi/atari_NCR5380.c | 8 +++++---
drivers/scsi/dtc.c | 14 ++++++++++++++
drivers/scsi/dtc.h | 3 +++
drivers/scsi/g_NCR5380.c | 15 +++++++++++++++
drivers/scsi/g_NCR5380.h | 3 +++
drivers/scsi/mac_scsi.c | 1 +
drivers/scsi/pas16.h | 2 ++
drivers/scsi/t128.h | 2 ++
11 files changed, 55 insertions(+), 30 deletions(-)
Index: linux/drivers/scsi/NCR5380.c
===================================================================
--- linux.orig/drivers/scsi/NCR5380.c 2015-12-06 12:30:00.000000000 +1100
+++ linux/drivers/scsi/NCR5380.c 2015-12-06 12:30:02.000000000 +1100
@@ -201,11 +201,6 @@
* DONT_USE_INTR - if defined, never use interrupts, even if we probe or
* override-configure an IRQ.
*
- * LIMIT_TRANSFERSIZE - if defined, limit the pseudo-dma transfers to 512
- * bytes at a time. Since interrupts are disabled by default during
- * these transfers, we might need this to give reasonable interrupt
- * service time if the transfer size gets too large.
- *
* LINKED - if defined, linked commands are supported.
*
* PSEUDO_DMA - if defined, PSEUDO DMA is used during the data transfer phases.
@@ -1995,29 +1990,12 @@ static void NCR5380_information_transfer
*/
#if defined(PSEUDO_DMA) || defined(REAL_DMA_POLL)
- /* KLL
- * PSEUDO_DMA is defined here. If this is the g_NCR5380
- * driver then it will always be defined, so the
- * FLAG_NO_PSEUDO_DMA is used to inhibit PDMA in the base
- * NCR5380 case. I think this is a fairly clean solution.
- * We supplement these 2 if's with the flag.
- */
-#ifdef NCR5380_dma_xfer_len
- if (!cmd->device->borken && !(hostdata->flags & FLAG_NO_PSEUDO_DMA) && (transfersize = NCR5380_dma_xfer_len(instance, cmd)) != 0) {
-#else
- transfersize = cmd->transfersize;
+ transfersize = 0;
+ if (!cmd->device->borken &&
+ !(hostdata->flags & FLAG_NO_PSEUDO_DMA))
+ transfersize = NCR5380_dma_xfer_len(instance, cmd, phase);
-#ifdef LIMIT_TRANSFERSIZE /* If we have problems with interrupt service */
- if (transfersize > 512)
- transfersize = 512;
-#endif /* LIMIT_TRANSFERSIZE */
-
- if (!cmd->device->borken && transfersize && !(hostdata->flags & FLAG_NO_PSEUDO_DMA) && cmd->SCp.this_residual && !(cmd->SCp.this_residual % transfersize)) {
- /* Limit transfers to 32K, for xx400 & xx406
- * pseudoDMA that transfers in 128 bytes blocks. */
- if (transfersize > 32 * 1024)
- transfersize = 32 * 1024;
-#endif
+ if (transfersize) {
len = transfersize;
if (NCR5380_transfer_dma(instance, &phase, &len, (unsigned char **) &cmd->SCp.ptr)) {
/*
Index: linux/drivers/scsi/atari_NCR5380.c
===================================================================
--- linux.orig/drivers/scsi/atari_NCR5380.c 2015-12-06 12:30:00.000000000 +1100
+++ linux/drivers/scsi/atari_NCR5380.c 2015-12-06 12:30:02.000000000 +1100
@@ -2165,11 +2165,13 @@ static void NCR5380_information_transfer
*/
#if defined(REAL_DMA)
- if (
#if !defined(CONFIG_SUN3)
- !cmd->device->borken &&
+ transfersize = 0;
+ if (!cmd->device->borken)
#endif
- (transfersize = NCR5380_dma_xfer_len(instance, cmd, phase)) >= DMA_MIN_SIZE) {
+ transfersize = NCR5380_dma_xfer_len(instance, cmd, phase);
+
+ if (transfersize >= DMA_MIN_SIZE) {
len = transfersize;
cmd->SCp.phase = phase;
if (NCR5380_transfer_dma(instance, &phase,
Index: linux/drivers/scsi/dtc.c
===================================================================
--- linux.orig/drivers/scsi/dtc.c 2015-12-06 12:29:51.000000000 +1100
+++ linux/drivers/scsi/dtc.c 2015-12-06 12:30:02.000000000 +1100
@@ -419,6 +419,20 @@ static inline int NCR5380_pwrite(struct
return (0);
}
+static int dtc_dma_xfer_len(struct scsi_cmnd *cmd)
+{
+ int transfersize = cmd->transfersize;
+
+ /* Limit transfers to 32K, for xx400 & xx406
+ * pseudoDMA that transfers in 128 bytes blocks.
+ */
+ if (transfersize > 32 * 1024 && cmd->SCp.this_residual &&
+ !(cmd->SCp.this_residual % transfersize))
+ transfersize = 32 * 1024;
+
+ return transfersize;
+}
+
MODULE_LICENSE("GPL");
#include "NCR5380.c"
Index: linux/drivers/scsi/g_NCR5380.c
===================================================================
--- linux.orig/drivers/scsi/g_NCR5380.c 2015-12-06 12:29:51.000000000 +1100
+++ linux/drivers/scsi/g_NCR5380.c 2015-12-06 12:30:02.000000000 +1100
@@ -699,6 +699,21 @@ static inline int NCR5380_pwrite(struct
; // TIMEOUT
return 0;
}
+
+static int generic_NCR5380_dma_xfer_len(struct scsi_cmnd *cmd)
+{
+ int transfersize = cmd->transfersize;
+
+ /* Limit transfers to 32K, for xx400 & xx406
+ * pseudoDMA that transfers in 128 bytes blocks.
+ */
+ if (transfersize > 32 * 1024 && cmd->SCp.this_residual &&
+ !(cmd->SCp.this_residual % transfersize))
+ transfersize = 32 * 1024;
+
+ return transfersize;
+}
+
#endif /* PSEUDO_DMA */
/*
Index: linux/drivers/scsi/g_NCR5380.h
===================================================================
--- linux.orig/drivers/scsi/g_NCR5380.h 2015-12-06 12:29:33.000000000 +1100
+++ linux/drivers/scsi/g_NCR5380.h 2015-12-06 12:30:02.000000000 +1100
@@ -73,6 +73,9 @@
#endif
+#define NCR5380_dma_xfer_len(instance, cmd, phase) \
+ generic_NCR5380_dma_xfer_len(cmd)
+
#define NCR5380_intr generic_NCR5380_intr
#define NCR5380_queue_command generic_NCR5380_queue_command
#define NCR5380_abort generic_NCR5380_abort
Index: linux/drivers/scsi/dtc.h
===================================================================
--- linux.orig/drivers/scsi/dtc.h 2015-12-06 12:29:25.000000000 +1100
+++ linux/drivers/scsi/dtc.h 2015-12-06 12:30:02.000000000 +1100
@@ -27,6 +27,9 @@
#define NCR5380_read(reg) (readb(DTC_address(reg)))
#define NCR5380_write(reg, value) (writeb(value, DTC_address(reg)))
+#define NCR5380_dma_xfer_len(instance, cmd, phase) \
+ dtc_dma_xfer_len(cmd)
+
#define NCR5380_intr dtc_intr
#define NCR5380_queue_command dtc_queue_command
#define NCR5380_abort dtc_abort
Index: linux/drivers/scsi/arm/cumana_1.c
===================================================================
--- linux.orig/drivers/scsi/arm/cumana_1.c 2015-12-06 12:29:51.000000000 +1100
+++ linux/drivers/scsi/arm/cumana_1.c 2015-12-06 12:30:02.000000000 +1100
@@ -22,6 +22,9 @@
#define priv(host) ((struct NCR5380_hostdata *)(host)->hostdata)
#define NCR5380_read(reg) cumanascsi_read(instance, reg)
#define NCR5380_write(reg, value) cumanascsi_write(instance, reg, value)
+
+#define NCR5380_dma_xfer_len(instance, cmd, phase) (cmd->transfersize)
+
#define NCR5380_intr cumanascsi_intr
#define NCR5380_queue_command cumanascsi_queue_command
#define NCR5380_info cumanascsi_info
Index: linux/drivers/scsi/arm/oak.c
===================================================================
--- linux.orig/drivers/scsi/arm/oak.c 2015-12-06 12:29:51.000000000 +1100
+++ linux/drivers/scsi/arm/oak.c 2015-12-06 12:30:02.000000000 +1100
@@ -26,6 +26,8 @@
#define NCR5380_write(reg, value) \
writeb(value, priv(instance)->base + ((reg) << 2))
+#define NCR5380_dma_xfer_len(instance, cmd, phase) (cmd->transfersize)
+
#define NCR5380_queue_command oakscsi_queue_command
#define NCR5380_info oakscsi_info
#define NCR5380_show_info oakscsi_show_info
Index: linux/drivers/scsi/mac_scsi.c
===================================================================
--- linux.orig/drivers/scsi/mac_scsi.c 2015-12-06 12:29:51.000000000 +1100
+++ linux/drivers/scsi/mac_scsi.c 2015-12-06 12:30:02.000000000 +1100
@@ -38,6 +38,7 @@
#define NCR5380_pread macscsi_pread
#define NCR5380_pwrite macscsi_pwrite
+#define NCR5380_dma_xfer_len(instance, cmd, phase) (cmd->transfersize)
#define NCR5380_intr macscsi_intr
#define NCR5380_queue_command macscsi_queue_command
Index: linux/drivers/scsi/pas16.h
===================================================================
--- linux.orig/drivers/scsi/pas16.h 2015-12-06 12:29:25.000000000 +1100
+++ linux/drivers/scsi/pas16.h 2015-12-06 12:30:02.000000000 +1100
@@ -110,6 +110,8 @@
#define NCR5380_read(reg) ( inb(PAS16_io_port(reg)) )
#define NCR5380_write(reg, value) ( outb((value),PAS16_io_port(reg)) )
+#define NCR5380_dma_xfer_len(instance, cmd, phase) (cmd->transfersize)
+
#define NCR5380_intr pas16_intr
#define NCR5380_queue_command pas16_queue_command
#define NCR5380_abort pas16_abort
Index: linux/drivers/scsi/t128.h
===================================================================
--- linux.orig/drivers/scsi/t128.h 2015-12-06 12:29:25.000000000 +1100
+++ linux/drivers/scsi/t128.h 2015-12-06 12:30:02.000000000 +1100
@@ -84,6 +84,8 @@
#define NCR5380_read(reg) readb(T128_address(reg))
#define NCR5380_write(reg, value) writeb((value),(T128_address(reg)))
+#define NCR5380_dma_xfer_len(instance, cmd, phase) (cmd->transfersize)
+
#define NCR5380_intr t128_intr
#define NCR5380_queue_command t128_queue_command
#define NCR5380_abort t128_abort
next prev parent reply other threads:[~2015-12-06 4:00 UTC|newest]
Thread overview: 75+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-12-06 1:31 [PATCH v2 00/72] More fixes, cleanup and modernization for NCR5380 drivers Finn Thain
2015-12-06 1:31 ` [PATCH v2 01/72] atari_scsi: Fix SCSI host ID setting Finn Thain
2015-12-06 1:31 ` [PATCH v2 02/72] ncr5380: Remove redundant static variable initializers Finn Thain
2015-12-06 1:31 ` [PATCH v2 03/72] ncr5380: Eliminate PDEBUG*, TDEBUG* and DTCDEBUG* macros Finn Thain
2015-12-06 1:31 ` [PATCH v2 04/72] ncr5380: Remove more pointless macros Finn Thain
2015-12-06 1:31 ` [PATCH v2 05/72] ncr5380: Remove NCR5380_local_declare and NCR5380_setup macros Finn Thain
2015-12-06 1:31 ` [PATCH v2 06/72] ncr5380: Remove NCR5380_instance_name macro Finn Thain
2015-12-06 1:31 ` [PATCH v2 07/72] ncr5380: Split NCR5380_init() into two functions Finn Thain
2015-12-06 1:31 ` [PATCH v2 08/72] ncr5380: Move NCR53C400-specific code Finn Thain
2015-12-06 1:31 ` [PATCH v2 09/72] atari_NCR5380: Reset bus on driver initialization if required Finn Thain
2015-12-06 1:31 ` [PATCH v2 10/72] atari_NCR5380: Remove RESET_BOOT, CONFIG_ATARI_SCSI_TOSHIBA_DELAY and CONFIG_ATARI_SCSI_RESET_BOOT Finn Thain
2015-12-06 1:31 ` [PATCH v2 11/72] ncr5380: Simplify bus reset handlers Finn Thain
2015-12-06 1:31 ` [PATCH v2 12/72] ncr5380: Remove unused hostdata->aborted flag Finn Thain
2015-12-06 1:31 ` [PATCH v2 13/72] ncr5380: Remove redundant register writes Finn Thain
2015-12-06 1:31 ` [PATCH v2 14/72] ncr5380: Use return instead of goto in NCR5380_select() Finn Thain
2015-12-06 1:31 ` [PATCH v2 15/72] ncr5380: Always escalate bad target time-out " Finn Thain
2015-12-06 1:31 ` [PATCH v2 16/72] ncr5380: Proceed with next command after NCR5380_select() calls scsi_done Finn Thain
2015-12-06 1:31 ` [PATCH v2 17/72] ncr5380: Keep BSY asserted when entering SELECTION phase Finn Thain
2015-12-06 1:31 ` [PATCH v2 18/72] ncr5380: Eliminate USLEEP_WAITLONG delay Finn Thain
2015-12-06 1:31 ` [PATCH v2 19/72] ncr5380: Cleanup bogus {request,release}_region() calls Finn Thain
2015-12-06 1:31 ` [PATCH v2 20/72] ncr5380: Introduce unbound workqueue Finn Thain
2015-12-06 1:31 ` [PATCH v2 21/72] ncr5380: Sleep when polling, if possible Finn Thain
2015-12-06 10:18 ` Geert Uytterhoeven
2015-12-06 22:07 ` Finn Thain
2015-12-06 1:31 ` [PATCH v2 22/72] ncr5380: Eliminate selecting state Finn Thain
2015-12-06 1:31 ` [PATCH v2 23/72] ncr5380: Always retry arbitration and selection Finn Thain
2015-12-06 1:31 ` Finn Thain [this message]
2015-12-06 1:31 ` [PATCH v2 25/72] ncr5380: Rework disconnect versus poll logic Finn Thain
2015-12-06 1:31 ` [PATCH v2 26/72] ncr5380: Fix NCR5380_transfer_pio() result Finn Thain
2015-12-06 1:31 ` [PATCH v2 27/72] ncr5380: Add missing lock in eh_abort_handler Finn Thain
2015-12-06 1:31 ` [PATCH v2 28/72] ncr5380: Drop DEF_SCSI_QCMD macro Finn Thain
2015-12-06 1:31 ` [PATCH v2 29/72] ncr5380: Remove references to linked commands Finn Thain
2015-12-06 1:31 ` [PATCH v2 30/72] ncr5380: Add missing break after case MESSAGE_REJECT Finn Thain
2015-12-06 1:31 ` [PATCH v2 31/72] ncr5380: Fix !REQ timeout in do_abort() Finn Thain
2015-12-06 1:31 ` [PATCH v2 32/72] ncr5380: Fix bus phase " Finn Thain
2015-12-06 1:31 ` [PATCH v2 33/72] atari_NCR5380: Set do_abort() timeouts Finn Thain
2015-12-06 1:32 ` [PATCH v2 34/72] atari_NCR5380: Use arbitration timeout Finn Thain
2015-12-06 1:32 ` [PATCH v2 35/72] ncr5380: Dont wait for BUS FREE after disconnect Finn Thain
2015-12-06 1:32 ` [PATCH v2 36/72] ncr5380: Use work_struct instead of delayed_work Finn Thain
2015-12-06 1:32 ` [PATCH v2 37/72] ncr5380: Standardize work queueing algorithm Finn Thain
2015-12-06 1:32 ` [PATCH v2 38/72] ncr5380: Remove UNSAFE macro Finn Thain
2015-12-06 1:32 ` [PATCH v2 39/72] ncr5380: Standardize interrupt handling Finn Thain
2015-12-06 1:32 ` [PATCH v2 40/72] ncr5380: Introduce NCR5380_poll_politely2 Finn Thain
2015-12-06 1:32 ` [PATCH v2 41/72] ncr5380: Replace redundant flags with FLAG_NO_DMA_FIXUP Finn Thain
2015-12-06 1:32 ` [PATCH v2 42/72] ncr5380: Replace READ_OVERRUNS macro with FLAG_NO_DMA_FIXUPS Finn Thain
2015-12-06 1:32 ` [PATCH v2 43/72] ncr5380: Standardize reselection handling Finn Thain
2015-12-06 1:32 ` [PATCH v2 44/72] ncr5380: Fix off-by-one bug in extended_msg[] bounds check Finn Thain
2015-12-06 1:32 ` [PATCH v2 45/72] ncr5380: Cleanup #include directives Finn Thain
2015-12-06 1:32 ` [PATCH v2 46/72] ncr5380: Fix NDEBUG_NO_DATAOUT flag Finn Thain
2015-12-06 1:32 ` [PATCH v2 47/72] ncr5380: Fix and cleanup scsi_host_template initializers Finn Thain
2015-12-06 1:32 ` [PATCH v2 48/72] atari_NCR5380: Fix queue_size limit Finn Thain
2015-12-06 1:32 ` [PATCH v2 49/72] ncr5380: Remove redundant ICR_ARBITRATION_LOST test and eliminate FLAG_DTC3181E Finn Thain
2015-12-06 1:32 ` [PATCH v2 50/72] ncr5380: Change instance->host_lock to hostdata->lock Finn Thain
2015-12-06 1:32 ` [PATCH v2 51/72] ncr5380: Remove command list debug code Finn Thain
2015-12-06 1:32 ` [PATCH v2 52/72] ncr5380: Remove H_NO macro and introduce dsprintk Finn Thain
2015-12-06 1:32 ` [PATCH v2 53/72] ncr5380: Use shost_priv helper Finn Thain
2015-12-06 1:32 ` [PATCH v2 54/72] ncr5380: Use dsprintk() for queue debugging Finn Thain
2015-12-06 1:32 ` [PATCH v2 55/72] ncr5380: Remove LIST and REMOVE macros Finn Thain
2015-12-06 1:32 ` [PATCH v2 56/72] ncr5380: Remove redundant volatile qualifiers Finn Thain
2015-12-06 1:32 ` [PATCH v2 57/72] ncr5380: Use standard list data structure Finn Thain
2015-12-06 1:32 ` [PATCH v2 58/72] ncr5380: Refactor command completion Finn Thain
2015-12-06 1:32 ` [PATCH v2 59/72] ncr5380: Fix autosense bugs Finn Thain
2015-12-06 1:32 ` [PATCH v2 60/72] ncr5380: Implement new eh_abort_handler Finn Thain
2015-12-06 1:32 ` [PATCH v2 61/72] ncr5380: Fix EH during arbitration and selection Finn Thain
2015-12-06 1:32 ` [PATCH v2 62/72] ncr5380: Implement new eh_bus_reset_handler Finn Thain
2015-12-06 1:32 ` [PATCH v2 63/72] atari_NCR5380: Remove HOSTNO macro from printk() and seq_printf() calls Finn Thain
2015-12-06 1:32 ` [PATCH v2 64/72] atari_NCR5380: Eliminate HOSTNO macro Finn Thain
2015-12-06 1:32 ` [PATCH v2 65/72] atari_scsi, sun3_scsi: Remove global Scsi_Host pointer Finn Thain
2015-12-06 1:32 ` [PATCH v2 66/72] ncr5380: Fix soft lockups Finn Thain
2015-12-06 1:32 ` [PATCH v2 67/72] ncr5380: Cleanup comments Finn Thain
2015-12-06 1:32 ` [PATCH v2 68/72] ncr5380: Fix whitespace issues using regexp Finn Thain
2015-12-06 1:32 ` [PATCH v2 69/72] ncr5380: Merge changes from atari_NCR5380.c Finn Thain
2015-12-06 1:32 ` [PATCH v2 70/72] atari_NCR5380: Merge changes from NCR5380.c Finn Thain
2015-12-06 1:32 ` [PATCH v2 71/72] ncr5380: Cleanup whitespace and parentheses Finn Thain
2015-12-06 1:32 ` [PATCH v2 72/72] ncr5380: Fix pseudo DMA transfers on 53C400 Finn Thain
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=20151206013132.886681432@telegraphics.com.au \
--to=fthain@telegraphics.com.au \
--cc=JBottomley@odin.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-m68k@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=linux@arm.linux.org.uk \
--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: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox