From: Geert Uytterhoeven <geert@linux-m68k.org>
To: Linus Torvalds <torvalds@linux-foundation.org>,
Andrew Morton <akpm@linux-foundation.org>
Cc: linux-m68k@vger.kernel.org, linux-kernel@vger.kernel.org,
"James E.J. Bottomley" <James.Bottomley@SteelEye.com>,
Michael Schmitz <schmitz@debian.org>,
Roman Zippel <zippel@linux-m68k.org>
Subject: [patch 01/33] m68k: Atari SCSI revival
Date: Tue, 01 May 2007 22:32:35 +0200 [thread overview]
Message-ID: <20070501203328.845749634@mail.of.borg> (raw)
In-Reply-To: 20070501203234.252205858@mail.of.borg
[-- Attachment #1: 634-atari_scsi.diff --]
[-- Type: text/plain, Size: 7534 bytes --]
From: Michael Schmitz <schmitz@opal.biophys.uni-duesseldorf.de>
SCSI should be working on a TT (but someone should really try!) but causes
trouble on a Falcon (as in: it ate a filesystem of mine) at least when
used concurrently with IDE. I have the notion it's because locking of the
ST-DMA interrupt by IDE is broken in 2.6 (the IDE driver always complains
about trying to release an already-released ST-DMA). Needs more work, but
that's on the IDE or m68k interrupt side rather than SCSI.
Signed-off-by: Michael Schmitz <schmitz@debian.org>
Signed-off-by: Roman Zippel <zippel@linux-m68k.org>
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
---
drivers/scsi/Kconfig | 2 -
drivers/scsi/atari_NCR5380.c | 52 ++++++++++++++++++++++++++++++++++++++-----
drivers/scsi/atari_scsi.c | 10 +++-----
drivers/scsi/atari_scsi.h | 30 +++++++++++++++++++++---
4 files changed, 77 insertions(+), 17 deletions(-)
--- linux-m68k-2.6.21.orig/drivers/scsi/Kconfig
+++ linux-m68k-2.6.21/drivers/scsi/Kconfig
@@ -1649,7 +1649,7 @@ config OKTAGON_SCSI
config ATARI_SCSI
tristate "Atari native SCSI support"
- depends on ATARI && SCSI && BROKEN
+ depends on ATARI && SCSI
select SCSI_SPI_ATTRS
---help---
If you have an Atari with built-in NCR5380 SCSI controller (TT,
--- linux-m68k-2.6.21.orig/drivers/scsi/atari_NCR5380.c
+++ linux-m68k-2.6.21/drivers/scsi/atari_NCR5380.c
@@ -264,7 +264,7 @@ static struct scsi_host_template *the_te
(struct NCR5380_hostdata *)(in)->hostdata
#define HOSTDATA(in) ((struct NCR5380_hostdata *)(in)->hostdata)
-#define NEXT(cmd) ((Scsi_Cmnd *)((cmd)->host_scribble))
+#define NEXT(cmd) ((cmd)->host_scribble)
#define NEXTADDR(cmd) ((Scsi_Cmnd **)&((cmd)->host_scribble))
#define HOSTNO instance->host_no
@@ -716,7 +716,7 @@ static void NCR5380_print_status (struct
printk("NCR5380_print_status: no memory for print buffer\n");
return;
}
- len = NCR5380_proc_info(pr_bfr, &start, 0, PAGE_SIZE, HOSTNO, 0);
+ len = NCR5380_proc_info(instance, pr_bfr, &start, 0, PAGE_SIZE, 0);
pr_bfr[len] = 0;
printk("\n%s\n", pr_bfr);
free_page((unsigned long) pr_bfr);
@@ -878,6 +878,46 @@ static int NCR5380_init (struct Scsi_Hos
}
/*
+ * our own old-style timeout update
+ */
+/*
+ * The strategy is to cause the timer code to call scsi_times_out()
+ * when the soonest timeout is pending.
+ * The arguments are used when we are queueing a new command, because
+ * we do not want to subtract the time used from this time, but when we
+ * set the timer, we want to take this value into account.
+ */
+
+int atari_scsi_update_timeout(Scsi_Cmnd * SCset, int timeout)
+{
+ int rtn;
+
+ /*
+ * We are using the new error handling code to actually register/deregister
+ * timers for timeout.
+ */
+
+ if (!timer_pending(&SCset->eh_timeout)) {
+ rtn = 0;
+ } else {
+ rtn = SCset->eh_timeout.expires - jiffies;
+ }
+
+ if (timeout == 0) {
+ del_timer(&SCset->eh_timeout);
+ SCset->eh_timeout.data = (unsigned long) NULL;
+ SCset->eh_timeout.expires = 0;
+ } else {
+ if (SCset->eh_timeout.data != (unsigned long) NULL)
+ del_timer(&SCset->eh_timeout);
+ SCset->eh_timeout.data = (unsigned long) SCset;
+ SCset->eh_timeout.expires = jiffies + timeout;
+ add_timer(&SCset->eh_timeout);
+ }
+ return rtn;
+}
+
+/*
* Function : int NCR5380_queue_command (Scsi_Cmnd *cmd,
* void (*done)(Scsi_Cmnd *))
*
@@ -902,7 +942,7 @@ int NCR5380_queue_command (Scsi_Cmnd *cm
Scsi_Cmnd *tmp;
int oldto;
unsigned long flags;
- extern int update_timeout(Scsi_Cmnd * SCset, int timeout);
+ // extern int update_timeout(Scsi_Cmnd * SCset, int timeout);
#if (NDEBUG & NDEBUG_NO_WRITE)
switch (cmd->cmnd[0]) {
@@ -978,9 +1018,9 @@ int NCR5380_queue_command (Scsi_Cmnd *cm
* alter queues and touch the lock.
*/
if (!IS_A_TT()) {
- oldto = update_timeout(cmd, 0);
+ oldto = atari_scsi_update_timeout(cmd, 0);
falcon_get_lock();
- update_timeout(cmd, oldto);
+ atari_scsi_update_timeout(cmd, oldto);
}
if (!(hostdata->issue_queue) || (cmd->cmnd[0] == REQUEST_SENSE)) {
LIST(cmd, hostdata->issue_queue);
@@ -1435,7 +1475,7 @@ static int NCR5380_select (struct Scsi_H
local_irq_restore(flags);
/* Wait for arbitration logic to complete */
-#if NCR_TIMEOUT
+#if defined(NCR_TIMEOUT)
{
unsigned long timeout = jiffies + 2*NCR_TIMEOUT;
--- linux-m68k-2.6.21.orig/drivers/scsi/atari_scsi.c
+++ linux-m68k-2.6.21/drivers/scsi/atari_scsi.c
@@ -395,7 +395,7 @@ static irqreturn_t scsi_tt_intr (int irq
#endif /* REAL_DMA */
- NCR5380_intr (0, 0, 0);
+ NCR5380_intr(0, 0);
#if 0
/* To be sure the int is not masked */
@@ -461,7 +461,7 @@ static irqreturn_t scsi_falcon_intr (int
#endif /* REAL_DMA */
- NCR5380_intr (0, 0, 0);
+ NCR5380_intr(0, 0);
return IRQ_HANDLED;
}
@@ -557,11 +557,11 @@ static void falcon_get_lock( void )
local_irq_save(flags);
- while( !in_interrupt() && falcon_got_lock && stdma_others_waiting() )
+ while (!in_irq() && falcon_got_lock && stdma_others_waiting())
sleep_on( &falcon_fairness_wait );
while (!falcon_got_lock) {
- if (in_interrupt())
+ if (in_irq())
panic( "Falcon SCSI hasn't ST-DMA lock in interrupt" );
if (!falcon_trying_lock) {
falcon_trying_lock = 1;
@@ -763,7 +763,6 @@ int atari_scsi_detect (struct scsi_host_
return( 1 );
}
-#ifdef MODULE
int atari_scsi_release (struct Scsi_Host *sh)
{
if (IS_A_TT())
@@ -772,7 +771,6 @@ int atari_scsi_release (struct Scsi_Host
atari_stram_free (atari_dma_buffer);
return 1;
}
-#endif
void __init atari_scsi_setup(char *str, int *ints)
{
--- linux-m68k-2.6.21.orig/drivers/scsi/atari_scsi.h
+++ linux-m68k-2.6.21/drivers/scsi/atari_scsi.h
@@ -21,11 +21,7 @@
int atari_scsi_detect (struct scsi_host_template *);
const char *atari_scsi_info (struct Scsi_Host *);
int atari_scsi_reset (Scsi_Cmnd *, unsigned int);
-#ifdef MODULE
int atari_scsi_release (struct Scsi_Host *);
-#else
-#define atari_scsi_release NULL
-#endif
/* The values for CMD_PER_LUN and CAN_QUEUE are somehow arbitrary. Higher
* values should work, too; try it! (but cmd_per_lun costs memory!) */
@@ -63,6 +59,32 @@ int atari_scsi_release (struct Scsi_Host
#define NCR5380_dma_xfer_len(i,cmd,phase) \
atari_dma_xfer_len(cmd->SCp.this_residual,cmd,((phase) & SR_IO) ? 0 : 1)
+/* former generic SCSI error handling stuff */
+
+#define SCSI_ABORT_SNOOZE 0
+#define SCSI_ABORT_SUCCESS 1
+#define SCSI_ABORT_PENDING 2
+#define SCSI_ABORT_BUSY 3
+#define SCSI_ABORT_NOT_RUNNING 4
+#define SCSI_ABORT_ERROR 5
+
+#define SCSI_RESET_SNOOZE 0
+#define SCSI_RESET_PUNT 1
+#define SCSI_RESET_SUCCESS 2
+#define SCSI_RESET_PENDING 3
+#define SCSI_RESET_WAKEUP 4
+#define SCSI_RESET_NOT_RUNNING 5
+#define SCSI_RESET_ERROR 6
+
+#define SCSI_RESET_SYNCHRONOUS 0x01
+#define SCSI_RESET_ASYNCHRONOUS 0x02
+#define SCSI_RESET_SUGGEST_BUS_RESET 0x04
+#define SCSI_RESET_SUGGEST_HOST_RESET 0x08
+
+#define SCSI_RESET_BUS_RESET 0x100
+#define SCSI_RESET_HOST_RESET 0x200
+#define SCSI_RESET_ACTION 0xff
+
/* Debugging printk definitions:
*
* ARB -> arbitration
--
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
next prev parent reply other threads:[~2007-05-01 20:34 UTC|newest]
Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-05-01 20:32 [patch 00/33] m68k patches for 2.6.22 Geert Uytterhoeven
2007-05-01 20:32 ` Geert Uytterhoeven [this message]
2007-05-01 20:46 ` [patch 01/33] m68k: Atari SCSI revival Christoph Hellwig
2007-05-01 20:32 ` [patch 02/33] m68k: Reformat the Atari SCSI driver Geert Uytterhoeven
2007-05-01 20:32 ` [patch 03/33] m68k: Atari SCSI driver compile fixes Geert Uytterhoeven
2007-05-01 20:32 ` [patch 04/33] m68k: Atari keyboard and mouse support Geert Uytterhoeven
2007-05-01 20:57 ` Christoph Hellwig
2007-05-01 21:09 ` Dmitry Torokhov
2007-05-03 10:34 ` Michael Schmitz
2007-05-03 10:47 ` Michael Schmitz
2007-05-03 10:50 ` Christoph Hellwig
2007-05-03 10:54 ` Michael Schmitz
2007-05-01 20:32 ` [patch 05/33] m68k: Atari fb revival Geert Uytterhoeven
2007-05-01 21:50 ` Antonino A. Daplas
2007-05-02 20:01 ` James Simmons
2007-05-03 10:33 ` Michael Schmitz
2007-05-01 20:32 ` [patch 06/33] m68k: CROSS_COMPILE = m68k-linux-gnu- Geert Uytterhoeven
2007-05-01 22:56 ` Ville Syrjälä
2007-05-06 11:26 ` Geert Uytterhoeven
2007-05-06 12:55 ` Ville Syrjälä
2007-05-01 20:32 ` [patch 07/33] m68k: Mac89x0 Ethernet netif updates Geert Uytterhoeven
2007-05-01 20:57 ` Jeff Garzik
2007-05-01 20:32 ` [patch 08/33] lockdep: Add missing disable/enable irq variant Geert Uytterhoeven
2007-05-01 20:32 ` [patch 09/33] m68k: reformat various m68k files Geert Uytterhoeven
2007-05-01 20:32 ` [patch 10/33] hilkbd: Kill compiler warning and fix comment dyslexia Geert Uytterhoeven
2007-05-01 20:32 ` [patch 11/33] m68k: early parameter support Geert Uytterhoeven
2007-05-01 20:32 ` [patch 12/33] m68k: make Atari IDE lock reentrant Geert Uytterhoeven
2007-05-01 20:32 ` [patch 13/33] m68k: Correct number of interrupts for Sun3 Geert Uytterhoeven
2007-05-01 20:32 ` [patch 14/33] m68k: Atari SCSI workqueue updates Geert Uytterhoeven
2007-05-01 20:32 ` [patch 15/33] m68k: pmu_queue_request() declaration conflict Geert Uytterhoeven
2007-05-01 20:32 ` [patch 16/33] m68k: Amiga A2065 and Ariadne TX statistics Geert Uytterhoeven
2007-05-01 20:32 ` [patch 17/33] m68k: remove unused adb.h Geert Uytterhoeven
2007-05-01 20:32 ` [patch 18/33] m68k: Mac interrupt priorities Geert Uytterhoeven
2007-05-01 20:32 ` [patch 19/33] NuBus header update Geert Uytterhoeven
2007-05-02 19:47 ` James Simmons
2007-05-03 2:14 ` Brad Boyer
2007-05-01 20:32 ` [patch 20/33] m68k: Mac DP8390 update Geert Uytterhoeven
2007-05-01 20:32 ` [patch 21/33] m68k: reverse Mac IRQ damage Geert Uytterhoeven
2007-05-01 20:32 ` [patch 22/33] m68k: Mac IRQ prep Geert Uytterhoeven
2007-05-01 20:32 ` [patch 23/33] m68k: Mac nubus IRQ fixes (plan E) Geert Uytterhoeven
2007-05-01 20:32 ` [patch 24/33] m68k: Mac IRQ cleanup Geert Uytterhoeven
2007-05-01 20:32 ` [patch 25/33] m68k: Mac II ADB fixes Geert Uytterhoeven
2007-05-01 20:33 ` [patch 26/33] CUDA " Geert Uytterhoeven
2007-05-01 20:33 ` [patch 27/33] m68k: macmace fixes Geert Uytterhoeven
2007-05-01 20:33 ` [patch 28/33] SONIC: small fix and cleanup Geert Uytterhoeven
2007-05-01 20:33 ` [patch 29/33] SONIC interrupt handling Geert Uytterhoeven
2007-05-01 21:12 ` Christoph Hellwig
2007-05-02 2:55 ` [patch 29/33] SONIC interrupt handling, v4 Finn Thain
2007-05-01 20:33 ` [patch 30/33] Amiga Zorro bus: kill resource_size_t warnings Geert Uytterhoeven
2007-05-01 20:33 ` [patch 31/33] m68k: kill skb_copy_from_linear_data compiler warnings Geert Uytterhoeven
2007-05-01 20:33 ` [patch 32/33] m68k: export csum_partial_copy_from_user Geert Uytterhoeven
2007-05-01 20:33 ` [patch 33/33] Convert non-highmem kmap_atomic() to static inline function Geert Uytterhoeven
2007-05-01 20:49 ` [patch 00/33] m68k patches for 2.6.22 Christoph Hellwig
2007-05-03 1:27 ` Roman Zippel
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=20070501203328.845749634@mail.of.borg \
--to=geert@linux-m68k.org \
--cc=James.Bottomley@SteelEye.com \
--cc=akpm@linux-foundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-m68k@vger.kernel.org \
--cc=schmitz@debian.org \
--cc=torvalds@linux-foundation.org \
--cc=zippel@linux-m68k.org \
/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;
as well as URLs for NNTP newsgroup(s).