Lines Matching defs:dma
389 rootnex_dma_t *dma, ddi_dma_attr_t *attr, ddi_dma_obj_t *dmao, int kmflag);
391 rootnex_dma_t *dma, ddi_dma_attr_t *attr);
392 static void rootnex_teardown_copybuf(rootnex_dma_t *dma);
393 static int rootnex_setup_windows(ddi_dma_impl_t *hp, rootnex_dma_t *dma,
395 static void rootnex_teardown_windows(rootnex_dma_t *dma);
396 static void rootnex_init_win(ddi_dma_impl_t *hp, rootnex_dma_t *dma,
399 rootnex_dma_t *dma, ddi_dma_cookie_t *cookie, off_t cur_offset,
402 rootnex_dma_t *dma, rootnex_window_t **windowp, ddi_dma_cookie_t *cookie,
405 rootnex_dma_t *dma, rootnex_window_t **windowp,
408 rootnex_dma_t *dma, rootnex_window_t **windowp, ddi_dma_cookie_t *cookie);
411 static int rootnex_verify_buffer(rootnex_dma_t *dma);
562 * size of our cookie/window/copybuf state needed in dma bind that we
574 * (p->dmai_private & dma->dp_prealloc_buffer)
636 * Return 'partial' to indicate that dma mapping
1705 * dma related code
1718 rootnex_dma_t *dma;
1746 dma = (rootnex_dma_t *)hp->dmai_private;
1747 dma->dp_prealloc_buffer = (uchar_t *)(((uintptr_t)dma +
1754 dma->dp_dip = rdip;
1755 dma->dp_sglinfo.si_flags = attr->dma_attr_flags;
1756 dma->dp_sglinfo.si_min_addr = attr->dma_attr_addr_lo;
1766 dma->dp_sglinfo.si_max_addr = attr->dma_attr_seg;
1767 dma->dp_sglinfo.si_flags &= ~_DDI_DMA_BOUNCE_ON_SEG;
1769 dma->dp_sglinfo.si_max_addr = attr->dma_attr_addr_hi;
1776 if (attr->dma_attr_seg >= dma->dp_sglinfo.si_max_addr)
1777 dma->dp_sglinfo.si_cancross = B_FALSE;
1779 dma->dp_sglinfo.si_cancross = B_TRUE;
1782 mutex_init(&dma->dp_mutex, NULL, MUTEX_DRIVER, NULL);
1786 * than 4G, we will limit it to (4G - 1) since the max size of a dma
1810 dma->dp_granularity_power_2 = B_FALSE;
1812 dma->dp_granularity_power_2 = B_TRUE;
1822 if (dma->dp_granularity_power_2) {
1823 dma->dp_maxxfer = attr->dma_attr_maxxfer -
1827 dma->dp_maxxfer = attr->dma_attr_maxxfer -
1831 dma->dp_maxxfer = attr->dma_attr_maxxfer;
1834 maxsegmentsize_ll = MIN(seg, dma->dp_maxxfer);
1841 dma->dp_sglinfo.si_max_cookie_size = maxsegmentsize;
1842 dma->dp_sglinfo.si_segmask = attr->dma_attr_seg;
1916 rootnex_dma_t *dma;
1920 dma = (rootnex_dma_t *)hp->dmai_private;
1923 ASSERT(!dma->dp_inuse);
1925 mutex_destroy(&dma->dp_mutex);
1972 rootnex_dma_t *dma;
1978 dma = (rootnex_dma_t *)hp->dmai_private;
1979 dmao = &dma->dp_dma;
1980 sinfo = &dma->dp_sglinfo;
1985 dma->dp_sleep_flags = kmflag = KM_SLEEP;
1987 dma->dp_sleep_flags = kmflag = KM_NOSLEEP;
2002 e = mutex_tryenter(&dma->dp_mutex);
2007 if (dma->dp_inuse) {
2008 mutex_exit(&dma->dp_mutex);
2012 dma->dp_inuse = B_TRUE;
2013 mutex_exit(&dma->dp_mutex);
2027 dma->dp_dma = dmareq->dmar_object;
2031 dmao = &dma->dp_dvma;
2038 dma->dp_dvma_used = B_TRUE;
2044 dma->dp_dvma_used = B_TRUE;
2045 dma->dp_need_to_free_cookie = B_FALSE;
2048 cookie = hp->dmai_cookie = dma->dp_cookies =
2049 (ddi_dma_cookie_t *)dma->dp_prealloc_buffer;
2071 sinfo->si_max_pages = mmu_btopr(dma->dp_dma.dmao_size) + 1;
2073 if (dma->dp_dvma_used) {
2086 ncookies = (dma->dp_dma.dmao_size / sinfo->si_max_cookie_size)
2090 (dma->dp_dma.dmao_size / attr->dma_attr_seg) + 1;
2102 dma->dp_cookies = (ddi_dma_cookie_t *)dma->dp_prealloc_buffer;
2103 dma->dp_need_to_free_cookie = B_FALSE;
2121 dma->dp_cookie_size = sinfo->si_max_pages *
2123 dma->dp_cookies = kmem_alloc(dma->dp_cookie_size, kmflag);
2124 if (dma->dp_cookies == NULL) {
2129 dma->dp_need_to_free_cookie = B_TRUE;
2133 hp->dmai_cookie = dma->dp_cookies;
2137 * looking at the constraints in the dma structure. It will then put
2138 * some additional state about the sgl in the dma struct (i.e. is
2142 if (dma->dp_dvma_used)
2143 rootnex_dvma_get_sgl(dmao, dma->dp_cookies, &dma->dp_sglinfo);
2145 rootnex_get_sgl(dmao, dma->dp_cookies, &dma->dp_sglinfo);
2169 (dmao->dmao_size < dma->dp_maxxfer)) {
2184 *cookiep = dma->dp_cookies[0];
2210 if (dma->dp_dvma_used) {
2212 &dma->dp_dvma);
2216 e = rootnex_bind_slowpath(hp, dmareq, dma, attr, &dma->dp_dma,
2222 if (dma->dp_need_to_free_cookie) {
2223 kmem_free(dma->dp_cookies, dma->dp_cookie_size);
2238 if ((dma->dp_window[dma->dp_current_win].wd_dosync) &&
2256 *ccountp = dma->dp_window[dma->dp_current_win].wd_cookie_cnt;
2257 ASSERT(hp->dmai_nwin <= dma->dp_max_win);
2259 *cookiep = dma->dp_cookies[0];
2304 rootnex_dma_t *dma;
2308 dma = (rootnex_dma_t *)hp->dmai_private;
2312 e = rootnex_verify_buffer(dma);
2320 if (dma->dp_window && dma->dp_window[dma->dp_current_win].wd_dosync &&
2330 rootnex_teardown_copybuf(dma);
2331 rootnex_teardown_windows(dma);
2336 &dma->dp_dvma);
2343 if (dma->dp_need_to_free_cookie) {
2344 kmem_free(dma->dp_cookies, dma->dp_cookie_size);
2391 rootnex_dma_t *dma = (rootnex_dma_t *)hp->dmai_private;
2393 if (dma->dp_sleep_flags != KM_SLEEP &&
2394 dma->dp_sleep_flags != KM_NOSLEEP)
2396 return (dma->dp_sleep_flags);
2403 rootnex_dma_t *dma = (rootnex_dma_t *)hp->dmai_private;
2406 if (dma->dp_window) {
2407 window = &dma->dp_window[dma->dp_current_win];
2410 hp->dmai_cookie = dma->dp_cookies;
2423 rootnex_dma_t *dma = (rootnex_dma_t *)hp->dmai_private;
2431 if (dma->dp_window) {
2432 window = &dma->dp_window[dma->dp_current_win];
2436 cp = dma->dp_cookies;
2437 *ccountp = dma->dp_sglinfo.si_sgl_size;
2464 rootnex_dma_t *dma = (rootnex_dma_t *)hp->dmai_private;
2470 ASSERT(dma->dp_need_to_switch_cookies == B_FALSE);
2472 if (dma->dp_window) {
2473 window = &dma->dp_window[dma->dp_current_win];
2474 dma->dp_saved_cookies = window->wd_first_cookie;
2477 cur_cookiep = (hp->dmai_cookie - dma->dp_saved_cookies)
2480 dma->dp_saved_cookies = dma->dp_cookies;
2481 dma->dp_cookies = cookiep;
2482 ASSERT(ccount == dma->dp_sglinfo.si_sgl_size);
2483 cur_cookiep = (hp->dmai_cookie - dma->dp_saved_cookies)
2484 + dma->dp_cookies;
2487 dma->dp_need_to_switch_cookies = B_TRUE;
2498 rootnex_dma_t *dma = (rootnex_dma_t *)hp->dmai_private;
2505 if (dma->dp_need_to_switch_cookies == B_FALSE)
2508 ASSERT(dma->dp_saved_cookies);
2510 if (dma->dp_window) {
2511 window = &dma->dp_window[dma->dp_current_win];
2513 window->wd_first_cookie = dma->dp_saved_cookies;
2514 dma->dp_saved_cookies = NULL;
2519 cookie_array = dma->dp_cookies;
2520 dma->dp_cookies = dma->dp_saved_cookies;
2521 dma->dp_saved_cookies = NULL;
2522 ccount = dma->dp_sglinfo.si_sgl_size;
2524 + dma->dp_cookies;
2531 dma->dp_need_to_switch_cookies = B_FALSE;
2562 rootnex_verify_buffer(rootnex_dma_t *dma)
2573 if (dma->dp_dma.dmao_type == DMA_OTYP_PAGES) {
2574 poff = dma->dp_dma.dmao_obj.pp_obj.pp_offset & MMU_PAGEOFFSET;
2576 vaddr = dma->dp_dma.dmao_obj.virt_obj.v_addr;
2579 pcnt = mmu_btopr(dma->dp_dma.dmao_size + poff);
2581 switch (dma->dp_dma.dmao_type) {
2587 pp = dma->dp_dma.dmao_obj.pp_obj.pp_pp;
2598 pplist = dma->dp_dma.dmao_obj.virt_obj.v_priv;
2612 if (rootnex_get_as(&dma->dp_dma) == &kas) {
2634 * Clean the dma handle. This should be called on a handle alloc and an
2640 rootnex_dma_t *dma;
2643 dma = (rootnex_dma_t *)hp->dmai_private;
2646 dma->dp_current_cookie = 0;
2647 dma->dp_copybuf_size = 0;
2648 dma->dp_window = NULL;
2649 dma->dp_cbaddr = NULL;
2650 dma->dp_inuse = B_FALSE;
2651 dma->dp_dvma_used = B_FALSE;
2652 dma->dp_need_to_free_cookie = B_FALSE;
2653 dma->dp_need_to_switch_cookies = B_FALSE;
2654 dma->dp_saved_cookies = NULL;
2655 dma->dp_sleep_flags = KM_PANIC;
2656 dma->dp_need_to_free_window = B_FALSE;
2657 dma->dp_partial_required = B_FALSE;
2658 dma->dp_trim_required = B_FALSE;
2659 dma->dp_sglinfo.si_copybuf_req = 0;
2661 dma->dp_cb_remaping = B_FALSE;
2662 dma->dp_kva = NULL;
3251 rootnex_dma_t *dma, ddi_dma_attr_t *attr, ddi_dma_obj_t *dmao, int kmflag)
3266 sinfo = &dma->dp_sglinfo;
3271 * If we're using the copybuf, set the copybuf state in dma struct.
3275 e = rootnex_setup_copybuf(hp, dmareq, dma, attr);
3280 dma->dp_copybuf_size = 0;
3287 if ((dma->dp_copybuf_size < sinfo->si_copybuf_req) ||
3288 (dmao->dmao_size > dma->dp_maxxfer) ||
3290 dma->dp_partial_required = B_TRUE;
3292 dma->dp_trim_required = B_TRUE;
3295 dma->dp_partial_required = B_FALSE;
3296 dma->dp_trim_required = B_FALSE;
3300 if (dma->dp_partial_required &&
3303 mnum = ddi_driver_major(dma->dp_dip);
3318 "/etc/system(4).", ddi_driver_name(dma->dp_dip));
3327 e = rootnex_setup_windows(hp, dma, attr, dmao, kmflag);
3329 rootnex_teardown_copybuf(dma);
3333 window = &dma->dp_window[0];
3334 cookie = &dma->dp_cookies[0];
3336 rootnex_init_win(hp, dma, window, cookie, cur_offset);
3348 if (dma->dp_copybuf_size > 0) {
3349 rootnex_setup_cookie(dmao, dma, cookie,
3363 if (dma->dp_copybuf_size &&
3364 (copybuf_used > dma->dp_copybuf_size)) {
3366 e = rootnex_copybuf_window_boundary(hp, dma, &window,
3369 rootnex_teardown_copybuf(dma);
3370 rootnex_teardown_windows(dma);
3382 dma->dp_dip);
3389 e = rootnex_sgllen_window_boundary(hp, dma, &window,
3392 rootnex_teardown_copybuf(dma);
3393 rootnex_teardown_windows(dma);
3405 dma->dp_dip);
3409 dma->dp_maxxfer) {
3411 e = rootnex_maxxfer_window_boundary(hp, dma, &window,
3414 rootnex_teardown_copybuf(dma);
3415 rootnex_teardown_windows(dma);
3427 dma->dp_dip);
3454 ASSERT(dma->dp_partial_required);
3465 rootnex_dma_t *dma, ddi_dma_attr_t *attr)
3476 ASSERT(!dma->dp_dvma_used);
3478 sinfo = &dma->dp_sglinfo;
3487 dma->dp_copybuf_size = MIN(sinfo->si_copybuf_req, max_copybuf);
3488 ASSERT((dma->dp_copybuf_size & MMU_PAGEOFFSET) == 0);
3507 dma->dp_kva = vmem_alloc(heap_arena, dma->dp_copybuf_size,
3509 if (dma->dp_kva == NULL) {
3538 e = i_ddi_mem_alloc(dma->dp_dip, &lattr, dma->dp_copybuf_size, cansleep,
3539 0, NULL, &dma->dp_cbaddr, &dma->dp_cbsize, NULL);
3542 if (dma->dp_kva != NULL) {
3543 vmem_free(heap_arena, dma->dp_kva,
3544 dma->dp_copybuf_size);
3550 ROOTNEX_DPROBE2(rootnex__alloc__copybuf, dev_info_t *, dma->dp_dip,
3551 size_t, dma->dp_copybuf_size);
3563 rootnex_setup_windows(ddi_dma_impl_t *hp, rootnex_dma_t *dma,
3578 sinfo = &dma->dp_sglinfo;
3580 dma->dp_current_win = 0;
3584 if (!dma->dp_partial_required) {
3585 dma->dp_max_win = 1;
3605 if (sinfo->si_copybuf_req > dma->dp_copybuf_size) {
3606 ASSERT(dma->dp_copybuf_size > 0);
3608 dma->dp_copybuf_size) + 1 + 2;
3633 if (dmao->dmao_size > dma->dp_maxxfer) {
3635 dma->dp_maxxfer) + 1 + 2;
3639 dma->dp_max_win = copybuf_win + sglwin + maxxfer_win;
3640 ASSERT(dma->dp_max_win > 0);
3642 win_state_size = dma->dp_max_win * sizeof (rootnex_window_t);
3653 if (dma->dp_need_to_free_cookie) {
3655 ASSERT(space_used <= dma->dp_cookie_size);
3656 if ((dma->dp_cookie_size - space_used) <=
3659 windowp = (rootnex_window_t *)dma->dp_prealloc_buffer;
3667 state_available = dma->dp_cookie_size - space_used;
3669 &dma->dp_cookies[sinfo->si_sgl_size];
3677 &dma->dp_cookies[sinfo->si_sgl_size];
3684 if (dma->dp_copybuf_size > 0) {
3695 dma->dp_window = windowp;
3696 dma->dp_need_to_free_window = B_FALSE;
3700 dma->dp_window = kmem_alloc(space_needed, kmflag);
3701 if (dma->dp_window == NULL) {
3704 dma->dp_need_to_free_window = B_TRUE;
3705 dma->dp_window_size = space_needed;
3707 dma->dp_dip, size_t, space_needed);
3714 if (dma->dp_copybuf_size > 0) {
3715 dma->dp_pgmap = (rootnex_pgmap_t *)(((uintptr_t)
3716 &dma->dp_window[dma->dp_max_win] + 0x7) & ~0x7);
3723 bzero(dma->dp_pgmap, copy_state_size);
3726 dma->dp_pgmap = NULL;
3738 rootnex_teardown_copybuf(rootnex_dma_t *dma)
3748 if (dma->dp_kva != NULL) {
3749 for (i = 0; i < dma->dp_sglinfo.si_max_pages; i++) {
3750 if (dma->dp_pgmap[i].pm_mapped) {
3751 hat_unload(kas.a_hat, dma->dp_pgmap[i].pm_kaddr,
3753 dma->dp_pgmap[i].pm_mapped = B_FALSE;
3757 vmem_free(heap_arena, dma->dp_kva, dma->dp_copybuf_size);
3763 if (dma->dp_cbaddr != NULL) {
3764 i_ddi_mem_free(dma->dp_cbaddr, NULL);
3774 rootnex_teardown_windows(rootnex_dma_t *dma)
3780 if (dma->dp_need_to_free_window) {
3781 kmem_free(dma->dp_window, dma->dp_window_size);
3793 rootnex_init_win(ddi_dma_impl_t *hp, rootnex_dma_t *dma,
3807 window->wd_remap_copybuf = dma->dp_cb_remaping;
3820 rootnex_setup_cookie(ddi_dma_obj_t *dmar_object, rootnex_dma_t *dma,
3838 sinfo = &dma->dp_sglinfo;
3867 if (!ISP2(dma->dp_copybuf_size)) {
3874 dma->dp_pgmap[pidx].pm_uses_copybuf = B_TRUE;
3881 if ((*copybuf_used + MMU_PAGESIZE) <= dma->dp_copybuf_size) {
3882 dma->dp_pgmap[pidx].pm_cbaddr = dma->dp_cbaddr +
3886 dma->dp_pgmap[pidx].pm_cbaddr = (caddr_t)(
3887 (uintptr_t)dma->dp_cbaddr +
3889 (dma->dp_copybuf_size - 1)));
3891 dma->dp_pgmap[pidx].pm_cbaddr = (caddr_t)(
3892 (uintptr_t)dma->dp_cbaddr +
3893 (*copybuf_used % dma->dp_copybuf_size));
3903 dma->dp_pgmap[pidx].pm_cbaddr)) + poff;
3914 dma->dp_pgmap[pidx].pm_kaddr = (caddr_t)(((uintptr_t)
3922 dma->dp_pgmap[pidx].pm_mapped = B_FALSE;
3932 dma->dp_pgmap[pidx].pm_kaddr = hat_kpm_pfn2va(pfn);
3943 dma->dp_pgmap[pidx].pm_pp = *cur_pp;
3944 dma->dp_pgmap[pidx].pm_vaddr = NULL;
3946 dma->dp_pgmap[pidx].pm_pp = pplist[pidx];
3947 dma->dp_pgmap[pidx].pm_vaddr = NULL;
3949 dma->dp_pgmap[pidx].pm_pp = NULL;
3950 dma->dp_pgmap[pidx].pm_vaddr = (caddr_t)
3965 dma->dp_copybuf_size) {
3966 dma->dp_pgmap[pidx].pm_kaddr = (caddr_t)
3967 (((uintptr_t)dma->dp_kva + *copybuf_used) &
3971 dma->dp_pgmap[pidx].pm_kaddr = (caddr_t)
3972 (((uintptr_t)dma->dp_kva +
3974 (dma->dp_copybuf_size - 1))) &
3977 dma->dp_pgmap[pidx].pm_kaddr = (caddr_t)
3978 (((uintptr_t)dma->dp_kva +
3980 dma->dp_copybuf_size)) &
3989 if (!dma->dp_cb_remaping && ((*copybuf_used +
3990 MMU_PAGESIZE) <= dma->dp_copybuf_size)) {
3991 dma->dp_pgmap[pidx].pm_mapped = B_TRUE;
3992 if (dma->dp_pgmap[pidx].pm_pp != NULL) {
3993 i86_pp_map(dma->dp_pgmap[pidx].pm_pp,
3994 dma->dp_pgmap[pidx].pm_kaddr);
3996 i86_va_map(dma->dp_pgmap[pidx].pm_vaddr,
3998 dma->dp_pgmap[pidx].pm_kaddr);
4008 dma->dp_pgmap[pidx].pm_mapped = B_FALSE;
4042 dma->dp_pgmap[pidx].pm_mapped = B_FALSE;
4044 dma->dp_pgmap[pidx].pm_uses_copybuf = B_FALSE;
4067 rootnex_sgllen_window_boundary(ddi_dma_impl_t *hp, rootnex_dma_t *dma,
4080 if (!dma->dp_trim_required) {
4082 rootnex_init_win(hp, dma, *windowp, cookie, cur_offset);
4090 if (dma->dp_granularity_power_2) {
4099 rootnex_init_win(hp, dma, *windowp, cookie, cur_offset);
4147 rootnex_init_win(hp, dma, *windowp, cookie, new_offset);
4169 if ((*windowp)->wd_size > dma->dp_maxxfer) {
4175 trim_sz = (*windowp)->wd_size - dma->dp_maxxfer;
4181 ASSERT((*windowp)->wd_size == dma->dp_maxxfer);
4189 rootnex_init_win(hp, dma, *windowp, cookie, new_offset);
4207 rootnex_copybuf_window_boundary(ddi_dma_impl_t *hp, rootnex_dma_t *dma,
4220 sinfo = &dma->dp_sglinfo;
4234 dma->dp_cb_remaping = B_TRUE;
4245 if (!dma->dp_trim_required) {
4247 rootnex_init_win(hp, dma, *windowp, cookie, cur_offset);
4261 if (dma->dp_granularity_power_2) {
4275 rootnex_init_win(hp, dma, *windowp, cookie, cur_offset);
4331 dma->dp_pgmap[pidx].pm_cbaddr;
4334 dma->dp_pgmap[pidx].pm_kaddr;
4353 rootnex_init_win(hp, dma, *windowp, cookie, new_offset);
4372 (*windowp)->wd_trim.tr_first_cbaddr = dma->dp_cbaddr;
4375 paddr = pfn_to_pa(hat_getpfnum(kas.a_hat, dma->dp_cbaddr)) +
4381 (*windowp)->wd_trim.tr_first_kaddr = dma->dp_kva;
4408 dma->dp_pgmap[pidx + 1].pm_cbaddr += MMU_PAGESIZE;
4412 dma->dp_pgmap[pidx + 1].pm_cbaddr)) + poff;
4416 ASSERT(dma->dp_pgmap[pidx + 1].pm_mapped == B_FALSE);
4417 dma->dp_pgmap[pidx + 1].pm_kaddr += MMU_PAGESIZE;
4431 ASSERT((*windowp)->wd_size < dma->dp_maxxfer);
4449 rootnex_maxxfer_window_boundary(ddi_dma_impl_t *hp, rootnex_dma_t *dma,
4463 trim_sz = ((*windowp)->wd_size + cookie->dmac_size) - dma->dp_maxxfer;
4465 ASSERT(trim_sz <= dma->dp_maxxfer);
4480 (*windowp)->wd_size = dma->dp_maxxfer;
4498 rootnex_init_win(hp, dma, *windowp, cookie, new_offset);
4521 rootnex_dma_t *dma;
4533 dma = (rootnex_dma_t *)hp->dmai_private;
4534 sinfo = &dma->dp_sglinfo;
4540 if (dma->dp_window == NULL) {
4545 win = &dma->dp_window[dma->dp_current_win];
4596 cbpage = &dma->dp_pgmap[pidx];
4615 dev_info_t *, dma->dp_dip, size_t, psize);
4626 dev_info_t *, dma->dp_dip, size_t, psize);
4728 rootnex_dma_t *dma;
4741 dma = (rootnex_dma_t *)hp->dmai_private;
4743 sinfo = &dma->dp_sglinfo;
4752 dmao = dma->dp_dvma_used ? &dma->dp_dvma : &dma->dp_dma;
4760 if (dma->dp_window == NULL) {
4766 hp->dmai_cookie = dma->dp_cookies;
4769 *ccountp = dma->dp_sglinfo.si_sgl_size;
4776 window = &dma->dp_window[dma->dp_current_win];
4787 if (dma->dp_cb_remaping) {
4807 if (dma->dp_pgmap[pidx].pm_mapped) {
4809 dma->dp_pgmap[pidx].pm_kaddr, MMU_PAGESIZE,
4811 dma->dp_pgmap[pidx].pm_mapped = B_FALSE;
4822 dma->dp_current_win = win;
4823 window = &dma->dp_window[win];
4836 dma->dp_pgmap[trim->tr_first_pidx].pm_cbaddr =
4839 dma->dp_pgmap[trim->tr_first_pidx].pm_kaddr =
4848 dma->dp_pgmap[trim->tr_last_pidx].pm_cbaddr =
4851 dma->dp_pgmap[trim->tr_last_pidx].pm_kaddr =
4871 if (dma->dp_cb_remaping) {
4885 pmap = &dma->dp_pgmap[pidx];
4910 pmap = &dma->dp_pgmap[pidx];
4967 rootnex_dma_t *dma;
4970 dma = (rootnex_dma_t *)hp->dmai_private;
4971 dma->dp_iommu_private = v;
4982 rootnex_dma_t *dma;
4985 dma = (rootnex_dma_t *)hp->dmai_private;
4987 return (dma->dp_iommu_private);
4993 * obsoleted dma routines
5037 * Function called after a dma fault occurred to find out whether the
5050 rootnex_dma_t *dma;
5057 /* The driver has to set DDI_DMA_FLAGERR to recover from dma faults */
5061 dma = (rootnex_dma_t *)hp->dmai_private;
5070 if (dma->dp_window == NULL) {
5072 for (i = 0; i < dma->dp_sglinfo.si_sgl_size; i++) {
5077 if ((fault_addr >= dma->dp_cookies[i].dmac_laddress) &&
5078 (fault_addr <= (dma->dp_cookies[i].dmac_laddress +
5079 dma->dp_cookies[i].dmac_size))) {
5090 window = &dma->dp_window[i];