Lines Matching refs:xi

694 	bd_xfer_impl_t	*xi;  in bd_xfer_ctor()  local
704 xi = buf; in bd_xfer_ctor()
705 bzero(xi, sizeof (*xi)); in bd_xfer_ctor()
706 xi->i_bd = bd; in bd_xfer_ctor()
710 &xi->i_dmah) != DDI_SUCCESS) { in bd_xfer_ctor()
721 bd_xfer_impl_t *xi = buf; in bd_xfer_dtor() local
725 if (xi->i_dmah) in bd_xfer_dtor()
726 ddi_dma_free_handle(&xi->i_dmah); in bd_xfer_dtor()
727 xi->i_dmah = NULL; in bd_xfer_dtor()
734 bd_xfer_impl_t *xi; in bd_xfer_alloc() local
748 xi = kmem_cache_alloc(bd->d_cache, kmflag); in bd_xfer_alloc()
749 if (xi == NULL) { in bd_xfer_alloc()
756 xi->i_bp = bp; in bd_xfer_alloc()
757 xi->i_func = func; in bd_xfer_alloc()
758 xi->i_blkno = bp->b_lblkno >> (bd->d_blkshift - DEV_BSHIFT); in bd_xfer_alloc()
761 xi->i_len = 0; in bd_xfer_alloc()
762 xi->i_nblks = 0; in bd_xfer_alloc()
763 xi->i_kaddr = NULL; in bd_xfer_alloc()
764 xi->i_resid = 0; in bd_xfer_alloc()
765 xi->i_num_win = 0; in bd_xfer_alloc()
771 xi->i_func = bd->d_ops.o_read; in bd_xfer_alloc()
774 xi->i_func = bd->d_ops.o_write; in bd_xfer_alloc()
778 xi->i_blkshift = shift; in bd_xfer_alloc()
783 xi->i_offset = 0; in bd_xfer_alloc()
784 xi->i_num_win = in bd_xfer_alloc()
786 xi->i_cur_win = 0; in bd_xfer_alloc()
787 xi->i_len = min(bp->b_bcount, bd->d_maxxfer); in bd_xfer_alloc()
788 xi->i_nblks = xi->i_len >> shift; in bd_xfer_alloc()
789 xi->i_kaddr = bp->b_un.b_addr; in bd_xfer_alloc()
790 xi->i_resid = bp->b_bcount; in bd_xfer_alloc()
803 status = ddi_dma_buf_bind_handle(xi->i_dmah, bp, dir, cb, in bd_xfer_alloc()
804 NULL, &xi->i_dmac, &xi->i_ndmac); in bd_xfer_alloc()
807 xi->i_num_win = 1; in bd_xfer_alloc()
808 xi->i_cur_win = 0; in bd_xfer_alloc()
809 xi->i_offset = 0; in bd_xfer_alloc()
810 xi->i_len = bp->b_bcount; in bd_xfer_alloc()
811 xi->i_nblks = xi->i_len >> shift; in bd_xfer_alloc()
812 xi->i_resid = bp->b_bcount; in bd_xfer_alloc()
816 xi->i_cur_win = 0; in bd_xfer_alloc()
818 if ((ddi_dma_numwin(xi->i_dmah, &xi->i_num_win) != in bd_xfer_alloc()
820 (ddi_dma_getwin(xi->i_dmah, 0, &xi->i_offset, in bd_xfer_alloc()
821 &len, &xi->i_dmac, &xi->i_ndmac) != in bd_xfer_alloc()
824 (void) ddi_dma_unbind_handle(xi->i_dmah); in bd_xfer_alloc()
828 xi->i_len = len; in bd_xfer_alloc()
829 xi->i_nblks = xi->i_len >> shift; in bd_xfer_alloc()
830 xi->i_resid = bp->b_bcount; in bd_xfer_alloc()
849 kmem_cache_free(bd->d_cache, xi); in bd_xfer_alloc()
854 return (xi); in bd_xfer_alloc()
858 bd_xfer_free(bd_xfer_impl_t *xi) in bd_xfer_free() argument
860 if (xi->i_dmah) { in bd_xfer_free()
861 (void) ddi_dma_unbind_handle(xi->i_dmah); in bd_xfer_free()
863 kmem_cache_free(xi->i_bd->d_cache, xi); in bd_xfer_free()
1037 bd_xfer_impl_t *xi; in bd_dump() local
1081 xi = bd_xfer_alloc(bd, bp, bd->d_ops.o_write, KM_NOSLEEP); in bd_dump()
1082 if (xi == NULL) { in bd_dump()
1087 xi->i_blkno = d_blkno + pstart; in bd_dump()
1088 xi->i_flags = BD_XFER_POLL; in bd_dump()
1089 bd_submit(bd, xi); in bd_dump()
1195 bd_xfer_impl_t *xi; in bd_strategy() local
1243 xi = bd_xfer_alloc(bd, bp, func, KM_NOSLEEP); in bd_strategy()
1244 if (xi == NULL) { in bd_strategy()
1245 xi = bd_xfer_alloc(bd, bp, func, KM_PUSHPAGE); in bd_strategy()
1247 if (xi == NULL) { in bd_strategy()
1252 xi->i_blkno = lblkno + p_lba; in bd_strategy()
1254 bd_submit(bd, xi); in bd_strategy()
1421 bd_xfer_impl_t *xi; in bd_tg_rdwr() local
1459 xi = bd_xfer_alloc(bd, bp, func, kmflag); in bd_tg_rdwr()
1460 if (xi == NULL) { in bd_tg_rdwr()
1465 xi->i_flags = tg_cookie ? BD_XFER_POLL : 0; in bd_tg_rdwr()
1466 xi->i_blkno = start; in bd_tg_rdwr()
1467 bd_submit(bd, xi); in bd_tg_rdwr()
1525 bd_xfer_impl_t *xi; in bd_sched() local
1532 ((xi = list_remove_head(&bd->d_waitq)) != NULL)) { in bd_sched()
1535 list_insert_tail(&bd->d_runq, xi); in bd_sched()
1545 rv = xi->i_func(bd->d_private, &xi->i_public); in bd_sched()
1547 bp = xi->i_bp; in bd_sched()
1556 list_remove(&bd->d_runq, xi); in bd_sched()
1557 bd_xfer_free(xi); in bd_sched()
1567 bd_submit(bd_t *bd, bd_xfer_impl_t *xi) in bd_submit() argument
1570 list_insert_tail(&bd->d_waitq, xi); in bd_submit()
1578 bd_runq_exit(bd_xfer_impl_t *xi, int err) in bd_runq_exit() argument
1580 bd_t *bd = xi->i_bd; in bd_runq_exit()
1581 buf_t *bp = xi->i_bp; in bd_runq_exit()
1586 list_remove(&bd->d_runq, xi); in bd_runq_exit()
1592 bd->d_kiop->nread += (bp->b_bcount - xi->i_resid); in bd_runq_exit()
1595 bd->d_kiop->nwritten += (bp->b_bcount - xi->i_resid); in bd_runq_exit()
1718 bd_xfer_impl_t *xi; in bd_flush_write_cache() local
1730 xi = bd_xfer_alloc(bd, bp, bd->d_ops.o_sync_cache, KM_SLEEP); in bd_flush_write_cache()
1731 if (xi == NULL) { in bd_flush_write_cache()
1745 bd_submit(bd, xi); in bd_flush_write_cache()
1750 bd_submit(bd, xi); in bd_flush_write_cache()
1926 bd_xfer_impl_t *xi = (void *)xfer; in bd_xfer_done() local
1927 buf_t *bp = xi->i_bp; in bd_xfer_done()
1929 bd_t *bd = xi->i_bd; in bd_xfer_done()
1933 bd_runq_exit(xi, err); in bd_xfer_done()
1936 bp->b_resid += xi->i_resid; in bd_xfer_done()
1937 bd_xfer_free(xi); in bd_xfer_done()
1943 xi->i_cur_win++; in bd_xfer_done()
1944 xi->i_resid -= xi->i_len; in bd_xfer_done()
1946 if (xi->i_resid == 0) { in bd_xfer_done()
1948 bd_runq_exit(xi, 0); in bd_xfer_done()
1950 bd_xfer_free(xi); in bd_xfer_done()
1955 xi->i_blkno += xi->i_nblks; in bd_xfer_done()
1959 rv = ddi_dma_getwin(xi->i_dmah, xi->i_cur_win, in bd_xfer_done()
1960 &xi->i_offset, &len, &xi->i_dmac, &xi->i_ndmac); in bd_xfer_done()
1963 xi->i_kaddr += xi->i_len; in bd_xfer_done()
1964 xi->i_offset += xi->i_len; in bd_xfer_done()
1965 len = min(bp->b_bcount - xi->i_offset, bd->d_maxxfer); in bd_xfer_done()
1970 (P2PHASE(len, (1U << xi->i_blkshift)) != 0)) { in bd_xfer_done()
1971 bd_runq_exit(xi, EFAULT); in bd_xfer_done()
1973 bp->b_resid += xi->i_resid; in bd_xfer_done()
1974 bd_xfer_free(xi); in bd_xfer_done()
1979 xi->i_len = len; in bd_xfer_done()
1980 xi->i_nblks = len >> xi->i_blkshift; in bd_xfer_done()
1983 rv = xi->i_func(bd->d_private, &xi->i_public); in bd_xfer_done()
1985 bd_runq_exit(xi, rv); in bd_xfer_done()
1989 bp->b_resid += xi->i_resid; in bd_xfer_done()
1990 bd_xfer_free(xi); in bd_xfer_done()
1999 bd_xfer_impl_t *xi = (void *)xfer; in bd_error() local
2000 bd_t *bd = xi->i_bd; in bd_error()