Lines Matching refs:ccb

333 	struct hvs_ccb *ccb = xs->io;  in hvs_scsi_cmd()  local
397 rv = bus_dmamap_load(sc->sc_dmat, ccb->ccb_dmap, xs->data, in hvs_scsi_cmd()
407 ccb->ccb_sgl->gpa_len = xs->datalen; in hvs_scsi_cmd()
408 ccb->ccb_sgl->gpa_ofs = (vaddr_t)xs->data & PAGE_MASK; in hvs_scsi_cmd()
409 for (i = 0; i < ccb->ccb_dmap->dm_nsegs; i++) in hvs_scsi_cmd()
410 ccb->ccb_sgl->gpa_page[i] = in hvs_scsi_cmd()
411 atop(ccb->ccb_dmap->dm_segs[i].ds_addr); in hvs_scsi_cmd()
412 ccb->ccb_nsge = ccb->ccb_dmap->dm_nsegs; in hvs_scsi_cmd()
414 ccb->ccb_nsge = 0; in hvs_scsi_cmd()
416 ccb->ccb_xfer = xs; in hvs_scsi_cmd()
417 ccb->ccb_cmd = &cmd; in hvs_scsi_cmd()
418 ccb->ccb_done = hvs_scsi_cmd_done; in hvs_scsi_cmd()
422 sc->sc_dev.dv_xname, link->target, link->lun, ccb->ccb_rid, in hvs_scsi_cmd()
427 rv = hvs_poll(sc, ccb); in hvs_scsi_cmd()
429 rv = hvs_start(sc, ccb); in hvs_scsi_cmd()
440 hvs_start(struct hvs_softc *sc, struct hvs_ccb *ccb) in hvs_start() argument
442 union hvs_cmd *cmd = ccb->ccb_cmd; in hvs_start()
445 ccb->ccb_cmd = NULL; in hvs_start()
447 if (ccb->ccb_nsge > 0) { in hvs_start()
448 rv = hv_channel_send_prpl(sc->sc_chan, ccb->ccb_sgl, in hvs_start()
449 ccb->ccb_nsge, cmd, HVS_CMD_SIZE, ccb->ccb_rid); in hvs_start()
453 bus_dmamap_unload(sc->sc_dmat, ccb->ccb_dmap); in hvs_start()
457 ccb->ccb_rid, VMBUS_CHANPKT_TYPE_INBAND, in hvs_start()
468 hvs_poll_done(struct hvs_ccb *ccb) in hvs_poll_done() argument
470 int *rv = ccb->ccb_cookie; in hvs_poll_done()
472 if (ccb->ccb_cmd) { in hvs_poll_done()
473 memcpy(&ccb->ccb_rsp, ccb->ccb_cmd, HVS_CMD_SIZE); in hvs_poll_done()
474 ccb->ccb_cmd = &ccb->ccb_rsp; in hvs_poll_done()
476 memset(&ccb->ccb_rsp, 0, HVS_CMD_SIZE); in hvs_poll_done()
482 hvs_poll(struct hvs_softc *sc, struct hvs_ccb *ccb) in hvs_poll() argument
488 done = ccb->ccb_done; in hvs_poll()
489 cookie = ccb->ccb_cookie; in hvs_poll()
491 ccb->ccb_done = hvs_poll_done; in hvs_poll()
492 ccb->ccb_cookie = &rv; in hvs_poll()
494 if (hvs_start(sc, ccb)) { in hvs_poll()
495 ccb->ccb_cookie = cookie; in hvs_poll()
496 ccb->ccb_done = done; in hvs_poll()
507 ccb->ccb_cookie = cookie; in hvs_poll()
508 ccb->ccb_done = done; in hvs_poll()
509 ccb->ccb_done(ccb); in hvs_poll()
518 struct hvs_ccb *ccb; in hvs_intr() local
557 ccb = &sc->sc_ccbs[rid]; in hvs_intr()
558 ccb->ccb_cmd = &cmd; in hvs_intr()
559 ccb->ccb_done(ccb); in hvs_intr()
617 hvs_scsi_cmd_done(struct hvs_ccb *ccb) in hvs_scsi_cmd_done() argument
619 struct scsi_xfer *xs = ccb->ccb_xfer; in hvs_scsi_cmd_done()
621 union hvs_cmd *cmd = ccb->ccb_cmd; in hvs_scsi_cmd_done()
626 map = ccb->ccb_dmap; in hvs_scsi_cmd_done()
631 xs = ccb->ccb_xfer; in hvs_scsi_cmd_done()
711 struct hvs_ccb *ccb; in hvs_connect() local
714 ccb = scsi_io_get(&sc->sc_iopool, SCSI_POLL); in hvs_connect()
715 if (ccb == NULL) { in hvs_connect()
720 ccb->ccb_done = hvs_empty_done; in hvs_connect()
733 ccb->ccb_cmd = &ucmd; in hvs_connect()
734 if (hvs_poll(sc, ccb)) { in hvs_connect()
736 scsi_io_put(&sc->sc_iopool, ccb); in hvs_connect()
739 if (ccb->ccb_rsp.cmd_status != 0) { in hvs_connect()
741 ccb->ccb_rsp.cmd_status); in hvs_connect()
742 scsi_io_put(&sc->sc_iopool, ccb); in hvs_connect()
758 ccb->ccb_cmd = &ucmd; in hvs_connect()
759 if (hvs_poll(sc, ccb)) { in hvs_connect()
761 scsi_io_put(&sc->sc_iopool, ccb); in hvs_connect()
764 if (ccb->ccb_rsp.cmd_status == 0) { in hvs_connect()
771 scsi_io_put(&sc->sc_iopool, ccb); in hvs_connect()
784 ccb->ccb_cmd = &ucmd; in hvs_connect()
785 if (hvs_poll(sc, ccb)) { in hvs_connect()
787 scsi_io_put(&sc->sc_iopool, ccb); in hvs_connect()
790 if (ccb->ccb_rsp.cmd_op != HVS_MSG_IODONE || in hvs_connect()
791 ccb->ccb_rsp.cmd_status != 0) { in hvs_connect()
793 ccb->ccb_rsp.cmd_status); in hvs_connect()
794 scsi_io_put(&sc->sc_iopool, ccb); in hvs_connect()
797 chp = &ccb->ccb_rsp.chp.cmd_chp; in hvs_connect()
819 ccb->ccb_cmd = &ucmd; in hvs_connect()
820 if (hvs_poll(sc, ccb)) { in hvs_connect()
822 scsi_io_put(&sc->sc_iopool, ccb); in hvs_connect()
825 if (ccb->ccb_rsp.cmd_op != HVS_MSG_IODONE || in hvs_connect()
826 ccb->ccb_rsp.cmd_status != 0) { in hvs_connect()
828 ccb->ccb_rsp.cmd_status); in hvs_connect()
829 scsi_io_put(&sc->sc_iopool, ccb); in hvs_connect()
833 scsi_io_put(&sc->sc_iopool, ccb); in hvs_connect()
839 hvs_empty_done(struct hvs_ccb *ccb) in hvs_empty_done() argument
894 struct hvs_ccb *ccb; in hvs_free_ccbs() local
898 ccb = &sc->sc_ccbs[i]; in hvs_free_ccbs()
899 if (ccb->ccb_dmap == NULL) in hvs_free_ccbs()
901 bus_dmamap_sync(sc->sc_dmat, ccb->ccb_dmap, 0, 0, in hvs_free_ccbs()
903 bus_dmamap_unload(sc->sc_dmat, ccb->ccb_dmap); in hvs_free_ccbs()
904 bus_dmamap_destroy(sc->sc_dmat, ccb->ccb_dmap); in hvs_free_ccbs()
906 free(ccb->ccb_sgl, M_DEVBUF, sizeof(struct vmbus_gpa_range) * in hvs_free_ccbs()
919 struct hvs_ccb *ccb; in hvs_get_ccb() local
922 ccb = SIMPLEQ_FIRST(&sc->sc_ccb_fq); in hvs_get_ccb()
923 if (ccb != NULL) in hvs_get_ccb()
927 return (ccb); in hvs_get_ccb()
934 struct hvs_ccb *ccb = io; in hvs_put_ccb() local
936 ccb->ccb_cmd = NULL; in hvs_put_ccb()
937 ccb->ccb_xfer = NULL; in hvs_put_ccb()
938 ccb->ccb_done = NULL; in hvs_put_ccb()
939 ccb->ccb_cookie = NULL; in hvs_put_ccb()
940 ccb->ccb_nsge = 0; in hvs_put_ccb()
943 SIMPLEQ_INSERT_HEAD(&sc->sc_ccb_fq, ccb, ccb_link); in hvs_put_ccb()