Lines Matching refs:ccb

168 	ADV_CCB        *ccb;  in adv_create_ccbs()  local
173 ccb = &ccbstore[i]; in adv_create_ccbs()
174 if ((error = adv_init_ccb(sc, ccb)) != 0) { in adv_create_ccbs()
179 TAILQ_INSERT_TAIL(&sc->sc_free_ccb, ccb, chain); in adv_create_ccbs()
190 adv_free_ccb(ASC_SOFTC *sc, ADV_CCB *ccb) in adv_free_ccb() argument
195 adv_reset_ccb(ccb); in adv_free_ccb()
196 TAILQ_INSERT_HEAD(&sc->sc_free_ccb, ccb, chain); in adv_free_ccb()
202 adv_reset_ccb(ADV_CCB *ccb) in adv_reset_ccb() argument
205 ccb->flags = 0; in adv_reset_ccb()
210 adv_init_ccb(ASC_SOFTC *sc, ADV_CCB *ccb) in adv_init_ccb() argument
214 callout_init(&ccb->ccb_watchdog, 0); in adv_init_ccb()
222 0, BUS_DMA_NOWAIT | BUS_DMA_ALLOCNOW, &ccb->dmamap_xfer); in adv_init_ccb()
233 ccb->hashkey = sc->sc_dmamap_control->dm_segs[0].ds_addr + in adv_init_ccb()
234 ADV_CCB_OFF(ccb); in adv_init_ccb()
235 hashnum = CCB_HASH(ccb->hashkey); in adv_init_ccb()
236 ccb->nexthash = sc->sc_ccbhash[hashnum]; in adv_init_ccb()
237 sc->sc_ccbhash[hashnum] = ccb; in adv_init_ccb()
239 adv_reset_ccb(ccb); in adv_init_ccb()
252 ADV_CCB *ccb = 0; in adv_get_ccb() local
256 ccb = TAILQ_FIRST(&sc->sc_free_ccb); in adv_get_ccb()
257 if (ccb != NULL) { in adv_get_ccb()
258 TAILQ_REMOVE(&sc->sc_free_ccb, ccb, chain); in adv_get_ccb()
259 ccb->flags |= CCB_ALLOC; in adv_get_ccb()
262 return (ccb); in adv_get_ccb()
273 ADV_CCB *ccb = sc->sc_ccbhash[hashnum]; in adv_ccb_phys_kv() local
275 while (ccb) { in adv_ccb_phys_kv()
276 if (ccb->hashkey == ccb_phys) in adv_ccb_phys_kv()
278 ccb = ccb->nexthash; in adv_ccb_phys_kv()
280 return (ccb); in adv_ccb_phys_kv()
288 adv_queue_ccb(ASC_SOFTC *sc, ADV_CCB *ccb) in adv_queue_ccb() argument
291 TAILQ_INSERT_TAIL(&sc->sc_waiting_ccb, ccb, chain); in adv_queue_ccb()
300 ADV_CCB *ccb; in adv_start_ccbs() local
302 while ((ccb = sc->sc_waiting_ccb.tqh_first) != NULL) { in adv_start_ccbs()
303 if (ccb->flags & CCB_WATCHDOG) in adv_start_ccbs()
304 callout_stop(&ccb->ccb_watchdog); in adv_start_ccbs()
306 if (AscExeScsiQueue(sc, &ccb->scsiq) == ASC_BUSY) { in adv_start_ccbs()
307 ccb->flags |= CCB_WATCHDOG; in adv_start_ccbs()
308 callout_reset(&ccb->ccb_watchdog, in adv_start_ccbs()
310 adv_watchdog, ccb); in adv_start_ccbs()
313 TAILQ_REMOVE(&sc->sc_waiting_ccb, ccb, chain); in adv_start_ccbs()
315 if ((ccb->xs->xs_control & XS_CTL_POLL) == 0) in adv_start_ccbs()
316 callout_reset(&ccb->xs->xs_callout, in adv_start_ccbs()
317 mstohz(ccb->timeout), adv_timeout, ccb); in adv_start_ccbs()
528 ADV_CCB *ccb; in adv_scsipi_request() local
540 ccb = adv_get_ccb(sc); in adv_scsipi_request()
546 if (ccb == NULL) { in adv_scsipi_request()
553 ccb->xs = xs; in adv_scsipi_request()
554 ccb->timeout = xs->timeout; in adv_scsipi_request()
559 memset(&ccb->scsiq, 0, sizeof(ASC_SCSI_Q)); in adv_scsipi_request()
561 ccb->scsiq.q2.ccb_ptr = in adv_scsipi_request()
563 ADV_CCB_OFF(ccb); in adv_scsipi_request()
565 ccb->scsiq.cdbptr = &xs->cmd->opcode; in adv_scsipi_request()
566 ccb->scsiq.q2.cdb_len = xs->cmdlen; in adv_scsipi_request()
567 ccb->scsiq.q1.target_id = in adv_scsipi_request()
569 ccb->scsiq.q1.target_lun = periph->periph_lun; in adv_scsipi_request()
570 ccb->scsiq.q2.target_ix = in adv_scsipi_request()
573 ccb->scsiq.q1.sense_addr = in adv_scsipi_request()
575 ADV_CCB_OFF(ccb) + offsetof(struct adv_ccb, scsi_sense); in adv_scsipi_request()
576 ccb->scsiq.q1.sense_len = sizeof(struct scsi_sense_data); in adv_scsipi_request()
590 ccb->scsiq.q2.tag_code = M2_QTAG_MSG_ORDERED; in adv_scsipi_request()
592 ccb->scsiq.q2.tag_code = M2_QTAG_MSG_SIMPLE; in adv_scsipi_request()
602 ccb->dmamap_xfer, (struct uio *) xs->data, in adv_scsipi_request()
610 error = bus_dmamap_load(dmat, ccb->dmamap_xfer, in adv_scsipi_request()
642 adv_free_ccb(sc, ccb); in adv_scsipi_request()
646 bus_dmamap_sync(dmat, ccb->dmamap_xfer, 0, in adv_scsipi_request()
647 ccb->dmamap_xfer->dm_mapsize, in adv_scsipi_request()
651 memset(&ccb->sghead, 0, sizeof(ASC_SG_HEAD)); in adv_scsipi_request()
654 nsegs < ccb->dmamap_xfer->dm_nsegs; nsegs++) { in adv_scsipi_request()
655 ccb->sghead.sg_list[nsegs].addr = in adv_scsipi_request()
656 ccb->dmamap_xfer->dm_segs[nsegs].ds_addr; in adv_scsipi_request()
657 ccb->sghead.sg_list[nsegs].bytes = in adv_scsipi_request()
658 ccb->dmamap_xfer->dm_segs[nsegs].ds_len; in adv_scsipi_request()
661 ccb->sghead.entry_cnt = ccb->scsiq.q1.sg_queue_cnt = in adv_scsipi_request()
662 ccb->dmamap_xfer->dm_nsegs; in adv_scsipi_request()
664 ccb->scsiq.q1.cntl |= ASC_QC_SG_HEAD; in adv_scsipi_request()
665 ccb->scsiq.sg_head = &ccb->sghead; in adv_scsipi_request()
666 ccb->scsiq.q1.data_addr = 0; in adv_scsipi_request()
667 ccb->scsiq.q1.data_cnt = 0; in adv_scsipi_request()
672 ccb->scsiq.q1.data_addr = 0; in adv_scsipi_request()
673 ccb->scsiq.q1.data_cnt = 0; in adv_scsipi_request()
680 (unsigned long)ccb); in adv_scsipi_request()
683 adv_queue_ccb(sc, ccb); in adv_scsipi_request()
690 if (adv_poll(sc, xs, ccb->timeout)) { in adv_scsipi_request()
691 adv_timeout(ccb); in adv_scsipi_request()
692 if (adv_poll(sc, xs, ccb->timeout)) in adv_scsipi_request()
693 adv_timeout(ccb); in adv_scsipi_request()
780 ADV_CCB *ccb = arg; in adv_timeout() local
781 struct scsipi_xfer *xs = ccb->xs; in adv_timeout()
796 if (ccb->flags & CCB_ABORT) { in adv_timeout()
801 ccb->timeout = sc->scsi_reset_wait; in adv_timeout()
802 adv_queue_ccb(sc, ccb); in adv_timeout()
807 AscAbortCCB(sc, ccb); in adv_timeout()
808 ccb->xs->error = XS_TIMEOUT; in adv_timeout()
809 ccb->timeout = ADV_ABORT_TIMEOUT; in adv_timeout()
810 ccb->flags |= CCB_ABORT; in adv_timeout()
811 adv_queue_ccb(sc, ccb); in adv_timeout()
821 ADV_CCB *ccb = arg; in adv_watchdog() local
822 struct scsipi_xfer *xs = ccb->xs; in adv_watchdog()
830 ccb->flags &= ~CCB_WATCHDOG; in adv_watchdog()
851 ADV_CCB *ccb; in adv_narrow_isr_callback() local
856 ccb = adv_ccb_phys_kv(sc, qdonep->d2.ccb_ptr); in adv_narrow_isr_callback()
857 xs = ccb->xs; in adv_narrow_isr_callback()
861 (unsigned long)ccb, in adv_narrow_isr_callback()
865 callout_stop(&ccb->xs->xs_callout); in adv_narrow_isr_callback()
872 bus_dmamap_sync(dmat, ccb->dmamap_xfer, 0, in adv_narrow_isr_callback()
873 ccb->dmamap_xfer->dm_mapsize, in adv_narrow_isr_callback()
876 bus_dmamap_unload(dmat, ccb->dmamap_xfer); in adv_narrow_isr_callback()
878 if ((ccb->flags & CCB_ALLOC) == 0) { in adv_narrow_isr_callback()
928 s1 = &ccb->scsi_sense; in adv_narrow_isr_callback()
954 adv_free_ccb(sc, ccb); in adv_narrow_isr_callback()