Lines Matching refs:ccb

271 	struct arc_ccb			*ccb = NULL;
306 ccb = &sc->sc_ccbs[htole32(cmd->cmd.context)];
309 ccb->ccb_offset, ARC_MAX_IOCMDLEN,
312 arc_scsi_cmd_done(sc, ccb, reg);
326 struct arc_ccb *ccb;
360 ccb = arc_get_ccb(sc);
361 if (ccb == NULL) {
368 ccb->ccb_xs = xs;
370 if (arc_load_xs(ccb) != 0) {
372 arc_put_ccb(sc, ccb);
378 cmd = &ccb->ccb_cmd->cmd;
379 reg = ccb->ccb_cmd_post;
387 cmd->sgl_len = ccb->ccb_dmamap->dm_nsegs;
390 if (ccb->ccb_dmamap->dm_nsegs > ARC_SGL_256LEN) {
395 cmd->context = htole32(ccb->ccb_id);
402 ccb->ccb_offset, ARC_MAX_IOCMDLEN,
407 if (arc_complete(sc, ccb, xs->timeout) != 0) {
419 arc_load_xs(struct arc_ccb *ccb)
421 struct arc_softc *sc = ccb->ccb_sc;
422 struct scsipi_xfer *xs = ccb->ccb_xs;
423 bus_dmamap_t dmap = ccb->ccb_dmamap;
424 struct arc_sge *sgl = ccb->ccb_cmd->sgl, *sge;
458 arc_scsi_cmd_done(struct arc_softc *sc, struct arc_ccb *ccb, uint32_t reg)
460 struct scsipi_xfer *xs = ccb->ccb_xs;
464 bus_dmamap_sync(sc->sc_dmat, ccb->ccb_dmamap, 0,
465 ccb->ccb_dmamap->dm_mapsize,
468 bus_dmamap_unload(sc->sc_dmat, ccb->ccb_dmamap);
475 cmd = &ccb->ccb_cmd->cmd;
508 arc_put_ccb(sc, ccb);
515 struct arc_ccb *ccb = NULL;
533 ccb = &sc->sc_ccbs[htole32(cmd->cmd.context)];
536 ccb->ccb_offset, ARC_MAX_IOCMDLEN,
539 arc_scsi_cmd_done(sc, ccb, reg);
540 } while (nccb != ccb);
2073 struct arc_ccb *ccb;
2086 aprint_error_dev(self, "unable to allocate ccb dmamem\n");
2092 ccb = &sc->sc_ccbs[i];
2095 MAXPHYS, 0, 0, &ccb->ccb_dmamap) != 0) {
2097 "unable to create dmamap for ccb %d\n", i);
2101 ccb->ccb_sc = sc;
2102 ccb->ccb_id = i;
2103 ccb->ccb_offset = ARC_MAX_IOCMDLEN * i;
2105 ccb->ccb_cmd = (struct arc_io_cmd *)&cmd[ccb->ccb_offset];
2106 ccb->ccb_cmd_post = (ARC_DMA_DVA(sc->sc_requests) +
2107 ccb->ccb_offset) >> ARC_REG_POST_QUEUE_ADDR_SHIFT;
2109 arc_put_ccb(sc, ccb);
2115 while ((ccb = arc_get_ccb(sc)) != NULL)
2116 bus_dmamap_destroy(sc->sc_dmat, ccb->ccb_dmamap);
2128 struct arc_ccb *ccb;
2130 ccb = TAILQ_FIRST(&sc->sc_ccb_free);
2131 if (ccb != NULL)
2132 TAILQ_REMOVE(&sc->sc_ccb_free, ccb, ccb_link);
2134 return ccb;
2138 arc_put_ccb(struct arc_softc *sc, struct arc_ccb *ccb)
2140 ccb->ccb_xs = NULL;
2141 memset(ccb->ccb_cmd, 0, ARC_MAX_IOCMDLEN);
2142 TAILQ_INSERT_TAIL(&sc->sc_ccb_free, ccb, ccb_link);