summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/i386/scsi/aic7xxx.c19
1 files changed, 13 insertions, 6 deletions
diff --git a/sys/i386/scsi/aic7xxx.c b/sys/i386/scsi/aic7xxx.c
index a098f13..53c69a1 100644
--- a/sys/i386/scsi/aic7xxx.c
+++ b/sys/i386/scsi/aic7xxx.c
@@ -32,7 +32,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: aic7xxx.c,v 1.86 1996/11/16 01:19:14 gibbs Exp $
+ * $Id: aic7xxx.c,v 1.87 1996/11/22 08:28:45 gibbs Exp $
*/
/*
* TODO:
@@ -1526,6 +1526,9 @@ ahc_handle_scsiint(ahc, intstat)
printf("Unexpected busfree. LASTPHASE == 0x%x\n",
lastphase);
}
+ ahc_outb(ahc, CLRSINT1, CLRBUSFREE);
+ ahc_outb(ahc, CLRINT, CLRSCSIINT);
+ restart_sequencer(ahc);
} else if (scb == NULL) {
printf("%s: ahc_intr - referenced scb not "
"valid during scsiint 0x%x scb(%d)\n",
@@ -1612,7 +1615,7 @@ ahc_handle_scsiint(ahc, intstat)
ahc_outb(ahc, SCB_CONTROL, 0);
- ahc_outb(ahc, CLRSINT1, CLRSELTIMEO);
+ ahc_outb(ahc, CLRSINT1, CLRSELTIMEO|CLRBUSFREE);
ahc_outb(ahc, CLRINT, CLRSCSIINT);
@@ -2661,14 +2664,18 @@ ahc_timeout(arg)
case P_MESGIN:
printf("in message in phase");
break;
- default:
+ case P_BUSFREE:
printf("while idle, LASTPHASE == 0x%x",
bus_state);
+ bus_state = 0;
+ break;
+ default:
/*
* We aren't in a valid phase, so assume we're
* idle.
*/
- bus_state = 0;
+ printf("invalid phase, LASTPHASE == 0x%x",
+ bus_state);
break;
}
@@ -3054,7 +3061,7 @@ ahc_reset_channel(ahc, channel, timedout_scb, xs_error, initiate_reset)
ahc_outb(ahc, SBLKCTL, sblkctl ^ SELBUSB);
if (initiate_reset)
ahc_reset_current_bus(ahc);
- ahc_outb(ahc, CLRSINT1, CLRSCSIRSTI|CLRSELTIMEO);
+ ahc_outb(ahc, CLRSINT1, CLRSCSIRSTI|CLRSELTIMEO|CLRBUSFREE);
ahc_outb(ahc, CLRINT, CLRSCSIINT);
ahc_outb(ahc, SBLKCTL, sblkctl);
unpause_sequencer(ahc, /*unpause_always*/TRUE);
@@ -3062,7 +3069,7 @@ ahc_reset_channel(ahc, channel, timedout_scb, xs_error, initiate_reset)
/* Case 2: A command from this bus is active or we're idle */
if (initiate_reset)
ahc_reset_current_bus(ahc);
- ahc_outb(ahc, CLRSINT1, CLRSCSIRSTI|CLRSELTIMEO);
+ ahc_outb(ahc, CLRSINT1, CLRSCSIRSTI|CLRSELTIMEO|CLRBUSFREE);
ahc_outb(ahc, CLRINT, CLRSCSIINT);
restart_sequencer(ahc);
}
OpenPOWER on IntegriCloud