Lines Matching refs:ccb

287 	struct aha_ccb *ccb;  in aha_finish_ccbs()  local
317 ccb = aha_ccb_phys_kv(sc, phystol(wmbi->ccb_addr)); in aha_finish_ccbs()
318 if (!ccb) { in aha_finish_ccbs()
325 AHA_CCB_OFF(ccb), sizeof(struct aha_ccb), in aha_finish_ccbs()
330 u_char *cp = ccb->scsi_cmd; in aha_finish_ccbs()
335 printf("ccb addr = %p\n", ccb); in aha_finish_ccbs()
342 if ((ccb->flags & CCB_ABORT) != 0) { in aha_finish_ccbs()
369 callout_stop(&ccb->xs->xs_callout); in aha_finish_ccbs()
370 aha_done(sc, ccb); in aha_finish_ccbs()
435 aha_reset_ccb(struct aha_softc *sc, struct aha_ccb *ccb) in aha_reset_ccb() argument
438 ccb->flags = 0; in aha_reset_ccb()
445 aha_free_ccb(struct aha_softc *sc, struct aha_ccb *ccb) in aha_free_ccb() argument
450 aha_reset_ccb(sc, ccb); in aha_free_ccb()
451 TAILQ_INSERT_HEAD(&sc->sc_free_ccb, ccb, chain); in aha_free_ccb()
456 aha_init_ccb(struct aha_softc *sc, struct aha_ccb *ccb) in aha_init_ccb() argument
465 0, BUS_DMA_NOWAIT|BUS_DMA_ALLOCNOW, &ccb->dmamap_xfer); in aha_init_ccb()
477 ccb->hashkey = sc->sc_dmamap_control->dm_segs[0].ds_addr + in aha_init_ccb()
478 AHA_CCB_OFF(ccb); in aha_init_ccb()
479 hashnum = CCB_HASH(ccb->hashkey); in aha_init_ccb()
480 ccb->nexthash = sc->sc_ccbhash[hashnum]; in aha_init_ccb()
481 sc->sc_ccbhash[hashnum] = ccb; in aha_init_ccb()
482 aha_reset_ccb(sc, ccb); in aha_init_ccb()
493 struct aha_ccb *ccb; in aha_create_ccbs() local
498 ccb = &ccbstore[i]; in aha_create_ccbs()
499 if ((error = aha_init_ccb(sc, ccb)) != 0) { in aha_create_ccbs()
505 TAILQ_INSERT_TAIL(&sc->sc_free_ccb, ccb, chain); in aha_create_ccbs()
520 struct aha_ccb *ccb; in aha_get_ccb() local
524 ccb = TAILQ_FIRST(&sc->sc_free_ccb); in aha_get_ccb()
525 if (ccb != NULL) { in aha_get_ccb()
526 TAILQ_REMOVE(&sc->sc_free_ccb, ccb, chain); in aha_get_ccb()
527 ccb->flags |= CCB_ALLOC; in aha_get_ccb()
530 return (ccb); in aha_get_ccb()
540 struct aha_ccb *ccb = sc->sc_ccbhash[hashnum]; in aha_ccb_phys_kv() local
542 while (ccb) { in aha_ccb_phys_kv()
543 if (ccb->hashkey == ccb_phys) in aha_ccb_phys_kv()
545 ccb = ccb->nexthash; in aha_ccb_phys_kv()
547 return (ccb); in aha_ccb_phys_kv()
554 aha_queue_ccb(struct aha_softc *sc, struct aha_ccb *ccb) in aha_queue_ccb() argument
557 TAILQ_INSERT_TAIL(&sc->sc_waiting_ccb, ccb, chain); in aha_queue_ccb()
569 struct aha_ccb *ccb; in aha_collect_mbo() local
582 ccb = aha_ccb_phys_kv(sc, phystol(wmbo->ccb_addr)); in aha_collect_mbo()
583 ccb->flags &= ~CCB_SENDING; in aha_collect_mbo()
602 struct aha_ccb *ccb; in aha_start_ccbs() local
606 while ((ccb = sc->sc_waiting_ccb.tqh_first) != NULL) { in aha_start_ccbs()
621 TAILQ_REMOVE(&sc->sc_waiting_ccb, ccb, chain); in aha_start_ccbs()
623 ccb->flags |= CCB_SENDING; in aha_start_ccbs()
628 AHA_CCB_OFF(ccb), wmbo->ccb_addr); in aha_start_ccbs()
629 if (ccb->flags & CCB_ABORT) in aha_start_ccbs()
641 if ((ccb->xs->xs_control & XS_CTL_POLL) == 0) in aha_start_ccbs()
642 callout_reset(&ccb->xs->xs_callout, in aha_start_ccbs()
643 mstohz(ccb->timeout), aha_timeout, ccb); in aha_start_ccbs()
658 aha_done(struct aha_softc *sc, struct aha_ccb *ccb) in aha_done() argument
662 struct scsipi_xfer *xs = ccb->xs; in aha_done()
671 bus_dmamap_sync(dmat, ccb->dmamap_xfer, 0, in aha_done()
672 ccb->dmamap_xfer->dm_mapsize, in aha_done()
675 bus_dmamap_unload(dmat, ccb->dmamap_xfer); in aha_done()
683 if (ccb->flags & CCB_SENDING) { in aha_done()
690 if ((ccb->flags & CCB_ALLOC) == 0) { in aha_done()
697 if (ccb->host_stat != AHA_OK) { in aha_done()
698 switch (ccb->host_stat) { in aha_done()
704 device_xname(sc->sc_dev), ccb->host_stat); in aha_done()
708 } else if (ccb->target_stat != SCSI_OK) { in aha_done()
709 switch (ccb->target_stat) { in aha_done()
712 (((char *)(&ccb->scsi_cmd)) + in aha_done()
713 ccb->scsi_cmd_length); in aha_done()
723 device_xname(sc->sc_dev), ccb->target_stat); in aha_done()
730 aha_free_ccb(sc, ccb); in aha_done()
1133 struct aha_ccb *ccb; in aha_scsipi_request() local
1146 ccb = aha_get_ccb(sc); in aha_scsipi_request()
1152 if (ccb == NULL) { in aha_scsipi_request()
1159 ccb->xs = xs; in aha_scsipi_request()
1160 ccb->timeout = xs->timeout; in aha_scsipi_request()
1166 ccb->opcode = AHA_RESET_CCB; in aha_scsipi_request()
1167 ccb->scsi_cmd_length = 0; in aha_scsipi_request()
1170 if (xs->cmdlen > sizeof(ccb->scsi_cmd)) { in aha_scsipi_request()
1176 ccb->opcode = (xs->datalen ? AHA_INIT_SCAT_GATH_CCB in aha_scsipi_request()
1178 memcpy(&ccb->scsi_cmd, xs->cmd, in aha_scsipi_request()
1179 ccb->scsi_cmd_length = xs->cmdlen); in aha_scsipi_request()
1189 ccb->dmamap_xfer, (struct uio *)xs->data, in aha_scsipi_request()
1198 ccb->dmamap_xfer, xs->data, xs->datalen, in aha_scsipi_request()
1227 aha_free_ccb(sc, ccb); in aha_scsipi_request()
1232 bus_dmamap_sync(dmat, ccb->dmamap_xfer, 0, in aha_scsipi_request()
1233 ccb->dmamap_xfer->dm_mapsize, in aha_scsipi_request()
1241 for (seg = 0; seg < ccb->dmamap_xfer->dm_nsegs; seg++) { in aha_scsipi_request()
1242 ltophys(ccb->dmamap_xfer->dm_segs[seg].ds_addr, in aha_scsipi_request()
1243 ccb->scat_gath[seg].seg_addr); in aha_scsipi_request()
1244 ltophys(ccb->dmamap_xfer->dm_segs[seg].ds_len, in aha_scsipi_request()
1245 ccb->scat_gath[seg].seg_len); in aha_scsipi_request()
1249 AHA_CCB_OFF(ccb) + in aha_scsipi_request()
1251 ccb->data_addr); in aha_scsipi_request()
1252 ltophys(ccb->dmamap_xfer->dm_nsegs * in aha_scsipi_request()
1253 sizeof(struct aha_scat_gath), ccb->data_length); in aha_scsipi_request()
1258 ltophys(0, ccb->data_addr); in aha_scsipi_request()
1259 ltophys(0, ccb->data_length); in aha_scsipi_request()
1262 ccb->data_out = 0; in aha_scsipi_request()
1263 ccb->data_in = 0; in aha_scsipi_request()
1264 ccb->target = periph->periph_target; in aha_scsipi_request()
1265 ccb->lun = periph->periph_lun; in aha_scsipi_request()
1266 ccb->req_sense_length = sizeof(ccb->scsi_sense); in aha_scsipi_request()
1267 ccb->host_stat = 0x00; in aha_scsipi_request()
1268 ccb->target_stat = 0x00; in aha_scsipi_request()
1269 ccb->link_id = 0; in aha_scsipi_request()
1270 ltophys(0, ccb->link_addr); in aha_scsipi_request()
1273 AHA_CCB_OFF(ccb), sizeof(struct aha_ccb), in aha_scsipi_request()
1277 aha_queue_ccb(sc, ccb); in aha_scsipi_request()
1285 if (aha_poll(sc, xs, ccb->timeout)) { in aha_scsipi_request()
1286 aha_timeout(ccb); in aha_scsipi_request()
1287 if (aha_poll(sc, xs, ccb->timeout)) in aha_scsipi_request()
1288 aha_timeout(ccb); in aha_scsipi_request()
1336 struct aha_ccb *ccb = arg; in aha_timeout() local
1337 struct scsipi_xfer *xs = ccb->xs; in aha_timeout()
1353 if (ccb->flags & CCB_SENDING) { in aha_timeout()
1364 if (ccb->flags & CCB_ABORT) { in aha_timeout()
1371 ccb->xs->error = XS_TIMEOUT; in aha_timeout()
1372 ccb->timeout = AHA_ABORT_TIMEOUT; in aha_timeout()
1373 ccb->flags |= CCB_ABORT; in aha_timeout()
1374 aha_queue_ccb(sc, ccb); in aha_timeout()