Lines Matching defs:cb

139 	struct oosiop_cb *cb;
142 cb = TAILQ_FIRST(&sc->sc_free_cb);
143 if (cb)
144 TAILQ_REMOVE(&sc->sc_free_cb, cb, chain);
147 return (cb);
154 struct oosiop_cb *cb = xcb;
157 TAILQ_INSERT_TAIL(&sc->sc_free_cb, cb, chain);
167 struct oosiop_cb *cb;
206 /* Use first cb to reselection msgin buffer */
207 cb = TAILQ_FIRST(&sc->sc_free_cb);
208 sc->sc_reselbuf = cb->xferdma->dm_segs[0].ds_addr +
276 struct oosiop_cb *cb;
285 cb = mallocarray(ncb, sizeof(*cb), M_DEVBUF, M_NOWAIT | M_ZERO);
286 if (cb == NULL) {
287 printf(": failed to allocate cb memory\n");
311 0, BUS_DMA_NOWAIT, &cb->cmddma);
319 &cb->datadma);
327 0, BUS_DMA_NOWAIT, &cb->xferdma);
333 err = bus_dmamap_load(sc->sc_dmat, cb->xferdma, xfer,
340 cb->xfer = xfer;
343 TAILQ_INSERT_TAIL(&sc->sc_free_cb, cb, chain);
346 cb++;
466 oosiop_setup_sgdma(struct oosiop_softc *sc, struct oosiop_cb *cb)
468 struct oosiop_xfer *xfer = cb->xfer;
469 struct scsi_xfer *xs = cb->xs;
472 OOSIOP_XFERSCR_SYNC(sc, cb,
475 off = cb->curdp;
479 for (i = 0; i < cb->datadma->dm_nsegs; i++) {
480 if (off < cb->datadma->dm_segs[i].ds_len)
482 off -= cb->datadma->dm_segs[i].ds_len;
488 while (i < cb->datadma->dm_nsegs) {
491 (cb->datadma->dm_segs[i].ds_len - off));
493 htole32(cb->datadma->dm_segs[i].ds_addr +
505 while (i < cb->datadma->dm_nsegs) {
508 (cb->datadma->dm_segs[i].ds_len - off));
510 htole32(cb->datadma->dm_segs[i].ds_addr +
529 OOSIOP_XFERSCR_SYNC(sc, cb,
539 struct oosiop_cb *cb;
542 cb = sc->sc_curcb;
543 xferbase = cb->xferdma->dm_segs[0].ds_addr;
547 oosiop_fixup_select(sc, Ent_p_select, cb->id);
556 oosiop_fixup_move(sc, Ent_p_msgout_move, cb->msgoutlen, xferbase +
560 oosiop_fixup_move(sc, Ent_p_cmdout_move, cb->cmdlen,
561 cb->cmddma->dm_segs[0].ds_addr);
595 struct oosiop_cb *cb;
599 cb = sc->sc_curcb;
600 if (cb == NULL)
607 n = dsp - cb->xferdma->dm_segs[0].ds_addr - 8;
612 OOSIOP_DINSCR_SYNC(sc, cb,
615 len += letoh32(cb->xfer->datain_scr[i * 2]) &
617 OOSIOP_DINSCR_SYNC(sc, cb,
624 OOSIOP_DOUTSCR_SYNC(sc, cb,
627 len += letoh32(cb->xfer->dataout_scr[i * 2]) &
629 OOSIOP_DOUTSCR_SYNC(sc, cb,
639 if ((sc->sc_tgt[cb->id].sxfer != 0) &&
653 cb->curdp += len;
654 oosiop_setup_sgdma(sc, cb);
722 struct oosiop_cb *cb;
729 cb = xs->io;
731 cb->xs = xs;
732 cb->xsflags = xs->flags;
733 cb->cmdlen = xs->cmdlen;
734 cb->datalen = 0;
735 cb->flags = 0;
736 cb->id = xs->sc_link->target;
737 cb->lun = xs->sc_link->lun;
738 xfer = cb->xfer;
741 err = bus_dmamap_load(sc->sc_dmat, cb->cmddma, &xs->cmd,
752 bus_dmamap_sync(sc->sc_dmat, cb->cmddma, 0, xs->cmdlen,
757 cb->datalen = xs->datalen;
758 err = bus_dmamap_load(sc->sc_dmat, cb->datadma,
768 bus_dmamap_unload(sc->sc_dmat, cb->cmddma);
773 bus_dmamap_sync(sc->sc_dmat, cb->datadma,
784 timeout_set(&xs->stimeout, oosiop_timeout, cb);
786 oosiop_setup(sc, cb);
790 TAILQ_INSERT_TAIL(&sc->sc_cbq, cb, chain);
808 oosiop_poll(sc, cb);
812 oosiop_poll(struct oosiop_softc *sc, struct oosiop_cb *cb)
814 struct scsi_xfer *xs = cb->xs;
846 oosiop_setup(struct oosiop_softc *sc, struct oosiop_cb *cb)
848 struct oosiop_xfer *xfer = cb->xfer;
850 cb->curdp = 0;
851 cb->savedp = 0;
853 oosiop_setup_sgdma(sc, cb);
856 OOSIOP_XFERMSG_SYNC(sc, cb,
858 xfer->msgout[0] = MSG_IDENTIFY(cb->lun,
859 (cb->xs->cmd.opcode != REQUEST_SENSE));
860 cb->msgoutlen = 1;
862 if (sc->sc_tgt[cb->id].flags & TGTF_SYNCNEG) {
863 sc->sc_tgt[cb->id].flags &= ~TGTF_SYNCNEG;
870 cb->msgoutlen = 6;
871 sc->sc_tgt[cb->id].flags |= TGTF_WAITSDTR;
874 OOSIOP_XFERMSG_SYNC(sc, cb,
879 oosiop_done(struct oosiop_softc *sc, struct oosiop_cb *cb)
885 xs = cb->xs;
893 autosense = cb->flags & CBF_AUTOSENSE;
894 cb->flags &= ~CBF_AUTOSENSE;
896 bus_dmamap_sync(sc->sc_dmat, cb->cmddma, 0, cb->cmdlen,
898 bus_dmamap_unload(sc->sc_dmat, cb->cmddma);
900 if (cb->xsflags & (SCSI_DATA_IN | SCSI_DATA_OUT)) {
901 bus_dmamap_sync(sc->sc_dmat, cb->datadma, 0, cb->datalen,
902 (cb->xsflags & SCSI_DATA_IN) ?
904 bus_dmamap_unload(sc->sc_dmat, cb->datadma);
909 xs->status = cb->xfer->status;
911 if (cb->flags & CBF_SELTOUT)
913 else if (cb->flags & CBF_TIMEOUT)
929 cb->flags |= CBF_AUTOSENSE;
944 if ((cb->flags & CBF_AUTOSENSE) == 0) {
950 if (cb == sc->sc_curcb)
952 if (cb == sc->sc_lastcb)
954 sc->sc_tgt[cb->id].nexus = NULL;
963 cb->cmdlen = cmd->length = sizeof(xs->sense);
965 cb->xsflags &= SCSI_POLL | SCSI_NOSLEEP;
966 cb->xsflags |= SCSI_DATA_IN;
967 cb->datalen = sizeof xs->sense;
970 err = bus_dmamap_load(sc->sc_dmat, cb->cmddma, cmd,
971 cb->cmdlen, NULL,
979 bus_dmamap_sync(sc->sc_dmat, cb->cmddma, 0, cb->cmdlen,
983 err = bus_dmamap_load(sc->sc_dmat, cb->datadma,
990 bus_dmamap_unload(sc->sc_dmat, cb->cmddma);
993 bus_dmamap_sync(sc->sc_dmat, cb->datadma,
996 oosiop_setup(sc, cb);
998 TAILQ_INSERT_HEAD(&sc->sc_cbq, cb, chain);
999 if ((cb->xs->flags & SCSI_POLL) == 0) {
1009 struct oosiop_cb *cb = arg;
1010 struct scsi_xfer *xs = cb->xs;
1021 cb->flags |= CBF_TIMEOUT;
1022 oosiop_done(sc, cb);
1129 struct oosiop_cb *cb;
1240 cb = sc->sc_curcb = TAILQ_FIRST(&sc->sc_cbq);
1241 TAILQ_REMOVE(&sc->sc_cbq, cb, chain);
1242 sc->sc_tgt[cb->id].nexus = cb;
1246 sc->sc_lastcb = cb;
1250 if ((cb->xs->flags & SCSI_POLL) == 0) {
1252 timeout_add_msec(&cb->xs->stimeout, cb->xs->timeout);
1265 struct oosiop_cb *cb;
1271 cb = sc->sc_curcb;
1276 if (cb)
1277 oosiop_done(sc, cb);
1281 if (cb)
1282 oosiop_msgin(sc, cb);
1290 cb->xferdma->dm_segs[0].ds_addr +
1310 if (cb) {
1312 sc->sc_tgt[cb->id].nexus = NULL;
1313 TAILQ_INSERT_HEAD(&sc->sc_cbq, cb, chain);
1320 cb = sc->sc_tgt[sc->sc_resid].nexus;
1322 if (MSG_ISIDENTIFY(resmsg) && cb &&
1323 (resmsg & MSG_IDENTIFY_LUNMASK) == cb->lun) {
1324 sc->sc_curcb = cb;
1325 if (cb != sc->sc_lastcb) {
1328 sc->sc_lastcb = cb;
1330 if (cb->curdp != cb->savedp) {
1331 cb->curdp = cb->savedp;
1332 oosiop_setup_sgdma(sc, cb);
1376 oosiop_msgin(struct oosiop_softc *sc, struct oosiop_cb *cb)
1381 xfer = cb->xfer;
1385 OOSIOP_XFERMSG_SYNC(sc, cb,
1392 if (sc->sc_tgt[cb->id].flags & TGTF_WAITSDTR) {
1394 sc->sc_tgt[cb->id].flags &= ~TGTF_WAITSDTR;
1406 cb->msgoutlen = 5;
1409 oosiop_set_syncparam(sc, cb->id, (int)xfer->msgin[3],
1417 cb->msgoutlen = 1;
1424 cb->savedp = cb->curdp;
1428 if (cb->curdp != cb->savedp) {
1429 cb->curdp = cb->savedp;
1430 oosiop_setup_sgdma(sc, cb);
1435 if (sc->sc_tgt[cb->id].flags & TGTF_WAITSDTR) {
1437 sc->sc_tgt[cb->id].flags &= ~TGTF_WAITSDTR;
1438 oosiop_set_syncparam(sc, cb->id, 0, 0);
1446 cb->msgoutlen = 1;
1450 OOSIOP_XFERMSG_SYNC(sc, cb,
1455 oosiop_fixup_move(sc, Ent_p_msgout_move, cb->msgoutlen,
1456 cb->xferdma->dm_segs[0].ds_addr +