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 
SCSI_DMA_SETADR(unsigned long adr)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 
SCSI_DMA_GETADR(void)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 
ENABLE_IRQ(void)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 
DISABLE_IRQ(void)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 
scsi_dma_is_ignored_buserr(unsigned char dma_stat)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 
scsi_tt_intr(int irq,void * dummy,struct pt_regs * fp)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 
scsi_falcon_intr(int irq,void * dummy,struct pt_regs * fp)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
atari_scsi_fetch_restbytes(void)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
falcon_release_lock_if_possible(struct NCR5380_hostdata * hostdata)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 
falcon_get_lock(void)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 
atari_scsi_detect(Scsi_Host_Template * host)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
atari_scsi_release(struct Scsi_Host * sh)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 
atari_scsi_setup(char * str,int * ints)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 
atari_scsi_reset(Scsi_Cmnd * cmd,unsigned int reset_flags)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
atari_scsi_reset_boot(void)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 
atari_scsi_info(struct Scsi_Host * host)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 
atari_scsi_dma_setup(struct Scsi_Host * instance,void * data,unsigned long count,int dir)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 
atari_scsi_dma_residual(struct Scsi_Host * instance)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 
falcon_classify_cmd(Scsi_Cmnd * cmd)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 
atari_dma_xfer_len(unsigned long wanted_len,Scsi_Cmnd * cmd,int write_flag)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 
atari_scsi_tt_reg_read(unsigned char reg)1120 static unsigned char atari_scsi_tt_reg_read( unsigned char reg )
1121 {
1122 	return( tt_scsi_regp[reg * 2] );
1123 }
1124 
atari_scsi_tt_reg_write(unsigned char reg,unsigned char value)1125 static void atari_scsi_tt_reg_write( unsigned char reg, unsigned char value )
1126 {
1127 	tt_scsi_regp[reg * 2] = value;
1128 }
1129 
atari_scsi_falcon_reg_read(unsigned char reg)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 
atari_scsi_falcon_reg_write(unsigned char reg,unsigned char value)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 
1148 MODULE_LICENSE("GPL");
1149