Linux Audio

Check our new training course

Loading...
v3.1
 1/* Glue code to lib/swiotlb.c */
 2
 3#include <linux/pci.h>
 4#include <linux/gfp.h>
 5#include <linux/cache.h>
 6#include <linux/module.h>
 7#include <linux/dma-mapping.h>
 8
 9#include <asm/swiotlb.h>
10#include <asm/dma.h>
11#include <asm/iommu.h>
12#include <asm/machvec.h>
13
14int swiotlb __read_mostly;
15EXPORT_SYMBOL(swiotlb);
16
17static void *ia64_swiotlb_alloc_coherent(struct device *dev, size_t size,
18					 dma_addr_t *dma_handle, gfp_t gfp)
 
19{
20	if (dev->coherent_dma_mask != DMA_BIT_MASK(64))
21		gfp |= GFP_DMA;
22	return swiotlb_alloc_coherent(dev, size, dma_handle, gfp);
23}
24
 
 
 
 
 
 
 
25struct dma_map_ops swiotlb_dma_ops = {
26	.alloc_coherent = ia64_swiotlb_alloc_coherent,
27	.free_coherent = swiotlb_free_coherent,
28	.map_page = swiotlb_map_page,
29	.unmap_page = swiotlb_unmap_page,
30	.map_sg = swiotlb_map_sg_attrs,
31	.unmap_sg = swiotlb_unmap_sg_attrs,
32	.sync_single_for_cpu = swiotlb_sync_single_for_cpu,
33	.sync_single_for_device = swiotlb_sync_single_for_device,
34	.sync_sg_for_cpu = swiotlb_sync_sg_for_cpu,
35	.sync_sg_for_device = swiotlb_sync_sg_for_device,
36	.dma_supported = swiotlb_dma_supported,
37	.mapping_error = swiotlb_dma_mapping_error,
38};
39
40void __init swiotlb_dma_init(void)
41{
42	dma_ops = &swiotlb_dma_ops;
43	swiotlb_init(1);
44}
45
46void __init pci_swiotlb_init(void)
47{
48	if (!iommu_detected) {
49#ifdef CONFIG_IA64_GENERIC
50		swiotlb = 1;
51		printk(KERN_INFO "PCI-DMA: Re-initialize machine vector.\n");
52		machvec_init("dig");
53		swiotlb_init(1);
54		dma_ops = &swiotlb_dma_ops;
55#else
56		panic("Unable to find Intel IOMMU");
57#endif
58	}
59}
v4.6
 1/* Glue code to lib/swiotlb.c */
 2
 3#include <linux/pci.h>
 4#include <linux/gfp.h>
 5#include <linux/cache.h>
 6#include <linux/module.h>
 7#include <linux/dma-mapping.h>
 8
 9#include <asm/swiotlb.h>
10#include <asm/dma.h>
11#include <asm/iommu.h>
12#include <asm/machvec.h>
13
14int swiotlb __read_mostly;
15EXPORT_SYMBOL(swiotlb);
16
17static void *ia64_swiotlb_alloc_coherent(struct device *dev, size_t size,
18					 dma_addr_t *dma_handle, gfp_t gfp,
19					 struct dma_attrs *attrs)
20{
21	if (dev->coherent_dma_mask != DMA_BIT_MASK(64))
22		gfp |= GFP_DMA;
23	return swiotlb_alloc_coherent(dev, size, dma_handle, gfp);
24}
25
26static void ia64_swiotlb_free_coherent(struct device *dev, size_t size,
27				       void *vaddr, dma_addr_t dma_addr,
28				       struct dma_attrs *attrs)
29{
30	swiotlb_free_coherent(dev, size, vaddr, dma_addr);
31}
32
33struct dma_map_ops swiotlb_dma_ops = {
34	.alloc = ia64_swiotlb_alloc_coherent,
35	.free = ia64_swiotlb_free_coherent,
36	.map_page = swiotlb_map_page,
37	.unmap_page = swiotlb_unmap_page,
38	.map_sg = swiotlb_map_sg_attrs,
39	.unmap_sg = swiotlb_unmap_sg_attrs,
40	.sync_single_for_cpu = swiotlb_sync_single_for_cpu,
41	.sync_single_for_device = swiotlb_sync_single_for_device,
42	.sync_sg_for_cpu = swiotlb_sync_sg_for_cpu,
43	.sync_sg_for_device = swiotlb_sync_sg_for_device,
44	.dma_supported = swiotlb_dma_supported,
45	.mapping_error = swiotlb_dma_mapping_error,
46};
47
48void __init swiotlb_dma_init(void)
49{
50	dma_ops = &swiotlb_dma_ops;
51	swiotlb_init(1);
52}
53
54void __init pci_swiotlb_init(void)
55{
56	if (!iommu_detected) {
57#ifdef CONFIG_IA64_GENERIC
58		swiotlb = 1;
59		printk(KERN_INFO "PCI-DMA: Re-initialize machine vector.\n");
60		machvec_init("dig");
61		swiotlb_init(1);
62		dma_ops = &swiotlb_dma_ops;
63#else
64		panic("Unable to find Intel IOMMU");
65#endif
66	}
67}