1/* Glue code to lib/swiotlb.c */ 2 3#include <linux/pci.h> 4#include <linux/cache.h> 5#include <linux/module.h> 6#include <linux/dma-mapping.h> 7 8#include <asm/proto.h> 9#include <asm/swiotlb.h> 10#include <asm/dma.h> 11 12int swiotlb __read_mostly; 13EXPORT_SYMBOL(swiotlb); 14 15const struct dma_mapping_ops swiotlb_dma_ops = { 16 .mapping_error = swiotlb_dma_mapping_error, 17 .alloc_coherent = swiotlb_alloc_coherent, 18 .free_coherent = swiotlb_free_coherent, 19 .map_single = swiotlb_map_single, 20 .unmap_single = swiotlb_unmap_single, 21 .sync_single_for_cpu = swiotlb_sync_single_for_cpu, 22 .sync_single_for_device = swiotlb_sync_single_for_device, 23 .sync_single_range_for_cpu = swiotlb_sync_single_range_for_cpu, 24 .sync_single_range_for_device = swiotlb_sync_single_range_for_device, 25 .sync_sg_for_cpu = swiotlb_sync_sg_for_cpu, 26 .sync_sg_for_device = swiotlb_sync_sg_for_device, 27 .map_sg = swiotlb_map_sg, 28 .unmap_sg = swiotlb_unmap_sg, 29 .dma_supported = NULL, 30}; 31 32void __init pci_swiotlb_init(void) 33{ 34 /* don't initialize swiotlb if iommu=off (no_iommu=1) */ 35 if (!iommu_detected && !no_iommu && end_pfn > MAX_DMA32_PFN) 36 swiotlb = 1; 37 if (swiotlb_force) 38 swiotlb = 1; 39 if (swiotlb) { 40 printk(KERN_INFO "PCI-DMA: Using software bounce buffering for IO (SWIOTLB)\n"); 41 swiotlb_init(); 42 dma_ops = &swiotlb_dma_ops; 43 } 44} 45