diff options
| author | Justin T. Gibbs <gibbs@FreeBSD.org> | 1999-09-20 19:04:22 +0000 |
|---|---|---|
| committer | Justin T. Gibbs <gibbs@FreeBSD.org> | 1999-09-20 19:04:22 +0000 |
| commit | d8a4660643d8a33583be4e5affb1a00ebb42e534 (patch) | |
| tree | 87456b727291990f604bc4f521890acfb9e342a4 /sys | |
| parent | 55bad6b5c32afd0d3101cd211f72b8d73a192d72 (diff) | |
Notes
Diffstat (limited to 'sys')
| -rw-r--r-- | sys/dev/aic7xxx/aic7xxx.c | 19 |
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; |
