Lines Matching refs:ccb

87 static void	ciss_put_ccb(struct ciss_ccb *ccb);
88 static int ciss_cmd(struct ciss_ccb *ccb, int flags, int wait);
89 static int ciss_done(struct ciss_ccb *ccb);
90 static int ciss_error(struct ciss_ccb *ccb);
109 struct ciss_ccb *ccb;
112 if ((ccb = TAILQ_LAST(&sc->sc_free_ccb, ciss_queue_head))) {
113 TAILQ_REMOVE(&sc->sc_free_ccb, ccb, ccb_link);
114 ccb->ccb_state = CISS_CCB_READY;
117 return ccb;
121 ciss_put_ccb(struct ciss_ccb *ccb)
123 struct ciss_softc *sc = ccb->ccb_sc;
125 ccb->ccb_state = CISS_CCB_FREE;
127 TAILQ_INSERT_TAIL(&sc->sc_free_ccb, ccb, ccb_link);
134 struct ciss_ccb *ccb;
218 sizeof(ccb->ccb_cmd.sgl[0]) * (sc->maxsg - 1);
256 ccb = (struct ciss_ccb *) ((char *)sc->ccbs + i * sc->ccblen);
257 cmd = &ccb->ccb_cmd;
260 ccb->ccb_sc = sc;
261 ccb->ccb_cmdpa = pa + offsetof(struct ciss_ccb, ccb_cmd);
262 ccb->ccb_state = CISS_CCB_FREE;
268 cmd->err_len = htole32(sizeof(ccb->ccb_err));
274 &ccb->ccb_dmamap)))
277 TAILQ_INSERT_TAIL(&sc->sc_free_ccb, ccb, ccb_link);
281 printf(": cannot create ccb#%d dmamap (%d)\n", i, error);
367 /* XXX Reserve some ccb's for sensor and bioctl. */
441 ciss_cmd(struct ciss_ccb *ccb, int flags, int wait)
443 struct ciss_softc *sc = ccb->ccb_sc;
444 struct ciss_cmd *cmd = &ccb->ccb_cmd;
446 bus_dmamap_t dmap = ccb->ccb_dmamap;
450 if (ccb->ccb_state != CISS_CCB_READY) {
451 printf("%s: ccb %d not ready state=0x%x\n", device_xname(&sc->sc_dev),
452 cmd->id, ccb->ccb_state);
456 if (ccb->ccb_data) {
459 if ((error = bus_dmamap_load(sc->sc_dmat, dmap, ccb->ccb_data,
460 ccb->ccb_len, NULL, flags))) {
465 ciss_put_ccb(ccb);
472 ccb->ccb_data, ccb->ccb_len, sgd->ds_addr, sgd->ds_len));
494 memset(&ccb->ccb_err, 0, sizeof(ccb->ccb_err));
504 TAILQ_INSERT_TAIL(&sc->sc_ccbq, ccb, ccb_link);
506 ccb->ccb_state = CISS_CCB_ONQ;
508 bus_space_write_4(sc->sc_iot, sc->sc_ioh, CISS_INQ, ccb->ccb_cmdpa);
514 i = ccb->ccb_xs? ccb->ccb_xs->timeout : 60000;
520 ccb->ccb_state = CISS_CCB_POLL;
529 if (ccb->ccb_state != CISS_CCB_ONQ) {
536 ccb1 = ccb;
559 if (ccb1 == ccb)
564 if (ccb->ccb_state != CISS_CCB_FREE) {
565 ccb->ccb_err.cmd_stat = CISS_ERR_TMO;
566 error = ciss_done(ccb);
570 ccb->ccb_err.cmd_stat, ccb->ccb_err.scsi_stat));
581 ciss_done(struct ciss_ccb *ccb)
583 struct ciss_softc *sc = ccb->ccb_sc;
584 struct scsipi_xfer *xs = ccb->ccb_xs;
588 CISS_DPRINTF(CISS_D_CMD, ("ciss_done(%p) ", ccb));
590 if (ccb->ccb_state != CISS_CCB_ONQ) {
591 printf("%s: unqueued ccb %p ready, state=0x%x\n",
592 device_xname(&sc->sc_dev), ccb, ccb->ccb_state);
596 ccb->ccb_state = CISS_CCB_READY;
598 TAILQ_REMOVE(&sc->sc_ccbq, ccb, ccb_link);
601 if (ccb->ccb_cmd.id & CISS_CMD_ERR)
602 error = ciss_error(ccb);
604 cmd = &ccb->ccb_cmd;
605 if (ccb->ccb_data) {
606 bus_dmamap_sync(sc->sc_dmat, ccb->ccb_dmamap, 0,
607 ccb->ccb_dmamap->dm_mapsize, (cmd->flags & CISS_CDB_IN) ?
609 bus_dmamap_unload(sc->sc_dmat, ccb->ccb_dmamap);
610 ccb->ccb_xs = NULL;
611 ccb->ccb_data = NULL;
614 ciss_put_ccb(ccb);
634 ciss_error(struct ciss_ccb *ccb)
636 struct ciss_softc *sc = ccb->ccb_sc;
637 struct ciss_error *err = &ccb->ccb_err;
638 struct scsipi_xfer *xs = ccb->ccb_xs;
649 device_xname(&sc->sc_dev), ccb->ccb_cmd.id,
701 ccb->ccb_cmd.id &= htole32(~3);
709 struct ciss_ccb *ccb;
712 ccb = ciss_get_ccb(sc);
713 ccb->ccb_len = sizeof(*inq);
714 ccb->ccb_data = inq;
715 ccb->ccb_xs = NULL;
716 cmd = &ccb->ccb_cmd;
728 return ciss_cmd(ccb, BUS_DMA_NOWAIT, XS_CTL_POLL|XS_CTL_NOSLEEP);
734 struct ciss_ccb *ccb;
744 ccb = ciss_get_ccb(sc);
745 ccb->ccb_len = total;
746 ccb->ccb_data = lmap;
747 ccb->ccb_xs = NULL;
748 cmd = &ccb->ccb_cmd;
759 rv = ciss_cmd(ccb, BUS_DMA_NOWAIT, XS_CTL_POLL|XS_CTL_NOSLEEP);
776 struct ciss_ccb *ccb;
786 ccb = ciss_get_ccb(sc);
787 ccb->ccb_len = sizeof(*flush);
788 ccb->ccb_data = flush;
789 ccb->ccb_xs = NULL;
790 cmd = &ccb->ccb_cmd;
802 rv = ciss_cmd(ccb, BUS_DMA_NOWAIT, XS_CTL_POLL|XS_CTL_NOSLEEP);
811 struct ciss_ccb *ccb;
814 ccb = ciss_get_ccb(sc);
815 if (ccb == NULL)
817 ccb->ccb_len = sizeof(*id);
818 ccb->ccb_data = id;
819 ccb->ccb_xs = NULL;
820 cmd = &ccb->ccb_cmd;
833 return ciss_cmd(ccb, BUS_DMA_NOWAIT, XS_CTL_POLL | sc->sc_waitflag);
839 struct ciss_ccb *ccb;
842 ccb = ciss_get_ccb(sc);
843 if (ccb == NULL)
845 ccb->ccb_len = sizeof(*stat);
846 ccb->ccb_data = stat;
847 ccb->ccb_xs = NULL;
848 cmd = &ccb->ccb_cmd;
861 return ciss_cmd(ccb, BUS_DMA_NOWAIT, XS_CTL_POLL | sc->sc_waitflag);
867 struct ciss_ccb *ccb;
870 ccb = ciss_get_ccb(sc);
871 if (ccb == NULL)
873 ccb->ccb_len = sizeof(*id);
874 ccb->ccb_data = id;
875 ccb->ccb_xs = NULL;
876 cmd = &ccb->ccb_cmd;
889 return ciss_cmd(ccb, BUS_DMA_NOWAIT, wait);
942 struct ciss_ccb *ccb;
966 ccb = ciss_get_ccb(sc);
967 cmd = &ccb->ccb_cmd;
968 ccb->ccb_len = xs->datalen;
969 ccb->ccb_data = xs->data;
970 ccb->ccb_xs = xs;
982 if (ciss_cmd(ccb, BUS_DMA_WAITOK,
1019 struct ciss_ccb *ccb;
1046 ccb = ciss_get_ccb(sc);
1047 cmd = &ccb->ccb_cmd;
1048 ccb->ccb_len = xs->datalen;
1049 ccb->ccb_data = xs->data;
1050 ccb->ccb_xs = xs;
1066 if (ciss_cmd(ccb, BUS_DMA_WAITOK,
1097 struct ciss_ccb *ccb;
1109 ccb = (struct ciss_ccb *) ((char *)sc->ccbs + (id >> 2) * sc->ccblen);
1110 ccb->ccb_cmd.id = htole32(id);
1111 if (ccb->ccb_state == CISS_CCB_POLL) {
1112 ccb->ccb_state = CISS_CCB_ONQ;
1117 ciss_done(ccb);
1372 struct ciss_ccb *ccb;
1387 ccb = ciss_get_ccb(sc);
1388 if (ccb == NULL)
1390 ccb->ccb_len = sizeof(*blink);
1391 ccb->ccb_data = blink;
1392 ccb->ccb_xs = NULL;
1393 cmd = &ccb->ccb_cmd;
1405 return ciss_cmd(ccb, BUS_DMA_NOWAIT, XS_CTL_POLL);