aboutsummaryrefslogtreecommitdiffstats
path: root/lib/swiotlb.c
diff options
context:
space:
mode:
authorJohn W. Linville <linville@tuxdriver.com>2005-09-29 17:44:23 -0400
committerTony Luck <tony.luck@intel.com>2005-09-29 17:44:23 -0400
commit878a97cfd7014b01285db09f52f9881ffe4cb608 (patch)
tree19f19873602a559a351d669ee09988e8ce8bfa6e /lib/swiotlb.c
parent8270f3f1a605c83b3aa516c1eaed209fe0884e84 (diff)
[PATCH] swiotlb: support syncing sub-ranges of mappings
This patch implements swiotlb_sync_single_range_for_{cpu,device}. This is intended to support an x86_64 implementation of dma_sync_single_range_for_{cpu,device}. Signed-off-by: John W. Linville <linville@tuxdriver.com> Signed-off-by: Tony Luck <tony.luck@intel.com>
Diffstat (limited to 'lib/swiotlb.c')
-rw-r--r--lib/swiotlb.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/lib/swiotlb.c b/lib/swiotlb.c
index 9719a14649e7..566791b3f583 100644
--- a/lib/swiotlb.c
+++ b/lib/swiotlb.c
@@ -623,6 +623,37 @@ swiotlb_sync_single_for_device(struct device *hwdev, dma_addr_t dev_addr,
623} 623}
624 624
625/* 625/*
626 * Same as above, but for a sub-range of the mapping.
627 */
628static inline void
629swiotlb_sync_single_range(struct device *hwdev, dma_addr_t dev_addr,
630 unsigned long offset, size_t size, int dir)
631{
632 char *dma_addr = phys_to_virt(dev_addr) + offset;
633
634 if (dir == DMA_NONE)
635 BUG();
636 if (dma_addr >= io_tlb_start && dma_addr < io_tlb_end)
637 sync_single(hwdev, dma_addr, size, dir);
638 else if (dir == DMA_FROM_DEVICE)
639 mark_clean(dma_addr, size);
640}
641
642void
643swiotlb_sync_single_range_for_cpu(struct device *hwdev, dma_addr_t dev_addr,
644 unsigned long offset, size_t size, int dir)
645{
646 swiotlb_sync_single_range(hwdev, dev_addr, offset, size, dir);
647}
648
649void
650swiotlb_sync_single_range_for_device(struct device *hwdev, dma_addr_t dev_addr,
651 unsigned long offset, size_t size, int dir)
652{
653 swiotlb_sync_single_range(hwdev, dev_addr, offset, size, dir);
654}
655
656/*
626 * Map a set of buffers described by scatterlist in streaming mode for DMA. 657 * Map a set of buffers described by scatterlist in streaming mode for DMA.
627 * This is the scatter-gather version of the above swiotlb_map_single 658 * This is the scatter-gather version of the above swiotlb_map_single
628 * interface. Here the scatter gather list elements are each tagged with the 659 * interface. Here the scatter gather list elements are each tagged with the
@@ -750,6 +781,8 @@ EXPORT_SYMBOL(swiotlb_map_sg);
750EXPORT_SYMBOL(swiotlb_unmap_sg); 781EXPORT_SYMBOL(swiotlb_unmap_sg);
751EXPORT_SYMBOL(swiotlb_sync_single_for_cpu); 782EXPORT_SYMBOL(swiotlb_sync_single_for_cpu);
752EXPORT_SYMBOL(swiotlb_sync_single_for_device); 783EXPORT_SYMBOL(swiotlb_sync_single_for_device);
784EXPORT_SYMBOL_GPL(swiotlb_sync_single_range_for_cpu);
785EXPORT_SYMBOL_GPL(swiotlb_sync_single_range_for_device);
753EXPORT_SYMBOL(swiotlb_sync_sg_for_cpu); 786EXPORT_SYMBOL(swiotlb_sync_sg_for_cpu);
754EXPORT_SYMBOL(swiotlb_sync_sg_for_device); 787EXPORT_SYMBOL(swiotlb_sync_sg_for_device);
755EXPORT_SYMBOL(swiotlb_dma_mapping_error); 788EXPORT_SYMBOL(swiotlb_dma_mapping_error);