+accinputreset(addr, unit)
+ register struct accdevice *addr;
+ register int unit;
+{
+ register int i;
+
+ addr->icsr = ACC_RESET; DELAY(5000);
+ addr->icsr = IN_MRDY | IN_WEN; /* close the relay */
+ DELAY(10000);
+ /* YECH!!! */
+ for (i = 0; i < 500; i++) {
+ if ((addr->icsr & IN_HRDY) ||
+ (addr->icsr & (IN_RMR | IN_IMPBSY)) == 0)
+ return (1);
+ addr->icsr = IN_MRDY | IN_WEN; DELAY(10000);
+ /* keep turning IN_RMR off */
+ }
+ printf("acc%d: imp doesn't respond, icsr=%b\n", unit,
+ addr->icsr, ACC_INBITS);
+ return (0);
+}
+
+/*
+ * Drop the host ready line to mark host down.
+ */
+accdown(unit)
+ int unit;
+{
+ register struct accdevice *addr;
+
+ addr = (struct accdevice *)(accinfo[unit]->ui_addr);
+ addr->ocsr = ACC_RESET;
+ DELAY(5000);
+ addr->ocsr = OUT_BBACK; /* reset host master ready */
+ accoflush(unit);
+ return (1);
+}
+
+accoflush(unit)
+ int unit;
+{
+ register struct acc_softc *sc = &acc_softc[unit];
+
+ sc->acc_imp->imp_cb.ic_oactive = 0;
+ if (sc->acc_ifuba.ifu_xtofree) {
+ m_freem(sc->acc_ifuba.ifu_xtofree);
+ sc->acc_ifuba.ifu_xtofree = 0;
+ }
+}
+