Lines Matching refs:ccb
207 ADW_CCB *ccb; in adw_create_ccbs() local
211 ccb = &ccbstore[i]; in adw_create_ccbs()
212 if ((error = adw_init_ccb(sc, ccb)) != 0) { in adw_create_ccbs()
217 TAILQ_INSERT_TAIL(&sc->sc_free_ccb, ccb, chain); in adw_create_ccbs()
228 adw_free_ccb(ADW_SOFTC *sc, ADW_CCB *ccb) in adw_free_ccb() argument
234 adw_reset_ccb(ccb); in adw_free_ccb()
235 TAILQ_INSERT_HEAD(&sc->sc_free_ccb, ccb, chain); in adw_free_ccb()
242 adw_reset_ccb(ADW_CCB *ccb) in adw_reset_ccb() argument
245 ccb->flags = 0; in adw_reset_ccb()
250 adw_init_ccb(ADW_SOFTC *sc, ADW_CCB *ccb) in adw_init_ccb() argument
260 BUS_DMA_NOWAIT | BUS_DMA_ALLOCNOW, &ccb->dmamap_xfer); in adw_init_ccb()
271 ccb->hashkey = htole32(sc->sc_dmamap_control->dm_segs[0].ds_addr + in adw_init_ccb()
272 ADW_CCB_OFF(ccb)); in adw_init_ccb()
273 hashnum = CCB_HASH(ccb->hashkey); in adw_init_ccb()
274 ccb->nexthash = sc->sc_ccbhash[hashnum]; in adw_init_ccb()
275 sc->sc_ccbhash[hashnum] = ccb; in adw_init_ccb()
276 adw_reset_ccb(ccb); in adw_init_ccb()
289 ADW_CCB *ccb = 0; in adw_get_ccb() local
294 ccb = sc->sc_free_ccb.tqh_first; in adw_get_ccb()
295 if (ccb != NULL) { in adw_get_ccb()
296 TAILQ_REMOVE(&sc->sc_free_ccb, ccb, chain); in adw_get_ccb()
297 ccb->flags |= CCB_ALLOC; in adw_get_ccb()
300 return (ccb); in adw_get_ccb()
311 ADW_CCB *ccb = sc->sc_ccbhash[hashnum]; in adw_ccb_phys_kv() local
313 while (ccb) { in adw_ccb_phys_kv()
314 if (ccb->hashkey == ccb_phys) in adw_ccb_phys_kv()
316 ccb = ccb->nexthash; in adw_ccb_phys_kv()
318 return (ccb); in adw_ccb_phys_kv()
326 adw_queue_ccb(ADW_SOFTC *sc, ADW_CCB *ccb) in adw_queue_ccb() argument
330 TAILQ_INSERT_TAIL(&sc->sc_waiting_ccb, ccb, chain); in adw_queue_ccb()
332 while ((ccb = sc->sc_waiting_ccb.tqh_first) != NULL) { in adw_queue_ccb()
334 TAILQ_REMOVE(&sc->sc_waiting_ccb, ccb, chain); in adw_queue_ccb()
335 errcode = AdwExeScsiQueue(sc, &ccb->scsiq); in adw_queue_ccb()
349 TAILQ_INSERT_TAIL(&sc->sc_pending_ccb, ccb, chain); in adw_queue_ccb()
351 if ((ccb->xs->xs_control & XS_CTL_POLL) == 0) in adw_queue_ccb()
352 callout_reset(&ccb->xs->xs_callout, in adw_queue_ccb()
353 mstohz(ccb->timeout), adw_timeout, ccb); in adw_queue_ccb()
543 ADW_CCB *ccb; in adw_scsipi_request() local
556 ccb = adw_get_ccb(sc); in adw_scsipi_request()
562 if (ccb == NULL) { in adw_scsipi_request()
569 ccb->xs = xs; in adw_scsipi_request()
570 ccb->timeout = xs->timeout; in adw_scsipi_request()
572 if (adw_build_req(sc, ccb)) { in adw_scsipi_request()
574 retry = adw_queue_ccb(sc, ccb); in adw_scsipi_request()
580 adw_free_ccb(sc, ccb); in adw_scsipi_request()
586 adw_free_ccb(sc, ccb); in adw_scsipi_request()
595 if (adw_poll(sc, xs, ccb->timeout)) { in adw_scsipi_request()
596 adw_timeout(ccb); in adw_scsipi_request()
597 if (adw_poll(sc, xs, ccb->timeout)) in adw_scsipi_request()
598 adw_timeout(ccb); in adw_scsipi_request()
618 adw_build_req(ADW_SOFTC *sc, ADW_CCB *ccb) in adw_build_req() argument
620 struct scsipi_xfer *xs = ccb->xs; in adw_build_req()
626 scsiqp = &ccb->scsiq; in adw_build_req()
633 scsiqp->ccb_ptr = ccb->hashkey; in adw_build_req()
652 scsiqp->vsense_addr = &ccb->scsi_sense; in adw_build_req()
654 ADW_CCB_OFF(ccb) + offsetof(struct adw_ccb, scsi_sense)); in adw_build_req()
667 ccb->dmamap_xfer, (struct uio *) xs->data, in adw_build_req()
676 ccb->dmamap_xfer, xs->data, xs->datalen, NULL, in adw_build_req()
697 adw_free_ccb(sc, ccb); in adw_build_req()
702 bus_dmamap_sync(dmat, ccb->dmamap_xfer, 0, in adw_build_req()
703 ccb->dmamap_xfer->dm_mapsize, in adw_build_req()
712 scsiqp->data_addr = htole32(ccb->dmamap_xfer->dm_segs[0].ds_addr); in adw_build_req()
713 memset(ccb->sg_block, 0, in adw_build_req()
715 adw_build_sglist(ccb, scsiqp, ccb->sg_block); in adw_build_req()
733 adw_build_sglist(ADW_CCB *ccb, ADW_SCSI_REQ_Q *scsiqp, ADW_SG_BLOCK *sg_block) in adw_build_sglist() argument
738 bus_dma_segment_t *sg_list = &ccb->dmamap_xfer->dm_segs[0]; in adw_build_sglist()
739 int sg_elem_cnt = ccb->dmamap_xfer->dm_nsegs; in adw_build_sglist()
743 sg_block_physical_addr = le32toh(ccb->hashkey) + in adw_build_sglist()
816 ADW_CCB *ccb = arg; in adw_timeout() local
817 struct scsipi_xfer *xs = ccb->xs; in adw_timeout()
828 if (ccb->flags & CCB_ABORTED) { in adw_timeout()
840 } else if (ccb->flags & CCB_ABORTING) { in adw_timeout()
848 ccb->flags |= CCB_ABORTED; in adw_timeout()
864 ADW_ABORT_CCB(sc, ccb); in adw_timeout()
872 mstohz(ccb->timeout), adw_timeout, ccb); in adw_timeout()
881 ccb->flags |= CCB_ABORTING; in adw_timeout()
897 ADW_ABORT_CCB(sc, ccb); in adw_timeout()
905 mstohz(ccb->timeout), adw_timeout, ccb); in adw_timeout()
915 ADW_CCB *ccb; in adw_reset_bus() local
921 while((ccb = TAILQ_LAST(&sc->sc_pending_ccb, in adw_reset_bus()
923 callout_stop(&ccb->xs->xs_callout); in adw_reset_bus()
924 TAILQ_REMOVE(&sc->sc_pending_ccb, ccb, chain); in adw_reset_bus()
925 xs = ccb->xs; in adw_reset_bus()
926 adw_free_ccb(sc, ccb); in adw_reset_bus()
1025 ADW_CCB *ccb; in adw_isr_callback() local
1030 ccb = adw_ccb_phys_kv(sc, scsiq->ccb_ptr); in adw_isr_callback()
1032 callout_stop(&ccb->xs->xs_callout); in adw_isr_callback()
1034 xs = ccb->xs; in adw_isr_callback()
1041 bus_dmamap_sync(dmat, ccb->dmamap_xfer, 0, in adw_isr_callback()
1042 ccb->dmamap_xfer->dm_mapsize, in adw_isr_callback()
1045 bus_dmamap_unload(dmat, ccb->dmamap_xfer); in adw_isr_callback()
1048 if ((ccb->flags & CCB_ALLOC) == 0) { in adw_isr_callback()
1075 s1 = &ccb->scsi_sense; in adw_isr_callback()
1136 TAILQ_REMOVE(&sc->sc_pending_ccb, ccb, chain); in adw_isr_callback()
1146 TAILQ_REMOVE(&sc->sc_pending_ccb, ccb, chain); in adw_isr_callback()
1194 TAILQ_REMOVE(&sc->sc_pending_ccb, ccb, chain); in adw_isr_callback()
1195 done: adw_free_ccb(sc, ccb); in adw_isr_callback()