Home | History | Annotate | Download | only in hyperv

Lines Matching defs:ccb

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