-#define CMD_WAIT 1000 /* wait for next phase, generic */
-#define IO_WAIT 1000000 /* time to xfer data in/out */
-#define POSTDATA_WAIT 10000000 /* wait for next phase, after dataio */
-
-/*
- * Transfer data out via polling. Return success (0) iff all
- * the bytes were sent and we got an interrupt.
- *
- * This returns -1 on timeout, resid count on early interrupt,
- * but no one really cares....
- */
-static int
-espixfer_out(sc, esp, dma, buf, len)
- register struct esp_softc *sc;
- register volatile struct espreg *esp;
- register volatile struct dmareg *dma;
- register caddr_t buf;
- register int len;
-{
- register int wait, n;
-
- if (CROSS_DMA(buf, len))
- panic("espixfer_out: 16MB boundary");
-
- /* set dma address and transfer count */
- dma->dma_addr = (int)buf;
- esp->esp_tch = len >> 8;
- esp->esp_tcl = len;
-
- /* load count into counter via DMA NOP */
- esp->esp_cmd = ESPCMD_DMA | ESPCMD_NOP;
-
- /* enable dma (but not interrupts) */
- dma->dma_csr = DMA_ENA;
-
- /* and go */
- esp->esp_cmd = ESPCMD_DMA | ESPCMD_XFER_INFO;
-
- /* wait for completion */
- for (wait = IO_WAIT; wait > 0; --wait) {
- n = dma->dma_csr;
- if (DMA_INTR(n)) {
- sc->sc_espstat = esp->esp_stat;
- sc->sc_espstep = esp->esp_step & ESPSTEP_MASK;
- sc->sc_espintr = esp->esp_intr;
- sc->sc_dmacsr = n;
- n = esp->esp_tcl | (esp->esp_tch << 8);
- if (n == 0 && (sc->sc_espstat & ESPSTAT_TC) == 0)
- n = 65536;
-
- return (n);
- }
- DELAY(1);
- }
- return (-1);
-}
-
-/*
- * Transfer data in via polling.
- * Return resid count on interrupt, -1 if timed out.
- */
-static int
-espixfer_in(sc, esp, dma, buf, len)
- register struct esp_softc *sc;
- register volatile struct espreg *esp;
- register volatile struct dmareg *dma;
- register caddr_t buf;
- register int len;
-{
- register int wait, n;
-
- if (CROSS_DMA(buf, len))
- panic("espixfer_in: 16MB boundary");
-
- /* set dma address and transfer count */
- dma->dma_addr = (int)buf;
- esp->esp_tch = len >> 8;
- esp->esp_tcl = len;
-
- /* load count into counter via DMA NOP */
- esp->esp_cmd = ESPCMD_DMA | ESPCMD_NOP;
-
- /* enable dma (but not interrupts) */
- dma->dma_csr = DMA_ENA | DMA_READ;
-
- /* and go */
- esp->esp_cmd = ESPCMD_DMA | ESPCMD_XFER_INFO;
-
- /* wait for completion */
- for (wait = IO_WAIT; wait > 0; --wait) {
- n = dma->dma_csr;
- if (DMA_INTR(n)) {
- sc->sc_espstat = esp->esp_stat;
- sc->sc_espstep = esp->esp_step & ESPSTEP_MASK;
- sc->sc_espintr = esp->esp_intr;
- dma->dma_csr |= DMA_DRAIN;
- sc->sc_dmacsr = n;
- n = esp->esp_tcl | (esp->esp_tch << 8);
- if (n == 0 && (sc->sc_espstat & ESPSTAT_TC) == 0)
- n = 65536;
-
- cache_flush(buf, (u_int)len - n);
- return (n);
- }
- DELAY(1);
- }
- return (-1);
-}
-
-/*
- * Clear out target state by doing a special TEST UNIT READY.
- * Note that this calls espicmd (possibly recursively).
- */
-void
-espclear(sc, targ)
- register struct esp_softc *sc;
- register int targ;
-{
-
- /* turn off needclear immediately since this calls espicmd() again */
- sc->sc_needclear &= ~(1 << targ);
- sc->sc_clearing = 1;
- (void) scsi_test_unit_ready(&sc->sc_hba, targ, 0);
- sc->sc_clearing = 0;
-}