Release 4.14 arch/sh/kernel/dma-nommu.c
/*
* DMA mapping support for platforms lacking IOMMUs.
*
* Copyright (C) 2009 Paul Mundt
*
* This file is subject to the terms and conditions of the GNU General Public
* License. See the file "COPYING" in the main directory of this archive
* for more details.
*/
#include <linux/dma-mapping.h>
#include <linux/io.h>
static dma_addr_t nommu_map_page(struct device *dev, struct page *page,
unsigned long offset, size_t size,
enum dma_data_direction dir,
unsigned long attrs)
{
dma_addr_t addr = page_to_phys(page) + offset;
WARN_ON(size == 0);
if (!(attrs & DMA_ATTR_SKIP_CPU_SYNC))
dma_cache_sync(dev, page_address(page) + offset, size, dir);
return addr;
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Paul Mundt | 65 | 85.53% | 1 | 33.33% |
Alexander Duyck | 9 | 11.84% | 1 | 33.33% |
Krzysztof Kozlowski | 2 | 2.63% | 1 | 33.33% |
Total | 76 | 100.00% | 3 | 100.00% |
static int nommu_map_sg(struct device *dev, struct scatterlist *sg,
int nents, enum dma_data_direction dir,
unsigned long attrs)
{
struct scatterlist *s;
int i;
WARN_ON(nents == 0 || sg[0].length == 0);
for_each_sg(sg, s, nents, i) {
BUG_ON(!sg_page(s));
if (!(attrs & DMA_ATTR_SKIP_CPU_SYNC))
dma_cache_sync(dev, sg_virt(s), s->length, dir);
s->dma_address = sg_phys(s);
s->dma_length = s->length;
}
return nents;
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Paul Mundt | 106 | 90.60% | 1 | 33.33% |
Alexander Duyck | 9 | 7.69% | 1 | 33.33% |
Krzysztof Kozlowski | 2 | 1.71% | 1 | 33.33% |
Total | 117 | 100.00% | 3 | 100.00% |
#ifdef CONFIG_DMA_NONCOHERENT
static void nommu_sync_single(struct device *dev, dma_addr_t addr,
size_t size, enum dma_data_direction dir)
{
dma_cache_sync(dev, phys_to_virt(addr), size, dir);
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Paul Mundt | 35 | 100.00% | 1 | 100.00% |
Total | 35 | 100.00% | 1 | 100.00% |
static void nommu_sync_sg(struct device *dev, struct scatterlist *sg,
int nelems, enum dma_data_direction dir)
{
struct scatterlist *s;
int i;
for_each_sg(sg, s, nelems, i)
dma_cache_sync(dev, sg_virt(s), s->length, dir);
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Paul Mundt | 57 | 100.00% | 1 | 100.00% |
Total | 57 | 100.00% | 1 | 100.00% |
#endif
const struct dma_map_ops nommu_dma_ops = {
.alloc = dma_generic_alloc_coherent,
.free = dma_generic_free_coherent,
.map_page = nommu_map_page,
.map_sg = nommu_map_sg,
#ifdef CONFIG_DMA_NONCOHERENT
.sync_single_for_device = nommu_sync_single,
.sync_sg_for_device = nommu_sync_sg,
#endif
.is_phys = 1,
};
void __init no_iommu_init(void)
{
if (dma_ops)
return;
dma_ops = &nommu_dma_ops;
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Paul Mundt | 18 | 100.00% | 1 | 100.00% |
Total | 18 | 100.00% | 1 | 100.00% |
Overall Contributors
Person | Tokens | Prop | Commits | CommitProp |
Paul Mundt | 337 | 93.09% | 3 | 42.86% |
Alexander Duyck | 18 | 4.97% | 1 | 14.29% |
Krzysztof Kozlowski | 4 | 1.10% | 1 | 14.29% |
Andrzej Pietrasiewicz | 2 | 0.55% | 1 | 14.29% |
Bart Van Assche | 1 | 0.28% | 1 | 14.29% |
Total | 362 | 100.00% | 7 | 100.00% |
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.