Index: twe.c =================================================================== RCS file: /data/fbsd-cvs/ncvs/src/sys/dev/twe/twe.c,v retrieving revision 1.1.2.9 diff -u -r1.1.2.9 twe.c --- twe.c 12 May 2004 03:33:37 -0000 1.1.2.9 +++ twe.c 21 May 2004 02:28:03 -0000 @@ -1093,20 +1093,18 @@ { TWE_Response_Queue rq; struct twe_request *tr; - int s, found; + int s; u_int32_t status_reg; debug_called(5); /* loop collecting completed commands */ - found = 0; s = splbio(); for (;;) { status_reg = TWE_STATUS(sc); twe_check_bits(sc, status_reg); /* XXX should this fail? */ if (!(status_reg & TWE_STATUS_RESPONSE_QUEUE_EMPTY)) { - found = 1; rq = TWE_RESPONSE_QUEUE(sc); tr = sc->twe_lookup[rq.u.response_id]; /* find command */ if (tr->tr_status != TWE_CMD_BUSY) @@ -1117,6 +1115,7 @@ /* move to completed queue */ twe_remove_busy(tr); twe_enqueue_complete(tr); + sc->twe_state &= ~TWE_STATE_FRZN; } else { break; /* no response ready */ } @@ -1124,8 +1123,7 @@ splx(s); /* if we've completed any commands, try posting some more */ - if (found) - twe_startio(sc); + twe_startio(sc); /* handle completion and timeouts */ twe_complete(sc); /* XXX use deferred completion? */ @@ -1811,6 +1809,18 @@ twe_printf(sc, "bioq %04d %04d %04d\n", sc->twe_qstat[TWEQ_BIO].q_length, sc->twe_qstat[TWEQ_BIO].q_max, sc->twe_qstat[TWEQ_BIO].q_min); twe_printf(sc, "AEN queue head %d tail %d\n", sc->twe_aen_head, sc->twe_aen_tail); } + +void +twe_print0(void) +{ + struct twe_softc *sc; + + sc = devclass_get_softc(devclass_find("twe"), 0); + if (sc != NULL) + twe_print_controller(sc); + else + printf("twe_print0(): sc == NULL\n"); +} static void twe_panic(struct twe_softc *sc, char *reason) Index: twe_freebsd.c =================================================================== RCS file: /data/fbsd-cvs/ncvs/src/sys/dev/twe/twe_freebsd.c,v retrieving revision 1.2.2.8 diff -u -r1.2.2.8 twe_freebsd.c --- twe_freebsd.c 7 Apr 2004 22:18:00 -0000 1.2.2.8 +++ twe_freebsd.c 3 May 2004 01:43:19 -0000 @@ -944,8 +944,6 @@ tr->tr_flags |= TWE_CMD_MAPPED; - if (tr->tr_flags & TWE_CMD_IN_PROGRESS) - tr->tr_sc->twe_state &= ~TWE_STATE_FRZN; /* save base of first segment in command (applicable if there only one segment) */ tr->tr_dataphys = segs[0].ds_addr; @@ -1055,7 +1053,6 @@ if ((error = bus_dmamap_load(sc->twe_buffer_dmat, tr->tr_dmamap, tr->tr_data, tr->tr_length, twe_setup_data_dmamap, tr, 0) == EINPROGRESS)) { - tr->tr_flags |= TWE_CMD_IN_PROGRESS; sc->twe_state |= TWE_STATE_FRZN; error = 0; } @@ -1102,6 +1099,8 @@ free(tr->tr_data, TWE_MALLOC_CLASS); tr->tr_data = tr->tr_realdata; /* restore 'real' data pointer */ } + + tr->tr_flags &= ~TWE_CMD_MAPPED; } #ifdef TWE_DEBUG Index: twevar.h =================================================================== RCS file: /data/fbsd-cvs/ncvs/src/sys/dev/twe/twevar.h,v retrieving revision 1.1.2.7 diff -u -r1.1.2.7 twevar.h --- twevar.h 12 May 2004 03:33:37 -0000 1.1.2.7 +++ twevar.h 21 May 2004 02:28:04 -0000 @@ -117,7 +117,6 @@ #define TWE_CMD_ALIGNBUF (1<<2) /* data in bio is misaligned, have to copy to/from private buffer */ #define TWE_CMD_SLEEPER (1<<3) /* owner is sleeping on this command */ #define TWE_CMD_MAPPED (1<<4) /* cmd has been mapped */ -#define TWE_CMD_IN_PROGRESS (1<<5) /* bus_dmamap_load returned EINPROGRESS */ void (* tr_complete)(struct twe_request *tr); /* completion handler */ void *tr_private; /* submitter-private data or wait channel */