Lines Matching refs:zdev
24 static int zpci_refresh_global(struct zpci_dev *zdev)
26 return zpci_refresh_trans((u64) zdev->fh << 32, zdev->start_dma,
27 zdev->iommu_pages * PAGE_SIZE);
159 static int __dma_update_trans(struct zpci_dev *zdev, phys_addr_t pa,
170 if (!zdev->dma_table)
174 entry = dma_walk_cpu_trans(zdev->dma_table, dma_addr,
191 entry = dma_walk_cpu_trans(zdev->dma_table, dma_addr,
201 static int __dma_purge_tlb(struct zpci_dev *zdev, dma_addr_t dma_addr,
208 * With zdev->tlb_refresh == 0, rpcit is not required to establish new
215 if (!zdev->tlb_refresh)
222 ret = zpci_refresh_trans((u64) zdev->fh << 32, dma_addr,
226 if (zpci_refresh_global(zdev))
229 spin_lock_irqsave(&zdev->iommu_bitmap_lock, irqflags);
230 bitmap_andnot(zdev->iommu_bitmap, zdev->iommu_bitmap,
231 zdev->lazy_bitmap, zdev->iommu_pages);
232 bitmap_zero(zdev->lazy_bitmap, zdev->iommu_pages);
233 spin_unlock_irqrestore(&zdev->iommu_bitmap_lock, irqflags);
240 static int dma_update_trans(struct zpci_dev *zdev, phys_addr_t pa,
245 rc = __dma_update_trans(zdev, pa, dma_addr, size, flags);
249 rc = __dma_purge_tlb(zdev, dma_addr, size, flags);
251 __dma_update_trans(zdev, pa, dma_addr, size, ZPCI_PTE_INVALID);
285 struct zpci_dev *zdev = to_zpci(to_pci_dev(dev));
287 return iommu_area_alloc(zdev->iommu_bitmap, zdev->iommu_pages,
288 start, size, zdev->start_dma >> PAGE_SHIFT,
295 struct zpci_dev *zdev = to_zpci(to_pci_dev(dev));
298 spin_lock_irqsave(&zdev->iommu_bitmap_lock, flags);
299 offset = __dma_alloc_iommu(dev, zdev->next_bit, size);
303 if (zpci_refresh_global(zdev))
306 bitmap_andnot(zdev->iommu_bitmap, zdev->iommu_bitmap,
307 zdev->lazy_bitmap, zdev->iommu_pages);
308 bitmap_zero(zdev->lazy_bitmap, zdev->iommu_pages);
315 zdev->next_bit = offset + size;
316 spin_unlock_irqrestore(&zdev->iommu_bitmap_lock, flags);
318 return zdev->start_dma + offset * PAGE_SIZE;
321 spin_unlock_irqrestore(&zdev->iommu_bitmap_lock, flags);
327 struct zpci_dev *zdev = to_zpci(to_pci_dev(dev));
330 offset = (dma_addr - zdev->start_dma) >> PAGE_SHIFT;
332 spin_lock_irqsave(&zdev->iommu_bitmap_lock, flags);
333 if (!zdev->iommu_bitmap)
337 bitmap_clear(zdev->iommu_bitmap, offset, size);
339 bitmap_set(zdev->lazy_bitmap, offset, size);
342 spin_unlock_irqrestore(&zdev->iommu_bitmap_lock, flags);
360 struct zpci_dev *zdev = to_zpci(to_pci_dev(dev));
381 ret = dma_update_trans(zdev, pa, dma_addr, size, flags);
385 atomic64_add(nr_pages, &zdev->mapped_pages);
400 struct zpci_dev *zdev = to_zpci(to_pci_dev(dev));
405 ret = dma_update_trans(zdev, 0, dma_addr, npages * PAGE_SIZE,
413 atomic64_add(npages, &zdev->unmapped_pages);
421 struct zpci_dev *zdev = to_zpci(to_pci_dev(dev));
438 atomic64_add(size / PAGE_SIZE, &zdev->allocated_pages);
448 struct zpci_dev *zdev = to_zpci(to_pci_dev(dev));
451 atomic64_sub(size / PAGE_SIZE, &zdev->allocated_pages);
462 struct zpci_dev *zdev = to_zpci(to_pci_dev(dev));
479 ret = __dma_update_trans(zdev, pa, dma_addr,
486 ret = __dma_purge_tlb(zdev, dma_addr_base, size, flags);
491 atomic64_add(nr_pages, &zdev->mapped_pages);
496 dma_update_trans(zdev, 0, dma_addr_base, dma_addr - dma_addr_base,
579 int zpci_dma_init_device(struct zpci_dev *zdev)
589 WARN_ON(zdev->s390_domain);
591 spin_lock_init(&zdev->iommu_bitmap_lock);
593 zdev->dma_table = dma_alloc_cpu_table(GFP_KERNEL);
594 if (!zdev->dma_table) {
605 * Also set zdev->end_dma to the actual end address of the usable
612 zdev->start_dma = PAGE_ALIGN(zdev->start_dma);
613 zdev->iommu_size = min3(s390_iommu_aperture,
614 ZPCI_TABLE_SIZE_RT - zdev->start_dma,
615 zdev->end_dma - zdev->start_dma + 1);
616 zdev->end_dma = zdev->start_dma + zdev->iommu_size - 1;
617 zdev->iommu_pages = zdev->iommu_size >> PAGE_SHIFT;
618 zdev->iommu_bitmap = bitmap_vzalloc(zdev->iommu_pages, GFP_KERNEL);
619 if (!zdev->iommu_bitmap) {
624 zdev->lazy_bitmap = bitmap_vzalloc(zdev->iommu_pages, GFP_KERNEL);
625 if (!zdev->lazy_bitmap) {
631 if (zpci_register_ioat(zdev, 0, zdev->start_dma, zdev->end_dma,
632 virt_to_phys(zdev->dma_table), &status)) {
639 vfree(zdev->iommu_bitmap);
640 zdev->iommu_bitmap = NULL;
641 vfree(zdev->lazy_bitmap);
642 zdev->lazy_bitmap = NULL;
644 dma_free_cpu_table(zdev->dma_table);
645 zdev->dma_table = NULL;
650 int zpci_dma_exit_device(struct zpci_dev *zdev)
659 WARN_ON(zdev->s390_domain);
660 if (zdev_enabled(zdev))
661 cc = zpci_unregister_ioat(zdev, 0);
670 dma_cleanup_tables(zdev->dma_table);
671 zdev->dma_table = NULL;
672 vfree(zdev->iommu_bitmap);
673 zdev->iommu_bitmap = NULL;
674 vfree(zdev->lazy_bitmap);
675 zdev->lazy_bitmap = NULL;
676 zdev->next_bit = 0;