Lines Matching refs:mp

357 iommu_remove_mappings(ddi_dma_impl_t *mp)
363 ioaddr_t ioaddr = mp->dmai_mapping & ~IOMMU_PAGEOFFSET;
364 pgcnt_t npages = mp->dmai_ndvmapages;
365 struct dma_impl_priv *mppriv = (struct dma_impl_priv *)mp;
377 ioaddr = mp->dmai_mapping & ~IOMMU_PAGEOFFSET;
378 npages = mp->dmai_ndvmapages;
417 iommu_create_vaddr_mappings(ddi_dma_impl_t *mp, uintptr_t addr)
427 struct dma_impl_priv *mppriv = (struct dma_impl_priv *)mp;
440 offset = (uint_t)(mp->dmai_mapping & IOMMU_PAGEOFFSET);
441 npages = iommu_btopr(mp->dmai_size + offset);
442 ioaddr = (ioaddr_t)(mp->dmai_mapping & ~IOMMU_PAGEOFFSET);
446 as = mp->dmai_object.dmao_obj.virt_obj.v_as;
455 if (mp->dmai_rflags & DDI_DMA_CONSISTENT) {
456 mp->dmai_rflags |= DMP_NOSYNC;
465 iomemp->rdip = mp->dmai_rdip;
562 iommu_remove_mappings(mp);
569 iommu_create_pp_mappings(ddi_dma_impl_t *mp, page_t *pp, page_t **pplist)
577 struct dma_impl_priv *mppriv = (struct dma_impl_priv *)mp;
591 offset = (uint_t)(mp->dmai_mapping & IOMMU_PAGEOFFSET);
592 npages = iommu_btopr(mp->dmai_size + offset);
593 ioaddr = (ioaddr_t)(mp->dmai_mapping & ~IOMMU_PAGEOFFSET);
601 if (mp->dmai_rflags & DDI_DMA_CONSISTENT) {
603 mp->dmai_rflags |= DMP_NOSYNC;
612 iomemp->rdip = mp->dmai_rdip;
740 ddi_dma_impl_t *mp;
780 mp = (ddi_dma_impl_t *)mppriv;
784 ddi_get_name(dip), (void *)mp, addrhigh, addrlow,
787 mp->dmai_rdip = rdip;
788 mp->dmai_minxfer = (uint_t)dma_attr->dma_attr_minxfer;
789 mp->dmai_burstsizes = (uint_t)dma_attr->dma_attr_burstsizes;
790 mp->dmai_attr = *dma_attr;
795 mp->dmai_rflags |= DMP_NOLIMIT;
800 *handlep = (ddi_dma_handle_t)mp;
864 ddi_dma_impl_t *mp = (ddi_dma_impl_t *)handle;
865 struct dma_impl_priv *mppriv = (struct dma_impl_priv *)mp;
872 if (mp->dmai_inuse)
875 dma_attr = &mp->dmai_attr;
877 if (!(mp->dmai_rflags & DMP_NOLIMIT)) {
882 mp->dmai_inuse = 1;
883 mp->dmai_offset = 0;
884 mp->dmai_rflags = (dmareq->dmar_flags & DMP_DDIFLAGS) |
885 (mp->dmai_rflags & DMP_NOLIMIT);
924 if (mp->dmai_rflags & DDI_DMA_PARTIAL) {
948 mp->dmai_minfo = (void *)pplist;
949 mp->dmai_rflags |= DMP_SHADOW;
952 mp->dmai_rflags ^= DDI_DMA_PARTIAL;
963 * save dmareq-object, size and npages into mp
965 mp->dmai_object = dmareq->dmar_object;
966 mp->dmai_size = size;
967 mp->dmai_ndvmapages = npages;
969 if (mp->dmai_rflags & DMP_NOLIMIT) {
995 if (mp->dmai_rflags & DDI_DMA_CONSISTENT) {
996 mp->dmai_rflags |= DMP_NOSYNC;
1001 mp->dmai_rflags ^= DDI_DMA_PARTIAL;
1013 mp->dmai_mapping = (ioaddr_t)(ioaddr + offset);
1014 mp->dmai_nwin = 0;
1017 cp->dmac_address = (ioaddr_t)mp->dmai_mapping;
1018 cp->dmac_size = mp->dmai_size;
1030 iomemp->rdip = mp->dmai_rdip;
1064 mp->dmai_mapping = ioaddr + offset;
1065 ASSERT(mp->dmai_mapping >= softsp->iommu_dvma_base);
1072 rval = iommu_create_vaddr_mappings(mp,
1077 rval = iommu_create_pp_mappings(mp, pp, pplist);
1084 cp->dmac_address = (ioaddr_t)mp->dmai_mapping;
1085 cp->dmac_size = mp->dmai_size;
1089 if (mp->dmai_rflags & DDI_DMA_PARTIAL) {
1090 size = iommu_ptob(mp->dmai_ndvmapages - iommu_btopr(offset));
1091 mp->dmai_nwin =
1095 mp->dmai_nwin = 0;
1103 if (mp->dmai_rflags & DMP_NOLIMIT) {
1117 mp->dmai_inuse = 0;
1129 ddi_dma_impl_t *mp = (ddi_dma_impl_t *)handle;
1130 struct dma_impl_priv *mppriv = (struct dma_impl_priv *)mp;
1134 addr = (ioaddr_t)(mp->dmai_mapping & ~IOMMU_PAGEOFFSET);
1135 npages = mp->dmai_ndvmapages;
1139 "unbinding addr %x for %x pages\n", addr, mp->dmai_ndvmapages));
1142 if (!(mp->dmai_rflags & DDI_DMA_CONSISTENT)) {
1152 iommu_remove_mappings(mp);
1156 if (mp->dmai_rflags & DMP_NOLIMIT)
1161 mp->dmai_ndvmapages = 0;
1162 mp->dmai_inuse = 0;
1163 mp->dmai_minfo = NULL;
1177 ddi_dma_impl_t *mp = (ddi_dma_impl_t *)handle;
1178 struct dma_impl_priv *mppriv = (struct dma_impl_priv *)mp;
1180 if (!(mp->dmai_rflags & DDI_DMA_CONSISTENT)) {
1181 sync_stream_buf(mppriv->softsp, mp->dmai_mapping,
1182 mp->dmai_ndvmapages, (int *)&mppriv->sync_flag,
1194 ddi_dma_impl_t *mp = (ddi_dma_impl_t *)handle;
1200 offset = mp->dmai_mapping & IOMMU_PAGEOFFSET;
1201 winsize = iommu_ptob(mp->dmai_ndvmapages - iommu_btopr(offset));
1209 if (win >= mp->dmai_nwin)
1213 if (newoff > mp->dmai_object.dmao_size - mp->dmai_minxfer)
1219 cookiep->dmac_address = (ioaddr_t)mp->dmai_mapping;
1220 cookiep->dmac_size = mp->dmai_size;
1225 if (newoff == mp->dmai_offset) {
1232 if ((rval = iommu_map_window(mp, newoff, winsize)) != DDI_SUCCESS)
1238 cookiep->dmac_size = mp->dmai_size;
1244 iommu_map_window(ddi_dma_impl_t *mp, off_t newoff, size_t winsize)
1253 iommu_remove_mappings(mp);
1256 mp->dmai_offset = newoff;
1257 mp->dmai_size = mp->dmai_object.dmao_size - newoff;
1258 mp->dmai_size = MIN(mp->dmai_size, winsize);
1260 if (mp->dmai_object.dmao_type == DMA_OTYP_VADDR ||
1261 mp->dmai_object.dmao_type == DMA_OTYP_BUFVADDR) {
1262 if (mp->dmai_rflags & DMP_SHADOW) {
1263 pplist = (struct page **)mp->dmai_minfo;
1268 mp->dmai_object.dmao_obj.virt_obj.v_addr;
1273 pp = mp->dmai_object.dmao_obj.pp_obj.pp_pp;
1283 if (iommu_create_vaddr_mappings(mp, addr) < 0)
1286 if (iommu_create_pp_mappings(mp, pp, pplist) < 0)
1293 if (!(mp->dmai_rflags & DDI_DMA_CONSISTENT)) {
1294 struct dma_impl_priv *mppriv = (struct dma_impl_priv *)mp;
1296 sync_stream_buf(mppriv->softsp, mp->dmai_mapping,
1297 mp->dmai_ndvmapages, (int *)&mppriv->sync_flag,
1313 ddi_dma_impl_t *mp = (ddi_dma_impl_t *)handle;
1315 DPRINTF(IOMMU_DMAMCTL_DEBUG, ("dma_mctl: handle %p ", (void *)mp));
1320 struct dma_impl_priv *mppriv = (struct dma_impl_priv *)mp;
1323 &mp->dmai_burstsizes, (uint_t)*lenp, &mp->dmai_minxfer,
1364 mp = kmem_zalloc(sizeof (*mp), KM_SLEEP);
1365 mp->dmai_rflags = DMP_BYPASSNEXUS;
1366 mp->dmai_rdip = rdip;
1367 mp->dmai_minxfer = dma_lim->dlim_minxfer;
1368 mp->dmai_burstsizes = dma_lim->dlim_burstsizes;
1380 kmem_free(mp, sizeof (*mp));
1410 mp->dmai_mapping = ioaddr;
1411 mp->dmai_ndvmapages = np;
1414 mp->dmai_nexus_private = (caddr_t)iommu_fast_dvma;
1416 *handlep = (ddi_dma_handle_t)mp;
1420 (void *)mp, mp->dmai_mapping, mp->dmai_ndvmapages));
1427 ddi_dma_impl_t *mp = (ddi_dma_impl_t *)handle;
1428 uint_t np = npages = mp->dmai_ndvmapages;
1429 ioaddr_t ioaddr = mp->dmai_mapping;
1432 mp->dmai_nexus_private;
1450 ioaddr = (ioaddr_t)mp->dmai_mapping;
1455 if (mp->dmai_rflags & DMP_NOLIMIT)
1462 kmem_free(mp, sizeof (*mp));
1506 ddi_dma_impl_t *mp = (ddi_dma_impl_t *)h;
1508 (struct fast_dvma *)mp->dmai_nexus_private;
1519 ioaddr = (ioaddr_t)(mp->dmai_mapping + iommu_ptob(index));
1528 iomemp->rdip = mp->dmai_rdip;
1543 if (mp->dmai_rflags & DDI_DMA_CONSISTENT)
1544 mp->dmai_rflags |= DMP_NOSYNC;
1589 ddi_dma_impl_t *mp = (ddi_dma_impl_t *)h;
1593 (struct fast_dvma *)mp->dmai_nexus_private;
1602 ioaddr = (ioaddr_t)(mp->dmai_mapping + iommu_ptob(index));
1625 "addr %p sync flag pfn %llx index %x page count %lx\n", (void *)mp,
1630 if ((mp->dmai_rflags & DMP_NOSYNC) != DMP_NOSYNC) {
1641 ddi_dma_impl_t *mp = (ddi_dma_impl_t *)h;
1645 (struct fast_dvma *)mp->dmai_nexus_private;
1649 if ((mp->dmai_rflags & DMP_NOSYNC) == DMP_NOSYNC)
1653 ioaddr = (ioaddr_t)(mp->dmai_mapping + iommu_ptob(index));
1657 "sync flag addr %p, sync flag pfn %llx\n", (void *)mp,