Lines Matching refs:xi

959 	bd_xfer_impl_t	*xi;  in bd_xfer_ctor()  local
969 xi = buf; in bd_xfer_ctor()
970 bzero(xi, sizeof (*xi)); in bd_xfer_ctor()
971 xi->i_bd = bd; in bd_xfer_ctor()
975 &xi->i_dmah) != DDI_SUCCESS) { in bd_xfer_ctor()
986 bd_xfer_impl_t *xi = buf; in bd_xfer_dtor() local
990 if (xi->i_dmah) in bd_xfer_dtor()
991 ddi_dma_free_handle(&xi->i_dmah); in bd_xfer_dtor()
992 xi->i_dmah = NULL; in bd_xfer_dtor()
999 bd_xfer_impl_t *xi; in bd_xfer_alloc() local
1013 xi = kmem_cache_alloc(bd->d_cache, kmflag); in bd_xfer_alloc()
1014 if (xi == NULL) { in bd_xfer_alloc()
1021 xi->i_bp = bp; in bd_xfer_alloc()
1022 xi->i_func = func; in bd_xfer_alloc()
1023 xi->i_blkno = bp->b_lblkno >> (bd->d_blkshift - DEV_BSHIFT); in bd_xfer_alloc()
1026 xi->i_len = 0; in bd_xfer_alloc()
1027 xi->i_nblks = 0; in bd_xfer_alloc()
1028 xi->i_kaddr = NULL; in bd_xfer_alloc()
1029 xi->i_resid = 0; in bd_xfer_alloc()
1030 xi->i_num_win = 0; in bd_xfer_alloc()
1036 xi->i_func = bd->d_ops.o_read; in bd_xfer_alloc()
1039 xi->i_func = bd->d_ops.o_write; in bd_xfer_alloc()
1043 xi->i_blkshift = shift; in bd_xfer_alloc()
1048 xi->i_offset = 0; in bd_xfer_alloc()
1049 xi->i_num_win = in bd_xfer_alloc()
1051 xi->i_cur_win = 0; in bd_xfer_alloc()
1052 xi->i_len = min(bp->b_bcount, bd->d_maxxfer); in bd_xfer_alloc()
1053 xi->i_nblks = xi->i_len >> shift; in bd_xfer_alloc()
1054 xi->i_kaddr = bp->b_un.b_addr; in bd_xfer_alloc()
1055 xi->i_resid = bp->b_bcount; in bd_xfer_alloc()
1068 status = ddi_dma_buf_bind_handle(xi->i_dmah, bp, dir, cb, in bd_xfer_alloc()
1069 NULL, &xi->i_dmac, &xi->i_ndmac); in bd_xfer_alloc()
1072 xi->i_num_win = 1; in bd_xfer_alloc()
1073 xi->i_cur_win = 0; in bd_xfer_alloc()
1074 xi->i_offset = 0; in bd_xfer_alloc()
1075 xi->i_len = bp->b_bcount; in bd_xfer_alloc()
1076 xi->i_nblks = xi->i_len >> shift; in bd_xfer_alloc()
1077 xi->i_resid = bp->b_bcount; in bd_xfer_alloc()
1081 xi->i_cur_win = 0; in bd_xfer_alloc()
1083 if ((ddi_dma_numwin(xi->i_dmah, &xi->i_num_win) != in bd_xfer_alloc()
1085 (ddi_dma_getwin(xi->i_dmah, 0, &xi->i_offset, in bd_xfer_alloc()
1086 &len, &xi->i_dmac, &xi->i_ndmac) != in bd_xfer_alloc()
1089 (void) ddi_dma_unbind_handle(xi->i_dmah); in bd_xfer_alloc()
1093 xi->i_len = len; in bd_xfer_alloc()
1094 xi->i_nblks = xi->i_len >> shift; in bd_xfer_alloc()
1095 xi->i_resid = bp->b_bcount; in bd_xfer_alloc()
1114 kmem_cache_free(bd->d_cache, xi); in bd_xfer_alloc()
1119 return (xi); in bd_xfer_alloc()
1123 bd_xfer_free(bd_xfer_impl_t *xi) in bd_xfer_free() argument
1125 if (xi->i_dmah) { in bd_xfer_free()
1126 (void) ddi_dma_unbind_handle(xi->i_dmah); in bd_xfer_free()
1128 if (xi->i_dfl != NULL) { in bd_xfer_free()
1129 dfl_free((dkioc_free_list_t *)xi->i_dfl); in bd_xfer_free()
1130 xi->i_dfl = NULL; in bd_xfer_free()
1132 kmem_cache_free(xi->i_bd->d_cache, xi); in bd_xfer_free()
1306 bd_xfer_impl_t *xi; in bd_dump() local
1350 xi = bd_xfer_alloc(bd, bp, bd->d_ops.o_write, KM_NOSLEEP); in bd_dump()
1351 if (xi == NULL) { in bd_dump()
1356 xi->i_blkno = d_blkno + pstart; in bd_dump()
1357 xi->i_flags = BD_XFER_POLL; in bd_dump()
1358 bd_submit(bd, xi); in bd_dump()
1464 bd_xfer_impl_t *xi; in bd_strategy() local
1512 xi = bd_xfer_alloc(bd, bp, func, KM_NOSLEEP); in bd_strategy()
1513 if (xi == NULL) { in bd_strategy()
1514 xi = bd_xfer_alloc(bd, bp, func, KM_PUSHPAGE); in bd_strategy()
1516 if (xi == NULL) { in bd_strategy()
1521 xi->i_blkno = lblkno + p_lba; in bd_strategy()
1523 bd_submit(bd, xi); in bd_strategy()
1743 bd_xfer_impl_t *xi; in bd_tg_rdwr() local
1781 xi = bd_xfer_alloc(bd, bp, func, kmflag); in bd_tg_rdwr()
1782 if (xi == NULL) { in bd_tg_rdwr()
1787 xi->i_flags = tg_cookie ? BD_XFER_POLL : 0; in bd_tg_rdwr()
1788 xi->i_blkno = start; in bd_tg_rdwr()
1789 bd_submit(bd, xi); in bd_tg_rdwr()
1847 bd_xfer_impl_t *xi; in bd_sched() local
1854 ((xi = list_remove_head(&bq->q_waitq)) != NULL)) { in bd_sched()
1860 list_insert_tail(&bq->q_runq, xi); in bd_sched()
1870 rv = xi->i_func(bd->d_private, &xi->i_public); in bd_sched()
1872 bp = xi->i_bp; in bd_sched()
1885 list_remove(&bq->q_runq, xi); in bd_sched()
1886 bd_xfer_free(xi); in bd_sched()
1896 bd_submit(bd_t *bd, bd_xfer_impl_t *xi) in bd_submit() argument
1902 xi->i_bq = bq; in bd_submit()
1903 xi->i_qnum = q; in bd_submit()
1907 list_insert_tail(&bq->q_waitq, xi); in bd_submit()
1919 bd_runq_exit(bd_xfer_impl_t *xi, int err) in bd_runq_exit() argument
1921 bd_t *bd = xi->i_bd; in bd_runq_exit()
1922 buf_t *bp = xi->i_bp; in bd_runq_exit()
1923 bd_queue_t *bq = xi->i_bq; in bd_runq_exit()
1932 list_remove(&bq->q_runq, xi); in bd_runq_exit()
1939 bp->b_bcount - xi->i_resid); in bd_runq_exit()
1943 bp->b_bcount - xi->i_resid); in bd_runq_exit()
2142 bd_xfer_impl_t *xi; in bd_flush_write_cache() local
2154 xi = bd_xfer_alloc(bd, bp, bd->d_ops.o_sync_cache, KM_SLEEP); in bd_flush_write_cache()
2155 if (xi == NULL) { in bd_flush_write_cache()
2169 bd_submit(bd, xi); in bd_flush_write_cache()
2174 bd_submit(bd, xi); in bd_flush_write_cache()
2194 bd_xfer_impl_t *xi = NULL; in bd_free_space_cb() local
2203 xi = bd_xfer_alloc(bd, bp, bd->d_ops.o_free_space, kmflag); in bd_free_space_cb()
2204 xi->i_dfl = dfl; in bd_free_space_cb()
2208 bd_submit(bd, xi); in bd_free_space_cb()
2212 xi->i_flags |= BD_XFER_POLL; in bd_free_space_cb()
2213 bd_submit(bd, xi); in bd_free_space_cb()
2462 bd_xfer_impl_t *xi = (void *)xfer; in bd_xfer_done() local
2463 buf_t *bp = xi->i_bp; in bd_xfer_done()
2465 bd_t *bd = xi->i_bd; in bd_xfer_done()
2469 bd_runq_exit(xi, err); in bd_xfer_done()
2472 bp->b_resid += xi->i_resid; in bd_xfer_done()
2473 bd_xfer_free(xi); in bd_xfer_done()
2479 xi->i_cur_win++; in bd_xfer_done()
2480 xi->i_resid -= xi->i_len; in bd_xfer_done()
2482 if (xi->i_resid == 0) { in bd_xfer_done()
2484 bd_runq_exit(xi, 0); in bd_xfer_done()
2486 bd_xfer_free(xi); in bd_xfer_done()
2491 xi->i_blkno += xi->i_nblks; in bd_xfer_done()
2495 rv = ddi_dma_getwin(xi->i_dmah, xi->i_cur_win, in bd_xfer_done()
2496 &xi->i_offset, &len, &xi->i_dmac, &xi->i_ndmac); in bd_xfer_done()
2499 xi->i_kaddr += xi->i_len; in bd_xfer_done()
2500 xi->i_offset += xi->i_len; in bd_xfer_done()
2501 len = min(bp->b_bcount - xi->i_offset, bd->d_maxxfer); in bd_xfer_done()
2506 (P2PHASE(len, (1U << xi->i_blkshift)) != 0)) { in bd_xfer_done()
2507 bd_runq_exit(xi, EFAULT); in bd_xfer_done()
2509 bp->b_resid += xi->i_resid; in bd_xfer_done()
2510 bd_xfer_free(xi); in bd_xfer_done()
2515 xi->i_len = len; in bd_xfer_done()
2516 xi->i_nblks = len >> xi->i_blkshift; in bd_xfer_done()
2519 rv = xi->i_func(bd->d_private, &xi->i_public); in bd_xfer_done()
2521 bd_runq_exit(xi, rv); in bd_xfer_done()
2525 bp->b_resid += xi->i_resid; in bd_xfer_done()
2526 bd_xfer_free(xi); in bd_xfer_done()
2535 bd_xfer_impl_t *xi = (void *)xfer; in bd_error() local
2536 bd_t *bd = xi->i_bd; in bd_error()