|
@@ -50,14 +50,6 @@
|
|
|
*/
|
|
|
#define IO_TLB_MIN_SLABS ((1<<20) >> IO_TLB_SHIFT)
|
|
|
|
|
|
-/*
|
|
|
- * Enumeration for sync targets
|
|
|
- */
|
|
|
-enum dma_sync_target {
|
|
|
- SYNC_FOR_CPU = 0,
|
|
|
- SYNC_FOR_DEVICE = 1,
|
|
|
-};
|
|
|
-
|
|
|
int swiotlb_force;
|
|
|
|
|
|
/*
|
|
@@ -335,8 +327,8 @@ static int is_swiotlb_buffer(phys_addr_t paddr)
|
|
|
/*
|
|
|
* Bounce: copy the swiotlb buffer back to the original dma location
|
|
|
*/
|
|
|
-static void swiotlb_bounce(phys_addr_t phys, char *dma_addr, size_t size,
|
|
|
- enum dma_data_direction dir)
|
|
|
+void swiotlb_bounce(phys_addr_t phys, char *dma_addr, size_t size,
|
|
|
+ enum dma_data_direction dir)
|
|
|
{
|
|
|
unsigned long pfn = PFN_DOWN(phys);
|
|
|
|
|
@@ -372,6 +364,7 @@ static void swiotlb_bounce(phys_addr_t phys, char *dma_addr, size_t size,
|
|
|
memcpy(phys_to_virt(phys), dma_addr, size);
|
|
|
}
|
|
|
}
|
|
|
+EXPORT_SYMBOL_GPL(swiotlb_bounce);
|
|
|
|
|
|
void *swiotlb_tbl_map_single(struct device *hwdev, dma_addr_t tbl_dma_addr,
|
|
|
phys_addr_t phys, size_t size,
|
|
@@ -476,6 +469,7 @@ found:
|
|
|
|
|
|
return dma_addr;
|
|
|
}
|
|
|
+EXPORT_SYMBOL_GPL(swiotlb_tbl_map_single);
|
|
|
|
|
|
/*
|
|
|
* Allocates bounce buffer and returns its kernel virtual address.
|
|
@@ -493,7 +487,7 @@ map_single(struct device *hwdev, phys_addr_t phys, size_t size,
|
|
|
/*
|
|
|
* dma_addr is the kernel virtual address of the bounce buffer to unmap.
|
|
|
*/
|
|
|
-static void
|
|
|
+void
|
|
|
swiotlb_tbl_unmap_single(struct device *hwdev, char *dma_addr, size_t size,
|
|
|
enum dma_data_direction dir)
|
|
|
{
|
|
@@ -533,10 +527,12 @@ swiotlb_tbl_unmap_single(struct device *hwdev, char *dma_addr, size_t size,
|
|
|
}
|
|
|
spin_unlock_irqrestore(&io_tlb_lock, flags);
|
|
|
}
|
|
|
+EXPORT_SYMBOL_GPL(swiotlb_tbl_unmap_single);
|
|
|
|
|
|
-static void
|
|
|
+void
|
|
|
swiotlb_tbl_sync_single(struct device *hwdev, char *dma_addr, size_t size,
|
|
|
- enum dma_data_direction dir, int target)
|
|
|
+ enum dma_data_direction dir,
|
|
|
+ enum dma_sync_target target)
|
|
|
{
|
|
|
int index = (dma_addr - io_tlb_start) >> IO_TLB_SHIFT;
|
|
|
phys_addr_t phys = io_tlb_orig_addr[index];
|
|
@@ -560,6 +556,7 @@ swiotlb_tbl_sync_single(struct device *hwdev, char *dma_addr, size_t size,
|
|
|
BUG();
|
|
|
}
|
|
|
}
|
|
|
+EXPORT_SYMBOL_GPL(swiotlb_tbl_sync_single);
|
|
|
|
|
|
void *
|
|
|
swiotlb_alloc_coherent(struct device *hwdev, size_t size,
|
|
@@ -748,7 +745,8 @@ EXPORT_SYMBOL_GPL(swiotlb_unmap_page);
|
|
|
*/
|
|
|
static void
|
|
|
swiotlb_sync_single(struct device *hwdev, dma_addr_t dev_addr,
|
|
|
- size_t size, enum dma_data_direction dir, int target)
|
|
|
+ size_t size, enum dma_data_direction dir,
|
|
|
+ enum dma_sync_target target)
|
|
|
{
|
|
|
phys_addr_t paddr = dma_to_phys(hwdev, dev_addr);
|
|
|
|
|
@@ -877,7 +875,8 @@ EXPORT_SYMBOL(swiotlb_unmap_sg);
|
|
|
*/
|
|
|
static void
|
|
|
swiotlb_sync_sg(struct device *hwdev, struct scatterlist *sgl,
|
|
|
- int nelems, enum dma_data_direction dir, int target)
|
|
|
+ int nelems, enum dma_data_direction dir,
|
|
|
+ enum dma_sync_target target)
|
|
|
{
|
|
|
struct scatterlist *sg;
|
|
|
int i;
|