Lines Matching refs:ccb

87 int	ciss_cmd(struct ciss_ccb *ccb, int flags, int wait);
88 int ciss_done(struct ciss_ccb *ccb);
89 int ciss_error(struct ciss_ccb *ccb);
103 struct ciss_ccb *ccb; in ciss_get_ccb() local
106 ccb = SLIST_FIRST(&sc->sc_free_ccb); in ciss_get_ccb()
107 if (ccb != NULL) { in ciss_get_ccb()
109 ccb->ccb_state = CISS_CCB_READY; in ciss_get_ccb()
110 ccb->ccb_xs = NULL; in ciss_get_ccb()
114 return (ccb); in ciss_get_ccb()
121 struct ciss_ccb *ccb = xccb; in ciss_put_ccb() local
123 ccb->ccb_state = CISS_CCB_FREE; in ciss_put_ccb()
124 ccb->ccb_xs = NULL; in ciss_put_ccb()
125 ccb->ccb_data = NULL; in ciss_put_ccb()
128 SLIST_INSERT_HEAD(&sc->sc_free_ccb, ccb, ccb_link); in ciss_put_ccb()
137 struct ciss_ccb *ccb; in ciss_attach() local
219 sizeof(ccb->ccb_cmd.sgl[0]) * (sc->maxsg - 1); in ciss_attach()
256 ccb = sc->ccbs + i * sc->ccblen; in ciss_attach()
257 cmd = &ccb->ccb_cmd; in ciss_attach()
260 ccb->ccb_sc = sc; in ciss_attach()
261 ccb->ccb_cmdpa = pa + offsetof(struct ciss_ccb, ccb_cmd); in ciss_attach()
262 ccb->ccb_state = CISS_CCB_FREE; in ciss_attach()
268 cmd->err_len = htole32(sizeof(ccb->ccb_err)); in ciss_attach()
274 &ccb->ccb_dmamap))) in ciss_attach()
277 SLIST_INSERT_HEAD(&sc->sc_free_ccb, ccb, ccb_link); in ciss_attach()
433 ciss_cmd(struct ciss_ccb *ccb, int flags, int wait) in ciss_cmd() argument
436 struct ciss_softc *sc = ccb->ccb_sc; in ciss_cmd()
437 struct ciss_cmd *cmd = &ccb->ccb_cmd; in ciss_cmd()
439 bus_dmamap_t dmap = ccb->ccb_dmamap; in ciss_cmd()
447 if (ccb->ccb_state != CISS_CCB_READY) { in ciss_cmd()
449 cmd->id, ccb->ccb_state, CISS_CCB_BITS); in ciss_cmd()
453 if (ccb->ccb_data) { in ciss_cmd()
456 if ((error = bus_dmamap_load(sc->dmat, dmap, ccb->ccb_data, in ciss_cmd()
457 ccb->ccb_len, NULL, flags))) { in ciss_cmd()
462 if (ccb->ccb_xs) { in ciss_cmd()
463 ccb->ccb_xs->error = XS_DRIVER_STUFFUP; in ciss_cmd()
464 scsi_done(ccb->ccb_xs); in ciss_cmd()
465 ccb->ccb_xs = NULL; in ciss_cmd()
473 ccb->ccb_data, ccb->ccb_len, sgd->ds_addr, sgd->ds_len)); in ciss_cmd()
493 bzero(&ccb->ccb_err, sizeof(ccb->ccb_err)); in ciss_cmd()
498 ccb->ccb_state = CISS_CCB_ONQ; in ciss_cmd()
505 addr = (u_int64_t)ccb->ccb_cmdpa; in ciss_cmd()
511 bus_space_write_4(sc->iot, sc->ioh, CISS_INQ, ccb->ccb_cmdpa); in ciss_cmd()
519 i = ccb->ccb_xs? ccb->ccb_xs->timeout : 60000; in ciss_cmd()
527 ccb->ccb_state = CISS_CCB_POLL; in ciss_cmd()
530 ret = tsleep_nsec(ccb, PRIBIO + 1, "ciss_cmd", nsecs); in ciss_cmd()
533 if (ccb->ccb_state != CISS_CCB_ONQ) { in ciss_cmd()
541 ccb1 = ccb; in ciss_cmd()
544 if (ccb1 == ccb) in ciss_cmd()
590 if (ccb1 == ccb) in ciss_cmd()
596 ccb->ccb_err.cmd_stat = CISS_ERR_TMO; in ciss_cmd()
597 error = ciss_done(ccb); in ciss_cmd()
600 ccb->ccb_err.cmd_stat, ccb->ccb_err.scsi_stat)); in ciss_cmd()
606 ciss_done(struct ciss_ccb *ccb) in ciss_done() argument
608 struct ciss_softc *sc = ccb->ccb_sc; in ciss_done()
609 struct scsi_xfer *xs = ccb->ccb_xs; in ciss_done()
610 struct ciss_cmd *cmd = &ccb->ccb_cmd; in ciss_done()
614 CISS_DPRINTF(CISS_D_CMD, ("ciss_done(%p) ", ccb)); in ciss_done()
616 if (ccb->ccb_state != CISS_CCB_ONQ) { in ciss_done()
618 sc->sc_dev.dv_xname, ccb, ccb->ccb_state, CISS_CCB_BITS); in ciss_done()
622 ccb->ccb_state = CISS_CCB_READY; in ciss_done()
624 if (ccb->ccb_cmd.id & CISS_CMD_ERR) in ciss_done()
625 error = ciss_error(ccb); in ciss_done()
627 if (ccb->ccb_data) { in ciss_done()
628 bus_dmamap_sync(sc->dmat, ccb->ccb_dmamap, 0, in ciss_done()
629 ccb->ccb_dmamap->dm_mapsize, (cmd->flags & CISS_CDB_IN) ? in ciss_done()
631 bus_dmamap_unload(sc->dmat, ccb->ccb_dmamap); in ciss_done()
645 ciss_error(struct ciss_ccb *ccb) in ciss_error() argument
647 struct ciss_softc *sc = ccb->ccb_sc; in ciss_error()
648 struct ciss_error *err = &ccb->ccb_err; in ciss_error()
649 struct scsi_xfer *xs = ccb->ccb_xs; in ciss_error()
659 sc->sc_dev.dv_xname, ccb->ccb_cmd.id, in ciss_error()
704 ccb->ccb_cmd.id &= htole32(~3); in ciss_error()
712 struct ciss_ccb *ccb; in ciss_inq() local
717 ccb = scsi_io_get(&sc->sc_iopool, SCSI_POLL|SCSI_NOSLEEP); in ciss_inq()
718 if (ccb == NULL) in ciss_inq()
721 ccb->ccb_len = sizeof(*inq); in ciss_inq()
722 ccb->ccb_data = inq; in ciss_inq()
723 cmd = &ccb->ccb_cmd; in ciss_inq()
736 rv = ciss_cmd(ccb, BUS_DMA_NOWAIT, SCSI_POLL|SCSI_NOSLEEP); in ciss_inq()
739 scsi_io_put(&sc->sc_iopool, ccb); in ciss_inq()
747 struct ciss_ccb *ccb; in ciss_ldmap() local
758 ccb = scsi_io_get(&sc->sc_iopool, SCSI_POLL|SCSI_NOSLEEP); in ciss_ldmap()
759 if (ccb == NULL) { in ciss_ldmap()
764 ccb->ccb_len = total; in ciss_ldmap()
765 ccb->ccb_data = lmap; in ciss_ldmap()
766 cmd = &ccb->ccb_cmd; in ciss_ldmap()
777 rv = ciss_cmd(ccb, BUS_DMA_NOWAIT, SCSI_POLL|SCSI_NOSLEEP); in ciss_ldmap()
778 scsi_io_put(&sc->sc_iopool, ccb); in ciss_ldmap()
793 struct ciss_ccb *ccb; in ciss_sync() local
804 ccb = scsi_io_get(&sc->sc_iopool, SCSI_POLL|SCSI_NOSLEEP); in ciss_sync()
805 if (ccb == NULL) { in ciss_sync()
810 ccb->ccb_len = sizeof(*flush); in ciss_sync()
811 ccb->ccb_data = flush; in ciss_sync()
812 cmd = &ccb->ccb_cmd; in ciss_sync()
824 rv = ciss_cmd(ccb, BUS_DMA_NOWAIT, SCSI_POLL|SCSI_NOSLEEP); in ciss_sync()
825 scsi_io_put(&sc->sc_iopool, ccb); in ciss_sync()
836 struct ciss_ccb *ccb; in ciss_scsi_cmd() local
857 ccb = xs->io; in ciss_scsi_cmd()
859 cmd = &ccb->ccb_cmd; in ciss_scsi_cmd()
860 ccb->ccb_len = xs->datalen; in ciss_scsi_cmd()
861 ccb->ccb_data = xs->data; in ciss_scsi_cmd()
862 ccb->ccb_xs = xs; in ciss_scsi_cmd()
876 ciss_cmd(ccb, BUS_DMA_WAITOK, xs->flags & (SCSI_POLL|SCSI_NOSLEEP)); in ciss_scsi_cmd()
884 struct ciss_ccb *ccb; in ciss_intr() local
907 ccb = sc->ccbs + (id >> 2) * sc->ccblen; in ciss_intr()
908 ccb->ccb_cmd.id = htole32(id); in ciss_intr()
909 ccb->ccb_cmd.id_hi = htole32(0); /* ignore the upper 32bits */ in ciss_intr()
910 if (ccb->ccb_state == CISS_CCB_POLL) { in ciss_intr()
911 ccb->ccb_state = CISS_CCB_ONQ; in ciss_intr()
912 wakeup(ccb); in ciss_intr()
914 ciss_done(ccb); in ciss_intr()
1184 struct ciss_ccb *ccb; in ciss_ldid() local
1189 ccb = scsi_io_get(&sc->sc_iopool, SCSI_POLL); in ciss_ldid()
1190 if (ccb == NULL) in ciss_ldid()
1193 ccb->ccb_len = sizeof(*id); in ciss_ldid()
1194 ccb->ccb_data = id; in ciss_ldid()
1195 cmd = &ccb->ccb_cmd; in ciss_ldid()
1209 rv = ciss_cmd(ccb, BUS_DMA_NOWAIT, SCSI_POLL); in ciss_ldid()
1212 scsi_io_put(&sc->sc_iopool, ccb); in ciss_ldid()
1220 struct ciss_ccb *ccb; in ciss_ldstat() local
1225 ccb = scsi_io_get(&sc->sc_iopool, SCSI_POLL); in ciss_ldstat()
1226 if (ccb == NULL) in ciss_ldstat()
1229 ccb->ccb_len = sizeof(*stat); in ciss_ldstat()
1230 ccb->ccb_data = stat; in ciss_ldstat()
1231 cmd = &ccb->ccb_cmd; in ciss_ldstat()
1245 rv = ciss_cmd(ccb, BUS_DMA_NOWAIT, SCSI_POLL); in ciss_ldstat()
1248 scsi_io_put(&sc->sc_iopool, ccb); in ciss_ldstat()
1256 struct ciss_ccb *ccb; in ciss_pdid() local
1261 ccb = scsi_io_get(&sc->sc_iopool, SCSI_POLL); in ciss_pdid()
1262 if (ccb == NULL) in ciss_pdid()
1265 ccb->ccb_len = sizeof(*id); in ciss_pdid()
1266 ccb->ccb_data = id; in ciss_pdid()
1267 cmd = &ccb->ccb_cmd; in ciss_pdid()
1281 rv = ciss_cmd(ccb, BUS_DMA_NOWAIT, wait); in ciss_pdid()
1284 scsi_io_put(&sc->sc_iopool, ccb); in ciss_pdid()
1330 struct ciss_ccb *ccb; in ciss_blink() local
1347 ccb = scsi_io_get(&sc->sc_iopool, SCSI_POLL); in ciss_blink()
1348 if (ccb == NULL) in ciss_blink()
1351 ccb->ccb_len = sizeof(*blink); in ciss_blink()
1352 ccb->ccb_data = blink; in ciss_blink()
1353 cmd = &ccb->ccb_cmd; in ciss_blink()
1366 rv = ciss_cmd(ccb, BUS_DMA_NOWAIT, SCSI_POLL); in ciss_blink()
1369 scsi_io_put(&sc->sc_iopool, ccb); in ciss_blink()