]>
Commit | Line | Data |
---|---|---|
62fdd767 FY |
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/swiotlb.h> | |
9 | #include <asm/dma.h> | |
10 | #include <asm/iommu.h> | |
11 | #include <asm/machvec.h> | |
12 | ||
13 | int swiotlb __read_mostly; | |
14 | EXPORT_SYMBOL(swiotlb); | |
15 | ||
97d9800d FT |
16 | static void *ia64_swiotlb_alloc_coherent(struct device *dev, size_t size, |
17 | dma_addr_t *dma_handle, gfp_t gfp) | |
18 | { | |
e930438c | 19 | if (dev->coherent_dma_mask != DMA_BIT_MASK(64)) |
97d9800d FT |
20 | gfp |= GFP_DMA; |
21 | return swiotlb_alloc_coherent(dev, size, dma_handle, gfp); | |
22 | } | |
23 | ||
160c1d8e | 24 | struct dma_map_ops swiotlb_dma_ops = { |
97d9800d | 25 | .alloc_coherent = ia64_swiotlb_alloc_coherent, |
62fdd767 | 26 | .free_coherent = swiotlb_free_coherent, |
160c1d8e FT |
27 | .map_page = swiotlb_map_page, |
28 | .unmap_page = swiotlb_unmap_page, | |
29 | .map_sg = swiotlb_map_sg_attrs, | |
30 | .unmap_sg = swiotlb_unmap_sg_attrs, | |
62fdd767 FY |
31 | .sync_single_for_cpu = swiotlb_sync_single_for_cpu, |
32 | .sync_single_for_device = swiotlb_sync_single_for_device, | |
33 | .sync_single_range_for_cpu = swiotlb_sync_single_range_for_cpu, | |
34 | .sync_single_range_for_device = swiotlb_sync_single_range_for_device, | |
35 | .sync_sg_for_cpu = swiotlb_sync_sg_for_cpu, | |
36 | .sync_sg_for_device = swiotlb_sync_sg_for_device, | |
160c1d8e | 37 | .dma_supported = swiotlb_dma_supported, |
c82e4417 | 38 | .mapping_error = swiotlb_dma_mapping_error, |
62fdd767 FY |
39 | }; |
40 | ||
07716e4d | 41 | void __init swiotlb_dma_init(void) |
4d9b977c FT |
42 | { |
43 | dma_ops = &swiotlb_dma_ops; | |
44 | swiotlb_init(); | |
45 | } | |
46 | ||
62fdd767 FY |
47 | void __init pci_swiotlb_init(void) |
48 | { | |
ba6c5487 | 49 | if (!iommu_detected) { |
62fdd767 FY |
50 | #ifdef CONFIG_IA64_GENERIC |
51 | swiotlb = 1; | |
52 | printk(KERN_INFO "PCI-DMA: Re-initialize machine vector.\n"); | |
53 | machvec_init("dig"); | |
54 | swiotlb_init(); | |
55 | dma_ops = &swiotlb_dma_ops; | |
56 | #else | |
57 | panic("Unable to find Intel IOMMU"); | |
58 | #endif | |
59 | } | |
60 | } |