Lines Matching refs:zdev
22 static int zpci_refresh_global(struct zpci_dev *zdev)
24 return zpci_refresh_trans((u64) zdev->fh << 32, zdev->start_dma,
25 zdev->iommu_pages * PAGE_SIZE);
133 static int __dma_update_trans(struct zpci_dev *zdev, unsigned long pa,
145 spin_lock_irqsave(&zdev->dma_table_lock, irq_flags);
146 if (!zdev->dma_table) {
152 entry = dma_walk_cpu_trans(zdev->dma_table, dma_addr);
168 entry = dma_walk_cpu_trans(zdev->dma_table, dma_addr);
175 spin_unlock_irqrestore(&zdev->dma_table_lock, irq_flags);
179 static int __dma_purge_tlb(struct zpci_dev *zdev, dma_addr_t dma_addr,
186 * With zdev->tlb_refresh == 0, rpcit is not required to establish new
193 if (!zdev->tlb_refresh)
200 ret = zpci_refresh_trans((u64) zdev->fh << 32, dma_addr,
204 if (zpci_refresh_global(zdev))
207 spin_lock_irqsave(&zdev->iommu_bitmap_lock, irqflags);
208 bitmap_andnot(zdev->iommu_bitmap, zdev->iommu_bitmap,
209 zdev->lazy_bitmap, zdev->iommu_pages);
210 bitmap_zero(zdev->lazy_bitmap, zdev->iommu_pages);
211 spin_unlock_irqrestore(&zdev->iommu_bitmap_lock, irqflags);
218 static int dma_update_trans(struct zpci_dev *zdev, unsigned long pa,
223 rc = __dma_update_trans(zdev, pa, dma_addr, size, flags);
227 rc = __dma_purge_tlb(zdev, dma_addr, size, flags);
229 __dma_update_trans(zdev, pa, dma_addr, size, ZPCI_PTE_INVALID);
263 struct zpci_dev *zdev = to_zpci(to_pci_dev(dev));
265 return iommu_area_alloc(zdev->iommu_bitmap, zdev->iommu_pages,
266 start, size, zdev->start_dma >> PAGE_SHIFT,
273 struct zpci_dev *zdev = to_zpci(to_pci_dev(dev));
276 spin_lock_irqsave(&zdev->iommu_bitmap_lock, flags);
277 offset = __dma_alloc_iommu(dev, zdev->next_bit, size);
281 if (zpci_refresh_global(zdev))
284 bitmap_andnot(zdev->iommu_bitmap, zdev->iommu_bitmap,
285 zdev->lazy_bitmap, zdev->iommu_pages);
286 bitmap_zero(zdev->lazy_bitmap, zdev->iommu_pages);
293 zdev->next_bit = offset + size;
294 spin_unlock_irqrestore(&zdev->iommu_bitmap_lock, flags);
296 return zdev->start_dma + offset * PAGE_SIZE;
299 spin_unlock_irqrestore(&zdev->iommu_bitmap_lock, flags);
305 struct zpci_dev *zdev = to_zpci(to_pci_dev(dev));
308 offset = (dma_addr - zdev->start_dma) >> PAGE_SHIFT;
310 spin_lock_irqsave(&zdev->iommu_bitmap_lock, flags);
311 if (!zdev->iommu_bitmap)
315 bitmap_clear(zdev->iommu_bitmap, offset, size);
317 bitmap_set(zdev->lazy_bitmap, offset, size);
320 spin_unlock_irqrestore(&zdev->iommu_bitmap_lock, flags);
338 struct zpci_dev *zdev = to_zpci(to_pci_dev(dev));
359 ret = dma_update_trans(zdev, pa, dma_addr, size, flags);
363 atomic64_add(nr_pages, &zdev->mapped_pages);
378 struct zpci_dev *zdev = to_zpci(to_pci_dev(dev));
383 ret = dma_update_trans(zdev, 0, dma_addr, npages * PAGE_SIZE,
391 atomic64_add(npages, &zdev->unmapped_pages);
399 struct zpci_dev *zdev = to_zpci(to_pci_dev(dev));
416 atomic64_add(size / PAGE_SIZE, &zdev->allocated_pages);
426 struct zpci_dev *zdev = to_zpci(to_pci_dev(dev));
429 atomic64_sub(size / PAGE_SIZE, &zdev->allocated_pages);
440 struct zpci_dev *zdev = to_zpci(to_pci_dev(dev));
457 ret = __dma_update_trans(zdev, pa, dma_addr,
464 ret = __dma_purge_tlb(zdev, dma_addr_base, size, flags);
469 atomic64_add(nr_pages, &zdev->mapped_pages);
474 dma_update_trans(zdev, 0, dma_addr_base, dma_addr - dma_addr_base,
556 int zpci_dma_init_device(struct zpci_dev *zdev)
565 WARN_ON(zdev->s390_domain);
567 spin_lock_init(&zdev->iommu_bitmap_lock);
568 spin_lock_init(&zdev->dma_table_lock);
570 zdev->dma_table = dma_alloc_cpu_table();
571 if (!zdev->dma_table) {
582 * Also set zdev->end_dma to the actual end address of the usable
585 zdev->start_dma = PAGE_ALIGN(zdev->start_dma);
586 zdev->iommu_size = min3((u64) high_memory,
587 ZPCI_TABLE_SIZE_RT - zdev->start_dma,
588 zdev->end_dma - zdev->start_dma + 1);
589 zdev->end_dma = zdev->start_dma + zdev->iommu_size - 1;
590 zdev->iommu_pages = zdev->iommu_size >> PAGE_SHIFT;
591 zdev->iommu_bitmap = bitmap_vzalloc(zdev->iommu_pages, GFP_KERNEL);
592 if (!zdev->iommu_bitmap) {
597 zdev->lazy_bitmap = bitmap_vzalloc(zdev->iommu_pages, GFP_KERNEL);
598 if (!zdev->lazy_bitmap) {
604 rc = zpci_register_ioat(zdev, 0, zdev->start_dma, zdev->end_dma,
605 (u64) zdev->dma_table);
611 vfree(zdev->iommu_bitmap);
612 zdev->iommu_bitmap = NULL;
613 vfree(zdev->lazy_bitmap);
614 zdev->lazy_bitmap = NULL;
616 dma_free_cpu_table(zdev->dma_table);
617 zdev->dma_table = NULL;
622 void zpci_dma_exit_device(struct zpci_dev *zdev)
629 WARN_ON(zdev->s390_domain);
631 if (zpci_unregister_ioat(zdev, 0))
634 dma_cleanup_tables(zdev->dma_table);
635 zdev->dma_table = NULL;
636 vfree(zdev->iommu_bitmap);
637 zdev->iommu_bitmap = NULL;
638 vfree(zdev->lazy_bitmap);
639 zdev->lazy_bitmap = NULL;
641 zdev->next_bit = 0;