Lines Matching defs:ccb
703 struct nvme_ccb *ccb;
715 ccb = nvme_ccb_get(sc->sc_admin_q, false);
716 KASSERT(ccb != NULL); /* it's a bug if we don't have spare ccb here */
720 nvme_ccb_put(sc->sc_admin_q, ccb);
730 ccb->ccb_done = nvme_empty_done;
731 ccb->ccb_cookie = &sqe;
734 rv = nvme_poll(sc, sc->sc_admin_q, ccb, nvme_sqe_fill, NVME_TIMO_IDENT);
737 nvme_ccb_put(sc->sc_admin_q, ccb);
766 struct nvme_ccb *ccb;
770 ccb = nvme_ccb_get_bio(sc, bp, &q);
771 if (ccb == NULL)
774 ccb->ccb_done = nvme_ns_io_done;
775 ccb->ccb_cookie = cookie;
778 ccb->nnc_nsid = nsid;
779 ccb->nnc_flags = flags;
780 ccb->nnc_buf = bp;
781 ccb->nnc_datasize = datasize;
782 ccb->nnc_secsize = secsize;
783 ccb->nnc_blkno = blkno;
784 ccb->nnc_done = nnc_done;
786 dmap = ccb->ccb_dmamap;
794 nvme_ccb_put(q, ccb);
804 htolem64(&ccb->ccb_prpl[i - 1],
809 ccb->ccb_prpl_off,
810 sizeof(*ccb->ccb_prpl) * (dmap->dm_nsegs - 1),
815 if (nvme_poll(sc, q, ccb, nvme_ns_io_fill, NVME_TIMO_PT) != 0)
820 nvme_q_submit(sc, q, ccb, nvme_ns_io_fill);
825 nvme_ns_io_fill(struct nvme_queue *q, struct nvme_ccb *ccb, void *slot)
828 bus_dmamap_t dmap = ccb->ccb_dmamap;
830 sqe->opcode = ISSET(ccb->nnc_flags, NVME_NS_CTX_F_READ) ?
832 htolem32(&sqe->nsid, ccb->nnc_nsid);
843 htolem64(&sqe->entry.prp[1], ccb->ccb_prpl_dva);
847 htolem64(&sqe->slba, ccb->nnc_blkno);
849 if (ISSET(ccb->nnc_flags, NVME_NS_CTX_F_FUA))
853 KASSERT((ccb->nnc_datasize % ccb->nnc_secsize) == 0);
854 htolem16(&sqe->nlb, (ccb->nnc_datasize / ccb->nnc_secsize) - 1);
858 nvme_ns_io_done(struct nvme_queue *q, struct nvme_ccb *ccb,
862 bus_dmamap_t dmap = ccb->ccb_dmamap;
863 void *nnc_cookie = ccb->ccb_cookie;
864 nvme_nnc_done nnc_done = ccb->nnc_done;
865 struct buf *bp = ccb->nnc_buf;
870 ccb->ccb_prpl_off,
871 sizeof(*ccb->ccb_prpl) * (dmap->dm_nsegs - 1),
876 ISSET(ccb->nnc_flags, NVME_NS_CTX_F_READ) ?
880 nvme_ccb_put(q, ccb);
908 struct nvme_ccb *ccb;
916 ccb = nvme_ccb_get(q, true);
917 KASSERT(ccb != NULL);
919 ccb->ccb_done = nvme_ns_sync_done;
920 ccb->ccb_cookie = &result;
923 ccb->nnc_nsid = nsid;
924 ccb->nnc_flags = flags;
925 ccb->nnc_done = NULL;
928 if (nvme_poll(sc, q, ccb, nvme_ns_sync_fill, NVME_TIMO_SY) != 0)
933 nvme_q_submit(sc, q, ccb, nvme_ns_sync_fill);
943 nvme_ns_sync_fill(struct nvme_queue *q, struct nvme_ccb *ccb, void *slot)
948 htolem32(&sqe->nsid, ccb->nnc_nsid);
952 nvme_ns_sync_done(struct nvme_queue *q, struct nvme_ccb *ccb,
955 int *result = ccb->ccb_cookie;
963 nvme_ccb_put(q, ccb);
980 struct nvme_ccb *ccb;
990 ccb = nvme_ccb_get(q, true);
991 KASSERT(ccb != NULL);
993 ccb->ccb_done = nvme_getcache_done;
994 ccb->ccb_cookie = &result;
997 ccb->nnc_flags = 0;
998 ccb->nnc_done = NULL;
1000 nvme_q_submit(sc, q, ccb, nvme_getcache_fill);
1016 nvme_getcache_fill(struct nvme_queue *q, struct nvme_ccb *ccb, void *slot)
1026 nvme_getcache_done(struct nvme_queue *q, struct nvme_ccb *ccb,
1029 int *addr = ccb->ccb_cookie;
1065 nvme_ccb_put(q, ccb);
1082 nvme_setcache_fill(struct nvme_queue *q, struct nvme_ccb *ccb, void *slot)
1085 struct nvme_setcache_state *st = ccb->ccb_cookie;
1094 nvme_setcache_done(struct nvme_queue *q, struct nvme_ccb *ccb,
1097 struct nvme_setcache_state *st = ccb->ccb_cookie;
1106 nvme_ccb_put(q, ccb);
1115 struct nvme_ccb *ccb;
1130 ccb = nvme_ccb_get(q, true);
1131 KASSERT(ccb != NULL);
1136 ccb->ccb_done = nvme_setcache_done;
1137 ccb->ccb_cookie = &st;
1140 ccb->nnc_flags = 0;
1141 ccb->nnc_done = NULL;
1143 nvme_q_submit(sc, q, ccb, nvme_setcache_fill);
1178 nvme_pt_fill(struct nvme_queue *q, struct nvme_ccb *ccb, void *slot)
1182 struct nvme_pt_state *state = ccb->ccb_cookie;
1184 bus_dmamap_t dmap = ccb->ccb_dmamap;
1200 htolem64(&ccb->ccb_prpl[i - 1],
1205 ccb->ccb_prpl_off,
1206 sizeof(*ccb->ccb_prpl) * (dmap->dm_nsegs - 1),
1208 htolem64(&sqe->entry.prp[1], ccb->ccb_prpl_dva);
1222 nvme_pt_done(struct nvme_queue *q, struct nvme_ccb *ccb, struct nvme_cqe *cqe)
1225 struct nvme_pt_state *state = ccb->ccb_cookie;
1227 bus_dmamap_t dmap = ccb->ccb_dmamap;
1233 ccb->ccb_prpl_off,
1234 sizeof(*ccb->ccb_prpl) * (dmap->dm_nsegs - 1),
1248 nvme_ccb_put(q, ccb);
1264 struct nvme_ccb *ccb;
1275 ccb = nvme_ccb_get(q, true);
1276 KASSERT(ccb != NULL);
1286 error = bus_dmamap_load(sc->sc_dmat, ccb->ccb_dmamap, buf,
1292 bus_dmamap_sync(sc->sc_dmat, ccb->ccb_dmamap,
1293 0, ccb->ccb_dmamap->dm_mapsize,
1301 ccb->ccb_done = nvme_pt_done;
1302 ccb->ccb_cookie = &state;
1306 nvme_q_submit(sc, q, ccb, nvme_pt_fill);
1326 struct nvme_queue *q, struct nvme_ccb *ccb)
1330 return nvme_op_sq_enter_locked(sc, q, ccb);
1335 struct nvme_queue *q, struct nvme_ccb *ccb)
1342 struct nvme_queue *q, struct nvme_ccb *ccb)
1355 struct nvme_queue *q, struct nvme_ccb *ccb)
1357 nvme_op_sq_leave_locked(sc, q, ccb);
1363 nvme_q_submit(struct nvme_softc *sc, struct nvme_queue *q, struct nvme_ccb *ccb,
1369 tail = sc->sc_ops->op_sq_enter(sc, q, ccb);
1376 (*fill)(q, ccb, sqe);
1377 htolem16(&sqe->cid, ccb->ccb_id);
1381 sc->sc_ops->op_sq_leave(sc, q, ccb);
1392 nvme_poll(struct nvme_softc *sc, struct nvme_queue *q, struct nvme_ccb *ccb,
1402 (*fill)(q, ccb, &state.s);
1404 state.done = ccb->ccb_done;
1405 state.cookie = ccb->ccb_cookie;
1407 ccb->ccb_done = nvme_poll_done;
1408 ccb->ccb_cookie = &state;
1410 nvme_q_submit(sc, q, ccb, nvme_poll_fill);
1426 * If it succeds later, it would hit ccb which will have been
1435 ccb->ccb_done(q, ccb, &cqe);
1442 nvme_poll_fill(struct nvme_queue *q, struct nvme_ccb *ccb, void *slot)
1445 struct nvme_poll_state *state = ccb->ccb_cookie;
1451 nvme_poll_done(struct nvme_queue *q, struct nvme_ccb *ccb,
1454 struct nvme_poll_state *state = ccb->ccb_cookie;
1459 ccb->ccb_cookie = state->cookie;
1460 state->done(q, ccb, &state->c);
1464 nvme_sqe_fill(struct nvme_queue *q, struct nvme_ccb *ccb, void *slot)
1466 struct nvme_sqe *src = ccb->ccb_cookie;
1473 nvme_empty_done(struct nvme_queue *q, struct nvme_ccb *ccb,
1480 struct nvme_queue *q, struct nvme_ccb *ccb)
1488 struct nvme_ccb *ccb;
1510 ccb = &q->q_ccbs[lemtoh16(&cqe->cid)];
1523 if ((intptr_t)ccb->ccb_cookie == NVME_CCB_FREE) {
1524 panic("%s: invalid ccb detected",
1532 sc->sc_ops->op_cq_done(sc, q, ccb);
1541 ccb->ccb_done(q, ccb, cqe);
1580 struct nvme_ccb *ccb;
1584 ccb = nvme_ccb_get(sc->sc_admin_q, false);
1585 KASSERT(ccb != NULL); /* it's a bug if we don't have spare ccb here */
1591 ccb->ccb_done = nvme_empty_done;
1592 ccb->ccb_cookie = mem;
1595 rv = nvme_poll(sc, sc->sc_admin_q, ccb, nvme_fill_identify,
1599 nvme_ccb_put(sc->sc_admin_q, ccb);
1640 struct nvme_ccb *ccb;
1646 ccb = nvme_ccb_get(sc->sc_admin_q, false);
1647 KASSERT(ccb != NULL);
1649 ccb->ccb_done = nvme_empty_done;
1650 ccb->ccb_cookie = &sqe;
1661 rv = nvme_poll(sc, sc->sc_admin_q, ccb, nvme_sqe_fill, NVME_TIMO_QOP);
1665 ccb->ccb_done = nvme_empty_done;
1666 ccb->ccb_cookie = &sqe;
1676 rv = nvme_poll(sc, sc->sc_admin_q, ccb, nvme_sqe_fill, NVME_TIMO_QOP);
1680 nvme_ccb_put(sc->sc_admin_q, ccb);
1687 nvme_ccb_put(sc->sc_admin_q, ccb);
1695 struct nvme_ccb *ccb;
1698 ccb = nvme_ccb_get(sc->sc_admin_q, false);
1699 KASSERT(ccb != NULL);
1701 ccb->ccb_done = nvme_empty_done;
1702 ccb->ccb_cookie = &sqe;
1708 rv = nvme_poll(sc, sc->sc_admin_q, ccb, nvme_sqe_fill, NVME_TIMO_QOP);
1712 ccb->ccb_done = nvme_empty_done;
1713 ccb->ccb_cookie = &sqe;
1719 rv = nvme_poll(sc, sc->sc_admin_q, ccb, nvme_sqe_fill, NVME_TIMO_QOP);
1724 nvme_ccb_put(sc->sc_admin_q, ccb);
1735 nvme_fill_identify(struct nvme_queue *q, struct nvme_ccb *ccb, void *slot)
1738 struct nvme_dmamem *mem = ccb->ccb_cookie;
1751 struct nvme_ccb *ccb;
1754 ccb = nvme_ccb_get(sc->sc_admin_q, false);
1755 KASSERT(ccb != NULL); /* it's a bug if we don't have spare ccb here */
1766 ccb->ccb_done = nvme_pt_done;
1767 ccb->ccb_cookie = &state;
1769 rv = nvme_poll(sc, sc->sc_admin_q, ccb, nvme_pt_fill, NVME_TIMO_QOP);
1786 struct nvme_ccb *ccb;
1796 q->q_ccbs = kmem_alloc(sizeof(*ccb) * nccbs, KM_SLEEP);
1806 ccb = &q->q_ccbs[i];
1811 &ccb->ccb_dmamap) != 0)
1814 ccb->ccb_id = i;
1815 ccb->ccb_prpl = prpl;
1816 ccb->ccb_prpl_off = off;
1817 ccb->ccb_prpl_dva = NVME_DMA_DVA(q->q_ccb_prpls) + off;
1819 SIMPLEQ_INSERT_TAIL(&q->q_ccb_list, ccb, ccb_entry);
1835 struct nvme_ccb *ccb = NULL;
1839 ccb = SIMPLEQ_FIRST(&q->q_ccb_list);
1840 if (ccb != NULL) {
1843 ccb->ccb_cookie = NULL;
1854 return ccb;
1870 struct nvme_ccb *ccb;
1873 ccb = SIMPLEQ_FIRST(&q->q_ccb_list);
1874 if (ccb != NULL) {
1877 ccb->ccb_cookie = NULL;
1882 if (ccb != NULL) {
1884 return ccb;
1892 nvme_ccb_put(struct nvme_queue *q, struct nvme_ccb *ccb)
1897 ccb->ccb_cookie = (void *)NVME_CCB_FREE;
1899 SIMPLEQ_INSERT_HEAD(&q->q_ccb_list, ccb, ccb_entry);
1914 struct nvme_ccb *ccb;
1917 while ((ccb = SIMPLEQ_FIRST(&q->q_ccb_list)) != NULL) {
1924 bus_dmamap_destroy(sc->sc_dmat, ccb->ccb_dmamap);
1930 kmem_free(q->q_ccbs, sizeof(*ccb) * q->q_nccbs);