コード例 #1
0
void ___dma_page_dev_to_cpu(struct page *page, unsigned long off,
	size_t size, enum dma_data_direction dir)
{
	unsigned long paddr = page_to_phys(page) + off;

	/* FIXME: non-speculating: not required */
	/* don't bother invalidating if DMA to device */
	if (dir != DMA_TO_DEVICE)
		outer_inv_range(paddr, paddr + size);

	dma_cache_maint_page(page, off, size, dir, dmac_unmap_area);
}
コード例 #2
0
ファイル: dma-mapping.c プロジェクト: 1703011/asuswrt-merlin
void BCMFASTPATH_HOST ___dma_page_cpu_to_dev(struct page *page, unsigned long off,
	size_t size, enum dma_data_direction dir)
{
	unsigned long paddr;

	dma_cache_maint_page(page, off, size, dir, dmac_map_area);

	paddr = page_to_phys(page) + off;
	if (dir == DMA_FROM_DEVICE) {
		outer_inv_range(paddr, paddr + size);
	} else {
		outer_clean_range(paddr, paddr + size);
	}
}
コード例 #3
0
ファイル: dma-mapping.c プロジェクト: WayWingsDev/gopro-linux
void ___dma_page_cpu_to_dev(struct page *page, unsigned long off,
                            size_t size, enum dma_data_direction dir)
{
    unsigned long paddr;

    dma_cache_maint_page(page, off, size, dir, dmac_map_area);

    paddr = page_to_phys(page) + off;
    if (dir == DMA_FROM_DEVICE) {
        outer_inv_range(paddr, paddr + size);
    } else {
        outer_clean_range(paddr, paddr + size);
    }
    /* FIXME: non-speculating: flush on bidirectional mappings? */
}
コード例 #4
0
ファイル: dma-mapping.c プロジェクト: WayWingsDev/gopro-linux
void ___dma_page_dev_to_cpu(struct page *page, unsigned long off,
                            size_t size, enum dma_data_direction dir)
{
    unsigned long paddr = page_to_phys(page) + off;

    /* FIXME: non-speculating: not required */
    /* don't bother invalidating if DMA to device */
    if (dir != DMA_TO_DEVICE)
        outer_inv_range(paddr, paddr + size);

    dma_cache_maint_page(page, off, size, dir, dmac_unmap_area);

    /*
     * Mark the D-cache clean for this page to avoid extra flushing.
     */
    if (dir != DMA_TO_DEVICE && off == 0 && size >= PAGE_SIZE)
        set_bit(PG_dcache_clean, &page->flags);
}
コード例 #5
0
ファイル: dma-mapping.c プロジェクト: 1703011/asuswrt-merlin
void ___dma_page_dev_to_cpu(struct page *page, unsigned long off,
	size_t size, enum dma_data_direction dir)
{
	unsigned long paddr = page_to_phys(page) + off;

	/* don't bother invalidating if DMA to device */
	if (dir != DMA_TO_DEVICE)
		outer_inv_range(paddr, paddr + size);

	dma_cache_maint_page(page, off, size, dir, dmac_unmap_area);
#ifdef CONFIG_BCM47XX
	/*
	 * Merged from Linux-2.6.37
	 * Mark the D-cache clean for this page to avoid extra flushing.
	 */
	if (dir != DMA_TO_DEVICE && off == 0 && size >= PAGE_SIZE)
		set_bit(PG_dcache_clean, &page->flags);
#endif /* CONFIG_BCM47XX */
}