Lines Matching refs:ccb

207 	ADW_CCB        *ccb;
211 ccb = &ccbstore[i];
212 if ((error = adw_init_ccb(sc, ccb)) != 0) {
213 printf("%s: unable to initialize ccb, error = %d\n",
217 TAILQ_INSERT_TAIL(&sc->sc_free_ccb, ccb, chain);
225 * A ccb is put onto the free list.
231 ADW_CCB *ccb = xccb;
233 adw_reset_ccb(ccb);
236 TAILQ_INSERT_HEAD(&sc->sc_free_ccb, ccb, chain);
242 adw_reset_ccb(ADW_CCB *ccb)
245 ccb->flags = 0;
250 adw_init_ccb(ADW_SOFTC *sc, ADW_CCB *ccb)
260 0, BUS_DMA_NOWAIT | BUS_DMA_ALLOCNOW, &ccb->dmamap_xfer);
271 ccb->hashkey = sc->sc_dmamap_control->dm_segs[0].ds_addr +
272 ADW_CCB_OFF(ccb);
273 hashnum = CCB_HASH(ccb->hashkey);
274 ccb->nexthash = sc->sc_ccbhash[hashnum];
275 sc->sc_ccbhash[hashnum] = ccb;
276 adw_reset_ccb(ccb);
282 * Get a free ccb
290 ADW_CCB *ccb;
293 ccb = TAILQ_FIRST(&sc->sc_free_ccb);
294 if (ccb) {
295 TAILQ_REMOVE(&sc->sc_free_ccb, ccb, chain);
296 ccb->flags |= CCB_ALLOC;
300 return (ccb);
305 * Given a physical address, find the ccb that it corresponds to.
311 ADW_CCB *ccb = sc->sc_ccbhash[hashnum];
313 while (ccb) {
314 if (ccb->hashkey == ccb_phys)
316 ccb = ccb->nexthash;
318 return (ccb);
326 adw_queue_ccb(ADW_SOFTC *sc, ADW_CCB *ccb, int retry)
331 TAILQ_INSERT_TAIL(&sc->sc_waiting_ccb, ccb, chain);
334 while ((ccb = TAILQ_FIRST(&sc->sc_waiting_ccb)) != NULL) {
336 errcode = AdwExeScsiQueue(sc, &ccb->scsiq);
347 TAILQ_REMOVE(&sc->sc_waiting_ccb, ccb, chain);
351 TAILQ_REMOVE(&sc->sc_waiting_ccb, ccb, chain);
352 TAILQ_INSERT_TAIL(&sc->sc_pending_ccb, ccb, chain);
355 timeout_set(&ccb->xs->stimeout, adw_timeout, ccb);
356 if ((ccb->xs->flags & SCSI_POLL) == 0)
357 timeout_add_msec(&ccb->xs->stimeout, ccb->timeout);
528 ADW_CCB *ccb;
532 * get a ccb to use. If the transfer
537 ccb = xs->io;
539 ccb->xs = xs;
540 ccb->timeout = xs->timeout;
542 if (adw_build_req(xs, ccb, xs->flags)) {
545 retry = adw_queue_ccb(sc, ccb, retry);
564 if (adw_poll(sc, xs, ccb->timeout)) {
565 adw_timeout(ccb);
566 if (adw_poll(sc, xs, ccb->timeout))
567 adw_timeout(ccb);
580 adw_build_req(struct scsi_xfer *xs, ADW_CCB *ccb, int flags)
588 scsiqp = &ccb->scsiq;
595 scsiqp->ccb_ptr = ccb->hashkey;
613 scsiqp->vsense_addr = &ccb->scsi_sense;
615 ADW_CCB_OFF(ccb) + offsetof(struct adw_ccb, scsi_sense);
626 ccb->dmamap_xfer, xs->data, xs->datalen, NULL,
644 bus_dmamap_sync(dmat, ccb->dmamap_xfer,
645 0, ccb->dmamap_xfer->dm_mapsize,
654 scsiqp->data_addr = ccb->dmamap_xfer->dm_segs[0].ds_addr;
655 bzero(ccb->sg_block, sizeof(ADW_SG_BLOCK) * ADW_NUM_SG_BLOCK);
656 adw_build_sglist(ccb, scsiqp, ccb->sg_block);
674 adw_build_sglist(ADW_CCB *ccb, ADW_SCSI_REQ_Q *scsiqp, ADW_SG_BLOCK *sg_block)
679 bus_dma_segment_t *sg_list = &ccb->dmamap_xfer->dm_segs[0];
680 int sg_elem_cnt = ccb->dmamap_xfer->dm_nsegs;
684 sg_block_physical_addr = ccb->hashkey +
765 ADW_CCB *ccb = arg;
766 struct scsi_xfer *xs = ccb->xs;
776 if (ccb->flags & CCB_ABORTED) {
788 } else if (ccb->flags & CCB_ABORTING) {
796 ccb->flags |= CCB_ABORTED;
812 ADW_ABORT_CCB(sc, ccb);
819 timeout_add_msec(&xs->stimeout, ccb->timeout);
828 ccb->flags |= CCB_ABORTING;
844 ADW_ABORT_CCB(sc, ccb);
851 timeout_add_msec(&xs->stimeout, ccb->timeout);
861 ADW_CCB *ccb;
866 while((ccb = TAILQ_LAST(&sc->sc_pending_ccb,
868 timeout_del(&ccb->xs->stimeout);
869 TAILQ_REMOVE(&sc->sc_pending_ccb, ccb, chain);
870 TAILQ_INSERT_HEAD(&sc->sc_waiting_ccb, ccb, chain);
949 ADW_CCB *ccb;
954 ccb = adw_ccb_phys_kv(sc, scsiq->ccb_ptr);
955 TAILQ_REMOVE(&sc->sc_pending_ccb, ccb, chain);
957 if ((ccb->flags & CCB_ALLOC) == 0) {
958 panic("%s: unallocated ccb found on pending list!",
963 xs = ccb->xs;
972 bus_dmamap_sync(dmat, ccb->dmamap_xfer,
973 0, ccb->dmamap_xfer->dm_mapsize,
976 bus_dmamap_unload(dmat, ccb->dmamap_xfer);
1016 s1 = &ccb->scsi_sense;