xref: /openbmc/linux/drivers/scsi/aha1542.c (revision f42b3800)
1 /* $Id: aha1542.c,v 1.1 1992/07/24 06:27:38 root Exp root $
2  *  linux/kernel/aha1542.c
3  *
4  *  Copyright (C) 1992  Tommy Thorn
5  *  Copyright (C) 1993, 1994, 1995 Eric Youngdale
6  *
7  *  Modified by Eric Youngdale
8  *        Use request_irq and request_dma to help prevent unexpected conflicts
9  *        Set up on-board DMA controller, such that we do not have to
10  *        have the bios enabled to use the aha1542.
11  *  Modified by David Gentzel
12  *        Don't call request_dma if dma mask is 0 (for BusLogic BT-445S VL-Bus
13  *        controller).
14  *  Modified by Matti Aarnio
15  *        Accept parameters from LILO cmd-line. -- 1-Oct-94
16  *  Modified by Mike McLagan <mike.mclagan@linux.org>
17  *        Recognise extended mode on AHA1542CP, different bit than 1542CF
18  *        1-Jan-97
19  *  Modified by Bjorn L. Thordarson and Einar Thor Einarsson
20  *        Recognize that DMA0 is valid DMA channel -- 13-Jul-98
21  *  Modified by Chris Faulhaber <jedgar@fxp.org>
22  *        Added module command-line options
23  *        19-Jul-99
24  *  Modified by Adam Fritzler
25  *        Added proper detection of the AHA-1640 (MCA version of AHA-1540)
26  */
27 
28 #include <linux/module.h>
29 #include <linux/interrupt.h>
30 #include <linux/kernel.h>
31 #include <linux/types.h>
32 #include <linux/string.h>
33 #include <linux/ioport.h>
34 #include <linux/delay.h>
35 #include <linux/proc_fs.h>
36 #include <linux/init.h>
37 #include <linux/spinlock.h>
38 #include <linux/isapnp.h>
39 #include <linux/blkdev.h>
40 #include <linux/mca.h>
41 #include <linux/mca-legacy.h>
42 
43 #include <asm/dma.h>
44 #include <asm/system.h>
45 #include <asm/io.h>
46 
47 #include "scsi.h"
48 #include <scsi/scsi_host.h>
49 #include "aha1542.h"
50 
51 #define SCSI_BUF_PA(address)	isa_virt_to_bus(address)
52 #define SCSI_SG_PA(sgent)	(isa_page_to_bus(sg_page((sgent))) + (sgent)->offset)
53 
54 static void BAD_SG_DMA(Scsi_Cmnd * SCpnt,
55 		       struct scatterlist *sgp,
56 		       int nseg,
57 		       int badseg)
58 {
59 	printk(KERN_CRIT "sgpnt[%d:%d] page %p/0x%llx length %u\n",
60 	       badseg, nseg, sg_virt(sgp),
61 	       (unsigned long long)SCSI_SG_PA(sgp),
62 	       sgp->length);
63 
64 	/*
65 	 * Not safe to continue.
66 	 */
67 	panic("Buffer at physical address > 16Mb used for aha1542");
68 }
69 
70 #include<linux/stat.h>
71 
72 #ifdef DEBUG
73 #define DEB(x) x
74 #else
75 #define DEB(x)
76 #endif
77 
78 /*
79    static const char RCSid[] = "$Header: /usr/src/linux/kernel/blk_drv/scsi/RCS/aha1542.c,v 1.1 1992/07/24 06:27:38 root Exp root $";
80  */
81 
82 /* The adaptec can be configured for quite a number of addresses, but
83    I generally do not want the card poking around at random.  We allow
84    two addresses - this allows people to use the Adaptec with a Midi
85    card, which also used 0x330 -- can be overridden with LILO! */
86 
87 #define MAXBOARDS 4		/* Increase this and the sizes of the
88 				   arrays below, if you need more.. */
89 
90 /* Boards 3,4 slots are reserved for ISAPnP/MCA scans */
91 
92 static unsigned int bases[MAXBOARDS] __initdata = {0x330, 0x334, 0, 0};
93 
94 /* set by aha1542_setup according to the command line; they also may
95    be marked __initdata, but require zero initializers then */
96 
97 static int setup_called[MAXBOARDS];
98 static int setup_buson[MAXBOARDS];
99 static int setup_busoff[MAXBOARDS];
100 static int setup_dmaspeed[MAXBOARDS] __initdata = { -1, -1, -1, -1 };
101 
102 /*
103  * LILO/Module params:  aha1542=<PORTBASE>[,<BUSON>,<BUSOFF>[,<DMASPEED>]]
104  *
105  * Where:  <PORTBASE> is any of the valid AHA addresses:
106  *                      0x130, 0x134, 0x230, 0x234, 0x330, 0x334
107  *         <BUSON>  is the time (in microsecs) that AHA spends on the AT-bus
108  *                  when transferring data.  1542A power-on default is 11us,
109  *                  valid values are in range: 2..15 (decimal)
110  *         <BUSOFF> is the time that AHA spends OFF THE BUS after while
111  *                  it is transferring data (not to monopolize the bus).
112  *                  Power-on default is 4us, valid range: 1..64 microseconds.
113  *         <DMASPEED> Default is jumper selected (1542A: on the J1),
114  *                  but experimenter can alter it with this.
115  *                  Valid values: 5, 6, 7, 8, 10 (MB/s)
116  *                  Factory default is 5 MB/s.
117  */
118 
119 #if defined(MODULE)
120 static int isapnp = 0;
121 static int aha1542[] = {0x330, 11, 4, -1};
122 module_param_array(aha1542, int, NULL, 0);
123 module_param(isapnp, bool, 0);
124 
125 static struct isapnp_device_id id_table[] __initdata = {
126 	{
127 		ISAPNP_ANY_ID, ISAPNP_ANY_ID,
128 		ISAPNP_VENDOR('A', 'D', 'P'), ISAPNP_FUNCTION(0x1542),
129 		0
130 	},
131 	{0}
132 };
133 
134 MODULE_DEVICE_TABLE(isapnp, id_table);
135 
136 #else
137 static int isapnp = 1;
138 #endif
139 
140 #define BIOS_TRANSLATION_1632 0	/* Used by some old 1542A boards */
141 #define BIOS_TRANSLATION_6432 1	/* Default case these days */
142 #define BIOS_TRANSLATION_25563 2	/* Big disk case */
143 
144 struct aha1542_hostdata {
145 	/* This will effectively start both of them at the first mailbox */
146 	int bios_translation;	/* Mapping bios uses - for compatibility */
147 	int aha1542_last_mbi_used;
148 	int aha1542_last_mbo_used;
149 	Scsi_Cmnd *SCint[AHA1542_MAILBOXES];
150 	struct mailbox mb[2 * AHA1542_MAILBOXES];
151 	struct ccb ccb[AHA1542_MAILBOXES];
152 };
153 
154 #define HOSTDATA(host) ((struct aha1542_hostdata *) &host->hostdata)
155 
156 static struct Scsi_Host *aha_host[7];	/* One for each IRQ level (9-15) */
157 
158 static DEFINE_SPINLOCK(aha1542_lock);
159 
160 
161 
162 #define WAITnexttimeout 3000000
163 
164 static void setup_mailboxes(int base_io, struct Scsi_Host *shpnt);
165 static int aha1542_restart(struct Scsi_Host *shost);
166 static void aha1542_intr_handle(struct Scsi_Host *shost, void *dev_id);
167 static irqreturn_t do_aha1542_intr_handle(int irq, void *dev_id);
168 
169 #define aha1542_intr_reset(base)  outb(IRST, CONTROL(base))
170 
171 #define WAIT(port, mask, allof, noneof)					\
172  { register int WAITbits;						\
173    register int WAITtimeout = WAITnexttimeout;				\
174    while (1) {								\
175      WAITbits = inb(port) & (mask);					\
176      if ((WAITbits & (allof)) == (allof) && ((WAITbits & (noneof)) == 0)) \
177        break;                                                         	\
178      if (--WAITtimeout == 0) goto fail;					\
179    }									\
180  }
181 
182 /* Similar to WAIT, except we use the udelay call to regulate the
183    amount of time we wait.  */
184 #define WAITd(port, mask, allof, noneof, timeout)			\
185  { register int WAITbits;						\
186    register int WAITtimeout = timeout;					\
187    while (1) {								\
188      WAITbits = inb(port) & (mask);					\
189      if ((WAITbits & (allof)) == (allof) && ((WAITbits & (noneof)) == 0)) \
190        break;                                                         	\
191      mdelay(1);							\
192      if (--WAITtimeout == 0) goto fail;					\
193    }									\
194  }
195 
196 static void aha1542_stat(void)
197 {
198 /*	int s = inb(STATUS), i = inb(INTRFLAGS);
199 	printk("status=%x intrflags=%x\n", s, i, WAITnexttimeout-WAITtimeout); */
200 }
201 
202 /* This is a bit complicated, but we need to make sure that an interrupt
203    routine does not send something out while we are in the middle of this.
204    Fortunately, it is only at boot time that multi-byte messages
205    are ever sent. */
206 static int aha1542_out(unsigned int base, unchar * cmdp, int len)
207 {
208 	unsigned long flags = 0;
209 	int got_lock;
210 
211 	if (len == 1) {
212 		got_lock = 0;
213 		while (1 == 1) {
214 			WAIT(STATUS(base), CDF, 0, CDF);
215 			spin_lock_irqsave(&aha1542_lock, flags);
216 			if (inb(STATUS(base)) & CDF) {
217 				spin_unlock_irqrestore(&aha1542_lock, flags);
218 				continue;
219 			}
220 			outb(*cmdp, DATA(base));
221 			spin_unlock_irqrestore(&aha1542_lock, flags);
222 			return 0;
223 		}
224 	} else {
225 		spin_lock_irqsave(&aha1542_lock, flags);
226 		got_lock = 1;
227 		while (len--) {
228 			WAIT(STATUS(base), CDF, 0, CDF);
229 			outb(*cmdp++, DATA(base));
230 		}
231 		spin_unlock_irqrestore(&aha1542_lock, flags);
232 	}
233 	return 0;
234 fail:
235 	if (got_lock)
236 		spin_unlock_irqrestore(&aha1542_lock, flags);
237 	printk(KERN_ERR "aha1542_out failed(%d): ", len + 1);
238 	aha1542_stat();
239 	return 1;
240 }
241 
242 /* Only used at boot time, so we do not need to worry about latency as much
243    here */
244 
245 static int __init aha1542_in(unsigned int base, unchar * cmdp, int len)
246 {
247 	unsigned long flags;
248 
249 	spin_lock_irqsave(&aha1542_lock, flags);
250 	while (len--) {
251 		WAIT(STATUS(base), DF, DF, 0);
252 		*cmdp++ = inb(DATA(base));
253 	}
254 	spin_unlock_irqrestore(&aha1542_lock, flags);
255 	return 0;
256 fail:
257 	spin_unlock_irqrestore(&aha1542_lock, flags);
258 	printk(KERN_ERR "aha1542_in failed(%d): ", len + 1);
259 	aha1542_stat();
260 	return 1;
261 }
262 
263 /* Similar to aha1542_in, except that we wait a very short period of time.
264    We use this if we know the board is alive and awake, but we are not sure
265    if the board will respond to the command we are about to send or not */
266 static int __init aha1542_in1(unsigned int base, unchar * cmdp, int len)
267 {
268 	unsigned long flags;
269 
270 	spin_lock_irqsave(&aha1542_lock, flags);
271 	while (len--) {
272 		WAITd(STATUS(base), DF, DF, 0, 100);
273 		*cmdp++ = inb(DATA(base));
274 	}
275 	spin_unlock_irqrestore(&aha1542_lock, flags);
276 	return 0;
277 fail:
278 	spin_unlock_irqrestore(&aha1542_lock, flags);
279 	return 1;
280 }
281 
282 static int makecode(unsigned hosterr, unsigned scsierr)
283 {
284 	switch (hosterr) {
285 	case 0x0:
286 	case 0xa:		/* Linked command complete without error and linked normally */
287 	case 0xb:		/* Linked command complete without error, interrupt generated */
288 		hosterr = 0;
289 		break;
290 
291 	case 0x11:		/* Selection time out-The initiator selection or target
292 				   reselection was not complete within the SCSI Time out period */
293 		hosterr = DID_TIME_OUT;
294 		break;
295 
296 	case 0x12:		/* Data overrun/underrun-The target attempted to transfer more data
297 				   than was allocated by the Data Length field or the sum of the
298 				   Scatter / Gather Data Length fields. */
299 
300 	case 0x13:		/* Unexpected bus free-The target dropped the SCSI BSY at an unexpected time. */
301 
302 	case 0x15:		/* MBO command was not 00, 01 or 02-The first byte of the CB was
303 				   invalid. This usually indicates a software failure. */
304 
305 	case 0x16:		/* Invalid CCB Operation Code-The first byte of the CCB was invalid.
306 				   This usually indicates a software failure. */
307 
308 	case 0x17:		/* Linked CCB does not have the same LUN-A subsequent CCB of a set
309 				   of linked CCB's does not specify the same logical unit number as
310 				   the first. */
311 	case 0x18:		/* Invalid Target Direction received from Host-The direction of a
312 				   Target Mode CCB was invalid. */
313 
314 	case 0x19:		/* Duplicate CCB Received in Target Mode-More than once CCB was
315 				   received to service data transfer between the same target LUN
316 				   and initiator SCSI ID in the same direction. */
317 
318 	case 0x1a:		/* Invalid CCB or Segment List Parameter-A segment list with a zero
319 				   length segment or invalid segment list boundaries was received.
320 				   A CCB parameter was invalid. */
321 		DEB(printk("Aha1542: %x %x\n", hosterr, scsierr));
322 		hosterr = DID_ERROR;	/* Couldn't find any better */
323 		break;
324 
325 	case 0x14:		/* Target bus phase sequence failure-An invalid bus phase or bus
326 				   phase sequence was requested by the target. The host adapter
327 				   will generate a SCSI Reset Condition, notifying the host with
328 				   a SCRD interrupt */
329 		hosterr = DID_RESET;
330 		break;
331 	default:
332 		printk(KERN_ERR "aha1542: makecode: unknown hoststatus %x\n", hosterr);
333 		break;
334 	}
335 	return scsierr | (hosterr << 16);
336 }
337 
338 static int __init aha1542_test_port(int bse, struct Scsi_Host *shpnt)
339 {
340 	unchar inquiry_cmd[] = {CMD_INQUIRY};
341 	unchar inquiry_result[4];
342 	unchar *cmdp;
343 	int len;
344 	volatile int debug = 0;
345 
346 	/* Quick and dirty test for presence of the card. */
347 	if (inb(STATUS(bse)) == 0xff)
348 		return 0;
349 
350 	/* Reset the adapter. I ought to make a hard reset, but it's not really necessary */
351 
352 	/*  DEB(printk("aha1542_test_port called \n")); */
353 
354 	/* In case some other card was probing here, reset interrupts */
355 	aha1542_intr_reset(bse);	/* reset interrupts, so they don't block */
356 
357 	outb(SRST | IRST /*|SCRST */ , CONTROL(bse));
358 
359 	mdelay(20);		/* Wait a little bit for things to settle down. */
360 
361 	debug = 1;
362 	/* Expect INIT and IDLE, any of the others are bad */
363 	WAIT(STATUS(bse), STATMASK, INIT | IDLE, STST | DIAGF | INVDCMD | DF | CDF);
364 
365 	debug = 2;
366 	/* Shouldn't have generated any interrupts during reset */
367 	if (inb(INTRFLAGS(bse)) & INTRMASK)
368 		goto fail;
369 
370 
371 	/* Perform a host adapter inquiry instead so we do not need to set
372 	   up the mailboxes ahead of time */
373 
374 	aha1542_out(bse, inquiry_cmd, 1);
375 
376 	debug = 3;
377 	len = 4;
378 	cmdp = &inquiry_result[0];
379 
380 	while (len--) {
381 		WAIT(STATUS(bse), DF, DF, 0);
382 		*cmdp++ = inb(DATA(bse));
383 	}
384 
385 	debug = 8;
386 	/* Reading port should reset DF */
387 	if (inb(STATUS(bse)) & DF)
388 		goto fail;
389 
390 	debug = 9;
391 	/* When HACC, command is completed, and we're though testing */
392 	WAIT(INTRFLAGS(bse), HACC, HACC, 0);
393 	/* now initialize adapter */
394 
395 	debug = 10;
396 	/* Clear interrupts */
397 	outb(IRST, CONTROL(bse));
398 
399 	debug = 11;
400 
401 	return debug;		/* 1 = ok */
402 fail:
403 	return 0;		/* 0 = not ok */
404 }
405 
406 /* A quick wrapper for do_aha1542_intr_handle to grab the spin lock */
407 static irqreturn_t do_aha1542_intr_handle(int irq, void *dev_id)
408 {
409 	unsigned long flags;
410 	struct Scsi_Host *shost;
411 
412 	shost = aha_host[irq - 9];
413 	if (!shost)
414 		panic("Splunge!");
415 
416 	spin_lock_irqsave(shost->host_lock, flags);
417 	aha1542_intr_handle(shost, dev_id);
418 	spin_unlock_irqrestore(shost->host_lock, flags);
419 	return IRQ_HANDLED;
420 }
421 
422 /* A "high" level interrupt handler */
423 static void aha1542_intr_handle(struct Scsi_Host *shost, void *dev_id)
424 {
425 	void (*my_done) (Scsi_Cmnd *) = NULL;
426 	int errstatus, mbi, mbo, mbistatus;
427 	int number_serviced;
428 	unsigned long flags;
429 	Scsi_Cmnd *SCtmp;
430 	int flag;
431 	int needs_restart;
432 	struct mailbox *mb;
433 	struct ccb *ccb;
434 
435 	mb = HOSTDATA(shost)->mb;
436 	ccb = HOSTDATA(shost)->ccb;
437 
438 #ifdef DEBUG
439 	{
440 		flag = inb(INTRFLAGS(shost->io_port));
441 		printk(KERN_DEBUG "aha1542_intr_handle: ");
442 		if (!(flag & ANYINTR))
443 			printk("no interrupt?");
444 		if (flag & MBIF)
445 			printk("MBIF ");
446 		if (flag & MBOA)
447 			printk("MBOF ");
448 		if (flag & HACC)
449 			printk("HACC ");
450 		if (flag & SCRD)
451 			printk("SCRD ");
452 		printk("status %02x\n", inb(STATUS(shost->io_port)));
453 	};
454 #endif
455 	number_serviced = 0;
456 	needs_restart = 0;
457 
458 	while (1 == 1) {
459 		flag = inb(INTRFLAGS(shost->io_port));
460 
461 		/* Check for unusual interrupts.  If any of these happen, we should
462 		   probably do something special, but for now just printing a message
463 		   is sufficient.  A SCSI reset detected is something that we really
464 		   need to deal with in some way. */
465 		if (flag & ~MBIF) {
466 			if (flag & MBOA)
467 				printk("MBOF ");
468 			if (flag & HACC)
469 				printk("HACC ");
470 			if (flag & SCRD) {
471 				needs_restart = 1;
472 				printk("SCRD ");
473 			}
474 		}
475 		aha1542_intr_reset(shost->io_port);
476 
477 		spin_lock_irqsave(&aha1542_lock, flags);
478 		mbi = HOSTDATA(shost)->aha1542_last_mbi_used + 1;
479 		if (mbi >= 2 * AHA1542_MAILBOXES)
480 			mbi = AHA1542_MAILBOXES;
481 
482 		do {
483 			if (mb[mbi].status != 0)
484 				break;
485 			mbi++;
486 			if (mbi >= 2 * AHA1542_MAILBOXES)
487 				mbi = AHA1542_MAILBOXES;
488 		} while (mbi != HOSTDATA(shost)->aha1542_last_mbi_used);
489 
490 		if (mb[mbi].status == 0) {
491 			spin_unlock_irqrestore(&aha1542_lock, flags);
492 			/* Hmm, no mail.  Must have read it the last time around */
493 			if (!number_serviced && !needs_restart)
494 				printk(KERN_WARNING "aha1542.c: interrupt received, but no mail.\n");
495 			/* We detected a reset.  Restart all pending commands for
496 			   devices that use the hard reset option */
497 			if (needs_restart)
498 				aha1542_restart(shost);
499 			return;
500 		};
501 
502 		mbo = (scsi2int(mb[mbi].ccbptr) - (SCSI_BUF_PA(&ccb[0]))) / sizeof(struct ccb);
503 		mbistatus = mb[mbi].status;
504 		mb[mbi].status = 0;
505 		HOSTDATA(shost)->aha1542_last_mbi_used = mbi;
506 		spin_unlock_irqrestore(&aha1542_lock, flags);
507 
508 #ifdef DEBUG
509 		{
510 			if (ccb[mbo].tarstat | ccb[mbo].hastat)
511 				printk(KERN_DEBUG "aha1542_command: returning %x (status %d)\n",
512 				       ccb[mbo].tarstat + ((int) ccb[mbo].hastat << 16), mb[mbi].status);
513 		};
514 #endif
515 
516 		if (mbistatus == 3)
517 			continue;	/* Aborted command not found */
518 
519 #ifdef DEBUG
520 		printk(KERN_DEBUG "...done %d %d\n", mbo, mbi);
521 #endif
522 
523 		SCtmp = HOSTDATA(shost)->SCint[mbo];
524 
525 		if (!SCtmp || !SCtmp->scsi_done) {
526 			printk(KERN_WARNING "aha1542_intr_handle: Unexpected interrupt\n");
527 			printk(KERN_WARNING "tarstat=%x, hastat=%x idlun=%x ccb#=%d \n", ccb[mbo].tarstat,
528 			       ccb[mbo].hastat, ccb[mbo].idlun, mbo);
529 			return;
530 		}
531 		my_done = SCtmp->scsi_done;
532 		kfree(SCtmp->host_scribble);
533 		SCtmp->host_scribble = NULL;
534 		/* Fetch the sense data, and tuck it away, in the required slot.  The
535 		   Adaptec automatically fetches it, and there is no guarantee that
536 		   we will still have it in the cdb when we come back */
537 		if (ccb[mbo].tarstat == 2)
538 			memcpy(SCtmp->sense_buffer, &ccb[mbo].cdb[ccb[mbo].cdblen],
539 			       SCSI_SENSE_BUFFERSIZE);
540 
541 
542 		/* is there mail :-) */
543 
544 		/* more error checking left out here */
545 		if (mbistatus != 1)
546 			/* This is surely wrong, but I don't know what's right */
547 			errstatus = makecode(ccb[mbo].hastat, ccb[mbo].tarstat);
548 		else
549 			errstatus = 0;
550 
551 #ifdef DEBUG
552 		if (errstatus)
553 			printk(KERN_DEBUG "(aha1542 error:%x %x %x) ", errstatus,
554 			       ccb[mbo].hastat, ccb[mbo].tarstat);
555 #endif
556 
557 		if (ccb[mbo].tarstat == 2) {
558 #ifdef DEBUG
559 			int i;
560 #endif
561 			DEB(printk("aha1542_intr_handle: sense:"));
562 #ifdef DEBUG
563 			for (i = 0; i < 12; i++)
564 				printk("%02x ", ccb[mbo].cdb[ccb[mbo].cdblen + i]);
565 			printk("\n");
566 #endif
567 			/*
568 			   DEB(printk("aha1542_intr_handle: buf:"));
569 			   for (i = 0; i < bufflen; i++)
570 			   printk("%02x ", ((unchar *)buff)[i]);
571 			   printk("\n");
572 			 */
573 		}
574 		DEB(if (errstatus) printk("aha1542_intr_handle: returning %6x\n", errstatus));
575 		SCtmp->result = errstatus;
576 		HOSTDATA(shost)->SCint[mbo] = NULL;	/* This effectively frees up the mailbox slot, as
577 							   far as queuecommand is concerned */
578 		my_done(SCtmp);
579 		number_serviced++;
580 	};
581 }
582 
583 static int aha1542_queuecommand(Scsi_Cmnd * SCpnt, void (*done) (Scsi_Cmnd *))
584 {
585 	unchar ahacmd = CMD_START_SCSI;
586 	unchar direction;
587 	unchar *cmd = (unchar *) SCpnt->cmnd;
588 	unchar target = SCpnt->device->id;
589 	unchar lun = SCpnt->device->lun;
590 	unsigned long flags;
591 	int bufflen = scsi_bufflen(SCpnt);
592 	int mbo;
593 	struct mailbox *mb;
594 	struct ccb *ccb;
595 
596 	DEB(int i);
597 
598 	mb = HOSTDATA(SCpnt->device->host)->mb;
599 	ccb = HOSTDATA(SCpnt->device->host)->ccb;
600 
601 	DEB(if (target > 1) {
602 	    SCpnt->result = DID_TIME_OUT << 16;
603 	    done(SCpnt); return 0;
604 	    }
605 	);
606 
607 	if (*cmd == REQUEST_SENSE) {
608 		/* Don't do the command - we have the sense data already */
609 #if 0
610 		/* scsi_request_sense() provides a buffer of size 256,
611 		   so there is no reason to expect equality */
612 		if (bufflen != SCSI_SENSE_BUFFERSIZE)
613 			printk(KERN_CRIT "aha1542: Wrong buffer length supplied "
614 			       "for request sense (%d)\n", bufflen);
615 #endif
616 		SCpnt->result = 0;
617 		done(SCpnt);
618 		return 0;
619 	}
620 #ifdef DEBUG
621 	if (*cmd == READ_10 || *cmd == WRITE_10)
622 		i = xscsi2int(cmd + 2);
623 	else if (*cmd == READ_6 || *cmd == WRITE_6)
624 		i = scsi2int(cmd + 2);
625 	else
626 		i = -1;
627 	if (done)
628 		printk(KERN_DEBUG "aha1542_queuecommand: dev %d cmd %02x pos %d len %d ", target, *cmd, i, bufflen);
629 	else
630 		printk(KERN_DEBUG "aha1542_command: dev %d cmd %02x pos %d len %d ", target, *cmd, i, bufflen);
631 	aha1542_stat();
632 	printk(KERN_DEBUG "aha1542_queuecommand: dumping scsi cmd:");
633 	for (i = 0; i < SCpnt->cmd_len; i++)
634 		printk("%02x ", cmd[i]);
635 	printk("\n");
636 	if (*cmd == WRITE_10 || *cmd == WRITE_6)
637 		return 0;	/* we are still testing, so *don't* write */
638 #endif
639 	/* Use the outgoing mailboxes in a round-robin fashion, because this
640 	   is how the host adapter will scan for them */
641 
642 	spin_lock_irqsave(&aha1542_lock, flags);
643 	mbo = HOSTDATA(SCpnt->device->host)->aha1542_last_mbo_used + 1;
644 	if (mbo >= AHA1542_MAILBOXES)
645 		mbo = 0;
646 
647 	do {
648 		if (mb[mbo].status == 0 && HOSTDATA(SCpnt->device->host)->SCint[mbo] == NULL)
649 			break;
650 		mbo++;
651 		if (mbo >= AHA1542_MAILBOXES)
652 			mbo = 0;
653 	} while (mbo != HOSTDATA(SCpnt->device->host)->aha1542_last_mbo_used);
654 
655 	if (mb[mbo].status || HOSTDATA(SCpnt->device->host)->SCint[mbo])
656 		panic("Unable to find empty mailbox for aha1542.\n");
657 
658 	HOSTDATA(SCpnt->device->host)->SCint[mbo] = SCpnt;	/* This will effectively prevent someone else from
659 							   screwing with this cdb. */
660 
661 	HOSTDATA(SCpnt->device->host)->aha1542_last_mbo_used = mbo;
662 	spin_unlock_irqrestore(&aha1542_lock, flags);
663 
664 #ifdef DEBUG
665 	printk(KERN_DEBUG "Sending command (%d %x)...", mbo, done);
666 #endif
667 
668 	any2scsi(mb[mbo].ccbptr, SCSI_BUF_PA(&ccb[mbo]));	/* This gets trashed for some reason */
669 
670 	memset(&ccb[mbo], 0, sizeof(struct ccb));
671 
672 	ccb[mbo].cdblen = SCpnt->cmd_len;
673 
674 	direction = 0;
675 	if (*cmd == READ_10 || *cmd == READ_6)
676 		direction = 8;
677 	else if (*cmd == WRITE_10 || *cmd == WRITE_6)
678 		direction = 16;
679 
680 	memcpy(ccb[mbo].cdb, cmd, ccb[mbo].cdblen);
681 
682 	if (bufflen) {
683 		struct scatterlist *sg;
684 		struct chain *cptr;
685 #ifdef DEBUG
686 		unsigned char *ptr;
687 #endif
688 		int i, sg_count = scsi_sg_count(SCpnt);
689 		ccb[mbo].op = 2;	/* SCSI Initiator Command  w/scatter-gather */
690 		SCpnt->host_scribble = kmalloc(sizeof(*cptr)*sg_count,
691 		                                         GFP_KERNEL | GFP_DMA);
692 		cptr = (struct chain *) SCpnt->host_scribble;
693 		if (cptr == NULL) {
694 			/* free the claimed mailbox slot */
695 			HOSTDATA(SCpnt->device->host)->SCint[mbo] = NULL;
696 			return SCSI_MLQUEUE_HOST_BUSY;
697 		}
698 		scsi_for_each_sg(SCpnt, sg, sg_count, i) {
699 			any2scsi(cptr[i].dataptr, SCSI_SG_PA(sg));
700 			if (SCSI_SG_PA(sg) + sg->length - 1 > ISA_DMA_THRESHOLD)
701 				BAD_SG_DMA(SCpnt, scsi_sglist(SCpnt), sg_count, i);
702 			any2scsi(cptr[i].datalen, sg->length);
703 		};
704 		any2scsi(ccb[mbo].datalen, sg_count * sizeof(struct chain));
705 		any2scsi(ccb[mbo].dataptr, SCSI_BUF_PA(cptr));
706 #ifdef DEBUG
707 		printk("cptr %x: ", cptr);
708 		ptr = (unsigned char *) cptr;
709 		for (i = 0; i < 18; i++)
710 			printk("%02x ", ptr[i]);
711 #endif
712 	} else {
713 		ccb[mbo].op = 0;	/* SCSI Initiator Command */
714 		SCpnt->host_scribble = NULL;
715 		any2scsi(ccb[mbo].datalen, 0);
716 		any2scsi(ccb[mbo].dataptr, 0);
717 	};
718 	ccb[mbo].idlun = (target & 7) << 5 | direction | (lun & 7);	/*SCSI Target Id */
719 	ccb[mbo].rsalen = 16;
720 	ccb[mbo].linkptr[0] = ccb[mbo].linkptr[1] = ccb[mbo].linkptr[2] = 0;
721 	ccb[mbo].commlinkid = 0;
722 
723 #ifdef DEBUG
724 	{
725 		int i;
726 		printk(KERN_DEBUG "aha1542_command: sending.. ");
727 		for (i = 0; i < sizeof(ccb[mbo]) - 10; i++)
728 			printk("%02x ", ((unchar *) & ccb[mbo])[i]);
729 	};
730 #endif
731 
732 	if (done) {
733 		DEB(printk("aha1542_queuecommand: now waiting for interrupt ");
734 		    aha1542_stat());
735 		SCpnt->scsi_done = done;
736 		mb[mbo].status = 1;
737 		aha1542_out(SCpnt->device->host->io_port, &ahacmd, 1);	/* start scsi command */
738 		DEB(aha1542_stat());
739 	} else
740 		printk("aha1542_queuecommand: done can't be NULL\n");
741 
742 	return 0;
743 }
744 
745 /* Initialize mailboxes */
746 static void setup_mailboxes(int bse, struct Scsi_Host *shpnt)
747 {
748 	int i;
749 	struct mailbox *mb;
750 	struct ccb *ccb;
751 
752 	unchar cmd[5] = { CMD_MBINIT, AHA1542_MAILBOXES, 0, 0, 0};
753 
754 	mb = HOSTDATA(shpnt)->mb;
755 	ccb = HOSTDATA(shpnt)->ccb;
756 
757 	for (i = 0; i < AHA1542_MAILBOXES; i++) {
758 		mb[i].status = mb[AHA1542_MAILBOXES + i].status = 0;
759 		any2scsi(mb[i].ccbptr, SCSI_BUF_PA(&ccb[i]));
760 	};
761 	aha1542_intr_reset(bse);	/* reset interrupts, so they don't block */
762 	any2scsi((cmd + 2), SCSI_BUF_PA(mb));
763 	aha1542_out(bse, cmd, 5);
764 	WAIT(INTRFLAGS(bse), INTRMASK, HACC, 0);
765 	while (0) {
766 fail:
767 		printk(KERN_ERR "aha1542_detect: failed setting up mailboxes\n");
768 	}
769 	aha1542_intr_reset(bse);
770 }
771 
772 static int __init aha1542_getconfig(int base_io, unsigned char *irq_level, unsigned char *dma_chan, unsigned char *scsi_id)
773 {
774 	unchar inquiry_cmd[] = {CMD_RETCONF};
775 	unchar inquiry_result[3];
776 	int i;
777 	i = inb(STATUS(base_io));
778 	if (i & DF) {
779 		i = inb(DATA(base_io));
780 	};
781 	aha1542_out(base_io, inquiry_cmd, 1);
782 	aha1542_in(base_io, inquiry_result, 3);
783 	WAIT(INTRFLAGS(base_io), INTRMASK, HACC, 0);
784 	while (0) {
785 fail:
786 		printk(KERN_ERR "aha1542_detect: query board settings\n");
787 	}
788 	aha1542_intr_reset(base_io);
789 	switch (inquiry_result[0]) {
790 	case 0x80:
791 		*dma_chan = 7;
792 		break;
793 	case 0x40:
794 		*dma_chan = 6;
795 		break;
796 	case 0x20:
797 		*dma_chan = 5;
798 		break;
799 	case 0x01:
800 		*dma_chan = 0;
801 		break;
802 	case 0:
803 		/* This means that the adapter, although Adaptec 1542 compatible, doesn't use a DMA channel.
804 		   Currently only aware of the BusLogic BT-445S VL-Bus adapter which needs this. */
805 		*dma_chan = 0xFF;
806 		break;
807 	default:
808 		printk(KERN_ERR "Unable to determine Adaptec DMA priority.  Disabling board\n");
809 		return -1;
810 	};
811 	switch (inquiry_result[1]) {
812 	case 0x40:
813 		*irq_level = 15;
814 		break;
815 	case 0x20:
816 		*irq_level = 14;
817 		break;
818 	case 0x8:
819 		*irq_level = 12;
820 		break;
821 	case 0x4:
822 		*irq_level = 11;
823 		break;
824 	case 0x2:
825 		*irq_level = 10;
826 		break;
827 	case 0x1:
828 		*irq_level = 9;
829 		break;
830 	default:
831 		printk(KERN_ERR "Unable to determine Adaptec IRQ level.  Disabling board\n");
832 		return -1;
833 	};
834 	*scsi_id = inquiry_result[2] & 7;
835 	return 0;
836 }
837 
838 /* This function should only be called for 1542C boards - we can detect
839    the special firmware settings and unlock the board */
840 
841 static int __init aha1542_mbenable(int base)
842 {
843 	static unchar mbenable_cmd[3];
844 	static unchar mbenable_result[2];
845 	int retval;
846 
847 	retval = BIOS_TRANSLATION_6432;
848 
849 	mbenable_cmd[0] = CMD_EXTBIOS;
850 	aha1542_out(base, mbenable_cmd, 1);
851 	if (aha1542_in1(base, mbenable_result, 2))
852 		return retval;
853 	WAITd(INTRFLAGS(base), INTRMASK, HACC, 0, 100);
854 	aha1542_intr_reset(base);
855 
856 	if ((mbenable_result[0] & 0x08) || mbenable_result[1]) {
857 		mbenable_cmd[0] = CMD_MBENABLE;
858 		mbenable_cmd[1] = 0;
859 		mbenable_cmd[2] = mbenable_result[1];
860 
861 		if ((mbenable_result[0] & 0x08) && (mbenable_result[1] & 0x03))
862 			retval = BIOS_TRANSLATION_25563;
863 
864 		aha1542_out(base, mbenable_cmd, 3);
865 		WAIT(INTRFLAGS(base), INTRMASK, HACC, 0);
866 	};
867 	while (0) {
868 fail:
869 		printk(KERN_ERR "aha1542_mbenable: Mailbox init failed\n");
870 	}
871 	aha1542_intr_reset(base);
872 	return retval;
873 }
874 
875 /* Query the board to find out if it is a 1542 or a 1740, or whatever. */
876 static int __init aha1542_query(int base_io, int *transl)
877 {
878 	unchar inquiry_cmd[] = {CMD_INQUIRY};
879 	unchar inquiry_result[4];
880 	int i;
881 	i = inb(STATUS(base_io));
882 	if (i & DF) {
883 		i = inb(DATA(base_io));
884 	};
885 	aha1542_out(base_io, inquiry_cmd, 1);
886 	aha1542_in(base_io, inquiry_result, 4);
887 	WAIT(INTRFLAGS(base_io), INTRMASK, HACC, 0);
888 	while (0) {
889 fail:
890 		printk(KERN_ERR "aha1542_detect: query card type\n");
891 	}
892 	aha1542_intr_reset(base_io);
893 
894 	*transl = BIOS_TRANSLATION_6432;	/* Default case */
895 
896 	/* For an AHA1740 series board, we ignore the board since there is a
897 	   hardware bug which can lead to wrong blocks being returned if the board
898 	   is operating in the 1542 emulation mode.  Since there is an extended mode
899 	   driver, we simply ignore the board and let the 1740 driver pick it up.
900 	 */
901 
902 	if (inquiry_result[0] == 0x43) {
903 		printk(KERN_INFO "aha1542.c: Emulation mode not supported for AHA 174N hardware.\n");
904 		return 1;
905 	};
906 
907 	/* Always call this - boards that do not support extended bios translation
908 	   will ignore the command, and we will set the proper default */
909 
910 	*transl = aha1542_mbenable(base_io);
911 
912 	return 0;
913 }
914 
915 #ifndef MODULE
916 static char *setup_str[MAXBOARDS] __initdata;
917 static int setup_idx = 0;
918 
919 static void __init aha1542_setup(char *str, int *ints)
920 {
921 	const char *ahausage = "aha1542: usage: aha1542=<PORTBASE>[,<BUSON>,<BUSOFF>[,<DMASPEED>]]\n";
922 	int setup_portbase;
923 
924 	if (setup_idx >= MAXBOARDS) {
925 		printk(KERN_ERR "aha1542: aha1542_setup called too many times! Bad LILO params ?\n");
926 		printk(KERN_ERR "   Entryline 1: %s\n", setup_str[0]);
927 		printk(KERN_ERR "   Entryline 2: %s\n", setup_str[1]);
928 		printk(KERN_ERR "   This line:   %s\n", str);
929 		return;
930 	}
931 	if (ints[0] < 1 || ints[0] > 4) {
932 		printk(KERN_ERR "aha1542: %s\n", str);
933 		printk(ahausage);
934 		printk(KERN_ERR "aha1542: Wrong parameters may cause system malfunction.. We try anyway..\n");
935 	}
936 	setup_called[setup_idx] = ints[0];
937 	setup_str[setup_idx] = str;
938 
939 	setup_portbase = ints[0] >= 1 ? ints[1] : 0;	/* Preserve the default value.. */
940 	setup_buson[setup_idx] = ints[0] >= 2 ? ints[2] : 7;
941 	setup_busoff[setup_idx] = ints[0] >= 3 ? ints[3] : 5;
942 	if (ints[0] >= 4)
943 	{
944 		int atbt = -1;
945 		switch (ints[4]) {
946 		case 5:
947 			atbt = 0x00;
948 			break;
949 		case 6:
950 			atbt = 0x04;
951 			break;
952 		case 7:
953 			atbt = 0x01;
954 			break;
955 		case 8:
956 			atbt = 0x02;
957 			break;
958 		case 10:
959 			atbt = 0x03;
960 			break;
961 		default:
962 			printk(KERN_ERR "aha1542: %s\n", str);
963 			printk(ahausage);
964 			printk(KERN_ERR "aha1542: Valid values for DMASPEED are 5-8, 10 MB/s.  Using jumper defaults.\n");
965 			break;
966 		}
967 		setup_dmaspeed[setup_idx] = atbt;
968 	}
969 	if (setup_portbase != 0)
970 		bases[setup_idx] = setup_portbase;
971 
972 	++setup_idx;
973 }
974 
975 static int __init do_setup(char *str)
976 {
977 	int ints[5];
978 
979 	int count=setup_idx;
980 
981 	get_options(str, ARRAY_SIZE(ints), ints);
982 	aha1542_setup(str,ints);
983 
984 	return count<setup_idx;
985 }
986 
987 __setup("aha1542=",do_setup);
988 #endif
989 
990 /* return non-zero on detection */
991 static int __init aha1542_detect(struct scsi_host_template * tpnt)
992 {
993 	unsigned char dma_chan;
994 	unsigned char irq_level;
995 	unsigned char scsi_id;
996 	unsigned long flags;
997 	unsigned int base_io;
998 	int trans;
999 	struct Scsi_Host *shpnt = NULL;
1000 	int count = 0;
1001 	int indx;
1002 
1003 	DEB(printk("aha1542_detect: \n"));
1004 
1005 	tpnt->proc_name = "aha1542";
1006 
1007 #ifdef MODULE
1008 	bases[0] = aha1542[0];
1009 	setup_buson[0] = aha1542[1];
1010 	setup_busoff[0] = aha1542[2];
1011 	{
1012 		int atbt = -1;
1013 		switch (aha1542[3]) {
1014 		case 5:
1015 			atbt = 0x00;
1016 			break;
1017 		case 6:
1018 			atbt = 0x04;
1019 			break;
1020 		case 7:
1021 			atbt = 0x01;
1022 			break;
1023 		case 8:
1024 			atbt = 0x02;
1025 			break;
1026 		case 10:
1027 			atbt = 0x03;
1028 			break;
1029 		};
1030 		setup_dmaspeed[0] = atbt;
1031 	}
1032 #endif
1033 
1034 	/*
1035 	 *	Find MicroChannel cards (AHA1640)
1036 	 */
1037 #ifdef CONFIG_MCA_LEGACY
1038 	if(MCA_bus) {
1039 		int slot = 0;
1040 		int pos = 0;
1041 
1042 		for (indx = 0; (slot != MCA_NOTFOUND) && (indx < ARRAY_SIZE(bases)); indx++) {
1043 
1044 			if (bases[indx])
1045 				continue;
1046 
1047 			/* Detect only AHA-1640 cards -- MCA ID 0F1F */
1048 			slot = mca_find_unused_adapter(0x0f1f, slot);
1049 			if (slot == MCA_NOTFOUND)
1050 				break;
1051 
1052 			/* Found one */
1053 			pos = mca_read_stored_pos(slot, 3);
1054 
1055 			/* Decode address */
1056 			if (pos & 0x80) {
1057 				if (pos & 0x02) {
1058 					if (pos & 0x01)
1059 						bases[indx] = 0x334;
1060 					else
1061 						bases[indx] = 0x234;
1062 				} else {
1063 					if (pos & 0x01)
1064 						bases[indx] = 0x134;
1065 				}
1066 			} else {
1067 				if (pos & 0x02) {
1068 					if (pos & 0x01)
1069 						bases[indx] = 0x330;
1070 					else
1071 						bases[indx] = 0x230;
1072 				} else {
1073 					if (pos & 0x01)
1074 						bases[indx] = 0x130;
1075 				}
1076 			}
1077 
1078 			/* No need to decode IRQ and Arb level -- those are
1079 			 * read off the card later.
1080 			 */
1081 			printk(KERN_INFO "Found an AHA-1640 in MCA slot %d, I/O 0x%04x\n", slot, bases[indx]);
1082 
1083 			mca_set_adapter_name(slot, "Adapter AHA-1640");
1084 			mca_set_adapter_procfn(slot, NULL, NULL);
1085 			mca_mark_as_used(slot);
1086 
1087 			/* Go on */
1088 			slot++;
1089 		}
1090 
1091 	}
1092 #endif
1093 
1094 	/*
1095 	 *	Hunt for ISA Plug'n'Pray Adaptecs (AHA1535)
1096 	 */
1097 
1098 	if(isapnp)
1099 	{
1100 		struct pnp_dev *pdev = NULL;
1101 		for(indx = 0; indx < ARRAY_SIZE(bases); indx++) {
1102 			if(bases[indx])
1103 				continue;
1104 			pdev = pnp_find_dev(NULL, ISAPNP_VENDOR('A', 'D', 'P'),
1105 				ISAPNP_FUNCTION(0x1542), pdev);
1106 			if(pdev==NULL)
1107 				break;
1108 			/*
1109 			 *	Activate the PnP card
1110 			 */
1111 
1112 			if(pnp_device_attach(pdev)<0)
1113 				continue;
1114 
1115 			if(pnp_activate_dev(pdev)<0) {
1116 				pnp_device_detach(pdev);
1117 				continue;
1118 			}
1119 
1120 			if(!pnp_port_valid(pdev, 0)) {
1121 				pnp_device_detach(pdev);
1122 				continue;
1123 			}
1124 
1125 			bases[indx] = pnp_port_start(pdev, 0);
1126 
1127 			/* The card can be queried for its DMA, we have
1128 			   the DMA set up that is enough */
1129 
1130 			printk(KERN_INFO "ISAPnP found an AHA1535 at I/O 0x%03X\n", bases[indx]);
1131 		}
1132 	}
1133 	for (indx = 0; indx < ARRAY_SIZE(bases); indx++)
1134 		if (bases[indx] != 0 && request_region(bases[indx], 4, "aha1542")) {
1135 			shpnt = scsi_register(tpnt,
1136 					sizeof(struct aha1542_hostdata));
1137 
1138 			if(shpnt==NULL) {
1139 				release_region(bases[indx], 4);
1140 				continue;
1141 			}
1142 			/* For now we do this - until kmalloc is more intelligent
1143 			   we are resigned to stupid hacks like this */
1144 			if (SCSI_BUF_PA(shpnt) >= ISA_DMA_THRESHOLD) {
1145 				printk(KERN_ERR "Invalid address for shpnt with 1542.\n");
1146 				goto unregister;
1147 			}
1148 			if (!aha1542_test_port(bases[indx], shpnt))
1149 				goto unregister;
1150 
1151 
1152 			base_io = bases[indx];
1153 
1154 			/* Set the Bus on/off-times as not to ruin floppy performance */
1155 			{
1156 				unchar oncmd[] = {CMD_BUSON_TIME, 7};
1157 				unchar offcmd[] = {CMD_BUSOFF_TIME, 5};
1158 
1159 				if (setup_called[indx]) {
1160 					oncmd[1] = setup_buson[indx];
1161 					offcmd[1] = setup_busoff[indx];
1162 				}
1163 				aha1542_intr_reset(base_io);
1164 				aha1542_out(base_io, oncmd, 2);
1165 				WAIT(INTRFLAGS(base_io), INTRMASK, HACC, 0);
1166 				aha1542_intr_reset(base_io);
1167 				aha1542_out(base_io, offcmd, 2);
1168 				WAIT(INTRFLAGS(base_io), INTRMASK, HACC, 0);
1169 				if (setup_dmaspeed[indx] >= 0) {
1170 					unchar dmacmd[] = {CMD_DMASPEED, 0};
1171 					dmacmd[1] = setup_dmaspeed[indx];
1172 					aha1542_intr_reset(base_io);
1173 					aha1542_out(base_io, dmacmd, 2);
1174 					WAIT(INTRFLAGS(base_io), INTRMASK, HACC, 0);
1175 				}
1176 				while (0) {
1177 fail:
1178 					printk(KERN_ERR "aha1542_detect: setting bus on/off-time failed\n");
1179 				}
1180 				aha1542_intr_reset(base_io);
1181 			}
1182 			if (aha1542_query(base_io, &trans))
1183 				goto unregister;
1184 
1185 			if (aha1542_getconfig(base_io, &irq_level, &dma_chan, &scsi_id) == -1)
1186 				goto unregister;
1187 
1188 			printk(KERN_INFO "Configuring Adaptec (SCSI-ID %d) at IO:%x, IRQ %d", scsi_id, base_io, irq_level);
1189 			if (dma_chan != 0xFF)
1190 				printk(", DMA priority %d", dma_chan);
1191 			printk("\n");
1192 
1193 			DEB(aha1542_stat());
1194 			setup_mailboxes(base_io, shpnt);
1195 
1196 			DEB(aha1542_stat());
1197 
1198 			DEB(printk("aha1542_detect: enable interrupt channel %d\n", irq_level));
1199 			spin_lock_irqsave(&aha1542_lock, flags);
1200 			if (request_irq(irq_level, do_aha1542_intr_handle, 0, "aha1542", NULL)) {
1201 				printk(KERN_ERR "Unable to allocate IRQ for adaptec controller.\n");
1202 				spin_unlock_irqrestore(&aha1542_lock, flags);
1203 				goto unregister;
1204 			}
1205 			if (dma_chan != 0xFF) {
1206 				if (request_dma(dma_chan, "aha1542")) {
1207 					printk(KERN_ERR "Unable to allocate DMA channel for Adaptec.\n");
1208 					free_irq(irq_level, NULL);
1209 					spin_unlock_irqrestore(&aha1542_lock, flags);
1210 					goto unregister;
1211 				}
1212 				if (dma_chan == 0 || dma_chan >= 5) {
1213 					set_dma_mode(dma_chan, DMA_MODE_CASCADE);
1214 					enable_dma(dma_chan);
1215 				}
1216 			}
1217 			aha_host[irq_level - 9] = shpnt;
1218 			shpnt->this_id = scsi_id;
1219 			shpnt->unique_id = base_io;
1220 			shpnt->io_port = base_io;
1221 			shpnt->n_io_port = 4;	/* Number of bytes of I/O space used */
1222 			shpnt->dma_channel = dma_chan;
1223 			shpnt->irq = irq_level;
1224 			HOSTDATA(shpnt)->bios_translation = trans;
1225 			if (trans == BIOS_TRANSLATION_25563)
1226 				printk(KERN_INFO "aha1542.c: Using extended bios translation\n");
1227 			HOSTDATA(shpnt)->aha1542_last_mbi_used = (2 * AHA1542_MAILBOXES - 1);
1228 			HOSTDATA(shpnt)->aha1542_last_mbo_used = (AHA1542_MAILBOXES - 1);
1229 			memset(HOSTDATA(shpnt)->SCint, 0, sizeof(HOSTDATA(shpnt)->SCint));
1230 			spin_unlock_irqrestore(&aha1542_lock, flags);
1231 #if 0
1232 			DEB(printk(" *** READ CAPACITY ***\n"));
1233 
1234 			{
1235 				unchar buf[8];
1236 				static unchar cmd[] = { READ_CAPACITY, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
1237 				int i;
1238 
1239 				for (i = 0; i < sizeof(buf); ++i)
1240 					buf[i] = 0x87;
1241 				for (i = 0; i < 2; ++i)
1242 					if (!aha1542_command(i, cmd, buf, sizeof(buf))) {
1243 						printk(KERN_DEBUG "aha_detect: LU %d sector_size %d device_size %d\n",
1244 						       i, xscsi2int(buf + 4), xscsi2int(buf));
1245 					}
1246 			}
1247 
1248 			DEB(printk(" *** NOW RUNNING MY OWN TEST *** \n"));
1249 
1250 			for (i = 0; i < 4; ++i) {
1251 				unsigned char cmd[10];
1252 				static buffer[512];
1253 
1254 				cmd[0] = READ_10;
1255 				cmd[1] = 0;
1256 				xany2scsi(cmd + 2, i);
1257 				cmd[6] = 0;
1258 				cmd[7] = 0;
1259 				cmd[8] = 1;
1260 				cmd[9] = 0;
1261 				aha1542_command(0, cmd, buffer, 512);
1262 			}
1263 #endif
1264 			count++;
1265 			continue;
1266 unregister:
1267 			release_region(bases[indx], 4);
1268 			scsi_unregister(shpnt);
1269 			continue;
1270 
1271 		};
1272 
1273 	return count;
1274 }
1275 
1276 static int aha1542_release(struct Scsi_Host *shost)
1277 {
1278 	if (shost->irq)
1279 		free_irq(shost->irq, NULL);
1280 	if (shost->dma_channel != 0xff)
1281 		free_dma(shost->dma_channel);
1282 	if (shost->io_port && shost->n_io_port)
1283 		release_region(shost->io_port, shost->n_io_port);
1284 	scsi_unregister(shost);
1285 	return 0;
1286 }
1287 
1288 static int aha1542_restart(struct Scsi_Host *shost)
1289 {
1290 	int i;
1291 	int count = 0;
1292 #if 0
1293 	unchar ahacmd = CMD_START_SCSI;
1294 #endif
1295 
1296 	for (i = 0; i < AHA1542_MAILBOXES; i++)
1297 		if (HOSTDATA(shost)->SCint[i] &&
1298 		    !(HOSTDATA(shost)->SCint[i]->device->soft_reset)) {
1299 #if 0
1300 			HOSTDATA(shost)->mb[i].status = 1;	/* Indicate ready to restart... */
1301 #endif
1302 			count++;
1303 		}
1304 	printk(KERN_DEBUG "Potential to restart %d stalled commands...\n", count);
1305 #if 0
1306 	/* start scsi command */
1307 	if (count)
1308 		aha1542_out(shost->io_port, &ahacmd, 1);
1309 #endif
1310 	return 0;
1311 }
1312 
1313 /*
1314  * This is a device reset.  This is handled by sending a special command
1315  * to the device.
1316  */
1317 static int aha1542_dev_reset(Scsi_Cmnd * SCpnt)
1318 {
1319 	unsigned long flags;
1320 	struct mailbox *mb;
1321 	unchar target = SCpnt->device->id;
1322 	unchar lun = SCpnt->device->lun;
1323 	int mbo;
1324 	struct ccb *ccb;
1325 	unchar ahacmd = CMD_START_SCSI;
1326 
1327 	ccb = HOSTDATA(SCpnt->device->host)->ccb;
1328 	mb = HOSTDATA(SCpnt->device->host)->mb;
1329 
1330 	spin_lock_irqsave(&aha1542_lock, flags);
1331 	mbo = HOSTDATA(SCpnt->device->host)->aha1542_last_mbo_used + 1;
1332 	if (mbo >= AHA1542_MAILBOXES)
1333 		mbo = 0;
1334 
1335 	do {
1336 		if (mb[mbo].status == 0 && HOSTDATA(SCpnt->device->host)->SCint[mbo] == NULL)
1337 			break;
1338 		mbo++;
1339 		if (mbo >= AHA1542_MAILBOXES)
1340 			mbo = 0;
1341 	} while (mbo != HOSTDATA(SCpnt->device->host)->aha1542_last_mbo_used);
1342 
1343 	if (mb[mbo].status || HOSTDATA(SCpnt->device->host)->SCint[mbo])
1344 		panic("Unable to find empty mailbox for aha1542.\n");
1345 
1346 	HOSTDATA(SCpnt->device->host)->SCint[mbo] = SCpnt;	/* This will effectively
1347 							   prevent someone else from
1348 							   screwing with this cdb. */
1349 
1350 	HOSTDATA(SCpnt->device->host)->aha1542_last_mbo_used = mbo;
1351 	spin_unlock_irqrestore(&aha1542_lock, flags);
1352 
1353 	any2scsi(mb[mbo].ccbptr, SCSI_BUF_PA(&ccb[mbo]));	/* This gets trashed for some reason */
1354 
1355 	memset(&ccb[mbo], 0, sizeof(struct ccb));
1356 
1357 	ccb[mbo].op = 0x81;	/* BUS DEVICE RESET */
1358 
1359 	ccb[mbo].idlun = (target & 7) << 5 | (lun & 7);		/*SCSI Target Id */
1360 
1361 	ccb[mbo].linkptr[0] = ccb[mbo].linkptr[1] = ccb[mbo].linkptr[2] = 0;
1362 	ccb[mbo].commlinkid = 0;
1363 
1364 	/*
1365 	 * Now tell the 1542 to flush all pending commands for this
1366 	 * target
1367 	 */
1368 	aha1542_out(SCpnt->device->host->io_port, &ahacmd, 1);
1369 
1370 	scmd_printk(KERN_WARNING, SCpnt,
1371 		"Trying device reset for target\n");
1372 
1373 	return SUCCESS;
1374 
1375 
1376 #ifdef ERIC_neverdef
1377 	/*
1378 	 * With the 1542 we apparently never get an interrupt to
1379 	 * acknowledge a device reset being sent.  Then again, Leonard
1380 	 * says we are doing this wrong in the first place...
1381 	 *
1382 	 * Take a wait and see attitude.  If we get spurious interrupts,
1383 	 * then the device reset is doing something sane and useful, and
1384 	 * we will wait for the interrupt to post completion.
1385 	 */
1386 	printk(KERN_WARNING "Sent BUS DEVICE RESET to target %d\n", SCpnt->target);
1387 
1388 	/*
1389 	 * Free the command block for all commands running on this
1390 	 * target...
1391 	 */
1392 	for (i = 0; i < AHA1542_MAILBOXES; i++) {
1393 		if (HOSTDATA(SCpnt->host)->SCint[i] &&
1394 		    HOSTDATA(SCpnt->host)->SCint[i]->target == SCpnt->target) {
1395 			Scsi_Cmnd *SCtmp;
1396 			SCtmp = HOSTDATA(SCpnt->host)->SCint[i];
1397 			kfree(SCtmp->host_scribble);
1398 			SCtmp->host_scribble = NULL;
1399 			HOSTDATA(SCpnt->host)->SCint[i] = NULL;
1400 			HOSTDATA(SCpnt->host)->mb[i].status = 0;
1401 		}
1402 	}
1403 	return SUCCESS;
1404 
1405 	return FAILED;
1406 #endif				/* ERIC_neverdef */
1407 }
1408 
1409 static int aha1542_bus_reset(Scsi_Cmnd * SCpnt)
1410 {
1411 	int i;
1412 
1413 	/*
1414 	 * This does a scsi reset for all devices on the bus.
1415 	 * In principle, we could also reset the 1542 - should
1416 	 * we do this?  Try this first, and we can add that later
1417 	 * if it turns out to be useful.
1418 	 */
1419 	outb(SCRST, CONTROL(SCpnt->device->host->io_port));
1420 
1421 	/*
1422 	 * Wait for the thing to settle down a bit.  Unfortunately
1423 	 * this is going to basically lock up the machine while we
1424 	 * wait for this to complete.  To be 100% correct, we need to
1425 	 * check for timeout, and if we are doing something like this
1426 	 * we are pretty desperate anyways.
1427 	 */
1428 	ssleep(4);
1429 
1430 	spin_lock_irq(SCpnt->device->host->host_lock);
1431 
1432 	WAIT(STATUS(SCpnt->device->host->io_port),
1433 	     STATMASK, INIT | IDLE, STST | DIAGF | INVDCMD | DF | CDF);
1434 
1435 	/*
1436 	 * Now try to pick up the pieces.  For all pending commands,
1437 	 * free any internal data structures, and basically clear things
1438 	 * out.  We do not try and restart any commands or anything -
1439 	 * the strategy handler takes care of that crap.
1440 	 */
1441 	printk(KERN_WARNING "Sent BUS RESET to scsi host %d\n", SCpnt->device->host->host_no);
1442 
1443 	for (i = 0; i < AHA1542_MAILBOXES; i++) {
1444 		if (HOSTDATA(SCpnt->device->host)->SCint[i] != NULL) {
1445 			Scsi_Cmnd *SCtmp;
1446 			SCtmp = HOSTDATA(SCpnt->device->host)->SCint[i];
1447 
1448 
1449 			if (SCtmp->device->soft_reset) {
1450 				/*
1451 				 * If this device implements the soft reset option,
1452 				 * then it is still holding onto the command, and
1453 				 * may yet complete it.  In this case, we don't
1454 				 * flush the data.
1455 				 */
1456 				continue;
1457 			}
1458 			kfree(SCtmp->host_scribble);
1459 			SCtmp->host_scribble = NULL;
1460 			HOSTDATA(SCpnt->device->host)->SCint[i] = NULL;
1461 			HOSTDATA(SCpnt->device->host)->mb[i].status = 0;
1462 		}
1463 	}
1464 
1465 	spin_unlock_irq(SCpnt->device->host->host_lock);
1466 	return SUCCESS;
1467 
1468 fail:
1469 	spin_unlock_irq(SCpnt->device->host->host_lock);
1470 	return FAILED;
1471 }
1472 
1473 static int aha1542_host_reset(Scsi_Cmnd * SCpnt)
1474 {
1475 	int i;
1476 
1477 	/*
1478 	 * This does a scsi reset for all devices on the bus.
1479 	 * In principle, we could also reset the 1542 - should
1480 	 * we do this?  Try this first, and we can add that later
1481 	 * if it turns out to be useful.
1482 	 */
1483 	outb(HRST | SCRST, CONTROL(SCpnt->device->host->io_port));
1484 
1485 	/*
1486 	 * Wait for the thing to settle down a bit.  Unfortunately
1487 	 * this is going to basically lock up the machine while we
1488 	 * wait for this to complete.  To be 100% correct, we need to
1489 	 * check for timeout, and if we are doing something like this
1490 	 * we are pretty desperate anyways.
1491 	 */
1492 	ssleep(4);
1493 	spin_lock_irq(SCpnt->device->host->host_lock);
1494 
1495 	WAIT(STATUS(SCpnt->device->host->io_port),
1496 	     STATMASK, INIT | IDLE, STST | DIAGF | INVDCMD | DF | CDF);
1497 
1498 	/*
1499 	 * We need to do this too before the 1542 can interact with
1500 	 * us again.
1501 	 */
1502 	setup_mailboxes(SCpnt->device->host->io_port, SCpnt->device->host);
1503 
1504 	/*
1505 	 * Now try to pick up the pieces.  For all pending commands,
1506 	 * free any internal data structures, and basically clear things
1507 	 * out.  We do not try and restart any commands or anything -
1508 	 * the strategy handler takes care of that crap.
1509 	 */
1510 	printk(KERN_WARNING "Sent BUS RESET to scsi host %d\n", SCpnt->device->host->host_no);
1511 
1512 	for (i = 0; i < AHA1542_MAILBOXES; i++) {
1513 		if (HOSTDATA(SCpnt->device->host)->SCint[i] != NULL) {
1514 			Scsi_Cmnd *SCtmp;
1515 			SCtmp = HOSTDATA(SCpnt->device->host)->SCint[i];
1516 
1517 			if (SCtmp->device->soft_reset) {
1518 				/*
1519 				 * If this device implements the soft reset option,
1520 				 * then it is still holding onto the command, and
1521 				 * may yet complete it.  In this case, we don't
1522 				 * flush the data.
1523 				 */
1524 				continue;
1525 			}
1526 			kfree(SCtmp->host_scribble);
1527 			SCtmp->host_scribble = NULL;
1528 			HOSTDATA(SCpnt->device->host)->SCint[i] = NULL;
1529 			HOSTDATA(SCpnt->device->host)->mb[i].status = 0;
1530 		}
1531 	}
1532 
1533 	spin_unlock_irq(SCpnt->device->host->host_lock);
1534 	return SUCCESS;
1535 
1536 fail:
1537 	spin_unlock_irq(SCpnt->device->host->host_lock);
1538 	return FAILED;
1539 }
1540 
1541 #if 0
1542 /*
1543  * These are the old error handling routines.  They are only temporarily
1544  * here while we play with the new error handling code.
1545  */
1546 static int aha1542_old_abort(Scsi_Cmnd * SCpnt)
1547 {
1548 #if 0
1549 	unchar ahacmd = CMD_START_SCSI;
1550 	unsigned long flags;
1551 	struct mailbox *mb;
1552 	int mbi, mbo, i;
1553 
1554 	printk(KERN_DEBUG "In aha1542_abort: %x %x\n",
1555 	       inb(STATUS(SCpnt->host->io_port)),
1556 	       inb(INTRFLAGS(SCpnt->host->io_port)));
1557 
1558 	spin_lock_irqsave(&aha1542_lock, flags);
1559 	mb = HOSTDATA(SCpnt->host)->mb;
1560 	mbi = HOSTDATA(SCpnt->host)->aha1542_last_mbi_used + 1;
1561 	if (mbi >= 2 * AHA1542_MAILBOXES)
1562 		mbi = AHA1542_MAILBOXES;
1563 
1564 	do {
1565 		if (mb[mbi].status != 0)
1566 			break;
1567 		mbi++;
1568 		if (mbi >= 2 * AHA1542_MAILBOXES)
1569 			mbi = AHA1542_MAILBOXES;
1570 	} while (mbi != HOSTDATA(SCpnt->host)->aha1542_last_mbi_used);
1571 	spin_unlock_irqrestore(&aha1542_lock, flags);
1572 
1573 	if (mb[mbi].status) {
1574 		printk(KERN_ERR "Lost interrupt discovered on irq %d - attempting to recover\n",
1575 		       SCpnt->host->irq);
1576 		aha1542_intr_handle(SCpnt->host, NULL);
1577 		return 0;
1578 	}
1579 	/* OK, no lost interrupt.  Try looking to see how many pending commands
1580 	   we think we have. */
1581 
1582 	for (i = 0; i < AHA1542_MAILBOXES; i++)
1583 		if (HOSTDATA(SCpnt->host)->SCint[i]) {
1584 			if (HOSTDATA(SCpnt->host)->SCint[i] == SCpnt) {
1585 				printk(KERN_ERR "Timed out command pending for %s\n",
1586 				       SCpnt->request->rq_disk ?
1587 				       SCpnt->request->rq_disk->disk_name : "?"
1588 				       );
1589 				if (HOSTDATA(SCpnt->host)->mb[i].status) {
1590 					printk(KERN_ERR "OGMB still full - restarting\n");
1591 					aha1542_out(SCpnt->host->io_port, &ahacmd, 1);
1592 				};
1593 			} else
1594 				printk(KERN_ERR "Other pending command %s\n",
1595 				       SCpnt->request->rq_disk ?
1596 				       SCpnt->request->rq_disk->disk_name : "?"
1597 				       );
1598 		}
1599 #endif
1600 
1601 	DEB(printk("aha1542_abort\n"));
1602 #if 0
1603 	spin_lock_irqsave(&aha1542_lock, flags);
1604 	for (mbo = 0; mbo < AHA1542_MAILBOXES; mbo++) {
1605 		if (SCpnt == HOSTDATA(SCpnt->host)->SCint[mbo]) {
1606 			mb[mbo].status = 2;	/* Abort command */
1607 			aha1542_out(SCpnt->host->io_port, &ahacmd, 1);	/* start scsi command */
1608 			spin_unlock_irqrestore(&aha1542_lock, flags);
1609 			break;
1610 		}
1611 	}
1612 	if (AHA1542_MAILBOXES == mbo)
1613 		spin_unlock_irqrestore(&aha1542_lock, flags);
1614 #endif
1615 	return SCSI_ABORT_SNOOZE;
1616 }
1617 
1618 /* We do not implement a reset function here, but the upper level code
1619    assumes that it will get some kind of response for the command in
1620    SCpnt.  We must oblige, or the command will hang the scsi system.
1621    For a first go, we assume that the 1542 notifies us with all of the
1622    pending commands (it does implement soft reset, after all). */
1623 
1624 static int aha1542_old_reset(Scsi_Cmnd * SCpnt, unsigned int reset_flags)
1625 {
1626 	unchar ahacmd = CMD_START_SCSI;
1627 	int i;
1628 
1629 	/*
1630 	 * See if a bus reset was suggested.
1631 	 */
1632 	if (reset_flags & SCSI_RESET_SUGGEST_BUS_RESET) {
1633 		/*
1634 		 * This does a scsi reset for all devices on the bus.
1635 		 * In principle, we could also reset the 1542 - should
1636 		 * we do this?  Try this first, and we can add that later
1637 		 * if it turns out to be useful.
1638 		 */
1639 		outb(HRST | SCRST, CONTROL(SCpnt->host->io_port));
1640 
1641 		/*
1642 		 * Wait for the thing to settle down a bit.  Unfortunately
1643 		 * this is going to basically lock up the machine while we
1644 		 * wait for this to complete.  To be 100% correct, we need to
1645 		 * check for timeout, and if we are doing something like this
1646 		 * we are pretty desperate anyways.
1647 		 */
1648 		WAIT(STATUS(SCpnt->host->io_port),
1649 		STATMASK, INIT | IDLE, STST | DIAGF | INVDCMD | DF | CDF);
1650 
1651 		/*
1652 		 * We need to do this too before the 1542 can interact with
1653 		 * us again.
1654 		 */
1655 		setup_mailboxes(SCpnt->host->io_port, SCpnt->host);
1656 
1657 		/*
1658 		 * Now try to pick up the pieces.  Restart all commands
1659 		 * that are currently active on the bus, and reset all of
1660 		 * the datastructures.  We have some time to kill while
1661 		 * things settle down, so print a nice message.
1662 		 */
1663 		printk(KERN_WARNING "Sent BUS RESET to scsi host %d\n", SCpnt->host->host_no);
1664 
1665 		for (i = 0; i < AHA1542_MAILBOXES; i++)
1666 			if (HOSTDATA(SCpnt->host)->SCint[i] != NULL) {
1667 				Scsi_Cmnd *SCtmp;
1668 				SCtmp = HOSTDATA(SCpnt->host)->SCint[i];
1669 				SCtmp->result = DID_RESET << 16;
1670 				kfree(SCtmp->host_scribble);
1671 				SCtmp->host_scribble = NULL;
1672 				printk(KERN_WARNING "Sending DID_RESET for target %d\n", SCpnt->target);
1673 				SCtmp->scsi_done(SCpnt);
1674 
1675 				HOSTDATA(SCpnt->host)->SCint[i] = NULL;
1676 				HOSTDATA(SCpnt->host)->mb[i].status = 0;
1677 			}
1678 		/*
1679 		 * Now tell the mid-level code what we did here.  Since
1680 		 * we have restarted all of the outstanding commands,
1681 		 * then report SUCCESS.
1682 		 */
1683 		return (SCSI_RESET_SUCCESS | SCSI_RESET_BUS_RESET);
1684 fail:
1685 		printk(KERN_CRIT "aha1542.c: Unable to perform hard reset.\n");
1686 		printk(KERN_CRIT "Power cycle machine to reset\n");
1687 		return (SCSI_RESET_ERROR | SCSI_RESET_BUS_RESET);
1688 
1689 
1690 	} else {
1691 		/* This does a selective reset of just the one device */
1692 		/* First locate the ccb for this command */
1693 		for (i = 0; i < AHA1542_MAILBOXES; i++)
1694 			if (HOSTDATA(SCpnt->host)->SCint[i] == SCpnt) {
1695 				HOSTDATA(SCpnt->host)->ccb[i].op = 0x81;	/* BUS DEVICE RESET */
1696 				/* Now tell the 1542 to flush all pending commands for this target */
1697 				aha1542_out(SCpnt->host->io_port, &ahacmd, 1);
1698 
1699 				/* Here is the tricky part.  What to do next.  Do we get an interrupt
1700 				   for the commands that we aborted with the specified target, or
1701 				   do we generate this on our own?  Try it without first and see
1702 				   what happens */
1703 				printk(KERN_WARNING "Sent BUS DEVICE RESET to target %d\n", SCpnt->target);
1704 
1705 				/* If the first does not work, then try the second.  I think the
1706 				   first option is more likely to be correct. Free the command
1707 				   block for all commands running on this target... */
1708 				for (i = 0; i < AHA1542_MAILBOXES; i++)
1709 					if (HOSTDATA(SCpnt->host)->SCint[i] &&
1710 					    HOSTDATA(SCpnt->host)->SCint[i]->target == SCpnt->target) {
1711 						Scsi_Cmnd *SCtmp;
1712 						SCtmp = HOSTDATA(SCpnt->host)->SCint[i];
1713 						SCtmp->result = DID_RESET << 16;
1714 						kfree(SCtmp->host_scribble);
1715 						SCtmp->host_scribble = NULL;
1716 						printk(KERN_WARNING "Sending DID_RESET for target %d\n", SCpnt->target);
1717 						SCtmp->scsi_done(SCpnt);
1718 
1719 						HOSTDATA(SCpnt->host)->SCint[i] = NULL;
1720 						HOSTDATA(SCpnt->host)->mb[i].status = 0;
1721 					}
1722 				return SCSI_RESET_SUCCESS;
1723 			}
1724 	}
1725 	/* No active command at this time, so this means that each time we got
1726 	   some kind of response the last time through.  Tell the mid-level code
1727 	   to request sense information in order to decide what to do next. */
1728 	return SCSI_RESET_PUNT;
1729 }
1730 #endif    /* end of big comment block around old_abort + old_reset */
1731 
1732 static int aha1542_biosparam(struct scsi_device *sdev,
1733 		struct block_device *bdev, sector_t capacity, int *ip)
1734 {
1735 	int translation_algorithm;
1736 	int size = capacity;
1737 
1738 	translation_algorithm = HOSTDATA(sdev->host)->bios_translation;
1739 
1740 	if ((size >> 11) > 1024 && translation_algorithm == BIOS_TRANSLATION_25563) {
1741 		/* Please verify that this is the same as what DOS returns */
1742 		ip[0] = 255;
1743 		ip[1] = 63;
1744 		ip[2] = size / 255 / 63;
1745 	} else {
1746 		ip[0] = 64;
1747 		ip[1] = 32;
1748 		ip[2] = size >> 11;
1749 	}
1750 
1751 	return 0;
1752 }
1753 MODULE_LICENSE("GPL");
1754 
1755 
1756 static struct scsi_host_template driver_template = {
1757 	.proc_name		= "aha1542",
1758 	.name			= "Adaptec 1542",
1759 	.detect			= aha1542_detect,
1760 	.release		= aha1542_release,
1761 	.queuecommand		= aha1542_queuecommand,
1762 	.eh_device_reset_handler= aha1542_dev_reset,
1763 	.eh_bus_reset_handler	= aha1542_bus_reset,
1764 	.eh_host_reset_handler	= aha1542_host_reset,
1765 	.bios_param		= aha1542_biosparam,
1766 	.can_queue		= AHA1542_MAILBOXES,
1767 	.this_id		= 7,
1768 	.sg_tablesize		= AHA1542_SCATTER,
1769 	.cmd_per_lun		= AHA1542_CMDLUN,
1770 	.unchecked_isa_dma	= 1,
1771 	.use_clustering		= ENABLE_CLUSTERING,
1772 };
1773 #include "scsi_module.c"
1774