]> git.proxmox.com Git - mirror_ubuntu-zesty-kernel.git/blame - arch/x86/kernel/pci-swiotlb.c
x86: remove unnecessary sync_single_range_* in swiotlb_dma_ops
[mirror_ubuntu-zesty-kernel.git] / arch / x86 / kernel / pci-swiotlb.c
CommitLineData
17a941d8
MBY
1/* Glue code to lib/swiotlb.c */
2
3#include <linux/pci.h>
4#include <linux/cache.h>
5#include <linux/module.h>
8ce79960
JF
6#include <linux/swiotlb.h>
7#include <linux/bootmem.h>
d6bd3a39
REB
8#include <linux/dma-mapping.h>
9
46a7fa27 10#include <asm/iommu.h>
17a941d8
MBY
11#include <asm/swiotlb.h>
12#include <asm/dma.h>
13
14int swiotlb __read_mostly;
17a941d8 15
03967c52
FT
16static void *x86_swiotlb_alloc_coherent(struct device *hwdev, size_t size,
17 dma_addr_t *dma_handle, gfp_t flags)
18{
19 void *vaddr;
20
21 vaddr = dma_generic_alloc_coherent(hwdev, size, dma_handle, flags);
22 if (vaddr)
23 return vaddr;
24
25 return swiotlb_alloc_coherent(hwdev, size, dma_handle, flags);
26}
27
ff6c6fed 28static struct dma_map_ops swiotlb_dma_ops = {
17a941d8 29 .mapping_error = swiotlb_dma_mapping_error,
03967c52 30 .alloc_coherent = x86_swiotlb_alloc_coherent,
17a941d8 31 .free_coherent = swiotlb_free_coherent,
17a941d8
MBY
32 .sync_single_for_cpu = swiotlb_sync_single_for_cpu,
33 .sync_single_for_device = swiotlb_sync_single_for_device,
17a941d8
MBY
34 .sync_sg_for_cpu = swiotlb_sync_sg_for_cpu,
35 .sync_sg_for_device = swiotlb_sync_sg_for_device,
160c1d8e
FT
36 .map_sg = swiotlb_map_sg_attrs,
37 .unmap_sg = swiotlb_unmap_sg_attrs,
4cf37bb7
FT
38 .map_page = swiotlb_map_page,
39 .unmap_page = swiotlb_unmap_page,
17a941d8
MBY
40 .dma_supported = NULL,
41};
42
b18485e7 43/*
186a2502 44 * pci_swiotlb_detect - set swiotlb to 1 if necessary
b18485e7
FT
45 *
46 * This returns non-zero if we are forced to use swiotlb (by the boot
47 * option).
48 */
186a2502 49int __init pci_swiotlb_detect(void)
17a941d8 50{
273bee27
FT
51 int use_swiotlb = swiotlb | swiotlb_force;
52
17a941d8 53 /* don't initialize swiotlb if iommu=off (no_iommu=1) */
cfb80c9e 54#ifdef CONFIG_X86_64
75f1cdf1 55 if (!no_iommu && max_pfn > MAX_DMA32_PFN)
19943b0e 56 swiotlb = 1;
cfb80c9e 57#endif
b18485e7
FT
58 if (swiotlb_force)
59 swiotlb = 1;
60
186a2502
FT
61 return use_swiotlb;
62}
63
64void __init pci_swiotlb_init(void)
65{
17a941d8 66 if (swiotlb) {
ad32e8cb 67 swiotlb_init(0);
17a941d8 68 dma_ops = &swiotlb_dma_ops;
a3b28ee1 69 }
17a941d8 70}