Home | History | Annotate | Download | only in ic

Lines Matching defs:ccb

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