summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
Diffstat (limited to 'sys')
-rw-r--r--sys/scsi/ch.c88
1 files changed, 43 insertions, 45 deletions
diff --git a/sys/scsi/ch.c b/sys/scsi/ch.c
index 8aae1578307..f4f0ea2b590 100644
--- a/sys/scsi/ch.c
+++ b/sys/scsi/ch.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ch.c,v 1.9 2000/04/08 19:19:33 csapuntz Exp $ */
+/* $OpenBSD: ch.c,v 1.10 2001/03/15 20:08:43 mjacob Exp $ */
/* $NetBSD: ch.c,v 1.26 1997/02/21 22:06:52 thorpej Exp $ */
/*
@@ -86,7 +86,7 @@ struct ch_softc {
/*
* Quirks; see below.
*/
- int sc_settledelay; /* delay for settle */
+ int sc_settledelay; /* delay for settle */
};
@@ -170,49 +170,10 @@ chattach(parent, self, aux)
printf("\n");
/*
- * Find out our device's quirks.
+ * Store our our device's quirks.
*/
ch_get_quirks(sc, sa->sa_inqbuf);
- /*
- * Some changers require a long time to settle out, to do
- * tape inventory, for instance.
- */
- if (sc->sc_settledelay) {
- printf("%s: waiting %d seconds for changer to settle...\n",
- sc->sc_dev.dv_xname, sc->sc_settledelay);
- delay(1000000 * sc->sc_settledelay);
- }
-
- /*
- * Get information about the device. Note we can't use
- * interrupts yet.
- */
- if (ch_get_params(sc, scsi_autoconf))
- printf("%s: offline\n", sc->sc_dev.dv_xname);
- else {
-#define PLURAL(c) (c) == 1 ? "" : "s"
- printf("%s: %d slot%s, %d drive%s, %d picker%s, %d portal%s\n",
- sc->sc_dev.dv_xname,
- sc->sc_counts[CHET_ST], PLURAL(sc->sc_counts[CHET_ST]),
- sc->sc_counts[CHET_DT], PLURAL(sc->sc_counts[CHET_DT]),
- sc->sc_counts[CHET_MT], PLURAL(sc->sc_counts[CHET_MT]),
- sc->sc_counts[CHET_IE], PLURAL(sc->sc_counts[CHET_IE]));
-#undef PLURAL
-#ifdef CHANGER_DEBUG
- printf("%s: move mask: 0x%x 0x%x 0x%x 0x%x\n",
- sc->sc_dev.dv_xname,
- sc->sc_movemask[CHET_MT], sc->sc_movemask[CHET_ST],
- sc->sc_movemask[CHET_IE], sc->sc_movemask[CHET_DT]);
- printf("%s: exchange mask: 0x%x 0x%x 0x%x 0x%x\n",
- sc->sc_dev.dv_xname,
- sc->sc_exchangemask[CHET_MT], sc->sc_exchangemask[CHET_ST],
- sc->sc_exchangemask[CHET_IE], sc->sc_exchangemask[CHET_DT]);
-#endif /* CHANGER_DEBUG */
- }
-
- /* Default the current picker. */
- sc->sc_picker = sc->sc_firsts[CHET_MT];
}
int
@@ -222,7 +183,8 @@ chopen(dev, flags, fmt, p)
struct proc *p;
{
struct ch_softc *sc;
- int unit, error = 0;
+ int oldcounts[4];
+ int i, unit, error = 0;
unit = CHUNIT(dev);
if ((unit >= ch_cd.cd_ndevs) ||
@@ -248,10 +210,46 @@ chopen(dev, flags, fmt, p)
goto bad;
/*
- * Make sure our parameters are up to date.
+ * Get information about the device. Save old information
+ * so we can decide whether to be verbose about new parameters.
*/
- if ((error = ch_get_params(sc, 0)) != 0)
+ for (i = 0; i < 4; i++) {
+ oldcounts[i] = sc->sc_counts[i];
+ }
+ error = ch_get_params(sc, scsi_autoconf);
+ if (error) {
+ printf("%s: offline\n", sc->sc_dev.dv_xname);
goto bad;
+ }
+
+ for (i = 0; i < 4; i++) {
+ if (oldcounts[i] != sc->sc_counts[i]) {
+ break;
+ }
+ }
+ if (i < 4) {
+#define PLURAL(c) (c) == 1 ? "" : "s"
+ printf("%s: %d slot%s, %d drive%s, %d picker%s, %d portal%s\n",
+ sc->sc_dev.dv_xname,
+ sc->sc_counts[CHET_ST], PLURAL(sc->sc_counts[CHET_ST]),
+ sc->sc_counts[CHET_DT], PLURAL(sc->sc_counts[CHET_DT]),
+ sc->sc_counts[CHET_MT], PLURAL(sc->sc_counts[CHET_MT]),
+ sc->sc_counts[CHET_IE], PLURAL(sc->sc_counts[CHET_IE]));
+#undef PLURAL
+#ifdef CHANGER_DEBUG
+ printf("%s: move mask: 0x%x 0x%x 0x%x 0x%x\n",
+ sc->sc_dev.dv_xname,
+ sc->sc_movemask[CHET_MT], sc->sc_movemask[CHET_ST],
+ sc->sc_movemask[CHET_IE], sc->sc_movemask[CHET_DT]);
+ printf("%s: exchange mask: 0x%x 0x%x 0x%x 0x%x\n",
+ sc->sc_dev.dv_xname,
+ sc->sc_exchangemask[CHET_MT], sc->sc_exchangemask[CHET_ST],
+ sc->sc_exchangemask[CHET_IE], sc->sc_exchangemask[CHET_DT]);
+#endif /* CHANGER_DEBUG */
+ }
+
+ /* Default the current picker. */
+ sc->sc_picker = sc->sc_firsts[CHET_MT];
return (0);