diff options
| author | Justin T. Gibbs <gibbs@FreeBSD.org> | 2000-11-12 05:19:46 +0000 |
|---|---|---|
| committer | Justin T. Gibbs <gibbs@FreeBSD.org> | 2000-11-12 05:19:46 +0000 |
| commit | 420bf587298f22081e1975c07546f54573a0fb34 (patch) | |
| tree | 790c2bb944582930526ab5fd25037f99727a09b6 /sys/dev | |
| parent | 2424013a99b27feeb6cff27b30f59d745d9180ef (diff) | |
Notes
Diffstat (limited to 'sys/dev')
| -rw-r--r-- | sys/dev/aic7xxx/aic7xxx.c | 3 | ||||
| -rw-r--r-- | sys/dev/aic7xxx/aic7xxx.seq | 12 | ||||
| -rw-r--r-- | sys/dev/aic7xxx/aic7xxx_inline.h | 5 |
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); |
