Branch data Line data Source code
1 : : /* SPDX-License-Identifier: GPL-2.0 */
2 : : /* include this file if the platform implements the dma_ DMA Mapping API
3 : : * and wants to provide the pci_ DMA Mapping API in terms of it */
4 : :
5 : : #ifndef _ASM_GENERIC_PCI_DMA_COMPAT_H
6 : : #define _ASM_GENERIC_PCI_DMA_COMPAT_H
7 : :
8 : : #include <linux/dma-mapping.h>
9 : :
10 : : /* This defines the direction arg to the DMA mapping routines. */
11 : : #define PCI_DMA_BIDIRECTIONAL DMA_BIDIRECTIONAL
12 : : #define PCI_DMA_TODEVICE DMA_TO_DEVICE
13 : : #define PCI_DMA_FROMDEVICE DMA_FROM_DEVICE
14 : : #define PCI_DMA_NONE DMA_NONE
15 : :
16 : : static inline void *
17 : 0 : pci_alloc_consistent(struct pci_dev *hwdev, size_t size,
18 : : dma_addr_t *dma_handle)
19 : : {
20 : 0 : return dma_alloc_coherent(&hwdev->dev, size, dma_handle, GFP_ATOMIC);
21 : : }
22 : :
23 : : static inline void *
24 : 0 : pci_zalloc_consistent(struct pci_dev *hwdev, size_t size,
25 : : dma_addr_t *dma_handle)
26 : : {
27 : 0 : return dma_alloc_coherent(&hwdev->dev, size, dma_handle, GFP_ATOMIC);
28 : : }
29 : :
30 : : static inline void
31 : 0 : pci_free_consistent(struct pci_dev *hwdev, size_t size,
32 : : void *vaddr, dma_addr_t dma_handle)
33 : : {
34 : 0 : dma_free_coherent(&hwdev->dev, size, vaddr, dma_handle);
35 : 0 : }
36 : :
37 : : static inline dma_addr_t
38 : 0 : pci_map_single(struct pci_dev *hwdev, void *ptr, size_t size, int direction)
39 : : {
40 : 0 : return dma_map_single(&hwdev->dev, ptr, size, (enum dma_data_direction)direction);
41 : : }
42 : :
43 : : static inline void
44 : 0 : pci_unmap_single(struct pci_dev *hwdev, dma_addr_t dma_addr,
45 : : size_t size, int direction)
46 : : {
47 : 0 : dma_unmap_single(&hwdev->dev, dma_addr, size, (enum dma_data_direction)direction);
48 : 0 : }
49 : :
50 : : static inline dma_addr_t
51 : 0 : pci_map_page(struct pci_dev *hwdev, struct page *page,
52 : : unsigned long offset, size_t size, int direction)
53 : : {
54 : 0 : return dma_map_page(&hwdev->dev, page, offset, size, (enum dma_data_direction)direction);
55 : : }
56 : :
57 : : static inline void
58 : 0 : pci_unmap_page(struct pci_dev *hwdev, dma_addr_t dma_address,
59 : : size_t size, int direction)
60 : : {
61 : 0 : dma_unmap_page(&hwdev->dev, dma_address, size, (enum dma_data_direction)direction);
62 : 0 : }
63 : :
64 : : static inline int
65 : 0 : pci_map_sg(struct pci_dev *hwdev, struct scatterlist *sg,
66 : : int nents, int direction)
67 : : {
68 : 0 : return dma_map_sg(&hwdev->dev, sg, nents, (enum dma_data_direction)direction);
69 : : }
70 : :
71 : : static inline void
72 : 0 : pci_unmap_sg(struct pci_dev *hwdev, struct scatterlist *sg,
73 : : int nents, int direction)
74 : : {
75 : 0 : dma_unmap_sg(&hwdev->dev, sg, nents, (enum dma_data_direction)direction);
76 : : }
77 : :
78 : : static inline void
79 : 0 : pci_dma_sync_single_for_cpu(struct pci_dev *hwdev, dma_addr_t dma_handle,
80 : : size_t size, int direction)
81 : : {
82 : 0 : dma_sync_single_for_cpu(&hwdev->dev, dma_handle, size, (enum dma_data_direction)direction);
83 : : }
84 : :
85 : : static inline void
86 : 0 : pci_dma_sync_single_for_device(struct pci_dev *hwdev, dma_addr_t dma_handle,
87 : : size_t size, int direction)
88 : : {
89 : 0 : dma_sync_single_for_device(&hwdev->dev, dma_handle, size, (enum dma_data_direction)direction);
90 : 0 : }
91 : :
92 : : static inline void
93 : : pci_dma_sync_sg_for_cpu(struct pci_dev *hwdev, struct scatterlist *sg,
94 : : int nelems, int direction)
95 : : {
96 : : dma_sync_sg_for_cpu(&hwdev->dev, sg, nelems, (enum dma_data_direction)direction);
97 : : }
98 : :
99 : : static inline void
100 : : pci_dma_sync_sg_for_device(struct pci_dev *hwdev, struct scatterlist *sg,
101 : : int nelems, int direction)
102 : : {
103 : : dma_sync_sg_for_device(&hwdev->dev, sg, nelems, (enum dma_data_direction)direction);
104 : : }
105 : :
106 : : static inline int
107 : 0 : pci_dma_mapping_error(struct pci_dev *pdev, dma_addr_t dma_addr)
108 : : {
109 : 0 : return dma_mapping_error(&pdev->dev, dma_addr);
110 : : }
111 : :
112 : : #ifdef CONFIG_PCI
113 : 30 : static inline int pci_set_dma_mask(struct pci_dev *dev, u64 mask)
114 : : {
115 : 30 : return dma_set_mask(&dev->dev, mask);
116 : : }
117 : :
118 : 30 : static inline int pci_set_consistent_dma_mask(struct pci_dev *dev, u64 mask)
119 : : {
120 : 30 : return dma_set_coherent_mask(&dev->dev, mask);
121 : : }
122 : : #else
123 : : static inline int pci_set_dma_mask(struct pci_dev *dev, u64 mask)
124 : : { return -EIO; }
125 : : static inline int pci_set_consistent_dma_mask(struct pci_dev *dev, u64 mask)
126 : : { return -EIO; }
127 : : #endif
128 : :
129 : : #endif
|