diff options
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/amba/bus.h | 2 | ||||
| -rw-r--r-- | include/linux/dma-mapping.h | 31 |
2 files changed, 31 insertions, 2 deletions
diff --git a/include/linux/amba/bus.h b/include/linux/amba/bus.h index 43ec7e247a80..682df0e1954a 100644 --- a/include/linux/amba/bus.h +++ b/include/linux/amba/bus.h | |||
| @@ -30,7 +30,6 @@ struct amba_device { | |||
| 30 | struct device dev; | 30 | struct device dev; |
| 31 | struct resource res; | 31 | struct resource res; |
| 32 | struct clk *pclk; | 32 | struct clk *pclk; |
| 33 | u64 dma_mask; | ||
| 34 | unsigned int periphid; | 33 | unsigned int periphid; |
| 35 | unsigned int irq[AMBA_NR_IRQS]; | 34 | unsigned int irq[AMBA_NR_IRQS]; |
| 36 | }; | 35 | }; |
| @@ -131,7 +130,6 @@ struct amba_device name##_device = { \ | |||
| 131 | struct amba_device name##_device = { \ | 130 | struct amba_device name##_device = { \ |
| 132 | .dev = __AMBA_DEV(busid, data, ~0ULL), \ | 131 | .dev = __AMBA_DEV(busid, data, ~0ULL), \ |
| 133 | .res = DEFINE_RES_MEM(base, SZ_4K), \ | 132 | .res = DEFINE_RES_MEM(base, SZ_4K), \ |
| 134 | .dma_mask = ~0ULL, \ | ||
| 135 | .irq = irqs, \ | 133 | .irq = irqs, \ |
| 136 | .periphid = id, \ | 134 | .periphid = id, \ |
| 137 | } | 135 | } |
diff --git a/include/linux/dma-mapping.h b/include/linux/dma-mapping.h index 3a8d0a2af607..fd4aee29ad10 100644 --- a/include/linux/dma-mapping.h +++ b/include/linux/dma-mapping.h | |||
| @@ -97,6 +97,30 @@ static inline int dma_set_coherent_mask(struct device *dev, u64 mask) | |||
| 97 | } | 97 | } |
| 98 | #endif | 98 | #endif |
| 99 | 99 | ||
| 100 | /* | ||
| 101 | * Set both the DMA mask and the coherent DMA mask to the same thing. | ||
| 102 | * Note that we don't check the return value from dma_set_coherent_mask() | ||
| 103 | * as the DMA API guarantees that the coherent DMA mask can be set to | ||
| 104 | * the same or smaller than the streaming DMA mask. | ||
| 105 | */ | ||
| 106 | static inline int dma_set_mask_and_coherent(struct device *dev, u64 mask) | ||
| 107 | { | ||
| 108 | int rc = dma_set_mask(dev, mask); | ||
| 109 | if (rc == 0) | ||
| 110 | dma_set_coherent_mask(dev, mask); | ||
| 111 | return rc; | ||
| 112 | } | ||
| 113 | |||
| 114 | /* | ||
| 115 | * Similar to the above, except it deals with the case where the device | ||
| 116 | * does not have dev->dma_mask appropriately setup. | ||
| 117 | */ | ||
| 118 | static inline int dma_coerce_mask_and_coherent(struct device *dev, u64 mask) | ||
| 119 | { | ||
| 120 | dev->dma_mask = &dev->coherent_dma_mask; | ||
| 121 | return dma_set_mask_and_coherent(dev, mask); | ||
| 122 | } | ||
| 123 | |||
| 100 | extern u64 dma_get_required_mask(struct device *dev); | 124 | extern u64 dma_get_required_mask(struct device *dev); |
| 101 | 125 | ||
| 102 | static inline unsigned int dma_get_max_seg_size(struct device *dev) | 126 | static inline unsigned int dma_get_max_seg_size(struct device *dev) |
| @@ -129,6 +153,13 @@ static inline int dma_set_seg_boundary(struct device *dev, unsigned long mask) | |||
| 129 | return -EIO; | 153 | return -EIO; |
| 130 | } | 154 | } |
| 131 | 155 | ||
| 156 | #ifndef dma_max_pfn | ||
| 157 | static inline unsigned long dma_max_pfn(struct device *dev) | ||
| 158 | { | ||
| 159 | return *dev->dma_mask >> PAGE_SHIFT; | ||
| 160 | } | ||
| 161 | #endif | ||
| 162 | |||
| 132 | static inline void *dma_zalloc_coherent(struct device *dev, size_t size, | 163 | static inline void *dma_zalloc_coherent(struct device *dev, size_t size, |
| 133 | dma_addr_t *dma_handle, gfp_t flag) | 164 | dma_addr_t *dma_handle, gfp_t flag) |
| 134 | { | 165 | { |
