aboutsummaryrefslogtreecommitdiff
path: root/sys/dev
diff options
context:
space:
mode:
authorJustin T. Gibbs <gibbs@FreeBSD.org>2000-11-12 05:19:46 +0000
committerJustin T. Gibbs <gibbs@FreeBSD.org>2000-11-12 05:19:46 +0000
commit420bf587298f22081e1975c07546f54573a0fb34 (patch)
tree790c2bb944582930526ab5fd25037f99727a09b6 /sys/dev
parent2424013a99b27feeb6cff27b30f59d745d9180ef (diff)
Notes
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/aic7xxx/aic7xxx.c3
-rw-r--r--sys/dev/aic7xxx/aic7xxx.seq12
-rw-r--r--sys/dev/aic7xxx/aic7xxx_inline.h5
3 files changed, 16 insertions, 4 deletions
diff --git a/sys/dev/aic7xxx/aic7xxx.c b/sys/dev/aic7xxx/aic7xxx.c
index 2a51edcdb9fa..e21b9a191c55 100644
--- a/sys/dev/aic7xxx/aic7xxx.c
+++ b/sys/dev/aic7xxx/aic7xxx.c
@@ -368,6 +368,9 @@ ahc_handle_brkadrint(struct ahc_softc *ahc)
ahc_abort_scbs(ahc, CAM_TARGET_WILDCARD, ALL_CHANNELS,
CAM_LUN_WILDCARD, SCB_LIST_NULL, ROLE_UNKNOWN,
CAM_NO_HBA);
+
+ /* Disable all interrupt sources by resetting the controller */
+ ahc_shutdown(ahc);
}
void
diff --git a/sys/dev/aic7xxx/aic7xxx.seq b/sys/dev/aic7xxx/aic7xxx.seq
index 2c1bfdb1b029..2457e50b57fc 100644
--- a/sys/dev/aic7xxx/aic7xxx.seq
+++ b/sys/dev/aic7xxx/aic7xxx.seq
@@ -57,7 +57,9 @@
poll_for_work:
call clear_target_state;
and SXFRCTL0, ~SPIOEN;
- clr SCSIBUSL;
+ if ((ahc->features & AHC_ULTRA2) != 0) {
+ clr SCSIBUSL;
+ }
poll_for_work_loop:
test SSTAT0, SELDO|SELDI jnz selection;
test SCSISEQ, ENSELO jnz poll_for_work_loop;
@@ -508,7 +510,9 @@ target_busfree_wait:
test SCSISIGI, ACKI jnz .;
target_busfree:
and SIMODE1, ~ENBUSFREE;
- clr SCSIBUSL;
+ if ((ahc->features & AHC_ULTRA2) != 0) {
+ clr SCSIBUSL;
+ }
clr SCSISIGO;
mvi LASTPHASE, P_BUSFREE;
call complete_target_cmd;
@@ -635,7 +639,9 @@ ITloop:
await_busfree:
and SIMODE1, ~ENBUSFREE;
mov NONE, SCSIDATL; /* Ack the last byte */
- clr SCSIBUSL; /* Prevent bit leakage durint SELTO */
+ if ((ahc->features & AHC_ULTRA2) != 0) {
+ clr SCSIBUSL; /* Prevent bit leakage durint SELTO */
+ }
and SXFRCTL0, ~SPIOEN;
test SSTAT1,REQINIT|BUSFREE jz .;
test SSTAT1, BUSFREE jnz poll_for_work;
diff --git a/sys/dev/aic7xxx/aic7xxx_inline.h b/sys/dev/aic7xxx/aic7xxx_inline.h
index c99763249019..6d6df14721c0 100644
--- a/sys/dev/aic7xxx/aic7xxx_inline.h
+++ b/sys/dev/aic7xxx/aic7xxx_inline.h
@@ -400,8 +400,11 @@ ahc_intr(struct ahc_softc *ahc)
ahc_run_tqinfifo(ahc, /*paused*/FALSE);
#endif
}
- if (intstat & BRKADRINT)
+ if (intstat & BRKADRINT) {
ahc_handle_brkadrint(ahc);
+ /* Fatal error, no more interrupts to handle. */
+ return;
+ }
if ((intstat & (SEQINT|SCSIINT)) != 0)
ahc_pause_bug_fix(ahc);