Lines Matching refs:ccb

463 	struct mpii_ccb			*ccb;  in mpii_attach()  local
664 while ((ccb = mpii_get_ccb(sc)) != NULL) in mpii_attach()
665 bus_dmamap_destroy(sc->sc_dmat, ccb->ccb_dmamap); in mpii_attach()
679 struct mpii_ccb *ccb; in mpii_detach() local
710 while ((ccb = mpii_get_ccb(sc)) != NULL) in mpii_detach()
711 bus_dmamap_destroy(sc->sc_dmat, ccb->ccb_dmamap); in mpii_detach()
754 struct mpii_ccb *ccb; in mpii_intr() local
784 ccb = &sc->sc_ccbs[smid - 1]; in mpii_intr()
785 ccb->ccb_state = MPII_CCB_READY; in mpii_intr()
786 ccb->ccb_rcb = rcb; in mpii_intr()
787 SIMPLEQ_INSERT_TAIL(&ccbs, ccb, ccb_link); in mpii_intr()
810 while ((ccb = SIMPLEQ_FIRST(&ccbs)) != NULL) { in mpii_intr()
812 ccb->ccb_done(ccb); in mpii_intr()
823 mpii_load_xs_sas3(struct mpii_ccb *ccb) in mpii_load_xs_sas3() argument
825 struct mpii_softc *sc = ccb->ccb_sc; in mpii_load_xs_sas3()
826 struct scsipi_xfer *xs = ccb->ccb_cookie; in mpii_load_xs_sas3()
827 struct mpii_msg_scsi_io *io = ccb->ccb_cmd; in mpii_load_xs_sas3()
829 bus_dmamap_t dmap = ccb->ccb_dmamap; in mpii_load_xs_sas3()
858 csge->sg_addr = htole64(ccb->ccb_cmd_dva + in mpii_load_xs_sas3()
881 mpii_load_xs(struct mpii_ccb *ccb) in mpii_load_xs() argument
883 struct mpii_softc *sc = ccb->ccb_sc; in mpii_load_xs()
884 struct scsipi_xfer *xs = ccb->ccb_cookie; in mpii_load_xs()
885 struct mpii_msg_scsi_io *io = ccb->ccb_cmd; in mpii_load_xs()
887 bus_dmamap_t dmap = ccb->ccb_dmamap; in mpii_load_xs()
926 mpii_dvatosge(csge, ccb->ccb_cmd_dva + in mpii_load_xs()
1247 mpii_empty_done(struct mpii_ccb *ccb) in mpii_empty_done() argument
1499 struct mpii_ccb *ccb; in mpii_portfacts() local
1504 ccb = mpii_get_ccb(sc); in mpii_portfacts()
1505 if (ccb == NULL) { in mpii_portfacts()
1511 ccb->ccb_done = mpii_empty_done; in mpii_portfacts()
1512 pfq = ccb->ccb_cmd; in mpii_portfacts()
1523 if (mpii_poll(sc, ccb) != 0) { in mpii_portfacts()
1529 if (ccb->ccb_rcb == NULL) { in mpii_portfacts()
1535 pfp = ccb->ccb_rcb->rcb_reply; in mpii_portfacts()
1538 mpii_push_reply(sc, ccb->ccb_rcb); in mpii_portfacts()
1541 mpii_put_ccb(sc, ccb); in mpii_portfacts()
1550 struct mpii_ccb *ccb; in mpii_eventack() local
1566 ccb = mpii_get_ccb(sc); in mpii_eventack()
1567 ccb->ccb_done = mpii_eventack_done; in mpii_eventack()
1568 eaq = ccb->ccb_cmd; in mpii_eventack()
1577 mpii_start(sc, ccb); in mpii_eventack()
1582 mpii_eventack_done(struct mpii_ccb *ccb) in mpii_eventack_done() argument
1584 struct mpii_softc *sc = ccb->ccb_sc; in mpii_eventack_done()
1588 mpii_push_reply(sc, ccb->ccb_rcb); in mpii_eventack_done()
1589 mpii_put_ccb(sc, ccb); in mpii_eventack_done()
1596 struct mpii_ccb *ccb; in mpii_portenable() local
1600 ccb = mpii_get_ccb(sc); in mpii_portenable()
1601 if (ccb == NULL) { in mpii_portenable()
1607 ccb->ccb_done = mpii_empty_done; in mpii_portenable()
1608 peq = ccb->ccb_cmd; in mpii_portenable()
1613 if (mpii_poll(sc, ccb) != 0) { in mpii_portenable()
1619 if (ccb->ccb_rcb == NULL) { in mpii_portenable()
1625 mpii_push_reply(sc, ccb->ccb_rcb); in mpii_portenable()
1626 mpii_put_ccb(sc, ccb); in mpii_portenable()
1680 struct mpii_ccb *ccb; in mpii_eventnotify() local
1683 ccb = mpii_get_ccb(sc); in mpii_eventnotify()
1684 if (ccb == NULL) { in mpii_eventnotify()
1695 mpii_put_ccb(sc, ccb); in mpii_eventnotify()
1706 mpii_put_ccb(sc, ccb); in mpii_eventnotify()
1712 ccb->ccb_done = mpii_eventnotify_done; in mpii_eventnotify()
1713 enq = ccb->ccb_cmd; in mpii_eventnotify()
1740 mpii_start(sc, ccb); in mpii_eventnotify()
1746 mpii_eventnotify_done(struct mpii_ccb *ccb) in mpii_eventnotify_done() argument
1748 struct mpii_softc *sc = ccb->ccb_sc; in mpii_eventnotify_done()
1749 struct mpii_rcb *rcb = ccb->ccb_rcb; in mpii_eventnotify_done()
1753 mpii_put_ccb(sc, ccb); in mpii_eventnotify_done()
2133 struct mpii_ccb *ccb; in mpii_sas_remove_device() local
2135 ccb = mpii_get_ccb(sc); in mpii_sas_remove_device()
2136 if (ccb == NULL) in mpii_sas_remove_device()
2139 stq = ccb->ccb_cmd; in mpii_sas_remove_device()
2144 ccb->ccb_done = mpii_empty_done; in mpii_sas_remove_device()
2145 mpii_wait(sc, ccb); in mpii_sas_remove_device()
2147 if (ccb->ccb_rcb != NULL) in mpii_sas_remove_device()
2148 mpii_push_reply(sc, ccb->ccb_rcb); in mpii_sas_remove_device()
2151 ccb->ccb_state = MPII_CCB_READY; in mpii_sas_remove_device()
2152 ccb->ccb_rcb = NULL; in mpii_sas_remove_device()
2154 soq = ccb->ccb_cmd; in mpii_sas_remove_device()
2160 ccb->ccb_done = mpii_empty_done; in mpii_sas_remove_device()
2161 mpii_wait(sc, ccb); in mpii_sas_remove_device()
2162 if (ccb->ccb_rcb != NULL) in mpii_sas_remove_device()
2163 mpii_push_reply(sc, ccb->ccb_rcb); in mpii_sas_remove_device()
2165 mpii_put_ccb(sc, ccb); in mpii_sas_remove_device()
2258 struct mpii_ccb *ccb; in mpii_req_cfg_header() local
2268 ccb = mpii_get_ccb(sc); in mpii_req_cfg_header()
2269 if (ccb == NULL) { in mpii_req_cfg_header()
2280 cq = ccb->ccb_cmd; in mpii_req_cfg_header()
2293 ccb->ccb_done = mpii_empty_done; in mpii_req_cfg_header()
2295 if (mpii_poll(sc, ccb) != 0) { in mpii_req_cfg_header()
2301 mpii_wait(sc, ccb); in mpii_req_cfg_header()
2303 if (ccb->ccb_rcb == NULL) { in mpii_req_cfg_header()
2304 mpii_put_ccb(sc, ccb); in mpii_req_cfg_header()
2307 cp = ccb->ccb_rcb->rcb_reply; in mpii_req_cfg_header()
2341 mpii_push_reply(sc, ccb->ccb_rcb); in mpii_req_cfg_header()
2342 mpii_put_ccb(sc, ccb); in mpii_req_cfg_header()
2353 struct mpii_ccb *ccb; in mpii_req_cfg_page() local
2369 ccb = mpii_get_ccb(sc); in mpii_req_cfg_page()
2370 if (ccb == NULL) { in mpii_req_cfg_page()
2376 cq = ccb->ccb_cmd; in mpii_req_cfg_page()
2399 mpii_dvatosge(&cq->page_buffer, ccb->ccb_cmd_dva + in mpii_req_cfg_page()
2402 kva = (uintptr_t)ccb->ccb_cmd; in mpii_req_cfg_page()
2408 ccb->ccb_done = mpii_empty_done; in mpii_req_cfg_page()
2410 if (mpii_poll(sc, ccb) != 0) { in mpii_req_cfg_page()
2416 mpii_wait(sc, ccb); in mpii_req_cfg_page()
2418 if (ccb->ccb_rcb == NULL) { in mpii_req_cfg_page()
2419 mpii_put_ccb(sc, ccb); in mpii_req_cfg_page()
2422 cp = ccb->ccb_rcb->rcb_reply; in mpii_req_cfg_page()
2449 mpii_push_reply(sc, ccb->ccb_rcb); in mpii_req_cfg_page()
2450 mpii_put_ccb(sc, ccb); in mpii_req_cfg_page()
2608 struct mpii_ccb *ccb; in mpii_alloc_ccbs() local
2624 sc->sc_ccbs = malloc((sc->sc_max_cmds-1) * sizeof(*ccb), in mpii_alloc_ccbs()
2640 ccb = &sc->sc_ccbs[i - 1]; in mpii_alloc_ccbs()
2644 &ccb->ccb_dmamap) != 0) { in mpii_alloc_ccbs()
2649 ccb->ccb_sc = sc; in mpii_alloc_ccbs()
2650 mutex_init(&ccb->ccb_mtx, MUTEX_DEFAULT, IPL_BIO); in mpii_alloc_ccbs()
2651 cv_init(&ccb->ccb_cv, "mpiiexec"); in mpii_alloc_ccbs()
2653 ccb->ccb_smid = htole16(i); in mpii_alloc_ccbs()
2654 ccb->ccb_offset = sc->sc_request_size * i; in mpii_alloc_ccbs()
2656 ccb->ccb_cmd = &cmd[ccb->ccb_offset]; in mpii_alloc_ccbs()
2657 ccb->ccb_cmd_dva = (u_int32_t)MPII_DMA_DVA(sc->sc_requests) + in mpii_alloc_ccbs()
2658 ccb->ccb_offset; in mpii_alloc_ccbs()
2662 DEVNAME(sc), i, ccb, ccb->ccb_dmamap, ccb->ccb_sc, in mpii_alloc_ccbs()
2663 ccb->ccb_smid, ccb->ccb_offset, ccb->ccb_cmd, in mpii_alloc_ccbs()
2664 ccb->ccb_cmd_dva); in mpii_alloc_ccbs()
2666 mpii_put_ccb(sc, ccb); in mpii_alloc_ccbs()
2672 while ((ccb = mpii_get_ccb(sc)) != NULL) in mpii_alloc_ccbs()
2673 bus_dmamap_destroy(sc->sc_dmat, ccb->ccb_dmamap); in mpii_alloc_ccbs()
2683 mpii_put_ccb(struct mpii_softc *sc, struct mpii_ccb *ccb) in mpii_put_ccb() argument
2685 DNPRINTF(MPII_D_CCB, "%s: mpii_put_ccb %p\n", DEVNAME(sc), ccb); in mpii_put_ccb()
2687 ccb->ccb_state = MPII_CCB_FREE; in mpii_put_ccb()
2688 ccb->ccb_cookie = NULL; in mpii_put_ccb()
2689 ccb->ccb_done = NULL; in mpii_put_ccb()
2690 ccb->ccb_rcb = NULL; in mpii_put_ccb()
2691 memset(ccb->ccb_cmd, 0, sc->sc_request_size); in mpii_put_ccb()
2694 SIMPLEQ_INSERT_HEAD(&sc->sc_ccb_free, ccb, ccb_link); in mpii_put_ccb()
2701 struct mpii_ccb *ccb; in mpii_get_ccb() local
2704 ccb = SIMPLEQ_FIRST(&sc->sc_ccb_free); in mpii_get_ccb()
2705 if (ccb != NULL) { in mpii_get_ccb()
2707 ccb->ccb_state = MPII_CCB_READY; in mpii_get_ccb()
2708 KASSERT(ccb->ccb_sc == sc); in mpii_get_ccb()
2712 DNPRINTF(MPII_D_CCB, "%s: mpii_get_ccb %p\n", DEVNAME(sc), ccb); in mpii_get_ccb()
2714 return (ccb); in mpii_get_ccb()
2757 mpii_start(struct mpii_softc *sc, struct mpii_ccb *ccb) in mpii_start() argument
2768 ccb->ccb_cmd_dva); in mpii_start()
2771 ccb->ccb_offset, sc->sc_request_size, in mpii_start()
2774 ccb->ccb_state = MPII_CCB_QUEUED; in mpii_start()
2776 rhp = ccb->ccb_cmd; in mpii_start()
2783 descr.dev_handle = htole16(ccb->ccb_dev_handle); in mpii_start()
2793 descr.smid = ccb->ccb_smid; in mpii_start()
2822 mpii_poll(struct mpii_softc *sc, struct mpii_ccb *ccb) in mpii_poll() argument
2830 done = ccb->ccb_done; in mpii_poll()
2831 cookie = ccb->ccb_cookie; in mpii_poll()
2833 ccb->ccb_done = mpii_poll_done; in mpii_poll()
2834 ccb->ccb_cookie = &rv; in mpii_poll()
2836 mpii_start(sc, ccb); in mpii_poll()
2846 ccb->ccb_cookie = cookie; in mpii_poll()
2847 done(ccb); in mpii_poll()
2853 mpii_poll_done(struct mpii_ccb *ccb) in mpii_poll_done() argument
2855 int *rv = ccb->ccb_cookie; in mpii_poll_done()
2906 mpii_wait(struct mpii_softc *sc, struct mpii_ccb *ccb) in mpii_wait() argument
2911 done = ccb->ccb_done; in mpii_wait()
2912 cookie = ccb->ccb_cookie; in mpii_wait()
2914 ccb->ccb_done = mpii_wait_done; in mpii_wait()
2915 ccb->ccb_cookie = ccb; in mpii_wait()
2919 mpii_start(sc, ccb); in mpii_wait()
2921 mutex_enter(&ccb->ccb_mtx); in mpii_wait()
2922 while (ccb->ccb_cookie != NULL) in mpii_wait()
2923 cv_wait(&ccb->ccb_cv, &ccb->ccb_mtx); in mpii_wait()
2924 mutex_exit(&ccb->ccb_mtx); in mpii_wait()
2926 ccb->ccb_cookie = cookie; in mpii_wait()
2927 done(ccb); in mpii_wait()
2931 mpii_wait_done(struct mpii_ccb *ccb) in mpii_wait_done() argument
2933 mutex_enter(&ccb->ccb_mtx); in mpii_wait_done()
2934 ccb->ccb_cookie = NULL; in mpii_wait_done()
2935 cv_signal(&ccb->ccb_cv); in mpii_wait_done()
2936 mutex_exit(&ccb->ccb_mtx); in mpii_wait_done()
2947 struct mpii_ccb *ccb; in mpii_scsipi_request() local
3000 ccb = mpii_get_ccb(sc); in mpii_scsipi_request()
3001 if (ccb == NULL) { in mpii_scsipi_request()
3007 DEVNAME(sc), ccb->ccb_smid, xs->cmd->opcode, xs->xs_control); in mpii_scsipi_request()
3009 ccb->ccb_cookie = xs; in mpii_scsipi_request()
3010 ccb->ccb_done = mpii_scsi_cmd_done; in mpii_scsipi_request()
3011 ccb->ccb_dev_handle = dev_handle; in mpii_scsipi_request()
3013 io = ccb->ccb_cmd; in mpii_scsipi_request()
3019 io->dev_handle = htole16(ccb->ccb_dev_handle); in mpii_scsipi_request()
3041 io->sense_buffer_low_address = htole32(ccb->ccb_cmd_dva + in mpii_scsipi_request()
3045 ret = mpii_load_xs_sas3(ccb); in mpii_scsipi_request()
3047 ret = mpii_load_xs(ccb); in mpii_scsipi_request()
3055 if (mpii_poll(sc, ccb) != 0) { in mpii_scsipi_request()
3064 callout_reset(&xs->xs_callout, timeout, mpii_scsi_cmd_tmo, ccb); in mpii_scsipi_request()
3065 mpii_start(sc, ccb); in mpii_scsipi_request()
3068 mpii_put_ccb(sc, ccb); in mpii_scsipi_request()
3075 struct mpii_ccb *ccb = xccb; in mpii_scsi_cmd_tmo() local
3076 struct mpii_softc *sc = ccb->ccb_sc; in mpii_scsi_cmd_tmo()
3081 if (ccb->ccb_state == MPII_CCB_QUEUED) { in mpii_scsi_cmd_tmo()
3084 ccb->ccb_state = MPII_CCB_TIMEOUT; in mpii_scsi_cmd_tmo()
3085 SIMPLEQ_INSERT_HEAD(&sc->sc_ccb_tmos, ccb, ccb_link); in mpii_scsi_cmd_tmo()
3099 struct mpii_ccb *ccb; in mpii_scsi_cmd_tmo_handler() local
3109 ccb = next; in mpii_scsi_cmd_tmo_handler()
3110 next = SIMPLEQ_NEXT(ccb, ccb_link); in mpii_scsi_cmd_tmo_handler()
3111 if (ccb->ccb_state != MPII_CCB_TIMEOUT) in mpii_scsi_cmd_tmo_handler()
3117 stq->dev_handle = htole16(ccb->ccb_dev_handle); in mpii_scsi_cmd_tmo_handler()
3184 mpii_scsi_cmd_done(struct mpii_ccb *ccb) in mpii_scsi_cmd_done() argument
3187 struct mpii_softc *sc = ccb->ccb_sc; in mpii_scsi_cmd_done()
3188 struct scsipi_xfer *xs = ccb->ccb_cookie; in mpii_scsi_cmd_done()
3190 bus_dmamap_t dmap = ccb->ccb_dmamap; in mpii_scsi_cmd_done()
3194 if (ccb->ccb_state == MPII_CCB_TIMEOUT) in mpii_scsi_cmd_done()
3196 ccb->ccb_state = MPII_CCB_READY; in mpii_scsi_cmd_done()
3209 if (ccb->ccb_rcb == NULL) { in mpii_scsi_cmd_done()
3215 sie = ccb->ccb_rcb->rcb_reply; in mpii_scsi_cmd_done()
3299 sense = (struct scsi_sense_data *)((uintptr_t)ccb->ccb_cmd + in mpii_scsi_cmd_done()
3304 mpii_push_reply(sc, ccb->ccb_rcb); in mpii_scsi_cmd_done()
3307 mpii_put_ccb(sc, ccb); in mpii_scsi_cmd_done()
3352 struct mpii_ccb *ccb;
3391 ccb = scsi_io_get(&sc->sc_iopool, SCSI_POLL);
3392 if (ccb == NULL) {
3397 ccb->ccb_done = mpii_empty_done;
3399 req = ccb->ccb_cmd;
3408 if (mpii_poll(sc, ccb) != 0) {
3413 if (ccb->ccb_rcb != NULL) {
3414 rep = ccb->ccb_rcb->rcb_reply;
3421 mpii_push_reply(sc, ccb->ccb_rcb);
3424 scsi_io_put(&sc->sc_iopool, ccb);