Lines Matching refs:ccb
104 struct ciss_ccb *ccb; in ciss_get_ccb() local
107 if ((ccb = TAILQ_LAST(&sc->sc_free_ccb, ciss_queue_head))) { in ciss_get_ccb()
108 TAILQ_REMOVE(&sc->sc_free_ccb, ccb, ccb_link); in ciss_get_ccb()
109 ccb->ccb_state = CISS_CCB_READY; in ciss_get_ccb()
112 return ccb; in ciss_get_ccb()
116 ciss_put_ccb(struct ciss_softc *sc, struct ciss_ccb *ccb) in ciss_put_ccb() argument
118 ccb->ccb_state = CISS_CCB_FREE; in ciss_put_ccb()
120 TAILQ_INSERT_TAIL(&sc->sc_free_ccb, ccb, ccb_link); in ciss_put_ccb()
219 struct ciss_ccb *ccb; in ciss_attach() local
244 sizeof(ccb->ccb_cmd.sgl[0]) * (sc->maxsg - 1); in ciss_attach()
346 ccb = (struct ciss_ccb *) ((char *)sc->ccbs + i * sc->ccblen); in ciss_attach()
347 cmd = &ccb->ccb_cmd; in ciss_attach()
350 ccb->ccb_cmdpa = pa + offsetof(struct ciss_ccb, ccb_cmd); in ciss_attach()
351 ccb->ccb_state = CISS_CCB_FREE; in ciss_attach()
357 cmd->err_len = htole32(sizeof(ccb->ccb_err)); in ciss_attach()
363 &ccb->ccb_dmamap))) in ciss_attach()
366 TAILQ_INSERT_TAIL(&sc->sc_free_ccb, ccb, ccb_link); in ciss_attach()
539 struct ciss_ccb *ccb; in ciss_enqueue() local
544 ccb = (struct ciss_ccb *) ((char *)sc->ccbs + (id >> 2) * sc->ccblen); in ciss_enqueue()
545 ccb->ccb_cmd.id = htole32(id); in ciss_enqueue()
546 ccb->ccb_cmd.id_hi = htole32(0); in ciss_enqueue()
547 TAILQ_INSERT_TAIL(q, ccb, ccb_link); in ciss_enqueue()
612 ciss_poll(struct ciss_softc *sc, struct ciss_ccb *ccb, int ms) in ciss_poll() argument
635 if (ccb1 == ccb) { in ciss_poll()
646 ciss_wait(struct ciss_softc *sc, struct ciss_ccb *ccb, int ms) in ciss_wait() argument
664 if (ccb->ccb_state == CISS_CCB_ONQ) { in ciss_wait()
665 ciss_done(sc, ccb); in ciss_wait()
682 ciss_cmd(struct ciss_softc *sc, struct ciss_ccb *ccb, int flags, int wait) in ciss_cmd() argument
684 struct ciss_cmd *cmd = &ccb->ccb_cmd; in ciss_cmd()
685 bus_dmamap_t dmap = ccb->ccb_dmamap; in ciss_cmd()
691 if (ccb->ccb_state != CISS_CCB_READY) { in ciss_cmd()
693 cmd->id, ccb->ccb_state); in ciss_cmd()
697 if (ccb->ccb_data) { in ciss_cmd()
700 if ((error = bus_dmamap_load(sc->sc_dmat, dmap, ccb->ccb_data, in ciss_cmd()
701 ccb->ccb_len, NULL, flags))) { in ciss_cmd()
706 ciss_put_ccb(sc, ccb); in ciss_cmd()
713 ccb->ccb_data, ccb->ccb_len, sgd->ds_addr, sgd->ds_len)); in ciss_cmd()
734 ccb->ccb_sg_tag = CISS_SG_FETCH_NONE; in ciss_cmd()
736 ccb->ccb_sg_tag = CISS_SG_FETCH_1; in ciss_cmd()
738 ccb->ccb_sg_tag = CISS_SG_FETCH_2; in ciss_cmd()
740 ccb->ccb_sg_tag = CISS_SG_FETCH_4; in ciss_cmd()
742 ccb->ccb_sg_tag = CISS_SG_FETCH_8; in ciss_cmd()
744 ccb->ccb_sg_tag = CISS_SG_FETCH_16; in ciss_cmd()
746 ccb->ccb_sg_tag = CISS_SG_FETCH_32; in ciss_cmd()
748 ccb->ccb_sg_tag = CISS_SG_FETCH_MAX; in ciss_cmd()
750 ccb->ccb_sg_tag = CISS_SG_FETCH_NONE; in ciss_cmd()
754 memset(&ccb->ccb_err, 0, sizeof(ccb->ccb_err)); in ciss_cmd()
764 ccb->ccb_state = CISS_CCB_ONQ; in ciss_cmd()
766 ccb->ccb_state = CISS_CCB_POLL; in ciss_cmd()
769 addr = (u_int64_t)ccb->ccb_cmdpa; in ciss_cmd()
778 addr |= 1 | (ccb->ccb_sg_tag << 1); in ciss_cmd()
797 ms = ccb->ccb_xs ? ccb->ccb_xs->timeout : 60000; in ciss_cmd()
799 error = ciss_wait(sc, ccb, ms); in ciss_cmd()
801 error = ciss_poll(sc, ccb, ms); in ciss_cmd()
804 if (ccb->ccb_state != CISS_CCB_FREE) { in ciss_cmd()
806 ccb->ccb_err.cmd_stat = CISS_ERR_TMO; in ciss_cmd()
807 error = ciss_done(sc, ccb); in ciss_cmd()
811 ccb->ccb_err.cmd_stat, ccb->ccb_err.scsi_stat)); in ciss_cmd()
822 ciss_done(struct ciss_softc *sc, struct ciss_ccb *ccb) in ciss_done() argument
824 struct scsipi_xfer *xs = ccb->ccb_xs; in ciss_done()
828 CISS_DPRINTF(CISS_D_CMD, ("ciss_done(%p) ", ccb)); in ciss_done()
830 if (ccb->ccb_state != CISS_CCB_ONQ) { in ciss_done()
832 device_xname(sc->sc_dev), ccb, ccb->ccb_state); in ciss_done()
836 ccb->ccb_state = CISS_CCB_READY; in ciss_done()
838 if (ccb->ccb_cmd.id & CISS_CMD_ERR) in ciss_done()
839 error = ciss_error(sc, ccb); in ciss_done()
841 cmd = &ccb->ccb_cmd; in ciss_done()
842 if (ccb->ccb_data) { in ciss_done()
843 bus_dmamap_sync(sc->sc_dmat, ccb->ccb_dmamap, 0, in ciss_done()
844 ccb->ccb_dmamap->dm_mapsize, (cmd->flags & CISS_CDB_IN) ? in ciss_done()
846 bus_dmamap_unload(sc->sc_dmat, ccb->ccb_dmamap); in ciss_done()
847 ccb->ccb_xs = NULL; in ciss_done()
848 ccb->ccb_data = NULL; in ciss_done()
851 ciss_put_ccb(sc, ccb); in ciss_done()
871 ciss_error(struct ciss_softc *sc, struct ciss_ccb *ccb) in ciss_error() argument
873 struct ciss_error *err = &ccb->ccb_err; in ciss_error()
874 struct scsipi_xfer *xs = ccb->ccb_xs; in ciss_error()
886 device_xname(sc->sc_dev), ccb->ccb_cmd.id, in ciss_error()
945 ccb->ccb_cmd.id &= htole32(~3); in ciss_error()
953 struct ciss_ccb *ccb; in ciss_inq() local
956 ccb = ciss_get_ccb(sc); in ciss_inq()
957 ccb->ccb_len = sizeof(*inq); in ciss_inq()
958 ccb->ccb_data = inq; in ciss_inq()
959 ccb->ccb_xs = NULL; in ciss_inq()
960 cmd = &ccb->ccb_cmd; in ciss_inq()
972 return ciss_cmd(sc, ccb, BUS_DMA_NOWAIT, XS_CTL_POLL|XS_CTL_NOSLEEP); in ciss_inq()
978 struct ciss_ccb *ccb; in ciss_ldmap() local
988 ccb = ciss_get_ccb(sc); in ciss_ldmap()
989 ccb->ccb_len = total; in ciss_ldmap()
990 ccb->ccb_data = lmap; in ciss_ldmap()
991 ccb->ccb_xs = NULL; in ciss_ldmap()
992 cmd = &ccb->ccb_cmd; in ciss_ldmap()
1003 rv = ciss_cmd(sc, ccb, BUS_DMA_NOWAIT, XS_CTL_POLL|XS_CTL_NOSLEEP); in ciss_ldmap()
1020 struct ciss_ccb *ccb; in ciss_sync() local
1030 ccb = ciss_get_ccb(sc); in ciss_sync()
1031 ccb->ccb_len = sizeof(*flush); in ciss_sync()
1032 ccb->ccb_data = flush; in ciss_sync()
1033 ccb->ccb_xs = NULL; in ciss_sync()
1034 cmd = &ccb->ccb_cmd; in ciss_sync()
1046 rv = ciss_cmd(sc, ccb, BUS_DMA_NOWAIT, XS_CTL_POLL|XS_CTL_NOSLEEP); in ciss_sync()
1055 struct ciss_ccb *ccb; in ciss_ldid() local
1058 ccb = ciss_get_ccb(sc); in ciss_ldid()
1059 if (ccb == NULL) in ciss_ldid()
1061 ccb->ccb_len = sizeof(*id); in ciss_ldid()
1062 ccb->ccb_data = id; in ciss_ldid()
1063 ccb->ccb_xs = NULL; in ciss_ldid()
1064 cmd = &ccb->ccb_cmd; in ciss_ldid()
1077 return ciss_cmd(sc, ccb, BUS_DMA_NOWAIT, XS_CTL_POLL | sc->sc_waitflag); in ciss_ldid()
1083 struct ciss_ccb *ccb; in ciss_ldstat() local
1086 ccb = ciss_get_ccb(sc); in ciss_ldstat()
1087 if (ccb == NULL) in ciss_ldstat()
1089 ccb->ccb_len = sizeof(*stat); in ciss_ldstat()
1090 ccb->ccb_data = stat; in ciss_ldstat()
1091 ccb->ccb_xs = NULL; in ciss_ldstat()
1092 cmd = &ccb->ccb_cmd; in ciss_ldstat()
1105 return ciss_cmd(sc, ccb, BUS_DMA_NOWAIT, XS_CTL_POLL | sc->sc_waitflag); in ciss_ldstat()
1111 struct ciss_ccb *ccb; in ciss_pdid() local
1114 ccb = ciss_get_ccb(sc); in ciss_pdid()
1115 if (ccb == NULL) in ciss_pdid()
1117 ccb->ccb_len = sizeof(*id); in ciss_pdid()
1118 ccb->ccb_data = id; in ciss_pdid()
1119 ccb->ccb_xs = NULL; in ciss_pdid()
1120 cmd = &ccb->ccb_cmd; in ciss_pdid()
1133 return ciss_cmd(sc, ccb, BUS_DMA_NOWAIT, wait); in ciss_pdid()
1182 struct ciss_ccb *ccb; in ciss_scsi_cmd() local
1207 ccb = ciss_get_ccb(sc); in ciss_scsi_cmd()
1208 cmd = &ccb->ccb_cmd; in ciss_scsi_cmd()
1209 ccb->ccb_len = xs->datalen; in ciss_scsi_cmd()
1210 ccb->ccb_data = xs->data; in ciss_scsi_cmd()
1211 ccb->ccb_xs = xs; in ciss_scsi_cmd()
1226 if (ciss_cmd(sc, ccb, BUS_DMA_WAITOK, in ciss_scsi_cmd()
1258 struct ciss_ccb *ccb; in ciss_completed_process() local
1261 ccb = TAILQ_FIRST(q); in ciss_completed_process()
1262 TAILQ_REMOVE(q, ccb, ccb_link); in ciss_completed_process()
1264 if (ccb->ccb_state == CISS_CCB_POLL) { in ciss_completed_process()
1265 ccb->ccb_state = CISS_CCB_ONQ; in ciss_completed_process()
1270 ciss_done(sc, ccb); in ciss_completed_process()
1595 struct ciss_ccb *ccb; in ciss_blink() local
1610 ccb = ciss_get_ccb(sc); in ciss_blink()
1611 if (ccb == NULL) in ciss_blink()
1613 ccb->ccb_len = sizeof(*blink); in ciss_blink()
1614 ccb->ccb_data = blink; in ciss_blink()
1615 ccb->ccb_xs = NULL; in ciss_blink()
1616 cmd = &ccb->ccb_cmd; in ciss_blink()
1628 return ciss_cmd(sc, ccb, BUS_DMA_NOWAIT, XS_CTL_POLL); in ciss_blink()