Lines Matching refs:mp

49 pci_sc_pg_inv(dev_info_t *dip, sc_t *sc_p, ddi_dma_impl_t *mp, off_t off,  in pci_sc_pg_inv()  argument
56 len = mp->dmai_size; in pci_sc_pg_inv()
58 pg_off = mp->dmai_offset; /* start min */ in pci_sc_pg_inv()
60 pg_off += mp->dmai_size; /* end max */ in pci_sc_pg_inv()
64 off, len, mp->dmai_offset, in pci_sc_pg_inv()
65 mp->dmai_offset + mp->dmai_size); in pci_sc_pg_inv()
70 dvma_addr += mp->dmai_mapping; /* start addr */ in pci_sc_pg_inv()
84 pci_dma_sync_flag_wait(ddi_dma_impl_t *mp, sc_t *sc_p, uint32_t onstack) in pci_dma_sync_flag_wait() argument
88 uint64_t sync_flag_pa = SYNC_BUF_PA(mp); in pci_dma_sync_flag_wait()
131 mp, sync_flag_pa, loops); in pci_dma_sync_flag_wait()
151 ddi_dma_impl_t *mp = (ddi_dma_impl_t *)handle; in pci_dma_sync() local
155 uint32_t dev_flag = mp->dmai_rflags; in pci_dma_sync()
161 mp->dmai_mapping, mp->dmai_size, off, len); in pci_dma_sync()
162 DEBUG2(DBG_SC, dip, "mp=%p, ctx=%x\n", mp, MP2CTX(mp)); in pci_dma_sync()
164 if (!(mp->dmai_flags & DMAI_FLAGS_INUSE)) { in pci_dma_sync()
165 cmn_err(CE_WARN, "Unbound dma handle %p from %s%d", mp, in pci_dma_sync()
170 if (mp->dmai_flags & DMAI_FLAGS_NOSYNC) in pci_dma_sync()
198 if (mp->dmai_flags & DMAI_FLAGS_CONTEXT && pci_sc_use_contexts) in pci_dma_sync()
199 ret = pci_sc_ctx_inv(dip, sc_p, mp); in pci_dma_sync()
201 pci_sc_pg_inv(dip, sc_p, mp, off, len); in pci_dma_sync()
214 mp->dmai_flags & DMAI_FLAGS_CONTEXT && pci_sc_use_contexts) in pci_dma_sync()
215 ret = pci_sc_ctx_inv(dip, sc_p, mp); in pci_dma_sync()
217 pci_sc_pg_inv(dip, sc_p, mp, off, len); in pci_dma_sync()
222 pci_dma_sync_flag_wait(mp, sc_p, sync_flag & PCI_DMA_SYNC_PRIVATE); in pci_dma_sync()
229 ddi_dma_impl_t *mp = (ddi_dma_impl_t *)h; in pci_dma_handle_clean() local
230 if ((mp->dmai_flags & DMAI_FLAGS_INUSE) == 0) in pci_dma_handle_clean()
232 mp->dmai_rflags |= DMP_NOSYNC; in pci_dma_handle_clean()
233 mp->dmai_flags |= DMAI_FLAGS_NOSYNC; in pci_dma_handle_clean()
253 ddi_dma_impl_t *mp; in pci_dma_allocmp() local
257 if ((mp = kmem_alloc(sizeof (pci_dma_hdl_t), sleep)) == 0) { in pci_dma_allocmp()
263 return (mp); in pci_dma_allocmp()
266 mp->dmai_rdip = rdip; in pci_dma_allocmp()
267 mp->dmai_flags = 0; in pci_dma_allocmp()
268 mp->dmai_pfnlst = NULL; in pci_dma_allocmp()
269 mp->dmai_winlst = NULL; in pci_dma_allocmp()
270 mp->dmai_ncookies = 0; in pci_dma_allocmp()
271 mp->dmai_curcookie = 0; in pci_dma_allocmp()
295 mp->dmai_attr.dma_attr_version = (uint_t)DMA_ATTR_VERSION; in pci_dma_allocmp()
296 mp->dmai_attr.dma_attr_flags = (uint_t)0; in pci_dma_allocmp()
297 mp->dmai_fault = 0; in pci_dma_allocmp()
298 mp->dmai_fault_check = NULL; in pci_dma_allocmp()
299 mp->dmai_fault_notify = NULL; in pci_dma_allocmp()
301 mp->dmai_error.err_ena = 0; in pci_dma_allocmp()
302 mp->dmai_error.err_status = DDI_FM_OK; in pci_dma_allocmp()
303 mp->dmai_error.err_expected = DDI_FM_ERR_UNEXPECTED; in pci_dma_allocmp()
304 mp->dmai_error.err_ontrap = NULL; in pci_dma_allocmp()
305 mp->dmai_error.err_fep = NULL; in pci_dma_allocmp()
306 mp->dmai_error.err_cf = NULL; in pci_dma_allocmp()
307 ndi_fmc_insert(rdip, DMA_HANDLE, mp, NULL); in pci_dma_allocmp()
309 SYNC_BUF_PA(mp) = 0ull; in pci_dma_allocmp()
310 return (mp); in pci_dma_allocmp()
314 pci_dma_freemp(ddi_dma_impl_t *mp) in pci_dma_freemp() argument
316 ndi_fmc_remove(mp->dmai_rdip, DMA_HANDLE, mp); in pci_dma_freemp()
317 if (mp->dmai_ndvmapages > 1) in pci_dma_freemp()
318 pci_dma_freepfn(mp); in pci_dma_freemp()
319 if (mp->dmai_winlst) in pci_dma_freemp()
320 pci_dma_freewin(mp); in pci_dma_freemp()
321 kmem_free(mp, sizeof (pci_dma_hdl_t)); in pci_dma_freemp()
325 pci_dma_freepfn(ddi_dma_impl_t *mp) in pci_dma_freepfn() argument
327 void *addr = mp->dmai_pfnlst; in pci_dma_freepfn()
328 ASSERT(!PCI_DMA_CANRELOC(mp)); in pci_dma_freepfn()
330 size_t npages = mp->dmai_ndvmapages; in pci_dma_freepfn()
333 mp->dmai_pfnlst = NULL; in pci_dma_freepfn()
335 mp->dmai_ndvmapages = 0; in pci_dma_freepfn()
362 ddi_dma_impl_t *mp; in pci_dma_lmts2hdl() local
378 if (!(mp = pci_dma_allocmp(dip, rdip, dmareq->dmar_fp, in pci_dma_lmts2hdl()
383 attr_p = DEV_ATTR(mp); in pci_dma_lmts2hdl()
390 mp->dmai_flags |= DMAI_FLAGS_PEER_ONLY; in pci_dma_lmts2hdl()
394 mp->dmai_flags |= DMAI_FLAGS_NOFASTLIMIT | in pci_dma_lmts2hdl()
398 mp->dmai_flags |= DMAI_FLAGS_NOFASTLIMIT; in pci_dma_lmts2hdl()
401 mp->dmai_flags |= DMAI_FLAGS_NOCTX; in pci_dma_lmts2hdl()
404 mp->dmai_minxfer = lim_p->dlim_minxfer; in pci_dma_lmts2hdl()
405 mp->dmai_burstsizes = lim_p->dlim_burstsizes; in pci_dma_lmts2hdl()
406 attr_p = &mp->dmai_attr; in pci_dma_lmts2hdl()
409 return (mp); in pci_dma_lmts2hdl()
427 pci_dma_attr2hdl(pci_t *pci_p, ddi_dma_impl_t *mp) in pci_dma_attr2hdl() argument
431 ddi_dma_attr_t *attrp = DEV_ATTR(mp); in pci_dma_attr2hdl()
454 mp->dmai_flags |= DMAI_FLAGS_BYPASSREQ; in pci_dma_attr2hdl()
466 dev_info_t *rdip = mp->dmai_rdip; in pci_dma_attr2hdl()
476 dev_info_t *rdip = mp->dmai_rdip; in pci_dma_attr2hdl()
488 dev_info_t *rdip = mp->dmai_rdip; in pci_dma_attr2hdl()
489 cmn_err(CE_WARN, "%s%d peer only dev %p", NAMEINST(rdip), mp); in pci_dma_attr2hdl()
495 mp->dmai_flags |= DMAI_FLAGS_PEER_ONLY; in pci_dma_attr2hdl()
500 mp->dmai_flags |= DMAI_FLAGS_NOSYSLIMIT | in pci_dma_attr2hdl()
505 mp->dmai_flags |= DMAI_FLAGS_NOFASTLIMIT; in pci_dma_attr2hdl()
507 if (PCI_DMA_NOCTX(mp->dmai_rdip)) in pci_dma_attr2hdl()
508 mp->dmai_flags |= DMAI_FLAGS_NOCTX; in pci_dma_attr2hdl()
510 mp->dmai_minxfer = attrp->dma_attr_minxfer; in pci_dma_attr2hdl()
511 mp->dmai_burstsizes = attrp->dma_attr_burstsizes; in pci_dma_attr2hdl()
512 attrp = &mp->dmai_attr; in pci_dma_attr2hdl()
552 pci_dma_type(pci_t *pci_p, ddi_dma_req_t *dmareq, ddi_dma_impl_t *mp) in pci_dma_type() argument
563 mp->dmai_rflags = pci_dma_consist_check(dmareq->dmar_flags, pbm_p); in pci_dma_type()
564 mp->dmai_flags |= mp->dmai_rflags & DMP_NOSYNC ? DMAI_FLAGS_NOSYNC : 0; in pci_dma_type()
579 mp->dmai_flags |= DMAI_FLAGS_PGPFN; in pci_dma_type()
590 IOMMU_PAGE_SIZE - offset, flags, mp, &pfn0, in pci_dma_type()
591 MP_HAT_CB_COOKIE_PTR(mp, 0)); in pci_dma_type()
602 mp->dmai_flags |= DMAI_FLAGS_RELOC; in pci_dma_type()
610 mp->dmai_flags |= DMAI_FLAGS_PGPFN; in pci_dma_type()
618 NAMEINST(mp->dmai_rdip), dobj_p->dmao_type); in pci_dma_type()
627 mp->dmai_flags |= DMAI_FLAGS_PEER_TO_PEER; in pci_dma_type()
630 if (PCI_DMA_ISPEERONLY(mp)) { in pci_dma_type()
631 dev_info_t *rdip = mp->dmai_rdip; in pci_dma_type()
635 mp->dmai_flags |= (mp->dmai_flags & DMAI_FLAGS_BYPASSREQ) ? in pci_dma_type()
638 mp->dmai_object = *dobj_p; /* whole object */ in pci_dma_type()
639 mp->dmai_pfn0 = (void *)pfn0; /* cache pfn0 */ in pci_dma_type()
640 mp->dmai_roffset = offset; /* win0 pg0 offset */ in pci_dma_type()
641 mp->dmai_ndvmapages = IOMMU_BTOPR(offset + mp->dmai_object.dmao_size); in pci_dma_type()
652 pci_dma_pgpfn(pci_t *pci_p, ddi_dma_impl_t *mp, uint_t npages) in pci_dma_pgpfn() argument
658 switch (mp->dmai_object.dmao_type) { in pci_dma_pgpfn()
661 page_t **pplist = mp->dmai_object.dmao_obj.virt_obj.v_priv; in pci_dma_pgpfn()
667 PCI_SET_MP_PFN1(mp, i, pfn); in pci_dma_pgpfn()
675 page_t *pp = mp->dmai_object.dmao_obj.pp_obj.pp_pp->p_next; in pci_dma_pgpfn()
680 PCI_SET_MP_PFN1(mp, i, pfn); in pci_dma_pgpfn()
701 pci_dma_vapfn(pci_t *pci_p, ddi_dma_req_t *dmareq, ddi_dma_impl_t *mp, in pci_dma_vapfn() argument
706 caddr_t vaddr = (caddr_t)mp->dmai_object.dmao_obj.virt_obj.v_as; in pci_dma_vapfn()
711 sva = (caddr_t)(((uintptr_t)mp->dmai_object.dmao_obj.virt_obj.v_addr + in pci_dma_vapfn()
715 mp->dmai_object.dmao_type != DMA_OTYP_BUFVADDR) in pci_dma_vapfn()
728 IOMMU_PAGE_SIZE, flags, mp, &pfn, in pci_dma_vapfn()
729 MP_HAT_CB_COOKIE_PTR(mp, i)); in pci_dma_vapfn()
742 PCI_SET_MP_PFN1(mp, i, (iopfn_t)pfn); in pci_dma_vapfn()
744 mp, i, (iopfn_t)pfn); in pci_dma_vapfn()
763 pci_dma_pfn(pci_t *pci_p, ddi_dma_req_t *dmareq, ddi_dma_impl_t *mp) in pci_dma_pfn() argument
765 uint32_t npages = mp->dmai_ndvmapages; in pci_dma_pfn()
767 int i, ret, peer = PCI_DMA_ISPTP(mp); in pci_dma_pfn()
775 mp, MP_PFN0(mp) - pfn_adj); in pci_dma_pfn()
778 PCI_SET_MP_PFN(mp, 0, MP_PFN0(mp) - pfn_adj); in pci_dma_pfn()
782 if (!(mp->dmai_pfnlst = kmem_alloc(npages * sizeof (iopfn_t), in pci_dma_pfn()
790 PCI_SET_MP_PFN(mp, 0, MP_PFN0(mp) - pfn_adj); /* pfnlst[0] */ in pci_dma_pfn()
791 if ((ret = PCI_DMA_ISPGPFN(mp) ? pci_dma_pgpfn(pci_p, mp, npages) : in pci_dma_pfn()
792 pci_dma_vapfn(pci_p, dmareq, mp, npages)) != DDI_SUCCESS) in pci_dma_pfn()
797 iopfn_t pfn = PCI_GET_MP_PFN1(mp, i); in pci_dma_pfn()
800 NAMEINST(mp->dmai_rdip), MP_PFN0(mp), pfn); in pci_dma_pfn()
807 PCI_SET_MP_PFN1(mp, i, pfn - pfn_adj); in pci_dma_pfn()
811 pci_dvma_unregister_callbacks(pci_p, mp); in pci_dma_pfn()
812 pci_dma_freepfn(mp); in pci_dma_pfn()
840 pci_dvma_win(pci_t *pci_p, ddi_dma_req_t *dmareq, ddi_dma_impl_t *mp) in pci_dvma_win() argument
842 uint32_t redzone_sz = HAS_REDZONE(mp) ? IOMMU_PAGE_SIZE : 0; in pci_dvma_win()
843 size_t obj_sz = mp->dmai_object.dmao_size; in pci_dvma_win()
847 if ((mp->dmai_ndvmapages == 1) && !redzone_sz) { in pci_dvma_win()
848 mp->dmai_rflags &= ~DDI_DMA_PARTIAL; in pci_dvma_win()
849 mp->dmai_size = obj_sz; in pci_dvma_win()
850 mp->dmai_winsize = IOMMU_PAGE_SIZE; in pci_dvma_win()
851 mp->dmai_nwin = 1; in pci_dvma_win()
855 pg_off = mp->dmai_roffset; in pci_dvma_win()
860 uint64_t nocross = mp->dmai_attr.dma_attr_seg; in pci_dvma_win()
873 uint32_t count_max = mp->dmai_attr.dma_attr_count_max; in pci_dvma_win()
878 mp->dmai_rflags &= ~DDI_DMA_PARTIAL; in pci_dvma_win()
879 mp->dmai_size = xfer_sz; in pci_dvma_win()
880 mp->dmai_winsize = P2ROUNDUP(xfer_sz + pg_off, IOMMU_PAGE_SIZE); in pci_dvma_win()
881 mp->dmai_nwin = 1; in pci_dvma_win()
892 mp->dmai_size = xfer_sz - pg_off; /* 1st window xferrable size */ in pci_dvma_win()
893 mp->dmai_winsize = xfer_sz; /* redzone not in winsize */ in pci_dvma_win()
894 mp->dmai_nwin = (obj_sz + pg_off + xfer_sz - 1) / xfer_sz; in pci_dvma_win()
896 mp->dmai_winlst = NULL; in pci_dvma_win()
897 dump_dma_handle(DBG_DMA_MAP, pci_p->pci_dip, mp); in pci_dvma_win()
911 pci_dvma_map_fast(iommu_t *iommu_p, ddi_dma_impl_t *mp) in pci_dvma_map_fast() argument
916 uint64_t tte = GET_TTE_TEMPLATE(mp); in pci_dvma_map_fast()
921 size_t npages = IOMMU_BTOP(mp->dmai_winsize); in pci_dvma_map_fast()
923 dev_info_t *dip = mp->dmai_rdip; in pci_dvma_map_fast()
926 ASSERT(IOMMU_PTOB(npages) == mp->dmai_winsize); in pci_dvma_map_fast()
927 ASSERT(npages + HAS_REDZONE(mp) <= clustsz); in pci_dvma_map_fast()
944 if (PCI_DMA_USECTX(mp)) { in pci_dvma_map_fast()
947 mp->dmai_flags |= DMAI_FLAGS_CONTEXT; in pci_dvma_map_fast()
957 *tte_addr = tte | IOMMU_PTOB(MP_PFN0(mp)); /* map page 0 */ in pci_dvma_map_fast()
958 DEBUG5(DBG_DMA_MAP, dip, "fast %p:dvma_pg=%x tte0(%p)=%08x.%08x\n", mp, in pci_dvma_map_fast()
962 pfn_addr = PCI_GET_MP_PFN1_ADDR(mp); /* short iommu_map_pages() */ in pci_dvma_map_fast()
965 DEBUG5(DBG_DMA_MAP, dip, "fast %p:tte(%p, %p)=%08x.%08x\n", mp, in pci_dvma_map_fast()
972 mp->dmai_mapping = mp->dmai_roffset | IOMMU_PTOB(dvma_pg); in pci_dvma_map_fast()
973 mp->dmai_offset = 0; in pci_dvma_map_fast()
974 mp->dmai_flags |= DMAI_FLAGS_FASTTRACK; in pci_dvma_map_fast()
975 PCI_SAVE_MP_TTE(mp, tte); /* save TTE template for unmapping */ in pci_dvma_map_fast()
977 pci_dvma_alloc_debug(iommu_p, (char *)mp->dmai_mapping, in pci_dvma_map_fast()
978 mp->dmai_size, mp); in pci_dvma_map_fast()
987 pci_dvma_map(ddi_dma_impl_t *mp, ddi_dma_req_t *dmareq, iommu_t *iommu_p) in pci_dvma_map() argument
989 uint_t npages = PCI_DMA_WINNPGS(mp); in pci_dvma_map()
992 uint64_t tte = GET_TTE_TEMPLATE(mp); in pci_dvma_map()
995 dev_info_t *dip = mp->dmai_rdip; in pci_dvma_map()
1003 if ((npages == 1) && !HAS_REDZONE(mp) && HAS_NOSYSLIMIT(mp)) { in pci_dvma_map()
1006 mp->dmai_flags |= DMAI_FLAGS_VMEMCACHE; in pci_dvma_map()
1012 IOMMU_PTOB(npages + HAS_REDZONE(mp)), in pci_dvma_map()
1013 MAX(mp->dmai_attr.dma_attr_align, IOMMU_PAGE_SIZE), in pci_dvma_map()
1015 mp->dmai_attr.dma_attr_seg + 1, in pci_dvma_map()
1016 (void *)mp->dmai_attr.dma_attr_addr_lo, in pci_dvma_map()
1017 (void *)(mp->dmai_attr.dma_attr_addr_hi + 1), in pci_dvma_map()
1031 if ((npages >= pci_context_minpages) && PCI_DMA_USECTX(mp)) { in pci_dvma_map()
1035 mp->dmai_flags |= DMAI_FLAGS_CONTEXT; in pci_dvma_map()
1038 mp->dmai_mapping = mp->dmai_roffset | IOMMU_PTOB(dvma_pg); in pci_dvma_map()
1039 mp->dmai_offset = 0; in pci_dvma_map()
1040 PCI_SAVE_MP_TTE(mp, tte); /* mp->dmai_tte = tte */ in pci_dvma_map()
1041 iommu_map_pages(iommu_p, mp, dvma_pg, npages, 0); in pci_dvma_map()
1054 pci_dvma_unmap(iommu_t *iommu_p, ddi_dma_impl_t *mp) in pci_dvma_unmap() argument
1057 dvma_addr_t dvma_addr = (dvma_addr_t)mp->dmai_mapping; in pci_dvma_unmap()
1061 if (mp->dmai_flags & DMAI_FLAGS_FASTTRACK) { in pci_dvma_unmap()
1072 npages = IOMMU_BTOP(mp->dmai_winsize) + HAS_REDZONE(mp); in pci_dvma_unmap()
1073 pci_vmem_free(iommu_p, mp, (void *)dvma_addr, npages); in pci_dvma_unmap()
1075 if (mp->dmai_flags & DMAI_FLAGS_CONTEXT) in pci_dvma_unmap()
1076 pci_iommu_free_dvma_context(iommu_p, MP2CTX(mp)); in pci_dvma_unmap()
1080 pci_dma_sync_unmap(dev_info_t *dip, dev_info_t *rdip, ddi_dma_impl_t *mp) in pci_dma_sync_unmap() argument
1084 uint64_t sync_buf_save = SYNC_BUF_PA(mp); in pci_dma_sync_unmap()
1085 uint32_t fast_track = mp->dmai_flags & DMAI_FLAGS_FASTTRACK; in pci_dma_sync_unmap()
1088 dvma_addr_t dvma_pg = IOMMU_BTOP(mp->dmai_mapping); in pci_dma_sync_unmap()
1090 SYNC_BUF_PA(mp) = IOMMU_PAGE_TTEPA(iommu_p, dvma_pg); in pci_dma_sync_unmap()
1091 ASSERT(!(SYNC_BUF_PA(mp) & PCI_SYNC_FLAG_SIZE - 1)); in pci_dma_sync_unmap()
1095 pci_dma_sync(dip, rdip, (ddi_dma_handle_t)mp, 0, 0, in pci_dma_sync_unmap()
1097 iommu_unmap_window(iommu_p, mp); in pci_dma_sync_unmap()
1099 iommu_unmap_window(iommu_p, mp); in pci_dma_sync_unmap()
1100 pci_dma_sync(dip, rdip, (ddi_dma_handle_t)mp, 0, 0, in pci_dma_sync_unmap()
1105 SYNC_BUF_PA(mp) = sync_buf_save; in pci_dma_sync_unmap()
1113 pci_dvma_ctl(dev_info_t *dip, dev_info_t *rdip, ddi_dma_impl_t *mp, in pci_dvma_ctl() argument
1121 return (pci_dvma_remap(dip, rdip, mp, *offp, *lenp)); in pci_dvma_ctl()
1133 pci_dma_freewin(ddi_dma_impl_t *mp) in pci_dma_freewin() argument
1135 pci_dma_win_t *win_p = mp->dmai_winlst, *win2_p; in pci_dma_freewin()
1141 mp->dmai_nwin = 0; in pci_dma_freewin()
1142 mp->dmai_winlst = NULL; in pci_dma_freewin()
1175 pci_dma_newwin(ddi_dma_req_t *dmareq, ddi_dma_impl_t *mp, uint32_t cookie_no, in pci_dma_newwin() argument
1182 iopfn_t pfn = PCI_GET_MP_PFN(mp, start_idx); in pci_dma_newwin()
1200 pfn = PCI_GET_MP_PFN1(mp, start_idx); in pci_dma_newwin()
1208 DEBUG2(DBG_BYPASS, mp->dmai_rdip, "cookie %p (%x pages)\n", in pci_dma_newwin()
1217 DEBUG3(DBG_BYPASS, mp->dmai_rdip, "cookie %p (%x pages) of total %x\n", in pci_dma_newwin()
1250 pci_dma_adjust(ddi_dma_req_t *dmareq, ddi_dma_impl_t *mp, pci_dma_win_t *win_p) in pci_dma_adjust() argument
1253 size_t pg_offset = mp->dmai_roffset; in pci_dma_adjust()
1259 DEBUG1(DBG_BYPASS, mp->dmai_rdip, "pg0 adjust %lx\n", pg_offset); in pci_dma_adjust()
1261 mp->dmai_size = win_p->win_size; in pci_dma_adjust()
1262 mp->dmai_offset = 0; in pci_dma_adjust()
1264 pg_offset += mp->dmai_object.dmao_size; in pci_dma_adjust()
1268 DEBUG1(DBG_BYPASS, mp->dmai_rdip, "last pg adjust %lx\n", pg_offset); in pci_dma_adjust()
1271 DEBUG1(DBG_BYPASS, mp->dmai_rdip, "win off %p\n", win_offset); in pci_dma_adjust()
1280 ASSERT((win_offset + win_p->win_size) == mp->dmai_object.dmao_size); in pci_dma_adjust()
1329 pci_dma_physwin(pci_t *pci_p, ddi_dma_req_t *dmareq, ddi_dma_impl_t *mp) in pci_dma_physwin() argument
1331 uint_t npages = mp->dmai_ndvmapages; in pci_dma_physwin()
1332 int ret, sgllen = mp->dmai_attr.dma_attr_sgllen; in pci_dma_physwin()
1334 iopfn_t pfn = PCI_GET_MP_PFN(mp, 0); in pci_dma_physwin()
1336 uint64_t count_max, bypass = PCI_DMA_BYPASS_PREFIX(mp, pfn); in pci_dma_physwin()
1337 pci_dma_win_t **win_pp = (pci_dma_win_t **)&mp->dmai_winlst; in pci_dma_physwin()
1340 if (PCI_DMA_ISPTP(mp)) { /* ignore sys limits for peer-to-peer */ in pci_dma_physwin()
1341 ddi_dma_attr_t *dev_attr_p = DEV_ATTR(mp); in pci_dma_physwin()
1362 count_max = mp->dmai_attr.dma_attr_count_max; in pci_dma_physwin()
1363 pfn_lo = IOMMU_BTOP(mp->dmai_attr.dma_attr_addr_lo); in pci_dma_physwin()
1364 pfn_hi = IOMMU_BTOP(mp->dmai_attr.dma_attr_addr_hi); in pci_dma_physwin()
1371 pfn = bypass_pfn | PCI_GET_MP_PFN1(mp, i); in pci_dma_physwin()
1384 DEBUG3(DBG_BYPASS, mp->dmai_rdip, "newwin pfn[%x-%x] %x cks\n", in pci_dma_physwin()
1386 if (ret = pci_dma_newwin(dmareq, mp, cookie_no, in pci_dma_physwin()
1400 DEBUG3(DBG_BYPASS, mp->dmai_rdip, "newwin pfn[%x-%x] %x cks\n", in pci_dma_physwin()
1402 if (ret = pci_dma_newwin(dmareq, mp, cookie_no, win_pfn0_index, in pci_dma_physwin()
1406 pci_dma_adjust(dmareq, mp, mp->dmai_winlst); in pci_dma_physwin()
1407 mp->dmai_nwin = win_no; in pci_dma_physwin()
1408 mp->dmai_rflags |= DDI_DMA_CONSISTENT; in pci_dma_physwin()
1410 mp->dmai_rflags |= DMP_NOSYNC; in pci_dma_physwin()
1411 mp->dmai_flags |= DMAI_FLAGS_NOSYNC; in pci_dma_physwin()
1413 mp->dmai_rflags &= ~DDI_DMA_REDZONE; in pci_dma_physwin()
1414 cookie0_p = (ddi_dma_cookie_t *)(WINLST(mp) + 1); in pci_dma_physwin()
1415 mp->dmai_cookie = cookie0_p + 1; in pci_dma_physwin()
1416 mp->dmai_mapping = cookie0_p->dmac_laddress; in pci_dma_physwin()
1417 mp->dmai_ncookies = WINLST(mp)->win_ncookies; in pci_dma_physwin()
1418 mp->dmai_curcookie = 1; in pci_dma_physwin()
1420 pci_dma_freepfn(mp); in pci_dma_physwin()
1423 pci_dma_freewin(mp); in pci_dma_physwin()
1429 pci_dma_ctl(dev_info_t *dip, dev_info_t *rdip, ddi_dma_impl_t *mp, in pci_dma_ctl() argument
1438 pci_dma_win_t *win_p = mp->dmai_winlst; in pci_dma_ctl()
1440 if (off >= mp->dmai_object.dmao_size) in pci_dma_ctl()
1448 mp->dmai_offset = win_p->win_offset; in pci_dma_ctl()
1449 mp->dmai_size = win_p->win_size; in pci_dma_ctl()
1450 mp->dmai_mapping = cp->dmac_laddress; /* cookie0 start addr */ in pci_dma_ctl()
1457 mp->dmai_cookie = loop_cp + 1; in pci_dma_ctl()
1475 for (win_p = mp->dmai_winlst; win_p; win_p = win_p->win_next) { in pci_dma_ctl()
1551 ddi_dma_impl_t *mp) in pci_dvma_alloc_debug() argument
1566 ptr->mp = mp; in pci_dvma_alloc_debug()
1573 ptr->mp = mp; in pci_dvma_alloc_debug()
1584 ddi_dma_impl_t *mp) in pci_dvma_free_debug() argument
1599 ptr->mp = mp; in pci_dvma_free_debug()