aboutsummaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorJustin T. Gibbs <gibbs@FreeBSD.org>1999-09-20 19:04:22 +0000
committerJustin T. Gibbs <gibbs@FreeBSD.org>1999-09-20 19:04:22 +0000
commitd8a4660643d8a33583be4e5affb1a00ebb42e534 (patch)
tree87456b727291990f604bc4f521890acfb9e342a4 /sys
parent55bad6b5c32afd0d3101cd211f72b8d73a192d72 (diff)
Notes
Diffstat (limited to 'sys')
-rw-r--r--sys/dev/aic7xxx/aic7xxx.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/sys/dev/aic7xxx/aic7xxx.c b/sys/dev/aic7xxx/aic7xxx.c
index d8278b2c1b4c6..8117a8c3cd143 100644
--- a/sys/dev/aic7xxx/aic7xxx.c
+++ b/sys/dev/aic7xxx/aic7xxx.c
@@ -2661,12 +2661,22 @@ ahc_handle_scsiint(struct ahc_softc *ahc, u_int intstat)
/* Stop the selection */
ahc_outb(ahc, SCSISEQ, 0);
+ /* No more pending messages */
ahc_clear_msg_state(ahc);
- ahc_outb(ahc, CLRSINT1, CLRSELTIMEO|CLRBUSFREE);
+ /*
+ * Although the driver does not care about the
+ * 'Selection in Progress' status bit, the busy
+ * LED does. SELINGO is only cleared by a sucessful
+ * selection, so we must manually clear it to ensure
+ * the LED turns off just incase no future successful
+ * selections occur (e.g. no devices on the bus).
+ */
+ ahc_outb(ahc, CLRSINT0, CLRSELINGO);
+ /* Clear interrupt state */
+ ahc_outb(ahc, CLRSINT1, CLRSELTIMEO|CLRBUSFREE);
ahc_outb(ahc, CLRINT, CLRSCSIINT);
-
restart_sequencer(ahc);
} else if (scb == NULL) {
printf("%s: ahc_intr - referenced scb not "
@@ -4536,9 +4546,6 @@ ahc_action(struct cam_sim *sim, union ccb *ccb)
xpt_done(ccb);
break;
}
- if (ccb->ccb_h.func_code == XPT_NOTIFY_ACK) {
- /* Clear notification state */
- }
SLIST_INSERT_HEAD(&lstate->immed_notifies, &ccb->ccb_h,
sim_links.sle);
ccb->ccb_h.status = CAM_REQ_INPROG;
@@ -5872,9 +5879,7 @@ ahc_abort_scbs(struct ahc_softc *ahc, int target, char channel,
{
struct ccb_hdr *ccb_h;
-
ccb_h = ahc->pending_ccbs.lh_first;
-
while (ccb_h != NULL) {
scbp = (struct scb *)ccb_h->ccb_scb_ptr;
ccb_h = ccb_h->sim_links.le.le_next;