File: /usr/src/linux/drivers/scsi/atari_scsi.c

1     /*
2      * atari_scsi.c -- Device dependent functions for the Atari generic SCSI port
3      *
4      * Copyright 1994 Roman Hodek <Roman.Hodek@informatik.uni-erlangen.de>
5      *
6      *   Loosely based on the work of Robert De Vries' team and added:
7      *    - working real DMA
8      *    - Falcon support (untested yet!)   ++bjoern fixed and now it works
9      *    - lots of extensions and bug fixes.
10      *
11      * This file is subject to the terms and conditions of the GNU General Public
12      * License.  See the file COPYING in the main directory of this archive
13      * for more details.
14      *
15      */
16     
17     
18     /**************************************************************************/
19     /*                                                                        */
20     /* Notes for Falcon SCSI:                                                 */
21     /* ----------------------                                                 */
22     /*                                                                        */
23     /* Since the Falcon SCSI uses the ST-DMA chip, that is shared among       */
24     /* several device drivers, locking and unlocking the access to this       */
25     /* chip is required. But locking is not possible from an interrupt,       */
26     /* since it puts the process to sleep if the lock is not available.       */
27     /* This prevents "late" locking of the DMA chip, i.e. locking it just     */
28     /* before using it, since in case of disconnection-reconnection           */
29     /* commands, the DMA is started from the reselection interrupt.           */
30     /*                                                                        */
31     /* Two possible schemes for ST-DMA-locking would be:                      */
32     /*  1) The lock is taken for each command separately and disconnecting    */
33     /*     is forbidden (i.e. can_queue = 1).                                 */
34     /*  2) The DMA chip is locked when the first command comes in and         */
35     /*     released when the last command is finished and all queues are      */
36     /*     empty.                                                             */
37     /* The first alternative would result in bad performance, since the       */
38     /* interleaving of commands would not be used. The second is unfair to    */
39     /* other drivers using the ST-DMA, because the queues will seldom be      */
40     /* totally empty if there is a lot of disk traffic.                       */
41     /*                                                                        */
42     /* For this reasons I decided to employ a more elaborate scheme:          */
43     /*  - First, we give up the lock every time we can (for fairness), this    */
44     /*    means every time a command finishes and there are no other commands */
45     /*    on the disconnected queue.                                          */
46     /*  - If there are others waiting to lock the DMA chip, we stop           */
47     /*    issuing commands, i.e. moving them onto the issue queue.           */
48     /*    Because of that, the disconnected queue will run empty in a         */
49     /*    while. Instead we go to sleep on a 'fairness_queue'.                */
50     /*  - If the lock is released, all processes waiting on the fairness      */
51     /*    queue will be woken. The first of them tries to re-lock the DMA,     */
52     /*    the others wait for the first to finish this task. After that,      */
53     /*    they can all run on and do their commands...                        */
54     /* This sounds complicated (and it is it :-(), but it seems to be a       */
55     /* good compromise between fairness and performance: As long as no one     */
56     /* else wants to work with the ST-DMA chip, SCSI can go along as          */
57     /* usual. If now someone else comes, this behaviour is changed to a       */
58     /* "fairness mode": just already initiated commands are finished and      */
59     /* then the lock is released. The other one waiting will probably win     */
60     /* the race for locking the DMA, since it was waiting for longer. And     */
61     /* after it has finished, SCSI can go ahead again. Finally: I hope I      */
62     /* have not produced any deadlock possibilities!                          */
63     /*                                                                        */
64     /**************************************************************************/
65     
66     
67     
68     #include <linux/config.h>
69     #include <linux/module.h>
70     
71     #define NDEBUG (0)
72     
73     #define NDEBUG_ABORT	0x800000
74     #define NDEBUG_TAGS	0x1000000
75     #define NDEBUG_MERGING	0x2000000
76     
77     #define AUTOSENSE
78     /* For the Atari version, use only polled IO or REAL_DMA */
79     #define	REAL_DMA
80     /* Support tagged queuing? (on devices that are able to... :-) */
81     #define	SUPPORT_TAGS
82     #define	MAX_TAGS 32
83     
84     #include <linux/types.h>
85     #include <linux/stddef.h>
86     #include <linux/ctype.h>
87     #include <linux/delay.h>
88     #include <linux/mm.h>
89     #include <linux/blk.h>
90     #include <linux/sched.h>
91     #include <linux/interrupt.h>
92     #include <linux/init.h>
93     #include <linux/nvram.h>
94     
95     #include <asm/setup.h>
96     #include <asm/atarihw.h>
97     #include <asm/atariints.h>
98     #include <asm/page.h>
99     #include <asm/pgtable.h>
100     #include <asm/irq.h>
101     #include <asm/traps.h>
102     #include <asm/bitops.h>
103     
104     #include "scsi.h"
105     #include "hosts.h"
106     #include "atari_scsi.h"
107     #include "NCR5380.h"
108     #include "constants.h"
109     #include <asm/atari_stdma.h>
110     #include <asm/atari_stram.h>
111     #include <asm/io.h>
112     
113     #include <linux/stat.h>
114     
115     #define	IS_A_TT()	ATARIHW_PRESENT(TT_SCSI)
116     
117     #define	SCSI_DMA_WRITE_P(elt,val)				\
118     	do {							\
119     		unsigned long v = val;				\
120     		tt_scsi_dma.elt##_lo = v & 0xff;		\
121     		v >>= 8;					\
122     		tt_scsi_dma.elt##_lmd = v & 0xff;		\
123     		v >>= 8;					\
124     		tt_scsi_dma.elt##_hmd = v & 0xff;		\
125     		v >>= 8;					\
126     		tt_scsi_dma.elt##_hi = v & 0xff;		\
127     	} while(0)
128     
129     #define	SCSI_DMA_READ_P(elt)					\
130     	(((((((unsigned long)tt_scsi_dma.elt##_hi << 8) |	\
131     	     (unsigned long)tt_scsi_dma.elt##_hmd) << 8) |	\
132     	   (unsigned long)tt_scsi_dma.elt##_lmd) << 8) |	\
133     	 (unsigned long)tt_scsi_dma.elt##_lo)
134     
135     
136     static inline void SCSI_DMA_SETADR(unsigned long adr)
137     {
138     	st_dma.dma_lo = (unsigned char)adr;
139     	MFPDELAY();
140     	adr >>= 8;
141     	st_dma.dma_md = (unsigned char)adr;
142     	MFPDELAY();
143     	adr >>= 8;
144     	st_dma.dma_hi = (unsigned char)adr;
145     	MFPDELAY();
146     }
147     
148     static inline unsigned long SCSI_DMA_GETADR(void)
149     {
150     	unsigned long adr;
151     	adr = st_dma.dma_lo;
152     	MFPDELAY();
153     	adr |= (st_dma.dma_md & 0xff) << 8;
154     	MFPDELAY();
155     	adr |= (st_dma.dma_hi & 0xff) << 16;
156     	MFPDELAY();
157     	return adr;
158     }
159     
160     static inline void ENABLE_IRQ(void)
161     {
162     	if (IS_A_TT())
163     		atari_enable_irq(IRQ_TT_MFP_SCSI);
164     	else
165     		atari_enable_irq(IRQ_MFP_FSCSI);
166     }
167     
168     static inline void DISABLE_IRQ(void)
169     {
170     	if (IS_A_TT())
171     		atari_disable_irq(IRQ_TT_MFP_SCSI);
172     	else
173     		atari_disable_irq(IRQ_MFP_FSCSI);
174     }
175     
176     
177     #define HOSTDATA_DMALEN		(((struct NCR5380_hostdata *) \
178     				(atari_scsi_host->hostdata))->dma_len)
179     
180     /* Time (in jiffies) to wait after a reset; the SCSI standard calls for 250ms,
181      * we usually do 0.5s to be on the safe side. But Toshiba CD-ROMs once more
182      * need ten times the standard value... */
183     #ifndef CONFIG_ATARI_SCSI_TOSHIBA_DELAY
184     #define	AFTER_RESET_DELAY	(HZ/2)
185     #else
186     #define	AFTER_RESET_DELAY	(5*HZ/2)
187     #endif
188     
189     /***************************** Prototypes *****************************/
190     
191     #ifdef REAL_DMA
192     static int scsi_dma_is_ignored_buserr( unsigned char dma_stat );
193     static void atari_scsi_fetch_restbytes( void );
194     static long atari_scsi_dma_residual( struct Scsi_Host *instance );
195     static int falcon_classify_cmd( Scsi_Cmnd *cmd );
196     static unsigned long atari_dma_xfer_len( unsigned long wanted_len,
197                                              Scsi_Cmnd *cmd, int write_flag );
198     #endif
199     static void scsi_tt_intr( int irq, void *dummy, struct pt_regs *fp);
200     static void scsi_falcon_intr( int irq, void *dummy, struct pt_regs *fp);
201     static void falcon_release_lock_if_possible( struct NCR5380_hostdata *
202                                                  hostdata );
203     static void falcon_get_lock( void );
204     #ifdef CONFIG_ATARI_SCSI_RESET_BOOT
205     static void atari_scsi_reset_boot( void );
206     #endif
207     static unsigned char atari_scsi_tt_reg_read( unsigned char reg );
208     static void atari_scsi_tt_reg_write( unsigned char reg, unsigned char value);
209     static unsigned char atari_scsi_falcon_reg_read( unsigned char reg );
210     static void atari_scsi_falcon_reg_write( unsigned char reg, unsigned char value );
211     
212     /************************* End of Prototypes **************************/
213     
214     
215     static struct Scsi_Host *atari_scsi_host = NULL;
216     static unsigned char (*atari_scsi_reg_read)( unsigned char reg );
217     static void (*atari_scsi_reg_write)( unsigned char reg, unsigned char value );
218     
219     #ifdef REAL_DMA
220     static unsigned long	atari_dma_residual, atari_dma_startaddr;
221     static short		atari_dma_active;
222     /* pointer to the dribble buffer */
223     static char		*atari_dma_buffer = NULL;
224     /* precalculated physical address of the dribble buffer */
225     static unsigned long	atari_dma_phys_buffer;
226     /* != 0 tells the Falcon int handler to copy data from the dribble buffer */
227     static char		*atari_dma_orig_addr;
228     /* size of the dribble buffer; 4k seems enough, since the Falcon cannot use
229      * scatter-gather anyway, so most transfers are 1024 byte only. In the rare
230      * cases where requests to physical contiguous buffers have been merged, this
231      * request is <= 4k (one page). So I don't think we have to split transfers
232      * just due to this buffer size...
233      */
234     #define	STRAM_BUFFER_SIZE	(4096)
235     /* mask for address bits that can't be used with the ST-DMA */
236     static unsigned long	atari_dma_stram_mask;
237     #define STRAM_ADDR(a)	(((a) & atari_dma_stram_mask) == 0)
238     /* number of bytes to cut from a transfer to handle NCR overruns */
239     static int atari_read_overruns = 0;
240     #endif
241     
242     static int setup_can_queue = -1;
243     MODULE_PARM(setup_can_queue, "i");
244     static int setup_cmd_per_lun = -1;
245     MODULE_PARM(setup_cmd_per_lun, "i");
246     static int setup_sg_tablesize = -1;
247     MODULE_PARM(setup_sg_tablesize, "i");
248     #ifdef SUPPORT_TAGS
249     static int setup_use_tagged_queuing = -1;
250     MODULE_PARM(setup_use_tagged_queuing, "i");
251     #endif
252     static int setup_hostid = -1;
253     MODULE_PARM(setup_hostid, "i");
254     
255     
256     #if defined(CONFIG_TT_DMA_EMUL)
257     #include "atari_dma_emul.c"
258     #endif
259     
260     #if defined(REAL_DMA)
261     
262     static int scsi_dma_is_ignored_buserr( unsigned char dma_stat )
263     {
264     	int i;
265     	unsigned long	addr = SCSI_DMA_READ_P( dma_addr ), end_addr;
266     
267     	if (dma_stat & 0x01) {
268     
269     		/* A bus error happens when DMA-ing from the last page of a
270     		 * physical memory chunk (DMA prefetch!), but that doesn't hurt.
271     		 * Check for this case:
272     		 */
273     		
274     		for( i = 0; i < m68k_num_memory; ++i ) {
275     			end_addr = m68k_memory[i].addr +
276     				m68k_memory[i].size;
277     			if (end_addr <= addr && addr <= end_addr + 4)
278     				return( 1 );
279     		}
280     	}
281     	return( 0 );
282     }
283     
284     
285     #if 0
286     /* Dead code... wasn't called anyway :-) and causes some trouble, because at
287      * end-of-DMA, both SCSI ints are triggered simultaneously, so the NCR int has
288      * to clear the DMA int pending bit before it allows other level 6 interrupts.
289      */
290     static void scsi_dma_buserr (int irq, void *dummy, struct pt_regs *fp)
291     {
292     	unsigned char	dma_stat = tt_scsi_dma.dma_ctrl;
293     
294     	/* Don't do anything if a NCR interrupt is pending. Probably it's just
295     	 * masked... */
296     	if (atari_irq_pending( IRQ_TT_MFP_SCSI ))
297     		return;
298     	
299     	printk("Bad SCSI DMA interrupt! dma_addr=0x%08lx dma_stat=%02x dma_cnt=%08lx\n",
300     	       SCSI_DMA_READ_P(dma_addr), dma_stat, SCSI_DMA_READ_P(dma_cnt));
301     	if (dma_stat & 0x80) {
302     		if (!scsi_dma_is_ignored_buserr( dma_stat ))
303     			printk( "SCSI DMA bus error -- bad DMA programming!\n" );
304     	}
305     	else {
306     		/* Under normal circumstances we never should get to this point,
307     		 * since both interrupts are triggered simultaneously and the 5380
308     		 * int has higher priority. When this irq is handled, that DMA
309     		 * interrupt is cleared. So a warning message is printed here.
310     		 */
311     		printk( "SCSI DMA intr ?? -- this shouldn't happen!\n" );
312     	}
313     }
314     #endif
315     
316     #endif
317     
318     
319     static void scsi_tt_intr (int irq, void *dummy, struct pt_regs *fp)
320     {
321     #ifdef REAL_DMA
322     	int dma_stat;
323     
324     	dma_stat = tt_scsi_dma.dma_ctrl;
325     
326     	INT_PRINTK("scsi%d: NCR5380 interrupt, DMA status = %02x\n",
327     		   atari_scsi_host->host_no, dma_stat & 0xff);
328     
329     	/* Look if it was the DMA that has interrupted: First possibility
330     	 * is that a bus error occurred...
331     	 */
332     	if (dma_stat & 0x80) {
333     		if (!scsi_dma_is_ignored_buserr( dma_stat )) {
334     			printk(KERN_ERR "SCSI DMA caused bus error near 0x%08lx\n",
335     			       SCSI_DMA_READ_P(dma_addr));
336     			printk(KERN_CRIT "SCSI DMA bus error -- bad DMA programming!");
337     		}
338     	}
339     
340     	/* If the DMA is active but not finished, we have the case
341     	 * that some other 5380 interrupt occurred within the DMA transfer.
342     	 * This means we have residual bytes, if the desired end address
343     	 * is not yet reached. Maybe we have to fetch some bytes from the
344     	 * rest data register, too. The residual must be calculated from
345     	 * the address pointer, not the counter register, because only the
346     	 * addr reg counts bytes not yet written and pending in the rest
347     	 * data reg!
348     	 */
349     	if ((dma_stat & 0x02) && !(dma_stat & 0x40)) {
350     		atari_dma_residual = HOSTDATA_DMALEN - (SCSI_DMA_READ_P( dma_addr ) -
351     												atari_dma_startaddr);
352     
353     		DMA_PRINTK("SCSI DMA: There are %ld residual bytes.\n",
354     			   atari_dma_residual);
355     
356     		if ((signed int)atari_dma_residual < 0)
357     			atari_dma_residual = 0;
358     		if ((dma_stat & 1) == 0) {
359     			/* After read operations, we maybe have to
360     			   transport some rest bytes */
361     			atari_scsi_fetch_restbytes();
362     		}
363     		else {
364     			/* There seems to be a nasty bug in some SCSI-DMA/NCR
365     			   combinations: If a target disconnects while a write
366     			   operation is going on, the address register of the
367     			   DMA may be a few bytes farer than it actually read.
368     			   This is probably due to DMA prefetching and a delay
369     			   between DMA and NCR.  Experiments showed that the
370     			   dma_addr is 9 bytes to high, but this could vary.
371     			   The problem is, that the residual is thus calculated
372     			   wrong and the next transfer will start behind where
373     			   it should.  So we round up the residual to the next
374     			   multiple of a sector size, if it isn't already a
375     			   multiple and the originally expected transfer size
376     			   was.  The latter condition is there to ensure that
377     			   the correction is taken only for "real" data
378     			   transfers and not for, e.g., the parameters of some
379     			   other command.  These shouldn't disconnect anyway.
380     			   */
381     			if (atari_dma_residual & 0x1ff) {
382     				DMA_PRINTK("SCSI DMA: DMA bug corrected, "
383     					   "difference %ld bytes\n",
384     					   512 - (atari_dma_residual & 0x1ff));
385     				atari_dma_residual = (atari_dma_residual + 511) & ~0x1ff;
386     			}
387     		}
388     		tt_scsi_dma.dma_ctrl = 0;
389     	}
390     
391     	/* If the DMA is finished, fetch the rest bytes and turn it off */
392     	if (dma_stat & 0x40) {
393     		atari_dma_residual = 0;
394     		if ((dma_stat & 1) == 0)
395     			atari_scsi_fetch_restbytes();
396     		tt_scsi_dma.dma_ctrl = 0;
397     	}
398     
399     #endif /* REAL_DMA */
400     	
401     	NCR5380_intr (0, 0, 0);
402     
403     #if 0
404     	/* To be sure the int is not masked */
405     	atari_enable_irq( IRQ_TT_MFP_SCSI );
406     #endif
407     }
408     
409     
410     static void scsi_falcon_intr (int irq, void *dummy, struct pt_regs *fp)
411     {
412     #ifdef REAL_DMA
413     	int dma_stat;
414     
415     	/* Turn off DMA and select sector counter register before
416     	 * accessing the status register (Atari recommendation!)
417     	 */
418     	st_dma.dma_mode_status = 0x90;
419     	dma_stat = st_dma.dma_mode_status;
420     
421     	/* Bit 0 indicates some error in the DMA process... don't know
422     	 * what happened exactly (no further docu).
423     	 */
424     	if (!(dma_stat & 0x01)) {
425     		/* DMA error */
426     		printk(KERN_CRIT "SCSI DMA error near 0x%08lx!\n", SCSI_DMA_GETADR());
427     	}
428     
429     	/* If the DMA was active, but now bit 1 is not clear, it is some
430     	 * other 5380 interrupt that finishes the DMA transfer. We have to
431     	 * calculate the number of residual bytes and give a warning if
432     	 * bytes are stuck in the ST-DMA fifo (there's no way to reach them!)
433     	 */
434     	if (atari_dma_active && (dma_stat & 0x02)) {
435     		unsigned long	transferred;
436     
437     		transferred = SCSI_DMA_GETADR() - atari_dma_startaddr;
438     		/* The ST-DMA address is incremented in 2-byte steps, but the
439     		 * data are written only in 16-byte chunks. If the number of
440     		 * transferred bytes is not divisible by 16, the remainder is
441     		 * lost somewhere in outer space.
442     		 */
443     		if (transferred & 15)
444     			printk(KERN_ERR "SCSI DMA error: %ld bytes lost in "
445     			       "ST-DMA fifo\n", transferred & 15);
446     
447     		atari_dma_residual = HOSTDATA_DMALEN - transferred;
448     		DMA_PRINTK("SCSI DMA: There are %ld residual bytes.\n",
449     			   atari_dma_residual);
450     	}
451     	else
452     		atari_dma_residual = 0;
453     	atari_dma_active = 0;
454     
455     	if (atari_dma_orig_addr) {
456     		/* If the dribble buffer was used on a read operation, copy the DMA-ed
457     		 * data to the original destination address.
458     		 */
459     		memcpy(atari_dma_orig_addr, phys_to_virt(atari_dma_startaddr),
460     		       HOSTDATA_DMALEN - atari_dma_residual);
461     		atari_dma_orig_addr = NULL;
462     	}
463     
464     #endif /* REAL_DMA */
465     
466     	NCR5380_intr (0, 0, 0);
467     }
468     
469     
470     #ifdef REAL_DMA
471     static void atari_scsi_fetch_restbytes( void )
472     {
473     	int nr;
474     	char *src, *dst;
475     	unsigned long phys_dst;
476     
477     	/* fetch rest bytes in the DMA register */
478     	phys_dst = SCSI_DMA_READ_P(dma_addr);
479     	nr = phys_dst & 3;
480     	if (nr) {
481     		/* there are 'nr' bytes left for the last long address
482     		   before the DMA pointer */
483     		phys_dst ^= nr;
484     		DMA_PRINTK("SCSI DMA: there are %d rest bytes for phys addr 0x%08lx",
485     			   nr, phys_dst);
486     		/* The content of the DMA pointer is a physical address!  */
487     		dst = phys_to_virt(phys_dst);
488     		DMA_PRINTK(" = virt addr %p\n", dst);
489     		for (src = (char *)&tt_scsi_dma.dma_restdata; nr != 0; --nr)
490     			*dst++ = *src++;
491     	}
492     }
493     #endif /* REAL_DMA */
494     
495     
496     static int falcon_got_lock = 0;
497     static DECLARE_WAIT_QUEUE_HEAD(falcon_fairness_wait);
498     static int falcon_trying_lock = 0;
499     static DECLARE_WAIT_QUEUE_HEAD(falcon_try_wait);
500     static int falcon_dont_release = 0;
501     
502     /* This function releases the lock on the DMA chip if there is no
503      * connected command and the disconnected queue is empty. On
504      * releasing, instances of falcon_get_lock are awoken, that put
505      * themselves to sleep for fairness. They can now try to get the lock
506      * again (but others waiting longer more probably will win).
507      */
508     
509     static void
510     falcon_release_lock_if_possible( struct NCR5380_hostdata * hostdata )
511     {
512     	unsigned long	oldflags;
513     		
514     	if (IS_A_TT()) return;
515     	
516     	save_flags(oldflags);
517     	cli();
518     
519     	if (falcon_got_lock &&
520     		!hostdata->disconnected_queue &&
521     		!hostdata->issue_queue &&
522     		!hostdata->connected) {
523     
524     		if (falcon_dont_release) {
525     #if 0
526     			printk("WARNING: Lock release not allowed. Ignored\n");
527     #endif
528     			restore_flags(oldflags);
529     			return;
530     		}
531     		falcon_got_lock = 0;
532     		stdma_release();
533     		wake_up( &falcon_fairness_wait );
534     	}
535     
536     	restore_flags(oldflags);
537     }
538     
539     /* This function manages the locking of the ST-DMA.
540      * If the DMA isn't locked already for SCSI, it tries to lock it by
541      * calling stdma_lock(). But if the DMA is locked by the SCSI code and
542      * there are other drivers waiting for the chip, we do not issue the
543      * command immediately but wait on 'falcon_fairness_queue'. We will be
544      * waked up when the DMA is unlocked by some SCSI interrupt. After that
545      * we try to get the lock again.
546      * But we must be prepared that more than one instance of
547      * falcon_get_lock() is waiting on the fairness queue. They should not
548      * try all at once to call stdma_lock(), one is enough! For that, the
549      * first one sets 'falcon_trying_lock', others that see that variable
550      * set wait on the queue 'falcon_try_wait'.
551      * Complicated, complicated.... Sigh...
552      */
553     
554     static void falcon_get_lock( void )
555     {
556     	unsigned long	oldflags;
557     
558     	if (IS_A_TT()) return;
559     
560     	save_flags(oldflags);
561     	cli();
562     
563     	while( !in_interrupt() && falcon_got_lock && stdma_others_waiting() )
564     		sleep_on( &falcon_fairness_wait );
565     
566     	while (!falcon_got_lock) {
567     		if (in_interrupt())
568     			panic( "Falcon SCSI hasn't ST-DMA lock in interrupt" );
569     		if (!falcon_trying_lock) {
570     			falcon_trying_lock = 1;
571     			stdma_lock(scsi_falcon_intr, NULL);
572     			falcon_got_lock = 1;
573     			falcon_trying_lock = 0;
574     			wake_up( &falcon_try_wait );
575     		}
576     		else {
577     			sleep_on( &falcon_try_wait );
578     		}
579     	}	
580     
581     	restore_flags(oldflags);
582     	if (!falcon_got_lock)
583     		panic("Falcon SCSI: someone stole the lock :-(\n");
584     }
585     
586     
587     /* This is the wrapper function for NCR5380_queue_command(). It just
588      * tries to get the lock on the ST-DMA (see above) and then calls the
589      * original function.
590      */
591     
592     #if 0
593     int atari_queue_command (Scsi_Cmnd *cmd, void (*done)(Scsi_Cmnd *))
594     {
595     	/* falcon_get_lock();
596     	 * ++guenther: moved to NCR5380_queue_command() to prevent
597     	 * race condition, see there for an explanation.
598     	 */
599     	return( NCR5380_queue_command( cmd, done ) );
600     }
601     #endif
602     
603     
604     int atari_scsi_detect (Scsi_Host_Template *host)
605     {
606     	static int called = 0;
607     	struct Scsi_Host *instance;
608     
609     	if (!MACH_IS_ATARI ||
610     	    (!ATARIHW_PRESENT(ST_SCSI) && !ATARIHW_PRESENT(TT_SCSI)) ||
611     	    called)
612     		return( 0 );
613     
614     	host->proc_name = "Atari";
615     
616     	atari_scsi_reg_read  = IS_A_TT() ? atari_scsi_tt_reg_read :
617     					   atari_scsi_falcon_reg_read;
618     	atari_scsi_reg_write = IS_A_TT() ? atari_scsi_tt_reg_write :
619     					   atari_scsi_falcon_reg_write;
620     
621     	/* setup variables */
622     	host->can_queue =
623     		(setup_can_queue > 0) ? setup_can_queue :
624     		IS_A_TT() ? ATARI_TT_CAN_QUEUE : ATARI_FALCON_CAN_QUEUE;
625     	host->cmd_per_lun =
626     		(setup_cmd_per_lun > 0) ? setup_cmd_per_lun :
627     		IS_A_TT() ? ATARI_TT_CMD_PER_LUN : ATARI_FALCON_CMD_PER_LUN;
628     	/* Force sg_tablesize to 0 on a Falcon! */
629     	host->sg_tablesize =
630     		!IS_A_TT() ? ATARI_FALCON_SG_TABLESIZE :
631     		(setup_sg_tablesize >= 0) ? setup_sg_tablesize : ATARI_TT_SG_TABLESIZE;
632     
633     	if (setup_hostid >= 0)
634     		host->this_id = setup_hostid;
635     	else {
636     		/* use 7 as default */
637     		host->this_id = 7;
638     		/* Test if a host id is set in the NVRam */
639     		if (ATARIHW_PRESENT(TT_CLK) && nvram_check_checksum()) {
640     			unsigned char b = nvram_read_byte( 14 );
641     			/* Arbitration enabled? (for TOS) If yes, use configured host ID */
642     			if (b & 0x80)
643     				host->this_id = b & 7;
644     		}
645     	}
646     
647     #ifdef SUPPORT_TAGS
648     	if (setup_use_tagged_queuing < 0)
649     		setup_use_tagged_queuing = DEFAULT_USE_TAGGED_QUEUING;
650     #endif
651     #ifdef REAL_DMA
652     	/* If running on a Falcon and if there's TT-Ram (i.e., more than one
653     	 * memory block, since there's always ST-Ram in a Falcon), then allocate a
654     	 * STRAM_BUFFER_SIZE byte dribble buffer for transfers from/to alternative
655     	 * Ram.
656     	 */
657     	if (MACH_IS_ATARI && ATARIHW_PRESENT(ST_SCSI) &&
658     	    !ATARIHW_PRESENT(EXTD_DMA) && m68k_num_memory > 1) {
659     		atari_dma_buffer = atari_stram_alloc(STRAM_BUFFER_SIZE, "SCSI");
660     		if (!atari_dma_buffer) {
661     			printk( KERN_ERR "atari_scsi_detect: can't allocate ST-RAM "
662     					"double buffer\n" );
663     			return( 0 );
664     		}
665     		atari_dma_phys_buffer = virt_to_phys( atari_dma_buffer );
666     		atari_dma_orig_addr = 0;
667     	}
668     #endif
669     	instance = scsi_register (host, sizeof (struct NCR5380_hostdata));
670     	if(instance == NULL)
671     	{
672     		atari_stram_free(atari_dma_buffer);
673     		atari_dma_buffer = 0;
674     		return 0;
675     	}
676     	atari_scsi_host = instance;
677            /* Set irq to 0, to avoid that the mid-level code disables our interrupt
678             * during queue_command calls. This is completely unnecessary, and even
679             * worse causes bad problems on the Falcon, where the int is shared with
680             * IDE and floppy! */
681            instance->irq = 0;
682     
683     #ifdef CONFIG_ATARI_SCSI_RESET_BOOT
684     	atari_scsi_reset_boot();
685     #endif
686     	NCR5380_init (instance, 0);
687     
688     	if (IS_A_TT()) {
689     
690     		/* This int is actually "pseudo-slow", i.e. it acts like a slow
691     		 * interrupt after having cleared the pending flag for the DMA
692     		 * interrupt. */
693     		if (request_irq(IRQ_TT_MFP_SCSI, scsi_tt_intr, IRQ_TYPE_SLOW,
694     				 "SCSI NCR5380", scsi_tt_intr)) {
695     			printk(KERN_ERR "atari_scsi_detect: cannot allocate irq %d, aborting",IRQ_TT_MFP_SCSI);
696     			scsi_unregister(atari_scsi_host);
697     			atari_stram_free(atari_dma_buffer);
698     			atari_dma_buffer = 0;
699     			return 0;
700     		}
701     		tt_mfp.active_edge |= 0x80;		/* SCSI int on L->H */
702     #ifdef REAL_DMA
703     		tt_scsi_dma.dma_ctrl = 0;
704     		atari_dma_residual = 0;
705     #ifdef CONFIG_TT_DMA_EMUL
706     		if (MACH_IS_HADES) {
707     			if (request_irq(IRQ_AUTO_2, hades_dma_emulator,
708     					 IRQ_TYPE_PRIO, "Hades DMA emulator",
709     					 hades_dma_emulator)) {
710     				printk(KERN_ERR "atari_scsi_detect: cannot allocate irq %d, aborting (MACH_IS_HADES)",IRQ_AUTO_2);
711     				free_irq(IRQ_TT_MFP_SCSI, scsi_tt_intr);
712     				scsi_unregister(atari_scsi_host);
713     				atari_stram_free(atari_dma_buffer);
714     				atari_dma_buffer = 0;
715     				return 0;
716     			}
717     		}
718     #endif
719     		if (MACH_IS_MEDUSA || MACH_IS_HADES) {
720     			/* While the read overruns (described by Drew Eckhardt in
721     			 * NCR5380.c) never happened on TTs, they do in fact on the Medusa
722     			 * (This was the cause why SCSI didn't work right for so long
723     			 * there.) Since handling the overruns slows down a bit, I turned
724     			 * the #ifdef's into a runtime condition.
725     			 *
726     			 * In principle it should be sufficient to do max. 1 byte with
727     			 * PIO, but there is another problem on the Medusa with the DMA
728     			 * rest data register. So 'atari_read_overruns' is currently set
729     			 * to 4 to avoid having transfers that aren't a multiple of 4. If
730     			 * the rest data bug is fixed, this can be lowered to 1.
731     			 */
732     			atari_read_overruns = 4;
733     		}		
734     #endif /*REAL_DMA*/
735     	}
736     	else { /* ! IS_A_TT */
737     		
738     		/* Nothing to do for the interrupt: the ST-DMA is initialized
739     		 * already by atari_init_INTS()
740     		 */
741     
742     #ifdef REAL_DMA
743     		atari_dma_residual = 0;
744     		atari_dma_active = 0;
745     		atari_dma_stram_mask = (ATARIHW_PRESENT(EXTD_DMA) ? 0x00000000
746     					: 0xff000000);
747     #endif
748     	}
749     
750     	printk(KERN_INFO "scsi%d: options CAN_QUEUE=%d CMD_PER_LUN=%d SCAT-GAT=%d "
751     #ifdef SUPPORT_TAGS
752     			"TAGGED-QUEUING=%s "
753     #endif
754     			"HOSTID=%d",
755     			instance->host_no, instance->hostt->can_queue,
756     			instance->hostt->cmd_per_lun,
757     			instance->hostt->sg_tablesize,
758     #ifdef SUPPORT_TAGS
759     			setup_use_tagged_queuing ? "yes" : "no",
760     #endif
761     			instance->hostt->this_id );
762     	NCR5380_print_options (instance);
763     	printk ("\n");
764     
765     	called = 1;
766     	return( 1 );
767     }
768     
769     #ifdef MODULE
770     int atari_scsi_release (struct Scsi_Host *sh)
771     {
772     	if (IS_A_TT())
773     		free_irq(IRQ_TT_MFP_SCSI, scsi_tt_intr);
774     	if (atari_dma_buffer)
775     		atari_stram_free (atari_dma_buffer);
776     	return 1;
777     }
778     #endif
779     
780     void __init atari_scsi_setup(char *str, int *ints)
781     {
782     	/* Format of atascsi parameter is:
783     	 *   atascsi=<can_queue>,<cmd_per_lun>,<sg_tablesize>,<hostid>,<use_tags>
784     	 * Defaults depend on TT or Falcon, hostid determined at run time.
785     	 * Negative values mean don't change.
786     	 */
787     	
788     	if (ints[0] < 1) {
789     		printk( "atari_scsi_setup: no arguments!\n" );
790     		return;
791     	}
792     
793     	if (ints[0] >= 1) {
794     		if (ints[1] > 0)
795     			/* no limits on this, just > 0 */
796     			setup_can_queue = ints[1];
797     	}
798     	if (ints[0] >= 2) {
799     		if (ints[2] > 0)
800     			setup_cmd_per_lun = ints[2];
801     	}
802     	if (ints[0] >= 3) {
803     		if (ints[3] >= 0) {
804     			setup_sg_tablesize = ints[3];
805     			/* Must be <= SG_ALL (255) */
806     			if (setup_sg_tablesize > SG_ALL)
807     				setup_sg_tablesize = SG_ALL;
808     		}
809     	}
810     	if (ints[0] >= 4) {
811     		/* Must be between 0 and 7 */
812     		if (ints[4] >= 0 && ints[4] <= 7)
813     			setup_hostid = ints[4];
814     		else if (ints[4] > 7)
815     			printk( "atari_scsi_setup: invalid host ID %d !\n", ints[4] );
816     	}
817     #ifdef SUPPORT_TAGS
818     	if (ints[0] >= 5) {
819     		if (ints[5] >= 0)
820     			setup_use_tagged_queuing = !!ints[5];
821     	}
822     #endif
823     }
824     
825     int atari_scsi_reset( Scsi_Cmnd *cmd, unsigned int reset_flags)
826     {
827     	int		rv;
828     	struct NCR5380_hostdata *hostdata =
829     		(struct NCR5380_hostdata *)cmd->host->hostdata;
830     
831     	/* For doing the reset, SCSI interrupts must be disabled first,
832     	 * since the 5380 raises its IRQ line while _RST is active and we
833     	 * can't disable interrupts completely, since we need the timer.
834     	 */
835     	/* And abort a maybe active DMA transfer */
836     	if (IS_A_TT()) {
837     		atari_turnoff_irq( IRQ_TT_MFP_SCSI );
838     #ifdef REAL_DMA
839     		tt_scsi_dma.dma_ctrl = 0;
840     #endif /* REAL_DMA */
841     	}
842     	else {
843     		atari_turnoff_irq( IRQ_MFP_FSCSI );
844     #ifdef REAL_DMA
845     		st_dma.dma_mode_status = 0x90;
846     		atari_dma_active = 0;
847     		atari_dma_orig_addr = NULL;
848     #endif /* REAL_DMA */
849     	}
850     
851     	rv = NCR5380_reset(cmd, reset_flags);
852     
853     	/* Re-enable ints */
854     	if (IS_A_TT()) {
855     		atari_turnon_irq( IRQ_TT_MFP_SCSI );
856     	}
857     	else {
858     		atari_turnon_irq( IRQ_MFP_FSCSI );
859     	}
860     	if ((rv & SCSI_RESET_ACTION) == SCSI_RESET_SUCCESS)
861     		falcon_release_lock_if_possible(hostdata);
862     
863     	return( rv );
864     }
865     
866     	
867     #ifdef CONFIG_ATARI_SCSI_RESET_BOOT
868     static void __init atari_scsi_reset_boot(void)
869     {
870     	unsigned long end;
871     	
872     	/*
873     	 * Do a SCSI reset to clean up the bus during initialization. No messing
874     	 * with the queues, interrupts, or locks necessary here.
875     	 */
876     
877     	printk( "Atari SCSI: resetting the SCSI bus..." );
878     
879     	/* get in phase */
880     	NCR5380_write( TARGET_COMMAND_REG,
881     		      PHASE_SR_TO_TCR( NCR5380_read(STATUS_REG) ));
882     
883     	/* assert RST */
884     	NCR5380_write( INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_RST );
885     	/* The min. reset hold time is 25us, so 40us should be enough */
886     	udelay( 50 );
887     	/* reset RST and interrupt */
888     	NCR5380_write( INITIATOR_COMMAND_REG, ICR_BASE );
889     	NCR5380_read( RESET_PARITY_INTERRUPT_REG );
890     
891     	end = jiffies + AFTER_RESET_DELAY;
892     	while (time_before(jiffies, end))
893     		barrier();
894     
895     	printk( " done\n" );
896     }
897     #endif
898     
899     
900     const char * atari_scsi_info (struct Scsi_Host *host)
901     {
902     	/* atari_scsi_detect() is verbose enough... */
903     	static const char string[] = "Atari native SCSI";
904     	return string;
905     }
906     
907     
908     #if defined(REAL_DMA)
909     
910     unsigned long atari_scsi_dma_setup( struct Scsi_Host *instance, void *data,
911     				   unsigned long count, int dir )
912     {
913     	unsigned long addr = virt_to_phys( data );
914     
915     	DMA_PRINTK("scsi%d: setting up dma, data = %p, phys = %lx, count = %ld, "
916     		   "dir = %d\n", instance->host_no, data, addr, count, dir);
917     
918     	if (!IS_A_TT() && !STRAM_ADDR(addr)) {
919     		/* If we have a non-DMAable address on a Falcon, use the dribble
920     		 * buffer; 'orig_addr' != 0 in the read case tells the interrupt
921     		 * handler to copy data from the dribble buffer to the originally
922     		 * wanted address.
923     		 */
924     		if (dir)
925     			memcpy( atari_dma_buffer, data, count );
926     		else
927     			atari_dma_orig_addr = data;
928     		addr = atari_dma_phys_buffer;
929     	}
930     	
931     	atari_dma_startaddr = addr;	/* Needed for calculating residual later. */
932       
933     	/* Cache cleanup stuff: On writes, push any dirty cache out before sending
934     	 * it to the peripheral. (Must be done before DMA setup, since at least
935     	 * the ST-DMA begins to fill internal buffers right after setup. For
936     	 * reads, invalidate any cache, may be altered after DMA without CPU
937     	 * knowledge.
938     	 * 
939     	 * ++roman: For the Medusa, there's no need at all for that cache stuff,
940     	 * because the hardware does bus snooping (fine!).
941     	 */
942     	dma_cache_maintenance( addr, count, dir );
943     
944     	if (count == 0)
945     		printk(KERN_NOTICE "SCSI warning: DMA programmed for 0 bytes !\n");
946     
947     	if (IS_A_TT()) {
948     		tt_scsi_dma.dma_ctrl = dir;
949     		SCSI_DMA_WRITE_P( dma_addr, addr );
950     		SCSI_DMA_WRITE_P( dma_cnt, count );
951     		tt_scsi_dma.dma_ctrl = dir | 2;
952     	}
953     	else { /* ! IS_A_TT */
954       
955     		/* set address */
956     		SCSI_DMA_SETADR( addr );
957     
958     		/* toggle direction bit to clear FIFO and set DMA direction */
959     		dir <<= 8;
960     		st_dma.dma_mode_status = 0x90 | dir;
961     		st_dma.dma_mode_status = 0x90 | (dir ^ 0x100);
962     		st_dma.dma_mode_status = 0x90 | dir;
963     		udelay(40);
964     		/* On writes, round up the transfer length to the next multiple of 512
965     		 * (see also comment at atari_dma_xfer_len()). */
966     		st_dma.fdc_acces_seccount = (count + (dir ? 511 : 0)) >> 9;
967     		udelay(40);
968     		st_dma.dma_mode_status = 0x10 | dir;
969     		udelay(40);
970     		/* need not restore value of dir, only boolean value is tested */
971     		atari_dma_active = 1;
972     	}
973     
974     	return( count );
975     }
976     
977     
978     static long atari_scsi_dma_residual( struct Scsi_Host *instance )
979     {
980     	return( atari_dma_residual );
981     }
982     
983     
984     #define	CMD_SURELY_BLOCK_MODE	0
985     #define	CMD_SURELY_BYTE_MODE	1
986     #define	CMD_MODE_UNKNOWN		2
987     
988     static int falcon_classify_cmd( Scsi_Cmnd *cmd )
989     {
990     	unsigned char opcode = cmd->cmnd[0];
991     	
992     	if (opcode == READ_DEFECT_DATA || opcode == READ_LONG ||
993     		opcode == READ_BUFFER)
994     		return( CMD_SURELY_BYTE_MODE );
995     	else if (opcode == READ_6 || opcode == READ_10 ||
996     		 opcode == 0xa8 /* READ_12 */ || opcode == READ_REVERSE ||
997     		 opcode == RECOVER_BUFFERED_DATA) {
998     		/* In case of a sequential-access target (tape), special care is
999     		 * needed here: The transfer is block-mode only if the 'fixed' bit is
1000     		 * set! */
1001     		if (cmd->device->type == TYPE_TAPE && !(cmd->cmnd[1] & 1))
1002     			return( CMD_SURELY_BYTE_MODE );
1003     		else
1004     			return( CMD_SURELY_BLOCK_MODE );
1005     	}
1006     	else
1007     		return( CMD_MODE_UNKNOWN );
1008     }
1009     
1010     
1011     /* This function calculates the number of bytes that can be transferred via
1012      * DMA. On the TT, this is arbitrary, but on the Falcon we have to use the
1013      * ST-DMA chip. There are only multiples of 512 bytes possible and max.
1014      * 255*512 bytes :-( This means also, that defining READ_OVERRUNS is not
1015      * possible on the Falcon, since that would require to program the DMA for
1016      * n*512 - atari_read_overrun bytes. But it seems that the Falcon doesn't have
1017      * the overrun problem, so this question is academic :-)
1018      */
1019     
1020     static unsigned long atari_dma_xfer_len( unsigned long wanted_len,
1021     					Scsi_Cmnd *cmd,
1022     					int write_flag )
1023     {
1024     	unsigned long	possible_len, limit;
1025     #ifndef CONFIG_TT_DMA_EMUL
1026     	if (MACH_IS_HADES)
1027     		/* Hades has no SCSI DMA at all :-( Always force use of PIO */
1028     		return( 0 );
1029     #endif	
1030     	if (IS_A_TT())
1031     		/* TT SCSI DMA can transfer arbitrary #bytes */
1032     		return( wanted_len );
1033     
1034     	/* ST DMA chip is stupid -- only multiples of 512 bytes! (and max.
1035     	 * 255*512 bytes, but this should be enough)
1036     	 *
1037     	 * ++roman: Aaargl! Another Falcon-SCSI problem... There are some commands
1038     	 * that return a number of bytes which cannot be known beforehand. In this
1039     	 * case, the given transfer length is an "allocation length". Now it
1040     	 * can happen that this allocation length is a multiple of 512 bytes and
1041     	 * the DMA is used. But if not n*512 bytes really arrive, some input data
1042     	 * will be lost in the ST-DMA's FIFO :-( Thus, we have to distinguish
1043     	 * between commands that do block transfers and those that do byte
1044     	 * transfers. But this isn't easy... there are lots of vendor specific
1045     	 * commands, and the user can issue any command via the
1046     	 * SCSI_IOCTL_SEND_COMMAND.
1047     	 *
1048     	 * The solution: We classify SCSI commands in 1) surely block-mode cmd.s,
1049     	 * 2) surely byte-mode cmd.s and 3) cmd.s with unknown mode. In case 1)
1050     	 * and 3), the thing to do is obvious: allow any number of blocks via DMA
1051     	 * or none. In case 2), we apply some heuristic: Byte mode is assumed if
1052     	 * the transfer (allocation) length is < 1024, hoping that no cmd. not
1053     	 * explicitly known as byte mode have such big allocation lengths...
1054     	 * BTW, all the discussion above applies only to reads. DMA writes are
1055     	 * unproblematic anyways, since the targets aborts the transfer after
1056     	 * receiving a sufficient number of bytes.
1057     	 *
1058     	 * Another point: If the transfer is from/to an non-ST-RAM address, we
1059     	 * use the dribble buffer and thus can do only STRAM_BUFFER_SIZE bytes.
1060     	 */
1061     
1062     	if (write_flag) {
1063     		/* Write operation can always use the DMA, but the transfer size must
1064     		 * be rounded up to the next multiple of 512 (atari_dma_setup() does
1065     		 * this).
1066     		 */
1067     		possible_len = wanted_len;
1068     	}
1069     	else {
1070     		/* Read operations: if the wanted transfer length is not a multiple of
1071     		 * 512, we cannot use DMA, since the ST-DMA cannot split transfers
1072     		 * (no interrupt on DMA finished!)
1073     		 */
1074     		if (wanted_len & 0x1ff)
1075     			possible_len = 0;
1076     		else {
1077     			/* Now classify the command (see above) and decide whether it is
1078     			 * allowed to do DMA at all */
1079     			switch( falcon_classify_cmd( cmd )) {
1080     			  case CMD_SURELY_BLOCK_MODE:
1081     				possible_len = wanted_len;
1082     				break;
1083     			  case CMD_SURELY_BYTE_MODE:
1084     				possible_len = 0; /* DMA prohibited */
1085     				break;
1086     			  case CMD_MODE_UNKNOWN:
1087     			  default:
1088     				/* For unknown commands assume block transfers if the transfer
1089     				 * size/allocation length is >= 1024 */
1090     				possible_len = (wanted_len < 1024) ? 0 : wanted_len;
1091     				break;
1092     			}
1093     		}
1094     	}
1095     	
1096     	/* Last step: apply the hard limit on DMA transfers */
1097     	limit = (atari_dma_buffer && !STRAM_ADDR( virt_to_phys(cmd->SCp.ptr) )) ?
1098     		    STRAM_BUFFER_SIZE : 255*512;
1099     	if (possible_len > limit)
1100     		possible_len = limit;
1101     
1102     	if (possible_len != wanted_len)
1103     		DMA_PRINTK("Sorry, must cut DMA transfer size to %ld bytes "
1104     			   "instead of %ld\n", possible_len, wanted_len);
1105     
1106     	return( possible_len );
1107     }
1108     
1109     
1110     #endif	/* REAL_DMA */
1111     
1112     
1113     /* NCR5380 register access functions
1114      *
1115      * There are separate functions for TT and Falcon, because the access
1116      * methods are quite different. The calling macros NCR5380_read and
1117      * NCR5380_write call these functions via function pointers.
1118      */
1119     
1120     static unsigned char atari_scsi_tt_reg_read( unsigned char reg )
1121     {
1122     	return( tt_scsi_regp[reg * 2] );
1123     }
1124     
1125     static void atari_scsi_tt_reg_write( unsigned char reg, unsigned char value )
1126     {
1127     	tt_scsi_regp[reg * 2] = value;
1128     }
1129     
1130     static unsigned char atari_scsi_falcon_reg_read( unsigned char reg )
1131     {
1132     	dma_wd.dma_mode_status= (u_short)(0x88 + reg);
1133     	return( (u_char)dma_wd.fdc_acces_seccount );
1134     }
1135     
1136     static void atari_scsi_falcon_reg_write( unsigned char reg, unsigned char value )
1137     {
1138     	dma_wd.dma_mode_status = (u_short)(0x88 + reg);
1139     	dma_wd.fdc_acces_seccount = (u_short)value;
1140     }
1141     
1142     
1143     #include "atari_NCR5380.c"
1144     
1145     static Scsi_Host_Template driver_template = ATARI_SCSI;
1146     #include "scsi_module.c"
1147