diff -ur orig/linux/drivers/scsi/aha152x.c linux/drivers/scsi/aha152x.c --- orig/linux/drivers/scsi/aha152x.c Fri Dec 29 23:35:47 2000 +++ linux/drivers/scsi/aha152x.c Sun Jan 14 21:31:12 2001 @@ -1,6 +1,6 @@ /* aha152x.c -- Adaptec AHA-152x driver * Author: Jürgen E. Fischer, fischer@norbit.de - * Copyright 1993-1999 Jürgen E. Fischer + * Copyright 1993-2000 Jürgen E. Fischer * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the @@ -13,9 +13,13 @@ * General Public License for more details. * * - * $Id: aha152x.c,v 2.3 2000/11/04 16:40:26 fischer Exp $ + * $Id: aha152x.c,v 2.4 2000/12/16 12:53:56 fischer Exp $ * * $Log: aha152x.c,v $ + * Revision 2.4 2000/12/16 12:53:56 fischer + * - allow REQUEST SENSE to be queued + * - handle shared PCI interrupts + * * Revision 2.3 2000/11/04 16:40:26 fischer * - handle data overruns * - extend timeout for data phases @@ -932,6 +936,8 @@ printk(KERN_ERR "aha152x%d: catched software interrupt for unknown controller.\n", HOSTNO); HOSTDATA(shpnt)->swint++; + + SETPORT(DMACNTRL0, INTEN); } @@ -1274,7 +1280,7 @@ SETPORT(SIMODE0, 0); SETPORT(SIMODE1, 0); - ok = request_irq(shpnt->irq, swintr, SA_INTERRUPT, "aha152x", shpnt); + ok = request_irq(shpnt->irq, swintr, SA_INTERRUPT|SA_SHIRQ, "aha152x", shpnt); if (ok < 0) { if (ok==-EINVAL) printk(KERN_ERR "aha152x%d: bad IRQ %d.\n", HOSTNO, shpnt->irq); @@ -1308,6 +1314,8 @@ printk("failed.\n"); } + SETPORT(DMACNTRL0, INTEN); + printk(KERN_ERR "aha152x%d: IRQ %d possibly wrong. Please verify.\n", HOSTNO, shpnt->irq); registered_count--; @@ -1319,13 +1327,12 @@ } printk("ok.\n"); - SETPORT(DMACNTRL0, INTEN); /* clear interrupts */ SETPORT(SSTAT0, 0x7f); SETPORT(SSTAT1, 0xef); - if (request_irq(shpnt->irq, intr, SA_INTERRUPT, "aha152x", shpnt) < 0) { + if (request_irq(shpnt->irq, intr, SA_INTERRUPT|SA_SHIRQ, "aha152x", shpnt) < 0) { printk(KERN_ERR "aha152x%d: failed to reassign interrupt.\n", HOSTNO); scsi_unregister(shpnt); @@ -1469,12 +1476,14 @@ int aha152x_queue(Scsi_Cmnd *SCpnt, void (*done)(Scsi_Cmnd *)) { +#if 0 if(*SCpnt->cmnd == REQUEST_SENSE) { SCpnt->result = 0; done(SCpnt); - return SUCCESS; + return 0; } +#endif return aha152x_internal_queue(SCpnt, 0, 0, 0, done); } diff -ur orig/linux/drivers/scsi/aha152x.h linux/drivers/scsi/aha152x.h --- orig/linux/drivers/scsi/aha152x.h Mon Dec 11 22:19:02 2000 +++ linux/drivers/scsi/aha152x.h Fri Jan 12 13:18:24 2001 @@ -2,7 +2,7 @@ #define _AHA152X_H /* - * $Id: aha152x.h,v 2.3 2000/11/04 16:41:37 fischer Exp $ + * $Id: aha152x.h,v 2.4 2000/12/16 12:48:48 fischer Exp $ */ #if defined(__KERNEL__) @@ -27,7 +27,7 @@ (unless we support more than 1 cmd_per_lun this should do) */ #define AHA152X_MAXQUEUE 7 -#define AHA152X_REVID "Adaptec 152x SCSI driver; $Revision: 2.3 $" +#define AHA152X_REVID "Adaptec 152x SCSI driver; $Revision: 2.4 $" /* Initial value of Scsi_Host entry */ #define AHA152X { proc_name: "aha152x", \