|
@@ -59,7 +59,8 @@ extern int dma_supported(struct device *hwdev, u64 mask);
|
|
|
extern int dma_set_mask(struct device *dev, u64 mask);
|
|
|
|
|
|
extern void *dma_generic_alloc_coherent(struct device *dev, size_t size,
|
|
|
- dma_addr_t *dma_addr, gfp_t flag);
|
|
|
+ dma_addr_t *dma_addr, gfp_t flag,
|
|
|
+ struct dma_attrs *attrs);
|
|
|
|
|
|
static inline bool dma_capable(struct device *dev, dma_addr_t addr, size_t size)
|
|
|
{
|
|
@@ -111,9 +112,11 @@ static inline gfp_t dma_alloc_coherent_gfp_flags(struct device *dev, gfp_t gfp)
|
|
|
return gfp;
|
|
|
}
|
|
|
|
|
|
+#define dma_alloc_coherent(d,s,h,f) dma_alloc_attrs(d,s,h,f,NULL)
|
|
|
+
|
|
|
static inline void *
|
|
|
-dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle,
|
|
|
- gfp_t gfp)
|
|
|
+dma_alloc_attrs(struct device *dev, size_t size, dma_addr_t *dma_handle,
|
|
|
+ gfp_t gfp, struct dma_attrs *attrs)
|
|
|
{
|
|
|
struct dma_map_ops *ops = get_dma_ops(dev);
|
|
|
void *memory;
|
|
@@ -129,18 +132,21 @@ dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle,
|
|
|
if (!is_device_dma_capable(dev))
|
|
|
return NULL;
|
|
|
|
|
|
- if (!ops->alloc_coherent)
|
|
|
+ if (!ops->alloc)
|
|
|
return NULL;
|
|
|
|
|
|
- memory = ops->alloc_coherent(dev, size, dma_handle,
|
|
|
- dma_alloc_coherent_gfp_flags(dev, gfp));
|
|
|
+ memory = ops->alloc(dev, size, dma_handle,
|
|
|
+ dma_alloc_coherent_gfp_flags(dev, gfp), attrs);
|
|
|
debug_dma_alloc_coherent(dev, size, *dma_handle, memory);
|
|
|
|
|
|
return memory;
|
|
|
}
|
|
|
|
|
|
-static inline void dma_free_coherent(struct device *dev, size_t size,
|
|
|
- void *vaddr, dma_addr_t bus)
|
|
|
+#define dma_free_coherent(d,s,c,h) dma_free_attrs(d,s,c,h,NULL)
|
|
|
+
|
|
|
+static inline void dma_free_attrs(struct device *dev, size_t size,
|
|
|
+ void *vaddr, dma_addr_t bus,
|
|
|
+ struct dma_attrs *attrs)
|
|
|
{
|
|
|
struct dma_map_ops *ops = get_dma_ops(dev);
|
|
|
|
|
@@ -150,8 +156,8 @@ static inline void dma_free_coherent(struct device *dev, size_t size,
|
|
|
return;
|
|
|
|
|
|
debug_dma_free_coherent(dev, size, vaddr, bus);
|
|
|
- if (ops->free_coherent)
|
|
|
- ops->free_coherent(dev, size, vaddr, bus);
|
|
|
+ if (ops->free)
|
|
|
+ ops->free(dev, size, vaddr, bus, attrs);
|
|
|
}
|
|
|
|
|
|
#endif
|