Lines Matching refs:ccb
457 struct hvs_ccb *ccb; in hvs_scsipi_request() local
499 ccb = hvs_get_ccb(sc); in hvs_scsipi_request()
500 if (ccb == NULL) { in hvs_scsipi_request()
548 error = bus_dmamap_load(sc->sc_dmat, ccb->ccb_dmap, xs->data, in hvs_scsipi_request()
554 hvs_put_ccb(sc, ccb); in hvs_scsipi_request()
559 bus_dmamap_sync(sc->sc_dmat, ccb->ccb_dmap, 0, xs->datalen, in hvs_scsipi_request()
562 ccb->ccb_sgl->gpa_len = xs->datalen; in hvs_scsipi_request()
563 ccb->ccb_sgl->gpa_ofs = (vaddr_t)xs->data & PAGE_MASK; in hvs_scsipi_request()
564 for (i = 0; i < ccb->ccb_dmap->dm_nsegs; i++) in hvs_scsipi_request()
565 ccb->ccb_sgl->gpa_page[i] = in hvs_scsipi_request()
566 atop(ccb->ccb_dmap->dm_segs[i].ds_addr); in hvs_scsipi_request()
567 ccb->ccb_nsge = ccb->ccb_dmap->dm_nsegs; in hvs_scsipi_request()
569 ccb->ccb_nsge = 0; in hvs_scsipi_request()
571 ccb->ccb_xfer = xs; in hvs_scsipi_request()
572 ccb->ccb_cmd = &cmd; in hvs_scsipi_request()
573 ccb->ccb_done = hvs_scsi_cmd_done; in hvs_scsipi_request()
578 ccb->ccb_rid, xs->cmd->opcode, xs->xs_control, xs->datalen); in hvs_scsipi_request()
582 error = hvs_poll(sc, sc->sc_chan, ccb); in hvs_scsipi_request()
584 error = hvs_start(sc, sc->sc_chan, ccb); in hvs_scsipi_request()
586 hvs_put_ccb(sc, ccb); in hvs_scsipi_request()
593 hvs_start(struct hvs_softc *sc, struct vmbus_channel *chan, struct hvs_ccb *ccb) in hvs_start() argument
595 union hvs_cmd *cmd = ccb->ccb_cmd; in hvs_start()
598 ccb->ccb_cmd = NULL; in hvs_start()
600 if (ccb->ccb_nsge > 0) { in hvs_start()
601 error = vmbus_channel_send_prpl(chan, ccb->ccb_sgl, in hvs_start()
602 ccb->ccb_nsge, cmd, HVS_CMD_SIZE, ccb->ccb_rid); in hvs_start()
607 bus_dmamap_unload(sc->sc_dmat, ccb->ccb_dmap); in hvs_start()
611 ccb->ccb_rid, VMBUS_CHANPKT_TYPE_INBAND, in hvs_start()
622 hvs_poll_done(struct hvs_ccb *ccb) in hvs_poll_done() argument
624 int *rv = ccb->ccb_cookie; in hvs_poll_done()
626 if (ccb->ccb_cmd) { in hvs_poll_done()
627 memcpy(&ccb->ccb_rsp, ccb->ccb_cmd, HVS_CMD_SIZE); in hvs_poll_done()
628 ccb->ccb_cmd = &ccb->ccb_rsp; in hvs_poll_done()
630 memset(&ccb->ccb_rsp, 0, HVS_CMD_SIZE); in hvs_poll_done()
636 hvs_poll(struct hvs_softc *sc, struct vmbus_channel *chan, struct hvs_ccb *ccb) in hvs_poll() argument
642 done = ccb->ccb_done; in hvs_poll()
643 cookie = ccb->ccb_cookie; in hvs_poll()
645 ccb->ccb_done = hvs_poll_done; in hvs_poll()
646 ccb->ccb_cookie = &rv; in hvs_poll()
648 if (hvs_start(sc, chan, ccb)) { in hvs_poll()
649 ccb->ccb_cookie = cookie; in hvs_poll()
650 ccb->ccb_done = done; in hvs_poll()
661 ccb->ccb_cookie = cookie; in hvs_poll()
662 ccb->ccb_done = done; in hvs_poll()
663 ccb->ccb_done(ccb); in hvs_poll()
672 struct hvs_ccb *ccb; in hvs_intr() local
710 ccb = &sc->sc_ccbs[rid]; in hvs_intr()
711 ccb->ccb_cmd = &cmd; in hvs_intr()
712 ccb->ccb_done(ccb); in hvs_intr()
771 hvs_scsi_cmd_done(struct hvs_ccb *ccb) in hvs_scsi_cmd_done() argument
773 struct scsipi_xfer *xs = ccb->ccb_xfer; in hvs_scsi_cmd_done()
778 union hvs_cmd *cmd = ccb->ccb_cmd; in hvs_scsi_cmd_done()
783 map = ccb->ccb_dmap; in hvs_scsi_cmd_done()
787 xs = ccb->ccb_xfer; in hvs_scsi_cmd_done()
826 hvs_put_ccb(sc, ccb); in hvs_scsi_cmd_done()
853 struct hvs_ccb *ccb; in hvs_connect() local
863 ccb = hvs_get_ccb(sc); in hvs_connect()
864 if (ccb == NULL) { in hvs_connect()
869 ccb->ccb_done = hvs_empty_done; in hvs_connect()
882 ccb->ccb_cmd = &ucmd; in hvs_connect()
883 if (hvs_poll(sc, sc->sc_chan, ccb)) { in hvs_connect()
888 if (ccb->ccb_rsp.cmd_status != 0) { in hvs_connect()
891 ccb->ccb_rsp.cmd_status); in hvs_connect()
907 ccb->ccb_cmd = &ucmd; in hvs_connect()
908 if (hvs_poll(sc, sc->sc_chan, ccb)) { in hvs_connect()
913 if (ccb->ccb_rsp.cmd_status == 0) { in hvs_connect()
933 ccb->ccb_cmd = &ucmd; in hvs_connect()
934 if (hvs_poll(sc, sc->sc_chan, ccb)) { in hvs_connect()
939 if (ccb->ccb_rsp.cmd_op != HVS_MSG_IODONE || in hvs_connect()
940 ccb->ccb_rsp.cmd_status != 0) { in hvs_connect()
943 ccb->ccb_rsp.cmd_status); in hvs_connect()
946 chp = &ccb->ccb_rsp.chp.cmd_chp; in hvs_connect()
979 ccb->ccb_cmd = &ucmd; in hvs_connect()
980 if (hvs_poll(sc, sc->sc_chan, ccb)) { in hvs_connect()
985 if (ccb->ccb_rsp.cmd_op != HVS_MSG_IODONE || in hvs_connect()
986 ccb->ccb_rsp.cmd_status != 0) { in hvs_connect()
989 ccb->ccb_rsp.cmd_status); in hvs_connect()
1003 ccb->ccb_cmd = &ucmd; in hvs_connect()
1004 if (hvs_poll(sc, sc->sc_chan, ccb)) { in hvs_connect()
1009 if (ccb->ccb_rsp.cmd_op != HVS_MSG_IODONE || in hvs_connect()
1010 ccb->ccb_rsp.cmd_status != 0) { in hvs_connect()
1013 ccb->ccb_rsp.cmd_status); in hvs_connect()
1027 hvs_put_ccb(sc, ccb); in hvs_connect()
1031 hvs_put_ccb(sc, ccb); in hvs_connect()
1036 hvs_empty_done(struct hvs_ccb *ccb) in hvs_empty_done() argument
1080 struct hvs_ccb *ccb; in hvs_free_ccbs() local
1084 ccb = &sc->sc_ccbs[i]; in hvs_free_ccbs()
1085 if (ccb->ccb_dmap == NULL) in hvs_free_ccbs()
1088 bus_dmamap_sync(sc->sc_dmat, ccb->ccb_dmap, in hvs_free_ccbs()
1089 0, ccb->ccb_dmap->dm_mapsize, in hvs_free_ccbs()
1091 bus_dmamap_unload(sc->sc_dmat, ccb->ccb_dmap); in hvs_free_ccbs()
1092 bus_dmamap_destroy(sc->sc_dmat, ccb->ccb_dmap); in hvs_free_ccbs()
1094 kmem_free(ccb->ccb_sgl, in hvs_free_ccbs()
1106 struct hvs_ccb *ccb; in hvs_get_ccb() local
1109 ccb = SIMPLEQ_FIRST(&sc->sc_ccb_fq); in hvs_get_ccb()
1110 if (ccb != NULL) in hvs_get_ccb()
1114 return ccb; in hvs_get_ccb()
1118 hvs_put_ccb(struct hvs_softc *sc, struct hvs_ccb *ccb) in hvs_put_ccb() argument
1121 ccb->ccb_cmd = NULL; in hvs_put_ccb()
1122 ccb->ccb_xfer = NULL; in hvs_put_ccb()
1123 ccb->ccb_done = NULL; in hvs_put_ccb()
1124 ccb->ccb_cookie = NULL; in hvs_put_ccb()
1125 ccb->ccb_nsge = 0; in hvs_put_ccb()
1128 SIMPLEQ_INSERT_HEAD(&sc->sc_ccb_fq, ccb, ccb_link); in hvs_put_ccb()