Lines Matching defs:ccb

107 	struct cac_ccb *ccb;
151 ccb = (struct cac_ccb *)sc->sc_ccbs;
153 for (i = 0; i < CAC_MAX_CCBS; i++, ccb++) {
158 &ccb->ccb_dmamap_xfer);
161 aprint_error_dev(sc->sc_dev, "can't create ccb dmamap (%d)\n",
166 ccb->ccb_flags = 0;
167 ccb->ccb_paddr = sc->sc_ccbs_paddr + i * sizeof(struct cac_ccb);
168 SIMPLEQ_INSERT_TAIL(&sc->sc_ccb_free, ccb, ccb_chain);
287 struct cac_ccb *ccb;
295 while ((ccb = (*sc->sc_cl.cl_completed)(sc)) != NULL) {
296 cac_ccb_done(sc, ccb);
315 struct cac_ccb *ccb;
321 if ((ccb = cac_ccb_alloc(sc, 1)) == NULL) {
327 bus_dmamap_load(sc->sc_dmat, ccb->ccb_dmamap_xfer,
332 bus_dmamap_sync(sc->sc_dmat, ccb->ccb_dmamap_xfer, 0, datasize,
336 sgb = ccb->ccb_seg;
337 nsegs = uimin(ccb->ccb_dmamap_xfer->dm_nsegs, CAC_SG_SIZE);
340 size += ccb->ccb_dmamap_xfer->dm_segs[i].ds_len;
342 htole32(ccb->ccb_dmamap_xfer->dm_segs[i].ds_len);
344 htole32(ccb->ccb_dmamap_xfer->dm_segs[i].ds_addr);
351 ccb->ccb_hdr.drive = drive;
352 ccb->ccb_hdr.priority = 0;
353 ccb->ccb_hdr.size = htole16((sizeof(struct cac_req) +
356 ccb->ccb_req.next = 0;
357 ccb->ccb_req.error = 0;
358 ccb->ccb_req.reserved = 0;
359 ccb->ccb_req.bcount = htole16(howmany(size, DEV_BSIZE));
360 ccb->ccb_req.command = command;
361 ccb->ccb_req.sgcount = nsegs;
362 ccb->ccb_req.blkno = htole32(blkno);
364 ccb->ccb_flags = flags;
365 ccb->ccb_datasize = size;
370 memset(&ccb->ccb_context, 0, sizeof(struct cac_context));
374 cac_ccb_free(sc, ccb);
378 ccb->ccb_flags |= CAC_CCB_ACTIVE;
380 (*sc->sc_cl.cl_submit)(sc, ccb);
381 rv = cac_ccb_poll(sc, ccb, 2000);
382 cac_ccb_free(sc, ccb);
385 memcpy(&ccb->ccb_context, context, sizeof(struct cac_context));
386 (void)cac_ccb_start(sc, ccb);
400 struct cac_ccb *ccb;
408 ccb = (*sc->sc_cl.cl_completed)(sc);
409 if (ccb != NULL)
418 cac_ccb_done(sc, ccb);
419 } while (ccb != wantccb);
429 cac_ccb_start(struct cac_softc *sc, struct cac_ccb *ccb)
434 if (ccb != NULL)
435 SIMPLEQ_INSERT_TAIL(&sc->sc_ccb_queue, ccb, ccb_chain);
437 while ((ccb = SIMPLEQ_FIRST(&sc->sc_ccb_queue)) != NULL) {
442 ccb->ccb_flags |= CAC_CCB_ACTIVE;
444 (*sc->sc_cl.cl_submit)(sc, ccb);
454 cac_ccb_done(struct cac_softc *sc, struct cac_ccb *ccb)
465 if ((ccb->ccb_flags & CAC_CCB_ACTIVE) == 0)
467 ccb->ccb_flags &= ~CAC_CCB_ACTIVE;
470 if ((ccb->ccb_flags & (CAC_CCB_DATA_IN | CAC_CCB_DATA_OUT)) != 0) {
471 bus_dmamap_sync(sc->sc_dmat, ccb->ccb_dmamap_xfer, 0,
472 ccb->ccb_datasize, ccb->ccb_flags & CAC_CCB_DATA_IN ?
474 bus_dmamap_unload(sc->sc_dmat, ccb->ccb_dmamap_xfer);
477 error = ccb->ccb_req.error;
478 if (ccb->ccb_context.cc_handler != NULL) {
479 dv = ccb->ccb_context.cc_dv;
480 context = ccb->ccb_context.cc_context;
481 cac_ccb_free(sc, ccb);
482 (*ccb->ccb_context.cc_handler)(dv, context, error);
501 struct cac_ccb *ccb;
506 if ((ccb = SIMPLEQ_FIRST(&sc->sc_ccb_free)) != NULL) {
511 ccb = NULL;
518 return (ccb);
525 cac_ccb_free(struct cac_softc *sc, struct cac_ccb *ccb)
530 ccb->ccb_flags = 0;
533 SIMPLEQ_INSERT_HEAD(&sc->sc_ccb_free, ccb, ccb_chain);
550 cac_l0_submit(struct cac_softc *sc, struct cac_ccb *ccb)
556 (char *)ccb - (char *)sc->sc_ccbs,
558 cac_outl(sc, CAC_REG_CMD_FIFO, ccb->ccb_paddr);
564 struct cac_ccb *ccb;
577 ccb = (struct cac_ccb *)((char *)sc->sc_ccbs + off);
582 if ((off & 3) != 0 && ccb->ccb_req.error == 0)
583 ccb->ccb_req.error = CAC_RET_CMD_REJECTED;
585 return (ccb);