Lines Matching refs:mapping

3  *  linux/arch/arm/mm/dma-mapping.c
7 * DMA uncached mapping support.
420 * Clear previous low-memory mapping to ensure that the
783 * Create userspace mapping for the DMA-coherent memory.
801 * Free a buffer as defined by the above mapping.
910 * Use the driver DMA support - see dma-mapping.h (dma_sync_*)
1099 static int extend_iommu_mapping(struct dma_iommu_mapping *mapping);
1101 static inline dma_addr_t __alloc_iova(struct dma_iommu_mapping *mapping,
1107 size_t mapping_size = mapping->bits << PAGE_SHIFT;
1118 spin_lock_irqsave(&mapping->lock, flags);
1119 for (i = 0; i < mapping->nr_bitmaps; i++) {
1120 start = bitmap_find_next_zero_area(mapping->bitmaps[i],
1121 mapping->bits, 0, count, align);
1123 if (start > mapping->bits)
1126 bitmap_set(mapping->bitmaps[i], start, count);
1131 * No unused range found. Try to extend the existing mapping
1135 if (i == mapping->nr_bitmaps) {
1136 if (extend_iommu_mapping(mapping)) {
1137 spin_unlock_irqrestore(&mapping->lock, flags);
1141 start = bitmap_find_next_zero_area(mapping->bitmaps[i],
1142 mapping->bits, 0, count, align);
1144 if (start > mapping->bits) {
1145 spin_unlock_irqrestore(&mapping->lock, flags);
1149 bitmap_set(mapping->bitmaps[i], start, count);
1151 spin_unlock_irqrestore(&mapping->lock, flags);
1153 iova = mapping->base + (mapping_size * i);
1159 static inline void __free_iova(struct dma_iommu_mapping *mapping,
1163 size_t mapping_size = mapping->bits << PAGE_SHIFT;
1171 bitmap_index = (u32) (addr - mapping->base) / (u32) mapping_size;
1172 BUG_ON(addr < mapping->base || bitmap_index > mapping->extensions);
1174 bitmap_base = mapping->base + mapping_size * bitmap_index;
1189 spin_lock_irqsave(&mapping->lock, flags);
1190 bitmap_clear(mapping->bitmaps[bitmap_index], start, count);
1191 spin_unlock_irqrestore(&mapping->lock, flags);
1307 * Create a mapping in device IO address space for specified pages
1313 struct dma_iommu_mapping *mapping = to_dma_iommu_mapping(dev);
1318 dma_addr = __alloc_iova(mapping, size);
1335 ret = iommu_map(mapping->domain, iova, phys, len,
1344 iommu_unmap(mapping->domain, dma_addr, iova-dma_addr);
1345 __free_iova(mapping, dma_addr, size);
1351 struct dma_iommu_mapping *mapping = to_dma_iommu_mapping(dev);
1360 iommu_unmap(mapping->domain, iova, size);
1361 __free_iova(mapping, iova, size);
1520 * free a page as defined by the above mapping.
1582 struct dma_iommu_mapping *mapping = to_dma_iommu_mapping(dev);
1592 iova_base = iova = __alloc_iova(mapping, size);
1605 ret = iommu_map(mapping->domain, iova, phys, len, prot);
1615 iommu_unmap(mapping->domain, iova_base, count * PAGE_SIZE);
1616 __free_iova(mapping, iova_base, size);
1806 struct dma_iommu_mapping *mapping = to_dma_iommu_mapping(dev);
1810 dma_addr = __alloc_iova(mapping, len);
1816 ret = iommu_map(mapping->domain, dma_addr, page_to_phys(page), len, prot);
1822 __free_iova(mapping, dma_addr, len);
1858 struct dma_iommu_mapping *mapping = to_dma_iommu_mapping(dev);
1866 iommu_unmap(mapping->domain, iova, len);
1867 __free_iova(mapping, iova, len);
1882 struct dma_iommu_mapping *mapping = to_dma_iommu_mapping(dev);
1884 struct page *page = phys_to_page(iommu_iova_to_phys(mapping->domain, iova));
1894 iommu_unmap(mapping->domain, iova, len);
1895 __free_iova(mapping, iova, len);
1909 struct dma_iommu_mapping *mapping = to_dma_iommu_mapping(dev);
1916 dma_addr = __alloc_iova(mapping, len);
1922 ret = iommu_map(mapping->domain, dma_addr, addr, len, prot);
1928 __free_iova(mapping, dma_addr, len);
1943 struct dma_iommu_mapping *mapping = to_dma_iommu_mapping(dev);
1951 iommu_unmap(mapping->domain, iova, len);
1952 __free_iova(mapping, iova, len);
1958 struct dma_iommu_mapping *mapping = to_dma_iommu_mapping(dev);
1960 struct page *page = phys_to_page(iommu_iova_to_phys(mapping->domain, iova));
1972 struct dma_iommu_mapping *mapping = to_dma_iommu_mapping(dev);
1974 struct page *page = phys_to_page(iommu_iova_to_phys(mapping->domain, iova));
2029 * Creates a mapping structure which holds information about used/unused
2031 * mapping with IOMMU aware functions.
2033 * The client device need to be attached to the mapping with
2041 struct dma_iommu_mapping *mapping;
2057 mapping = kzalloc(sizeof(struct dma_iommu_mapping), GFP_KERNEL);
2058 if (!mapping)
2061 mapping->bitmap_size = bitmap_size;
2062 mapping->bitmaps = kcalloc(extensions, sizeof(unsigned long *),
2064 if (!mapping->bitmaps)
2067 mapping->bitmaps[0] = kzalloc(bitmap_size, GFP_KERNEL);
2068 if (!mapping->bitmaps[0])
2071 mapping->nr_bitmaps = 1;
2072 mapping->extensions = extensions;
2073 mapping->base = base;
2074 mapping->bits = BITS_PER_BYTE * bitmap_size;
2076 spin_lock_init(&mapping->lock);
2078 mapping->domain = iommu_domain_alloc(bus);
2079 if (!mapping->domain)
2082 kref_init(&mapping->kref);
2083 return mapping;
2085 kfree(mapping->bitmaps[0]);
2087 kfree(mapping->bitmaps);
2089 kfree(mapping);
2098 struct dma_iommu_mapping *mapping =
2101 iommu_domain_free(mapping->domain);
2102 for (i = 0; i < mapping->nr_bitmaps; i++)
2103 kfree(mapping->bitmaps[i]);
2104 kfree(mapping->bitmaps);
2105 kfree(mapping);
2108 static int extend_iommu_mapping(struct dma_iommu_mapping *mapping)
2112 if (mapping->nr_bitmaps >= mapping->extensions)
2115 next_bitmap = mapping->nr_bitmaps;
2116 mapping->bitmaps[next_bitmap] = kzalloc(mapping->bitmap_size,
2118 if (!mapping->bitmaps[next_bitmap])
2121 mapping->nr_bitmaps++;
2126 void arm_iommu_release_mapping(struct dma_iommu_mapping *mapping)
2128 if (mapping)
2129 kref_put(&mapping->kref, release_iommu_mapping);
2134 struct dma_iommu_mapping *mapping)
2138 err = iommu_attach_device(mapping->domain, dev);
2142 kref_get(&mapping->kref);
2143 to_dma_iommu_mapping(dev) = mapping;
2152 * @mapping: io address space mapping structure (returned from
2155 * Attaches specified io address space mapping to the provided device.
2160 * mapping.
2163 struct dma_iommu_mapping *mapping)
2167 err = __arm_iommu_attach_device(dev, mapping);
2185 struct dma_iommu_mapping *mapping;
2187 mapping = to_dma_iommu_mapping(dev);
2188 if (!mapping) {
2193 iommu_detach_device(mapping->domain, dev);
2194 kref_put(&mapping->kref, release_iommu_mapping);
2210 struct dma_iommu_mapping *mapping;
2215 mapping = arm_iommu_create_mapping(dev->bus, dma_base, size);
2216 if (IS_ERR(mapping)) {
2217 pr_warn("Failed to create %llu-byte IOMMU mapping for device %s\n",
2222 if (__arm_iommu_attach_device(dev, mapping)) {
2225 arm_iommu_release_mapping(mapping);
2234 struct dma_iommu_mapping *mapping = to_dma_iommu_mapping(dev);
2236 if (!mapping)
2240 arm_iommu_release_mapping(mapping);