]> git.karo-electronics.de Git - linux-beck.git/commitdiff
s390: Implement dma_{alloc,free}_attrs()
authorThierry Reding <treding@nvidia.com>
Mon, 25 Aug 2014 11:02:52 +0000 (13:02 +0200)
committerMarek Szyprowski <m.szyprowski@samsung.com>
Tue, 26 Aug 2014 05:39:12 +0000 (07:39 +0200)
The S390 architecture advertises support for HAVE_DMA_ATTRS when PCI is
enabled. Patches to unify some of the DMA API would like to rely on the
dma_alloc_attrs() and dma_free_attrs() functions to be provided when an
architecture supports DMA attributes.

Rename dma_alloc_coherent() and dma_free_coherent() to dma_alloc_attrs()
and dma_free_attrs() since they are functionally equivalent and alias
the former to the latter for compatibility.

For consistency with other architectures, also reuse the existing symbol
HAVE_DMA_ATTRS defined in arch/Kconfig instead of providing a duplicate.
Select it when PCI is enabled.

While at it, drop a redundant 'default n' from the PCI Kconfig symbol.

Signed-off-by: Thierry Reding <treding@nvidia.com>
Acked-By: Sebastian Ott <sebott@linux.vnet.ibm.com>
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
arch/s390/Kconfig
arch/s390/include/asm/dma-mapping.h

index ab39ceb89ecfa3e4b8e1b3eb34e3787aedbefeaa..fafeae01725ac0d08eb9363f03116b9f459d1f1c 100644 (file)
@@ -498,8 +498,8 @@ config QDIO
 
 menuconfig PCI
        bool "PCI support"
-       default n
        depends on 64BIT
+       select HAVE_DMA_ATTRS
        select PCI_MSI
        help
          Enable PCI support.
@@ -546,9 +546,6 @@ config HAS_DMA
 config NEED_SG_DMA_LENGTH
        def_bool PCI
 
-config HAVE_DMA_ATTRS
-       def_bool PCI
-
 config NEED_DMA_MAP_STATE
        def_bool PCI
 
index 3fbc67d9e19739edbf5be625a68c5f7e34153771..709955ddaa4deeb822715e24e3e24a149868ff10 100644 (file)
@@ -56,24 +56,35 @@ static inline int dma_mapping_error(struct device *dev, dma_addr_t dma_addr)
        return dma_addr == DMA_ERROR_CODE;
 }
 
-static inline void *dma_alloc_coherent(struct device *dev, size_t size,
-                                      dma_addr_t *dma_handle, gfp_t flag)
+#define dma_alloc_coherent(d, s, h, f) dma_alloc_attrs(d, s, h, f, NULL)
+
+static inline void *dma_alloc_attrs(struct device *dev, size_t size,
+                                   dma_addr_t *dma_handle, gfp_t flags,
+                                   struct dma_attrs *attrs)
 {
        struct dma_map_ops *ops = get_dma_ops(dev);
-       void *ret;
+       void *cpu_addr;
+
+       BUG_ON(!ops);
 
-       ret = ops->alloc(dev, size, dma_handle, flag, NULL);
-       debug_dma_alloc_coherent(dev, size, *dma_handle, ret);
-       return ret;
+       cpu_addr = ops->alloc(dev, size, dma_handle, flags, attrs);
+       debug_dma_alloc_coherent(dev, size, *dma_handle, cpu_addr);
+
+       return cpu_addr;
 }
 
-static inline void dma_free_coherent(struct device *dev, size_t size,
-                                    void *cpu_addr, dma_addr_t dma_handle)
+#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 *cpu_addr, dma_addr_t dma_handle,
+                                 struct dma_attrs *attrs)
 {
-       struct dma_map_ops *dma_ops = get_dma_ops(dev);
+       struct dma_map_ops *ops = get_dma_ops(dev);
+
+       BUG_ON(!ops);
 
        debug_dma_free_coherent(dev, size, cpu_addr, dma_handle);
-       dma_ops->free(dev, size, cpu_addr, dma_handle, NULL);
+       ops->free(dev, size, cpu_addr, dma_handle, attrs);
 }
 
 #endif /* _ASM_S390_DMA_MAPPING_H */