Lines Matching refs:iommu
58 struct iommu_struct *iommu; in sbus_iommu_init() local
65 iommu = kmalloc(sizeof(struct iommu_struct), GFP_KERNEL); in sbus_iommu_init()
66 if (!iommu) { in sbus_iommu_init()
71 iommu->regs = of_ioremap(&op->resource[0], 0, PAGE_SIZE * 3, in sbus_iommu_init()
73 if (!iommu->regs) { in sbus_iommu_init()
78 control = sbus_readl(&iommu->regs->control); in sbus_iommu_init()
83 sbus_writel(control, &iommu->regs->control); in sbus_iommu_init()
85 iommu_invalidate(iommu->regs); in sbus_iommu_init()
86 iommu->start = IOMMU_START; in sbus_iommu_init()
87 iommu->end = 0xffffffff; in sbus_iommu_init()
100 iommu->page_table = (iopte_t *)tmp; in sbus_iommu_init()
103 memset(iommu->page_table, 0, IOMMU_NPTES*sizeof(iopte_t)); in sbus_iommu_init()
107 base = __pa((unsigned long)iommu->page_table) >> 4; in sbus_iommu_init()
108 sbus_writel(base, &iommu->regs->base); in sbus_iommu_init()
109 iommu_invalidate(iommu->regs); in sbus_iommu_init()
117 bit_map_init(&iommu->usemap, bitmap, IOMMU_NPTES); in sbus_iommu_init()
122 iommu->usemap.num_colors = vac_cache_size >> PAGE_SHIFT; in sbus_iommu_init()
124 iommu->usemap.num_colors = 1; in sbus_iommu_init()
127 impl, vers, iommu->page_table, in sbus_iommu_init()
130 op->dev.archdata.iommu = iommu; in sbus_iommu_init()
179 struct iommu_struct *iommu = dev->archdata.iommu; in iommu_get_one() local
186 ioptex = bit_map_string_get(&iommu->usemap, npages, page_to_pfn(page)); in iommu_get_one()
189 busa0 = iommu->start + (ioptex << PAGE_SHIFT); in iommu_get_one()
190 iopte0 = &iommu->page_table[ioptex]; in iommu_get_one()
196 iommu_invalidate_page(iommu->regs, busa); in iommu_get_one()
285 struct iommu_struct *iommu = dev->archdata.iommu; in iommu_release_one() local
289 BUG_ON(busa < iommu->start); in iommu_release_one()
290 ioptex = (busa - iommu->start) >> PAGE_SHIFT; in iommu_release_one()
292 iopte_val(iommu->page_table[ioptex + i]) = 0; in iommu_release_one()
293 iommu_invalidate_page(iommu->regs, busa); in iommu_release_one()
296 bit_map_clear(&iommu->usemap, ioptex, npages); in iommu_release_one()
327 struct iommu_struct *iommu = dev->archdata.iommu; in iommu_map_dma_area() local
329 iopte_t *iopte = iommu->page_table; in iommu_map_dma_area()
338 ioptex = bit_map_string_get(&iommu->usemap, len >> PAGE_SHIFT, in iommu_map_dma_area()
385 iommu_invalidate(iommu->regs); in iommu_map_dma_area()
387 *pba = iommu->start + (ioptex << PAGE_SHIFT); in iommu_map_dma_area()
393 struct iommu_struct *iommu = dev->archdata.iommu; in iommu_unmap_dma_area() local
394 iopte_t *iopte = iommu->page_table; in iommu_unmap_dma_area()
396 int ioptex = (busa - iommu->start) >> PAGE_SHIFT; in iommu_unmap_dma_area()
408 iommu_invalidate(iommu->regs); in iommu_unmap_dma_area()
409 bit_map_clear(&iommu->usemap, ioptex, len >> PAGE_SHIFT); in iommu_unmap_dma_area()