diff options
Diffstat (limited to 'sys/dev')
-rw-r--r-- | sys/dev/ic/aic79xx.c | 30 | ||||
-rw-r--r-- | sys/dev/ic/aic79xx.h | 8 | ||||
-rw-r--r-- | sys/dev/ic/aic79xx_openbsd.c | 27 | ||||
-rw-r--r-- | sys/dev/ic/aic79xx_openbsd.h | 4 |
4 files changed, 40 insertions, 29 deletions
diff --git a/sys/dev/ic/aic79xx.c b/sys/dev/ic/aic79xx.c index f8c586a60e2..9e161354e4f 100644 --- a/sys/dev/ic/aic79xx.c +++ b/sys/dev/ic/aic79xx.c @@ -1,4 +1,4 @@ -/* $OpenBSD: aic79xx.c,v 1.20 2004/12/11 00:26:40 krw Exp $ */ +/* $OpenBSD: aic79xx.c,v 1.21 2004/12/13 04:07:25 krw Exp $ */ /* * Copyright (c) 2004 Milos Urbanek, Kenneth R. Westerback & Marco Peereboom @@ -66,6 +66,9 @@ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGES. * + * Id: //depot/aic7xxx/aic7xxx/aic79xx.c#246 + * + * FreeBSD: src/sys/dev/aic7xxx/aic79xx.c,v 1.33 2004/11/18 20:22:30 gibbs Exp */ #include <sys/cdefs.h> @@ -6315,7 +6318,7 @@ ahd_init(struct ahd_softc *ahd) init_done: ahd_reset_current_bus(ahd); ahd_restart(ahd); - aic_timer_reset(&ahd->stat_timer, AHD_STAT_UPDATE_US, + aic_timer_reset(&ahd->stat_timer, AHD_STAT_UPDATE_MS, ahd_stat_timer, ahd); /* We have to wait until after any system dumps... */ @@ -7888,7 +7891,7 @@ ahd_reset_channel(struct ahd_softc *ahd, char channel, int initiate_reset) } -#define AHD_RESET_POLL_US 1000 +#define AHD_RESET_POLL_MS 1 void ahd_reset_poll(void *arg) { @@ -7910,7 +7913,7 @@ ahd_reset_poll(void *arg) ahd_set_modes(ahd, AHD_MODE_SCSI, AHD_MODE_SCSI); ahd_outb(ahd, CLRSINT1, CLRSCSIRSTI); if ((ahd_inb(ahd, SSTAT1) & SCSIRSTI) != 0) { - aic_timer_reset(&ahd->reset_timer, AHD_RESET_POLL_US, + aic_timer_reset(&ahd->reset_timer, AHD_RESET_POLL_MS, ahd_reset_poll, ahd); ahd_unpause(ahd); ahd_unlock(ahd, &s); @@ -7968,7 +7971,7 @@ ahd_stat_timer(void *arg) ahd->cmdcmplt_bucket = (ahd->cmdcmplt_bucket+1) & (AHD_STAT_BUCKETS-1); ahd->cmdcmplt_total -= ahd->cmdcmplt_counts[ahd->cmdcmplt_bucket]; ahd->cmdcmplt_counts[ahd->cmdcmplt_bucket] = 0; - aic_timer_reset(&ahd->stat_timer, AHD_STAT_UPDATE_US, + aic_timer_reset(&ahd->stat_timer, AHD_STAT_UPDATE_MS, ahd_stat_timer, ahd); ahd_unlock(ahd, &s); ahd_list_unlock(&l); @@ -8188,7 +8191,7 @@ ahd_handle_scsi_status(struct ahd_softc *ahd, struct scb *scb) * Ensure we have enough time to actually * retrieve the sense. */ - aic_scb_timer_reset(scb, 5 * 1000000); + aic_scb_timer_reset(scb, 5 * 1000); break; } case SCSI_STATUS_OK: @@ -9207,7 +9210,7 @@ bus_reset: * untimed-out command is outstanding. */ if (ahd_other_scb_timeout(ahd, scb, - active_scb) == 0) + active_scb) == 0) goto bus_reset; continue; } @@ -9222,7 +9225,7 @@ bus_reset: ahd_outb(ahd, SCSISIGO, last_phase|ATNO); ahd_print_path(ahd, active_scb); printf("BDR message in message buffer\n"); - aic_scb_timer_reset(scb, 2 * 1000000); + aic_scb_timer_reset(scb, 2 * 1000); break; } else if (last_phase != P_BUSFREE && ahd_inb(ahd, SCSIPHASE) == 0) { @@ -9262,15 +9265,6 @@ bus_reset: * In either case (selection or reselection), * we will now issue a target reset to the * timed-out device. - * - * Set the MK_MESSAGE control bit indicating - * that we desire to send a message. We - * also set the disconnected flag since - * in the paging case there is no guarantee - * that our SCB control byte matches the - * version on the card. We don't want the - * sequencer to abort the command thinking - * an unsolicited reselection occurred. */ scb->flags |= SCB_DEVICE_RESET; scb->hscb->cdb_len = 0; @@ -9323,7 +9317,7 @@ bus_reset: ahd_set_scbptr(ahd, active_scbptr); ahd_print_path(ahd, scb); printf("Queuing a BDR SCB\n"); - aic_scb_timer_reset(scb, 2 * 1000000); + aic_scb_timer_reset(scb, 2 * 1000); break; } } diff --git a/sys/dev/ic/aic79xx.h b/sys/dev/ic/aic79xx.h index e761d6ea684..072acb24db7 100644 --- a/sys/dev/ic/aic79xx.h +++ b/sys/dev/ic/aic79xx.h @@ -1,4 +1,4 @@ -/* $OpenBSD: aic79xx.h,v 1.15 2004/12/10 17:00:36 krw Exp $ */ +/* $OpenBSD: aic79xx.h,v 1.16 2004/12/13 04:07:26 krw Exp $ */ /* * Copyright (c) 2004 Milos Urbanek, Kenneth R. Westerback & Marco Peereboom @@ -66,7 +66,9 @@ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGES. * - * $FreeBSD: src/sys/dev/aic7xxx/aic79xx.h,v 1.18 2004/02/04 16:38:38 gibbs Exp $ + * Id: //depot/aic7xxx/aic7xxx/aic79xx.h#107 + * + * FreeBSD: src/sys/dev/aic7xxx/aic79xx.h,v 1.23 2004/11/18 20:22:31 gibbs Exp */ #ifndef _AIC79XX_H_ @@ -1171,7 +1173,7 @@ struct ahd_softc { /* * Statistics. */ -#define AHD_STAT_UPDATE_US 250000 /* 250ms */ +#define AHD_STAT_UPDATE_MS 250 #define AHD_STAT_BUCKETS 4 u_int cmdcmplt_bucket; uint32_t cmdcmplt_counts[AHD_STAT_BUCKETS]; diff --git a/sys/dev/ic/aic79xx_openbsd.c b/sys/dev/ic/aic79xx_openbsd.c index d43b19cf41a..8da21ece3b6 100644 --- a/sys/dev/ic/aic79xx_openbsd.c +++ b/sys/dev/ic/aic79xx_openbsd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: aic79xx_openbsd.c,v 1.12 2004/11/23 05:15:35 krw Exp $ */ +/* $OpenBSD: aic79xx_openbsd.c,v 1.13 2004/12/13 04:07:26 krw Exp $ */ /* * Copyright (c) 2004 Milos Urbanek, Kenneth R. Westerback & Marco Peereboom @@ -780,12 +780,27 @@ ahd_adapter_req_set_xfer_mode(struct ahd_softc *ahd, struct scb *scb) } void -aic_scb_timer_reset(struct scb *scb, u_int usec) +aic_timer_reset(aic_timer_t *timer, u_int msec, ahd_callback_t *func, + void *arg) { - if (!(scb->xs->xs_control & XS_CTL_POLL)) { - callout_reset(&scb->xs->xs_callout, - (usec * hz)/1000000, ahd_timeout, scb); - } + uint64_t ticks; + + ticks = msec; + ticks *= hz; + ticks /= 1000; + callout_reset(timer, ticks, func, arg); +} + +void +aic_scb_timer_reset(struct scb *scb, u_int msec) +{ + uint64_t ticks; + + ticks = msec; + ticks *= hz; + ticks /= 1000; + if (!(scb->xs->xs_control & XS_CTL_POLL)) + callout_reset(&scb->xs->xs_callout, ticks, ahd_timeout, scb); } void diff --git a/sys/dev/ic/aic79xx_openbsd.h b/sys/dev/ic/aic79xx_openbsd.h index 5371d68ad59..7c4fe4fca97 100644 --- a/sys/dev/ic/aic79xx_openbsd.h +++ b/sys/dev/ic/aic79xx_openbsd.h @@ -1,4 +1,4 @@ -/* $OpenBSD: aic79xx_openbsd.h,v 1.9 2004/11/23 05:15:35 krw Exp $ */ +/* $OpenBSD: aic79xx_openbsd.h,v 1.10 2004/12/13 04:07:26 krw Exp $ */ /* * Copyright (c) 2004 Milos Urbanek, Kenneth R. Westerback & Marco Peereboom @@ -158,10 +158,10 @@ typedef struct timeout aic_timer_t; /***************************** Timer Facilities *******************************/ void ahd_timeout(void*); +void aic_timer_reset(aic_timer_t *, u_int, ahd_callback_t *, void *); void aic_scb_timer_reset(struct scb *, u_int); #define aic_timer_stop timeout_del -#define aic_timer_reset callout_reset /*************************** Device Access ************************************/ #define ahd_inb(ahd, port) \ |